1F31:0000 8CD8 MOV



/* Loader */

; this segment starts at 081d paragraphs relative to start of exec

; start point - 0000

; set es = ax = psp segment

1F31:0000 8CD8 MOV AX,DS

1F31:0002 8EC0 MOV ES,AX

; ax += 1b48 (new start of stack segment)

1F31:0004 05481B ADD AX,1B48

; set ss:sp = (psp+1b48):0800

; (ss begins at 1b38 from start of exec)

1F31:0007 8ED0 MOV SS,AX

1F31:0009 BC0008 MOV SP,0800

; ax -= 140a (072e paragraphs from start of exec)

1F31:000C 2D0A14 SUB AX,140A

; push seg address onto stack

1F31:000F 50 PUSH AX

; push offset address 0322 onto stack

1F31:0010 B82203 MOV AX,0322

1F31:0013 50 PUSH AX

; clear ax,bx,cx,dx,bp,si,di

1F31:0014 31C0 XOR AX,AX

1F31:0016 89C3 MOV BX,AX

1F31:0018 89C1 MOV CX,AX

1F31:001A 89C2 MOV DX,AX

1F31:001C 89C5 MOV BP,AX

1F31:001E 89C6 MOV SI,AX

1F31:0020 89C7 MOV DI,AX

; return far to (start+072e):0322

1F31:0022 CB RETF

/* second loader */

; this segment starts at 072e paragraphs relative to start of exec

1E42:0000 F9 STC

1E42:0001 C3 RET

; 0002-0009 = zeroes

; set_int(al, ds:dx) - 0010

{

1E42:0010 B425 MOV AH,25

1E42:0012 CD21 INT 21

1E42:0014 C3 RET

}

; get_int(al) - 0015

{

1E42:0015 B435 MOV AH,35

1E42:0017 CD21 INT 21

1E42:0019 C3 RET

; returns interrupt vector in es:bx

}

; set_new_int_vector(al, ds:dx) - 001a

{

; get_int(al)

1E42:001A E8F8FF CALL 0015

; set_int(al, ds:dx)

1E42:001D E8F0FF CALL 0010

1E42:0020 C3 RET

; returns previous interrupt vector in es:bx

}

; 0021

{

1E42:0021 33D2 XOR DX,DX

1E42:0023 D1E0 SHL AX,1

1E42:0025 D1D2 RCL DX,1

1E42:0027 FEC9 DEC CL

1E42:0029 75F8 JNZ 0023

1E42:002B C3 RET

}

; 002c

{

1E42:002C D1EA SHR DX,1

1E42:002E D1D8 RCR AX,1

1E42:0030 FEC9 DEC CL

1E42:0032 75F8 JNZ 002C

1E42:0034 C3 RET

}

reset_file_info(di) - 0035

{

; di = requested file #

; clear si

1E42:0035 33F6 XOR SI,SI

; this loops through file entries

{

; get info from file entry

1E42:0037 26 ES:

1E42:0038 8B8C0600 MOV CX,[SI+0006]

; if info + 1 == 0 (end of table), return at 006d

1E42:003C 41 INC CX

1E42:003D 742E JZ 006D

; set dx = seg1 of current file

1E42:003F 26 ES:

1E42:0040 8B940A00 MOV DX,[SI+000A]

; set ax = seg1 of requested file

1E42:0044 26 ES:

1E42:0045 8B850A00 MOV AX,[DI+000A]

; if seg1 of requested file (ax) >= seg1 of current file (dx), jump to 0058

; (why not use a compare ???)

1E42:0049 50 PUSH AX

1E42:004A 2BC2 SUB AX,DX

1E42:004C 58 POP AX

1E42:004D 7309 JNB 0058

; set ax = seg1 of current file (dx)

1E42:004F 8BC2 MOV AX,DX

; set dx = seg2 of requested file

1E42:0051 26 ES:

1E42:0052 8B950C00 MOV DX,[DI+000C]

; jump to 005d

1E42:0056 EB05 JMP 005D

; set dx = seg2 of current file

1E42:0058 26 ES:

1E42:0059 8B940C00 MOV DX,[SI+000C]

; if seg1 of req/cur >= seg2 of cur/req, jump to 0068

1E42:005D 2BC2 SUB AX,DX

1E42:005F 7307 JNB 0068

; turn off bit 15 of file info

1E42:0061 26 ES:

1E42:0062 81A40600FF7F AND WORD PTR [SI+0006],7FFF

; advance to next file entry

1E42:0068 83C610 ADD SI,+10

; loop back!

1E42:006B EBCA JMP 0037

}

; return

1E42:006D C3 RET

}

; psp segment address

1E42:006E 0000

cs:do_nothing() - 0070

{

1E42:0070 CB RETF

}

cs:int_24() - 0071

{

1E42:0071 8BEC MOV BP,SP

1E42:0073 C7460EFFFF MOV WORD PTR [BP+0E],FFFF

1E42:0078 B000 MOV AL,00

1E42:007A CF IRET

}

cs:close_file() 007b

{

; store

1E42:007B 1E PUSH DS

1E42:007C 53 PUSH BX

; set ds = cs+003e (076c from start of exec)

1E42:007D BB801E MOV BX,1E80

1E42:0080 8EDB MOV DS,BX

; if *008c is clear (file closed), return at 009c

1E42:0082 F7068C00FFFF TEST WORD PTR [008C],FFFF

1E42:0088 7412 JZ 009C

; store ax before interrupt

1E42:008A 50 PUSH AX

; set bx = file handle

1E42:008B 8B1E0200 MOV BX,[0002]

; store dx before interrupt

1E42:008F 52 PUSH DX

; close file

1E42:0090 B43E MOV AH,3E

1E42:0092 CD21 INT 21

; restore dx,ax after interrupt

1E42:0094 5A POP DX

1E42:0095 58 POP AX

; clear 008c (file closed)

1E42:0096 C7068C000000 MOV WORD PTR [008C],0000

; restore & return

1E42:009C 5B POP BX

1E42:009D 1F POP DS

1E42:009E CB RETF

}

open_file(al, di) - 009f

{

; al = error condition (should be 00 to do something useful)

; di = file entry paragraph

; set bx = *008c (file status)

1E42:009F 8B1E8C00 MOV BX,[008C]

; if al != 0, jump to 00af

1E42:00A3 0AC0 OR AL,AL

1E42:00A5 7508 JNZ 00AF

; if filename address != *008c, jump to 00af

1E42:00A7 26 ES:

1E42:00A8 3B9D0E00 CMP BX,[DI+000E]

1E42:00AC 7501 JNZ 00AF

; otherwise, return

1E42:00AE C3 RET

; far call cs:close_file()

1E42:00AF 9A7B00421E CALL 1E42:007B

; get address to filename

1E42:00B4 26 ES:

1E42:00B5 8B9D0E00 MOV BX,[DI+000E]

; store filename address in *008e

1E42:00B9 891E8E00 MOV [008E],BX

; this copies the filename to a local var

; store ax

1E42:00BD 50 PUSH AX

; set si = filename address

1E42:00BE 8B368E00 MOV SI,[008E]

; set di = 0092

1E42:00C2 BF9200 MOV DI,0092

; copies filename to local buffer

{

; read byte from address

1E42:00C5 26 ES:

1E42:00C6 AC LODSB

; equiv to stosb, writes byte to es:di

1E42:00C7 8805 MOV [DI],AL

1E42:00C9 47 INC DI

; if byte != 0 (end of string), jump to 00c5

1E42:00CA 0AC0 OR AL,AL

1E42:00CC 75F7 JNZ 00C5

}

; restore ax

1E42:00CE 58 POP AX

; this checks our error condition

; store es before call

1E42:00CF 06 PUSH ES

; set es = ds

1E42:00D0 1E PUSH DS

1E42:00D1 07 POP ES

; call print_error_message(al)

1E42:00D2 E8DB02 CALL 03B0

; restore es after call

1E42:00D5 07 POP ES

; if return == 0 (indicates success), jump to 00dc

1E42:00D6 0AC0 OR AL,AL

1E42:00D8 7402 JZ 00DC

; otherwise, set carry (indicates failure) and return

1E42:00DA F9 STC

1E42:00DB C3 RET

; this actually does the work - it opens our file

; set access mode = 00 (read only)

1E42:00DC A00100 MOV AL,[0001]

; clear si

1E42:00DF 33F6 XOR SI,SI

; store dx before interrupt

1E42:00E1 52 PUSH DX

; open file w/ name at 0092

1E42:00E2 B43D MOV AH,3D

1E42:00E4 BA9200 MOV DX,0092

1E42:00E7 CD21 INT 21

; restore dx after interrupt

1E42:00E9 5A POP DX

; if error, jump to 00f0

1E42:00EA 7204 JB 00F0

; store filehandle in ds:0002

1E42:00EC A30200 MOV [0002],AX

; return

1E42:00EF C3 RET

; we get here on open error

; set error code = 01

1E42:00F0 B001 MOV AL,01

; if si == 0, jump to 00f8

1E42:00F2 0BF6 OR SI,SI

1E42:00F4 7402 JZ 00F8

; set error code = 02

1E42:00F6 FEC0 INC AL

; jump to 00bd (will error out now that error condition is set)

1E42:00F8 EBC3 JMP 00BD

}

seek_through_file(dx) - 00fa

{

; dx = # of paragraphs to offset by

; set bx = initial offset in paragraphs

1E42:00FA 26 ES:

1E42:00FB 8B9D1000 MOV BX,[DI+0010]

; bx += dx

1E42:00FF 03DA ADD BX,DX

; set ax = initial segment in 0x10 paragraphs

1E42:0101 26 ES:

1E42:0102 8B851200 MOV AX,[DI+0012]

; ax += carry (makes sure segment moves forward if offset carries)

1E42:0106 150000 ADC AX,0000

; loop 4 times

1E42:0109 B90400 MOV CX,0004

; this loop converts init offset to bytes and init segment to paragraphs,

; advancing segment when offset carries

{

; bx *= 2

1E42:010C D1E3 SHL BX,1

; ax *= 2, + carry

1E42:010E D1D0 RCL AX,1

; loop back!

1E42:0110 E2FA LOOP 010C

}

; set cx = seg from file origin

1E42:0112 8BC8 MOV CX,AX

; set dx = offset from file origin

1E42:0114 8BD3 MOV DX,BX

; set bx = file handle

1E42:0116 8B1E0200 MOV BX,[0002]

; seek from start of file

1E42:011A B000 MOV AL,00

; store dx before interrupt

1E42:011C 52 PUSH DX

; lseek through file

1E42:011D B442 MOV AH,42

1E42:011F CD21 INT 21

; restore dx after interrupt

1E42:0121 5A POP DX

; return

1E42:0122 C3 RET

}

read_file(ax=seg, cx=size, dx=off) - 0123

{

; ax = segment to read into

; cx = size in paragraphs

; dx = offset for data

; store ax (segment for data), dx (offset for data)

1E42:0123 50 PUSH AX

1E42:0124 52 PUSH DX

; ax *= 10 (converts paragraphs to bytes)

1E42:0125 B81000 MOV AX,0010

1E42:0128 F7E1 MUL CX

; ax /= fff0 (this tests if file size populates an entire segment)

1E42:012A B9F0FF MOV CX,FFF0

1E42:012D F7F1 DIV CX

; set cx = remainder from divide (this should be size in bytes)

1E42:012F 8BCA MOV CX,DX

; restore dx (offset for data), bx (segment for data)

1E42:0131 5A POP DX

1E42:0132 5B POP BX

; if ax != 0 (file size populates an entire segment), jump to 0140

1E42:0133 0BC0 OR AX,AX

1E42:0135 7509 JNZ 0140

; else if cx != 0 (remainder), jump to

1E42:0137 0BC9 OR CX,CX

1E42:0139 7501 JNZ 013C

; otherwise (file size 0), return

1E42:013B C3 RET

; store ax twice (should be 0 from div)

1E42:013C 50 PUSH AX

1E42:013D 50 PUSH AX

; jump to 0146

1E42:013E EB06 JMP 0146

; decrement ax back to 0

1E42:0140 48 DEC AX

; store ax (00), cx (remainder, which should be 0)

1E42:0141 50 PUSH AX

1E42:0142 51 PUSH CX

; set file size (in bytes) = fff0 (entire segment)

1E42:0143 B9F0FF MOV CX,FFF0

; store dx (offset for data), bx (segment for data)

1E42:0146 52 PUSH DX

1E42:0147 53 PUSH BX

; set ax = file handle

1E42:0148 A10200 MOV AX,[0002]

; store cx (file size), ds (data seg)

1E42:014B 51 PUSH CX

1E42:014C 1E PUSH DS

; set ds = segment for data

1E42:014D 8EDB MOV DS,BX

; set bx = file handle

1E42:014F 8BD8 MOV BX,AX

; clear si

1E42:0151 33F6 XOR SI,SI

; store dx before interrupt

1E42:0153 52 PUSH DX

; reads cx bytes from file handle bx into ds:dx

1E42:0154 B43F MOV AH,3F

1E42:0156 CD21 INT 21

; restore dx after interrupt

1E42:0158 5A POP DX

; restore ds (data seg), cx (file size)

1E42:0159 1F POP DS

1E42:015A 59 POP CX

; if error on read, jump to 0165

1E42:015B 7208 JB 0165

; if si != 0, jump to 0165 (what does this do?)

1E42:015D 0BF6 OR SI,SI

1E42:015F 7504 JNZ 0165

; if bytes read (ax) == bytes of data to read (cx), jump to 0168

1E42:0161 3BC1 CMP AX,CX

1E42:0163 7403 JZ 0168

; set carry (indicates error)

1E42:0165 F9 STC

; jump to 0169

1E42:0166 EB01 JMP 0169

; clear carry (indicates success)

1E42:0168 F8 CLC

; restore bx (segment for data), dx (offset for data), cx (clear), ax (clear)

1E42:0169 5B POP BX

1E42:016A 5A POP DX

1E42:016B 59 POP CX

1E42:016C 58 POP AX

; if error occurred, jump to 0175

1E42:016D 7206 JB 0175

; bx += 0fff (next full segment)

1E42:016F 81C3FF0F ADD BX,0FFF

; jump back to 0133 (since ax,cx == 00, we should return)

1E42:0173 EBBE JMP 0133

; set al = 03 (error code ?)

1E42:0175 B003 MOV AL,03

; if si != 0, jump to 017d

1E42:0177 0BF6 OR SI,SI

1E42:0179 7402 JZ 017D

; set al = 04 (error code ?)

1E42:017B FEC0 INC AL

; return with carry (indicates error)

1E42:017D F9 STC

1E42:017E C3 RET

; returns:

; bx = seg address of next full seg

; carry flag set on error, clear on success

}

; string data

DATA 017f-01c0: Copyright (C) 1984, 1985, 1986 Phoenix Software Associates Ltd.

load_file(di=file) - 01c1

{

; di = file entry paragraph

; store ds before call

1E42:01C1 1E PUSH DS

; set_new_int_vector(24, cs:0071)

1E42:01C2 B024 MOV AL,24

1E42:01C4 0E PUSH CS

1E42:01C5 1F POP DS

1E42:01C6 BA7100 MOV DX,0071

1E42:01C9 E84EFE CALL 001A

; restore ds after call

1E42:01CC 1F POP DS

; store old interrupt vector

1E42:01CD 53 PUSH BX

1E42:01CE 06 PUSH ES

; set es = cs+004a (0778 from start of exec)

1E42:01CF B88C1E MOV AX,1E8C

1E42:01D2 8EC0 MOV ES,AX

; set al = 00

1E42:01D4 B000 MOV AL,00

; store di before call

1E42:01D6 57 PUSH DI

; call open_file(00, di)

1E42:01D7 E8C5FE CALL 009F

; restore di after call

1E42:01DA 5F POP DI

; if no error in open, jump to 01e0

1E42:01DB 7303 JNB 01E0

; otherwise (failure), prepare for return at 0235

1E42:01DD EB56 JMP 0235

1E42:01DF 90 NOP

; set *008c = address of filename

1E42:01E0 53 PUSH BX

1E42:01E1 26 ES:

1E42:01E2 8B9D0E00 MOV BX,[DI+000E]

1E42:01E6 891E8C00 MOV [008C],BX

1E42:01EA 5B POP BX

; set dx = # of addresses in the file header

1E42:01EB 26 ES:

1E42:01EC 8B950800 MOV DX,[DI+0008]

; dx = (dx + 3) / 4 (calculate size of header in paragraphs)

; each address is a dword, yielding 4 per paragraph,

; since at most 3 addresses can be free in order to fill a paragraph,

; adding 3 to the # of addrs will get that paragraph counted

1E42:01F0 83C203 ADD DX,+03

1E42:01F3 D1EA SHR DX,1

1E42:01F5 D1EA SHR DX,1

; call seek_through_file(dx)

1E42:01F7 E800FF CALL 00FA

; set cx = data size

1E42:01FA 26 ES:

1E42:01FB 8B8D1400 MOV CX,[DI+0014]

; set ax = seg2 - seg1

1E42:01FF 26 ES:

1E42:0200 8B850C00 MOV AX,[DI+000C]

1E42:0204 26 ES:

1E42:0205 2B850A00 SUB AX,[DI+000A]

; if seg difference >= data size, jump to 020f

1E42:0209 3BC1 CMP AX,CX

1E42:020B 7302 JNB 020F

; otherwise (seg difference < data size), set cx = seg difference

1E42:020D 8BC8 MOV CX,AX

; set ax = seg1

1E42:020F 26 ES:

1E42:0210 8B850A00 MOV AX,[DI+000A]

; clear dx

1E42:0214 33D2 XOR DX,DX

; call read_file(ax, cx, 0000)

1E42:0216 E80AFF CALL 0123

; if error on read, jump back to open at 01d6

1E42:0219 72BB JB 01D6

; call seek_through_file(dx)

1E42:021B 33D2 XOR DX,DX

1E42:021D E8DAFE CALL 00FA

; set cx = # of addresses in header

1E42:0220 26 ES:

1E42:0221 8B8D0800 MOV CX,[DI+0008]

; clear bx

1E42:0225 33DB XOR BX,BX

; if second element == 0, prepare to return at 0235

1E42:0227 E30C JCXZ 0235

; set dx = start of exec

1E42:0229 26 ES:

1E42:022A 8B160000 MOV DX,[0000]

; store es before call

1E42:022E 06 PUSH ES

; call process_header(0000, #addr, cs2)

1E42:022F E81400 CALL 0246

; restore es after call

1E42:0232 07 POP ES

; if error, reopen file at 01d6

1E42:0233 72A1 JB 01D6

; store flags, cx before call

1E42:0235 9C PUSHF

1E42:0236 59 POP CX

; set_int(24, oldvector)

1E42:0237 1F POP DS

1E42:0238 5A POP DX

1E42:0239 B024 MOV AL,24

1E42:023B E8D2FD CALL 0010

; restore cx, flags after call

1E42:023E 51 PUSH CX

1E42:023F 9D POPF

; set ds = cs+003e (076c from start of exec)

1E42:0240 B8801E MOV AX,1E80

1E42:0243 8ED8 MOV DS,AX

1E42:0245 C3 RET

}

process_header(bx=0, cx=#addrs, dx=cs2) - 0246

{

; bx = header # (should start at 0 to read them)

; cx = # of addresses in header

; dx = segment at start of executable

{

; if header # != 0, jump to 026c

1E42:0246 0BDB OR BX,BX

1E42:0248 7522 JNZ 026C

; we get here if we have not read any headers yet

; push cx (# of addrs in hdr), dx (?)

1E42:024A 51 PUSH CX

1E42:024B 52 PUSH DX

; set ax = data seg

1E42:024C 8CD8 MOV AX,DS

; set dx = 0004 (location of header table will be ds:0004)

1E42:024E BA0400 MOV DX,0004

; if cx 20), set cx = 20

; (there should be no more than 20 addresses in header)

1E42:0256 B92000 MOV CX,0020

; store cx (adjusted # of addresses in header)

1E42:0259 51 PUSH CX

; cx = (cx + 3) / 4 (calculate size of header in paragraphs)

; each address is a dword, yielding 4 per paragraph,

; and since at most 3 addresses can be free in order to fill a paragraph,

; adding 3 to the # of addrs will get the last paragraph counted

1E42:025A 83C103 ADD CX,+03

1E42:025D D1E9 SHR CX,1

1E42:025F D1E9 SHR CX,1

; call read_file(data seg, cx, 0004)

1E42:0261 E8BFFE CALL 0123

; restore bx (adjusted # of addrs in hdr), dx (?), cx (# of addrs in hdr)

1E42:0264 5B POP BX

1E42:0265 5A POP DX

1E42:0266 59 POP CX

; if error in read, return at 0291

1E42:0267 7228 JB 0291

; set si = 0004 (location of header table, ds:0004)

1E42:0269 BE0400 MOV SI,0004

; we get here if headers have been read

; dec header # by one

1E42:026C 4B DEC BX

; set bp = offset of current header address

1E42:026D 8B2C MOV BP,[SI]

; set bp = segment of current header address

1E42:026F 8B4402 MOV AX,[SI+02]

; if offset != 0 (offset at 0), jump to 027a

1E42:0272 0BED OR BP,BP

1E42:0274 7504 JNZ 027A

; if segment == 0 (offset & segment empty = not an entry), skip to 028c

1E42:0276 0BC0 OR AX,AX

1E42:0278 7412 JZ 028C

; store es, dx

1E42:027A 06 PUSH ES

1E42:027B 52 PUSH DX

; store addr at es:0000 (start of exec)

1E42:027C 26 ES:

1E42:027D FF360000 PUSH [0000]

; add code segment to segment of current header address

; (for DATA.OVL this is cs2+0f68)

1E42:0281 03C2 ADD AX,DX

; set es = result segment

1E42:0283 8EC0 MOV ES,AX

; restore start of exec

1E42:0285 5A POP DX

; add abs value for start of exec to segment address in file

1E42:0286 26 ES:

1E42:0287 015600 ADD [BP+00],DX

; restore dx, es

1E42:028A 5A POP DX

1E42:028B 07 POP ES

; move si forward 004

1E42:028C 83C604 ADD SI,+04

; loop back!

1E42:028F E2B5 LOOP 0246

}

1E42:0291 C3 RET

}

cs:file_loader(ah, cx) - 0292

{

; ah = ?

; cx = file entry # (starting at 1)

; jump to next instruction (um... why ???)

1E42:0292 EA9702421E JMP 1E42:0297

; clear direction flag

1E42:0297 FC CLD

; store

1E42:0298 55 PUSH BP

1E42:0299 1E PUSH DS

1E42:029A 06 PUSH ES

; set ds = cs+003e (076c from start of exec)

1E42:029B BB801E MOV BX,1E80

1E42:029E 8EDB MOV DS,BX

; set es = cs+004a (0778 from start of exec)

1E42:02A0 BB8C1E MOV BX,1E8C

1E42:02A3 8EC3 MOV ES,BX

; store ah param in ds:0090

1E42:02A5 88269000 MOV [0090],AH

; ax = calculate distance to file address in bytes

1E42:02A9 B81000 MOV AX,0010

1E42:02AC 49 DEC CX

1E42:02AD F7E1 MUL CX

; set di = distance to file address

1E42:02AF 8BF8 MOV DI,AX

; if bit 15 is set, jump to 02c6

1E42:02B1 26 ES:

1E42:02B2 F78506000080 TEST WORD PTR [DI+0006],8000

1E42:02B8 750C JNZ 02C6

; store cx (file entry #) before call

1E42:02BA 51 PUSH CX

; call reset_file_info(di)

1E42:02BB E877FD CALL 0035

; restore cx (file entry #)after call

1E42:02BE 59 POP CX

; call load_file()

1E42:02BF E8FFFE CALL 01C1

; if error loading file, jump to 02da

1E42:02C2 7216 JB 02DA

; jump to next instruction (again, um... why ???)

1E42:02C4 EB00 JMP 02C6

; set bit 15 in file info

1E42:02C6 26 ES:

1E42:02C7 818D06000080 OR WORD PTR [DI+0006],8000

; set cx = file info

1E42:02CD 26 ES:

1E42:02CE 8B8D0600 MOV CX,[DI+0006]

; if any bit 0-13 is set, jump back to 02a9

1E42:02D2 81E1FF1F AND CX,1FFF

1E42:02D6 75D1 JNZ 02A9

; otherwise, jump to 02e5

1E42:02D8 EB0B JMP 02E5

; if *0090 != 0, jump to 02e4

1E42:02DA F6069000FF TEST BYTE PTR [0090],FF

1E42:02DF 7503 JNZ 02E4

; call error_and_exit()

1E42:02E1 E8F000 CALL 03D4

1E42:02E4 F9 STC

; call close_file()

1E42:02E5 E8E400 CALL 03CC

; restore & return

1E42:02E8 07 POP ES

1E42:02E9 1F POP DS

1E42:02EA 5D POP BP

1E42:02EB CB RETF

}

cs:file_loader_wrapper(w)

{

; store

1E42:02EC 9C PUSHF

1E42:02ED 50 PUSH AX

1E42:02EE 53 PUSH BX

1E42:02EF 51 PUSH CX

1E42:02F0 52 PUSH DX

1E42:02F1 55 PUSH BP

1E42:02F2 56 PUSH SI

1E42:02F3 57 PUSH DI

1E42:02F4 1E PUSH DS

1E42:02F5 06 PUSH ES

; set bp = sp

1E42:02F6 8BEC MOV BP,SP

; set es = cs+004a (0778 from start of exec)

1E42:02F8 B88C1E MOV AX,1E8C

1E42:02FB 8EC0 MOV ES,AX

; set ax = return segment

1E42:02FD 8B4616 MOV AX,[BP+16]

1E42:0300 8ED8 MOV DS,AX

; set si = return offset

1E42:0302 8B7614 MOV SI,[BP+14]

; there is a word of data at the return address

; add 2 to offset on stack so we can skip it on return

1E42:0305 83461402 ADD WORD PTR [BP+14],+02

; set cx = get word at old address

1E42:0309 8B0C MOV CX,[SI]

; set ds = cs+003e (076c from start of exec)

1E42:030B B8801E MOV AX,1E80

1E42:030E 8ED8 MOV DS,AX

; far call cs:file_loader(00,cx)

1E42:0310 B400 MOV AH,00

1E42:0312 9A9202421E CALL 1E42:0292

; restore & return

1E42:0317 07 POP ES

1E42:0318 1F POP DS

1E42:0319 5F POP DI

1E42:031A 5E POP SI

1E42:031B 5D POP BP

1E42:031C 5A POP DX

1E42:031D 59 POP CX

1E42:031E 5B POP BX

1E42:031F 58 POP AX

1E42:0320 9D POPF

1E42:0321 CB RETF

}

; start point - 0322

; clear interrupt flag before stack change

1E42:0322 FA CLI

; set di = es (psp segment)

1E42:0323 8CC7 MOV DI,ES

; save original stack

1E42:0325 8CD6 MOV SI,SS

1E42:0327 8BCC MOV CX,SP

; set es = cs+004a (0778 from start of exec)

1E42:0329 BA8C1E MOV DX,1E8C

1E42:032C 8EC2 MOV ES,DX

; set ss = value in es:0004 (1bb8 from start of exec)

; (this is, not coincidentally, just beyond the end of DATA.OVL's reserved space)

1E42:032E 26 ES:

1E42:032F 8E160400 MOV SS,[0004]

; set sp = 0100

1E42:0333 BC0001 MOV SP,0100

; set interrupt flag after stack change

1E42:0336 FB STI

; reset es w/ saved value (psp segment)

1E42:0337 8EC7 MOV ES,DI

; store (si = original stack seg, cx = original stack pointer)

1E42:0339 56 PUSH SI

1E42:033A 51 PUSH CX

1E42:033B 50 PUSH AX

1E42:033C 1E PUSH DS

1E42:033D 06 PUSH ES

; save psp segment in cs:*006e

1E42:033E 2E CS:

1E42:033F 8C066E00 MOV [006E],ES

; set ds = cs+003e (076c from start of exec)

1E42:0343 B8801E MOV AX,1E80

1E42:0346 8ED8 MOV DS,AX

; call init_0000()

1E42:0348 E87600 CALL 03C1

; set es = cs+004a (0778 from start of exec)

1E42:034B B88C1E MOV AX,1E8C

1E42:034E 8EC0 MOV ES,AX

; set ax = cs

1E42:0350 8CC8 MOV AX,CS

; calculate segment for start of executable

; (es:*0000 contains diff b/w start of exec and this cs)

1E42:0352 26 ES:

1E42:0353 2B060000 SUB AX,[0000]

; save segment for start of executable

1E42:0357 26 ES:

1E42:0358 A30000 MOV [0000],AX

; if byte *ds:0000 == ff, jump to 036e

; (why would this not be true? - we just set it!)

1E42:035B 803E0000FF CMP BYTE PTR [0000],FF

1E42:0360 740C JZ 036E

; push dx before int

1E42:0362 52 PUSH DX

; write string at ds:009f to stdout

; (string is "Error...Call OSI")

1E42:0363 B409 MOV AH,09

1E42:0365 BA9F00 MOV DX,009F

1E42:0368 CD21 INT 21

; restore dx after int

1E42:036A 5A POP DX

; call error_and_exit()

1E42:036B E86600 CALL 03D4

; we get here on no error

; set es = cs+004a (0778 from start of exec)

1E42:036E BA8C1E MOV DX,1E8C

1E42:0371 8EC2 MOV ES,DX

; clear di

1E42:0373 33FF XOR DI,DI

; set cx = file entry number starting at 1

1E42:0375 B90100 MOV CX,0001

{

; get address at es:(di+6)

1E42:0378 26 ES:

1E42:0379 8B850600 MOV AX,[DI+0006]

; add 1 to address

1E42:037D 40 INC AX

; if address == 0 (formerly ffff), return at 039f

1E42:037E 741F JZ 039F

; if bit 14 is not set, jump to 0399

1E42:0380 26 ES:

1E42:0381 F78506000040 TEST WORD PTR [DI+0006],4000

1E42:0387 7410 JZ 0399

; store di,cx before call

1E42:0389 57 PUSH DI

1E42:038A 51 PUSH CX

; far call cs:file_loader(00,cx)

1E42:038B B400 MOV AH,00

1E42:038D 9A9202421E CALL 1E42:0292

; restore cx,di after call

1E42:0392 59 POP CX

1E42:0393 5F POP DI

; if no error, jump to 0399

1E42:0394 7303 JNB 0399

; call error_and_exit()

1E42:0396 E83B00 CALL 03D4

; add one to file entry count

1E42:0399 41 INC CX

; move di forward one paragraph (next file entry)

1E42:039A 83C710 ADD DI,+10

; jump back to 0378

1E42:039D EBD9 JMP 0378

}

; restore (bx = original stack segment, cx = original stack pointer)

1E42:039F 07 POP ES

1E42:03A0 1F POP DS

1E42:03A1 58 POP AX

1E42:03A2 59 POP CX

1E42:03A3 5B POP BX

; clear interrupt before stack

1E42:03A4 FA CLI

; restore original stack

1E42:03A5 8BE1 MOV SP,CX

1E42:03A7 8ED3 MOV SS,BX

; set interrupt after stack

1E42:03A9 FB STI

; jump to main:start_point

1E42:03AA EA7E011417 JMP 1714:017E

; unused ?

1E42:03AF 00

print_error_message(al) - 03b0

{

; al = error condition (00 does nothing)

; clear direction flag

1E42:03B0 FC CLD

; if al == 0, return at 03c0

1E42:03B1 0AC0 OR AL,AL

1E42:03B3 740B JZ 03C0

; store ds before call

1E42:03B5 1E PUSH DS

; set ds = ss

1E42:03B6 16 PUSH SS

1E42:03B7 1F POP DS

; far call address in *5394

1E42:03B8 36 SS:

1E42:03B9 FF1E9453 CALL FAR [5394]

; restore ds

1E42:03BD 1F POP DS

; clear error condition

1E42:03BE 32C0 XOR AL,AL

; return

1E42:03C0 C3 RET

}

init_0000() - 03c1

{

; init word at 0000 = 00ff

1E42:03C1 C6060000FF MOV BYTE PTR [0000],FF

1E42:03C6 C606010000 MOV BYTE PTR [0001],00

; return

1E42:03CB C3 RET

}

close_file() - 03cc

{

; store flags before call

1E42:03CC 9C PUSHF

; far call cs:close_file()

1E42:03CD 9A7B00421E CALL 1E42:007B

; restore flags after call

1E42:03D2 9D POPF

1E42:03D3 C3 RET

}

error_and_exit() - 03d4

{

; far call cs:close_file()

1E42:03D4 9A7B00421E CALL 1E42:007B

; terminate with return code FF

1E42:03D9 B0FF MOV AL,FF

1E42:03DB B44C MOV AH,4C

1E42:03DD CD21 INT 21

; we shouldn't get here

1E42:03DF C3 RET

}

/* main segment */

; this segment starts at the start of executable

main(p0,p1,p2) - 0000

{

; p0 = argc, # of arguments

; p1 = argv, argument table

; p2 = env, environment table

; store

1714:0000 55 PUSH BP

1714:0001 8BEC MOV BP,SP

; allocate 8 more bytes on stack

1714:0003 83EC08 SUB SP,+08

; set bp-4 = 20

1714:0006 C646FC20 MOV BYTE PTR [BP-04],20

; if argc = 21 (dungeon), jump to 0104

1714:00DB 803E935821 CMP BYTE PTR [5893],21

1714:00E0 7322 JNB 0104

1714:00E2 837EFE00 CMP WORD PTR [BP-02],+00

1714:00E6 7506 JNZ 00EE

1714:00E8 837EF800 CMP WORD PTR [BP-08],+00

1714:00EC 7406 JZ 00F4

; set ax = 0001

1714:00EE B80100 MOV AX,0001

1714:00F1 EB03 JMP 00F6

1714:00F3 90 NOP

; set ax = 0000

1714:00F4 2BC0 SUB AX,AX

; call town.main1(ax)

1714:00F6 50 PUSH AX

1714:00F7 E84C79 CALL 7A46

; call town.main2()

1714:00FA E85579 CALL 7A52

1714:00FD C746F80000 MOV WORD PTR [BP-08],0000

1714:0102 EB12 JMP 0116

; call switch_drives(0002 = adjusted)

1714:0104 B80200 MOV AX,0002

1714:0107 50 PUSH AX

1714:0108 E81324 CALL 251E

; call load_dungeon_ovl()

1714:010B FF76FE PUSH [BP-02]

1714:010E E80579 CALL 7A16

1714:0111 C746F80100 MOV WORD PTR [BP-08],0001

1714:0116 C746FE0000 MOV WORD PTR [BP-02],0000

; call switch_drives(0001 = adjusted)

1714:011B B80100 MOV AX,0001

1714:011E 50 PUSH AX

1714:011F E8FC23 CALL 251E

; call test_open_file(1393 -> "BRIT.DAT")

1714:0122 B89313 MOV AX,1393

1714:0125 50 PUSH AX

1714:0126 E84B15 CALL 1674

; if failed to open, retry at 0122

1714:0129 0BC0 OR AX,AX

1714:012B 74F5 JZ 0122

; call outsubs.get_world_savefile()

1714:012D E8F278 CALL 7A22

; call read_file_from_disk(0000,0100,5c5a,(BRIT|UNDER).OOL)

1714:0130 50 PUSH AX

1714:0131 B85A5C MOV AX,5C5A

1714:0134 50 PUSH AX

1714:0135 B80001 MOV AX,0100

1714:0138 50 PUSH AX

1714:0139 2BC0 SUB AX,AX

1714:013B 50 PUSH AX

1714:013C E82F24 CALL 256E

1714:013F 803E935800 CMP BYTE PTR [5893],00

1714:0144 7528 JNZ 016E

1714:0146 803E955800 CMP BYTE PTR [5895],00

1714:014B 7421 JZ 016E

; call switch_drives(0005 = adjusted)

1714:014D B80500 MOV AX,0005

1714:0150 50 PUSH AX

1714:0151 E8CA23 CALL 251E

; call test_open_file(139c -> "UNDER.DAT")

1714:0154 B89C13 MOV AX,139C

1714:0157 50 PUSH AX

1714:0158 E81915 CALL 1674

; if file segment == 0, retry at 0154

1714:015B 0BC0 OR AX,AX

1714:015D 74F5 JZ 0154

; call outsubs.get_world_savefile()

1714:015F E8C078 CALL 7A22

; call write_file_to_disk(0100,5c5a,(BRIT|UNDER).OOL)

1714:0162 50 PUSH AX

1714:0163 B85A5C MOV AX,5C5A

1714:0166 50 PUSH AX

1714:0167 B80001 MOV AX,0100

1714:016A 50 PUSH AX

1714:016B E86A24 CALL 25D8

; if bp-02 != 0000, jump to 0177

1714:016E 837EFE00 CMP WORD PTR [BP-02],+00

1714:0172 7503 JNZ 0177

; otherwise, jump back to 00b8

1714:0174 E941FF JMP 00B8

; call set_old_video_mode()

1714:0177 E8FE06 CALL 0878

; set stack pointer

1714:017A 8BE5 MOV SP,BP

; restore & return

1714:017C 5D POP BP

1714:017D C3 RET

}

; start point - 017e

; get dos version

1714:017E B430 MOV AH,30

1714:0180 CD21 INT 21

; if dos version >= 02, jump to 0188

1714:0182 3C02 CMP AL,02

1714:0184 7302 JNB 0188

; otherwise, exit to dos

1714:0186 CD20 INT 20

; set di = 2678 (new stack/data segment = cs + 0f64)

; (this is also DATA.OVL's segment)

1714:0188 BF7826 MOV DI,2678

; set si = segment of 1st byte beyond allocated mem for program

1714:018B 8B360200 MOV SI,[0002]

; get amt of unused memory (in paragraphs) beyond ss:0000

1714:018F 2BF7 SUB SI,DI

; if unused memory < 1000 paragraphs, jump to 019a

1714:0191 81FE0010 CMP SI,1000

1714:0195 7203 JB 019A

; limit usuable memory to 1000 paragraphs (since that is max per segment)

1714:0197 BE0010 MOV SI,1000

; clear interrupt before stack change

1714:019A FA CLI

; set ss = di = 2678 (cs + 0f64)

1714:019B 8ED7 MOV SS,DI

; sp += bd3e (sp should be 0800 already, sp = c53e)

1714:019D 81C43EBD ADD SP,BD3E

; set interrupt after stack change

1714:01A1 FB STI

; if carry not set (did not roll over), jump to 01b4

1714:01A2 7310 JNB 01B4

; otherwise, error out due to stack error

; set ds = ss

1714:01A4 16 PUSH SS

1714:01A5 1F POP DS

; call error_message_header()

1714:01A6 E8DD03 CALL 0586

; call error_string_at_address(0000)

1714:01A9 33C0 XOR AX,AX

1714:01AB 50 PUSH AX

1714:01AC E8AE03 CALL 055D

; exit to dos, errorcode FF

1714:01AF B8FF4C MOV AX,4CFF

1714:01B2 CD21 INT 21

; we get here if sp did not carry

; drop bit 0 from sp (-02 = fe) (should still be c53e)

1714:01B4 83E4FE AND SP,-02

; store sp in ss:*5210,ss:*5214

; (these will keep track of how much of the ss/ds we are using)

1714:01B7 36 SS:

1714:01B8 89261452 MOV [5214],SP

1714:01BC 36 SS:

1714:01BD 89261052 MOV [5210],SP

; set ax = amt of usable memory for data/stack

1714:01C1 8BC6 MOV AX,SI

; get amount of usable memory in bytes

1714:01C3 B104 MOV CL,04

1714:01C5 D3E0 SHL AX,CL

; ax-- (last address in data/stack segment)

1714:01C7 48 DEC AX

; set ss:*520e = ax (top of data/stack segment)

1714:01C8 36 SS:

1714:01C9 A30E52 MOV [520E],AX

; add addr of stack segment to # of paragraphs of usable memory

1714:01CC 03F7 ADD SI,DI

; write amt of usable memory to psp:0002

; (this, in effect, limits the program's memory to end of data/stack segment)

1714:01CE 89360200 MOV [0002],SI

; set bx = es (should be pointing to psp)

1714:01D2 8CC3 MOV BX,ES

; bx = amt of paragraphs from start of psp to end of data/stack segment

1714:01D4 2BDE SUB BX,SI

1714:01D6 F7DB NEG BX

; resize memory block (to end of data/stack segment)

1714:01D8 B44A MOV AH,4A

1714:01DA CD21 INT 21

; save ds (psp) into ss:*5285

1714:01DC 36 SS:

1714:01DD 8C1E8552 MOV [5285],DS

; set es = ss

1714:01E1 16 PUSH SS

1714:01E2 07 POP ES

; clear direction

1714:01E3 FC CLD

; set di = a524 (start of table)

1714:01E4 BF24A5 MOV DI,A524

; set cx = bd40 (end of table)

1714:01E7 B940BD MOV CX,BD40

; cx -= di (end - start = 181c, size of table)

1714:01EA 2BCF SUB CX,DI

; clear ax

1714:01EC 33C0 XOR AX,AX

; write 181c zeroes to string table

1714:01EE F3 REPZ

1714:01EF AA STOSB

; set ds = ss

1714:01F0 16 PUSH SS

1714:01F1 1F POP DS

; call init_environment()

1714:01F2 E83B00 CALL 0230

; set ds = ss

1714:01F5 16 PUSH SS

1714:01F6 1F POP DS

; call build_environment_table()

1714:01F7 E83A05 CALL 0734

; call build_parameter_table()

1714:01FA E8A903 CALL 05A6

; clear bp

1714:01FD 33ED XOR BP,BP

; call main(argc,argv,env)

1714:01FF FF36A652 PUSH [52A6]

1714:0203 FF36A452 PUSH [52A4]

1714:0207 FF36A252 PUSH [52A2]

1714:020B E8F2FD CALL 0000

; call exit_to_dos(ax)

1714:020E 50 PUSH AX

1714:020F E8E200 CALL 02F4

int_00()

{

; set ds = 2678

1714:0212 B87826 MOV AX,2678

1714:0215 8ED8 MOV DS,AX

; set string = 0003

1714:0217 B80300 MOV AX,0003

; set addr in ss:*5212 = exit_to_dos()

1714:021A 36 SS:

1714:021B C7061252F402 MOV WORD PTR [5212],02F4

; some functions jump here with an error string index in ax

; call error_message_header()

1714:0221 50 PUSH AX

1714:0222 E86103 CALL 0586

; call error_string_at_address(ax)

1714:0225 E83503 CALL 055D

; set exit code = 00ff

1714:0228 B8FF00 MOV AX,00FF

; call exit_to_dos(00ff)

1714:022B 50 PUSH AX

1714:022C FF161252 CALL [5212]

}

init_environment() - 0230

{

; get dos version

1714:0230 B430 MOV AH,30

1714:0232 CD21 INT 21

; store dos ver in *5287

1714:0234 A38752 MOV [5287],AX

; get interrupt vector 00

1714:0237 B80035 MOV AX,3500

1714:023A CD21 INT 21

; store vector 00 (dword) in *5273

1714:023C 891E7352 MOV [5273],BX

1714:0240 8C067552 MOV [5275],ES

; set ds = cs

1714:0244 0E PUSH CS

1714:0245 1F POP DS

; set int vector 00 = cs:0212

1714:0246 B80025 MOV AX,2500

1714:0249 BA1202 MOV DX,0212

1714:024C CD21 INT 21

; set ds = ss

1714:024E 16 PUSH SS

1714:024F 1F POP DS

; if *6ad0 == 0000, jump to 0284

1714:0250 8B0ED06A MOV CX,[6AD0]

1714:0254 E32E JCXZ 0284

; set es = psp

1714:0256 8E068552 MOV ES,[5285]

; set si = segment of environment (from psp)

1714:025A 26 ES:

1714:025B 8B362C00 MOV SI,[002C]

1714:025F C506D26A LDS AX,[6AD2]

1714:0263 8CDA MOV DX,DS

1714:0265 33DB XOR BX,BX

1714:0267 36 SS:

1714:0268 FF1ECE6A CALL FAR [6ACE]

1714:026C 7305 JNB 0273

1714:026E 16 PUSH SS

1714:026F 1F POP DS

1714:0270 E95105 JMP 07C4

1714:0273 36 SS:

1714:0274 C506D66A LDS AX,[6AD6]

1714:0278 8CDA MOV DX,DS

1714:027A BB0300 MOV BX,0003

1714:027D 36 SS:

1714:027E FF1ECE6A CALL FAR [6ACE]

1714:0282 16 PUSH SS

1714:0283 1F POP DS

; we jump here if *6ad0 is empty

; set es = seg address of cs - 0010

1714:0284 8E068552 MOV ES,[5285]

; set cx = segment of environment (from psp)

1714:0288 26 ES:

1714:0289 8B0E2C00 MOV CX,[002C]

; if int22 segment == 0, jump to 02c5

1714:028D E336 JCXZ 02C5

; set es = environment segment

1714:028F 8EC1 MOV ES,CX

; clear di (inits di to 00)

1714:0291 33FF XOR DI,DI

; this loop searchs for environment parameter ";C_FILE_INFO"

{

; if byte at es:di == 00 (at end of environment), jump to 02c5

1714:0293 26 ES:

1714:0294 803D00 CMP BYTE PTR [DI],00

1714:0297 742C JZ 02C5

; if 0x0c bytes between ds:5266 (";C_FILE_INFO") == es:di, jump to 02ae

1714:0299 B90C00 MOV CX,000C

1714:029C BE6652 MOV SI,5266

1714:029F F3 REPZ

1714:02A0 A6 CMPSB

1714:02A1 740B JZ 02AE

; scan 7fff bytes after es:000c for end of env param

1714:02A3 B9FF7F MOV CX,7FFF

1714:02A6 33C0 XOR AX,AX

1714:02A8 F2 REPNZ

1714:02A9 AE SCASB

; if end of environment parameter not found in 7fff bytes, jump to 02c5

1714:02AA 7519 JNZ 02C5

; otherwise (end of env param), jump to 0293

1714:02AC EBE5 JMP 0293

; (next loop should begin on byte following 00 - beginning of next env param)

}

; swap es,ds

1714:02AE 06 PUSH ES

1714:02AF 1E PUSH DS

1714:02B0 07 POP ES

1714:02B1 1F POP DS

1714:02B2 8BF7 MOV SI,DI

1714:02B4 BF8E52 MOV DI,528E

1714:02B7 AC LODSB

1714:02B8 98 CBW

1714:02B9 91 XCHG CX,AX

{

1714:02BA AC LODSB

1714:02BB FEC0 INC AL

1714:02BD 7401 JZ 02C0

1714:02BF 48 DEC AX

1714:02C0 AA STOSB

1714:02C1 E2F7 LOOP 02BA

}

1714:02C3 16 PUSH SS

1714:02C4 1F POP DS

; we jump here if environment param not found

; set bx = 0004

1714:02C5 BB0400 MOV BX,0004

; this loop gets info on devices fh 00-04

{

; clear bit 6 in divice info (eof on input)

1714:02C8 80A78E52BF AND BYTE PTR [BX+528E],BF

; get device information (fh 04)

1714:02CD B80044 MOV AX,4400

1714:02D0 CD21 INT 21

; jump to 02de on error

1714:02D2 720A JB 02DE

; if bit 3 is not set (no clock device), jump to 02de

1714:02D4 F6C280 TEST DL,80

1714:02D7 7405 JZ 02DE

; set bit 2 for device in device array (nul device)

1714:02D9 808F8E5240 OR BYTE PTR [BX+528E],40

; bx--

1714:02DE 4B DEC BX

; if bx != ffff, jump back to 02c8

1714:02DF 79E7 JNS 02C8

}

; these calls do nothing

; call dynamic_far_call(6ada,6ada)

1714:02E1 BEDA6A MOV SI,6ADA

1714:02E4 BFDA6A MOV DI,6ADA

1714:02E7 E8A200 CALL 038C

; call dynamic_near_call(6ada,6ada)

1714:02EA BEDA6A MOV SI,6ADA

1714:02ED BFDA6A MOV DI,6ADA

1714:02F0 E88A00 CALL 037D

; return

1714:02F3 C3 RET

}

exit_to_dos(p0) - 02f4

{

; p0 = return code

1714:02F4 55 PUSH BP

1714:02F5 8BEC MOV BP,SP

; these dynamic calls do nothing, really

; call dynamic_near_call(a9bc,a9bc)

1714:02F7 BEBCA9 MOV SI,A9BC

1714:02FA BFBCA9 MOV DI,A9BC

1714:02FD E87D00 CALL 037D

; call dynamic_near_call(6ada,6ada)

1714:0300 BEDA6A MOV SI,6ADA

1714:0303 BFDA6A MOV DI,6ADA

1714:0306 E87400 CALL 037D

; jump over next two instructions

1714:0309 EB03 JMP 030E

; this is ignored

1714:030B 55 PUSH BP

1714:030C 8BEC MOV BP,SP

; again, these dynamic calls do nothing

; call dynamic_near_call(6ada,6ada)

1714:030E BEDA6A MOV SI,6ADA

1714:0311 BFDA6A MOV DI,6ADA

1714:0314 E86600 CALL 037D

; call dynamic_far_call(6ada,6ada)

1714:0317 BEDA6A MOV SI,6ADA

1714:031A BFDA6A MOV DI,6ADA

1714:031D E86C00 CALL 038C

; call 07a2

1714:0320 E87F04 CALL 07A2

; if ax == 0, jump to 0332

1714:0323 0BC0 OR AX,AX

1714:0325 740B JZ 0332

; if return code (p0) != 0000, jump to 0332

1714:0327 837E0400 CMP WORD PTR [BP+04],+00

1714:032B 7505 JNZ 0332

; set return code (p0) = 00ff

1714:032D C74604FF00 MOV WORD PTR [BP+04],00FF

; loop 0xf (15 dec) times

1714:0332 B90F00 MOV CX,000F

; set initial fh = 05

1714:0335 BB0500 MOV BX,0005

; it looks like this loop closes all open file handles

{

; if bit 1 of ds:*(bx+528e) is not set, jump to 0343

; (if it is set, the file has been opened)

1714:0338 F6878E5201 TEST BYTE PTR [BX+528E],01

1714:033D 7404 JZ 0343

; otherwise, close file at fh 05

1714:033F B43E MOV AH,3E

1714:0341 CD21 INT 21

; inc bx

1714:0343 43 INC BX

1714:0344 E2F2 LOOP 0338

}

; call 0350

1714:0346 E80700 CALL 0350

; set ax = param (return code)

1714:0349 8B4604 MOV AX,[BP+04]

; exit to dos w/ return code

1714:034C B44C MOV AH,4C

1714:034E CD21 INT 21

; call stop_music_and_exit()

# 034c call 0e2f

# 034f nop

}

; 0350

{

; if word at 6ad0 == 0000, jump to 025d

1714:0350 8B0ED06A MOV CX,[6AD0]

1714:0354 E307 JCXZ 035D

; set bx = 02 (param for far call?)

1714:0356 BB0200 MOV BX,0002

; far call to addr in 6ace

1714:0359 FF1ECE6A CALL FAR [6ACE]

; store ds

1714:035D 1E PUSH DS

; load ds:dx with far addr at 5273

1714:035E C5167352 LDS DX,[5273]

; set interrupt vector 00 to far addr at 5273

1714:0362 B80025 MOV AX,2500

1714:0365 CD21 INT 21

; restore ds

1714:0367 1F POP DS

; if byte at ds:*52b0 == 00, return at 037c

1714:0368 803EB05200 CMP BYTE PTR [52B0],00

1714:036D 740D JZ 037C

; store ds

1714:036F 1E PUSH DS

; set al = *52b1

1714:0370 A0B152 MOV AL,[52B1]

; load ds:dx with far addr at 52b2

1714:0373 C516B252 LDS DX,[52B2]

; set interrupt vector *52b1 to far addr at 52b2

1714:0377 B425 MOV AH,25

1714:0379 CD21 INT 21

1714:037B 1F POP DS

1714:037C C3 RET

}

dynamic_near_call(si, di) - 037d

{

; si = start of addr list

; di = end of addr list

{

; if si >= di, return at 038b

1714:037D 3BF7 CMP SI,DI

1714:037F 730A JNB 038B

; move di back to next addr (word)

1714:0381 4F DEC DI

1714:0382 4F DEC DI

; get addr at di into cx

1714:0383 8B0D MOV CX,[DI]

; if cx == 0000, jump back to 037d

1714:0385 E3F6 JCXZ 037D

; call addr in cx

1714:0387 FFD1 CALL CX

; jump back to 037d

1714:0389 EBF2 JMP 037D

}

; return

1714:038B C3 RET

}

dynamic_far_call(si, di) - 038c

{

; si = start of addr list

; di = end of addr list

{

; if si >= di, return at 039e

1714:038C 3BF7 CMP SI,DI

1714:038E 730E JNB 039E

; move di back to next far addr (dword)

1714:0390 83EF04 SUB DI,+04

; get addr at di

1714:0393 8B05 MOV AX,[DI]

1714:0395 0B4502 OR AX,[DI+02]

; if addr at di == addr at di+02, jump to 038c

1714:0398 74F2 JZ 038C

; otherwise, call addr at di

1714:039A FF1D CALL FAR [DI]

; jump back to 038c

1714:039C EBEE JMP 038C

}

; return

1714:039E C3 RET

}

1714:039F 00558B ADD [DI-75],DL

1714:03A2 EC IN AL,DX

1714:03A3 53 PUSH BX

1714:03A4 56 PUSH SI

1714:03A5 8B460A MOV AX,[BP+0A]

1714:03A8 0BC0 OR AX,AX

1714:03AA 7515 JNZ 03C1

1714:03AC 8B4E08 MOV CX,[BP+08]

1714:03AF 8B4606 MOV AX,[BP+06]

1714:03B2 33D2 XOR DX,DX

1714:03B4 F7F1 DIV CX

1714:03B6 8BD8 MOV BX,AX

1714:03B8 8B4604 MOV AX,[BP+04]

1714:03BB F7F1 DIV CX

1714:03BD 8BD3 MOV DX,BX

1714:03BF EB38 JMP 03F9

1714:03C1 8BC8 MOV CX,AX

1714:03C3 8B5E08 MOV BX,[BP+08]

1714:03C6 8B5606 MOV DX,[BP+06]

1714:03C9 8B4604 MOV AX,[BP+04]

1714:03CC D1E9 SHR CX,1

1714:03CE D1DB RCR BX,1

1714:03D0 D1EA SHR DX,1

1714:03D2 D1D8 RCR AX,1

1714:03D4 0BC9 OR CX,CX

1714:03D6 75F4 JNZ 03CC

1714:03D8 F7F3 DIV BX

1714:03DA 8BF0 MOV SI,AX

1714:03DC F7660A MUL WORD PTR [BP+0A]

1714:03DF 91 XCHG CX,AX

1714:03E0 8B4608 MOV AX,[BP+08]

1714:03E3 F7E6 MUL SI

1714:03E5 03D1 ADD DX,CX

1714:03E7 720C JB 03F5

1714:03E9 3B5606 CMP DX,[BP+06]

1714:03EC 7707 JA 03F5

1714:03EE 7206 JB 03F6

1714:03F0 3B4604 CMP AX,[BP+04]

1714:03F3 7601 JBE 03F6

1714:03F5 4E DEC SI

1714:03F6 33D2 XOR DX,DX

1714:03F8 96 XCHG SI,AX

1714:03F9 5E POP SI

1714:03FA 5B POP BX

1714:03FB 8BE5 MOV SP,BP

1714:03FD 5D POP BP

1714:03FE C20800 RET 0008

1714:0401 00

; 0402

{

1714:0402 55 PUSH BP

1714:0403 8BEC MOV BP,SP

1714:0405 33C0 XOR AX,AX

1714:0407 8B4E08 MOV CX,[BP+08]

1714:040A E318 JCXZ 0424

1714:040C 8BDF MOV BX,DI

1714:040E 8CD8 MOV AX,DS

1714:0410 8EC0 MOV ES,AX

1714:0412 8B7E04 MOV DI,[BP+04]

1714:0415 8A4606 MOV AL,[BP+06]

1714:0418 F2 REPNZ

1714:0419 AE SCASB

1714:041A B80000 MOV AX,0000

1714:041D 7503 JNZ 0422

1714:041F 8D45FF LEA AX,[DI-01]

1714:0422 8BFB MOV DI,BX

1714:0424 5D POP BP

1714:0425 C3 RET

}

1714:0426 55 PUSH BP

1714:0427 8BEC MOV BP,SP

1714:0429 56 PUSH SI

1714:042A 57 PUSH DI

1714:042B B301 MOV BL,01

1714:042D 8B4E08 MOV CX,[BP+08]

1714:0430 8B4604 MOV AX,[BP+04]

1714:0433 33D2 XOR DX,DX

1714:0435 83F90A CMP CX,+0A

1714:0438 7501 JNZ 043B

1714:043A 99 CWD

1714:043B 8B7E06 MOV DI,[BP+06]

1714:043E E99503 JMP 07D6

1714:0441 00558B ADD [DI-75],DL

1714:0444 EC IN AL,DX

1714:0445 8B4606 MOV AX,[BP+06]

1714:0448 8B5E0A MOV BX,[BP+0A]

1714:044B 0BD8 OR BX,AX

1714:044D 8B5E08 MOV BX,[BP+08]

1714:0450 750B JNZ 045D

1714:0452 8B4604 MOV AX,[BP+04]

1714:0455 F7E3 MUL BX

1714:0457 8BE5 MOV SP,BP

1714:0459 5D POP BP

1714:045A C20800 RET 0008

1714:045D F7E3 MUL BX

1714:045F 8BC8 MOV CX,AX

1714:0461 8B4604 MOV AX,[BP+04]

1714:0464 F7660A MUL WORD PTR [BP+0A]

1714:0467 03C8 ADD CX,AX

1714:0469 8B4604 MOV AX,[BP+04]

1714:046C F7E3 MUL BX

1714:046E 03D1 ADD DX,CX

1714:0470 8BE5 MOV SP,BP

1714:0472 5D POP BP

1714:0473 C20800 RET 0008

1714:0476 55 PUSH BP

1714:0477 8BEC MOV BP,SP

1714:0479 8B5E04 MOV BX,[BP+04]

1714:047C 8B07 MOV AX,[BX]

1714:047E 8B5702 MOV DX,[BX+02]

1714:0481 8B4E06 MOV CX,[BP+06]

1714:0484 E8A303 CALL 082A

1714:0487 8B5E04 MOV BX,[BP+04]

1714:048A 8907 MOV [BX],AX

1714:048C 895702 MOV [BX+02],DX

1714:048F 8BE5 MOV SP,BP

1714:0491 5D POP BP

1714:0492 C20400 RET 0004

1714:0495 00558B ADD [DI-75],DL

1714:0498 EC IN AL,DX

1714:0499 57 PUSH DI

1714:049A 56 PUSH SI

1714:049B 53 PUSH BX

1714:049C 33FF XOR DI,DI

1714:049E 8B4606 MOV AX,[BP+06]

1714:04A1 0BC0 OR AX,AX

1714:04A3 7D11 JGE 04B6

1714:04A5 47 INC DI

1714:04A6 8B5604 MOV DX,[BP+04]

1714:04A9 F7D8 NEG AX

1714:04AB F7DA NEG DX

1714:04AD 1D0000 SBB AX,0000

1714:04B0 894606 MOV [BP+06],AX

1714:04B3 895604 MOV [BP+04],DX

1714:04B6 8B460A MOV AX,[BP+0A]

1714:04B9 0BC0 OR AX,AX

1714:04BB 7D11 JGE 04CE

1714:04BD 47 INC DI

1714:04BE 8B5608 MOV DX,[BP+08]

1714:04C1 F7D8 NEG AX

1714:04C3 F7DA NEG DX

1714:04C5 1D0000 SBB AX,0000

1714:04C8 89460A MOV [BP+0A],AX

1714:04CB 895608 MOV [BP+08],DX

1714:04CE 0BC0 OR AX,AX

1714:04D0 7515 JNZ 04E7

1714:04D2 8B4E08 MOV CX,[BP+08]

1714:04D5 8B4606 MOV AX,[BP+06]

1714:04D8 33D2 XOR DX,DX

1714:04DA F7F1 DIV CX

1714:04DC 8BD8 MOV BX,AX

1714:04DE 8B4604 MOV AX,[BP+04]

1714:04E1 F7F1 DIV CX

1714:04E3 8BD3 MOV DX,BX

1714:04E5 EB38 JMP 051F

1714:04E7 8BD8 MOV BX,AX

1714:04E9 8B4E08 MOV CX,[BP+08]

1714:04EC 8B5606 MOV DX,[BP+06]

1714:04EF 8B4604 MOV AX,[BP+04]

1714:04F2 D1EB SHR BX,1

1714:04F4 D1D9 RCR CX,1

1714:04F6 D1EA SHR DX,1

1714:04F8 D1D8 RCR AX,1

1714:04FA 0BDB OR BX,BX

1714:04FC 75F4 JNZ 04F2

1714:04FE F7F1 DIV CX

1714:0500 8BF0 MOV SI,AX

1714:0502 F7660A MUL WORD PTR [BP+0A]

1714:0505 91 XCHG CX,AX

1714:0506 8B4608 MOV AX,[BP+08]

1714:0509 F7E6 MUL SI

1714:050B 03D1 ADD DX,CX

1714:050D 720C JB 051B

1714:050F 3B5606 CMP DX,[BP+06]

1714:0512 7707 JA 051B

1714:0514 7206 JB 051C

1714:0516 3B4604 CMP AX,[BP+04]

1714:0519 7601 JBE 051C

1714:051B 4E DEC SI

1714:051C 33D2 XOR DX,DX

1714:051E 96 XCHG SI,AX

1714:051F 4F DEC DI

1714:0520 7507 JNZ 0529

1714:0522 F7DA NEG DX

1714:0524 F7D8 NEG AX

1714:0526 83DA00 SBB DX,+00

1714:0529 5B POP BX

1714:052A 5E POP SI

1714:052B 5F POP DI

1714:052C 8BE5 MOV SP,BP

1714:052E 5D POP BP

1714:052F C20800 RET 0008

verify_string_address(p0) - 0532

{

; p0 = address of string to verify

; store

1714:0532 55 PUSH BP

1714:0533 8BEC MOV BP,SP

1714:0535 56 PUSH SI

1714:0536 57 PUSH DI

; set es = ds

1714:0537 1E PUSH DS

1714:0538 07 POP ES

; set dx = p0

1714:0539 8B5604 MOV DX,[BP+04]

; set si = a452 (ptr to string table)

1714:053C BE52A4 MOV SI,A452

{

; load word at ds:si into ax - this is a string's address

1714:053F AD LODSW

; if string address (ax) == p0 (dx), string is found - jump out of loop to 0554

1714:0540 3BC2 CMP AX,DX

1714:0542 7410 JZ 0554

; check that string address is not zero

; move string address forward one byte

1714:0544 40 INC AX

; swap string table address (si) with string address (ax)

1714:0545 96 XCHG SI,AX

; if string address (si) == 0000, jump to 0554

1714:0546 740C JZ 0554

; now we move forward to the next address in string table

; set di = ax (string table address)

1714:0548 97 XCHG DI,AX

; clear ax

1714:0549 33C0 XOR AX,AX

; set cx = ffff

1714:054B B9FFFF MOV CX,FFFF

; scan string at es:di while char value != 0 (end of table)

1714:054E F2 REPNZ

1714:054F AE SCASB

; set si = di (string table address)

1714:0550 8BF7 MOV SI,DI

; jump back to 053f

1714:0552 EBEB JMP 053F

}

; set si = ax (string address)

1714:0554 96 XCHG SI,AX

; restore & return

1714:0555 5F POP DI

1714:0556 5E POP SI

1714:0557 8BE5 MOV SP,BP

1714:0559 5D POP BP

1714:055A C20200 RET 0002

; returns ax = ptr to string at ds:si, or 0 if not found

}

error_string_at_addtress(p0) - 055d

{

; p0 = address of string to error

; store

1714:055D 55 PUSH BP

1714:055E 8BEC MOV BP,SP

1714:0560 57 PUSH DI

; set fcn = param

1714:0561 FF7604 PUSH [BP+04]

; call verify_string_address(p0)

1714:0564 E8CBFF CALL 0532

; if ax == 0, return at 057f

1714:0567 0BC0 OR AX,AX

1714:0569 7414 JZ 057F

; set di = dx = ax (string address)

1714:056B 92 XCHG DX,AX

1714:056C 8BFA MOV DI,DX

; clear ax

1714:056E 33C0 XOR AX,AX

; set cx = ffff

1714:0570 B9FFFF MOV CX,FFFF

; scan string at es:di while char value != 0

1714:0573 F2 REPNZ

1714:0574 AE SCASB

; invert cx (should return string size + 1)

1714:0575 F7D1 NOT CX

; dec cx to get string size

1714:0577 49 DEC CX

; write string at ds:dx (size cx) to stderr

1714:0578 BB0200 MOV BX,0002

1714:057B B440 MOV AH,40

1714:057D CD21 INT 21

; restore & return

1714:057F 5F POP DI

1714:0580 8BE5 MOV SP,BP

1714:0582 5D POP BP

1714:0583 C20200 RET 0002

}

error_msg_header() - 0586

{

; store

1714:0586 55 PUSH BP

1714:0587 8BEC MOV BP,SP

; set string = 00fc

1714:0589 B8FC00 MOV AX,00FC

; call error_string_at_address(00fc)

1714:058C 50 PUSH AX

1714:058D E8CDFF CALL 055D

; if address at 52b6 == 0000, jump to 059b (do not call it)

1714:0590 833EB65200 CMP WORD PTR [52B6],+00

1714:0595 7404 JZ 059B

; call addr at 52b6

1714:0597 FF16B652 CALL [52B6]

; set string = 00ff

1714:059B B8FF00 MOV AX,00FF

; call error_string_at_address(00ff)

1714:059E 50 PUSH AX

1714:059F E8BBFF CALL 055D

; restore & return

1714:05A2 8BE5 MOV SP,BP

1714:05A4 5D POP BP

1714:05A5 C3 RET

}

build_parameter_table() - 05a6

{

; store address that we were called from in *52b8 (01fd)

1714:05A6 8F06B852 POP [52B8]

; set dx = 0002

1714:05AA BA0200 MOV DX,0002

; if dos version == 0002, jump to 05dc

1714:05AD 38168752 CMP [5287],DL

1714:05B1 7429 JZ 05DC

; set es = psp

1714:05B3 8E068552 MOV ES,[5285]

; set es = environment segment

1714:05B7 26 ES:

1714:05B8 8E062C00 MOV ES,[002C]

; store environement segment in 52aa

1714:05BC 8C06AA52 MOV [52AA],ES

; clear ax

1714:05C0 33C0 XOR AX,AX

; convert word to double word (clears dx)

1714:05C2 99 CWD

; set loop = 0x8000

1714:05C3 B90080 MOV CX,8000

; clear di

1714:05C6 33FF XOR DI,DI

{

; scan string in env seg until char = 00 (end of string)

1714:05C8 F2 REPNZ

1714:05C9 AE SCASB

; if next byte in string != 00, jump to 05c8

1714:05CA AE SCASB

1714:05CB 75FB JNZ 05C8

}

; advance di by 2 bytes

1714:05CD 47 INC DI

1714:05CE 47 INC DI

; store offset to program name in *52a8

1714:05CF 893EA852 MOV [52A8],DI

; set cx = ffff

1714:05D3 B9FFFF MOV CX,FFFF

; scan for end of program name

1714:05D6 F2 REPNZ

1714:05D7 AE SCASB

; invert cx (returns size of program name + 1)

1714:05D8 F7D1 NOT CX

; set dx = size of program name + 1

1714:05DA 8BD1 MOV DX,CX

; set di = 0001 (counts # of params, including program name)

1714:05DC BF0100 MOV DI,0001

; set si = 0081 (params in psp)

1714:05DF BE8100 MOV SI,0081

; set ds = psp

1714:05E2 8E1E8552 MOV DS,[5285]

; now the parser begins: di counts # of params, dx counts # of non-whitespace chars

; load first byte from psp param string

1714:05E6 AC LODSB

; if char == space || char == tab, jump back to 05e6 (before params)

1714:05E7 3C20 CMP AL,20

1714:05E9 74FB JZ 05E6

1714:05EB 3C09 CMP AL,09

1714:05ED 74F7 JZ 05E6

; if char == cr || char == null, jump to 0662 (no params)

1714:05EF 3C0D CMP AL,0D

1714:05F1 746F JZ 0662

1714:05F3 0AC0 OR AL,AL

1714:05F5 746B JZ 0662

; we found a new word on cmdline, increment # of params

1714:05F7 47 INC DI

; this loop parses the cmdline params

{

; move si back to first letter (in param string or after special symbol)

1714:05F8 4E DEC SI

; this loop counts all chars in params

{

; get next byte

1714:05F9 AC LODSB

; if char == space || char == tab, jump to 05e6

1714:05FA 3C20 CMP AL,20

1714:05FC 74E8 JZ 05E6

1714:05FE 3C09 CMP AL,09

1714:0600 74E4 JZ 05E6

; else if char == cr || char == null, jump to 0662

1714:0602 3C0D CMP AL,0D

1714:0604 745C JZ 0662

1714:0606 0AC0 OR AL,AL

1714:0608 7458 JZ 0662

; else if char == '"', jump to 0632 (quotes)

1714:060A 3C22 CMP AL,22

1714:060C 7424 JZ 0632

; else if char == '\', jump to 0615 (escape char)

1714:060E 3C5C CMP AL,5C

1714:0610 7403 JZ 0615

; otherwise (normal char) advance total # of chars

1714:0612 42 INC DX

; jump back to 05f9 (process next char)

1714:0613 EBE4 JMP 05F9

}

; clear cx

1714:0615 33C9 XOR CX,CX

; this loop counts the slashes

{

; add one to slash count

1714:0617 41 INC CX

; get next byte

1714:0618 AC LODSB

; if char == '\', jump to 0617 (escape char)

1714:0619 3C5C CMP AL,5C

1714:061B 74FA JZ 0617

}

; if char == '"', jump to 0625 (quotes)

1714:061D 3C22 CMP AL,22

1714:061F 7404 JZ 0625

; otherwise (normal char), add # of slashes to total # of chars

1714:0621 03D1 ADD DX,CX

; jump back to 05f8

1714:0623 EBD3 JMP 05F8

}

; this handles all slashes before a quote

; set ax = # of slashes

1714:0625 8BC1 MOV AX,CX

; # of slashes /= 2 (carry flag will be set if # is odd)

1714:0627 D1E9 SHR CX,1

; add half # of slashes to total # of chars + carry

; (the carry adds the last slash for an odd number)

1714:0629 13D1 ADC DX,CX

; if # of slashes is odd (slash before quote), jump to 05f9

; (the quote is escaped)

1714:062B A801 TEST AL,01

1714:062D 75CA JNZ 05F9

; the quote is not escaped, jump to quote loop at 0632

1714:062F EB01 JMP 0632

; this loop parses quoted strings

{

; move si back to quote

1714:0631 4E DEC SI

; this loop counts all chars within a quoted string

{

; get next byte

1714:0632 AC LODSB

; else if char == cr || char == null, jump to 0662

1714:0633 3C0D CMP AL,0D

1714:0635 742B JZ 0662

1714:0637 0AC0 OR AL,AL

1714:0639 7427 JZ 0662

; else if char == '"', jump to 05f9 (quotes)

1714:063B 3C22 CMP AL,22

1714:063D 74BA JZ 05F9

; else if char == '\', jump to 0646 (escape char)

1714:063F 3C5C CMP AL,5C

1714:0641 7403 JZ 0646

1714:0643 42 INC DX

1714:0644 EBEC JMP 0632

}

; clear cx

1714:0646 33C9 XOR CX,CX

; this loop counts the slashes within the quoted string

{

; add one to slash count

1714:0648 41 INC CX

; get next byte

1714:0649 AC LODSB

; if char == '\', jump to 0648 (escape char)

1714:064A 3C5C CMP AL,5C

1714:064C 74FA JZ 0648

}

; if char == '"', jump to 0656 (quotes)

1714:064E 3C22 CMP AL,22

1714:0650 7404 JZ 0656

; otherwise (normal char), add # of slashes to total # of chars

1714:0652 03D1 ADD DX,CX

; jump back to 05f8

1714:0654 EBDB JMP 0631

}

; this handles all slashes before a quote within a quoted string

; set ax = # of slashes

1714:0656 8BC1 MOV AX,CX

; # of slashes /= 2 (carry flag will be set if # is odd)

1714:0658 D1E9 SHR CX,1

; add half # of slashes to total # of chars + carry

; (the carry adds the last slash for an odd number)

1714:065A 13D1 ADC DX,CX

; if # of slashes is odd (slash before quote), jump to 05f9

; (the quote is escaped)

1714:065C A801 TEST AL,01

1714:065E 75D2 JNZ 0632

; the quote is not escaped, jump to param loop at 05f9

1714:0660 EB97 JMP 05F9

; we get here when we are done parsing params

; set ss = ds

1714:0662 16 PUSH SS

1714:0663 1F POP DS

; set *52a2 = # of params on cmdline (including program name)

; (this is # of args, argc)

1714:0664 893EA252 MOV [52A2],DI

; add # of params to # of chars in params

; (dx = full size of command line if each count from di represents a space)

1714:0668 03D7 ADD DX,DI

; increment # of params (for a null param)

1714:066A 47 INC DI

; # of params *= 2 (size of address table for params)

1714:066B D1E7 SHL DI,1

; add size of address table to size of command line

1714:066D 03D7 ADD DX,DI

; occurs on word boundry

1714:066F 80E2FE AND DL,FE

; offset stack pointer (sp) by size of address table & strings

1714:0672 2BE2 SUB SP,DX

; set *52a4 = address of parameter table

; (this is an array of string pointers, *argv[])

1714:0674 8BC4 MOV AX,SP

1714:0676 A3A452 MOV [52A4],AX

; set bx = address of param table

1714:0679 8BD8 MOV BX,AX

; add address of param table (bx) to size of param table (di)

1714:067B 03FB ADD DI,BX

; set es = ss

1714:067D 16 PUSH SS

1714:067E 07 POP ES

; write address of first param string to param table

1714:067F 36 SS:

1714:0680 893F MOV [BX],DI

; move bx to next address in table

1714:0682 43 INC BX

1714:0683 43 INC BX

; this mess builds the rest of the param table

; (I really am not willing to trace this right now)

1714:0684 C536A852 LDS SI,[52A8]

1714:0688 AC LODSB

1714:0689 AA STOSB

1714:068A 0AC0 OR AL,AL

1714:068C 75FA JNZ 0688

1714:068E BE8100 MOV SI,0081

1714:0691 36 SS:

1714:0692 8E1E8552 MOV DS,[5285]

1714:0696 EB03 JMP 069B

1714:0698 33C0 XOR AX,AX

1714:069A AA STOSB

1714:069B AC LODSB

1714:069C 3C20 CMP AL,20

1714:069E 74FB JZ 069B

1714:06A0 3C09 CMP AL,09

1714:06A2 74F7 JZ 069B

1714:06A4 3C0D CMP AL,0D

1714:06A6 7503 JNZ 06AB

1714:06A8 E97F00 JMP 072A

1714:06AB 0AC0 OR AL,AL

1714:06AD 7503 JNZ 06B2

1714:06AF EB79 JMP 072A

1714:06B1 90 NOP

1714:06B2 36 SS:

1714:06B3 893F MOV [BX],DI

1714:06B5 43 INC BX

1714:06B6 43 INC BX

1714:06B7 4E DEC SI

1714:06B8 AC LODSB

1714:06B9 3C20 CMP AL,20

1714:06BB 74DB JZ 0698

1714:06BD 3C09 CMP AL,09

1714:06BF 74D7 JZ 0698

1714:06C1 3C0D CMP AL,0D

1714:06C3 7462 JZ 0727

1714:06C5 0AC0 OR AL,AL

1714:06C7 745E JZ 0727

1714:06C9 3C22 CMP AL,22

1714:06CB 7427 JZ 06F4

1714:06CD 3C5C CMP AL,5C

1714:06CF 7403 JZ 06D4

1714:06D1 AA STOSB

1714:06D2 EBE4 JMP 06B8

1714:06D4 33C9 XOR CX,CX

1714:06D6 41 INC CX

1714:06D7 AC LODSB

1714:06D8 3C5C CMP AL,5C

1714:06DA 74FA JZ 06D6

1714:06DC 3C22 CMP AL,22

1714:06DE 7406 JZ 06E6

1714:06E0 B05C MOV AL,5C

1714:06E2 F3 REPZ

1714:06E3 AA STOSB

1714:06E4 EBD1 JMP 06B7

1714:06E6 B05C MOV AL,5C

1714:06E8 D1E9 SHR CX,1

1714:06EA F3 REPZ

1714:06EB AA STOSB

1714:06EC 7306 JNB 06F4

1714:06EE B022 MOV AL,22

1714:06F0 AA STOSB

1714:06F1 EBC5 JMP 06B8

1714:06F3 4E DEC SI

1714:06F4 AC LODSB

1714:06F5 3C0D CMP AL,0D

1714:06F7 742E JZ 0727

1714:06F9 0AC0 OR AL,AL

1714:06FB 742A JZ 0727

1714:06FD 3C22 CMP AL,22

1714:06FF 74B7 JZ 06B8

1714:0701 3C5C CMP AL,5C

1714:0703 7403 JZ 0708

1714:0705 AA STOSB

1714:0706 EBEC JMP 06F4

1714:0708 33C9 XOR CX,CX

1714:070A 41 INC CX

1714:070B AC LODSB

1714:070C 3C5C CMP AL,5C

1714:070E 74FA JZ 070A

1714:0710 3C22 CMP AL,22

1714:0712 7406 JZ 071A

1714:0714 B05C MOV AL,5C

1714:0716 F3 REPZ

1714:0717 AA STOSB

1714:0718 EBD9 JMP 06F3

1714:071A B05C MOV AL,5C

1714:071C D1E9 SHR CX,1

1714:071E F3 REPZ

1714:071F AA STOSB

1714:0720 7396 JNB 06B8

1714:0722 B022 MOV AL,22

1714:0724 AA STOSB

1714:0725 EBCD JMP 06F4

1714:0727 33C0 XOR AX,AX

1714:0729 AA STOSB

; set ds = ss

1714:072A 16 PUSH SS

1714:072B 1F POP DS

; end parameter address table with 0000

1714:072C C7070000 MOV WORD PTR [BX],0000

; jump to address in 52b8 (basically a fancy return)

1714:0730 FF26B852 JMP [52B8]

}

build_environment_table() - 0734

{

; store

1714:0734 55 PUSH BP

1714:0735 8BEC MOV BP,SP

1714:0737 55 PUSH BP

; set ds = psp

1714:0738 8E1E8552 MOV DS,[5285]

; clear ax,cx,di,bp

1714:073C 33C9 XOR CX,CX

1714:073E 8BC1 MOV AX,CX

1714:0740 8BE9 MOV BP,CX

1714:0742 8BF9 MOV DI,CX

; set cx = ffff

1714:0744 49 DEC CX

; set si = environment segment

1714:0745 8B362C00 MOV SI,[002C]

; if env seg == 0, jump to 075d (no env)

1714:0749 0BF6 OR SI,SI

1714:074B 7410 JZ 075D

; set es = env seg

1714:074D 8EC6 MOV ES,SI

; if first byte of env seg == 00, jump to 075d (no env)

1714:074F 26 ES:

1714:0750 803E000000 CMP BYTE PTR [0000],00

1714:0755 7406 JZ 075D

{

; scan es:di for end of string (00)

1714:0757 F2 REPNZ

1714:0758 AE SCASB

; bp++ (indicates env param #)

1714:0759 45 INC BP

; scan next char

1714:075A AE SCASB

; if char != 00, jump back to 0757

1714:075B 75FA JNZ 0757

}

; bp++ (now set to # of env params + 1)

1714:075D 45 INC BP

; swap di (end of env params) with ax (clear)

1714:075E 97 XCHG DI,AX

; move ax forward one (addr of end of env params)

1714:075F 40 INC AX

; drop bit 0 (so new data will be on a word boundry)

1714:0760 24FE AND AL,FE

; set di = # of env params + 1

1714:0762 8BFD MOV DI,BP

; bp *= 2 (represents address table ?)

1714:0764 D1E5 SHL BP,1

; ax += bp (size of env param strings + env param address table)

1714:0766 03C5 ADD AX,BP

; set ds = ss

1714:0768 16 PUSH SS

1714:0769 1F POP DS

; save di for call

1714:076A 57 PUSH DI

; call resize_data_segment(ax,0009)

1714:076B BF0900 MOV DI,0009

1714:076E E8C500 CALL 0836

; restore di after call

1714:0771 5F POP DI

; set cx = # of env params + 1

1714:0772 8BCF MOV CX,DI

; set di = addr of allocated memory (addr for copy of environment data)

1714:0774 8BFD MOV DI,BP

; add size of env address table to di (yields beginning of env strings)

1714:0776 03F8 ADD DI,AX

; store addr of new env table in *52a6

1714:0778 892EA652 MOV [52A6],BP

; set es = ds

1714:077C 1E PUSH DS

1714:077D 07 POP ES

; set ds:si = start of environment segment

1714:077E 8EDE MOV DS,SI

1714:0780 33F6 XOR SI,SI

; decrement cx to # of env params

1714:0782 49 DEC CX

; if cx == 0, jump to 0798 (since there is nothing to copy)

1714:0783 E313 JCXZ 0798

; loops for each paramter in environment segment

{

; if word at si == ";C", jump to 0790 (do not store in table)

1714:0785 813C3B43 CMP WORD PTR [SI],433B

1714:0789 7405 JZ 0790

; store address of env string in table

1714:078B 897E00 MOV [BP+00],DI

; move bp to next address in table

1714:078E 45 INC BP

1714:078F 45 INC BP

{

; get byte from env segment and store in local env table

1714:0790 AC LODSB

1714:0791 AA STOSB

; if byte != 0 (end of string), jump back to 0790

1714:0792 0AC0 OR AL,AL

1714:0794 75FA JNZ 0790

}

; loop back

1714:0796 E2ED LOOP 0785

}

; store 0000 as last address in env string table

1714:0798 894E00 MOV [BP+00],CX

; set ds = ss

1714:079B 16 PUSH SS

1714:079C 1F POP DS

; restore & return

1714:079D 5D POP BP

1714:079E 8BE5 MOV SP,BP

1714:07A0 5D POP BP

1714:07A1 C3 RET

}

; 07a2

{

; store

1714:07A2 56 PUSH SI

; clear si

1714:07A3 33F6 XOR SI,SI

; set cx = 0042

1714:07A5 B94200 MOV CX,0042

; clear ah

1714:07A8 32E4 XOR AH,AH

1714:07AA FC CLD

{

; get byte from ds:si

1714:07AB AC LODSB

; xor ah with byte from ds:si

1714:07AC 32E0 XOR AH,AL

; loop back

1714:07AE E2FB LOOP 07AB

}

; xor ah with 55 (01010101)

1714:07B0 80F455 XOR AH,55

; if it is zero, return at 07c2

1714:07B3 740D JZ 07C2

; call error_message_header()

1714:07B5 E8CEFD CALL 0586

; call error_string_at_address(0001)

1714:07B8 B80100 MOV AX,0001

1714:07BB 50 PUSH AX

1714:07BC E89EFD CALL 055D

; set ax = 0001

1714:07BF B80100 MOV AX,0001

; restore & return

1714:07C2 5E POP SI

1714:07C3 C3 RET

}

1714:07C4 B80200 MOV AX,0002

1714:07C7 E957FA JMP 0221

1714:07CA 8B4E0A MOV CX,[BP+0A]

1714:07CD 8B4604 MOV AX,[BP+04]

1714:07D0 8B5606 MOV DX,[BP+06]

1714:07D3 8B7E08 MOV DI,[BP+08]

1714:07D6 57 PUSH DI

1714:07D7 1E PUSH DS

1714:07D8 07 POP ES

1714:07D9 FC CLD

1714:07DA 93 XCHG BX,AX

1714:07DB 0AC0 OR AL,AL

1714:07DD 7413 JZ 07F2

1714:07DF 83F90A CMP CX,+0A

1714:07E2 750E JNZ 07F2

1714:07E4 0BD2 OR DX,DX

1714:07E6 790A JNS 07F2

1714:07E8 B02D MOV AL,2D

1714:07EA AA STOSB

1714:07EB F7DB NEG BX

1714:07ED 83D200 ADC DX,+00

1714:07F0 F7DA NEG DX

1714:07F2 8BF7 MOV SI,DI

1714:07F4 92 XCHG DX,AX

1714:07F5 33D2 XOR DX,DX

1714:07F7 0BC0 OR AX,AX

1714:07F9 7402 JZ 07FD

1714:07FB F7F1 DIV CX

1714:07FD 93 XCHG BX,AX

1714:07FE F7F1 DIV CX

1714:0800 92 XCHG DX,AX

1714:0801 87D3 XCHG DX,BX

1714:0803 0430 ADD AL,30

1714:0805 3C39 CMP AL,39

1714:0807 7602 JBE 080B

1714:0809 0427 ADD AL,27

1714:080B AA STOSB

1714:080C 8BC2 MOV AX,DX

1714:080E 0BC3 OR AX,BX

1714:0810 75E2 JNZ 07F4

1714:0812 8805 MOV [DI],AL

1714:0814 4F DEC DI

1714:0815 AC LODSB

1714:0816 8605 XCHG AL,[DI]

1714:0818 8844FF MOV [SI-01],AL

1714:081B 8D4401 LEA AX,[SI+01]

1714:081E 3BC7 CMP AX,DI

1714:0820 72F2 JB 0814

1714:0822 58 POP AX

1714:0823 5F POP DI

1714:0824 5E POP SI

1714:0825 8BE5 MOV SP,BP

1714:0827 5D POP BP

1714:0828 C3 RET

1714:0829 0032 ADD [BP+SI],DH

1714:082B ED IN AX,DX

1714:082C E306 JCXZ 0834

1714:082E D1E0 SHL AX,1

1714:0830 D1D2 RCL DX,1

1714:0832 E2FA LOOP 082E

1714:0834 C3 RET

1714:0835 00

resize_data_segment(ax,di) - 0836

{

; ax = size of data to add

; di = # of error string to print on fail

; set dx = size

1714:0836 8BD0 MOV DX,AX

; add used mem in data segment to size of data to add

1714:0838 03061452 ADD AX,[5214]

; if result carried (goes beyond segment), error at 0873

1714:083C 7235 JB 0873

; if max memory >= ax, jump to 0869

1714:083E 39060E52 CMP [520E],AX

1714:0842 7325 JNB 0869

; this section tries to add more memory so the data can fit on in the data segment

1714:0844 050F00 ADD AX,000F

1714:0847 50 PUSH AX

1714:0848 D1D8 RCR AX,1

1714:084A B103 MOV CL,03

1714:084C D3E8 SHR AX,CL

1714:084E 8CD9 MOV CX,DS

1714:0850 8B1E8552 MOV BX,[5285]

1714:0854 2BCB SUB CX,BX

1714:0856 03C1 ADD AX,CX

1714:0858 8EC3 MOV ES,BX

1714:085A 8BD8 MOV BX,AX

; resize memory block

1714:085C B44A MOV AH,4A

1714:085E CD21 INT 21

1714:0860 58 POP AX

; if error resizing block (insufficient mem to resize), error at 0873

1714:0861 7210 JB 0873

1714:0863 24F0 AND AL,F0

1714:0865 48 DEC AX

; write new segment size to *520e

1714:0866 A30E52 MOV [520E],AX

; we get here once we have enough memory

; set ax = bp

1714:0869 95 XCHG BP,AX

; set bp = old memory usage

1714:086A 8B2E1452 MOV BP,[5214]

; add data size to *5214

1714:086E 01161452 ADD [5214],DX

; return

1714:0872 C3 RET

; we get here on insufficient memory

; set ax = di (error code)

1714:0873 8BC7 MOV AX,DI

; jump into int_00()

1714:0875 E9A9F9 JMP 0221

; returns:

; bp = address to store new data

; ax = former bp

}

/* Video Functions */

restore_old_video_mode() - 0878

{

; store

1714:0878 55 PUSH BP

1714:0879 8BEC MOV BP,SP

1714:087B 56 PUSH SI

1714:087C 57 PUSH DI

1714:087D 1E PUSH DS

; get old video mode

1714:087E 8B1E0453 MOV BX,[5304]

; if mode == ff, jump to 088d

1714:0882 83FBFF CMP BX,-01

1714:0885 7406 JZ 088D

; otherwise, set video mode to old mode

1714:0887 B400 MOV AH,00

1714:0889 8AC3 MOV AL,BL

1714:088B CD10 INT 10

; restore & return

1714:088D 1F POP DS

1714:088E 5F POP DI

1714:088F 5E POP SI

1714:0890 5D POP BP

1714:0891 C3 RET

}

initialize_video_driver(p0) - 0892

{

; store

1714:0892 55 PUSH BP

1714:0893 8BEC MOV BP,SP

1714:0895 56 PUSH SI

1714:0896 57 PUSH DI

1714:0897 1E PUSH DS

; if video segment == 00, return at 08c5

1714:0898 833E525300 CMP WORD PTR [5352],+00

1714:089D 7426 JZ 08C5

; set ax = param

1714:089F 8B4604 MOV AX,[BP+04]

; if param == 0, jump to 08b8

1714:08A2 0BC0 OR AX,AX

1714:08A4 7412 JZ 08B8

; if old video mode != ffff, jump to 08b8

1714:08A6 833E0453FF CMP WORD PTR [5304],-01

1714:08AB 750B JNZ 08B8

; store ax (param) before interrupt

1714:08AD 50 PUSH AX

; get current video mode

1714:08AE B40F MOV AH,0F

1714:08B0 CD10 INT 10

; clear ah

1714:08B2 32E4 XOR AH,AH

; store old video mode in *5304

1714:08B4 A30453 MOV [5304],AX

; restore ax (param) after interrupt

1714:08B7 58 POP AX

; set bx = 52ba (addr of force cga flag)

1714:08B8 BBBA52 MOV BX,52BA

; far call video:initialize_video(ax,52ba)

1714:08BB C70650530300 MOV WORD PTR [5350],0003

1714:08C1 FF1E5053 CALL FAR [5350]

; restore & return

1714:08C5 1F POP DS

1714:08C6 5F POP DI

1714:08C7 5E POP SI

1714:08C8 5D POP BP

1714:08C9 C3 RET

}

; 08ca

{

1714:08CA 3B06D052 CMP AX,[52D0]

1714:08CE 7C14 JL 08E4

1714:08D0 3B06D252 CMP AX,[52D2]

1714:08D4 7F0E JG 08E4

1714:08D6 3B1ED452 CMP BX,[52D4]

1714:08DA 7C08 JL 08E4

1714:08DC 3B1ED652 CMP BX,[52D6]

1714:08E0 7F02 JG 08E4

1714:08E2 F8 CLC

1714:08E3 C3 RET

1714:08E4 F9 STC

1714:08E5 C3 RET

}

constrain_imagewindow(ax,bx,cx,dx) - 08e6

{

; ax = leftmost column

; bx = topmost row

; cx = rightmost column

; dx = bottommost row

; if left col > right col, swap them

1714:08E6 3BC1 CMP AX,CX

1714:08E8 7E01 JLE 08EB

1714:08EA 91 XCHG CX,AX

; if top row > bottom row, swap them

1714:08EB 3BDA CMP BX,DX

1714:08ED 7E02 JLE 08F1

1714:08EF 87DA XCHG BX,DX

; if left col < 0 (signed), set left col = 0

1714:08F1 3D0000 CMP AX,0000

1714:08F4 7D03 JGE 08F9

1714:08F6 B80000 MOV AX,0000

; if left col > 319 dec, set left col = 319 dec

1714:08F9 3D3F01 CMP AX,013F

1714:08FC 7E03 JLE 0901

1714:08FE B83F01 MOV AX,013F

; if top row < 0 (signed), set top row = 0

1714:0901 83FB00 CMP BX,+00

1714:0904 7D03 JGE 0909

1714:0906 BB0000 MOV BX,0000

; if top row > 199 dec, set top row = 199 dec

1714:0909 81FBC700 CMP BX,00C7

1714:090D 7E03 JLE 0912

1714:090F BBC700 MOV BX,00C7

; if right col < 0 (signed), set right col = 0

1714:0912 83F900 CMP CX,+00

1714:0915 7D03 JGE 091A

1714:0917 B90000 MOV CX,0000

; if right col > 319 dec, set right col = 319 dec

1714:091A 81F93F01 CMP CX,013F

1714:091E 7E03 JLE 0923

1714:0920 B93F01 MOV CX,013F

; if bottom row < 0 (signed), set bottom row = 0

1714:0923 83FA00 CMP DX,+00

1714:0926 7D03 JGE 092B

1714:0928 BA0000 MOV DX,0000

; if bottom row > 199 dec, set bottom row = 199 dec

1714:092B 81FAC700 CMP DX,00C7

1714:092F 7E03 JLE 0934

1714:0931 BAC700 MOV DX,00C7

; return

1714:0934 C3 RET

}

; 0935

{

1714:0935 E8EA00 CALL 0A22

1714:0938 0BF6 OR SI,SI

1714:093A 7506 JNZ 0942

1714:093C 0BFF OR DI,DI

1714:093E 7502 JNZ 0942

1714:0940 F8 CLC

1714:0941 C3 RET

1714:0942 85F7 TEST SI,DI

1714:0944 7402 JZ 0948

1714:0946 F9 STC

1714:0947 C3 RET

1714:0948 A3FA52 MOV [52FA],AX

1714:094B 891EFC52 MOV [52FC],BX

1714:094F 890EFE52 MOV [52FE],CX

1714:0953 89160053 MOV [5300],DX

1714:0957 57 PUSH DI

1714:0958 0BF6 OR SI,SI

1714:095A 7415 JZ 0971

1714:095C 91 XCHG CX,AX

1714:095D 87DA XCHG BX,DX

1714:095F E82F00 CALL 0991

1714:0962 A3FA52 MOV [52FA],AX

1714:0965 891EFC52 MOV [52FC],BX

1714:0969 8B0EFE52 MOV CX,[52FE]

1714:096D 8B160053 MOV DX,[5300]

1714:0971 5F POP DI

1714:0972 0BFF OR DI,DI

1714:0974 740A JZ 0980

1714:0976 E81800 CALL 0991

1714:0979 A3FE52 MOV [52FE],AX

1714:097C 891E0053 MOV [5300],BX

1714:0980 A1FA52 MOV AX,[52FA]

1714:0983 8B1EFC52 MOV BX,[52FC]

1714:0987 8B0EFE52 MOV CX,[52FE]

1714:098B 8B160053 MOV DX,[5300]

1714:098F F8 CLC

1714:0990 C3 RET

}

; 0991

{

1714:0991 8BF0 MOV SI,AX

1714:0993 8BFB MOV DI,BX

1714:0995 03C1 ADD AX,CX

1714:0997 03DA ADD BX,DX

1714:0999 A90080 TEST AX,8000

1714:099C 7804 JS 09A2

1714:099E D1E8 SHR AX,1

1714:09A0 EB0A JMP 09AC

1714:09A2 51 PUSH CX

1714:09A3 52 PUSH DX

1714:09A4 B90200 MOV CX,0002

1714:09A7 99 CWD

1714:09A8 F7F9 IDIV CX

1714:09AA 5A POP DX

1714:09AB 59 POP CX

1714:09AC F7C30080 TEST BX,8000

1714:09B0 7804 JS 09B6

1714:09B2 D1EB SHR BX,1

1714:09B4 EB0C JMP 09C2

1714:09B6 51 PUSH CX

1714:09B7 52 PUSH DX

1714:09B8 B90200 MOV CX,0002

1714:09BB 93 XCHG BX,AX

1714:09BC 99 CWD

1714:09BD F7F9 IDIV CX

1714:09BF 5A POP DX

1714:09C0 59 POP CX

1714:09C1 93 XCHG BX,AX

1714:09C2 2BF0 SUB SI,AX

1714:09C4 2BFB SUB DI,BX

1714:09C6 8936F652 MOV [52F6],SI

1714:09CA 893EF852 MOV [52F8],DI

1714:09CE E85100 CALL 0A22

1714:09D1 0BF6 OR SI,SI

1714:09D3 740E JZ 09E3

1714:09D5 8BC8 MOV CX,AX

1714:09D7 8BD3 MOV DX,BX

1714:09D9 0306F652 ADD AX,[52F6]

1714:09DD 031EF852 ADD BX,[52F8]

1714:09E1 EBAE JMP 0991

1714:09E3 3B06D052 CMP AX,[52D0]

1714:09E7 7406 JZ 09EF

1714:09E9 3B06D252 CMP AX,[52D2]

1714:09ED 750C JNZ 09FB

1714:09EF 3B1ED452 CMP BX,[52D4]

1714:09F3 742C JZ 0A21

1714:09F5 3B1ED652 CMP BX,[52D6]

1714:09F9 7426 JZ 0A21

1714:09FB 8B36F652 MOV SI,[52F6]

1714:09FF 8B3EF852 MOV DI,[52F8]

1714:0A03 F7C60080 TEST SI,8000

1714:0A07 7902 JNS 0A0B

1714:0A09 F7DE NEG SI

1714:0A0B F7C70080 TEST DI,8000

1714:0A0F 7902 JNS 0A13

1714:0A11 F7DF NEG DI

1714:0A13 3BF7 CMP SI,DI

1714:0A15 7D02 JGE 0A19

1714:0A17 8BF7 MOV SI,DI

1714:0A19 83FE01 CMP SI,+01

1714:0A1C 7C03 JL 0A21

1714:0A1E E970FF JMP 0991

1714:0A21 C3 RET

}

; 0a22

{

1714:0A22 33F6 XOR SI,SI

1714:0A24 8BFE MOV DI,SI

1714:0A26 3B06D052 CMP AX,[52D0]

1714:0A2A 7D03 JGE 0A2F

1714:0A2C 83CE01 OR SI,+01

1714:0A2F 3B0ED052 CMP CX,[52D0]

1714:0A33 7D03 JGE 0A38

1714:0A35 83CF01 OR DI,+01

1714:0A38 3B06D252 CMP AX,[52D2]

1714:0A3C 7E03 JLE 0A41

1714:0A3E 83CE02 OR SI,+02

1714:0A41 3B0ED252 CMP CX,[52D2]

1714:0A45 7E03 JLE 0A4A

1714:0A47 83CF02 OR DI,+02

1714:0A4A 3B1ED652 CMP BX,[52D6]

1714:0A4E 7E03 JLE 0A53

1714:0A50 83CE04 OR SI,+04

1714:0A53 3B16D652 CMP DX,[52D6]

1714:0A57 7E03 JLE 0A5C

1714:0A59 83CF04 OR DI,+04

1714:0A5C 3B1ED452 CMP BX,[52D4]

1714:0A60 7D03 JGE 0A65

1714:0A62 83CE08 OR SI,+08

1714:0A65 3B16D452 CMP DX,[52D4]

1714:0A69 7D03 JGE 0A6E

1714:0A6B 83CF08 OR DI,+08

1714:0A6E C3 RET

}

1714:0A6F 00

; 0a70(p0)

{

; p0 = text color

; store

1714:0A70 55 PUSH BP

1714:0A71 8BEC MOV BP,SP

1714:0A73 56 PUSH SI

1714:0A74 57 PUSH DI

1714:0A75 1E PUSH DS

; set ax = color

1714:0A76 8B4604 MOV AX,[BP+04]

; if color == ffff, jump to 0a8d

1714:0A79 3DFFFF CMP AX,FFFF

1714:0A7C 740F JZ 0A8D

; set bx = 000f (ands ax for bits 0-3)

1714:0A7E BB0F00 MOV BX,000F

; if video mode == cga, set bx = 0003 (ands ax for bits 0-1)

1714:0A81 833EC85200 CMP WORD PTR [52C8],+00

1714:0A86 7503 JNZ 0A8B

1714:0A88 BB0300 MOV BX,0003

; and color w/ bx

1714:0A8B 23C3 AND AX,BX

; set *52da = color

1714:0A8D A3DA52 MOV [52DA],AX

; if ax == ffff, return at 0a9f

1714:0A90 3DFFFF CMP AX,FFFF

1714:0A93 740A JZ 0A9F

; call far video:002d

1714:0A95 C70650532D00 MOV WORD PTR [5350],002D

1714:0A9B FF1E5053 CALL FAR [5350]

; restore & return

1714:0A9F 1F POP DS

1714:0AA0 5F POP DI

1714:0AA1 5E POP SI

1714:0AA2 5D POP BP

1714:0AA3 C20200 RET 0002

}

; 0aa6(p0,p1,p2,p3)

{

; p0 = bottom row, in pixels

; p1 = right col, in pixels

; p2 = top row, in pixels

; p3 = left col, in pixels

; store

1714:0AA6 55 PUSH BP

1714:0AA7 8BEC MOV BP,SP

1714:0AA9 56 PUSH SI

1714:0AAA 57 PUSH DI

1714:0AAB 1E PUSH DS

; set ax = left col, bx = top row, cx = right col, dx = bottom row

1714:0AAC 8B460A MOV AX,[BP+0A]

1714:0AAF 8B5E08 MOV BX,[BP+08]

1714:0AB2 8B4E06 MOV CX,[BP+06]

1714:0AB5 8B5604 MOV DX,[BP+04]

; call constrain_imagewindow(ax,bx,cx,dx)

1714:0AB8 E82BFE CALL 08E6

; far call video:003f(ax,bx,cx,dx,-c)

1714:0ABB F8 CLC

1714:0ABC C70650533F00 MOV WORD PTR [5350],003F

1714:0AC2 FF1E5053 CALL FAR [5350]

1714:0AC6 1F POP DS

1714:0AC7 5F POP DI

1714:0AC8 5E POP SI

1714:0AC9 5D POP BP

1714:0ACA C20800 RET 0008

}

1714:0ACD 00

; 0ace

{

; p0 = bottom row, in pixels

; p1 = right col, in pixels

; p2 = top row, in pixels

; p3 = left col, in pixels

; p4 = ?

; p5 = ?

; store

1714:0ACE 55 PUSH BP

1714:0ACF 8BEC MOV BP,SP

1714:0AD1 56 PUSH SI

1714:0AD2 57 PUSH DI

1714:0AD3 1E PUSH DS

; set ax = left col, bx = top row, cx = right col, dx = bottom row

1714:0AD4 8B460A MOV AX,[BP+0A]

1714:0AD7 8B5E08 MOV BX,[BP+08]

1714:0ADA 8B4E06 MOV CX,[BP+06]

1714:0ADD 8B5604 MOV DX,[BP+04]

; set si = ?, di = ?

1714:0AE0 8B760E MOV SI,[BP+0E]

1714:0AE3 8B7E0C MOV DI,[BP+0C]

; if si == di || si > 01 || di > 01, jump to 0b09

1714:0AE6 3BF7 CMP SI,DI

1714:0AE8 741F JZ 0B09

1714:0AEA 83FE01 CMP SI,+01

1714:0AED 771A JA 0B09

1714:0AEF 83FF01 CMP DI,+01

1714:0AF2 7715 JA 0B09

; call constrain_imagewindow(ax,bx,cx,dx)

1714:0AF4 E8EFFD CALL 08E6

; if si != 0, set carry; otherwise (si == 0), clear carry

1714:0AF7 0BF6 OR SI,SI

1714:0AF9 7403 JZ 0AFE

1714:0AFB F9 STC

1714:0AFC 7201 JB 0AFF

1714:0AFE F8 CLC

; far call video:text_data_transfer(-c)

1714:0AFF C70650531800 MOV WORD PTR [5350],0018

1714:0B05 FF1E5053 CALL FAR [5350]

; restore & return

1714:0B09 1F POP DS

1714:0B0A 5F POP DI

1714:0B0B 5E POP SI

1714:0B0C 5D POP BP

1714:0B0D C20C00 RET 000C

}

; 0b10

{

; p0 = bottom row, in pixels

; p1 = right col, in pixels

; p2 = top row, in pixels

; p3 = left col, in pixels

; store

1714:0B10 55 PUSH BP

1714:0B11 8BEC MOV BP,SP

1714:0B13 56 PUSH SI

1714:0B14 57 PUSH DI

1714:0B15 1E PUSH DS

; set ax = left col, bx = top row, cx = right col, dx = bottom row

1714:0B16 8B460A MOV AX,[BP+0A]

1714:0B19 8B5E08 MOV BX,[BP+08]

1714:0B1C 8B4E06 MOV CX,[BP+06]

1714:0B1F 8B5604 MOV DX,[BP+04]

1714:0B22 F8 CLC

; call 0b2d

1714:0B23 E80700 CALL 0B2D

; restore & return

1714:0B26 1F POP DS

1714:0B27 5F POP DI

1714:0B28 5E POP SI

1714:0B29 5D POP BP

1714:0B2A C20800 RET 0008

}

; 0b2d

{

1714:0B2D 890ECC52 MOV [52CC],CX

1714:0B31 8916CE52 MOV [52CE],DX

1714:0B35 9C PUSHF

1714:0B36 833EC45200 CMP WORD PTR [52C4],+00

1714:0B3B 7405 JZ 0B42

1714:0B3D E8F5FD CALL 0935

1714:0B40 7242 JB 0B84

1714:0B42 3BDA CMP BX,DX

1714:0B44 7513 JNZ 0B59

1714:0B46 3BC1 CMP AX,CX

1714:0B48 742E JZ 0B78

1714:0B4A E899FD CALL 08E6

1714:0B4D 9D POPF

1714:0B4E C70650533900 MOV WORD PTR [5350],0039

1714:0B54 FF1E5053 CALL FAR [5350]

1714:0B58 C3 RET

1714:0B59 3BC1 CMP AX,CX

1714:0B5B 750F JNZ 0B6C

1714:0B5D E886FD CALL 08E6

1714:0B60 9D POPF

1714:0B61 C70650533C00 MOV WORD PTR [5350],003C

1714:0B67 FF1E5053 CALL FAR [5350]

1714:0B6B C3 RET

1714:0B6C 9D POPF

1714:0B6D C70650533300 MOV WORD PTR [5350],0033

1714:0B73 FF1E5053 CALL FAR [5350]

1714:0B77 C3 RET

1714:0B78 9D POPF

1714:0B79 C70650533000 MOV WORD PTR [5350],0030

1714:0B7F FF1E5053 CALL FAR [5350]

1714:0B83 C3 RET

1714:0B84 9D POPF

1714:0B85 C3 RET

}

; 0b86

{

; p0 = bottom row, in pixels

; p1 = right col, in pixels

; p2 = top row, in pixels

; p3 = left col, in pixels

1714:0B86 55 PUSH BP

1714:0B87 8BEC MOV BP,SP

1714:0B89 56 PUSH SI

1714:0B8A 57 PUSH DI

1714:0B8B 1E PUSH DS

; set ax = left col, bx = top row, cx = right col, dx = bottom row

1714:0B8C 8B460A MOV AX,[BP+0A]

1714:0B8F 8B5E08 MOV BX,[BP+08]

1714:0B92 8B4E06 MOV CX,[BP+06]

1714:0B95 8B5604 MOV DX,[BP+04]

; call constrain_imagewindow(ax,bx,cx,dx)

1714:0B98 E84BFD CALL 08E6

; call far video:003f(ax,bx,cx,dx,+c)

1714:0B9B F9 STC

1714:0B9C C70650533F00 MOV WORD PTR [5350],003F

1714:0BA2 FF1E5053 CALL FAR [5350]

1714:0BA6 1F POP DS

1714:0BA7 5F POP DI

1714:0BA8 5E POP SI

1714:0BA9 5D POP BP

1714:0BAA C20800 RET 0008

}

1714:0BAD 00

load_compressed_file(p0) - 0bae

{

; p0 = ptr to filename

; store

1714:0BAE 55 PUSH BP

1714:0BAF 8BEC MOV BP,SP

1714:0BB1 56 PUSH SI

1714:0BB2 57 PUSH DI

1714:0BB3 1E PUSH DS

; set dx = p0 (filename)

1714:0BB4 8B5604 MOV DX,[BP+04]

; call read_file_main(p0)

1714:0BB7 E8A306 CALL 125D

; if no error, jump to 0bc5

1714:0BBA 7309 JNB 0BC5

; if bx != 0, jump to 0bd3

1714:0BBC 0BDB OR BX,BX

1714:0BBE 7513 JNZ 0BD3

; we get here on critical error

; set ax = -1 (indicates critical error)

1714:0BC0 B8FFFF MOV AX,FFFF

; return at 0bdc

1714:0BC3 EB17 JMP 0BDC

; we get here on success

; store bx (segment of file)

1714:0BC5 53 PUSH BX

; far call video:decompress_file(bx)

1714:0BC6 C70650534200 MOV WORD PTR [5350],0042

1714:0BCC FF1E5053 CALL FAR [5350]

; restore ax (segment of file)

1714:0BD0 58 POP AX

; return at 0bdc

1714:0BD1 EB09 JMP 0BDC

; we get here on failure

; store ax in 535c

1714:0BD3 A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:0BD6 FF1E9453 CALL FAR [5394]

; set ax = 0 (indicates failure)

1714:0BDA 33C0 XOR AX,AX

; restore & return

1714:0BDC 1F POP DS

1714:0BDD 5F POP DI

1714:0BDE 5E POP SI

1714:0BDF 5D POP BP

1714:0BE0 C20200 RET 0002

; returns ax = 0 on failure, -1 on critical error, file segment on success

}

1714:0BE3 00

free_memory(p0) - 0be4

{

; p0 = segment to free

; store

1714:0BE4 55 PUSH BP

1714:0BE5 8BEC MOV BP,SP

1714:0BE7 56 PUSH SI

1714:0BE8 57 PUSH DI

1714:0BE9 1E PUSH DS

; set bx = p0 (segment to free)

1714:0BEA 8B5E04 MOV BX,[BP+04]

; store es before int

1714:0BED 06 PUSH ES

; set es = bx (segment to free)

1714:0BEE 8EC3 MOV ES,BX

; free memory block at es

1714:0BF0 B449 MOV AH,49

1714:0BF2 CD21 INT 21

; restore es after int

1714:0BF4 07 POP ES

; restore & return

1714:0BF5 1F POP DS

1714:0BF6 5F POP DI

1714:0BF7 5E POP SI

1714:0BF8 5D POP BP

1714:0BF9 C20200 RET 0002

}

; 0bfc

{

1714:0BFC 55 PUSH BP

1714:0BFD 8BEC MOV BP,SP

1714:0BFF 56 PUSH SI

1714:0C00 57 PUSH DI

1714:0C01 1E PUSH DS

1714:0C02 8B7608 MOV SI,[BP+08]

1714:0C05 8B7E06 MOV DI,[BP+06]

1714:0C08 8B460C MOV AX,[BP+0C]

1714:0C0B 8B5E0A MOV BX,[BP+0A]

1714:0C0E 8B4E04 MOV CX,[BP+04]

1714:0C11 C70650536300 MOV WORD PTR [5350],0063

1714:0C17 FF1E5053 CALL FAR [5350]

1714:0C1B 1F POP DS

1714:0C1C 5F POP DI

1714:0C1D 5E POP SI

1714:0C1E 5D POP BP

1714:0C1F C20A00 RET 000A

}

; 0c22

{

1714:0C22 55 PUSH BP

1714:0C23 8BEC MOV BP,SP

1714:0C25 56 PUSH SI

1714:0C26 57 PUSH DI

1714:0C27 1E PUSH DS

; set ax = p0

1714:0C28 8B4604 MOV AX,[BP+04]

; call far video:000f(ax)

1714:0C2B C70650530F00 MOV WORD PTR [5350],000F

1714:0C31 FF1E5053 CALL FAR [5350]

1714:0C35 1F POP DS

1714:0C36 5F POP DI

1714:0C37 5E POP SI

1714:0C38 5D POP BP

1714:0C39 C20200 RET 0002

}

; 0c3c

{

1714:0C3C 55 PUSH BP

1714:0C3D 8BEC MOV BP,SP

1714:0C3F 56 PUSH SI

1714:0C40 57 PUSH DI

1714:0C41 1E PUSH DS

1714:0C42 8B460A MOV AX,[BP+0A]

1714:0C45 8B5E08 MOV BX,[BP+08]

1714:0C48 8B4E06 MOV CX,[BP+06]

1714:0C4B 8B5604 MOV DX,[BP+04]

1714:0C4E A3D052 MOV [52D0],AX

1714:0C51 891ED452 MOV [52D4],BX

1714:0C55 890ED252 MOV [52D2],CX

1714:0C59 8916D652 MOV [52D6],DX

1714:0C5D 1F POP DS

1714:0C5E 5F POP DI

1714:0C5F 5E POP SI

1714:0C60 5D POP BP

1714:0C61 C20800 RET 0008

}

; 0c64

{

1714:0C64 55 PUSH BP

1714:0C65 8BEC MOV BP,SP

1714:0C67 56 PUSH SI

1714:0C68 57 PUSH DI

1714:0C69 1E PUSH DS

1714:0C6A 8B4606 MOV AX,[BP+06]

1714:0C6D 8B5E04 MOV BX,[BP+04]

1714:0C70 A3CC52 MOV [52CC],AX

1714:0C73 891ECE52 MOV [52CE],BX

1714:0C77 833EDA52FF CMP WORD PTR [52DA],-01

1714:0C7C 7417 JZ 0C95

1714:0C7E 833EC45200 CMP WORD PTR [52C4],+00

1714:0C83 7405 JZ 0C8A

; call 08ca

1714:0C85 E842FC CALL 08CA

1714:0C88 720B JB 0C95

1714:0C8A F8 CLC

; call far video:0030

1714:0C8B C70650533000 MOV WORD PTR [5350],0030

1714:0C91 FF1E5053 CALL FAR [5350]

1714:0C95 1F POP DS

1714:0C96 5F POP DI

1714:0C97 5E POP SI

1714:0C98 5D POP BP

1714:0C99 C20400 RET 0004

}

1714:0C9C 55 PUSH BP

1714:0C9D 8BEC MOV BP,SP

1714:0C9F 56 PUSH SI

1714:0CA0 57 PUSH DI

1714:0CA1 1E PUSH DS

1714:0CA2 8B4608 MOV AX,[BP+08]

1714:0CA5 8B5E06 MOV BX,[BP+06]

1714:0CA8 8B4E04 MOV CX,[BP+04]

1714:0CAB 890ECC52 MOV [52CC],CX

1714:0CAF 833EC45200 CMP WORD PTR [52C4],+00

1714:0CB4 7405 JZ 0CBB

1714:0CB6 E81400 CALL 0CCD

1714:0CB9 720B JB 0CC6

1714:0CBB F8 CLC

1714:0CBC C70650533900 MOV WORD PTR [5350],0039

1714:0CC2 FF1E5053 CALL FAR [5350]

1714:0CC6 1F POP DS

1714:0CC7 5F POP DI

1714:0CC8 5E POP SI

1714:0CC9 5D POP BP

1714:0CCA C20600 RET 0006

1714:0CCD 3BC1 CMP AX,CX

1714:0CCF 7D01 JGE 0CD2

1714:0CD1 91 XCHG CX,AX

1714:0CD2 3B06D052 CMP AX,[52D0]

1714:0CD6 7C18 JL 0CF0

1714:0CD8 3B0ED252 CMP CX,[52D2]

1714:0CDC 7F12 JG 0CF0

1714:0CDE 3D0000 CMP AX,0000

1714:0CE1 7C0D JL 0CF0

1714:0CE3 3D3F01 CMP AX,013F

1714:0CE6 7F08 JG 0CF0

1714:0CE8 81F93F01 CMP CX,013F

1714:0CEC 7F02 JG 0CF0

1714:0CEE F8 CLC

1714:0CEF C3 RET

1714:0CF0 F9 STC

1714:0CF1 C3 RET

1714:0CF2 55 PUSH BP

1714:0CF3 8BEC MOV BP,SP

1714:0CF5 56 PUSH SI

1714:0CF6 57 PUSH DI

1714:0CF7 1E PUSH DS

1714:0CF8 8B4608 MOV AX,[BP+08]

1714:0CFB 8B5E06 MOV BX,[BP+06]

1714:0CFE 8B5604 MOV DX,[BP+04]

1714:0D01 8BC8 MOV CX,AX

1714:0D03 8916CE52 MOV [52CE],DX

1714:0D07 3BDA CMP BX,DX

1714:0D09 7E02 JLE 0D0D

1714:0D0B 87DA XCHG BX,DX

1714:0D0D 833EC45200 CMP WORD PTR [52C4],+00

1714:0D12 7405 JZ 0D19

1714:0D14 E81400 CALL 0D2B

1714:0D17 720B JB 0D24

1714:0D19 F8 CLC

1714:0D1A C70650533C00 MOV WORD PTR [5350],003C

1714:0D20 FF1E5053 CALL FAR [5350]

1714:0D24 1F POP DS

1714:0D25 5F POP DI

1714:0D26 5E POP SI

1714:0D27 5D POP BP

1714:0D28 C20600 RET 0006

1714:0D2B 3B1ED452 CMP BX,[52D4]

1714:0D2F 7C19 JL 0D4A

1714:0D31 3B16D652 CMP DX,[52D6]

1714:0D35 7F13 JG 0D4A

1714:0D37 83FB00 CMP BX,+00

1714:0D3A 7C0E JL 0D4A

1714:0D3C 81FBC700 CMP BX,00C7

1714:0D40 7F08 JG 0D4A

1714:0D42 81FAC700 CMP DX,00C7

1714:0D46 7F02 JG 0D4A

1714:0D48 F8 CLC

1714:0D49 C3 RET

1714:0D4A F9 STC

1714:0D4B C3 RET

; 0d4c

{

1714:0D4C 55 PUSH BP

1714:0D4D 8BEC MOV BP,SP

1714:0D4F 56 PUSH SI

1714:0D50 57 PUSH DI

1714:0D51 1E PUSH DS

1714:0D52 8B7608 MOV SI,[BP+08]

1714:0D55 8B7E06 MOV DI,[BP+06]

1714:0D58 8B460C MOV AX,[BP+0C]

1714:0D5B 8B5E0A MOV BX,[BP+0A]

1714:0D5E 8B4E04 MOV CX,[BP+04]

1714:0D61 C70650534B00 MOV WORD PTR [5350],004B

1714:0D67 FF1E5053 CALL FAR [5350]

1714:0D6B 1F POP DS

1714:0D6C 5F POP DI

1714:0D6D 5E POP SI

1714:0D6E 5D POP BP

1714:0D6F C20A00 RET 000A

}

; 0d72(p0)

{

1714:0D72 55 PUSH BP

1714:0D73 8BEC MOV BP,SP

1714:0D75 83EC08 SUB SP,+08

1714:0D78 57 PUSH DI

1714:0D79 56 PUSH SI

1714:0D7A C746FE0000 MOV WORD PTR [BP-02],0000

; call 0c22(0001)

1714:0D7F B80100 MOV AX,0001

1714:0D82 50 PUSH AX

1714:0D83 E89CFE CALL 0C22

; call 0a70(0000)

1714:0D86 2BC0 SUB AX,AX

1714:0D88 50 PUSH AX

1714:0D89 E8E4FC CALL 0A70

1714:0D8C 2BC0 SUB AX,AX

1714:0D8E 50 PUSH AX

1714:0D8F 50 PUSH AX

1714:0D90 B83F01 MOV AX,013F

1714:0D93 50 PUSH AX

1714:0D94 B8C700 MOV AX,00C7

1714:0D97 50 PUSH AX

1714:0D98 E80BFD CALL 0AA6

1714:0D9B 2BF6 SUB SI,SI

1714:0D9D BF0653 MOV DI,5306

1714:0DA0 C746F81453 MOV WORD PTR [BP-08],5314

1714:0DA5 FF7604 PUSH [BP+04]

1714:0DA8 56 PUSH SI

1714:0DA9 B84001 MOV AX,0140

1714:0DAC 2B05 SUB AX,[DI]

1714:0DAE D1F8 SAR AX,1

; call buffer_image(0000,ax,si,p0)

1714:0DB0 50 PUSH AX

1714:0DB1 FF76FE PUSH [BP-02]

1714:0DB4 E88D02 CALL 1044

1714:0DB7 8B5EF8 MOV BX,[BP-08]

1714:0DBA 8B07 MOV AX,[BX]

1714:0DBC 0146FE ADD [BP-02],AX

1714:0DBF 83C702 ADD DI,+02

1714:0DC2 8346F802 ADD WORD PTR [BP-08],+02

1714:0DC6 46 INC SI

1714:0DC7 83FE07 CMP SI,+07

1714:0DCA 7CD9 JL 0DA5

1714:0DCC 8976FC MOV [BP-04],SI

; call 0c22(0000)

1714:0DCF 2BC0 SUB AX,AX

1714:0DD1 50 PUSH AX

1714:0DD2 E84DFE CALL 0C22

; call 1140()

1714:0DD5 E86803 CALL 1140

1714:0DD8 5E POP SI

1714:0DD9 5F POP DI

1714:0DDA 8BE5 MOV SP,BP

1714:0DDC 5D POP BP

1714:0DDD C20200 RET 0002

}

detect_video() - 0de0

{

; store

1714:0DE0 55 PUSH BP

1714:0DE1 8BEC MOV BP,SP

1714:0DE3 56 PUSH SI

1714:0DE4 57 PUSH DI

1714:0DE5 1E PUSH DS

; set es = f000 (bios memory)

1714:0DE6 B800F0 MOV AX,F000

1714:0DE9 8EC0 MOV ES,AX

; set di = fffe (machine id)

1714:0DEB BFFEFF MOV DI,FFFE

; set ax = 0000

1714:0DEE B80000 MOV AX,0000

; get machine id (f000:fffe)

1714:0DF1 26 ES:

1714:0DF2 8A1D MOV BL,[DI]

; if machine id == FD (PCjr), jump to 0e09

1714:0DF4 80FBFD CMP BL,FD

1714:0DF7 7410 JZ 0E09

; if machine id == FF (Original IBM PC), jump to 0e09

1714:0DF9 80FBFF CMP BL,FF

1714:0DFC 740B JZ 0E09

1714:0DFE B80200 MOV AX,0002

; if machine id == FC (IBM) , jump to 0e09

1714:0E01 80FBFC CMP BL,FC

1714:0E04 7403 JZ 0E09

; set ax = 0006

1714:0E06 B80600 MOV AX,0006

; set *52ca = machine type

; (0000 for Original IBM or PCjr, 0002 for IBM, 0003 for Tandy, 0006 for all else)

1714:0E09 A3CA52 MOV [52CA],AX

; if machine id == FD (PCjr), return at 0e83

1714:0E0C 80FBFD CMP BL,FD

1714:0E0F 7472 JZ 0E83

; if machine id != FF (Original IBM PC), jump to 0e3c

1714:0E11 80FBFF CMP BL,FF

1714:0E14 7526 JNZ 0E3C

; check for Tandy

; scan f000:a000 - ffff for 'T' (as in "Tandy")

1714:0E16 BF00A0 MOV DI,A000

1714:0E19 B9FF5F MOV CX,5FFF

1714:0E1C B054 MOV AL,54

1714:0E1E F2 REPNZ

1714:0E1F AE SCASB

; if not found (not a Tandy), jump to 0e3c

1714:0E20 751A JNZ 0E3C

; push di,cx

1714:0E22 57 PUSH DI

1714:0E23 51 PUSH CX

; compare 5 bytes at ds:5322 ("Tandy") with f000:di

1714:0E24 BE2253 MOV SI,5322

1714:0E27 4F DEC DI

1714:0E28 B90500 MOV CX,0005

1714:0E2B F3 REPZ

1714:0E2C A6 CMPSB

; pop cx,di

1714:0E2D 59 POP CX

1714:0E2E 5F POP DI

; if 5 bytes != "Tandy", jump back to 0e1c (search for next 'T')

1714:0E2F 75EB JNZ 0E1C

; set *52ca = machine type = 0003

1714:0E31 C706CA520300 MOV WORD PTR [52CA],0003

; set ax = 0002, return at 0e8b (tandy video)

1714:0E37 B80200 MOV AX,0002

1714:0E3A EB4F JMP 0E8B

; not a Tandy or PCjr machine

; get ega info

1714:0E3C B412 MOV AH,12

1714:0E3E B310 MOV BL,10

1714:0E40 B9FFFF MOV CX,FFFF

1714:0E43 CD10 INT 10

; if ega features == ffff (no ega card), jump to 0e5e

1714:0E45 83F9FF CMP CX,-01

1714:0E48 7414 JZ 0E5E

; set al = color mode

1714:0E4A 8AC7 MOV AL,BH

; get bit one and toggle it

1714:0E4C 250100 AND AX,0001

1714:0E4F 3401 XOR AL,01

; if al == 00 (mono mode in effect), jump to 0e88 (unsupported video handler)

1714:0E51 0AC0 OR AL,AL

1714:0E53 7433 JZ 0E88

; if al != 01 (color mode not in effect), jump to 0e5e

1714:0E55 3C01 CMP AL,01

1714:0E57 7505 JNZ 0E5E

; set ax = 0001 (ega video), return at 0e8b

1714:0E59 B80100 MOV AX,0001

1714:0E5C EB2D JMP 0E8B

; get current video mode

1714:0E5E B40F MOV AH,0F

1714:0E60 CD10 INT 10

; if video mode == 07 (80x25 mono), jump to 0e68

1714:0E62 3C07 CMP AL,07

1714:0E64 7402 JZ 0E68

; otherwise (video mode != 80x25 mono), jump to 0e83

1714:0E66 EB1B JMP 0E83

; set port = 03ba

1714:0E68 BABA03 MOV DX,03BA

1714:0E6B EC IN AL,DX

1714:0E6C 2480 AND AL,80

1714:0E6E 8AE0 MOV AH,AL

; loop at most 0x8000 times

1714:0E70 B90080 MOV CX,8000

{

1714:0E73 EC IN AL,DX

1714:0E74 2480 AND AL,80

1714:0E76 3AC4 CMP AL,AH

1714:0E78 7504 JNZ 0E7E

; loop back

1714:0E7A E2F7 LOOP 0E73

}

; jump to 0e83 (cga detected)

1714:0E7C EB05 JMP 0E83

; set ax = 0003 (hercules/mono video), return at 0e8b

1714:0E7E B80300 MOV AX,0003

1714:0E81 EB08 JMP 0E8B

; set ax = 0000 (cga video), return at 0e8b

1714:0E83 B80000 MOV AX,0000

1714:0E86 EB03 JMP 0E8B

; return with ax = ffff (unsupported video)

1714:0E88 B8FFFF MOV AX,FFFF

; set *52c8 = ax

1714:0E8B A3C852 MOV [52C8],AX

; restore & return

1714:0E8E 1F POP DS

1714:0E8F 5F POP DI

1714:0E90 5E POP SI

1714:0E91 5D POP BP

1714:0E92 C3 RET

# 0de0 mov word ptr [52c8],0001

# 0de6 mov word ptr [52ca],0002

# 0dec ret

}

1714:0E93 00

/* My Midi functions */

0ded data = dw,00000000 (midi diver call address)

load_midi_drv() - 0df1

{

; store

# 0df1 pushf

# 0df2 push ax

# 0df3 push cx

; call load_file("MID.DRV")

# 0df4 mov ax,5340

# 0df7 push ax

# 0df8 call 0fae

; store midi driver segment in 0def

# 0dfb cs:

# 0dfc mov [0def],ax

# 0dff pop cx

# 0e00 pop ax

# 0e01 popf

# 0e02 ret

}

call_midi_drv(dx) - 0e03

{

; set w,0ded = dx

# 0e03 cs:

# 0e04 mov [0ded],dx

; far call midi:dx

# 0e08 cs:

# 0e09 call far [0ded]

# 0e0d ret

}

check_midi_in_keystroke() - 0e0e

{

; store

# 0e0e push bx

# 0e0f push dx

; set bx = ds

# 0e10 mov bx,ds

; call call_midi_drv(0000 = play_by_map(ds))

# 0e12 xor dx,dx

# 0e14 call 0e03

; restore

# 0e17 pop dx

# 0e18 pop bx

; call keystroke()

# 0e19 call 1d5e

; return

# 0e1c ret

}

start_map_detect() - 0e1d

{

; call call_midi_drv(000f = start_map_detect())

# 0e1d push dx

# 0e1e mov dx,000f

# 0e21 call 0e03

# 0e24 pop dx

; return

# 0e25 ret

}

stop_music() - 0e26

{

; call call_midi_drv(0003 = stom_music())

0e26 push dx

0e27 mov dx,0003

0e2a call 0e03

0e2d pop dx

; return

0e2e ret

}

stop_music_and_exit() - 0e2f

{

; call stop_music()

# 0e2f call 0e26

; exit to dos

# 0e32 mov ah,4c

# 0e34 int 21

}

load_middrv_and_intro() - 0e36

{

; call load_midi_drv()

# 0e36 call 0df1

; call intro.intro_main()

# 0e39 call 7a2e

; intro is done - start map detection

; call start_map_detect()

# 0e3c call 0e1d

# 0e3f ret

}

force_stones() - 0e40

{

; call call_midi_dr(0012 = force_stones())

0e40 push dx

0e41 mov dx,0012

0e44 call 0e03

0e47 pop dx

0e48 ret

}

midi_combat() - 0e49

{

; invoked at 6069

; call start_map_detect()

0e49 call 0e1d

; call combat.ae24()

0e4c call 7c32

0e4f ret

}

midi_shrines() - 0e50

{

; invoked at mainout.8b38

; call force_stones()

0e50 call 0e40

; call cast.f056

0e53 call 7a6a

; call start_map_detect()

0e56 call 0e1d

0e59 ret

}

midi_camping_with_watch() - 0e5a

{

; invoked at 6373

; call force_stones()

0e5a call 0e40

; call special_handler(p0,p1,p2)

0e5d call 5f86

; call start_map_detect()

0e60 call 0e1d

; jump back into fcn

0e63 jmp 6376

}

midi_camping_without_watch() - 0e66

{

; invoked at 3e7c

; call force_stones()

0e66 call 0e40

; call special_handler(p0,p1,p2)

0e69 call 5f86

; call start_map_detect()

0e6c call 0e1d

; jump back into fcn

0e6f jmp 3e7f

}

no_midi_capture() - 0e72

{

; call stop_music()

0e72 call 0e26

; call blckthrn.capture()

0e75 call 7abe

; call start_map_detect()

0e78 call 0e1d

; return

0e7b ret

}

no_midi_death() - 0e7c

{

; call stop_music()

0e7c call 0e26

; call blckthrn.death()

0e7f call 7a5e

; call start_map_detect()

0e82 call 0e1d

; return

0e85 ret

}

; 0e86-0e93 = unused

/* More Video Functions */

load_video_driver() - 0e94

{

; store

1714:0E94 55 PUSH BP

1714:0E95 8BEC MOV BP,SP

1714:0E97 56 PUSH SI

1714:0E98 57 PUSH DI

1714:0E99 1E PUSH DS

; if video mode != ffff (unsupported), jump to 0ea4

1714:0E9A 833EC852FF CMP WORD PTR [52C8],-01

1714:0E9F 7503 JNZ 0EA4

; else (video mode == unsupported), return at 0f24

1714:0EA1 E98000 JMP 0F24

; if parameter 'C' (force cga) is not specified, jump to 0eb3

1714:0EA4 833EBA5200 CMP WORD PTR [52BA],+00

1714:0EA9 7408 JZ 0EB3

; set video mode = cga

1714:0EAB C706C8520000 MOV WORD PTR [52C8],0000

1714:0EB1 EB2B JMP 0EDE

; if parameter 'E' (force ega) is not specified, jump to 0ec2

1714:0EB3 833EEF5200 CMP WORD PTR [52EF],+00

1714:0EB8 7408 JZ 0EC2

; set video mode = ega

1714:0EBA C706C8520100 MOV WORD PTR [52C8],0001

1714:0EC0 EB1C JMP 0EDE

; if parameter 'H' (force herc) is not specified, jump to 0ed1

1714:0EC2 833EF35200 CMP WORD PTR [52F3],+00

1714:0EC7 7408 JZ 0ED1

; set video mode = hercules

1714:0EC9 C706C8520300 MOV WORD PTR [52C8],0003

1714:0ECF EB0D JMP 0EDE

; if parameter 'T' (force tandy) is not specified, jump to 0ede

1714:0ED1 833EF15200 CMP WORD PTR [52F1],+00

1714:0ED6 7406 JZ 0EDE

; set video mode = tandy

1714:0ED8 C706C8520200 MOV WORD PTR [52C8],0002

; if video mode != Tandy, jump to 0f01

1714:0EDE 8B1EC852 MOV BX,[52C8]

1714:0EE2 83FB02 CMP BX,+02

1714:0EE5 751A JNZ 0F01

; allocate 4000 bytes of mem

; call allocate_memory()

1714:0EE7 BB0004 MOV BX,0400

1714:0EEA E8D906 CALL 15C6

1714:0EED 7304 JNB 0EF3

; exit to dos w/ error code

1714:0EEF B44C MOV AH,4C

1714:0EF1 CD21 INT 21

; set es:bx = 0050:0010 (basic's default ds)

1714:0EF3 BB5000 MOV BX,0050

1714:0EF6 8EC3 MOV ES,BX

1714:0EF8 BB1000 MOV BX,0010

; set basic's default ds = allocated segment

; (es:bx is base addr 0510? why?)

1714:0EFB 26 ES:

1714:0EFC 8907 MOV [BX],AX

; set bx = video 2 (tandy)

1714:0EFE BB0200 MOV BX,0002

; bx *= 2, since we are going to get filename addr from table

; (this is the video driver lookup table)

1714:0F01 D1E3 SHL BX,1

; get addr of file from video driver lookup table

; (is this mainout.ovl ??? - verify!)

1714:0F03 8B972853 MOV DX,[BX+5328]

; call read_file_main(video driver)

1714:0F07 E85303 CALL 125D

; if error, jump to 0f12

1714:0F0A 7206 JB 0F12

; we get here on success

; store bx (video driver segment) in 5352

1714:0F0C 891E5253 MOV [5352],BX

; return at 0f24

1714:0F10 7312 JNB 0F24

; we get here on failure

; if bx == 0, jump to 0f21 (critical error)

1714:0F12 0BDB OR BX,BX

1714:0F14 740B JZ 0F21

; store ax in 535c

1714:0F16 A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:0F19 FF1E9453 CALL FAR [5394]

; set ax = 0 (indicates failure)

1714:0F1D 33C0 XOR AX,AX

; return at 0f24

1714:0F1F EB03 JMP 0F24

; we get here on critical error

; set ax = -1 (indicates critical error)

1714:0F21 B8FFFF MOV AX,FFFF

; restore & return

1714:0F24 1F POP DS

1714:0F25 5F POP DI

1714:0F26 5E POP SI

1714:0F27 5D POP BP

1714:0F28 C3 RET

; returns ax = 0 on failure, -1 on critical error, ? on success

}

1714:0F29 00

init_data_buffer() - 0f2a

{

; store

1714:0F2A 55 PUSH BP

1714:0F2B 8BEC MOV BP,SP

1714:0F2D 56 PUSH SI

1714:0F2E 57 PUSH DI

1714:0F2F 1E PUSH DS

; set carry

1714:0F30 F9 STC

; call video:init_data_buffer()

1714:0F31 C70650530600 MOV WORD PTR [5350],0006

1714:0F37 FF1E5053 CALL FAR [5350]

; set *5354 = segment of 3rd part of video buffer

1714:0F3B A35453 MOV [5354],AX

; restore & return

1714:0F3E 1F POP DS

1714:0F3F 5F POP DI

1714:0F40 5E POP SI

1714:0F41 8BE5 MOV SP,BP

1714:0F43 5D POP BP

1714:0F44 C3 RET

}

1714:0F45 00

; 0f46(p0,p1,p2,p3)

{

; p0 = bottom row, in pixels

; p1 = right col, in pixels

; p2 = top row, in pixels

; p3 = left col, in pixels

; store

1714:0F46 55 PUSH BP

1714:0F47 8BEC MOV BP,SP

1714:0F49 56 PUSH SI

1714:0F4A 57 PUSH DI

1714:0F4B 1E PUSH DS

; set ax = left col, bx = top row, cx = right col, dx = bottom row

1714:0F4C 8B460A MOV AX,[BP+0A]

1714:0F4F 8B5E08 MOV BX,[BP+08]

1714:0F52 8B4E06 MOV CX,[BP+06]

1714:0F55 8B5604 MOV DX,[BP+04]

; call constrain_imagewindow()

1714:0F58 E88BF9 CALL 08E6

; call far video:0066(ax,bx,cx,dx,-c)

1714:0F5B F8 CLC

1714:0F5C C70650536600 MOV WORD PTR [5350],0066

1714:0F62 FF1E5053 CALL FAR [5350]

; restore & return

1714:0F66 1F POP DS

1714:0F67 5F POP DI

1714:0F68 5E POP SI

1714:0F69 5D POP BP

1714:0F6A C20800 RET 0008

}

1714:0F6D 00

image_data_transfer(p0,p1) - 0f6e

{

; p0 = read from video buffer

; p1 = write to video buffer

; store

1714:0F6E 55 PUSH BP

1714:0F6F 8BEC MOV BP,SP

1714:0F71 56 PUSH SI

1714:0F72 57 PUSH DI

1714:0F73 1E PUSH DS

; set ax = p1 (write), bx = p0 (read)

1714:0F74 8B4606 MOV AX,[BP+06]

1714:0F77 8B5E04 MOV BX,[BP+04]

; if ax == bx (cannot do both), return at 0f88

1714:0F7A 3BC3 CMP AX,BX

1714:0F7C 740A JZ 0F88

; call far video:image_data_tranfer(ax,bx)

1714:0F7E C70650531B00 MOV WORD PTR [5350],001B

1714:0F84 FF1E5053 CALL FAR [5350]

; restore & return

1714:0F88 1F POP DS

1714:0F89 5F POP DI

1714:0F8A 5E POP SI

1714:0F8B 5D POP BP

1714:0F8C C20400 RET 0004

}

1714:0F8F 00

; 0f90

{

; p0 = ?

; p1 = ?

; store

1714:0F90 55 PUSH BP

1714:0F91 8BEC MOV BP,SP

1714:0F93 56 PUSH SI

1714:0F94 57 PUSH DI

1714:0F95 1E PUSH DS

; set ax = *52cc, bx = *52ce, cx = p1, dx = p0

1714:0F96 A1CC52 MOV AX,[52CC]

1714:0F99 8B1ECE52 MOV BX,[52CE]

1714:0F9D 8B4E06 MOV CX,[BP+06]

1714:0FA0 8B5604 MOV DX,[BP+04]

; clear carry

1714:0FA3 F8 CLC

; call 0b2d(ax,bx,cx,dx)

1714:0FA4 E886FB CALL 0B2D

; restore & return

1714:0FA7 1F POP DS

1714:0FA8 5F POP DI

1714:0FA9 5E POP SI

1714:0FAA 5D POP BP

1714:0FAB C20400 RET 0004

}

load_file(p0) - 0fae

{

; p0 = ptr to filename

; store

1714:0FAE 55 PUSH BP

1714:0FAF 8BEC MOV BP,SP

1714:0FB1 56 PUSH SI

1714:0FB2 57 PUSH DI

1714:0FB3 1E PUSH DS

; set dx = p0 (filename)

1714:0FB4 8B5604 MOV DX,[BP+04]

; call read_file_main(p0)

1714:0FB7 E8A302 CALL 125D

; if no error, jump to 0fc2

1714:0FBA 7306 JNB 0FC2

; if bx == 0 (critical error), jump to 0fc6

1714:0FBC 0BDB OR BX,BX

1714:0FBE 7406 JZ 0FC6

; otherwise, jump to 0fcb

1714:0FC0 7509 JNZ 0FCB

; we get here on success

; set ax = bx (file segment)

1714:0FC2 8BC3 MOV AX,BX

; jump to 0fd4

1714:0FC4 EB0E JMP 0FD4

; we get here on critical error

; set ax = -1 (indicates critical error)

1714:0FC6 B8FFFF MOV AX,FFFF

; return at 0fd4

1714:0FC9 EB09 JMP 0FD4

; we get here on failure

; store ax in 535c

1714:0FCB A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:0FCE FF1E9453 CALL FAR [5394]

; set ax = 0 (indicates failure)

1714:0FD2 33C0 XOR AX,AX

; restore & return

1714:0FD4 1F POP DS

1714:0FD5 5F POP DI

1714:0FD6 5E POP SI

1714:0FD7 5D POP BP

1714:0FD8 C20200 RET 0002

; returns ax = 0 on failure, -1 on critical error, file segment on success

}

1714:0FDB 00

free_memory(p0) - 0fdc

{

; p0 = segment to free

; store

1714:0FDC 55 PUSH BP

1714:0FDD 8BEC MOV BP,SP

1714:0FDF 56 PUSH SI

1714:0FE0 57 PUSH DI

1714:0FE1 1E PUSH DS

; set bx = p0 (segment to free)

1714:0FE2 8B5E04 MOV BX,[BP+04]

; store es before int

1714:0FE5 06 PUSH ES

; set es = bx (segment to free)

1714:0FE6 8EC3 MOV ES,BX

; free memory block at es

1714:0FE8 B449 MOV AH,49

1714:0FEA CD21 INT 21

; restore es after int

1714:0FEC 07 POP ES

; restore & return

1714:0FED 1F POP DS

1714:0FEE 5F POP DI

1714:0FEF 5E POP SI

1714:0FF0 5D POP BP

1714:0FF1 C20200 RET 0002

}

load_compressed_tileset(p0) - 0ff4

{

; p0 = ptr to filename

; store

1714:0FF4 55 PUSH BP

1714:0FF5 8BEC MOV BP,SP

1714:0FF7 56 PUSH SI

1714:0FF8 57 PUSH DI

1714:0FF9 1E PUSH DS

; set dx = p0 (filename)

1714:0FFA 8B5604 MOV DX,[BP+04]

; call read_file_main(p0)

1714:0FFD E85D02 CALL 125D

; if no error, jump to 100b

1714:1000 7309 JNB 100B

; if bx != 0, jump to 101d

1714:1002 0BDB OR BX,BX

1714:1004 7517 JNZ 101D

; we get here on critical error

; otherwise (bx == 0), set ax = -1 (indicates critical error)

1714:1006 B8FFFF MOV AX,FFFF

; return at 1026

1714:1009 EB1B JMP 1026

; we get here on success

1714:100B 8BC8 MOV CX,AX

1714:100D 49 DEC CX

; call far video:load_tileset(bx,cx)

1714:100E C70650534800 MOV WORD PTR [5350],0048

1714:1014 FF1E5053 CALL FAR [5350]

; set ax = 0001 (indicate success)

1714:1018 B80100 MOV AX,0001

; return at 1026

1714:101B EB09 JMP 1026

; we get here on failure

; store ax in 535c

1714:101D A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:1020 FF1E9453 CALL FAR [5394]

; set ax = 0 (indicates failure)

1714:1024 33C0 XOR AX,AX

; restore * return

1714:1026 1F POP DS

1714:1027 5F POP DI

1714:1028 5E POP SI

1714:1029 5D POP BP

1714:102A C20200 RET 0002

; returns

; ax = 0 on failure, -1 on critical error, 1 on success

}

1714:102D 00

unload_tileset() - 102e

{

1714:102E 55 PUSH BP

1714:102F 8BEC MOV BP,SP

1714:1031 56 PUSH SI

1714:1032 57 PUSH DI

1714:1033 1E PUSH DS

; call far video:free_tileset()

1714:1034 C70650535A00 MOV WORD PTR [5350],005A

1714:103A FF1E5053 CALL FAR [5350]

1714:103E 1F POP DS

1714:103F 5F POP DI

1714:1040 5E POP SI

1714:1041 5D POP BP

1714:1042 C3 RET

}

1714:1043 00

buffer_image(p0,p1,p2,p3) - 1044

{

; p0 = row #

; p1 = col #

; p2 = expected 1st byte of data

; p3 = file segment

; store

1714:1044 55 PUSH BP

1714:1045 8BEC MOV BP,SP

1714:1047 56 PUSH SI

1714:1048 57 PUSH DI

1714:1049 1E PUSH DS

; set ax = file segment, bx = expected 1st byte, si = col #, di = row #

1714:104A 8B460A MOV AX,[BP+0A]

1714:104D 8B5E08 MOV BX,[BP+08]

1714:1050 8B7606 MOV SI,[BP+06]

1714:1053 8B7E04 MOV DI,[BP+04]

; call far video:copy_image_into_data_buffer(ax,bx,si,di)

1714:1056 C70650534E00 MOV WORD PTR [5350],004E

1714:105C FF1E5053 CALL FAR [5350]

; restore & return

1714:1060 1F POP DS

1714:1061 5F POP DI

1714:1062 5E POP SI

1714:1063 5D POP BP

1714:1064 C20800 RET 0008

}

1714:1067 00

; 1068

{

1714:1068 55 PUSH BP

1714:1069 8BEC MOV BP,SP

1714:106B 56 PUSH SI

1714:106C 57 PUSH DI

1714:106D 1E PUSH DS

1714:106E 33FF XOR DI,DI

1714:1070 1E PUSH DS

1714:1071 8B4606 MOV AX,[BP+06]

1714:1074 8B5E04 MOV BX,[BP+04]

1714:1077 8B7608 MOV SI,[BP+08]

1714:107A 8B0EBC52 MOV CX,[52BC]

1714:107E 8B16BE52 MOV DX,[52BE]

1714:1082 F9 STC

1714:1083 C70650536600 MOV WORD PTR [5350],0066

1714:1089 FF1E5053 CALL FAR [5350]

1714:108D 1F POP DS

1714:108E 1E PUSH DS

1714:108F 47 INC DI

1714:1090 8B4606 MOV AX,[BP+06]

1714:1093 8B5E04 MOV BX,[BP+04]

1714:1096 8B7608 MOV SI,[BP+08]

1714:1099 8B0EBC52 MOV CX,[52BC]

1714:109D 8B16BE52 MOV DX,[52BE]

1714:10A1 F9 STC

1714:10A2 C70650536600 MOV WORD PTR [5350],0066

1714:10A8 FF1E5053 CALL FAR [5350]

1714:10AC 1F POP DS

1714:10AD 47 INC DI

1714:10AE 81FF0001 CMP DI,0100

1714:10B2 7422 JZ 10D6

1714:10B4 F7C70700 TEST DI,0007

1714:10B8 75B6 JNZ 1070

1714:10BA 57 PUSH DI

1714:10BB 803E935842 CMP BYTE PTR [5893],42

1714:10C0 750E JNZ 10D0

1714:10C2 B80100 MOV AX,0001

1714:10C5 50 PUSH AX

1714:10C6 E8F170 CALL 81BA

1714:10C9 5F POP DI

1714:10CA 0BC0 OR AX,AX

1714:10CC 74A2 JZ 1070

1714:10CE 7508 JNZ 10D8

; call 5910

1714:10D0 E83D48 CALL 5910

1714:10D3 5F POP DI

1714:10D4 EB9A JMP 1070

1714:10D6 33C0 XOR AX,AX

1714:10D8 1F POP DS

1714:10D9 5F POP DI

1714:10DA 5E POP SI

1714:10DB 5D POP BP

1714:10DC C20600 RET 0006

}

1714:10DF 00

1714:10E0 55 PUSH BP

1714:10E1 8BEC MOV BP,SP

1714:10E3 56 PUSH SI

1714:10E4 57 PUSH DI

1714:10E5 1E PUSH DS

1714:10E6 8B4606 MOV AX,[BP+06]

1714:10E9 8B5E04 MOV BX,[BP+04]

1714:10EC 8AE3 MOV AH,BL

1714:10EE 8B5E08 MOV BX,[BP+08]

1714:10F1 8B0EBC52 MOV CX,[52BC]

1714:10F5 8B16BE52 MOV DX,[52BE]

1714:10F9 8B36C052 MOV SI,[52C0]

1714:10FD 8B3EC252 MOV DI,[52C2]

1714:1101 C70650535100 MOV WORD PTR [5350],0051

1714:1107 FF1E5053 CALL FAR [5350]

1714:110B 1F POP DS

1714:110C 5F POP DI

1714:110D 5E POP SI

1714:110E 5D POP BP

1714:110F C20600 RET 0006

1714:1112 55 PUSH BP

1714:1113 8BEC MOV BP,SP

1714:1115 56 PUSH SI

1714:1116 57 PUSH DI

1714:1117 1E PUSH DS

1714:1118 8B4608 MOV AX,[BP+08]

1714:111B 8A1E9358 MOV BL,[5893]

1714:111F 8B0EBC52 MOV CX,[52BC]

1714:1123 8B16BE52 MOV DX,[52BE]

1714:1127 8B7606 MOV SI,[BP+06]

1714:112A 8B7E04 MOV DI,[BP+04]

1714:112D F9 STC

1714:112E C70650536000 MOV WORD PTR [5350],0060

1714:1134 FF1E5053 CALL FAR [5350]

1714:1138 1F POP DS

1714:1139 5F POP DI

1714:113A 5E POP SI

1714:113B 5D POP BP

1714:113C C20600 RET 0006

1714:113F 00

; 1140

{

1714:1140 55 PUSH BP

1714:1141 8BEC MOV BP,SP

1714:1143 56 PUSH SI

1714:1144 57 PUSH DI

1714:1145 1E PUSH DS

; set ax = timer calibration

1714:1146 A15653 MOV AX,[5356]

; far call video:006f()

1714:1149 C70650536F00 MOV WORD PTR [5350],006F

1714:114F FF1E5053 CALL FAR [5350]

1714:1153 1F POP DS

1714:1154 5F POP DI

1714:1155 5E POP SI

1714:1156 5D POP BP

1714:1157 C3 RET

}

/* Timer Functions */

init_timer() - 1158

{

; store

1714:1158 55 PUSH BP

1714:1159 8BEC MOV BP,SP

1714:115B 56 PUSH SI

1714:115C 57 PUSH DI

1714:115D 1E PUSH DS

1714:115E 1E PUSH DS

; set interrupt vector 24 = fcn int_24()

1714:115F 0E PUSH CS

1714:1160 1F POP DS

1714:1161 BA3312 MOV DX,1233

1714:1164 B024 MOV AL,24

1714:1166 B425 MOV AH,25

1714:1168 CD21 INT 21

; set interrupt vector 23 = fcn int_23()

1714:116A 0E PUSH CS

1714:116B 1F POP DS

1714:116C BA4712 MOV DX,1247

1714:116F B023 MOV AL,23

1714:1171 B425 MOV AH,25

1714:1173 CD21 INT 21

; restore ds

1714:1175 1F POP DS

; call init_charset_table()

1714:1176 E80B00 CALL 1184

; call clear_timer_vars()

1714:1179 E8AA00 CALL 1226

; call calibrate_timer()

1714:117C E83500 CALL 11B4

; restore & return

1714:117F 1F POP DS

1714:1180 5F POP DI

1714:1181 5E POP SI

1714:1182 5D POP BP

1714:1183 C3 RET

}

init_charset_table() - 1184

{

; set *539a = si = 535e

1714:1184 BE5E53 MOV SI,535E

1714:1187 89369A53 MOV [539A],SI

; clear ax

1714:118B 33C0 XOR AX,AX

; loop 4 times

1714:118D B90400 MOV CX,0004

{

; set left column = 0

1714:1190 8804 MOV [SI],AL

; set top row = 0

1714:1192 884401 MOV [SI+01],AL

; set right column = 27 (39 dec)

1714:1195 C6440227 MOV BYTE PTR [SI+02],27

; set bottom row = 18 (24 dec)

1714:1199 C6440318 MOV BYTE PTR [SI+03],18

; set current text position = 0,0

1714:119D 884404 MOV [SI+04],AL

1714:11A0 884405 MOV [SI+05],AL

; set 4th word = 0f00

1714:11A3 C644060F MOV BYTE PTR [SI+06],0F

1714:11A7 884407 MOV [SI+07],AL

; move si forward to next charset

1714:11AA 83C608 ADD SI,+08

; loop back

1714:11AD E2E1 LOOP 1190

}

; convert byte to word

; (clears ah, which should already be clear)

1714:11AF 98 CBW

; set *5386 = ax = 0000

1714:11B0 A38653 MOV [5386],AX

; return

1714:11B3 C3 RET

}

calibrate_timer() - 11b4

{

; clear timer calibration, current timer value

1714:11B4 C70656530000 MOV WORD PTR [5356],0000

1714:11BA C7065A530000 MOV WORD PTR [535A],0000

; get interrupt vector 1c

1714:11C0 B01C MOV AL,1C

1714:11C2 B435 MOV AH,35

1714:11C4 CD21 INT 21

; store old vector 1c (es:bx)

1714:11C6 06 PUSH ES

1714:11C7 53 PUSH BX

; store ds before call

1714:11C8 1E PUSH DS

; set ds:dx = fcn int_1c()

1714:11C9 8CC8 MOV AX,CS

1714:11CB 8ED8 MOV DS,AX

1714:11CD 8D161412 LEA DX,[1214]

; set interrupt vector 1c = fcn int_1c()

1714:11D1 B01C MOV AL,1C

1714:11D3 B425 MOV AH,25

1714:11D5 CD21 INT 21

; restore ds after call

1714:11D7 1F POP DS

; wait until current timer value == 0000

1714:11D8 833E5A5300 CMP WORD PTR [535A],+00

1714:11DD 74F9 JZ 11D8

; reset current timer value

1714:11DF C7065A530000 MOV WORD PTR [535A],0000

{

; increment timer calibration

1714:11E5 FF065653 INC WORD PTR [5356]

; if current timer has reset back to 0

1714:11E9 833E5A5300 CMP WORD PTR [535A],+00

1714:11EE 74F5 JZ 11E5

}

; restore old vector 1c (ax:dx)

1714:11F0 5A POP DX

1714:11F1 58 POP AX

; store ds before call

1714:11F2 1E PUSH DS

; set ds = ax (segment of old vector 1c)

1714:11F3 8ED8 MOV DS,AX

; set interrupt vector 1c = old far address of int 1c

1714:11F5 B01C MOV AL,1C

1714:11F7 B425 MOV AH,25

1714:11F9 CD21 INT 21

; restore ds after call

1714:11FB 1F POP DS

; set ax = timer calibration

1714:11FC A15653 MOV AX,[5356]

; multiply value by 0012 (18 dec)

1714:11FF 33D2 XOR DX,DX

1714:1201 B91200 MOV CX,0012

1714:1204 F7E1 MUL CX

; divide value by 02ee

1714:1206 B9EE02 MOV CX,02EE

1714:1209 F7F1 DIV CX

; set *5356 = ax

1714:120B A35653 MOV [5356],AX

; get memory size

1714:120E CD12 INT 12

; set *5358 = memory size

1714:1210 A35853 MOV [5358],AX

; return

1714:1213 C3 RET

}

calibrate_timer() - 11b4

{

11b4 mov word ptr [5356],0113

11ba int 12

11bd mov [5358],ax

11c0 ret

}

int_1c() - 1214

{

; called at every timer tick

; (1.193 million ticks / sec)

; set interrupt flag

1714:1214 FB STI

; store

1714:1215 1E PUSH DS

1714:1216 56 PUSH SI

1714:1217 50 PUSH AX

; increment word at *535a

; (resets to 0 every 65536 ticks)

1714:1218 B87826 MOV AX,2678

1714:121B 8ED8 MOV DS,AX

1714:121D BE5A53 MOV SI,535A

1714:1220 FF04 INC WORD PTR [SI]

; restore & return

1714:1222 58 POP AX

1714:1223 5E POP SI

1714:1224 1F POP DS

1714:1225 CF IRET

}

clear_timer_vars() - 1226

{

; clear ax

1714:1226 33C0 XOR AX,AX

; clear *53a4, timer calibration, *53a8

1714:1228 A3A453 MOV [53A4],AX

1714:122B A3A653 MOV [53A6],AX

1714:122E A3A853 MOV [53A8],AX

1714:1231 C3 RET

}

1714:1232 CB RETF

/* Image File Functions */

int_24() - 1233

{

; int24 = critical error handler

1714:1233 FB STI

1714:1234 1E PUSH DS

1714:1235 53 PUSH BX

1714:1236 BB7826 MOV BX,2678

1714:1239 8EDB MOV DS,BX

1714:123B BB5C53 MOV BX,535C

1714:123E C7070100 MOV WORD PTR [BX],0001

1714:1242 32C0 XOR AL,AL

1714:1244 5B POP BX

1714:1245 1F POP DS

1714:1246 CF IRET

}

int_23() - 1247

{

; int23 = ctrl-break handler

1714:1247 FB STI

1714:1248 F8 CLC

1714:1249 CF IRET

}

error_and_exit() - 124a

{

; set video mode 03 (for dos)

1714:124A B80300 MOV AX,0003

1714:124D CD10 INT 10

; write string at ds:53d6 (7f60 in file?)

1714:124F BAD653 MOV DX,53D6

1714:1252 B409 MOV AH,09

1714:1254 CD21 INT 21

; return to dos w/ error code 01

1714:1256 B8014C MOV AX,4C01

1714:1259 CD21 INT 21

; halt if exit fails

1714:125B EBFE JMP 125B

}

read_file_main(dx) - 125d

{

; dx = ptr to filename

; call is_filename_in_table(dx)

1714:125D E82803 CALL 1588

; if not in table, jump to 1264

1714:1260 7302 JNB 1264

; otherwise (in table), jump to 12ac

1714:1262 EB48 JMP 12AC

; filename is not in table

; push filename addr onto stack

1714:1264 52 PUSH DX

; call seek_to_file_end()

1714:1265 E8EC03 CALL 1654

; dx:ax should hold seg:off at end of file

; if error seeking file, jump to 12a6

1714:1268 723C JB 12A6

; store ax (offset of eof = file size)

1714:126A 50 PUSH AX

; if offset != 0, jump to 1274

1714:126B 0BC0 OR AX,AX

1714:126D 7505 JNZ 1274

; if segment == 0, jump to 12a6 (error)

1714:126F 0BD2 OR DX,DX

1714:1271 7433 JZ 12A6

; otherwise (segment assumed == 1), move offset back one (should be ffff)

1714:1273 48 DEC AX

; set bx = file offset

1714:1274 8BD8 MOV BX,AX

; if offset == 0, jump to 1280

1714:1276 0BC0 OR AX,AX

1714:1278 7406 JZ 1280

; move offset back one

1714:127A 4B DEC BX

; offset /= 16 (get paragraph num)

1714:127B B104 MOV CL,04

1714:127D D3EB SHR BX,CL

; round to next paragraph

1714:127F 43 INC BX

; call allocate_memory(bx)

1714:1280 E84303 CALL 15C6

; restore bx (file size)

1714:1283 5B POP BX

; if error allocating memory, jump to 12a0 (critical error)

1714:1284 721A JB 12A0

; remove filename addr from stack

1714:1286 5A POP DX

; store bx (file size), ax (allocated segment)

1714:1287 53 PUSH BX

1714:1288 50 PUSH AX

; call read_file(seg,size)

1714:1289 E88203 CALL 160E

; restore into bx (allocated segment), cx (file size)

1714:128C 5B POP BX

1714:128D 59 POP CX

; if no error reading file, jump to 129c

1714:128E 730C JNB 129C

; could not read file

; store ax,es

1714:1290 50 PUSH AX

1714:1291 06 PUSH ES

; set es = bx

1714:1292 8EC3 MOV ES,BX

; free memory block

1714:1294 B449 MOV AH,49

1714:1296 CD21 INT 21

; restore es,ax

1714:1298 07 POP ES

1714:1299 58 POP AX

; jump to error handler

1714:129A EB0B JMP 12A7

; we get here on success

; return with ax = cx (file size) & clear carry

1714:129C 8BC1 MOV AX,CX

1714:129E F8 CLC

1714:129F C3 RET

; we get here on critical error

; remove filename addr from stack

1714:12A0 5B POP BX

; clear bx & set carry

1714:12A1 33DB XOR BX,BX

1714:12A3 F9 STC

; jump to error_and_exit()

1714:12A4 EBA4 JMP 124A

; we get here on non-critical error

; remove filename addr from stack

1714:12A6 5B POP BX

; return with bx = 0001 & set carry

1714:12A7 BB0100 MOV BX,0001

1714:12AA F9 STC

1714:12AB C3 RET

; filename is in table

; clear words *53b8 - *53be

1714:12AC C706BA530000 MOV WORD PTR [53BA],0000

1714:12B2 C706BC530000 MOV WORD PTR [53BC],0000

1714:12B8 C706BE530000 MOV WORD PTR [53BE],0000

1714:12BE C706B8530000 MOV WORD PTR [53B8],0000

; open file at ds:dx

1714:12C4 B002 MOV AL,02

1714:12C6 B43D MOV AH,3D

1714:12C8 CD21 INT 21

; store fh in bx

1714:12CA 8BD8 MOV BX,AX

; on error, jump to 1321

1714:12CC 7253 JB 1321

; store fh in *53b8

1714:12CE 891EB853 MOV [53B8],BX

; read first 4 bytes from file into 53b4

1714:12D2 B90400 MOV CX,0004

1714:12D5 BAB453 MOV DX,53B4

1714:12D8 B43F MOV AH,3F

1714:12DA CD21 INT 21

; on error, jump to 1321

1714:12DC 7243 JB 1321

; read data into bx,dx

1714:12DE 8B1EB453 MOV BX,[53B4]

1714:12E2 8B16B653 MOV DX,[53B6]

; (carry is cleared going into loop since int 21 succeeded)

; loop 4 times

1714:12E6 B104 MOV CL,04

{

; shift right by 1

1714:12E8 D1EA SHR DX,1

; roll right w/ carry by 1

1714:12EA D1DB RCR BX,1

; loop back

1714:12EC E2FA LOOP 12E8

}

; dx is right shifted by 4

; bx is right rolled (w/ carry) by 4

; bx++

1714:12EE 43 INC BX

; call allocate_memory(bx)

1714:12EF E8D402 CALL 15C6

; if no error, jump to 12fc

1714:12F2 7308 JNB 12FC

; otherwise, set first allocated segment = ffff, and jump to 1321

1714:12F4 C706BA53FFFF MOV WORD PTR [53BA],FFFF

1714:12FA EB25 JMP 1321

; store first allcated segment in 53ba,53bc

1714:12FC A3BA53 MOV [53BA],AX

1714:12FF A3BC53 MOV [53BC],AX

; call allocate_memory(0040)

1714:1302 BB4000 MOV BX,0040

1714:1305 E8BE02 CALL 15C6

; if no error, jump to 1312

1714:1308 7308 JNB 1312

; otherwise, set first allocated segment = ffff, and jump to 1321

1714:130A C706BA53FFFF MOV WORD PTR [53BA],FFFF

1714:1310 EB0F JMP 1321

; store second allocated segment in 53be

1714:1312 A3BE53 MOV [53BE],AX

; call read_file_into_memory()

1714:1315 E84200 CALL 135A

1714:1318 F8 CLC

1714:1319 A1B453 MOV AX,[53B4]

1714:131C 0BC0 OR AX,AX

1714:131E 7501 JNZ 1321

1714:1320 48 DEC AX

; push flags,ax

1714:1321 9C PUSHF

1714:1322 50 PUSH AX

; if second segment == 0, jump to 1333

1714:1323 8B1EBE53 MOV BX,[53BE]

1714:1327 0BDB OR BX,BX

1714:1329 7408 JZ 1333

; otherwise, we need to free() it

; store es

1714:132B 06 PUSH ES

; free() memory in second segment

1714:132C 8EC3 MOV ES,BX

1714:132E B449 MOV AH,49

1714:1330 CD21 INT 21

; restore es

1714:1332 07 POP ES

; get file handle

1714:1333 8B1EB853 MOV BX,[53B8]

1714:1337 7404 JZ 133D

; close file

1714:1339 B43E MOV AH,3E

1714:133B CD21 INT 21

; get first segment address

1714:133D 8B1EBA53 MOV BX,[53BA]

; if bx != ffff, jump to 134c

1714:1341 83FBFF CMP BX,-01

1714:1344 7506 JNZ 134C

; we get here on critical error

; bx++ (bx = 0000)

1714:1346 43 INC BX

; restore ax,flags

1714:1347 58 POP AX

1714:1348 9D POPF

; jump to error_and_exit()

1714:1349 E9FEFE JMP 124A

; we get here if do not have a critical error

; restore ax,flags

1714:134C 58 POP AX

1714:134D 9D POPF

; if no error, jump to 1355

1714:134E 7305 JNB 1355

; we get here on a non-critical error

; return with bx = 0001 & carry flag

1714:1350 BB0100 MOV BX,0001

1714:1353 F9 STC

1714:1354 C3 RET

; we get here on success

; return with bx = first segment address

1714:1355 8B1EBC53 MOV BX,[53BC]

1714:1359 C3 RET

; returns:

; carry flag set on error, clear on success

; ax = # of bytes actually read

; bx = 0001 on failure, 0000 on critical error, or segment address on success

; cx = file size

}

read_file_into_memory() - 135a

{

; clear words at *53c2 - *53d2

1714:135A C706D2530900 MOV WORD PTR [53D2],0009

1714:1360 C706C2530000 MOV WORD PTR [53C2],0000

1714:1366 C706C4530000 MOV WORD PTR [53C4],0000

1714:136C C706CC530201 MOV WORD PTR [53CC],0102

1714:1372 C706D0530002 MOV WORD PTR [53D0],0200

; set *53c0 = *5354

1714:1378 A15453 MOV AX,[5354]

1714:137B A3C053 MOV [53C0],AX

; set bx = file handle

1714:137E 8B1EB853 MOV BX,[53B8]

; store ds

1714:1382 1E PUSH DS

; set ds = second segment

1714:1383 8E1EBE53 MOV DS,[53BE]

; clear dx

1714:1387 33D2 XOR DX,DX

; read 0x0400 bytes from file into seg2:0000

1714:1389 B90004 MOV CX,0400

1714:138C B43F MOV AH,3F

1714:138E CD21 INT 21

; restore ds

1714:1390 1F POP DS

; store bp

1714:1391 55 PUSH BP

; set ax = *53c4 (== 0000)

1714:1392 A1C453 MOV AX,[53C4]

; *53c4 += 9 (advances data ptr)

1714:1395 0306D253 ADD AX,[53D2]

1714:1399 8706C453 XCHG AX,[53C4]

; ax /= 8

1714:139D B90800 MOV CX,0008

1714:13A0 33D2 XOR DX,DX

1714:13A2 F7F1 DIV CX

; if ax < 03fd, jump to 13d8

1714:13A4 3DFD03 CMP AX,03FD

1714:13A7 7C2F JL 13D8

; store dx

1714:13A9 52 PUSH DX

; advance dx by 9 & store in 53c4

1714:13AA 0316D253 ADD DX,[53D2]

1714:13AE 8916C453 MOV [53C4],DX

; set cx = 0400

1714:13B2 B90004 MOV CX,0400

; set bp = ax

1714:13B5 8BE8 MOV BP,AX

; cx -= ax

1714:13B7 2BC8 SUB CX,AX

; store ds

1714:13B9 1E PUSH DS

; set bx = file handle, ds = second segment

1714:13BA 8B1EB853 MOV BX,[53B8]

1714:13BE 8E1EBE53 MOV DS,[53BE]

; set es = ds

1714:13C2 1E PUSH DS

1714:13C3 07 POP ES

; clear si,di

1714:13C4 33F6 XOR SI,SI

1714:13C6 8BFE MOV DI,SI

; set si = ax

1714:13C8 03F0 ADD SI,AX

; move string from ds:si to es:di

1714:13CA F3 REPZ

1714:13CB A4 MOVSB

; read bytes from file into ds:dx

1714:13CC 8BCD MOV CX,BP

1714:13CE 8BD7 MOV DX,DI

1714:13D0 B43F MOV AH,3F

1714:13D2 CD21 INT 21

; restore ds

1714:13D4 1F POP DS

; clear ax

1714:13D5 33C0 XOR AX,AX

; restore dx

1714:13D7 5A POP DX

1714:13D8 1E PUSH DS

1714:13D9 8E1EBE53 MOV DS,[53BE]

1714:13DD 8BF0 MOV SI,AX

1714:13DF AD LODSW

1714:13E0 8BD8 MOV BX,AX

1714:13E2 AC LODSB

1714:13E3 8BCA MOV CX,DX

1714:13E5 E306 JCXZ 13ED

1714:13E7 D0E8 SHR AL,1

1714:13E9 D1DB RCR BX,1

1714:13EB E2FA LOOP 13E7

1714:13ED 1F POP DS

1714:13EE 8BC3 MOV AX,BX

1714:13F0 8B1ED253 MOV BX,[53D2]

1714:13F4 83EB09 SUB BX,+09

1714:13F7 D1E3 SHL BX,1

1714:13F9 2387AC53 AND AX,[BX+53AC]

1714:13FD 5D POP BP

1714:13FE 3D0101 CMP AX,0101

1714:1401 750E JNZ 1411

1714:1403 B90018 MOV CX,1800

1714:1406 33C0 XOR AX,AX

1714:1408 8E06C053 MOV ES,[53C0]

1714:140C 8BF8 MOV DI,AX

1714:140E F3 REPZ

1714:140F AB STOSW

1714:1410 C3 RET

1714:1411 3D0001 CMP AX,0100

1714:1414 7403 JZ 1419

1714:1416 E9AC00 JMP 14C5

1714:1419 C706D2530900 MOV WORD PTR [53D2],0009

1714:141F C706D0530002 MOV WORD PTR [53D0],0200

1714:1425 C706CC530201 MOV WORD PTR [53CC],0102

1714:142B 55 PUSH BP

1714:142C A1C453 MOV AX,[53C4]

1714:142F 0306D253 ADD AX,[53D2]

1714:1433 8706C453 XCHG AX,[53C4]

1714:1437 B90800 MOV CX,0008

1714:143A 33D2 XOR DX,DX

1714:143C F7F1 DIV CX

1714:143E 3DFD03 CMP AX,03FD

1714:1441 7C2F JL 1472

1714:1443 52 PUSH DX

1714:1444 0316D253 ADD DX,[53D2]

1714:1448 8916C453 MOV [53C4],DX

1714:144C B90004 MOV CX,0400

1714:144F 8BE8 MOV BP,AX

1714:1451 2BC8 SUB CX,AX

1714:1453 1E PUSH DS

1714:1454 8B1EB853 MOV BX,[53B8]

1714:1458 8E1EBE53 MOV DS,[53BE]

1714:145C 1E PUSH DS

1714:145D 07 POP ES

1714:145E 33F6 XOR SI,SI

1714:1460 8BFE MOV DI,SI

1714:1462 03F0 ADD SI,AX

1714:1464 F3 REPZ

1714:1465 A4 MOVSB

; read file

1714:1466 8BCD MOV CX,BP

1714:1468 8BD7 MOV DX,DI

1714:146A B43F MOV AH,3F

1714:146C CD21 INT 21

1714:146E 1F POP DS

1714:146F 33C0 XOR AX,AX

1714:1471 5A POP DX

1714:1472 1E PUSH DS

1714:1473 8E1EBE53 MOV DS,[53BE]

1714:1477 8BF0 MOV SI,AX

1714:1479 AD LODSW

1714:147A 8BD8 MOV BX,AX

1714:147C AC LODSB

1714:147D 8BCA MOV CX,DX

1714:147F E306 JCXZ 1487

1714:1481 D0E8 SHR AL,1

1714:1483 D1DB RCR BX,1

1714:1485 E2FA LOOP 1481

1714:1487 1F POP DS

1714:1488 8BC3 MOV AX,BX

1714:148A 8B1ED253 MOV BX,[53D2]

1714:148E 83EB09 SUB BX,+09

1714:1491 D1E3 SHL BX,1

1714:1493 2387AC53 AND AX,[BX+53AC]

1714:1497 5D POP BP

1714:1498 A3C653 MOV [53C6],AX

1714:149B A3C853 MOV [53C8],AX

1714:149E A2D553 MOV [53D5],AL

1714:14A1 A2D453 MOV [53D4],AL

1714:14A4 06 PUSH ES

1714:14A5 8E06BA53 MOV ES,[53BA]

1714:14A9 8B3EC253 MOV DI,[53C2]

1714:14AD AA STOSB

1714:14AE 07 POP ES

1714:14AF FF06C253 INC WORD PTR [53C2]

1714:14B3 83FF10 CMP DI,+10

1714:14B6 750A JNZ 14C2

1714:14B8 FF06BA53 INC WORD PTR [53BA]

1714:14BC C706C2530000 MOV WORD PTR [53C2],0000

1714:14C2 E9CCFE JMP 1391

}

1714:14C5 A3C653 MOV [53C6],AX

1714:14C8 A3CA53 MOV [53CA],AX

1714:14CB 8E06C053 MOV ES,[53C0]

1714:14CF 3B06CC53 CMP AX,[53CC]

1714:14D3 7C0E JL 14E3

1714:14D5 A1C853 MOV AX,[53C8]

1714:14D8 A3C653 MOV [53C6],AX

1714:14DB A0D453 MOV AL,[53D4]

1714:14DE 50 PUSH AX

1714:14DF FF06CE53 INC WORD PTR [53CE]

1714:14E3 813EC653FF00 CMP WORD PTR [53C6],00FF

1714:14E9 7E1D JLE 1508

1714:14EB 8B1EC653 MOV BX,[53C6]

1714:14EF 50 PUSH AX

1714:14F0 8BC3 MOV AX,BX

1714:14F2 D1E3 SHL BX,1

1714:14F4 03D8 ADD BX,AX

1714:14F6 58 POP AX

1714:14F7 26 ES:

1714:14F8 8A4702 MOV AL,[BX+02]

1714:14FB 50 PUSH AX

1714:14FC FF06CE53 INC WORD PTR [53CE]

1714:1500 26 ES:

1714:1501 8B07 MOV AX,[BX]

1714:1503 A3C653 MOV [53C6],AX

1714:1506 EBDB JMP 14E3

1714:1508 1E PUSH DS

1714:1509 07 POP ES

1714:150A A1C653 MOV AX,[53C6]

1714:150D A2D453 MOV [53D4],AL

1714:1510 A2D553 MOV [53D5],AL

1714:1513 50 PUSH AX

1714:1514 FF06CE53 INC WORD PTR [53CE]

1714:1518 8B0ECE53 MOV CX,[53CE]

1714:151C E321 JCXZ 153F

1714:151E 58 POP AX

1714:151F 06 PUSH ES

1714:1520 8E06BA53 MOV ES,[53BA]

1714:1524 8B3EC253 MOV DI,[53C2]

1714:1528 AA STOSB

1714:1529 07 POP ES

1714:152A FF06C253 INC WORD PTR [53C2]

1714:152E 83FF10 CMP DI,+10

1714:1531 750A JNZ 153D

1714:1533 FF06BA53 INC WORD PTR [53BA]

1714:1537 C706C2530000 MOV WORD PTR [53C2],0000

1714:153D E2DF LOOP 151E

1714:153F 890ECE53 MOV [53CE],CX

1714:1543 8B1ECC53 MOV BX,[53CC]

1714:1547 50 PUSH AX

1714:1548 8BC3 MOV AX,BX

1714:154A D1E3 SHL BX,1

1714:154C 03D8 ADD BX,AX

1714:154E 58 POP AX

1714:154F 06 PUSH ES

1714:1550 8E06C053 MOV ES,[53C0]

1714:1554 A0D553 MOV AL,[53D5]

1714:1557 26 ES:

1714:1558 884702 MOV [BX+02],AL

1714:155B A1C853 MOV AX,[53C8]

1714:155E 26 ES:

1714:155F 8907 MOV [BX],AX

1714:1561 07 POP ES

1714:1562 FF06CC53 INC WORD PTR [53CC]

1714:1566 A1CA53 MOV AX,[53CA]

1714:1569 A3C853 MOV [53C8],AX

1714:156C 8B1ECC53 MOV BX,[53CC]

1714:1570 3B1ED053 CMP BX,[53D0]

1714:1574 7C0F JL 1585

1714:1576 833ED2530C CMP WORD PTR [53D2],+0C

1714:157B 7408 JZ 1585

1714:157D FF06D253 INC WORD PTR [53D2]

1714:1581 D126D053 SHL WORD PTR [53D0],1

1714:1585 E909FE JMP 1391

is_filename_in_table(dx) - 1588

{

; dx = ptr to filename

; store

1714:1588 53 PUSH BX

1714:1589 56 PUSH SI

1714:158A 57 PUSH DI

; set bx = 25ea (filename table)

1714:158B BBEA25 MOV BX,25EA

; get addr of next filename in table

1714:158E 8B37 MOV SI,[BX]

; if *si == 0000 (end of table), return at 15c1

; (returns w/o carry, indicating no match)

1714:1590 833C00 CMP WORD PTR [SI],+00

1714:1593 742C JZ 15C1

; move bx to next filename addr

1714:1595 83C302 ADD BX,+02

; set di = param filename addr

1714:1598 8BFA MOV DI,DX

; al = byte from si (from name of tablefile)

1714:159A AC LODSB

; ah = byte from di (from name of loadfile)

1714:159B 8A25 MOV AH,[DI]

; if loadfile letter < 'a', jump to 15aa

1714:159D 80FC61 CMP AH,61

1714:15A0 7C08 JL 15AA

; if loadfile letter > 'z', jump to 15aa

1714:15A2 80FC7A CMP AH,7A

1714:15A5 7F03 JG 15AA

; loadfile letter -= 20 (converts lower to caps)

1714:15A7 80EC20 SUB AH,20

; if tablefile letter < 'a', jump to 15b4

1714:15AA 3C61 CMP AL,61

1714:15AC 7C06 JL 15B4

; if tablefile letter > 'z', jump to 15b4

1714:15AE 3C7A CMP AL,7A

1714:15B0 7F02 JG 15B4

; tablefile letter -= 20 (converts lower to caps)

1714:15B2 2C20 SUB AL,20

; if loadfile letter != tablefile letter (filename does not match), jump back to 158e

1714:15B4 3AE0 CMP AH,AL

1714:15B6 75D6 JNZ 158E

; a match!

; if byte at next si == 00 (end of string), jump to 15c0

1714:15B8 803C00 CMP BYTE PTR [SI],00

1714:15BB 7403 JZ 15C0

; advance di to next letter

1714:15BD 47 INC DI

; now loop back to cmp next set of bytes

1714:15BE EBDA JMP 159A

; set carry (indicates a match)

1714:15C0 F9 STC

; restore & return

1714:15C1 5F POP DI

1714:15C2 5E POP SI

1714:15C3 5B POP BX

1714:15C4 C3 RET

; returns carry if filename is in table

}

1714:15C5 90 NOP

allocate_memory(bx) - 15c6

{

; bx = number of paragraphs to allocate

; the idea is to reserve the memory at the end of the

; unallocated space so it will not interfere with an

; extended data segment

; store bx (requested # of paragraphs)

1714:15C6 53 PUSH BX

; get dos version

1714:15C7 B430 MOV AH,30

1714:15C9 CD21 INT 21

; if dos version == 03, jump to 15f2

1714:15CB 3C03 CMP AL,03

1714:15CD 7423 JZ 15F2

; allocate ffff paragraphs of memory

; (errors, returns with bx, size of largest available block)

1714:15CF BBFFFF MOV BX,FFFF

1714:15D2 B448 MOV AH,48

1714:15D4 CD21 INT 21

; restore ax (requested # of paragraphs)

1714:15D6 58 POP AX

; bx = size of largest available block - # of requested paragraphs - 1

1714:15D7 2BD8 SUB BX,AX

1714:15D9 4B DEC BX

; store ax (requested # of paragraphs)

1714:15DA 50 PUSH AX

; allocate inverted # of paragraphs of memory

1714:15DB B448 MOV AH,48

1714:15DD CD21 INT 21

; restore bx (requested # of paragraphs)

1714:15DF 5B POP BX

; store ax (allocated segment for invert)

1714:15E0 50 PUSH AX

; allocate requested # of paragraphs of memory

1714:15E1 B448 MOV AH,48

1714:15E3 CD21 INT 21

; restore bx (allocated segment for invert)

1714:15E5 5B POP BX

; store ax (allocated segment for request),flags

1714:15E6 50 PUSH AX

1714:15E7 9C PUSHF

; store es

1714:15E8 06 PUSH ES

; free memory at allocated segment for invert

1714:15E9 8EC3 MOV ES,BX

1714:15EB B449 MOV AH,49

1714:15ED CD21 INT 21

; restore es

1714:15EF 07 POP ES

; return at 160b

1714:15F0 EB19 JMP 160B

; we get here for dos version 3

; set memory allocation strategy

1714:15F2 B001 MOV AL,01

1714:15F4 BB0200 MOV BX,0002

1714:15F7 B458 MOV AH,58

1714:15F9 CD21 INT 21

; restore bx (# of paragraphs to allocate)

1714:15FB 5B POP BX

; allocate memory

1714:15FC B448 MOV AH,48

1714:15FE CD21 INT 21

; push ax,flags

1714:1600 50 PUSH AX

1714:1601 9C PUSHF

; set memory allocation strategy

1714:1602 B001 MOV AL,01

1714:1604 BB0000 MOV BX,0000

1714:1607 B458 MOV AH,58

1714:1609 CD21 INT 21

; restore flags,ax and return

1714:160B 9D POPF

1714:160C 58 POP AX

1714:160D C3 RET

; returns ax = segment of allocated block

}

read_file(ax,bx,dx) - 160e

{

; ax = load segment

; bx = load size

; dx = filename

; store ds, ax (load segment), bx (load size)

1714:160E 1E PUSH DS

1714:160F 50 PUSH AX

1714:1610 53 PUSH BX

; open file dx

1714:1611 B002 MOV AL,02

1714:1613 B43D MOV AH,3D

1714:1615 CD21 INT 21

; set bx = file handle

1714:1617 8BD8 MOV BX,AX

; if error on open, jump to error handler

1714:1619 7235 JB 1650

; restore cx (load size), dx (load segment)

1714:161B 59 POP CX

1714:161C 1F POP DS

; clear dx

1714:161D 33D2 XOR DX,DX

; if cx != 0, jump to 1624

1714:161F 0BC9 OR CX,CX

1714:1621 7501 JNZ 1624

; otherwise (cx == 0), set cx = ffff

1714:1623 49 DEC CX

; store cx (load size) before call

1714:1624 51 PUSH CX

; call read_from_file(bx,cx,load-seg:0000)

1714:1625 E82100 CALL 1649

; restore cx (load size) after call

1714:1628 59 POP CX

; if error on read, jump to 163f

1714:1629 7214 JB 163F

; if ax (bytes actually read) < cx (load size), jump to 163e

1714:162B 3BC1 CMP AX,CX

1714:162D 720F JB 163E

; if load size != ffff, jump to 163e

1714:162F 83F9FF CMP CX,-01

1714:1632 750A JNZ 163E

; size is ffff, we need to read the last byte

; store ax (load size) before call

1714:1634 51 PUSH CX

; call read_from_file(bx,01,load-seg:ffff)

1714:1635 8BD1 MOV DX,CX

1714:1637 B90100 MOV CX,0001

1714:163A E80C00 CALL 1649

; restore ax (load size) after call

1714:163D 58 POP AX

; clear carry flag (indicates no error)

1714:163E F8 CLC

; store ax,flags

1714:163F 50 PUSH AX

1714:1640 9C PUSHF

; close file

1714:1641 B43E MOV AH,3E

1714:1643 CD21 INT 21

; restore & return

1714:1645 9D POPF

1714:1646 58 POP AX

1714:1647 1F POP DS

1714:1648 C3 RET

; returns:

; ax = # of bytes actually read

}

read_from_file(bx,cx,dx) - 1649

{

; bx = file handle

; cx = # of bytes to read

; ds:dx = buffer for data

1714:1649 53 PUSH BX

; read from file

1714:164A B43F MOV AH,3F

1714:164C CD21 INT 21

1714:164E 5B POP BX

1714:164F C3 RET

; returns:

; carry flag clear on success, set on failure

; ax = # of bytes read (on success)

}

; file error handler - 1650

{

1714:1650 5B POP BX

1714:1651 5B POP BX

1714:1652 1F POP DS

1714:1653 C3 RET

}

seek_to_file_end(dx) - 1654

{

; dx = filename

; open file

1714:1654 B002 MOV AL,02

1714:1656 B43D MOV AH,3D

1714:1658 CD21 INT 21

; store fh in bx

1714:165A 8BD8 MOV BX,AX

; if error opening file, return at 1672

1714:165C 7214 JB 1672

; clear cx,dx

1714:165E 33C9 XOR CX,CX

1714:1660 8BD1 MOV DX,CX

; store bx

1714:1662 53 PUSH BX

; lseek to end of file

1714:1663 B002 MOV AL,02

1714:1665 B442 MOV AH,42

1714:1667 CD21 INT 21

; restore bx

1714:1669 5B POP BX

; store ax,dx

1714:166A 50 PUSH AX

1714:166B 52 PUSH DX

; close file

1714:166C B43E MOV AH,3E

1714:166E CD21 INT 21

; restore dx,ax and return

1714:1670 5A POP DX

1714:1671 58 POP AX

1714:1672 C3 RET

; returns dx:ax = new file position

}

1714:1673 00

test_open_file(p0) - 1674

{

; p0 = addr of filename

; store

1714:1674 55 PUSH BP

1714:1675 8BEC MOV BP,SP

1714:1677 56 PUSH SI

1714:1678 57 PUSH DI

1714:1679 1E PUSH DS

; set dx = p0 (filename)

1714:167A 8B5604 MOV DX,[BP+04]

; open file at dx

1714:167D B002 MOV AL,02

1714:167F B43D MOV AH,3D

1714:1681 CD21 INT 21

; save file handle in bx

1714:1683 8BD8 MOV BX,AX

; if error, jump to 1696

1714:1685 720F JB 1696

; we get here on success

; close file

1714:1687 B43E MOV AH,3E

1714:1689 CD21 INT 21

; clear error code

1714:168B C7065C530000 MOV WORD PTR [535C],0000

; set ax = 0001 (indicates success)

1714:1691 B80100 MOV AX,0001

; return at 169f

1714:1694 EB09 JMP 169F

; we get here on error

; store error code in 535c

1714:1696 A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:1699 FF1E9453 CALL FAR [5394]

; clear ax (indicates failure)

1714:169D 33C0 XOR AX,AX

; restore & return

1714:169F 1F POP DS

1714:16A0 5F POP DI

1714:16A1 5E POP SI

1714:16A2 5D POP BP

1714:16A3 C20200 RET 0002

; returns ax = 1 on success, 0 on failure

}

get_default_drive() - 16a6

{

; store

1714:16A6 55 PUSH BP

1714:16A7 8BEC MOV BP,SP

1714:16A9 56 PUSH SI

1714:16AA 57 PUSH DI

1714:16AB 1E PUSH DS

; get current default drive

1714:16AC B419 MOV AH,19

1714:16AE CD21 INT 21

; clear ah

1714:16B0 32E4 XOR AH,AH

; convert drive # to ascii letter

1714:16B2 0441 ADD AL,41

; restore & return

1714:16B4 1F POP DS

1714:16B5 5F POP DI

1714:16B6 5E POP SI

1714:16B7 5D POP BP

1714:16B8 C3 RET

}

1714:16B9 00

/* Text Functions */

print_character(p0) - 16ba

{

; p0 = character to print

; store

1714:16BA 55 PUSH BP

1714:16BB 8BEC MOV BP,SP

1714:16BD 56 PUSH SI

1714:16BE 57 PUSH DI

1714:16BF 1E PUSH DS

; set di = p0 (character)

1714:16C0 8B7E04 MOV DI,[BP+04]

; set dx = di = lo byte of p0

1714:16C3 81E7FF00 AND DI,00FF

1714:16C7 8BD7 MOV DX,DI

; set *si = 539a

1714:16C9 8B369A53 MOV SI,[539A]

; if char > 7f, jump to 176e (special characters)

1714:16CD 80FA7F CMP DL,7F

1714:16D0 7603 JBE 16D5

1714:16D2 E99900 JMP 176E

; if char == 0a (\n), jump to 1742

1714:16D5 80FA0A CMP DL,0A

1714:16D8 7468 JZ 1742

; if char == 0d (\r), jump to 1745

1714:16DA 80FA0D CMP DL,0D

1714:16DD 7466 JZ 1745

; char *= 8

1714:16DF B103 MOV CL,03

1714:16E1 D3E7 SHL DI,CL

; if video mode != tandy, jump to 16f0

1714:16E3 833EC85203 CMP WORD PTR [52C8],+03

1714:16E8 7506 JNZ 16F0

; otherwise (video mode tandy), char *= 3

1714:16EA 8BC7 MOV AX,DI

1714:16EC D1E7 SHL DI,1

1714:16EE 03F8 ADD DI,AX

; set es = segment address of current character set

1714:16F0 8E069853 MOV ES,[5398]

; set dl = *53aa (row), dh = *53ab (col)

1714:16F4 8A16AA53 MOV DL,[53AA]

1714:16F8 8A36AB53 MOV DH,[53AB]

; set ax = current col + leftmost col (abs col)

1714:16FC 8A4404 MOV AL,[SI+04]

1714:16FF 0204 ADD AL,[SI]

1714:1701 32E4 XOR AH,AH

; set bx = current row + topmost row (abs row)

1714:1703 8A5C05 MOV BL,[SI+05]

1714:1706 025C01 ADD BL,[SI+01]

1714:1709 8AFC MOV BH,AH

; call character_effects(di,es)

1714:170B E8E600 CALL 17F4

; far call video:005d(ax,bx)

1714:170E C70650535D00 MOV WORD PTR [5350],005D

1714:1714 FF1E5053 CALL FAR [5350]

; copy backup of character from 53ea to charset file

1714:1718 BEEA53 MOV SI,53EA

1714:171B B90400 MOV CX,0004

1714:171E 833EC85203 CMP WORD PTR [52C8],+03

1714:1723 7503 JNZ 1728

1714:1725 B90C00 MOV CX,000C

1714:1728 F3 REPZ

1714:1729 A5 MOVSW

; get address of text window data for current character set

1714:172A 8B369A53 MOV SI,[539A]

; if *538e == 00, return at 1767 (should not advance cursor)

1714:172E 833E8E5300 CMP WORD PTR [538E],+00

1714:1733 7432 JZ 1767

; advance current column #

1714:1735 FE4404 INC BYTE PTR [SI+04]

; if (current col # + leftmost col #) 'z', jump to 1f01

1714:1EF7 3C61 CMP AL,61

1714:1EF9 7C06 JL 1F01

1714:1EFB 3C7A CMP AL,7A

1714:1EFD 7F02 JG 1F01

; convert from lower to upper

1714:1EFF 2C20 SUB AL,20

; set dl = char

1714:1F01 8AD0 MOV DL,AL

; char - 'A' (converts char to number 00-19 (0-25 dec))

1714:1F03 80EA41 SUB DL,41

; if p0 < 'A' || p0 > 'Z', jump to 1f10

1714:1F06 3C41 CMP AL,41

1714:1F08 7C06 JL 1F10

1714:1F0A 3C5A CMP AL,5A

1714:1F0C 7F02 JG 1F10

; clear carry (indicates alpha char)

1714:1F0E F8 CLC

1714:1F0F C3 RET

; set carry (indicates non-alpha char)

1714:1F10 F9 STC

1714:1F11 C3 RET

; returns:

; al = upper-case drive letter

; dl = number of drive

; carry flag clear on alpha char, set on non-alpha char

}

get_current_text_column() - 1f12

{

; store

1714:1F12 55 PUSH BP

1714:1F13 8BEC MOV BP,SP

1714:1F15 56 PUSH SI

1714:1F16 57 PUSH DI

1714:1F17 1E PUSH DS

; set si = address of text window for current charset

1714:1F18 8B369A53 MOV SI,[539A]

; set al = current column

1714:1F1C 8A4404 MOV AL,[SI+04]

; clear ah

1714:1F1F 32E4 XOR AH,AH

; restore & return

1714:1F21 1F POP DS

1714:1F22 5F POP DI

1714:1F23 5E POP SI

1714:1F24 5D POP BP

1714:1F25 C3 RET

; returns ax = current character column

}

set_text_background_color(p0) - 1f26

{

; p0 = new background color

; store

1714:1F26 55 PUSH BP

1714:1F27 8BEC MOV BP,SP

1714:1F29 56 PUSH SI

1714:1F2A 57 PUSH DI

1714:1F2B 1E PUSH DS

; set si = address of text window for current charset

1714:1F2C 8B369A53 MOV SI,[539A]

; set al = lower nibble of p0

; (color should be a value from 0-f)

1714:1F30 8B4604 MOV AX,[BP+04]

1714:1F33 240F AND AL,0F

; set *53ab = new background color

1714:1F35 A2AB53 MOV [53AB],AL

; leftshift al by 4 (mul by 16)

1714:1F38 B104 MOV CL,04

1714:1F3A D2E0 SHL AL,CL

; get foreground color from text window tbl (lo nibble)

1714:1F3C 8A6406 MOV AH,[SI+06]

1714:1F3F 80E40F AND AH,0F

; add background to color pair (ho nibble)

1714:1F42 0AE0 OR AH,AL

; set new text color pair in text window tbl

1714:1F44 886406 MOV [SI+06],AH

; restore & return

1714:1F47 1F POP DS

1714:1F48 5F POP DI

1714:1F49 5E POP SI

1714:1F4A 5D POP BP

1714:1F4B C20200 RET 0002

}

; 1f4e(p0)

{

; p0 = ?

1714:1F4E 55 PUSH BP

1714:1F4F 8BEC MOV BP,SP

1714:1F51 56 PUSH SI

1714:1F52 57 PUSH DI

1714:1F53 1E PUSH DS

; call convert_char_dimensions_to_pixels(*539a)

1714:1F54 8B369A53 MOV SI,[539A]

1714:1F58 E81C00 CALL 1F77

; set si = p0

1714:1F5B 8B7604 MOV SI,[BP+04]

; leftshift si by 3 (mul by 8)

1714:1F5E D1E6 SHL SI,1

1714:1F60 D1E6 SHL SI,1

1714:1F62 D1E6 SHL SI,1

; invert si

1714:1F64 F7DE NEG SI

; call far video:0027(ax,bx,cx,dx,si)

1714:1F66 C70650532700 MOV WORD PTR [5350],0027

1714:1F6C FF1E5053 CALL FAR [5350]

; restore * return

1714:1F70 1F POP DS

1714:1F71 5F POP DI

1714:1F72 5E POP SI

1714:1F73 5D POP BP

1714:1F74 C20200 RET 0002

}

convert_char_dimensions_to_pixels(si) - 1f77

{

; si = addr of text window dimensions

; clear ah, bh, ch, dh

1714:1F77 32E4 XOR AH,AH

1714:1F79 8AFC MOV BH,AH

1714:1F7B 8AEC MOV CH,AH

1714:1F7D 8AF4 MOV DH,AH

; set al,bl,cl,dl = text window dimensions

1714:1F7F 8A04 MOV AL,[SI]

1714:1F81 8A5C01 MOV BL,[SI+01]

1714:1F84 8A4C02 MOV CL,[SI+02]

1714:1F87 8A5403 MOV DL,[SI+03]

; set di = rightmost column

1714:1F8A 8BF9 MOV DI,CX

; multiply each dimension by 8 (since each char is 8x8)

1714:1F8C B103 MOV CL,03

1714:1F8E D3E0 SHL AX,CL

1714:1F90 D3E3 SHL BX,CL

1714:1F92 D3E7 SHL DI,CL

1714:1F94 D3E2 SHL DX,CL

; add 7 to bottom row and right column (edge of character)

1714:1F96 83C707 ADD DI,+07

1714:1F99 83C207 ADD DX,+07

; set cx = rightmost pixel

1714:1F9C 8BCF MOV CX,DI

; return

1714:1F9E C3 RET

; returns ax,bx,cx,dx = pixel row/col info

}

1714:1F9F 00

backspace(p0) - 1fa0

{

; p0 = # of chars

1714:1FA0 55 PUSH BP

1714:1FA1 8BEC MOV BP,SP

1714:1FA3 83EC0C SUB SP,+0C

1714:1FA6 57 PUSH DI

1714:1FA7 56 PUSH SI

; call get_current_text_column()

1714:1FA8 E867FF CALL 1F12

; if column != 0, jump to 1fb6

1714:1FAB 0BC0 OR AX,AX

1714:1FAD 7507 JNZ 1FB6

; call get_current_text_row()

1714:1FAF E83CFD CALL 1CEE

; if row == 0, return at 2029

1714:1FB2 0BC0 OR AX,AX

1714:1FB4 7473 JZ 2029

; if # of chars == 0, return at 2029

1714:1FB6 837E0400 CMP WORD PTR [BP+04],+00

1714:1FBA 746D JZ 2029

; backup cursor advance flag in bp-2

1714:1FBC A18E53 MOV AX,[538E]

1714:1FBF 8946FE MOV [BP-02],AX

; set ax = selected charset id

1714:1FC2 A18653 MOV AX,[5386]

; set bp-4 = ax = text window data for selected charset id

1714:1FC5 B103 MOV CL,03

1714:1FC7 D3E0 SHL AX,CL

1714:1FC9 055E53 ADD AX,535E

1714:1FCC 8946FC MOV [BP-04],AX

; clear *538e (indicates cursor should not advance)

1714:1FCF C7068E530000 MOV WORD PTR [538E],0000

; set bp-6 = 0 (inits local var, # of chars)

1714:1FD5 C746FA0000 MOV WORD PTR [BP-06],0000

; if # of chars 'z', jump to 204c

1714:2035 807E0461 CMP BYTE PTR [BP+04],61

1714:2039 7211 JB 204C

1714:203B 807E047A CMP BYTE PTR [BP+04],7A

1714:203F 770B JA 204C

; set al = p0

1714:2041 8A4604 MOV AL,[BP+04]

; clear ah

1714:2044 2AE4 SUB AH,AH

; convert from lower to upper case

1714:2046 2D2000 SUB AX,0020

; return at 2051

1714:2049 EB06 JMP 2051

1714:204B 90 NOP

; set al = p0

1714:204C 8A4604 MOV AL,[BP+04]

; clear ah

1714:204F 2AE4 SUB AH,AH

; restore & return

1714:2051 5D POP BP

1714:2052 C20200 RET 0002

; returns ax = upper-case char

}

1714:2055 90 NOP

/* Time Functions */

get_time() - 2056

{

1714:2056 55 PUSH BP

1714:2057 8BEC MOV BP,SP

1714:2059 56 PUSH SI

1714:205A 57 PUSH DI

1714:205B 1E PUSH DS

; get system time

1714:205C B42C MOV AH,2C

1714:205E CD21 INT 21

; clear ax

1714:2060 33C0 XOR AX,AX

; hour *= 2

1714:2062 D0E5 SHL CH,1

; minute *= 4

1714:2064 D0E1 SHL CL,1

1714:2066 D0E1 SHL CL,1

; second *= 8

1714:2068 D0E6 SHL DH,1

1714:206A D0E6 SHL DH,1

1714:206C D0E6 SHL DH,1

; set ax = dx (seconds)

1714:206E 03C2 ADD AX,DX

; ax += cx (

1714:2070 03C1 ADD AX,CX

1714:2072 35EB91 XOR AX,91EB

; get nibbles 0-2

1714:2075 25FF0F AND AX,0FFF

1714:2078 1F POP DS

1714:2079 5F POP DI

1714:207A 5E POP SI

1714:207B 5D POP BP

1714:207C C3 RET

; returns ax = time

}

1714:207D 00

; 207e(p0)

{

; p0 = time

1714:207E 55 PUSH BP

1714:207F 8BEC MOV BP,SP

1714:2081 56 PUSH SI

1714:2082 57 PUSH DI

1714:2083 1E PUSH DS

; set *5420 = p0 (time)

1714:2084 8B4604 MOV AX,[BP+04]

1714:2087 A32054 MOV [5420],AX

1714:208A 1F POP DS

1714:208B 5F POP DI

1714:208C 5E POP SI

1714:208D 5D POP BP

1714:208E C20200 RET 0002

}

1714:2091 00

; 2092

{

1714:2092 55 PUSH BP

1714:2093 8BEC MOV BP,SP

1714:2095 56 PUSH SI

1714:2096 57 PUSH DI

1714:2097 1E PUSH DS

1714:2098 A12054 MOV AX,[5420]

1714:209B 054892 ADD AX,9248

1714:209E D1C8 ROR AX,1

1714:20A0 D1C8 ROR AX,1

1714:20A2 D1C8 ROR AX,1

1714:20A4 354892 XOR AX,9248

1714:20A7 051100 ADD AX,0011

1714:20AA A32054 MOV [5420],AX

1714:20AD 25FF7F AND AX,7FFF

1714:20B0 8B5E06 MOV BX,[BP+06]

1714:20B3 8B4E04 MOV CX,[BP+04]

1714:20B6 2BCB SUB CX,BX

1714:20B8 41 INC CX

1714:20B9 33D2 XOR DX,DX

1714:20BB F7F1 DIV CX

1714:20BD 03D3 ADD DX,BX

1714:20BF 8BC2 MOV AX,DX

1714:20C1 1F POP DS

1714:20C2 5F POP DI

1714:20C3 5E POP SI

1714:20C4 5D POP BP

1714:20C5 C20400 RET 0004

}

; 20c8

{

1714:20C8 55 PUSH BP

1714:20C9 8BEC MOV BP,SP

1714:20CB 56 PUSH SI

1714:20CC 57 PUSH DI

1714:20CD 1E PUSH DS

; set ax = timer calibration

1714:20CE A15653 MOV AX,[5356]

; set bx = p1

1714:20D1 8B5E06 MOV BX,[BP+06]

; set cx = ?

1714:20D4 8B8F2654 MOV CX,[BX+5426]

1714:20D8 E302 JCXZ 20DC

1714:20DA D3E8 SHR AX,CL

1714:20DC 8B4E04 MOV CX,[BP+04]

1714:20DF 890E2454 MOV [5424],CX

1714:20E3 A32254 MOV [5422],AX

1714:20E6 FF0E2254 DEC WORD PTR [5422]

1714:20EA 75FA JNZ 20E6

1714:20EC FF0E2454 DEC WORD PTR [5424]

1714:20F0 75F1 JNZ 20E3

1714:20F2 1F POP DS

1714:20F3 5F POP DI

1714:20F4 5E POP SI

1714:20F5 5D POP BP

1714:20F6 C20400 RET 0004

}

1714:20F9 00

wait_num_ticks(p0) - 20fa

{

; p0 = # of timer ticks to wait

1714:20FA 55 PUSH BP

1714:20FB 9BEC MOV BP,SP

1714:20FD 56 PUSH SI

1714:20FE 57 PUSH DI

1714:20FF 1E PUSH DS

; if dest timer value != 01, jump to 2110

1714:2100 8B4604 MOV AX,[BP+04]

1714:2103 3D0100 CMP AX,0001

1714:2106 7508 JNZ 2110

; if timer calibration "V ")

1714:241A B87A54 MOV AX,547A

1714:241D 50 PUSH AX

1714:241E E82FF4 CALL 1850

1714:2421 A0BDA9 MOV AL,[A9BD]

1714:2424 2AE4 SUB AH,AH

1714:2426 0BC0 OR AX,AX

1714:2428 7412 JZ 243C

1714:242A 3D0100 CMP AX,0001

1714:242D 7431 JZ 2460

1714:242F 3D0300 CMP AX,0003

1714:2432 742C JZ 2460

1714:2434 3D0400 CMP AX,0004

1714:2437 742D JZ 2466

1714:2439 EB08 JMP 2443

1714:243B 90 NOP

; call print_string(547d -> "Program")

1714:243C B87D54 MOV AX,547D

1714:243F 50 PUSH AX

1714:2440 E80DF4 CALL 1850

; call print_string(5496 -> " Disk")

1714:2443 B89654 MOV AX,5496

1714:2446 50 PUSH AX

1714:2447 E806F4 CALL 1850

1714:244A 8A1EBDA9 MOV BL,[A9BD]

1714:244E 2AFF SUB BH,BH

1714:2450 80BFC8A9FF CMP BYTE PTR [BX+A9C8],FF

1714:2455 7515 JNZ 246C

; call print_string(549c -> " and press drive letter: ")

1714:2457 B89C54 MOV AX,549C

1714:245A 50 PUSH AX

1714:245B E8F2F3 CALL 1850

1714:245E EB13 JMP 2473

1714:2460 B88554 MOV AX,5485

1714:2463 EBDA JMP 243F

1714:2465 90 NOP

1714:2466 B88F54 MOV AX,548F

1714:2469 EBD4 JMP 243F

1714:246B 90 NOP

; call print_character('.')

1714:246C B82E00 MOV AX,002E

1714:246F 50 PUSH AX

1714:2470 E847F2 CALL 16BA

; call wait_for_keystroke(0000)

1714:2473 2BC0 SUB AX,AX

1714:2475 50 PUSH AX

1714:2476 E861F9 CALL 1DDA

; call to_upper(ax)

1714:2479 50 PUSH AX

1714:247A E8B5FB CALL 2032

1714:247D 8846FE MOV [BP-02],AL

1714:2480 8A1EBDA9 MOV BL,[A9BD]

1714:2484 2AFF SUB BH,BH

1714:2486 80BFC8A9FF CMP BYTE PTR [BX+A9C8],FF

1714:248B 750A JNZ 2497

; call set_default_drive(ax)

1714:248D 2AE4 SUB AH,AH

1714:248F 50 PUSH AX

1714:2490 E819FA CALL 1EAC

1714:2493 0BC0 OR AX,AX

1714:2495 74DC JZ 2473

1714:2497 8A1EBDA9 MOV BL,[A9BD]

1714:249B 2AFF SUB BH,BH

1714:249D 80BFC8A9FF CMP BYTE PTR [BX+A9C8],FF

1714:24A2 7530 JNZ 24D4

1714:24A4 8A46FE MOV AL,[BP-02]

1714:24A7 2AE4 SUB AH,AH

1714:24A9 50 PUSH AX

1714:24AA 90 NOP

1714:24AB 90 NOP

1714:24AC 90 NOP

1714:24AD 807EFE42 CMP BYTE PTR [BP-02],42

1714:24B1 7505 JNZ 24B8

1714:24B3 C606C2A902 MOV BYTE PTR [A9C2],02

1714:24B8 8A1EBDA9 MOV BL,[A9BD]

1714:24BC 2AFF SUB BH,BH

1714:24BE 8A46FE MOV AL,[BP-02]

1714:24C1 8887C8A9 MOV [BX+A9C8],AL

1714:24C5 80FB03 CMP BL,03

1714:24C8 750A JNZ 24D4

1714:24CA 803EC9A9FF CMP BYTE PTR [A9C9],FF

1714:24CF 7503 JNZ 24D4

1714:24D1 A2C9A9 MOV [A9C9],AL

1714:24D4 803EBEA900 CMP BYTE PTR [A9BE],00

1714:24D9 7509 JNZ 24E4

; call print_character('\n')

1714:24DB B80A00 MOV AX,000A

1714:24DE 50 PUSH AX

1714:24DF E8D8F1 CALL 16BA

1714:24E2 EB28 JMP 250C

1714:24E4 803EBEA902 CMP BYTE PTR [A9BE],02

1714:24E9 7521 JNZ 250C

; call 0c22

1714:24EB B80100 MOV AX,0001

1714:24EE 50 PUSH AX

1714:24EF E830E7 CALL 0C22

; call set_text_window_size(0018,0027,0000,0000,0000 = ibm)

1714:24F2 2BC0 SUB AX,AX

1714:24F4 50 PUSH AX

1714:24F5 50 PUSH AX

1714:24F6 50 PUSH AX

1714:24F7 B82700 MOV AX,0027

1714:24FA 50 PUSH AX

1714:24FB B81800 MOV AX,0018

1714:24FE 50 PUSH AX

1714:24FF E820F7 CALL 1C22

; call video_data_transfer(0000,0001 = write)

1714:2502 B80100 MOV AX,0001

1714:2505 50 PUSH AX

1714:2506 2BC0 SUB AX,AX

1714:2508 50 PUSH AX

1714:2509 E862EA CALL 0F6E

; set disk swap handler = cs:disk_swap_message()

1714:250C C70694532223 MOV WORD PTR [5394],2322

1714:2512 C70696531417 MOV WORD PTR [5396],1714

; restore & return

1714:2518 5E POP SI

1714:2519 8BE5 MOV SP,BP

1714:251B 5D POP BP

1714:251C CB RETF

}

1714:251D 90 NOP

switch_drives(p0) - 251e

{

; p0 =

; 00 - actual current drive letter

; 01,02,05 - adjusted drive letter

; 03 - floppy (ff)

; store

1714:251E 55 PUSH BP

1714:251F 8BEC MOV BP,SP

; set far error handler = cs:no_disk_swap_message()

1714:2521 C70694532023 MOV WORD PTR [5394],2320

1714:2527 C70696531417 MOV WORD PTR [5396],1714

; if (index != 2 && index != 5), jump to 253e

1714:252D 837E0402 CMP WORD PTR [BP+04],+02

1714:2531 7406 JZ 2539

1714:2533 837E0405 CMP WORD PTR [BP+04],+05

1714:2537 7505 JNZ 253E

; otherwise (index 2 or 5) set index = 0001

1714:2539 C746040100 MOV WORD PTR [BP+04],0001

; set *a9bd = index

1714:253E 8A4604 MOV AL,[BP+04]

1714:2541 A2BDA9 MOV [A9BD],AL

; set bx = index

1714:2544 8B5E04 MOV BX,[BP+04]

; if drive letter in *a9c8 table == ff (floppy), jump to 255d

1714:2547 80BFC8A9FF CMP BYTE PTR [BX+A9C8],FF

1714:254C 740F JZ 255D

; set al = drive letter from *a9c8 table

1714:254E 8A87C8A9 MOV AL,[BX+A9C8]

1714:2552 2AE4 SUB AH,AH

; call set_default_drive(ax)

1714:2554 50 PUSH AX

1714:2555 E854F9 CALL 1EAC

; set *545e = ff

1714:2558 C6065E54FF MOV BYTE PTR [545E],FF

; set far error handler = cs:disk_swap_message()

1714:255D C70694532223 MOV WORD PTR [5394],2322

1714:2563 C70696531417 MOV WORD PTR [5396],1714

; restore & return

1714:2569 5D POP BP

1714:256A C20200 RET 0002

}

1714:256D 90 NOP

read_file_from_disk(p0,p1,p2,p3) - 256e

{

; p0 = offset in file

; p1 = file size

; p2 = ptr to data buffer

; p3 = ptr to filename

; store

1714:256E 55 PUSH BP

1714:256F 8BEC MOV BP,SP

1714:2571 83EC02 SUB SP,+02

1714:2574 57 PUSH DI

1714:2575 56 PUSH SI

; set bp-2 = 0

1714:2576 C746FE0000 MOV WORD PTR [BP-02],0000

;if *a9bd != 03 (disk is not floppy), jump to 2594

1714:257B 803EBDA903 CMP BYTE PTR [A9BD],03

1714:2580 7512 JNZ 2594

; otherwise (floppy), set bl = *a9bd

1714:2582 8A1EBDA9 MOV BL,[A9BD]

; clear bh

1714:2586 2AFF SUB BH,BH

; if adjusted drive letter != ff (disk is not floppy), jump to 2594

1714:2588 80BFC8A9FF CMP BYTE PTR [BX+A9C8],FF

1714:258D 7505 JNZ 2594

; call far disk_swap_message()

1714:258F 9A22231417 CALL 1714:2322

1714:2594 8A1EBDA9 MOV BL,[A9BD]

1714:2598 2AFF SUB BH,BH

1714:259A 8A87C8A9 MOV AL,[BX+A9C8]

1714:259E 2AE4 SUB AH,AH

; call set_default_drive(ax)

1714:25A0 50 PUSH AX

1714:25A1 E808F9 CALL 1EAC

; set di = p0 (# of bytes read)

1714:25A4 8B7E04 MOV DI,[BP+04]

; set si = 0

1714:25A7 8B76FE MOV SI,[BP-02]

; jump to 25bb

1714:25AA EB0F JMP 25BB

; call read_file(di,p1,p2,p3)

1714:25AC FF760A PUSH [BP+0A]

1714:25AF FF7608 PUSH [BP+08]

1714:25B2 FF7606 PUSH [BP+06]

1714:25B5 57 PUSH DI

1714:25B6 E87B4C CALL 7234

; set si = # of bytes read

1714:25B9 8BF0 MOV SI,AX

; if # of bytes read == 0, retry at 25ac

1714:25BB 0BF6 OR SI,SI

1714:25BD 74ED JZ 25AC

; set bp-2 = # of bytes read

1714:25BF 8976FE MOV [BP-02],SI

; restore & return

1714:25C2 5E POP SI

1714:25C3 5F POP DI

1714:25C4 8BE5 MOV SP,BP

1714:25C6 5D POP BP

1714:25C7 C20800 RET 0008

}

cs:write_error() - 25ca

{

; call print_string(a0e0 -> "\nYour disk may be write-protected. Try again.\n")

1714:25CA B8E0A0 MOV AX,A0E0

1714:25CD 50 PUSH AX

1714:25CE E87FF2 CALL 1850

; call wait_for_keystroke(0000)

1714:25D1 2BC0 SUB AX,AX

1714:25D3 50 PUSH AX

1714:25D4 E803F8 CALL 1DDA

; return far

1714:25D7 CB RETF

}

write_file_to_disk(p0,p1,p2) - 25d8

{

1714:25D8 55 PUSH BP

1714:25D9 8BEC MOV BP,SP

1714:25DB 83EC04 SUB SP,+04

1714:25DE 57 PUSH DI

1714:25DF 56 PUSH SI

1714:25E0 C746FE0000 MOV WORD PTR [BP-02],0000

1714:25E5 A0BDA9 MOV AL,[A9BD]

1714:25E8 2AE4 SUB AH,AH

1714:25EA 8BF0 MOV SI,AX

1714:25EC 8976FC MOV [BP-04],SI

1714:25EF 3C03 CMP AL,03

1714:25F1 750C JNZ 25FF

1714:25F3 80BCC8A9FF CMP BYTE PTR [SI+A9C8],FF

1714:25F8 7505 JNZ 25FF

; far call disk_swap_message()

1714:25FA 9A22231417 CALL 1714:2322

1714:25FF 8A1EBDA9 MOV BL,[A9BD]

1714:2603 2AFF SUB BH,BH

1714:2605 8A87C8A9 MOV AL,[BX+A9C8]

; call set_default_drive(al)

1714:2609 2AE4 SUB AH,AH

1714:260B 50 PUSH AX

1714:260C E89DF8 CALL 1EAC

1714:260F 8B7EFE MOV DI,[BP-02]

1714:2612 EB2E JMP 2642

; call test_open_file(si)

1714:2614 56 PUSH SI

1714:2615 E85CF0 CALL 1674

1714:2618 0BC0 OR AX,AX

1714:261A 74F8 JZ 2614

; set disk swap handler = cs:write_error()

1714:261C C7069453CA25 MOV WORD PTR [5394],25CA

1714:2622 C70696531417 MOV WORD PTR [5396],1714

; call write_file()

1714:2628 FF7608 PUSH [BP+08]

1714:262B FF7606 PUSH [BP+06]

1714:262E FF7604 PUSH [BP+04]

1714:2631 E8624C CALL 7296

1714:2634 8BF8 MOV DI,AX

; set disk swap handler = cs:disk_swap_message()

1714:2636 C70694532223 MOV WORD PTR [5394],2322

1714:263C C70696531417 MOV WORD PTR [5396],1714

1714:2642 0BFF OR DI,DI

1714:2644 7506 JNZ 264C

1714:2646 8B7608 MOV SI,[BP+08]

1714:2649 EBC9 JMP 2614

1714:264B 90 NOP

1714:264C 897EFE MOV [BP-02],DI

1714:264F 8A46FC MOV AL,[BP-04]

1714:2652 A2BDA9 MOV [A9BD],AL

1714:2655 8AD8 MOV BL,AL

1714:2657 2AFF SUB BH,BH

1714:2659 8A87C8A9 MOV AL,[BX+A9C8]

; call set_default_drive(al)

1714:265D 2AE4 SUB AH,AH

1714:265F 50 PUSH AX

1714:2660 E849F8 CALL 1EAC

1714:2663 5E POP SI

1714:2664 5F POP DI

1714:2665 8BE5 MOV SP,BP

1714:2667 5D POP BP

1714:2668 C20600 RET 0006

}

1714:266B 90 NOP

/* Game Functions */

get_character() - 266c

{

1714:266C 55 PUSH BP

1714:266D 8BEC MOV BP,SP

1714:266F 83EC02 SUB SP,+02

1714:2672 56 PUSH SI

1714:2673 833EC85202 CMP WORD PTR [52C8],+02

1714:2678 7505 JNZ 267F

; set *5891 = ff

1714:267A C6069158FF MOV BYTE PTR [5891],FF

; call keystroke_cursor()

1714:267F E8B6F4 CALL 1B38

1714:2682 50 PUSH AX

1714:2683 E8ACF9 CALL 2032

1714:2686 8BF0 MOV SI,AX

1714:2688 0BF6 OR SI,SI

1714:268A 7511 JNZ 269D

; if map < dungeon, jump to 269a

1714:268C 803E935821 CMP BYTE PTR [5893],21

1714:2691 7207 JB 269A

; if map is not signed (dungeon), jump to 269d

1714:2693 803E93587F CMP BYTE PTR [5893],7F

1714:2698 7603 JBE 269D

; call 5910

1714:269A E87332 CALL 5910

; if si == 0, jump back to 267f

1714:269D 0BF6 OR SI,SI

1714:269F 74DE JZ 267F

1714:26A1 8976FE MOV [BP-02],SI

1714:26A4 833E8A5300 CMP WORD PTR [538A],+00

1714:26A9 7467 JZ 2712

1714:26AB 8BC6 MOV AX,SI

1714:26AD 2D3100 SUB AX,0031

1714:26B0 3D0800 CMP AX,0008

1714:26B3 7768 JA 271D

1714:26B5 03C0 ADD AX,AX

1714:26B7 93 XCHG BX,AX

1714:26B8 2E CS:

1714:26B9 FFA7FE26 JMP [BX+26FE]

1714:26BD 90 NOP

1714:26BE C746FED400 MOV WORD PTR [BP-02],00D4

1714:26C3 EB58 JMP 271D

1714:26C5 90 NOP

1714:26C6 C746FE0400 MOV WORD PTR [BP-02],0004

1714:26CB EB50 JMP 271D

1714:26CD 90 NOP

1714:26CE C746FED600 MOV WORD PTR [BP-02],00D6

1714:26D3 EB48 JMP 271D

1714:26D5 90 NOP

1714:26D6 C746FE0100 MOV WORD PTR [BP-02],0001

1714:26DB EB40 JMP 271D

1714:26DD 90 NOP

1714:26DE C746FE0200 MOV WORD PTR [BP-02],0002

1714:26E3 EB38 JMP 271D

1714:26E5 90 NOP

1714:26E6 C746FED300 MOV WORD PTR [BP-02],00D3

1714:26EB EB30 JMP 271D

1714:26ED 90 NOP

1714:26EE C746FE0300 MOV WORD PTR [BP-02],0003

1714:26F3 EB28 JMP 271D

1714:26F5 90 NOP

1714:26F6 C746FED500 MOV WORD PTR [BP-02],00D5

1714:26FB EB20 JMP 271D

1714:26FD 90 NOP

; junk or data ?

1714:26FE BE26C6 MOV SI,C626

1714:2701 26 ES:

1714:2702 CE INTO

1714:2703 26 ES:

1714:2704 D6 DB D6

1714:2705 26 ES:

1714:2706 1D27DE SBB AX,DE27

1714:2709 26 ES:

1714:270A E626 OUT 26,AL

1714:270C EE OUT DX,AL

1714:270D 26 ES:

1714:270E F626EB0B MUL BYTE PTR [0BEB]

1714:2712 837EFE05 CMP WORD PTR [BP-02],+05

1714:2716 7D05 JGE 271D

1714:2718 8146FEFA00 ADD WORD PTR [BP-02],00FA

1714:271D 8B46FE MOV AX,[BP-02]

1714:2720 5E POP SI

1714:2721 8BE5 MOV SP,BP

1714:2723 5D POP BP

1714:2724 C3 RET

; returns ax = character

}

1714:2725 90 NOP

1714:2726 55 PUSH BP

1714:2727 8BEC MOV BP,SP

1714:2729 83EC08 SUB SP,+08

1714:272C 56 PUSH SI

1714:272D 2BC0 SUB AX,AX

1714:272F 50 PUSH AX

1714:2730 FF7604 PUSH [BP+04]

1714:2733 E8BCF4 CALL 1BF2

1714:2736 A05B58 MOV AL,[585B]

1714:2739 2AE4 SUB AH,AH

1714:273B 394604 CMP [BP+04],AX

1714:273E 7218 JB 2758

1714:2740 C746FC0F00 MOV WORD PTR [BP-04],000F

1714:2745 BE0F00 MOV SI,000F

1714:2748 B82000 MOV AX,0020

1714:274B 50 PUSH AX

1714:274C E86BEF CALL 16BA

1714:274F 4E DEC SI

1714:2750 7503 JNZ 2755

1714:2752 E92801 JMP 287D

1714:2755 EBF1 JMP 2748

1714:2757 90 NOP

1714:2758 A09E58 MOV AL,[589E]

1714:275B 2AE4 SUB AH,AH

1714:275D B103 MOV CL,03

1714:275F D3E0 SHL AX,CL

1714:2761 0514BA ADD AX,BA14

1714:2764 8946FE MOV [BP-02],AX

1714:2767 803E93587F CMP BYTE PTR [5893],7F

1714:276C 7620 JBE 278E

1714:276E 803E9E58FF CMP BYTE PTR [589E],FF

1714:2773 7419 JZ 278E

1714:2775 8BD8 MOV BX,AX

1714:2777 F6470280 TEST BYTE PTR [BX+02],80

1714:277B 7411 JZ 278E

1714:277D 8A4703 MOV AL,[BX+03]

1714:2780 2AE4 SUB AH,AH

1714:2782 3B4604 CMP AX,[BP+04]

1714:2785 7507 JNZ 278E

1714:2787 B8FD00 MOV AX,00FD

1714:278A 50 PUSH AX

1714:278B E82CEF CALL 16BA

1714:278E 8B4604 MOV AX,[BP+04]

1714:2791 B105 MOV CL,05

1714:2793 D3E0 SHL AX,CL

1714:2795 05A855 ADD AX,55A8

1714:2798 8946F8 MOV [BP-08],AX

1714:279B 50 PUSH AX

1714:279C E8B1F0 CALL 1850

1714:279F FF76F8 PUSH [BP-08]

1714:27A2 E8C7F9 CALL 216C

1714:27A5 8946FC MOV [BP-04],AX

1714:27A8 3D0900 CMP AX,0009

1714:27AB 7D15 JGE 27C2

1714:27AD B80900 MOV AX,0009

1714:27B0 2B46FC SUB AX,[BP-04]

1714:27B3 8BF0 MOV SI,AX

1714:27B5 0176FC ADD [BP-04],SI

1714:27B8 B82000 MOV AX,0020

1714:27BB 50 PUSH AX

1714:27BC E8FBEE CALL 16BA

1714:27BF 4E DEC SI

1714:27C0 75F6 JNZ 27B8

1714:27C2 A07B58 MOV AL,[587B]

1714:27C5 2AE4 SUB AH,AH

1714:27C7 394604 CMP [BP+04],AX

1714:27CA 752A JNZ 27F6

1714:27CC 8B5E04 MOV BX,[BP+04]

1714:27CF B105 MOV CL,05

1714:27D1 D3E3 SHL BX,CL

1714:27D3 8A87B355 MOV AL,[BX+55B3]

1714:27D7 8846F8 MOV [BP-08],AL

1714:27DA 3C44 CMP AL,44

1714:27DC 740A JZ 27E8

1714:27DE 3C53 CMP AL,53

1714:27E0 7406 JZ 27E8

1714:27E2 B81A00 MOV AX,001A

1714:27E5 EB12 JMP 27F9

1714:27E7 90 NOP

1714:27E8 B82000 MOV AX,0020

1714:27EB 50 PUSH AX

1714:27EC E8CBEE CALL 16BA

1714:27EF C6067B58FF MOV BYTE PTR [587B],FF

1714:27F4 EB07 JMP 27FD

1714:27F6 B82000 MOV AX,0020

1714:27F9 50 PUSH AX

1714:27FA E8BDEE CALL 16BA

1714:27FD 8B5E04 MOV BX,[BP+04]

1714:2800 B105 MOV CL,05

1714:2802 D3E3 SHL BX,CL

1714:2804 FFB7B855 PUSH [BX+55B8]

1714:2808 B80400 MOV AX,0004

1714:280B 50 PUSH AX

1714:280C B82000 MOV AX,0020

1714:280F 50 PUSH AX

1714:2810 E82BF2 CALL 1A3E

1714:2813 803E93587F CMP BYTE PTR [5893],7F

1714:2818 7652 JBE 286C

1714:281A 8B7604 MOV SI,[BP+04]

1714:281D B103 MOV CL,03

1714:281F D3E6 SHL SI,CL

1714:2821 8A8416BA MOV AL,[SI+BA16]

1714:2825 24E1 AND AL,E1

1714:2827 3C81 CMP AL,81

1714:2829 7511 JNZ 283C

1714:282B 8A8417BA MOV AL,[SI+BA17]

1714:282F 2AE4 SUB AH,AH

1714:2831 3B4604 CMP AX,[BP+04]

1714:2834 7506 JNZ 283C

1714:2836 B84300 MOV AX,0043

1714:2839 EB0E JMP 2849

1714:283B 90 NOP

1714:283C 8B5E04 MOV BX,[BP+04]

1714:283F B105 MOV CL,05

1714:2841 D3E3 SHL BX,CL

1714:2843 8A87B355 MOV AL,[BX+55B3]

1714:2847 2AE4 SUB AH,AH

1714:2849 50 PUSH AX

1714:284A E86DEE CALL 16BA

1714:284D 803E9E58FF CMP BYTE PTR [589E],FF

1714:2852 7429 JZ 287D

1714:2854 8B5EFE MOV BX,[BP-02]

1714:2857 F6470280 TEST BYTE PTR [BX+02],80

1714:285B 7420 JZ 287D

1714:285D 8A4703 MOV AL,[BX+03]

1714:2860 2AE4 SUB AH,AH

1714:2862 3B4604 CMP AX,[BP+04]

1714:2865 7516 JNZ 287D

1714:2867 B8FD00 MOV AX,00FD

1714:286A EB0D JMP 2879

1714:286C 8B5E04 MOV BX,[BP+04]

1714:286F B105 MOV CL,05

1714:2871 D3E3 SHL BX,CL

1714:2873 8A87B355 MOV AL,[BX+55B3]

1714:2877 2AE4 SUB AH,AH

1714:2879 50 PUSH AX

1714:287A E83DEE CALL 16BA

1714:287D 5E POP SI

1714:287E 8BE5 MOV SP,BP

1714:2880 5D POP BP

1714:2881 C20200 RET 0002

update_gold() - 2884

{

1714:2884 55 PUSH BP

1714:2885 8BEC MOV BP,SP

1714:2887 83EC02 SUB SP,+02

1714:288A A18653 MOV AX,[5386]

1714:288D 8946FE MOV [BP-02],AX

; call get_text_effects(0001 = runes)

1714:2890 B80100 MOV AX,0001

1714:2893 50 PUSH AX

1714:2894 E8FDF2 CALL 1B94

; call set_text_cursor_position(0007,0008)

1714:2897 B80800 MOV AX,0008

1714:289A 50 PUSH AX

1714:289B B80700 MOV AX,0007

1714:289E 50 PUSH AX

1714:289F E850F3 CALL 1BF2

1714:28A2 813EAA57E803 CMP WORD PTR [57AA],03E8

1714:28A8 7D07 JGE 28B1

; call print_character(' ')

1714:28AA B82000 MOV AX,0020

1714:28AD 50 PUSH AX

1714:28AE E809EE CALL 16BA

1714:28B1 833EAA5764 CMP WORD PTR [57AA],+64

1714:28B6 7D07 JGE 28BF

; call print_character(' ')

1714:28B8 B82000 MOV AX,0020

1714:28BB 50 PUSH AX

1714:28BC E8FBED CALL 16BA

1714:28BF 833EAA570A CMP WORD PTR [57AA],+0A

1714:28C4 7D07 JGE 28CD

; call print_character(' ')

1714:28C6 B82000 MOV AX,0020

1714:28C9 50 PUSH AX

1714:28CA E8EDED CALL 16BA

; call print_string(54b6 -> " G:")

1714:28CD B8B654 MOV AX,54B6

1714:28D0 50 PUSH AX

1714:28D1 E87CEF CALL 1850

1714:28D4 FF36AA57 PUSH [57AA]

1714:28D8 B80100 MOV AX,0001

1714:28DB 50 PUSH AX

1714:28DC B82000 MOV AX,0020

1714:28DF 50 PUSH AX

1714:28E0 E85BF1 CALL 1A3E

1714:28E3 EB08 JMP 28ED

1714:28E5 90 NOP

; call print_character(' ')

1714:28E6 B82000 MOV AX,0020

1714:28E9 50 PUSH AX

1714:28EA E8CDED CALL 16BA

; call get_current_text_column()

1714:28ED E822F6 CALL 1F12

1714:28F0 3D0F00 CMP AX,000F

1714:28F3 7CF1 JL 28E6

; call get_text_effects(bp-2)

1714:28F5 FF76FE PUSH [BP-02]

1714:28F8 E899F2 CALL 1B94

1714:28FB 8BE5 MOV SP,BP

1714:28FD 5D POP BP

1714:28FE C3 RET

}

1714:28FF 90 NOP

update_vitals() - 2900

{

; store

1714:2900 55 PUSH BP

1714:2901 8BEC MOV BP,SP

1714:2903 83EC02 SUB SP,+02

1714:2906 56 PUSH SI

; call get_text_effects(0001 = runes)

1714:2907 B80100 MOV AX,0001

1714:290A 50 PUSH AX

1714:290B E886F2 CALL 1B94

; call 2726

1714:290E 2BF6 SUB SI,SI

1714:2910 56 PUSH SI

1714:2911 E812FE CALL 2726

1714:2914 46 INC SI

1714:2915 83FE06 CMP SI,+06

1714:2918 7CF6 JL 2910

1714:291A 8976FE MOV [BP-02],SI

; call set_text_cursor_position(0007,0000)

1714:291D 2BC0 SUB AX,AX

1714:291F 50 PUSH AX

1714:2920 B80700 MOV AX,0007

1714:2923 50 PUSH AX

1714:2924 E8CBF2 CALL 1BF2

; call print_string(54ba -> "F:")

1714:2927 B8BA54 MOV AX,54BA

1714:292A 50 PUSH AX

1714:292B E822EF CALL 1850

; call 1a3e

1714:292E FF36A857 PUSH [57A8]

1714:2932 B80100 MOV AX,0001

1714:2935 50 PUSH AX

1714:2936 B82000 MOV AX,0020

1714:2939 50 PUSH AX

1714:293A E801F1 CALL 1A3E

1714:293D EB08 JMP 2947

1714:293F 90 NOP

; call print_character(' ')

1714:2940 B82000 MOV AX,0020

1714:2943 50 PUSH AX

1714:2944 E873ED CALL 16BA

; call get_current_text_column()

1714:2947 E8C8F5 CALL 1F12

1714:294A 3D0800 CMP AX,0008

1714:294D 7CF1 JL 2940

1714:294F 803E935880 CMP BYTE PTR [5893],80

1714:2954 7332 JNB 2988

1714:2956 A07C58 MOV AL,[587C]

1714:2959 24F8 AND AL,F8

1714:295B 3C20 CMP AL,20

1714:295D 7529 JNZ 2988

; call print_string(54bd -> "Ship:")

1714:295F B8BD54 MOV AX,54BD

1714:2962 50 PUSH AX

1714:2963 E8EAEE CALL 1850

; call 1a3e

1714:2966 A05F5C MOV AL,[5C5F]

1714:2969 2AE4 SUB AH,AH

1714:296B 50 PUSH AX

1714:296C B80100 MOV AX,0001

1714:296F 50 PUSH AX

1714:2970 B82000 MOV AX,0020

1714:2973 50 PUSH AX

1714:2974 E8C7F0 CALL 1A3E

1714:2977 803E5F5C0A CMP BYTE PTR [5C5F],0A

1714:297C 730D JNB 298B

; call print_character(' ')

1714:297E B82000 MOV AX,0020

1714:2981 50 PUSH AX

1714:2982 E835ED CALL 16BA

1714:2985 EB04 JMP 298B

1714:2987 90 NOP

; call update_gold()

1714:2988 E8F9FE CALL 2884

; call print_string(54c3 -> "\n ")

1714:298B B8C354 MOV AX,54C3

1714:298E 50 PUSH AX

1714:298F E8BEEE CALL 1850

; if *587d > '\n' || *587e > '\n', jump to 29a7

1714:2992 803E7D580A CMP BYTE PTR [587D],0A

1714:2997 730E JNB 29A7

1714:2999 803E7E580A CMP BYTE PTR [587E],0A

1714:299E 7307 JNB 29A7

; call print_character(' ')

1714:29A0 B82000 MOV AX,0020

1714:29A3 50 PUSH AX

1714:29A4 E813ED CALL 16BA

; call 1a3e

1714:29A7 A07D58 MOV AL,[587D]

1714:29AA 2AE4 SUB AH,AH

1714:29AC 50 PUSH AX

1714:29AD B80100 MOV AX,0001

1714:29B0 50 PUSH AX

1714:29B1 B82000 MOV AX,0020

1714:29B4 50 PUSH AX

1714:29B5 E886F0 CALL 1A3E

; call print_character('-')

1714:29B8 B82D00 MOV AX,002D

1714:29BB 50 PUSH AX

1714:29BC E8FBEC CALL 16BA

; call 1a3e

1714:29BF A07E58 MOV AL,[587E]

1714:29C2 2AE4 SUB AH,AH

1714:29C4 50 PUSH AX

1714:29C5 B80100 MOV AX,0001

1714:29C8 50 PUSH AX

1714:29C9 B82000 MOV AX,0020

1714:29CC 50 PUSH AX

1714:29CD E86EF0 CALL 1A3E

; call print_character('-')

1714:29D0 B82D00 MOV AX,002D

1714:29D3 50 PUSH AX

1714:29D4 E8E3EC CALL 16BA

; call 1a3e

1714:29D7 FF367458 PUSH [5874]

1714:29DB B80300 MOV AX,0003

1714:29DE 50 PUSH AX

1714:29DF B83000 MOV AX,0030

1714:29E2 50 PUSH AX

1714:29E3 E858F0 CALL 1A3E

1714:29E6 EB07 JMP 29EF

; call print_character(' ')

1714:29E8 B82000 MOV AX,0020

1714:29EB 50 PUSH AX

1714:29EC E8CBEC CALL 16BA

; call get_current_text_column()

1714:29EF E820F5 CALL 1F12

1714:29F2 3D0F00 CMP AX,000F

1714:29F5 7CF1 JL 29E8

; call set_text_cursor_position(0000,0006)

1714:29F7 B80600 MOV AX,0006

1714:29FA 50 PUSH AX

1714:29FB 50 PUSH AX

1714:29FC E8F3F1 CALL 1BF2

; if *587a == 0, jump to 2a18

1714:29FF 803E7A5800 CMP BYTE PTR [587A],00

1714:2A04 7412 JZ 2A18

; call 4c2a

1714:2A06 E82122 CALL 4C2A

; call print_character(ax)

1714:2A09 A07A58 MOV AL,[587A]

1714:2A0C 2AE4 SUB AH,AH

1714:2A0E 50 PUSH AX

1714:2A0F E8A8EC CALL 16BA

; call 4cce

1714:2A12 E8B922 CALL 4CCE

; jump to 2a1b

1714:2A15 EB04 JMP 2A1B

1714:2A17 90 NOP

; call 4f3c

1714:2A18 E82125 CALL 4F3C

; call get_text_effects(0002 = ?)

1714:2A1B B80200 MOV AX,0002

1714:2A1E 50 PUSH AX

1714:2A1F E872F1 CALL 1B94

; restore & return

1714:2A22 5E POP SI

1714:2A23 8BE5 MOV SP,BP

1714:2A25 5D POP BP

1714:2A26 C3 RET

}

1714:2A27 90 NOP

1714:2A28 55 PUSH BP

1714:2A29 8BEC MOV BP,SP

1714:2A2B 56 PUSH SI

1714:2A2C FF36B013 PUSH [13B0]

1714:2A30 E83DE0 CALL 0A70

1714:2A33 8B7604 MOV SI,[BP+04]

1714:2A36 B103 MOV CL,03

1714:2A38 D3E6 SHL SI,CL

1714:2A3A B8C000 MOV AX,00C0

1714:2A3D 50 PUSH AX

1714:2A3E 8D4408 LEA AX,[SI+08]

1714:2A41 50 PUSH AX

1714:2A42 B83701 MOV AX,0137

1714:2A45 50 PUSH AX

1714:2A46 8D440F LEA AX,[SI+0F]

1714:2A49 50 PUSH AX

1714:2A4A E839E1 CALL 0B86

1714:2A4D 5E POP SI

1714:2A4E 5D POP BP

1714:2A4F C20200 RET 0002

1714:2A52 55 PUSH BP

1714:2A53 8BEC MOV BP,SP

1714:2A55 56 PUSH SI

1714:2A56 FF7606 PUSH [BP+06]

1714:2A59 E8CCFF CALL 2A28

1714:2A5C B80A00 MOV AX,000A

1714:2A5F 50 PUSH AX

1714:2A60 B84006 MOV AX,0640

1714:2A63 50 PUSH AX

1714:2A64 B8D007 MOV AX,07D0

1714:2A67 50 PUSH AX

1714:2A68 E8D1F7 CALL 223C

1714:2A6B FF7606 PUSH [BP+06]

1714:2A6E E8B7FF CALL 2A28

1714:2A71 8B7606 MOV SI,[BP+06]

1714:2A74 B105 MOV CL,05

1714:2A76 D3E6 SHL SI,CL

1714:2A78 8B4604 MOV AX,[BP+04]

1714:2A7B 2984B855 SUB [SI+55B8],AX

1714:2A7F 83BCB85500 CMP WORD PTR [SI+55B8],+00

1714:2A84 7F1A JG 2AA0

1714:2A86 C784B8550000 MOV WORD PTR [SI+55B8],0000

1714:2A8C C684B35544 MOV BYTE PTR [SI+55B3],44

1714:2A91 A07B58 MOV AL,[587B]

1714:2A94 2AE4 SUB AH,AH

1714:2A96 394606 CMP [BP+06],AX

1714:2A99 7505 JNZ 2AA0

1714:2A9B C6067B58FF MOV BYTE PTR [587B],FF

1714:2AA0 E85DFE CALL 2900

1714:2AA3 5E POP SI

1714:2AA4 5D POP BP

1714:2AA5 C20400 RET 0004

1714:2AA8 55 PUSH BP

1714:2AA9 8BEC MOV BP,SP

1714:2AAB 83EC04 SUB SP,+04

1714:2AAE 57 PUSH DI

1714:2AAF 56 PUSH SI

1714:2AB0 2BF6 SUB SI,SI

1714:2AB2 BFB355 MOV DI,55B3

1714:2AB5 8BC6 MOV AX,SI

1714:2AB7 8A0E5B58 MOV CL,[585B]

1714:2ABB 2AED SUB CH,CH

1714:2ABD 3BC1 CMP AX,CX

1714:2ABF 7315 JNB 2AD6

1714:2AC1 803D44 CMP BYTE PTR [DI],44

1714:2AC4 7410 JZ 2AD6

1714:2AC6 56 PUSH SI

1714:2AC7 B80100 MOV AX,0001

1714:2ACA 50 PUSH AX

1714:2ACB B80800 MOV AX,0008

1714:2ACE 50 PUSH AX

1714:2ACF E8C0F5 CALL 2092

1714:2AD2 50 PUSH AX

1714:2AD3 E87CFF CALL 2A52

1714:2AD6 83C720 ADD DI,+20

1714:2AD9 46 INC SI

1714:2ADA 83FE06 CMP SI,+06

1714:2ADD 7CD6 JL 2AB5

1714:2ADF 8976FE MOV [BP-02],SI

1714:2AE2 5E POP SI

1714:2AE3 5F POP DI

1714:2AE4 8BE5 MOV SP,BP

1714:2AE6 5D POP BP

1714:2AE7 C3 RET

1714:2AE8 55 PUSH BP

1714:2AE9 8BEC MOV BP,SP

1714:2AEB 83EC08 SUB SP,+08

1714:2AEE 57 PUSH DI

1714:2AEF 56 PUSH SI

1714:2AF0 C746FE0000 MOV WORD PTR [BP-02],0000

1714:2AF5 C746FC0000 MOV WORD PTR [BP-04],0000

1714:2AFA A05B58 MOV AL,[585B]

1714:2AFD 2AE4 SUB AH,AH

1714:2AFF 0BC0 OR AX,AX

1714:2B01 745A JZ 2B5D

1714:2B03 C746F8B355 MOV WORD PTR [BP-08],55B3

1714:2B08 8B7EFC MOV DI,[BP-04]

1714:2B0B 8B5EF8 MOV BX,[BP-08]

1714:2B0E 8A07 MOV AL,[BX]

1714:2B10 2AE4 SUB AH,AH

1714:2B12 8BF0 MOV SI,AX

1714:2B14 3D4400 CMP AX,0044

1714:2B17 7511 JNZ 2B2A

1714:2B19 8BC7 MOV AX,DI

1714:2B1B 8A0E7B58 MOV CL,[587B]

1714:2B1F 2AED SUB CH,CH

1714:2B21 3BC1 CMP AX,CX

1714:2B23 7505 JNZ 2B2A

1714:2B25 C6067B58FF MOV BYTE PTR [587B],FF

1714:2B2A 8BC6 MOV AX,SI

1714:2B2C 3D4400 CMP AX,0044

1714:2B2F 7415 JZ 2B46

1714:2B31 3D5300 CMP AX,0053

1714:2B34 7410 JZ 2B46

1714:2B36 3D5000 CMP AX,0050

1714:2B39 7508 JNZ 2B43

1714:2B3B 57 PUSH DI

1714:2B3C B80100 MOV AX,0001

1714:2B3F 50 PUSH AX

1714:2B40 E80FFF CALL 2A52

1714:2B43 FF46FE INC WORD PTR [BP-02]

1714:2B46 8346F820 ADD WORD PTR [BP-08],+20

1714:2B4A 47 INC DI

1714:2B4B 8BC7 MOV AX,DI

1714:2B4D 8A0E5B58 MOV CL,[585B]

1714:2B51 2AED SUB CH,CH

1714:2B53 3BC1 CMP AX,CX

1714:2B55 72B4 JB 2B0B

1714:2B57 897EFC MOV [BP-04],DI

1714:2B5A 8976FA MOV [BP-06],SI

1714:2B5D A08058 MOV AL,[5880]

1714:2B60 38067F58 CMP [587F],AL

1714:2B64 7439 JZ 2B9F

1714:2B66 833EA85700 CMP WORD PTR [57A8],+00

1714:2B6B 750D JNZ 2B7A

1714:2B6D B8C854 MOV AX,54C8

1714:2B70 50 PUSH AX

1714:2B71 E8DCEC CALL 1850

1714:2B74 E831FF CALL 2AA8

1714:2B77 EB20 JMP 2B99

1714:2B79 90 NOP

1714:2B7A 803E7F5806 CMP BYTE PTR [587F],06

1714:2B7F 740E JZ 2B8F

1714:2B81 803E7F580C CMP BYTE PTR [587F],0C

1714:2B86 7407 JZ 2B8F

1714:2B88 803E7F5812 CMP BYTE PTR [587F],12

1714:2B8D 750A JNZ 2B99

1714:2B8F B8A857 MOV AX,57A8

1714:2B92 50 PUSH AX

1714:2B93 FF76FE PUSH [BP-02]

1714:2B96 E8BB13 CALL 3F54

1714:2B99 A07F58 MOV AL,[587F]

1714:2B9C A28058 MOV [5880],AL

1714:2B9F B88B58 MOV AX,588B

1714:2BA2 50 PUSH AX

1714:2BA3 B80100 MOV AX,0001

1714:2BA6 50 PUSH AX

1714:2BA7 B8FF00 MOV AX,00FF

1714:2BAA 50 PUSH AX

1714:2BAB E84213 CALL 3EF0

1714:2BAE 803E8E5800 CMP BYTE PTR [588E],00

1714:2BB3 7415 JZ 2BCA

1714:2BB5 803E8E58FF CMP BYTE PTR [588E],FF

1714:2BBA 740E JZ 2BCA

1714:2BBC FE0E8E58 DEC BYTE PTR [588E]

1714:2BC0 7508 JNZ 2BCA

1714:2BC2 C6067A5800 MOV BYTE PTR [587A],00

1714:2BC7 E836FD CALL 2900

1714:2BCA E83F14 CALL 400C

1714:2BCD 5E POP SI

1714:2BCE 5F POP DI

1714:2BCF 8BE5 MOV SP,BP

1714:2BD1 5D POP BP

1714:2BD2 C3 RET

1714:2BD3 90 NOP

1714:2BD4 55 PUSH BP

1714:2BD5 8BEC MOV BP,SP

1714:2BD7 83EC02 SUB SP,+02

1714:2BDA B88000 MOV AX,0080

1714:2BDD 8A4E04 MOV CL,[BP+04]

1714:2BE0 2AED SUB CH,CH

1714:2BE2 83E107 AND CX,+07

1714:2BE5 D3F8 SAR AX,CL

1714:2BE7 8B5E04 MOV BX,[BP+04]

1714:2BEA B103 MOV CL,03

1714:2BEC D3FB SAR BX,CL

1714:2BEE 8A8FD454 MOV CL,[BX+54D4]

1714:2BF2 2AED SUB CH,CH

1714:2BF4 85C1 TEST AX,CX

1714:2BF6 7408 JZ 2C00

1714:2BF8 C746FE0000 MOV WORD PTR [BP-02],0000

1714:2BFD EB06 JMP 2C05

1714:2BFF 90 NOP

1714:2C00 C746FE0100 MOV WORD PTR [BP-02],0001

1714:2C05 8A4606 MOV AL,[BP+06]

1714:2C08 24FE AND AL,FE

1714:2C0A 3C1C CMP AL,1C

1714:2C0C 7417 JZ 2C25

1714:2C0E 8A4606 MOV AL,[BP+06]

1714:2C11 24F0 AND AL,F0

1714:2C13 3C40 CMP AL,40

1714:2C15 740E JZ 2C25

1714:2C17 8A4604 MOV AL,[BP+04]

1714:2C1A 24FC AND AL,FC

1714:2C1C 3C90 CMP AL,90

1714:2C1E 7505 JNZ 2C25

1714:2C20 C746FE0000 MOV WORD PTR [BP-02],0000

1714:2C25 8B46FE MOV AX,[BP-02]

1714:2C28 8BE5 MOV SP,BP

1714:2C2A 5D POP BP

1714:2C2B C20400 RET 0004

1714:2C2E 55 PUSH BP

1714:2C2F 8BEC MOV BP,SP

1714:2C31 837E0404 CMP WORD PTR [BP+04],+04

1714:2C35 7C09 JL 2C40

1714:2C37 8A4604 MOV AL,[BP+04]

1714:2C3A 24F0 AND AL,F0

1714:2C3C 3C60 CMP AL,60

1714:2C3E 7506 JNZ 2C46

1714:2C40 B80100 MOV AX,0001

1714:2C43 EB03 JMP 2C48

1714:2C45 90 NOP

1714:2C46 2BC0 SUB AX,AX

1714:2C48 5D POP BP

1714:2C49 C20200 RET 0002

1714:2C4C 55 PUSH BP

1714:2C4D 8BEC MOV BP,SP

1714:2C4F 8B5E06 MOV BX,[BP+06]

1714:2C52 D1FB SAR BX,1

1714:2C54 D1FB SAR BX,1

1714:2C56 8A87F454 MOV AL,[BX+54F4]

1714:2C5A 2AE4 SUB AH,AH

1714:2C5C 3D0A00 CMP AX,000A

1714:2C5F 7748 JA 2CA9

1714:2C61 03C0 ADD AX,AX

1714:2C63 93 XCHG BX,AX

1714:2C64 2E CS:

1714:2C65 FFA7602D JMP [BX+2D60]

1714:2C69 90 NOP

1714:2C6A FF7606 PUSH [BP+06]

1714:2C6D FF7604 PUSH [BP+04]

1714:2C70 E861FF CALL 2BD4

1714:2C73 E90001 JMP 2D76

1714:2C76 FF7604 PUSH [BP+04]

1714:2C79 E8B2FF CALL 2C2E

1714:2C7C E9F700 JMP 2D76

1714:2C7F 90 NOP

1714:2C80 8A4604 MOV AL,[BP+04]

1714:2C83 24F0 AND AL,F0

1714:2C85 3C60 CMP AL,60

1714:2C87 7503 JNZ 2C8C

1714:2C89 E9B100 JMP 2D3D

1714:2C8C FF7604 PUSH [BP+04]

1714:2C8F E89CFF CALL 2C2E

1714:2C92 0BC0 OR AX,AX

1714:2C94 7403 JZ 2C99

1714:2C96 E9A400 JMP 2D3D

1714:2C99 FF7606 PUSH [BP+06]

1714:2C9C FF7604 PUSH [BP+04]

1714:2C9F E832FF CALL 2BD4

1714:2CA2 0BC0 OR AX,AX

1714:2CA4 7403 JZ 2CA9

1714:2CA6 E99400 JMP 2D3D

1714:2CA9 2BC0 SUB AX,AX

1714:2CAB E9C800 JMP 2D76

1714:2CAE FF7606 PUSH [BP+06]

1714:2CB1 FF7604 PUSH [BP+04]

1714:2CB4 E81DFF CALL 2BD4

1714:2CB7 0BC0 OR AX,AX

1714:2CB9 74EE JZ 2CA9

1714:2CBB 817E048F00 CMP WORD PTR [BP+04],008F

1714:2CC0 74E7 JZ 2CA9

1714:2CC2 837E0404 CMP WORD PTR [BP+04],+04

1714:2CC6 74E1 JZ 2CA9

1714:2CC8 EB73 JMP 2D3D

1714:2CCA FF7604 PUSH [BP+04]

1714:2CCD E85EFF CALL 2C2E

1714:2CD0 8BC8 MOV CX,AX

1714:2CD2 83F901 CMP CX,+01

1714:2CD5 1BC0 SBB AX,AX

1714:2CD7 F7D8 NEG AX

1714:2CD9 E99A00 JMP 2D76

1714:2CDC 8A4604 MOV AL,[BP+04]

1714:2CDF 24FC AND AL,FC

1714:2CE1 3C34 CMP AL,34

1714:2CE3 7523 JNZ 2D08

1714:2CE5 B80800 MOV AX,0008

1714:2CE8 8A4E06 MOV CL,[BP+06]

1714:2CEB 2AED SUB CH,CH

1714:2CED 83E103 AND CX,+03

1714:2CF0 D3F8 SAR AX,CL

1714:2CF2 8B5E04 MOV BX,[BP+04]

1714:2CF5 8A8F1055 MOV CL,[BX+5510]

1714:2CF9 2AED SUB CH,CH

1714:2CFB 23C1 AND AX,CX

1714:2CFD 8BC8 MOV CX,AX

1714:2CFF 83F901 CMP CX,+01

1714:2D02 1BC0 SBB AX,AX

1714:2D04 40 INC AX

1714:2D05 EB6F JMP 2D76

1714:2D07 90 NOP

1714:2D08 FF7604 PUSH [BP+04]

1714:2D0B E820FF CALL 2C2E

1714:2D0E 0BC0 OR AX,AX

1714:2D10 7497 JZ 2CA9

1714:2D12 837E0460 CMP WORD PTR [BP+04],+60

1714:2D16 7C25 JL 2D3D

1714:2D18 B80800 MOV AX,0008

1714:2D1B 8A4E06 MOV CL,[BP+06]

1714:2D1E 2AED SUB CH,CH

1714:2D20 83E103 AND CX,+03

1714:2D23 D3F8 SAR AX,CL

1714:2D25 8B5E04 MOV BX,[BP+04]

1714:2D28 8A8FD454 MOV CL,[BX+54D4]

1714:2D2C 2AED SUB CH,CH

1714:2D2E 85C1 TEST AX,CX

1714:2D30 E971FF JMP 2CA4

1714:2D33 90 NOP

1714:2D34 837E0402 CMP WORD PTR [BP+04],+02

1714:2D38 7E03 JLE 2D3D

1714:2D3A E96CFF JMP 2CA9

1714:2D3D B80100 MOV AX,0001

1714:2D40 EB34 JMP 2D76

1714:2D42 837E0404 CMP WORD PTR [BP+04],+04

1714:2D46 7403 JZ 2D4B

1714:2D48 E95EFF JMP 2CA9

1714:2D4B EBF0 JMP 2D3D

1714:2D4D 90 NOP

1714:2D4E 837E0405 CMP WORD PTR [BP+04],+05

1714:2D52 EBF2 JMP 2D46

1714:2D54 837E0401 CMP WORD PTR [BP+04],+01

1714:2D58 EBEC JMP 2D46

1714:2D5A 837E0407 CMP WORD PTR [BP+04],+07

1714:2D5E EBE6 JMP 2D46

1714:2D60 6A DB 6A

1714:2D61 2C76 SUB AL,76

1714:2D63 2C80 SUB AL,80

1714:2D65 2CAE SUB AL,AE

1714:2D67 2CCA SUB AL,CA

1714:2D69 2CDC SUB AL,DC

1714:2D6B 2C34 SUB AL,34

1714:2D6D 2D422D SUB AX,2D42

1714:2D70 4E DEC SI

1714:2D71 2D542D SUB AX,2D54

1714:2D74 5A POP DX

1714:2D75 2D5DC2 SUB AX,C25D

1714:2D78 0400 ADD AL,00

1714:2D7A 55 PUSH BP

1714:2D7B 8BEC MOV BP,SP

1714:2D7D 83EC08 SUB SP,+08

1714:2D80 57 PUSH DI

1714:2D81 56 PUSH SI

1714:2D82 C746FE0000 MOV WORD PTR [BP-02],0000

1714:2D87 C746F8FFFF MOV WORD PTR [BP-08],FFFF

1714:2D8C C746FC0000 MOV WORD PTR [BP-04],0000

1714:2D91 803E93587F CMP BYTE PTR [5893],7F

1714:2D96 761A JBE 2DB2

1714:2D98 A09E58 MOV AL,[589E]

1714:2D9B 2AE4 SUB AH,AH

1714:2D9D 8BF0 MOV SI,AX

1714:2D9F B103 MOV CL,03

1714:2DA1 D3E6 SHL SI,CL

1714:2DA3 F68416BA80 TEST BYTE PTR [SI+BA16],80

1714:2DA8 7408 JZ 2DB2

1714:2DAA 8A8417BA MOV AL,[SI+BA17]

1714:2DAE 50 PUSH AX

1714:2DAF E876FC CALL 2A28

1714:2DB2 B85455 MOV AX,5554

1714:2DB5 50 PUSH AX

1714:2DB6 E89720 CALL 4E50

1714:2DB9 8B7EF8 MOV DI,[BP-08]

1714:2DBC 3B7EFE CMP DI,[BP-02]

1714:2DBF 7409 JZ 2DCA

1714:2DC1 FF76FE PUSH [BP-02]

1714:2DC4 E861FC CALL 2A28

1714:2DC7 8B7EFE MOV DI,[BP-02]

1714:2DCA E89FF8 CALL 266C

1714:2DCD 8BF0 MOV SI,AX

1714:2DCF 3D3700 CMP AX,0037

1714:2DD2 77F6 JA 2DCA

1714:2DD4 3D3000 CMP AX,0030

1714:2DD7 761D JBE 2DF6

1714:2DD9 3D3700 CMP AX,0037

1714:2DDC 7318 JNB 2DF6

1714:2DDE 2D3100 SUB AX,0031

1714:2DE1 8A0E5B58 MOV CL,[585B]

1714:2DE5 2AED SUB CH,CH

1714:2DE7 3BC1 CMP AX,CX

1714:2DE9 730B JNB 2DF6

1714:2DEB 8BC6 MOV AX,SI

1714:2DED 2D3100 SUB AX,0031

1714:2DF0 8946FE MOV [BP-02],AX

1714:2DF3 EB24 JMP 2E19

1714:2DF5 90 NOP

1714:2DF6 8BC6 MOV AX,SI

1714:2DF8 3D0400 CMP AX,0004

1714:2DFB 742D JZ 2E2A

1714:2DFD 7F59 JG 2E58

1714:2DFF 3D0100 CMP AX,0001

1714:2E02 740A JZ 2E0E

1714:2E04 3D0200 CMP AX,0002

1714:2E07 7421 JZ 2E2A

1714:2E09 3D0300 CMP AX,0003

1714:2E0C 750B JNZ 2E19

1714:2E0E 8D46FE LEA AX,[BP-02]

1714:2E11 50 PUSH AX

1714:2E12 B80100 MOV AX,0001

1714:2E15 50 PUSH AX

1714:2E16 E83B11 CALL 3F54

1714:2E19 3B7EFE CMP DI,[BP-02]

1714:2E1C 7404 JZ 2E22

1714:2E1E 57 PUSH DI

1714:2E1F E806FC CALL 2A28

1714:2E22 837EFC00 CMP WORD PTR [BP-04],+00

1714:2E26 7546 JNZ 2E6E

1714:2E28 EB92 JMP 2DBC

1714:2E2A 8D46FE LEA AX,[BP-02]

1714:2E2D 50 PUSH AX

1714:2E2E B80100 MOV AX,0001

1714:2E31 50 PUSH AX

1714:2E32 A05B58 MOV AL,[585B]

1714:2E35 2AE4 SUB AH,AH

1714:2E37 48 DEC AX

1714:2E38 50 PUSH AX

1714:2E39 E8D810 CALL 3F14

1714:2E3C EBDB JMP 2E19

1714:2E3E 837E0400 CMP WORD PTR [BP+04],+00

1714:2E42 74D5 JZ 2E19

1714:2E44 C746FEFEFF MOV WORD PTR [BP-02],FFFE

1714:2E49 C746FC0100 MOV WORD PTR [BP-04],0001

1714:2E4E EBC9 JMP 2E19

1714:2E50 C746FEFFFF MOV WORD PTR [BP-02],FFFF

1714:2E55 EBF2 JMP 2E49

1714:2E57 90 NOP

1714:2E58 3D0D00 CMP AX,000D

1714:2E5B 74EC JZ 2E49

1714:2E5D 3D1B00 CMP AX,001B

1714:2E60 74EE JZ 2E50

1714:2E62 3D2000 CMP AX,0020

1714:2E65 74E2 JZ 2E49

1714:2E67 3D3000 CMP AX,0030

1714:2E6A 74D2 JZ 2E3E

1714:2E6C EBAB JMP 2E19

1714:2E6E 897EF8 MOV [BP-08],DI

1714:2E71 8976FA MOV [BP-06],SI

1714:2E74 837EFEFF CMP WORD PTR [BP-02],-01

1714:2E78 7E06 JLE 2E80

1714:2E7A FF76FE PUSH [BP-02]

1714:2E7D E8A8FB CALL 2A28

1714:2E80 E89D1F CALL 4E20

1714:2E83 8B46FE MOV AX,[BP-02]

1714:2E86 5E POP SI

1714:2E87 5F POP DI

1714:2E88 8BE5 MOV SP,BP

1714:2E8A 5D POP BP

1714:2E8B C20200 RET 0002

1714:2E8E 2BC0 SUB AX,AX

1714:2E90 50 PUSH AX

1714:2E91 E8E6FE CALL 2D7A

1714:2E94 C3 RET

1714:2E95 90 NOP

print_direction(p0) - 2e96

{

; p0 = direction (or ffff for none)

; store

1714:2E96 55 PUSH BP

1714:2E97 8BEC MOV BP,SP

; if p0 == ffff, jump to 2eaa

1714:2E99 837E04FF CMP WORD PTR [BP+04],-01

1714:2E9D 740B JZ 2EAA

; set *5892 = direction

1714:2E9F 8A4604 MOV AL,[BP+04]

1714:2EA2 A29258 MOV [5892],AL

; clear 5883

1714:2EA5 C606835800 MOV BYTE PTR [5883],00

; if *5893 >= 21, return at 2f5e

1714:2EAA 803E935821 CMP BYTE PTR [5893],21

1714:2EAF 7203 JB 2EB4

1714:2EB1 E9AA00 JMP 2F5E

; if *5893 == 19, return at 2f5e

1714:2EB4 803E935819 CMP BYTE PTR [5893],19

1714:2EB9 7503 JNZ 2EBE

1714:2EBB E9A000 JMP 2F5E

; if *5895 >= 80, jump to 2f2a (dungeon direction)

1714:2EBE 803E955880 CMP BYTE PTR [5895],80

1714:2EC3 7365 JNB 2F2A

; we get here for wind direction

; call get_text_effects(0000 = ibm)

1714:2EC5 2BC0 SUB AX,AX

1714:2EC7 50 PUSH AX

1714:2EC8 E8C9EC CALL 1B94

; call set_cursor_text_position(0017,0006)

1714:2ECB B80600 MOV AX,0006

1714:2ECE 50 PUSH AX

1714:2ECF B81700 MOV AX,0017

1714:2ED2 50 PUSH AX

1714:2ED3 E81CED CALL 1BF2

1714:2ED6 E8511D CALL 4C2A

; set ax = wind direction

1714:2ED9 A09258 MOV AL,[5892]

1714:2EDC 2AE4 SUB AH,AH

; if direction == 0, jump to 2ef8

1714:2EDE 0BC0 OR AX,AX

1714:2EE0 7416 JZ 2EF8

; if direction == 1, jump to 2f12

1714:2EE2 3D0100 CMP AX,0001

1714:2EE5 742B JZ 2F12

; if direction == 2, jump to 2f18

1714:2EE7 3D0200 CMP AX,0002

1714:2EEA 742C JZ 2F18

; if direction == 3, jump to 2f1e

1714:2EEC 3D0300 CMP AX,0003

1714:2EEF 742D JZ 2F1E

; if direction == 4, jump to 2f24

1714:2EF1 3D0400 CMP AX,0004

1714:2EF4 742E JZ 2F24

; otherwise (ff), jump to 2eff

1714:2EF6 EB07 JMP 2EFF

; set ax -> "Calm "

1714:2EF8 B85C55 MOV AX,555C

; call print_string(wind direction)

1714:2EFB 50 PUSH AX

1714:2EFC E851E9 CALL 1850

; call print_string(557a -> " Winds")

1714:2EFF B87A55 MOV AX,557A

1714:2F02 50 PUSH AX

1714:2F03 E84AE9 CALL 1850

1714:2F06 E8C51D CALL 4CCE

; call get_text_effects(0002 = ?)

1714:2F09 B80200 MOV AX,0002

1714:2F0C 50 PUSH AX

1714:2F0D E884EC CALL 1B94

; return at 2f5e

1714:2F10 EB4C JMP 2F5E

; set ax -> "North", jump to call

1714:2F12 B86255 MOV AX,5562

1714:2F15 EBE4 JMP 2EFB

1714:2F17 90 NOP

; set ax -> "South", jump to call

1714:2F18 B86855 MOV AX,5568

1714:2F1B EBDE JMP 2EFB

1714:2F1D 90 NOP

; set ax -> "East ", jump to call

1714:2F1E B86E55 MOV AX,556E

1714:2F21 EBD8 JMP 2EFB

1714:2F23 90 NOP

; set ax -> "West ", jump to call

1714:2F24 B87455 MOV AX,5574

1714:2F27 EBD2 JMP 2EFB

1714:2F29 90 NOP

; we get here for dungeon direction

1714:2F2A FF36B013 PUSH [13B0]

1714:2F2E E83FDB CALL 0A70

1714:2F31 B83000 MOV AX,0030

1714:2F34 50 PUSH AX

1714:2F35 B8B800 MOV AX,00B8

1714:2F38 50 PUSH AX

1714:2F39 B89800 MOV AX,0098

1714:2F3C 50 PUSH AX

1714:2F3D B8B800 MOV AX,00B8

1714:2F40 50 PUSH AX

1714:2F41 E8CCDB CALL 0B10

1714:2F44 FF36B213 PUSH [13B2]

1714:2F48 E825DB CALL 0A70

1714:2F4B B83000 MOV AX,0030

1714:2F4E 50 PUSH AX

1714:2F4F B8B900 MOV AX,00B9

1714:2F52 50 PUSH AX

1714:2F53 B89800 MOV AX,0098

1714:2F56 50 PUSH AX

1714:2F57 B8BF00 MOV AX,00BF

1714:2F5A 50 PUSH AX

1714:2F5B E848DB CALL 0AA6

; restore & return

1714:2F5E 5D POP BP

1714:2F5F C20200 RET 0002

}

1714:2F62 55 PUSH BP

1714:2F63 8BEC MOV BP,SP

1714:2F65 83EC02 SUB SP,+02

1714:2F68 56 PUSH SI

1714:2F69 2BC0 SUB AX,AX

1714:2F6B 50 PUSH AX

1714:2F6C B83F00 MOV AX,003F

1714:2F6F 50 PUSH AX

1714:2F70 E81FF1 CALL 2092

1714:2F73 0BC0 OR AX,AX

1714:2F75 7529 JNZ 2FA0

1714:2F77 EB10 JMP 2F89

1714:2F79 90 NOP

1714:2F7A 2BC0 SUB AX,AX

1714:2F7C 50 PUSH AX

1714:2F7D B8FF00 MOV AX,00FF

1714:2F80 50 PUSH AX

1714:2F81 E80EF1 CALL 2092

1714:2F84 3DC000 CMP AX,00C0

1714:2F87 7D10 JGE 2F99

1714:2F89 2BC0 SUB AX,AX

1714:2F8B 50 PUSH AX

1714:2F8C B80400 MOV AX,0004

1714:2F8F 50 PUSH AX

1714:2F90 E8FFF0 CALL 2092

1714:2F93 8BF0 MOV SI,AX

1714:2F95 0BF6 OR SI,SI

1714:2F97 74E1 JZ 2F7A

1714:2F99 8976FE MOV [BP-02],SI

1714:2F9C 56 PUSH SI

1714:2F9D E8F6FE CALL 2E96

1714:2FA0 5E POP SI

1714:2FA1 8BE5 MOV SP,BP

1714:2FA3 5D POP BP

1714:2FA4 C3 RET

1714:2FA5 90 NOP

1714:2FA6 55 PUSH BP

1714:2FA7 8BEC MOV BP,SP

1714:2FA9 56 PUSH SI

1714:2FAA A05B58 MOV AL,[585B]

1714:2FAD 2AE4 SUB AH,AH

1714:2FAF 394604 CMP [BP+04],AX

1714:2FB2 7316 JNB 2FCA

1714:2FB4 8B7604 MOV SI,[BP+04]

1714:2FB7 B105 MOV CL,05

1714:2FB9 D3E6 SHL SI,CL

1714:2FBB 81C6B355 ADD SI,55B3

1714:2FBF 803C44 CMP BYTE PTR [SI],44

1714:2FC2 7406 JZ 2FCA

1714:2FC4 C60450 MOV BYTE PTR [SI],50

1714:2FC7 E836F9 CALL 2900

1714:2FCA 5E POP SI

1714:2FCB 5D POP BP

1714:2FCC C20200 RET 0002

1714:2FCF 90 NOP

1714:2FD0 55 PUSH BP

1714:2FD1 8BEC MOV BP,SP

1714:2FD3 83EC04 SUB SP,+04

1714:2FD6 56 PUSH SI

1714:2FD7 B82800 MOV AX,0028

1714:2FDA 50 PUSH AX

1714:2FDB B8B80B MOV AX,0BB8

1714:2FDE 50 PUSH AX

1714:2FDF B8F401 MOV AX,01F4

1714:2FE2 50 PUSH AX

1714:2FE3 E856F2 CALL 223C

1714:2FE6 803E93587F CMP BYTE PTR [5893],7F

1714:2FEB 760D JBE 2FFA

1714:2FED 2BC0 SUB AX,AX

1714:2FEF 50 PUSH AX

1714:2FF0 B80100 MOV AX,0001

1714:2FF3 50 PUSH AX

1714:2FF4 E89BF0 CALL 2092

1714:2FF7 EB13 JMP 300C

1714:2FF9 90 NOP

1714:2FFA 2BC0 SUB AX,AX

1714:2FFC 50 PUSH AX

1714:2FFD B80700 MOV AX,0007

1714:3000 50 PUSH AX

1714:3001 E88EF0 CALL 2092

1714:3004 8BD8 MOV BX,AX

1714:3006 8A879E55 MOV AL,[BX+559E]

1714:300A 2AE4 SUB AH,AH

1714:300C 8946FE MOV [BP-02],AX

1714:300F 0BC0 OR AX,AX

1714:3011 7411 JZ 3024

1714:3013 3D0100 CMP AX,0001

1714:3016 7420 JZ 3038

1714:3018 3D0200 CMP AX,0002

1714:301B 742B JZ 3048

1714:301D 3D0300 CMP AX,0003

1714:3020 7432 JZ 3054

1714:3022 EB46 JMP 306A

1714:3024 B88155 MOV AX,5581

1714:3027 50 PUSH AX

1714:3028 E825E8 CALL 1850

1714:302B FF7604 PUSH [BP+04]

1714:302E E88D0A CALL 3ABE

1714:3031 50 PUSH AX

1714:3032 E81DFA CALL 2A52

1714:3035 EB33 JMP 306A

1714:3037 90 NOP

1714:3038 B88855 MOV AX,5588

1714:303B 50 PUSH AX

1714:303C E811E8 CALL 1850

1714:303F FF7604 PUSH [BP+04]

1714:3042 E861FF CALL 2FA6

1714:3045 EB23 JMP 306A

1714:3047 90 NOP

1714:3048 B89155 MOV AX,5591

1714:304B 50 PUSH AX

1714:304C E801E8 CALL 1850

1714:304F E856FA CALL 2AA8

1714:3052 EB16 JMP 306A

1714:3054 B89855 MOV AX,5598

1714:3057 50 PUSH AX

1714:3058 E8F5E7 CALL 1850

1714:305B 2BF6 SUB SI,SI

1714:305D 56 PUSH SI

1714:305E E845FF CALL 2FA6

1714:3061 46 INC SI

1714:3062 83FE06 CMP SI,+06

1714:3065 7CF6 JL 305D

1714:3067 8976FC MOV [BP-04],SI

1714:306A 5E POP SI

1714:306B 8BE5 MOV SP,BP

1714:306D 5D POP BP

1714:306E C20200 RET 0002

1714:3071 90 NOP

; 3072

{

1714:3072 55 PUSH BP

1714:3073 8BEC MOV BP,SP

1714:3075 83EC06 SUB SP,+06

1714:3078 57 PUSH DI

1714:3079 56 PUSH SI

1714:307A 2BC0 SUB AX,AX

1714:307C 50 PUSH AX

1714:307D B80100 MOV AX,0001

1714:3080 50 PUSH AX

1714:3081 E8EADE CALL 0F6E

1714:3084 B80100 MOV AX,0001

1714:3087 50 PUSH AX

1714:3088 E897DB CALL 0C22

1714:308B C746FE0800 MOV WORD PTR [BP-02],0008

1714:3090 C746FA0800 MOV WORD PTR [BP-06],0008

1714:3095 BE0800 MOV SI,0008

1714:3098 B80800 MOV AX,0008

1714:309B 50 PUSH AX

1714:309C 56 PUSH SI

1714:309D B8B700 MOV AX,00B7

1714:30A0 50 PUSH AX

1714:30A1 8D4404 LEA AX,[SI+04]

1714:30A4 50 PUSH AX

1714:30A5 B80200 MOV AX,0002

1714:30A8 50 PUSH AX

1714:30A9 E81E41 CALL 71CA

1714:30AC B81300 MOV AX,0013

1714:30AF 50 PUSH AX

1714:30B0 B89600 MOV AX,0096

1714:30B3 50 PUSH AX

1714:30B4 E8DBEF CALL 2092

1714:30B7 50 PUSH AX

1714:30B8 E827F2 CALL 22E2

1714:30BB 83C603 ADD SI,+03

1714:30BE 81FEB300 CMP SI,00B3

1714:30C2 7ED4 JLE 3098

1714:30C4 8BFE MOV DI,SI

1714:30C6 BE0800 MOV SI,0008

1714:30C9 B80100 MOV AX,0001

1714:30CC 50 PUSH AX

1714:30CD 2BC0 SUB AX,AX

1714:30CF 50 PUSH AX

1714:30D0 B80800 MOV AX,0008

1714:30D3 50 PUSH AX

1714:30D4 56 PUSH SI

1714:30D5 B8B700 MOV AX,00B7

1714:30D8 50 PUSH AX

1714:30D9 8D4404 LEA AX,[SI+04]

1714:30DC 50 PUSH AX

1714:30DD E8EED9 CALL 0ACE

1714:30E0 B81300 MOV AX,0013

1714:30E3 50 PUSH AX

1714:30E4 B89600 MOV AX,0096

1714:30E7 50 PUSH AX

1714:30E8 E8A7EF CALL 2092

1714:30EB 50 PUSH AX

1714:30EC E8F3F1 CALL 22E2

1714:30EF 83C603 ADD SI,+03

1714:30F2 81FEB300 CMP SI,00B3

1714:30F6 7ED1 JLE 30C9

1714:30F8 8BFE MOV DI,SI

1714:30FA BEB300 MOV SI,00B3

1714:30FD B80800 MOV AX,0008

1714:3100 50 PUSH AX

1714:3101 56 PUSH SI

1714:3102 B8B700 MOV AX,00B7

1714:3105 50 PUSH AX

1714:3106 8D4404 LEA AX,[SI+04]

1714:3109 50 PUSH AX

1714:310A B80200 MOV AX,0002

1714:310D 50 PUSH AX

1714:310E E8EF40 CALL 7200

1714:3111 B81300 MOV AX,0013

1714:3114 50 PUSH AX

1714:3115 B89600 MOV AX,0096

1714:3118 50 PUSH AX

1714:3119 E876EF CALL 2092

1714:311C 50 PUSH AX

1714:311D E8C2F1 CALL 22E2

1714:3120 83EE03 SUB SI,+03

1714:3123 83FE08 CMP SI,+08

1714:3126 7DD5 JGE 30FD

1714:3128 8BFE MOV DI,SI

1714:312A BEB300 MOV SI,00B3

1714:312D B80100 MOV AX,0001

1714:3130 50 PUSH AX

1714:3131 2BC0 SUB AX,AX

1714:3133 50 PUSH AX

1714:3134 B80800 MOV AX,0008

1714:3137 50 PUSH AX

1714:3138 56 PUSH SI

1714:3139 B8B700 MOV AX,00B7

1714:313C 50 PUSH AX

1714:313D 8D4404 LEA AX,[SI+04]

1714:3140 50 PUSH AX

1714:3141 E88AD9 CALL 0ACE

1714:3144 B81300 MOV AX,0013

1714:3147 50 PUSH AX

1714:3148 B89600 MOV AX,0096

1714:314B 50 PUSH AX

1714:314C E843EF CALL 2092

1714:314F 50 PUSH AX

1714:3150 E88FF1 CALL 22E2

1714:3153 83EE03 SUB SI,+03

1714:3156 83FE08 CMP SI,+08

1714:3159 7DD2 JGE 312D

1714:315B 8BFE MOV DI,SI

1714:315D FF4EFA DEC WORD PTR [BP-06]

1714:3160 7403 JZ 3165

1714:3162 E930FF JMP 3095

1714:3165 897EFC MOV [BP-04],DI

1714:3168 2BC0 SUB AX,AX

1714:316A 50 PUSH AX

1714:316B E8B4DA CALL 0C22

1714:316E E89DF1 CALL 230E

1714:3171 5E POP SI

1714:3172 5F POP DI

1714:3173 8BE5 MOV SP,BP

1714:3175 5D POP BP

1714:3176 C3 RET

}

1714:3177 90 NOP

; 3178

{

1714:3178 55 PUSH BP

1714:3179 8BEC MOV BP,SP

1714:317B 83EC04 SUB SP,+04

1714:317E C746FE0100 MOV WORD PTR [BP-02],0001

1714:3183 8B4604 MOV AX,[BP+04]

1714:3186 3D4D00 CMP AX,004D

1714:3189 7503 JNZ 318E

1714:318B E9B201 JMP 3340

1714:318E 7E03 JLE 3193

1714:3190 E90B03 JMP 349E

1714:3193 3D4500 CMP AX,0045

1714:3196 7503 JNZ 319B

1714:3198 E9B900 JMP 3254

1714:319B 7E03 JLE 31A0

1714:319D E9E002 JMP 3480

1714:31A0 3D2000 CMP AX,0020

1714:31A3 744F JZ 31F4

1714:31A5 3D4100 CMP AX,0041

1714:31A8 746C JZ 3216

1714:31AA 3D4200 CMP AX,0042

1714:31AD 7503 JNZ 31B2

1714:31AF E98400 JMP 3236

1714:31B2 3D4300 CMP AX,0043

1714:31B5 7503 JNZ 31BA

1714:31B7 E98800 JMP 3242

1714:31BA 3D4400 CMP AX,0044

1714:31BD 7503 JNZ 31C2

1714:31BF E98C00 JMP 324E

1714:31C2 E91303 JMP 34D8

1714:31C5 90 NOP

; call print_string(a110 -> "Buffer O")

1714:31C6 B810A1 MOV AX,A110

1714:31C9 50 PUSH AX

1714:31CA E883E6 CALL 1850

1714:31CD 833E8C5301 CMP WORD PTR [538C],+01

1714:31D2 1BC0 SBB AX,AX

1714:31D4 F7D8 NEG AX

1714:31D6 A38C53 MOV [538C],AX

1714:31D9 0BC0 OR AX,AX

1714:31DB 7405 JZ 31E2

; set ax -> "ff\n"

1714:31DD B81AA1 MOV AX,A11A

1714:31E0 EB03 JMP 31E5

; set ax -> "n\n"

1714:31E2 B81EA1 MOV AX,A11E

; call print_string(ff/n)

1714:31E5 50 PUSH AX

1714:31E6 E867E6 CALL 1850

1714:31E9 C746FE0000 MOV WORD PTR [BP-02],0000

1714:31EE 8B46FE MOV AX,[BP-02]

1714:31F1 E92803 JMP 351C

1714:31F4 803E935800 CMP BYTE PTR [5893],00

1714:31F9 7515 JNZ 3210

1714:31FB 803E555900 CMP BYTE PTR [5955],00

1714:3200 740E JZ 3210

; call print_string(a122 -> "Sheets in irons!\n")

1714:3202 B822A1 MOV AX,A122

1714:3205 50 PUSH AX

1714:3206 E847E6 CALL 1850

1714:3209 C606555900 MOV BYTE PTR [5955],00

1714:320E EBDE JMP 31EE

; set ax -> "Pass"

1714:3210 B834A1 MOV AX,A134

1714:3213 E9D401 JMP 33EA

1714:3216 803E935800 CMP BYTE PTR [5893],00

1714:321B 7505 JNZ 3222

; call mainout.attack()

1714:321D E88E49 CALL 7BAE

1714:3220 EB0F JMP 3231

1714:3222 803E935821 CMP BYTE PTR [5893],21

1714:3227 7305 JNB 322E

1714:3229 E8C248 CALL 7AEE

1714:322C EB03 JMP 3231

1714:322E E8794A CALL 7CAA

1714:3231 8946FE MOV [BP-02],AX

1714:3234 EBB8 JMP 31EE

; call print_string(a13a -> "Board ")

1714:3236 B83AA1 MOV AX,A13A

1714:3239 50 PUSH AX

1714:323A E813E6 CALL 1850

1714:323D E8FA4D CALL 803A

1714:3240 EBEF JMP 3231

1714:3242 B842A1 MOV AX,A142

1714:3245 50 PUSH AX

1714:3246 E807E6 CALL 1850

1714:3249 E80E4C CALL 7E5A

1714:324C EBE3 JMP 3231

1714:324E B84CA1 MOV AX,A14C

1714:3251 EB92 JMP 31E5

1714:3253 90 NOP

1714:3254 803E935800 CMP BYTE PTR [5893],00

1714:3259 7505 JNZ 3260

1714:325B E80849 CALL 7B66

1714:325E EBD1 JMP 3231

1714:3260 B856A1 MOV AX,A156

1714:3263 E98401 JMP 33EA

1714:3266 B864A1 MOV AX,A164

1714:3269 50 PUSH AX

1714:326A E8E3E5 CALL 1850

1714:326D E8D64D CALL 8046

1714:3270 E97BFF JMP 31EE

1714:3273 90 NOP

1714:3274 803E935821 CMP BYTE PTR [5893],21

1714:3279 7307 JNB 3282

1714:327B B86AA1 MOV AX,A16A

1714:327E 50 PUSH AX

1714:327F E8CEE5 CALL 1850

1714:3282 E8814B CALL 7E06

1714:3285 E966FF JMP 31EE

; if map id == 0 (world), jump to 3296

1714:3288 803E935800 CMP BYTE PTR [5893],00

1714:328D 7407 JZ 3296

; if map id "Hole up- ")

1714:32B2 B870A1 MOV AX,A170

1714:32B5 50 PUSH AX

1714:32B6 E897E5 CALL 1850

1714:32B9 817EFCAB00 CMP WORD PTR [BP-04],00AB

1714:32BE 7406 JZ 32C6

; set ax -> "Only in bed!"

1714:32C0 B87AA1 MOV AX,A17A

; jump to 33ea

1714:32C3 E92401 JMP 33EA

; call cmds.c4d2()

1714:32C6 E8654D CALL 802E

1714:32C9 E922FF JMP 31EE

1714:32CC B888A1 MOV AX,A188

1714:32CF 50 PUSH AX

1714:32D0 E87DE5 CALL 1850

1714:32D3 E87C4D CALL 8052

1714:32D6 E915FF JMP 31EE

1714:32D9 90 NOP

1714:32DA B898A1 MOV AX,A198

1714:32DD 50 PUSH AX

1714:32DE E86FE5 CALL 1850

1714:32E1 E82E4B CALL 7E12

1714:32E4 E907FF JMP 31EE

1714:32E7 90 NOP

1714:32E8 803E935800 CMP BYTE PTR [5893],00

1714:32ED 750D JNZ 32FC

1714:32EF B8A0A1 MOV AX,A1A0

1714:32F2 50 PUSH AX

1714:32F3 E85AE5 CALL 1850

1714:32F6 E8A14D CALL 809A

1714:32F9 E9F2FE JMP 31EE

1714:32FC 803E935821 CMP BYTE PTR [5893],21

1714:3301 7307 JNB 330A

1714:3303 E8C447 CALL 7ACA

1714:3306 E928FF JMP 3231

1714:3309 90 NOP

1714:330A E87949 CALL 7C86

1714:330D E921FF JMP 3231

1714:3310 B8A8A1 MOV AX,A1A8

1714:3313 50 PUSH AX

1714:3314 E839E5 CALL 1850

1714:3317 803E935820 CMP BYTE PTR [5893],20

1714:331C 7614 JBE 3332

1714:331E 803E935829 CMP BYTE PTR [5893],29

1714:3323 730D JNB 3332

1714:3325 B8AEA1 MOV AX,A1AE

1714:3328 50 PUSH AX

1714:3329 E824E5 CALL 1850

1714:332C E8034C CALL 7F32

1714:332F E9BCFE JMP 31EE

1714:3332 B82D00 MOV AX,002D

1714:3335 50 PUSH AX

1714:3336 E881E3 CALL 16BA

1714:3339 E8EA4B CALL 7F26

1714:333C E9AFFE JMP 31EE

1714:333F 90 NOP

1714:3340 B8B4A1 MOV AX,A1B4

1714:3343 50 PUSH AX

1714:3344 E809E5 CALL 1850

1714:3347 E8384D CALL 8082

1714:334A E9A1FE JMP 31EE

1714:334D 90 NOP

1714:334E B8C4A1 MOV AX,A1C4

1714:3351 50 PUSH AX

1714:3352 E8FBE4 CALL 1850

1714:3355 E8064D CALL 805E

1714:3358 E993FE JMP 31EE

1714:335B 90 NOP

1714:335C B8CEA1 MOV AX,A1CE

1714:335F 50 PUSH AX

1714:3360 E8EDE4 CALL 1850

1714:3363 E8B84A CALL 7E1E

1714:3366 E985FE JMP 31EE

1714:3369 90 NOP

1714:336A 803E935820 CMP BYTE PTR [5893],20

1714:336F 760D JBE 337E

1714:3371 803E935829 CMP BYTE PTR [5893],29

1714:3376 7306 JNB 337E

1714:3378 B8D4A1 MOV AX,A1D4

1714:337B E967FE JMP 31E5

1714:337E B8E4A1 MOV AX,A1E4

1714:3381 50 PUSH AX

1714:3382 E8CBE4 CALL 1850

1714:3385 E88249 CALL 7D0A

1714:3388 E963FE JMP 31EE

1714:338B 90 NOP

1714:338C B8EAA1 MOV AX,A1EA

1714:338F 50 PUSH AX

1714:3390 E8BDE4 CALL 1850

1714:3393 E8184E CALL 81AE

1714:3396 E950FE JMP 31E9

1714:3399 90 NOP

1714:339A B8F0A1 MOV AX,A1F0

1714:339D 50 PUSH AX

1714:339E E8AFE4 CALL 1850

1714:33A1 E8AA4A CALL 7E4E

1714:33A4 E947FE JMP 31EE

1714:33A7 90 NOP

1714:33A8 803E935821 CMP BYTE PTR [5893],21

1714:33AD 7305 JNB 33B4

1714:33AF B8FCA1 MOV AX,A1FC

1714:33B2 EB03 JMP 33B7

1714:33B4 B804A2 MOV AX,A204

1714:33B7 50 PUSH AX

1714:33B8 E895E4 CALL 1850

1714:33BB E86C4A CALL 7E2A

1714:33BE E92DFE JMP 31EE

1714:33C1 90 NOP

1714:33C2 803E935800 CMP BYTE PTR [5893],00

1714:33C7 7517 JNZ 33E0

1714:33C9 B810A2 MOV AX,A210

1714:33CC 50 PUSH AX

1714:33CD E880E4 CALL 1850

1714:33D0 E81902 CALL 35EC

1714:33D3 0BC0 OR AX,AX

1714:33D5 7503 JNZ 33DA

1714:33D7 E914FE JMP 31EE

1714:33DA B816A2 MOV AX,A216

1714:33DD EB0B JMP 33EA

1714:33DF 90 NOP

1714:33E0 803E935820 CMP BYTE PTR [5893],20

1714:33E5 760B JBE 33F2

1714:33E7 B82CA2 MOV AX,A22C

; we get here if command does not succeed

; call print_string(ax)

1714:33EA 50 PUSH AX

1714:33EB E862E4 CALL 1850

1714:33EE E9FDFD JMP 31EE

1714:33F1 90 NOP

1714:33F2 B846A2 MOV AX,A246

1714:33F5 50 PUSH AX

1714:33F6 E857E4 CALL 1850

1714:33F9 E89A4D CALL 8196

1714:33FC 0BC0 OR AX,AX

1714:33FE 7503 JNZ 3403

1714:3400 E9EBFD JMP 31EE

1714:3403 C746FE0200 MOV WORD PTR [BP-02],0002

1714:3408 E9E3FD JMP 31EE

1714:340B 90 NOP

1714:340C B84CA2 MOV AX,A24C

1714:340F 50 PUSH AX

1714:3410 E83DE4 CALL 1850

1714:3413 E82C4A CALL 7E42

1714:3416 E9D5FD JMP 31EE

1714:3419 90 NOP

1714:341A B858A2 MOV AX,A258

1714:341D 50 PUSH AX

1714:341E E82FE4 CALL 1850

1714:3421 803EAD5700 CMP BYTE PTR [57AD],00

1714:3426 7422 JZ 344A

1714:3428 FE0EAD57 DEC BYTE PTR [57AD]

1714:342C 803E935821 CMP BYTE PTR [5893],21

1714:3431 7311 JNB 3444

1714:3433 A09658 MOV AL,[5896]

1714:3436 2AE4 SUB AH,AH

1714:3438 50 PUSH AX

1714:3439 A09758 MOV AL,[5897]

1714:343C 50 PUSH AX

1714:343D E8CE4A CALL 7F0E

1714:3440 E9ABFD JMP 31EE

1714:3443 90 NOP

1714:3444 E8034B CALL 7F4A

1714:3447 E9A4FD JMP 31EE

1714:344A B866A2 MOV AX,A266

1714:344D EB9B JMP 33EA

1714:344F 90 NOP

1714:3450 B876A2 MOV AX,A276

1714:3453 E98FFD JMP 31E5

1714:3456 B880A2 MOV AX,A280

1714:3459 50 PUSH AX

1714:345A E8F3E3 CALL 1850

1714:345D E80A4C CALL 806A

1714:3460 E98BFD JMP 31EE

1714:3463 90 NOP

1714:3464 B886A2 MOV AX,A286

1714:3467 50 PUSH AX

1714:3468 E8E5E3 CALL 1850

1714:346B E8FC48 CALL 7D6A

1714:346E E9C0FD JMP 3231

1714:3471 90 NOP

1714:3472 B88CA2 MOV AX,A28C

1714:3475 50 PUSH AX

1714:3476 E8D7E3 CALL 1850

1714:3479 E8BA49 CALL 7E36

1714:347C E96FFD JMP 31EE

1714:347F 90 NOP

1714:3480 2D4600 SUB AX,0046

1714:3483 3D0600 CMP AX,0006

1714:3486 7750 JA 34D8

1714:3488 03C0 ADD AX,AX

1714:348A 93 XCHG BX,AX

1714:348B 2E CS:

1714:348C FFA79034 JMP [BX+3490]

1714:3490 66 DB 66

1714:3491 327432 XOR DH,[SI+32]

1714:3494 8832 MOV [BP+SI],DH

1714:3496 CC INT 3

1714:3497 32DA XOR BL,DL

1714:3499 32E8 XOR CH,AL

1714:349B 3210 XOR DL,[BX+SI]

1714:349D 333D XOR DI,[DI]

1714:349F 54 PUSH SP

1714:34A0 007503 ADD [DI+03],DH

1714:34A3 E91CFF JMP 33C2

1714:34A6 7F36 JG 34DE

1714:34A8 3D4E00 CMP AX,004E

1714:34AB 7503 JNZ 34B0

1714:34AD E99EFE JMP 334E

1714:34B0 3D4F00 CMP AX,004F

1714:34B3 7503 JNZ 34B8

1714:34B5 E9A4FE JMP 335C

1714:34B8 3D5000 CMP AX,0050

1714:34BB 7503 JNZ 34C0

1714:34BD E9AAFE JMP 336A

1714:34C0 3D5100 CMP AX,0051

1714:34C3 7503 JNZ 34C8

1714:34C5 E9C4FE JMP 338C

1714:34C8 3D5200 CMP AX,0052

1714:34CB 7503 JNZ 34D0

1714:34CD E9CAFE JMP 339A

1714:34D0 3D5300 CMP AX,0053

1714:34D3 7503 JNZ 34D8

1714:34D5 E9D0FE JMP 33A8

1714:34D8 B898A2 MOV AX,A298

1714:34DB E907FD JMP 31E5

1714:34DE 3D5700 CMP AX,0057

1714:34E1 7503 JNZ 34E6

1714:34E3 E96AFF JMP 3450

1714:34E6 7F12 JG 34FA

1714:34E8 3D5500 CMP AX,0055

1714:34EB 7503 JNZ 34F0

1714:34ED E91CFF JMP 340C

1714:34F0 3D5600 CMP AX,0056

1714:34F3 7503 JNZ 34F8

1714:34F5 E922FF JMP 341A

1714:34F8 EBDE JMP 34D8

1714:34FA 3D5800 CMP AX,0058

1714:34FD 7503 JNZ 3502

1714:34FF E954FF JMP 3456

1714:3502 3D5900 CMP AX,0059

1714:3505 7503 JNZ 350A

1714:3507 E95AFF JMP 3464

1714:350A 3D5A00 CMP AX,005A

1714:350D 7503 JNZ 3512

1714:350F E960FF JMP 3472

1714:3512 3DFC00 CMP AX,00FC

1714:3515 7503 JNZ 351A

1714:3517 E9ACFC JMP 31C6

1714:351A EBBC JMP 34D8

; restore & return

1714:351C 8BE5 MOV SP,BP

1714:351E 5D POP BP

1714:351F C20200 RET 0002

}

; 3522

{

1714:3522 55 PUSH BP

1714:3523 8BEC MOV BP,SP

1714:3525 803E935880 CMP BYTE PTR [5893],80

1714:352A 7316 JNB 3542

1714:352C A09658 MOV AL,[5896]

1714:352F 2AE4 SUB AH,AH

1714:3531 2D0500 SUB AX,0005

1714:3534 294606 SUB [BP+06],AX

1714:3537 A09758 MOV AL,[5897]

1714:353A 2AE4 SUB AH,AH

1714:353C 2D0500 SUB AX,0005

1714:353F 294604 SUB [BP+04],AX

1714:3542 2BC0 SUB AX,AX

1714:3544 50 PUSH AX

1714:3545 FF7606 PUSH [BP+06]

1714:3548 FF7604 PUSH [BP+04]

1714:354B E892DB CALL 10E0

1714:354E B80A00 MOV AX,000A

1714:3551 50 PUSH AX

1714:3552 B8B80B MOV AX,0BB8

1714:3555 50 PUSH AX

1714:3556 B8D007 MOV AX,07D0

1714:3559 50 PUSH AX

1714:355A E8DFEC CALL 223C

; call 5910

1714:355D E8B023 CALL 5910

1714:3560 5D POP BP

1714:3561 C20400 RET 0004

}

1714:3564 55 PUSH BP

1714:3565 8BEC MOV BP,SP

1714:3567 83EC02 SUB SP,+02

1714:356A 56 PUSH SI

1714:356B 803E93587F CMP BYTE PTR [5893],7F

1714:3570 7617 JBE 3589

1714:3572 8B4604 MOV AX,[BP+04]

1714:3575 B103 MOV CL,03

1714:3577 D3E0 SHL AX,CL

1714:3579 0514BA ADD AX,BA14

1714:357C 8946FE MOV [BP-02],AX

1714:357F 8BD8 MOV BX,AX

1714:3581 8A4704 MOV AL,[BX+04]

1714:3584 2AE4 SUB AH,AH

1714:3586 894604 MOV [BP+04],AX

1714:3589 8B7604 MOV SI,[BP+04]

1714:358C B103 MOV CL,03

1714:358E D3E6 SHL SI,CL

1714:3590 2BC0 SUB AX,AX

1714:3592 50 PUSH AX

1714:3593 8A845C5C MOV AL,[SI+5C5C]

1714:3597 2AE4 SUB AH,AH

1714:3599 50 PUSH AX

1714:359A 8A845D5C MOV AL,[SI+5C5D]

1714:359E 50 PUSH AX

1714:359F E83EDB CALL 10E0

1714:35A2 803E93587F CMP BYTE PTR [5893],7F

1714:35A7 7629 JBE 35D2

1714:35A9 8B5EFE MOV BX,[BP-02]

1714:35AC F6470280 TEST BYTE PTR [BX+02],80

1714:35B0 7420 JZ 35D2

1714:35B2 8A4703 MOV AL,[BX+03]

1714:35B5 2AE4 SUB AH,AH

1714:35B7 8BF0 MOV SI,AX

1714:35B9 56 PUSH SI

1714:35BA E86BF4 CALL 2A28

1714:35BD B82800 MOV AX,0028

1714:35C0 50 PUSH AX

1714:35C1 B8B80B MOV AX,0BB8

1714:35C4 50 PUSH AX

1714:35C5 B8F401 MOV AX,01F4

1714:35C8 50 PUSH AX

1714:35C9 E870EC CALL 223C

1714:35CC 56 PUSH SI

1714:35CD E858F4 CALL 2A28

1714:35D0 EB0F JMP 35E1

1714:35D2 B80A00 MOV AX,000A

1714:35D5 50 PUSH AX

1714:35D6 B8B80B MOV AX,0BB8

1714:35D9 50 PUSH AX

1714:35DA B8D007 MOV AX,07D0

1714:35DD 50 PUSH AX

1714:35DE E85BEC CALL 223C

1714:35E1 E82C23 CALL 5910

1714:35E4 5E POP SI

1714:35E5 8BE5 MOV SP,BP

1714:35E7 5D POP BP

1714:35E8 C20200 RET 0002

1714:35EB 90 NOP

1714:35EC 55 PUSH BP

1714:35ED 8BEC MOV BP,SP

1714:35EF 83EC02 SUB SP,+02

1714:35F2 C70676580000 MOV WORD PTR [5876],0000

1714:35F8 C70678580000 MOV WORD PTR [5878],0000

1714:35FE EB18 JMP 3618

1714:3600 807EFE03 CMP BYTE PTR [BP-02],03

1714:3604 741C JZ 3622

1714:3606 807EFE04 CMP BYTE PTR [BP-02],04

1714:360A 7416 JZ 3622

1714:360C 807EFE01 CMP BYTE PTR [BP-02],01

1714:3610 7410 JZ 3622

1714:3612 807EFE02 CMP BYTE PTR [BP-02],02

1714:3616 740A JZ 3622

1714:3618 E851F0 CALL 266C

1714:361B 8846FE MOV [BP-02],AL

1714:361E 3C20 CMP AL,20

1714:3620 75DE JNZ 3600

1714:3622 8A46FE MOV AL,[BP-02]

1714:3625 2AE4 SUB AH,AH

1714:3627 3D0100 CMP AX,0001

1714:362A 7442 JZ 366E

1714:362C 3D0200 CMP AX,0002

1714:362F 744B JZ 367C

1714:3631 3D0300 CMP AX,0003

1714:3634 741A JZ 3650

1714:3636 3D0400 CMP AX,0004

1714:3639 7425 JZ 3660

1714:363B 3D1B00 CMP AX,001B

1714:363E 7405 JZ 3645

1714:3640 3D2000 CMP AX,0020

1714:3643 7545 JNZ 368A

1714:3645 B8A0A2 MOV AX,A2A0

1714:3648 50 PUSH AX

1714:3649 E804E2 CALL 1850

1714:364C 2BC0 SUB AX,AX

1714:364E EB3A JMP 368A

1714:3650 B8A6A2 MOV AX,A2A6

1714:3653 50 PUSH AX

1714:3654 E8F9E1 CALL 1850

1714:3657 FF0E7858 DEC WORD PTR [5878]

1714:365B B80100 MOV AX,0001

1714:365E EB2A JMP 368A

1714:3660 B8AEA2 MOV AX,A2AE

1714:3663 50 PUSH AX

1714:3664 E8E9E1 CALL 1850

1714:3667 FF067858 INC WORD PTR [5878]

1714:366B EBEE JMP 365B

1714:366D 90 NOP

1714:366E B8B6A2 MOV AX,A2B6

1714:3671 50 PUSH AX

1714:3672 E8DBE1 CALL 1850

1714:3675 FF0E7658 DEC WORD PTR [5876]

1714:3679 EBE0 JMP 365B

1714:367B 90 NOP

1714:367C B8BCA2 MOV AX,A2BC

1714:367F 50 PUSH AX

1714:3680 E8CDE1 CALL 1850

1714:3683 FF067658 INC WORD PTR [5876]

1714:3687 EBD2 JMP 365B

1714:3689 90 NOP

1714:368A 8BE5 MOV SP,BP

1714:368C 5D POP BP

1714:368D C3 RET

1714:368E 55 PUSH BP

1714:368F 8BEC MOV BP,SP

1714:3691 83EC08 SUB SP,+08

1714:3694 57 PUSH DI

1714:3695 56 PUSH SI

1714:3696 BA0100 MOV DX,0001

1714:3699 BF645C MOV DI,5C64

1714:369C C746FC655C MOV WORD PTR [BP-04],5C65

1714:36A1 C746FA665C MOV WORD PTR [BP-06],5C66

1714:36A6 BE625C MOV SI,5C62

1714:36A9 8A0E9358 MOV CL,[5893]

1714:36AD 8A05 MOV AL,[DI]

1714:36AF 2AE4 SUB AH,AH

1714:36B1 3B4608 CMP AX,[BP+08]

1714:36B4 7528 JNZ 36DE

1714:36B6 8B5EFC MOV BX,[BP-04]

1714:36B9 8A07 MOV AL,[BX]

1714:36BB 3B4606 CMP AX,[BP+06]

1714:36BE 751E JNZ 36DE

1714:36C0 80F97F CMP CL,7F

1714:36C3 770F JA 36D4

1714:36C5 80F980 CMP CL,80

1714:36C8 7314 JNB 36DE

1714:36CA 8B5EFA MOV BX,[BP-06]

1714:36CD 8A07 MOV AL,[BX]

1714:36CF 3B4604 CMP AX,[BP+04]

1714:36D2 750A JNZ 36DE

1714:36D4 8A04 MOV AL,[SI]

1714:36D6 2AE4 SUB AH,AH

1714:36D8 89167658 MOV [5876],DX

1714:36DC EB1B JMP 36F9

1714:36DE 83C708 ADD DI,+08

1714:36E1 8346FC08 ADD WORD PTR [BP-04],+08

1714:36E5 8346FA08 ADD WORD PTR [BP-06],+08

1714:36E9 83C608 ADD SI,+08

1714:36EC 42 INC DX

1714:36ED 81FE5A5D CMP SI,5D5A

1714:36F1 72BA JB 36AD

1714:36F3 89167658 MOV [5876],DX

1714:36F7 2BC0 SUB AX,AX

1714:36F9 5E POP SI

1714:36FA 5F POP DI

1714:36FB 8BE5 MOV SP,BP

1714:36FD 5D POP BP

1714:36FE C20600 RET 0006

1714:3701 90 NOP

1714:3702 55 PUSH BP

1714:3703 8BEC MOV BP,SP

1714:3705 83EC08 SUB SP,+08

1714:3708 57 PUSH DI

1714:3709 56 PUSH SI

1714:370A BA1F00 MOV DX,001F

1714:370D BF545D MOV DI,5D54

1714:3710 C746FC555D MOV WORD PTR [BP-04],5D55

1714:3715 C746FA565D MOV WORD PTR [BP-06],5D56

1714:371A BE525D MOV SI,5D52

1714:371D 8A0E9358 MOV CL,[5893]

1714:3721 8A05 MOV AL,[DI]

1714:3723 2AE4 SUB AH,AH

1714:3725 3B4608 CMP AX,[BP+08]

1714:3728 7528 JNZ 3752

1714:372A 8B5EFC MOV BX,[BP-04]

1714:372D 8A07 MOV AL,[BX]

1714:372F 3B4606 CMP AX,[BP+06]

1714:3732 751E JNZ 3752

1714:3734 80F97F CMP CL,7F

1714:3737 770F JA 3748

1714:3739 80F980 CMP CL,80

1714:373C 7314 JNB 3752

1714:373E 8B5EFA MOV BX,[BP-06]

1714:3741 8A07 MOV AL,[BX]

1714:3743 3B4604 CMP AX,[BP+04]

1714:3746 750A JNZ 3752

1714:3748 8A04 MOV AL,[SI]

1714:374A 2AE4 SUB AH,AH

1714:374C 89167658 MOV [5876],DX

1714:3750 EB1B JMP 376D

1714:3752 83EF08 SUB DI,+08

1714:3755 836EFC08 SUB WORD PTR [BP-04],+08

1714:3759 836EFA08 SUB WORD PTR [BP-06],+08

1714:375D 83EE08 SUB SI,+08

1714:3760 4A DEC DX

1714:3761 81FE5A5C CMP SI,5C5A

1714:3765 73BA JNB 3721

1714:3767 89167658 MOV [5876],DX

1714:376B 2BC0 SUB AX,AX

1714:376D 5E POP SI

1714:376E 5F POP DI

1714:376F 8BE5 MOV SP,BP

1714:3771 5D POP BP

1714:3772 C20600 RET 0006

1714:3775 90 NOP

1714:3776 55 PUSH BP

1714:3777 8BEC MOV BP,SP

1714:3779 83EC1C SUB SP,+1C

1714:377C 57 PUSH DI

1714:377D 56 PUSH SI

1714:377E B91F00 MOV CX,001F

1714:3781 A09758 MOV AL,[5897]

1714:3784 2AE4 SUB AH,AH

1714:3786 8946F8 MOV [BP-08],AX

1714:3789 8946F6 MOV [BP-0A],AX

1714:378C A09658 MOV AL,[5896]

1714:378F 8946F4 MOV [BP-0C],AX

1714:3792 8946F2 MOV [BP-0E],AX

1714:3795 C746F0525D MOV WORD PTR [BP-10],5D52

1714:379A C746EE525D MOV WORD PTR [BP-12],5D52

1714:379F BE545D MOV SI,5D54

1714:37A2 8976EA MOV [BP-16],SI

1714:37A5 BF555D MOV DI,5D55

1714:37A8 897EE6 MOV [BP-1A],DI

1714:37AB C746E4565D MOV WORD PTR [BP-1C],5D56

1714:37B0 8B56FC MOV DX,[BP-04]

1714:37B3 8B5EF0 MOV BX,[BP-10]

1714:37B6 803F00 CMP BYTE PTR [BX],00

1714:37B9 750B JNZ 37C6

1714:37BB 8BC1 MOV AX,CX

1714:37BD 8956FC MOV [BP-04],DX

1714:37C0 894EFA MOV [BP-06],CX

1714:37C3 E99900 JMP 385F

1714:37C6 8B5EEE MOV BX,[BP-12]

1714:37C9 8A4604 MOV AL,[BP+04]

1714:37CC 3807 CMP [BX],AL

1714:37CE 7566 JNZ 3836

1714:37D0 A09658 MOV AL,[5896]

1714:37D3 3804 CMP [SI],AL

1714:37D5 770F JA 37E6

1714:37D7 8B46F2 MOV AX,[BP-0E]

1714:37DA 8A1C MOV BL,[SI]

1714:37DC 2AFF SUB BH,BH

1714:37DE 2BC3 SUB AX,BX

1714:37E0 8946FE MOV [BP-02],AX

1714:37E3 EB13 JMP 37F8

1714:37E5 90 NOP

1714:37E6 8B5EEA MOV BX,[BP-16]

1714:37E9 8A07 MOV AL,[BX]

1714:37EB 2AE4 SUB AH,AH

1714:37ED 8B5EF4 MOV BX,[BP-0C]

1714:37F0 2BD8 SUB BX,AX

1714:37F2 F7D3 NOT BX

1714:37F4 43 INC BX

1714:37F5 895EFE MOV [BP-02],BX

1714:37F8 A09758 MOV AL,[5897]

1714:37FB 3805 CMP [DI],AL

1714:37FD 770D JA 380C

1714:37FF 8B46F6 MOV AX,[BP-0A]

1714:3802 8A1D MOV BL,[DI]

1714:3804 2AFF SUB BH,BH

1714:3806 2BC3 SUB AX,BX

1714:3808 8BD0 MOV DX,AX

1714:380A EB11 JMP 381D

1714:380C 8B5EE6 MOV BX,[BP-1A]

1714:380F 8A07 MOV AL,[BX]

1714:3811 2AE4 SUB AH,AH

1714:3813 8B5EF8 MOV BX,[BP-08]

1714:3816 2BD8 SUB BX,AX

1714:3818 F7D3 NOT BX

1714:381A 43 INC BX

1714:381B 8BD3 MOV DX,BX

1714:381D 8B5EE4 MOV BX,[BP-1C]

1714:3820 A09558 MOV AL,[5895]

1714:3823 3807 CMP [BX],AL

1714:3825 7594 JNZ 37BB

1714:3827 3807 CMP [BX],AL

1714:3829 750B JNZ 3836

1714:382B 837EFE06 CMP WORD PTR [BP-02],+06

1714:382F 7C05 JL 3836

1714:3831 83FA06 CMP DX,+06

1714:3834 7D85 JGE 37BB

1714:3836 836EF008 SUB WORD PTR [BP-10],+08

1714:383A 836EEE08 SUB WORD PTR [BP-12],+08

1714:383E 83EE08 SUB SI,+08

1714:3841 836EEA08 SUB WORD PTR [BP-16],+08

1714:3845 83EF08 SUB DI,+08

1714:3848 836EE608 SUB WORD PTR [BP-1A],+08

1714:384C 836EE408 SUB WORD PTR [BP-1C],+08

1714:3850 49 DEC CX

1714:3851 7803 JS 3856

1714:3853 E95DFF JMP 37B3

1714:3856 8956FC MOV [BP-04],DX

1714:3859 894EFA MOV [BP-06],CX

1714:385C B8FFFF MOV AX,FFFF

1714:385F 5E POP SI

1714:3860 5F POP DI

1714:3861 8BE5 MOV SP,BP

1714:3863 5D POP BP

1714:3864 C20200 RET 0002

1714:3867 90 NOP

; 3868

{

1714:3868 55 PUSH BP

1714:3869 8BEC MOV BP,SP

1714:386B 83EC0C SUB SP,+0C

1714:386E 57 PUSH DI

1714:386F 56 PUSH SI

1714:3870 B90100 MOV CX,0001

1714:3873 BE625C MOV SI,5C62

1714:3876 BF645C MOV DI,5C64

1714:3879 C746F4655C MOV WORD PTR [BP-0C],5C65

1714:387E 8A56FC MOV DL,[BP-04]

1714:3881 8A04 MOV AL,[SI]

1714:3883 2AE4 SUB AH,AH

1714:3885 3B4608 CMP AX,[BP+08]

1714:3888 723A JB 38C4

1714:388A 3B4606 CMP AX,[BP+06]

1714:388D 7735 JA 38C4

1714:388F 3CB5 CMP AL,B5

1714:3891 7431 JZ 38C4

1714:3893 837E0400 CMP WORD PTR [BP+04],+

00

1714:3897 7420 JZ 38B9

1714:3899 8A05 MOV AL,[DI]

1714:389B 2A069658 SUB AL,[5896]

1714:389F 0405 ADD AL,05

1714:38A1 8846FE MOV [BP-02],AL

1714:38A4 8B5EF4 MOV BX,[BP-0C]

1714:38A7 8A17 MOV DL,[BX]

1714:38A9 2A169758 SUB DL,[5897]

1714:38AD 80C205 ADD DL,05

1714:38B0 3C0A CMP AL,0A

1714:38B2 7705 JA 38B9

1714:38B4 80FA0A CMP DL,0A

1714:38B7 760B JBE 38C4

1714:38B9 8BC1 MOV AX,CX

1714:38BB 8856FC MOV [BP-04],DL

1714:38BE 894EFA MOV [BP-06],CX

1714:38C1 EB19 JMP 38DC

1714:38C3 90 NOP

1714:38C4 83C608 ADD SI,+08

1714:38C7 83C708 ADD DI,+08

1714:38CA 8346F408 ADD WORD PTR [BP-0C],+08

1714:38CE 41 INC CX

1714:38CF 83F918 CMP CX,+18

1714:38D2 7CAD JL 3881

1714:38D4 8856FC MOV [BP-04],DL

1714:38D7 894EFA MOV [BP-06],CX

1714:38DA 2BC0 SUB AX,AX

1714:38DC 5E POP SI

1714:38DD 5F POP DI

1714:38DE 8BE5 MOV SP,BP

1714:38E0 5D POP BP

1714:38E1 C20600 RET 0006

}

; 38e4

{

1714:38E4 55 PUSH BP

1714:38E5 8BEC MOV BP,SP

1714:38E7 83EC02 SUB SP,+02

1714:38EA 2BC0 SUB AX,AX

1714:38EC 50 PUSH AX

1714:38ED 50 PUSH AX

1714:38EE 50 PUSH AX

1714:38EF E876FF CALL 3868

1714:38F2 8946FE MOV [BP-02],AX

1714:38F5 0BC0 OR AX,AX

1714:38F7 7512 JNZ 390B

1714:38F9 B80100 MOV AX,0001

1714:38FC 50 PUSH AX

1714:38FD B80F00 MOV AX,000F

1714:3900 50 PUSH AX

1714:3901 B80100 MOV AX,0001

1714:3904 50 PUSH AX

1714:3905 E860FF CALL 3868

1714:3908 8946FE MOV [BP-02],AX

1714:390B 837EFE00 CMP WORD PTR [BP-02],+00

1714:390F 7512 JNZ 3923

1714:3911 B88000 MOV AX,0080

1714:3914 50 PUSH AX

1714:3915 B8FF00 MOV AX,00FF

1714:3918 50 PUSH AX

1714:3919 B80100 MOV AX,0001

1714:391C 50 PUSH AX

1714:391D E848FF CALL 3868

1714:3920 8946FE MOV [BP-02],AX

1714:3923 837EFE00 CMP WORD PTR [BP-02],+00

1714:3927 7512 JNZ 393B

1714:3929 B81000 MOV AX,0010

1714:392C 50 PUSH AX

1714:392D B81100 MOV AX,0011

1714:3930 50 PUSH AX

1714:3931 B80100 MOV AX,0001

1714:3934 50 PUSH AX

1714:3935 E830FF CALL 3868

1714:3938 8946FE MOV [BP-02],AX

1714:393B 837EFE00 CMP WORD PTR [BP-02],+00

1714:393F 7512 JNZ 3953

1714:3941 B83000 MOV AX,0030

1714:3944 50 PUSH AX

1714:3945 B87F00 MOV AX,007F

1714:3948 50 PUSH AX

1714:3949 B80100 MOV AX,0001

1714:394C 50 PUSH AX

1714:394D E818FF CALL 3868

1714:3950 8946FE MOV [BP-02],AX

1714:3953 837EFE00 CMP WORD PTR [BP-02],+00

1714:3957 7511 JNZ 396A

1714:3959 B80100 MOV AX,0001

1714:395C 50 PUSH AX

1714:395D B80F00 MOV AX,000F

1714:3960 50 PUSH AX

1714:3961 2BC0 SUB AX,AX

1714:3963 50 PUSH AX

1714:3964 E801FF CALL 3868

1714:3967 8946FE MOV [BP-02],AX

1714:396A 837EFE00 CMP WORD PTR [BP-02],+00

1714:396E 7511 JNZ 3981

1714:3970 B88000 MOV AX,0080

1714:3973 50 PUSH AX

1714:3974 B8FF00 MOV AX,00FF

1714:3977 50 PUSH AX

1714:3978 2BC0 SUB AX,AX

1714:397A 50 PUSH AX

1714:397B E8EAFE CALL 3868

1714:397E 8946FE MOV [BP-02],AX

1714:3981 837EFE00 CMP WORD PTR [BP-02],+00

1714:3985 7511 JNZ 3998

1714:3987 B81000 MOV AX,0010

1714:398A 50 PUSH AX

1714:398B B81100 MOV AX,0011

1714:398E 50 PUSH AX

1714:398F 2BC0 SUB AX,AX

1714:3991 50 PUSH AX

1714:3992 E8D3FE CALL 3868

1714:3995 8946FE MOV [BP-02],AX

1714:3998 837EFE00 CMP WORD PTR [BP-02],+00

1714:399C 7511 JNZ 39AF

1714:399E B83000 MOV AX,0030

1714:39A1 50 PUSH AX

1714:39A2 B87F00 MOV AX,007F

1714:39A5 50 PUSH AX

1714:39A6 2BC0 SUB AX,AX

1714:39A8 50 PUSH AX

1714:39A9 E8BCFE CALL 3868

1714:39AC 8946FE MOV [BP-02],AX

1714:39AF 837EFE00 CMP WORD PTR [BP-02],+00

1714:39B3 7510 JNZ 39C5

1714:39B5 2BC0 SUB AX,AX

1714:39B7 50 PUSH AX

1714:39B8 B8FF00 MOV AX,00FF

1714:39BB 50 PUSH AX

1714:39BC 2BC0 SUB AX,AX

1714:39BE 50 PUSH AX

1714:39BF E8A6FE CALL 3868

1714:39C2 8946FE MOV [BP-02],AX

1714:39C5 8B46FE MOV AX,[BP-02]

1714:39C8 8BE5 MOV SP,BP

1714:39CA 5D POP BP

1714:39CB C3 RET

}

set_new_tile_id(p0,p1,p2) – 39cc

{

; p0 = y coord (row)

; p1 = x coord (col)

; p2 = new tile id

; store

1714:39CC 55 PUSH BP

1714:39CD 8BEC MOV BP,SP

; if (map is overworld || map is not dungeon || new tile id == 00), return at 39f7

1714:39CF 803E935800 CMP BYTE PTR [5893],00

1714:39D4 7421 JZ 39F7

1714:39D6 803E935821 CMP BYTE PTR [5893],21

1714:39DB 731A JNB 39F7

1714:39DD 807E0800 CMP BYTE PTR [BP+08],00

1714:39E1 7414 JZ 39F7

; call get_address_of_tile_id(p1,p0)

1714:39E3 8A4606 MOV AL,[BP+06]

1714:39E6 2AE4 SUB AH,AH

1714:39E8 50 PUSH AX

1714:39E9 8A4604 MOV AL,[BP+04]

1714:39EC 50 PUSH AX

1714:39ED E8120A CALL 4402

; set bx = address

1714:39F0 8BD8 MOV BX,AX

; set al = p2

1714:39F2 8A4608 MOV AL,[BP+08]

; set tile id at ptr = new tile id

1714:39F5 8807 MOV [BX],AL

; restore & return

1714:39F7 5D POP BP

1714:39F8 C20600 RET 0006

}

1714:39FB 90 NOP

get_first_active_party_member() - 39fc

{

1714:39FC 55 PUSH BP

1714:39FD 8BEC MOV BP,SP

1714:39FF 83EC0A SUB SP,+0A

1714:3A02 57 PUSH DI

1714:3A03 56 PUSH SI

; set bp-6 = 0 (?)

1714:3A04 C746FA0000 MOV WORD PTR [BP-06],0000

; set bp-2 = 0 (current party member id)

1714:3A09 C746FE0000 MOV WORD PTR [BP-02],0000

; if # of party members == 00, jump to 3a5e

1714:3A0E A05B58 MOV AL,[585B]

1714:3A11 2AE4 SUB AH,AH

1714:3A13 0BC0 OR AX,AX

1714:3A15 7447 JZ 3A5E

; set bp-08 = # of party memebers

1714:3A17 8946F8 MOV [BP-08],AX

; set di = 55b3 (0d in savegame, status of avatar)

1714:3A1A BFB355 MOV DI,55B3

; set si = current party member id

1714:3A1D 8B76FE MOV SI,[BP-02]

1714:3A20 8B56FA MOV DX,[BP-06]

; this does nothing b/c of the next line

1714:3A23 8A4EFC MOV CL,[BP-04]

; set cl = party member status

1714:3A26 8A0D MOV CL,[DI]

; if status != ‘G’ (good) && status != ‘P’ (poisoned), jump to 3a44

1714:3A28 80F947 CMP CL,47

1714:3A2B 7405 JZ 3A32

1714:3A2D 80F950 CMP CL,50

1714:3A30 7512 JNZ 3A44

; we get here if we find an active party member

; set *5876 = current party member id

; (this should point to first party member that is not dead or sleeping)

1714:3A32 89367658 MOV [5876],SI

; set ax = 0000 (return value, someone is not dead)

1714:3A36 2BC0 SUB AX,AX

; set bp-2 = current party member id

1714:3A38 8976FE MOV [BP-02],SI

; set bp-6 = dx (# of sleeping party members before first active)

1714:3A3B 8956FA MOV [BP-06],DX

; set bp-4 = current party member status

1714:3A3E 884EFC MOV [BP-04],CL

; return at 3a6d

1714:3A41 EB2A JMP 3A6D

1714:3A43 90 NOP

; we get here if a party member is inactive. We need

; to determine if he/she is either sleeping or dead

; if status == ‘S’ (sleeping), increment dx

1714:3A44 80F953 CMP CL,53

1714:3A47 7501 JNZ 3A4A

1714:3A49 42 INC DX

; di += 20 (next party member)

1714:3A4A 83C720 ADD DI,+20

; increment si to next party member

1714:3A4D 46 INC SI

; if counter < # of party members

1714:3A4E 8BC6 MOV AX,SI

1714:3A50 3B46F8 CMP AX,[BP-08]

1714:3A53 72D1 JB 3A26

; we get here when we have looped through all party members

; set bp-2 = current party member id

1714:3A55 8976FE MOV [BP-02],SI

; set bp-6 = # of sleeping party members

1714:3A58 8956FA MOV [BP-06],DX

; set bp-4 = status of current party member id

1714:3A5B 884EFC MOV [BP-04],CL

; if bp-06 == 0 (no sleeping party memebers), begin to return at 3a6a

1714:3A5E 837EFA00 CMP WORD PTR [BP-06],+00

1714:3A62 7406 JZ 3A6A

; set ax = 0001 (at least one sleeping), and return at 3a6d

1714:3A64 B80100 MOV AX,0001

1714:3A67 EB04 JMP 3A6D

1714:3A69 90 NOP

; set ax = ffff (all dead)

1714:3A6A B8FFFF MOV AX,FFFF

; restore & return

1714:3A6D 5E POP SI

1714:3A6E 5F POP DI

1714:3A6F 8BE5 MOV SP,BP

1714:3A71 5D POP BP

1714:3A72 C3 RET

}

1714:3A73 90 NOP

1714:3A74 55 PUSH BP

1714:3A75 8BEC MOV BP,SP

1714:3A77 56 PUSH SI

1714:3A78 8B7604 MOV SI,[BP+04]

1714:3A7B B103 MOV CL,03

1714:3A7D D3E6 SHL SI,CL

1714:3A7F 8A4610 MOV AL,[BP+10]

1714:3A82 88845A5C MOV [SI+5C5A],AL

1714:3A86 8A460E MOV AL,[BP+0E]

1714:3A89 88845B5C MOV [SI+5C5B],AL

1714:3A8D 8A460C MOV AL,[BP+0C]

1714:3A90 88845C5C MOV [SI+5C5C],AL

1714:3A94 8A460A MOV AL,[BP+0A]

1714:3A97 88845D5C MOV [SI+5C5D],AL

1714:3A9B 8A4608 MOV AL,[BP+08]

1714:3A9E 88845E5C MOV [SI+5C5E],AL

1714:3AA2 8A4606 MOV AL,[BP+06]

1714:3AA5 88845F5C MOV [SI+5C5F],AL

1714:3AA9 5E POP SI

1714:3AAA 5D POP BP

1714:3AAB C20E00 RET 000E

1714:3AAE 55 PUSH BP

1714:3AAF 8BEC MOV BP,SP

1714:3AB1 2BC0 SUB AX,AX

1714:3AB3 50 PUSH AX

1714:3AB4 FF7604 PUSH [BP+04]

1714:3AB7 E8D8E5 CALL 2092

1714:3ABA 5D POP BP

1714:3ABB C20200 RET 0002

1714:3ABE 55 PUSH BP

1714:3ABF 8BEC MOV BP,SP

1714:3AC1 83EC02 SUB SP,+02

1714:3AC4 C746FE0000 MOV WORD PTR [BP-02],0000

1714:3AC9 B83C00 MOV AX,003C

1714:3ACC 50 PUSH AX

1714:3ACD E8DEFF CALL 3AAE

1714:3AD0 99 CWD

1714:3AD1 2BC2 SUB AX,DX

1714:3AD3 D1F8 SAR AX,1

1714:3AD5 8946FE MOV [BP-02],AX

1714:3AD8 0BC0 OR AX,AX

1714:3ADA 7503 JNZ 3ADF

1714:3ADC FF46FE INC WORD PTR [BP-02]

1714:3ADF 8B46FE MOV AX,[BP-02]

1714:3AE2 8BE5 MOV SP,BP

1714:3AE4 5D POP BP

1714:3AE5 C3 RET

; 3ae6

{

1714:3AE6 55 PUSH BP

1714:3AE7 8BEC MOV BP,SP

1714:3AE9 83EC04 SUB SP,+04

1714:3AEC 56 PUSH SI

1714:3AED 803EA45800 CMP BYTE PTR [58A4],00

1714:3AF2 7420 JZ 3B14

1714:3AF4 C746FE0000 MOV WORD PTR [BP-02],0000

1714:3AF9 837E0400 CMP WORD PTR [BP+04],+00

1714:3AFD 7E15 JLE 3B14

1714:3AFF 8B7604 MOV SI,[BP+04]

1714:3B02 8BC6 MOV AX,SI

1714:3B04 0146FE ADD [BP-02],AX

{

1714:3B07 E8061E CALL 5910

1714:3B0A B80100 MOV AX,0001

1714:3B0D 50 PUSH AX

1714:3B0E E8E9E5 CALL 20FA

1714:3B11 4E DEC SI

1714:3B12 75F3 JNZ 3B07

}

1714:3B14 5E POP SI

1714:3B15 8BE5 MOV SP,BP

1714:3B17 5D POP BP

1714:3B18 C20200 RET 0002

}

1714:3B1B 90 NOP

1714:3B1C 55 PUSH BP

1714:3B1D 8BEC MOV BP,SP

1714:3B1F 83EC06 SUB SP,+06

1714:3B22 57 PUSH DI

1714:3B23 56 PUSH SI

1714:3B24 2BFF SUB DI,DI

1714:3B26 A18C53 MOV AX,[538C]

1714:3B29 8946FA MOV [BP-06],AX

1714:3B2C 893E8C53 MOV [538C],DI

1714:3B30 E839EB CALL 266C

1714:3B33 8BF0 MOV SI,AX

1714:3B35 83FE08 CMP SI,+08

1714:3B38 7405 JZ 3B3F

1714:3B3A 83FE01 CMP SI,+01

1714:3B3D 750F JNZ 3B4E

1714:3B3F 0BFF OR DI,DI

1714:3B41 740B JZ 3B4E

1714:3B43 B80100 MOV AX,0001

1714:3B46 50 PUSH AX

1714:3B47 E856E4 CALL 1FA0

1714:3B4A 4F DEC DI

1714:3B4B EB2F JMP 3B7C

1714:3B4D 90 NOP

1714:3B4E 83FE1B CMP SI,+1B

1714:3B51 750D JNZ 3B60

1714:3B53 0BFF OR DI,DI

1714:3B55 7409 JZ 3B60

1714:3B57 57 PUSH DI

1714:3B58 E845E4 CALL 1FA0

1714:3B5B 2BFF SUB DI,DI

1714:3B5D EB1D JMP 3B7C

1714:3B5F 90 NOP

1714:3B60 83FE1F CMP SI,+1F

1714:3B63 7E17 JLE 3B7C

1714:3B65 81FE8000 CMP SI,0080

1714:3B69 7D11 JGE 3B7C

1714:3B6B 3B7E04 CMP DI,[BP+04]

1714:3B6E 7D0C JGE 3B7C

1714:3B70 8B5E06 MOV BX,[BP+06]

1714:3B73 8BC6 MOV AX,SI

1714:3B75 8801 MOV [BX+DI],AL

1714:3B77 47 INC DI

1714:3B78 56 PUSH SI

1714:3B79 E83EDB CALL 16BA

1714:3B7C 83FE0D CMP SI,+0D

1714:3B7F 75AF JNZ 3B30

1714:3B81 897EFE MOV [BP-02],DI

1714:3B84 8976FC MOV [BP-04],SI

1714:3B87 8BDF MOV BX,DI

1714:3B89 8B7606 MOV SI,[BP+06]

1714:3B8C C60000 MOV BYTE PTR [BX+SI],00

1714:3B8F 8B46FA MOV AX,[BP-06]

1714:3B92 A38C53 MOV [538C],AX

1714:3B95 5E POP SI

1714:3B96 5F POP DI

1714:3B97 8BE5 MOV SP,BP

1714:3B99 5D POP BP

1714:3B9A C20400 RET 0004

1714:3B9D 90 NOP

1714:3B9E 55 PUSH BP

1714:3B9F 8BEC MOV BP,SP

1714:3BA1 83EC10 SUB SP,+10

1714:3BA4 57 PUSH DI

1714:3BA5 56 PUSH SI

1714:3BA6 C746F60000 MOV WORD PTR [BP-0A],0000

1714:3BAB C746F20000 MOV WORD PTR [BP-0E],0000

1714:3BB0 C746F80000 MOV WORD PTR [BP-08],0000

1714:3BB5 837E0405 CMP WORD PTR [BP+04],+05

1714:3BB9 7E05 JLE 3BC0

1714:3BBB C746040500 MOV WORD PTR [BP+04],0005

1714:3BC0 8B7EF6 MOV DI,[BP-0A]

1714:3BC3 E8A6EA CALL 266C

1714:3BC6 8BF0 MOV SI,AX

1714:3BC8 3D3000 CMP AX,0030

1714:3BCB 7215 JB 3BE2

1714:3BCD 3D3900 CMP AX,0039

1714:3BD0 7710 JA 3BE2

1714:3BD2 3B7E04 CMP DI,[BP+04]

1714:3BD5 7D46 JGE 3C1D

1714:3BD7 8843FA MOV [BP+DI-06],AL

1714:3BDA 47 INC DI

1714:3BDB 56 PUSH SI

1714:3BDC E8DBDA CALL 16BA

1714:3BDF EB3C JMP 3C1D

1714:3BE1 90 NOP

1714:3BE2 8BC6 MOV AX,SI

1714:3BE4 3D2D00 CMP AX,002D

1714:3BE7 7405 JZ 3BEE

1714:3BE9 3D2B00 CMP AX,002B

1714:3BEC 7508 JNZ 3BF6

1714:3BEE 0BFF OR DI,DI

1714:3BF0 7504 JNZ 3BF6

1714:3BF2 8BC6 MOV AX,SI

1714:3BF4 EBE1 JMP 3BD7

1714:3BF6 83FE08 CMP SI,+08

1714:3BF9 7405 JZ 3C00

1714:3BFB 83FE01 CMP SI,+01

1714:3BFE 750E JNZ 3C0E

1714:3C00 0BFF OR DI,DI

1714:3C02 740A JZ 3C0E

1714:3C04 4F DEC DI

1714:3C05 B80100 MOV AX,0001

1714:3C08 50 PUSH AX

1714:3C09 E894E3 CALL 1FA0

1714:3C0C EB0F JMP 3C1D

1714:3C0E 83FE1B CMP SI,+1B

1714:3C11 750A JNZ 3C1D

1714:3C13 0BFF OR DI,DI

1714:3C15 7406 JZ 3C1D

1714:3C17 57 PUSH DI

1714:3C18 E885E3 CALL 1FA0

1714:3C1B 2BFF SUB DI,DI

1714:3C1D 83FE0D CMP SI,+0D

1714:3C20 75A1 JNZ 3BC3

1714:3C22 897EF6 MOV [BP-0A],DI

1714:3C25 8976F4 MOV [BP-0C],SI

1714:3C28 FF4EF6 DEC WORD PTR [BP-0A]

1714:3C2B 837EF600 CMP WORD PTR [BP-0A],+00

1714:3C2F 7E2F JLE 3C60

1714:3C31 8B76F8 MOV SI,[BP-08]

1714:3C34 D1E6 SHL SI,1

1714:3C36 81C60A6A ADD SI,6A0A

1714:3C3A 8B7EF8 MOV DI,[BP-08]

1714:3C3D 8B4EF6 MOV CX,[BP-0A]

1714:3C40 8BD9 MOV BX,CX

1714:3C42 03DD ADD BX,BP

1714:3C44 8A47FA MOV AL,[BX-06]

1714:3C47 2AE4 SUB AH,AH

1714:3C49 2D3000 SUB AX,0030

1714:3C4C F724 MUL WORD PTR [SI]

1714:3C4E 0146F2 ADD [BP-0E],AX

1714:3C51 83C602 ADD SI,+02

1714:3C54 47 INC DI

1714:3C55 49 DEC CX

1714:3C56 0BC9 OR CX,CX

1714:3C58 7FE6 JG 3C40

1714:3C5A 897EF8 MOV [BP-08],DI

1714:3C5D 894EF6 MOV [BP-0A],CX

1714:3C60 807EFA2D CMP BYTE PTR [BP-06],2D

1714:3C64 750A JNZ 3C70

1714:3C66 8B46F2 MOV AX,[BP-0E]

1714:3C69 F7D8 NEG AX

1714:3C6B 8946F2 MOV [BP-0E],AX

1714:3C6E EB1E JMP 3C8E

1714:3C70 807EFA30 CMP BYTE PTR [BP-06],30

1714:3C74 7218 JB 3C8E

1714:3C76 8A46FA MOV AL,[BP-06]

1714:3C79 2AE4 SUB AH,AH

1714:3C7B 8BC8 MOV CX,AX

1714:3C7D 83E930 SUB CX,+30

1714:3C80 8B5EF8 MOV BX,[BP-08]

1714:3C83 D1E3 SHL BX,1

1714:3C85 8B870A6A MOV AX,[BX+6A0A]

1714:3C89 F7E1 MUL CX

1714:3C8B 0146F2 ADD [BP-0E],AX

1714:3C8E 8B46F2 MOV AX,[BP-0E]

1714:3C91 5E POP SI

1714:3C92 5F POP DI

1714:3C93 8BE5 MOV SP,BP

1714:3C95 5D POP BP

1714:3C96 C20200 RET 0002

1714:3C99 90 NOP

hole_up() - 3c9a

{

1714:3C9A 55 PUSH BP

1714:3C9B 8BEC MOV BP,SP

1714:3C9D 83EC12 SUB SP,+12

1714:3CA0 57 PUSH DI

1714:3CA1 56 PUSH SI

1714:3CA2 C746F85A5C MOV WORD PTR [BP-08],5C5A

1714:3CA7 A05B5C MOV AL,[5C5B]

1714:3CAA 8846F4 MOV [BP-0C],AL

; call print_string(a2c2 -> "Hole up & ")

1714:3CAD B8C2A2 MOV AX,A2C2

1714:3CB0 50 PUSH AX

1714:3CB1 E89CDB CALL 1850

1714:3CB4 8A46F4 MOV AL,[BP-0C]

1714:3CB7 24F8 AND AL,F8

1714:3CB9 3C20 CMP AL,20

1714:3CBB 7403 JZ 3CC0

1714:3CBD E99400 JMP 3D54

; call print_string(a2ce -> "\nrepair\n\n")

1714:3CC0 B8CEA2 MOV AX,A2CE

1714:3CC3 50 PUSH AX

1714:3CC4 E889DB CALL 1850

1714:3CC7 803E5B5C24 CMP BYTE PTR [5C5B],24

1714:3CCC 7312 JNB 3CE0

1714:3CCE B8DCA2 MOV AX,A2DC

1714:3CD1 50 PUSH AX

1714:3CD2 E87BDB CALL 1850

1714:3CD5 B8ECA2 MOV AX,A2EC

1714:3CD8 50 PUSH AX

1714:3CD9 E874DB CALL 1850

1714:3CDC E90602 JMP 3EE5

1714:3CDF 90 NOP

1714:3CE0 2BF6 SUB SI,SI

1714:3CE2 E8BD3E CALL 7BA2

1714:3CE5 E88A3E CALL 7B72

1714:3CE8 A07C58 MOV AL,[587C]

1714:3CEB 24FC AND AL,FC

1714:3CED 3C24 CMP AL,24

1714:3CEF 7407 JZ 3CF8

1714:3CF1 8976F6 MOV [BP-0A],SI

1714:3CF4 E9F301 JMP 3EEA

1714:3CF7 90 NOP

1714:3CF8 B80500 MOV AX,0005

1714:3CFB 50 PUSH AX

1714:3CFC E87D12 CALL 4F7C

1714:3CFF 46 INC SI

1714:3D00 83FE05 CMP SI,+05

1714:3D03 7CDD JL 3CE2

1714:3D05 8976F6 MOV [BP-0A],SI

1714:3D08 8B76F8 MOV SI,[BP-08]

1714:3D0B B80100 MOV AX,0001

1714:3D0E 50 PUSH AX

1714:3D0F B80300 MOV AX,0003

1714:3D12 50 PUSH AX

1714:3D13 E87CE3 CALL 2092

1714:3D16 004405 ADD [SI+05],AL

1714:3D19 807C0563 CMP BYTE PTR [SI+05],63

1714:3D1D 7604 JBE 3D23

1714:3D1F C6440563 MOV BYTE PTR [SI+05],63

1714:3D23 807C050A CMP BYTE PTR [SI+05],0A

1714:3D27 72E2 JB 3D0B

1714:3D29 B8F8A2 MOV AX,A2F8

1714:3D2C 50 PUSH AX

1714:3D2D E820DB CALL 1850

1714:3D30 8B5EF8 MOV BX,[BP-08]

1714:3D33 8A4705 MOV AL,[BX+05]

1714:3D36 2AE4 SUB AH,AH

1714:3D38 50 PUSH AX

1714:3D39 B80200 MOV AX,0002

1714:3D3C 50 PUSH AX

1714:3D3D B82000 MOV AX,0020

1714:3D40 50 PUSH AX

1714:3D41 E8FADC CALL 1A3E

1714:3D44 B802A3 MOV AX,A302

1714:3D47 50 PUSH AX

1714:3D48 E805DB CALL 1850

1714:3D4B C606FAA901 MOV BYTE PTR [A9FA],01

1714:3D50 E99201 JMP 3EE5

1714:3D53 90 NOP

; call print_string(a306 -> "camp!\n\n")

1714:3D54 B806A3 MOV AX,A306

1714:3D57 50 PUSH AX

1714:3D58 E8F5DA CALL 1850

1714:3D5B 803E935821 CMP BYTE PTR [5893],21

1714:3D60 7314 JNB 3D76

; call get_address_of_tile_id(current x, current y)

1714:3D62 A09658 MOV AL,[5896]

1714:3D65 2AE4 SUB AH,AH

1714:3D67 50 PUSH AX

1714:3D68 A09758 MOV AL,[5897]

1714:3D6B 50 PUSH AX

1714:3D6C E89306 CALL 4402

1714:3D6F 8BD8 MOV BX,AX

1714:3D71 8A07 MOV AL,[BX]

1714:3D73 8846F4 MOV [BP-0C],AL

1714:3D76 803E935821 CMP BYTE PTR [5893],21

1714:3D7B 7313 JNB 3D90

1714:3D7D 807EF400 CMP BYTE PTR [BP-0C],00

1714:3D81 740D JZ 3D90

1714:3D83 807EF404 CMP BYTE PTR [BP-0C],04

1714:3D87 7307 JNB 3D90

1714:3D89 B80EA3 MOV AX,A30E

1714:3D8C E949FF JMP 3CD8

1714:3D8F 90 NOP

1714:3D90 803E935821 CMP BYTE PTR [5893],21

1714:3D95 730F JNB 3DA6

1714:3D97 8B5EF8 MOV BX,[BP-08]

1714:3D9A 807F011C CMP BYTE PTR [BX+01],1C

1714:3D9E 7406 JZ 3DA6

1714:3DA0 B822A3 MOV AX,A322

1714:3DA3 E932FF JMP 3CD8

; call print_string(a32c -> "For how many hours (1-9)? ")

1714:3DA6 B82CA3 MOV AX,A32C

1714:3DA9 50 PUSH AX

1714:3DAA E8A3DA CALL 1850

1714:3DAD EB0D JMP 3DBC

1714:3DAF 90 NOP

1714:3DB0 807EFE30 CMP BYTE PTR [BP-02],30

1714:3DB4 7206 JB 3DBC

1714:3DB6 807EFE39 CMP BYTE PTR [BP-02],39

1714:3DBA 760A JBE 3DC6

; call get_character()

1714:3DBC E8ADE8 CALL 266C

1714:3DBF 8846FE MOV [BP-02],AL

1714:3DC2 3C20 CMP AL,20

1714:3DC4 75EA JNZ 3DB0

1714:3DC6 8A46FE MOV AL,[BP-02]

; call print_character(inputted char)

1714:3DC9 2AE4 SUB AH,AH

1714:3DCB 50 PUSH AX

1714:3DCC E8EBD8 CALL 16BA

; call print_character('\n')

1714:3DCF B80A00 MOV AX,000A

1714:3DD2 50 PUSH AX

1714:3DD3 E8E4D8 CALL 16BA

1714:3DD6 807EFE20 CMP BYTE PTR [BP-02],20

1714:3DDA 7503 JNZ 3DDF

1714:3DDC E90B01 JMP 3EEA

1714:3DDF 807EFE30 CMP BYTE PTR [BP-02],30

1714:3DE3 7503 JNZ 3DE8

1714:3DE5 E90201 JMP 3EEA

1714:3DE8 8A46FE MOV AL,[BP-02]

1714:3DEB 2AE4 SUB AH,AH

1714:3DED 2D3000 SUB AX,0030

1714:3DF0 8946F2 MOV [BP-0E],AX

1714:3DF3 C746FC0000 MOV WORD PTR [BP-04],0000

1714:3DF8 C746F60000 MOV WORD PTR [BP-0A],0000

1714:3DFD A05B58 MOV AL,[585B]

1714:3E00 2AE4 SUB AH,AH

1714:3E02 0BC0 OR AX,AX

1714:3E04 7426 JZ 3E2C

1714:3E06 8BF8 MOV DI,AX

1714:3E08 BEB355 MOV SI,55B3

1714:3E0B 8B56FC MOV DX,[BP-04]

1714:3E0E 8B4EF6 MOV CX,[BP-0A]

1714:3E11 803C47 CMP BYTE PTR [SI],47

1714:3E14 7405 JZ 3E1B

1714:3E16 803C50 CMP BYTE PTR [SI],50

1714:3E19 7501 JNZ 3E1C

1714:3E1B 42 INC DX

1714:3E1C 83C620 ADD SI,+20

1714:3E1F 41 INC CX

1714:3E20 8BC1 MOV AX,CX

1714:3E22 3BC7 CMP AX,DI

1714:3E24 75EB JNZ 3E11

1714:3E26 8956FC MOV [BP-04],DX

1714:3E29 894EF6 MOV [BP-0A],CX

1714:3E2C 837EFC01 CMP WORD PTR [BP-04],+01

1714:3E30 7E27 JLE 3E59

; call print_string(a348 -> "Wilt thou set a watch? ")

1714:3E32 B848A3 MOV AX,A348

1714:3E35 50 PUSH AX

1714:3E36 E817DA CALL 1850

1714:3E39 EB07 JMP 3E42

1714:3E3B 90 NOP

1714:3E3C 807EFE4E CMP BYTE PTR [BP-02],4E

1714:3E40 740A JZ 3E4C

; call get_character()

1714:3E42 E827E8 CALL 266C

1714:3E45 8846FE MOV [BP-02],AL

1714:3E48 3C59 CMP AL,59

1714:3E4A 75F0 JNZ 3E3C

1714:3E4C 807EFE4E CMP BYTE PTR [BP-02],4E

1714:3E50 754C JNZ 3E9E

; call print_string(a362 -> "No\n\n")

1714:3E52 B862A3 MOV AX,A362

1714:3E55 50 PUSH AX

1714:3E56 E8F7D9 CALL 1850

1714:3E59 C746FAFFFF MOV WORD PTR [BP-06],FFFF

; if map is not dungeon, jump to 3edc

1714:3E5E 803E935820 CMP BYTE PTR [5893],20

1714:3E63 7677 JBE 3EDC

; set *58a1 = 06

1714:3E65 C606A15806 MOV BYTE PTR [58A1],06

1714:3E6A E8953D CALL 7C02

1714:3E6D E8B63D CALL 7C26

; call special_handler(bp-e,bp-6,0006)

1714:3E70 A0A158 MOV AL,[58A1]

1714:3E73 2AE4 SUB AH,AH

1714:3E75 50 PUSH AX

1714:3E76 FF76FA PUSH [BP-06]

1714:3E79 FF76F2 PUSH [BP-0E]

1714:3E7C E80721 CALL 5F86

# 3e7c jmp 0e66 ; midi_camping_without_watch()

; call switch_drives(0002 = adjusted)

1714:3E7F B80200 MOV AX,0002

1714:3E82 50 PUSH AX

1714:3E83 E898E6 CALL 251E

1714:3E86 E8853D CALL 7C0E

1714:3E89 BF625C MOV DI,5C62

1714:3E8C BE04AA MOV SI,AA04

1714:3E8F 1E PUSH DS

1714:3E90 07 POP ES

1714:3E91 A5 MOVSW

1714:3E92 A5 MOVSW

1714:3E93 A5 MOVSW

1714:3E94 A5 MOVSW

1714:3E95 2BC0 SUB AX,AX

1714:3E97 50 PUSH AX

1714:3E98 E8DF3D CALL 7C7A

1714:3E9B EB48 JMP 3EE5

1714:3E9D 90 NOP

; call print_string(a368 -> "Yes\n\n")

1714:3E9E B868A3 MOV AX,A368

1714:3EA1 50 PUSH AX

1714:3EA2 E8ABD9 CALL 1850

; call print_string(a36e -> "Who will stand guard? ")

1714:3EA5 B86EA3 MOV AX,A36E

1714:3EA8 50 PUSH AX

1714:3EA9 E8A4D9 CALL 1850

1714:3EAC E8DFEF CALL 2E8E

1714:3EAF 8946FA MOV [BP-06],AX

1714:3EB2 B80A00 MOV AX,000A

1714:3EB5 50 PUSH AX

1714:3EB6 E801D8 CALL 16BA

1714:3EB9 837EFAFF CMP WORD PTR [BP-06],-01

1714:3EBD 740E JZ 3ECD

1714:3EBF 8B5EFA MOV BX,[BP-06]

1714:3EC2 B105 MOV CL,05

1714:3EC4 D3E3 SHL BX,CL

1714:3EC6 80BFB35547 CMP BYTE PTR [BX+55B3],47

1714:3ECB 7491 JZ 3E5E

1714:3ECD C746FAFFFF MOV WORD PTR [BP-06],FFFF

; call print_string(a386 -> "None posted!\n\n")

1714:3ED2 B886A3 MOV AX,A386

1714:3ED5 50 PUSH AX

1714:3ED6 E877D9 CALL 1850

1714:3ED9 EB83 JMP 3E5E

1714:3EDB 90 NOP

; call camping(bp-e,bp-6)

1714:3EDC FF76FA PUSH [BP-06]

1714:3EDF FF76F2 PUSH [BP-0E]

1714:3EE2 E87B24 CALL 6360

; set *24e6 = 01

1714:3EE5 C606E62401 MOV BYTE PTR [24E6],01

1714:3EEA 5E POP SI

1714:3EEB 5F POP DI

1714:3EEC 8BE5 MOV SP,BP

1714:3EEE 5D POP BP

1714:3EEF C3 RET

}

1714:3EF0 55 PUSH BP

1714:3EF1 8BEC MOV BP,SP

1714:3EF3 8B5E08 MOV BX,[BP+08]

1714:3EF6 8A07 MOV AL,[BX]

1714:3EF8 2AE4 SUB AH,AH

1714:3EFA 034606 ADD AX,[BP+06]

1714:3EFD 3B4604 CMP AX,[BP+04]

1714:3F00 7308 JNB 3F0A

1714:3F02 8A4606 MOV AL,[BP+06]

1714:3F05 0007 ADD [BX],AL

1714:3F07 EB06 JMP 3F0F

1714:3F09 90 NOP

1714:3F0A 8A4604 MOV AL,[BP+04]

1714:3F0D 8807 MOV [BX],AL

1714:3F0F 5D POP BP

1714:3F10 C20600 RET 0006

1714:3F13 90 NOP

1714:3F14 55 PUSH BP

1714:3F15 8BEC MOV BP,SP

1714:3F17 8B5E08 MOV BX,[BP+08]

1714:3F1A 8B07 MOV AX,[BX]

1714:3F1C 034606 ADD AX,[BP+06]

1714:3F1F 3B4604 CMP AX,[BP+04]

1714:3F22 7D08 JGE 3F2C

1714:3F24 8B4606 MOV AX,[BP+06]

1714:3F27 0107 ADD [BX],AX

1714:3F29 EB06 JMP 3F31

1714:3F2B 90 NOP

1714:3F2C 8B4604 MOV AX,[BP+04]

1714:3F2F 8907 MOV [BX],AX

1714:3F31 5D POP BP

1714:3F32 C20600 RET 0006

1714:3F35 90 NOP

; 3f36

{

1714:3F36 55 PUSH BP

1714:3F37 8BEC MOV BP,SP

1714:3F39 8B5E06 MOV BX,[BP+06]

1714:3F3C 8A07 MOV AL,[BX]

1714:3F3E 2AE4 SUB AH,AH

1714:3F40 3B4604 CMP AX,[BP+04]

1714:3F43 7607 JBE 3F4C

1714:3F45 8A4604 MOV AL,[BP+04]

1714:3F48 2807 SUB [BX],AL

1714:3F4A EB03 JMP 3F4F

1714:3F4C C60700 MOV BYTE PTR [BX],00

1714:3F4F 5D POP BP

1714:3F50 C20400 RET 0004

}

1714:3F53 90 NOP

1714:3F54 55 PUSH BP

1714:3F55 8BEC MOV BP,SP

1714:3F57 8B5E06 MOV BX,[BP+06]

1714:3F5A 8B4604 MOV AX,[BP+04]

1714:3F5D 3907 CMP [BX],AX

1714:3F5F 7E05 JLE 3F66

1714:3F61 2907 SUB [BX],AX

1714:3F63 EB05 JMP 3F6A

1714:3F65 90 NOP

1714:3F66 C7070000 MOV WORD PTR [BX],0000

1714:3F6A 5D POP BP

1714:3F6B C20400 RET 0004

1714:3F6E 55 PUSH BP

1714:3F6F 8BEC MOV BP,SP

1714:3F71 83EC02 SUB SP,+02

1714:3F74 56 PUSH SI

1714:3F75 8B7604 MOV SI,[BP+04]

1714:3F78 B105 MOV CL,05

1714:3F7A D3E6 SHL SI,CL

1714:3F7C 8B5E06 MOV BX,[BP+06]

1714:3F7F 8A8002AB MOV AL,[BX+SI+AB02]

1714:3F83 2AE4 SUB AH,AH

1714:3F85 8946FE MOV [BP-02],AX

1714:3F88 B88000 MOV AX,0080

1714:3F8B 8A4EFE MOV CL,[BP-02]

1714:3F8E 2AED SUB CH,CH

1714:3F90 81E10700 AND CX,0007

1714:3F94 D3F8 SAR AX,CL

1714:3F96 8B5EFE MOV BX,[BP-02]

1714:3F99 B103 MOV CL,03

1714:3F9B D3FB SAR BX,CL

1714:3F9D 8A8F146A MOV CL,[BX+6A14]

1714:3FA1 2AED SUB CH,CH

1714:3FA3 23C1 AND AX,CX

1714:3FA5 8BC8 MOV CX,AX

1714:3FA7 83F901 CMP CX,+01

1714:3FAA 1BC0 SBB AX,AX

1714:3FAC 40 INC AX

1714:3FAD 5E POP SI

1714:3FAE 8BE5 MOV SP,BP

1714:3FB0 5D POP BP

1714:3FB1 C20400 RET 0004

1714:3FB4 55 PUSH BP

1714:3FB5 8BEC MOV BP,SP

1714:3FB7 837E0608 CMP WORD PTR [BP+06],+08

1714:3FBB 7C14 JL 3FD1

1714:3FBD 817E06B700 CMP WORD PTR [BP+06],00B7

1714:3FC2 7F0D JG 3FD1

1714:3FC4 837E0408 CMP WORD PTR [BP+04],+08

1714:3FC8 7C07 JL 3FD1

1714:3FCA 817E04B700 CMP WORD PTR [BP+04],00B7

1714:3FCF 7E0B JLE 3FDC

1714:3FD1 B8FFFF MOV AX,FFFF

1714:3FD4 A37858 MOV [5878],AX

1714:3FD7 A37658 MOV [5876],AX

1714:3FDA EB2B JMP 4007

1714:3FDC 8B4606 MOV AX,[BP+06]

1714:3FDF 2D0800 SUB AX,0008

1714:3FE2 99 CWD

1714:3FE3 33C2 XOR AX,DX

1714:3FE5 2BC2 SUB AX,DX

1714:3FE7 B90400 MOV CX,0004

1714:3FEA D3F8 SAR AX,CL

1714:3FEC 33C2 XOR AX,DX

1714:3FEE 2BC2 SUB AX,DX

1714:3FF0 A37658 MOV [5876],AX

1714:3FF3 8B4604 MOV AX,[BP+04]

1714:3FF6 2D0800 SUB AX,0008

1714:3FF9 99 CWD

1714:3FFA 33C2 XOR AX,DX

1714:3FFC 2BC2 SUB AX,DX

1714:3FFE D3F8 SAR AX,CL

1714:4000 33C2 XOR AX,DX

1714:4002 2BC2 SUB AX,DX

1714:4004 A37858 MOV [5878],AX

1714:4007 5D POP BP

1714:4008 C20400 RET 0004

1714:400B 90 NOP

1714:400C 55 PUSH BP

1714:400D 8BEC MOV BP,SP

1714:400F 83EC0A SUB SP,+0A

1714:4012 57 PUSH DI

1714:4013 56 PUSH SI

1714:4014 C746FE0000 MOV WORD PTR [BP-02],0000

1714:4019 A05B58 MOV AL,[585B]

1714:401C 2AE4 SUB AH,AH

1714:401E 0BC0 OR AX,AX

1714:4020 7458 JZ 407A

1714:4022 BEB355 MOV SI,55B3

1714:4025 BFC555 MOV DI,55C5

1714:4028 C746F8B855 MOV WORD PTR [BP-08],55B8

1714:402D C746F6BA55 MOV WORD PTR [BP-0A],55BA

1714:4032 803C44 CMP BYTE PTR [SI],44

1714:4035 7428 JZ 405F

1714:4037 803D2C CMP BYTE PTR [DI],2C

1714:403A 7523 JNZ 405F

1714:403C 2BC0 SUB AX,AX

1714:403E 50 PUSH AX

1714:403F B80700 MOV AX,0007

1714:4042 50 PUSH AX

1714:4043 E84CE0 CALL 2092

1714:4046 3D0700 CMP AX,0007

1714:4049 7514 JNZ 405F

1714:404B FF76F8 PUSH [BP-08]

1714:404E B80100 MOV AX,0001

1714:4051 50 PUSH AX

1714:4052 8B5EF6 MOV BX,[BP-0A]

1714:4055 FF37 PUSH [BX]

1714:4057 E8BAFE CALL 3F14

1714:405A C606FAA901 MOV BYTE PTR [A9FA],01

1714:405F 83C620 ADD SI,+20

1714:4062 83C720 ADD DI,+20

1714:4065 8346F820 ADD WORD PTR [BP-08],+20

1714:4069 8346F620 ADD WORD PTR [BP-0A],+20

1714:406D FF46FE INC WORD PTR [BP-02]

1714:4070 A05B58 MOV AL,[585B]

1714:4073 2AE4 SUB AH,AH

1714:4075 3946FE CMP [BP-02],AX

1714:4078 72B8 JB 4032

1714:407A 5E POP SI

1714:407B 5F POP DI

1714:407C 8BE5 MOV SP,BP

1714:407E 5D POP BP

1714:407F C3 RET

1714:4080 55 PUSH BP

1714:4081 8BEC MOV BP,SP

1714:4083 83EC04 SUB SP,+04

1714:4086 56 PUSH SI

1714:4087 C746FE0100 MOV WORD PTR [BP-02],0001

1714:408C 8B4604 MOV AX,[BP+04]

1714:408F 2D3100 SUB AX,0031

1714:4092 8946FC MOV [BP-04],AX

1714:4095 B896A3 MOV AX,A396

1714:4098 50 PUSH AX

1714:4099 E8B4D7 CALL 1850

1714:409C 837E0430 CMP WORD PTR [BP+04],+30

1714:40A0 7516 JNZ 40B8

1714:40A2 B8A8A3 MOV AX,A3A8

1714:40A5 50 PUSH AX

1714:40A6 E8A7D7 CALL 1850

1714:40A9 C6067B58FF MOV BYTE PTR [587B],FF

1714:40AE E84FE8 CALL 2900

1714:40B1 C746FE0000 MOV WORD PTR [BP-02],0000

1714:40B6 EB3F JMP 40F7

1714:40B8 A05B58 MOV AL,[585B]

1714:40BB 2AE4 SUB AH,AH

1714:40BD 3946FC CMP [BP-04],AX

1714:40C0 732E JNB 40F0

1714:40C2 8B76FC MOV SI,[BP-04]

1714:40C5 B105 MOV CL,05

1714:40C7 D3E6 SHL SI,CL

1714:40C9 80BCB35544 CMP BYTE PTR [SI+55B3],44

1714:40CE 7420 JZ 40F0

1714:40D0 80BCB35553 CMP BYTE PTR [SI+55B3],53

1714:40D5 7419 JZ 40F0

1714:40D7 8A46FC MOV AL,[BP-04]

1714:40DA A27B58 MOV [587B],AL

1714:40DD 8BC6 MOV AX,SI

1714:40DF 05A855 ADD AX,55A8

1714:40E2 50 PUSH AX

1714:40E3 E86AD7 CALL 1850

1714:40E6 B80A00 MOV AX,000A

1714:40E9 50 PUSH AX

1714:40EA E8CDD5 CALL 16BA

1714:40ED EBBF JMP 40AE

1714:40EF 90 NOP

1714:40F0 B8B0A3 MOV AX,A3B0

1714:40F3 50 PUSH AX

1714:40F4 E859D7 CALL 1850

1714:40F7 8B46FE MOV AX,[BP-02]

1714:40FA 5E POP SI

1714:40FB 8BE5 MOV SP,BP

1714:40FD 5D POP BP

1714:40FE C20200 RET 0002

1714:4101 90 NOP

1714:4102 55 PUSH BP

1714:4103 8BEC MOV BP,SP

1714:4105 83EC26 SUB SP,+26

1714:4108 57 PUSH DI

1714:4109 56 PUSH SI

1714:410A C746F40000 MOV WORD PTR [BP-0C],0000

1714:410F C746FE3300 MOV WORD PTR [BP-02],0033

1714:4114 803E935880 CMP BYTE PTR [5893],80

1714:4119 7311 JNB 412C

1714:411B A09658 MOV AL,[5896]

1714:411E 2AE4 SUB AH,AH

1714:4120 8946FA MOV [BP-06],AX

1714:4123 A09758 MOV AL,[5897]

1714:4126 8946F8 MOV [BP-08],AX

1714:4129 EB0A JMP 4135

1714:412B 90 NOP

1714:412C B80500 MOV AX,0005

1714:412F 8946F8 MOV [BP-08],AX

1714:4132 8946FA MOV [BP-06],AX

1714:4135 8B46FA MOV AX,[BP-06]

1714:4138 2D0500 SUB AX,0005

1714:413B 8946F6 MOV [BP-0A],AX

1714:413E C746F00000 MOV WORD PTR [BP-10],0000

1714:4143 8B46FA MOV AX,[BP-06]

1714:4146 050600 ADD AX,0006

1714:4149 3B46F6 CMP AX,[BP-0A]

1714:414C 7F03 JG 4151

1714:414E E9F600 JMP 4247

1714:4151 8B46FA MOV AX,[BP-06]

1714:4154 050600 ADD AX,0006

1714:4157 8946DE MOV [BP-22],AX

1714:415A 8B46F8 MOV AX,[BP-08]

1714:415D 050600 ADD AX,0006

1714:4160 8946DC MOV [BP-24],AX

1714:4163 8B46F8 MOV AX,[BP-08]

1714:4166 2D0500 SUB AX,0005

1714:4169 8946DA MOV [BP-26],AX

1714:416C 8B76DA MOV SI,[BP-26]

1714:416F C746EC0000 MOV WORD PTR [BP-14],0000

1714:4174 3976DC CMP [BP-24],SI

1714:4177 7F03 JG 417C

1714:4179 E9B700 JMP 4233

1714:417C 8B46DC MOV AX,[BP-24]

1714:417F 8946EA MOV [BP-16],AX

1714:4182 8B46F6 MOV AX,[BP-0A]

1714:4185 2B46FA SUB AX,[BP-06]

1714:4188 8946E2 MOV [BP-1E],AX

1714:418B F7E8 IMUL AX

1714:418D 8946E8 MOV [BP-18],AX

1714:4190 8B46F0 MOV AX,[BP-10]

1714:4193 0502AB ADD AX,AB02

1714:4196 8946E6 MOV [BP-1A],AX

1714:4199 8B46F0 MOV AX,[BP-10]

1714:419C 0564AC ADD AX,AC64

1714:419F 8946E4 MOV [BP-1C],AX

1714:41A2 8B7EF4 MOV DI,[BP-0C]

1714:41A5 8BC6 MOV AX,SI

1714:41A7 2B46F8 SUB AX,[BP-08]

1714:41AA 8946E0 MOV [BP-20],AX

1714:41AD F7E8 IMUL AX

1714:41AF 0346E8 ADD AX,[BP-18]

1714:41B2 8946FC MOV [BP-04],AX

1714:41B5 8B46FE MOV AX,[BP-02]

1714:41B8 3946FC CMP [BP-04],AX

1714:41BB 7D5F JGE 421C

1714:41BD FF76F6 PUSH [BP-0A]

1714:41C0 56 PUSH SI

1714:41C1 E83E02 CALL 4402

1714:41C4 8BD8 MOV BX,AX

1714:41C6 8A07 MOV AL,[BX]

1714:41C8 2AE4 SUB AH,AH

1714:41CA 8946EE MOV [BP-12],AX

1714:41CD 8A46EE MOV AL,[BP-12]

1714:41D0 24FE AND AL,FE

1714:41D2 3CFA CMP AL,FA

1714:41D4 7506 JNZ 41DC

1714:41D6 BF0100 MOV DI,0001

1714:41D9 EB3B JMP 4216

1714:41DB 90 NOP

1714:41DC 8A46EE MOV AL,[BP-12]

1714:41DF 24FC AND AL,FC

1714:41E1 3CD4 CMP AL,D4

1714:41E3 7505 JNZ 41EA

1714:41E5 BF0200 MOV DI,0002

1714:41E8 EB2C JMP 4216

1714:41EA 8A46EE MOV AL,[BP-12]

1714:41ED 24FC AND AL,FC

1714:41EF 3CD8 CMP AL,D8

1714:41F1 7505 JNZ 41F8

1714:41F3 BF0300 MOV DI,0003

1714:41F6 EB1E JMP 4216

1714:41F8 8B5EE6 MOV BX,[BP-1A]

1714:41FB 803F00 CMP BYTE PTR [BX],00

1714:41FE 7510 JNZ 4210

1714:4200 8B5EE4 MOV BX,[BP-1C]

1714:4203 8A07 MOV AL,[BX]

1714:4205 24FC AND AL,FC

1714:4207 3C5C CMP AL,5C

1714:4209 7505 JNZ 4210

1714:420B BF0400 MOV DI,0004

1714:420E EB06 JMP 4216

1714:4210 8B46FE MOV AX,[BP-02]

1714:4213 8946FC MOV [BP-04],AX

1714:4216 8B46FC MOV AX,[BP-04]

1714:4219 8946FE MOV [BP-02],AX

1714:421C 46 INC SI

1714:421D 8346E620 ADD WORD PTR [BP-1A],+20

1714:4221 8346E410 ADD WORD PTR [BP-1C],+10

1714:4225 FF46EC INC WORD PTR [BP-14]

1714:4228 3976EA CMP [BP-16],SI

1714:422B 7E03 JLE 4230

1714:422D E975FF JMP 41A5

1714:4230 897EF4 MOV [BP-0C],DI

1714:4233 FF46F6 INC WORD PTR [BP-0A]

1714:4236 FF46F0 INC WORD PTR [BP-10]

1714:4239 8B46DE MOV AX,[BP-22]

1714:423C 3946F6 CMP [BP-0A],AX

1714:423F 7403 JZ 4244

1714:4241 E928FF JMP 416C

1714:4244 8976F2 MOV [BP-0E],SI

1714:4247 8B46F4 MOV AX,[BP-0C]

1714:424A 3D0100 CMP AX,0001

1714:424D 7413 JZ 4262

1714:424F 3D0200 CMP AX,0002

1714:4252 745E JZ 42B2

1714:4254 3D0300 CMP AX,0003

1714:4257 746B JZ 42C4

1714:4259 3D0400 CMP AX,0004

1714:425C 7474 JZ 42D2

1714:425E E9AD00 JMP 430E

1714:4261 90 NOP

1714:4262 803E845800 CMP BYTE PTR [5884],00

1714:4267 7429 JZ 4292

1714:4269 803E346A00 CMP BYTE PTR [6A34],00

1714:426E 7407 JZ 4277

1714:4270 803E346A04 CMP BYTE PTR [6A34],04

1714:4275 751B JNZ 4292

1714:4277 B82C0C MOV AX,0C2C

1714:427A 50 PUSH AX

1714:427B B80100 MOV AX,0001

1714:427E 50 PUSH AX

1714:427F B8D007 MOV AX,07D0

1714:4282 50 PUSH AX

1714:4283 B8204E MOV AX,4E20

1714:4286 50 PUSH AX

1714:4287 B8F6FF MOV AX,FFF6

1714:428A 50 PUSH AX

1714:428B E804DF CALL 2192

1714:428E EB7E JMP 430E

1714:4290 90 NOP

1714:4291 90 NOP

1714:4292 803E346A00 CMP BYTE PTR [6A34],00

1714:4297 750D JNZ 42A6

1714:4299 B8B80B MOV AX,0BB8

1714:429C 50 PUSH AX

1714:429D B80300 MOV AX,0003

1714:42A0 50 PUSH AX

1714:42A1 E81CE0 CALL 22C0

1714:42A4 EB68 JMP 430E

1714:42A6 803E346A04 CMP BYTE PTR [6A34],04

1714:42AB 7561 JNZ 430E

1714:42AD B8D007 MOV AX,07D0

1714:42B0 EBEA JMP 429C

1714:42B2 B81400 MOV AX,0014

1714:42B5 50 PUSH AX

1714:42B6 B83C00 MOV AX,003C

1714:42B9 50 PUSH AX

1714:42BA B81027 MOV AX,2710

1714:42BD 50 PUSH AX

1714:42BE E87BDF CALL 223C

1714:42C1 EB4B JMP 430E

1714:42C3 90 NOP

1714:42C4 B80A00 MOV AX,000A

1714:42C7 50 PUSH AX

1714:42C8 B81E00 MOV AX,001E

1714:42CB 50 PUSH AX

1714:42CC B8A861 MOV AX,61A8

1714:42CF EBEC JMP 42BD

1714:42D1 90 NOP

1714:42D2 8A1E086A MOV BL,[6A08]

1714:42D6 2AFF SUB BH,BH

1714:42D8 8A87486A MOV AL,[BX+6A48]

1714:42DC 8846DA MOV [BP-26],AL

1714:42DF 3AC7 CMP AL,BH

1714:42E1 741B JZ 42FE

1714:42E3 8AD8 MOV BL,AL

1714:42E5 D1E3 SHL BX,1

1714:42E7 FFB7346A PUSH [BX+6A34]

1714:42EB B80100 MOV AX,0001

1714:42EE 50 PUSH AX

1714:42EF B8D007 MOV AX,07D0

1714:42F2 50 PUSH AX

1714:42F3 B8204E MOV AX,4E20

1714:42F6 50 PUSH AX

1714:42F7 B8F6FF MOV AX,FFF6

1714:42FA 50 PUSH AX

1714:42FB E894DE CALL 2192

1714:42FE FE06086A INC BYTE PTR [6A08]

1714:4302 803E086A35 CMP BYTE PTR [6A08],35

1714:4307 7205 JB 430E

1714:4309 C606086A00 MOV BYTE PTR [6A08],00

1714:430E 803E845800 CMP BYTE PTR [5884],00

1714:4313 7412 JZ 4327

1714:4315 803E346A00 CMP BYTE PTR [6A34],00

1714:431A 7407 JZ 4323

1714:431C 803E346A04 CMP BYTE PTR [6A34],04

1714:4321 7504 JNZ 4327

1714:4323 FE0E8458 DEC BYTE PTR [5884]

1714:4327 FE06346A INC BYTE PTR [6A34]

1714:432B 803E346A07 CMP BYTE PTR [6A34],07

1714:4330 7605 JBE 4337

1714:4332 C606346A00 MOV BYTE PTR [6A34],00

1714:4337 5E POP SI

1714:4338 5F POP DI

1714:4339 8BE5 MOV SP,BP

1714:433B 5D POP BP

1714:433C C3 RET

1714:433D 90 NOP

; 433e

{

; call 223c(03e8,0019,0001)

1714:433E B80100 MOV AX,0001

1714:4341 50 PUSH AX

1714:4342 B81900 MOV AX,0019

1714:4345 50 PUSH AX

1714:4346 B8E803 MOV AX,03E8

1714:4349 50 PUSH AX

1714:434A E8EFDE CALL 223C

; call 20c8(0014,0001)

1714:434D B80100 MOV AX,0001

1714:4350 50 PUSH AX

1714:4351 B81400 MOV AX,0014

1714:4354 50 PUSH AX

1714:4355 E870DD CALL 20C8

; call 223c(05dc,0019,0001)

1714:4358 B80100 MOV AX,0001

1714:435B 50 PUSH AX

1714:435C B81900 MOV AX,0019

1714:435F 50 PUSH AX

1714:4360 B8DC05 MOV AX,05DC

1714:4363 50 PUSH AX

1714:4364 E8D5DE CALL 223C

1714:4367 C3 RET

}

; 4368

{

1714:4368 55 PUSH BP

1714:4369 8BEC MOV BP,SP

1714:436B 83EC04 SUB SP,+04

1714:436E 56 PUSH SI

1714:436F C746FE0300 MOV WORD PTR [BP-02],0003

1714:4374 BE0300 MOV SI,0003

1714:4377 B8F811 MOV AX,11F8

1714:437A 50 PUSH AX

1714:437B B80100 MOV AX,0001

1714:437E 50 PUSH AX

1714:437F B8302A MOV AX,2A30

1714:4382 50 PUSH AX

1714:4383 B82C01 MOV AX,012C

1714:4386 50 PUSH AX

1714:4387 B80600 MOV AX,0006

1714:438A 50 PUSH AX

1714:438B E804DE CALL 2192

1714:438E 4E DEC SI

1714:438F 75E6 JNZ 4377

1714:4391 B8D417 MOV AX,17D4

1714:4394 50 PUSH AX

1714:4395 B80100 MOV AX,0001

1714:4398 50 PUSH AX

1714:4399 B86054 MOV AX,5460

1714:439C 50 PUSH AX

1714:439D B82C01 MOV AX,012C

1714:43A0 50 PUSH AX

1714:43A1 B80300 MOV AX,0003

1714:43A4 50 PUSH AX

1714:43A5 E8EADD CALL 2192

1714:43A8 5E POP SI

1714:43A9 8BE5 MOV SP,BP

1714:43AB 5D POP BP

1714:43AC C3 RET

}

1714:43AD 90 NOP

1714:43AE 55 PUSH BP

1714:43AF 8BEC MOV BP,SP

1714:43B1 83EC08 SUB SP,+08

1714:43B4 57 PUSH DI

1714:43B5 56 PUSH SI

1714:43B6 8B4606 MOV AX,[BP+06]

1714:43B9 8946F8 MOV [BP-08],AX

1714:43BC 8B4608 MOV AX,[BP+08]

1714:43BF 2B460A SUB AX,[BP+0A]

1714:43C2 F76EF8 IMUL WORD PTR [BP-08]

1714:43C5 8946FE MOV [BP-02],AX

1714:43C8 8B4E04 MOV CX,[BP+04]

1714:43CB 99 CWD

1714:43CC F7F9 IDIV CX

1714:43CE 8946FE MOV [BP-02],AX

1714:43D1 8B760A MOV SI,[BP+0A]

1714:43D4 2BFF SUB DI,DI

1714:43D6 EB14 JMP 43EC

1714:43D8 56 PUSH SI

1714:43D9 E806DF CALL 22E2

1714:43DC B80100 MOV AX,0001

1714:43DF 50 PUSH AX

1714:43E0 FF7606 PUSH [BP+06]

1714:43E3 E8E2DC CALL 20C8

1714:43E6 0376FE ADD SI,[BP-02]

1714:43E9 037E06 ADD DI,[BP+06]

1714:43EC 3B7E04 CMP DI,[BP+04]

1714:43EF 7CE7 JL 43D8

1714:43F1 897EFC MOV [BP-04],DI

1714:43F4 8976FA MOV [BP-06],SI

1714:43F7 E814DF CALL 230E

1714:43FA 5E POP SI

1714:43FB 5F POP DI

1714:43FC 8BE5 MOV SP,BP

1714:43FE 5D POP BP

1714:43FF C20800 RET 0008

get_address_of_tile_id(p0,p1) - 4402

{

; p0 = x coord (col)

; p1 = y coord (row)

; store

1714:4402 55 PUSH BP

1714:4403 8BEC MOV BP,SP

1714:4405 83EC04 SUB SP,+04

; if map id is not special, jump to 4420

1714:4408 803E93587F CMP BYTE PTR [5893],7F

1714:440D 7611 JBE 4420

; set ax = column (x)

1714:440F 8B4604 MOV AX,[BP+04]

; row *= 32 (offset of row)

1714:4412 B105 MOV CL,05

1714:4414 D3E0 SHL AX,CL

; ax += p1 (add column # to offset)

1714:4416 034606 ADD AX,[BP+06]

; ax += ad14 (add offset of dat file)

1714:4419 0514AD ADD AX,AD14

; jumo to 44ab

1714:441C E98C00 JMP 44AB

1714:441F 90 NOP

; if map id != overworld

1714:4420 803E935800 CMP BYTE PTR [5893],00

1714:4425 7557 JNZ 447E

; set ax = p1

1714:4427 8B4606 MOV AX,[BP+06]

1714:442A 8A0E9B58 MOV CL,[589B]

1714:442E 2AED SUB CH,CH

1714:4430 2BC1 SUB AX,CX

1714:4432 251F00 AND AX,001F

1714:4435 894606 MOV [BP+06],AX

1714:4438 8B4604 MOV AX,[BP+04]

1714:443B 8A0E9C58 MOV CL,[589C]

1714:443F 2BC1 SUB AX,CX

1714:4441 251F00 AND AX,001F

1714:4444 894604 MOV [BP+04],AX

1714:4447 C746FC0000 MOV WORD PTR [BP-04],0000

1714:444C 3D0F00 CMP AX,000F

1714:444F 7E09 JLE 445A

1714:4451 C746FC0200 MOV WORD PTR [BP-04],0002

1714:4456 836E0410 SUB WORD PTR [BP+04],+10

1714:445A 837E060F CMP WORD PTR [BP+06],+0F

1714:445E 7E07 JLE 4467

1714:4460 FF46FC INC WORD PTR [BP-04]

1714:4463 836E0610 SUB WORD PTR [BP+06],+10

1714:4467 8A66FC MOV AH,[BP-04]

1714:446A 2AC0 SUB AL,AL

1714:446C 8B5604 MOV DX,[BP+04]

1714:446F B104 MOV CL,04

1714:4471 D3E2 SHL DX,CL

1714:4473 03C2 ADD AX,DX

1714:4475 034606 ADD AX,[BP+06]

1714:4478 050866 ADD AX,6608

1714:447B EB2E JMP 44AB

1714:447D 90 NOP

1714:447E 837E0600 CMP WORD PTR [BP+06],+00

1714:4482 7C12 JL 4496

1714:4484 837E0400 CMP WORD PTR [BP+04],+00

1714:4488 7C0C JL 4496

1714:448A 837E061F CMP WORD PTR [BP+06],+1F

1714:448E 7F06 JG 4496

1714:4490 837E041F CMP WORD PTR [BP+04],+1F

1714:4494 7E08 JLE 449E

1714:4496 C746FE076A MOV WORD PTR [BP-02],6A07

1714:449B EB11 JMP 44AE

1714:449D 90 NOP

1714:449E 8B4604 MOV AX,[BP+04]

1714:44A1 B105 MOV CL,05

1714:44A3 D3E0 SHL AX,CL

1714:44A5 034606 ADD AX,[BP+06]

1714:44A8 050866 ADD AX,6608

1714:44AB 8946FE MOV [BP-02],AX

1714:44AE 8B46FE MOV AX,[BP-02]

1714:44B1 8BE5 MOV SP,BP

1714:44B3 5D POP BP

1714:44B4 C20400 RET 0004

}

1714:44B7 90 NOP

1714:44B8 55 PUSH BP

1714:44B9 8BEC MOV BP,SP

1714:44BB 83EC02 SUB SP,+02

1714:44BE 56 PUSH SI

1714:44BF BED400 MOV SI,00D4

1714:44C2 FE841EB1 INC BYTE PTR [SI+B11E]

1714:44C6 80BC1EB1D8 CMP BYTE PTR [SI+B11E],D8

1714:44CB 7505 JNZ 44D2

1714:44CD C6841EB1D4 MOV BYTE PTR [SI+B11E],D4

1714:44D2 46 INC SI

1714:44D3 81FED800 CMP SI,00D8

1714:44D7 7CE9 JL 44C2

1714:44D9 8976FE MOV [BP-02],SI

1714:44DC BED800 MOV SI,00D8

1714:44DF FE841EB1 INC BYTE PTR [SI+B11E]

1714:44E3 80BC1EB1DC CMP BYTE PTR [SI+B11E],DC

1714:44E8 7505 JNZ 44EF

1714:44EA C6841EB1D8 MOV BYTE PTR [SI+B11E],D8

1714:44EF 46 INC SI

1714:44F0 81FEDC00 CMP SI,00DC

1714:44F4 7CE9 JL 44DF

1714:44F6 8976FE MOV [BP-02],SI

1714:44F9 F6067E6A01 TEST BYTE PTR [6A7E],01

1714:44FE 7448 JZ 4548

1714:4500 BE8000 MOV SI,0080

1714:4503 80B41EB101 XOR BYTE PTR [SI+B11E],01

1714:4508 46 INC SI

1714:4509 81FE8400 CMP SI,0084

1714:450D 7CF4 JL 4503

1714:450F 8976FE MOV [BP-02],SI

1714:4512 BEEC00 MOV SI,00EC

1714:4515 FE841EB1 INC BYTE PTR [SI+B11E]

1714:4519 80BC1EB1F0 CMP BYTE PTR [SI+B11E],F0

1714:451E 7505 JNZ 4525

1714:4520 C6841EB1EC MOV BYTE PTR [SI+B11E],EC

1714:4525 46 INC SI

1714:4526 81FEF000 CMP SI,00F0

1714:452A 7CE9 JL 4515

1714:452C 8976FE MOV [BP-02],SI

1714:452F F6067E6A02 TEST BYTE PTR [6A7E],02

1714:4534 7412 JZ 4548

1714:4536 BEFA00 MOV SI,00FA

1714:4539 80B41EB101 XOR BYTE PTR [SI+B11E],01

1714:453E 46 INC SI

1714:453F 81FEFE00 CMP SI,00FE

1714:4543 7CF4 JL 4539

1714:4545 8976FE MOV [BP-02],SI

1714:4548 FE067E6A INC BYTE PTR [6A7E]

1714:454C 5E POP SI

1714:454D 8BE5 MOV SP,BP

1714:454F 5D POP BP

1714:4550 C3 RET

1714:4551 90 NOP

; 4552

1714:4552 55 PUSH BP

1714:4553 8BEC MOV BP,SP

1714:4555 83EC12 SUB SP,+12

1714:4558 56 PUSH SI

1714:4559 C746F20000 MOV WORD PTR [BP-0E],0000

1714:455E 8B46F2 MOV AX,[BP-0E]

1714:4561 B103 MOV CL,03

1714:4563 D3E0 SHL AX,CL

1714:4565 055A5C ADD AX,5C5A

1714:4568 8946FA MOV [BP-06],AX

1714:456B 8BD8 MOV BX,AX

1714:456D 803F00 CMP BYTE PTR [BX],00

1714:4570 7503 JNZ 4575

1714:4572 E97601 JMP 46EB

1714:4575 8A4706 MOV AL,[BX+06]

1714:4578 2AE4 SUB AH,AH

1714:457A 250F00 AND AX,000F

1714:457D 8946F6 MOV [BP-0A],AX

1714:4580 8A4706 MOV AL,[BX+06]

1714:4583 2AE4 SUB AH,AH

1714:4585 B104 MOV CL,04

1714:4587 D3E8 SHR AX,CL

1714:4589 8946EE MOV [BP-12],AX

1714:458C 8A07 MOV AL,[BX]

1714:458E 2AE4 SUB AH,AH

1714:4590 25FC00 AND AX,00FC

1714:4593 8946FE MOV [BP-02],AX

1714:4596 8BD8 MOV BX,AX

1714:4598 83EB34 SUB BX,+34

1714:459B D1FB SAR BX,1

1714:459D D1FB SAR BX,1

1714:459F 8A87C81B MOV AL,[BX+1BC8]

1714:45A3 2AE4 SUB AH,AH

1714:45A5 8946F4 MOV [BP-0C],AX

1714:45A8 D3E0 SHL AX,CL

1714:45AA 05181B ADD AX,1B18

1714:45AD 8946F0 MOV [BP-10],AX

1714:45B0 837EF60F CMP WORD PTR [BP-0A],+0F

1714:45B4 7503 JNZ 45B9

1714:45B6 E93201 JMP 46EB

1714:45B9 837EF600 CMP WORD PTR [BP-0A],+00

1714:45BD 7417 JZ 45D6

1714:45BF FF4EF6 DEC WORD PTR [BP-0A]

1714:45C2 8B5EFA MOV BX,[BP-06]

1714:45C5 8BF3 MOV SI,BX

1714:45C7 8A4406 MOV AL,[SI+06]

1714:45CA 24F0 AND AL,F0

1714:45CC 0246F6 ADD AL,[BP-0A]

1714:45CF 884706 MOV [BX+06],AL

1714:45D2 E91601 JMP 46EB

1714:45D5 90 NOP

1714:45D6 8B5EFA MOV BX,[BP-06]

1714:45D9 807F0100 CMP BYTE PTR [BX+01],00

1714:45DD 7503 JNZ 45E2

1714:45DF E90901 JMP 46EB

1714:45E2 807F011D CMP BYTE PTR [BX+01],1D

1714:45E6 7503 JNZ 45EB

1714:45E8 E90001 JMP 46EB

1714:45EB 807F011E CMP BYTE PTR [BX+01],1E

1714:45EF 7503 JNZ 45F4

1714:45F1 E9F700 JMP 46EB

1714:45F4 837EFE34 CMP WORD PTR [BP-02],+34

1714:45F8 7D03 JGE 45FD

1714:45FA E9EE00 JMP 46EB

1714:45FD 817EFEE800 CMP WORD PTR [BP-02],00E8

1714:4602 7503 JNZ 4607

1714:4604 E9E400 JMP 46EB

1714:4607 817EFEB400 CMP WORD PTR [BP-02],00B4

1714:460C 7503 JNZ 4611

1714:460E E9DA00 JMP 46EB

1714:4611 837EFE5C CMP WORD PTR [BP-02],+5C

1714:4615 7419 JZ 4630

1714:4617 817EFEA800 CMP WORD PTR [BP-02],00A8

1714:461C 7412 JZ 4630

1714:461E 2BC0 SUB AX,AX

1714:4620 50 PUSH AX

1714:4621 B8FF00 MOV AX,00FF

1714:4624 50 PUSH AX

1714:4625 E86ADA CALL 2092

1714:4628 3D8000 CMP AX,0080

1714:462B 7D03 JGE 4630

1714:462D E9BB00 JMP 46EB

1714:4630 C746F80000 MOV WORD PTR [BP-08],0000

1714:4635 8B5EEE MOV BX,[BP-12]

1714:4638 8B76F0 MOV SI,[BP-10]

1714:463B 8A00 MOV AL,[BX+SI]

1714:463D 2AE4 SUB AH,AH

1714:463F 8946FC MOV [BP-04],AX

1714:4642 3D0700 CMP AX,0007

1714:4645 776F JA 46B6

1714:4647 03C0 ADD AX,AX

1714:4649 93 XCHG BX,AX

1714:464A 2E CS:

1714:464B FFA7C246 JMP [BX+46C2]

1714:464F EB56 JMP 46A7

1714:4651 90 NOP

1714:4652 8B5EFA MOV BX,[BP-06]

1714:4655 8A46FE MOV AL,[BP-02]

1714:4658 0246FC ADD AL,[BP-04]

1714:465B FEC8 DEC AL

1714:465D 884701 MOV [BX+01],AL

1714:4660 FF46EE INC WORD PTR [BP-12]

1714:4663 EB25 JMP 468A

1714:4665 90 NOP

1714:4666 2BC0 SUB AX,AX

1714:4668 50 PUSH AX

1714:4669 B8FF00 MOV AX,00FF

1714:466C 50 PUSH AX

1714:466D E822DA CALL 2092

1714:4670 3D4000 CMP AX,0040

1714:4673 7D1D JGE 4692

1714:4675 8B5EFA MOV BX,[BP-06]

1714:4678 8BF3 MOV SI,BX

1714:467A 8A04 MOV AL,[SI]

1714:467C 884701 MOV [BX+01],AL

1714:467F 837EFE5C CMP WORD PTR [BP-02],+5C

1714:4683 74DB JZ 4660

1714:4685 C746F60600 MOV WORD PTR [BP-0A],0006

1714:468A C746F80100 MOV WORD PTR [BP-08],0001

1714:468F EB41 JMP 46D2

1714:4691 90 NOP

1714:4692 FF46EE INC WORD PTR [BP-12]

1714:4695 EB3B JMP 46D2

1714:4697 90 NOP

1714:4698 2BC0 SUB AX,AX

1714:469A 50 PUSH AX

1714:469B B8FF00 MOV AX,00FF

1714:469E 50 PUSH AX

1714:469F E8F0D9 CALL 2092

1714:46A2 3DC000 CMP AX,00C0

1714:46A5 7DEB JGE 4692

1714:46A7 C746EE0000 MOV WORD PTR [BP-12],0000

1714:46AC EB24 JMP 46D2

1714:46AE C746EE0200 MOV WORD PTR [BP-12],0002

1714:46B3 EB1D JMP 46D2

1714:46B5 90 NOP

1714:46B6 8B46FC MOV AX,[BP-04]

1714:46B9 2D8000 SUB AX,0080

1714:46BC 8946F6 MOV [BP-0A],AX

1714:46BF EB9F JMP 4660

1714:46C1 90 NOP

1714:46C2 A7 CMPSW

1714:46C3 46 INC SI

1714:46C4 52 PUSH DX

1714:46C5 46 INC SI

1714:46C6 52 PUSH DX

1714:46C7 46 INC SI

1714:46C8 52 PUSH DX

1714:46C9 46 INC SI

1714:46CA 52 PUSH DX

1714:46CB 46 INC SI

1714:46CC 66 DB 66

1714:46CD 46 INC SI

1714:46CE 98 CBW

1714:46CF 46 INC SI

1714:46D0 AE SCASB

1714:46D1 46 INC SI

1714:46D2 8B5EFA MOV BX,[BP-06]

1714:46D5 8A46EE MOV AL,[BP-12]

1714:46D8 B104 MOV CL,04

1714:46DA D2E0 SHL AL,CL

1714:46DC 0246F6 ADD AL,[BP-0A]

1714:46DF 884706 MOV [BX+06],AL

1714:46E2 837EF800 CMP WORD PTR [BP-08],+00

1714:46E6 7503 JNZ 46EB

1714:46E8 E94AFF JMP 4635

1714:46EB FF46F2 INC WORD PTR [BP-0E]

1714:46EE 837EF220 CMP WORD PTR [BP-0E],+20

1714:46F2 7D03 JGE 46F7

1714:46F4 E967FE JMP 455E

1714:46F7 E8BEFD CALL 44B8

1714:46FA E8D928 CALL 6FD6

1714:46FD 5E POP SI

1714:46FE 8BE5 MOV SP,BP

1714:4700 5D POP BP

1714:4701 C3 RET

1714:4702 55 PUSH BP

1714:4703 8BEC MOV BP,SP

1714:4705 83EC06 SUB SP,+06

1714:4708 C746FE0000 MOV WORD PTR [BP-02],0000

1714:470D 8B5E04 MOV BX,[BP+04]

1714:4710 A09358 MOV AL,[5893]

1714:4713 38874058 CMP [BX+5840],AL

1714:4717 7538 JNZ 4751

1714:4719 A09558 MOV AL,[5895]

1714:471C 38874858 CMP [BX+5848],AL

1714:4720 752F JNZ 4751

1714:4722 803E935800 CMP BYTE PTR [5893],00

1714:4727 7523 JNZ 474C

1714:4729 8A873058 MOV AL,[BX+5830]

1714:472D 2A069B58 SUB AL,[589B]

1714:4731 2AE4 SUB AH,AH

1714:4733 8946FC MOV [BP-04],AX

1714:4736 8A873858 MOV AL,[BX+5838]

1714:473A 2A069C58 SUB AL,[589C]

1714:473E 8946FA MOV [BP-06],AX

1714:4741 837EFC20 CMP WORD PTR [BP-04],+20

1714:4745 7D0A JGE 4751

1714:4747 3D2000 CMP AX,0020

1714:474A 7D05 JGE 4751

1714:474C C746FE0100 MOV WORD PTR [BP-02],0001

1714:4751 8B46FE MOV AX,[BP-02]

1714:4754 8BE5 MOV SP,BP

1714:4756 5D POP BP

1714:4757 C20200 RET 0002

1714:475A 55 PUSH BP

1714:475B 8BEC MOV BP,SP

1714:475D 83EC08 SUB SP,+08

1714:4760 57 PUSH DI

1714:4761 56 PUSH SI

1714:4762 C746F8DC00 MOV WORD PTR [BP-08],00DC

1714:4767 803E7F5814 CMP BYTE PTR [587F],14

1714:476C 7307 JNB 4775

1714:476E 803E7F5805 CMP BYTE PTR [587F],05

1714:4773 7311 JNB 4786

1714:4775 B88758 MOV AX,5887

1714:4778 50 PUSH AX

1714:4779 B80100 MOV AX,0001

1714:477C 50 PUSH AX

1714:477D B81000 MOV AX,0010

1714:4780 50 PUSH AX

1714:4781 E86CF7 CALL 3EF0

1714:4784 EB17 JMP 479D

1714:4786 B88758 MOV AX,5887

1714:4789 50 PUSH AX

1714:478A B80100 MOV AX,0001

1714:478D 50 PUSH AX

1714:478E E8A5F7 CALL 3F36

1714:4791 803E875800 CMP BYTE PTR [5887],00

1714:4796 7505 JNZ 479D

1714:4798 C746F80500 MOV WORD PTR [BP-08],0005

1714:479D 2BF6 SUB SI,SI

1714:479F 8B7EFE MOV DI,[BP-02]

1714:47A2 56 PUSH SI

1714:47A3 E85CFF CALL 4702

1714:47A6 0BC0 OR AX,AX

1714:47A8 7438 JZ 47E2

1714:47AA 8A843058 MOV AL,[SI+5830]

1714:47AE 2AE4 SUB AH,AH

1714:47B0 50 PUSH AX

1714:47B1 8A843858 MOV AL,[SI+5838]

1714:47B5 50 PUSH AX

1714:47B6 E849FC CALL 4402

1714:47B9 8BF8 MOV DI,AX

1714:47BB 8A05 MOV AL,[DI]

1714:47BD 2AE4 SUB AH,AH

1714:47BF 3B46F8 CMP AX,[BP-08]

1714:47C2 7406 JZ 47CA

1714:47C4 B80100 MOV AX,0001

1714:47C7 EB03 JMP 47CC

1714:47C9 90 NOP

1714:47CA 2BC0 SUB AX,AX

1714:47CC 8946FA MOV [BP-06],AX

1714:47CF 8A46F8 MOV AL,[BP-08]

1714:47D2 8805 MOV [DI],AL

1714:47D4 800EE62402 OR BYTE PTR [24E6],02

1714:47D9 837EFA00 CMP WORD PTR [BP-06],+00

1714:47DD 7403 JZ 47E2

1714:47DF E86816 CALL 5E4A

1714:47E2 46 INC SI

1714:47E3 83FE08 CMP SI,+08

1714:47E6 7CBA JL 47A2

1714:47E8 897EFE MOV [BP-02],DI

1714:47EB 8976FC MOV [BP-04],SI

1714:47EE 5E POP SI

1714:47EF 5F POP DI

1714:47F0 8BE5 MOV SP,BP

1714:47F2 5D POP BP

1714:47F3 C3 RET

; 47f4

1714:47F4 55 PUSH BP

1714:47F5 8BEC MOV BP,SP

1714:47F7 83EC02 SUB SP,+02

1714:47FA 8B5E04 MOV BX,[BP+04]

1714:47FD 80BF4058FF CMP BYTE PTR [BX+5840],FF

1714:4802 7506 JNZ 480A

1714:4804 2BC0 SUB AX,AX

1714:4806 E99800 JMP 48A1

1714:4809 90 NOP

1714:480A 803E935800 CMP BYTE PTR [5893],00

1714:480F 7521 JNZ 4832

1714:4811 B80100 MOV AX,0001

1714:4814 50 PUSH AX

1714:4815 E806DD CALL 251E

1714:4818 B8BAA3 MOV AX,A3BA

1714:481B 50 PUSH AX

1714:481C E855CE CALL 1674

1714:481F 0BC0 OR AX,AX

1714:4821 74F5 JZ 4818

1714:4823 E8FC31 CALL 7A22

1714:4826 50 PUSH AX

1714:4827 B85A5C MOV AX,5C5A

1714:482A 50 PUSH AX

1714:482B B80001 MOV AX,0100

1714:482E 50 PUSH AX

1714:482F E8A6DD CALL 25D8

1714:4832 A09358 MOV AL,[5893]

1714:4835 2AE4 SUB AH,AH

1714:4837 8946FE MOV [BP-02],AX

1714:483A 8B5E04 MOV BX,[BP+04]

1714:483D 8A874058 MOV AL,[BX+5840]

1714:4841 A29358 MOV [5893],AL

1714:4844 8A873058 MOV AL,[BX+5830]

1714:4848 A29658 MOV [5896],AL

1714:484B 8A873858 MOV AL,[BX+5838]

1714:484F A29758 MOV [5897],AL

1714:4852 8A874858 MOV AL,[BX+5848]

1714:4856 A29558 MOV [5895],AL

1714:4859 38269358 CMP [5893],AH

1714:485D 741D JZ 487C

1714:485F 837EFE00 CMP WORD PTR [BP-02],+00

1714:4863 7417 JZ 487C

1714:4865 803E935821 CMP BYTE PTR [5893],21

1714:486A 7310 JNB 487C

1714:486C 837EFE21 CMP WORD PTR [BP-02],+21

1714:4870 7D0A JGE 487C

1714:4872 B80100 MOV AX,0001

1714:4875 50 PUSH AX

1714:4876 E8CD31 CALL 7A46

1714:4879 EB23 JMP 489E

1714:487B 90 NOP

1714:487C 803E935800 CMP BYTE PTR [5893],00

1714:4881 751B JNZ 489E

1714:4883 837EFE00 CMP WORD PTR [BP-02],+00

1714:4887 7515 JNZ 489E

1714:4889 E89631 CALL 7A22

1714:488C 50 PUSH AX

1714:488D B85A5C MOV AX,5C5A

1714:4890 50 PUSH AX

1714:4891 B80001 MOV AX,0100

1714:4894 50 PUSH AX

1714:4895 2BC0 SUB AX,AX

1714:4897 50 PUSH AX

1714:4898 E8D3DC CALL 256E

1714:489B E8E032 CALL 7B7E

1714:489E B80100 MOV AX,0001

1714:48A1 8BE5 MOV SP,BP

1714:48A3 5D POP BP

1714:48A4 C20200 RET 0002

1714:48A7 90 NOP

1714:48A8 55 PUSH BP

1714:48A9 8BEC MOV BP,SP

1714:48AB 83EC06 SUB SP,+06

1714:48AE C746FA0000 MOV WORD PTR [BP-06],0000

1714:48B3 A09658 MOV AL,[5896]

1714:48B6 2AE4 SUB AH,AH

1714:48B8 50 PUSH AX

1714:48B9 A09758 MOV AL,[5897]

1714:48BC 50 PUSH AX

1714:48BD E842FB CALL 4402

1714:48C0 8BD8 MOV BX,AX

1714:48C2 803FDC CMP BYTE PTR [BX],DC

1714:48C5 7403 JZ 48CA

1714:48C7 E9B600 JMP 4980

1714:48CA B80100 MOV AX,0001

1714:48CD 50 PUSH AX

1714:48CE E815F2 CALL 3AE6

1714:48D1 B80C17 MOV AX,170C

1714:48D4 50 PUSH AX

1714:48D5 B80100 MOV AX,0001

1714:48D8 50 PUSH AX

1714:48D9 B83075 MOV AX,7530

1714:48DC 50 PUSH AX

1714:48DD B8D007 MOV AX,07D0

1714:48E0 50 PUSH AX

1714:48E1 B80200 MOV AX,0002

1714:48E4 50 PUSH AX

1714:48E5 E8AAD8 CALL 2192

1714:48E8 A07C58 MOV AL,[587C]

1714:48EB 2AE4 SUB AH,AH

1714:48ED 8946FE MOV [BP-02],AX

1714:48F0 C6067C5816 MOV BYTE PTR [587C],16

1714:48F5 B8DC00 MOV AX,00DC

1714:48F8 50 PUSH AX

1714:48F9 B80500 MOV AX,0005

1714:48FC 50 PUSH AX

1714:48FD 50 PUSH AX

1714:48FE E867C7 CALL 1068

1714:4901 C6067C5800 MOV BYTE PTR [587C],00

1714:4906 B80100 MOV AX,0001

1714:4909 50 PUSH AX

1714:490A E8D9F1 CALL 3AE6

1714:490D C60687580F MOV BYTE PTR [5887],0F

1714:4912 A08758 MOV AL,[5887]

1714:4915 2AE4 SUB AH,AH

1714:4917 50 PUSH AX

1714:4918 B80500 MOV AX,0005

1714:491B 50 PUSH AX

1714:491C 50 PUSH AX

1714:491D E8F2C7 CALL 1112

1714:4920 B80200 MOV AX,0002

1714:4923 50 PUSH AX

1714:4924 E8D3D7 CALL 20FA

1714:4927 FE0E8758 DEC BYTE PTR [5887]

1714:492B 75E5 JNZ 4912

1714:492D A09658 MOV AL,[5896]

1714:4930 2AE4 SUB AH,AH

1714:4932 50 PUSH AX

1714:4933 A09758 MOV AL,[5897]

1714:4936 50 PUSH AX

1714:4937 E8C8FA CALL 4402

1714:493A 8BD8 MOV BX,AX

1714:493C C60705 MOV BYTE PTR [BX],05

1714:493F 800EE62402 OR BYTE PTR [24E6],02

1714:4944 B80500 MOV AX,0005

1714:4947 50 PUSH AX

1714:4948 50 PUSH AX

1714:4949 50 PUSH AX

1714:494A E893C7 CALL 10E0

1714:494D 803E7F5800 CMP BYTE PTR [587F],00

1714:4952 750E JNZ 4962

1714:4954 803E81580A CMP BYTE PTR [5881],0A

1714:4959 7307 JNB 4962

1714:495B C746FA0100 MOV WORD PTR [BP-06],0001

1714:4960 EB18 JMP 497A

1714:4962 803E7F580C CMP BYTE PTR [587F],0C

1714:4967 7305 JNB 496E

1714:4969 A08558 MOV AL,[5885]

1714:496C EB03 JMP 4971

1714:496E A08658 MOV AL,[5886]

1714:4971 2AE4 SUB AH,AH

1714:4973 2D3000 SUB AX,0030

1714:4976 50 PUSH AX

1714:4977 E87AFE CALL 47F4

1714:497A 8A46FE MOV AL,[BP-02]

1714:497D A27C58 MOV [587C],AL

1714:4980 8B46FA MOV AX,[BP-06]

1714:4983 8BE5 MOV SP,BP

1714:4985 5D POP BP

1714:4986 C3 RET

1714:4987 90 NOP

1714:4988 55 PUSH BP

1714:4989 8BEC MOV BP,SP

1714:498B 83EC0C SUB SP,+0C

1714:498E 57 PUSH DI

1714:498F 56 PUSH SI

1714:4990 C746F8FFFF MOV WORD PTR [BP-08],FFFF

1714:4995 803E935880 CMP BYTE PTR [5893],80

1714:499A 7616 JBE 49B2

1714:499C 8A1E9E58 MOV BL,[589E]

1714:49A0 2AFF SUB BH,BH

1714:49A2 B103 MOV CL,03

1714:49A4 D3E3 SHL BX,CL

1714:49A6 8A8717BA MOV AL,[BX+BA17]

1714:49AA 2AE4 SUB AH,AH

1714:49AC 8946F8 MOV [BP-08],AX

1714:49AF E9AD00 JMP 4A5F

1714:49B2 803E7B58FF CMP BYTE PTR [587B],FF

1714:49B7 7405 JZ 49BE

1714:49B9 A07B58 MOV AL,[587B]

1714:49BC EBEC JMP 49AA

1714:49BE C746FA0000 MOV WORD PTR [BP-06],0000

1714:49C3 C746FC0000 MOV WORD PTR [BP-04],0000

1714:49C8 A05B58 MOV AL,[585B]

1714:49CB 2AE4 SUB AH,AH

1714:49CD 0BC0 OR AX,AX

1714:49CF 7429 JZ 49FA

1714:49D1 8BD0 MOV DX,AX

1714:49D3 BEB355 MOV SI,55B3

1714:49D6 8B7EFC MOV DI,[BP-04]

1714:49D9 8B4EFA MOV CX,[BP-06]

1714:49DC 803C47 CMP BYTE PTR [SI],47

1714:49DF 7405 JZ 49E6

1714:49E1 803C50 CMP BYTE PTR [SI],50

1714:49E4 7504 JNZ 49EA

1714:49E6 897EF8 MOV [BP-08],DI

1714:49E9 41 INC CX

1714:49EA 83C620 ADD SI,+20

1714:49ED 47 INC DI

1714:49EE 8BC7 MOV AX,DI

1714:49F0 3BC2 CMP AX,DX

1714:49F2 75E8 JNZ 49DC

1714:49F4 897EFC MOV [BP-04],DI

1714:49F7 894EFA MOV [BP-06],CX

1714:49FA 837EFA01 CMP WORD PTR [BP-06],+01

1714:49FE 7E5F JLE 4A5F

1714:4A00 2BFF SUB DI,DI

1714:4A02 B8C4A3 MOV AX,A3C4

1714:4A05 50 PUSH AX

1714:4A06 E847CE CALL 1850

1714:4A09 E882E4 CALL 2E8E

1714:4A0C 8BF0 MOV SI,AX

1714:4A0E 0BF6 OR SI,SI

1714:4A10 7D06 JGE 4A18

1714:4A12 BF0100 MOV DI,0001

1714:4A15 EB3E JMP 4A55

1714:4A17 90 NOP

1714:4A18 8BDE MOV BX,SI

1714:4A1A B105 MOV CL,05

1714:4A1C D3E3 SHL BX,CL

1714:4A1E 80BFB35547 CMP BYTE PTR [BX+55B3],47

1714:4A23 740B JZ 4A30

1714:4A25 8BDE MOV BX,SI

1714:4A27 D3E3 SHL BX,CL

1714:4A29 80BFB35550 CMP BYTE PTR [BX+55B3],50

1714:4A2E 751E JNZ 4A4E

1714:4A30 8BC6 MOV AX,SI

1714:4A32 B105 MOV CL,05

1714:4A34 D3E0 SHL AX,CL

1714:4A36 05A855 ADD AX,55A8

1714:4A39 50 PUSH AX

1714:4A3A E813CE CALL 1850

1714:4A3D E8D2D4 CALL 1F12

1714:4A40 0BC0 OR AX,AX

1714:4A42 74CE JZ 4A12

1714:4A44 B80A00 MOV AX,000A

1714:4A47 50 PUSH AX

1714:4A48 E86FCC CALL 16BA

1714:4A4B EBC5 JMP 4A12

1714:4A4D 90 NOP

1714:4A4E B8CEA3 MOV AX,A3CE

1714:4A51 50 PUSH AX

1714:4A52 E8FBCD CALL 1850

1714:4A55 0BFF OR DI,DI

1714:4A57 74A9 JZ 4A02

1714:4A59 897EFE MOV [BP-02],DI

1714:4A5C 8976F8 MOV [BP-08],SI

1714:4A5F 837EF8FF CMP WORD PTR [BP-08],-01

1714:4A63 7509 JNZ 4A6E

1714:4A65 B8DAA3 MOV AX,A3DA

1714:4A68 50 PUSH AX

1714:4A69 E8E4CD CALL 1850

1714:4A6C EB0D JMP 4A7B

1714:4A6E 837EF8FE CMP WORD PTR [BP-08],-02

1714:4A72 7507 JNZ 4A7B

1714:4A74 B80A00 MOV AX,000A

1714:4A77 50 PUSH AX

1714:4A78 E83FCC CALL 16BA

1714:4A7B 8B46F8 MOV AX,[BP-08]

1714:4A7E 5E POP SI

1714:4A7F 5F POP DI

1714:4A80 8BE5 MOV SP,BP

1714:4A82 5D POP BP

1714:4A83 C3 RET

; 4a84

{

1714:4A84 55 PUSH BP

1714:4A85 8BEC MOV BP,SP

1714:4A87 83EC16 SUB SP,+16

1714:4A8A 57 PUSH DI

1714:4A8B 56 PUSH SI

; if map == dungeon, jump to 4be1

1714:4A8C 803E935821 CMP BYTE PTR [5893],21

1714:4A91 7203 JB 4A96

1714:4A93 E94B01 JMP 4BE1

1714:4A96 C746EE0000 MOV WORD PTR [BP-12],0000

1714:4A9B B82020 MOV AX,2020

1714:4A9E B90600 MOV CX,0006

1714:4AA1 8D7EF0 LEA DI,[BP-10]

1714:4AA4 16 PUSH SS

1714:4AA5 07 POP ES

1714:4AA6 F2 REPNZ

1714:4AA7 AB STOSW

1714:4AA8 8346EE0C ADD WORD PTR [BP-12],+0C

1714:4AAC C646FC00 MOV BYTE PTR [BP-04],00

1714:4AB0 A18653 MOV AX,[5386]

1714:4AB3 8946EC MOV [BP-14],AX

; call get_text_effects(0000)

1714:4AB6 2BC0 SUB AX,AX

1714:4AB8 50 PUSH AX

1714:4AB9 E8D8D0 CALL 1B94

; call get_charset_segment(0001)

1714:4ABC B80100 MOV AX,0001

1714:4ABF 50 PUSH AX

1714:4AC0 E8DBD1 CALL 1C9E

1714:4AC3 A07F58 MOV AL,[587F]

1714:4AC6 2AE4 SUB AH,AH

1714:4AC8 2D1100 SUB AX,0011

1714:4ACB F7D8 NEG AX

1714:4ACD 8946FE MOV [BP-02],AX

1714:4AD0 3D0C00 CMP AX,000C

1714:4AD3 7D0A JGE 4ADF

1714:4AD5 0BC0 OR AX,AX

1714:4AD7 7C06 JL 4ADF

1714:4AD9 8BF0 MOV SI,AX

1714:4ADB C642F02A MOV BYTE PTR [BP+SI-10],2A

1714:4ADF 8A1E7E58 MOV BL,[587E]

1714:4AE3 2AFF SUB BH,BH

1714:4AE5 D1E3 SHL BX,1

1714:4AE7 8A87D81E MOV AL,[BX+1ED8]

1714:4AEB A28558 MOV [5885],AL

1714:4AEE A07F58 MOV AL,[587F]

1714:4AF1 2AE4 SUB AH,AH

1714:4AF3 2D0800 SUB AX,0008

1714:4AF6 F7D8 NEG AX

1714:4AF8 8946FE MOV [BP-02],AX

1714:4AFB 3DF4FF CMP AX,FFF4

1714:4AFE 7D04 JGE 4B04

1714:4B00 8346FE18 ADD WORD PTR [BP-02],+18

1714:4B04 837EFE0C CMP WORD PTR [BP-02],+0C

1714:4B08 7D0F JGE 4B19

1714:4B0A 837EFE00 CMP WORD PTR [BP-02],+00

1714:4B0E 7C09 JL 4B19

1714:4B10 8B76FE MOV SI,[BP-02]

1714:4B13 A08558 MOV AL,[5885]

1714:4B16 8842F0 MOV [BP+SI-10],AL

1714:4B19 8A1E7E58 MOV BL,[587E]

1714:4B1D 2AFF SUB BH,BH

1714:4B1F D1E3 SHL BX,1

1714:4B21 8A87D91E MOV AL,[BX+1ED9]

1714:4B25 A28658 MOV [5886],AL

1714:4B28 A07F58 MOV AL,[587F]

1714:4B2B 2AE4 SUB AH,AH

1714:4B2D 2D0200 SUB AX,0002

1714:4B30 F7D8 NEG AX

1714:4B32 8946FE MOV [BP-02],AX

1714:4B35 3DF4FF CMP AX,FFF4

1714:4B38 7D04 JGE 4B3E

1714:4B3A 8346FE18 ADD WORD PTR [BP-02],+18

1714:4B3E 837EFE0C CMP WORD PTR [BP-02],+0C

1714:4B42 7D0F JGE 4B53

1714:4B44 837EFE00 CMP WORD PTR [BP-02],+00

1714:4B48 7C09 JL 4B53

1714:4B4A 8B76FE MOV SI,[BP-02]

1714:4B4D A08658 MOV AL,[5886]

1714:4B50 8842F0 MOV [BP+SI-10],AL

; call set_text_cursor_position(0000,0006)

1714:4B53 B80600 MOV AX,0006

1714:4B56 50 PUSH AX

1714:4B57 2BC0 SUB AX,AX

1714:4B59 50 PUSH AX

1714:4B5A E895D0 CALL 1BF2

; if map == Ararat || level >= 80, jump to 4ba2

1714:4B5D 803E935819 CMP BYTE PTR [5893],19

1714:4B62 743E JZ 4BA2

1714:4B64 803E955880 CMP BYTE PTR [5895],80

1714:4B69 7337 JNB 4BA2

1714:4B6B 2BF6 SUB SI,SI

1714:4B6D EB14 JMP 4B83

1714:4B6F 90 NOP

; call set_text_foreground_color(*13ba)

1714:4B70 FF36BA13 PUSH [13BA]

1714:4B74 E853D1 CALL 1CCA

1714:4B77 8BFE MOV DI,SI

1714:4B79 46 INC SI

1714:4B7A 8A43F0 MOV AL,[BP+DI-10]

1714:4B7D 2AE4 SUB AH,AH

; call print_character(al)

1714:4B7F 50 PUSH AX

1714:4B80 E837CB CALL 16BA

1714:4B83 807AF000 CMP BYTE PTR [BP+SI-10],00

1714:4B87 740D JZ 4B96

1714:4B89 807AF02A CMP BYTE PTR [BP+SI-10],2A

1714:4B8D 75E1 JNZ 4B70

1714:4B8F FF36B813 PUSH [13B8]

1714:4B93 EBDF JMP 4B74

1714:4B95 90 NOP

1714:4B96 8976EE MOV [BP-12],SI

; call set_text_foreground_color(*13b0)

1714:4B99 FF36B013 PUSH [13B0]

1714:4B9D E82AD1 CALL 1CCA

1714:4BA0 EB33 JMP 4BD5

1714:4BA2 FF36B213 PUSH [13B2]

1714:4BA6 E8C7BE CALL 0A70

1714:4BA9 B82800 MOV AX,0028

1714:4BAC 50 PUSH AX

1714:4BAD 2BC0 SUB AX,AX

1714:4BAF 50 PUSH AX

1714:4BB0 B89800 MOV AX,0098

1714:4BB3 50 PUSH AX

1714:4BB4 B80600 MOV AX,0006

1714:4BB7 50 PUSH AX

1714:4BB8 E8EBBE CALL 0AA6

1714:4BBB FF36B013 PUSH [13B0]

1714:4BBF E8AEBE CALL 0A70

1714:4BC2 B82800 MOV AX,0028

1714:4BC5 50 PUSH AX

1714:4BC6 B80700 MOV AX,0007

1714:4BC9 50 PUSH AX

1714:4BCA B89800 MOV AX,0098

1714:4BCD 50 PUSH AX

1714:4BCE B80700 MOV AX,0007

1714:4BD1 50 PUSH AX

1714:4BD2 E83BBF CALL 0B10

; call get_text_effects(bp-14)

1714:4BD5 FF76EC PUSH [BP-14]

1714:4BD8 E8B9CF CALL 1B94

; call get_charset_segment(0000)

1714:4BDB 2BC0 SUB AX,AX

1714:4BDD 50 PUSH AX

1714:4BDE E8BDD0 CALL 1C9E

1714:4BE1 5E POP SI

1714:4BE2 5F POP DI

1714:4BE3 8BE5 MOV SP,BP

1714:4BE5 5D POP BP

1714:4BE6 C3 RET

}

1714:4BE7 90 NOP

; 4be8

{

1714:4BE8 55 PUSH BP

1714:4BE9 8BEC MOV BP,SP

1714:4BEB 83EC02 SUB SP,+02

; set bp-02 = current charset id

1714:4BEE A18653 MOV AX,[5386]

1714:4BF1 8946FE MOV [BP-02],AX

; call get_text_effects(0000)

1714:4BF4 2BC0 SUB AX,AX

1714:4BF6 50 PUSH AX

1714:4BF7 E89ACF CALL 1B94

; if map id == Ararat || level >= 80, begin returning at 4c1f

1714:4BFA 803E935819 CMP BYTE PTR [5893],19

1714:4BFF 741E JZ 4C1F

1714:4C01 803E955880 CMP BYTE PTR [5895],80

1714:4C06 7317 JNB 4C1F

; call set_text_cursor_position(0000,0005)

1714:4C08 B80500 MOV AX,0005

1714:4C0B 50 PUSH AX

1714:4C0C 2BC0 SUB AX,AX

1714:4C0E 50 PUSH AX

1714:4C0F E8E0CF CALL 1BF2

; call 4ca2

1714:4C12 E81500 CALL 4C2A

; call print_string(“ “)

1714:4C15 B8E2A3 MOV AX,A3E2

1714:4C18 50 PUSH AX

1714:4C19 E834CC CALL 1850

; call 4cee

1714:4C1C E8AF00 CALL 4CCE

; call get_text_effects(saved carset id)

1714:4C1F FF76FE PUSH [BP-02]

1714:4C22 E86FCF CALL 1B94

1714:4C25 8BE5 MOV SP,BP

1714:4C27 5D POP BP

1714:4C28 C3 RET

}

1714:4C29 90 NOP

; 4c2a

{

1714:4C2A 55 PUSH BP

1714:4C2B 8BEC MOV BP,SP

1714:4C2D 83EC08 SUB SP,+08

1714:4C30 56 PUSH SI

; set ax = current charset id

1714:4C31 A18653 MOV AX,[5386]

; get addr of text window table for charset

1714:4C34 B103 MOV CL,03

1714:4C36 D3E0 SHL AX,CL

1714:4C38 055E53 ADD AX,535E

; set bp-2 = addr of table

1714:4C3B 8946FE MOV [BP-02],AX

; call get_current_text_column()

1714:4C3E E8D1D2 CALL 1F12

; set bx = addr of text window table

1714:4C41 8B5EFE MOV BX,[BP-02]

; set dx = get leftmost col

1714:4C44 8A17 MOV DL,[BX]

1714:4C46 2AF6 SUB DH,DH

; get absolute current text column

1714:4C48 03D0 ADD DX,AX

; calculate pixel offset to start of column

1714:4C4A B103 MOV CL,03

1714:4C4C D3E2 SHL DX,CL

; call get_current_text_row()

1714:4C4E 8956FA MOV [BP-06],DX

1714:4C51 E89AD0 CALL 1CEE

1714:4C54 8B5EFE MOV BX,[BP-02]

1714:4C57 8A5701 MOV DL,[BX+01]

1714:4C5A 2AF6 SUB DH,DH

1714:4C5C 03D0 ADD DX,AX

1714:4C5E B103 MOV CL,03

1714:4C60 D3E2 SHL DX,CL

1714:4C62 8956F8 MOV [BP-08],DX

1714:4C65 8A4706 MOV AL,[BX+06]

1714:4C68 2AE4 SUB AH,AH

1714:4C6A 8946FC MOV [BP-04],AX

; call set_text_foreground_color(*13b2)

1714:4C6D FF36B213 PUSH [13B2]

1714:4C71 E856D0 CALL 1CCA

; call set_text_background_color(black)

1714:4C74 2BC0 SUB AX,AX

1714:4C76 50 PUSH AX

1714:4C77 E8ACD2 CALL 1F26

; call print_character(0002 = ?)

1714:4C7A B80200 MOV AX,0002

1714:4C7D 50 PUSH AX

1714:4C7E E839CA CALL 16BA

1714:4C81 FF36B013 PUSH [13B0]

1714:4C85 E8E8BD CALL 0A70

1714:4C88 8B76FA MOV SI,[BP-06]

1714:4C8B 83C605 ADD SI,+05

1714:4C8E FF76FA PUSH [BP-06]

1714:4C91 FF76F8 PUSH [BP-08]

1714:4C94 56 PUSH SI

1714:4C95 8B46F8 MOV AX,[BP-08]

1714:4C98 050300 ADD AX,0003

1714:4C9B 50 PUSH AX

1714:4C9C E871BE CALL 0B10

1714:4C9F 56 PUSH SI

1714:4CA0 8B46F8 MOV AX,[BP-08]

1714:4CA3 050400 ADD AX,0004

1714:4CA6 50 PUSH AX

1714:4CA7 FF76FA PUSH [BP-06]

1714:4CAA 8B46F8 MOV AX,[BP-08]

1714:4CAD 050700 ADD AX,0007

1714:4CB0 50 PUSH AX

1714:4CB1 E85CBE CALL 0B10

; call set_text_foreground_color(bp-4)

1714:4CB4 8B46FC MOV AX,[BP-04]

1714:4CB7 250F00 AND AX,000F

1714:4CBA 50 PUSH AX

1714:4CBB E80CD0 CALL 1CCA

1714:4CBE 8B46FC MOV AX,[BP-04]

1714:4CC1 B104 MOV CL,04

1714:4CC3 D3F8 SAR AX,CL

; call set_text_background_Color(?)

1714:4CC5 50 PUSH AX

1714:4CC6 E85DD2 CALL 1F26

1714:4CC9 5E POP SI

1714:4CCA 8BE5 MOV SP,BP

1714:4CCC 5D POP BP

1714:4CCD C3 RET

}

; 4cce

{

1714:4CCE 55 PUSH BP

1714:4CCF 8BEC MOV BP,SP

1714:4CD1 83EC08 SUB SP,+08

1714:4CD4 57 PUSH DI

1714:4CD5 56 PUSH SI

1714:4CD6 A18653 MOV AX,[5386]

1714:4CD9 B103 MOV CL,03

1714:4CDB D3E0 SHL AX,CL

1714:4CDD 055E53 ADD AX,535E

1714:4CE0 8946FE MOV [BP-02],AX

; call get_current_text_column()

1714:4CE3 E82CD2 CALL 1F12

1714:4CE6 8B5EFE MOV BX,[BP-02]

1714:4CE9 8A17 MOV DL,[BX]

1714:4CEB 2AF6 SUB DH,DH

1714:4CED 03D0 ADD DX,AX

1714:4CEF B103 MOV CL,03

1714:4CF1 D3E2 SHL DX,CL

1714:4CF3 8956FA MOV [BP-06],DX

; call get_current_text_row()

1714:4CF6 E8F5CF CALL 1CEE

1714:4CF9 8B5EFE MOV BX,[BP-02]

1714:4CFC 8A5701 MOV DL,[BX+01]

1714:4CFF 2AF6 SUB DH,DH

1714:4D01 03D0 ADD DX,AX

1714:4D03 B103 MOV CL,03

1714:4D05 D3E2 SHL DX,CL

1714:4D07 8956F8 MOV [BP-08],DX

1714:4D0A 8A4706 MOV AL,[BX+06]

1714:4D0D 2AE4 SUB AH,AH

1714:4D0F 8946FC MOV [BP-04],AX

; call set_foreground_color(*13b2)

1714:4D12 FF36B213 PUSH [13B2]

1714:4D16 E8B1CF CALL 1CCA

; call set_background_color(0)

1714:4D19 2BC0 SUB AX,AX

1714:4D1B 50 PUSH AX

1714:4D1C E807D2 CALL 1F26

; call print_character(0001 = ?)

1714:4D1F B80100 MOV AX,0001

1714:4D22 50 PUSH AX

1714:4D23 E894C9 CALL 16BA

1714:4D26 FF36B013 PUSH [13B0]

1714:4D2A E843BD CALL 0A70

1714:4D2D 8B76FA MOV SI,[BP-06]

1714:4D30 83C602 ADD SI,+02

1714:4D33 8B7EFA MOV DI,[BP-06]

1714:4D36 83C707 ADD DI,+07

1714:4D39 57 PUSH DI

1714:4D3A FF76F8 PUSH [BP-08]

1714:4D3D 56 PUSH SI

1714:4D3E 8B46F8 MOV AX,[BP-08]

1714:4D41 050300 ADD AX,0003

1714:4D44 50 PUSH AX

1714:4D45 E8C8BD CALL 0B10

1714:4D48 56 PUSH SI

1714:4D49 8B46F8 MOV AX,[BP-08]

1714:4D4C 050400 ADD AX,0004

1714:4D4F 50 PUSH AX

1714:4D50 57 PUSH DI

1714:4D51 8B46F8 MOV AX,[BP-08]

1714:4D54 050700 ADD AX,0007

1714:4D57 50 PUSH AX

1714:4D58 E8B5BD CALL 0B10

1714:4D5B 8B46FC MOV AX,[BP-04]

1714:4D5E 250F00 AND AX,000F

1714:4D61 50 PUSH AX

1714:4D62 E865CF CALL 1CCA

1714:4D65 8B46FC MOV AX,[BP-04]

1714:4D68 B104 MOV CL,04

1714:4D6A D3F8 SAR AX,CL

1714:4D6C 50 PUSH AX

1714:4D6D E8B6D1 CALL 1F26

1714:4D70 5E POP SI

1714:4D71 5F POP DI

1714:4D72 8BE5 MOV SP,BP

1714:4D74 5D POP BP

1714:4D75 C3 RET

}

1714:4D76 55 PUSH BP

1714:4D77 8BEC MOV BP,SP

1714:4D79 83EC02 SUB SP,+02

1714:4D7C 56 PUSH SI

1714:4D7D 2BC9 SUB CX,CX

1714:4D7F 8B7604 MOV SI,[BP+04]

1714:4D82 8B5606 MOV DX,[BP+06]

1714:4D85 EB02 JMP 4D89

1714:4D87 90 NOP

1714:4D88 41 INC CX

1714:4D89 8BD9 MOV BX,CX

1714:4D8B 03DA ADD BX,DX

1714:4D8D 803F00 CMP BYTE PTR [BX],00

1714:4D90 740C JZ 4D9E

1714:4D92 8BD9 MOV BX,CX

1714:4D94 03DA ADD BX,DX

1714:4D96 8A07 MOV AL,[BX]

1714:4D98 2AE4 SUB AH,AH

1714:4D9A 3BC6 CMP AX,SI

1714:4D9C 75EA JNZ 4D88

1714:4D9E 894EFE MOV [BP-02],CX

1714:4DA1 8BC1 MOV AX,CX

1714:4DA3 5E POP SI

1714:4DA4 8BE5 MOV SP,BP

1714:4DA6 5D POP BP

1714:4DA7 C20400 RET 0004

}

1714:4DAA FF36B213 PUSH [13B2]

1714:4DAE E8BFBC CALL 0A70

1714:4DB1 B8F000 MOV AX,00F0

1714:4DB4 50 PUSH AX

1714:4DB5 B85100 MOV AX,0051

1714:4DB8 50 PUSH AX

1714:4DB9 B80701 MOV AX,0107

1714:4DBC 50 PUSH AX

1714:4DBD B85600 MOV AX,0056

1714:4DC0 50 PUSH AX

1714:4DC1 E8E2BC CALL 0AA6

1714:4DC4 FF36B013 PUSH [13B0]

1714:4DC8 E8A5BC CALL 0A70

1714:4DCB B8F000 MOV AX,00F0

1714:4DCE 50 PUSH AX

1714:4DCF B85000 MOV AX,0050

1714:4DD2 50 PUSH AX

1714:4DD3 B80701 MOV AX,0107

1714:4DD6 50 PUSH AX

1714:4DD7 E8C2BE CALL 0C9C

1714:4DDA B8F000 MOV AX,00F0

1714:4DDD 50 PUSH AX

1714:4DDE B85700 MOV AX,0057

1714:4DE1 50 PUSH AX

1714:4DE2 B80701 MOV AX,0107

1714:4DE5 50 PUSH AX

1714:4DE6 E8B3BE CALL 0C9C

1714:4DE9 C3 RET

1714:4DEA 55 PUSH BP

1714:4DEB 8BEC MOV BP,SP

1714:4DED 83EC02 SUB SP,+02

1714:4DF0 A18653 MOV AX,[5386]

1714:4DF3 8946FE MOV [BP-02],AX

1714:4DF6 2BC0 SUB AX,AX

1714:4DF8 50 PUSH AX

1714:4DF9 E898CD CALL 1B94

1714:4DFC B81E00 MOV AX,001E

1714:4DFF 50 PUSH AX

1714:4E00 B80A00 MOV AX,000A

1714:4E03 50 PUSH AX

1714:4E04 E8EBCD CALL 1BF2

1714:4E07 E820FE CALL 4C2A

1714:4E0A FF7604 PUSH [BP+04]

1714:4E0D E8AAC8 CALL 16BA

1714:4E10 E8BBFE CALL 4CCE

1714:4E13 FF76FE PUSH [BP-02]

1714:4E16 E87BCD CALL 1B94

1714:4E19 8BE5 MOV SP,BP

1714:4E1B 5D POP BP

1714:4E1C C20200 RET 0002

1714:4E1F 90 NOP

1714:4E20 FF36B213 PUSH [13B2]

1714:4E24 E849BC CALL 0A70

1714:4E27 B8C000 MOV AX,00C0

1714:4E2A 50 PUSH AX

1714:4E2B 2BC0 SUB AX,AX

1714:4E2D 50 PUSH AX

1714:4E2E B83701 MOV AX,0137

1714:4E31 50 PUSH AX

1714:4E32 B80600 MOV AX,0006

1714:4E35 50 PUSH AX

1714:4E36 E86DBC CALL 0AA6

1714:4E39 FF36B013 PUSH [13B0]

1714:4E3D E830BC CALL 0A70

1714:4E40 B8C000 MOV AX,00C0

1714:4E43 50 PUSH AX

1714:4E44 B80700 MOV AX,0007

1714:4E47 50 PUSH AX

1714:4E48 B83701 MOV AX,0137

1714:4E4B 50 PUSH AX

1714:4E4C E84DBE CALL 0C9C

1714:4E4F C3 RET

1714:4E50 55 PUSH BP

1714:4E51 8BEC MOV BP,SP

1714:4E53 83EC06 SUB SP,+06

1714:4E56 57 PUSH DI

1714:4E57 56 PUSH SI

1714:4E58 FF7604 PUSH [BP+04]

1714:4E5B E80ED3 CALL 216C

1714:4E5E 99 CWD

1714:4E5F 2BC2 SUB AX,DX

1714:4E61 D1F8 SAR AX,1

1714:4E63 2D1E00 SUB AX,001E

1714:4E66 F7D8 NEG AX

1714:4E68 8946FA MOV [BP-06],AX

1714:4E6B FF7604 PUSH [BP+04]

1714:4E6E E8FBD2 CALL 216C

1714:4E71 0346FA ADD AX,[BP-06]

1714:4E74 050200 ADD AX,0002

1714:4E77 8946FE MOV [BP-02],AX

1714:4E7A FF36B213 PUSH [13B2]

1714:4E7E E8EFBB CALL 0A70

1714:4E81 8B76FA MOV SI,[BP-06]

1714:4E84 B103 MOV CL,03

1714:4E86 D3E6 SHL SI,CL

1714:4E88 B8C000 MOV AX,00C0

1714:4E8B 50 PUSH AX

1714:4E8C 2BC0 SUB AX,AX

1714:4E8E 50 PUSH AX

1714:4E8F 56 PUSH SI

1714:4E90 B80600 MOV AX,0006

1714:4E93 50 PUSH AX

1714:4E94 E80FBC CALL 0AA6

1714:4E97 8B7EFE MOV DI,[BP-02]

1714:4E9A B103 MOV CL,03

1714:4E9C D3E7 SHL DI,CL

1714:4E9E 57 PUSH DI

1714:4E9F 2BC0 SUB AX,AX

1714:4EA1 50 PUSH AX

1714:4EA2 B83701 MOV AX,0137

1714:4EA5 50 PUSH AX

1714:4EA6 B80600 MOV AX,0006

1714:4EA9 50 PUSH AX

1714:4EAA E8F9BB CALL 0AA6

1714:4EAD FF36B013 PUSH [13B0]

1714:4EB1 E8BCBB CALL 0A70

1714:4EB4 B8C000 MOV AX,00C0

1714:4EB7 50 PUSH AX

1714:4EB8 B80700 MOV AX,0007

1714:4EBB 50 PUSH AX

1714:4EBC 56 PUSH SI

1714:4EBD E8DCBD CALL 0C9C

1714:4EC0 57 PUSH DI

1714:4EC1 B80700 MOV AX,0007

1714:4EC4 50 PUSH AX

1714:4EC5 B83701 MOV AX,0137

1714:4EC8 50 PUSH AX

1714:4EC9 E8D0BD CALL 0C9C

1714:4ECC A18653 MOV AX,[5386]

1714:4ECF 8946FC MOV [BP-04],AX

1714:4ED2 2BC0 SUB AX,AX

1714:4ED4 50 PUSH AX

1714:4ED5 E8BCCC CALL 1B94

1714:4ED8 FF76FA PUSH [BP-06]

1714:4EDB 2BC0 SUB AX,AX

1714:4EDD 50 PUSH AX

1714:4EDE E811CD CALL 1BF2

1714:4EE1 E846FD CALL 4C2A

1714:4EE4 FF7604 PUSH [BP+04]

1714:4EE7 E866C9 CALL 1850

1714:4EEA E8E1FD CALL 4CCE

1714:4EED FF76FC PUSH [BP-04]

1714:4EF0 E8A1CC CALL 1B94

1714:4EF3 5E POP SI

1714:4EF4 5F POP DI

1714:4EF5 8BE5 MOV SP,BP

1714:4EF7 5D POP BP

1714:4EF8 C20200 RET 0002

1714:4EFB 90 NOP

1714:4EFC FF36B013 PUSH [13B0]

1714:4F00 E86DBB CALL 0A70

1714:4F03 B8BF00 MOV AX,00BF

1714:4F06 50 PUSH AX

1714:4F07 B83800 MOV AX,0038

1714:4F0A 50 PUSH AX

1714:4F0B B83F00 MOV AX,003F

1714:4F0E 50 PUSH AX

1714:4F0F E8E0BD CALL 0CF2

1714:4F12 B83801 MOV AX,0138

1714:4F15 50 PUSH AX

1714:4F16 B83800 MOV AX,0038

1714:4F19 50 PUSH AX

1714:4F1A B83F00 MOV AX,003F

1714:4F1D 50 PUSH AX

1714:4F1E E8D1BD CALL 0CF2

1714:4F21 2BC0 SUB AX,AX

1714:4F23 50 PUSH AX

1714:4F24 E849BB CALL 0A70

1714:4F27 B8C000 MOV AX,00C0

1714:4F2A 50 PUSH AX

1714:4F2B B83800 MOV AX,0038

1714:4F2E 50 PUSH AX

1714:4F2F B83701 MOV AX,0137

1714:4F32 50 PUSH AX

1714:4F33 B83F00 MOV AX,003F

1714:4F36 50 PUSH AX

1714:4F37 E86CBB CALL 0AA6

1714:4F3A C3 RET

1714:4F3B 90 NOP

1714:4F3C FF36B213 PUSH [13B2]

1714:4F40 E82DBB CALL 0A70

1714:4F43 B8BF00 MOV AX,00BF

1714:4F46 50 PUSH AX

1714:4F47 B83900 MOV AX,0039

1714:4F4A 50 PUSH AX

1714:4F4B B83801 MOV AX,0138

1714:4F4E 50 PUSH AX

1714:4F4F B83E00 MOV AX,003E

1714:4F52 50 PUSH AX

1714:4F53 E850BB CALL 0AA6

1714:4F56 FF36B013 PUSH [13B0]

1714:4F5A E813BB CALL 0A70

1714:4F5D B8C000 MOV AX,00C0

1714:4F60 50 PUSH AX

1714:4F61 B83800 MOV AX,0038

1714:4F64 50 PUSH AX

1714:4F65 B83701 MOV AX,0137

1714:4F68 50 PUSH AX

1714:4F69 E830BD CALL 0C9C

1714:4F6C B8C000 MOV AX,00C0

1714:4F6F 50 PUSH AX

1714:4F70 B83F00 MOV AX,003F

1714:4F73 50 PUSH AX

1714:4F74 B83701 MOV AX,0137

1714:4F77 50 PUSH AX

1714:4F78 E821BD CALL 0C9C

1714:4F7B C3 RET

; 4f7c

{

1714:4F7C 55 PUSH BP

1714:4F7D 8BEC MOV BP,SP

1714:4F7F 83EC0A SUB SP,+0A

1714:4F82 57 PUSH DI

1714:4F83 56 PUSH SI

1714:4F84 837E0400 CMP WORD PTR [BP+04],+00

1714:4F88 7503 JNZ 4F8D

1714:4F8A E91401 JMP 50A1

1714:4F8D 803E7A5851 CMP BYTE PTR [587A],51

1714:4F92 750C JNZ 4FA0

1714:4F94 D17E04 SAR WORD PTR [BP+04],1

1714:4F97 837E0400 CMP WORD PTR [BP+04],+00

1714:4F9B 7503 JNZ 4FA0

1714:4F9D FF4604 INC WORD PTR [BP+04]

1714:4FA0 A07F58 MOV AL,[587F]

1714:4FA3 A28058 MOV [5880],AL

1714:4FA6 803E7A5854 CMP BYTE PTR [587A],54

1714:4FAB 741B JZ 4FC8

1714:4FAD 8A4604 MOV AL,[BP+04]

1714:4FB0 00068158 ADD [5881],AL

1714:4FB4 B8A758 MOV AX,58A7

1714:4FB7 50 PUSH AX

1714:4FB8 FF7604 PUSH [BP+04]

1714:4FBB E878EF CALL 3F36

1714:4FBE B8A658 MOV AX,58A6

1714:4FC1 50 PUSH AX

1714:4FC2 FF7604 PUSH [BP+04]

1714:4FC5 E86EEF CALL 3F36

1714:4FC8 803E81583B CMP BYTE PTR [5881],3B

1714:4FCD 7703 JA 4FD2

1714:4FCF E9CF00 JMP 50A1

1714:4FD2 802E81583C SUB BYTE PTR [5881],3C

1714:4FD7 B88C58 MOV AX,588C

1714:4FDA 50 PUSH AX

1714:4FDB B80100 MOV AX,0001

1714:4FDE 50 PUSH AX

1714:4FDF E854EF CALL 3F36

1714:4FE2 FE067F58 INC BYTE PTR [587F]

1714:4FE6 803E7F5817 CMP BYTE PTR [587F],17

1714:4FEB 7703 JA 4FF0

1714:4FED E9B100 JMP 50A1

1714:4FF0 C6067F5800 MOV BYTE PTR [587F],00

1714:4FF5 C746FC0000 MOV WORD PTR [BP-04],0000

1714:4FFA 8B5EFC MOV BX,[BP-04]

1714:4FFD 80BFC85880 CMP BYTE PTR [BX+58C8],80

1714:5002 7344 JNB 5048

1714:5004 B80100 MOV AX,0001

1714:5007 50 PUSH AX

1714:5008 B80800 MOV AX,0008

1714:500B 50 PUSH AX

1714:500C E883D0 CALL 2092

1714:500F 8BF8 MOV DI,AX

; set ax = map id

1714:5011 A09358 MOV AL,[5893]

1714:5014 2AE4 SUB AH,AH

; if di == map id, clear di

1714:5016 3BC7 CMP AX,DI

1714:5018 7502 JNZ 501C

1714:501A 2BFF SUB DI,DI

; clear si

1714:501C 2BF6 SUB SI,SI

1714:501E 8BCF MOV CX,DI

1714:5020 8A84C858 MOV AL,[SI+58C8]

1714:5024 2AE4 SUB AH,AH

1714:5026 3BC1 CMP AX,CX

1714:5028 7502 JNZ 502C

1714:502A 2BC9 SUB CX,CX

1714:502C 46 INC SI

1714:502D 83FE03 CMP SI,+03

1714:5030 7CEE JL 5020

1714:5032 8976FA MOV [BP-06],SI

1714:5035 8BF9 MOV DI,CX

1714:5037 0BFF OR DI,DI

1714:5039 74C9 JZ 5004

1714:503B 897EFE MOV [BP-02],DI

1714:503E 8B5EFC MOV BX,[BP-04]

1714:5041 8A46FE MOV AL,[BP-02]

1714:5044 8887C858 MOV [BX+58C8],AL

1714:5048 FF46FC INC WORD PTR [BP-04]

1714:504B 837EFC03 CMP WORD PTR [BP-04],+03

1714:504F 7CA9 JL 4FFA

1714:5051 FE067E58 INC BYTE PTR [587E]

1714:5055 803E7E581C CMP BYTE PTR [587E],1C

1714:505A 7642 JBE 509E

1714:505C 2AC0 SUB AL,AL

1714:505E A25A58 MOV [585A],AL

1714:5061 A25958 MOV [5859],AL

1714:5064 A25858 MOV [5858],AL

1714:5067 A2B257 MOV [57B2],AL

1714:506A C6067E5801 MOV BYTE PTR [587E],01

1714:506F A25959 MOV [5959],AL

1714:5072 C746FC1000 MOV WORD PTR [BP-04],0010

1714:5077 BEBF55 MOV SI,55BF

1714:507A 803C19 CMP BYTE PTR [SI],19

1714:507D 7302 JNB 5081

1714:507F FE04 INC BYTE PTR [SI]

1714:5081 83C620 ADD SI,+20

1714:5084 81FEBF57 CMP SI,57BF

1714:5088 72F0 JB 507A

1714:508A FE067D58 INC BYTE PTR [587D]

1714:508E 803E7D580D CMP BYTE PTR [587D],0D

1714:5093 7609 JBE 509E

1714:5095 C6067D5801 MOV BYTE PTR [587D],01

1714:509A FF067458 INC WORD PTR [5874]

; call draw_borders()

1714:509E E85FD8 CALL 2900

1714:50A1 803EA55833 CMP BYTE PTR [58A5],33

1714:50A6 7203 JB 50AB

1714:50A8 E99F00 JMP 514A

1714:50AB A0A558 MOV AL,[58A5]

1714:50AE 2AE4 SUB AH,AH

1714:50B0 8946F8 MOV [BP-08],AX

; if map id == Ararat, jump to 50cf

1714:50B3 803E935819 CMP BYTE PTR [5893],19

1714:50B8 7415 JZ 50CF

; if level > 7f, jump to 50cf

1714:50BA 803E95587F CMP BYTE PTR [5895],7F

1714:50BF 770E JA 50CF

1714:50C1 803E7F5805 CMP BYTE PTR [587F],05

1714:50C6 7207 JB 50CF

1714:50C8 803E7F5813 CMP BYTE PTR [587F],13

1714:50CD 7607 JBE 50D6

; set *5a85 = 02

1714:50CF C606A55802 MOV BYTE PTR [58A5],02

; jump to 5115

1714:50D4 EB3F JMP 5115

1714:50D6 803E7F5805 CMP BYTE PTR [587F],05

1714:50DB 7517 JNZ 50F4

1714:50DD A08158 MOV AL,[5881]

1714:50E0 2AE4 SUB AH,AH

1714:50E2 B10A MOV CL,0A

1714:50E4 F6F1 DIV CL

1714:50E6 8AD8 MOV BL,AL

1714:50E8 2AFF SUB BH,BH

1714:50EA 8A87806A MOV AL,[BX+6A80]

1714:50EE A2A558 MOV [58A5],AL

1714:50F1 EB22 JMP 5115

1714:50F3 90 NOP

1714:50F4 803E7F5813 CMP BYTE PTR [587F],13

1714:50F9 7515 JNZ 5110

1714:50FB A08158 MOV AL,[5881]

1714:50FE 2AE4 SUB AH,AH

1714:5100 2D3B00 SUB AX,003B

1714:5103 F7D8 NEG AX

1714:5105 2BD2 SUB DX,DX

1714:5107 B90A00 MOV CX,000A

1714:510A F7F1 DIV CX

1714:510C 8BD8 MOV BX,AX

1714:510E EBDA JMP 50EA

1714:5110 C606A55832 MOV BYTE PTR [58A5],32

1714:5115 803EA65800 CMP BYTE PTR [58A6],00

1714:511A 740C JZ 5128

1714:511C 803EA55812 CMP BYTE PTR [58A5],12

1714:5121 7305 JNB 5128

1714:5123 C606A55812 MOV BYTE PTR [58A5],12

1714:5128 803EA75800 CMP BYTE PTR [58A7],00

1714:512D 740C JZ 513B

1714:512F 803EA5580A CMP BYTE PTR [58A5],0A

1714:5134 7305 JNB 513B

1714:5136 C606A5580A MOV BYTE PTR [58A5],0A

1714:513B A0A558 MOV AL,[58A5]

1714:513E 2AE4 SUB AH,AH

1714:5140 3946F8 CMP [BP-08],AX

1714:5143 7405 JZ 514A

1714:5145 C606E62401 MOV BYTE PTR [24E6],01

1714:514A A08058 MOV AL,[5880]

1714:514D 38067F58 CMP [587F],AL

1714:5151 7433 JZ 5186

1714:5153 803E935821 CMP BYTE PTR [5893],21

1714:5158 730A JNB 5164

1714:515A 803E955880 CMP BYTE PTR [5895],80

1714:515F 7303 JNB 5164

; call 4a84

1714:5161 E820F9 CALL 4A84

1714:5164 803E7F5800 CMP BYTE PTR [587F],00

1714:5169 7507 JNZ 5172

1714:516B C60684580C MOV BYTE PTR [5884],0C

1714:5170 EB14 JMP 5186

1714:5172 803E7F580C CMP BYTE PTR [587F],0C

1714:5177 7607 JBE 5180

1714:5179 A07F58 MOV AL,[587F]

1714:517C 2C0C SUB AL,0C

1714:517E EB03 JMP 5183

1714:5180 A07F58 MOV AL,[587F]

1714:5183 A28458 MOV [5884],AL

; if map id is dungeon or overworld, return at 5197

1714:5186 803E935800 CMP BYTE PTR [5893],00

1714:518B 740A JZ 5197

1714:518D 803E935821 CMP BYTE PTR [5893],21

1714:5192 7303 JNB 5197

; call 71aa

1714:5194 E81320 CALL 71AA

1714:5197 5E POP SI

1714:5198 5F POP DI

1714:5199 8BE5 MOV SP,BP

1714:519B 5D POP BP

1714:519C C20200 RET 0002

}

1714:519F 90 NOP

1714:51A0 803E7A5854 CMP BYTE PTR [587A],54

1714:51A5 7505 JNZ 51AC

1714:51A7 2BC0 SUB AX,AX

1714:51A9 EB0B JMP 51B6

1714:51AB 90 NOP

1714:51AC 2BC0 SUB AX,AX

1714:51AE 50 PUSH AX

1714:51AF B80300 MOV AX,0003

1714:51B2 50 PUSH AX

1714:51B3 E8DCCE CALL 2092

1714:51B6 C3 RET

1714:51B7 90 NOP

1714:51B8 55 PUSH BP

1714:51B9 8BEC MOV BP,SP

1714:51BB 83EC02 SUB SP,+02

1714:51BE 56 PUSH SI

1714:51BF 837E041C CMP WORD PTR [BP+04],+1C

1714:51C3 7424 JZ 51E9

1714:51C5 837E0412 CMP WORD PTR [BP+04],+12

1714:51C9 7C06 JL 51D1

1714:51CB 837E0416 CMP WORD PTR [BP+04],+16

1714:51CF 7C18 JL 51E9

1714:51D1 837E0440 CMP WORD PTR [BP+04],+40

1714:51D5 7D12 JGE 51E9

1714:51D7 837E0428 CMP WORD PTR [BP+04],+28

1714:51DB 7D03 JGE 51E0

1714:51DD E99001 JMP 5370

1714:51E0 837E042C CMP WORD PTR [BP+04],+2C

1714:51E4 7C03 JL 51E9

1714:51E6 E98701 JMP 5370

1714:51E9 FF7608 PUSH [BP+08]

1714:51EC FF7606 PUSH [BP+06]

1714:51EF E810F2 CALL 4402

1714:51F2 8BD8 MOV BX,AX

1714:51F4 8A07 MOV AL,[BX]

1714:51F6 2AE4 SUB AH,AH

1714:51F8 8946FE MOV [BP-02],AX

1714:51FB 3DEC00 CMP AX,00EC

1714:51FE 7503 JNZ 5203

1714:5200 E98A01 JMP 538D

1714:5203 3D0A00 CMP AX,000A

1714:5206 7503 JNZ 520B

1714:5208 E98201 JMP 538D

1714:520B 3D5700 CMP AX,0057

1714:520E 7512 JNZ 5222

1714:5210 8B760A MOV SI,[BP+0A]

1714:5213 B105 MOV CL,05

1714:5215 D3E6 SHL SI,CL

1714:5217 8B5E0C MOV BX,[BP+0C]

1714:521A C68002AB38 MOV BYTE PTR [BX+SI+AB02],38

1714:521F E96B01 JMP 538D

1714:5222 837EFE6A CMP WORD PTR [BP-02],+6A

1714:5226 7406 JZ 522E

1714:5228 837EFE6B CMP WORD PTR [BP-02],+6B

1714:522C 751C JNZ 524A

1714:522E 8A4604 MOV AL,[BP+04]

1714:5231 24F0 AND AL,F0

1714:5233 3C80 CMP AL,80

1714:5235 7503 JNZ 523A

1714:5237 E95301 JMP 538D

1714:523A 8A4604 MOV AL,[BP+04]

1714:523D 24FC AND AL,FC

1714:523F 3C28 CMP AL,28

1714:5241 7403 JZ 5246

1714:5243 E92A01 JMP 5370

1714:5246 E94401 JMP 538D

1714:5249 90 NOP

1714:524A 817E048000 CMP WORD PTR [BP+04],0080

1714:524F 7C03 JL 5254

1714:5251 E91C01 JMP 5370

1714:5254 8B46FE MOV AX,[BP-02]

1714:5257 3D9200 CMP AX,0092

1714:525A 744E JZ 52AA

1714:525C 7E03 JLE 5261

1714:525E E9B900 JMP 531A

1714:5261 3D8400 CMP AX,0084

1714:5264 7410 JZ 5276

1714:5266 3D8500 CMP AX,0085

1714:5269 7415 JZ 5280

1714:526B 3D9000 CMP AX,0090

1714:526E 746A JZ 52DA

1714:5270 3D9100 CMP AX,0091

1714:5273 E9B400 JMP 532A

1714:5276 E827FF CALL 51A0

1714:5279 056000 ADD AX,0060

1714:527C E98100 JMP 5300

1714:527F 90 NOP

1714:5280 E81DFF CALL 51A0

1714:5283 056400 ADD AX,0064

1714:5286 EB78 JMP 5300

1714:5288 90 NOP

1714:5289 90 NOP

1714:528A C746041700 MOV WORD PTR [BP+04],0017

1714:528F E9DE00 JMP 5370

1714:5292 C746041800 MOV WORD PTR [BP+04],0018

1714:5297 E9D600 JMP 5370

1714:529A C746041A00 MOV WORD PTR [BP+04],001A

1714:529F E9CE00 JMP 5370

1714:52A2 E8FBFE CALL 51A0

1714:52A5 053C00 ADD AX,003C

1714:52A8 EB56 JMP 5300

1714:52AA 8B7606 MOV SI,[BP+06]

1714:52AD 46 INC SI

1714:52AE FF7608 PUSH [BP+08]

1714:52B1 56 PUSH SI

1714:52B2 E84DF1 CALL 4402

1714:52B5 8BD8 MOV BX,AX

1714:52B7 803F9A CMP BYTE PTR [BX],9A

1714:52BA 740E JZ 52CA

1714:52BC FF7608 PUSH [BP+08]

1714:52BF 56 PUSH SI

1714:52C0 E83FF1 CALL 4402

1714:52C3 8BD8 MOV BX,AX

1714:52C5 803F9C CMP BYTE PTR [BX],9C

1714:52C8 7508 JNZ 52D2

1714:52CA E8D3FE CALL 51A0

1714:52CD 053400 ADD AX,0034

1714:52D0 EB2E JMP 5300

1714:52D2 C746043200 MOV WORD PTR [BP+04],0032

1714:52D7 E99600 JMP 5370

1714:52DA 8B7606 MOV SI,[BP+06]

1714:52DD 4E DEC SI

1714:52DE FF7608 PUSH [BP+08]

1714:52E1 56 PUSH SI

1714:52E2 E81DF1 CALL 4402

1714:52E5 8BD8 MOV BX,AX

1714:52E7 803F9B CMP BYTE PTR [BX],9B

1714:52EA 740E JZ 52FA

1714:52EC FF7608 PUSH [BP+08]

1714:52EF 56 PUSH SI

1714:52F0 E80FF1 CALL 4402

1714:52F3 8BD8 MOV BX,AX

1714:52F5 803F9C CMP BYTE PTR [BX],9C

1714:52F8 750C JNZ 5306

1714:52FA E8A3FE CALL 51A0

1714:52FD 053800 ADD AX,0038

1714:5300 894604 MOV [BP+04],AX

1714:5303 EB6B JMP 5370

1714:5305 90 NOP

1714:5306 C746043000 MOV WORD PTR [BP+04],0030

1714:530B EB63 JMP 5370

1714:530D 90 NOP

1714:530E 8B46FE MOV AX,[BP-02]

1714:5311 250300 AND AX,0003

1714:5314 053000 ADD AX,0030

1714:5317 EBE7 JMP 5300

1714:5319 90 NOP

1714:531A 3D9E00 CMP AX,009E

1714:531D 7F37 JG 5356

1714:531F 3D9D00 CMP AX,009D

1714:5322 7C03 JL 5327

1714:5324 E97BFF JMP 52A2

1714:5327 3D9300 CMP AX,0093

1714:532A 74E2 JZ 530E

1714:532C FF7608 PUSH [BP+08]

1714:532F 8B4606 MOV AX,[BP+06]

1714:5332 48 DEC AX

1714:5333 50 PUSH AX

1714:5334 E8CBF0 CALL 4402

1714:5337 8BD8 MOV BX,AX

1714:5339 803F9D CMP BYTE PTR [BX],9D

1714:533C 7532 JNZ 5370

1714:533E 837E0A00 CMP WORD PTR [BP+0A],+00

1714:5342 742C JZ 5370

1714:5344 8B760A MOV SI,[BP+0A]

1714:5347 B105 MOV CL,05

1714:5349 D3E6 SHL SI,CL

1714:534B 8B5E0C MOV BX,[BP+0C]

1714:534E C680E2AA9E MOV BYTE PTR [BX+SI+AAE2],9E

1714:5353 EB1B JMP 5370

1714:5355 90 NOP

1714:5356 3DAB00 CMP AX,00AB

1714:5359 7503 JNZ 535E

1714:535B E93CFF JMP 529A

1714:535E 3DC800 CMP AX,00C8

1714:5361 7503 JNZ 5366

1714:5363 E924FF JMP 528A

1714:5366 3DC900 CMP AX,00C9

1714:5369 7503 JNZ 536E

1714:536B E924FF JMP 5292

1714:536E EBBC JMP 532C

1714:5370 8B760A MOV SI,[BP+0A]

1714:5373 B104 MOV CL,04

1714:5375 D3E6 SHL SI,CL

1714:5377 8B5E0C MOV BX,[BP+0C]

1714:537A 8A4604 MOV AL,[BP+04]

1714:537D 888064AC MOV [BX+SI+AC64],AL

1714:5381 8B760A MOV SI,[BP+0A]

1714:5384 B105 MOV CL,05

1714:5386 D3E6 SHL SI,CL

1714:5388 C68002AB00 MOV BYTE PTR [BX+SI+AB02],00

1714:538D 5E POP SI

1714:538E 8BE5 MOV SP,BP

1714:5390 5D POP BP

1714:5391 C20A00 RET 000A

1714:5394 55 PUSH BP

1714:5395 8BEC MOV BP,SP

1714:5397 83EC32 SUB SP,+32

1714:539A 57 PUSH DI

1714:539B 56 PUSH SI

1714:539C 803E935880 CMP BYTE PTR [5893],80

1714:53A1 7203 JB 53A6

1714:53A3 E98400 JMP 542A

1714:53A6 A09658 MOV AL,[5896]

1714:53A9 A25C5C MOV [5C5C],AL

1714:53AC A09758 MOV AL,[5897]

1714:53AF A25D5C MOV [5C5D],AL

1714:53B2 A09558 MOV AL,[5895]

1714:53B5 A25E5C MOV [5C5E],AL

1714:53B8 A07C58 MOV AL,[587C]

1714:53BB A25A5C MOV [5C5A],AL

1714:53BE A25B5C MOV [5C5B],AL

1714:53C1 C746F40000 MOV WORD PTR [BP-0C],0000

1714:53C6 C746EE0000 MOV WORD PTR [BP-12],0000

1714:53CB 2BF6 SUB SI,SI

1714:53CD 8B7EEE MOV DI,[BP-12]

1714:53D0 897EF0 MOV [BP-10],DI

1714:53D3 8B5EF0 MOV BX,[BP-10]

1714:53D6 80B802ABDD CMP BYTE PTR [BX+SI+AB02],DD

1714:53DB 7517 JNZ 53F4

1714:53DD 56 PUSH SI

1714:53DE FF76F4 PUSH [BP-0C]

1714:53E1 E80C1C CALL 6FF0

1714:53E4 3D0500 CMP AX,0005

1714:53E7 7E0B JLE 53F4

1714:53E9 8B5EF0 MOV BX,[BP-10]

1714:53EC C68002AB1C MOV BYTE PTR [BX+SI+AB02],1C

1714:53F1 EB21 JMP 5414

1714:53F3 90 NOP

1714:53F4 8BDF MOV BX,DI

1714:53F6 03DE ADD BX,SI

1714:53F8 80BF02AB1C CMP BYTE PTR [BX+AB02],1C

1714:53FD 7515 JNZ 5414

1714:53FF 56 PUSH SI

1714:5400 FF76F4 PUSH [BP-0C]

1714:5403 E8EA1B CALL 6FF0

1714:5406 3D0500 CMP AX,0005

1714:5409 7F09 JG 5414

1714:540B 8BDF MOV BX,DI

1714:540D 03DE ADD BX,SI

1714:540F C68702ABDD MOV BYTE PTR [BX+AB02],DD

1714:5414 46 INC SI

1714:5415 83FE0B CMP SI,+0B

1714:5418 7CB9 JL 53D3

1714:541A 8976F6 MOV [BP-0A],SI

1714:541D 8346EE20 ADD WORD PTR [BP-12],+20

1714:5421 FF46F4 INC WORD PTR [BP-0C]

1714:5424 837EF40B CMP WORD PTR [BP-0C],+0B

1714:5428 7CA1 JL 53CB

1714:542A C746F61F00 MOV WORD PTR [BP-0A],001F

1714:542F C746EE525D MOV WORD PTR [BP-12],5D52

1714:5434 C746F0545D MOV WORD PTR [BP-10],5D54

1714:5439 C746F2555D MOV WORD PTR [BP-0E],5D55

1714:543E C746EC565D MOV WORD PTR [BP-14],5D56

1714:5443 C746EA535D MOV WORD PTR [BP-16],5D53

1714:5448 BE525D MOV SI,5D52

1714:544B C746E6535D MOV WORD PTR [BP-1A],5D53

1714:5450 BF535D MOV DI,5D53

1714:5453 897EE2 MOV [BP-1E],DI

1714:5456 8976E0 MOV [BP-20],SI

1714:5459 897EDE MOV [BP-22],DI

1714:545C 897EDC MOV [BP-24],DI

1714:545F 897EDA MOV [BP-26],DI

1714:5462 8B5EEE MOV BX,[BP-12]

1714:5465 803F00 CMP BYTE PTR [BX],00

1714:5468 7503 JNZ 546D

1714:546A E99401 JMP 5601

1714:546D 8B5EF0 MOV BX,[BP-10]

1714:5470 8A07 MOV AL,[BX]

1714:5472 8846FE MOV [BP-02],AL

1714:5475 8846FA MOV [BP-06],AL

1714:5478 8B5EF2 MOV BX,[BP-0E]

1714:547B 8A07 MOV AL,[BX]

1714:547D 8846FC MOV [BP-04],AL

1714:5480 8846F8 MOV [BP-08],AL

1714:5483 803E935880 CMP BYTE PTR [5893],80

1714:5488 732F JNB 54B9

1714:548A A09658 MOV AL,[5896]

1714:548D 2C05 SUB AL,05

1714:548F 2846FA SUB [BP-06],AL

1714:5492 A09758 MOV AL,[5897]

1714:5495 2C05 SUB AL,05

1714:5497 2846F8 SUB [BP-08],AL

1714:549A 8B5EEC MOV BX,[BP-14]

1714:549D A09558 MOV AL,[5895]

1714:54A0 3807 CMP [BX],AL

1714:54A2 7403 JZ 54A7

1714:54A4 E95A01 JMP 5601

1714:54A7 807EFA0A CMP BYTE PTR [BP-06],0A

1714:54AB 7603 JBE 54B0

1714:54AD E95101 JMP 5601

1714:54B0 807EF80A CMP BYTE PTR [BP-08],0A

1714:54B4 7603 JBE 54B9

1714:54B6 E94801 JMP 5601

1714:54B9 8B5EEA MOV BX,[BP-16]

1714:54BC 803F00 CMP BYTE PTR [BX],00

1714:54BF 7503 JNZ 54C4

1714:54C1 E93D01 JMP 5601

1714:54C4 8A5EF8 MOV BL,[BP-08]

1714:54C7 2AFF SUB BH,BH

1714:54C9 B105 MOV CL,05

1714:54CB D3E3 SHL BX,CL

1714:54CD 8A46FA MOV AL,[BP-06]

1714:54D0 2AE4 SUB AH,AH

1714:54D2 03D8 ADD BX,AX

1714:54D4 80BF02ABFF CMP BYTE PTR [BX+AB02],FF

1714:54D9 7503 JNZ 54DE

1714:54DB E92301 JMP 5601

1714:54DE 8A5EF8 MOV BL,[BP-08]

1714:54E1 2AFF SUB BH,BH

1714:54E3 D3E3 SHL BX,CL

1714:54E5 03D8 ADD BX,AX

1714:54E7 80BF02AB87 CMP BYTE PTR [BX+AB02],87

1714:54EC 7503 JNZ 54F1

1714:54EE E91001 JMP 5601

1714:54F1 8A04 MOV AL,[SI]

1714:54F3 24FC AND AL,FC

1714:54F5 3CE8 CMP AL,E8

1714:54F7 740A JZ 5503

1714:54F9 803C1E CMP BYTE PTR [SI],1E

1714:54FC 7405 JZ 5503

1714:54FE 803C1F CMP BYTE PTR [SI],1F

1714:5501 7547 JNZ 554A

1714:5503 8A5EF8 MOV BL,[BP-08]

1714:5506 2AFF SUB BH,BH

1714:5508 B105 MOV CL,05

1714:550A D3E3 SHL BX,CL

1714:550C 8A46FA MOV AL,[BP-06]

1714:550F 2AE4 SUB AH,AH

1714:5511 03D8 ADD BX,AX

1714:5513 38A702AB CMP [BX+AB02],AH

1714:5517 7503 JNZ 551C

1714:5519 E9E500 JMP 5601

1714:551C 8946D8 MOV [BP-28],AX

1714:551F 8A46F8 MOV AL,[BP-08]

1714:5522 8946D6 MOV [BP-2A],AX

1714:5525 8B5EE6 MOV BX,[BP-1A]

1714:5528 8A07 MOV AL,[BX]

1714:552A 8B5ED6 MOV BX,[BP-2A]

1714:552D B104 MOV CL,04

1714:552F D3E3 SHL BX,CL

1714:5531 035ED8 ADD BX,[BP-28]

1714:5534 888764AC MOV [BX+AC64],AL

1714:5538 8B5ED6 MOV BX,[BP-2A]

1714:553B B105 MOV CL,05

1714:553D D3E3 SHL BX,CL

1714:553F 035ED8 ADD BX,[BP-28]

1714:5542 88A702AB MOV [BX+AB02],AH

1714:5546 E9B800 JMP 5601

1714:5549 90 NOP

1714:554A 803D1D CMP BYTE PTR [DI],1D

1714:554D 7405 JZ 5554

1714:554F 803D1E CMP BYTE PTR [DI],1E

1714:5552 752E JNZ 5582

1714:5554 8A46FA MOV AL,[BP-06]

1714:5557 2AE4 SUB AH,AH

1714:5559 8946D4 MOV [BP-2C],AX

1714:555C 8A46F8 MOV AL,[BP-08]

1714:555F 8946D2 MOV [BP-2E],AX

1714:5562 8B5EE2 MOV BX,[BP-1E]

1714:5565 8A07 MOV AL,[BX]

1714:5567 8B5ED2 MOV BX,[BP-2E]

1714:556A B104 MOV CL,04

1714:556C D3E3 SHL BX,CL

1714:556E 035ED4 ADD BX,[BP-2C]

1714:5571 888764AC MOV [BX+AC64],AL

1714:5575 8B5ED2 MOV BX,[BP-2E]

1714:5578 B105 MOV CL,05

1714:557A D3E3 SHL BX,CL

1714:557C 035ED4 ADD BX,[BP-2C]

1714:557F EBC1 JMP 5542

1714:5581 90 NOP

1714:5582 8B5EE0 MOV BX,[BP-20]

1714:5585 803F5C CMP BYTE PTR [BX],5C

1714:5588 755C JNZ 55E6

1714:558A 8A5EF8 MOV BL,[BP-08]

1714:558D 2AFF SUB BH,BH

1714:558F B105 MOV CL,05

1714:5591 D3E3 SHL BX,CL

1714:5593 8A46FA MOV AL,[BP-06]

1714:5596 2AE4 SUB AH,AH

1714:5598 03D8 ADD BX,AX

1714:559A 80BF02AB92 CMP BYTE PTR [BX+AB02],92

1714:559F 7529 JNZ 55CA

1714:55A1 8946D0 MOV [BP-30],AX

1714:55A4 8A46F8 MOV AL,[BP-08]

1714:55A7 8946CE MOV [BP-32],AX

1714:55AA 8B5EDE MOV BX,[BP-22]

1714:55AD 8A07 MOV AL,[BX]

1714:55AF 8B5ECE MOV BX,[BP-32]

1714:55B2 B104 MOV CL,04

1714:55B4 D3E3 SHL BX,CL

1714:55B6 035ED0 ADD BX,[BP-30]

1714:55B9 888764AC MOV [BX+AC64],AL

1714:55BD 8B5ECE MOV BX,[BP-32]

1714:55C0 B105 MOV CL,05

1714:55C2 D3E3 SHL BX,CL

1714:55C4 035ED0 ADD BX,[BP-30]

1714:55C7 E978FF JMP 5542

1714:55CA 8A46FA MOV AL,[BP-06]

1714:55CD 2AE4 SUB AH,AH

1714:55CF 50 PUSH AX

1714:55D0 8A46F8 MOV AL,[BP-08]

1714:55D3 50 PUSH AX

1714:55D4 8A46FE MOV AL,[BP-02]

1714:55D7 50 PUSH AX

1714:55D8 8A46FC MOV AL,[BP-04]

1714:55DB 50 PUSH AX

1714:55DC 8B5EDC MOV BX,[BP-24]

1714:55DF 8A07 MOV AL,[BX]

1714:55E1 2D0800 SUB AX,0008

1714:55E4 EB17 JMP 55FD

1714:55E6 8A46FA MOV AL,[BP-06]

1714:55E9 2AE4 SUB AH,AH

1714:55EB 50 PUSH AX

1714:55EC 8A46F8 MOV AL,[BP-08]

1714:55EF 50 PUSH AX

1714:55F0 8A46FE MOV AL,[BP-02]

1714:55F3 50 PUSH AX

1714:55F4 8A46FC MOV AL,[BP-04]

1714:55F7 50 PUSH AX

1714:55F8 8B5EDA MOV BX,[BP-26]

1714:55FB 8A07 MOV AL,[BX]

1714:55FD 50 PUSH AX

1714:55FE E8B7FB CALL 51B8

1714:5601 836EEE08 SUB WORD PTR [BP-12],+08

1714:5605 836EF008 SUB WORD PTR [BP-10],+08

1714:5609 836EF208 SUB WORD PTR [BP-0E],+08

1714:560D 836EEC08 SUB WORD PTR [BP-14],+08

1714:5611 836EEA08 SUB WORD PTR [BP-16],+08

1714:5615 83EE08 SUB SI,+08

1714:5618 836EE608 SUB WORD PTR [BP-1A],+08

1714:561C 83EF08 SUB DI,+08

1714:561F 836EE208 SUB WORD PTR [BP-1E],+08

1714:5623 836EE008 SUB WORD PTR [BP-20],+08

1714:5627 836EDE08 SUB WORD PTR [BP-22],+08

1714:562B 836EDC08 SUB WORD PTR [BP-24],+08

1714:562F 836EDA08 SUB WORD PTR [BP-26],+08

1714:5633 FF4EF6 DEC WORD PTR [BP-0A]

1714:5636 817EDA5B5C CMP WORD PTR [BP-26],5C5B

1714:563B 7203 JB 5640

1714:563D E922FE JMP 5462

1714:5640 5E POP SI

1714:5641 5F POP DI

1714:5642 8BE5 MOV SP,BP

1714:5644 5D POP BP

1714:5645 C3 RET

; 5646(p1)

{

1714:5646 55 PUSH BP

1714:5647 8BEC MOV BP,SP

1714:5649 83EC04 SUB SP,+04

1714:564C 56 PUSH SI

1714:564D 8B7604 MOV SI,[BP+04]

1714:5650 B103 MOV CL,03

1714:5652 D3E6 SHL SI,CL

1714:5654 8A8416BA MOV AL,[SI+BA16]

1714:5658 2AE4 SUB AH,AH

1714:565A 8946FC MOV [BP-04],AX

1714:565D 8A8417BA MOV AL,[SI+BA17]

1714:5661 8946FE MOV [BP-02],AX

1714:5664 F646FC20 TEST BYTE PTR [BP-04],20

1714:5668 7404 JZ 566E

1714:566A 2BC0 SUB AX,AX

1714:566C EB36 JMP 56A4

1714:566E F646FC80 TEST BYTE PTR [BP-04],80

1714:5672 7422 JZ 5696

1714:5674 837EFE00 CMP WORD PTR [BP-02],+00

1714:5678 7414 JZ 568E

1714:567A 8B5EFE MOV BX,[BP-02]

1714:567D B105 MOV CL,05

1714:567F D3E3 SHL BX,CL

1714:5681 80BFAC556A CMP BYTE PTR [BX+55AC],6A

1714:5686 7506 JNZ 568E

1714:5688 B80100 MOV AX,0001

1714:568B EB17 JMP 56A4

1714:568D 90 NOP

1714:568E 8B46FC MOV AX,[BP-04]

1714:5691 250100 AND AX,0001

1714:5694 EB0E JMP 56A4

1714:5696 8A46FC MOV AL,[BP-04]

1714:5699 2401 AND AL,01

1714:569B 8BC8 MOV CX,AX

1714:569D 80F901 CMP CL,01

1714:56A0 1BC0 SBB AX,AX

1714:56A2 F7D8 NEG AX

1714:56A4 5E POP SI

1714:56A5 8BE5 MOV SP,BP

1714:56A7 5D POP BP

1714:56A8 C20200 RET 0002

}

1714:56AB 90 NOP

1714:56AC 55 PUSH BP

1714:56AD 8BEC MOV BP,SP

1714:56AF 83EC1E SUB SP,+1E

1714:56B2 57 PUSH DI

1714:56B3 56 PUSH SI

1714:56B4 2BFF SUB DI,DI

1714:56B6 897EF6 MOV [BP-0A],DI

1714:56B9 897EF2 MOV [BP-0E],DI

1714:56BC 2BF6 SUB SI,SI

1714:56BE 8B46F6 MOV AX,[BP-0A]

1714:56C1 8946F4 MOV [BP-0C],AX

1714:56C4 8946F0 MOV [BP-10],AX

1714:56C7 8B5EF0 MOV BX,[BP-10]

1714:56CA 80B802AB00 CMP BYTE PTR [BX+SI+AB02],00

1714:56CF 7515 JNZ 56E6

1714:56D1 8B5EF2 MOV BX,[BP-0E]

1714:56D4 80B864AC16 CMP BYTE PTR [BX+SI+AC64],16

1714:56D9 7446 JZ 5721

1714:56DB 8A8064AC MOV AL,[BX+SI+AC64]

1714:56DF 2AE4 SUB AH,AH

1714:56E1 80C401 ADD AH,01

1714:56E4 EB35 JMP 571B

1714:56E6 8B5EF4 MOV BX,[BP-0C]

1714:56E9 80B802ABDC CMP BYTE PTR [BX+SI+AB02],DC

1714:56EE 751C JNZ 570C

1714:56F0 803E875800 CMP BYTE PTR [5887],00

1714:56F5 7415 JZ 570C

1714:56F7 803E875810 CMP BYTE PTR [5887],10

1714:56FC 730E JNB 570C

1714:56FE A08758 MOV AL,[5887]

1714:5701 2AE4 SUB AH,AH

1714:5703 50 PUSH AX

1714:5704 56 PUSH SI

1714:5705 57 PUSH DI

1714:5706 E809BA CALL 1112

1714:5709 EB16 JMP 5721

1714:570B 90 NOP

1714:570C 8B5EF6 MOV BX,[BP-0A]

1714:570F 8A9802AB MOV BL,[BX+SI+AB02]

1714:5713 2AFF SUB BH,BH

1714:5715 8A871EB1 MOV AL,[BX+B11E]

1714:5719 2AE4 SUB AH,AH

1714:571B 50 PUSH AX

1714:571C 56 PUSH SI

1714:571D 57 PUSH DI

1714:571E E8BFB9 CALL 10E0

1714:5721 46 INC SI

1714:5722 83FE0B CMP SI,+0B

1714:5725 7CA0 JL 56C7

1714:5727 8976FA MOV [BP-06],SI

1714:572A 8346F620 ADD WORD PTR [BP-0A],+20

1714:572E 8346F210 ADD WORD PTR [BP-0E],+10

1714:5732 47 INC DI

1714:5733 83FF0B CMP DI,+0B

1714:5736 7C84 JL 56BC

1714:5738 897EF8 MOV [BP-08],DI

1714:573B 803E93587F CMP BYTE PTR [5893],7F

1714:5740 7703 JA 5745

1714:5742 E9C401 JMP 5909

1714:5745 803E9F5801 CMP BYTE PTR [589F],01

1714:574A 1BC0 SBB AX,AX

1714:574C F7D8 NEG AX

1714:574E A29F58 MOV [589F],AL

1714:5751 0AC0 OR AL,AL

1714:5753 7503 JNZ 5758

1714:5755 E9B101 JMP 5909

1714:5758 803E9E58FF CMP BYTE PTR [589E],FF

1714:575D 7503 JNZ 5762

1714:575F E9A701 JMP 5909

1714:5762 A09E58 MOV AL,[589E]

1714:5765 2AE4 SUB AH,AH

1714:5767 50 PUSH AX

1714:5768 E8DBFE CALL 5646

1714:576B 0BC0 OR AX,AX

1714:576D 7403 JZ 5772

1714:576F E99701 JMP 5909

1714:5772 A09E58 MOV AL,[589E]

1714:5775 2AE4 SUB AH,AH

1714:5777 B103 MOV CL,03

1714:5779 D3E0 SHL AX,CL

1714:577B 8946EA MOV [BP-16],AX

1714:577E 8BD8 MOV BX,AX

1714:5780 8A871ABA MOV AL,[BX+BA1A]

1714:5784 2AE4 SUB AH,AH

1714:5786 B104 MOV CL,04

1714:5788 D3E0 SHL AX,CL

1714:578A 050800 ADD AX,0008

1714:578D 8946FE MOV [BP-02],AX

1714:5790 8A871BBA MOV AL,[BX+BA1B]

1714:5794 2AE4 SUB AH,AH

1714:5796 D3E0 SHL AX,CL

1714:5798 050800 ADD AX,0008

1714:579B 8946FC MOV [BP-04],AX

1714:579E FF36B013 PUSH [13B0]

1714:57A2 E8CBB2 CALL 0A70

1714:57A5 C746FA0000 MOV WORD PTR [BP-06],0000

1714:57AA 8B46FE MOV AX,[BP-02]

1714:57AD 050F00 ADD AX,000F

1714:57B0 8946EE MOV [BP-12],AX

1714:57B3 8B46FC MOV AX,[BP-04]

1714:57B6 050F00 ADD AX,000F

1714:57B9 8946EC MOV [BP-14],AX

1714:57BC 2BF6 SUB SI,SI

1714:57BE 8B7EEC MOV DI,[BP-14]

1714:57C1 8B46FE MOV AX,[BP-02]

1714:57C4 0346FA ADD AX,[BP-06]

1714:57C7 8946F2 MOV [BP-0E],AX

1714:57CA 8B46EE MOV AX,[BP-12]

1714:57CD 8946F4 MOV [BP-0C],AX

1714:57D0 8B46FC MOV AX,[BP-04]

1714:57D3 0346FA ADD AX,[BP-06]

1714:57D6 8946F6 MOV [BP-0A],AX

1714:57D9 FF76FE PUSH [BP-02]

1714:57DC 8B46F6 MOV AX,[BP-0A]

1714:57DF 03C6 ADD AX,SI

1714:57E1 50 PUSH AX

1714:57E2 FF76F4 PUSH [BP-0C]

1714:57E5 E8B4B4 CALL 0C9C

1714:57E8 8B46F2 MOV AX,[BP-0E]

1714:57EB 03C6 ADD AX,SI

1714:57ED 50 PUSH AX

1714:57EE FF76FC PUSH [BP-04]

1714:57F1 57 PUSH DI

1714:57F2 E8FDB4 CALL 0CF2

1714:57F5 83C60E ADD SI,+0E

1714:57F8 83FE0F CMP SI,+0F

1714:57FB 7CDC JL 57D9

1714:57FD 8976F8 MOV [BP-08],SI

1714:5800 FF46FA INC WORD PTR [BP-06]

1714:5803 837EFA02 CMP WORD PTR [BP-06],+02

1714:5807 7CB3 JL 57BC

1714:5809 803E985800 CMP BYTE PTR [5898],00

1714:580E 7503 JNZ 5813

1714:5810 E9F600 JMP 5909

1714:5813 A09958 MOV AL,[5899]

1714:5816 2AE4 SUB AH,AH

1714:5818 B104 MOV CL,04

1714:581A D3E0 SHL AX,CL

1714:581C 050800 ADD AX,0008

1714:581F 8946FE MOV [BP-02],AX

1714:5822 A09A58 MOV AL,[589A]

1714:5825 2AE4 SUB AH,AH

1714:5827 D3E0 SHL AX,CL

1714:5829 050800 ADD AX,0008

1714:582C 8946FC MOV [BP-04],AX

1714:582F C746FA0000 MOV WORD PTR [BP-06],0000

1714:5834 8B46FE MOV AX,[BP-02]

1714:5837 050500 ADD AX,0005

1714:583A 8946E6 MOV [BP-1A],AX

1714:583D 8B46FE MOV AX,[BP-02]

1714:5840 050600 ADD AX,0006

1714:5843 8946E4 MOV [BP-1C],AX

1714:5846 8B46FE MOV AX,[BP-02]

1714:5849 050200 ADD AX,0002

1714:584C 8946E2 MOV [BP-1E],AX

1714:584F 8B46FC MOV AX,[BP-04]

1714:5852 050200 ADD AX,0002

1714:5855 8946EA MOV [BP-16],AX

1714:5858 8B46FC MOV AX,[BP-04]

1714:585B 050600 ADD AX,0006

1714:585E 8946EC MOV [BP-14],AX

1714:5861 8B46FC MOV AX,[BP-04]

1714:5864 050500 ADD AX,0005

1714:5867 8946F0 MOV [BP-10],AX

1714:586A C746F80000 MOV WORD PTR [BP-08],0000

1714:586F 8B46FC MOV AX,[BP-04]

1714:5872 0346FA ADD AX,[BP-06]

1714:5875 050700 ADD AX,0007

1714:5878 8946EE MOV [BP-12],AX

1714:587B 8B76E2 MOV SI,[BP-1E]

1714:587E 8B7EE4 MOV DI,[BP-1C]

1714:5881 8B46E6 MOV AX,[BP-1A]

1714:5884 8946F6 MOV [BP-0A],AX

1714:5887 FF36B013 PUSH [13B0]

1714:588B E8E2B1 CALL 0A70

1714:588E 56 PUSH SI

1714:588F FF76EC PUSH [BP-14]

1714:5892 57 PUSH DI

1714:5893 FF76EC PUSH [BP-14]

1714:5896 E877B2 CALL 0B10

1714:5899 57 PUSH DI

1714:589A FF76EA PUSH [BP-16]

1714:589D E8F0B6 CALL 0F90

1714:58A0 2BC0 SUB AX,AX

1714:58A2 50 PUSH AX

1714:58A3 E8CAB1 CALL 0A70

1714:58A6 56 PUSH SI

1714:58A7 FF76F0 PUSH [BP-10]

1714:58AA FF76F6 PUSH [BP-0A]

1714:58AD FF76F0 PUSH [BP-10]

1714:58B0 E85DB2 CALL 0B10

1714:58B3 FF76F6 PUSH [BP-0A]

1714:58B6 FF76EA PUSH [BP-16]

1714:58B9 E8D4B6 CALL 0F90

1714:58BC 56 PUSH SI

1714:58BD FF76EE PUSH [BP-12]

1714:58C0 57 PUSH DI

1714:58C1 FF76EE PUSH [BP-12]

1714:58C4 E849B2 CALL 0B10

1714:58C7 8B46FE MOV AX,[BP-02]

1714:58CA 0346F8 ADD AX,[BP-08]

1714:58CD 050700 ADD AX,0007

1714:58D0 8946E8 MOV [BP-18],AX

1714:58D3 50 PUSH AX

1714:58D4 FF76EC PUSH [BP-14]

1714:58D7 50 PUSH AX

1714:58D8 FF76EA PUSH [BP-16]

1714:58DB E832B2 CALL 0B10

1714:58DE 83C60B ADD SI,+0B

1714:58E1 83C703 ADD DI,+03

1714:58E4 8346F605 ADD WORD PTR [BP-0A],+05

1714:58E8 FF46F8 INC WORD PTR [BP-08]

1714:58EB 837EF802 CMP WORD PTR [BP-08],+02

1714:58EF 7C96 JL 5887

1714:58F1 8346EA0B ADD WORD PTR [BP-16],+0B

1714:58F5 8346EC03 ADD WORD PTR [BP-14],+03

1714:58F9 8346F005 ADD WORD PTR [BP-10],+05

1714:58FD FF46FA INC WORD PTR [BP-06]

1714:5900 837EFA02 CMP WORD PTR [BP-06],+02

1714:5904 7D03 JGE 5909

1714:5906 E961FF JMP 586A

1714:5909 5E POP SI

1714:590A 5F POP DI

1714:590B 8BE5 MOV SP,BP

1714:590D 5D POP BP

1714:590E C3 RET

1714:590F 90 NOP

; 5910

{

1714:5910 55 PUSH BP

1714:5911 8BEC MOV BP,SP

1714:5913 83EC0A SUB SP,+0A

1714:5916 57 PUSH DI

1714:5917 56 PUSH SI

1714:5918 C6065E54FF MOV BYTE PTR [545E],FF

1714:591D 803E7A5854 CMP BYTE PTR [587A],54

1714:5922 7505 JNZ 5929

1714:5924 C606915800 MOV BYTE PTR [5891],00

1714:5929 803EA45800 CMP BYTE PTR [58A4],00

1714:592E 7503 JNZ 5933

1714:5930 E9EA00 JMP 5A1D

1714:5933 803E915800 CMP BYTE PTR [5891],00

1714:5938 741A JZ 5954

1714:593A 803E9158FF CMP BYTE PTR [5891],FF

1714:593F 7403 JZ 5944

; call 4552

1714:5941 E80EEC CALL 4552

; call 2f62

1714:5944 E81BD6 CALL 2F62

; if map id is signed, jump to 5954

1714:5947 803E935880 CMP BYTE PTR [5893],80

1714:594C 7306 JNB 5954

; call 475a

1714:594E E809EE CALL 475A

; call 70a6

1714:5951 E85217 CALL 70A6

; if map id is signed, jump to 59d8

1714:5954 803E935880 CMP BYTE PTR [5893],80

1714:5959 7203 JB 595E

1714:595B E99A00 JMP 59F8

1714:595E 803EE62400 CMP BYTE PTR [24E6],00

1714:5963 742D JZ 5992

1714:5965 A0A558 MOV AL,[58A5]

1714:5968 2AE4 SUB AH,AH

1714:596A 50 PUSH AX

1714:596B A09658 MOV AL,[5896]

1714:596E 8A0E9B58 MOV CL,[589B]

1714:5972 2AED SUB CH,CH

1714:5974 2BC1 SUB AX,CX

1714:5976 50 PUSH AX

1714:5977 A09758 MOV AL,[5897]

1714:597A 2AE4 SUB AH,AH

1714:597C 8A0E9C58 MOV CL,[589C]

1714:5980 2BC1 SUB AX,CX

1714:5982 50 PUSH AX

1714:5983 B80B00 MOV AX,000B

1714:5986 50 PUSH AX

1714:5987 E88003 CALL 5D0A

1714:598A C606E62400 MOV BYTE PTR [24E6],00

1714:598F EB7C JMP 5A0D

1714:5991 90 NOP

1714:5992 C746FC0000 MOV WORD PTR [BP-04],0000

1714:5997 C746F60000 MOV WORD PTR [BP-0A],0000

1714:599C 2BF6 SUB SI,SI

1714:599E 8A46FC MOV AL,[BP-04]

1714:59A1 2AE4 SUB AH,AH

1714:59A3 8946FA MOV [BP-06],AX

1714:59A6 8B7EF6 MOV DI,[BP-0A]

1714:59A9 8BDF MOV BX,DI

1714:59AB 03DE ADD BX,SI

1714:59AD 80BF02AB00 CMP BYTE PTR [BX+AB02],00

1714:59B2 752C JNZ 59E0

1714:59B4 8BC6 MOV AX,SI

1714:59B6 2AE4 SUB AH,AH

1714:59B8 8A0E9658 MOV CL,[5896]

1714:59BC 2AED SUB CH,CH

1714:59BE 03C1 ADD AX,CX

1714:59C0 2D0500 SUB AX,0005

1714:59C3 50 PUSH AX

1714:59C4 8B46FA MOV AX,[BP-06]

1714:59C7 8A0E9758 MOV CL,[5897]

1714:59CB 03C1 ADD AX,CX

1714:59CD 2D0500 SUB AX,0005

1714:59D0 50 PUSH AX

1714:59D1 E82EEA CALL 4402

1714:59D4 8BD8 MOV BX,AX

1714:59D6 8A07 MOV AL,[BX]

1714:59D8 8BDF MOV BX,DI

1714:59DA 03DE ADD BX,SI

1714:59DC 888702AB MOV [BX+AB02],AL

1714:59E0 46 INC SI

1714:59E1 83FE0B CMP SI,+0B

1714:59E4 7CC3 JL 59A9

1714:59E6 8976FE MOV [BP-02],SI

1714:59E9 8346F620 ADD WORD PTR [BP-0A],+20

1714:59ED FF46FC INC WORD PTR [BP-04]

1714:59F0 837EFC0B CMP WORD PTR [BP-04],+0B

1714:59F4 7CA6 JL 599C

1714:59F6 EB15 JMP 5A0D

1714:59F8 B96001 MOV CX,0160

1714:59FB BF02AB MOV DI,AB02

1714:59FE BE14AD MOV SI,AD14

1714:5A01 8CD8 MOV AX,DS

1714:5A03 8EC0 MOV ES,AX

1714:5A05 D1E9 SHR CX,1

1714:5A07 F2 REPNZ

1714:5A08 A5 MOVSW

1714:5A09 13C9 ADC CX,CX

1714:5A0B F2 REPNZ

1714:5A0C A4 MOVSB

1714:5A0D E884F9 CALL 5394

1714:5A10 E899FC CALL 56AC

1714:5A13 803E915800 CMP BYTE PTR [5891],00

1714:5A18 7403 JZ 5A1D

1714:5A1A E8E5E6 CALL 4102

1714:5A1D C606915801 MOV BYTE PTR [5891],01

1714:5A22 5E POP SI

1714:5A23 5F POP DI

1714:5A24 8BE5 MOV SP,BP

1714:5A26 5D POP BP

1714:5A27 C3 RET

}

; 5a28(p0,p1)

{

1714:5A28 55 PUSH BP

1714:5A29 8BEC MOV BP,SP

1714:5A2B 81EC1802 SUB SP,0218

1714:5A2F 57 PUSH DI

1714:5A30 56 PUSH SI

1714:5A31 C786F4FD0000 MOV WORD PTR [BP+FDF4],0000

1714:5A37 C746FE0000 MOV WORD PTR [BP-02],0000

1714:5A3C C786EAFD0700 MOV WORD PTR [BP+FDEA],0007

1714:5A42 C786F6FD0100 MOV WORD PTR [BP+FDF6],0001

1714:5A48 C786F2FD0000 MOV WORD PTR [BP+FDF2],0000

1714:5A4E 837E1000 CMP WORD PTR [BP+10],+00

1714:5A52 7F03 JG 5A57

1714:5A54 E9AA02 JMP 5D01

1714:5A57 837E0A91 CMP WORD PTR [BP+0A],-6F

1714:5A5B 7509 JNZ 5A66

1714:5A5D C7460A0000 MOV WORD PTR [BP+0A],0000

1714:5A62 FF86F2FD INC WORD PTR [BP+FDF2]

1714:5A66 FF4610 INC WORD PTR [BP+10]

1714:5A69 8B7EFE MOV DI,[BP-02]

1714:5A6C D1E7 SHL DI,1

1714:5A6E C783FCFD0500 MOV WORD PTR [BP+DI+FDFC],0005

1714:5A74 FF46FE INC WORD PTR [BP-02]

1714:5A77 8B7EFE MOV DI,[BP-02]

1714:5A7A D1E7 SHL DI,1

1714:5A7C C783FCFD0500 MOV WORD PTR [BP+DI+FDFC],0005

1714:5A82 FF46FE INC WORD PTR [BP-02]

1714:5A85 8B460C MOV AX,[BP+0C]

1714:5A88 8A0E9B58 MOV CL,[589B]

1714:5A8C 2AED SUB CH,CH

1714:5A8E 03C1 ADD AX,CX

1714:5A90 050500 ADD AX,0005

1714:5A93 50 PUSH AX

1714:5A94 8B460E MOV AX,[BP+0E]

1714:5A97 8A0E9C58 MOV CL,[589C]

1714:5A9B 03C1 ADD AX,CX

1714:5A9D 050500 ADD AX,0005

1714:5AA0 50 PUSH AX

1714:5AA1 E85EE9 CALL 4402

1714:5AA4 8BD8 MOV BX,AX

1714:5AA6 8A07 MOV AL,[BX]

1714:5AA8 8B7E0A MOV DI,[BP+0A]

1714:5AAB B105 MOV CL,05

1714:5AAD D3E7 SHL DI,CL

1714:5AAF 037E08 ADD DI,[BP+08]

1714:5AB2 8B5E04 MOV BX,[BP+04]

1714:5AB5 8881A500 MOV [BX+DI+00A5],AL

1714:5AB9 E93902 JMP 5CF5

1714:5ABC 8BBEF4FD MOV DI,[BP+FDF4]

1714:5AC0 D1E7 SHL DI,1

1714:5AC2 8B83FCFD MOV AX,[BP+DI+FDFC]

1714:5AC6 8986EEFD MOV [BP+FDEE],AX

1714:5ACA 8986F8FD MOV [BP+FDF8],AX

1714:5ACE FF86F4FD INC WORD PTR [BP+FDF4]

1714:5AD2 8BBEF4FD MOV DI,[BP+FDF4]

1714:5AD6 D1E7 SHL DI,1

1714:5AD8 8B83FCFD MOV AX,[BP+DI+FDFC]

1714:5ADC 8986F0FD MOV [BP+FDF0],AX

1714:5AE0 8986FAFD MOV [BP+FDFA],AX

1714:5AE4 FF86F4FD INC WORD PTR [BP+FDF4]

1714:5AE8 E9FA01 JMP 5CE5

1714:5AEB 90 NOP

1714:5AEC 8B86EAFD MOV AX,[BP+FDEA]

1714:5AF0 3D0700 CMP AX,0007

1714:5AF3 7731 JA 5B26

1714:5AF5 03C0 ADD AX,AX

1714:5AF7 93 XCHG BX,AX

1714:5AF8 2E CS:

1714:5AF9 FFA7165B JMP [BX+5B16]

1714:5AFD 90 NOP

1714:5AFE FF8EF0FD DEC WORD PTR [BP+FDF0]

1714:5B02 EB22 JMP 5B26

1714:5B04 FF86F0FD INC WORD PTR [BP+FDF0]

1714:5B08 EB1C JMP 5B26

1714:5B0A FF8EEEFD DEC WORD PTR [BP+FDEE]

1714:5B0E EB16 JMP 5B26

1714:5B10 FF86EEFD INC WORD PTR [BP+FDEE]

1714:5B14 EB10 JMP 5B26

; data

1714:5B16 FE5AFE CALL FAR [BP+SI-02]

1714:5B19 5A POP DX

1714:5B1A 0A5B0A OR BL,[BP+DI+0A]

1714:5B1D 5B POP BX

1714:5B1E 045B ADD AL,5B

1714:5B20 045B ADD AL,5B

1714:5B22 105BFE ADC [BP+DI-02],BL

1714:5B25 5A POP DX

1714:5B26 83BEF0FD00 CMP WORD PTR [BP+FDF0],+00

1714:5B2B 7C15 JL 5B42

1714:5B2D 83BEF0FD0A CMP WORD PTR [BP+FDF0],+0A

1714:5B32 7F0E JG 5B42

1714:5B34 83BEEEFD00 CMP WORD PTR [BP+FDEE],+00

1714:5B39 7C07 JL 5B42

1714:5B3B 83BEEEFD0A CMP WORD PTR [BP+FDEE],+0A

1714:5B40 7E06 JLE 5B48

1714:5B42 C786F6FD0000 MOV WORD PTR [BP+FDF6],0000

1714:5B48 8B760A MOV SI,[BP+0A]

1714:5B4B 03B6EEFD ADD SI,[BP+FDEE]

1714:5B4F B105 MOV CL,05

1714:5B51 D3E6 SHL SI,CL

1714:5B53 8B4608 MOV AX,[BP+08]

1714:5B56 0386F0FD ADD AX,[BP+FDF0]

1714:5B5A 03F0 ADD SI,AX

1714:5B5C 037604 ADD SI,[BP+04]

1714:5B5F 83BEF2FD00 CMP WORD PTR [BP+FDF2],+00

1714:5B64 752A JNZ 5B90

1714:5B66 8BBEEEFD MOV DI,[BP+FDEE]

1714:5B6A D3E7 SHL DI,CL

1714:5B6C 8B9EF0FD MOV BX,[BP+FDF0]

1714:5B70 80B902AB00 CMP BYTE PTR [BX+DI+AB02],00

1714:5B75 741E JZ 5B95

1714:5B77 8B460A MOV AX,[BP+0A]

1714:5B7A 0386EEFD ADD AX,[BP+FDEE]

1714:5B7E 3D1F00 CMP AX,001F

1714:5B81 7F12 JG 5B95

1714:5B83 8BBEEEFD MOV DI,[BP+FDEE]

1714:5B87 D3E7 SHL DI,CL

1714:5B89 C68102AB00 MOV BYTE PTR [BX+DI+AB02],00

1714:5B8E EB0B JMP 5B9B

1714:5B90 803CFF CMP BYTE PTR [SI],FF

1714:5B93 7406 JZ 5B9B

1714:5B95 C786F6FD0000 MOV WORD PTR [BP+FDF6],0000

1714:5B9B 83BEF6FD00 CMP WORD PTR [BP+FDF6],+00

1714:5BA0 7503 JNZ 5BA5

1714:5BA2 E93601 JMP 5CDB

1714:5BA5 8B460C MOV AX,[BP+0C]

1714:5BA8 0386F0FD ADD AX,[BP+FDF0]

1714:5BAC 8A0E9B58 MOV CL,[589B]

1714:5BB0 2AED SUB CH,CH

1714:5BB2 03C1 ADD AX,CX

1714:5BB4 50 PUSH AX

1714:5BB5 8B460E MOV AX,[BP+0E]

1714:5BB8 0386EEFD ADD AX,[BP+FDEE]

1714:5BBC 8A0E9C58 MOV CL,[589C]

1714:5BC0 03C1 ADD AX,CX

1714:5BC2 50 PUSH AX

1714:5BC3 E83CE8 CALL 4402

1714:5BC6 8BD8 MOV BX,AX

1714:5BC8 8A07 MOV AL,[BX]

1714:5BCA 8886ECFD MOV [BP+FDEC],AL

1714:5BCE FFB6F0FD PUSH [BP+FDF0]

1714:5BD2 FFB6EEFD PUSH [BP+FDEE]

1714:5BD6 E81714 CALL 6FF0

1714:5BD9 3B4610 CMP AX,[BP+10]

1714:5BDC 7D03 JGE 5BE1

1714:5BDE E9B200 JMP 5C93

1714:5BE1 83BEF2FD00 CMP WORD PTR [BP+FDF2],+00

1714:5BE6 7503 JNZ 5BEB

1714:5BE8 E9B100 JMP 5C9C

1714:5BEB 8A86ECFD MOV AL,[BP+FDEC]

1714:5BEF 2AE4 SUB AH,AH

1714:5BF1 50 PUSH AX

1714:5BF2 FFB6F0FD PUSH [BP+FDF0]

1714:5BF6 FFB6EEFD PUSH [BP+FDEE]

1714:5BFA E8F313 CALL 6FF0

1714:5BFD 50 PUSH AX

1714:5BFE E8FD01 CALL 5DFE

1714:5C01 0BC0 OR AX,AX

1714:5C03 754D JNZ 5C52

1714:5C05 8B9EF8FD MOV BX,[BP+FDF8]

1714:5C09 B105 MOV CL,05

1714:5C0B D3E3 SHL BX,CL

1714:5C0D 039EFAFD ADD BX,[BP+FDFA]

1714:5C11 8B7E04 MOV DI,[BP+04]

1714:5C14 803900 CMP BYTE PTR [BX+DI],00

1714:5C17 742E JZ 5C47

1714:5C19 8B7E0E MOV DI,[BP+0E]

1714:5C1C 03BEF8FD ADD DI,[BP+FDF8]

1714:5C20 D3E7 SHL DI,CL

1714:5C22 037E0C ADD DI,[BP+0C]

1714:5C25 8B9EFAFD MOV BX,[BP+FDFA]

1714:5C29 80B914AD00 CMP BYTE PTR [BX+DI+AD14],00

1714:5C2E 7417 JZ 5C47

1714:5C30 8B7E0E MOV DI,[BP+0E]

1714:5C33 03BEEEFD ADD DI,[BP+FDEE]

1714:5C37 D3E7 SHL DI,CL

1714:5C39 037E0C ADD DI,[BP+0C]

1714:5C3C 8B9EF0FD MOV BX,[BP+FDF0]

1714:5C40 80B914AD00 CMP BYTE PTR [BX+DI+AD14],00

1714:5C45 754C JNZ 5C93

1714:5C47 B0FF MOV AL,FF

1714:5C49 8804 MOV [SI],AL

1714:5C4B 8886ECFD MOV [BP+FDEC],AL

1714:5C4F EB50 JMP 5CA1

1714:5C51 90 NOP

1714:5C52 8B7E0E MOV DI,[BP+0E]

1714:5C55 03BEEEFD ADD DI,[BP+FDEE]

1714:5C59 7819 JS 5C74

1714:5C5B 8B460C MOV AX,[BP+0C]

1714:5C5E 0386F0FD ADD AX,[BP+FDF0]

1714:5C62 8986E8FD MOV [BP+FDE8],AX

1714:5C66 0BC0 OR AX,AX

1714:5C68 7C0A JL 5C74

1714:5C6A 3D1F00 CMP AX,001F

1714:5C6D 7F05 JG 5C74

1714:5C6F 83FF1F CMP DI,+1F

1714:5C72 7E06 JLE 5C7A

1714:5C74 C60400 MOV BYTE PTR [SI],00

1714:5C77 EB28 JMP 5CA1

1714:5C79 90 NOP

1714:5C7A 8B7E0E MOV DI,[BP+0E]

1714:5C7D 03BEEEFD ADD DI,[BP+FDEE]

1714:5C81 B105 MOV CL,05

1714:5C83 D3E7 SHL DI,CL

1714:5C85 037E0C ADD DI,[BP+0C]

1714:5C88 8B9EF0FD MOV BX,[BP+FDF0]

1714:5C8C 80B914AD00 CMP BYTE PTR [BX+DI+AD14],00

1714:5C91 74E1 JZ 5C74

1714:5C93 8A86ECFD MOV AL,[BP+FDEC]

1714:5C97 8804 MOV [SI],AL

1714:5C99 EB06 JMP 5CA1

1714:5C9B 90 NOP

1714:5C9C C686ECFDFF MOV BYTE PTR [BP+FDEC],FF

1714:5CA1 8A86ECFD MOV AL,[BP+FDEC]

1714:5CA5 2AE4 SUB AH,AH

1714:5CA7 50 PUSH AX

1714:5CA8 FFB6F0FD PUSH [BP+FDF0]

1714:5CAC FFB6EEFD PUSH [BP+FDEE]

1714:5CB0 E83D13 CALL 6FF0

1714:5CB3 50 PUSH AX

1714:5CB4 E84701 CALL 5DFE

1714:5CB7 0BC0 OR AX,AX

1714:5CB9 7420 JZ 5CDB

1714:5CBB 8B7EFE MOV DI,[BP-02]

1714:5CBE D1E7 SHL DI,1

1714:5CC0 8B86EEFD MOV AX,[BP+FDEE]

1714:5CC4 8983FCFD MOV [BP+DI+FDFC],AX

1714:5CC8 FF46FE INC WORD PTR [BP-02]

1714:5CCB 8B7EFE MOV DI,[BP-02]

1714:5CCE D1E7 SHL DI,1

1714:5CD0 8B86F0FD MOV AX,[BP+FDF0]

1714:5CD4 8983FCFD MOV [BP+DI+FDFC],AX

1714:5CD8 FF46FE INC WORD PTR [BP-02]

1714:5CDB FF8EEAFD DEC WORD PTR [BP+FDEA]

1714:5CDF C786F6FD0100 MOV WORD PTR [BP+FDF6],0001

1714:5CE5 83BEEAFDFF CMP WORD PTR [BP+FDEA],-01

1714:5CEA 7E03 JLE 5CEF

1714:5CEC E9FDFD JMP 5AEC

1714:5CEF C786EAFD0700 MOV WORD PTR [BP+FDEA],0007

1714:5CF5 8B46FE MOV AX,[BP-02]

1714:5CF8 3986F4FD CMP [BP+FDF4],AX

1714:5CFC 7403 JZ 5D01

1714:5CFE E9BBFD JMP 5ABC

1714:5D01 5E POP SI

1714:5D02 5F POP DI

1714:5D03 8BE5 MOV SP,BP

1714:5D05 5D POP BP

1714:5D06 C20E00 RET 000E

}

1714:5D09 90 NOP

1714:5D0A 55 PUSH BP

1714:5D0B 8BEC MOV BP,SP

1714:5D0D 83EC0E SUB SP,+0E

1714:5D10 57 PUSH DI

1714:5D11 56 PUSH SI

1714:5D12 C746F80B00 MOV WORD PTR [BP-08],000B

1714:5D17 BE02AB MOV SI,AB02

1714:5D1A BF0B00 MOV DI,000B

1714:5D1D B90B00 MOV CX,000B

1714:5D20 57 PUSH DI

1714:5D21 8BFE MOV DI,SI

1714:5D23 8CD8 MOV AX,DS

1714:5D25 8EC0 MOV ES,AX

1714:5D27 B8FF00 MOV AX,00FF

1714:5D2A F2 REPNZ

1714:5D2B AA STOSB

1714:5D2C 5F POP DI

1714:5D2D 83C620 ADD SI,+20

1714:5D30 4F DEC DI

1714:5D31 75EA JNZ 5D1D

1714:5D33 8B4608 MOV AX,[BP+08]

1714:5D36 2D0500 SUB AX,0005

1714:5D39 8946F8 MOV [BP-08],AX

1714:5D3C 8B4606 MOV AX,[BP+06]

1714:5D3F 2D0500 SUB AX,0005

1714:5D42 8946F6 MOV [BP-0A],AX

1714:5D45 837E0A00 CMP WORD PTR [BP+0A],+00

1714:5D49 7E44 JLE 5D8F

1714:5D4B FF760A PUSH [BP+0A]

1714:5D4E 50 PUSH AX

1714:5D4F FF76F8 PUSH [BP-08]

1714:5D52 B891FF MOV AX,FF91

1714:5D55 50 PUSH AX

1714:5D56 2BC0 SUB AX,AX

1714:5D58 50 PUSH AX

1714:5D59 B82000 MOV AX,0020

1714:5D5C 50 PUSH AX

1714:5D5D B802AB MOV AX,AB02

1714:5D60 50 PUSH AX

1714:5D61 E8C4FC CALL 5A28

1714:5D64 BE02AB MOV SI,AB02

1714:5D67 C746F60B00 MOV WORD PTR [BP-0A],000B

1714:5D6C C746F80B00 MOV WORD PTR [BP-08],000B

1714:5D71 C746F40B00 MOV WORD PTR [BP-0C],000B

1714:5D76 8B56F4 MOV DX,[BP-0C]

1714:5D79 B90B00 MOV CX,000B

1714:5D7C 803C00 CMP BYTE PTR [SI],00

1714:5D7F 7502 JNZ 5D83

1714:5D81 FE0C DEC BYTE PTR [SI]

1714:5D83 46 INC SI

1714:5D84 E2F6 LOOP 5D7C

1714:5D86 83C615 ADD SI,+15

1714:5D89 4A DEC DX

1714:5D8A 75ED JNZ 5D79

1714:5D8C 8976FA MOV [BP-06],SI

1714:5D8F 837E0A00 CMP WORD PTR [BP+0A],+00

1714:5D93 7D60 JGE 5DF5

1714:5D95 8B4608 MOV AX,[BP+08]

1714:5D98 2D0500 SUB AX,0005

1714:5D9B 8946FE MOV [BP-02],AX

1714:5D9E 8B4606 MOV AX,[BP+06]

1714:5DA1 2D0500 SUB AX,0005

1714:5DA4 8946FC MOV [BP-04],AX

1714:5DA7 C746F60000 MOV WORD PTR [BP-0A],0000

1714:5DAC C746F40000 MOV WORD PTR [BP-0C],0000

1714:5DB1 2BF6 SUB SI,SI

1714:5DB3 8B46FC MOV AX,[BP-04]

1714:5DB6 0346F6 ADD AX,[BP-0A]

1714:5DB9 8BF8 MOV DI,AX

1714:5DBB 8B46FE MOV AX,[BP-02]

1714:5DBE 03C6 ADD AX,SI

1714:5DC0 8A0E9B58 MOV CL,[589B]

1714:5DC4 2AED SUB CH,CH

1714:5DC6 03C1 ADD AX,CX

1714:5DC8 50 PUSH AX

1714:5DC9 A09C58 MOV AL,[589C]

1714:5DCC 2AE4 SUB AH,AH

1714:5DCE 03C7 ADD AX,DI

1714:5DD0 50 PUSH AX

1714:5DD1 E82EE6 CALL 4402

1714:5DD4 8BD8 MOV BX,AX

1714:5DD6 8A07 MOV AL,[BX]

1714:5DD8 8B5EF4 MOV BX,[BP-0C]

1714:5DDB 888002AB MOV [BX+SI+AB02],AL

1714:5DDF 46 INC SI

1714:5DE0 83FE0B CMP SI,+0B

1714:5DE3 7CD6 JL 5DBB

1714:5DE5 8976F8 MOV [BP-08],SI

1714:5DE8 8346F420 ADD WORD PTR [BP-0C],+20

1714:5DEC FF46F6 INC WORD PTR [BP-0A]

1714:5DEF 837EF60B CMP WORD PTR [BP-0A],+0B

1714:5DF3 7CBC JL 5DB1

1714:5DF5 5E POP SI

1714:5DF6 5F POP DI

1714:5DF7 8BE5 MOV SP,BP

1714:5DF9 5D POP BP

1714:5DFA C20800 RET 0008

1714:5DFD 90 NOP

; 5dfe(p0,p1)

{

1714:5DFE 55 PUSH BP

1714:5DFF 8BEC MOV BP,SP

1714:5E01 807E064B CMP BYTE PTR [BP+06],4B

1714:5E05 7418 JZ 5E1F

1714:5E07 807E064A CMP BYTE PTR [BP+06],4A

1714:5E0B 7412 JZ 5E1F

1714:5E0D 807E06BA CMP BYTE PTR [BP+06],BA

1714:5E11 740C JZ 5E1F

1714:5E13 807E06BB CMP BYTE PTR [BP+06],BB

1714:5E17 7406 JZ 5E1F

1714:5E19 807E0698 CMP BYTE PTR [BP+06],98

1714:5E1D 750F JNZ 5E2E

1714:5E1F 837E0401 CMP WORD PTR [BP+04],+01

1714:5E23 7505 JNZ 5E2A

1714:5E25 B80100 MOV AX,0001

1714:5E28 EB1C JMP 5E46

1714:5E2A 2BC0 SUB AX,AX

1714:5E2C EB18 JMP 5E46

1714:5E2E B81300 MOV AX,0013

1714:5E31 50 PUSH AX

1714:5E32 8A4606 MOV AL,[BP+06]

1714:5E35 2AE4 SUB AH,AH

1714:5E37 50 PUSH AX

1714:5E38 B8866A MOV AX,6A86

1714:5E3B 50 PUSH AX

1714:5E3C E8C3A5 CALL 0402

1714:5E3F 83C406 ADD SP,+06

1714:5E42 0BC0 OR AX,AX

1714:5E44 EBDD JMP 5E23

1714:5E46 5D POP BP

1714:5E47 C20400 RET 0004

}

; 5e4a

{

1714:5E4A 55 PUSH BP

1714:5E4B 8BEC MOV BP,SP

1714:5E4D 81EC9400 SUB SP,0094

1714:5E51 57 PUSH DI

1714:5E52 56 PUSH SI

1714:5E53 C78672FF0000 MOV WORD PTR [BP+FF72],0000

1714:5E59 C746FE14AD MOV WORD PTR [BP-02],AD14

1714:5E5E B90004 MOV CX,0400

1714:5E61 BF14AD MOV DI,AD14

1714:5E64 8CD8 MOV AX,DS

1714:5E66 8EC0 MOV ES,AX

1714:5E68 B8FF00 MOV AX,00FF

1714:5E6B F2 REPNZ

1714:5E6C AA STOSB

1714:5E6D C746FA0000 MOV WORD PTR [BP-06],0000

1714:5E72 2BF6 SUB SI,SI

1714:5E74 8BBE72FF MOV DI,[BP+FF72]

1714:5E78 A09B58 MOV AL,[589B]

1714:5E7B 2AE4 SUB AH,AH

1714:5E7D 03C6 ADD AX,SI

1714:5E7F 50 PUSH AX

1714:5E80 8B46FA MOV AX,[BP-06]

1714:5E83 8A0E9C58 MOV CL,[589C]

1714:5E87 2AED SUB CH,CH

1714:5E89 03C1 ADD AX,CX

1714:5E8B 50 PUSH AX

1714:5E8C E873E5 CALL 4402

1714:5E8F 8BD8 MOV BX,AX

1714:5E91 8A07 MOV AL,[BX]

1714:5E93 888670FF MOV [BP+FF70],AL

1714:5E97 B80A00 MOV AX,000A

1714:5E9A 50 PUSH AX

1714:5E9B 8A8670FF MOV AL,[BP+FF70]

1714:5E9F 2AE4 SUB AH,AH

1714:5EA1 50 PUSH AX

1714:5EA2 B89A6A MOV AX,6A9A

1714:5EA5 50 PUSH AX

1714:5EA6 E859A5 CALL 0402

1714:5EA9 83C406 ADD SP,+06

1714:5EAC 0BC0 OR AX,AX

1714:5EAE 7422 JZ 5ED2

1714:5EB0 8BDF MOV BX,DI

1714:5EB2 D1E3 SHL BX,1

1714:5EB4 03DD ADD BX,BP

1714:5EB6 8B46FA MOV AX,[BP-06]

1714:5EB9 898774FF MOV [BX+FF74],AX

1714:5EBD 47 INC DI

1714:5EBE 8BDF MOV BX,DI

1714:5EC0 D1E3 SHL BX,1

1714:5EC2 03DD ADD BX,BP

1714:5EC4 89B774FF MOV [BX+FF74],SI

1714:5EC8 47 INC DI

1714:5EC9 8B5EFE MOV BX,[BP-02]

1714:5ECC 8A8670FF MOV AL,[BP+FF70]

1714:5ED0 8807 MOV [BX],AL

1714:5ED2 FF46FE INC WORD PTR [BP-02]

1714:5ED5 46 INC SI

1714:5ED6 83FE20 CMP SI,+20

1714:5ED9 7C9D JL 5E78

1714:5EDB 89BE72FF MOV [BP+FF72],DI

1714:5EDF 8976FC MOV [BP-04],SI

1714:5EE2 FF46FA INC WORD PTR [BP-06]

1714:5EE5 837EFA20 CMP WORD PTR [BP-06],+20

1714:5EE9 7C87 JL 5E72

1714:5EEB 8BC7 MOV AX,DI

1714:5EED 8946FC MOV [BP-04],AX

1714:5EF0 C746FA0000 MOV WORD PTR [BP-06],0000

1714:5EF5 0BC0 OR AX,AX

1714:5EF7 7E6C JLE 5F65

1714:5EF9 C746F80B00 MOV WORD PTR [BP-08],000B

1714:5EFE 8B5EFA MOV BX,[BP-06]

1714:5F01 D1E3 SHL BX,1

1714:5F03 03DD ADD BX,BP

1714:5F05 8B8774FF MOV AX,[BX+FF74]

1714:5F09 2D0500 SUB AX,0005

1714:5F0C 8946F4 MOV [BP-0C],AX

1714:5F0F FF46FA INC WORD PTR [BP-06]

1714:5F12 8B5EFA MOV BX,[BP-06]

1714:5F15 D1E3 SHL BX,1

1714:5F17 03DD ADD BX,BP

1714:5F19 8B8774FF MOV AX,[BX+FF74]

1714:5F1D 2D0500 SUB AX,0005

1714:5F20 8946F6 MOV [BP-0A],AX

1714:5F23 BE02AB MOV SI,AB02

1714:5F26 BF0B00 MOV DI,000B

1714:5F29 B90B00 MOV CX,000B

1714:5F2C 57 PUSH DI

1714:5F2D 8BFE MOV DI,SI

1714:5F2F 8CD8 MOV AX,DS

1714:5F31 8EC0 MOV ES,AX

1714:5F33 B8FF00 MOV AX,00FF

1714:5F36 F2 REPNZ

1714:5F37 AA STOSB

1714:5F38 5F POP DI

1714:5F39 83C620 ADD SI,+20

1714:5F3C 4F DEC DI

1714:5F3D 75EA JNZ 5F29

1714:5F3F B80A00 MOV AX,000A

1714:5F42 50 PUSH AX

1714:5F43 FF76F4 PUSH [BP-0C]

1714:5F46 FF76F6 PUSH [BP-0A]

1714:5F49 FF76F4 PUSH [BP-0C]

1714:5F4C FF76F6 PUSH [BP-0A]

; call 5a28(ad14,0020)

1714:5F4F B82000 MOV AX,0020

1714:5F52 50 PUSH AX

1714:5F53 B814AD MOV AX,AD14

1714:5F56 50 PUSH AX

1714:5F57 E8CEFA CALL 5A28

1714:5F5A FF46FA INC WORD PTR [BP-06]

1714:5F5D 8B46FC MOV AX,[BP-04]

1714:5F60 3946FA CMP [BP-06],AX

1714:5F63 7C99 JL 5EFE

1714:5F65 BE14AD MOV SI,AD14

1714:5F68 C746FC0004 MOV WORD PTR [BP-04],0400

1714:5F6D B90004 MOV CX,0400

1714:5F70 803CFF CMP BYTE PTR [SI],FF

1714:5F73 7502 JNZ 5F77

1714:5F75 FE04 INC BYTE PTR [SI]

1714:5F77 46 INC SI

1714:5F78 E2F6 LOOP 5F70

1714:5F7A 8976FE MOV [BP-02],SI

1714:5F7D 5E POP SI

1714:5F7E 5F POP DI

1714:5F7F 8BE5 MOV SP,BP

1714:5F81 5D POP BP

1714:5F82 C3 RET

}

1714:5F83 90 NOP

1714:5F84 0000 ADD [BX+SI],AL

special_handler(p0,p1,p2) - 5f86

{

; p0 = ?

; p1 = ?

; p2 = ?

1714:5F86 55 PUSH BP

1714:5F87 8BEC MOV BP,SP

1714:5F89 83EC12 SUB SP,+12

1714:5F8C 57 PUSH DI

1714:5F8D 56 PUSH SI

; set *58a1 = p2

1714:5F8E 8A4608 MOV AL,[BP+08]

1714:5F91 A2A158 MOV [58A1],AL

; clear ah & set bp-6 = x coord

1714:5F94 A09658 MOV AL,[5896]

1714:5F97 2AE4 SUB AH,AH

1714:5F99 8946FA MOV [BP-06],AX

; set bp-a = y coord

1714:5F9C A09758 MOV AL,[5897]

1714:5F9F 8946F6 MOV [BP-0A],AX

; set bp-8 = map level

1714:5FA2 A09558 MOV AL,[5895]

1714:5FA5 8946F8 MOV [BP-08],AX

; set backup map = current map

1714:5FA8 A09358 MOV AL,[5893]

1714:5FAB A29458 MOV [5894],AL

; set bp-2 = 587b

1714:5FAE A07B58 MOV AL,[587B]

1714:5FB1 8946FE MOV [BP-02],AX

; set map id = ff (special)

1714:5FB4 C6069358FF MOV BYTE PTR [5893],FF

; set bp-c = 0020

1714:5FB9 C746F42000 MOV WORD PTR [BP-0C],0020

1714:5FBE BFFCA9 MOV DI,A9FC

1714:5FC1 BE5A5C MOV SI,5C5A

{

1714:5FC4 56 PUSH SI

1714:5FC5 57 PUSH DI

1714:5FC6 1E PUSH DS

1714:5FC7 07 POP ES

1714:5FC8 A5 MOVSW

1714:5FC9 A5 MOVSW

1714:5FCA A5 MOVSW

1714:5FCB A5 MOVSW

1714:5FCC 5F POP DI

1714:5FCD 5E POP SI

1714:5FCE 83C708 ADD DI,+08

1714:5FD1 83C608 ADD SI,+08

1714:5FD4 81FE5A5D CMP SI,5D5A

1714:5FD8 72EA JB 5FC4

}

; if p2 != 0, jump to 602e

1714:5FDA 837E0800 CMP WORD PTR [BP+08],+00

1714:5FDE 754E JNZ 602E

1714:5FE0 8B5E06 MOV BX,[BP+06]

1714:5FE3 B103 MOV CL,03

1714:5FE5 D3E3 SHL BX,CL

1714:5FE7 8A875A5C MOV AL,[BX+5C5A]

1714:5FEB 24FC AND AL,FC

1714:5FED 3C2C CMP AL,2C

1714:5FEF 7507 JNZ 5FF8

1714:5FF1 C746FC0100 MOV WORD PTR [BP-04],0001

1714:5FF6 EB17 JMP 600F

1714:5FF8 8B5E06 MOV BX,[BP+06]

1714:5FFB B103 MOV CL,03

1714:5FFD D3E3 SHL BX,CL

1714:5FFF 8A875A5C MOV AL,[BX+5C5A]

1714:6003 2AE4 SUB AH,AH

1714:6005 2D4000 SUB AX,0040

1714:6008 D1E8 SHR AX,1

1714:600A D1E8 SHR AX,1

1714:600C 8946FC MOV [BP-04],AX

1714:600F 8B5E06 MOV BX,[BP+06]

1714:6012 B103 MOV CL,03

1714:6014 D3E3 SHL BX,CL

1714:6016 80BF5F5C7F CMP BYTE PTR [BX+5C5F],7F

1714:601B 7604 JBE 6021

1714:601D 8046FD01 ADD BYTE PTR [BP-03],01

; call 6bc2(bp-4,0001)

1714:6021 B80100 MOV AX,0001

1714:6024 50 PUSH AX

1714:6025 FF76FC PUSH [BP-04]

1714:6028 E8970B CALL 6BC2

1714:602B EB2F JMP 605C

1714:602D 90 NOP

; if bit 2 (camping) is not set on p2, jump to 6046

1714:602E F6460804 TEST BYTE PTR [BP+08],04

1714:6032 7412 JZ 6046

; call cmds.bf80(p0,p1,p2)

1714:6034 FF7608 PUSH [BP+08]

1714:6037 FF7606 PUSH [BP+06]

1714:603A FF7604 PUSH [BP+04]

1714:603D E83620 CALL 8076

; if ax == 0, jump to 606c

1714:6040 0BC0 OR AX,AX

1714:6042 7428 JZ 606C

1714:6044 EB16 JMP 605C

; if bit 1 (no watch) is set on p2, jump to 606c

1714:6046 F6460802 TEST BYTE PTR [BP+08],02

1714:604A 7420 JZ 606C

1714:604C 8B4606 MOV AX,[BP+06]

1714:604F 8946FC MOV [BP-04],AX

; call lookobj.b40e(0002,0000)

1714:6052 2BC0 SUB AX,AX

1714:6054 50 PUSH AX

1714:6055 B80200 MOV AX,0002

1714:6058 50 PUSH AX

1714:6059 E8E21B CALL 7C3E

; set *587b = *589e = ff

1714:605C B0FF MOV AL,FF

1714:605E A27B58 MOV [587B],AL

1714:6061 A29E58 MOV [589E],AL

; set map id = 0

1714:6064 C606A35800 MOV BYTE PTR [58A3],00

; call combat.ae24()

1714:6069 E8C61B CALL 7C32

# 6069 call 0e49 ; midi_combat()

; if *bb16 == 0, jump to 607f

1714:606C 803E16BB00 CMP BYTE PTR [BB16],00

1714:6071 740C JZ 607F

; else set *bb16 = 0

1714:6073 C60616BB00 MOV BYTE PTR [BB16],00

; call 6fbc(0001)

1714:6078 B80100 MOV AX,0001

1714:607B 50 PUSH AX

1714:607C E83D0F CALL 6FBC

; set *5896 = saved x coord

1714:607F 8A46FA MOV AL,[BP-06]

1714:6082 A29658 MOV [5896],AL

; set *5897 = saved y coord

1714:6085 8A46F6 MOV AL,[BP-0A]

1714:6088 A29758 MOV [5897],AL

; set *5895 = saved map level

1714:608B 8A46F8 MOV AL,[BP-08]

1714:608E A29558 MOV [5895],AL

; set *5893 = saved map id

1714:6091 A09458 MOV AL,[5894]

1714:6094 A29358 MOV [5893],AL

; set *24e6 = 01

1714:6097 C606E62401 MOV BYTE PTR [24E6],01

; call update_vitals()

1714:609C E861C8 CALL 2900

1714:609F 8B5EFE MOV BX,[BP-02]

1714:60A2 B105 MOV CL,05

1714:60A4 D3E3 SHL BX,CL

1714:60A6 8A87B355 MOV AL,[BX+55B3]

1714:60AA 8846F0 MOV [BP-10],AL

1714:60AD 3C44 CMP AL,44

1714:60AF 740D JZ 60BE

1714:60B1 3C53 CMP AL,53

1714:60B3 7409 JZ 60BE

1714:60B5 8A46FE MOV AL,[BP-02]

1714:60B8 A27B58 MOV [587B],AL

1714:60BB EB06 JMP 60C3

1714:60BD 90 NOP

; set *587b = ff

1714:60BE C6067B58FF MOV BYTE PTR [587B],FF

; set bp-c = 0020

1714:60C3 C746F42000 MOV WORD PTR [BP-0C],0020

1714:60C8 BF5A5C MOV DI,5C5A

1714:60CB BEFCA9 MOV SI,A9FC

{

1714:60CE 56 PUSH SI

1714:60CF 57 PUSH DI

1714:60D0 1E PUSH DS

1714:60D1 07 POP ES

1714:60D2 A5 MOVSW

1714:60D3 A5 MOVSW

1714:60D4 A5 MOVSW

1714:60D5 A5 MOVSW

1714:60D6 5F POP DI

1714:60D7 5E POP SI

1714:60D8 83C708 ADD DI,+08

1714:60DB 83C608 ADD SI,+08

1714:60DE 81FEFCAA CMP SI,AAFC

1714:60E2 72EA JB 60CE

}

; restore & return

1714:60E4 5E POP SI

1714:60E5 5F POP DI

1714:60E6 8BE5 MOV SP,BP

1714:60E8 5D POP BP

1714:60E9 C20600 RET 0006

}

load_special_map() - 60ec

{

1714:60EC 55 PUSH BP

1714:60ED 8BEC MOV BP,SP

1714:60EF 83EC04 SUB SP,+04

1714:60F2 57 PUSH DI

1714:60F3 56 PUSH SI

; call read_file_from_disk(ax,0160,ad14,a3f0 -> "BRIT.CBT")

1714:60F4 B8F0A3 MOV AX,A3F0

1714:60F7 50 PUSH AX

1714:60F8 B814AD MOV AX,AD14

1714:60FB 50 PUSH AX

1714:60FC B86001 MOV AX,0160

1714:60FF 50 PUSH AX

1714:6100 F76E04 IMUL WORD PTR [BP+04]

1714:6103 50 PUSH AX

1714:6104 E867C4 CALL 256E

1714:6107 C746FE0000 MOV WORD PTR [BP-02],0000

1714:610C B90300 MOV CX,0003

1714:610F BF2417 MOV DI,1724

1714:6112 BE7FAD MOV SI,AD7F

1714:6115 1E PUSH DS

1714:6116 07 POP ES

1714:6117 F2 REPNZ

1714:6118 A5 MOVSW

1714:6119 B90300 MOV CX,0003

1714:611C BF2C17 MOV DI,172C

1714:611F BE85AD MOV SI,AD85

1714:6122 F2 REPNZ

1714:6123 A5 MOVSW

1714:6124 8346FE06 ADD WORD PTR [BP-02],+06

1714:6128 C746FE0000 MOV WORD PTR [BP-02],0000

1714:612D B90800 MOV CX,0008

1714:6130 BF0417 MOV DI,1704

1714:6133 BEDFAD MOV SI,ADDF

1714:6136 F2 REPNZ

1714:6137 A5 MOVSW

1714:6138 B90800 MOV CX,0008

1714:613B BF1417 MOV DI,1714

1714:613E BEFFAD MOV SI,ADFF

1714:6141 F2 REPNZ

1714:6142 A5 MOVSW

1714:6143 8346FE10 ADD WORD PTR [BP-02],+10

1714:6147 5E POP SI

1714:6148 5F POP DI

1714:6149 8BE5 MOV SP,BP

1714:614B 5D POP BP

1714:614C C20200 RET 0002

}

1714:614F 90 NOP

attack_monster(p0) - 6150

{

1714:6150 55 PUSH BP

1714:6151 8BEC MOV BP,SP

1714:6153 83EC08 SUB SP,+08

1714:6156 56 PUSH SI

1714:6157 8B5E04 MOV BX,[BP+04]

1714:615A B103 MOV CL,03

1714:615C D3E3 SHL BX,CL

1714:615E 8A875A5C MOV AL,[BX+5C5A]

1714:6162 2AE4 SUB AH,AH

1714:6164 25FC00 AND AX,00FC

1714:6167 8946F8 MOV [BP-08],AX

; call print_character('\n')

1714:616A B80A00 MOV AX,000A

1714:616D 50 PUSH AX

1714:616E E849B5 CALL 16BA

; call print_character(00fc)

1714:6171 B8FC00 MOV AX,00FC

1714:6174 50 PUSH AX

1714:6175 E842B5 CALL 16BA

1714:6178 837EF840 CMP WORD PTR [BP-08],+40

1714:617C 7D06 JGE 6184

; set ax -> "PIRATES"

1714:617E B8FAA3 MOV AX,A3FA

1714:6181 50 PUSH AX

1714:6182 EB1C JMP 61A0

1714:6184 8B46F8 MOV AX,[BP-08]

1714:6187 2D4000 SUB AX,0040

1714:618A 99 CWD

1714:618B 33C2 XOR AX,DX

1714:618D 2BC2 SUB AX,DX

1714:618F B90200 MOV CX,0002

1714:6192 D3F8 SAR AX,CL

1714:6194 33C2 XOR AX,DX

1714:6196 2BC2 SUB AX,DX

1714:6198 8BD8 MOV BX,AX

1714:619A D1E3 SHL BX,1

; get monster name from string table

1714:619C FFB7B618 PUSH [BX+18B6]

; call print_string(monster name)

1714:61A0 E8ADB6 CALL 1850

1714:61A3 B8FB00 MOV AX,00FB

1714:61A6 50 PUSH AX

1714:61A7 E810B5 CALL 16BA

; call print_string(a402 -> "\n\n")

1714:61AA B802A4 MOV AX,A402

1714:61AD 50 PUSH AX

1714:61AE E89FB6 CALL 1850

1714:61B1 8B7604 MOV SI,[BP+04]

1714:61B4 B103 MOV CL,03

1714:61B6 D3E6 SHL SI,CL

; call get_address_of_tile_id(*(si+5c5c), *(si+5c5d))

1714:61B8 8A845C5C MOV AL,[SI+5C5C]

1714:61BC 2AE4 SUB AH,AH

1714:61BE 50 PUSH AX

1714:61BF 8A845D5C MOV AL,[SI+5C5D]

1714:61C3 50 PUSH AX

1714:61C4 E83BE2 CALL 4402

; set bx = tile id

1714:61C7 8BD8 MOV BX,AX

1714:61C9 8A07 MOV AL,[BX]

1714:61CB 2AE4 SUB AH,AH

1714:61CD 8946FC MOV [BP-04],AX

1714:61D0 3D0400 CMP AX,0004

1714:61D3 7C12 JL 61E7

1714:61D5 8A46FC MOV AL,[BP-04]

1714:61D8 24FE AND AL,FE

1714:61DA 3C6A CMP AL,6A

1714:61DC 7410 JZ 61EE

1714:61DE 8A46FC MOV AL,[BP-04]

1714:61E1 24F0 AND AL,F0

1714:61E3 3C60 CMP AL,60

1714:61E5 7507 JNZ 61EE

1714:61E7 C746FA0100 MOV WORD PTR [BP-06],0001

1714:61EC EB05 JMP 61F3

1714:61EE C746FA0000 MOV WORD PTR [BP-06],0000

1714:61F3 817EF8FC00 CMP WORD PTR [BP-08],00FC

1714:61F8 7532 JNZ 622C

; set bp-2 = 000a

1714:61FA C746FE0A00 MOV WORD PTR [BP-02],000A

1714:61FF 803EB55700 CMP BYTE PTR [57B5],00

1714:6204 7503 JNZ 6209

1714:6206 E93101 JMP 633A

; call print_string(a406 -> "The Sceptre is reclaimed!")

1714:6209 B806A4 MOV AX,A406

1714:620C 50 PUSH AX

1714:620D E840B6 CALL 1850

1714:6210 B8D20F MOV AX,0FD2

1714:6213 50 PUSH AX

1714:6214 B80100 MOV AX,0001

1714:6217 50 PUSH AX

1714:6218 B8E8FD MOV AX,FDE8

1714:621B 50 PUSH AX

1714:621C B80100 MOV AX,0001

1714:621F 50 PUSH AX

1714:6220 50 PUSH AX

1714:6221 E86EBF CALL 2192

1714:6224 C606B55700 MOV BYTE PTR [57B5],00

1714:6229 E90E01 JMP 633A

1714:622C 8A46F8 MOV AL,[BP-08]

1714:622F 24F0 AND AL,F0

1714:6231 3C80 CMP AL,80

1714:6233 7505 JNZ 623A

1714:6235 C746FA0100 MOV WORD PTR [BP-06],0001

1714:623A A07C58 MOV AL,[587C]

1714:623D 24F8 AND AL,F8

1714:623F 3C20 CMP AL,20

1714:6241 7525 JNZ 6268

1714:6243 837EF82C CMP WORD PTR [BP-08],+2C

1714:6247 7509 JNZ 6252

; set bp-2 = 000a

1714:6249 C746FE0E00 MOV WORD PTR [BP-02],000E

1714:624E E9E900 JMP 633A

1714:6251 90 NOP

1714:6252 837EFA00 CMP WORD PTR [BP-06],+00

1714:6256 7408 JZ 6260

; set bp-2 = 000b

1714:6258 C746FE0B00 MOV WORD PTR [BP-02],000B

1714:625D E9DA00 JMP 633A

; set bp-2 = 000d

1714:6260 C746FE0D00 MOV WORD PTR [BP-02],000D

1714:6265 E9D200 JMP 633A

1714:6268 837EF82C CMP WORD PTR [BP-08],+2C

1714:626C 7508 JNZ 6276

; set bp-2 = 000c

1714:626E C746FE0C00 MOV WORD PTR [BP-02],000C

1714:6273 E9C400 JMP 633A

1714:6276 837EFA00 CMP WORD PTR [BP-06],+00

1714:627A 7408 JZ 6284

; set bp-2 = 000f

1714:627C C746FE0F00 MOV WORD PTR [BP-02],000F

1714:6281 E9B600 JMP 633A

1714:6284 8B46FC MOV AX,[BP-04]

1714:6287 3D0800 CMP AX,0008

1714:628A 7424 JZ 62B0

1714:628C 7F58 JG 62E6

1714:628E 2D0100 SUB AX,0001

1714:6291 3D0600 CMP AX,0006

1714:6294 776B JA 6301

1714:6296 03C0 ADD AX,AX

1714:6298 93 XCHG BX,AX

1714:6299 2E CS:

1714:629A FFA7D862 JMP [BX+62D8]

1714:629E EBDC JMP 627C

1714:62A0 C746FE0100 MOV WORD PTR [BP-02],0001

1714:62A5 E99200 JMP 633A

1714:62A8 C746FE0200 MOV WORD PTR [BP-02],0002

1714:62AD E98A00 JMP 633A

1714:62B0 C746FE0300 MOV WORD PTR [BP-02],0003

1714:62B5 E98200 JMP 633A

1714:62B8 C746FE0400 MOV WORD PTR [BP-02],0004

1714:62BD EB7B JMP 633A

1714:62BF 90 NOP

1714:62C0 C746FE0500 MOV WORD PTR [BP-02],0005

1714:62C5 EB73 JMP 633A

1714:62C7 90 NOP

1714:62C8 C746FE0600 MOV WORD PTR [BP-02],0006

1714:62CD EB6B JMP 633A

1714:62CF 90 NOP

1714:62D0 C746FE0700 MOV WORD PTR [BP-02],0007

1714:62D5 EB63 JMP 633A

1714:62D7 90 NOP

1714:62D8 7C62 JL 633C

1714:62DA 7C62 JL 633E

1714:62DC 7C62 JL 6340

1714:62DE A062A8 MOV AL,[A862]

1714:62E1 62 DB 62

1714:62E2 B062 MOV AL,62

1714:62E4 B8623D MOV AX,3D62

1714:62E7 1D0074 SBB AX,7400

1714:62EA E57F IN AX,7F

1714:62EC 233D AND DI,[DI]

1714:62EE 0900 OR [BX+SI],AX

1714:62F0 7C0F JL 6301

1714:62F2 3D0A00 CMP AX,000A

1714:62F5 7EC9 JLE 62C0

1714:62F7 3D0B00 CMP AX,000B

1714:62FA 7C05 JL 6301

1714:62FC 3D0F00 CMP AX,000F

1714:62FF 7EC7 JLE 62C8

1714:6301 803E935800 CMP BYTE PTR [5893],00

1714:6306 74A0 JZ 62A8

1714:6308 C746FE0800 MOV WORD PTR [BP-02],0008

1714:630D EB2B JMP 633A

1714:630F 90 NOP

1714:6310 3D4400 CMP AX,0044

1714:6313 74F3 JZ 6308

1714:6315 7F0D JG 6324

1714:6317 3D1E00 CMP AX,001E

1714:631A 7CE5 JL 6301

1714:631C 3D1F00 CMP AX,001F

1714:631F 7E97 JLE 62B8

1714:6321 EBDE JMP 6301

1714:6323 90 NOP

1714:6324 3D4800 CMP AX,0048

1714:6327 7CD8 JL 6301

1714:6329 3D4900 CMP AX,0049

1714:632C 7EA2 JLE 62D0

1714:632E 3D6A00 CMP AX,006A

1714:6331 7CCE JL 6301

1714:6333 3D6B00 CMP AX,006B

1714:6336 7E98 JLE 62D0

1714:6338 EBC7 JMP 6301

; prepare p2 for 5f86

1714:633A FF76FE PUSH [BP-02]

; call load_special_map()

1714:633D E8ACFD CALL 60EC

; call special_handler(bp-4,0000, bp-2)

1714:6340 2BC0 SUB AX,AX

1714:6342 50 PUSH AX

1714:6343 FF7604 PUSH [BP+04]

1714:6346 50 PUSH AX

1714:6347 E83CFC CALL 5F86

; call sjog.dfbe(p0)

1714:634A FF7604 PUSH [BP+04]

1714:634D E8C61C CALL 8016

1714:6350 E8F7FA CALL 5E4A

1714:6353 2BC0 SUB AX,AX

1714:6355 50 PUSH AX

1714:6356 E823EC CALL 4F7C

1714:6359 5E POP SI

1714:635A 8BE5 MOV SP,BP

1714:635C 5D POP BP

1714:635D C20200 RET 0002

}

camping(p0,p1) - 6360

{

1714:6360 55 PUSH BP

1714:6361 8BEC MOV BP,SP

; call load_special_map(0)

1714:6363 2BC0 SUB AX,AX

1714:6365 50 PUSH AX

1714:6366 E883FD CALL 60EC

; call special_handler(p0,p1,0004)

1714:6369 B80400 MOV AX,0004

1714:636C 50 PUSH AX

1714:636D FF7606 PUSH [BP+06]

1714:6370 FF7604 PUSH [BP+04]

1714:6373 E810FC CALL 5F86

# 6373 jmp 0e5a ; midi_camping_with_watch()

; call 5e4a()

1714:6376 E8D1FA CALL 5E4A

1714:6379 5D POP BP

1714:637A C20400 RET 0004

}

1714:637D 90 NOP

; 637e

{

1714:637E 55 PUSH BP

1714:637F 8BEC MOV BP,SP

1714:6381 83EC02 SUB SP,+02

1714:6384 2BC0 SUB AX,AX

1714:6386 50 PUSH AX

1714:6387 E8E6A6 CALL 0A70

1714:638A 2BC0 SUB AX,AX

1714:638C 50 PUSH AX

1714:638D 50 PUSH AX

1714:638E B83F01 MOV AX,013F

1714:6391 50 PUSH AX

1714:6392 B8C700 MOV AX,00C7

1714:6395 50 PUSH AX

1714:6396 E80DA7 CALL 0AA6

1714:6399 FF36B213 PUSH [13B2]

1714:639D E8D0A6 CALL 0A70

1714:63A0 2BC0 SUB AX,AX

1714:63A2 50 PUSH AX

1714:63A3 50 PUSH AX

1714:63A4 B83F01 MOV AX,013F

1714:63A7 50 PUSH AX

1714:63A8 B80600 MOV AX,0006

1714:63AB 50 PUSH AX

1714:63AC E8F7A6 CALL 0AA6

1714:63AF 2BC0 SUB AX,AX

1714:63B1 50 PUSH AX

1714:63B2 B8B900 MOV AX,00B9

1714:63B5 50 PUSH AX

1714:63B6 B8BF00 MOV AX,00BF

1714:63B9 50 PUSH AX

1714:63BA 50 PUSH AX

1714:63BB E8E8A6 CALL 0AA6

1714:63BE 2BC0 SUB AX,AX

1714:63C0 50 PUSH AX

1714:63C1 50 PUSH AX

1714:63C2 B80600 MOV AX,0006

1714:63C5 50 PUSH AX

1714:63C6 B8BF00 MOV AX,00BF

1714:63C9 50 PUSH AX

1714:63CA E8D9A6 CALL 0AA6

1714:63CD B8B900 MOV AX,00B9

1714:63D0 50 PUSH AX

1714:63D1 2BC0 SUB AX,AX

1714:63D3 50 PUSH AX

1714:63D4 B8BF00 MOV AX,00BF

1714:63D7 50 PUSH AX

1714:63D8 50 PUSH AX

1714:63D9 E8CAA6 CALL 0AA6

1714:63DC B83901 MOV AX,0139

1714:63DF 50 PUSH AX

1714:63E0 2BC0 SUB AX,AX

1714:63E2 50 PUSH AX

1714:63E3 B83F01 MOV AX,013F

1714:63E6 50 PUSH AX

1714:63E7 B85700 MOV AX,0057

1714:63EA 50 PUSH AX

1714:63EB E8B8A6 CALL 0AA6

1714:63EE B8C000 MOV AX,00C0

1714:63F1 50 PUSH AX

1714:63F2 B85000 MOV AX,0050

1714:63F5 50 PUSH AX

1714:63F6 B83801 MOV AX,0138

1714:63F9 50 PUSH AX

1714:63FA B85700 MOV AX,0057

1714:63FD 50 PUSH AX

1714:63FE E8A5A6 CALL 0AA6

1714:6401 B8C000 MOV AX,00C0

1714:6404 50 PUSH AX

1714:6405 B83900 MOV AX,0039

1714:6408 50 PUSH AX

1714:6409 B83801 MOV AX,0138

1714:640C 50 PUSH AX

1714:640D B83F00 MOV AX,003F

1714:6410 50 PUSH AX

1714:6411 E892A6 CALL 0AA6

; call set_text_color(13b2 -> 01)

1714:6414 FF36B213 PUSH [13B2]

1714:6418 E8AFB8 CALL 1CCA

; call set_text_cursor_position(0000,0000)

1714:641B 2BC0 SUB AX,AX

1714:641D 50 PUSH AX

1714:641E 50 PUSH AX

1714:641F E8D0B7 CALL 1BF2

; call print_character(upper-left block)

1714:6422 B87B00 MOV AX,007B

1714:6425 50 PUSH AX

1714:6426 E891B2 CALL 16BA

; call set_text_cursor_position(0000,0027)

1714:6429 B82700 MOV AX,0027

1714:642C 50 PUSH AX

1714:642D 2BC0 SUB AX,AX

1714:642F 50 PUSH AX

1714:6430 E8BFB7 CALL 1BF2

; call print_character(upper-right block)

1714:6433 B87C00 MOV AX,007C

1714:6436 50 PUSH AX

1714:6437 E880B2 CALL 16BA

; call set_text_cursor_position(0017,0000)

1714:643A 2BC0 SUB AX,AX

1714:643C 50 PUSH AX

1714:643D B81700 MOV AX,0017

1714:6440 50 PUSH AX

1714:6441 E8AEB7 CALL 1BF2

; call print_character(lower-left block)

1714:6444 B87D00 MOV AX,007D

1714:6447 50 PUSH AX

1714:6448 E86FB2 CALL 16BA

; call set_text_color(13b0 -> 03)

1714:644B FF36B013 PUSH [13B0]

1714:644F E81EA6 CALL 0A70

1714:6452 B80700 MOV AX,0007

1714:6455 50 PUSH AX

1714:6456 50 PUSH AX

1714:6457 50 PUSH AX

1714:6458 B8B800 MOV AX,00B8

1714:645B 50 PUSH AX

1714:645C E8B1A6 CALL 0B10

1714:645F B8B800 MOV AX,00B8

1714:6462 50 PUSH AX

1714:6463 50 PUSH AX

1714:6464 E829AB CALL 0F90

1714:6467 B8B800 MOV AX,00B8

1714:646A 50 PUSH AX

1714:646B B80700 MOV AX,0007

1714:646E 50 PUSH AX

1714:646F E81EAB CALL 0F90

1714:6472 B80700 MOV AX,0007

1714:6475 50 PUSH AX

1714:6476 50 PUSH AX

1714:6477 E816AB CALL 0F90

1714:647A B8BF00 MOV AX,00BF

1714:647D 50 PUSH AX

1714:647E 50 PUSH AX

1714:647F 50 PUSH AX

1714:6480 B85700 MOV AX,0057

1714:6483 50 PUSH AX

1714:6484 E889A6 CALL 0B10

1714:6487 B83F01 MOV AX,013F

1714:648A 50 PUSH AX

1714:648B B85700 MOV AX,0057

1714:648E 50 PUSH AX

1714:648F E8FEAA CALL 0F90

1714:6492 B8BF00 MOV AX,00BF

1714:6495 50 PUSH AX

1714:6496 B80700 MOV AX,0007

1714:6499 50 PUSH AX

1714:649A B83801 MOV AX,0138

1714:649D 50 PUSH AX

1714:649E B80700 MOV AX,0007

1714:64A1 50 PUSH AX

1714:64A2 E86BA6 CALL 0B10

1714:64A5 B83801 MOV AX,0138

1714:64A8 50 PUSH AX

1714:64A9 B83800 MOV AX,0038

1714:64AC 50 PUSH AX

1714:64AD E8E0AA CALL 0F90

1714:64B0 B8BF00 MOV AX,00BF

1714:64B3 50 PUSH AX

1714:64B4 B83800 MOV AX,0038

1714:64B7 50 PUSH AX

1714:64B8 E8D5AA CALL 0F90

1714:64BB B8BF00 MOV AX,00BF

1714:64BE 50 PUSH AX

1714:64BF B80700 MOV AX,0007

1714:64C2 50 PUSH AX

1714:64C3 E8CAAA CALL 0F90

1714:64C6 B8BF00 MOV AX,00BF

1714:64C9 50 PUSH AX

1714:64CA B83F00 MOV AX,003F

1714:64CD 50 PUSH AX

1714:64CE B83801 MOV AX,0138

1714:64D1 50 PUSH AX

1714:64D2 B83F00 MOV AX,003F

1714:64D5 50 PUSH AX

1714:64D6 E837A6 CALL 0B10

1714:64D9 B83801 MOV AX,0138

1714:64DC 50 PUSH AX

1714:64DD B85000 MOV AX,0050

1714:64E0 50 PUSH AX

1714:64E1 E8ACAA CALL 0F90

1714:64E4 B8BF00 MOV AX,00BF

1714:64E7 50 PUSH AX

1714:64E8 B85000 MOV AX,0050

1714:64EB 50 PUSH AX

1714:64EC E8A1AA CALL 0F90

1714:64EF B8BF00 MOV AX,00BF

1714:64F2 50 PUSH AX

1714:64F3 B83F00 MOV AX,003F

1714:64F6 50 PUSH AX

1714:64F7 E896AA CALL 0F90

; call set_text_color(13b0 -> 03)

1714:64FA FF36B013 PUSH [13B0]

1714:64FE E8C9B7 CALL 1CCA

; restore & return

1714:6501 8BE5 MOV SP,BP

1714:6503 5D POP BP

1714:6504 C3 RET

}

1714:6505 90 NOP

; 6506

{

1714:6506 55 PUSH BP

1714:6507 8BEC MOV BP,SP

1714:6509 83EC20 SUB SP,+20

1714:650C 57 PUSH DI

1714:650D 56 PUSH SI

1714:650E C746F80000 MOV WORD PTR [BP-08],0000

1714:6513 C746FC0000 MOV WORD PTR [BP-04],0000

1714:6518 C746FAFFFF MOV WORD PTR [BP-06],FFFF

1714:651D 837E0A02 CMP WORD PTR [BP+0A],+02

1714:6521 7503 JNZ 6526

1714:6523 E9FF00 JMP 6625

1714:6526 837E0A00 CMP WORD PTR [BP+0A],+00

1714:652A 7505 JNZ 6531

1714:652C C746F80600 MOV WORD PTR [BP-08],0006

1714:6531 8B46F8 MOV AX,[BP-08]

1714:6534 8946FC MOV [BP-04],AX

1714:6537 3D2000 CMP AX,0020

1714:653A 7C03 JL 653F

1714:653C E9E600 JMP 6625

1714:653F 8B460C MOV AX,[BP+0C]

1714:6542 B103 MOV CL,03

1714:6544 D3E0 SHL AX,CL

1714:6546 8946EE MOV [BP-12],AX

1714:6549 05BD13 ADD AX,13BD

1714:654C 8946F6 MOV [BP-0A],AX

1714:654F 8B46EE MOV AX,[BP-12]

1714:6552 05C113 ADD AX,13C1

1714:6555 8946F4 MOV [BP-0C],AX

1714:6558 8B460C MOV AX,[BP+0C]

1714:655B B105 MOV CL,05

1714:655D D3E0 SHL AX,CL

1714:655F 8946EC MOV [BP-14],AX

1714:6562 05B355 ADD AX,55B3

1714:6565 8946F2 MOV [BP-0E],AX

1714:6568 8B46EC MOV AX,[BP-14]

1714:656B 05B555 ADD AX,55B5

1714:656E 8946F0 MOV [BP-10],AX

1714:6571 8B7EFC MOV DI,[BP-04]

1714:6574 8B76FE MOV SI,[BP-02]

1714:6577 8BDF MOV BX,DI

1714:6579 B103 MOV CL,03

1714:657B D3E3 SHL BX,CL

1714:657D 80BF16BA00 CMP BYTE PTR [BX+BA16],00

1714:6582 7403 JZ 6587

1714:6584 E95F01 JMP 66E6

1714:6587 8BF7 MOV SI,DI

1714:6589 D3E6 SHL SI,CL

1714:658B 81C614BA ADD SI,BA14

1714:658F 897EFA MOV [BP-06],DI

1714:6592 837E0A01 CMP WORD PTR [BP+0A],+01

1714:6596 752D JNZ 65C5

1714:6598 8B5EF2 MOV BX,[BP-0E]

1714:659B 803F44 CMP BYTE PTR [BX],44

1714:659E 7425 JZ 65C5

1714:65A0 8B5EF0 MOV BX,[BP-10]

1714:65A3 8A07 MOV AL,[BX]

1714:65A5 884401 MOV [SI+01],AL

1714:65A8 B024 MOV AL,24

1714:65AA 2A4401 SUB AL,[SI+01]

1714:65AD 884405 MOV [SI+05],AL

1714:65B0 C6440280 MOV BYTE PTR [SI+02],80

1714:65B4 8B5EF2 MOV BX,[BP-0E]

1714:65B7 803F47 CMP BYTE PTR [BX],47

1714:65BA 7409 JZ 65C5

1714:65BC 803F50 CMP BYTE PTR [BX],50

1714:65BF 7404 JZ 65C5

1714:65C1 804C0208 OR BYTE PTR [SI+02],08

1714:65C5 837E0A00 CMP WORD PTR [BP+0A],+00

1714:65C9 7542 JNZ 660D

1714:65CB 8B5EF4 MOV BX,[BP-0C]

1714:65CE 8A07 MOV AL,[BX]

1714:65D0 8804 MOV [SI],AL

1714:65D2 B80700 MOV AX,0007

1714:65D5 50 PUSH AX

1714:65D6 E8D5D4 CALL 3AAE

1714:65D9 8BF8 MOV DI,AX

1714:65DB 83EF04 SUB DI,+04

1714:65DE 8BC7 MOV AX,DI

1714:65E0 8B5EF6 MOV BX,[BP-0A]

1714:65E3 0207 ADD AL,[BX]

1714:65E5 884401 MOV [SI+01],AL

1714:65E8 3C1E CMP AL,1E

1714:65EA 7605 JBE 65F1

1714:65EC 8A07 MOV AL,[BX]

1714:65EE 884401 MOV [SI+01],AL

1714:65F1 B024 MOV AL,24

1714:65F3 2A4401 SUB AL,[SI+01]

1714:65F6 884405 MOV [SI+05],AL

1714:65F9 C6440240 MOV BYTE PTR [SI+02],40

1714:65FD 837E0C08 CMP WORD PTR [BP+0C],+08

1714:6601 7406 JZ 6609

1714:6603 837E0C09 CMP WORD PTR [BP+0C],+09

1714:6607 7504 JNZ 660D

1714:6609 C6440220 MOV BYTE PTR [SI+02],20

1714:660D 8A460C MOV AL,[BP+0C]

1714:6610 884403 MOV [SI+03],AL

1714:6613 8A4608 MOV AL,[BP+08]

1714:6616 884406 MOV [SI+06],AL

1714:6619 8A4606 MOV AL,[BP+06]

1714:661C 884407 MOV [SI+07],AL

1714:661F 897EFC MOV [BP-04],DI

1714:6622 8976FE MOV [BP-02],SI

1714:6625 837EFAFF CMP WORD PTR [BP-06],-01

1714:6629 7F09 JG 6634

1714:662B 837E0A02 CMP WORD PTR [BP+0A],+02

1714:662F 7403 JZ 6634

1714:6631 E91801 JMP 674C

1714:6634 2BF6 SUB SI,SI

1714:6636 8B5EFE MOV BX,[BP-02]

1714:6639 8A07 MOV AL,[BX]

1714:663B 8846EC MOV [BP-14],AL

1714:663E 8A460C MOV AL,[BP+0C]

1714:6641 D0E0 SHL AL,1

1714:6643 D0E0 SHL AL,1

1714:6645 0440 ADD AL,40

1714:6647 8846EE MOV [BP-12],AL

1714:664A BF5A5C MOV DI,5C5A

1714:664D C746F25B5C MOV WORD PTR [BP-0E],5C5B

1714:6652 C746F45B5C MOV WORD PTR [BP-0C],5C5B

1714:6657 897EF6 MOV [BP-0A],DI

1714:665A C746EA5C5C MOV WORD PTR [BP-16],5C5C

1714:665F C746E85D5C MOV WORD PTR [BP-18],5C5D

1714:6664 C746E65E5C MOV WORD PTR [BP-1A],5C5E

1714:6669 C746E4615C MOV WORD PTR [BP-1C],5C61

1714:666E C746E25F5C MOV WORD PTR [BP-1E],5C5F

1714:6673 C746E05F5C MOV WORD PTR [BP-20],5C5F

1714:6678 8BD3 MOV DX,BX

1714:667A 8B4E0A MOV CX,[BP+0A]

1714:667D 803D00 CMP BYTE PTR [DI],00

1714:6680 7403 JZ 6685

1714:6682 E99700 JMP 671C

1714:6685 0BC9 OR CX,CX

1714:6687 7511 JNZ 669A

1714:6689 8BDA MOV BX,DX

1714:668B 8BC6 MOV AX,SI

1714:668D 884704 MOV [BX+04],AL

1714:6690 8B5EF2 MOV BX,[BP-0E]

1714:6693 8A46EE MOV AL,[BP-12]

1714:6696 8805 MOV [DI],AL

1714:6698 8807 MOV [BX],AL

1714:669A 83F901 CMP CX,+01

1714:669D 7507 JNZ 66A6

1714:669F 8BDA MOV BX,DX

1714:66A1 8BC6 MOV AX,SI

1714:66A3 884704 MOV [BX+04],AL

1714:66A6 83F902 CMP CX,+02

1714:66A9 7510 JNZ 66BB

1714:66AB 8B5EF6 MOV BX,[BP-0A]

1714:66AE 8A460C MOV AL,[BP+0C]

1714:66B1 8807 MOV [BX],AL

1714:66B3 8B5EF4 MOV BX,[BP-0C]

1714:66B6 8807 MOV [BX],AL

1714:66B8 8976FA MOV [BP-06],SI

1714:66BB 8B5EEA MOV BX,[BP-16]

1714:66BE 8A4608 MOV AL,[BP+08]

1714:66C1 8807 MOV [BX],AL

1714:66C3 8B5EE8 MOV BX,[BP-18]

1714:66C6 8A4606 MOV AL,[BP+06]

1714:66C9 8807 MOV [BX],AL

1714:66CB 8B5EE6 MOV BX,[BP-1A]

1714:66CE 8A4604 MOV AL,[BP+04]

1714:66D1 8807 MOV [BX],AL

1714:66D3 8B5EE4 MOV BX,[BP-1C]

1714:66D6 C607FF MOV BYTE PTR [BX],FF

1714:66D9 0BC9 OR CX,CX

1714:66DB 7515 JNZ 66F2

1714:66DD 8B5EE2 MOV BX,[BP-1E]

1714:66E0 8A46EC MOV AL,[BP-14]

1714:66E3 EB13 JMP 66F8

1714:66E5 90 NOP

1714:66E6 47 INC DI

1714:66E7 83FF20 CMP DI,+20

1714:66EA 7C03 JL 66EF

1714:66EC E930FF JMP 661F

1714:66EF E985FE JMP 6577

1714:66F2 8B5EE0 MOV BX,[BP-20]

1714:66F5 8A460C MOV AL,[BP+0C]

1714:66F8 8807 MOV [BX],AL

1714:66FA 83F902 CMP CX,+02

1714:66FD 7407 JZ 6706

1714:66FF 8BDA MOV BX,DX

1714:6701 8BC6 MOV AX,SI

1714:6703 884704 MOV [BX+04],AL

1714:6706 8976FC MOV [BP-04],SI

1714:6709 837E0A02 CMP WORD PTR [BP+0A],+02

1714:670D 7442 JZ 6751

1714:670F 83FE20 CMP SI,+20

1714:6712 753D JNZ 6751

1714:6714 837EFAFF CMP WORD PTR [BP-06],-01

1714:6718 7E37 JLE 6751

1714:671A EB30 JMP 674C

1714:671C 83C708 ADD DI,+08

1714:671F 8346F208 ADD WORD PTR [BP-0E],+08

1714:6723 8346F408 ADD WORD PTR [BP-0C],+08

1714:6727 8346F608 ADD WORD PTR [BP-0A],+08

1714:672B 8346EA08 ADD WORD PTR [BP-16],+08

1714:672F 8346E808 ADD WORD PTR [BP-18],+08

1714:6733 8346E608 ADD WORD PTR [BP-1A],+08

1714:6737 8346E408 ADD WORD PTR [BP-1C],+08

1714:673B 8346E208 ADD WORD PTR [BP-1E],+08

1714:673F 8346E008 ADD WORD PTR [BP-20],+08

1714:6743 46 INC SI

1714:6744 83FE20 CMP SI,+20

1714:6747 7DBD JGE 6706

1714:6749 E931FF JMP 667D

1714:674C C746FAFFFF MOV WORD PTR [BP-06],FFFF

1714:6751 837EFA00 CMP WORD PTR [BP-06],+00

1714:6755 7C31 JL 6788

1714:6757 C746FC2000 MOV WORD PTR [BP-04],0020

1714:675C BE18BA MOV SI,BA18

1714:675F 8B56FA MOV DX,[BP-06]

1714:6762 8A1C MOV BL,[SI]

1714:6764 2AFF SUB BH,BH

1714:6766 B103 MOV CL,03

1714:6768 D3E3 SHL BX,CL

1714:676A 8A87615C MOV AL,[BX+5C61]

1714:676E 2AE4 SUB AH,AH

1714:6770 3BC2 CMP AX,DX

1714:6772 750B JNZ 677F

1714:6774 8A1C MOV BL,[SI]

1714:6776 2AFF SUB BH,BH

1714:6778 D3E3 SHL BX,CL

1714:677A C687615CFF MOV BYTE PTR [BX+5C61],FF

1714:677F 83C608 ADD SI,+08

1714:6782 81FE18BB CMP SI,BB18

1714:6786 72DA JB 6762

1714:6788 8B46FA MOV AX,[BP-06]

1714:678B 5E POP SI

1714:678C 5F POP DI

1714:678D 8BE5 MOV SP,BP

1714:678F 5D POP BP

1714:6790 C20A00 RET 000A

}

1714:6793 90 NOP

; 6794

{

1714:6794 55 PUSH BP

1714:6795 8BEC MOV BP,SP

1714:6797 83EC02 SUB SP,+02

1714:679A 56 PUSH SI

1714:679B 8B4604 MOV AX,[BP+04]

1714:679E B103 MOV CL,03

1714:67A0 D3E0 SHL AX,CL

1714:67A2 0514BA ADD AX,BA14

1714:67A5 8946FE MOV [BP-02],AX

1714:67A8 8BD8 MOV BX,AX

1714:67AA F6470280 TEST BYTE PTR [BX+02],80

1714:67AE 7449 JZ 67F9

1714:67B0 F6470228 TEST BYTE PTR [BX+02],28

1714:67B4 7543 JNZ 67F9

1714:67B6 8A5F03 MOV BL,[BX+03]

1714:67B9 2AFF SUB BH,BH

1714:67BB B105 MOV CL,05

1714:67BD D3E3 SHL BX,CL

1714:67BF 80BFC5552A CMP BYTE PTR [BX+55C5],2A

1714:67C4 7518 JNZ 67DE

1714:67C6 8BD8 MOV BX,AX

1714:67C8 8A5F04 MOV BL,[BX+04]

1714:67CB 2AFF SUB BH,BH

1714:67CD B103 MOV CL,03

1714:67CF D3E3 SHL BX,CL

1714:67D1 C6875B5C1D MOV BYTE PTR [BX+5C5B],1D

1714:67D6 8BD8 MOV BX,AX

1714:67D8 804F0210 OR BYTE PTR [BX+02],10

1714:67DC EB1B JMP 67F9

1714:67DE 8B5EFE MOV BX,[BP-02]

1714:67E1 8A4703 MOV AL,[BX+03]

1714:67E4 2AE4 SUB AH,AH

1714:67E6 8BF0 MOV SI,AX

1714:67E8 8BDE MOV BX,SI

1714:67EA B105 MOV CL,05

1714:67EC D3E3 SHL BX,CL

1714:67EE 80BFC5552C CMP BYTE PTR [BX+55C5],2C

1714:67F3 7504 JNZ 67F9

1714:67F5 56 PUSH SI

1714:67F6 E813D8 CALL 400C

1714:67F9 5E POP SI

1714:67FA 8BE5 MOV SP,BP

1714:67FC 5D POP BP

1714:67FD C20200 RET 0002

}

; 6800

{

1714:6800 55 PUSH BP

1714:6801 8BEC MOV BP,SP

1714:6803 83EC02 SUB SP,+02

1714:6806 56 PUSH SI

1714:6807 8B4604 MOV AX,[BP+04]

1714:680A B103 MOV CL,03

1714:680C D3E0 SHL AX,CL

1714:680E 0514BA ADD AX,BA14

1714:6811 8946FE MOV [BP-02],AX

1714:6814 8BD8 MOV BX,AX

1714:6816 F6470208 TEST BYTE PTR [BX+02],08

1714:681A 7459 JZ 6875

1714:681C F6470280 TEST BYTE PTR [BX+02],80

1714:6820 743E JZ 6860

1714:6822 8A5F03 MOV BL,[BX+03]

1714:6825 2AFF SUB BH,BH

1714:6827 B105 MOV CL,05

1714:6829 D3E3 SHL BX,CL

1714:682B C687B35547 MOV BYTE PTR [BX+55B3],47

1714:6830 8BD8 MOV BX,AX

1714:6832 F6470210 TEST BYTE PTR [BX+02],10

1714:6836 7410 JZ 6848

1714:6838 8A5F04 MOV BL,[BX+04]

1714:683B 2AFF SUB BH,BH

1714:683D B103 MOV CL,03

1714:683F D3E3 SHL BX,CL

1714:6841 C6875B5C1D MOV BYTE PTR [BX+5C5B],1D

1714:6846 EB26 JMP 686E

1714:6848 8B5EFE MOV BX,[BP-02]

1714:684B 8A4704 MOV AL,[BX+04]

1714:684E 2AE4 SUB AH,AH

1714:6850 8BF0 MOV SI,AX

1714:6852 B103 MOV CL,03

1714:6854 D3E6 SHL SI,CL

1714:6856 8A845A5C MOV AL,[SI+5C5A]

1714:685A 88845B5C MOV [SI+5C5B],AL

1714:685E EB0E JMP 686E

1714:6860 8A5F04 MOV BL,[BX+04]

1714:6863 2AFF SUB BH,BH

1714:6865 B103 MOV CL,03

1714:6867 D3E3 SHL BX,CL

1714:6869 C687605C00 MOV BYTE PTR [BX+5C60],00

1714:686E 8B5EFE MOV BX,[BP-02]

1714:6871 806702F7 AND BYTE PTR [BX+02],F7

; call update_vitals()

1714:6875 E888C0 CALL 2900

1714:6878 5E POP SI

1714:6879 8BE5 MOV SP,BP

1714:687B 5D POP BP

1714:687C C20200 RET 0002

}

1714:687F 90 NOP

; 6880(p0)

{

1714:6880 55 PUSH BP

1714:6881 8BEC MOV BP,SP

1714:6883 56 PUSH SI

1714:6884 8B7604 MOV SI,[BP+04]

1714:6887 B103 MOV CL,03

1714:6889 D3E6 SHL SI,CL

1714:688B F68416BA80 TEST BYTE PTR [SI+BA16],80

1714:6890 7411 JZ 68A3

1714:6892 8A9C17BA MOV BL,[SI+BA17]

1714:6896 2AFF SUB BH,BH

1714:6898 B105 MOV CL,05

1714:689A D3E3 SHL BX,CL

1714:689C 80BFB35550 CMP BYTE PTR [BX+55B3],50

1714:68A1 7406 JZ 68A9

; call 68ae(p0)

1714:68A3 FF7604 PUSH [BP+04]

1714:68A6 E80500 CALL 68AE

1714:68A9 5E POP SI

1714:68AA 5D POP BP

1714:68AB C20200 RET 0002

}

; 68ae(p0)

{

1714:68AE 55 PUSH BP

1714:68AF 8BEC MOV BP,SP

1714:68B1 83EC02 SUB SP,+02

1714:68B4 56 PUSH SI

1714:68B5 8B4604 MOV AX,[BP+04]

1714:68B8 B103 MOV CL,03

1714:68BA D3E0 SHL AX,CL

1714:68BC 0514BA ADD AX,BA14

1714:68BF 8946FE MOV [BP-02],AX

1714:68C2 8BD8 MOV BX,AX

1714:68C4 F6470280 TEST BYTE PTR [BX+02],80

1714:68C8 7448 JZ 6912

1714:68CA 8A4703 MOV AL,[BX+03]

1714:68CD 2AE4 SUB AH,AH

1714:68CF 8BF0 MOV SI,AX

1714:68D1 B105 MOV CL,05

1714:68D3 D3E6 SHL SI,CL

1714:68D5 81C6B355 ADD SI,55B3

1714:68D9 803C44 CMP BYTE PTR [SI],44

1714:68DC 7451 JZ 692F

1714:68DE C60453 MOV BYTE PTR [SI],53

1714:68E1 804F0208 OR BYTE PTR [BX+02],08

1714:68E5 8A5F04 MOV BL,[BX+04]

1714:68E8 2AFF SUB BH,BH

1714:68EA B103 MOV CL,03

1714:68EC D3E3 SHL BX,CL

1714:68EE C6875B5C1E MOV BYTE PTR [BX+5C5B],1E

1714:68F3 A07B58 MOV AL,[587B]

1714:68F6 394604 CMP [BP+04],AX

1714:68F9 7505 JNZ 6900

1714:68FB C6067B58FF MOV BYTE PTR [587B],FF

1714:6900 C606A25804 MOV BYTE PTR [58A2],04

; call update_vitals()

1714:6905 E8F8BF CALL 2900

1714:6908 F606A15804 TEST BYTE PTR [58A1],04

1714:690D 7520 JNZ 692F

1714:690F EB1B JMP 692C

1714:6911 90 NOP

1714:6912 8B5EFE MOV BX,[BP-02]

1714:6915 804F0208 OR BYTE PTR [BX+02],08

1714:6919 C606A25804 MOV BYTE PTR [58A2],04

1714:691E 8A5F04 MOV BL,[BX+04]

1714:6921 2AFF SUB BH,BH

1714:6923 B103 MOV CL,03

1714:6925 D3E3 SHL BX,CL

1714:6927 C687605CFF MOV BYTE PTR [BX+5C60],FF

; call 5910

1714:692C E8E1EF CALL 5910

1714:692F 5E POP SI

1714:6930 8BE5 MOV SP,BP

1714:6932 5D POP BP

1714:6933 C20200 RET 0002

}

; 6936

{

1714:6936 55 PUSH BP

1714:6937 8BEC MOV BP,SP

1714:6939 83EC1E SUB SP,+1E

1714:693C 57 PUSH DI

1714:693D 56 PUSH SI

1714:693E C646F200 MOV BYTE PTR [BP-0E],00

1714:6942 C746FC2000 MOV WORD PTR [BP-04],0020

1714:6947 C746F014BA MOV WORD PTR [BP-10],BA14

1714:694C C746EE5A5C MOV WORD PTR [BP-12],5C5A

1714:6951 C746EC5B5C MOV WORD PTR [BP-14],5C5B

1714:6956 C746EA5C5C MOV WORD PTR [BP-16],5C5C

1714:695B C746E8605C MOV WORD PTR [BP-18],5C60

1714:6960 C746E65D5C MOV WORD PTR [BP-1A],5C5D

1714:6965 C746E45E5C MOV WORD PTR [BP-1C],5C5E

1714:696A BF5F5C MOV DI,5C5F

1714:696D 8B76F0 MOV SI,[BP-10]

1714:6970 8B5EE8 MOV BX,[BP-18]

1714:6973 2AC0 SUB AL,AL

1714:6975 8807 MOV [BX],AL

1714:6977 8B5EEA MOV BX,[BP-16]

1714:697A 8807 MOV [BX],AL

1714:697C 8B5EEC MOV BX,[BP-14]

1714:697F 8807 MOV [BX],AL

1714:6981 8B5EEE MOV BX,[BP-12]

1714:6984 8807 MOV [BX],AL

1714:6986 8B5EE4 MOV BX,[BP-1C]

1714:6989 8805 MOV [DI],AL

1714:698B 8807 MOV [BX],AL

1714:698D 8B5EE6 MOV BX,[BP-1A]

1714:6990 8807 MOV [BX],AL

1714:6992 884403 MOV [SI+03],AL

1714:6995 884402 MOV [SI+02],AL

1714:6998 884401 MOV [SI+01],AL

1714:699B 8804 MOV [SI],AL

1714:699D 884407 MOV [SI+07],AL

1714:69A0 884406 MOV [SI+06],AL

1714:69A3 884405 MOV [SI+05],AL

1714:69A6 884404 MOV [SI+04],AL

1714:69A9 8346F008 ADD WORD PTR [BP-10],+08

1714:69AD 8346EE08 ADD WORD PTR [BP-12],+08

1714:69B1 8346EC08 ADD WORD PTR [BP-14],+08

1714:69B5 8346EA08 ADD WORD PTR [BP-16],+08

1714:69B9 8346E808 ADD WORD PTR [BP-18],+08

1714:69BD 8346E608 ADD WORD PTR [BP-1A],+08

1714:69C1 8346E408 ADD WORD PTR [BP-1C],+08

1714:69C5 83C708 ADD DI,+08

1714:69C8 81FF5F5D CMP DI,5D5F

1714:69CC 729F JB 696D

1714:69CE 8976FE MOV [BP-02],SI

1714:69D1 C746FC0000 MOV WORD PTR [BP-04],0000

1714:69D6 E99801 JMP 6B71

1714:69D9 90 NOP

1714:69DA 8B5EFC MOV BX,[BP-04]

1714:69DD B105 MOV CL,05

1714:69DF D3E3 SHL BX,CL

1714:69E1 80BFB35544 CMP BYTE PTR [BX+55B3],44

1714:69E6 7503 JNZ 69EB

1714:69E8 E98301 JMP 6B6E

1714:69EB 8B5EFC MOV BX,[BP-04]

1714:69EE D3E3 SHL BX,CL

1714:69F0 80BFC5552A CMP BYTE PTR [BX+55C5],2A

1714:69F5 7504 JNZ 69FB

1714:69F7 C646F22A MOV BYTE PTR [BP-0E],2A

1714:69FB 8B5EFC MOV BX,[BP-04]

1714:69FE B105 MOV CL,05

1714:6A00 D3E3 SHL BX,CL

1714:6A02 80BFC5552C CMP BYTE PTR [BX+55C5],2C

1714:6A07 7504 JNZ 6A0D

1714:6A09 C646F22C MOV BYTE PTR [BP-0E],2C

1714:6A0D 807EF200 CMP BYTE PTR [BP-0E],00

1714:6A11 743C JZ 6A4F

1714:6A13 2BC0 SUB AX,AX

1714:6A15 50 PUSH AX

1714:6A16 B80F00 MOV AX,000F

1714:6A19 50 PUSH AX

1714:6A1A E875B6 CALL 2092

1714:6A1D 8946F8 MOV [BP-08],AX

1714:6A20 3D0B00 CMP AX,000B

1714:6A23 7526 JNZ 6A4B

; call print_string("A ring has vanished!\n")

1714:6A25 B822A4 MOV AX,A422

1714:6A28 50 PUSH AX

1714:6A29 E824AE CALL 1850

1714:6A2C B8B004 MOV AX,04B0

1714:6A2F 50 PUSH AX

1714:6A30 B8D007 MOV AX,07D0

1714:6A33 50 PUSH AX

1714:6A34 B80100 MOV AX,0001

1714:6A37 50 PUSH AX

1714:6A38 B82800 MOV AX,0028

1714:6A3B 50 PUSH AX

1714:6A3C E86FD9 CALL 43AE

1714:6A3F FF76FC PUSH [BP-04]

1714:6A42 8A46F2 MOV AL,[BP-0E]

1714:6A45 2AE4 SUB AH,AH

1714:6A47 50 PUSH AX

1714:6A48 E81504 CALL 6E60

1714:6A4B C646F200 MOV BYTE PTR [BP-0E],00

1714:6A4F 8B5EFC MOV BX,[BP-04]

1714:6A52 8A872417 MOV AL,[BX+1724]

1714:6A56 8846FA MOV [BP-06],AL

1714:6A59 8A872C17 MOV AL,[BX+172C]

1714:6A5D 8846F4 MOV [BP-0C],AL

1714:6A60 53 PUSH BX

1714:6A61 B80100 MOV AX,0001

1714:6A64 50 PUSH AX

1714:6A65 8A46FA MOV AL,[BP-06]

1714:6A68 2AE4 SUB AH,AH

1714:6A6A 50 PUSH AX

1714:6A6B 8A46F4 MOV AL,[BP-0C]

1714:6A6E 50 PUSH AX

1714:6A6F A09558 MOV AL,[5895]

1714:6A72 50 PUSH AX

1714:6A73 E890FA CALL 6506

1714:6A76 8946F8 MOV [BP-08],AX

1714:6A79 8BD8 MOV BX,AX

1714:6A7B B103 MOV CL,03

1714:6A7D D3E3 SHL BX,CL

1714:6A7F 8A9F18BA MOV BL,[BX+BA18]

1714:6A83 2AFF SUB BH,BH

1714:6A85 D3E3 SHL BX,CL

1714:6A87 C687615CFF MOV BYTE PTR [BX+5C61],FF

1714:6A8C 8B5EFC MOV BX,[BP-04]

1714:6A8F B105 MOV CL,05

1714:6A91 D3E3 SHL BX,CL

1714:6A93 8A87B255 MOV AL,[BX+55B2]

1714:6A97 2AE4 SUB AH,AH

1714:6A99 2D4100 SUB AX,0041

1714:6A9C 3D1300 CMP AX,0013

1714:6A9F 7603 JBE 6AA4

1714:6AA1 E98800 JMP 6B2C

; data

1714:6AA4 03C0 ADD AX,AX

1714:6AA6 93 XCHG BX,AX

1714:6AA7 2E CS:

1714:6AA8 FFA7046B JMP [BX+6B04]

1714:6AAC 8B5EF8 MOV BX,[BP-08]

1714:6AAF B103 MOV CL,03

1714:6AB1 D3E3 SHL BX,CL

1714:6AB3 8A9F18BA MOV BL,[BX+BA18]

1714:6AB7 2AFF SUB BH,BH

1714:6AB9 D3E3 SHL BX,CL

1714:6ABB C6875A5C4C MOV BYTE PTR [BX+5C5A],4C

1714:6AC0 EB6A JMP 6B2C

1714:6AC2 8B5EF8 MOV BX,[BP-08]

1714:6AC5 B103 MOV CL,03

1714:6AC7 D3E3 SHL BX,CL

1714:6AC9 8A9F18BA MOV BL,[BX+BA18]

1714:6ACD 2AFF SUB BH,BH

1714:6ACF D3E3 SHL BX,CL

1714:6AD1 C6875A5C48 MOV BYTE PTR [BX+5C5A],48

1714:6AD6 EB54 JMP 6B2C

1714:6AD8 8B5EF8 MOV BX,[BP-08]

1714:6ADB B103 MOV CL,03

1714:6ADD D3E3 SHL BX,CL

1714:6ADF 8A9F18BA MOV BL,[BX+BA18]

1714:6AE3 2AFF SUB BH,BH

1714:6AE5 D3E3 SHL BX,CL

1714:6AE7 C6875A5C40 MOV BYTE PTR [BX+5C5A],40

1714:6AEC EB3E JMP 6B2C

1714:6AEE 8B5EF8 MOV BX,[BP-08]

1714:6AF1 B103 MOV CL,03

1714:6AF3 D3E3 SHL BX,CL

1714:6AF5 8A9F18BA MOV BL,[BX+BA18]

1714:6AF9 2AFF SUB BH,BH

1714:6AFB D3E3 SHL BX,CL

1714:6AFD C6875A5C44 MOV BYTE PTR [BX+5C5A],44

1714:6B02 EB28 JMP 6B2C

1714:6B04 AC LODSB

1714:6B05 6A DB 6A

1714:6B06 EE OUT DX,AL

1714:6B07 6A DB 6A

1714:6B08 2C6B SUB AL,6B

1714:6B0A D86A2C FSUBR DWORD PTR [BP+SI+2C]

1714:6B0D 6B DB 6B

1714:6B0E C26A2C RET 2C6A

1714:6B11 6B DB 6B

1714:6B12 2C6B SUB AL,6B

1714:6B14 2C6B SUB AL,6B

1714:6B16 2C6B SUB AL,6B

1714:6B18 2C6B SUB AL,6B

1714:6B1A 2C6B SUB AL,6B

1714:6B1C D86A2C FSUBR DWORD PTR [BP+SI+2C]

1714:6B1F 6B DB 6B

1714:6B20 2C6B SUB AL,6B

1714:6B22 C26A2C RET 2C6A

1714:6B25 6B DB 6B

1714:6B26 C26AEE RET EE6A

1714:6B29 6A DB 6A

1714:6B2A EE OUT DX,AL

1714:6B2B 6A DB 6A

1714:6B2C 8B5EF8 MOV BX,[BP-08]

1714:6B2F B103 MOV CL,03

1714:6B31 D3E3 SHL BX,CL

1714:6B33 8A9F18BA MOV BL,[BX+BA18]

1714:6B37 2AFF SUB BH,BH

1714:6B39 D3E3 SHL BX,CL

1714:6B3B 8B76F8 MOV SI,[BP-08]

1714:6B3E D3E6 SHL SI,CL

1714:6B40 8BB418BA MOV SI,[SI+BA18]

1714:6B44 81E6FF00 AND SI,00FF

1714:6B48 D3E6 SHL SI,CL

1714:6B4A 8A845A5C MOV AL,[SI+5C5A]

1714:6B4E 88875B5C MOV [BX+5C5B],AL

1714:6B52 8B5EFC MOV BX,[BP-04]

1714:6B55 B105 MOV CL,05

1714:6B57 D3E3 SHL BX,CL

1714:6B59 80BFB35553 CMP BYTE PTR [BX+55B3],53

1714:6B5E 7508 JNZ 6B68

1714:6B60 FF76F8 PUSH [BP-08]

1714:6B63 E848FD CALL 68AE

1714:6B66 EB06 JMP 6B6E

1714:6B68 FF76F8 PUSH [BP-08]

1714:6B6B E826FC CALL 6794

1714:6B6E FF46FC INC WORD PTR [BP-04]

1714:6B71 A05B58 MOV AL,[585B]

1714:6B74 2AE4 SUB AH,AH

1714:6B76 3946FC CMP [BP-04],AX

1714:6B79 7303 JNB 6B7E

1714:6B7B E95CFE JMP 69DA

1714:6B7E 803EB9ADDC CMP BYTE PTR [ADB9],DC

1714:6B83 7536 JNZ 6BBB

1714:6B85 B80100 MOV AX,0001

1714:6B88 50 PUSH AX

1714:6B89 B80200 MOV AX,0002

1714:6B8C 50 PUSH AX

1714:6B8D B80500 MOV AX,0005

1714:6B90 50 PUSH AX

1714:6B91 50 PUSH AX

1714:6B92 A09558 MOV AL,[5895]

1714:6B95 2AE4 SUB AH,AH

1714:6B97 50 PUSH AX

1714:6B98 E86BF9 CALL 6506

1714:6B9B 8846F6 MOV [BP-0A],AL

1714:6B9E 8AD8 MOV BL,AL

1714:6BA0 2AFF SUB BH,BH

1714:6BA2 B103 MOV CL,03

1714:6BA4 D3E3 SHL BX,CL

1714:6BA6 A09558 MOV AL,[5895]

1714:6BA9 8BC8 MOV CX,AX

1714:6BAB D0E0 SHL AL,1

1714:6BAD 02C1 ADD AL,CL

1714:6BAF 0407 ADD AL,07

1714:6BB1 88875F5C MOV [BX+5C5F],AL

1714:6BB5 A015BB MOV AL,[BB15]

1714:6BB8 A2B9AD MOV [ADB9],AL

1714:6BBB 5E POP SI

1714:6BBC 5F POP DI

1714:6BBD 8BE5 MOV SP,BP

1714:6BBF 5D POP BP

1714:6BC0 C3 RET

}

1714:6BC1 90 NOP

; 6bc2

{

1714:6BC2 55 PUSH BP

1714:6BC3 8BEC MOV BP,SP

1714:6BC5 83EC34 SUB SP,+34

1714:6BC8 57 PUSH DI

1714:6BC9 56 PUSH SI

1714:6BCA 817E040001 CMP WORD PTR [BP+04],0100

1714:6BCF 7C0D JL 6BDE

1714:6BD1 816E040001 SUB WORD PTR [BP+04],0100

1714:6BD6 C746FA0000 MOV WORD PTR [BP-06],0000

1714:6BDB EB06 JMP 6BE3

1714:6BDD 90 NOP

1714:6BDE C746FA0100 MOV WORD PTR [BP-06],0001

1714:6BE3 C606A05800 MOV BYTE PTR [58A0],00

1714:6BE8 F6460604 TEST BYTE PTR [BP+06],04

1714:6BEC 7503 JNZ 6BF1

1714:6BEE E845FD CALL 6936

1714:6BF1 2BF6 SUB SI,SI

1714:6BF3 8BFD MOV DI,BP

1714:6BF5 83EF26 SUB DI,+26

1714:6BF8 8935 MOV [DI],SI

1714:6BFA 83C702 ADD DI,+02

1714:6BFD 46 INC SI

1714:6BFE 83FE10 CMP SI,+10

1714:6C01 7CF5 JL 6BF8

1714:6C03 8976D8 MOV [BP-28],SI

1714:6C06 F6460604 TEST BYTE PTR [BP+06],04

1714:6C0A 743D JZ 6C49

1714:6C0C C746D80F00 MOV WORD PTR [BP-28],000F

1714:6C11 8BF5 MOV SI,BP

1714:6C13 83EE26 SUB SI,+26

1714:6C16 8D46F8 LEA AX,[BP-08]

1714:6C19 8946CE MOV [BP-32],AX

1714:6C1C 2BC0 SUB AX,AX

1714:6C1E 50 PUSH AX

1714:6C1F B80F00 MOV AX,000F

1714:6C22 50 PUSH AX

1714:6C23 E86CB4 CALL 2092

1714:6C26 8946D4 MOV [BP-2C],AX

1714:6C29 8B04 MOV AX,[SI]

1714:6C2B 8946FC MOV [BP-04],AX

1714:6C2E 8B7ED4 MOV DI,[BP-2C]

1714:6C31 D1E7 SHL DI,1

1714:6C33 03FD ADD DI,BP

1714:6C35 83EF26 SUB DI,+26

1714:6C38 8B05 MOV AX,[DI]

1714:6C3A 8904 MOV [SI],AX

1714:6C3C 8B46FC MOV AX,[BP-04]

1714:6C3F 8905 MOV [DI],AX

1714:6C41 83C602 ADD SI,+02

1714:6C44 3B76CE CMP SI,[BP-32]

1714:6C47 72D3 JB 6C1C

1714:6C49 817E068000 CMP WORD PTR [BP+06],0080

1714:6C4E 7506 JNZ 6C56

1714:6C50 837E0604 CMP WORD PTR [BP+06],+04

1714:6C54 7407 JZ 6C5D

; call print_string("***CONFLICT***\n")

1714:6C56 B838A4 MOV AX,A438

1714:6C59 50 PUSH AX

1714:6C5A E8F3AB CALL 1850

1714:6C5D 803E945800 CMP BYTE PTR [5894],00

1714:6C62 741A JZ 6C7E

1714:6C64 803E945821 CMP BYTE PTR [5894],21

1714:6C69 7313 JNB 6C7E

1714:6C6B 837E040C CMP WORD PTR [BP+04],+0C

1714:6C6F 740D JZ 6C7E

1714:6C71 837EFA00 CMP WORD PTR [BP-06],+00

1714:6C75 7407 JZ 6C7E

1714:6C77 C746FC0100 MOV WORD PTR [BP-04],0001

1714:6C7C EB10 JMP 6C8E

1714:6C7E 8B5E04 MOV BX,[BP+04]

1714:6C81 B103 MOV CL,03

1714:6C83 D3E3 SHL BX,CL

1714:6C85 8A87C213 MOV AL,[BX+13C2]

1714:6C89 2AE4 SUB AH,AH

1714:6C8B 8946FC MOV [BP-04],AX

1714:6C8E 837EFC08 CMP WORD PTR [BP-04],+08

1714:6C92 743B JZ 6CCF

1714:6C94 837EFC10 CMP WORD PTR [BP-04],+10

1714:6C98 7435 JZ 6CCF

1714:6C9A 837EFC01 CMP WORD PTR [BP-04],+01

1714:6C9E 742F JZ 6CCF

1714:6CA0 B80100 MOV AX,0001

1714:6CA3 50 PUSH AX

1714:6CA4 FF76FC PUSH [BP-04]

1714:6CA7 E8E8B3 CALL 2092

1714:6CAA 8946FC MOV [BP-04],AX

1714:6CAD 803E595900 CMP BYTE PTR [5959],00

1714:6CB2 740D JZ 6CC1

1714:6CB4 B80100 MOV AX,0001

1714:6CB7 50 PUSH AX

1714:6CB8 FF76FC PUSH [BP-04]

1714:6CBB E8D4B3 CALL 2092

1714:6CBE 8946FC MOV [BP-04],AX

; call 5910

1714:6CC1 E84CEC CALL 5910

1714:6CC4 837EFC19 CMP WORD PTR [BP-04],+19

1714:6CC8 7E05 JLE 6CCF

1714:6CCA C746FC1A00 MOV WORD PTR [BP-04],001A

1714:6CCF 8B5EDA MOV BX,[BP-26]

1714:6CD2 8A870417 MOV AL,[BX+1704]

1714:6CD6 8846D6 MOV [BP-2A],AL

1714:6CD9 8A871417 MOV AL,[BX+1714]

1714:6CDD 8846D2 MOV [BP-2E],AL

1714:6CE0 FF7604 PUSH [BP+04]

1714:6CE3 2BC0 SUB AX,AX

1714:6CE5 50 PUSH AX

1714:6CE6 8A46D6 MOV AL,[BP-2A]

1714:6CE9 2AE4 SUB AH,AH

1714:6CEB 50 PUSH AX

1714:6CEC 8A46D2 MOV AL,[BP-2E]

1714:6CEF 50 PUSH AX

1714:6CF0 A09558 MOV AL,[5895]

1714:6CF3 50 PUSH AX

1714:6CF4 E80FF8 CALL 6506

1714:6CF7 8B46FC MOV AX,[BP-04]

1714:6CFA 99 CWD

1714:6CFB 33C2 XOR AX,DX

1714:6CFD 2BC2 SUB AX,DX

1714:6CFF B90200 MOV CX,0002

1714:6D02 D3F8 SAR AX,CL

1714:6D04 33C2 XOR AX,DX

1714:6D06 2BC2 SUB AX,DX

1714:6D08 40 INC AX

1714:6D09 8946D4 MOV [BP-2C],AX

1714:6D0C C746D80100 MOV WORD PTR [BP-28],0001

1714:6D11 837EFC01 CMP WORD PTR [BP-04],+01

1714:6D15 7E62 JLE 6D79

1714:6D17 8D46DC LEA AX,[BP-24]

1714:6D1A 8946CC MOV [BP-34],AX

1714:6D1D 8B76D8 MOV SI,[BP-28]

1714:6D20 8B4604 MOV AX,[BP+04]

1714:6D23 8946FE MOV [BP-02],AX

1714:6D26 3B76D4 CMP SI,[BP-2C]

1714:6D29 7D17 JGE 6D42

1714:6D2B B80800 MOV AX,0008

1714:6D2E 50 PUSH AX

1714:6D2F E87CCD CALL 3AAE

1714:6D32 0BC0 OR AX,AX

1714:6D34 750C JNZ 6D42

1714:6D36 8B5E04 MOV BX,[BP+04]

1714:6D39 8A87D416 MOV AL,[BX+16D4]

1714:6D3D 2AE4 SUB AH,AH

1714:6D3F 8946FE MOV [BP-02],AX

1714:6D42 8B5ECC MOV BX,[BP-34]

1714:6D45 8B3F MOV DI,[BX]

1714:6D47 8A850417 MOV AL,[DI+1704]

1714:6D4B 8846D6 MOV [BP-2A],AL

1714:6D4E 8A851417 MOV AL,[DI+1714]

1714:6D52 8846D2 MOV [BP-2E],AL

1714:6D55 FF76FE PUSH [BP-02]

1714:6D58 2BC0 SUB AX,AX

1714:6D5A 50 PUSH AX

1714:6D5B 8A46D6 MOV AL,[BP-2A]

1714:6D5E 2AE4 SUB AH,AH

1714:6D60 50 PUSH AX

1714:6D61 8A46D2 MOV AL,[BP-2E]

1714:6D64 50 PUSH AX

1714:6D65 A09558 MOV AL,[5895]

1714:6D68 50 PUSH AX

1714:6D69 E89AF7 CALL 6506

1714:6D6C 8346CC02 ADD WORD PTR [BP-34],+02

1714:6D70 46 INC SI

1714:6D71 3B76FC CMP SI,[BP-04]

1714:6D74 75AA JNZ 6D20

1714:6D76 8976D8 MOV [BP-28],SI

1714:6D79 5E POP SI

1714:6D7A 5F POP DI

1714:6D7B 8BE5 MOV SP,BP

1714:6D7D 5D POP BP

1714:6D7E C20400 RET 0004

}

1714:6D81 90 NOP

1714:6D82 55 PUSH BP

1714:6D83 8BEC MOV BP,SP

1714:6D85 837E06FF CMP WORD PTR [BP+06],-01

1714:6D89 7E17 JLE 6DA2

1714:6D8B 837E060B CMP WORD PTR [BP+06],+0B

1714:6D8F 7D11 JGE 6DA2

1714:6D91 837E04FF CMP WORD PTR [BP+04],-01

1714:6D95 7E0B JLE 6DA2

1714:6D97 837E040B CMP WORD PTR [BP+04],+0B

1714:6D9B 7D05 JGE 6DA2

1714:6D9D B80100 MOV AX,0001

1714:6DA0 EB02 JMP 6DA4

1714:6DA2 2BC0 SUB AX,AX

1714:6DA4 5D POP BP

1714:6DA5 C20400 RET 0004

1714:6DA8 55 PUSH BP

1714:6DA9 8BEC MOV BP,SP

1714:6DAB 83EC04 SUB SP,+04

1714:6DAE 56 PUSH SI

1714:6DAF C746FC0000 MOV WORD PTR [BP-04],0000

1714:6DB4 8B4604 MOV AX,[BP+04]

1714:6DB7 B105 MOV CL,05

1714:6DB9 D3E0 SHL AX,CL

1714:6DBB 05A855 ADD AX,55A8

1714:6DBE 8946FE MOV [BP-02],AX

1714:6DC1 803E945828 CMP BYTE PTR [5894],28

1714:6DC6 750E JNZ 6DD6

1714:6DC8 8BD8 MOV BX,AX

1714:6DCA 807F1A0F CMP BYTE PTR [BX+1A],0F

1714:6DCE 7406 JZ 6DD6

1714:6DD0 2BC0 SUB AX,AX

1714:6DD2 E98400 JMP 6E59

1714:6DD5 90 NOP

1714:6DD6 8B5EFE MOV BX,[BP-02]

1714:6DD9 8A4719 MOV AL,[BX+19]

1714:6DDC 2AE4 SUB AH,AH

1714:6DDE 8BF0 MOV SI,AX

1714:6DE0 83FEFF CMP SI,-01

1714:6DE3 7607 JBE 6DEC

1714:6DE5 8A843416 MOV AL,[SI+1634]

1714:6DE9 0146FC ADD [BP-04],AX

1714:6DEC 8A471A MOV AL,[BX+1A]

1714:6DEF 2AE4 SUB AH,AH

1714:6DF1 8BF0 MOV SI,AX

1714:6DF3 83FEFF CMP SI,-01

1714:6DF6 7607 JBE 6DFF

1714:6DF8 8A843416 MOV AL,[SI+1634]

1714:6DFC 0146FC ADD [BP-04],AX

1714:6DFF 8A471B MOV AL,[BX+1B]

1714:6E02 2AE4 SUB AH,AH

1714:6E04 8BF0 MOV SI,AX

1714:6E06 83FEFF CMP SI,-01

1714:6E09 7607 JBE 6E12

1714:6E0B 8A843416 MOV AL,[SI+1634]

1714:6E0F 0146FC ADD [BP-04],AX

1714:6E12 8A471C MOV AL,[BX+1C]

1714:6E15 2AE4 SUB AH,AH

1714:6E17 8BF0 MOV SI,AX

1714:6E19 83FEFF CMP SI,-01

1714:6E1C 7607 JBE 6E25

1714:6E1E 8A843416 MOV AL,[SI+1634]

1714:6E22 0146FC ADD [BP-04],AX

1714:6E25 8A471D MOV AL,[BX+1D]

1714:6E28 2AE4 SUB AH,AH

1714:6E2A 8BF0 MOV SI,AX

1714:6E2C 83FEFF CMP SI,-01

1714:6E2F 7607 JBE 6E38

1714:6E31 8A843416 MOV AL,[SI+1634]

1714:6E35 0146FC ADD [BP-04],AX

1714:6E38 8A471E MOV AL,[BX+1E]

1714:6E3B 2AE4 SUB AH,AH

1714:6E3D 8BF0 MOV SI,AX

1714:6E3F 83FEFF CMP SI,-01

1714:6E42 7607 JBE 6E4B

1714:6E44 8A843416 MOV AL,[SI+1634]

1714:6E48 0146FC ADD [BP-04],AX

1714:6E4B 803E7A5850 CMP BYTE PTR [587A],50

1714:6E50 7504 JNZ 6E56

1714:6E52 8346FC03 ADD WORD PTR [BP-04],+03

1714:6E56 8B46FC MOV AX,[BP-04]

1714:6E59 5E POP SI

1714:6E5A 8BE5 MOV SP,BP

1714:6E5C 5D POP BP

1714:6E5D C20200 RET 0002

1714:6E60 55 PUSH BP

1714:6E61 8BEC MOV BP,SP

1714:6E63 83EC02 SUB SP,+02

1714:6E66 56 PUSH SI

1714:6E67 C746FE0100 MOV WORD PTR [BP-02],0001

1714:6E6C 8B7606 MOV SI,[BP+06]

1714:6E6F B105 MOV CL,05

1714:6E71 D3E6 SHL SI,CL

1714:6E73 81C6C155 ADD SI,55C1

1714:6E77 8A04 MOV AL,[SI]

1714:6E79 2AE4 SUB AH,AH

1714:6E7B 394604 CMP [BP+04],AX

1714:6E7E 7506 JNZ 6E86

1714:6E80 C604FF MOV BYTE PTR [SI],FF

1714:6E83 E98800 JMP 6F0E

1714:6E86 8B7606 MOV SI,[BP+06]

1714:6E89 B105 MOV CL,05

1714:6E8B D3E6 SHL SI,CL

1714:6E8D 81C6C255 ADD SI,55C2

1714:6E91 8A04 MOV AL,[SI]

1714:6E93 2AE4 SUB AH,AH

1714:6E95 394604 CMP [BP+04],AX

1714:6E98 74E6 JZ 6E80

1714:6E9A 8B7606 MOV SI,[BP+06]

1714:6E9D D3E6 SHL SI,CL

1714:6E9F 81C6C355 ADD SI,55C3

1714:6EA3 8A04 MOV AL,[SI]

1714:6EA5 394604 CMP [BP+04],AX

1714:6EA8 74D6 JZ 6E80

1714:6EAA 8B7606 MOV SI,[BP+06]

1714:6EAD D3E6 SHL SI,CL

1714:6EAF 81C6C455 ADD SI,55C4

1714:6EB3 8A04 MOV AL,[SI]

1714:6EB5 394604 CMP [BP+04],AX

1714:6EB8 74C6 JZ 6E80

1714:6EBA 8B7606 MOV SI,[BP+06]

1714:6EBD D3E6 SHL SI,CL

1714:6EBF 81C6C555 ADD SI,55C5

1714:6EC3 8A04 MOV AL,[SI]

1714:6EC5 394604 CMP [BP+04],AX

1714:6EC8 7528 JNZ 6EF2

1714:6ECA C604FF MOV BYTE PTR [SI],FF

1714:6ECD 837E042A CMP WORD PTR [BP+04],+2A

1714:6ED1 753B JNZ 6F0E

1714:6ED3 803E93587F CMP BYTE PTR [5893],7F

1714:6ED8 7634 JBE 6F0E

1714:6EDA 803E9E5820 CMP BYTE PTR [589E],20

1714:6EDF 732D JNB 6F0E

1714:6EE1 8A1E9E58 MOV BL,[589E]

1714:6EE5 2AFF SUB BH,BH

1714:6EE7 B103 MOV CL,03

1714:6EE9 D3E3 SHL BX,CL

1714:6EEB 80A716BAEF AND BYTE PTR [BX+BA16],EF

1714:6EF0 EB1C JMP 6F0E

1714:6EF2 8B7606 MOV SI,[BP+06]

1714:6EF5 B105 MOV CL,05

1714:6EF7 D3E6 SHL SI,CL

1714:6EF9 81C6C655 ADD SI,55C6

1714:6EFD 8A04 MOV AL,[SI]

1714:6EFF 2AE4 SUB AH,AH

1714:6F01 394604 CMP [BP+04],AX

1714:6F04 7503 JNZ 6F09

1714:6F06 E977FF JMP 6E80

1714:6F09 C746FE0000 MOV WORD PTR [BP-02],0000

1714:6F0E FF7606 PUSH [BP+06]

1714:6F11 E894FE CALL 6DA8

1714:6F14 8B46FE MOV AX,[BP-02]

1714:6F17 5E POP SI

1714:6F18 8BE5 MOV SP,BP

1714:6F1A 5D POP BP

1714:6F1B C20400 RET 0004

1714:6F1E 55 PUSH BP

1714:6F1F 8BEC MOV BP,SP

1714:6F21 56 PUSH SI

1714:6F22 57 PUSH DI

1714:6F23 1E PUSH DS

1714:6F24 FC CLD

1714:6F25 1E PUSH DS

1714:6F26 07 POP ES

1714:6F27 8B7E06 MOV DI,[BP+06]

1714:6F2A E86300 CALL 6F90

1714:6F2D 893EA46A MOV [6AA4],DI

1714:6F31 8B7E04 MOV DI,[BP+04]

1714:6F34 E85900 CALL 6F90

1714:6F37 393EA46A CMP [6AA4],DI

1714:6F3B 7F47 JG 6F84

1714:6F3D 2B3EA46A SUB DI,[6AA4]

1714:6F41 893EA66A MOV [6AA6],DI

1714:6F45 33DB XOR BX,BX

1714:6F47 8B0EA46A MOV CX,[6AA4]

1714:6F4B 8B7606 MOV SI,[BP+06]

1714:6F4E 8B7E04 MOV DI,[BP+04]

1714:6F51 03FB ADD DI,BX

1714:6F53 AC LODSB

1714:6F54 0BF6 OR SI,SI

1714:6F56 742F JZ 6F87

1714:6F58 26 ES:

1714:6F59 8A25 MOV AH,[DI]

1714:6F5B 47 INC DI

1714:6F5C 257F7F AND AX,7F7F

1714:6F5F 80FC60 CMP AH,60

1714:6F62 7E03 JLE 6F67

1714:6F64 80E45F AND AH,5F

1714:6F67 3C60 CMP AL,60

1714:6F69 7E02 JLE 6F6D

1714:6F6B 245F AND AL,5F

1714:6F6D 3AE0 CMP AH,AL

1714:6F6F 7504 JNZ 6F75

1714:6F71 E2E0 LOOP 6F53

1714:6F73 EB12 JMP 6F87

1714:6F75 8B16A46A MOV DX,[6AA4]

1714:6F79 2BD1 SUB DX,CX

1714:6F7B 03DA ADD BX,DX

1714:6F7D 43 INC BX

1714:6F7E 3B1EA66A CMP BX,[6AA6]

1714:6F82 7EC3 JLE 6F47

1714:6F84 BBFFFF MOV BX,FFFF

1714:6F87 8BC3 MOV AX,BX

1714:6F89 1F POP DS

1714:6F8A 5F POP DI

1714:6F8B 5E POP SI

1714:6F8C 5D POP BP

1714:6F8D C20400 RET 0004

1714:6F90 32C0 XOR AL,AL

1714:6F92 B9FFFF MOV CX,FFFF

1714:6F95 8BDF MOV BX,DI

1714:6F97 F2 REPNZ

1714:6F98 AE SCASB

1714:6F99 2BFB SUB DI,BX

1714:6F9B 4F DEC DI

1714:6F9C C3 RET

1714:6F9D 00558B ADD [DI-75],DL

1714:6FA0 EC IN AL,DX

1714:6FA1 56 PUSH SI

1714:6FA2 57 PUSH DI

1714:6FA3 1E PUSH DS

1714:6FA4 8B4604 MOV AX,[BP+04]

1714:6FA7 050300 ADD AX,0003

1714:6FAA C70650536C00 MOV WORD PTR [5350],006C

1714:6FB0 FF1E5053 CALL FAR [5350]

1714:6FB4 1F POP DS

1714:6FB5 5F POP DI

1714:6FB6 5E POP SI

1714:6FB7 5D POP BP

1714:6FB8 C20200 RET 0002

1714:6FBB 00

; 6fbc(p0)

{

1714:6FBC 55 PUSH BP

1714:6FBD 8BEC MOV BP,SP

1714:6FBF 56 PUSH SI

1714:6FC0 57 PUSH DI

1714:6FC1 1E PUSH DS

1714:6FC2 8B4604 MOV AX,[BP+04]

1714:6FC5 C70650536C00 MOV WORD PTR [5350],006C

1714:6FCB FF1E5053 CALL FAR [5350]

1714:6FCF 1F POP DS

1714:6FD0 5F POP DI

1714:6FD1 5E POP SI

1714:6FD2 5D POP BP

1714:6FD3 C20200 RET 0002

}

; 6fd6

{

1714:6FD6 55 PUSH BP

1714:6FD7 8BEC MOV BP,SP

1714:6FD9 56 PUSH SI

1714:6FDA 57 PUSH DI

1714:6FDB 1E PUSH DS

1714:6FDC F8 CLC

1714:6FDD A19C53 MOV AX,[539C]

1714:6FE0 C70650536000 MOV WORD PTR [5350],0060

1714:6FE6 FF1E5053 CALL FAR [5350]

1714:6FEA 1F POP DS

1714:6FEB 5F POP DI

1714:6FEC 5E POP SI

1714:6FED 5D POP BP

1714:6FEE C3 RET

}

1714:6FEF 00

; 6ff0

{

1714:6FF0 55 PUSH BP

1714:6FF1 8BEC MOV BP,SP

1714:6FF3 56 PUSH SI

1714:6FF4 57 PUSH DI

1714:6FF5 1E PUSH DS

1714:6FF6 8B5E06 MOV BX,[BP+06]

1714:6FF9 8B5604 MOV DX,[BP+04]

1714:6FFC 83FB0B CMP BX,+0B

1714:6FFF 7D3A JGE 703B

1714:7001 83FA0B CMP DX,+0B

1714:7004 7D35 JGE 703B

1714:7006 83FB05 CMP BX,+05

1714:7009 7F05 JG 7010

1714:700B 83FA05 CMP DX,+05

1714:700E 7E16 JLE 7026

1714:7010 83FB05 CMP BX,+05

1714:7013 7E06 JLE 701B

1714:7015 B80A00 MOV AX,000A

1714:7018 93 XCHG BX,AX

1714:7019 2BD8 SUB BX,AX

1714:701B 83FA05 CMP DX,+05

1714:701E 7E06 JLE 7026

1714:7020 B80A00 MOV AX,000A

1714:7023 92 XCHG DX,AX

1714:7024 2BD0 SUB DX,AX

1714:7026 D1E2 SHL DX,1

1714:7028 03DA ADD BX,DX

1714:702A D1E2 SHL DX,1

1714:702C 03DA ADD BX,DX

1714:702E 8A87A86A MOV AL,[BX+6AA8]

1714:7032 32E4 XOR AH,AH

1714:7034 1F POP DS

1714:7035 5F POP DI

1714:7036 5E POP SI

1714:7037 5D POP BP

1714:7038 C20400 RET 0004

1714:703B 33C0 XOR AX,AX

1714:703D EBF5 JMP 7034

}

1714:703F 00

; 7040

{

1714:7040 55 PUSH BP

1714:7041 8BEC MOV BP,SP

1714:7043 83EC08 SUB SP,+08

1714:7046 57 PUSH DI

1714:7047 56 PUSH SI

1714:7048 C646FA00 MOV BYTE PTR [BP-06],00

1714:704C 837E0801 CMP WORD PTR [BP+08],+01

1714:7050 7504 JNZ 7056

1714:7052 C646FAFF MOV BYTE PTR [BP-06],FF

1714:7056 B91000 MOV CX,0010

1714:7059 8B460A MOV AX,[BP+0A]

1714:705C 99 CWD

1714:705D F7F9 IDIV CX

1714:705F 89560A MOV [BP+0A],DX

1714:7062 8BF2 MOV SI,DX

1714:7064 B105 MOV CL,05

1714:7066 D3E6 SHL SI,CL

1714:7068 81C67E1F ADD SI,1F7E

1714:706C C746FC1000 MOV WORD PTR [BP-04],0010

1714:7071 C746F81000 MOV WORD PTR [BP-08],0010

1714:7076 8B7E06 MOV DI,[BP+06]

1714:7079 8B56F8 MOV DX,[BP-08]

1714:707C 8A4401 MOV AL,[SI+01]

1714:707F 98 CBW

1714:7080 8BD8 MOV BX,AX

1714:7082 035E04 ADD BX,[BP+04]

1714:7085 B105 MOV CL,05

1714:7087 D3E3 SHL BX,CL

1714:7089 8A04 MOV AL,[SI]

1714:708B 98 CBW

1714:708C 03D8 ADD BX,AX

1714:708E 8A46FA MOV AL,[BP-06]

1714:7091 888114AD MOV [BX+DI+AD14],AL

1714:7095 83C602 ADD SI,+02

1714:7098 4A DEC DX

1714:7099 75E1 JNZ 707C

1714:709B 8976FE MOV [BP-02],SI

1714:709E 5E POP SI

1714:709F 5F POP DI

1714:70A0 8BE5 MOV SP,BP

1714:70A2 5D POP BP

1714:70A3 C20800 RET 0008

}

; 70a6

{

1714:70A6 803EA55832 CMP BYTE PTR [58A5],32

1714:70AB 7307 JNB 70B4

1714:70AD 833E7E21FF CMP WORD PTR [217E],-01

1714:70B2 7508 JNZ 70BC

1714:70B4 C6068621FF MOV BYTE PTR [2186],FF

1714:70B9 E9EC00 JMP 71A8

1714:70BC C606E62401 MOV BYTE PTR [24E6],01

1714:70C1 803E8621FF CMP BYTE PTR [2186],FF

1714:70C6 756A JNZ 7132

1714:70C8 FE068621 INC BYTE PTR [2186]

1714:70CC 2BC0 SUB AX,AX

1714:70CE 50 PUSH AX

1714:70CF B80100 MOV AX,0001

1714:70D2 50 PUSH AX

1714:70D3 FF367E21 PUSH [217E]

1714:70D7 FF368021 PUSH [2180]

1714:70DB E862FF CALL 7040

1714:70DE B80100 MOV AX,0001

1714:70E1 50 PUSH AX

1714:70E2 50 PUSH AX

1714:70E3 FF367E21 PUSH [217E]

1714:70E7 FF368021 PUSH [2180]

1714:70EB E852FF CALL 7040

1714:70EE B80200 MOV AX,0002

1714:70F1 50 PUSH AX

1714:70F2 B80100 MOV AX,0001

1714:70F5 50 PUSH AX

1714:70F6 FF367E21 PUSH [217E]

1714:70FA FF368021 PUSH [2180]

1714:70FE E83FFF CALL 7040

1714:7101 833E8221FF CMP WORD PTR [2182],-01

1714:7106 7503 JNZ 710B

1714:7108 E99100 JMP 719C

1714:710B 2BC0 SUB AX,AX

1714:710D 50 PUSH AX

1714:710E B80100 MOV AX,0001

1714:7111 50 PUSH AX

1714:7112 FF368221 PUSH [2182]

1714:7116 FF368421 PUSH [2184]

1714:711A E823FF CALL 7040

1714:711D B80100 MOV AX,0001

1714:7120 50 PUSH AX

1714:7121 50 PUSH AX

1714:7122 FF368221 PUSH [2182]

1714:7126 FF368421 PUSH [2184]

1714:712A E813FF CALL 7040

1714:712D B80200 MOV AX,0002

1714:7130 EB5A JMP 718C

1714:7132 A08621 MOV AL,[2186]

1714:7135 2AE4 SUB AH,AH

1714:7137 50 PUSH AX

1714:7138 2BC0 SUB AX,AX

1714:713A 50 PUSH AX

1714:713B FF367E21 PUSH [217E]

1714:713F FF368021 PUSH [2180]

1714:7143 E8FAFE CALL 7040

1714:7146 833E8221FF CMP WORD PTR [2182],-01

1714:714B 7414 JZ 7161

1714:714D A08621 MOV AL,[2186]

1714:7150 2AE4 SUB AH,AH

1714:7152 50 PUSH AX

1714:7153 2BC0 SUB AX,AX

1714:7155 50 PUSH AX

1714:7156 FF368221 PUSH [2182]

1714:715A FF368421 PUSH [2184]

1714:715E E8DFFE CALL 7040

1714:7161 FE068621 INC BYTE PTR [2186]

1714:7165 A08621 MOV AL,[2186]

1714:7168 2AE4 SUB AH,AH

1714:716A 050200 ADD AX,0002

1714:716D 50 PUSH AX

1714:716E B80100 MOV AX,0001

1714:7171 50 PUSH AX

1714:7172 FF367E21 PUSH [217E]

1714:7176 FF368021 PUSH [2180]

1714:717A E8C3FE CALL 7040

1714:717D 833E8221FF CMP WORD PTR [2182],-01

1714:7182 7418 JZ 719C

1714:7184 A08621 MOV AL,[2186]

1714:7187 2AE4 SUB AH,AH

1714:7189 050200 ADD AX,0002

1714:718C 50 PUSH AX

1714:718D B80100 MOV AX,0001

1714:7190 50 PUSH AX

1714:7191 FF368221 PUSH [2182]

1714:7195 FF368421 PUSH [2184]

1714:7199 E8A4FE CALL 7040

1714:719C 803E86210F CMP BYTE PTR [2186],0F

1714:71A1 7605 JBE 71A8

1714:71A3 C606862100 MOV BYTE PTR [2186],00

1714:71A8 C3 RET

}

1714:71A9 90 NOP

; 71aa

{

1714:71AA 55 PUSH BP

1714:71AB 8BEC MOV BP,SP

1714:71AD 56 PUSH SI

1714:71AE 57 PUSH DI

1714:71AF 1E PUSH DS

1714:71B0 B80200 MOV AX,0002

1714:71B3 8A1E7F58 MOV BL,[587F]

1714:71B7 8A3E8158 MOV BH,[5881]

1714:71BB C70650536C00 MOV WORD PTR [5350],006C

1714:71C1 FF1E5053 CALL FAR [5350]

1714:71C5 1F POP DS

1714:71C6 5F POP DI

1714:71C7 5E POP SI

1714:71C8 5D POP BP

1714:71C9 C3 RET

}

1714:71CA 55 PUSH BP

1714:71CB 8BEC MOV BP,SP

1714:71CD 56 PUSH SI

1714:71CE 57 PUSH DI

1714:71CF 1E PUSH DS

1714:71D0 8B460C MOV AX,[BP+0C]

1714:71D3 8B5E0A MOV BX,[BP+0A]

1714:71D6 8B4E08 MOV CX,[BP+08]

1714:71D9 8B5606 MOV DX,[BP+06]

1714:71DC 8B7604 MOV SI,[BP+04]

1714:71DF E80497 CALL 08E6

1714:71E2 8BFA MOV DI,DX

1714:71E4 2BFB SUB DI,BX

1714:71E6 3BF7 CMP SI,DI

1714:71E8 7E02 JLE 71EC

1714:71EA 8BF7 MOV SI,DI

1714:71EC F7DE NEG SI

1714:71EE C70650532700 MOV WORD PTR [5350],0027

1714:71F4 FF1E5053 CALL FAR [5350]

1714:71F8 1F POP DS

1714:71F9 5F POP DI

1714:71FA 5E POP SI

1714:71FB 5D POP BP

1714:71FC C20A00 RET 000A

1714:71FF 00558B ADD [DI-75],DL

1714:7202 EC IN AL,DX

1714:7203 56 PUSH SI

1714:7204 57 PUSH DI

1714:7205 1E PUSH DS

1714:7206 8B460C MOV AX,[BP+0C]

1714:7209 8B5E0A MOV BX,[BP+0A]

1714:720C 8B4E08 MOV CX,[BP+08]

1714:720F 8B5606 MOV DX,[BP+06]

1714:7212 8B7604 MOV SI,[BP+04]

1714:7215 E8CE96 CALL 08E6

1714:7218 8BFA MOV DI,DX

1714:721A 2BFB SUB DI,BX

1714:721C 3BF7 CMP SI,DI

1714:721E 7E02 JLE 7222

1714:7220 8BF7 MOV SI,DI

1714:7222 C70650532700 MOV WORD PTR [5350],0027

1714:7228 FF1E5053 CALL FAR [5350]

1714:722C 1F POP DS

1714:722D 5F POP DI

1714:722E 5E POP SI

1714:722F 5D POP BP

1714:7230 C20A00 RET 000A

1714:7233 00

/* Basic File I/O */

read_file(p0,p1,p2,p3) - 7234

{

; p0 = offset

; p1 = size

; p2 = addr of data buffer

; p3 = filename

1714:7234 55 PUSH BP

1714:7235 8BEC MOV BP,SP

1714:7237 56 PUSH SI

1714:7238 57 PUSH DI

1714:7239 1E PUSH DS

; clear error code

1714:723A C7065C530000 MOV WORD PTR [535C],0000

; set dx = p3 (filename)

1714:7240 8B560A MOV DX,[BP+0A]

; open file

1714:7243 B002 MOV AL,02

1714:7245 B43D MOV AH,3D

1714:7247 CD21 INT 21

; save file handle in bx

1714:7249 8BD8 MOV BX,AX

; if error, jump to 7286

1714:724B 7239 JB 7286

; if error code != 0000, jump to 7286

1714:724D 833E5C5300 CMP WORD PTR [535C],+00

1714:7252 7532 JNZ 7286

; set dx = p0 (offset)

1714:7254 8B5604 MOV DX,[BP+04]

; clear cx

1714:7257 33C9 XOR CX,CX

; if offset == 0, jump to 7265 (do not lseek)

1714:7259 0BD2 OR DX,DX

1714:725B 7408 JZ 7265

; clear al

1714:725D 32C0 XOR AL,AL

; lseek to offset in file

1714:725F B442 MOV AH,42

1714:7261 CD21 INT 21

; if error, jump to 7280

1714:7263 721B JB 7280

; set cx = p1 (size)

1714:7265 8B4E06 MOV CX,[BP+06]

; if cx != 0, jump to 726f

1714:7268 0BC9 OR CX,CX

1714:726A 7503 JNZ 726F

; otherwise (cx == 0), read entire file

1714:726C B9FFFF MOV CX,FFFF

; set dx = p8 (data buffer)

1714:726F 8B5608 MOV DX,[BP+08]

; read file of size cx into data buffer dx

1714:7272 B43F MOV AH,3F

1714:7274 CD21 INT 21

; if error, jump to 7280

1714:7276 7208 JB 7280

; store ax before close

1714:7278 50 PUSH AX

; close file

1714:7279 B43E MOV AH,3E

1714:727B CD21 INT 21

; restore ax after close

1714:727D 58 POP AX

; return at 728f

1714:727E EB0F JMP 728F

; we get here on error

; store ax before close

1714:7280 50 PUSH AX

; close file

1714:7281 B43E MOV AH,3E

1714:7283 CD21 INT 21

; restore ax after close

1714:7285 58 POP AX

; set error code = ax

1714:7286 A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:7289 FF1E9453 CALL FAR [5394]

; set data read = 0

1714:728D 33C0 XOR AX,AX

; restore & return

1714:728F 1F POP DS

1714:7290 5F POP DI

1714:7291 5E POP SI

1714:7292 5D POP BP

1714:7293 C20800 RET 0008

; returns ax = actual data read

}

write_file() - 7296

{

1714:7296 55 PUSH BP

1714:7297 8BEC MOV BP,SP

1714:7299 56 PUSH SI

1714:729A 57 PUSH DI

1714:729B 1E PUSH DS

1714:729C 8B5608 MOV DX,[BP+08]

1714:729F 33C9 XOR CX,CX

; create file

1714:72A1 B43C MOV AH,3C

1714:72A3 CD21 INT 21

1714:72A5 8BD8 MOV BX,AX

1714:72A7 721C JB 72C5

1714:72A9 8B4E04 MOV CX,[BP+04]

1714:72AC 8B5606 MOV DX,[BP+06]

; write to file

1714:72AF B440 MOV AH,40

1714:72B1 CD21 INT 21

1714:72B3 50 PUSH AX

1714:72B4 9C PUSHF

; close file

1714:72B5 B43E MOV AH,3E

1714:72B7 CD21 INT 21

1714:72B9 9D POPF

1714:72BA 58 POP AX

1714:72BB 7208 JB 72C5

1714:72BD C7065C530000 MOV WORD PTR [535C],0000

1714:72C3 7309 JNB 72CE

; set error code = ax

1714:72C5 A35C53 MOV [535C],AX

; far call disk_swap_message()

1714:72C8 FF1E9453 CALL FAR [5394]

; set data written = 0

1714:72CC 33C0 XOR AX,AX

1714:72CE 1F POP DS

1714:72CF 5F POP DI

1714:72D0 5E POP SI

1714:72D1 5D POP BP

1714:72D2 C20600 RET 0006

}

; 72d5-72df = zeroes

/* Far Calls */

dungeon.8ffe() - 7a16

{

; call far (start+072e):file_loader_wrapper(0003)

1714:7A16 9AEC02421E CALL 1E42:02EC

; file 3 = DUNGEON.OVL

1714:7A1B data = 0003

1714:7A1D EAFE8F1417 JMP 1714:8FFE

}

outsubs.get_world_savefile() - 7a22

{

; call far (start+072e):file_loader_wrapper(000b)

1714:7A22 9AEC02421E CALL 1E42:02EC

; file B = OUTSUBS.OVL

1714:7A27 data = w,000B

1714:7A29 EAF8A51417 JMP 1714:A5F8

}

intro.intro_main() - 7a2e

{

; call far (start+072e):file_loader_wrapper(0004)

1714:7A2E 9AEC02421E CALL 1E42:02EC

; file 4 = INTRO.OVL

1714:7A33 data = w,0004

1714:7A35 EA468B1417 JMP 1714:8B46

}

mainout.mainout_main() - 7a3a

{

; call far (start+072e):file_loader_wrapper(0002)

1714:7A3A 9AEC02421E CALL 1E42:02EC

; file 2 = MAINOUT.OVL

1714:7A3F data = w,0002

1714:7A41 EAF28E1417 JMP 1714:8EF2

}

town.main1() - 7a46

{

; call far (start+072e):file_loader_wrapper(0001)

1714:7A46 9AEC02421E CALL 1E42:02EC

; file 1 = TOWN.OVL

1714:7A4B data = w,0001

1714:7A4D EAC0931417 JMP 1714:93C0

}

town.main2() - 7a52

{

; call far (start+072e):file_loader_wrapper(0001)

1714:7A52 9AEC02421E CALL 1E42:02EC

; file 1 = TOWN.OVL

1714:7A57 data = w,0001

1714:7A59 EAEE951417 JMP 1714:95EE

}

blckthrn.death() - 7a5e

{

; call far (start+072e):file_loader_wrapper(0008)

1714:7A5E 9AEC02421E CALL 1E42:02EC

; file 8 = BLCKTHRN.OVL

1714:7A63 data = w,0008

1714:7A65 EAA0AB1417 JMP 1714:ABA0

}

cast2.f056() - 7a6a

{

; call far (start+072e):file_loader_wrapper(0012)

1714:7A6A 9AEC02421E CALL 1E42:02EC

; file 12 = CAST2.OVL

1714:7A6F data = w,0012

1714:7A71 EA56F01417 JMP 1714:F056

}

npc.a290() - 7a76

{

1714:7A76 9AEC02421E CALL 1E42:02EC

1714:7A7B 06 PUSH ES

1714:7A7C 00EA ADD DL,CH

1714:7A7E 90 NOP

1714:7A7F A21417 MOV [1714],AL

}

1714:7A82 9AEC02421E CALL 1E42:02EC

1714:7A87 0100 ADD [BX+SI],AX

1714:7A89 EAAA921417 JMP 1714:92AA

1714:7A8E 9AEC02421E CALL 1E42:02EC

1714:7A93 0100 ADD [BX+SI],AX

1714:7A95 EA64981417 JMP 1714:9864

1714:7A9A 9AEC02421E CALL 1E42:02EC

1714:7A9F 0100 ADD [BX+SI],AX

1714:7AA1 EA40831417 JMP 1714:8340

npc.a366() - 7aa6

{

1714:7AA6 9AEC02421E CALL 1E42:02EC

1714:7AAB 06 PUSH ES

1714:7AAC 00EA ADD DL,CH

1714:7AAE 66 DB 66

1714:7AAF A31417 MOV [1714],AX

}

1714:7AB2 9AEC02421E CALL 1E42:02EC

1714:7AB7 06 PUSH ES

1714:7AB8 00EA ADD DL,CH

1714:7ABA 44 INC SP

1714:7ABB B014 MOV AL,14

1714:7ABD 17 POP SS

blckthrn.capture() - 7abe

{

; call far (start+072e):file_loader_wrapper(0008)

1714:7ABE 9AEC02421E CALL 1E42:02EC

; file 8 = BLCKTHRN.OVL

1714:7AC3 data = w,0008

1714:7AC5 EA9EA81417 JMP 1714:A89E

}

1714:7ACA 9AEC02421E CALL 1E42:02EC

1714:7ACF 0100 ADD [BX+SI],AX

1714:7AD1 EA528D1417 JMP 1714:8D52

1714:7AD6 9AEC02421E CALL 1E42:02EC

1714:7ADB 0100 ADD [BX+SI],AX

1714:7ADD EA288B1417 JMP 1714:8B28

1714:7AE2 9AEC02421E CALL 1E42:02EC

1714:7AE7 1100 ADC [BX+SI],AX

1714:7AE9 EA9EC21417 JMP 1714:C29E

1714:7AEE 9AEC02421E CALL 1E42:02EC

1714:7AF3 0100 ADD [BX+SI],AX

1714:7AF5 EAB68B1417 JMP 1714:8BB6

1714:7AFA 9AEC02421E CALL 1E42:02EC

1714:7AFF 0100 ADD [BX+SI],AX

1714:7B01 EAD0811417 JMP 1714:81D0

1714:7B06 9AEC02421E CALL 1E42:02EC

1714:7B0B 0100 ADD [BX+SI],AX

1714:7B0D EA22821417 JMP 1714:8222

1714:7B12 9AEC02421E CALL 1E42:02EC

1714:7B17 0100 ADD [BX+SI],AX

1714:7B19 EA80821417 JMP 1714:8280

1714:7B1E 9AEC02421E CALL 1E42:02EC

1714:7B23 0100 ADD [BX+SI],AX

1714:7B25 EAEE821417 JMP 1714:82EE

1714:7B2A 9AEC02421E CALL 1E42:02EC

1714:7B2F 0100 ADD [BX+SI],AX

1714:7B31 EAF6981417 JMP 1714:98F6

1714:7B36 9AEC02421E CALL 1E42:02EC

1714:7B3B 06 PUSH ES

1714:7B3C 00EA ADD DL,CH

1714:7B3E 70B5 JO 7AF5

1714:7B40 1417 ADC AL,17

{

1714:7B42 9AEC02421E CALL 1E42:02EC

1714:7B47 0B00 OR AX,[BX+SI]

1714:7B49 EAE8A61417 JMP 1714:A6E8

}

{

1714:7B4E 9AEC02421E CALL 1E42:02EC

1714:7B53 0B00 OR AX,[BX+SI]

1714:7B55 EA8CA81417 JMP 1714:A88C

}

{

1714:7B5A 9AEC02421E CALL 1E42:02EC

1714:7B5F 0B00 OR AX,[BX+SI]

1714:7B61 EA7EA81417 JMP 1714:A87E

}

mainout.enter() - 7b66

{

; call far (start+072e):file_loader_wrapper(0002)

1714:7B66 9AEC02421E CALL 1E42:02EC

1714:7B6B data = w,0002

1714:7B6D EAAE8A1417 JMP 1714:8AAE

}

1714:7B72 9AEC02421E CALL 1E42:02EC

1714:7B77 0200 ADD AL,[BX+SI]

1714:7B79 EA309C1417 JMP 1714:9C30

1714:7B7E 9AEC02421E CALL 1E42:02EC

1714:7B83 0200 ADD AL,[BX+SI]

1714:7B85 EAD0811417 JMP 1714:81D0

outsubs.a444() - 7b8a

{

; call far (start+072e):file_loader_wrapper(000B)

1714:7B8A 9AEC02421E CALL 1E42:02EC

; file B = OUTSUBS.OVL

1714:7B8F data = w,000B

1714:7B91 EA44A41417 JMP 1714:A444

}

outsubs.a7f6() - 7b96

{

; call far (start+072e):file_loader_wrapper(000B)

1714:7B96 9AEC02421E CALL 1E42:02EC

; file B = OUTSUBS.OVL

1714:7B9B data = w,000B

1714:7B9D EAF6A71417 JMP 1714:A7F6

}

1714:7BA2 9AEC02421E CALL 1E42:02EC

1714:7BA7 0200 ADD AL,[BX+SI]

1714:7BA9 EA4A821417 JMP 1714:824A

mainout.attack() - 7bae

{

; call far (start+072e):file_loader_wrapper(0002)

1714:7BAE 9AEC02421E CALL 1E42:02EC

; file 2 = MAINOUT.OVL

1714:7BB3 data = w,0002

1714:7BB5 EABC881417 JMP 1714:88BC

}

outsubs.enter_town(p0) - 7bba

{

; call far (start+072e):file_loader_wrapper(000B)

1714:7BBA 9AEC02421E CALL 1E42:02EC

; file B = OUTSUBS.OVL

1714:7BBF data = w,000B

1714:7BC1 EA18A61417 JMP 1714:A618

}

1714:7BC6 9AEC02421E CALL 1E42:02EC

1714:7BCB 0200 ADD AL,[BX+SI]

1714:7BCD EA24851417 JMP 1714:8524

1714:7BD2 9AEC02421E CALL 1E42:02EC

1714:7BD7 0B00 OR AX,[BX+SI]

1714:7BD9 EA58A51417 JMP 1714:A558

1714:7BDE 9AEC02421E CALL 1E42:02EC

1714:7BE3 0200 ADD AL,[BX+SI]

1714:7BE5 EA2C921417 JMP 1714:922C

{

1714:7BEA 9AEC02421E CALL 1E42:02EC

1714:7BEF 1400 ADC AL,00

1714:7BF1 EABEF41417 JMP 1714:F4BE

}

1714:7BF6 9AEC02421E CALL 1E42:02EC

1714:7BFB 0300 ADD AX,[BX+SI]

1714:7BFD EAB09D1417 JMP 1714:9DB0

1714:7C02 9AEC02421E CALL 1E42:02EC

1714:7C07 0A00 OR AL,[BX+SI]

1714:7C09 EAC0B31417 JMP 1714:B3C0

1714:7C0E 9AEC02421E CALL 1E42:02EC

1714:7C13 0A00 OR AL,[BX+SI]

1714:7C15 EA2EB31417 JMP 1714:B32E

1714:7C1A 9AEC02421E CALL 1E42:02EC

1714:7C1F 0A00 OR AL,[BX+SI]

1714:7C21 EACAAB1417 JMP 1714:ABCA

1714:7C26 9AEC02421E CALL 1E42:02EC

1714:7C2B 0A00 OR AL,[BX+SI]

1714:7C2D EACEAF1417 JMP 1714:AFCE

combat.ae24() - 7c32

{

1714:7C32 9AEC02421E CALL 1E42:02EC

; file 07 = COMBAT.OVL

1714:7C37 data = w,0007

1714:7C39 EA24AE1417 JMP 1714:AE24

}

lookobj.b40e() - 7c3e

{

1714:7C3E 9AEC02421E CALL 1E42:02EC

; file 0a = DNGLOOK.OVL

1714:7C43 data = w,000A

1714:7C45 EA0EB41417 JMP 1714:B40E

}

endgame.endgame_main() - 7c4a

{

1714:7C4A 9AEC02421E CALL 1E42:02EC

; file 0d = ENDGAME.OVL

1714:7C4F data = w,000D

1714:7C51 EAD8A81417 JMP 1714:A8D8

}

1714:7C56 9AEC02421E CALL 1E42:02EC

1714:7C5B 0300 ADD AX,[BX+SI]

1714:7C5D EA609C1417 JMP 1714:9C60

dnglook.aad4() - 7c62

{

1714:7C62 9AEC02421E CALL 1E42:02EC

; file 0a = DNGLOOK.OVL

1714:7C67 data = w,000A

1714:7C69 EAD4AA1417 JMP 1714:AAD4

}

dnglook.b2a6() - 7c6e

{

1714:7C6E 9AEC02421E CALL 1E42:02EC

; file 0a = DNGLOOK.OVL

1714:7C73 data = w,000A

1714:7C75 EA6AB21417 JMP 1714:B26A

}

1714:7C7A 9AEC02421E CALL 1E42:02EC

1714:7C7F 0300 ADD AX,[BX+SI]

1714:7C81 EA04831417 JMP 1714:8304

1714:7C86 9AEC02421E CALL 1E42:02EC

1714:7C8B 0300 ADD AX,[BX+SI]

1714:7C8D EAE09F1417 JMP 1714:9FE0

1714:7C92 9AEC02421E CALL 1E42:02EC

1714:7C97 0300 ADD AX,[BX+SI]

1714:7C99 EA3A9E1417 JMP 1714:9E3A

1714:7C9E 9AEC02421E CALL 1E42:02EC

1714:7CA3 0300 ADD AX,[BX+SI]

1714:7CA5 EAD89E1417 JMP 1714:9ED8

1714:7CAA 9AEC02421E CALL 1E42:02EC

1714:7CAF 0300 ADD AX,[BX+SI]

1714:7CB1 EA1A9F1417 JMP 1714:9F1A

1714:7CB6 9AEC02421E CALL 1E42:02EC

1714:7CBB 0A00 OR AL,[BX+SI]

1714:7CBD EAFCAE1417 JMP 1714:AEFC

1714:7CC2 9AEC02421E CALL 1E42:02EC

1714:7CC7 0400 ADD AL,00

1714:7CC9 EAFE851417 JMP 1714:85FE

font.create_character() - 7cce

{

; call far (start+072e):file_loader_wrapper(0017)

1714:7CCE 9AEC02421E CALL 1E42:02EC

; file 17 = FONT.OVL

1714:7CD3 data = w,0017

1714:7CD5 EAEAEC1417 JMP 1714:ECEA

}

font.e684() - 7cda

{

; call far (start+072e):file_loader_wrapper(0017)

1714:7CDA 9AEC02421E CALL 1E42:02EC

; file 17 = FONT.OVL

1714:7CDF data = w,0017

1714:7CE1 EA84E61417 JMP 1714:E684

}

font.display_screen() - 7ce6

{

; call far (start+072e):file_loader_wrapper(0017)

1714:7CE6 9AEC02421E CALL 1E42:02EC

; file 17 = FONT.OVL

1714:7CEB data = w,0017

1714:7CED EAE0E11417 JMP 1714:E1E0

}

1714:7CF2 9AEC02421E CALL 1E42:02EC

1714:7CF7 0400 ADD AL,00

1714:7CF9 EA50A21417 JMP 1714:A250

1714:7CFE 9AEC02421E CALL 1E42:02EC

1714:7D03 0500EA ADD AX,EA00

1714:7D06 90 NOP

1714:7D07 A21417 MOV [1714],AL

1714:7D0A 9AEC02421E CALL 1E42:02EC

1714:7D0F 0F DB 0F

1714:7D10 00EA ADD DL,CH

1714:7D12 9AD514179A CALL 9A17:14D5

1714:7D17 EC IN AL,DX

1714:7D18 02421E ADD AL,[BP+SI+1E]

1714:7D1B 0E PUSH CS

1714:7D1C 00EA ADD DL,CH

1714:7D1E 92 XCHG DX,AX

1714:7D1F DF14 FIST WORD PTR [SI]

1714:7D21 17 POP SS

1714:7D22 9AEC02421E CALL 1E42:02EC

1714:7D27 07 POP ES

1714:7D28 00EA ADD DL,CH

1714:7D2A 66 DB 66

1714:7D2B B714 MOV BH,14

1714:7D2D 17 POP SS

1714:7D2E 9AEC02421E CALL 1E42:02EC

1714:7D33 07 POP ES

1714:7D34 00EA ADD DL,CH

1714:7D36 04B8 ADD AL,B8

1714:7D38 1417 ADC AL,17

1714:7D3A 9AEC02421E CALL 1E42:02EC

1714:7D3F 0E PUSH CS

1714:7D40 00EA ADD DL,CH

1714:7D42 D6 DB D6

1714:7D43 DB14 FIST DWORD PTR [SI]

1714:7D45 17 POP SS

1714:7D46 9AEC02421E CALL 1E42:02EC

1714:7D4B 0E PUSH CS

1714:7D4C 00EA ADD DL,CH

1714:7D4E FA CLI

1714:7D4F DE14 FICOM WORD PTR [SI]

1714:7D51 17 POP SS

1714:7D52 9AEC02421E CALL 1E42:02EC

1714:7D57 07 POP ES

1714:7D58 00EA ADD DL,CH

1714:7D5A DABB1417 FIDIVR DWORD PTR [BP+DI+1714]

1714:7D5E 9AEC02421E CALL 1E42:02EC

1714:7D63 07 POP ES

1714:7D64 00EA ADD DL,CH

1714:7D66 EC IN AL,DX

1714:7D67 BC1417 MOV SP,1714

1714:7D6A 9AEC02421E CALL 1E42:02EC

1714:7D6F 0F DB 0F

1714:7D70 00EA ADD DL,CH

1714:7D72 98 CBW

1714:7D73 D314 RCL WORD PTR [SI],CL

1714:7D75 17 POP SS

1714:7D76 9AEC02421E CALL 1E42:02EC

1714:7D7B 07 POP ES

1714:7D7C 00EA ADD DL,CH

1714:7D7E 90 NOP

1714:7D7F A21417 MOV [1714],AL

1714:7D82 9AEC02421E CALL 1E42:02EC

1714:7D87 07 POP ES

1714:7D88 00EA ADD DL,CH

1714:7D8A C6B414179A MOV BYTE PTR [SI+1714],9A

1714:7D8F EC IN AL,DX

1714:7D90 02421E ADD AL,[BP+SI+1E]

1714:7D93 0F DB 0F

1714:7D94 00EA ADD DL,CH

1714:7D96 6C DB 6C

1714:7D97 D7 XLAT

1714:7D98 1417 ADC AL,17

1714:7D9A 9AEC02421E CALL 1E42:02EC

1714:7D9F 1400 ADC AL,00

1714:7DA1 EA74E21417 JMP 1714:E274

1714:7DA6 9AEC02421E CALL 1E42:02EC

1714:7DAB 1400 ADC AL,00

1714:7DAD EAD4E21417 JMP 1714:E2D4

1714:7DB2 9AEC02421E CALL 1E42:02EC

1714:7DB7 1400 ADC AL,00

1714:7DB9 EAF2E41417 JMP 1714:E4F2

1714:7DBE 9AEC02421E CALL 1E42:02EC

1714:7DC3 1400 ADC AL,00

1714:7DC5 EAB4E61417 JMP 1714:E6B4

1714:7DCA 9AEC02421E CALL 1E42:02EC

1714:7DCF 0E PUSH CS

1714:7DD0 00EA ADD DL,CH

1714:7DD2 A6 CMPSB

1714:7DD3 DE14 FICOM WORD PTR [SI]

1714:7DD5 17 POP SS

1714:7DD6 9AEC02421E CALL 1E42:02EC

1714:7DDB 1400 ADC AL,00

1714:7DDD EA02EA1417 JMP 1714:EA02

1714:7DE2 9AEC02421E CALL 1E42:02EC

1714:7DE7 1400 ADC AL,00

1714:7DE9 EADCEB1417 JMP 1714:EBDC

1714:7DEE 9AEC02421E CALL 1E42:02EC

1714:7DF3 1400 ADC AL,00

1714:7DF5 EAD8ED1417 JMP 1714:EDD8

1714:7DFA 9AEC02421E CALL 1E42:02EC

1714:7DFF 1400 ADC AL,00

1714:7E01 EA76EF1417 JMP 1714:EF76

1714:7E06 9AEC02421E CALL 1E42:02EC

1714:7E0B 0E PUSH CS

1714:7E0C 00EA ADD DL,CH

1714:7E0E 4E DEC SI

1714:7E0F D814 FCOM DWORD PTR [SI]

1714:7E11 17 POP SS

1714:7E12 9AEC02421E CALL 1E42:02EC

1714:7E17 0E PUSH CS

1714:7E18 00EA ADD DL,CH

1714:7E1A CACC14 RETF 14CC

1714:7E1D 17 POP SS

1714:7E1E 9AEC02421E CALL 1E42:02EC

1714:7E23 0E PUSH CS

1714:7E24 00EA ADD DL,CH

1714:7E26 F4 HLT

1714:7E27 D214 RCL BYTE PTR [SI],CL

1714:7E29 17 POP SS

1714:7E2A 9AEC02421E CALL 1E42:02EC

1714:7E2F 0E PUSH CS

1714:7E30 00EA ADD DL,CH

1714:7E32 DCC8 FMUL ST(0),ST

1714:7E34 1417 ADC AL,17

1714:7E36 9AEC02421E CALL 1E42:02EC

1714:7E3B 1300 ADC AX,[BX+SI]

1714:7E3D EA1AEC1417 JMP 1714:EC1A

1714:7E42 9AEC02421E CALL 1E42:02EC

1714:7E47 1000 ADC [BX+SI],AL

1714:7E49 EA12D71417 JMP 1714:D712

1714:7E4E 9AEC02421E CALL 1E42:02EC

1714:7E53 1300 ADC AX,[BX+SI]

1714:7E55 EA76F41417 JMP 1714:F476

1714:7E5A 9AEC02421E CALL 1E42:02EC

1714:7E5F 1000 ADC [BX+SI],AL

1714:7E61 EA3ACD1417 JMP 1714:CD3A

1714:7E66 9AEC02421E CALL 1E42:02EC

1714:7E6B 0E PUSH CS

1714:7E6C 00EA ADD DL,CH

1714:7E6E 24DE AND AL,DE

1714:7E70 1417 ADC AL,17

1714:7E72 9AEC02421E CALL 1E42:02EC

1714:7E77 0E PUSH CS

1714:7E78 00EA ADD DL,CH

1714:7E7A EADC14179A JMP 9A17:14DC

1714:7E7F EC IN AL,DX

1714:7E80 02421E ADD AL,[BP+SI+1E]

1714:7E83 0E PUSH CS

1714:7E84 00EA ADD DL,CH

1714:7E86 4E DEC SI

1714:7E87 E114 LOOPZ 7E9D

1714:7E89 17 POP SS

sjog.daec() - 7e8a

{

1714:7E8A 9AEC02421E CALL 1E42:02EC

1714:7E8F data = w,000E

1714:7E91 EAECDA1417 JMP 1714:DAEC

}

1714:7E96 9AEC02421E CALL 1E42:02EC

1714:7E9B 07 POP ES

1714:7E9C 00EA ADD DL,CH

1714:7E9E 9E SAHF

1714:7E9F B414 MOV AH,14

1714:7EA1 17 POP SS

1714:7EA2 9AEC02421E CALL 1E42:02EC

1714:7EA7 0E PUSH CS

1714:7EA8 00EA ADD DL,CH

1714:7EAA 58 POP AX

1714:7EAB E014 LOOPNZ 7EC1

1714:7EAD 17 POP SS

1714:7EAE 9AEC02421E CALL 1E42:02EC

1714:7EB3 0E PUSH CS

1714:7EB4 00EA ADD DL,CH

1714:7EB6 C8 DB C8

1714:7EB7 E014 LOOPNZ 7ECD

1714:7EB9 17 POP SS

1714:7EBA 9AEC02421E CALL 1E42:02EC

1714:7EBF 07 POP ES

1714:7EC0 00EA ADD DL,CH

1714:7EC2 AA STOSB

1714:7EC3 B314 MOV BL,14

1714:7EC5 17 POP SS

1714:7EC6 9AEC02421E CALL 1E42:02EC

1714:7ECB 07 POP ES

1714:7ECC 00EA ADD DL,CH

1714:7ECE 72B6 JB 7E86

1714:7ED0 1417 ADC AL,17

1714:7ED2 9AEC02421E CALL 1E42:02EC

1714:7ED7 1400 ADC AL,00

1714:7ED9 EA6AE61417 JMP 1714:E66A

1714:7EDE 9AEC02421E CALL 1E42:02EC

1714:7EE3 1400 ADC AL,00

1714:7EE5 EAB4E91417 JMP 1714:E9B4

1714:7EEA 9AEC02421E CALL 1E42:02EC

1714:7EEF 07 POP ES

1714:7EF0 00EA ADD DL,CH

1714:7EF2 4A DEC DX

1714:7EF3 BB1417 MOV BX,1714

1714:7EF6 9AEC02421E CALL 1E42:02EC

1714:7EFB 1200 ADC AL,[BX+SI]

1714:7EFD EAC0E71417 JMP 1714:E7C0

; call cast2.eaca() - 7f02

{

1714:7F02 9AEC02421E CALL 1E42:02EC

1714:7F07 1200 ADC AL,[BX+SI]

1714:7F09 EACAEA1417 JMP 1714:EACA

}

1714:7F0E 9AEC02421E CALL 1E42:02EC

1714:7F13 0900 OR [BX+SI],AX

1714:7F15 EA8CB31417 JMP 1714:B38C

1714:7F1A 9AEC02421E CALL 1E42:02EC

1714:7F1F 0900 OR [BX+SI],AX

1714:7F21 EAF6A51417 JMP 1714:A5F6

1714:7F26 9AEC02421E CALL 1E42:02EC

1714:7F2B 0900 OR [BX+SI],AX

1714:7F2D EA2CAC1417 JMP 1714:AC2C

1714:7F32 9AEC02421E CALL 1E42:02EC

1714:7F37 0A00 OR AL,[BX+SI]

1714:7F39 EA90A21417 JMP 1714:A290

1714:7F3E 9AEC02421E CALL 1E42:02EC

1714:7F43 0E PUSH CS

1714:7F44 00EA ADD DL,CH

1714:7F46 EC IN AL,DX

1714:7F47 BF1417 MOV DI,1714

1714:7F4A 9AEC02421E CALL 1E42:02EC

1714:7F4F 0A00 OR AL,[BX+SI]

1714:7F51 EA38A91417 JMP 1714:A938

1714:7F56 9AEC02421E CALL 1E42:02EC

1714:7F5B 0B00 OR AX,[BX+SI]

1714:7F5D EAE8A81417 JMP 1714:A8E8

1714:7F62 9AEC02421E CALL 1E42:02EC

1714:7F67 0C00 OR AL,00

1714:7F69 EA10A51417 JMP 1714:A510

1714:7F6E 9AEC02421E CALL 1E42:02EC

1714:7F73 0C00 OR AL,00

1714:7F75 EAB6A21417 JMP 1714:A2B6

1714:7F7A 9AEC02421E CALL 1E42:02EC

1714:7F7F 0C00 OR AL,00

1714:7F81 EA32A71417 JMP 1714:A732

1714:7F86 9AEC02421E CALL 1E42:02EC

1714:7F8B 1300 ADC AX,[BX+SI]

1714:7F8D EA4CE71417 JMP 1714:E74C

1714:7F92 9AEC02421E CALL 1E42:02EC

1714:7F97 1300 ADC AX,[BX+SI]

1714:7F99 EA84E71417 JMP 1714:E784

1714:7F9E 9AEC02421E CALL 1E42:02EC

1714:7FA3 1300 ADC AX,[BX+SI]

1714:7FA5 EAC2E71417 JMP 1714:E7C2

1714:7FAA 9AEC02421E CALL 1E42:02EC

1714:7FAF 0C00 OR AL,00

1714:7FB1 EA88B71417 JMP 1714:B788

1714:7FB6 9AEC02421E CALL 1E42:02EC

1714:7FBB 0C00 OR AL,00

1714:7FBD EA0AA41417 JMP 1714:A40A

1714:7FC2 9AEC02421E CALL 1E42:02EC

1714:7FC7 0C00 OR AL,00

1714:7FC9 EA42B51417 JMP 1714:B542

1714:7FCE 9AEC02421E CALL 1E42:02EC

1714:7FD3 0C00 OR AL,00

1714:7FD5 EAEEA91417 JMP 1714:A9EE

1714:7FDA 9AEC02421E CALL 1E42:02EC

1714:7FDF 0C00 OR AL,00

1714:7FE1 EA2AA41417 JMP 1714:A42A

1714:7FE6 9AEC02421E CALL 1E42:02EC

1714:7FEB 0C00 OR AL,00

1714:7FED EA46A41417 JMP 1714:A446

1714:7FF2 9AEC02421E CALL 1E42:02EC

1714:7FF7 0C00 OR AL,00

1714:7FF9 EA92A41417 JMP 1714:A492

1714:7FFE 9AEC02421E CALL 1E42:02EC

1714:8003 0C00 OR AL,00

1714:8005 EA4EAA1417 JMP 1714:AA4E

1714:800A 9AEC02421E CALL 1E42:02EC

1714:800F 0E PUSH CS

1714:8010 00EA ADD DL,CH

1714:8012 B4DA MOV AH,DA

1714:8014 1417 ADC AL,17

sjog.dfbe(p0) - 8016

{

; call far (start+072e):file_loader_wrapper(000e)

1714:8016 9AEC02421E CALL 1E42:02EC

; file 0E = SJOG.OVL

1714:801B data = w,000E

1714:8021 EABEDF1417 JMP 1714:DFBE

}

1714:8022 9AEC02421E CALL 1E42:02EC

1714:8027 1400 ADC AL,00

1714:8029 EA36E21417 JMP 1714:E236

cmds.c4d2() - 802e

{

1714:802E 9AEC02421E CALL 1E42:02EC

1714:8033 0F DB 0F

1714:8034 00EA ADD DL,CH

1714:8036 D2C4 ROL AH,CL

1714:8038 1417 ADC AL,17

}

1714:803A 9AEC02421E CALL 1E42:02EC

1714:803F 0F DB 0F

1714:8040 00EA ADD DL,CH

1714:8042 76C7 JBE 800B

1714:8044 1417 ADC AL,17

1714:8046 9AEC02421E CALL 1E42:02EC

1714:804B 0F DB 0F

1714:804C 00EA ADD DL,CH

1714:804E 6A DB 6A

1714:804F CA1417 RETF 1714

1714:8052 9AEC02421E CALL 1E42:02EC

1714:8057 0F DB 0F

1714:8058 00EA ADD DL,CH

1714:805A 18CD SBB CH,CL

1714:805C 1417 ADC AL,17

1714:805E 9AEC02421E CALL 1E42:02EC

1714:8063 0F DB 0F

1714:8064 00EA ADD DL,CH

1714:8066 5C POP SP

1714:8067 CD14 INT 14

1714:8069 17 POP SS

1714:806A 9AEC02421E CALL 1E42:02EC

1714:806F 0F DB 0F

1714:8070 00EA ADD DL,CH

1714:8072 34CE XOR AL,CE

1714:8074 1417 ADC AL,17

cmds.bf80(p0,p1,p2) - 8076

{

1714:8076 9AEC02421E CALL 1E42:02EC

; file 0F = CMDS.OVL

1714:807B data = 000F

1714:807E EA80BF1417 JMP 1714:BF80

}

1714:8084 9AEC IN AL,DX

1714:8084 02421E ADD AL,[BP+SI+1E]

1714:8087 0F DB 0F

1714:8088 00EA ADD DL,CH

1714:808A 58 POP AX

1714:808B DA14 FICOM DWORD PTR [SI]

1714:808D 17 POP SS

1714:808E 9AEC02421E CALL 1E42:02EC

1714:8093 1200 ADC AL,[BX+SI]

1714:8095 EABEE21417 JMP 1714:E2BE

1714:809A 9AEC02421E CALL 1E42:02EC

1714:809F 0F DB 0F

1714:80A0 00EA ADD DL,CH

1714:80A2 A0DB14 MOV AL,[14DB]

1714:80A5 17 POP SS

1714:80A6 9AEC02421E CALL 1E42:02EC

1714:80AB 1200 ADC AL,[BX+SI]

1714:80AD EA9CE91417 JMP 1714:E99C

1714:80B2 9AEC02421E CALL 1E42:02EC

1714:80B7 1200 ADC AL,[BX+SI]

1714:80B9 EAD8EA1417 JMP 1714:EAD8

1714:80BE 9AEC02421E CALL 1E42:02EC

1714:80C3 1200 ADC AL,[BX+SI]

1714:80C5 EACCE81417 JMP 1714:E8CC

1714:80CA 9AEC02421E CALL 1E42:02EC

1714:80CF 1400 ADC AL,00

1714:80D1 EA32EE1417 JMP 1714:EE32

1714:80D6 9AEC02421E CALL 1E42:02EC

1714:80DB 1200 ADC AL,[BX+SI]

1714:80DD EAA2E51417 JMP 1714:E5A2

1714:80E2 9AEC02421E CALL 1E42:02EC

1714:80E7 1200 ADC AL,[BX+SI]

1714:80E9 EAE6E41417 JMP 1714:E4E6

1714:80EE 9AEC02421E CALL 1E42:02EC

1714:80F3 1200 ADC AL,[BX+SI]

1714:80F5 EA48E91417 JMP 1714:E948

1714:80FA 9AEC02421E CALL 1E42:02EC

1714:80FF 1200 ADC AL,[BX+SI]

1714:8101 EA4CE61417 JMP 1714:E64C

1714:8106 9AEC02421E CALL 1E42:02EC

1714:810B 1200 ADC AL,[BX+SI]

1714:810D EAE0E11417 JMP 1714:E1E0

1714:8112 9AEC02421E CALL 1E42:02EC

1714:8117 1200 ADC AL,[BX+SI]

1714:8119 EAA2E61417 JMP 1714:E6A2

1714:811E 9AEC02421E CALL 1E42:02EC

1714:8123 1400 ADC AL,00

1714:8125 EAE0E11417 JMP 1714:E1E0

1714:812A 9AEC02421E CALL 1E42:02EC

1714:812F 1200 ADC AL,[BX+SI]

1714:8131 EA7EE21417 JMP 1714:E27E

1714:8136 9AEC02421E CALL 1E42:02EC

1714:813B 1200 ADC AL,[BX+SI]

1714:813D EAEAE51417 JMP 1714:E5EA

1714:8142 9AEC02421E CALL 1E42:02EC

1714:8147 1400 ADC AL,00

1714:8149 EAE4E61417 JMP 1714:E6E4

1714:814E 9AEC02421E CALL 1E42:02EC

1714:8153 1400 ADC AL,00

1714:8155 EA28E91417 JMP 1714:E928

1714:815A 9AEC02421E CALL 1E42:02EC

1714:815F 1300 ADC AX,[BX+SI]

1714:8161 EA3EE61417 JMP 1714:E63E

1714:8166 9AEC02421E CALL 1E42:02EC

1714:816B 1300 ADC AX,[BX+SI]

1714:816D EA7AEB1417 JMP 1714:EB7A

1714:8172 9AEC02421E CALL 1E42:02EC

1714:8177 1300 ADC AX,[BX+SI]

1714:8179 EA0EF11417 JMP 1714:F10E

1714:817E 9AEC02421E CALL 1E42:02EC

1714:8183 1500EA ADC AX,EA00

1714:8186 4C DEC SP

1714:8187 E81417 CALL 989E

1714:818A 9AEC02421E CALL 1E42:02EC

1714:818F 1500EA ADC AX,EA00

1714:8192 9C PUSHF

1714:8193 EC IN AL,DX

1714:8194 1417 ADC AL,17

1714:8196 9AEC02421E CALL 1E42:02EC

1714:819B 1100 ADC [BX+SI],AX

1714:819D EA9CC31417 JMP 1714:C39C

1714:81A2 9AEC02421E CALL 1E42:02EC

1714:81A7 16 PUSH SS

1714:81A8 00EA ADD DL,CH

1714:81AA 94 XCHG SP,AX

1714:81AB EA14179AEC JMP EC9A:1714

1714:81B0 02421E ADD AL,[BP+SI+1E]

1714:81B3 1200 ADC AL,[BX+SI]

1714:81B5 EADEF21417 JMP 1714:F2DE

1714:81BA 9AEC02421E CALL 1E42:02EC

1714:81BF 17 POP SS

1714:81C0 00EA ADD DL,CH

1714:81C2 DCE4 FSUBR ST(4),ST

1714:81C4 1417 ADC AL,17

; 81c6-81cf = zeroes

; 81d0-81f2 = first loader

; 81f3-86ef = unused junk

................
................

In order to avoid copyright disputes, this page is only a partial summary.

Google Online Preview   Download

To fulfill the demand for quickly locating and searching documents.

It is intelligent file search solution for home and business.

Literature Lottery