0 ****************** expansion: __PASS__ = 2 0 ****************** expansion: __FILE__ = 0 ****************** expansion: __LINE__ = 0 ****************** expansion: __BITS__ = 0 ****************** expansion: __SECT__ = 0 ****************** expansion: __SECTALIGN_ALIGN_UPDATES_SECTION__ = 1 0 ****************** expansion: __FLOAT_DAZ__ = nodaz 0 ****************** expansion: __FLOAT_ROUND__ = near 0 ****************** expansion: __FLOAT__ = __FLOAT_DAZ__,__FLOAT_ROUND__ 0 ****************** expansion: __NASM_MAJOR__ = 2 0 ****************** expansion: __NASM_MINOR__ = 14 0 ****************** expansion: __NASM_SUBMINOR__ = 2 0 ****************** expansion: __NASM_PATCHLEVEL__ = 92 0 ****************** expansion: __NASM_VERSION_ID__ = 0020E025Ch 0 ****************** expansion: __NASM_VER__ = "2.14.03rc2" 0 ****************** expansion: __SECT__ = [section .text] 0 ****************** expansion: __DATE__ = "2019-06-09" 0 ****************** expansion: __DATE_NUM__ = 20190609 0 ****************** expansion: __TIME__ = "15:19:54" 0 ****************** expansion: __TIME_NUM__ = 151954 0 ****************** expansion: __UTC_DATE__ = "2019-06-09" 0 ****************** expansion: __UTC_DATE_NUM__ = 20190609 0 ****************** expansion: __UTC_TIME__ = "13:19:54" 0 ****************** expansion: __UTC_TIME_NUM__ = 131954 0 ****************** expansion: __POSIX_TIME__ = 1560086394 0 ****************** expansion: __OUTPUT_FORMAT__ = bin 0 ****************** expansion: _DEBUG = 0 ****************** expansion: _MAP = ../lst/ddebug.map 0 ****************** expansion: _REVISIONID = 'hg 12e6cf2820c6' 0 ****************** expansion: _BOOTLDR = 0 ****************** expansion: _BREAKPOINTS = 0 ****************** expansion: _DEBUG1 = 0 ****************** expansion: _DEBUG4 = 0 ****************** expansion: _SHOWINITSIZE = 0 ****************** expansion: _SHOWMSGSIZE = 0 ****************** expansion: _SHOWASMTABLESIZE = 1 2 %if 0 3 4 lDebug - Free x86 DOS debugger 5 6 Copyright (C) 1995-2003 Paul Vojta 7 Copyright (C) 2008-2012 C. Masloch 8 9 Usage of the works is permitted provided that this 10 instrument is retained with the works, so that any entity 11 that uses the works is notified of this instrument. 12 13 DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 15 %endif 16 17 [list -] 17 ****************** expansion: __lMACROS3_MAC__ = 1 17 ****************** expansion: __lMACROS2_MAC__ = 1 17 ****************** expansion: __lMACROS1_MAC__ = 1 17 ****************** expansion: by (case-insensitive) = byte 17 ****************** expansion: wo (case-insensitive) = word 17 ****************** expansion: dwo (case-insensitive) = dword 17 ****************** expansion: b (case-insensitive) = byte 17 ****************** expansion: w (case-insensitive) = word 17 ****************** expansion: d (case-insensitive) = dword 17 ****************** expansion: s (case-insensitive) = short 17 ****************** expansion: sho (case-insensitive) = short 17 ****************** expansion: n (case-insensitive) = near 17 ****************** expansion: ne (case-insensitive) = near 17 ****************** expansion: f (case-insensitive) = far 17 ****************** expansion: ver (case-insensitive) = ( ((major)&0FFh)<<8|((minor)&0FFh) ) 17 ****************** expansion: verx (case-insensitive) = ( ((minor)&0FFh)<<8|((major)&0FFh) ) 17 ****************** expansion: count = stop-start+1 17 ****************** expansion: range = (start),count(start,stop) 17 ****************** expansion: date4b = (((y)&0FFFFh)<<16|((m)&0FFh)<<8|((d)&0FFh)) 17 ****************** expansion: year4bd = (((d)>>16)&0FFFFh) 17 ****************** expansion: month4bd = (((d)>>8)&0FFh) 17 ****************** expansion: day4bd = ((d)&0FFh) 17 ****************** expansion: _1digits_nocheck = (((d)% 10)+'0') 17 ****************** expansion: _2digits_nocheck = ((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _3digits_nocheck = ((((dword)/100)% 10)+'0'),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _4digits_nocheck = ((((dword)/1000)% 10)+'0'),((((dword)/100)% 10)+'0'),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _5digits_nocheck = ((((dword)/10000)% 10)+'0'),((((dword)/1000)% 10)+'0'),((((dword)/100)% 10)+'0'),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _1digits = (!!(dword/10)*(1<<32)+ (((dword)% 10)+'0')) 17 ****************** expansion: _2digits = (!!((dword)/ 10/10)*(1<<32)+ ((((dword)/ 10)% 10)+'0')),(((dword)% 10)+'0') 17 ****************** expansion: _3digits = (!!((dword)/ 100/10)*(1<<32)+ ((((dword)/ 100)% 10)+'0')),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _4digits = (!!((dword)/ 1000/10)*(1<<32)+ ((((dword)/ 1000)% 10)+'0')),((((dword)/100)% 10)+'0'),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _5digits = (!!((dword)/10000/10)*(1<<32)+ ((((dword)/10000)% 10)+'0')),((((dword)/1000)% 10)+'0'),((((dword)/100)% 10)+'0'),((((dword)/10)% 10)+'0'),(((dword)% 10)+'0') 17 ****************** expansion: _1digitshex_nocheck = ( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _2digitshex_nocheck = ( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _3digitshex_nocheck = ( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _4digitshex_nocheck = ( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _5digitshex_nocheck = ( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _6digitshex_nocheck = ( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) ),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _7digitshex_nocheck = ( (((h)>>24)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>24)& 0Fh)/10) ),( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) ),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _8digitshex_nocheck = ( (((h)>>28)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>28)& 0Fh)/10) ),( (((h)>>24)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>24)& 0Fh)/10) ),( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) ),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _1digitshex = (!!(h&~0Fh)*(1<<32)+ ( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) )) 17 ****************** expansion: _2digitshex = (!!((h)>> 4&~0Fh)*(1<<32)+ ( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) )),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _3digitshex = (!!((h)>> 8&~0Fh)*(1<<32)+ ( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) )),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _4digitshex = (!!((h)>>12&~0Fh)*(1<<32)+ ( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) )),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _5digitshex = (!!((h)>>16&~0Fh)*(1<<32)+ ( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) )),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _6digitshex = (!!((h)>>20&~0Fh)*(1<<32)+ ( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) )),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _7digitshex = (!!((h)>>24&~0Fh)*(1<<32)+ ( (((h)>>24)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>24)& 0Fh)/10) )),( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) ),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: _8digitshex = (!!((h)>>28&~0Fh)*(1<<32)+ ( (((h)>>28)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>28)& 0Fh)/10) )),( (((h)>>24)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>24)& 0Fh)/10) ),( (((h)>>20)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>20)& 0Fh)/10) ),( (((h)>>16)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>16)& 0Fh)/10) ),( (((h)>>12)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>>12)& 0Fh)/10) ),( (((h)>> 8)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 8)& 0Fh)/10) ),( (((h)>> 4)& 0Fh) + '0' + ('A'-'9'-1)*((((h)>> 4)& 0Fh)/10) ),( ((h)& 0Fh) + '0' + ('A'-'9'-1)*(((h)& 0Fh)/10) ) 17 ****************** expansion: bytes (case-insensitive) = (b) 17 ****************** expansion: words (case-insensitive) = ((b)+1>>1) 17 ****************** expansion: dwords (case-insensitive) = ((b)+3>>2) 17 ****************** expansion: qwords (case-insensitive) = ((b)+7>>3) 17 ****************** expansion: paragraphs (case-insensitive) = ((b)+15>>4) 17 ****************** expansion: paras (case-insensitive) = ((b)+15>>4) 17 ****************** expansion: pages (case-insensitive) = ((b)+511>>9) 17 ****************** expansion: kib (case-insensitive) = ((b)+1023>>10) 17 ****************** expansion: frombytes (case-insensitive) = (b) 17 ****************** expansion: fromwords (case-insensitive) = ((w)<<1) 17 ****************** expansion: fromdwords (case-insensitive) = ((d)<<2) 17 ****************** expansion: fromqwords (case-insensitive) = ((q)<<3) 17 ****************** expansion: fromparagraphs (case-insensitive) = ((p)<<4) 17 ****************** expansion: fromparas (case-insensitive) = ((p)<<4) 17 ****************** expansion: frompages (case-insensitive) = ((p)<<9) 17 ****************** expansion: fromkib (case-insensitive) = ((k)<<10) 17 ****************** expansion: __REL__ = ((address)-(fixup)) 17 ****************** expansion: __REL8__ = ((address)-(fixup)) 17 ****************** expansion: __REL8__ = ((address)-($+1)) 17 ****************** expansion: __REL16__ = ((address)-(fixup)) 17 ****************** expansion: __REL16__ = ((address)-($+2)) 17 ****************** expansion: __JMP_REL8 = 0EBh 17 ****************** expansion: __JMP_REL16 = 0E9h 17 ****************** expansion: __JMP_FAR = 0EAh 17 ****************** expansion: __CALL_REL16 = 0E8h 17 ****************** expansion: __CALL_FAR = 9Ah 17 ****************** expansion: __NOP = 90h 17 ****************** expansion: __TEST_IMM8 = 0A8h 17 ****************** expansion: __TEST_IMM16 = 0A9h 17 ****************** expansion: __TEST_OFS16_IMM8 = 0F6h,86h 17 ****************** expansion: ascii (case-insensitive) = _ascii_prefix_suffix "","", 17 ****************** expansion: asciz (case-insensitive) = _ascii_prefix_suffix "",0, 17 ****************** expansion: ascic (case-insensitive) = _ascii_prefix_suffix "",36, 17 ****************** expansion: asciiline (case-insensitive) = _ascii_prefix_suffix "",{13,10}, 17 ****************** expansion: ascizline (case-insensitive) = _ascii_prefix_suffix "",{13,10,0}, 17 ****************** expansion: ascicline (case-insensitive) = _ascii_prefix_suffix "",{13,10,36}, 17 ****************** expansion: counted (case-insensitive) = _counted db, 17 ****************** expansion: countedb (case-insensitive) = _counted db, 17 ****************** expansion: countedw (case-insensitive) = _counted dw, 17 ****************** expansion: __lMACROS1_MAC__DEFAULTING = 0 17 ****************** expansion: __lMACROS1_MAC__CPU_DEFAULTS = 0 17 ****************** expansion: __lMACROS1_MAC__DEBUG_DEFAULTS = 0 17 ****************** expansion: d0 (case-insensitive) = _d 0, 17 ****************** expansion: d1 (case-insensitive) = _d 1, 17 ****************** expansion: d2 (case-insensitive) = _d 2, 17 ****************** expansion: d3 (case-insensitive) = _d 3, 17 ****************** expansion: d4 (case-insensitive) = _d 4, 17 ****************** expansion: dbp (case-insensitive) = _d, __DEBUG_BP__ 17 ****************** expansion: d0bp (case-insensitive) = d0 __DEBUG0_BP__ 17 ****************** expansion: d1bp (case-insensitive) = d1 __DEBUG1_BP__ 17 ****************** expansion: d2bp (case-insensitive) = d2 __DEBUG2_BP__ 17 ****************** expansion: d3bp (case-insensitive) = d3 __DEBUG3_BP__ 17 ****************** expansion: d4bp (case-insensitive) = d4 __DEBUG4_BP__ 17 ****************** expansion: dd0bp (case-insensitive) = _d,{d0bp} 17 ****************** expansion: dd1bp (case-insensitive) = _d,{d1bp} 17 ****************** expansion: dd2bp (case-insensitive) = _d,{d2bp} 17 ****************** expansion: dd3bp (case-insensitive) = _d,{d3bp} 17 ****************** expansion: dd4bp (case-insensitive) = _d,{d4bp} 17 ****************** expansion: __DEBUG_BP__ = int3 17 ****************** expansion: __DEBUG0_BP__ = int3 17 ****************** expansion: __DEBUG1_BP__ = int3 17 ****************** expansion: __DEBUG2_BP__ = int3 17 ****************** expansion: __DEBUG3_BP__ = int3 17 ****************** expansion: __DEBUG4_BP__ = int3 14 <3> [list -] 14 ****************** <3> expansion: __lframe__use_186_def = 0 14 ****************** <3> expansion: __lframe__force_186 = 0 14 ****************** <3> expansion: __lframe__override_force_8086 = 0 14 ****************** <3> expansion: __@@_in_seq = 0 14 ****************** <3> expansion: __@@_seq = 0 14 ****************** <3> expansion: __@@_num = 0 14 ****************** <3> expansion: __@@_num_inv = 0 14 ****************** <3> expansion: _@@_check = 0 14 ****************** <3> expansion: _@@_start = 1 14 ****************** <3> expansion: __@@_seq = 1 14 ****************** <3> expansion: __@@_num = 0 14 ****************** <3> expansion: __@@_num_inv = 0 14 ****************** <3> expansion: __@@_in_seq = 1 14 ****************** <3> expansion: @BBBB (case-insensitive) = @BBB 14 ****************** <3> expansion: @BBB (case-insensitive) = @BB 14 ****************** <3> expansion: @BB (case-insensitive) = @B 14 ****************** <3> expansion: @B (case-insensitive) = @F 14 ****************** <3> expansion: @F (case-insensitive) = @FF 14 ****************** <3> expansion: @FF (case-insensitive) = @FFF 14 ****************** <3> expansion: @FFF (case-insensitive) = @FFFF 14 ****************** <3> expansion: @FFFF (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B4 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F4 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: __@@_num = 1 14 ****************** <3> expansion: @BBBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FF (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FFF (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FFFF (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: @B4 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F4 (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: __@@_num = 2 14 ****************** <3> expansion: @BBBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FF (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FFF (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: @FFFF (case-insensitive) = ..@.@@.1.2 14 ****************** <3> expansion: @B4 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F3 (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: @F4 (case-insensitive) = ..@.@@.1.2 14 ****************** <3> expansion: __@@_num = 3 14 ****************** <3> expansion: @BBBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BBB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @BB (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @FF (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: @FFF (case-insensitive) = ..@.@@.1.2 14 ****************** <3> expansion: @FFFF (case-insensitive) = ..@.@@.1.3 14 ****************** <3> expansion: @B4 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B3 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B2 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @B1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F1 (case-insensitive) = ..@.@@.1.0 14 ****************** <3> expansion: @F2 (case-insensitive) = ..@.@@.1.1 14 ****************** <3> expansion: @F3 (case-insensitive) = ..@.@@.1.2 14 ****************** <3> expansion: @F4 (case-insensitive) = ..@.@@.1.3 14 ****************** <3> expansion: __@@_num = 4 14 ****************** <3> expansion: __@@_num_inv = 1 14 ****************** <3> expansion: @B (case-insensitive) = ..@.@@.1.inv.1 14 ****************** <3> expansion: __@@_num_inv = 2 14 ****************** <3> expansion: @BB (case-insensitive) = ..@.@@.1.inv.2 14 ****************** <3> expansion: __@@_num_inv = 3 14 ****************** <3> expansion: @BBB (case-insensitive) = ..@.@@.1.inv.3 14 ****************** <3> expansion: __@@_num_inv = 4 14 ****************** <3> expansion: @BBBB (case-insensitive) = ..@.@@.1.inv.4 14 ****************** <3> expansion: @B4 (case-insensitive) = ..@.@@.1.inv.4 14 ****************** <3> expansion: @B3 (case-insensitive) = ..@.@@.1.inv.3 14 ****************** <3> expansion: @B2 (case-insensitive) = ..@.@@.1.inv.2 14 ****************** <3> expansion: @B1 (case-insensitive) = ..@.@@.1.inv.1 14 ****************** <3> expansion: struc_at (case-insensitive) = _struc_at 0, 14 ****************** <3> expansion: exact_struc_at (case-insensitive) = _struc_at 1, 14 ****************** <3> expansion: warn_struc_at (case-insensitive) = _struc_at 2, 14 <2> [list -] 14 ****************** <2> expansion: testopt (case-insensitive) = _opt ,test, 14 ****************** <2> expansion: clropt (case-insensitive) = _opt ~,and, 14 ****************** <2> expansion: setopt (case-insensitive) = _opt ,or, 14 ****************** <2> expansion: xoropt (case-insensitive) = _opt ,xor, 23 <1> [list -] 23 ****************** <1> expansion: __AMIS_MAC__ = 1 23 ****************** <1> expansion: strucname = IISPENTRY 23 ****************** <1> expansion: strucname = AMISSIGNATURE 25 <1> [list -] 25 ****************** <1> expansion: _USE_TX_FIFO = 1 25 ****************** <1> expansion: _ECHO_RX_TO_TX = 0 25 ****************** <1> expansion: _RX_TO_TX_ADD_LF = 1 25 ****************** <1> expansion: _UART_PORT = 2 25 ****************** <1> expansion: _INTNUM = 11 25 ****************** <1> expansion: _OFFMASK = 8 25 ****************** <1> expansion: _UART_BASE = 760 25 ****************** <1> expansion: _UART_RATE = 12 25 ****************** <1> expansion: _UART_PARAMS = 3 25 ****************** <1> expansion: _UART_FIFO = 0 25 ****************** <1> expansion: _RXFIFOSIZE = 128 25 ****************** <1> expansion: _TXFIFOSIZE = 128 25 ****************** <1> expansion: _BI_TX_FIFO_SIZE = 16 25 ****************** <1> expansion: _XT = 0 25 ****************** <1> expansion: _FILENAME = "DEBUG" 25 ****************** <1> expansion: _PROGNAME = "lDebug" 25 ****************** <1> expansion: _VERSION = " (","2019-06-09",")" 25 ****************** <1> expansion: _XTNAME = 0 25 ****************** <1> expansion: _PM = 0 25 ****************** <1> expansion: _DEBUG = 1 25 ****************** <1> expansion: _DEBUG0 = 0 25 ****************** <1> expansion: _DEBUG1 = 1 25 ****************** <1> expansion: _DEBUG2 = 0 25 ****************** <1> expansion: _DEBUG3 = 0 25 ****************** <1> expansion: _DEBUG4 = 1 25 ****************** <1> expansion: _DEBUG5 = 0 25 ****************** <1> expansion: d5 (case-insensitive) = _d 5, 25 ****************** <1> expansion: _EMS = 1 25 ****************** <1> expansion: _INT = 1 25 ****************** <1> expansion: _MCB = 1 25 ****************** <1> expansion: _RN = 1 25 ****************** <1> expansion: _DSTRINGS = 1 25 ****************** <1> expansion: _DNUM = 1 25 ****************** <1> expansion: _SDUMP = 1 25 ****************** <1> expansion: _ESTRINGS = 1 25 ****************** <1> expansion: _ENUM = 1 25 ****************** <1> expansion: _USESDA = 1 25 ****************** <1> expansion: _VDD = 1 25 ****************** <1> expansion: _EXPRESSIONS = 1 25 ****************** <1> expansion: _EXPRESSION_PRECEDENCE_STACK_CHECK = 128 25 ****************** <1> expansion: _EXPRESSION_PARENS_STACK_CHECK = 128 25 ****************** <1> expansion: _EXPRESSION_INDIRECTION_STACK_CHECK = 128 25 ****************** <1> expansion: _INDIRECTION = 1 25 ****************** <1> expansion: _VARIABLES = 1 25 ****************** <1> expansion: _OPTIONS = 1 25 ****************** <1> expansion: _COND = 1 25 ****************** <1> expansion: _COND_RDUMP_ONLY = 1 25 ****************** <1> expansion: _BOOTLDR = 1 25 ****************** <1> expansion: _INPUT_FILE_HANDLES = 16 25 ****************** <1> expansion: _BREAKPOINTS = 1 25 ****************** <1> expansion: _NUM_B_BP = 16 25 ****************** <1> expansion: _NUM_G_BP = 16 25 ****************** <1> expansion: _BREAKPOINTS_STICKY = 0 25 ****************** <1> expansion: _DEVICE = 0 25 ****************** <1> expansion: _TSR = 1 25 ****************** <1> expansion: _DETECT = 0 25 ****************** <1> expansion: _MMXSUPP = 1 25 ****************** <1> expansion: _CATCHINT01 = 1 25 ****************** <1> expansion: _CATCHINT03 = 1 25 ****************** <1> expansion: _CATCHINT06 = 1 25 ****************** <1> expansion: _CATCHINT08 = 1 25 ****************** <1> expansion: _CATCHINT18 = 1 25 ****************** <1> expansion: _CATCHINT19 = 1 25 ****************** <1> expansion: _STACKSIZE = 512 25 ****************** <1> expansion: _AUXBUFFSIZE = 8208 25 ****************** <1> expansion: _EXTHELP = 1 25 ****************** <1> expansion: _PSPVARIABLES = 1 25 ****************** <1> expansion: _DOSEMU = 1 25 ****************** <1> expansion: _INSTSET = 6 25 ****************** <1> expansion: _MMXINSTSET = 0 25 ****************** <1> expansion: _FPUINSTSET = 1 25 ****************** <1> expansion: _ONLYNON386 = 0 25 ****************** <1> expansion: _ONLY386 = 0 25 ****************** <1> expansion: _PROGNAME = 'Debugged lDebug' 25 ****************** <1> expansion: _FILENAME = 'DDEBUG' 25 ****************** <1> expansion: BPSIZE = 4 25 ****************** <1> expansion: _NOEXTENDER = 1 25 ****************** <1> expansion: _WIN9XSUPP = 1 25 ****************** <1> expansion: _EXCCSIP = 1 25 ****************** <1> expansion: _CATCHEXC06 = 1 25 ****************** <1> expansion: _CATCHEXC0C = 1 25 ****************** <1> expansion: _DISPHOOK = 1 25 ****************** <1> expansion: _NOEXTENDER = 0 25 ****************** <1> expansion: _WIN9XSUPP = 0 25 ****************** <1> expansion: _EXCCSIP = 0 25 ****************** <1> expansion: _CATCHEXC06 = 0 25 ****************** <1> expansion: _CATCHEXC0C = 0 25 ****************** <1> expansion: _DISPHOOK = 0 25 ****************** <1> expansion: strucname = BS 25 ****************** <1> expansion: strucname = EBPB 25 ****************** <1> expansion: strucname = BPBN 25 ****************** <1> expansion: strucname = LOADSTACKVARS 25 ****************** <1> expansion: strucname = LOADDATA 25 ****************** <1> expansion: strucname = LOADDATA2 25 ****************** <1> expansion: strucname = LOADSETTINGS 25 ****************** <1> expansion: strucname = DIRENTRY 25 ****************** <1> expansion: strucname = LBAPACKET 25 ****************** <1> expansion: strucname = PARTINFO 25 ****************** <1> expansion: strucname = EXEHEADER 25 ****************** <1> expansion: PATCH_NO386_TABLE = "" 25 ****************** <1> expansion: PATCH_386_TABLE = "" 25 ****************** <1> expansion: _WPT_LABELS = 0 25 ****************** <1> expansion: _386_PM_o32 = 25 ****************** <1> expansion: _386_PM_a32 = 25 ****************** <1> expansion: _386_PM_jmps = comment 25 ****************** <1> expansion: _386_PM_jmpn = comment 25 ****************** <1> expansion: _386_PM = comment 25 ****************** <1> expansion: CODE_INSURE_COUNT = 0 103 104 %ifndef _MAP 105 %elifempty _MAP 106 %else ; defined non-empty, str or non-str 107 [map all _MAP] 108 %endif 109 110 cpu 8086 110 ****************** expansion: __CPU__ = [cpu 8086] 111 org 100h 112 addsection lDEBUG_DATA_ENTRY, align=16 start=100h 112 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY align=16 start=100h] 112 ****************** expansion: _SECTION_ADDED_lDEBUG_DATA_ENTRY = 1 112 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 113 data_entry_start: 114 addsection ASMTABLE1, align=16 follows=lDEBUG_DATA_ENTRY 114 ****************** expansion: __SECT__ = [section ASMTABLE1 align=16 follows=lDEBUG_DATA_ENTRY] 114 ****************** expansion: _SECTION_ADDED_ASMTABLE1 = 1 114 ****************** expansion: __SECT__ = [section ASMTABLE1] 115 addsection ASMTABLE2, align=16 follows=ASMTABLE1 115 ****************** expansion: __SECT__ = [section ASMTABLE2 align=16 follows=ASMTABLE1] 115 ****************** expansion: _SECTION_ADDED_ASMTABLE2 = 1 115 ****************** expansion: __SECT__ = [section ASMTABLE2] 116 addsection lDEBUG_CODE, align=16 follows=ASMTABLE2 vstart=0 116 ****************** expansion: __SECT__ = [section lDEBUG_CODE align=16 follows=ASMTABLE2 vstart=0] 116 ****************** expansion: _SECTION_ADDED_lDEBUG_CODE = 1 116 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 117 code_start: 118 addsection DATASTACK, align=16 follows=ASMTABLE2 nobits 118 ****************** expansion: __SECT__ = [section DATASTACK align=16 follows=ASMTABLE2 nobits] 118 ****************** expansion: _SECTION_ADDED_DATASTACK = 1 118 ****************** expansion: __SECT__ = [section DATASTACK] 119 addsection INIT, align=16 follows=lDEBUG_CODE vstart=0 119 ****************** expansion: __SECT__ = [section INIT align=16 follows=lDEBUG_CODE vstart=0] 119 ****************** expansion: _SECTION_ADDED_INIT = 1 119 ****************** expansion: __SECT__ = [section INIT] 120 121 122 usesection lDEBUG_DATA_ENTRY 122 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 123 124 %define DATASECTIONFIXUP -data_entry_start+100h 124 ****************** expansion: DATASECTIONFIXUP = -data_entry_start+100h 125 %define CODESECTIONFIXUP -code_start+0 125 ****************** expansion: CODESECTIONFIXUP = -code_start+0 126 %define CODESECTIONOFFSET (100h+ldebug_data_entry_size+asmtable1_size+asmtable2_size) 126 ****************** expansion: CODESECTIONOFFSET = (100h+ldebug_data_entry_size+asmtable1_size+asmtable2_size) 127 %define INITSECTIONOFFSET (CODESECTIONOFFSET+ldebug_code_size) 127 ****************** expansion: INITSECTIONOFFSET = (CODESECTIONOFFSET+ldebug_code_size) 128 129 %define CODETARGET1 (CODESECTIONOFFSET+datastack_size) 129 ****************** expansion: CODETARGET1 = (CODESECTIONOFFSET+datastack_size) 130 %define CODETARGET2 (CODETARGET1+auxbuff_size) 130 ****************** expansion: CODETARGET2 = (CODETARGET1+auxbuff_size) 131 132 %define AUXTARGET1 (CODETARGET1+ldebug_code_size) 132 ****************** expansion: AUXTARGET1 = (CODETARGET1+ldebug_code_size) 133 %define AUXTARGET2 CODETARGET1 133 ****************** expansion: AUXTARGET2 = CODETARGET1 134 %define AUXTARGET3 AUXTARGET1+auxbuff_size 134 ****************** expansion: AUXTARGET3 = AUXTARGET1+auxbuff_size 135 136 %define NONBOOTINITTARGET (INITSECTIONOFFSET+datastack_size+auxbuff_size*2) 136 ****************** expansion: NONBOOTINITTARGET = (INITSECTIONOFFSET+datastack_size+auxbuff_size*2) 137 %define NONBOOTINITSTACK_START (NONBOOTINITTARGET+init_size) 137 ****************** expansion: NONBOOTINITSTACK_START = (NONBOOTINITTARGET+init_size) 138 NONBOOTINITSTACK_SIZE equ 512 ; must be even 139 %define NONBOOTINITSTACK_END (NONBOOTINITSTACK_START+NONBOOTINITSTACK_SIZE) 139 ****************** expansion: NONBOOTINITSTACK_END = (NONBOOTINITSTACK_START+NONBOOTINITSTACK_SIZE) 140 141 BOOTINITSTACK_SIZE equ 512 ; must be divisible by 16 142 %define BOOTDELTA (fromkib(kib(auxbuff_size*2 + datastack_size + INITSECTIONOFFSET + 16))) 142 ****************** expansion: BOOTDELTA = (fromkib(kib(auxbuff_size*2 + datastack_size + INITSECTIONOFFSET + 16))) 143 144 145 %if _DEVICE 146 fill 4,0FFh,jmp initcode_j 147 dw 8000h 148 dw deviceinit -$$ 149 dw deviceinit.retf -$$ 150 fill 8,32,db "DEBUG$$" 151 %else 152 00000000 EB3E jmp initcode_j 153 %endif 154 %if _BOOTLDR 155 00000002 90 align 32 156 00000020 8CC8 mov ax, cs 157 00000022 83E810 sub ax, 10h 158 00000025 8ED8 mov ds, ax 159 00000027 BB[EC00] mov bx, boot_initcode 160 0000002A EB18 jmp @F 161 %endif 162 0000002C 90 align 64 163 initcode_j: 164 00000040 8CC8 mov ax, cs 165 00000042 31DB xor bx, bx 166 @@: 166 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.inv.3 166 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.inv.2 166 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.inv.1 166 ****************** expansion: @B (case-insensitive) = ..@.@@.1.0 166 ****************** expansion: @F (case-insensitive) = ..@.@@.1.1 166 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.2 166 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.3 166 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.4 166 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.inv.3 166 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.inv.2 166 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.inv.1 166 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.0 166 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.1 166 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.2 166 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.3 166 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.4 166 ****************** expansion: __@@_num = 5 167 00000044 05080F add ax, paras(INITSECTIONOFFSET) 168 00000047 50 push ax 169 00000048 53 push bx 170 00000049 CB retf 171 172 173 align 2 174 0000004A [9E03][0656][BE3A]- cmdlist: dw aa,bb,cc,ddd,ee,ff,gg,hh,ii,error,error,ll,mm,nn,oo 174 00000050 [500F][BE58][F359]- 174 00000056 [5B1B][455A][CC5A]- 174 0000005C [FB66][FB66][6E5B]- 174 00000062 [785D][725E][9C5A] 175 00000068 [4F28][0060][BC13]- dw pp,qq,rr,sss,tt,uu,error,ww,xx,yy 175 0000006E [4062][9C24][822F]- 175 00000074 [FB66][9463][ED64]- 175 0000007A [3A7A] 176 177 align 4 178 ; options, startoptions and internalflags 179 ; have to be consecutive 180 0000007C 00000000 options: dd DEFAULTOPTIONS ; run-time options 181 dispregs32 equ 1 ; RX: 32-bit register display (R, T/P/G) 182 traceints equ 2 ; TM: trace into interrupts (T) 183 cpdepchars equ 4 ; allow dumping of CP-dependant characters (D, DX) 184 fakeindos equ 8 ; always assume InDOS flag non-zero (all) 185 nonpagingdevice equ 10h ; disallow paged output with [more] prompt (all exc. P, T) 186 pagingdevice equ 20h ; allow paged output with [more] prompt (all exc. P, T) 187 ; paged output is by default on if the output device is StdOut, else off 188 hexrn equ 40h ; display raw hexadecimal content of FPU registers (RN) 189 ;novdd equ 80h ; don't use a registered NTVDM VDD (L, W) 190 nondospaging equ 100h ; paging: don't use DOS for input when waiting for a key 191 nohlt equ 200h ; HLT doesn't work, don't use it 192 biosidles equ 400h ; don't idle with HLT or Int2F.1680, only call BIOS Int16.00 193 use_si_units equ 1000h ; in disp_*_size use SI units (kB = 1000, etc) 194 use_jedec_units equ 2000h ; in disp_*_size use JEDEC units (kB = 1024) 195 enable_serial equ 4000h ; enable serial I/O (preferred over DOS or BIOS terminal) 196 int8_disable_serial equ 8000h ; disable serial I/O when breaking due to intr8 197 gg_do_not_skip_bp equ 1_0000h ; gg: do not skip a breakpoint (bb or gg) 198 gg_no_autorepeat equ 2_0000h ; gg: do not auto-repeat 199 tp_do_not_skip_bp equ 4_0000h ; T/TP/P: do not skip a (bb) breakpoint 200 gg_bb_hit_no_repeat equ 8_0000h ; gg: do not auto-repeat after bb hit 201 tp_bb_hit_no_repeat equ 10_0000h ; T/TP/P: do not auto-repeat after bb hit 202 gg_unexpected_no_repeat equ 20_0000h ; gg: do not auto-repeat after unexpectedinterrupt 203 tp_unexpected_no_repeat equ 40_0000h ; T/TP/P 204 DEFAULTOPTIONS equ 0 205 206 00000080 00000000 startoptions: dd DEFAULTOPTIONS ; options as determined during startup; read-only for user 207 208 00000084 F8308000 internalflags: dd attachedterm|pagedcommand|notstdinput|inputfile|notstdoutput|outputfile|(!!_PM*dpminohlt)|debuggeeA20|debuggerA20 209 ; flags only modified by DEBUG itself 210 oldpacket equ 1 ; Int25/Int26 packet method available (L, W) 211 newpacket equ 2 ; Int21.7305 packet method available (L, W) 212 ntpacket equ 4 ; VDD registered and usable (L, W) 213 pagedcommand equ 8 ; allows paging in puts 214 notstdinput equ 10h ; DEBUG's StdIn isn't a device with StdIn bit (is file or other device) 215 inputfile equ 20h ; DEBUG's StdIn is a file, notstdinput also set 216 notstdoutput equ 40h ; DEBUG's StdOut isn't a device with StdOut bit (is file or other device) 217 outputfile equ 80h ; DEBUG's StdOut is a file, notstdoutput also set 218 hooked2F equ 100h ; Int2F hooked 219 nohook2F equ 200h ; don't hook Int2F.1687 (required for Win9x, DosEmu?) 220 dpminohlt equ 400h ; DPMI doesn't like hlt 221 protectedmode equ 800h ; in (DPMI) protected mode 222 debuggeeA20 equ 1000h ; state of debuggee's A20 223 debuggerA20 equ 2000h ; state of debugger's A20 (will be on if possible) 224 nodosloaded equ 4000h ; No DOS loaded currently (Boot loader mode) 225 has386 equ 8000h ; CPU is a 386 226 usecharcounter equ 1_0000h ; don't reset charcounter between calls to puts 227 runningnt equ 2_0000h ; running in NTVDM 228 canswitchmode equ 4_0000h ; can switch modes (auxbuff large enough, DPMI mode switch set up) 229 modeswitched equ 8_0000h ; switched mode (now in the mode that we weren't entered in) 230 promptwaiting equ 10_0000h ; puts: any more output needs to display a prompt first 231 switchbuffer equ 20_0000h ; mode switch needs a buffer (auxbuff) 232 tsrmode equ 40_0000h ; in TSR mode; DPI and DPP not valid 233 attachedterm equ 80_0000h ; the attached process terminated 234 runningdosemu equ 100_0000h ; running in dosemu 235 load_is_ldp equ 200_0000h ; boot load: partition specified as "ldp" 236 tt_while: equ 400_0000h ; tt: while condition specified 237 tt_p: equ 800_0000h ; tt: proceed past repeated string instructions 238 tt_silent_mode: equ 1000_0000h ; tt: run should be silent (dump at end) 239 tt_silence: equ 2000_0000h ; tt: silent writing (write to auxbuff instead) 240 tt_no_bb: equ 4000_0000h ; tt: do not use bb breakpoints 241 tt_no_bb_first: equ 8000_0000h ; tt: do not use bb breakpoints at first 242 243 00000088 00000000 internalflags2: dd 0 244 dif2_gg_is_first: equ 1 245 dif2_gg_skip_non_cseip: equ 2 246 dif2_gg_skip_cseip: equ 4 247 dif2_gg_is_gg: equ 8 248 dif2_gg_first_detected: equ 10h 249 dif2_gg_again: equ 20h 250 dif2_tpg_proceed_bp_set:equ 40h 251 dif2_tpg_keep_proceed_bp: equ 80h 252 dif2_tpg_have_bp: equ 100h 253 dif2_tpg_adjusted_cseip:equ 200h 254 dif2_tpg_do_not_adjust: equ 400h 255 dif2_bp_failure: equ 800h 256 dif2_is_pp: equ 1000h 257 %if _INPUT_FILE_HANDLES 258 dif2_input_file: equ 10_0000h 259 dif2_closed_input_file: equ 20_0000h 260 %endif 261 dif2_did_getline_file: equ 40_0000h 262 263 0000008C 07000000 asm_options: dd DEFAULTASMOPTIONS 264 disasm_lowercase equ 1 265 disasm_commablank equ 2 266 disasm_nasm equ 4 267 disasm_lowercase_refmem:equ 8 268 DEFAULTASMOPTIONS equ disasm_lowercase|disasm_commablank|disasm_nasm 269 270 asm_startoptions: 271 00000090 07000000 dd DEFAULTASMOPTIONS 272 273 00000094 00000000 gg_first_cseip_linear: dd 0 274 00000098 00000000 gg_next_cseip_linear: dd 0 275 0000009C 00000000 tpg_possible_breakpoint:dd 0 276 000000A0 [703F] gg_deferred_message: dw msg.empty_message 277 000000A2 [703F] bb_deferred_message: dw msg.empty_message 278 000000A4 00 tpg_proceed_bp: times BPSIZE db 0 279 %if _DEBUG1 280 align 2 281 000000A8 00 test_records_Readmem: times 6 * 16 db 0 282 00000108 00 test_records_Writemem: times 6 * 16 db 0 283 00000168 00 test_records_getLinear: times 6 * 16 db 0 284 000001C8 00 test_records_getSegmented: times 6 * 16 db 0 285 286 00000228 00 test_readmem_value: db 0 287 %endif 288 00000229 90 align 2 289 0000022A 0000 code_seg: dw 0 290 %if _PM 291 code_sel: dw 0 292 %endif 293 294 295 align 2 296 %if _PM 297 auxbuff_switchbuffer_size: dw 0 298 %endif 299 auxbuff_segorsel: 300 %if _PM 301 dw 0 302 %endif 303 auxbuff_segment: 304 0000022C 0000 dw 0 305 auxbuff_behind_while_condition: 306 0000022E 0000 dw 0 ; -> behind while condition stored in auxbuff 307 ; (this is also the first silent buffer entry) 308 auxbuff_behind_last_silent: 309 00000230 0000 dw 0 ; -> behind last silent buffer entry 310 tt_silent_mode_number: 311 00000232 0000 dw 0 ; if non-zero: maximum amount of dumps 312 ; displayed after T/TP/P while silent 313 %if _INPUT_FILE_HANDLES 314 input_file_handles: 315 00000234 FFFF times _INPUT_FILE_HANDLES dw -1 316 00000254 0000 .active: dw 0 317 %endif 318 00000256 00 charcounter: db 0 ; used by raw output to handle tab 319 00000257 00 linecounter: db 0 ; used by paging in puts 320 00000258 0000 savesp: dw 0 ; saved stack pointer 321 0000025A [E301] errret: dw cmd3 ; return here if error 322 0000025C [1567] throwret: dw errhandler ; return here if error - priority, no display 323 0000025E 0000 throwsp: dw 0 ; stack pointer used by throwret users 324 00000260 0000 run_sp: dw 0 ; stack pointer when running 325 00000262 4000 spadjust: dw 40h ; adjust sp by this amount for save 326 00000264 0000 pspdbe: dw 0 ; debuggee's PSP (unless DIF&attachedterm) 327 00000266 0000 pspdbg: dw 0 ; debugger's PSP (RM segment) 328 align 4 329 00000268 0000000000000000 run2324: dd 0,0 ; debuggee's interrupt vectors 23h and 24h (both modes) 330 %if _PM 331 dd 0 332 dbg2324: dw i23pm, i24pm 333 %endif 334 %if _VDD 335 00000270 FFFF hVdd: dw -1 ; NTVDM VDD handle 336 %endif 337 00000272 90 align 4 338 00000274 0000000000000000 sav2324: dd 0,0 ; debugger's interrupt vectors 23h and 24h (real-mode only) 339 0000027C 00 hakstat: db 0 ; whether we have hacked the vectors or not 340 0000027D 90 align 4 341 00000280 00000000 psp22: dd 0 ; original terminate address from our PSP 342 00000284 0000 parent: dw 0 ; original parent process from our PSP (must follow psp22) 343 %if _MCB 344 00000286 FFFF wMCB: dw -1 ; start of MCB chain (always segment) 345 %endif 346 00000288 00000000 pInDOS: dd 0 ; far16 address of InDOS flag (bimodal) 347 %if _PM 348 InDosSegm: dw 0 ; saved segment value of pInDOS 349 %endif 350 %if _USESDA 351 0000028C FFFFFFFF pSDA: dd -1 ; far16 address of SDA (bimodal) 352 %if _PM 353 SDASegm: dw -1 ; saved segment value of pSDA 354 %endif 355 %endif 356 00000290 00 machine: db 0 ; type of processor for assembler and disassembler (1..6) 357 00000291 00 has_87: db 0 ; if there is a math coprocessor present 358 00000292 00 mach_87: db 0 ; type of coprocessor present 359 %if _MMXSUPP 360 00000293 00 has_mmx: db 0 361 %endif 362 00000294 01 bInDbg: db 1 ; 1=debugger is running 363 00000295 0A notatty: db 10 ; if standard input is from a file 364 ; this is also used for a linebreak processing hack 365 00000296 00 switchar: db 0 ; switch character 366 00000297 20 swch1: db ' ' ; switch character if it's a slash 367 align 2 368 00000298 0000 promptlen: dw 0 ; length of prompt 369 0000029A [0200] bufnext: dw line_in+2 ; address of next available character 370 0000029C [0200] bufend: dw line_in+2 ; address + 1 of last valid character 371 372 0000029E 000000000000 a_addr: dw 0,0,0 ; address for next A command 373 000002A4 000000000000 d_addr: dw 0,0,0 ; address for next D command; must follow a_addr 374 000002AA 000000000000 u_addr: dw 0,0,0 ; address for next U command; must follow d_addr 375 000002B0 000000000000 e_addr: dw 0,0,0 ; address for current/next E command 376 %if _DSTRINGS 377 000002B6 000000000000 dz_addr: dw 0,0,0 ; address for next ASCIZ string 378 000002BC 000000000000 dcpm_addr: dw 0,0,0 ; address for next $-terminated string 379 000002C2 000000000000 dcount_addr: dw 0,0,0 ; address for next byte-counted string 380 000002C8 000000000000 dwcount_addr: dw 0,0,0 ; address for next word-counted string 381 %endif 382 %if _PM 383 x_addr: dd 0 ; (phys) address for next DX command 384 %endif 385 %if _DSTRINGS 386 000002CE 00 dstringtype: db 0 ; FFh byte-counted, FEh word-counted, else terminator byte 387 000002CF [B602] dstringaddr: dw dz_addr ; -> address of last string 388 %endif 389 %if _INT 390 000002D1 00 lastint: db 0 391 %endif 392 000002D2 90 align 4 393 000002D4 0000 sscounter: dw 0 394 %if _PM 395 dw 0 396 %endif 397 000002D6 00 rrtype: db 0 398 000002D7 00 eqflag: db 0 ; flag indicating presence of `=' operand 399 000002D8 000000000000 eqladdr: dw 0,0,0 ; address of `=' operand in G, P and T command 400 align 2 401 000002DE 0000 run_int: dw 0 ; interrupt type that stopped the running 402 000002E0 [1B03] lastcmd: dw dmycmd 403 000002E2 00 bInit: db 0 ; 0=ensure a valid opcode is at debuggee's CS:IP 404 000002E3 00 fileext: db 0 ; file extension (0 if no file name) 405 EXT_OTHER equ 1 406 EXT_COM equ 2 407 EXT_EXE equ 4 408 EXT_HEX equ 8 409 410 align 4 411 000002E4 00000000 mmxbuff: dd 0 ; buffer with a (read-only) part of MMX register 412 ; for access from within expressions 413 %if _CATCHINT08 414 000002E8 0000 intr8_counter: dw 0 415 %endif 416 serial_rows: 417 000002EA 18 db 24 418 serial_keep_timeout: 419 000002EB 0F db 15 420 %if _USE_TX_FIFO 421 serial_fifo_size: 422 000002EC 10 db _BI_TX_FIFO_SIZE 423 ; size of built-in TX fifo (1 is as if no FIFO) 424 %endif 425 serial_flags: 426 000002ED 00 db 0 427 sf_init_done: equ 1 428 sf_ctrl_c: equ 2 429 sf_double_ctrl_c: equ 4 430 sf_built_in_fifo: equ 8 431 432 align 2 433 000002EE 0000 getline_timer_count: dw 0 434 000002F0 0000 getline_timer_last: dw 0 435 000002F2 [1B03] getline_timer_func: dw dmycmd 436 437 438 inttab: 439 000002F4 00 db 0 440 000002F5 [354E] dw intr0 ; table of interrupt initialization stuff 441 %if _CATCHINT01 442 000002F7 01 db 1 443 000002F8 [3E4E] dw intr1 444 %endif 445 %if _CATCHINT03 446 000002FA 03 db 3 447 000002FB [474E] dw intr3 448 %endif 449 %if _CATCHINT06 450 000002FD 06 db 6 451 000002FE [504E] dw intr6 452 %endif 453 %if _CATCHINT08 454 00000300 08 db 8 455 00000301 [B44D] dw intr8 456 %endif 457 %if _CATCHINT18 458 00000303 18 db 18h 459 00000304 [594E] dw intr18 460 %endif 461 %if _CATCHINT19 462 00000306 19 db 19h 463 00000307 [624E] dw intr19 464 %endif 465 endarea inttab 466 inttab_number equ inttab_size / 3 467 468 00000309 90 align 4 469 0000030C FFFFFFFF intsave:dd -1 ; storage for interrupt vectors 00h, 01h, 03h, 06h 470 %if _CATCHINT01 471 00000310 FFFFFFFF dd -1 472 %endif 473 %if _CATCHINT03 474 00000314 FFFFFFFF dd -1 475 %endif 476 %if _CATCHINT06 477 00000318 FFFFFFFF dd -1 478 %endif 479 intr8_original: 480 %if _CATCHINT08 481 0000031C FFFFFFFF dd -1 482 %endif 483 %if _CATCHINT18 484 00000320 FFFFFFFF dd -1 485 %endif 486 %if _CATCHINT19 487 00000324 FFFFFFFF dd -1 488 %endif 489 490 ; Parameter block for EXEC call 491 00000328 0000 execblk:dw 0 ;(00) zero: copy the parent's environment 492 0000032A 00000000 dw 0,0 ;(02) address of command tail to copy 493 0000032E 5C000000 dw 5Ch,0 ;(06) address of first FCB to copy 494 00000332 6C000000 dw 6Ch,0 ;(10) address of second FCB to copy 495 00000336 00000000 dw 0,0 ;(14) initial SS:SP 496 0000033A 00000000 dw 0,0 ;(18) initial CS:IP 497 498 499 ; Register save area (32 words). 500 ; must be DWORD aligned, used as stack 501 0000033E 90 align 4 502 regs: 503 00000340 00000000 reg_eax: dd 0 ;+00 eax 504 00000344 00000000 reg_ebx: dd 0 ;+04 ebx 505 00000348 00000000 reg_ecx: dd 0 ;+08 ecx 506 0000034C 00000000 reg_edx: dd 0 ;+12 edx 507 00000350 00000000 reg_esp: dd 0 ;+16 esp 508 00000354 00000000 reg_ebp: dd 0 ;+20 ebp 509 00000358 00000000 reg_esi: dd 0 ;+24 esi 510 0000035C 00000000 reg_edi: dd 0 ;+28 edi 511 00000360 00000000 reg_ds: dd 0 ;+32 ds (high word unused) 512 00000364 00000000 reg_es: dd 0 ;+36 es (high word unused) 513 00000368 00000000 reg_ss: dd 0 ;+40 ss (high word unused) 514 0000036C 00000000 reg_cs: dd 0 ;+44 cs (high word unused) 515 00000370 00000000 reg_fs: dd 0 ;+48 fs (high word unused) 516 00000374 00000000 reg_gs: dd 0 ;+52 gs (high word unused) 517 00000378 00000000 reg_eip: dd 0 ;+56 eip 518 0000037C 00000000 reg_efl: dd 0 ;+60 efl(ags) 519 %if _VARIABLES 520 00000380 00000000 vregs: times 16 dd 0 ;+64 internal v0..vf 521 %endif 522 523 ; possible byte encoding of lDebug variables for dynamic computations: 524 ; xxxxyyyy 525 ; 10: register 526 ; xx: size (0 = 1, 1 = 2, 2 = 4) 527 ; yyyy: 0..15: register as stored in the register save area 528 ; as SIL, DIL, BPL, SPL aren't supported these map to xH 529 ; xSL, IPL and FLL are invalid, ExS are invalid 530 ; 1011: variable 531 ; yyyy: which variable. variables are always dword-sized 532 ; 11000000: 32-bit compound, next byte stores: xxxxyyyy first, second 16-bit reg 533 ; 11000001..11111111: available for encoding other compound regs, vars, indirection, 534 ; symbols, types etc 535 ; 0xxxxxxx: operators 536 537 538 ; Instruction set information needed for the 'p' command. 539 ; ppbytes and ppinfo needs to be consecutive. 540 000003C0 6667262E363E6465F2- ppbytes:db 66h,67h,26h,2Eh,36h,3Eh,64h,65h,0F2h,0F3h ; prefixes 540 000003C9 F3 541 000003CA ACADAAABA4A5 db 0ACh,0ADh,0AAh,0ABh,0A4h,0A5h ; lods,stos,movs 542 000003D0 A6A7AEAF db 0A6h,0A7h,0AEh,0AFh ; cmps,scas 543 000003D4 6C6D6E6F db 6Ch,6Dh,6Eh,6Fh ; ins,outs 544 PPLEN_ONLY_STRING equ $-ppbytes 545 000003D8 CCCD db 0CCh,0CDh ; int instructions 546 000003DA E0E1E2 db 0E0h,0E1h,0E2h ; loop instructions 547 000003DD E8 db 0E8h ; call rel16/32 548 000003DE 9A db 09Ah ; call far seg16:16/32 549 ; (This last one is done explicitly by the code.) 550 ; db 0FFh ; FF/2 or FF/3: indirect call 551 552 PPLEN equ $-ppbytes ; size of the above table 553 554 ; Info for the above, respectively. 555 ; 80h = prefix; 82h = operand size prefix; 81h = address size prefix. 556 ; If the high bit is not set, the next highest bit (40h) indicates that 557 ; the instruction size depends on whether there is an address size prefix, 558 ; and the remaining bits tell the number of additional bytes in the 559 ; instruction. 560 561 PP_ADRSIZ equ 01h 562 PP_OPSIZ equ 02h 563 PP_PREFIX equ 80h 564 PP_VARSIZ equ 40h 565 566 000003DF 828180808080808080- ppinfo: db 82h,81h,80h,80h,80h,80h,80h,80h,80h,80h 566 000003E8 80 567 000003E9 000000000000 db 0,0,0,0,0,0 568 000003EF 00000000 db 0,0,0,0 569 000003F3 00000000 db 0,0,0,0 570 000003F7 0001 db 0,1 571 000003F9 010101 db 1,1,1 572 000003FC 42 db 42h 573 000003FD 44 db 44h 574 575 %if PPLEN != $-ppinfo 576 %error "ppinfo table has wrong size" 577 %endif 578 579 580 ; Equates for instruction operands. 581 ; First the sizes. 582 583 OP_ALL equ 40h ; byte/word/dword operand (could be 30h but ...) 584 OP_1632 equ 50h ; word or dword operand 585 OP_8 equ 60h ; byte operand 586 OP_16 equ 70h ; word operand 587 OP_32 equ 80h ; dword operand 588 OP_64 equ 90h ; qword operand 589 590 OP_SIZE equ OP_ALL ; the lowest of these 591 592 ; These operand types need to be combined with a size. 593 594 OP_IMM equ 0 ; immediate 595 OP_RM equ 2 ; reg/mem 596 OP_M equ 4 ; mem (but not reg) 597 OP_R_MOD equ 6 ; register, determined from MOD R/M part 598 OP_MOFFS equ 8 ; memory offset; e.g., [1234] 599 OP_R equ 10 ; reg part of reg/mem byte 600 OP_R_ADD equ 12 ; register, determined from instruction byte 601 OP_AX equ 14 ; al or ax or eax 602 603 ; These don't need a size. 604 605 OP_M64 equ 2 ; 0 qword memory (obsolete?) 606 OP_MFLOAT equ 4 ; 1 float memory 607 OP_MDOUBLE equ 6 ; 2 double-precision floating memory 608 OP_M80 equ 8 ; 3 tbyte memory 609 OP_MXX equ 10 ; 4 memory (size unknown) 610 OP_FARMEM equ 12 ; 5 memory far16/far32 pointer 611 OP_FARIMM equ 14 ; 6 far16/far32 immediate 612 OP_REL8 equ 16 ; 7 byte address relative to IP 613 OP_REL1632 equ 18 ; 8 word or dword address relative to IP 614 OP_1CHK equ 20 ; 9 check for ST(1) 615 OP_STI equ 22 ;10 ST(I) 616 OP_CR equ 24 ;11 CRx 617 OP_DR equ 26 ;12 DRx 618 OP_TR equ 28 ;13 TRx 619 OP_SEGREG equ 30 ;14 segment register 620 OP_IMMS8 equ 32 ;15 sign extended immediate byte 621 OP_IMM8 equ 34 ;16 immediate byte (other args may be (d)word) 622 OP_MMX equ 36 ;17 MMx 623 OP_MMX_MOD equ 38 ;18 MMx, but in ModR/M part 624 OP_SHOSIZ equ 40 ;19 set flag to always show the size 625 626 OP_1 equ 42 ; 1 (simple "string" ops from here on) 627 OP_3 equ 44 ; 3 628 OP_DX equ 46 ; DX 629 OP_CL equ 48 ; CL 630 OP_ST equ 50 ; ST (top of coprocessor stack) 631 OP_CS equ 52 ; CS 632 OP_DS equ 54 ; DS 633 OP_ES equ 56 ; ES 634 OP_FS equ 58 ; FS 635 OP_GS equ 60 ; GS 636 OP_SS equ 62 ; SS 637 638 ; Instructions that have an implicit operand subject to a segment prefix. 639 ; This means a prefixed segment is allowed by the strict assembler, and 640 ; the disassembler treats a segment prefix as part of the instruction and 641 ; displays it in front of the instruction's mnemonic. 642 ; (outs, movs, cmps, lods, xlat). 643 segprfxtab: 644 000003FE 6E6FA4A5A6A7ACAD db 06Eh,06Fh,0A4h,0A5h,0A6h,0A7h,0ACh,0ADh 645 a32prfxtab: 646 00000406 D7 db 0D7h ; xlat, last in segprfxtab, first in a32prfxtab 647 SEGP_LEN equ $-segprfxtab 648 649 ; Instructions that can be used with REPE/REPNE. 650 ; (ins, outs, movs, stos, lods; cmps, scas) 651 00000407 6C6EA4AAAC replist:db 06Ch,06Eh,0A4h,0AAh,0ACh ; REP (no difference) 652 REP_SAME_LEN equ $-replist ; number of indifferent replist entries 653 0000040C A6AE db 0A6h,0AEh ; REPE/REPNE 654 REP_LEN equ $-replist 655 REP_DIFF_LEN equ REP_LEN-REP_SAME_LEN ; number of replist entries with difference 656 657 A32P_LEN equ $-a32prfxtab 658 659 ; prfxtab P_LEN REP_LEN REPE_REPNE_LEN 660 661 ; All the instructions in replist also have an implicit operand 662 ; subject to ASIZE (similar to segprfxtab). Additionally, the 663 ; xlat instruction (0D7h) has such an implicit operand too. 664 ; maskmovq too. 665 666 667 %include "asmtabs.asm" 1 <1> [list -] 1 ****************** <1> expansion: _ASM_ESCAPE_USED = 0 1 ****************** <1> expansion: AGRP = (240h + num*8 + rfld) 1 ****************** <1> expansion: __HEXDIGIT_0 = '0' 1 ****************** <1> expansion: __HEXDIGIT_1 = '1' 1 ****************** <1> expansion: __HEXDIGIT_2 = '2' 1 ****************** <1> expansion: __HEXDIGIT_3 = '3' 1 ****************** <1> expansion: __HEXDIGIT_4 = '4' 1 ****************** <1> expansion: __HEXDIGIT_5 = '5' 1 ****************** <1> expansion: __HEXDIGIT_6 = '6' 1 ****************** <1> expansion: __HEXDIGIT_7 = '7' 1 ****************** <1> expansion: __HEXDIGIT_8 = '8' 1 ****************** <1> expansion: __HEXDIGIT_9 = '9' 1 ****************** <1> expansion: __HEXDIGIT_10 = 'A' 1 ****************** <1> expansion: __HEXDIGIT_11 = 'B' 1 ****************** <1> expansion: __HEXDIGIT_12 = 'C' 1 ****************** <1> expansion: __HEXDIGIT_13 = 'D' 1 ****************** <1> expansion: __HEXDIGIT_14 = 'E' 1 ****************** <1> expansion: __HEXDIGIT_15 = 'F' 1 ****************** <1> expansion: label = %+ : comment 1 ****************** <1> expansion: OT = (0 %+ num %+ h + OPTYPES_BASE) 1 ****************** <1> expansion: opidx = 0 1 ****************** <1> expansion: topbyte = 0 1 ****************** <1> expansion: topbyte_ofs = 0 344 <1> usesection ASMTABLE2 344 ****************** <1> expansion: __SECT__ = [section ASMTABLE2] 345 <1> asmtab: 346 <1> usesection ASMTABLE1 346 ****************** <1> expansion: __SECT__ = [section ASMTABLE1] 347 <1> %include "debugtbl.inc" 1 <2> 2 <2> ;--- This file was generated by mktables.exe. 3 <2> 4 <2> OPTYPES_BASE EQU 0Ch 5 <2> 6 <2> ;--- Operand type lists. 7 <2> ;--- They were read from file INSTR.KEY. 8 <2> 9 <2> oplists label byte 10 00000000 00 <2> opl ;void - for instructions without operands 10 ****************** <2> expansion: label = "OPLIST_" 10 ****************** <2> expansion: digit = 0 10 ****************** <2> expansion: label = 'OPLIST_0' 10 ****************** <2> expansion: digit = 0 10 ****************** <2> expansion: label = 'OPLIST_00' 10 ****************** <2> expansion: label = OPLIST_00 10 ****************** <2> expansion: OPLIST_00 = 0 10 ****************** <2> expansion: opidx = 1 11 00000001 4E4000 <2> opl OP_ALL+OP_AX, OP_ALL+OP_IMM ; idx=1, ofs=Dh 11 ****************** <2> expansion: label = "OPLIST_" 11 ****************** <2> expansion: digit = 0 11 ****************** <2> expansion: label = 'OPLIST_0' 11 ****************** <2> expansion: digit = 1 11 ****************** <2> expansion: label = 'OPLIST_01' 11 ****************** <2> expansion: label = OPLIST_01 11 ****************** <2> expansion: OPLIST_01 = 1 11 ****************** <2> expansion: opidx = 2 12 00000004 424000 <2> opl OP_ALL+OP_RM, OP_ALL+OP_IMM ; idx=2, ofs=10h 12 ****************** <2> expansion: label = "OPLIST_" 12 ****************** <2> expansion: digit = 0 12 ****************** <2> expansion: label = 'OPLIST_0' 12 ****************** <2> expansion: digit = 2 12 ****************** <2> expansion: label = 'OPLIST_02' 12 ****************** <2> expansion: label = OPLIST_02 12 ****************** <2> expansion: OPLIST_02 = 4 12 ****************** <2> expansion: opidx = 3 13 00000007 522000 <2> opl OP_1632+OP_RM, OP_IMMS8 ; idx=3, ofs=13h 13 ****************** <2> expansion: label = "OPLIST_" 13 ****************** <2> expansion: digit = 0 13 ****************** <2> expansion: label = 'OPLIST_0' 13 ****************** <2> expansion: digit = 3 13 ****************** <2> expansion: label = 'OPLIST_03' 13 ****************** <2> expansion: label = OPLIST_03 13 ****************** <2> expansion: OPLIST_03 = 7 13 ****************** <2> expansion: opidx = 4 14 0000000A 424A00 <2> opl OP_ALL+OP_RM, OP_ALL+OP_R ; idx=4, ofs=16h 14 ****************** <2> expansion: label = "OPLIST_" 14 ****************** <2> expansion: digit = 0 14 ****************** <2> expansion: label = 'OPLIST_0' 14 ****************** <2> expansion: digit = 4 14 ****************** <2> expansion: label = 'OPLIST_04' 14 ****************** <2> expansion: label = OPLIST_04 14 ****************** <2> expansion: OPLIST_04 = 10 14 ****************** <2> expansion: opidx = 5 15 0000000D 4A4200 <2> opl OP_ALL+OP_R, OP_ALL+OP_RM ; idx=5, ofs=19h 15 ****************** <2> expansion: label = "OPLIST_" 15 ****************** <2> expansion: digit = 0 15 ****************** <2> expansion: label = 'OPLIST_0' 15 ****************** <2> expansion: digit = 5 15 ****************** <2> expansion: label = 'OPLIST_05' 15 ****************** <2> expansion: label = OPLIST_05 15 ****************** <2> expansion: OPLIST_05 = 13 15 ****************** <2> expansion: opidx = 6 16 00000010 727A00 <2> opl OP_16+OP_RM, OP_16+OP_R ; idx=6, ofs=1Ch 16 ****************** <2> expansion: label = "OPLIST_" 16 ****************** <2> expansion: digit = 0 16 ****************** <2> expansion: label = 'OPLIST_0' 16 ****************** <2> expansion: digit = 6 16 ****************** <2> expansion: label = 'OPLIST_06' 16 ****************** <2> expansion: label = OPLIST_06 16 ****************** <2> expansion: OPLIST_06 = 16 16 ****************** <2> expansion: opidx = 7 17 00000013 5A5400 <2> opl OP_1632+OP_R, OP_1632+OP_M ; idx=7, ofs=1Fh 17 ****************** <2> expansion: label = "OPLIST_" 17 ****************** <2> expansion: digit = 0 17 ****************** <2> expansion: label = 'OPLIST_0' 17 ****************** <2> expansion: digit = 7 17 ****************** <2> expansion: label = 'OPLIST_07' 17 ****************** <2> expansion: label = OPLIST_07 17 ****************** <2> expansion: OPLIST_07 = 19 17 ****************** <2> expansion: opidx = 8 18 00000016 5A5200 <2> opl OP_1632+OP_R, OP_1632+OP_RM ; idx=8, ofs=22h 18 ****************** <2> expansion: label = "OPLIST_" 18 ****************** <2> expansion: digit = 0 18 ****************** <2> expansion: label = 'OPLIST_0' 18 ****************** <2> expansion: digit = 8 18 ****************** <2> expansion: label = 'OPLIST_08' 18 ****************** <2> expansion: label = OPLIST_08 18 ****************** <2> expansion: OPLIST_08 = 22 18 ****************** <2> expansion: opidx = 9 19 00000019 8C00 <2> opl OP_32+OP_R_ADD ; idx=9, ofs=25h 19 ****************** <2> expansion: label = "OPLIST_" 19 ****************** <2> expansion: digit = 0 19 ****************** <2> expansion: label = 'OPLIST_0' 19 ****************** <2> expansion: digit = 9 19 ****************** <2> expansion: label = 'OPLIST_09' 19 ****************** <2> expansion: label = OPLIST_09 19 ****************** <2> expansion: OPLIST_09 = 25 19 ****************** <2> expansion: opidx = 10 20 0000001B 525A00 <2> opl OP_1632+OP_RM, OP_1632+OP_R ; idx=10, ofs=27h 20 ****************** <2> expansion: label = "OPLIST_" 20 ****************** <2> expansion: digit = 0 20 ****************** <2> expansion: label = 'OPLIST_0' 20 ****************** <2> expansion: digit = 10 20 ****************** <2> expansion: label = 'OPLIST_0A' 20 ****************** <2> expansion: label = OPLIST_0A 20 ****************** <2> expansion: OPLIST_0A = 27 20 ****************** <2> expansion: opidx = 11 21 0000001E 522200 <2> opl OP_1632+OP_RM, OP_IMM8 ; idx=11, ofs=2Ah 21 ****************** <2> expansion: label = "OPLIST_" 21 ****************** <2> expansion: digit = 0 21 ****************** <2> expansion: label = 'OPLIST_0' 21 ****************** <2> expansion: digit = 11 21 ****************** <2> expansion: label = 'OPLIST_0B' 21 ****************** <2> expansion: label = OPLIST_0B 21 ****************** <2> expansion: OPLIST_0B = 30 21 ****************** <2> expansion: opidx = 12 22 00000021 1200 <2> opl OP_REL1632 ; idx=12, ofs=2Dh 22 ****************** <2> expansion: label = "OPLIST_" 22 ****************** <2> expansion: digit = 0 22 ****************** <2> expansion: label = 'OPLIST_0' 22 ****************** <2> expansion: digit = 12 22 ****************** <2> expansion: label = 'OPLIST_0C' 22 ****************** <2> expansion: label = OPLIST_0C 22 ****************** <2> expansion: OPLIST_0C = 33 22 ****************** <2> expansion: opidx = 13 23 00000023 0E00 <2> opl OP_FARIMM ; idx=13, ofs=2Fh 23 ****************** <2> expansion: label = "OPLIST_" 23 ****************** <2> expansion: digit = 0 23 ****************** <2> expansion: label = 'OPLIST_0' 23 ****************** <2> expansion: digit = 13 23 ****************** <2> expansion: label = 'OPLIST_0D' 23 ****************** <2> expansion: label = OPLIST_0D 23 ****************** <2> expansion: OPLIST_0D = 35 23 ****************** <2> expansion: opidx = 14 24 00000025 0C00 <2> opl OP_FARMEM ; idx=14, ofs=31h 24 ****************** <2> expansion: label = "OPLIST_" 24 ****************** <2> expansion: digit = 0 24 ****************** <2> expansion: label = 'OPLIST_0' 24 ****************** <2> expansion: digit = 14 24 ****************** <2> expansion: label = 'OPLIST_0E' 24 ****************** <2> expansion: label = OPLIST_0E 24 ****************** <2> expansion: OPLIST_0E = 37 24 ****************** <2> expansion: opidx = 15 25 00000027 0200 <2> opl OP_M64 ; idx=15, ofs=33h 25 ****************** <2> expansion: label = "OPLIST_" 25 ****************** <2> expansion: digit = 0 25 ****************** <2> expansion: label = 'OPLIST_0' 25 ****************** <2> expansion: digit = 15 25 ****************** <2> expansion: label = 'OPLIST_0F' 25 ****************** <2> expansion: label = OPLIST_0F 25 ****************** <2> expansion: OPLIST_0F = 39 25 ****************** <2> expansion: opidx = 16 26 00000029 4200 <2> opl OP_ALL+OP_RM ; idx=16, ofs=35h 26 ****************** <2> expansion: label = "OPLIST_" 26 ****************** <2> expansion: digit = 1 26 ****************** <2> expansion: label = 'OPLIST_1' 26 ****************** <2> expansion: digit = 0 26 ****************** <2> expansion: label = 'OPLIST_10' 26 ****************** <2> expansion: label = OPLIST_10 26 ****************** <2> expansion: OPLIST_10 = 41 26 ****************** <2> expansion: opidx = 17 27 0000002B 5C00 <2> opl OP_1632+OP_R_ADD ; idx=17, ofs=37h 27 ****************** <2> expansion: label = "OPLIST_" 27 ****************** <2> expansion: digit = 1 27 ****************** <2> expansion: label = 'OPLIST_1' 27 ****************** <2> expansion: digit = 1 27 ****************** <2> expansion: label = 'OPLIST_11' 27 ****************** <2> expansion: label = OPLIST_11 27 ****************** <2> expansion: OPLIST_11 = 43 27 ****************** <2> expansion: opidx = 18 28 0000002D 702200 <2> opl OP_16+OP_IMM, OP_IMM8 ; idx=18, ofs=39h 28 ****************** <2> expansion: label = "OPLIST_" 28 ****************** <2> expansion: digit = 1 28 ****************** <2> expansion: label = 'OPLIST_1' 28 ****************** <2> expansion: digit = 2 28 ****************** <2> expansion: label = 'OPLIST_12' 28 ****************** <2> expansion: label = OPLIST_12 28 ****************** <2> expansion: OPLIST_12 = 45 28 ****************** <2> expansion: opidx = 19 29 00000030 0400 <2> opl OP_MFLOAT ; idx=19, ofs=3Ch 29 ****************** <2> expansion: label = "OPLIST_" 29 ****************** <2> expansion: digit = 1 29 ****************** <2> expansion: label = 'OPLIST_1' 29 ****************** <2> expansion: digit = 3 29 ****************** <2> expansion: label = 'OPLIST_13' 29 ****************** <2> expansion: label = OPLIST_13 29 ****************** <2> expansion: OPLIST_13 = 48 29 ****************** <2> expansion: opidx = 20 30 00000032 0600 <2> opl OP_MDOUBLE ; idx=20, ofs=3Eh 30 ****************** <2> expansion: label = "OPLIST_" 30 ****************** <2> expansion: digit = 1 30 ****************** <2> expansion: label = 'OPLIST_1' 30 ****************** <2> expansion: digit = 4 30 ****************** <2> expansion: label = 'OPLIST_14' 30 ****************** <2> expansion: label = OPLIST_14 30 ****************** <2> expansion: OPLIST_14 = 50 30 ****************** <2> expansion: opidx = 21 31 00000034 321600 <2> opl OP_ST, OP_STI ; idx=21, ofs=40h 31 ****************** <2> expansion: label = "OPLIST_" 31 ****************** <2> expansion: digit = 1 31 ****************** <2> expansion: label = 'OPLIST_1' 31 ****************** <2> expansion: digit = 5 31 ****************** <2> expansion: label = 'OPLIST_15' 31 ****************** <2> expansion: label = OPLIST_15 31 ****************** <2> expansion: OPLIST_15 = 52 31 ****************** <2> expansion: opidx = 22 32 00000037 163200 <2> opl OP_STI, OP_ST ; idx=22, ofs=43h 32 ****************** <2> expansion: label = "OPLIST_" 32 ****************** <2> expansion: digit = 1 32 ****************** <2> expansion: label = 'OPLIST_1' 32 ****************** <2> expansion: digit = 6 32 ****************** <2> expansion: label = 'OPLIST_16' 32 ****************** <2> expansion: label = OPLIST_16 32 ****************** <2> expansion: OPLIST_16 = 55 32 ****************** <2> expansion: opidx = 23 33 0000003A 14163200 <2> opl OP_1CHK, OP_STI, OP_ST ; idx=23, ofs=46h 33 ****************** <2> expansion: label = "OPLIST_" 33 ****************** <2> expansion: digit = 1 33 ****************** <2> expansion: label = 'OPLIST_1' 33 ****************** <2> expansion: digit = 7 33 ****************** <2> expansion: label = 'OPLIST_17' 33 ****************** <2> expansion: label = OPLIST_17 33 ****************** <2> expansion: OPLIST_17 = 58 33 ****************** <2> expansion: opidx = 24 34 0000003E 8400 <2> opl OP_32+OP_M ; idx=24, ofs=4Ah 34 ****************** <2> expansion: label = "OPLIST_" 34 ****************** <2> expansion: digit = 1 34 ****************** <2> expansion: label = 'OPLIST_1' 34 ****************** <2> expansion: digit = 8 34 ****************** <2> expansion: label = 'OPLIST_18' 34 ****************** <2> expansion: label = OPLIST_18 34 ****************** <2> expansion: OPLIST_18 = 62 34 ****************** <2> expansion: opidx = 25 35 00000040 7400 <2> opl OP_16+OP_M ; idx=25, ofs=4Ch 35 ****************** <2> expansion: label = "OPLIST_" 35 ****************** <2> expansion: digit = 1 35 ****************** <2> expansion: label = 'OPLIST_1' 35 ****************** <2> expansion: digit = 9 35 ****************** <2> expansion: label = 'OPLIST_19' 35 ****************** <2> expansion: label = OPLIST_19 35 ****************** <2> expansion: OPLIST_19 = 64 35 ****************** <2> expansion: opidx = 26 36 00000042 0800 <2> opl OP_M80 ; idx=26, ofs=4Eh 36 ****************** <2> expansion: label = "OPLIST_" 36 ****************** <2> expansion: digit = 1 36 ****************** <2> expansion: label = 'OPLIST_1' 36 ****************** <2> expansion: digit = 10 36 ****************** <2> expansion: label = 'OPLIST_1A' 36 ****************** <2> expansion: label = OPLIST_1A 36 ****************** <2> expansion: OPLIST_1A = 66 36 ****************** <2> expansion: opidx = 27 37 00000044 1600 <2> opl OP_STI ; idx=27, ofs=50h 37 ****************** <2> expansion: label = "OPLIST_" 37 ****************** <2> expansion: digit = 1 37 ****************** <2> expansion: label = 'OPLIST_1' 37 ****************** <2> expansion: digit = 11 37 ****************** <2> expansion: label = 'OPLIST_1B' 37 ****************** <2> expansion: label = OPLIST_1B 37 ****************** <2> expansion: OPLIST_1B = 68 37 ****************** <2> expansion: opidx = 28 38 00000046 141600 <2> opl OP_1CHK, OP_STI ; idx=28, ofs=52h 38 ****************** <2> expansion: label = "OPLIST_" 38 ****************** <2> expansion: digit = 1 38 ****************** <2> expansion: label = 'OPLIST_1' 38 ****************** <2> expansion: digit = 12 38 ****************** <2> expansion: label = 'OPLIST_1C' 38 ****************** <2> expansion: label = OPLIST_1C 38 ****************** <2> expansion: OPLIST_1C = 70 38 ****************** <2> expansion: opidx = 29 39 00000049 0A00 <2> opl OP_MXX ; idx=29, ofs=55h 39 ****************** <2> expansion: label = "OPLIST_" 39 ****************** <2> expansion: digit = 1 39 ****************** <2> expansion: label = 'OPLIST_1' 39 ****************** <2> expansion: digit = 13 39 ****************** <2> expansion: label = 'OPLIST_1D' 39 ****************** <2> expansion: label = OPLIST_1D 39 ****************** <2> expansion: OPLIST_1D = 73 39 ****************** <2> expansion: opidx = 30 40 0000004B 7E00 <2> opl OP_16+OP_AX ; idx=30, ofs=57h 40 ****************** <2> expansion: label = "OPLIST_" 40 ****************** <2> expansion: digit = 1 40 ****************** <2> expansion: label = 'OPLIST_1' 40 ****************** <2> expansion: digit = 14 40 ****************** <2> expansion: label = 'OPLIST_1E' 40 ****************** <2> expansion: label = OPLIST_1E 40 ****************** <2> expansion: OPLIST_1E = 75 40 ****************** <2> expansion: opidx = 31 41 0000004D 5A522000 <2> opl OP_1632+OP_R, OP_1632+OP_RM, OP_IMMS8 ; idx=31, ofs=59h 41 ****************** <2> expansion: label = "OPLIST_" 41 ****************** <2> expansion: digit = 1 41 ****************** <2> expansion: label = 'OPLIST_1' 41 ****************** <2> expansion: digit = 15 41 ****************** <2> expansion: label = 'OPLIST_1F' 41 ****************** <2> expansion: label = OPLIST_1F 41 ****************** <2> expansion: OPLIST_1F = 77 41 ****************** <2> expansion: opidx = 32 42 00000051 565A2000 <2> opl OP_1632+OP_R_MOD, OP_1632+OP_R, OP_IMMS8 ; idx=32, ofs=5Dh 42 ****************** <2> expansion: label = "OPLIST_" 42 ****************** <2> expansion: digit = 2 42 ****************** <2> expansion: label = 'OPLIST_2' 42 ****************** <2> expansion: digit = 0 42 ****************** <2> expansion: label = 'OPLIST_20' 42 ****************** <2> expansion: label = OPLIST_20 42 ****************** <2> expansion: OPLIST_20 = 81 42 ****************** <2> expansion: opidx = 33 43 00000055 5A525000 <2> opl OP_1632+OP_R, OP_1632+OP_RM, OP_1632+OP_IMM ; idx=33, ofs=61h 43 ****************** <2> expansion: label = "OPLIST_" 43 ****************** <2> expansion: digit = 2 43 ****************** <2> expansion: label = 'OPLIST_2' 43 ****************** <2> expansion: digit = 1 43 ****************** <2> expansion: label = 'OPLIST_21' 43 ****************** <2> expansion: label = OPLIST_21 43 ****************** <2> expansion: OPLIST_21 = 85 43 ****************** <2> expansion: opidx = 34 44 00000059 565A5000 <2> opl OP_1632+OP_R_MOD, OP_1632+OP_R, OP_1632+OP_IMM ; idx=34, ofs=65h 44 ****************** <2> expansion: label = "OPLIST_" 44 ****************** <2> expansion: digit = 2 44 ****************** <2> expansion: label = 'OPLIST_2' 44 ****************** <2> expansion: digit = 2 44 ****************** <2> expansion: label = 'OPLIST_22' 44 ****************** <2> expansion: label = OPLIST_22 44 ****************** <2> expansion: OPLIST_22 = 89 44 ****************** <2> expansion: opidx = 35 45 0000005D 4E2200 <2> opl OP_ALL+OP_AX, OP_IMM8 ; idx=35, ofs=69h 45 ****************** <2> expansion: label = "OPLIST_" 45 ****************** <2> expansion: digit = 2 45 ****************** <2> expansion: label = 'OPLIST_2' 45 ****************** <2> expansion: digit = 3 45 ****************** <2> expansion: label = 'OPLIST_23' 45 ****************** <2> expansion: label = OPLIST_23 45 ****************** <2> expansion: OPLIST_23 = 93 45 ****************** <2> expansion: opidx = 36 46 00000060 4E2E00 <2> opl OP_ALL+OP_AX, OP_DX ; idx=36, ofs=6Ch 46 ****************** <2> expansion: label = "OPLIST_" 46 ****************** <2> expansion: digit = 2 46 ****************** <2> expansion: label = 'OPLIST_2' 46 ****************** <2> expansion: digit = 4 46 ****************** <2> expansion: label = 'OPLIST_24' 46 ****************** <2> expansion: label = OPLIST_24 46 ****************** <2> expansion: OPLIST_24 = 96 46 ****************** <2> expansion: opidx = 37 47 00000063 2C00 <2> opl OP_3 ; idx=37, ofs=6Fh 47 ****************** <2> expansion: label = "OPLIST_" 47 ****************** <2> expansion: digit = 2 47 ****************** <2> expansion: label = 'OPLIST_2' 47 ****************** <2> expansion: digit = 5 47 ****************** <2> expansion: label = 'OPLIST_25' 47 ****************** <2> expansion: label = OPLIST_25 47 ****************** <2> expansion: OPLIST_25 = 99 47 ****************** <2> expansion: opidx = 38 48 00000065 2200 <2> opl OP_IMM8 ; idx=38, ofs=71h 48 ****************** <2> expansion: label = "OPLIST_" 48 ****************** <2> expansion: digit = 2 48 ****************** <2> expansion: label = 'OPLIST_2' 48 ****************** <2> expansion: digit = 6 48 ****************** <2> expansion: label = 'OPLIST_26' 48 ****************** <2> expansion: label = OPLIST_26 48 ****************** <2> expansion: OPLIST_26 = 101 48 ****************** <2> expansion: opidx = 39 49 00000067 1000 <2> opl OP_REL8 ; idx=39, ofs=73h 49 ****************** <2> expansion: label = "OPLIST_" 49 ****************** <2> expansion: digit = 2 49 ****************** <2> expansion: label = 'OPLIST_2' 49 ****************** <2> expansion: digit = 7 49 ****************** <2> expansion: label = 'OPLIST_27' 49 ****************** <2> expansion: label = OPLIST_27 49 ****************** <2> expansion: OPLIST_27 = 103 49 ****************** <2> expansion: opidx = 40 50 00000069 5200 <2> opl OP_1632+OP_RM ; idx=40, ofs=75h 50 ****************** <2> expansion: label = "OPLIST_" 50 ****************** <2> expansion: digit = 2 50 ****************** <2> expansion: label = 'OPLIST_2' 50 ****************** <2> expansion: digit = 8 50 ****************** <2> expansion: label = 'OPLIST_28' 50 ****************** <2> expansion: label = OPLIST_28 50 ****************** <2> expansion: OPLIST_28 = 105 50 ****************** <2> expansion: opidx = 41 51 0000006B 7200 <2> opl OP_16+OP_RM ; idx=41, ofs=77h 51 ****************** <2> expansion: label = "OPLIST_" 51 ****************** <2> expansion: digit = 2 51 ****************** <2> expansion: label = 'OPLIST_2' 51 ****************** <2> expansion: digit = 9 51 ****************** <2> expansion: label = 'OPLIST_29' 51 ****************** <2> expansion: label = OPLIST_29 51 ****************** <2> expansion: OPLIST_29 = 107 51 ****************** <2> expansion: opidx = 42 52 0000006D 521E00 <2> opl OP_1632+OP_RM, OP_SEGREG ; idx=42, ofs=79h 52 ****************** <2> expansion: label = "OPLIST_" 52 ****************** <2> expansion: digit = 2 52 ****************** <2> expansion: label = 'OPLIST_2' 52 ****************** <2> expansion: digit = 10 52 ****************** <2> expansion: label = 'OPLIST_2A' 52 ****************** <2> expansion: label = OPLIST_2A 52 ****************** <2> expansion: OPLIST_2A = 109 52 ****************** <2> expansion: opidx = 43 53 00000070 1E5200 <2> opl OP_SEGREG, OP_1632+OP_RM ; idx=43, ofs=7Ch 53 ****************** <2> expansion: label = "OPLIST_" 53 ****************** <2> expansion: digit = 2 53 ****************** <2> expansion: label = 'OPLIST_2' 53 ****************** <2> expansion: digit = 11 53 ****************** <2> expansion: label = 'OPLIST_2B' 53 ****************** <2> expansion: label = OPLIST_2B 53 ****************** <2> expansion: OPLIST_2B = 112 53 ****************** <2> expansion: opidx = 44 54 00000073 4E4800 <2> opl OP_ALL+OP_AX, OP_ALL+OP_MOFFS ; idx=44, ofs=7Fh 54 ****************** <2> expansion: label = "OPLIST_" 54 ****************** <2> expansion: digit = 2 54 ****************** <2> expansion: label = 'OPLIST_2' 54 ****************** <2> expansion: digit = 12 54 ****************** <2> expansion: label = 'OPLIST_2C' 54 ****************** <2> expansion: label = OPLIST_2C 54 ****************** <2> expansion: OPLIST_2C = 115 54 ****************** <2> expansion: opidx = 45 55 00000076 484E00 <2> opl OP_ALL+OP_MOFFS, OP_ALL+OP_AX ; idx=45, ofs=82h 55 ****************** <2> expansion: label = "OPLIST_" 55 ****************** <2> expansion: digit = 2 55 ****************** <2> expansion: label = 'OPLIST_2' 55 ****************** <2> expansion: digit = 13 55 ****************** <2> expansion: label = 'OPLIST_2D' 55 ****************** <2> expansion: label = OPLIST_2D 55 ****************** <2> expansion: OPLIST_2D = 118 55 ****************** <2> expansion: opidx = 46 56 00000079 6C6000 <2> opl OP_8+OP_R_ADD, OP_8+OP_IMM ; idx=46, ofs=85h 56 ****************** <2> expansion: label = "OPLIST_" 56 ****************** <2> expansion: digit = 2 56 ****************** <2> expansion: label = 'OPLIST_2' 56 ****************** <2> expansion: digit = 14 56 ****************** <2> expansion: label = 'OPLIST_2E' 56 ****************** <2> expansion: label = OPLIST_2E 56 ****************** <2> expansion: OPLIST_2E = 121 56 ****************** <2> expansion: opidx = 47 57 0000007C 5C5000 <2> opl OP_1632+OP_R_ADD, OP_1632+OP_IMM ; idx=47, ofs=88h 57 ****************** <2> expansion: label = "OPLIST_" 57 ****************** <2> expansion: digit = 2 57 ****************** <2> expansion: label = 'OPLIST_2' 57 ****************** <2> expansion: digit = 15 57 ****************** <2> expansion: label = 'OPLIST_2F' 57 ****************** <2> expansion: label = OPLIST_2F 57 ****************** <2> expansion: OPLIST_2F = 124 57 ****************** <2> expansion: opidx = 48 58 0000007F 5A286200 <2> opl OP_1632+OP_R, OP_SHOSIZ, OP_8+OP_RM ; idx=48, ofs=8Bh 58 ****************** <2> expansion: label = "OPLIST_" 58 ****************** <2> expansion: digit = 3 58 ****************** <2> expansion: label = 'OPLIST_3' 58 ****************** <2> expansion: digit = 0 58 ****************** <2> expansion: label = 'OPLIST_30' 58 ****************** <2> expansion: label = OPLIST_30 58 ****************** <2> expansion: OPLIST_30 = 127 58 ****************** <2> expansion: opidx = 49 59 00000083 5A287200 <2> opl OP_1632+OP_R, OP_SHOSIZ, OP_16+OP_RM ; idx=49, ofs=8Fh 59 ****************** <2> expansion: label = "OPLIST_" 59 ****************** <2> expansion: digit = 3 59 ****************** <2> expansion: label = 'OPLIST_3' 59 ****************** <2> expansion: digit = 1 59 ****************** <2> expansion: label = 'OPLIST_31' 59 ****************** <2> expansion: label = OPLIST_31 59 ****************** <2> expansion: OPLIST_31 = 131 59 ****************** <2> expansion: opidx = 50 60 00000087 224E00 <2> opl OP_IMM8, OP_ALL+OP_AX ; idx=50, ofs=93h 60 ****************** <2> expansion: label = "OPLIST_" 60 ****************** <2> expansion: digit = 3 60 ****************** <2> expansion: label = 'OPLIST_3' 60 ****************** <2> expansion: digit = 2 60 ****************** <2> expansion: label = 'OPLIST_32' 60 ****************** <2> expansion: label = OPLIST_32 60 ****************** <2> expansion: OPLIST_32 = 135 60 ****************** <2> expansion: opidx = 51 61 0000008A 2E4E00 <2> opl OP_DX, OP_ALL+OP_AX ; idx=51, ofs=96h 61 ****************** <2> expansion: label = "OPLIST_" 61 ****************** <2> expansion: digit = 3 61 ****************** <2> expansion: label = 'OPLIST_3' 61 ****************** <2> expansion: digit = 3 61 ****************** <2> expansion: label = 'OPLIST_33' 61 ****************** <2> expansion: label = OPLIST_33 61 ****************** <2> expansion: OPLIST_33 = 138 61 ****************** <2> expansion: opidx = 52 62 0000008D 5400 <2> opl OP_1632+OP_M ; idx=52, ofs=99h 62 ****************** <2> expansion: label = "OPLIST_" 62 ****************** <2> expansion: digit = 3 62 ****************** <2> expansion: label = 'OPLIST_3' 62 ****************** <2> expansion: digit = 4 62 ****************** <2> expansion: label = 'OPLIST_34' 62 ****************** <2> expansion: label = OPLIST_34 62 ****************** <2> expansion: OPLIST_34 = 141 62 ****************** <2> expansion: opidx = 53 63 0000008F 285000 <2> opl OP_SHOSIZ, OP_1632+OP_IMM ; idx=53, ofs=9Bh 63 ****************** <2> expansion: label = "OPLIST_" 63 ****************** <2> expansion: digit = 3 63 ****************** <2> expansion: label = 'OPLIST_3' 63 ****************** <2> expansion: digit = 5 63 ****************** <2> expansion: label = 'OPLIST_35' 63 ****************** <2> expansion: label = OPLIST_35 63 ****************** <2> expansion: OPLIST_35 = 143 63 ****************** <2> expansion: opidx = 54 64 00000092 282000 <2> opl OP_SHOSIZ, OP_IMMS8 ; idx=54, ofs=9Eh 64 ****************** <2> expansion: label = "OPLIST_" 64 ****************** <2> expansion: digit = 3 64 ****************** <2> expansion: label = 'OPLIST_3' 64 ****************** <2> expansion: digit = 6 64 ****************** <2> expansion: label = 'OPLIST_36' 64 ****************** <2> expansion: label = OPLIST_36 64 ****************** <2> expansion: OPLIST_36 = 146 64 ****************** <2> expansion: opidx = 55 65 00000095 422A00 <2> opl OP_ALL+OP_RM, OP_1 ; idx=55, ofs=A1h 65 ****************** <2> expansion: label = "OPLIST_" 65 ****************** <2> expansion: digit = 3 65 ****************** <2> expansion: label = 'OPLIST_3' 65 ****************** <2> expansion: digit = 7 65 ****************** <2> expansion: label = 'OPLIST_37' 65 ****************** <2> expansion: label = OPLIST_37 65 ****************** <2> expansion: OPLIST_37 = 149 65 ****************** <2> expansion: opidx = 56 66 00000098 423000 <2> opl OP_ALL+OP_RM, OP_CL ; idx=56, ofs=A4h 66 ****************** <2> expansion: label = "OPLIST_" 66 ****************** <2> expansion: digit = 3 66 ****************** <2> expansion: label = 'OPLIST_3' 66 ****************** <2> expansion: digit = 8 66 ****************** <2> expansion: label = 'OPLIST_38' 66 ****************** <2> expansion: label = OPLIST_38 66 ****************** <2> expansion: OPLIST_38 = 152 66 ****************** <2> expansion: opidx = 57 67 0000009B 422200 <2> opl OP_ALL+OP_RM, OP_IMM8 ; idx=57, ofs=A7h 67 ****************** <2> expansion: label = "OPLIST_" 67 ****************** <2> expansion: digit = 3 67 ****************** <2> expansion: label = 'OPLIST_3' 67 ****************** <2> expansion: digit = 9 67 ****************** <2> expansion: label = 'OPLIST_39' 67 ****************** <2> expansion: label = OPLIST_39 67 ****************** <2> expansion: OPLIST_39 = 155 67 ****************** <2> expansion: opidx = 58 68 0000009E 7000 <2> opl OP_16+OP_IMM ; idx=58, ofs=AAh 68 ****************** <2> expansion: label = "OPLIST_" 68 ****************** <2> expansion: digit = 3 68 ****************** <2> expansion: label = 'OPLIST_3' 68 ****************** <2> expansion: digit = 10 68 ****************** <2> expansion: label = 'OPLIST_3A' 68 ****************** <2> expansion: label = OPLIST_3A 68 ****************** <2> expansion: OPLIST_3A = 158 68 ****************** <2> expansion: opidx = 59 69 000000A0 6200 <2> opl OP_8+OP_RM ; idx=59, ofs=ACh 69 ****************** <2> expansion: label = "OPLIST_" 69 ****************** <2> expansion: digit = 3 69 ****************** <2> expansion: label = 'OPLIST_3' 69 ****************** <2> expansion: digit = 11 69 ****************** <2> expansion: label = 'OPLIST_3B' 69 ****************** <2> expansion: label = OPLIST_3B 69 ****************** <2> expansion: OPLIST_3B = 160 69 ****************** <2> expansion: opidx = 60 70 000000A2 525A2200 <2> opl OP_1632+OP_RM, OP_1632+OP_R, OP_IMM8 ; idx=60, ofs=AEh 70 ****************** <2> expansion: label = "OPLIST_" 70 ****************** <2> expansion: digit = 3 70 ****************** <2> expansion: label = 'OPLIST_3' 70 ****************** <2> expansion: digit = 12 70 ****************** <2> expansion: label = 'OPLIST_3C' 70 ****************** <2> expansion: label = OPLIST_3C 70 ****************** <2> expansion: OPLIST_3C = 162 70 ****************** <2> expansion: opidx = 61 71 000000A6 525A3000 <2> opl OP_1632+OP_RM, OP_1632+OP_R, OP_CL ; idx=61, ofs=B2h 71 ****************** <2> expansion: label = "OPLIST_" 71 ****************** <2> expansion: digit = 3 71 ****************** <2> expansion: label = 'OPLIST_3' 71 ****************** <2> expansion: digit = 13 71 ****************** <2> expansion: label = 'OPLIST_3D' 71 ****************** <2> expansion: label = OPLIST_3D 71 ****************** <2> expansion: OPLIST_3D = 166 71 ****************** <2> expansion: opidx = 62 72 000000AA 5E5C00 <2> opl OP_1632+OP_AX, OP_1632+OP_R_ADD ; idx=62, ofs=B6h 72 ****************** <2> expansion: label = "OPLIST_" 72 ****************** <2> expansion: digit = 3 72 ****************** <2> expansion: label = 'OPLIST_3' 72 ****************** <2> expansion: digit = 14 72 ****************** <2> expansion: label = 'OPLIST_3E' 72 ****************** <2> expansion: label = OPLIST_3E 72 ****************** <2> expansion: OPLIST_3E = 170 72 ****************** <2> expansion: opidx = 63 73 000000AD 5C5E00 <2> opl OP_1632+OP_R_ADD, OP_1632+OP_AX ; idx=63, ofs=B9h 73 ****************** <2> expansion: label = "OPLIST_" 73 ****************** <2> expansion: digit = 3 73 ****************** <2> expansion: label = 'OPLIST_3' 73 ****************** <2> expansion: digit = 15 73 ****************** <2> expansion: label = 'OPLIST_3F' 73 ****************** <2> expansion: label = OPLIST_3F 73 ****************** <2> expansion: OPLIST_3F = 173 73 ****************** <2> expansion: opidx = 64 74 000000B0 3800 <2> opl OP_ES ; idx=64, ofs=BCh 74 ****************** <2> expansion: label = "OPLIST_" 74 ****************** <2> expansion: digit = 4 74 ****************** <2> expansion: label = 'OPLIST_4' 74 ****************** <2> expansion: digit = 0 74 ****************** <2> expansion: label = 'OPLIST_40' 74 ****************** <2> expansion: label = OPLIST_40 74 ****************** <2> expansion: OPLIST_40 = 176 74 ****************** <2> expansion: opidx = 65 75 000000B2 3400 <2> opl OP_CS ; idx=65, ofs=BEh 75 ****************** <2> expansion: label = "OPLIST_" 75 ****************** <2> expansion: digit = 4 75 ****************** <2> expansion: label = 'OPLIST_4' 75 ****************** <2> expansion: digit = 1 75 ****************** <2> expansion: label = 'OPLIST_41' 75 ****************** <2> expansion: label = OPLIST_41 75 ****************** <2> expansion: OPLIST_41 = 178 75 ****************** <2> expansion: opidx = 66 76 000000B4 3E00 <2> opl OP_SS ; idx=66, ofs=C0h 76 ****************** <2> expansion: label = "OPLIST_" 76 ****************** <2> expansion: digit = 4 76 ****************** <2> expansion: label = 'OPLIST_4' 76 ****************** <2> expansion: digit = 2 76 ****************** <2> expansion: label = 'OPLIST_42' 76 ****************** <2> expansion: label = OPLIST_42 76 ****************** <2> expansion: OPLIST_42 = 180 76 ****************** <2> expansion: opidx = 67 77 000000B6 3600 <2> opl OP_DS ; idx=67, ofs=C2h 77 ****************** <2> expansion: label = "OPLIST_" 77 ****************** <2> expansion: digit = 4 77 ****************** <2> expansion: label = 'OPLIST_4' 77 ****************** <2> expansion: digit = 3 77 ****************** <2> expansion: label = 'OPLIST_43' 77 ****************** <2> expansion: label = OPLIST_43 77 ****************** <2> expansion: OPLIST_43 = 182 77 ****************** <2> expansion: opidx = 68 78 000000B8 3A00 <2> opl OP_FS ; idx=68, ofs=C4h 78 ****************** <2> expansion: label = "OPLIST_" 78 ****************** <2> expansion: digit = 4 78 ****************** <2> expansion: label = 'OPLIST_4' 78 ****************** <2> expansion: digit = 4 78 ****************** <2> expansion: label = 'OPLIST_44' 78 ****************** <2> expansion: label = OPLIST_44 78 ****************** <2> expansion: OPLIST_44 = 184 78 ****************** <2> expansion: opidx = 69 79 000000BA 3C00 <2> opl OP_GS ; idx=69, ofs=C6h 79 ****************** <2> expansion: label = "OPLIST_" 79 ****************** <2> expansion: digit = 4 79 ****************** <2> expansion: label = 'OPLIST_4' 79 ****************** <2> expansion: digit = 5 79 ****************** <2> expansion: label = 'OPLIST_45' 79 ****************** <2> expansion: label = OPLIST_45 79 ****************** <2> expansion: OPLIST_45 = 186 79 ****************** <2> expansion: opidx = 70 80 000000BC 861800 <2> opl OP_32+OP_R_MOD, OP_CR ; idx=70, ofs=C8h 80 ****************** <2> expansion: label = "OPLIST_" 80 ****************** <2> expansion: digit = 4 80 ****************** <2> expansion: label = 'OPLIST_4' 80 ****************** <2> expansion: digit = 6 80 ****************** <2> expansion: label = 'OPLIST_46' 80 ****************** <2> expansion: label = OPLIST_46 80 ****************** <2> expansion: OPLIST_46 = 188 80 ****************** <2> expansion: opidx = 71 81 000000BF 188600 <2> opl OP_CR, OP_32+OP_R_MOD ; idx=71, ofs=CBh 81 ****************** <2> expansion: label = "OPLIST_" 81 ****************** <2> expansion: digit = 4 81 ****************** <2> expansion: label = 'OPLIST_4' 81 ****************** <2> expansion: digit = 7 81 ****************** <2> expansion: label = 'OPLIST_47' 81 ****************** <2> expansion: label = OPLIST_47 81 ****************** <2> expansion: OPLIST_47 = 191 81 ****************** <2> expansion: opidx = 72 82 000000C2 861A00 <2> opl OP_32+OP_R_MOD, OP_DR ; idx=72, ofs=CEh 82 ****************** <2> expansion: label = "OPLIST_" 82 ****************** <2> expansion: digit = 4 82 ****************** <2> expansion: label = 'OPLIST_4' 82 ****************** <2> expansion: digit = 8 82 ****************** <2> expansion: label = 'OPLIST_48' 82 ****************** <2> expansion: label = OPLIST_48 82 ****************** <2> expansion: OPLIST_48 = 194 82 ****************** <2> expansion: opidx = 73 83 000000C5 1A8600 <2> opl OP_DR, OP_32+OP_R_MOD ; idx=73, ofs=D1h 83 ****************** <2> expansion: label = "OPLIST_" 83 ****************** <2> expansion: digit = 4 83 ****************** <2> expansion: label = 'OPLIST_4' 83 ****************** <2> expansion: digit = 9 83 ****************** <2> expansion: label = 'OPLIST_49' 83 ****************** <2> expansion: label = OPLIST_49 83 ****************** <2> expansion: OPLIST_49 = 197 83 ****************** <2> expansion: opidx = 74 84 000000C8 861C00 <2> opl OP_32+OP_R_MOD, OP_TR ; idx=74, ofs=D4h 84 ****************** <2> expansion: label = "OPLIST_" 84 ****************** <2> expansion: digit = 4 84 ****************** <2> expansion: label = 'OPLIST_4' 84 ****************** <2> expansion: digit = 10 84 ****************** <2> expansion: label = 'OPLIST_4A' 84 ****************** <2> expansion: label = OPLIST_4A 84 ****************** <2> expansion: OPLIST_4A = 200 84 ****************** <2> expansion: opidx = 75 85 000000CB 1C8600 <2> opl OP_TR, OP_32+OP_R_MOD ; idx=75, ofs=D7h 85 ****************** <2> expansion: label = "OPLIST_" 85 ****************** <2> expansion: digit = 4 85 ****************** <2> expansion: label = 'OPLIST_4' 85 ****************** <2> expansion: digit = 11 85 ****************** <2> expansion: label = 'OPLIST_4B' 85 ****************** <2> expansion: label = OPLIST_4B 85 ****************** <2> expansion: OPLIST_4B = 203 85 ****************** <2> expansion: opidx = 76 86 000000CE 248200 <2> opl OP_MMX, OP_32+OP_RM ; idx=76, ofs=DAh 86 ****************** <2> expansion: label = "OPLIST_" 86 ****************** <2> expansion: digit = 4 86 ****************** <2> expansion: label = 'OPLIST_4' 86 ****************** <2> expansion: digit = 12 86 ****************** <2> expansion: label = 'OPLIST_4C' 86 ****************** <2> expansion: label = OPLIST_4C 86 ****************** <2> expansion: OPLIST_4C = 206 86 ****************** <2> expansion: opidx = 77 87 000000D1 822400 <2> opl OP_32+OP_RM, OP_MMX ; idx=77, ofs=DDh 87 ****************** <2> expansion: label = "OPLIST_" 87 ****************** <2> expansion: digit = 4 87 ****************** <2> expansion: label = 'OPLIST_4' 87 ****************** <2> expansion: digit = 13 87 ****************** <2> expansion: label = 'OPLIST_4D' 87 ****************** <2> expansion: label = OPLIST_4D 87 ****************** <2> expansion: OPLIST_4D = 209 87 ****************** <2> expansion: opidx = 78 88 000000D4 249200 <2> opl OP_MMX, OP_64+OP_RM ; idx=78, ofs=E0h 88 ****************** <2> expansion: label = "OPLIST_" 88 ****************** <2> expansion: digit = 4 88 ****************** <2> expansion: label = 'OPLIST_4' 88 ****************** <2> expansion: digit = 14 88 ****************** <2> expansion: label = 'OPLIST_4E' 88 ****************** <2> expansion: label = OPLIST_4E 88 ****************** <2> expansion: OPLIST_4E = 212 88 ****************** <2> expansion: opidx = 79 89 000000D7 922400 <2> opl OP_64+OP_RM, OP_MMX ; idx=79, ofs=E3h 89 ****************** <2> expansion: label = "OPLIST_" 89 ****************** <2> expansion: digit = 4 89 ****************** <2> expansion: label = 'OPLIST_4' 89 ****************** <2> expansion: digit = 15 89 ****************** <2> expansion: label = 'OPLIST_4F' 89 ****************** <2> expansion: label = OPLIST_4F 89 ****************** <2> expansion: OPLIST_4F = 215 89 ****************** <2> expansion: opidx = 80 90 000000DA 262200 <2> opl OP_MMX_MOD, OP_IMM8 ; idx=80, ofs=E6h 90 ****************** <2> expansion: label = "OPLIST_" 90 ****************** <2> expansion: digit = 5 90 ****************** <2> expansion: label = 'OPLIST_5' 90 ****************** <2> expansion: digit = 0 90 ****************** <2> expansion: label = 'OPLIST_50' 90 ****************** <2> expansion: label = OPLIST_50 90 ****************** <2> expansion: OPLIST_50 = 218 90 ****************** <2> expansion: opidx = 81 91 <2> 92 <2> ASMMOD EQU opidx 93 <2> 94 <2> ;--- Assembler: data on groups. 95 <2> ;--- If > 100h, it's a "0F-prefix" group. 96 <2> 97 <2> agroups label word 98 000000DD FE00 <2> dw 0FEh ;0 99 000000DF 8300 <2> dw 083h ;1 100 000000E1 8000 <2> dw 080h ;2 101 000000E3 BA01 <2> dw 1BAh ;3 102 000000E5 FF00 <2> dw 0FFh ;4 103 000000E7 C701 <2> dw 1C7h ;5 104 000000E9 F600 <2> dw 0F6h ;6 105 000000EB 0101 <2> dw 101h ;7 106 000000ED 0001 <2> dw 100h ;8 107 000000EF C600 <2> dw 0C6h ;9 108 000000F1 7101 <2> dw 171h ;10 109 000000F3 7201 <2> dw 172h ;11 110 000000F5 7301 <2> dw 173h ;12 111 000000F7 8F00 <2> dw 08Fh ;13 112 000000F9 D000 <2> dw 0D0h ;14 113 000000FB D200 <2> dw 0D2h ;15 114 000000FD C000 <2> dw 0C0h ;16 115 <2> 116 <2> ;--- List of assembler mnemonics and data. 117 <2> ;--- variant's 1. argument (=a): 118 <2> ;--- if a < 0x100: one byte opcode. 119 <2> ;--- if a >= 0x100 && a < 0x200: two byte "0F"-opcode. 120 <2> ;--- if a >= 0x200 && a < 0x240: fp instruction. 121 <2> ;--- if a >= 0x240: refers to agroups [macro AGRP() is used]. 122 <2> ;--- variant's 2. argument is index into array opindex. 123 <2> 124 <2> mnlist label near 125 <2> mne A32, ASM_SPECIAL ; ofs=0h 125 <3> %push 125 <3> usesection ASMTABLE2, 1 125 <3> %assign %$currofs $ - asmtab 125 ****************** <3> expansion: currofs = 0 125 <3> %ifnempty %2 125 00000000 FF <3> db %2 125 <3> %endif 125 <3> __SECT__ 125 <3> %defstr %$string %1 125 ****************** <3> expansion: string = 'A32' 125 <3> %strlen %$string_size %$string 125 ****************** <3> expansion: string_size = 3 125 <3> %if %$string_size > 15 125 <3> %error Mnemonic %1 is too long! 125 <3> %endif 125 000000FF 0300 <3> dw (%$currofs)<<4|%$string_size 125 <3> %assign MN_%1 $ - mnlist 125 ****************** <3> expansion: MN_A32 = 2 125 00000101 413332 <3> db %$string 125 <3> %pop 126 <2> mne A16, ASM_SPECIAL ; ofs=2h 126 <3> %push 126 <3> usesection ASMTABLE2, 1 126 <3> %assign %$currofs $ - asmtab 126 ****************** <3> expansion: currofs = 1 126 <3> %ifnempty %2 126 00000001 FF <3> db %2 126 <3> %endif 126 <3> __SECT__ 126 <3> %defstr %$string %1 126 ****************** <3> expansion: string = 'A16' 126 <3> %strlen %$string_size %$string 126 ****************** <3> expansion: string_size = 3 126 <3> %if %$string_size > 15 126 <3> %error Mnemonic %1 is too long! 126 <3> %endif 126 00000104 1300 <3> dw (%$currofs)<<4|%$string_size 126 <3> %assign MN_%1 $ - mnlist 126 ****************** <3> expansion: MN_A16 = 7 126 00000106 413136 <3> db %$string 126 <3> %pop 127 <2> mne O32, ASM_SPECIAL ; ofs=4h 127 <3> %push 127 <3> usesection ASMTABLE2, 1 127 <3> %assign %$currofs $ - asmtab 127 ****************** <3> expansion: currofs = 2 127 <3> %ifnempty %2 127 00000002 FF <3> db %2 127 <3> %endif 127 <3> __SECT__ 127 <3> %defstr %$string %1 127 ****************** <3> expansion: string = 'O32' 127 <3> %strlen %$string_size %$string 127 ****************** <3> expansion: string_size = 3 127 <3> %if %$string_size > 15 127 <3> %error Mnemonic %1 is too long! 127 <3> %endif 127 00000109 2300 <3> dw (%$currofs)<<4|%$string_size 127 <3> %assign MN_%1 $ - mnlist 127 ****************** <3> expansion: MN_O32 = 12 127 0000010B 4F3332 <3> db %$string 127 <3> %pop 128 <2> mne O16, ASM_SPECIAL ; ofs=6h 128 <3> %push 128 <3> usesection ASMTABLE2, 1 128 <3> %assign %$currofs $ - asmtab 128 ****************** <3> expansion: currofs = 3 128 <3> %ifnempty %2 128 00000003 FF <3> db %2 128 <3> %endif 128 <3> __SECT__ 128 <3> %defstr %$string %1 128 ****************** <3> expansion: string = 'O16' 128 <3> %strlen %$string_size %$string 128 ****************** <3> expansion: string_size = 3 128 <3> %if %$string_size > 15 128 <3> %error Mnemonic %1 is too long! 128 <3> %endif 128 0000010E 3300 <3> dw (%$currofs)<<4|%$string_size 128 <3> %assign MN_%1 $ - mnlist 128 ****************** <3> expansion: MN_O16 = 17 128 00000110 4F3136 <3> db %$string 128 <3> %pop 129 <2> mne BOXCB ; ofs=8h 129 <3> %push 129 <3> usesection ASMTABLE2, 1 129 <3> %assign %$currofs $ - asmtab 129 ****************** <3> expansion: currofs = 4 129 <3> %ifnempty %2 129 <3> db %2 129 <3> %endif 129 <3> __SECT__ 129 <3> %defstr %$string %1 129 ****************** <3> expansion: string = 'BOXCB' 129 <3> %strlen %$string_size %$string 129 ****************** <3> expansion: string_size = 5 129 <3> %if %$string_size > 15 129 <3> %error Mnemonic %1 is too long! 129 <3> %endif 129 00000113 4500 <3> dw (%$currofs)<<4|%$string_size 129 <3> %assign MN_%1 $ - mnlist 129 ****************** <3> expansion: MN_BOXCB = 22 129 00000115 424F584342 <3> db %$string 129 <3> %pop 130 00000004 B8B1 <2> variant AGRP(0,7), 58 130 ****************** <2> expansion: ainfo = 47281 130 ****************** <2> expansion: escaped = 184 130 ****************** <2> expansion: escapes = 0 131 00000006 FF <2> endvariant 132 <2> mne AAA ; ofs=Bh 132 <3> %push 132 <3> usesection ASMTABLE2, 1 132 <3> %assign %$currofs $ - asmtab 132 ****************** <3> expansion: currofs = 7 132 <3> %ifnempty %2 132 <3> db %2 132 <3> %endif 132 <3> __SECT__ 132 <3> %defstr %$string %1 132 ****************** <3> expansion: string = 'AAA' 132 <3> %strlen %$string_size %$string 132 ****************** <3> expansion: string_size = 3 132 <3> %if %$string_size > 15 132 <3> %error Mnemonic %1 is too long! 132 <3> %endif 132 0000011A 7300 <3> dw (%$currofs)<<4|%$string_size 132 <3> %assign MN_%1 $ - mnlist 132 ****************** <3> expansion: MN_AAA = 29 132 0000011C 414141 <3> db %$string 132 <3> %pop 133 00000007 1167 <2> variant 037h, 0 133 ****************** <2> expansion: ainfo = 4455 133 ****************** <2> expansion: escaped = 17 133 ****************** <2> expansion: escapes = 0 134 00000009 FF <2> endvariant 135 <2> mne AAD, ASM_SPECIAL ; ofs=Eh 135 <3> %push 135 <3> usesection ASMTABLE2, 1 135 <3> %assign %$currofs $ - asmtab 135 ****************** <3> expansion: currofs = 10 135 <3> %ifnempty %2 135 0000000A FF <3> db %2 135 <3> %endif 135 <3> __SECT__ 135 <3> %defstr %$string %1 135 ****************** <3> expansion: string = 'AAD' 135 <3> %strlen %$string_size %$string 135 ****************** <3> expansion: string_size = 3 135 <3> %if %$string_size > 15 135 <3> %error Mnemonic %1 is too long! 135 <3> %endif 135 0000011F A300 <3> dw (%$currofs)<<4|%$string_size 135 <3> %assign MN_%1 $ - mnlist 135 ****************** <3> expansion: MN_AAD = 34 135 00000121 414144 <3> db %$string 135 <3> %pop 136 0000000B 438B <2> variant 0d5h, 38 136 ****************** <2> expansion: ainfo = 17291 136 ****************** <2> expansion: escaped = 67 136 ****************** <2> expansion: escapes = 0 137 0000000D FF <2> endvariant 138 <2> mne AAM, ASM_SPECIAL ; ofs=12h 138 <3> %push 138 <3> usesection ASMTABLE2, 1 138 <3> %assign %$currofs $ - asmtab 138 ****************** <3> expansion: currofs = 14 138 <3> %ifnempty %2 138 0000000E FF <3> db %2 138 <3> %endif 138 <3> __SECT__ 138 <3> %defstr %$string %1 138 ****************** <3> expansion: string = 'AAM' 138 <3> %strlen %$string_size %$string 138 ****************** <3> expansion: string_size = 3 138 <3> %if %$string_size > 15 138 <3> %error Mnemonic %1 is too long! 138 <3> %endif 138 00000124 E300 <3> dw (%$currofs)<<4|%$string_size 138 <3> %assign MN_%1 $ - mnlist 138 ****************** <3> expansion: MN_AAM = 39 138 00000126 41414D <3> db %$string 138 <3> %pop 139 0000000F 433A <2> variant 0d4h, 38 139 ****************** <2> expansion: ainfo = 17210 139 ****************** <2> expansion: escaped = 67 139 ****************** <2> expansion: escapes = 0 140 00000011 FF <2> endvariant 141 <2> mne AAS ; ofs=16h 141 <3> %push 141 <3> usesection ASMTABLE2, 1 141 <3> %assign %$currofs $ - asmtab 141 ****************** <3> expansion: currofs = 18 141 <3> %ifnempty %2 141 <3> db %2 141 <3> %endif 141 <3> __SECT__ 141 <3> %defstr %$string %1 141 ****************** <3> expansion: string = 'AAS' 141 <3> %strlen %$string_size %$string 141 ****************** <3> expansion: string_size = 3 141 <3> %if %$string_size > 15 141 <3> %error Mnemonic %1 is too long! 141 <3> %endif 141 00000129 2301 <3> dw (%$currofs)<<4|%$string_size 141 <3> %assign MN_%1 $ - mnlist 141 ****************** <3> expansion: MN_AAS = 44 141 0000012B 414153 <3> db %$string 141 <3> %pop 142 00000012 13EF <2> variant 03fh, 0 142 ****************** <2> expansion: ainfo = 5103 142 ****************** <2> expansion: escaped = 19 142 ****************** <2> expansion: escapes = 0 143 00000014 FF <2> endvariant 144 <2> mne ADC ; ofs=19h 144 <3> %push 144 <3> usesection ASMTABLE2, 1 144 <3> %assign %$currofs $ - asmtab 144 ****************** <3> expansion: currofs = 21 144 <3> %ifnempty %2 144 <3> db %2 144 <3> %endif 144 <3> __SECT__ 144 <3> %defstr %$string %1 144 ****************** <3> expansion: string = 'ADC' 144 <3> %strlen %$string_size %$string 144 ****************** <3> expansion: string_size = 3 144 <3> %if %$string_size > 15 144 <3> %error Mnemonic %1 is too long! 144 <3> %endif 144 0000012E 5301 <3> dw (%$currofs)<<4|%$string_size 144 <3> %assign MN_%1 $ - mnlist 144 ****************** <3> expansion: MN_ADC = 49 144 00000130 414443 <3> db %$string 144 <3> %pop 145 00000015 FBB96D <2> variant AGRP(1,2), 3, ASM_LOCKABLE 145 ****************** <2> expansion: ainfo = 47469 145 ****************** <2> expansion: escaped = 185 145 ****************** <2> expansion: escapes = 0 146 00000018 0655 <2> variant 014h, 1 146 ****************** <2> expansion: ainfo = 1621 146 ****************** <2> expansion: escaped = 6 146 ****************** <2> expansion: escapes = 0 147 0000001A FBBBF4 <2> variant AGRP(2,2), 2, ASM_LOCKABLE 147 ****************** <2> expansion: ainfo = 48116 147 ****************** <2> expansion: escaped = 187 147 ****************** <2> expansion: escapes = 0 148 0000001D FB0514 <2> variant 010h, 4, ASM_LOCKABLE 148 ****************** <2> expansion: ainfo = 1300 148 ****************** <2> expansion: escaped = 5 148 ****************** <2> expansion: escapes = 0 149 00000020 05B7 <2> variant 012h, 5 149 ****************** <2> expansion: ainfo = 1463 149 ****************** <2> expansion: escaped = 5 149 ****************** <2> expansion: escapes = 0 150 00000022 FF <2> endvariant 151 <2> mne ADD ; ofs=27h 151 <3> %push 151 <3> usesection ASMTABLE2, 1 151 <3> %assign %$currofs $ - asmtab 151 ****************** <3> expansion: currofs = 35 151 <3> %ifnempty %2 151 <3> db %2 151 <3> %endif 151 <3> __SECT__ 151 <3> %defstr %$string %1 151 ****************** <3> expansion: string = 'ADD' 151 <3> %strlen %$string_size %$string 151 ****************** <3> expansion: string_size = 3 151 <3> %if %$string_size > 15 151 <3> %error Mnemonic %1 is too long! 151 <3> %endif 151 00000133 3302 <3> dw (%$currofs)<<4|%$string_size 151 <3> %assign MN_%1 $ - mnlist 151 ****************** <3> expansion: MN_ADD = 54 151 00000135 414444 <3> db %$string 151 <3> %pop 152 00000023 FBB8CB <2> variant AGRP(1,0), 3, ASM_LOCKABLE 152 ****************** <2> expansion: ainfo = 47307 152 ****************** <2> expansion: escaped = 184 152 ****************** <2> expansion: escapes = 0 153 00000026 0145 <2> variant 004h, 1 153 ****************** <2> expansion: ainfo = 325 153 ****************** <2> expansion: escaped = 1 153 ****************** <2> expansion: escapes = 0 154 00000028 FBBB52 <2> variant AGRP(2,0), 2, ASM_LOCKABLE 154 ****************** <2> expansion: ainfo = 47954 154 ****************** <2> expansion: escaped = 187 154 ****************** <2> expansion: escapes = 0 155 0000002B FB0004 <2> variant 000h, 4, ASM_LOCKABLE 155 ****************** <2> expansion: ainfo = 4 155 ****************** <2> expansion: escaped = 0 155 ****************** <2> expansion: escapes = 0 156 0000002E 00A7 <2> variant 002h, 5 156 ****************** <2> expansion: ainfo = 167 156 ****************** <2> expansion: escaped = 0 156 ****************** <2> expansion: escapes = 0 157 00000030 FF <2> endvariant 158 <2> mne AND ; ofs=35h 158 <3> %push 158 <3> usesection ASMTABLE2, 1 158 <3> %assign %$currofs $ - asmtab 158 ****************** <3> expansion: currofs = 49 158 <3> %ifnempty %2 158 <3> db %2 158 <3> %endif 158 <3> __SECT__ 158 <3> %defstr %$string %1 158 ****************** <3> expansion: string = 'AND' 158 <3> %strlen %$string_size %$string 158 ****************** <3> expansion: string_size = 3 158 <3> %if %$string_size > 15 158 <3> %error Mnemonic %1 is too long! 158 <3> %endif 158 00000138 1303 <3> dw (%$currofs)<<4|%$string_size 158 <3> %assign MN_%1 $ - mnlist 158 ****************** <3> expansion: MN_AND = 59 158 0000013A 414E44 <3> db %$string 158 <3> %pop 159 00000031 FBBA0F <2> variant AGRP(1,4), 3, ASM_LOCKABLE 159 ****************** <2> expansion: ainfo = 47631 159 ****************** <2> expansion: escaped = 186 159 ****************** <2> expansion: escapes = 0 160 00000034 0B65 <2> variant 024h, 1 160 ****************** <2> expansion: ainfo = 2917 160 ****************** <2> expansion: escaped = 11 160 ****************** <2> expansion: escapes = 0 161 00000036 FBBC96 <2> variant AGRP(2,4), 2, ASM_LOCKABLE 161 ****************** <2> expansion: ainfo = 48278 161 ****************** <2> expansion: escaped = 188 161 ****************** <2> expansion: escapes = 0 162 00000039 FB0A24 <2> variant 020h, 4, ASM_LOCKABLE 162 ****************** <2> expansion: ainfo = 2596 162 ****************** <2> expansion: escaped = 10 162 ****************** <2> expansion: escapes = 0 163 0000003C 0AC7 <2> variant 022h, 5 163 ****************** <2> expansion: ainfo = 2759 163 ****************** <2> expansion: escaped = 10 163 ****************** <2> expansion: escapes = 0 164 0000003E FF <2> endvariant 165 <2> mne ARPL ; ofs=43h 165 <3> %push 165 <3> usesection ASMTABLE2, 1 165 <3> %assign %$currofs $ - asmtab 165 ****************** <3> expansion: currofs = 63 165 <3> %ifnempty %2 165 <3> db %2 165 <3> %endif 165 <3> __SECT__ 165 <3> %defstr %$string %1 165 ****************** <3> expansion: string = 'ARPL' 165 <3> %strlen %$string_size %$string 165 ****************** <3> expansion: string_size = 4 165 <3> %if %$string_size > 15 165 <3> %error Mnemonic %1 is too long! 165 <3> %endif 165 0000013D F403 <3> dw (%$currofs)<<4|%$string_size 165 <3> %assign MN_%1 $ - mnlist 165 ****************** <3> expansion: MN_ARPL = 64 165 0000013F 4152504C <3> db %$string 165 <3> %pop 166 0000003F F61F59 <2> variant 063h, 6, ASM_MACH2 166 ****************** <2> expansion: ainfo = 8025 166 ****************** <2> expansion: escaped = 31 166 ****************** <2> expansion: escapes = 0 167 00000042 FF <2> endvariant 168 <2> mne BOUND ; ofs=47h 168 <3> %push 168 <3> usesection ASMTABLE2, 1 168 <3> %assign %$currofs $ - asmtab 168 ****************** <3> expansion: currofs = 67 168 <3> %ifnempty %2 168 <3> db %2 168 <3> %endif 168 <3> __SECT__ 168 <3> %defstr %$string %1 168 ****************** <3> expansion: string = 'BOUND' 168 <3> %strlen %$string_size %$string 168 ****************** <3> expansion: string_size = 5 168 <3> %if %$string_size > 15 168 <3> %error Mnemonic %1 is too long! 168 <3> %endif 168 00000143 3504 <3> dw (%$currofs)<<4|%$string_size 168 <3> %assign MN_%1 $ - mnlist 168 ****************** <3> expansion: MN_BOUND = 70 168 00000145 424F554E44 <3> db %$string 168 <3> %pop 169 00000043 F51F09 <2> variant 062h, 7, ASM_MACH1 169 ****************** <2> expansion: ainfo = 7945 169 ****************** <2> expansion: escaped = 31 169 ****************** <2> expansion: escapes = 0 170 00000046 FF <2> endvariant 171 <2> mne BSF ; ofs=4Bh 171 <3> %push 171 <3> usesection ASMTABLE2, 1 171 <3> %assign %$currofs $ - asmtab 171 ****************** <3> expansion: currofs = 71 171 <3> %ifnempty %2 171 <3> db %2 171 <3> %endif 171 <3> __SECT__ 171 <3> %defstr %$string %1 171 ****************** <3> expansion: string = 'BSF' 171 <3> %strlen %$string_size %$string 171 ****************** <3> expansion: string_size = 3 171 <3> %if %$string_size > 15 171 <3> %error Mnemonic %1 is too long! 171 <3> %endif 171 0000014A 7304 <3> dw (%$currofs)<<4|%$string_size 171 <3> %assign MN_%1 $ - mnlist 171 ****************** <3> expansion: MN_BSF = 77 171 0000014C 425346 <3> db %$string 171 <3> %pop 172 00000047 F78C84 <2> variant 1bch, 8, ASM_MACH3 172 ****************** <2> expansion: ainfo = 35972 172 ****************** <2> expansion: escaped = 140 172 ****************** <2> expansion: escapes = 0 173 0000004A FF <2> endvariant 174 <2> mne BSR ; ofs=4Fh 174 <3> %push 174 <3> usesection ASMTABLE2, 1 174 <3> %assign %$currofs $ - asmtab 174 ****************** <3> expansion: currofs = 75 174 <3> %ifnempty %2 174 <3> db %2 174 <3> %endif 174 <3> __SECT__ 174 <3> %defstr %$string %1 174 ****************** <3> expansion: string = 'BSR' 174 <3> %strlen %$string_size %$string 174 ****************** <3> expansion: string_size = 3 174 <3> %if %$string_size > 15 174 <3> %error Mnemonic %1 is too long! 174 <3> %endif 174 0000014F B304 <3> dw (%$currofs)<<4|%$string_size 174 <3> %assign MN_%1 $ - mnlist 174 ****************** <3> expansion: MN_BSR = 82 174 00000151 425352 <3> db %$string 174 <3> %pop 175 0000004B F78CD5 <2> variant 1bdh, 8, ASM_MACH3 175 ****************** <2> expansion: ainfo = 36053 175 ****************** <2> expansion: escaped = 140 175 ****************** <2> expansion: escapes = 0 176 0000004E FF <2> endvariant 177 <2> mne BSWAP, ASM_D32 ; ofs=53h 177 <3> %push 177 <3> usesection ASMTABLE2, 1 177 <3> %assign %$currofs $ - asmtab 177 ****************** <3> expansion: currofs = 79 177 <3> %ifnempty %2 177 0000004F FD <3> db %2 177 <3> %endif 177 <3> __SECT__ 177 <3> %defstr %$string %1 177 ****************** <3> expansion: string = 'BSWAP' 177 <3> %strlen %$string_size %$string 177 ****************** <3> expansion: string_size = 5 177 <3> %if %$string_size > 15 177 <3> %error Mnemonic %1 is too long! 177 <3> %endif 177 00000154 F504 <3> dw (%$currofs)<<4|%$string_size 177 <3> %assign MN_%1 $ - mnlist 177 ****************** <3> expansion: MN_BSWAP = 87 177 00000156 4253574150 <3> db %$string 177 <3> %pop 178 00000050 F89051 <2> variant 1c8h, 9, ASM_MACH4 178 ****************** <2> expansion: ainfo = 36945 178 ****************** <2> expansion: escaped = 144 178 ****************** <2> expansion: escapes = 0 179 00000053 FF <2> endvariant 180 <2> mne BT ; ofs=58h 180 <3> %push 180 <3> usesection ASMTABLE2, 1 180 <3> %assign %$currofs $ - asmtab 180 ****************** <3> expansion: currofs = 84 180 <3> %ifnempty %2 180 <3> db %2 180 <3> %endif 180 <3> __SECT__ 180 <3> %defstr %$string %1 180 ****************** <3> expansion: string = 'BT' 180 <3> %strlen %$string_size %$string 180 ****************** <3> expansion: string_size = 2 180 <3> %if %$string_size > 15 180 <3> %error Mnemonic %1 is too long! 180 <3> %endif 180 0000015B 4205 <3> dw (%$currofs)<<4|%$string_size 180 <3> %assign MN_%1 $ - mnlist 180 ****************** <3> expansion: MN_BT = 94 180 0000015D 4254 <3> db %$string 180 <3> %pop 181 00000054 F7849D <2> variant 1a3h, 10, ASM_MACH3 181 ****************** <2> expansion: ainfo = 33949 181 ****************** <2> expansion: escaped = 132 181 ****************** <2> expansion: escapes = 0 182 00000057 F7BF27 <2> variant AGRP(3,4), 11, ASM_MACH3 182 ****************** <2> expansion: ainfo = 48935 182 ****************** <2> expansion: escaped = 191 182 ****************** <2> expansion: escapes = 0 183 0000005A FF <2> endvariant 184 <2> mne BTC ; ofs=5Fh 184 <3> %push 184 <3> usesection ASMTABLE2, 1 184 <3> %assign %$currofs $ - asmtab 184 ****************** <3> expansion: currofs = 91 184 <3> %ifnempty %2 184 <3> db %2 184 <3> %endif 184 <3> __SECT__ 184 <3> %defstr %$string %1 184 ****************** <3> expansion: string = 'BTC' 184 <3> %strlen %$string_size %$string 184 ****************** <3> expansion: string_size = 3 184 <3> %if %$string_size > 15 184 <3> %error Mnemonic %1 is too long! 184 <3> %endif 184 0000015F B305 <3> dw (%$currofs)<<4|%$string_size 184 <3> %assign MN_%1 $ - mnlist 184 ****************** <3> expansion: MN_BTC = 98 184 00000161 425443 <3> db %$string 184 <3> %pop 185 0000005B FBF78C35 <2> variant 1bbh, 10, ASM_LOCKABLE, ASM_MACH3 185 ****************** <2> expansion: ainfo = 35893 185 ****************** <2> expansion: escaped = 140 185 ****************** <2> expansion: escapes = 0 186 0000005F FBF7C01A <2> variant AGRP(3,7), 11, ASM_LOCKABLE, ASM_MACH3 186 ****************** <2> expansion: ainfo = 49178 186 ****************** <2> expansion: escaped = 192 186 ****************** <2> expansion: escapes = 0 187 00000063 FF <2> endvariant 188 <2> mne BTR ; ofs=68h 188 <3> %push 188 <3> usesection ASMTABLE2, 1 188 <3> %assign %$currofs $ - asmtab 188 ****************** <3> expansion: currofs = 100 188 <3> %ifnempty %2 188 <3> db %2 188 <3> %endif 188 <3> __SECT__ 188 <3> %defstr %$string %1 188 ****************** <3> expansion: string = 'BTR' 188 <3> %strlen %$string_size %$string 188 ****************** <3> expansion: string_size = 3 188 <3> %if %$string_size > 15 188 <3> %error Mnemonic %1 is too long! 188 <3> %endif 188 00000164 4306 <3> dw (%$currofs)<<4|%$string_size 188 <3> %assign MN_%1 $ - mnlist 188 ****************** <3> expansion: MN_BTR = 103 188 00000166 425452 <3> db %$string 188 <3> %pop 189 00000064 FBF789AD <2> variant 1b3h, 10, ASM_LOCKABLE, ASM_MACH3 189 ****************** <2> expansion: ainfo = 35245 189 ****************** <2> expansion: escaped = 137 189 ****************** <2> expansion: escapes = 0 190 00000068 FBF7BFC9 <2> variant AGRP(3,6), 11, ASM_LOCKABLE, ASM_MACH3 190 ****************** <2> expansion: ainfo = 49097 190 ****************** <2> expansion: escaped = 191 190 ****************** <2> expansion: escapes = 0 191 0000006C FF <2> endvariant 192 <2> mne BTS ; ofs=71h 192 <3> %push 192 <3> usesection ASMTABLE2, 1 192 <3> %assign %$currofs $ - asmtab 192 ****************** <3> expansion: currofs = 109 192 <3> %ifnempty %2 192 <3> db %2 192 <3> %endif 192 <3> __SECT__ 192 <3> %defstr %$string %1 192 ****************** <3> expansion: string = 'BTS' 192 <3> %strlen %$string_size %$string 192 ****************** <3> expansion: string_size = 3 192 <3> %if %$string_size > 15 192 <3> %error Mnemonic %1 is too long! 192 <3> %endif 192 00000169 D306 <3> dw (%$currofs)<<4|%$string_size 192 <3> %assign MN_%1 $ - mnlist 192 ****************** <3> expansion: MN_BTS = 108 192 0000016B 425453 <3> db %$string 192 <3> %pop 193 0000006D FBF78725 <2> variant 1abh, 10, ASM_LOCKABLE, ASM_MACH3 193 ****************** <2> expansion: ainfo = 34597 193 ****************** <2> expansion: escaped = 135 193 ****************** <2> expansion: escapes = 0 194 00000071 FBF7BF78 <2> variant AGRP(3,5), 11, ASM_LOCKABLE, ASM_MACH3 194 ****************** <2> expansion: ainfo = 49016 194 ****************** <2> expansion: escaped = 191 194 ****************** <2> expansion: escapes = 0 195 00000075 FF <2> endvariant 196 <2> mne CALL ; ofs=7Ah 196 <3> %push 196 <3> usesection ASMTABLE2, 1 196 <3> %assign %$currofs $ - asmtab 196 ****************** <3> expansion: currofs = 118 196 <3> %ifnempty %2 196 <3> db %2 196 <3> %endif 196 <3> __SECT__ 196 <3> %defstr %$string %1 196 ****************** <3> expansion: string = 'CALL' 196 <3> %strlen %$string_size %$string 196 ****************** <3> expansion: string_size = 4 196 <3> %if %$string_size > 15 196 <3> %error Mnemonic %1 is too long! 196 <3> %endif 196 0000016E 6407 <3> dw (%$currofs)<<4|%$string_size 196 <3> %assign MN_%1 $ - mnlist 196 ****************** <3> expansion: MN_CALL = 113 196 00000170 43414C4C <3> db %$string 196 <3> %pop 197 00000076 4974 <2> variant 0e8h, 12 197 ****************** <2> expansion: ainfo = 18804 197 ****************** <2> expansion: escaped = 73 197 ****************** <2> expansion: escapes = 0 198 00000078 C12A <2> variant AGRP(4,2), 40 198 ****************** <2> expansion: ainfo = 49450 198 ****************** <2> expansion: escaped = 193 198 ****************** <2> expansion: escapes = 0 199 0000007A C161 <2> variant AGRP(4,3), 14 199 ****************** <2> expansion: ainfo = 49505 199 ****************** <2> expansion: escaped = 193 199 ****************** <2> expansion: escapes = 0 200 0000007C 30C7 <2> variant 09ah, 13 200 ****************** <2> expansion: ainfo = 12487 200 ****************** <2> expansion: escaped = 48 200 ****************** <2> expansion: escapes = 0 201 0000007E FF <2> endvariant 202 <2> mne CBW, ASM_D16 ; ofs=83h 202 <3> %push 202 <3> usesection ASMTABLE2, 1 202 <3> %assign %$currofs $ - asmtab 202 ****************** <3> expansion: currofs = 127 202 <3> %ifnempty %2 202 0000007F FC <3> db %2 202 <3> %endif 202 <3> __SECT__ 202 <3> %defstr %$string %1 202 ****************** <3> expansion: string = 'CBW' 202 <3> %strlen %$string_size %$string 202 ****************** <3> expansion: string_size = 3 202 <3> %if %$string_size > 15 202 <3> %error Mnemonic %1 is too long! 202 <3> %endif 202 00000174 F307 <3> dw (%$currofs)<<4|%$string_size 202 <3> %assign MN_%1 $ - mnlist 202 ****************** <3> expansion: MN_CBW = 119 202 00000176 434257 <3> db %$string 202 <3> %pop 203 <2> mne CWDE, ASM_D32 ; ofs=84h 203 <3> %push 203 <3> usesection ASMTABLE2, 1 203 <3> %assign %$currofs $ - asmtab 203 ****************** <3> expansion: currofs = 128 203 <3> %ifnempty %2 203 00000080 FD <3> db %2 203 <3> %endif 203 <3> __SECT__ 203 <3> %defstr %$string %1 203 ****************** <3> expansion: string = 'CWDE' 203 <3> %strlen %$string_size %$string 203 ****************** <3> expansion: string_size = 4 203 <3> %if %$string_size > 15 203 <3> %error Mnemonic %1 is too long! 203 <3> %endif 203 00000179 0408 <3> dw (%$currofs)<<4|%$string_size 203 <3> %assign MN_%1 $ - mnlist 203 ****************** <3> expansion: MN_CWDE = 124 203 0000017B 43574445 <3> db %$string 203 <3> %pop 204 00000081 3018 <2> variant 098h, 0 204 ****************** <2> expansion: ainfo = 12312 204 ****************** <2> expansion: escaped = 48 204 ****************** <2> expansion: escapes = 0 205 00000083 FF <2> endvariant 206 <2> mne CLC ; ofs=88h 206 <3> %push 206 <3> usesection ASMTABLE2, 1 206 <3> %assign %$currofs $ - asmtab 206 ****************** <3> expansion: currofs = 132 206 <3> %ifnempty %2 206 <3> db %2 206 <3> %endif 206 <3> __SECT__ 206 <3> %defstr %$string %1 206 ****************** <3> expansion: string = 'CLC' 206 <3> %strlen %$string_size %$string 206 ****************** <3> expansion: string_size = 3 206 <3> %if %$string_size > 15 206 <3> %error Mnemonic %1 is too long! 206 <3> %endif 206 0000017F 4308 <3> dw (%$currofs)<<4|%$string_size 206 <3> %assign MN_%1 $ - mnlist 206 ****************** <3> expansion: MN_CLC = 130 206 00000181 434C43 <3> db %$string 206 <3> %pop 207 00000084 4E78 <2> variant 0f8h, 0 207 ****************** <2> expansion: ainfo = 20088 207 ****************** <2> expansion: escaped = 78 207 ****************** <2> expansion: escapes = 0 208 00000086 FF <2> endvariant 209 <2> mne CLD ; ofs=8Bh 209 <3> %push 209 <3> usesection ASMTABLE2, 1 209 <3> %assign %$currofs $ - asmtab 209 ****************** <3> expansion: currofs = 135 209 <3> %ifnempty %2 209 <3> db %2 209 <3> %endif 209 <3> __SECT__ 209 <3> %defstr %$string %1 209 ****************** <3> expansion: string = 'CLD' 209 <3> %strlen %$string_size %$string 209 ****************** <3> expansion: string_size = 3 209 <3> %if %$string_size > 15 209 <3> %error Mnemonic %1 is too long! 209 <3> %endif 209 00000184 7308 <3> dw (%$currofs)<<4|%$string_size 209 <3> %assign MN_%1 $ - mnlist 209 ****************** <3> expansion: MN_CLD = 135 209 00000186 434C44 <3> db %$string 209 <3> %pop 210 00000087 4FBC <2> variant 0fch, 0 210 ****************** <2> expansion: ainfo = 20412 210 ****************** <2> expansion: escaped = 79 210 ****************** <2> expansion: escapes = 0 211 00000089 FF <2> endvariant 212 <2> mne CLI ; ofs=8Eh 212 <3> %push 212 <3> usesection ASMTABLE2, 1 212 <3> %assign %$currofs $ - asmtab 212 ****************** <3> expansion: currofs = 138 212 <3> %ifnempty %2 212 <3> db %2 212 <3> %endif 212 <3> __SECT__ 212 <3> %defstr %$string %1 212 ****************** <3> expansion: string = 'CLI' 212 <3> %strlen %$string_size %$string 212 ****************** <3> expansion: string_size = 3 212 <3> %if %$string_size > 15 212 <3> %error Mnemonic %1 is too long! 212 <3> %endif 212 00000189 A308 <3> dw (%$currofs)<<4|%$string_size 212 <3> %assign MN_%1 $ - mnlist 212 ****************** <3> expansion: MN_CLI = 140 212 0000018B 434C49 <3> db %$string 212 <3> %pop 213 0000008A 4F1A <2> variant 0fah, 0 213 ****************** <2> expansion: ainfo = 20250 213 ****************** <2> expansion: escaped = 79 213 ****************** <2> expansion: escapes = 0 214 0000008C FF <2> endvariant 215 <2> mne CLTS ; ofs=91h 215 <3> %push 215 <3> usesection ASMTABLE2, 1 215 <3> %assign %$currofs $ - asmtab 215 ****************** <3> expansion: currofs = 141 215 <3> %ifnempty %2 215 <3> db %2 215 <3> %endif 215 <3> __SECT__ 215 <3> %defstr %$string %1 215 ****************** <3> expansion: string = 'CLTS' 215 <3> %strlen %$string_size %$string 215 ****************** <3> expansion: string_size = 4 215 <3> %if %$string_size > 15 215 <3> %error Mnemonic %1 is too long! 215 <3> %endif 215 0000018E D408 <3> dw (%$currofs)<<4|%$string_size 215 <3> %assign MN_%1 $ - mnlist 215 ****************** <3> expansion: MN_CLTS = 145 215 00000190 434C5453 <3> db %$string 215 <3> %pop 216 0000008D F652E6 <2> variant 106h, 0, ASM_MACH2 216 ****************** <2> expansion: ainfo = 21222 216 ****************** <2> expansion: escaped = 82 216 ****************** <2> expansion: escapes = 0 217 00000090 FF <2> endvariant 218 <2> mne CMC ; ofs=95h 218 <3> %push 218 <3> usesection ASMTABLE2, 1 218 <3> %assign %$currofs $ - asmtab 218 ****************** <3> expansion: currofs = 145 218 <3> %ifnempty %2 218 <3> db %2 218 <3> %endif 218 <3> __SECT__ 218 <3> %defstr %$string %1 218 ****************** <3> expansion: string = 'CMC' 218 <3> %strlen %$string_size %$string 218 ****************** <3> expansion: string_size = 3 218 <3> %if %$string_size > 15 218 <3> %error Mnemonic %1 is too long! 218 <3> %endif 218 00000194 1309 <3> dw (%$currofs)<<4|%$string_size 218 <3> %assign MN_%1 $ - mnlist 218 ****************** <3> expansion: MN_CMC = 151 218 00000196 434D43 <3> db %$string 218 <3> %pop 219 00000091 4D85 <2> variant 0f5h, 0 219 ****************** <2> expansion: ainfo = 19845 219 ****************** <2> expansion: escaped = 77 219 ****************** <2> expansion: escapes = 0 220 00000093 FF <2> endvariant 221 <2> mne CMOVA ; ofs=98h 221 <3> %push 221 <3> usesection ASMTABLE2, 1 221 <3> %assign %$currofs $ - asmtab 221 ****************** <3> expansion: currofs = 148 221 <3> %ifnempty %2 221 <3> db %2 221 <3> %endif 221 <3> __SECT__ 221 <3> %defstr %$string %1 221 ****************** <3> expansion: string = 'CMOVA' 221 <3> %strlen %$string_size %$string 221 ****************** <3> expansion: string_size = 5 221 <3> %if %$string_size > 15 221 <3> %error Mnemonic %1 is too long! 221 <3> %endif 221 00000199 4509 <3> dw (%$currofs)<<4|%$string_size 221 <3> %assign MN_%1 $ - mnlist 221 ****************** <3> expansion: MN_CMOVA = 156 221 0000019B 434D4F5641 <3> db %$string 221 <3> %pop 222 00000094 FA677F <2> variant 147h, 8, ASM_MACH6 222 ****************** <2> expansion: ainfo = 26495 222 ****************** <2> expansion: escaped = 103 222 ****************** <2> expansion: escapes = 0 223 00000097 FF <2> endvariant 224 <2> mne CMOVAE ; ofs=9Ch 224 <3> %push 224 <3> usesection ASMTABLE2, 1 224 <3> %assign %$currofs $ - asmtab 224 ****************** <3> expansion: currofs = 152 224 <3> %ifnempty %2 224 <3> db %2 224 <3> %endif 224 <3> __SECT__ 224 <3> %defstr %$string %1 224 ****************** <3> expansion: string = 'CMOVAE' 224 <3> %strlen %$string_size %$string 224 ****************** <3> expansion: string_size = 6 224 <3> %if %$string_size > 15 224 <3> %error Mnemonic %1 is too long! 224 <3> %endif 224 000001A0 8609 <3> dw (%$currofs)<<4|%$string_size 224 <3> %assign MN_%1 $ - mnlist 224 ****************** <3> expansion: MN_CMOVAE = 163 224 000001A2 434D4F564145 <3> db %$string 224 <3> %pop 225 00000098 FA663B <2> variant 143h, 8, ASM_MACH6 225 ****************** <2> expansion: ainfo = 26171 225 ****************** <2> expansion: escaped = 102 225 ****************** <2> expansion: escapes = 0 226 0000009B FF <2> endvariant 227 <2> mne CMOVB ; ofs=A0h 227 <3> %push 227 <3> usesection ASMTABLE2, 1 227 <3> %assign %$currofs $ - asmtab 227 ****************** <3> expansion: currofs = 156 227 <3> %ifnempty %2 227 <3> db %2 227 <3> %endif 227 <3> __SECT__ 227 <3> %defstr %$string %1 227 ****************** <3> expansion: string = 'CMOVB' 227 <3> %strlen %$string_size %$string 227 ****************** <3> expansion: string_size = 5 227 <3> %if %$string_size > 15 227 <3> %error Mnemonic %1 is too long! 227 <3> %endif 227 000001A8 C509 <3> dw (%$currofs)<<4|%$string_size 227 <3> %assign MN_%1 $ - mnlist 227 ****************** <3> expansion: MN_CMOVB = 171 227 000001AA 434D4F5642 <3> db %$string 227 <3> %pop 228 0000009C FA65EA <2> variant 142h, 8, ASM_MACH6 228 ****************** <2> expansion: ainfo = 26090 228 ****************** <2> expansion: escaped = 101 228 ****************** <2> expansion: escapes = 0 229 0000009F FF <2> endvariant 230 <2> mne CMOVBE ; ofs=A4h 230 <3> %push 230 <3> usesection ASMTABLE2, 1 230 <3> %assign %$currofs $ - asmtab 230 ****************** <3> expansion: currofs = 160 230 <3> %ifnempty %2 230 <3> db %2 230 <3> %endif 230 <3> __SECT__ 230 <3> %defstr %$string %1 230 ****************** <3> expansion: string = 'CMOVBE' 230 <3> %strlen %$string_size %$string 230 ****************** <3> expansion: string_size = 6 230 <3> %if %$string_size > 15 230 <3> %error Mnemonic %1 is too long! 230 <3> %endif 230 000001AF 060A <3> dw (%$currofs)<<4|%$string_size 230 <3> %assign MN_%1 $ - mnlist 230 ****************** <3> expansion: MN_CMOVBE = 178 230 000001B1 434D4F564245 <3> db %$string 230 <3> %pop 231 000000A0 FA672E <2> variant 146h, 8, ASM_MACH6 231 ****************** <2> expansion: ainfo = 26414 231 ****************** <2> expansion: escaped = 103 231 ****************** <2> expansion: escapes = 0 232 000000A3 FF <2> endvariant 233 <2> mne CMOVC ; ofs=A8h 233 <3> %push 233 <3> usesection ASMTABLE2, 1 233 <3> %assign %$currofs $ - asmtab 233 ****************** <3> expansion: currofs = 164 233 <3> %ifnempty %2 233 <3> db %2 233 <3> %endif 233 <3> __SECT__ 233 <3> %defstr %$string %1 233 ****************** <3> expansion: string = 'CMOVC' 233 <3> %strlen %$string_size %$string 233 ****************** <3> expansion: string_size = 5 233 <3> %if %$string_size > 15 233 <3> %error Mnemonic %1 is too long! 233 <3> %endif 233 000001B7 450A <3> dw (%$currofs)<<4|%$string_size 233 <3> %assign MN_%1 $ - mnlist 233 ****************** <3> expansion: MN_CMOVC = 186 233 000001B9 434D4F5643 <3> db %$string 233 <3> %pop 234 000000A4 FA65EA <2> variant 142h, 8, ASM_MACH6 234 ****************** <2> expansion: ainfo = 26090 234 ****************** <2> expansion: escaped = 101 234 ****************** <2> expansion: escapes = 0 235 000000A7 FF <2> endvariant 236 <2> mne CMOVE ; ofs=ACh 236 <3> %push 236 <3> usesection ASMTABLE2, 1 236 <3> %assign %$currofs $ - asmtab 236 ****************** <3> expansion: currofs = 168 236 <3> %ifnempty %2 236 <3> db %2 236 <3> %endif 236 <3> __SECT__ 236 <3> %defstr %$string %1 236 ****************** <3> expansion: string = 'CMOVE' 236 <3> %strlen %$string_size %$string 236 ****************** <3> expansion: string_size = 5 236 <3> %if %$string_size > 15 236 <3> %error Mnemonic %1 is too long! 236 <3> %endif 236 000001BE 850A <3> dw (%$currofs)<<4|%$string_size 236 <3> %assign MN_%1 $ - mnlist 236 ****************** <3> expansion: MN_CMOVE = 193 236 000001C0 434D4F5645 <3> db %$string 236 <3> %pop 237 000000A8 FA668C <2> variant 144h, 8, ASM_MACH6 237 ****************** <2> expansion: ainfo = 26252 237 ****************** <2> expansion: escaped = 102 237 ****************** <2> expansion: escapes = 0 238 000000AB FF <2> endvariant 239 <2> mne CMOVG ; ofs=B0h 239 <3> %push 239 <3> usesection ASMTABLE2, 1 239 <3> %assign %$currofs $ - asmtab 239 ****************** <3> expansion: currofs = 172 239 <3> %ifnempty %2 239 <3> db %2 239 <3> %endif 239 <3> __SECT__ 239 <3> %defstr %$string %1 239 ****************** <3> expansion: string = 'CMOVG' 239 <3> %strlen %$string_size %$string 239 ****************** <3> expansion: string_size = 5 239 <3> %if %$string_size > 15 239 <3> %error Mnemonic %1 is too long! 239 <3> %endif 239 000001C5 C50A <3> dw (%$currofs)<<4|%$string_size 239 <3> %assign MN_%1 $ - mnlist 239 ****************** <3> expansion: MN_CMOVG = 200 239 000001C7 434D4F5647 <3> db %$string 239 <3> %pop 240 000000AC FA6A07 <2> variant 14fh, 8, ASM_MACH6 240 ****************** <2> expansion: ainfo = 27143 240 ****************** <2> expansion: escaped = 106 240 ****************** <2> expansion: escapes = 0 241 000000AF FF <2> endvariant 242 <2> mne CMOVGE ; ofs=B4h 242 <3> %push 242 <3> usesection ASMTABLE2, 1 242 <3> %assign %$currofs $ - asmtab 242 ****************** <3> expansion: currofs = 176 242 <3> %ifnempty %2 242 <3> db %2 242 <3> %endif 242 <3> __SECT__ 242 <3> %defstr %$string %1 242 ****************** <3> expansion: string = 'CMOVGE' 242 <3> %strlen %$string_size %$string 242 ****************** <3> expansion: string_size = 6 242 <3> %if %$string_size > 15 242 <3> %error Mnemonic %1 is too long! 242 <3> %endif 242 000001CC 060B <3> dw (%$currofs)<<4|%$string_size 242 <3> %assign MN_%1 $ - mnlist 242 ****************** <3> expansion: MN_CMOVGE = 207 242 000001CE 434D4F564745 <3> db %$string 242 <3> %pop 243 000000B0 FA6965 <2> variant 14dh, 8, ASM_MACH6 243 ****************** <2> expansion: ainfo = 26981 243 ****************** <2> expansion: escaped = 105 243 ****************** <2> expansion: escapes = 0 244 000000B3 FF <2> endvariant 245 <2> mne CMOVL ; ofs=B8h 245 <3> %push 245 <3> usesection ASMTABLE2, 1 245 <3> %assign %$currofs $ - asmtab 245 ****************** <3> expansion: currofs = 180 245 <3> %ifnempty %2 245 <3> db %2 245 <3> %endif 245 <3> __SECT__ 245 <3> %defstr %$string %1 245 ****************** <3> expansion: string = 'CMOVL' 245 <3> %strlen %$string_size %$string 245 ****************** <3> expansion: string_size = 5 245 <3> %if %$string_size > 15 245 <3> %error Mnemonic %1 is too long! 245 <3> %endif 245 000001D4 450B <3> dw (%$currofs)<<4|%$string_size 245 <3> %assign MN_%1 $ - mnlist 245 ****************** <3> expansion: MN_CMOVL = 215 245 000001D6 434D4F564C <3> db %$string 245 <3> %pop 246 000000B4 FA6914 <2> variant 14ch, 8, ASM_MACH6 246 ****************** <2> expansion: ainfo = 26900 246 ****************** <2> expansion: escaped = 105 246 ****************** <2> expansion: escapes = 0 247 000000B7 FF <2> endvariant 248 <2> mne CMOVLE ; ofs=BCh 248 <3> %push 248 <3> usesection ASMTABLE2, 1 248 <3> %assign %$currofs $ - asmtab 248 ****************** <3> expansion: currofs = 184 248 <3> %ifnempty %2 248 <3> db %2 248 <3> %endif 248 <3> __SECT__ 248 <3> %defstr %$string %1 248 ****************** <3> expansion: string = 'CMOVLE' 248 <3> %strlen %$string_size %$string 248 ****************** <3> expansion: string_size = 6 248 <3> %if %$string_size > 15 248 <3> %error Mnemonic %1 is too long! 248 <3> %endif 248 000001DB 860B <3> dw (%$currofs)<<4|%$string_size 248 <3> %assign MN_%1 $ - mnlist 248 ****************** <3> expansion: MN_CMOVLE = 222 248 000001DD 434D4F564C45 <3> db %$string 248 <3> %pop 249 000000B8 FA69B6 <2> variant 14eh, 8, ASM_MACH6 249 ****************** <2> expansion: ainfo = 27062 249 ****************** <2> expansion: escaped = 105 249 ****************** <2> expansion: escapes = 0 250 000000BB FF <2> endvariant 251 <2> mne CMOVNA ; ofs=C0h 251 <3> %push 251 <3> usesection ASMTABLE2, 1 251 <3> %assign %$currofs $ - asmtab 251 ****************** <3> expansion: currofs = 188 251 <3> %ifnempty %2 251 <3> db %2 251 <3> %endif 251 <3> __SECT__ 251 <3> %defstr %$string %1 251 ****************** <3> expansion: string = 'CMOVNA' 251 <3> %strlen %$string_size %$string 251 ****************** <3> expansion: string_size = 6 251 <3> %if %$string_size > 15 251 <3> %error Mnemonic %1 is too long! 251 <3> %endif 251 000001E3 C60B <3> dw (%$currofs)<<4|%$string_size 251 <3> %assign MN_%1 $ - mnlist 251 ****************** <3> expansion: MN_CMOVNA = 230 251 000001E5 434D4F564E41 <3> db %$string 251 <3> %pop 252 000000BC FA672E <2> variant 146h, 8, ASM_MACH6 252 ****************** <2> expansion: ainfo = 26414 252 ****************** <2> expansion: escaped = 103 252 ****************** <2> expansion: escapes = 0 253 000000BF FF <2> endvariant 254 <2> mne CMOVNAE ; ofs=C4h 254 <3> %push 254 <3> usesection ASMTABLE2, 1 254 <3> %assign %$currofs $ - asmtab 254 ****************** <3> expansion: currofs = 192 254 <3> %ifnempty %2 254 <3> db %2 254 <3> %endif 254 <3> __SECT__ 254 <3> %defstr %$string %1 254 ****************** <3> expansion: string = 'CMOVNAE' 254 <3> %strlen %$string_size %$string 254 ****************** <3> expansion: string_size = 7 254 <3> %if %$string_size > 15 254 <3> %error Mnemonic %1 is too long! 254 <3> %endif 254 000001EB 070C <3> dw (%$currofs)<<4|%$string_size 254 <3> %assign MN_%1 $ - mnlist 254 ****************** <3> expansion: MN_CMOVNAE = 238 254 000001ED 434D4F564E4145 <3> db %$string 254 <3> %pop 255 000000C0 FA65EA <2> variant 142h, 8, ASM_MACH6 255 ****************** <2> expansion: ainfo = 26090 255 ****************** <2> expansion: escaped = 101 255 ****************** <2> expansion: escapes = 0 256 000000C3 FF <2> endvariant 257 <2> mne CMOVNB ; ofs=C8h 257 <3> %push 257 <3> usesection ASMTABLE2, 1 257 <3> %assign %$currofs $ - asmtab 257 ****************** <3> expansion: currofs = 196 257 <3> %ifnempty %2 257 <3> db %2 257 <3> %endif 257 <3> __SECT__ 257 <3> %defstr %$string %1 257 ****************** <3> expansion: string = 'CMOVNB' 257 <3> %strlen %$string_size %$string 257 ****************** <3> expansion: string_size = 6 257 <3> %if %$string_size > 15 257 <3> %error Mnemonic %1 is too long! 257 <3> %endif 257 000001F4 460C <3> dw (%$currofs)<<4|%$string_size 257 <3> %assign MN_%1 $ - mnlist 257 ****************** <3> expansion: MN_CMOVNB = 247 257 000001F6 434D4F564E42 <3> db %$string 257 <3> %pop 258 000000C4 FA663B <2> variant 143h, 8, ASM_MACH6 258 ****************** <2> expansion: ainfo = 26171 258 ****************** <2> expansion: escaped = 102 258 ****************** <2> expansion: escapes = 0 259 000000C7 FF <2> endvariant 260 <2> mne CMOVNBE ; ofs=CCh 260 <3> %push 260 <3> usesection ASMTABLE2, 1 260 <3> %assign %$currofs $ - asmtab 260 ****************** <3> expansion: currofs = 200 260 <3> %ifnempty %2 260 <3> db %2 260 <3> %endif 260 <3> __SECT__ 260 <3> %defstr %$string %1 260 ****************** <3> expansion: string = 'CMOVNBE' 260 <3> %strlen %$string_size %$string 260 ****************** <3> expansion: string_size = 7 260 <3> %if %$string_size > 15 260 <3> %error Mnemonic %1 is too long! 260 <3> %endif 260 000001FC 870C <3> dw (%$currofs)<<4|%$string_size 260 <3> %assign MN_%1 $ - mnlist 260 ****************** <3> expansion: MN_CMOVNBE = 255 260 000001FE 434D4F564E4245 <3> db %$string 260 <3> %pop 261 000000C8 FA677F <2> variant 147h, 8, ASM_MACH6 261 ****************** <2> expansion: ainfo = 26495 261 ****************** <2> expansion: escaped = 103 261 ****************** <2> expansion: escapes = 0 262 000000CB FF <2> endvariant 263 <2> mne CMOVNC ; ofs=D0h 263 <3> %push 263 <3> usesection ASMTABLE2, 1 263 <3> %assign %$currofs $ - asmtab 263 ****************** <3> expansion: currofs = 204 263 <3> %ifnempty %2 263 <3> db %2 263 <3> %endif 263 <3> __SECT__ 263 <3> %defstr %$string %1 263 ****************** <3> expansion: string = 'CMOVNC' 263 <3> %strlen %$string_size %$string 263 ****************** <3> expansion: string_size = 6 263 <3> %if %$string_size > 15 263 <3> %error Mnemonic %1 is too long! 263 <3> %endif 263 00000205 C60C <3> dw (%$currofs)<<4|%$string_size 263 <3> %assign MN_%1 $ - mnlist 263 ****************** <3> expansion: MN_CMOVNC = 264 263 00000207 434D4F564E43 <3> db %$string 263 <3> %pop 264 000000CC FA663B <2> variant 143h, 8, ASM_MACH6 264 ****************** <2> expansion: ainfo = 26171 264 ****************** <2> expansion: escaped = 102 264 ****************** <2> expansion: escapes = 0 265 000000CF FF <2> endvariant 266 <2> mne CMOVNE ; ofs=D4h 266 <3> %push 266 <3> usesection ASMTABLE2, 1 266 <3> %assign %$currofs $ - asmtab 266 ****************** <3> expansion: currofs = 208 266 <3> %ifnempty %2 266 <3> db %2 266 <3> %endif 266 <3> __SECT__ 266 <3> %defstr %$string %1 266 ****************** <3> expansion: string = 'CMOVNE' 266 <3> %strlen %$string_size %$string 266 ****************** <3> expansion: string_size = 6 266 <3> %if %$string_size > 15 266 <3> %error Mnemonic %1 is too long! 266 <3> %endif 266 0000020D 060D <3> dw (%$currofs)<<4|%$string_size 266 <3> %assign MN_%1 $ - mnlist 266 ****************** <3> expansion: MN_CMOVNE = 272 266 0000020F 434D4F564E45 <3> db %$string 266 <3> %pop 267 000000D0 FA66DD <2> variant 145h, 8, ASM_MACH6 267 ****************** <2> expansion: ainfo = 26333 267 ****************** <2> expansion: escaped = 102 267 ****************** <2> expansion: escapes = 0 268 000000D3 FF <2> endvariant 269 <2> mne CMOVNG ; ofs=D8h 269 <3> %push 269 <3> usesection ASMTABLE2, 1 269 <3> %assign %$currofs $ - asmtab 269 ****************** <3> expansion: currofs = 212 269 <3> %ifnempty %2 269 <3> db %2 269 <3> %endif 269 <3> __SECT__ 269 <3> %defstr %$string %1 269 ****************** <3> expansion: string = 'CMOVNG' 269 <3> %strlen %$string_size %$string 269 ****************** <3> expansion: string_size = 6 269 <3> %if %$string_size > 15 269 <3> %error Mnemonic %1 is too long! 269 <3> %endif 269 00000215 460D <3> dw (%$currofs)<<4|%$string_size 269 <3> %assign MN_%1 $ - mnlist 269 ****************** <3> expansion: MN_CMOVNG = 280 269 00000217 434D4F564E47 <3> db %$string 269 <3> %pop 270 000000D4 FA69B6 <2> variant 14eh, 8, ASM_MACH6 270 ****************** <2> expansion: ainfo = 27062 270 ****************** <2> expansion: escaped = 105 270 ****************** <2> expansion: escapes = 0 271 000000D7 FF <2> endvariant 272 <2> mne CMOVNGE ; ofs=DCh 272 <3> %push 272 <3> usesection ASMTABLE2, 1 272 <3> %assign %$currofs $ - asmtab 272 ****************** <3> expansion: currofs = 216 272 <3> %ifnempty %2 272 <3> db %2 272 <3> %endif 272 <3> __SECT__ 272 <3> %defstr %$string %1 272 ****************** <3> expansion: string = 'CMOVNGE' 272 <3> %strlen %$string_size %$string 272 ****************** <3> expansion: string_size = 7 272 <3> %if %$string_size > 15 272 <3> %error Mnemonic %1 is too long! 272 <3> %endif 272 0000021D 870D <3> dw (%$currofs)<<4|%$string_size 272 <3> %assign MN_%1 $ - mnlist 272 ****************** <3> expansion: MN_CMOVNGE = 288 272 0000021F 434D4F564E4745 <3> db %$string 272 <3> %pop 273 000000D8 FA6914 <2> variant 14ch, 8, ASM_MACH6 273 ****************** <2> expansion: ainfo = 26900 273 ****************** <2> expansion: escaped = 105 273 ****************** <2> expansion: escapes = 0 274 000000DB FF <2> endvariant 275 <2> mne CMOVNL ; ofs=E0h 275 <3> %push 275 <3> usesection ASMTABLE2, 1 275 <3> %assign %$currofs $ - asmtab 275 ****************** <3> expansion: currofs = 220 275 <3> %ifnempty %2 275 <3> db %2 275 <3> %endif 275 <3> __SECT__ 275 <3> %defstr %$string %1 275 ****************** <3> expansion: string = 'CMOVNL' 275 <3> %strlen %$string_size %$string 275 ****************** <3> expansion: string_size = 6 275 <3> %if %$string_size > 15 275 <3> %error Mnemonic %1 is too long! 275 <3> %endif 275 00000226 C60D <3> dw (%$currofs)<<4|%$string_size 275 <3> %assign MN_%1 $ - mnlist 275 ****************** <3> expansion: MN_CMOVNL = 297 275 00000228 434D4F564E4C <3> db %$string 275 <3> %pop 276 000000DC FA6965 <2> variant 14dh, 8, ASM_MACH6 276 ****************** <2> expansion: ainfo = 26981 276 ****************** <2> expansion: escaped = 105 276 ****************** <2> expansion: escapes = 0 277 000000DF FF <2> endvariant 278 <2> mne CMOVNLE ; ofs=E4h 278 <3> %push 278 <3> usesection ASMTABLE2, 1 278 <3> %assign %$currofs $ - asmtab 278 ****************** <3> expansion: currofs = 224 278 <3> %ifnempty %2 278 <3> db %2 278 <3> %endif 278 <3> __SECT__ 278 <3> %defstr %$string %1 278 ****************** <3> expansion: string = 'CMOVNLE' 278 <3> %strlen %$string_size %$string 278 ****************** <3> expansion: string_size = 7 278 <3> %if %$string_size > 15 278 <3> %error Mnemonic %1 is too long! 278 <3> %endif 278 0000022E 070E <3> dw (%$currofs)<<4|%$string_size 278 <3> %assign MN_%1 $ - mnlist 278 ****************** <3> expansion: MN_CMOVNLE = 305 278 00000230 434D4F564E4C45 <3> db %$string 278 <3> %pop 279 000000E0 FA6A07 <2> variant 14fh, 8, ASM_MACH6 279 ****************** <2> expansion: ainfo = 27143 279 ****************** <2> expansion: escaped = 106 279 ****************** <2> expansion: escapes = 0 280 000000E3 FF <2> endvariant 281 <2> mne CMOVNO ; ofs=E8h 281 <3> %push 281 <3> usesection ASMTABLE2, 1 281 <3> %assign %$currofs $ - asmtab 281 ****************** <3> expansion: currofs = 228 281 <3> %ifnempty %2 281 <3> db %2 281 <3> %endif 281 <3> __SECT__ 281 <3> %defstr %$string %1 281 ****************** <3> expansion: string = 'CMOVNO' 281 <3> %strlen %$string_size %$string 281 ****************** <3> expansion: string_size = 6 281 <3> %if %$string_size > 15 281 <3> %error Mnemonic %1 is too long! 281 <3> %endif 281 00000237 460E <3> dw (%$currofs)<<4|%$string_size 281 <3> %assign MN_%1 $ - mnlist 281 ****************** <3> expansion: MN_CMOVNO = 314 281 00000239 434D4F564E4F <3> db %$string 281 <3> %pop 282 000000E4 FA6599 <2> variant 141h, 8, ASM_MACH6 282 ****************** <2> expansion: ainfo = 26009 282 ****************** <2> expansion: escaped = 101 282 ****************** <2> expansion: escapes = 0 283 000000E7 FF <2> endvariant 284 <2> mne CMOVNP ; ofs=ECh 284 <3> %push 284 <3> usesection ASMTABLE2, 1 284 <3> %assign %$currofs $ - asmtab 284 ****************** <3> expansion: currofs = 232 284 <3> %ifnempty %2 284 <3> db %2 284 <3> %endif 284 <3> __SECT__ 284 <3> %defstr %$string %1 284 ****************** <3> expansion: string = 'CMOVNP' 284 <3> %strlen %$string_size %$string 284 ****************** <3> expansion: string_size = 6 284 <3> %if %$string_size > 15 284 <3> %error Mnemonic %1 is too long! 284 <3> %endif 284 0000023F 860E <3> dw (%$currofs)<<4|%$string_size 284 <3> %assign MN_%1 $ - mnlist 284 ****************** <3> expansion: MN_CMOVNP = 322 284 00000241 434D4F564E50 <3> db %$string 284 <3> %pop 285 000000E8 FA68C3 <2> variant 14bh, 8, ASM_MACH6 285 ****************** <2> expansion: ainfo = 26819 285 ****************** <2> expansion: escaped = 104 285 ****************** <2> expansion: escapes = 0 286 000000EB FF <2> endvariant 287 <2> mne CMOVNS ; ofs=F0h 287 <3> %push 287 <3> usesection ASMTABLE2, 1 287 <3> %assign %$currofs $ - asmtab 287 ****************** <3> expansion: currofs = 236 287 <3> %ifnempty %2 287 <3> db %2 287 <3> %endif 287 <3> __SECT__ 287 <3> %defstr %$string %1 287 ****************** <3> expansion: string = 'CMOVNS' 287 <3> %strlen %$string_size %$string 287 ****************** <3> expansion: string_size = 6 287 <3> %if %$string_size > 15 287 <3> %error Mnemonic %1 is too long! 287 <3> %endif 287 00000247 C60E <3> dw (%$currofs)<<4|%$string_size 287 <3> %assign MN_%1 $ - mnlist 287 ****************** <3> expansion: MN_CMOVNS = 330 287 00000249 434D4F564E53 <3> db %$string 287 <3> %pop 288 000000EC FA6821 <2> variant 149h, 8, ASM_MACH6 288 ****************** <2> expansion: ainfo = 26657 288 ****************** <2> expansion: escaped = 104 288 ****************** <2> expansion: escapes = 0 289 000000EF FF <2> endvariant 290 <2> mne CMOVNZ ; ofs=F4h 290 <3> %push 290 <3> usesection ASMTABLE2, 1 290 <3> %assign %$currofs $ - asmtab 290 ****************** <3> expansion: currofs = 240 290 <3> %ifnempty %2 290 <3> db %2 290 <3> %endif 290 <3> __SECT__ 290 <3> %defstr %$string %1 290 ****************** <3> expansion: string = 'CMOVNZ' 290 <3> %strlen %$string_size %$string 290 ****************** <3> expansion: string_size = 6 290 <3> %if %$string_size > 15 290 <3> %error Mnemonic %1 is too long! 290 <3> %endif 290 0000024F 060F <3> dw (%$currofs)<<4|%$string_size 290 <3> %assign MN_%1 $ - mnlist 290 ****************** <3> expansion: MN_CMOVNZ = 338 290 00000251 434D4F564E5A <3> db %$string 290 <3> %pop 291 000000F0 FA66DD <2> variant 145h, 8, ASM_MACH6 291 ****************** <2> expansion: ainfo = 26333 291 ****************** <2> expansion: escaped = 102 291 ****************** <2> expansion: escapes = 0 292 000000F3 FF <2> endvariant 293 <2> mne CMOVO ; ofs=F8h 293 <3> %push 293 <3> usesection ASMTABLE2, 1 293 <3> %assign %$currofs $ - asmtab 293 ****************** <3> expansion: currofs = 244 293 <3> %ifnempty %2 293 <3> db %2 293 <3> %endif 293 <3> __SECT__ 293 <3> %defstr %$string %1 293 ****************** <3> expansion: string = 'CMOVO' 293 <3> %strlen %$string_size %$string 293 ****************** <3> expansion: string_size = 5 293 <3> %if %$string_size > 15 293 <3> %error Mnemonic %1 is too long! 293 <3> %endif 293 00000257 450F <3> dw (%$currofs)<<4|%$string_size 293 <3> %assign MN_%1 $ - mnlist 293 ****************** <3> expansion: MN_CMOVO = 346 293 00000259 434D4F564F <3> db %$string 293 <3> %pop 294 000000F4 FA6548 <2> variant 140h, 8, ASM_MACH6 294 ****************** <2> expansion: ainfo = 25928 294 ****************** <2> expansion: escaped = 101 294 ****************** <2> expansion: escapes = 0 295 000000F7 FF <2> endvariant 296 <2> mne CMOVP ; ofs=FCh 296 <3> %push 296 <3> usesection ASMTABLE2, 1 296 <3> %assign %$currofs $ - asmtab 296 ****************** <3> expansion: currofs = 248 296 <3> %ifnempty %2 296 <3> db %2 296 <3> %endif 296 <3> __SECT__ 296 <3> %defstr %$string %1 296 ****************** <3> expansion: string = 'CMOVP' 296 <3> %strlen %$string_size %$string 296 ****************** <3> expansion: string_size = 5 296 <3> %if %$string_size > 15 296 <3> %error Mnemonic %1 is too long! 296 <3> %endif 296 0000025E 850F <3> dw (%$currofs)<<4|%$string_size 296 <3> %assign MN_%1 $ - mnlist 296 ****************** <3> expansion: MN_CMOVP = 353 296 00000260 434D4F5650 <3> db %$string 296 <3> %pop 297 000000F8 FA6872 <2> variant 14ah, 8, ASM_MACH6 297 ****************** <2> expansion: ainfo = 26738 297 ****************** <2> expansion: escaped = 104 297 ****************** <2> expansion: escapes = 0 298 000000FB FF <2> endvariant 299 <2> mne CMOVPE ; ofs=100h 299 <3> %push 299 <3> usesection ASMTABLE2, 1 299 <3> %assign %$currofs $ - asmtab 299 ****************** <3> expansion: currofs = 252 299 <3> %ifnempty %2 299 <3> db %2 299 <3> %endif 299 <3> __SECT__ 299 <3> %defstr %$string %1 299 ****************** <3> expansion: string = 'CMOVPE' 299 <3> %strlen %$string_size %$string 299 ****************** <3> expansion: string_size = 6 299 <3> %if %$string_size > 15 299 <3> %error Mnemonic %1 is too long! 299 <3> %endif 299 00000265 C60F <3> dw (%$currofs)<<4|%$string_size 299 <3> %assign MN_%1 $ - mnlist 299 ****************** <3> expansion: MN_CMOVPE = 360 299 00000267 434D4F565045 <3> db %$string 299 <3> %pop 300 000000FC FA6872 <2> variant 14ah, 8, ASM_MACH6 300 ****************** <2> expansion: ainfo = 26738 300 ****************** <2> expansion: escaped = 104 300 ****************** <2> expansion: escapes = 0 301 000000FF FF <2> endvariant 302 <2> mne CMOVPO ; ofs=104h 302 <3> %push 302 <3> usesection ASMTABLE2, 1 302 <3> %assign %$currofs $ - asmtab 302 ****************** <3> expansion: currofs = 256 302 <3> %ifnempty %2 302 <3> db %2 302 <3> %endif 302 <3> __SECT__ 302 <3> %defstr %$string %1 302 ****************** <3> expansion: string = 'CMOVPO' 302 <3> %strlen %$string_size %$string 302 ****************** <3> expansion: string_size = 6 302 <3> %if %$string_size > 15 302 <3> %error Mnemonic %1 is too long! 302 <3> %endif 302 0000026D 0610 <3> dw (%$currofs)<<4|%$string_size 302 <3> %assign MN_%1 $ - mnlist 302 ****************** <3> expansion: MN_CMOVPO = 368 302 0000026F 434D4F56504F <3> db %$string 302 <3> %pop 303 00000100 FA68C3 <2> variant 14bh, 8, ASM_MACH6 303 ****************** <2> expansion: ainfo = 26819 303 ****************** <2> expansion: escaped = 104 303 ****************** <2> expansion: escapes = 0 304 00000103 FF <2> endvariant 305 <2> mne CMOVS ; ofs=108h 305 <3> %push 305 <3> usesection ASMTABLE2, 1 305 <3> %assign %$currofs $ - asmtab 305 ****************** <3> expansion: currofs = 260 305 <3> %ifnempty %2 305 <3> db %2 305 <3> %endif 305 <3> __SECT__ 305 <3> %defstr %$string %1 305 ****************** <3> expansion: string = 'CMOVS' 305 <3> %strlen %$string_size %$string 305 ****************** <3> expansion: string_size = 5 305 <3> %if %$string_size > 15 305 <3> %error Mnemonic %1 is too long! 305 <3> %endif 305 00000275 4510 <3> dw (%$currofs)<<4|%$string_size 305 <3> %assign MN_%1 $ - mnlist 305 ****************** <3> expansion: MN_CMOVS = 376 305 00000277 434D4F5653 <3> db %$string 305 <3> %pop 306 00000104 FA67D0 <2> variant 148h, 8, ASM_MACH6 306 ****************** <2> expansion: ainfo = 26576 306 ****************** <2> expansion: escaped = 103 306 ****************** <2> expansion: escapes = 0 307 00000107 FF <2> endvariant 308 <2> mne CMOVZ ; ofs=10Ch 308 <3> %push 308 <3> usesection ASMTABLE2, 1 308 <3> %assign %$currofs $ - asmtab 308 ****************** <3> expansion: currofs = 264 308 <3> %ifnempty %2 308 <3> db %2 308 <3> %endif 308 <3> __SECT__ 308 <3> %defstr %$string %1 308 ****************** <3> expansion: string = 'CMOVZ' 308 <3> %strlen %$string_size %$string 308 ****************** <3> expansion: string_size = 5 308 <3> %if %$string_size > 15 308 <3> %error Mnemonic %1 is too long! 308 <3> %endif 308 0000027C 8510 <3> dw (%$currofs)<<4|%$string_size 308 <3> %assign MN_%1 $ - mnlist 308 ****************** <3> expansion: MN_CMOVZ = 383 308 0000027E 434D4F565A <3> db %$string 308 <3> %pop 309 00000108 FA668C <2> variant 144h, 8, ASM_MACH6 309 ****************** <2> expansion: ainfo = 26252 309 ****************** <2> expansion: escaped = 102 309 ****************** <2> expansion: escapes = 0 310 0000010B FF <2> endvariant 311 <2> mne CMP ; ofs=110h 311 <3> %push 311 <3> usesection ASMTABLE2, 1 311 <3> %assign %$currofs $ - asmtab 311 ****************** <3> expansion: currofs = 268 311 <3> %ifnempty %2 311 <3> db %2 311 <3> %endif 311 <3> __SECT__ 311 <3> %defstr %$string %1 311 ****************** <3> expansion: string = 'CMP' 311 <3> %strlen %$string_size %$string 311 ****************** <3> expansion: string_size = 3 311 <3> %if %$string_size > 15 311 <3> %error Mnemonic %1 is too long! 311 <3> %endif 311 00000283 C310 <3> dw (%$currofs)<<4|%$string_size 311 <3> %assign MN_%1 $ - mnlist 311 ****************** <3> expansion: MN_CMP = 390 311 00000285 434D50 <3> db %$string 311 <3> %pop 312 0000010C BB02 <2> variant AGRP(1,7), 3 312 ****************** <2> expansion: ainfo = 47874 312 ****************** <2> expansion: escaped = 187 312 ****************** <2> expansion: escapes = 0 313 0000010E 12FD <2> variant 03ch, 1 313 ****************** <2> expansion: ainfo = 4861 313 ****************** <2> expansion: escaped = 18 313 ****************** <2> expansion: escapes = 0 314 00000110 BD89 <2> variant AGRP(2,7), 2 314 ****************** <2> expansion: ainfo = 48521 314 ****************** <2> expansion: escaped = 189 314 ****************** <2> expansion: escapes = 0 315 00000112 11BC <2> variant 038h, 4 315 ****************** <2> expansion: ainfo = 4540 315 ****************** <2> expansion: escaped = 17 315 ****************** <2> expansion: escapes = 0 316 00000114 125F <2> variant 03ah, 5 316 ****************** <2> expansion: ainfo = 4703 316 ****************** <2> expansion: escaped = 18 316 ****************** <2> expansion: escapes = 0 317 00000116 FF <2> endvariant 318 <2> mne CMPSB ; ofs=11Bh 318 <3> %push 318 <3> usesection ASMTABLE2, 1 318 <3> %assign %$currofs $ - asmtab 318 ****************** <3> expansion: currofs = 279 318 <3> %ifnempty %2 318 <3> db %2 318 <3> %endif 318 <3> __SECT__ 318 <3> %defstr %$string %1 318 ****************** <3> expansion: string = 'CMPSB' 318 <3> %strlen %$string_size %$string 318 ****************** <3> expansion: string_size = 5 318 <3> %if %$string_size > 15 318 <3> %error Mnemonic %1 is too long! 318 <3> %endif 318 00000288 7511 <3> dw (%$currofs)<<4|%$string_size 318 <3> %assign MN_%1 $ - mnlist 318 ****************** <3> expansion: MN_CMPSB = 395 318 0000028A 434D505342 <3> db %$string 318 <3> %pop 319 00000117 3486 <2> variant 0a6h, 0 319 ****************** <2> expansion: ainfo = 13446 319 ****************** <2> expansion: escaped = 52 319 ****************** <2> expansion: escapes = 0 320 00000119 FF <2> endvariant 321 <2> mne CMPXCHG ; ofs=121h 321 <3> %push 321 <3> usesection ASMTABLE2, 1 321 <3> %assign %$currofs $ - asmtab 321 ****************** <3> expansion: currofs = 282 321 <3> %ifnempty %2 321 <3> db %2 321 <3> %endif 321 <3> __SECT__ 321 <3> %defstr %$string %1 321 ****************** <3> expansion: string = 'CMPXCHG' 321 <3> %strlen %$string_size %$string 321 ****************** <3> expansion: string_size = 7 321 <3> %if %$string_size > 15 321 <3> %error Mnemonic %1 is too long! 321 <3> %endif 321 0000028F A711 <3> dw (%$currofs)<<4|%$string_size 321 <3> %assign MN_%1 $ - mnlist 321 ****************** <3> expansion: MN_CMPXCHG = 402 321 00000291 434D5058434847 <3> db %$string 321 <3> %pop 322 0000011A FBF888B4 <2> variant 1b0h, 4, ASM_LOCKABLE, ASM_MACH4 322 ****************** <2> expansion: ainfo = 34996 322 ****************** <2> expansion: escaped = 136 322 ****************** <2> expansion: escapes = 0 323 0000011E FF <2> endvariant 324 <2> mne CMPXCHG8B ; ofs=126h 324 <3> %push 324 <3> usesection ASMTABLE2, 1 324 <3> %assign %$currofs $ - asmtab 324 ****************** <3> expansion: currofs = 287 324 <3> %ifnempty %2 324 <3> db %2 324 <3> %endif 324 <3> __SECT__ 324 <3> %defstr %$string %1 324 ****************** <3> expansion: string = 'CMPXCHG8B' 324 <3> %strlen %$string_size %$string 324 ****************** <3> expansion: string_size = 9 324 <3> %if %$string_size > 15 324 <3> %error Mnemonic %1 is too long! 324 <3> %endif 324 00000298 F911 <3> dw (%$currofs)<<4|%$string_size 324 <3> %assign MN_%1 $ - mnlist 324 ****************** <3> expansion: MN_CMPXCHG8B = 411 324 0000029A 434D50584348473842 <3> db %$string 324 <3> %pop 325 0000011F F9C348 <2> variant AGRP(5,1), 15, ASM_MACH5 325 ****************** <2> expansion: ainfo = 49992 325 ****************** <2> expansion: escaped = 195 325 ****************** <2> expansion: escapes = 0 326 00000122 FF <2> endvariant 327 <2> mne CPUID ; ofs=12Ah 327 <3> %push 327 <3> usesection ASMTABLE2, 1 327 <3> %assign %$currofs $ - asmtab 327 ****************** <3> expansion: currofs = 291 327 <3> %ifnempty %2 327 <3> db %2 327 <3> %endif 327 <3> __SECT__ 327 <3> %defstr %$string %1 327 ****************** <3> expansion: string = 'CPUID' 327 <3> %strlen %$string_size %$string 327 ****************** <3> expansion: string_size = 5 327 <3> %if %$string_size > 15 327 <3> %error Mnemonic %1 is too long! 327 <3> %endif 327 000002A3 3512 <3> dw (%$currofs)<<4|%$string_size 327 <3> %assign MN_%1 $ - mnlist 327 ****************** <3> expansion: MN_CPUID = 422 327 000002A5 4350554944 <3> db %$string 327 <3> %pop 328 00000123 F98442 <2> variant 1a2h, 0, ASM_MACH5 328 ****************** <2> expansion: ainfo = 33858 328 ****************** <2> expansion: escaped = 132 328 ****************** <2> expansion: escapes = 0 329 00000126 FF <2> endvariant 330 <2> mne CWD, ASM_D16 ; ofs=12Eh 330 <3> %push 330 <3> usesection ASMTABLE2, 1 330 <3> %assign %$currofs $ - asmtab 330 ****************** <3> expansion: currofs = 295 330 <3> %ifnempty %2 330 00000127 FC <3> db %2 330 <3> %endif 330 <3> __SECT__ 330 <3> %defstr %$string %1 330 ****************** <3> expansion: string = 'CWD' 330 <3> %strlen %$string_size %$string 330 ****************** <3> expansion: string_size = 3 330 <3> %if %$string_size > 15 330 <3> %error Mnemonic %1 is too long! 330 <3> %endif 330 000002AA 7312 <3> dw (%$currofs)<<4|%$string_size 330 <3> %assign MN_%1 $ - mnlist 330 ****************** <3> expansion: MN_CWD = 429 330 000002AC 435744 <3> db %$string 330 <3> %pop 331 <2> mne CDQ, ASM_D32 ; ofs=12Fh 331 <3> %push 331 <3> usesection ASMTABLE2, 1 331 <3> %assign %$currofs $ - asmtab 331 ****************** <3> expansion: currofs = 296 331 <3> %ifnempty %2 331 00000128 FD <3> db %2 331 <3> %endif 331 <3> __SECT__ 331 <3> %defstr %$string %1 331 ****************** <3> expansion: string = 'CDQ' 331 <3> %strlen %$string_size %$string 331 ****************** <3> expansion: string_size = 3 331 <3> %if %$string_size > 15 331 <3> %error Mnemonic %1 is too long! 331 <3> %endif 331 000002AF 8312 <3> dw (%$currofs)<<4|%$string_size 331 <3> %assign MN_%1 $ - mnlist 331 ****************** <3> expansion: MN_CDQ = 434 331 000002B1 434451 <3> db %$string 331 <3> %pop 332 00000129 3069 <2> variant 099h, 0 332 ****************** <2> expansion: ainfo = 12393 332 ****************** <2> expansion: escaped = 48 332 ****************** <2> expansion: escapes = 0 333 0000012B FF <2> endvariant 334 <2> mne DAA ; ofs=133h 334 <3> %push 334 <3> usesection ASMTABLE2, 1 334 <3> %assign %$currofs $ - asmtab 334 ****************** <3> expansion: currofs = 300 334 <3> %ifnempty %2 334 <3> db %2 334 <3> %endif 334 <3> __SECT__ 334 <3> %defstr %$string %1 334 ****************** <3> expansion: string = 'DAA' 334 <3> %strlen %$string_size %$string 334 ****************** <3> expansion: string_size = 3 334 <3> %if %$string_size > 15 334 <3> %error Mnemonic %1 is too long! 334 <3> %endif 334 000002B4 C312 <3> dw (%$currofs)<<4|%$string_size 334 <3> %assign MN_%1 $ - mnlist 334 ****************** <3> expansion: MN_DAA = 439 334 000002B6 444141 <3> db %$string 334 <3> %pop 335 0000012C 0C57 <2> variant 027h, 0 335 ****************** <2> expansion: ainfo = 3159 335 ****************** <2> expansion: escaped = 12 335 ****************** <2> expansion: escapes = 0 336 0000012E FF <2> endvariant 337 <2> mne DAS ; ofs=136h 337 <3> %push 337 <3> usesection ASMTABLE2, 1 337 <3> %assign %$currofs $ - asmtab 337 ****************** <3> expansion: currofs = 303 337 <3> %ifnempty %2 337 <3> db %2 337 <3> %endif 337 <3> __SECT__ 337 <3> %defstr %$string %1 337 ****************** <3> expansion: string = 'DAS' 337 <3> %strlen %$string_size %$string 337 ****************** <3> expansion: string_size = 3 337 <3> %if %$string_size > 15 337 <3> %error Mnemonic %1 is too long! 337 <3> %endif 337 000002B9 F312 <3> dw (%$currofs)<<4|%$string_size 337 <3> %assign MN_%1 $ - mnlist 337 ****************** <3> expansion: MN_DAS = 444 337 000002BB 444153 <3> db %$string 337 <3> %pop 338 0000012F 0EDF <2> variant 02fh, 0 338 ****************** <2> expansion: ainfo = 3807 338 ****************** <2> expansion: escaped = 14 338 ****************** <2> expansion: escapes = 0 339 00000131 FF <2> endvariant 340 <2> mne DB, ASM_SPECIAL ; ofs=139h 340 <3> %push 340 <3> usesection ASMTABLE2, 1 340 <3> %assign %$currofs $ - asmtab 340 ****************** <3> expansion: currofs = 306 340 <3> %ifnempty %2 340 00000132 FF <3> db %2 340 <3> %endif 340 <3> __SECT__ 340 <3> %defstr %$string %1 340 ****************** <3> expansion: string = 'DB' 340 <3> %strlen %$string_size %$string 340 ****************** <3> expansion: string_size = 2 340 <3> %if %$string_size > 15 340 <3> %error Mnemonic %1 is too long! 340 <3> %endif 340 000002BE 2213 <3> dw (%$currofs)<<4|%$string_size 340 <3> %assign MN_%1 $ - mnlist 340 ****************** <3> expansion: MN_DB = 449 340 000002C0 4442 <3> db %$string 340 <3> %pop 341 <2> mne DD, ASM_SPECIAL ; ofs=13Bh 341 <3> %push 341 <3> usesection ASMTABLE2, 1 341 <3> %assign %$currofs $ - asmtab 341 ****************** <3> expansion: currofs = 307 341 <3> %ifnempty %2 341 00000133 FF <3> db %2 341 <3> %endif 341 <3> __SECT__ 341 <3> %defstr %$string %1 341 ****************** <3> expansion: string = 'DD' 341 <3> %strlen %$string_size %$string 341 ****************** <3> expansion: string_size = 2 341 <3> %if %$string_size > 15 341 <3> %error Mnemonic %1 is too long! 341 <3> %endif 341 000002C2 3213 <3> dw (%$currofs)<<4|%$string_size 341 <3> %assign MN_%1 $ - mnlist 341 ****************** <3> expansion: MN_DD = 453 341 000002C4 4444 <3> db %$string 341 <3> %pop 342 <2> mne DEC ; ofs=13Dh 342 <3> %push 342 <3> usesection ASMTABLE2, 1 342 <3> %assign %$currofs $ - asmtab 342 ****************** <3> expansion: currofs = 308 342 <3> %ifnempty %2 342 <3> db %2 342 <3> %endif 342 <3> __SECT__ 342 <3> %defstr %$string %1 342 ****************** <3> expansion: string = 'DEC' 342 <3> %strlen %$string_size %$string 342 ****************** <3> expansion: string_size = 3 342 <3> %if %$string_size > 15 342 <3> %error Mnemonic %1 is too long! 342 <3> %endif 342 000002C6 4313 <3> dw (%$currofs)<<4|%$string_size 342 <3> %assign MN_%1 $ - mnlist 342 ****************** <3> expansion: MN_DEC = 457 342 000002C8 444543 <3> db %$string 342 <3> %pop 343 00000134 16D9 <2> variant 048h, 17 343 ****************** <2> expansion: ainfo = 5849 343 ****************** <2> expansion: escaped = 22 343 ****************** <2> expansion: escapes = 0 344 00000136 FBB6A1 <2> variant AGRP(0,1), 16, ASM_LOCKABLE 344 ****************** <2> expansion: ainfo = 46753 344 ****************** <2> expansion: escaped = 182 344 ****************** <2> expansion: escapes = 0 345 00000139 FF <2> endvariant 346 <2> mne DIV ; ofs=143h 346 <3> %push 346 <3> usesection ASMTABLE2, 1 346 <3> %assign %$currofs $ - asmtab 346 ****************** <3> expansion: currofs = 314 346 <3> %ifnempty %2 346 <3> db %2 346 <3> %endif 346 <3> __SECT__ 346 <3> %defstr %$string %1 346 ****************** <3> expansion: string = 'DIV' 346 <3> %strlen %$string_size %$string 346 ****************** <3> expansion: string_size = 3 346 <3> %if %$string_size > 15 346 <3> %error Mnemonic %1 is too long! 346 <3> %endif 346 000002CB A313 <3> dw (%$currofs)<<4|%$string_size 346 <3> %assign MN_%1 $ - mnlist 346 ****************** <3> expansion: MN_DIV = 462 346 000002CD 444956 <3> db %$string 346 <3> %pop 347 0000013A C766 <2> variant AGRP(6,6), 16 347 ****************** <2> expansion: ainfo = 51046 347 ****************** <2> expansion: escaped = 199 347 ****************** <2> expansion: escapes = 0 348 0000013C FF <2> endvariant 349 <2> mne DW, ASM_SPECIAL ; ofs=146h 349 <3> %push 349 <3> usesection ASMTABLE2, 1 349 <3> %assign %$currofs $ - asmtab 349 ****************** <3> expansion: currofs = 317 349 <3> %ifnempty %2 349 0000013D FF <3> db %2 349 <3> %endif 349 <3> __SECT__ 349 <3> %defstr %$string %1 349 ****************** <3> expansion: string = 'DW' 349 <3> %strlen %$string_size %$string 349 ****************** <3> expansion: string_size = 2 349 <3> %if %$string_size > 15 349 <3> %error Mnemonic %1 is too long! 349 <3> %endif 349 000002D0 D213 <3> dw (%$currofs)<<4|%$string_size 349 <3> %assign MN_%1 $ - mnlist 349 ****************** <3> expansion: MN_DW = 467 349 000002D2 4457 <3> db %$string 349 <3> %pop 350 <2> mne EMMS ; ofs=148h 350 <3> %push 350 <3> usesection ASMTABLE2, 1 350 <3> %assign %$currofs $ - asmtab 350 ****************** <3> expansion: currofs = 318 350 <3> %ifnempty %2 350 <3> db %2 350 <3> %endif 350 <3> __SECT__ 350 <3> %defstr %$string %1 350 ****************** <3> expansion: string = 'EMMS' 350 <3> %strlen %$string_size %$string 350 ****************** <3> expansion: string_size = 4 350 <3> %if %$string_size > 15 350 <3> %error Mnemonic %1 is too long! 350 <3> %endif 350 000002D4 E413 <3> dw (%$currofs)<<4|%$string_size 350 <3> %assign MN_%1 $ - mnlist 350 ****************** <3> expansion: MN_EMMS = 471 350 000002D6 454D4D53 <3> db %$string 350 <3> %pop 351 0000013E F976A7 <2> variant 177h, 0, ASM_MACH5 351 ****************** <2> expansion: ainfo = 30375 351 ****************** <2> expansion: escaped = 118 351 ****************** <2> expansion: escapes = 0 352 00000141 FF <2> endvariant 353 <2> mne F2XM1 ; ofs=150h 353 <3> %push 353 <3> usesection ASMTABLE2, 1 353 <3> %assign %$currofs $ - asmtab 353 ****************** <3> expansion: currofs = 322 353 <3> %ifnempty %2 353 <3> db %2 353 <3> %endif 353 <3> __SECT__ 353 <3> %defstr %$string %1 353 ****************** <3> expansion: string = 'F2XM1' 353 <3> %strlen %$string_size %$string 353 ****************** <3> expansion: string_size = 5 353 <3> %if %$string_size > 15 353 <3> %error Mnemonic %1 is too long! 353 <3> %endif 353 000002DA 2514 <3> dw (%$currofs)<<4|%$string_size 353 <3> %assign MN_%1 $ - mnlist 353 ****************** <3> expansion: MN_F2XM1 = 477 353 000002DC 4632584D31 <3> db %$string 353 <3> %pop 354 00000142 44A9F0 <2> fpvariant 0d9h, 0, 0f0h 354 ****************** <2> expansion: ainfo = 17577 354 ****************** <2> expansion: escaped = 68 354 ****************** <2> expansion: escapes = 0 355 00000145 FF <2> endvariant 356 <2> mne FABS ; ofs=154h 356 <3> %push 356 <3> usesection ASMTABLE2, 1 356 <3> %assign %$currofs $ - asmtab 356 ****************** <3> expansion: currofs = 326 356 <3> %ifnempty %2 356 <3> db %2 356 <3> %endif 356 <3> __SECT__ 356 <3> %defstr %$string %1 356 ****************** <3> expansion: string = 'FABS' 356 <3> %strlen %$string_size %$string 356 ****************** <3> expansion: string_size = 4 356 <3> %if %$string_size > 15 356 <3> %error Mnemonic %1 is too long! 356 <3> %endif 356 000002E1 6414 <3> dw (%$currofs)<<4|%$string_size 356 <3> %assign MN_%1 $ - mnlist 356 ****************** <3> expansion: MN_FABS = 484 356 000002E3 46414253 <3> db %$string 356 <3> %pop 357 00000146 44A9E1 <2> fpvariant 0d9h, 0, 0e1h 357 ****************** <2> expansion: ainfo = 17577 357 ****************** <2> expansion: escaped = 68 357 ****************** <2> expansion: escapes = 0 358 00000149 FF <2> endvariant 359 <2> mne FADD ; ofs=158h 359 <3> %push 359 <3> usesection ASMTABLE2, 1 359 <3> %assign %$currofs $ - asmtab 359 ****************** <3> expansion: currofs = 330 359 <3> %ifnempty %2 359 <3> db %2 359 <3> %endif 359 <3> __SECT__ 359 <3> %defstr %$string %1 359 ****************** <3> expansion: string = 'FADD' 359 <3> %strlen %$string_size %$string 359 ****************** <3> expansion: string_size = 4 359 <3> %if %$string_size > 15 359 <3> %error Mnemonic %1 is too long! 359 <3> %endif 359 000002E7 A414 <3> dw (%$currofs)<<4|%$string_size 359 <3> %assign MN_%1 $ - mnlist 359 ****************** <3> expansion: MN_FADD = 490 359 000002E9 46414444 <3> db %$string 359 <3> %pop 360 0000014A A213 <2> variant 200h, 19 360 ****************** <2> expansion: ainfo = 41491 360 ****************** <2> expansion: escaped = 162 360 ****************** <2> expansion: escapes = 0 361 0000014C A358 <2> variant 204h, 20 361 ****************** <2> expansion: ainfo = 41816 361 ****************** <2> expansion: escaped = 163 361 ****************** <2> expansion: escapes = 0 362 0000014E 446DC0 <2> fpvariant 0d8h, 21, 0c0h 362 ****************** <2> expansion: ainfo = 17517 362 ****************** <2> expansion: escaped = 68 362 ****************** <2> expansion: escapes = 0 363 00000151 45B2C0 <2> fpvariant 0dch, 22, 0c0h 363 ****************** <2> expansion: ainfo = 17842 363 ****************** <2> expansion: escaped = 69 363 ****************** <2> expansion: escapes = 0 364 00000154 FF <2> endvariant 365 <2> mne FADDP ; ofs=163h 365 <3> %push 365 <3> usesection ASMTABLE2, 1 365 <3> %assign %$currofs $ - asmtab 365 ****************** <3> expansion: currofs = 341 365 <3> %ifnempty %2 365 <3> db %2 365 <3> %endif 365 <3> __SECT__ 365 <3> %defstr %$string %1 365 ****************** <3> expansion: string = 'FADDP' 365 <3> %strlen %$string_size %$string 365 ****************** <3> expansion: string_size = 5 365 <3> %if %$string_size > 15 365 <3> %error Mnemonic %1 is too long! 365 <3> %endif 365 000002ED 5515 <3> dw (%$currofs)<<4|%$string_size 365 <3> %assign MN_%1 $ - mnlist 365 ****************** <3> expansion: MN_FADDP = 496 365 000002EF 4641444450 <3> db %$string 365 <3> %pop 366 00000155 4655C0 <2> fpvariant 0deh, 23, 0c0h 366 ****************** <2> expansion: ainfo = 18005 366 ****************** <2> expansion: escaped = 70 366 ****************** <2> expansion: escapes = 0 367 00000158 463EC1 <2> fpvariant 0deh, 0, 0c1h 367 ****************** <2> expansion: ainfo = 17982 367 ****************** <2> expansion: escaped = 70 367 ****************** <2> expansion: escapes = 0 368 0000015B FF <2> endvariant 369 <2> mne FIADD ; ofs=16Ah 369 <3> %push 369 <3> usesection ASMTABLE2, 1 369 <3> %assign %$currofs $ - asmtab 369 ****************** <3> expansion: currofs = 348 369 <3> %ifnempty %2 369 <3> db %2 369 <3> %endif 369 <3> __SECT__ 369 <3> %defstr %$string %1 369 ****************** <3> expansion: string = 'FIADD' 369 <3> %strlen %$string_size %$string 369 ****************** <3> expansion: string_size = 5 369 <3> %if %$string_size > 15 369 <3> %error Mnemonic %1 is too long! 369 <3> %endif 369 000002F4 C515 <3> dw (%$currofs)<<4|%$string_size 369 <3> %assign MN_%1 $ - mnlist 369 ****************** <3> expansion: MN_FIADD = 503 369 000002F6 4649414444 <3> db %$string 369 <3> %pop 370 0000015C A2BA <2> variant 202h, 24 370 ****************** <2> expansion: ainfo = 41658 370 ****************** <2> expansion: escaped = 162 370 ****************** <2> expansion: escapes = 0 371 0000015E A3FF <2> variant 206h, 25 371 ****************** <2> expansion: ainfo = 41983 371 ****************** <2> expansion: escaped = 163 371 ****************** <2> expansion: escapes = 0 372 00000160 FF <2> endvariant 373 <2> mne FBLD ; ofs=16Fh 373 <3> %push 373 <3> usesection ASMTABLE2, 1 373 <3> %assign %$currofs $ - asmtab 373 ****************** <3> expansion: currofs = 353 373 <3> %ifnempty %2 373 <3> db %2 373 <3> %endif 373 <3> __SECT__ 373 <3> %defstr %$string %1 373 ****************** <3> expansion: string = 'FBLD' 373 <3> %strlen %$string_size %$string 373 ****************** <3> expansion: string_size = 4 373 <3> %if %$string_size > 15 373 <3> %error Mnemonic %1 is too long! 373 <3> %endif 373 000002FB 1416 <3> dw (%$currofs)<<4|%$string_size 373 <3> %assign MN_%1 $ - mnlist 373 ****************** <3> expansion: MN_FBLD = 510 373 000002FD 46424C44 <3> db %$string 373 <3> %pop 374 00000161 AE71 <2> variant 227h, 26 374 ****************** <2> expansion: ainfo = 44657 374 ****************** <2> expansion: escaped = 174 374 ****************** <2> expansion: escapes = 0 375 00000163 FF <2> endvariant 376 <2> mne FBSTP ; ofs=172h 376 <3> %push 376 <3> usesection ASMTABLE2, 1 376 <3> %assign %$currofs $ - asmtab 376 ****************** <3> expansion: currofs = 356 376 <3> %ifnempty %2 376 <3> db %2 376 <3> %endif 376 <3> __SECT__ 376 <3> %defstr %$string %1 376 ****************** <3> expansion: string = 'FBSTP' 376 <3> %strlen %$string_size %$string 376 ****************** <3> expansion: string_size = 5 376 <3> %if %$string_size > 15 376 <3> %error Mnemonic %1 is too long! 376 <3> %endif 376 00000301 4516 <3> dw (%$currofs)<<4|%$string_size 376 <3> %assign MN_%1 $ - mnlist 376 ****************** <3> expansion: MN_FBSTP = 516 376 00000303 4642535450 <3> db %$string 376 <3> %pop 377 00000164 B381 <2> variant 237h, 26 377 ****************** <2> expansion: ainfo = 45953 377 ****************** <2> expansion: escaped = 179 377 ****************** <2> expansion: escapes = 0 378 00000166 FF <2> endvariant 379 <2> mne FCHS ; ofs=175h 379 <3> %push 379 <3> usesection ASMTABLE2, 1 379 <3> %assign %$currofs $ - asmtab 379 ****************** <3> expansion: currofs = 359 379 <3> %ifnempty %2 379 <3> db %2 379 <3> %endif 379 <3> __SECT__ 379 <3> %defstr %$string %1 379 ****************** <3> expansion: string = 'FCHS' 379 <3> %strlen %$string_size %$string 379 ****************** <3> expansion: string_size = 4 379 <3> %if %$string_size > 15 379 <3> %error Mnemonic %1 is too long! 379 <3> %endif 379 00000308 7416 <3> dw (%$currofs)<<4|%$string_size 379 <3> %assign MN_%1 $ - mnlist 379 ****************** <3> expansion: MN_FCHS = 523 379 0000030A 46434853 <3> db %$string 379 <3> %pop 380 00000167 44A9E0 <2> fpvariant 0d9h, 0, 0e0h 380 ****************** <2> expansion: ainfo = 17577 380 ****************** <2> expansion: escaped = 68 380 ****************** <2> expansion: escapes = 0 381 0000016A FF <2> endvariant 382 <2> mne FCLEX, ASM_WAIT ; ofs=179h 382 <3> %push 382 <3> usesection ASMTABLE2, 1 382 <3> %assign %$currofs $ - asmtab 382 ****************** <3> expansion: currofs = 363 382 <3> %ifnempty %2 382 0000016B FE <3> db %2 382 <3> %endif 382 <3> __SECT__ 382 <3> %defstr %$string %1 382 ****************** <3> expansion: string = 'FCLEX' 382 <3> %strlen %$string_size %$string 382 ****************** <3> expansion: string_size = 5 382 <3> %if %$string_size > 15 382 <3> %error Mnemonic %1 is too long! 382 <3> %endif 382 0000030E B516 <3> dw (%$currofs)<<4|%$string_size 382 <3> %assign MN_%1 $ - mnlist 382 ****************** <3> expansion: MN_FCLEX = 529 382 00000310 46434C4558 <3> db %$string 382 <3> %pop 383 <2> mne FNCLEX ; ofs=17Ah 383 <3> %push 383 <3> usesection ASMTABLE2, 1 383 <3> %assign %$currofs $ - asmtab 383 ****************** <3> expansion: currofs = 364 383 <3> %ifnempty %2 383 <3> db %2 383 <3> %endif 383 <3> __SECT__ 383 <3> %defstr %$string %1 383 ****************** <3> expansion: string = 'FNCLEX' 383 <3> %strlen %$string_size %$string 383 ****************** <3> expansion: string_size = 6 383 <3> %if %$string_size > 15 383 <3> %error Mnemonic %1 is too long! 383 <3> %endif 383 00000315 C616 <3> dw (%$currofs)<<4|%$string_size 383 <3> %assign MN_%1 $ - mnlist 383 ****************** <3> expansion: MN_FNCLEX = 536 383 00000317 464E434C4558 <3> db %$string 383 <3> %pop 384 0000016C 454BE2 <2> fpvariant 0dbh, 0, 0e2h 384 ****************** <2> expansion: ainfo = 17739 384 ****************** <2> expansion: escaped = 69 384 ****************** <2> expansion: escapes = 0 385 0000016F FF <2> endvariant 386 <2> mne FCMOVA ; ofs=17Eh 386 <3> %push 386 <3> usesection ASMTABLE2, 1 386 <3> %assign %$currofs $ - asmtab 386 ****************** <3> expansion: currofs = 368 386 <3> %ifnempty %2 386 <3> db %2 386 <3> %endif 386 <3> __SECT__ 386 <3> %defstr %$string %1 386 ****************** <3> expansion: string = 'FCMOVA' 386 <3> %strlen %$string_size %$string 386 ****************** <3> expansion: string_size = 6 386 <3> %if %$string_size > 15 386 <3> %error Mnemonic %1 is too long! 386 <3> %endif 386 0000031D 0617 <3> dw (%$currofs)<<4|%$string_size 386 <3> %assign MN_%1 $ - mnlist 386 ****************** <3> expansion: MN_FCMOVA = 544 386 0000031F 46434D4F5641 <3> db %$string 386 <3> %pop 387 00000170 FA4560D0 <2> fpvariant 0dbh, 21, 0d0h, ASM_MACH6 387 ****************** <2> expansion: ainfo = 17760 387 ****************** <2> expansion: escaped = 69 387 ****************** <2> expansion: escapes = 0 388 00000174 FF <2> endvariant 389 <2> mne FCMOVAE ; ofs=183h 389 <3> %push 389 <3> usesection ASMTABLE2, 1 389 <3> %assign %$currofs $ - asmtab 389 ****************** <3> expansion: currofs = 373 389 <3> %ifnempty %2 389 <3> db %2 389 <3> %endif 389 <3> __SECT__ 389 <3> %defstr %$string %1 389 ****************** <3> expansion: string = 'FCMOVAE' 389 <3> %strlen %$string_size %$string 389 ****************** <3> expansion: string_size = 7 389 <3> %if %$string_size > 15 389 <3> %error Mnemonic %1 is too long! 389 <3> %endif 389 00000325 5717 <3> dw (%$currofs)<<4|%$string_size 389 <3> %assign MN_%1 $ - mnlist 389 ****************** <3> expansion: MN_FCMOVAE = 552 389 00000327 46434D4F564145 <3> db %$string 389 <3> %pop 390 00000175 FA4560C0 <2> fpvariant 0dbh, 21, 0c0h, ASM_MACH6 390 ****************** <2> expansion: ainfo = 17760 390 ****************** <2> expansion: escaped = 69 390 ****************** <2> expansion: escapes = 0 391 00000179 FF <2> endvariant 392 <2> mne FCMOVB ; ofs=188h 392 <3> %push 392 <3> usesection ASMTABLE2, 1 392 <3> %assign %$currofs $ - asmtab 392 ****************** <3> expansion: currofs = 378 392 <3> %ifnempty %2 392 <3> db %2 392 <3> %endif 392 <3> __SECT__ 392 <3> %defstr %$string %1 392 ****************** <3> expansion: string = 'FCMOVB' 392 <3> %strlen %$string_size %$string 392 ****************** <3> expansion: string_size = 6 392 <3> %if %$string_size > 15 392 <3> %error Mnemonic %1 is too long! 392 <3> %endif 392 0000032E A617 <3> dw (%$currofs)<<4|%$string_size 392 <3> %assign MN_%1 $ - mnlist 392 ****************** <3> expansion: MN_FCMOVB = 561 392 00000330 46434D4F5642 <3> db %$string 392 <3> %pop 393 0000017A FA450FC0 <2> fpvariant 0dah, 21, 0c0h, ASM_MACH6 393 ****************** <2> expansion: ainfo = 17679 393 ****************** <2> expansion: escaped = 69 393 ****************** <2> expansion: escapes = 0 394 0000017E FF <2> endvariant 395 <2> mne FCMOVBE ; ofs=18Dh 395 <3> %push 395 <3> usesection ASMTABLE2, 1 395 <3> %assign %$currofs $ - asmtab 395 ****************** <3> expansion: currofs = 383 395 <3> %ifnempty %2 395 <3> db %2 395 <3> %endif 395 <3> __SECT__ 395 <3> %defstr %$string %1 395 ****************** <3> expansion: string = 'FCMOVBE' 395 <3> %strlen %$string_size %$string 395 ****************** <3> expansion: string_size = 7 395 <3> %if %$string_size > 15 395 <3> %error Mnemonic %1 is too long! 395 <3> %endif 395 00000336 F717 <3> dw (%$currofs)<<4|%$string_size 395 <3> %assign MN_%1 $ - mnlist 395 ****************** <3> expansion: MN_FCMOVBE = 569 395 00000338 46434D4F564245 <3> db %$string 395 <3> %pop 396 0000017F FA450FD0 <2> fpvariant 0dah, 21, 0d0h, ASM_MACH6 396 ****************** <2> expansion: ainfo = 17679 396 ****************** <2> expansion: escaped = 69 396 ****************** <2> expansion: escapes = 0 397 00000183 FF <2> endvariant 398 <2> mne FCMOVE ; ofs=192h 398 <3> %push 398 <3> usesection ASMTABLE2, 1 398 <3> %assign %$currofs $ - asmtab 398 ****************** <3> expansion: currofs = 388 398 <3> %ifnempty %2 398 <3> db %2 398 <3> %endif 398 <3> __SECT__ 398 <3> %defstr %$string %1 398 ****************** <3> expansion: string = 'FCMOVE' 398 <3> %strlen %$string_size %$string 398 ****************** <3> expansion: string_size = 6 398 <3> %if %$string_size > 15 398 <3> %error Mnemonic %1 is too long! 398 <3> %endif 398 0000033F 4618 <3> dw (%$currofs)<<4|%$string_size 398 <3> %assign MN_%1 $ - mnlist 398 ****************** <3> expansion: MN_FCMOVE = 578 398 00000341 46434D4F5645 <3> db %$string 398 <3> %pop 399 00000184 FA450FC8 <2> fpvariant 0dah, 21, 0c8h, ASM_MACH6 399 ****************** <2> expansion: ainfo = 17679 399 ****************** <2> expansion: escaped = 69 399 ****************** <2> expansion: escapes = 0 400 00000188 FF <2> endvariant 401 <2> mne FCMOVNA ; ofs=197h 401 <3> %push 401 <3> usesection ASMTABLE2, 1 401 <3> %assign %$currofs $ - asmtab 401 ****************** <3> expansion: currofs = 393 401 <3> %ifnempty %2 401 <3> db %2 401 <3> %endif 401 <3> __SECT__ 401 <3> %defstr %$string %1 401 ****************** <3> expansion: string = 'FCMOVNA' 401 <3> %strlen %$string_size %$string 401 ****************** <3> expansion: string_size = 7 401 <3> %if %$string_size > 15 401 <3> %error Mnemonic %1 is too long! 401 <3> %endif 401 00000347 9718 <3> dw (%$currofs)<<4|%$string_size 401 <3> %assign MN_%1 $ - mnlist 401 ****************** <3> expansion: MN_FCMOVNA = 586 401 00000349 46434D4F564E41 <3> db %$string 401 <3> %pop 402 00000189 FA450FD0 <2> fpvariant 0dah, 21, 0d0h, ASM_MACH6 402 ****************** <2> expansion: ainfo = 17679 402 ****************** <2> expansion: escaped = 69 402 ****************** <2> expansion: escapes = 0 403 0000018D FF <2> endvariant 404 <2> mne FCMOVNAE ; ofs=19Ch 404 <3> %push 404 <3> usesection ASMTABLE2, 1 404 <3> %assign %$currofs $ - asmtab 404 ****************** <3> expansion: currofs = 398 404 <3> %ifnempty %2 404 <3> db %2 404 <3> %endif 404 <3> __SECT__ 404 <3> %defstr %$string %1 404 ****************** <3> expansion: string = 'FCMOVNAE' 404 <3> %strlen %$string_size %$string 404 ****************** <3> expansion: string_size = 8 404 <3> %if %$string_size > 15 404 <3> %error Mnemonic %1 is too long! 404 <3> %endif 404 00000350 E818 <3> dw (%$currofs)<<4|%$string_size 404 <3> %assign MN_%1 $ - mnlist 404 ****************** <3> expansion: MN_FCMOVNAE = 595 404 00000352 46434D4F564E4145 <3> db %$string 404 <3> %pop 405 0000018E FA450FC0 <2> fpvariant 0dah, 21, 0c0h, ASM_MACH6 405 ****************** <2> expansion: ainfo = 17679 405 ****************** <2> expansion: escaped = 69 405 ****************** <2> expansion: escapes = 0 406 00000192 FF <2> endvariant 407 <2> mne FCMOVNB ; ofs=1A1h 407 <3> %push 407 <3> usesection ASMTABLE2, 1 407 <3> %assign %$currofs $ - asmtab 407 ****************** <3> expansion: currofs = 403 407 <3> %ifnempty %2 407 <3> db %2 407 <3> %endif 407 <3> __SECT__ 407 <3> %defstr %$string %1 407 ****************** <3> expansion: string = 'FCMOVNB' 407 <3> %strlen %$string_size %$string 407 ****************** <3> expansion: string_size = 7 407 <3> %if %$string_size > 15 407 <3> %error Mnemonic %1 is too long! 407 <3> %endif 407 0000035A 3719 <3> dw (%$currofs)<<4|%$string_size 407 <3> %assign MN_%1 $ - mnlist 407 ****************** <3> expansion: MN_FCMOVNB = 605 407 0000035C 46434D4F564E42 <3> db %$string 407 <3> %pop 408 00000193 FA4560C0 <2> fpvariant 0dbh, 21, 0c0h, ASM_MACH6 408 ****************** <2> expansion: ainfo = 17760 408 ****************** <2> expansion: escaped = 69 408 ****************** <2> expansion: escapes = 0 409 00000197 FF <2> endvariant 410 <2> mne FCMOVNBE ; ofs=1A6h 410 <3> %push 410 <3> usesection ASMTABLE2, 1 410 <3> %assign %$currofs $ - asmtab 410 ****************** <3> expansion: currofs = 408 410 <3> %ifnempty %2 410 <3> db %2 410 <3> %endif 410 <3> __SECT__ 410 <3> %defstr %$string %1 410 ****************** <3> expansion: string = 'FCMOVNBE' 410 <3> %strlen %$string_size %$string 410 ****************** <3> expansion: string_size = 8 410 <3> %if %$string_size > 15 410 <3> %error Mnemonic %1 is too long! 410 <3> %endif 410 00000363 8819 <3> dw (%$currofs)<<4|%$string_size 410 <3> %assign MN_%1 $ - mnlist 410 ****************** <3> expansion: MN_FCMOVNBE = 614 410 00000365 46434D4F564E4245 <3> db %$string 410 <3> %pop 411 00000198 FA4560D0 <2> fpvariant 0dbh, 21, 0d0h, ASM_MACH6 411 ****************** <2> expansion: ainfo = 17760 411 ****************** <2> expansion: escaped = 69 411 ****************** <2> expansion: escapes = 0 412 0000019C FF <2> endvariant 413 <2> mne FCMOVNE ; ofs=1ABh 413 <3> %push 413 <3> usesection ASMTABLE2, 1 413 <3> %assign %$currofs $ - asmtab 413 ****************** <3> expansion: currofs = 413 413 <3> %ifnempty %2 413 <3> db %2 413 <3> %endif 413 <3> __SECT__ 413 <3> %defstr %$string %1 413 ****************** <3> expansion: string = 'FCMOVNE' 413 <3> %strlen %$string_size %$string 413 ****************** <3> expansion: string_size = 7 413 <3> %if %$string_size > 15 413 <3> %error Mnemonic %1 is too long! 413 <3> %endif 413 0000036D D719 <3> dw (%$currofs)<<4|%$string_size 413 <3> %assign MN_%1 $ - mnlist 413 ****************** <3> expansion: MN_FCMOVNE = 624 413 0000036F 46434D4F564E45 <3> db %$string 413 <3> %pop 414 0000019D FA4560C8 <2> fpvariant 0dbh, 21, 0c8h, ASM_MACH6 414 ****************** <2> expansion: ainfo = 17760 414 ****************** <2> expansion: escaped = 69 414 ****************** <2> expansion: escapes = 0 415 000001A1 FF <2> endvariant 416 <2> mne FCMOVNU ; ofs=1B0h 416 <3> %push 416 <3> usesection ASMTABLE2, 1 416 <3> %assign %$currofs $ - asmtab 416 ****************** <3> expansion: currofs = 418 416 <3> %ifnempty %2 416 <3> db %2 416 <3> %endif 416 <3> __SECT__ 416 <3> %defstr %$string %1 416 ****************** <3> expansion: string = 'FCMOVNU' 416 <3> %strlen %$string_size %$string 416 ****************** <3> expansion: string_size = 7 416 <3> %if %$string_size > 15 416 <3> %error Mnemonic %1 is too long! 416 <3> %endif 416 00000376 271A <3> dw (%$currofs)<<4|%$string_size 416 <3> %assign MN_%1 $ - mnlist 416 ****************** <3> expansion: MN_FCMOVNU = 633 416 00000378 46434D4F564E55 <3> db %$string 416 <3> %pop 417 000001A2 FA4560D8 <2> fpvariant 0dbh, 21, 0d8h, ASM_MACH6 417 ****************** <2> expansion: ainfo = 17760 417 ****************** <2> expansion: escaped = 69 417 ****************** <2> expansion: escapes = 0 418 000001A6 FF <2> endvariant 419 <2> mne FCMOVNZ ; ofs=1B5h 419 <3> %push 419 <3> usesection ASMTABLE2, 1 419 <3> %assign %$currofs $ - asmtab 419 ****************** <3> expansion: currofs = 423 419 <3> %ifnempty %2 419 <3> db %2 419 <3> %endif 419 <3> __SECT__ 419 <3> %defstr %$string %1 419 ****************** <3> expansion: string = 'FCMOVNZ' 419 <3> %strlen %$string_size %$string 419 ****************** <3> expansion: string_size = 7 419 <3> %if %$string_size > 15 419 <3> %error Mnemonic %1 is too long! 419 <3> %endif 419 0000037F 771A <3> dw (%$currofs)<<4|%$string_size 419 <3> %assign MN_%1 $ - mnlist 419 ****************** <3> expansion: MN_FCMOVNZ = 642 419 00000381 46434D4F564E5A <3> db %$string 419 <3> %pop 420 000001A7 FA4560C8 <2> fpvariant 0dbh, 21, 0c8h, ASM_MACH6 420 ****************** <2> expansion: ainfo = 17760 420 ****************** <2> expansion: escaped = 69 420 ****************** <2> expansion: escapes = 0 421 000001AB FF <2> endvariant 422 <2> mne FCMOVU ; ofs=1BAh 422 <3> %push 422 <3> usesection ASMTABLE2, 1 422 <3> %assign %$currofs $ - asmtab 422 ****************** <3> expansion: currofs = 428 422 <3> %ifnempty %2 422 <3> db %2 422 <3> %endif 422 <3> __SECT__ 422 <3> %defstr %$string %1 422 ****************** <3> expansion: string = 'FCMOVU' 422 <3> %strlen %$string_size %$string 422 ****************** <3> expansion: string_size = 6 422 <3> %if %$string_size > 15 422 <3> %error Mnemonic %1 is too long! 422 <3> %endif 422 00000388 C61A <3> dw (%$currofs)<<4|%$string_size 422 <3> %assign MN_%1 $ - mnlist 422 ****************** <3> expansion: MN_FCMOVU = 651 422 0000038A 46434D4F5655 <3> db %$string 422 <3> %pop 423 000001AC FA450FD8 <2> fpvariant 0dah, 21, 0d8h, ASM_MACH6 423 ****************** <2> expansion: ainfo = 17679 423 ****************** <2> expansion: escaped = 69 423 ****************** <2> expansion: escapes = 0 424 000001B0 FF <2> endvariant 425 <2> mne FCMOVZ ; ofs=1BFh 425 <3> %push 425 <3> usesection ASMTABLE2, 1 425 <3> %assign %$currofs $ - asmtab 425 ****************** <3> expansion: currofs = 433 425 <3> %ifnempty %2 425 <3> db %2 425 <3> %endif 425 <3> __SECT__ 425 <3> %defstr %$string %1 425 ****************** <3> expansion: string = 'FCMOVZ' 425 <3> %strlen %$string_size %$string 425 ****************** <3> expansion: string_size = 6 425 <3> %if %$string_size > 15 425 <3> %error Mnemonic %1 is too long! 425 <3> %endif 425 00000390 161B <3> dw (%$currofs)<<4|%$string_size 425 <3> %assign MN_%1 $ - mnlist 425 ****************** <3> expansion: MN_FCMOVZ = 659 425 00000392 46434D4F565A <3> db %$string 425 <3> %pop 426 000001B1 FA450FC8 <2> fpvariant 0dah, 21, 0c8h, ASM_MACH6 426 ****************** <2> expansion: ainfo = 17679 426 ****************** <2> expansion: escaped = 69 426 ****************** <2> expansion: escapes = 0 427 000001B5 FF <2> endvariant 428 <2> mne FCOM ; ofs=1C4h 428 <3> %push 428 <3> usesection ASMTABLE2, 1 428 <3> %assign %$currofs $ - asmtab 428 ****************** <3> expansion: currofs = 438 428 <3> %ifnempty %2 428 <3> db %2 428 <3> %endif 428 <3> __SECT__ 428 <3> %defstr %$string %1 428 ****************** <3> expansion: string = 'FCOM' 428 <3> %strlen %$string_size %$string 428 ****************** <3> expansion: string_size = 4 428 <3> %if %$string_size > 15 428 <3> %error Mnemonic %1 is too long! 428 <3> %endif 428 00000398 641B <3> dw (%$currofs)<<4|%$string_size 428 <3> %assign MN_%1 $ - mnlist 428 ****************** <3> expansion: MN_FCOM = 667 428 0000039A 46434F4D <3> db %$string 428 <3> %pop 429 000001B6 A723 <2> variant 210h, 19 429 ****************** <2> expansion: ainfo = 42787 429 ****************** <2> expansion: escaped = 167 429 ****************** <2> expansion: escapes = 0 430 000001B8 A868 <2> variant 214h, 20 430 ****************** <2> expansion: ainfo = 43112 430 ****************** <2> expansion: escaped = 168 430 ****************** <2> expansion: escapes = 0 431 000001BA 4474D0 <2> fpvariant 0d8h, 28, 0d0h 431 ****************** <2> expansion: ainfo = 17524 431 ****************** <2> expansion: escaped = 68 431 ****************** <2> expansion: escapes = 0 432 000001BD 4458D1 <2> fpvariant 0d8h, 0, 0d1h 432 ****************** <2> expansion: ainfo = 17496 432 ****************** <2> expansion: escaped = 68 432 ****************** <2> expansion: escapes = 0 433 000001C0 FF <2> endvariant 434 <2> mne FCOMI ; ofs=1CFh 434 <3> %push 434 <3> usesection ASMTABLE2, 1 434 <3> %assign %$currofs $ - asmtab 434 ****************** <3> expansion: currofs = 449 434 <3> %ifnempty %2 434 <3> db %2 434 <3> %endif 434 <3> __SECT__ 434 <3> %defstr %$string %1 434 ****************** <3> expansion: string = 'FCOMI' 434 <3> %strlen %$string_size %$string 434 ****************** <3> expansion: string_size = 5 434 <3> %if %$string_size > 15 434 <3> %error Mnemonic %1 is too long! 434 <3> %endif 434 0000039E 151C <3> dw (%$currofs)<<4|%$string_size 434 <3> %assign MN_%1 $ - mnlist 434 ****************** <3> expansion: MN_FCOMI = 673 434 000003A0 46434F4D49 <3> db %$string 434 <3> %pop 435 000001C1 FA4567F0 <2> fpvariant 0dbh, 28, 0f0h, ASM_MACH6 435 ****************** <2> expansion: ainfo = 17767 435 ****************** <2> expansion: escaped = 69 435 ****************** <2> expansion: escapes = 0 436 000001C5 FA454BF1 <2> fpvariant 0dbh, 0, 0f1h, ASM_MACH6 436 ****************** <2> expansion: ainfo = 17739 436 ****************** <2> expansion: escaped = 69 436 ****************** <2> expansion: escapes = 0 437 000001C9 FF <2> endvariant 438 <2> mne FCOMIP ; ofs=1D8h 438 <3> %push 438 <3> usesection ASMTABLE2, 1 438 <3> %assign %$currofs $ - asmtab 438 ****************** <3> expansion: currofs = 458 438 <3> %ifnempty %2 438 <3> db %2 438 <3> %endif 438 <3> __SECT__ 438 <3> %defstr %$string %1 438 ****************** <3> expansion: string = 'FCOMIP' 438 <3> %strlen %$string_size %$string 438 ****************** <3> expansion: string_size = 6 438 <3> %if %$string_size > 15 438 <3> %error Mnemonic %1 is too long! 438 <3> %endif 438 000003A5 A61C <3> dw (%$currofs)<<4|%$string_size 438 <3> %assign MN_%1 $ - mnlist 438 ****************** <3> expansion: MN_FCOMIP = 680 438 000003A7 46434F4D4950 <3> db %$string 438 <3> %pop 439 000001CA FA46ABF0 <2> fpvariant 0dfh, 28, 0f0h, ASM_MACH6 439 ****************** <2> expansion: ainfo = 18091 439 ****************** <2> expansion: escaped = 70 439 ****************** <2> expansion: escapes = 0 440 000001CE FA468FF1 <2> fpvariant 0dfh, 0, 0f1h, ASM_MACH6 440 ****************** <2> expansion: ainfo = 18063 440 ****************** <2> expansion: escaped = 70 440 ****************** <2> expansion: escapes = 0 441 000001D2 FF <2> endvariant 442 <2> mne FCOMP ; ofs=1E1h 442 <3> %push 442 <3> usesection ASMTABLE2, 1 442 <3> %assign %$currofs $ - asmtab 442 ****************** <3> expansion: currofs = 467 442 <3> %ifnempty %2 442 <3> db %2 442 <3> %endif 442 <3> __SECT__ 442 <3> %defstr %$string %1 442 ****************** <3> expansion: string = 'FCOMP' 442 <3> %strlen %$string_size %$string 442 ****************** <3> expansion: string_size = 5 442 <3> %if %$string_size > 15 442 <3> %error Mnemonic %1 is too long! 442 <3> %endif 442 000003AD 351D <3> dw (%$currofs)<<4|%$string_size 442 <3> %assign MN_%1 $ - mnlist 442 ****************** <3> expansion: MN_FCOMP = 688 442 000003AF 46434F4D50 <3> db %$string 442 <3> %pop 443 000001D3 A9AB <2> variant 218h, 19 443 ****************** <2> expansion: ainfo = 43435 443 ****************** <2> expansion: escaped = 169 443 ****************** <2> expansion: escapes = 0 444 000001D5 AAF0 <2> variant 21ch, 20 444 ****************** <2> expansion: ainfo = 43760 444 ****************** <2> expansion: escaped = 170 444 ****************** <2> expansion: escapes = 0 445 000001D7 4474D8 <2> fpvariant 0d8h, 28, 0d8h 445 ****************** <2> expansion: ainfo = 17524 445 ****************** <2> expansion: escaped = 68 445 ****************** <2> expansion: escapes = 0 446 000001DA 4458D9 <2> fpvariant 0d8h, 0, 0d9h 446 ****************** <2> expansion: ainfo = 17496 446 ****************** <2> expansion: escaped = 68 446 ****************** <2> expansion: escapes = 0 447 000001DD FF <2> endvariant 448 <2> mne FCOMPP ; ofs=1ECh 448 <3> %push 448 <3> usesection ASMTABLE2, 1 448 <3> %assign %$currofs $ - asmtab 448 ****************** <3> expansion: currofs = 478 448 <3> %ifnempty %2 448 <3> db %2 448 <3> %endif 448 <3> __SECT__ 448 <3> %defstr %$string %1 448 ****************** <3> expansion: string = 'FCOMPP' 448 <3> %strlen %$string_size %$string 448 ****************** <3> expansion: string_size = 6 448 <3> %if %$string_size > 15 448 <3> %error Mnemonic %1 is too long! 448 <3> %endif 448 000003B4 E61D <3> dw (%$currofs)<<4|%$string_size 448 <3> %assign MN_%1 $ - mnlist 448 ****************** <3> expansion: MN_FCOMPP = 695 448 000003B6 46434F4D5050 <3> db %$string 448 <3> %pop 449 000001DE 463ED9 <2> fpvariant 0deh, 0, 0d9h 449 ****************** <2> expansion: ainfo = 17982 449 ****************** <2> expansion: escaped = 70 449 ****************** <2> expansion: escapes = 0 450 000001E1 FF <2> endvariant 451 <2> mne FCOS ; ofs=1F0h 451 <3> %push 451 <3> usesection ASMTABLE2, 1 451 <3> %assign %$currofs $ - asmtab 451 ****************** <3> expansion: currofs = 482 451 <3> %ifnempty %2 451 <3> db %2 451 <3> %endif 451 <3> __SECT__ 451 <3> %defstr %$string %1 451 ****************** <3> expansion: string = 'FCOS' 451 <3> %strlen %$string_size %$string 451 ****************** <3> expansion: string_size = 4 451 <3> %if %$string_size > 15 451 <3> %error Mnemonic %1 is too long! 451 <3> %endif 451 000003BC 241E <3> dw (%$currofs)<<4|%$string_size 451 <3> %assign MN_%1 $ - mnlist 451 ****************** <3> expansion: MN_FCOS = 703 451 000003BE 46434F53 <3> db %$string 451 <3> %pop 452 000001E2 F744A9FF <2> fpvariant 0d9h, 0, 0ffh, ASM_MACH3 452 ****************** <2> expansion: ainfo = 17577 452 ****************** <2> expansion: escaped = 68 452 ****************** <2> expansion: escapes = 0 453 000001E6 FF <2> endvariant 454 <2> mne FDECSTP ; ofs=1F5h 454 <3> %push 454 <3> usesection ASMTABLE2, 1 454 <3> %assign %$currofs $ - asmtab 454 ****************** <3> expansion: currofs = 487 454 <3> %ifnempty %2 454 <3> db %2 454 <3> %endif 454 <3> __SECT__ 454 <3> %defstr %$string %1 454 ****************** <3> expansion: string = 'FDECSTP' 454 <3> %strlen %$string_size %$string 454 ****************** <3> expansion: string_size = 7 454 <3> %if %$string_size > 15 454 <3> %error Mnemonic %1 is too long! 454 <3> %endif 454 000003C2 771E <3> dw (%$currofs)<<4|%$string_size 454 <3> %assign MN_%1 $ - mnlist 454 ****************** <3> expansion: MN_FDECSTP = 709 454 000003C4 46444543535450 <3> db %$string 454 <3> %pop 455 000001E7 44A9F6 <2> fpvariant 0d9h, 0, 0f6h 455 ****************** <2> expansion: ainfo = 17577 455 ****************** <2> expansion: escaped = 68 455 ****************** <2> expansion: escapes = 0 456 000001EA FF <2> endvariant 457 <2> mne FDISI, ASM_WAIT ; ofs=1F9h 457 <3> %push 457 <3> usesection ASMTABLE2, 1 457 <3> %assign %$currofs $ - asmtab 457 ****************** <3> expansion: currofs = 491 457 <3> %ifnempty %2 457 000001EB FE <3> db %2 457 <3> %endif 457 <3> __SECT__ 457 <3> %defstr %$string %1 457 ****************** <3> expansion: string = 'FDISI' 457 <3> %strlen %$string_size %$string 457 ****************** <3> expansion: string_size = 5 457 <3> %if %$string_size > 15 457 <3> %error Mnemonic %1 is too long! 457 <3> %endif 457 000003CB B51E <3> dw (%$currofs)<<4|%$string_size 457 <3> %assign MN_%1 $ - mnlist 457 ****************** <3> expansion: MN_FDISI = 718 457 000003CD 4644495349 <3> db %$string 457 <3> %pop 458 <2> mne FNDISI ; ofs=1FAh 458 <3> %push 458 <3> usesection ASMTABLE2, 1 458 <3> %assign %$currofs $ - asmtab 458 ****************** <3> expansion: currofs = 492 458 <3> %ifnempty %2 458 <3> db %2 458 <3> %endif 458 <3> __SECT__ 458 <3> %defstr %$string %1 458 ****************** <3> expansion: string = 'FNDISI' 458 <3> %strlen %$string_size %$string 458 ****************** <3> expansion: string_size = 6 458 <3> %if %$string_size > 15 458 <3> %error Mnemonic %1 is too long! 458 <3> %endif 458 000003D2 C61E <3> dw (%$currofs)<<4|%$string_size 458 <3> %assign MN_%1 $ - mnlist 458 ****************** <3> expansion: MN_FNDISI = 725 458 000003D4 464E44495349 <3> db %$string 458 <3> %pop 459 000001EC 454BE1 <2> fpvariant 0dbh, 0, 0e1h 459 ****************** <2> expansion: ainfo = 17739 459 ****************** <2> expansion: escaped = 69 459 ****************** <2> expansion: escapes = 0 460 000001EF FF <2> endvariant 461 <2> mne FDIV ; ofs=1FEh 461 <3> %push 461 <3> usesection ASMTABLE2, 1 461 <3> %assign %$currofs $ - asmtab 461 ****************** <3> expansion: currofs = 496 461 <3> %ifnempty %2 461 <3> db %2 461 <3> %endif 461 <3> __SECT__ 461 <3> %defstr %$string %1 461 ****************** <3> expansion: string = 'FDIV' 461 <3> %strlen %$string_size %$string 461 ****************** <3> expansion: string_size = 4 461 <3> %if %$string_size > 15 461 <3> %error Mnemonic %1 is too long! 461 <3> %endif 461 000003DA 041F <3> dw (%$currofs)<<4|%$string_size 461 <3> %assign MN_%1 $ - mnlist 461 ****************** <3> expansion: MN_FDIV = 733 461 000003DC 46444956 <3> db %$string 461 <3> %pop 462 000001F0 B143 <2> variant 230h, 19 462 ****************** <2> expansion: ainfo = 45379 462 ****************** <2> expansion: escaped = 177 462 ****************** <2> expansion: escapes = 0 463 000001F2 B288 <2> variant 234h, 20 463 ****************** <2> expansion: ainfo = 45704 463 ****************** <2> expansion: escaped = 178 463 ****************** <2> expansion: escapes = 0 464 000001F4 446DF0 <2> fpvariant 0d8h, 21, 0f0h 464 ****************** <2> expansion: ainfo = 17517 464 ****************** <2> expansion: escaped = 68 464 ****************** <2> expansion: escapes = 0 465 000001F7 45B2F8 <2> fpvariant 0dch, 22, 0f8h 465 ****************** <2> expansion: ainfo = 17842 465 ****************** <2> expansion: escaped = 69 465 ****************** <2> expansion: escapes = 0 466 000001FA FF <2> endvariant 467 <2> mne FDIVP ; ofs=209h 467 <3> %push 467 <3> usesection ASMTABLE2, 1 467 <3> %assign %$currofs $ - asmtab 467 ****************** <3> expansion: currofs = 507 467 <3> %ifnempty %2 467 <3> db %2 467 <3> %endif 467 <3> __SECT__ 467 <3> %defstr %$string %1 467 ****************** <3> expansion: string = 'FDIVP' 467 <3> %strlen %$string_size %$string 467 ****************** <3> expansion: string_size = 5 467 <3> %if %$string_size > 15 467 <3> %error Mnemonic %1 is too long! 467 <3> %endif 467 000003E0 B51F <3> dw (%$currofs)<<4|%$string_size 467 <3> %assign MN_%1 $ - mnlist 467 ****************** <3> expansion: MN_FDIVP = 739 467 000003E2 4644495650 <3> db %$string 467 <3> %pop 468 000001FB 4655F8 <2> fpvariant 0deh, 23, 0f8h 468 ****************** <2> expansion: ainfo = 18005 468 ****************** <2> expansion: escaped = 70 468 ****************** <2> expansion: escapes = 0 469 000001FE 463EF9 <2> fpvariant 0deh, 0, 0f9h 469 ****************** <2> expansion: ainfo = 17982 469 ****************** <2> expansion: escaped = 70 469 ****************** <2> expansion: escapes = 0 470 00000201 FF <2> endvariant 471 <2> mne FIDIV ; ofs=210h 471 <3> %push 471 <3> usesection ASMTABLE2, 1 471 <3> %assign %$currofs $ - asmtab 471 ****************** <3> expansion: currofs = 514 471 <3> %ifnempty %2 471 <3> db %2 471 <3> %endif 471 <3> __SECT__ 471 <3> %defstr %$string %1 471 ****************** <3> expansion: string = 'FIDIV' 471 <3> %strlen %$string_size %$string 471 ****************** <3> expansion: string_size = 5 471 <3> %if %$string_size > 15 471 <3> %error Mnemonic %1 is too long! 471 <3> %endif 471 000003E7 2520 <3> dw (%$currofs)<<4|%$string_size 471 <3> %assign MN_%1 $ - mnlist 471 ****************** <3> expansion: MN_FIDIV = 746 471 000003E9 4649444956 <3> db %$string 471 <3> %pop 472 00000202 B1EA <2> variant 232h, 24 472 ****************** <2> expansion: ainfo = 45546 472 ****************** <2> expansion: escaped = 177 472 ****************** <2> expansion: escapes = 0 473 00000204 B32F <2> variant 236h, 25 473 ****************** <2> expansion: ainfo = 45871 473 ****************** <2> expansion: escaped = 179 473 ****************** <2> expansion: escapes = 0 474 00000206 FF <2> endvariant 475 <2> mne FDIVR ; ofs=215h 475 <3> %push 475 <3> usesection ASMTABLE2, 1 475 <3> %assign %$currofs $ - asmtab 475 ****************** <3> expansion: currofs = 519 475 <3> %ifnempty %2 475 <3> db %2 475 <3> %endif 475 <3> __SECT__ 475 <3> %defstr %$string %1 475 ****************** <3> expansion: string = 'FDIVR' 475 <3> %strlen %$string_size %$string 475 ****************** <3> expansion: string_size = 5 475 <3> %if %$string_size > 15 475 <3> %error Mnemonic %1 is too long! 475 <3> %endif 475 000003EE 7520 <3> dw (%$currofs)<<4|%$string_size 475 <3> %assign MN_%1 $ - mnlist 475 ****************** <3> expansion: MN_FDIVR = 753 475 000003F0 4644495652 <3> db %$string 475 <3> %pop 476 00000207 B3CB <2> variant 238h, 19 476 ****************** <2> expansion: ainfo = 46027 476 ****************** <2> expansion: escaped = 179 476 ****************** <2> expansion: escapes = 0 477 00000209 B510 <2> variant 23ch, 20 477 ****************** <2> expansion: ainfo = 46352 477 ****************** <2> expansion: escaped = 181 477 ****************** <2> expansion: escapes = 0 478 0000020B 446DF8 <2> fpvariant 0d8h, 21, 0f8h 478 ****************** <2> expansion: ainfo = 17517 478 ****************** <2> expansion: escaped = 68 478 ****************** <2> expansion: escapes = 0 479 0000020E 45B2F0 <2> fpvariant 0dch, 22, 0f0h 479 ****************** <2> expansion: ainfo = 17842 479 ****************** <2> expansion: escaped = 69 479 ****************** <2> expansion: escapes = 0 480 00000211 FF <2> endvariant 481 <2> mne FDIVRP ; ofs=220h 481 <3> %push 481 <3> usesection ASMTABLE2, 1 481 <3> %assign %$currofs $ - asmtab 481 ****************** <3> expansion: currofs = 530 481 <3> %ifnempty %2 481 <3> db %2 481 <3> %endif 481 <3> __SECT__ 481 <3> %defstr %$string %1 481 ****************** <3> expansion: string = 'FDIVRP' 481 <3> %strlen %$string_size %$string 481 ****************** <3> expansion: string_size = 6 481 <3> %if %$string_size > 15 481 <3> %error Mnemonic %1 is too long! 481 <3> %endif 481 000003F5 2621 <3> dw (%$currofs)<<4|%$string_size 481 <3> %assign MN_%1 $ - mnlist 481 ****************** <3> expansion: MN_FDIVRP = 760 481 000003F7 464449565250 <3> db %$string 481 <3> %pop 482 00000212 4655F0 <2> fpvariant 0deh, 23, 0f0h 482 ****************** <2> expansion: ainfo = 18005 482 ****************** <2> expansion: escaped = 70 482 ****************** <2> expansion: escapes = 0 483 00000215 463EF1 <2> fpvariant 0deh, 0, 0f1h 483 ****************** <2> expansion: ainfo = 17982 483 ****************** <2> expansion: escaped = 70 483 ****************** <2> expansion: escapes = 0 484 00000218 FF <2> endvariant 485 <2> mne FIDIVR ; ofs=227h 485 <3> %push 485 <3> usesection ASMTABLE2, 1 485 <3> %assign %$currofs $ - asmtab 485 ****************** <3> expansion: currofs = 537 485 <3> %ifnempty %2 485 <3> db %2 485 <3> %endif 485 <3> __SECT__ 485 <3> %defstr %$string %1 485 ****************** <3> expansion: string = 'FIDIVR' 485 <3> %strlen %$string_size %$string 485 ****************** <3> expansion: string_size = 6 485 <3> %if %$string_size > 15 485 <3> %error Mnemonic %1 is too long! 485 <3> %endif 485 000003FD 9621 <3> dw (%$currofs)<<4|%$string_size 485 <3> %assign MN_%1 $ - mnlist 485 ****************** <3> expansion: MN_FIDIVR = 768 485 000003FF 464944495652 <3> db %$string 485 <3> %pop 486 00000219 B472 <2> variant 23ah, 24 486 ****************** <2> expansion: ainfo = 46194 486 ****************** <2> expansion: escaped = 180 486 ****************** <2> expansion: escapes = 0 487 0000021B B5B7 <2> variant 23eh, 25 487 ****************** <2> expansion: ainfo = 46519 487 ****************** <2> expansion: escaped = 181 487 ****************** <2> expansion: escapes = 0 488 0000021D FF <2> endvariant 489 <2> mne FENI, ASM_WAIT ; ofs=22Ch 489 <3> %push 489 <3> usesection ASMTABLE2, 1 489 <3> %assign %$currofs $ - asmtab 489 ****************** <3> expansion: currofs = 542 489 <3> %ifnempty %2 489 0000021E FE <3> db %2 489 <3> %endif 489 <3> __SECT__ 489 <3> %defstr %$string %1 489 ****************** <3> expansion: string = 'FENI' 489 <3> %strlen %$string_size %$string 489 ****************** <3> expansion: string_size = 4 489 <3> %if %$string_size > 15 489 <3> %error Mnemonic %1 is too long! 489 <3> %endif 489 00000405 E421 <3> dw (%$currofs)<<4|%$string_size 489 <3> %assign MN_%1 $ - mnlist 489 ****************** <3> expansion: MN_FENI = 776 489 00000407 46454E49 <3> db %$string 489 <3> %pop 490 <2> mne FNENI ; ofs=22Dh 490 <3> %push 490 <3> usesection ASMTABLE2, 1 490 <3> %assign %$currofs $ - asmtab 490 ****************** <3> expansion: currofs = 543 490 <3> %ifnempty %2 490 <3> db %2 490 <3> %endif 490 <3> __SECT__ 490 <3> %defstr %$string %1 490 ****************** <3> expansion: string = 'FNENI' 490 <3> %strlen %$string_size %$string 490 ****************** <3> expansion: string_size = 5 490 <3> %if %$string_size > 15 490 <3> %error Mnemonic %1 is too long! 490 <3> %endif 490 0000040B F521 <3> dw (%$currofs)<<4|%$string_size 490 <3> %assign MN_%1 $ - mnlist 490 ****************** <3> expansion: MN_FNENI = 782 490 0000040D 464E454E49 <3> db %$string 490 <3> %pop 491 0000021F 454BE0 <2> fpvariant 0dbh, 0, 0e0h 491 ****************** <2> expansion: ainfo = 17739 491 ****************** <2> expansion: escaped = 69 491 ****************** <2> expansion: escapes = 0 492 00000222 FF <2> endvariant 493 <2> mne FFREE ; ofs=231h 493 <3> %push 493 <3> usesection ASMTABLE2, 1 493 <3> %assign %$currofs $ - asmtab 493 ****************** <3> expansion: currofs = 547 493 <3> %ifnempty %2 493 <3> db %2 493 <3> %endif 493 <3> __SECT__ 493 <3> %defstr %$string %1 493 ****************** <3> expansion: string = 'FFREE' 493 <3> %strlen %$string_size %$string 493 ****************** <3> expansion: string_size = 5 493 <3> %if %$string_size > 15 493 <3> %error Mnemonic %1 is too long! 493 <3> %endif 493 00000412 3522 <3> dw (%$currofs)<<4|%$string_size 493 <3> %assign MN_%1 $ - mnlist 493 ****************** <3> expansion: MN_FFREE = 789 493 00000414 4646524545 <3> db %$string 493 <3> %pop 494 00000223 4608C0 <2> fpvariant 0ddh, 27, 0c0h 494 ****************** <2> expansion: ainfo = 17928 494 ****************** <2> expansion: escaped = 70 494 ****************** <2> expansion: escapes = 0 495 00000226 FF <2> endvariant 496 <2> mne FICOM ; ofs=235h 496 <3> %push 496 <3> usesection ASMTABLE2, 1 496 <3> %assign %$currofs $ - asmtab 496 ****************** <3> expansion: currofs = 551 496 <3> %ifnempty %2 496 <3> db %2 496 <3> %endif 496 <3> __SECT__ 496 <3> %defstr %$string %1 496 ****************** <3> expansion: string = 'FICOM' 496 <3> %strlen %$string_size %$string 496 ****************** <3> expansion: string_size = 5 496 <3> %if %$string_size > 15 496 <3> %error Mnemonic %1 is too long! 496 <3> %endif 496 00000419 7522 <3> dw (%$currofs)<<4|%$string_size 496 <3> %assign MN_%1 $ - mnlist 496 ****************** <3> expansion: MN_FICOM = 796 496 0000041B 4649434F4D <3> db %$string 496 <3> %pop 497 00000227 A7CA <2> variant 212h, 24 497 ****************** <2> expansion: ainfo = 42954 497 ****************** <2> expansion: escaped = 167 497 ****************** <2> expansion: escapes = 0 498 00000229 A90F <2> variant 216h, 25 498 ****************** <2> expansion: ainfo = 43279 498 ****************** <2> expansion: escaped = 169 498 ****************** <2> expansion: escapes = 0 499 0000022B FF <2> endvariant 500 <2> mne FICOMP ; ofs=23Ah 500 <3> %push 500 <3> usesection ASMTABLE2, 1 500 <3> %assign %$currofs $ - asmtab 500 ****************** <3> expansion: currofs = 556 500 <3> %ifnempty %2 500 <3> db %2 500 <3> %endif 500 <3> __SECT__ 500 <3> %defstr %$string %1 500 ****************** <3> expansion: string = 'FICOMP' 500 <3> %strlen %$string_size %$string 500 ****************** <3> expansion: string_size = 6 500 <3> %if %$string_size > 15 500 <3> %error Mnemonic %1 is too long! 500 <3> %endif 500 00000420 C622 <3> dw (%$currofs)<<4|%$string_size 500 <3> %assign MN_%1 $ - mnlist 500 ****************** <3> expansion: MN_FICOMP = 803 500 00000422 4649434F4D50 <3> db %$string 500 <3> %pop 501 0000022C AA52 <2> variant 21ah, 24 501 ****************** <2> expansion: ainfo = 43602 501 ****************** <2> expansion: escaped = 170 501 ****************** <2> expansion: escapes = 0 502 0000022E AB97 <2> variant 21eh, 25 502 ****************** <2> expansion: ainfo = 43927 502 ****************** <2> expansion: escaped = 171 502 ****************** <2> expansion: escapes = 0 503 00000230 FF <2> endvariant 504 <2> mne FILD ; ofs=23Fh 504 <3> %push 504 <3> usesection ASMTABLE2, 1 504 <3> %assign %$currofs $ - asmtab 504 ****************** <3> expansion: currofs = 561 504 <3> %ifnempty %2 504 <3> db %2 504 <3> %endif 504 <3> __SECT__ 504 <3> %defstr %$string %1 504 ****************** <3> expansion: string = 'FILD' 504 <3> %strlen %$string_size %$string 504 ****************** <3> expansion: string_size = 4 504 <3> %if %$string_size > 15 504 <3> %error Mnemonic %1 is too long! 504 <3> %endif 504 00000428 1423 <3> dw (%$currofs)<<4|%$string_size 504 <3> %assign MN_%1 $ - mnlist 504 ****************** <3> expansion: MN_FILD = 811 504 0000042A 46494C44 <3> db %$string 504 <3> %pop 505 00000231 A30B <2> variant 203h, 24 505 ****************** <2> expansion: ainfo = 41739 505 ****************** <2> expansion: escaped = 163 505 ****************** <2> expansion: escapes = 0 506 00000233 A450 <2> variant 207h, 25 506 ****************** <2> expansion: ainfo = 42064 506 ****************** <2> expansion: escaped = 164 506 ****************** <2> expansion: escapes = 0 507 00000235 B0EE <2> variant 22fh, 15 507 ****************** <2> expansion: ainfo = 45294 507 ****************** <2> expansion: escaped = 176 507 ****************** <2> expansion: escapes = 0 508 00000237 FF <2> endvariant 509 <2> mne FINCSTP ; ofs=246h 509 <3> %push 509 <3> usesection ASMTABLE2, 1 509 <3> %assign %$currofs $ - asmtab 509 ****************** <3> expansion: currofs = 568 509 <3> %ifnempty %2 509 <3> db %2 509 <3> %endif 509 <3> __SECT__ 509 <3> %defstr %$string %1 509 ****************** <3> expansion: string = 'FINCSTP' 509 <3> %strlen %$string_size %$string 509 ****************** <3> expansion: string_size = 7 509 <3> %if %$string_size > 15 509 <3> %error Mnemonic %1 is too long! 509 <3> %endif 509 0000042E 8723 <3> dw (%$currofs)<<4|%$string_size 509 <3> %assign MN_%1 $ - mnlist 509 ****************** <3> expansion: MN_FINCSTP = 817 509 00000430 46494E43535450 <3> db %$string 509 <3> %pop 510 00000238 44A9F7 <2> fpvariant 0d9h, 0, 0f7h 510 ****************** <2> expansion: ainfo = 17577 510 ****************** <2> expansion: escaped = 68 510 ****************** <2> expansion: escapes = 0 511 0000023B FF <2> endvariant 512 <2> mne FINIT, ASM_WAIT ; ofs=24Ah 512 <3> %push 512 <3> usesection ASMTABLE2, 1 512 <3> %assign %$currofs $ - asmtab 512 ****************** <3> expansion: currofs = 572 512 <3> %ifnempty %2 512 0000023C FE <3> db %2 512 <3> %endif 512 <3> __SECT__ 512 <3> %defstr %$string %1 512 ****************** <3> expansion: string = 'FINIT' 512 <3> %strlen %$string_size %$string 512 ****************** <3> expansion: string_size = 5 512 <3> %if %$string_size > 15 512 <3> %error Mnemonic %1 is too long! 512 <3> %endif 512 00000437 C523 <3> dw (%$currofs)<<4|%$string_size 512 <3> %assign MN_%1 $ - mnlist 512 ****************** <3> expansion: MN_FINIT = 826 512 00000439 46494E4954 <3> db %$string 512 <3> %pop 513 <2> mne FNINIT ; ofs=24Bh 513 <3> %push 513 <3> usesection ASMTABLE2, 1 513 <3> %assign %$currofs $ - asmtab 513 ****************** <3> expansion: currofs = 573 513 <3> %ifnempty %2 513 <3> db %2 513 <3> %endif 513 <3> __SECT__ 513 <3> %defstr %$string %1 513 ****************** <3> expansion: string = 'FNINIT' 513 <3> %strlen %$string_size %$string 513 ****************** <3> expansion: string_size = 6 513 <3> %if %$string_size > 15 513 <3> %error Mnemonic %1 is too long! 513 <3> %endif 513 0000043E D623 <3> dw (%$currofs)<<4|%$string_size 513 <3> %assign MN_%1 $ - mnlist 513 ****************** <3> expansion: MN_FNINIT = 833 513 00000440 464E494E4954 <3> db %$string 513 <3> %pop 514 0000023D 454BE3 <2> fpvariant 0dbh, 0, 0e3h 514 ****************** <2> expansion: ainfo = 17739 514 ****************** <2> expansion: escaped = 69 514 ****************** <2> expansion: escapes = 0 515 00000240 FF <2> endvariant 516 <2> mne FIST ; ofs=24Fh 516 <3> %push 516 <3> usesection ASMTABLE2, 1 516 <3> %assign %$currofs $ - asmtab 516 ****************** <3> expansion: currofs = 577 516 <3> %ifnempty %2 516 <3> db %2 516 <3> %endif 516 <3> __SECT__ 516 <3> %defstr %$string %1 516 ****************** <3> expansion: string = 'FIST' 516 <3> %strlen %$string_size %$string 516 ****************** <3> expansion: string_size = 4 516 <3> %if %$string_size > 15 516 <3> %error Mnemonic %1 is too long! 516 <3> %endif 516 00000446 1424 <3> dw (%$currofs)<<4|%$string_size 516 <3> %assign MN_%1 $ - mnlist 516 ****************** <3> expansion: MN_FIST = 841 516 00000448 46495354 <3> db %$string 516 <3> %pop 517 00000241 A81B <2> variant 213h, 24 517 ****************** <2> expansion: ainfo = 43035 517 ****************** <2> expansion: escaped = 168 517 ****************** <2> expansion: escapes = 0 518 00000243 A960 <2> variant 217h, 25 518 ****************** <2> expansion: ainfo = 43360 518 ****************** <2> expansion: escaped = 169 518 ****************** <2> expansion: escapes = 0 519 00000245 FF <2> endvariant 520 <2> mne FISTP ; ofs=254h 520 <3> %push 520 <3> usesection ASMTABLE2, 1 520 <3> %assign %$currofs $ - asmtab 520 ****************** <3> expansion: currofs = 582 520 <3> %ifnempty %2 520 <3> db %2 520 <3> %endif 520 <3> __SECT__ 520 <3> %defstr %$string %1 520 ****************** <3> expansion: string = 'FISTP' 520 <3> %strlen %$string_size %$string 520 ****************** <3> expansion: string_size = 5 520 <3> %if %$string_size > 15 520 <3> %error Mnemonic %1 is too long! 520 <3> %endif 520 0000044C 6524 <3> dw (%$currofs)<<4|%$string_size 520 <3> %assign MN_%1 $ - mnlist 520 ****************** <3> expansion: MN_FISTP = 847 520 0000044E 4649535450 <3> db %$string 520 <3> %pop 521 00000246 AAA3 <2> variant 21bh, 24 521 ****************** <2> expansion: ainfo = 43683 521 ****************** <2> expansion: escaped = 170 521 ****************** <2> expansion: escapes = 0 522 00000248 ABE8 <2> variant 21fh, 25 522 ****************** <2> expansion: ainfo = 44008 522 ****************** <2> expansion: escaped = 171 522 ****************** <2> expansion: escapes = 0 523 0000024A B5FE <2> variant 23fh, 15 523 ****************** <2> expansion: ainfo = 46590 523 ****************** <2> expansion: escaped = 181 523 ****************** <2> expansion: escapes = 0 524 0000024C FF <2> endvariant 525 <2> mne FLD ; ofs=25Bh 525 <3> %push 525 <3> usesection ASMTABLE2, 1 525 <3> %assign %$currofs $ - asmtab 525 ****************** <3> expansion: currofs = 589 525 <3> %ifnempty %2 525 <3> db %2 525 <3> %endif 525 <3> __SECT__ 525 <3> %defstr %$string %1 525 ****************** <3> expansion: string = 'FLD' 525 <3> %strlen %$string_size %$string 525 ****************** <3> expansion: string_size = 3 525 <3> %if %$string_size > 15 525 <3> %error Mnemonic %1 is too long! 525 <3> %endif 525 00000453 D324 <3> dw (%$currofs)<<4|%$string_size 525 <3> %assign MN_%1 $ - mnlist 525 ****************** <3> expansion: MN_FLD = 854 525 00000455 464C44 <3> db %$string 525 <3> %pop 526 0000024D A264 <2> variant 201h, 19 526 ****************** <2> expansion: ainfo = 41572 526 ****************** <2> expansion: escaped = 162 526 ****************** <2> expansion: escapes = 0 527 0000024F A3A9 <2> variant 205h, 20 527 ****************** <2> expansion: ainfo = 41897 527 ****************** <2> expansion: escaped = 163 527 ****************** <2> expansion: escapes = 0 528 00000251 AFB5 <2> variant 22bh, 26 528 ****************** <2> expansion: ainfo = 44981 528 ****************** <2> expansion: escaped = 175 528 ****************** <2> expansion: escapes = 0 529 00000253 44C4C0 <2> fpvariant 0d9h, 27, 0c0h 529 ****************** <2> expansion: ainfo = 17604 529 ****************** <2> expansion: escaped = 68 529 ****************** <2> expansion: escapes = 0 530 00000256 FF <2> endvariant 531 <2> mne FLD1 ; ofs=265h 531 <3> %push 531 <3> usesection ASMTABLE2, 1 531 <3> %assign %$currofs $ - asmtab 531 ****************** <3> expansion: currofs = 599 531 <3> %ifnempty %2 531 <3> db %2 531 <3> %endif 531 <3> __SECT__ 531 <3> %defstr %$string %1 531 ****************** <3> expansion: string = 'FLD1' 531 <3> %strlen %$string_size %$string 531 ****************** <3> expansion: string_size = 4 531 <3> %if %$string_size > 15 531 <3> %error Mnemonic %1 is too long! 531 <3> %endif 531 00000458 7425 <3> dw (%$currofs)<<4|%$string_size 531 <3> %assign MN_%1 $ - mnlist 531 ****************** <3> expansion: MN_FLD1 = 859 531 0000045A 464C4431 <3> db %$string 531 <3> %pop 532 00000257 44A9E8 <2> fpvariant 0d9h, 0, 0e8h 532 ****************** <2> expansion: ainfo = 17577 532 ****************** <2> expansion: escaped = 68 532 ****************** <2> expansion: escapes = 0 533 0000025A FF <2> endvariant 534 <2> mne FLDL2T ; ofs=269h 534 <3> %push 534 <3> usesection ASMTABLE2, 1 534 <3> %assign %$currofs $ - asmtab 534 ****************** <3> expansion: currofs = 603 534 <3> %ifnempty %2 534 <3> db %2 534 <3> %endif 534 <3> __SECT__ 534 <3> %defstr %$string %1 534 ****************** <3> expansion: string = 'FLDL2T' 534 <3> %strlen %$string_size %$string 534 ****************** <3> expansion: string_size = 6 534 <3> %if %$string_size > 15 534 <3> %error Mnemonic %1 is too long! 534 <3> %endif 534 0000045E B625 <3> dw (%$currofs)<<4|%$string_size 534 <3> %assign MN_%1 $ - mnlist 534 ****************** <3> expansion: MN_FLDL2T = 865 534 00000460 464C444C3254 <3> db %$string 534 <3> %pop 535 0000025B 44A9E9 <2> fpvariant 0d9h, 0, 0e9h 535 ****************** <2> expansion: ainfo = 17577 535 ****************** <2> expansion: escaped = 68 535 ****************** <2> expansion: escapes = 0 536 0000025E FF <2> endvariant 537 <2> mne FLDL2E ; ofs=26Dh 537 <3> %push 537 <3> usesection ASMTABLE2, 1 537 <3> %assign %$currofs $ - asmtab 537 ****************** <3> expansion: currofs = 607 537 <3> %ifnempty %2 537 <3> db %2 537 <3> %endif 537 <3> __SECT__ 537 <3> %defstr %$string %1 537 ****************** <3> expansion: string = 'FLDL2E' 537 <3> %strlen %$string_size %$string 537 ****************** <3> expansion: string_size = 6 537 <3> %if %$string_size > 15 537 <3> %error Mnemonic %1 is too long! 537 <3> %endif 537 00000466 F625 <3> dw (%$currofs)<<4|%$string_size 537 <3> %assign MN_%1 $ - mnlist 537 ****************** <3> expansion: MN_FLDL2E = 873 537 00000468 464C444C3245 <3> db %$string 537 <3> %pop 538 0000025F 44A9EA <2> fpvariant 0d9h, 0, 0eah 538 ****************** <2> expansion: ainfo = 17577 538 ****************** <2> expansion: escaped = 68 538 ****************** <2> expansion: escapes = 0 539 00000262 FF <2> endvariant 540 <2> mne FLDPI ; ofs=271h 540 <3> %push 540 <3> usesection ASMTABLE2, 1 540 <3> %assign %$currofs $ - asmtab 540 ****************** <3> expansion: currofs = 611 540 <3> %ifnempty %2 540 <3> db %2 540 <3> %endif 540 <3> __SECT__ 540 <3> %defstr %$string %1 540 ****************** <3> expansion: string = 'FLDPI' 540 <3> %strlen %$string_size %$string 540 ****************** <3> expansion: string_size = 5 540 <3> %if %$string_size > 15 540 <3> %error Mnemonic %1 is too long! 540 <3> %endif 540 0000046E 3526 <3> dw (%$currofs)<<4|%$string_size 540 <3> %assign MN_%1 $ - mnlist 540 ****************** <3> expansion: MN_FLDPI = 881 540 00000470 464C445049 <3> db %$string 540 <3> %pop 541 00000263 44A9EB <2> fpvariant 0d9h, 0, 0ebh 541 ****************** <2> expansion: ainfo = 17577 541 ****************** <2> expansion: escaped = 68 541 ****************** <2> expansion: escapes = 0 542 00000266 FF <2> endvariant 543 <2> mne FLDLG2 ; ofs=275h 543 <3> %push 543 <3> usesection ASMTABLE2, 1 543 <3> %assign %$currofs $ - asmtab 543 ****************** <3> expansion: currofs = 615 543 <3> %ifnempty %2 543 <3> db %2 543 <3> %endif 543 <3> __SECT__ 543 <3> %defstr %$string %1 543 ****************** <3> expansion: string = 'FLDLG2' 543 <3> %strlen %$string_size %$string 543 ****************** <3> expansion: string_size = 6 543 <3> %if %$string_size > 15 543 <3> %error Mnemonic %1 is too long! 543 <3> %endif 543 00000475 7626 <3> dw (%$currofs)<<4|%$string_size 543 <3> %assign MN_%1 $ - mnlist 543 ****************** <3> expansion: MN_FLDLG2 = 888 543 00000477 464C444C4732 <3> db %$string 543 <3> %pop 544 00000267 44A9EC <2> fpvariant 0d9h, 0, 0ech 544 ****************** <2> expansion: ainfo = 17577 544 ****************** <2> expansion: escaped = 68 544 ****************** <2> expansion: escapes = 0 545 0000026A FF <2> endvariant 546 <2> mne FLDLN2 ; ofs=279h 546 <3> %push 546 <3> usesection ASMTABLE2, 1 546 <3> %assign %$currofs $ - asmtab 546 ****************** <3> expansion: currofs = 619 546 <3> %ifnempty %2 546 <3> db %2 546 <3> %endif 546 <3> __SECT__ 546 <3> %defstr %$string %1 546 ****************** <3> expansion: string = 'FLDLN2' 546 <3> %strlen %$string_size %$string 546 ****************** <3> expansion: string_size = 6 546 <3> %if %$string_size > 15 546 <3> %error Mnemonic %1 is too long! 546 <3> %endif 546 0000047D B626 <3> dw (%$currofs)<<4|%$string_size 546 <3> %assign MN_%1 $ - mnlist 546 ****************** <3> expansion: MN_FLDLN2 = 896 546 0000047F 464C444C4E32 <3> db %$string 546 <3> %pop 547 0000026B 44A9ED <2> fpvariant 0d9h, 0, 0edh 547 ****************** <2> expansion: ainfo = 17577 547 ****************** <2> expansion: escaped = 68 547 ****************** <2> expansion: escapes = 0 548 0000026E FF <2> endvariant 549 <2> mne FLDZ ; ofs=27Dh 549 <3> %push 549 <3> usesection ASMTABLE2, 1 549 <3> %assign %$currofs $ - asmtab 549 ****************** <3> expansion: currofs = 623 549 <3> %ifnempty %2 549 <3> db %2 549 <3> %endif 549 <3> __SECT__ 549 <3> %defstr %$string %1 549 ****************** <3> expansion: string = 'FLDZ' 549 <3> %strlen %$string_size %$string 549 ****************** <3> expansion: string_size = 4 549 <3> %if %$string_size > 15 549 <3> %error Mnemonic %1 is too long! 549 <3> %endif 549 00000485 F426 <3> dw (%$currofs)<<4|%$string_size 549 <3> %assign MN_%1 $ - mnlist 549 ****************** <3> expansion: MN_FLDZ = 904 549 00000487 464C445A <3> db %$string 549 <3> %pop 550 0000026F 44A9EE <2> fpvariant 0d9h, 0, 0eeh 550 ****************** <2> expansion: ainfo = 17577 550 ****************** <2> expansion: escaped = 68 550 ****************** <2> expansion: escapes = 0 551 00000272 FF <2> endvariant 552 <2> mne FLDCW, ASM_WAIT ; ofs=281h 552 <3> %push 552 <3> usesection ASMTABLE2, 1 552 <3> %assign %$currofs $ - asmtab 552 ****************** <3> expansion: currofs = 627 552 <3> %ifnempty %2 552 00000273 FE <3> db %2 552 <3> %endif 552 <3> __SECT__ 552 <3> %defstr %$string %1 552 ****************** <3> expansion: string = 'FLDCW' 552 <3> %strlen %$string_size %$string 552 ****************** <3> expansion: string_size = 5 552 <3> %if %$string_size > 15 552 <3> %error Mnemonic %1 is too long! 552 <3> %endif 552 0000048B 3527 <3> dw (%$currofs)<<4|%$string_size 552 <3> %assign MN_%1 $ - mnlist 552 ****************** <3> expansion: MN_FLDCW = 910 552 0000048D 464C444357 <3> db %$string 552 <3> %pop 553 <2> mne FNLDCW ; ofs=282h 553 <3> %push 553 <3> usesection ASMTABLE2, 1 553 <3> %assign %$currofs $ - asmtab 553 ****************** <3> expansion: currofs = 628 553 <3> %ifnempty %2 553 <3> db %2 553 <3> %endif 553 <3> __SECT__ 553 <3> %defstr %$string %1 553 ****************** <3> expansion: string = 'FNLDCW' 553 <3> %strlen %$string_size %$string 553 ****************** <3> expansion: string_size = 6 553 <3> %if %$string_size > 15 553 <3> %error Mnemonic %1 is too long! 553 <3> %endif 553 00000492 4627 <3> dw (%$currofs)<<4|%$string_size 553 <3> %assign MN_%1 $ - mnlist 553 ****************** <3> expansion: MN_FNLDCW = 917 553 00000494 464E4C444357 <3> db %$string 553 <3> %pop 554 00000274 AF12 <2> variant 229h, 25 554 ****************** <2> expansion: ainfo = 44818 554 ****************** <2> expansion: escaped = 175 554 ****************** <2> expansion: escapes = 0 555 00000276 FF <2> endvariant 556 <2> mne FMUL ; ofs=288h 556 <3> %push 556 <3> usesection ASMTABLE2, 1 556 <3> %assign %$currofs $ - asmtab 556 ****************** <3> expansion: currofs = 631 556 <3> %ifnempty %2 556 <3> db %2 556 <3> %endif 556 <3> __SECT__ 556 <3> %defstr %$string %1 556 ****************** <3> expansion: string = 'FMUL' 556 <3> %strlen %$string_size %$string 556 ****************** <3> expansion: string_size = 4 556 <3> %if %$string_size > 15 556 <3> %error Mnemonic %1 is too long! 556 <3> %endif 556 0000049A 7427 <3> dw (%$currofs)<<4|%$string_size 556 <3> %assign MN_%1 $ - mnlist 556 ****************** <3> expansion: MN_FMUL = 925 556 0000049C 464D554C <3> db %$string 556 <3> %pop 557 00000277 A49B <2> variant 208h, 19 557 ****************** <2> expansion: ainfo = 42139 557 ****************** <2> expansion: escaped = 164 557 ****************** <2> expansion: escapes = 0 558 00000279 A5E0 <2> variant 20ch, 20 558 ****************** <2> expansion: ainfo = 42464 558 ****************** <2> expansion: escaped = 165 558 ****************** <2> expansion: escapes = 0 559 0000027B 446DC8 <2> fpvariant 0d8h, 21, 0c8h 559 ****************** <2> expansion: ainfo = 17517 559 ****************** <2> expansion: escaped = 68 559 ****************** <2> expansion: escapes = 0 560 0000027E 45B2C8 <2> fpvariant 0dch, 22, 0c8h 560 ****************** <2> expansion: ainfo = 17842 560 ****************** <2> expansion: escaped = 69 560 ****************** <2> expansion: escapes = 0 561 00000281 FF <2> endvariant 562 <2> mne FMULP ; ofs=293h 562 <3> %push 562 <3> usesection ASMTABLE2, 1 562 <3> %assign %$currofs $ - asmtab 562 ****************** <3> expansion: currofs = 642 562 <3> %ifnempty %2 562 <3> db %2 562 <3> %endif 562 <3> __SECT__ 562 <3> %defstr %$string %1 562 ****************** <3> expansion: string = 'FMULP' 562 <3> %strlen %$string_size %$string 562 ****************** <3> expansion: string_size = 5 562 <3> %if %$string_size > 15 562 <3> %error Mnemonic %1 is too long! 562 <3> %endif 562 000004A0 2528 <3> dw (%$currofs)<<4|%$string_size 562 <3> %assign MN_%1 $ - mnlist 562 ****************** <3> expansion: MN_FMULP = 931 562 000004A2 464D554C50 <3> db %$string 562 <3> %pop 563 00000282 4655C8 <2> fpvariant 0deh, 23, 0c8h 563 ****************** <2> expansion: ainfo = 18005 563 ****************** <2> expansion: escaped = 70 563 ****************** <2> expansion: escapes = 0 564 00000285 463EC9 <2> fpvariant 0deh, 0, 0c9h 564 ****************** <2> expansion: ainfo = 17982 564 ****************** <2> expansion: escaped = 70 564 ****************** <2> expansion: escapes = 0 565 00000288 FF <2> endvariant 566 <2> mne FIMUL ; ofs=29Ah 566 <3> %push 566 <3> usesection ASMTABLE2, 1 566 <3> %assign %$currofs $ - asmtab 566 ****************** <3> expansion: currofs = 649 566 <3> %ifnempty %2 566 <3> db %2 566 <3> %endif 566 <3> __SECT__ 566 <3> %defstr %$string %1 566 ****************** <3> expansion: string = 'FIMUL' 566 <3> %strlen %$string_size %$string 566 ****************** <3> expansion: string_size = 5 566 <3> %if %$string_size > 15 566 <3> %error Mnemonic %1 is too long! 566 <3> %endif 566 000004A7 9528 <3> dw (%$currofs)<<4|%$string_size 566 <3> %assign MN_%1 $ - mnlist 566 ****************** <3> expansion: MN_FIMUL = 938 566 000004A9 46494D554C <3> db %$string 566 <3> %pop 567 00000289 A542 <2> variant 20ah, 24 567 ****************** <2> expansion: ainfo = 42306 567 ****************** <2> expansion: escaped = 165 567 ****************** <2> expansion: escapes = 0 568 0000028B A687 <2> variant 20eh, 25 568 ****************** <2> expansion: ainfo = 42631 568 ****************** <2> expansion: escaped = 166 568 ****************** <2> expansion: escapes = 0 569 0000028D FF <2> endvariant 570 <2> mne FNOP ; ofs=29Fh 570 <3> %push 570 <3> usesection ASMTABLE2, 1 570 <3> %assign %$currofs $ - asmtab 570 ****************** <3> expansion: currofs = 654 570 <3> %ifnempty %2 570 <3> db %2 570 <3> %endif 570 <3> __SECT__ 570 <3> %defstr %$string %1 570 ****************** <3> expansion: string = 'FNOP' 570 <3> %strlen %$string_size %$string 570 ****************** <3> expansion: string_size = 4 570 <3> %if %$string_size > 15 570 <3> %error Mnemonic %1 is too long! 570 <3> %endif 570 000004AE E428 <3> dw (%$currofs)<<4|%$string_size 570 <3> %assign MN_%1 $ - mnlist 570 ****************** <3> expansion: MN_FNOP = 945 570 000004B0 464E4F50 <3> db %$string 570 <3> %pop 571 0000028E 44A9D0 <2> fpvariant 0d9h, 0, 0d0h 571 ****************** <2> expansion: ainfo = 17577 571 ****************** <2> expansion: escaped = 68 571 ****************** <2> expansion: escapes = 0 572 00000291 FF <2> endvariant 573 <2> mne FPATAN ; ofs=2A3h 573 <3> %push 573 <3> usesection ASMTABLE2, 1 573 <3> %assign %$currofs $ - asmtab 573 ****************** <3> expansion: currofs = 658 573 <3> %ifnempty %2 573 <3> db %2 573 <3> %endif 573 <3> __SECT__ 573 <3> %defstr %$string %1 573 ****************** <3> expansion: string = 'FPATAN' 573 <3> %strlen %$string_size %$string 573 ****************** <3> expansion: string_size = 6 573 <3> %if %$string_size > 15 573 <3> %error Mnemonic %1 is too long! 573 <3> %endif 573 000004B4 2629 <3> dw (%$currofs)<<4|%$string_size 573 <3> %assign MN_%1 $ - mnlist 573 ****************** <3> expansion: MN_FPATAN = 951 573 000004B6 46504154414E <3> db %$string 573 <3> %pop 574 00000292 44A9F3 <2> fpvariant 0d9h, 0, 0f3h 574 ****************** <2> expansion: ainfo = 17577 574 ****************** <2> expansion: escaped = 68 574 ****************** <2> expansion: escapes = 0 575 00000295 FF <2> endvariant 576 <2> mne FPREM ; ofs=2A7h 576 <3> %push 576 <3> usesection ASMTABLE2, 1 576 <3> %assign %$currofs $ - asmtab 576 ****************** <3> expansion: currofs = 662 576 <3> %ifnempty %2 576 <3> db %2 576 <3> %endif 576 <3> __SECT__ 576 <3> %defstr %$string %1 576 ****************** <3> expansion: string = 'FPREM' 576 <3> %strlen %$string_size %$string 576 ****************** <3> expansion: string_size = 5 576 <3> %if %$string_size > 15 576 <3> %error Mnemonic %1 is too long! 576 <3> %endif 576 000004BC 6529 <3> dw (%$currofs)<<4|%$string_size 576 <3> %assign MN_%1 $ - mnlist 576 ****************** <3> expansion: MN_FPREM = 959 576 000004BE 465052454D <3> db %$string 576 <3> %pop 577 00000296 44A9F8 <2> fpvariant 0d9h, 0, 0f8h 577 ****************** <2> expansion: ainfo = 17577 577 ****************** <2> expansion: escaped = 68 577 ****************** <2> expansion: escapes = 0 578 00000299 FF <2> endvariant 579 <2> mne FPREM1 ; ofs=2ABh 579 <3> %push 579 <3> usesection ASMTABLE2, 1 579 <3> %assign %$currofs $ - asmtab 579 ****************** <3> expansion: currofs = 666 579 <3> %ifnempty %2 579 <3> db %2 579 <3> %endif 579 <3> __SECT__ 579 <3> %defstr %$string %1 579 ****************** <3> expansion: string = 'FPREM1' 579 <3> %strlen %$string_size %$string 579 ****************** <3> expansion: string_size = 6 579 <3> %if %$string_size > 15 579 <3> %error Mnemonic %1 is too long! 579 <3> %endif 579 000004C3 A629 <3> dw (%$currofs)<<4|%$string_size 579 <3> %assign MN_%1 $ - mnlist 579 ****************** <3> expansion: MN_FPREM1 = 966 579 000004C5 465052454D31 <3> db %$string 579 <3> %pop 580 0000029A F744A9F5 <2> fpvariant 0d9h, 0, 0f5h, ASM_MACH3 580 ****************** <2> expansion: ainfo = 17577 580 ****************** <2> expansion: escaped = 68 580 ****************** <2> expansion: escapes = 0 581 0000029E FF <2> endvariant 582 <2> mne FPTAN ; ofs=2B0h 582 <3> %push 582 <3> usesection ASMTABLE2, 1 582 <3> %assign %$currofs $ - asmtab 582 ****************** <3> expansion: currofs = 671 582 <3> %ifnempty %2 582 <3> db %2 582 <3> %endif 582 <3> __SECT__ 582 <3> %defstr %$string %1 582 ****************** <3> expansion: string = 'FPTAN' 582 <3> %strlen %$string_size %$string 582 ****************** <3> expansion: string_size = 5 582 <3> %if %$string_size > 15 582 <3> %error Mnemonic %1 is too long! 582 <3> %endif 582 000004CB F529 <3> dw (%$currofs)<<4|%$string_size 582 <3> %assign MN_%1 $ - mnlist 582 ****************** <3> expansion: MN_FPTAN = 974 582 000004CD 465054414E <3> db %$string 582 <3> %pop 583 0000029F 44A9F2 <2> fpvariant 0d9h, 0, 0f2h 583 ****************** <2> expansion: ainfo = 17577 583 ****************** <2> expansion: escaped = 68 583 ****************** <2> expansion: escapes = 0 584 000002A2 FF <2> endvariant 585 <2> mne FRNDINT ; ofs=2B4h 585 <3> %push 585 <3> usesection ASMTABLE2, 1 585 <3> %assign %$currofs $ - asmtab 585 ****************** <3> expansion: currofs = 675 585 <3> %ifnempty %2 585 <3> db %2 585 <3> %endif 585 <3> __SECT__ 585 <3> %defstr %$string %1 585 ****************** <3> expansion: string = 'FRNDINT' 585 <3> %strlen %$string_size %$string 585 ****************** <3> expansion: string_size = 7 585 <3> %if %$string_size > 15 585 <3> %error Mnemonic %1 is too long! 585 <3> %endif 585 000004D2 372A <3> dw (%$currofs)<<4|%$string_size 585 <3> %assign MN_%1 $ - mnlist 585 ****************** <3> expansion: MN_FRNDINT = 981 585 000004D4 46524E44494E54 <3> db %$string 585 <3> %pop 586 000002A3 44A9FC <2> fpvariant 0d9h, 0, 0fch 586 ****************** <2> expansion: ainfo = 17577 586 ****************** <2> expansion: escaped = 68 586 ****************** <2> expansion: escapes = 0 587 000002A6 FF <2> endvariant 588 <2> mne FSCALE ; ofs=2BFh 588 <3> %push 588 <3> usesection ASMTABLE2, 1 588 <3> %assign %$currofs $ - asmtab 588 ****************** <3> expansion: currofs = 679 588 <3> %ifnempty %2 588 <3> db %2 588 <3> %endif 588 <3> __SECT__ 588 <3> %defstr %$string %1 588 ****************** <3> expansion: string = 'FSCALE' 588 <3> %strlen %$string_size %$string 588 ****************** <3> expansion: string_size = 6 588 <3> %if %$string_size > 15 588 <3> %error Mnemonic %1 is too long! 588 <3> %endif 588 000004DB 762A <3> dw (%$currofs)<<4|%$string_size 588 <3> %assign MN_%1 $ - mnlist 588 ****************** <3> expansion: MN_FSCALE = 990 588 000004DD 465343414C45 <3> db %$string 588 <3> %pop 589 000002A7 44A9FD <2> fpvariant 0d9h, 0, 0fdh 589 ****************** <2> expansion: ainfo = 17577 589 ****************** <2> expansion: escaped = 68 589 ****************** <2> expansion: escapes = 0 590 000002AA FF <2> endvariant 591 <2> mne FSETPM, ASM_WAIT ; ofs=2C3h 591 <3> %push 591 <3> usesection ASMTABLE2, 1 591 <3> %assign %$currofs $ - asmtab 591 ****************** <3> expansion: currofs = 683 591 <3> %ifnempty %2 591 000002AB FE <3> db %2 591 <3> %endif 591 <3> __SECT__ 591 <3> %defstr %$string %1 591 ****************** <3> expansion: string = 'FSETPM' 591 <3> %strlen %$string_size %$string 591 ****************** <3> expansion: string_size = 6 591 <3> %if %$string_size > 15 591 <3> %error Mnemonic %1 is too long! 591 <3> %endif 591 000004E3 B62A <3> dw (%$currofs)<<4|%$string_size 591 <3> %assign MN_%1 $ - mnlist 591 ****************** <3> expansion: MN_FSETPM = 998 591 000004E5 46534554504D <3> db %$string 591 <3> %pop 592 <2> mne FNSETPM ; ofs=2C4h 592 <3> %push 592 <3> usesection ASMTABLE2, 1 592 <3> %assign %$currofs $ - asmtab 592 ****************** <3> expansion: currofs = 684 592 <3> %ifnempty %2 592 <3> db %2 592 <3> %endif 592 <3> __SECT__ 592 <3> %defstr %$string %1 592 ****************** <3> expansion: string = 'FNSETPM' 592 <3> %strlen %$string_size %$string 592 ****************** <3> expansion: string_size = 7 592 <3> %if %$string_size > 15 592 <3> %error Mnemonic %1 is too long! 592 <3> %endif 592 000004EB C72A <3> dw (%$currofs)<<4|%$string_size 592 <3> %assign MN_%1 $ - mnlist 592 ****************** <3> expansion: MN_FNSETPM = 1006 592 000004ED 464E534554504D <3> db %$string 592 <3> %pop 593 000002AC F6454BE4 <2> fpvariant 0dbh, 0, 0e4h, ASM_MACH2 593 ****************** <2> expansion: ainfo = 17739 593 ****************** <2> expansion: escaped = 69 593 ****************** <2> expansion: escapes = 0 594 000002B0 FF <2> endvariant 595 <2> mne FSIN ; ofs=2C9h 595 <3> %push 595 <3> usesection ASMTABLE2, 1 595 <3> %assign %$currofs $ - asmtab 595 ****************** <3> expansion: currofs = 689 595 <3> %ifnempty %2 595 <3> db %2 595 <3> %endif 595 <3> __SECT__ 595 <3> %defstr %$string %1 595 ****************** <3> expansion: string = 'FSIN' 595 <3> %strlen %$string_size %$string 595 ****************** <3> expansion: string_size = 4 595 <3> %if %$string_size > 15 595 <3> %error Mnemonic %1 is too long! 595 <3> %endif 595 000004F4 142B <3> dw (%$currofs)<<4|%$string_size 595 <3> %assign MN_%1 $ - mnlist 595 ****************** <3> expansion: MN_FSIN = 1015 595 000004F6 4653494E <3> db %$string 595 <3> %pop 596 000002B1 F744A9FE <2> fpvariant 0d9h, 0, 0feh, ASM_MACH3 596 ****************** <2> expansion: ainfo = 17577 596 ****************** <2> expansion: escaped = 68 596 ****************** <2> expansion: escapes = 0 597 000002B5 FF <2> endvariant 598 <2> mne FSINCOS ; ofs=2CEh 598 <3> %push 598 <3> usesection ASMTABLE2, 1 598 <3> %assign %$currofs $ - asmtab 598 ****************** <3> expansion: currofs = 694 598 <3> %ifnempty %2 598 <3> db %2 598 <3> %endif 598 <3> __SECT__ 598 <3> %defstr %$string %1 598 ****************** <3> expansion: string = 'FSINCOS' 598 <3> %strlen %$string_size %$string 598 ****************** <3> expansion: string_size = 7 598 <3> %if %$string_size > 15 598 <3> %error Mnemonic %1 is too long! 598 <3> %endif 598 000004FA 672B <3> dw (%$currofs)<<4|%$string_size 598 <3> %assign MN_%1 $ - mnlist 598 ****************** <3> expansion: MN_FSINCOS = 1021 598 000004FC 4653494E434F53 <3> db %$string 598 <3> %pop 599 000002B6 F744A9FB <2> fpvariant 0d9h, 0, 0fbh, ASM_MACH3 599 ****************** <2> expansion: ainfo = 17577 599 ****************** <2> expansion: escaped = 68 599 ****************** <2> expansion: escapes = 0 600 000002BA FF <2> endvariant 601 <2> mne FSQRT ; ofs=2D3h 601 <3> %push 601 <3> usesection ASMTABLE2, 1 601 <3> %assign %$currofs $ - asmtab 601 ****************** <3> expansion: currofs = 699 601 <3> %ifnempty %2 601 <3> db %2 601 <3> %endif 601 <3> __SECT__ 601 <3> %defstr %$string %1 601 ****************** <3> expansion: string = 'FSQRT' 601 <3> %strlen %$string_size %$string 601 ****************** <3> expansion: string_size = 5 601 <3> %if %$string_size > 15 601 <3> %error Mnemonic %1 is too long! 601 <3> %endif 601 00000503 B52B <3> dw (%$currofs)<<4|%$string_size 601 <3> %assign MN_%1 $ - mnlist 601 ****************** <3> expansion: MN_FSQRT = 1030 601 00000505 4653515254 <3> db %$string 601 <3> %pop 602 000002BB 44A9FA <2> fpvariant 0d9h, 0, 0fah 602 ****************** <2> expansion: ainfo = 17577 602 ****************** <2> expansion: escaped = 68 602 ****************** <2> expansion: escapes = 0 603 000002BE FF <2> endvariant 604 <2> mne FST ; ofs=2D7h 604 <3> %push 604 <3> usesection ASMTABLE2, 1 604 <3> %assign %$currofs $ - asmtab 604 ****************** <3> expansion: currofs = 703 604 <3> %ifnempty %2 604 <3> db %2 604 <3> %endif 604 <3> __SECT__ 604 <3> %defstr %$string %1 604 ****************** <3> expansion: string = 'FST' 604 <3> %strlen %$string_size %$string 604 ****************** <3> expansion: string_size = 3 604 <3> %if %$string_size > 15 604 <3> %error Mnemonic %1 is too long! 604 <3> %endif 604 0000050A F32B <3> dw (%$currofs)<<4|%$string_size 604 <3> %assign MN_%1 $ - mnlist 604 ****************** <3> expansion: MN_FST = 1037 604 0000050C 465354 <3> db %$string 604 <3> %pop 605 000002BF A774 <2> variant 211h, 19 605 ****************** <2> expansion: ainfo = 42868 605 ****************** <2> expansion: escaped = 167 605 ****************** <2> expansion: escapes = 0 606 000002C1 A8B9 <2> variant 215h, 20 606 ****************** <2> expansion: ainfo = 43193 606 ****************** <2> expansion: escaped = 168 606 ****************** <2> expansion: escapes = 0 607 000002C3 4608D0 <2> fpvariant 0ddh, 27, 0d0h 607 ****************** <2> expansion: ainfo = 17928 607 ****************** <2> expansion: escaped = 70 607 ****************** <2> expansion: escapes = 0 608 000002C6 FF <2> endvariant 609 <2> mne FSTP ; ofs=2DFh 609 <3> %push 609 <3> usesection ASMTABLE2, 1 609 <3> %assign %$currofs $ - asmtab 609 ****************** <3> expansion: currofs = 711 609 <3> %ifnempty %2 609 <3> db %2 609 <3> %endif 609 <3> __SECT__ 609 <3> %defstr %$string %1 609 ****************** <3> expansion: string = 'FSTP' 609 <3> %strlen %$string_size %$string 609 ****************** <3> expansion: string_size = 4 609 <3> %if %$string_size > 15 609 <3> %error Mnemonic %1 is too long! 609 <3> %endif 609 0000050F 742C <3> dw (%$currofs)<<4|%$string_size 609 <3> %assign MN_%1 $ - mnlist 609 ****************** <3> expansion: MN_FSTP = 1042 609 00000511 46535450 <3> db %$string 609 <3> %pop 610 000002C7 A9FC <2> variant 219h, 19 610 ****************** <2> expansion: ainfo = 43516 610 ****************** <2> expansion: escaped = 169 610 ****************** <2> expansion: escapes = 0 611 000002C9 AB41 <2> variant 21dh, 20 611 ****************** <2> expansion: ainfo = 43841 611 ****************** <2> expansion: escaped = 171 611 ****************** <2> expansion: escapes = 0 612 000002CB B4C5 <2> variant 23bh, 26 612 ****************** <2> expansion: ainfo = 46277 612 ****************** <2> expansion: escaped = 180 612 ****************** <2> expansion: escapes = 0 613 000002CD 4608D8 <2> fpvariant 0ddh, 27, 0d8h 613 ****************** <2> expansion: ainfo = 17928 613 ****************** <2> expansion: escaped = 70 613 ****************** <2> expansion: escapes = 0 614 000002D0 FF <2> endvariant 615 <2> mne FSTCW, ASM_WAIT ; ofs=2E9h 615 <3> %push 615 <3> usesection ASMTABLE2, 1 615 <3> %assign %$currofs $ - asmtab 615 ****************** <3> expansion: currofs = 721 615 <3> %ifnempty %2 615 000002D1 FE <3> db %2 615 <3> %endif 615 <3> __SECT__ 615 <3> %defstr %$string %1 615 ****************** <3> expansion: string = 'FSTCW' 615 <3> %strlen %$string_size %$string 615 ****************** <3> expansion: string_size = 5 615 <3> %if %$string_size > 15 615 <3> %error Mnemonic %1 is too long! 615 <3> %endif 615 00000515 152D <3> dw (%$currofs)<<4|%$string_size 615 <3> %assign MN_%1 $ - mnlist 615 ****************** <3> expansion: MN_FSTCW = 1048 615 00000517 4653544357 <3> db %$string 615 <3> %pop 616 <2> mne FNSTCW ; ofs=2EAh 616 <3> %push 616 <3> usesection ASMTABLE2, 1 616 <3> %assign %$currofs $ - asmtab 616 ****************** <3> expansion: currofs = 722 616 <3> %ifnempty %2 616 <3> db %2 616 <3> %endif 616 <3> __SECT__ 616 <3> %defstr %$string %1 616 ****************** <3> expansion: string = 'FNSTCW' 616 <3> %strlen %$string_size %$string 616 ****************** <3> expansion: string_size = 6 616 <3> %if %$string_size > 15 616 <3> %error Mnemonic %1 is too long! 616 <3> %endif 616 0000051C 262D <3> dw (%$currofs)<<4|%$string_size 616 <3> %assign MN_%1 $ - mnlist 616 ****************** <3> expansion: MN_FNSTCW = 1055 616 0000051E 464E53544357 <3> db %$string 616 <3> %pop 617 000002D2 B422 <2> variant 239h, 25 617 ****************** <2> expansion: ainfo = 46114 617 ****************** <2> expansion: escaped = 180 617 ****************** <2> expansion: escapes = 0 618 000002D4 FF <2> endvariant 619 <2> mne FSTSW, ASM_WAIT ; ofs=2F1h 619 <3> %push 619 <3> usesection ASMTABLE2, 1 619 <3> %assign %$currofs $ - asmtab 619 ****************** <3> expansion: currofs = 725 619 <3> %ifnempty %2 619 000002D5 FE <3> db %2 619 <3> %endif 619 <3> __SECT__ 619 <3> %defstr %$string %1 619 ****************** <3> expansion: string = 'FSTSW' 619 <3> %strlen %$string_size %$string 619 ****************** <3> expansion: string_size = 5 619 <3> %if %$string_size > 15 619 <3> %error Mnemonic %1 is too long! 619 <3> %endif 619 00000524 552D <3> dw (%$currofs)<<4|%$string_size 619 <3> %assign MN_%1 $ - mnlist 619 ****************** <3> expansion: MN_FSTSW = 1063 619 00000526 4653545357 <3> db %$string 619 <3> %pop 620 <2> mne FNSTSW ; ofs=2F2h 620 <3> %push 620 <3> usesection ASMTABLE2, 1 620 <3> %assign %$currofs $ - asmtab 620 ****************** <3> expansion: currofs = 726 620 <3> %ifnempty %2 620 <3> db %2 620 <3> %endif 620 <3> __SECT__ 620 <3> %defstr %$string %1 620 ****************** <3> expansion: string = 'FNSTSW' 620 <3> %strlen %$string_size %$string 620 ****************** <3> expansion: string_size = 6 620 <3> %if %$string_size > 15 620 <3> %error Mnemonic %1 is too long! 620 <3> %endif 620 0000052B 662D <3> dw (%$currofs)<<4|%$string_size 620 <3> %assign MN_%1 $ - mnlist 620 ****************** <3> expansion: MN_FNSTSW = 1070 620 0000052D 464E53545357 <3> db %$string 620 <3> %pop 621 000002D6 46ADE0 <2> fpvariant 0dfh, 30, 0e0h 621 ****************** <2> expansion: ainfo = 18093 621 ****************** <2> expansion: escaped = 70 621 ****************** <2> expansion: escapes = 0 622 000002D9 B566 <2> variant 23dh, 25 622 ****************** <2> expansion: ainfo = 46438 622 ****************** <2> expansion: escaped = 181 622 ****************** <2> expansion: escapes = 0 623 000002DB FF <2> endvariant 624 <2> mne FSUB ; ofs=2F8h 624 <3> %push 624 <3> usesection ASMTABLE2, 1 624 <3> %assign %$currofs $ - asmtab 624 ****************** <3> expansion: currofs = 732 624 <3> %ifnempty %2 624 <3> db %2 624 <3> %endif 624 <3> __SECT__ 624 <3> %defstr %$string %1 624 ****************** <3> expansion: string = 'FSUB' 624 <3> %strlen %$string_size %$string 624 ****************** <3> expansion: string_size = 4 624 <3> %if %$string_size > 15 624 <3> %error Mnemonic %1 is too long! 624 <3> %endif 624 00000533 C42D <3> dw (%$currofs)<<4|%$string_size 624 <3> %assign MN_%1 $ - mnlist 624 ****************** <3> expansion: MN_FSUB = 1078 624 00000535 46535542 <3> db %$string 624 <3> %pop 625 000002DC AC33 <2> variant 220h, 19 625 ****************** <2> expansion: ainfo = 44083 625 ****************** <2> expansion: escaped = 172 625 ****************** <2> expansion: escapes = 0 626 000002DE AD78 <2> variant 224h, 20 626 ****************** <2> expansion: ainfo = 44408 626 ****************** <2> expansion: escaped = 173 626 ****************** <2> expansion: escapes = 0 627 000002E0 446DE0 <2> fpvariant 0d8h, 21, 0e0h 627 ****************** <2> expansion: ainfo = 17517 627 ****************** <2> expansion: escaped = 68 627 ****************** <2> expansion: escapes = 0 628 000002E3 45B2E8 <2> fpvariant 0dch, 22, 0e8h 628 ****************** <2> expansion: ainfo = 17842 628 ****************** <2> expansion: escaped = 69 628 ****************** <2> expansion: escapes = 0 629 000002E6 FF <2> endvariant 630 <2> mne FSUBP ; ofs=303h 630 <3> %push 630 <3> usesection ASMTABLE2, 1 630 <3> %assign %$currofs $ - asmtab 630 ****************** <3> expansion: currofs = 743 630 <3> %ifnempty %2 630 <3> db %2 630 <3> %endif 630 <3> __SECT__ 630 <3> %defstr %$string %1 630 ****************** <3> expansion: string = 'FSUBP' 630 <3> %strlen %$string_size %$string 630 ****************** <3> expansion: string_size = 5 630 <3> %if %$string_size > 15 630 <3> %error Mnemonic %1 is too long! 630 <3> %endif 630 00000539 752E <3> dw (%$currofs)<<4|%$string_size 630 <3> %assign MN_%1 $ - mnlist 630 ****************** <3> expansion: MN_FSUBP = 1084 630 0000053B 4653554250 <3> db %$string 630 <3> %pop 631 000002E7 4655E8 <2> fpvariant 0deh, 23, 0e8h 631 ****************** <2> expansion: ainfo = 18005 631 ****************** <2> expansion: escaped = 70 631 ****************** <2> expansion: escapes = 0 632 000002EA 463EE9 <2> fpvariant 0deh, 0, 0e9h 632 ****************** <2> expansion: ainfo = 17982 632 ****************** <2> expansion: escaped = 70 632 ****************** <2> expansion: escapes = 0 633 000002ED FF <2> endvariant 634 <2> mne FISUB ; ofs=30Ah 634 <3> %push 634 <3> usesection ASMTABLE2, 1 634 <3> %assign %$currofs $ - asmtab 634 ****************** <3> expansion: currofs = 750 634 <3> %ifnempty %2 634 <3> db %2 634 <3> %endif 634 <3> __SECT__ 634 <3> %defstr %$string %1 634 ****************** <3> expansion: string = 'FISUB' 634 <3> %strlen %$string_size %$string 634 ****************** <3> expansion: string_size = 5 634 <3> %if %$string_size > 15 634 <3> %error Mnemonic %1 is too long! 634 <3> %endif 634 00000540 E52E <3> dw (%$currofs)<<4|%$string_size 634 <3> %assign MN_%1 $ - mnlist 634 ****************** <3> expansion: MN_FISUB = 1091 634 00000542 4649535542 <3> db %$string 634 <3> %pop 635 000002EE ACDA <2> variant 222h, 24 635 ****************** <2> expansion: ainfo = 44250 635 ****************** <2> expansion: escaped = 172 635 ****************** <2> expansion: escapes = 0 636 000002F0 AE1F <2> variant 226h, 25 636 ****************** <2> expansion: ainfo = 44575 636 ****************** <2> expansion: escaped = 174 636 ****************** <2> expansion: escapes = 0 637 000002F2 FF <2> endvariant 638 <2> mne FSUBR ; ofs=30Fh 638 <3> %push 638 <3> usesection ASMTABLE2, 1 638 <3> %assign %$currofs $ - asmtab 638 ****************** <3> expansion: currofs = 755 638 <3> %ifnempty %2 638 <3> db %2 638 <3> %endif 638 <3> __SECT__ 638 <3> %defstr %$string %1 638 ****************** <3> expansion: string = 'FSUBR' 638 <3> %strlen %$string_size %$string 638 ****************** <3> expansion: string_size = 5 638 <3> %if %$string_size > 15 638 <3> %error Mnemonic %1 is too long! 638 <3> %endif 638 00000547 352F <3> dw (%$currofs)<<4|%$string_size 638 <3> %assign MN_%1 $ - mnlist 638 ****************** <3> expansion: MN_FSUBR = 1098 638 00000549 4653554252 <3> db %$string 638 <3> %pop 639 000002F3 AEBB <2> variant 228h, 19 639 ****************** <2> expansion: ainfo = 44731 639 ****************** <2> expansion: escaped = 174 639 ****************** <2> expansion: escapes = 0 640 000002F5 B000 <2> variant 22ch, 20 640 ****************** <2> expansion: ainfo = 45056 640 ****************** <2> expansion: escaped = 176 640 ****************** <2> expansion: escapes = 0 641 000002F7 446DE8 <2> fpvariant 0d8h, 21, 0e8h 641 ****************** <2> expansion: ainfo = 17517 641 ****************** <2> expansion: escaped = 68 641 ****************** <2> expansion: escapes = 0 642 000002FA 45B2E0 <2> fpvariant 0dch, 22, 0e0h 642 ****************** <2> expansion: ainfo = 17842 642 ****************** <2> expansion: escaped = 69 642 ****************** <2> expansion: escapes = 0 643 000002FD FF <2> endvariant 644 <2> mne FSUBRP ; ofs=31Ah 644 <3> %push 644 <3> usesection ASMTABLE2, 1 644 <3> %assign %$currofs $ - asmtab 644 ****************** <3> expansion: currofs = 766 644 <3> %ifnempty %2 644 <3> db %2 644 <3> %endif 644 <3> __SECT__ 644 <3> %defstr %$string %1 644 ****************** <3> expansion: string = 'FSUBRP' 644 <3> %strlen %$string_size %$string 644 ****************** <3> expansion: string_size = 6 644 <3> %if %$string_size > 15 644 <3> %error Mnemonic %1 is too long! 644 <3> %endif 644 0000054E E62F <3> dw (%$currofs)<<4|%$string_size 644 <3> %assign MN_%1 $ - mnlist 644 ****************** <3> expansion: MN_FSUBRP = 1105 644 00000550 465355425250 <3> db %$string 644 <3> %pop 645 000002FE 4655E0 <2> fpvariant 0deh, 23, 0e0h 645 ****************** <2> expansion: ainfo = 18005 645 ****************** <2> expansion: escaped = 70 645 ****************** <2> expansion: escapes = 0 646 00000301 463EE1 <2> fpvariant 0deh, 0, 0e1h 646 ****************** <2> expansion: ainfo = 17982 646 ****************** <2> expansion: escaped = 70 646 ****************** <2> expansion: escapes = 0 647 00000304 FF <2> endvariant 648 <2> mne FISUBR ; ofs=321h 648 <3> %push 648 <3> usesection ASMTABLE2, 1 648 <3> %assign %$currofs $ - asmtab 648 ****************** <3> expansion: currofs = 773 648 <3> %ifnempty %2 648 <3> db %2 648 <3> %endif 648 <3> __SECT__ 648 <3> %defstr %$string %1 648 ****************** <3> expansion: string = 'FISUBR' 648 <3> %strlen %$string_size %$string 648 ****************** <3> expansion: string_size = 6 648 <3> %if %$string_size > 15 648 <3> %error Mnemonic %1 is too long! 648 <3> %endif 648 00000556 5630 <3> dw (%$currofs)<<4|%$string_size 648 <3> %assign MN_%1 $ - mnlist 648 ****************** <3> expansion: MN_FISUBR = 1113 648 00000558 464953554252 <3> db %$string 648 <3> %pop 649 00000305 AF62 <2> variant 22ah, 24 649 ****************** <2> expansion: ainfo = 44898 649 ****************** <2> expansion: escaped = 175 649 ****************** <2> expansion: escapes = 0 650 00000307 B0A7 <2> variant 22eh, 25 650 ****************** <2> expansion: ainfo = 45223 650 ****************** <2> expansion: escaped = 176 650 ****************** <2> expansion: escapes = 0 651 00000309 FF <2> endvariant 652 <2> mne FTST ; ofs=326h 652 <3> %push 652 <3> usesection ASMTABLE2, 1 652 <3> %assign %$currofs $ - asmtab 652 ****************** <3> expansion: currofs = 778 652 <3> %ifnempty %2 652 <3> db %2 652 <3> %endif 652 <3> __SECT__ 652 <3> %defstr %$string %1 652 ****************** <3> expansion: string = 'FTST' 652 <3> %strlen %$string_size %$string 652 ****************** <3> expansion: string_size = 4 652 <3> %if %$string_size > 15 652 <3> %error Mnemonic %1 is too long! 652 <3> %endif 652 0000055E A430 <3> dw (%$currofs)<<4|%$string_size 652 <3> %assign MN_%1 $ - mnlist 652 ****************** <3> expansion: MN_FTST = 1121 652 00000560 46545354 <3> db %$string 652 <3> %pop 653 0000030A 44A9E4 <2> fpvariant 0d9h, 0, 0e4h 653 ****************** <2> expansion: ainfo = 17577 653 ****************** <2> expansion: escaped = 68 653 ****************** <2> expansion: escapes = 0 654 0000030D FF <2> endvariant 655 <2> mne FUCOM ; ofs=32Ah 655 <3> %push 655 <3> usesection ASMTABLE2, 1 655 <3> %assign %$currofs $ - asmtab 655 ****************** <3> expansion: currofs = 782 655 <3> %ifnempty %2 655 <3> db %2 655 <3> %endif 655 <3> __SECT__ 655 <3> %defstr %$string %1 655 ****************** <3> expansion: string = 'FUCOM' 655 <3> %strlen %$string_size %$string 655 ****************** <3> expansion: string_size = 5 655 <3> %if %$string_size > 15 655 <3> %error Mnemonic %1 is too long! 655 <3> %endif 655 00000564 E530 <3> dw (%$currofs)<<4|%$string_size 655 <3> %assign MN_%1 $ - mnlist 655 ****************** <3> expansion: MN_FUCOM = 1127 655 00000566 4655434F4D <3> db %$string 655 <3> %pop 656 0000030E F74609E0 <2> fpvariant 0ddh, 28, 0e0h, ASM_MACH3 656 ****************** <2> expansion: ainfo = 17929 656 ****************** <2> expansion: escaped = 70 656 ****************** <2> expansion: escapes = 0 657 00000312 F745EDE1 <2> fpvariant 0ddh, 0, 0e1h, ASM_MACH3 657 ****************** <2> expansion: ainfo = 17901 657 ****************** <2> expansion: escaped = 69 657 ****************** <2> expansion: escapes = 0 658 00000316 FF <2> endvariant 659 <2> mne FUCOMI ; ofs=333h 659 <3> %push 659 <3> usesection ASMTABLE2, 1 659 <3> %assign %$currofs $ - asmtab 659 ****************** <3> expansion: currofs = 791 659 <3> %ifnempty %2 659 <3> db %2 659 <3> %endif 659 <3> __SECT__ 659 <3> %defstr %$string %1 659 ****************** <3> expansion: string = 'FUCOMI' 659 <3> %strlen %$string_size %$string 659 ****************** <3> expansion: string_size = 6 659 <3> %if %$string_size > 15 659 <3> %error Mnemonic %1 is too long! 659 <3> %endif 659 0000056B 7631 <3> dw (%$currofs)<<4|%$string_size 659 <3> %assign MN_%1 $ - mnlist 659 ****************** <3> expansion: MN_FUCOMI = 1134 659 0000056D 4655434F4D49 <3> db %$string 659 <3> %pop 660 00000317 FA4567E8 <2> fpvariant 0dbh, 28, 0e8h, ASM_MACH6 660 ****************** <2> expansion: ainfo = 17767 660 ****************** <2> expansion: escaped = 69 660 ****************** <2> expansion: escapes = 0 661 0000031B FA454BE9 <2> fpvariant 0dbh, 0, 0e9h, ASM_MACH6 661 ****************** <2> expansion: ainfo = 17739 661 ****************** <2> expansion: escaped = 69 661 ****************** <2> expansion: escapes = 0 662 0000031F FF <2> endvariant 663 <2> mne FUCOMIP ; ofs=33Ch 663 <3> %push 663 <3> usesection ASMTABLE2, 1 663 <3> %assign %$currofs $ - asmtab 663 ****************** <3> expansion: currofs = 800 663 <3> %ifnempty %2 663 <3> db %2 663 <3> %endif 663 <3> __SECT__ 663 <3> %defstr %$string %1 663 ****************** <3> expansion: string = 'FUCOMIP' 663 <3> %strlen %$string_size %$string 663 ****************** <3> expansion: string_size = 7 663 <3> %if %$string_size > 15 663 <3> %error Mnemonic %1 is too long! 663 <3> %endif 663 00000573 0732 <3> dw (%$currofs)<<4|%$string_size 663 <3> %assign MN_%1 $ - mnlist 663 ****************** <3> expansion: MN_FUCOMIP = 1142 663 00000575 4655434F4D4950 <3> db %$string 663 <3> %pop 664 00000320 FA46ABE8 <2> fpvariant 0dfh, 28, 0e8h, ASM_MACH6 664 ****************** <2> expansion: ainfo = 18091 664 ****************** <2> expansion: escaped = 70 664 ****************** <2> expansion: escapes = 0 665 00000324 FA468FE9 <2> fpvariant 0dfh, 0, 0e9h, ASM_MACH6 665 ****************** <2> expansion: ainfo = 18063 665 ****************** <2> expansion: escaped = 70 665 ****************** <2> expansion: escapes = 0 666 00000328 FF <2> endvariant 667 <2> mne FUCOMP ; ofs=345h 667 <3> %push 667 <3> usesection ASMTABLE2, 1 667 <3> %assign %$currofs $ - asmtab 667 ****************** <3> expansion: currofs = 809 667 <3> %ifnempty %2 667 <3> db %2 667 <3> %endif 667 <3> __SECT__ 667 <3> %defstr %$string %1 667 ****************** <3> expansion: string = 'FUCOMP' 667 <3> %strlen %$string_size %$string 667 ****************** <3> expansion: string_size = 6 667 <3> %if %$string_size > 15 667 <3> %error Mnemonic %1 is too long! 667 <3> %endif 667 0000057C 9632 <3> dw (%$currofs)<<4|%$string_size 667 <3> %assign MN_%1 $ - mnlist 667 ****************** <3> expansion: MN_FUCOMP = 1151 667 0000057E 4655434F4D50 <3> db %$string 667 <3> %pop 668 00000329 F74609E8 <2> fpvariant 0ddh, 28, 0e8h, ASM_MACH3 668 ****************** <2> expansion: ainfo = 17929 668 ****************** <2> expansion: escaped = 70 668 ****************** <2> expansion: escapes = 0 669 0000032D F745EDE9 <2> fpvariant 0ddh, 0, 0e9h, ASM_MACH3 669 ****************** <2> expansion: ainfo = 17901 669 ****************** <2> expansion: escaped = 69 669 ****************** <2> expansion: escapes = 0 670 00000331 FF <2> endvariant 671 <2> mne FUCOMPP ; ofs=34Eh 671 <3> %push 671 <3> usesection ASMTABLE2, 1 671 <3> %assign %$currofs $ - asmtab 671 ****************** <3> expansion: currofs = 818 671 <3> %ifnempty %2 671 <3> db %2 671 <3> %endif 671 <3> __SECT__ 671 <3> %defstr %$string %1 671 ****************** <3> expansion: string = 'FUCOMPP' 671 <3> %strlen %$string_size %$string 671 ****************** <3> expansion: string_size = 7 671 <3> %if %$string_size > 15 671 <3> %error Mnemonic %1 is too long! 671 <3> %endif 671 00000584 2733 <3> dw (%$currofs)<<4|%$string_size 671 <3> %assign MN_%1 $ - mnlist 671 ****************** <3> expansion: MN_FUCOMPP = 1159 671 00000586 4655434F4D5050 <3> db %$string 671 <3> %pop 672 00000332 F744FAE9 <2> fpvariant 0dah, 0, 0e9h, ASM_MACH3 672 ****************** <2> expansion: ainfo = 17658 672 ****************** <2> expansion: escaped = 68 672 ****************** <2> expansion: escapes = 0 673 00000336 FF <2> endvariant 674 <2> mne FWAIT ; ofs=353h 674 <3> %push 674 <3> usesection ASMTABLE2, 1 674 <3> %assign %$currofs $ - asmtab 674 ****************** <3> expansion: currofs = 823 674 <3> %ifnempty %2 674 <3> db %2 674 <3> %endif 674 <3> __SECT__ 674 <3> %defstr %$string %1 674 ****************** <3> expansion: string = 'FWAIT' 674 <3> %strlen %$string_size %$string 674 ****************** <3> expansion: string_size = 5 674 <3> %if %$string_size > 15 674 <3> %error Mnemonic %1 is too long! 674 <3> %endif 674 0000058D 7533 <3> dw (%$currofs)<<4|%$string_size 674 <3> %assign MN_%1 $ - mnlist 674 ****************** <3> expansion: MN_FWAIT = 1168 674 0000058F 4657414954 <3> db %$string 674 <3> %pop 675 00000337 310B <2> variant 09bh, 0 675 ****************** <2> expansion: ainfo = 12555 675 ****************** <2> expansion: escaped = 49 675 ****************** <2> expansion: escapes = 0 676 00000339 FF <2> endvariant 677 <2> mne FXAM ; ofs=356h 677 <3> %push 677 <3> usesection ASMTABLE2, 1 677 <3> %assign %$currofs $ - asmtab 677 ****************** <3> expansion: currofs = 826 677 <3> %ifnempty %2 677 <3> db %2 677 <3> %endif 677 <3> __SECT__ 677 <3> %defstr %$string %1 677 ****************** <3> expansion: string = 'FXAM' 677 <3> %strlen %$string_size %$string 677 ****************** <3> expansion: string_size = 4 677 <3> %if %$string_size > 15 677 <3> %error Mnemonic %1 is too long! 677 <3> %endif 677 00000594 A433 <3> dw (%$currofs)<<4|%$string_size 677 <3> %assign MN_%1 $ - mnlist 677 ****************** <3> expansion: MN_FXAM = 1175 677 00000596 4658414D <3> db %$string 677 <3> %pop 678 0000033A 44A9E5 <2> fpvariant 0d9h, 0, 0e5h 678 ****************** <2> expansion: ainfo = 17577 678 ****************** <2> expansion: escaped = 68 678 ****************** <2> expansion: escapes = 0 679 0000033D FF <2> endvariant 680 <2> mne FXCH ; ofs=35Ah 680 <3> %push 680 <3> usesection ASMTABLE2, 1 680 <3> %assign %$currofs $ - asmtab 680 ****************** <3> expansion: currofs = 830 680 <3> %ifnempty %2 680 <3> db %2 680 <3> %endif 680 <3> __SECT__ 680 <3> %defstr %$string %1 680 ****************** <3> expansion: string = 'FXCH' 680 <3> %strlen %$string_size %$string 680 ****************** <3> expansion: string_size = 4 680 <3> %if %$string_size > 15 680 <3> %error Mnemonic %1 is too long! 680 <3> %endif 680 0000059A E433 <3> dw (%$currofs)<<4|%$string_size 680 <3> %assign MN_%1 $ - mnlist 680 ****************** <3> expansion: MN_FXCH = 1181 680 0000059C 46584348 <3> db %$string 680 <3> %pop 681 0000033E 44C5C8 <2> fpvariant 0d9h, 28, 0c8h 681 ****************** <2> expansion: ainfo = 17605 681 ****************** <2> expansion: escaped = 68 681 ****************** <2> expansion: escapes = 0 682 00000341 44A9C9 <2> fpvariant 0d9h, 0, 0c9h 682 ****************** <2> expansion: ainfo = 17577 682 ****************** <2> expansion: escaped = 68 682 ****************** <2> expansion: escapes = 0 683 00000344 FF <2> endvariant 684 <2> mne FXTRACT ; ofs=361h 684 <3> %push 684 <3> usesection ASMTABLE2, 1 684 <3> %assign %$currofs $ - asmtab 684 ****************** <3> expansion: currofs = 837 684 <3> %ifnempty %2 684 <3> db %2 684 <3> %endif 684 <3> __SECT__ 684 <3> %defstr %$string %1 684 ****************** <3> expansion: string = 'FXTRACT' 684 <3> %strlen %$string_size %$string 684 ****************** <3> expansion: string_size = 7 684 <3> %if %$string_size > 15 684 <3> %error Mnemonic %1 is too long! 684 <3> %endif 684 000005A0 5734 <3> dw (%$currofs)<<4|%$string_size 684 <3> %assign MN_%1 $ - mnlist 684 ****************** <3> expansion: MN_FXTRACT = 1187 684 000005A2 46585452414354 <3> db %$string 684 <3> %pop 685 00000345 44A9F4 <2> fpvariant 0d9h, 0, 0f4h 685 ****************** <2> expansion: ainfo = 17577 685 ****************** <2> expansion: escaped = 68 685 ****************** <2> expansion: escapes = 0 686 00000348 FF <2> endvariant 687 <2> mne FYL2X ; ofs=365h 687 <3> %push 687 <3> usesection ASMTABLE2, 1 687 <3> %assign %$currofs $ - asmtab 687 ****************** <3> expansion: currofs = 841 687 <3> %ifnempty %2 687 <3> db %2 687 <3> %endif 687 <3> __SECT__ 687 <3> %defstr %$string %1 687 ****************** <3> expansion: string = 'FYL2X' 687 <3> %strlen %$string_size %$string 687 ****************** <3> expansion: string_size = 5 687 <3> %if %$string_size > 15 687 <3> %error Mnemonic %1 is too long! 687 <3> %endif 687 000005A9 9534 <3> dw (%$currofs)<<4|%$string_size 687 <3> %assign MN_%1 $ - mnlist 687 ****************** <3> expansion: MN_FYL2X = 1196 687 000005AB 46594C3258 <3> db %$string 687 <3> %pop 688 00000349 44A9F1 <2> fpvariant 0d9h, 0, 0f1h 688 ****************** <2> expansion: ainfo = 17577 688 ****************** <2> expansion: escaped = 68 688 ****************** <2> expansion: escapes = 0 689 0000034C FF <2> endvariant 690 <2> mne FYL2XP1 ; ofs=369h 690 <3> %push 690 <3> usesection ASMTABLE2, 1 690 <3> %assign %$currofs $ - asmtab 690 ****************** <3> expansion: currofs = 845 690 <3> %ifnempty %2 690 <3> db %2 690 <3> %endif 690 <3> __SECT__ 690 <3> %defstr %$string %1 690 ****************** <3> expansion: string = 'FYL2XP1' 690 <3> %strlen %$string_size %$string 690 ****************** <3> expansion: string_size = 7 690 <3> %if %$string_size > 15 690 <3> %error Mnemonic %1 is too long! 690 <3> %endif 690 000005B0 D734 <3> dw (%$currofs)<<4|%$string_size 690 <3> %assign MN_%1 $ - mnlist 690 ****************** <3> expansion: MN_FYL2XP1 = 1203 690 000005B2 46594C32585031 <3> db %$string 690 <3> %pop 691 0000034D 44A9F9 <2> fpvariant 0d9h, 0, 0f9h 691 ****************** <2> expansion: ainfo = 17577 691 ****************** <2> expansion: escaped = 68 691 ****************** <2> expansion: escapes = 0 692 00000350 FF <2> endvariant 693 <2> mne HLT ; ofs=36Dh 693 <3> %push 693 <3> usesection ASMTABLE2, 1 693 <3> %assign %$currofs $ - asmtab 693 ****************** <3> expansion: currofs = 849 693 <3> %ifnempty %2 693 <3> db %2 693 <3> %endif 693 <3> __SECT__ 693 <3> %defstr %$string %1 693 ****************** <3> expansion: string = 'HLT' 693 <3> %strlen %$string_size %$string 693 ****************** <3> expansion: string_size = 3 693 <3> %if %$string_size > 15 693 <3> %error Mnemonic %1 is too long! 693 <3> %endif 693 000005B9 1335 <3> dw (%$currofs)<<4|%$string_size 693 <3> %assign MN_%1 $ - mnlist 693 ****************** <3> expansion: MN_HLT = 1212 693 000005BB 484C54 <3> db %$string 693 <3> %pop 694 00000351 4D34 <2> variant 0f4h, 0 694 ****************** <2> expansion: ainfo = 19764 694 ****************** <2> expansion: escaped = 77 694 ****************** <2> expansion: escapes = 0 695 00000353 FF <2> endvariant 696 <2> mne IDIV ; ofs=370h 696 <3> %push 696 <3> usesection ASMTABLE2, 1 696 <3> %assign %$currofs $ - asmtab 696 ****************** <3> expansion: currofs = 852 696 <3> %ifnempty %2 696 <3> db %2 696 <3> %endif 696 <3> __SECT__ 696 <3> %defstr %$string %1 696 ****************** <3> expansion: string = 'IDIV' 696 <3> %strlen %$string_size %$string 696 ****************** <3> expansion: string_size = 4 696 <3> %if %$string_size > 15 696 <3> %error Mnemonic %1 is too long! 696 <3> %endif 696 000005BE 4435 <3> dw (%$currofs)<<4|%$string_size 696 <3> %assign MN_%1 $ - mnlist 696 ****************** <3> expansion: MN_IDIV = 1217 696 000005C0 49444956 <3> db %$string 696 <3> %pop 697 00000354 C7B7 <2> variant AGRP(6,7), 16 697 ****************** <2> expansion: ainfo = 51127 697 ****************** <2> expansion: escaped = 199 697 ****************** <2> expansion: escapes = 0 698 00000356 FF <2> endvariant 699 <2> mne IMUL ; ofs=373h 699 <3> %push 699 <3> usesection ASMTABLE2, 1 699 <3> %assign %$currofs $ - asmtab 699 ****************** <3> expansion: currofs = 855 699 <3> %ifnempty %2 699 <3> db %2 699 <3> %endif 699 <3> __SECT__ 699 <3> %defstr %$string %1 699 ****************** <3> expansion: string = 'IMUL' 699 <3> %strlen %$string_size %$string 699 ****************** <3> expansion: string_size = 4 699 <3> %if %$string_size > 15 699 <3> %error Mnemonic %1 is too long! 699 <3> %endif 699 000005C4 7435 <3> dw (%$currofs)<<4|%$string_size 699 <3> %assign MN_%1 $ - mnlist 699 ****************** <3> expansion: MN_IMUL = 1223 699 000005C6 494D554C <3> db %$string 699 <3> %pop 700 00000357 C715 <2> variant AGRP(6,5), 16 700 ****************** <2> expansion: ainfo = 50965 700 ****************** <2> expansion: escaped = 199 700 ****************** <2> expansion: escapes = 0 701 00000359 F78867 <2> variant 1afh, 8, ASM_MACH3 701 ****************** <2> expansion: ainfo = 34919 701 ****************** <2> expansion: escaped = 136 701 ****************** <2> expansion: escapes = 0 702 0000035C F521FA <2> variant 06bh, 31, ASM_MACH1 702 ****************** <2> expansion: ainfo = 8698 702 ****************** <2> expansion: escaped = 33 702 ****************** <2> expansion: escapes = 0 703 0000035F F521FB <2> variant 06bh, 32, ASM_MACH1 703 ****************** <2> expansion: ainfo = 8699 703 ****************** <2> expansion: escaped = 33 703 ****************** <2> expansion: escapes = 0 704 00000362 F5215A <2> variant 069h, 33, ASM_MACH1 704 ****************** <2> expansion: ainfo = 8538 704 ****************** <2> expansion: escaped = 33 704 ****************** <2> expansion: escapes = 0 705 00000365 F5215B <2> variant 069h, 34, ASM_MACH1 705 ****************** <2> expansion: ainfo = 8539 705 ****************** <2> expansion: escaped = 33 705 ****************** <2> expansion: escapes = 0 706 00000368 FF <2> endvariant 707 <2> mne IN ; ofs=385h 707 <3> %push 707 <3> usesection ASMTABLE2, 1 707 <3> %assign %$currofs $ - asmtab 707 ****************** <3> expansion: currofs = 873 707 <3> %ifnempty %2 707 <3> db %2 707 <3> %endif 707 <3> __SECT__ 707 <3> %defstr %$string %1 707 ****************** <3> expansion: string = 'IN' 707 <3> %strlen %$string_size %$string 707 ****************** <3> expansion: string_size = 2 707 <3> %if %$string_size > 15 707 <3> %error Mnemonic %1 is too long! 707 <3> %endif 707 000005CA 9236 <3> dw (%$currofs)<<4|%$string_size 707 <3> %assign MN_%1 $ - mnlist 707 ****************** <3> expansion: MN_IN = 1229 707 000005CC 494E <3> db %$string 707 <3> %pop 708 00000369 4847 <2> variant 0e4h, 35 708 ****************** <2> expansion: ainfo = 18503 708 ****************** <2> expansion: escaped = 72 708 ****************** <2> expansion: escapes = 0 709 0000036B 4AD0 <2> variant 0ech, 36 709 ****************** <2> expansion: ainfo = 19152 709 ****************** <2> expansion: escaped = 74 709 ****************** <2> expansion: escapes = 0 710 0000036D FF <2> endvariant 711 <2> mne INC ; ofs=38Ah 711 <3> %push 711 <3> usesection ASMTABLE2, 1 711 <3> %assign %$currofs $ - asmtab 711 ****************** <3> expansion: currofs = 878 711 <3> %ifnempty %2 711 <3> db %2 711 <3> %endif 711 <3> __SECT__ 711 <3> %defstr %$string %1 711 ****************** <3> expansion: string = 'INC' 711 <3> %strlen %$string_size %$string 711 ****************** <3> expansion: string_size = 3 711 <3> %if %$string_size > 15 711 <3> %error Mnemonic %1 is too long! 711 <3> %endif 711 000005CE E336 <3> dw (%$currofs)<<4|%$string_size 711 <3> %assign MN_%1 $ - mnlist 711 ****************** <3> expansion: MN_INC = 1233 711 000005D0 494E43 <3> db %$string 711 <3> %pop 712 0000036E 1451 <2> variant 040h, 17 712 ****************** <2> expansion: ainfo = 5201 712 ****************** <2> expansion: escaped = 20 712 ****************** <2> expansion: escapes = 0 713 00000370 FBB650 <2> variant AGRP(0,0), 16, ASM_LOCKABLE 713 ****************** <2> expansion: ainfo = 46672 713 ****************** <2> expansion: escaped = 182 713 ****************** <2> expansion: escapes = 0 714 00000373 FF <2> endvariant 715 <2> mne INSB ; ofs=390h 715 <3> %push 715 <3> usesection ASMTABLE2, 1 715 <3> %assign %$currofs $ - asmtab 715 ****************** <3> expansion: currofs = 884 715 <3> %ifnempty %2 715 <3> db %2 715 <3> %endif 715 <3> __SECT__ 715 <3> %defstr %$string %1 715 ****************** <3> expansion: string = 'INSB' 715 <3> %strlen %$string_size %$string 715 ****************** <3> expansion: string_size = 4 715 <3> %if %$string_size > 15 715 <3> %error Mnemonic %1 is too long! 715 <3> %endif 715 000005D3 4437 <3> dw (%$currofs)<<4|%$string_size 715 <3> %assign MN_%1 $ - mnlist 715 ****************** <3> expansion: MN_INSB = 1238 715 000005D5 494E5342 <3> db %$string 715 <3> %pop 716 00000374 F5222C <2> variant 06ch, 0, ASM_MACH1 716 ****************** <2> expansion: ainfo = 8748 716 ****************** <2> expansion: escaped = 34 716 ****************** <2> expansion: escapes = 0 717 00000377 FF <2> endvariant 718 <2> mne INT ; ofs=398h 718 <3> %push 718 <3> usesection ASMTABLE2, 1 718 <3> %assign %$currofs $ - asmtab 718 ****************** <3> expansion: currofs = 888 718 <3> %ifnempty %2 718 <3> db %2 718 <3> %endif 718 <3> __SECT__ 718 <3> %defstr %$string %1 718 ****************** <3> expansion: string = 'INT' 718 <3> %strlen %$string_size %$string 718 ****************** <3> expansion: string_size = 3 718 <3> %if %$string_size > 15 718 <3> %error Mnemonic %1 is too long! 718 <3> %endif 718 000005D9 8337 <3> dw (%$currofs)<<4|%$string_size 718 <3> %assign MN_%1 $ - mnlist 718 ****************** <3> expansion: MN_INT = 1244 718 000005DB 494E54 <3> db %$string 718 <3> %pop 719 00000378 40B1 <2> variant 0cch, 37 719 ****************** <2> expansion: ainfo = 16561 719 ****************** <2> expansion: escaped = 64 719 ****************** <2> expansion: escapes = 0 720 0000037A 4103 <2> variant 0cdh, 38 720 ****************** <2> expansion: ainfo = 16643 720 ****************** <2> expansion: escaped = 65 720 ****************** <2> expansion: escapes = 0 721 0000037C FF <2> endvariant 722 <2> mne INT1 ; ofs=39Dh 722 <3> %push 722 <3> usesection ASMTABLE2, 1 722 <3> %assign %$currofs $ - asmtab 722 ****************** <3> expansion: currofs = 893 722 <3> %ifnempty %2 722 <3> db %2 722 <3> %endif 722 <3> __SECT__ 722 <3> %defstr %$string %1 722 ****************** <3> expansion: string = 'INT1' 722 <3> %strlen %$string_size %$string 722 ****************** <3> expansion: string_size = 4 722 <3> %if %$string_size > 15 722 <3> %error Mnemonic %1 is too long! 722 <3> %endif 722 000005DE D437 <3> dw (%$currofs)<<4|%$string_size 722 <3> %assign MN_%1 $ - mnlist 722 ****************** <3> expansion: MN_INT1 = 1249 722 000005E0 494E5431 <3> db %$string 722 <3> %pop 723 0000037D FA4C41 <2> variant 0f1h, 0, ASM_MACH6 723 ****************** <2> expansion: ainfo = 19521 723 ****************** <2> expansion: escaped = 76 723 ****************** <2> expansion: escapes = 0 724 00000380 FF <2> endvariant 725 <2> mne INT01 ; ofs=3A1h 725 <3> %push 725 <3> usesection ASMTABLE2, 1 725 <3> %assign %$currofs $ - asmtab 725 ****************** <3> expansion: currofs = 897 725 <3> %ifnempty %2 725 <3> db %2 725 <3> %endif 725 <3> __SECT__ 725 <3> %defstr %$string %1 725 ****************** <3> expansion: string = 'INT01' 725 <3> %strlen %$string_size %$string 725 ****************** <3> expansion: string_size = 5 725 <3> %if %$string_size > 15 725 <3> %error Mnemonic %1 is too long! 725 <3> %endif 725 000005E4 1538 <3> dw (%$currofs)<<4|%$string_size 725 <3> %assign MN_%1 $ - mnlist 725 ****************** <3> expansion: MN_INT01 = 1255 725 000005E6 494E543031 <3> db %$string 725 <3> %pop 726 00000381 FA4C41 <2> variant 0f1h, 0, ASM_MACH6 726 ****************** <2> expansion: ainfo = 19521 726 ****************** <2> expansion: escaped = 76 726 ****************** <2> expansion: escapes = 0 727 00000384 FF <2> endvariant 728 <2> mne ICEBP ; ofs=3A5h 728 <3> %push 728 <3> usesection ASMTABLE2, 1 728 <3> %assign %$currofs $ - asmtab 728 ****************** <3> expansion: currofs = 901 728 <3> %ifnempty %2 728 <3> db %2 728 <3> %endif 728 <3> __SECT__ 728 <3> %defstr %$string %1 728 ****************** <3> expansion: string = 'ICEBP' 728 <3> %strlen %$string_size %$string 728 ****************** <3> expansion: string_size = 5 728 <3> %if %$string_size > 15 728 <3> %error Mnemonic %1 is too long! 728 <3> %endif 728 000005EB 5538 <3> dw (%$currofs)<<4|%$string_size 728 <3> %assign MN_%1 $ - mnlist 728 ****************** <3> expansion: MN_ICEBP = 1262 728 000005ED 4943454250 <3> db %$string 728 <3> %pop 729 00000385 FA4C41 <2> variant 0f1h, 0, ASM_MACH6 729 ****************** <2> expansion: ainfo = 19521 729 ****************** <2> expansion: escaped = 76 729 ****************** <2> expansion: escapes = 0 730 00000388 FF <2> endvariant 731 <2> mne INT3 ; ofs=3A9h 731 <3> %push 731 <3> usesection ASMTABLE2, 1 731 <3> %assign %$currofs $ - asmtab 731 ****************** <3> expansion: currofs = 905 731 <3> %ifnempty %2 731 <3> db %2 731 <3> %endif 731 <3> __SECT__ 731 <3> %defstr %$string %1 731 ****************** <3> expansion: string = 'INT3' 731 <3> %strlen %$string_size %$string 731 ****************** <3> expansion: string_size = 4 731 <3> %if %$string_size > 15 731 <3> %error Mnemonic %1 is too long! 731 <3> %endif 731 000005F2 9438 <3> dw (%$currofs)<<4|%$string_size 731 <3> %assign MN_%1 $ - mnlist 731 ****************** <3> expansion: MN_INT3 = 1269 731 000005F4 494E5433 <3> db %$string 731 <3> %pop 732 00000389 408C <2> variant 0cch, 0 732 ****************** <2> expansion: ainfo = 16524 732 ****************** <2> expansion: escaped = 64 732 ****************** <2> expansion: escapes = 0 733 0000038B FF <2> endvariant 734 <2> mne INT03 ; ofs=3ACh 734 <3> %push 734 <3> usesection ASMTABLE2, 1 734 <3> %assign %$currofs $ - asmtab 734 ****************** <3> expansion: currofs = 908 734 <3> %ifnempty %2 734 <3> db %2 734 <3> %endif 734 <3> __SECT__ 734 <3> %defstr %$string %1 734 ****************** <3> expansion: string = 'INT03' 734 <3> %strlen %$string_size %$string 734 ****************** <3> expansion: string_size = 5 734 <3> %if %$string_size > 15 734 <3> %error Mnemonic %1 is too long! 734 <3> %endif 734 000005F8 C538 <3> dw (%$currofs)<<4|%$string_size 734 <3> %assign MN_%1 $ - mnlist 734 ****************** <3> expansion: MN_INT03 = 1275 734 000005FA 494E543033 <3> db %$string 734 <3> %pop 735 0000038C 408C <2> variant 0cch, 0 735 ****************** <2> expansion: ainfo = 16524 735 ****************** <2> expansion: escaped = 64 735 ****************** <2> expansion: escapes = 0 736 0000038E FF <2> endvariant 737 <2> mne INTO ; ofs=3AFh 737 <3> %push 737 <3> usesection ASMTABLE2, 1 737 <3> %assign %$currofs $ - asmtab 737 ****************** <3> expansion: currofs = 911 737 <3> %ifnempty %2 737 <3> db %2 737 <3> %endif 737 <3> __SECT__ 737 <3> %defstr %$string %1 737 ****************** <3> expansion: string = 'INTO' 737 <3> %strlen %$string_size %$string 737 ****************** <3> expansion: string_size = 4 737 <3> %if %$string_size > 15 737 <3> %error Mnemonic %1 is too long! 737 <3> %endif 737 000005FF F438 <3> dw (%$currofs)<<4|%$string_size 737 <3> %assign MN_%1 $ - mnlist 737 ****************** <3> expansion: MN_INTO = 1282 737 00000601 494E544F <3> db %$string 737 <3> %pop 738 0000038F 412E <2> variant 0ceh, 0 738 ****************** <2> expansion: ainfo = 16686 738 ****************** <2> expansion: escaped = 65 738 ****************** <2> expansion: escapes = 0 739 00000391 FF <2> endvariant 740 <2> mne INVD ; ofs=3B2h 740 <3> %push 740 <3> usesection ASMTABLE2, 1 740 <3> %assign %$currofs $ - asmtab 740 ****************** <3> expansion: currofs = 914 740 <3> %ifnempty %2 740 <3> db %2 740 <3> %endif 740 <3> __SECT__ 740 <3> %defstr %$string %1 740 ****************** <3> expansion: string = 'INVD' 740 <3> %strlen %$string_size %$string 740 ****************** <3> expansion: string_size = 4 740 <3> %if %$string_size > 15 740 <3> %error Mnemonic %1 is too long! 740 <3> %endif 740 00000605 2439 <3> dw (%$currofs)<<4|%$string_size 740 <3> %assign MN_%1 $ - mnlist 740 ****************** <3> expansion: MN_INVD = 1288 740 00000607 494E5644 <3> db %$string 740 <3> %pop 741 00000392 F85388 <2> variant 108h, 0, ASM_MACH4 741 ****************** <2> expansion: ainfo = 21384 741 ****************** <2> expansion: escaped = 83 741 ****************** <2> expansion: escapes = 0 742 00000395 FF <2> endvariant 743 <2> mne INVLPG ; ofs=3B6h 743 <3> %push 743 <3> usesection ASMTABLE2, 1 743 <3> %assign %$currofs $ - asmtab 743 ****************** <3> expansion: currofs = 918 743 <3> %ifnempty %2 743 <3> db %2 743 <3> %endif 743 <3> __SECT__ 743 <3> %defstr %$string %1 743 ****************** <3> expansion: string = 'INVLPG' 743 <3> %strlen %$string_size %$string 743 ****************** <3> expansion: string_size = 6 743 <3> %if %$string_size > 15 743 <3> %error Mnemonic %1 is too long! 743 <3> %endif 743 0000060B 6639 <3> dw (%$currofs)<<4|%$string_size 743 <3> %assign MN_%1 $ - mnlist 743 ****************** <3> expansion: MN_INVLPG = 1294 743 0000060D 494E564C5047 <3> db %$string 743 <3> %pop 744 00000396 F8CA4C <2> variant AGRP(7,7), 29, ASM_MACH4 744 ****************** <2> expansion: ainfo = 51788 744 ****************** <2> expansion: escaped = 202 744 ****************** <2> expansion: escapes = 0 745 00000399 FF <2> endvariant 746 <2> mne JA ; ofs=3BDh 746 <3> %push 746 <3> usesection ASMTABLE2, 1 746 <3> %assign %$currofs $ - asmtab 746 ****************** <3> expansion: currofs = 922 746 <3> %ifnempty %2 746 <3> db %2 746 <3> %endif 746 <3> __SECT__ 746 <3> %defstr %$string %1 746 ****************** <3> expansion: string = 'JA' 746 <3> %strlen %$string_size %$string 746 ****************** <3> expansion: string_size = 2 746 <3> %if %$string_size > 15 746 <3> %error Mnemonic %1 is too long! 746 <3> %endif 746 00000613 A239 <3> dw (%$currofs)<<4|%$string_size 746 <3> %assign MN_%1 $ - mnlist 746 ****************** <3> expansion: MN_JA = 1302 746 00000615 4A41 <3> db %$string 746 <3> %pop 747 0000039A 25CE <2> variant 077h, 39 747 ****************** <2> expansion: ainfo = 9678 747 ****************** <2> expansion: escaped = 37 747 ****************** <2> expansion: escapes = 0 748 0000039C F77BC3 <2> variant 187h, 12, ASM_MACH3 748 ****************** <2> expansion: ainfo = 31683 748 ****************** <2> expansion: escaped = 123 748 ****************** <2> expansion: escapes = 0 749 0000039F FF <2> endvariant 750 <2> mne JAE ; ofs=3C3h 750 <3> %push 750 <3> usesection ASMTABLE2, 1 750 <3> %assign %$currofs $ - asmtab 750 ****************** <3> expansion: currofs = 928 750 <3> %ifnempty %2 750 <3> db %2 750 <3> %endif 750 <3> __SECT__ 750 <3> %defstr %$string %1 750 ****************** <3> expansion: string = 'JAE' 750 <3> %strlen %$string_size %$string 750 ****************** <3> expansion: string_size = 3 750 <3> %if %$string_size > 15 750 <3> %error Mnemonic %1 is too long! 750 <3> %endif 750 00000617 033A <3> dw (%$currofs)<<4|%$string_size 750 <3> %assign MN_%1 $ - mnlist 750 ****************** <3> expansion: MN_JAE = 1306 750 00000619 4A4145 <3> db %$string 750 <3> %pop 751 000003A0 248A <2> variant 073h, 39 751 ****************** <2> expansion: ainfo = 9354 751 ****************** <2> expansion: escaped = 36 751 ****************** <2> expansion: escapes = 0 752 000003A2 F77A7F <2> variant 183h, 12, ASM_MACH3 752 ****************** <2> expansion: ainfo = 31359 752 ****************** <2> expansion: escaped = 122 752 ****************** <2> expansion: escapes = 0 753 000003A5 FF <2> endvariant 754 <2> mne JB ; ofs=3C9h 754 <3> %push 754 <3> usesection ASMTABLE2, 1 754 <3> %assign %$currofs $ - asmtab 754 ****************** <3> expansion: currofs = 934 754 <3> %ifnempty %2 754 <3> db %2 754 <3> %endif 754 <3> __SECT__ 754 <3> %defstr %$string %1 754 ****************** <3> expansion: string = 'JB' 754 <3> %strlen %$string_size %$string 754 ****************** <3> expansion: string_size = 2 754 <3> %if %$string_size > 15 754 <3> %error Mnemonic %1 is too long! 754 <3> %endif 754 0000061C 623A <3> dw (%$currofs)<<4|%$string_size 754 <3> %assign MN_%1 $ - mnlist 754 ****************** <3> expansion: MN_JB = 1311 754 0000061E 4A42 <3> db %$string 754 <3> %pop 755 000003A6 2439 <2> variant 072h, 39 755 ****************** <2> expansion: ainfo = 9273 755 ****************** <2> expansion: escaped = 36 755 ****************** <2> expansion: escapes = 0 756 000003A8 F77A2E <2> variant 182h, 12, ASM_MACH3 756 ****************** <2> expansion: ainfo = 31278 756 ****************** <2> expansion: escaped = 122 756 ****************** <2> expansion: escapes = 0 757 000003AB FF <2> endvariant 758 <2> mne JBE ; ofs=3CFh 758 <3> %push 758 <3> usesection ASMTABLE2, 1 758 <3> %assign %$currofs $ - asmtab 758 ****************** <3> expansion: currofs = 940 758 <3> %ifnempty %2 758 <3> db %2 758 <3> %endif 758 <3> __SECT__ 758 <3> %defstr %$string %1 758 ****************** <3> expansion: string = 'JBE' 758 <3> %strlen %$string_size %$string 758 ****************** <3> expansion: string_size = 3 758 <3> %if %$string_size > 15 758 <3> %error Mnemonic %1 is too long! 758 <3> %endif 758 00000620 C33A <3> dw (%$currofs)<<4|%$string_size 758 <3> %assign MN_%1 $ - mnlist 758 ****************** <3> expansion: MN_JBE = 1315 758 00000622 4A4245 <3> db %$string 758 <3> %pop 759 000003AC 257D <2> variant 076h, 39 759 ****************** <2> expansion: ainfo = 9597 759 ****************** <2> expansion: escaped = 37 759 ****************** <2> expansion: escapes = 0 760 000003AE F77B72 <2> variant 186h, 12, ASM_MACH3 760 ****************** <2> expansion: ainfo = 31602 760 ****************** <2> expansion: escaped = 123 760 ****************** <2> expansion: escapes = 0 761 000003B1 FF <2> endvariant 762 <2> mne JC ; ofs=3D5h 762 <3> %push 762 <3> usesection ASMTABLE2, 1 762 <3> %assign %$currofs $ - asmtab 762 ****************** <3> expansion: currofs = 946 762 <3> %ifnempty %2 762 <3> db %2 762 <3> %endif 762 <3> __SECT__ 762 <3> %defstr %$string %1 762 ****************** <3> expansion: string = 'JC' 762 <3> %strlen %$string_size %$string 762 ****************** <3> expansion: string_size = 2 762 <3> %if %$string_size > 15 762 <3> %error Mnemonic %1 is too long! 762 <3> %endif 762 00000625 223B <3> dw (%$currofs)<<4|%$string_size 762 <3> %assign MN_%1 $ - mnlist 762 ****************** <3> expansion: MN_JC = 1320 762 00000627 4A43 <3> db %$string 762 <3> %pop 763 000003B2 2439 <2> variant 072h, 39 763 ****************** <2> expansion: ainfo = 9273 763 ****************** <2> expansion: escaped = 36 763 ****************** <2> expansion: escapes = 0 764 000003B4 F77A2E <2> variant 182h, 12, ASM_MACH3 764 ****************** <2> expansion: ainfo = 31278 764 ****************** <2> expansion: escaped = 122 764 ****************** <2> expansion: escapes = 0 765 000003B7 FF <2> endvariant 766 <2> mne JCXZ, ASM_D16 ; ofs=3DBh 766 <3> %push 766 <3> usesection ASMTABLE2, 1 766 <3> %assign %$currofs $ - asmtab 766 ****************** <3> expansion: currofs = 952 766 <3> %ifnempty %2 766 000003B8 FC <3> db %2 766 <3> %endif 766 <3> __SECT__ 766 <3> %defstr %$string %1 766 ****************** <3> expansion: string = 'JCXZ' 766 <3> %strlen %$string_size %$string 766 ****************** <3> expansion: string_size = 4 766 <3> %if %$string_size > 15 766 <3> %error Mnemonic %1 is too long! 766 <3> %endif 766 00000629 843B <3> dw (%$currofs)<<4|%$string_size 766 <3> %assign MN_%1 $ - mnlist 766 ****************** <3> expansion: MN_JCXZ = 1324 766 0000062B 4A43585A <3> db %$string 766 <3> %pop 767 <2> mne JECXZ, ASM_D32 ; ofs=3DCh 767 <3> %push 767 <3> usesection ASMTABLE2, 1 767 <3> %assign %$currofs $ - asmtab 767 ****************** <3> expansion: currofs = 953 767 <3> %ifnempty %2 767 000003B9 FD <3> db %2 767 <3> %endif 767 <3> __SECT__ 767 <3> %defstr %$string %1 767 ****************** <3> expansion: string = 'JECXZ' 767 <3> %strlen %$string_size %$string 767 ****************** <3> expansion: string_size = 5 767 <3> %if %$string_size > 15 767 <3> %error Mnemonic %1 is too long! 767 <3> %endif 767 0000062F 953B <3> dw (%$currofs)<<4|%$string_size 767 <3> %assign MN_%1 $ - mnlist 767 ****************** <3> expansion: MN_JECXZ = 1330 767 00000631 4A4543585A <3> db %$string 767 <3> %pop 768 000003BA 47FA <2> variant 0e3h, 39 768 ****************** <2> expansion: ainfo = 18426 768 ****************** <2> expansion: escaped = 71 768 ****************** <2> expansion: escapes = 0 769 000003BC FF <2> endvariant 770 <2> mne JE ; ofs=3E0h 770 <3> %push 770 <3> usesection ASMTABLE2, 1 770 <3> %assign %$currofs $ - asmtab 770 ****************** <3> expansion: currofs = 957 770 <3> %ifnempty %2 770 <3> db %2 770 <3> %endif 770 <3> __SECT__ 770 <3> %defstr %$string %1 770 ****************** <3> expansion: string = 'JE' 770 <3> %strlen %$string_size %$string 770 ****************** <3> expansion: string_size = 2 770 <3> %if %$string_size > 15 770 <3> %error Mnemonic %1 is too long! 770 <3> %endif 770 00000636 D23B <3> dw (%$currofs)<<4|%$string_size 770 <3> %assign MN_%1 $ - mnlist 770 ****************** <3> expansion: MN_JE = 1337 770 00000638 4A45 <3> db %$string 770 <3> %pop 771 000003BD 24DB <2> variant 074h, 39 771 ****************** <2> expansion: ainfo = 9435 771 ****************** <2> expansion: escaped = 36 771 ****************** <2> expansion: escapes = 0 772 000003BF F77AD0 <2> variant 184h, 12, ASM_MACH3 772 ****************** <2> expansion: ainfo = 31440 772 ****************** <2> expansion: escaped = 122 772 ****************** <2> expansion: escapes = 0 773 000003C2 FF <2> endvariant 774 <2> mne JG ; ofs=3E6h 774 <3> %push 774 <3> usesection ASMTABLE2, 1 774 <3> %assign %$currofs $ - asmtab 774 ****************** <3> expansion: currofs = 963 774 <3> %ifnempty %2 774 <3> db %2 774 <3> %endif 774 <3> __SECT__ 774 <3> %defstr %$string %1 774 ****************** <3> expansion: string = 'JG' 774 <3> %strlen %$string_size %$string 774 ****************** <3> expansion: string_size = 2 774 <3> %if %$string_size > 15 774 <3> %error Mnemonic %1 is too long! 774 <3> %endif 774 0000063A 323C <3> dw (%$currofs)<<4|%$string_size 774 <3> %assign MN_%1 $ - mnlist 774 ****************** <3> expansion: MN_JG = 1341 774 0000063C 4A47 <3> db %$string 774 <3> %pop 775 000003C3 2856 <2> variant 07fh, 39 775 ****************** <2> expansion: ainfo = 10326 775 ****************** <2> expansion: escaped = 40 775 ****************** <2> expansion: escapes = 0 776 000003C5 F77E4B <2> variant 18fh, 12, ASM_MACH3 776 ****************** <2> expansion: ainfo = 32331 776 ****************** <2> expansion: escaped = 126 776 ****************** <2> expansion: escapes = 0 777 000003C8 FF <2> endvariant 778 <2> mne JGE ; ofs=3ECh 778 <3> %push 778 <3> usesection ASMTABLE2, 1 778 <3> %assign %$currofs $ - asmtab 778 ****************** <3> expansion: currofs = 969 778 <3> %ifnempty %2 778 <3> db %2 778 <3> %endif 778 <3> __SECT__ 778 <3> %defstr %$string %1 778 ****************** <3> expansion: string = 'JGE' 778 <3> %strlen %$string_size %$string 778 ****************** <3> expansion: string_size = 3 778 <3> %if %$string_size > 15 778 <3> %error Mnemonic %1 is too long! 778 <3> %endif 778 0000063E 933C <3> dw (%$currofs)<<4|%$string_size 778 <3> %assign MN_%1 $ - mnlist 778 ****************** <3> expansion: MN_JGE = 1345 778 00000640 4A4745 <3> db %$string 778 <3> %pop 779 000003C9 27B4 <2> variant 07dh, 39 779 ****************** <2> expansion: ainfo = 10164 779 ****************** <2> expansion: escaped = 39 779 ****************** <2> expansion: escapes = 0 780 000003CB F77DA9 <2> variant 18dh, 12, ASM_MACH3 780 ****************** <2> expansion: ainfo = 32169 780 ****************** <2> expansion: escaped = 125 780 ****************** <2> expansion: escapes = 0 781 000003CE FF <2> endvariant 782 <2> mne JL ; ofs=3F2h 782 <3> %push 782 <3> usesection ASMTABLE2, 1 782 <3> %assign %$currofs $ - asmtab 782 ****************** <3> expansion: currofs = 975 782 <3> %ifnempty %2 782 <3> db %2 782 <3> %endif 782 <3> __SECT__ 782 <3> %defstr %$string %1 782 ****************** <3> expansion: string = 'JL' 782 <3> %strlen %$string_size %$string 782 ****************** <3> expansion: string_size = 2 782 <3> %if %$string_size > 15 782 <3> %error Mnemonic %1 is too long! 782 <3> %endif 782 00000643 F23C <3> dw (%$currofs)<<4|%$string_size 782 <3> %assign MN_%1 $ - mnlist 782 ****************** <3> expansion: MN_JL = 1350 782 00000645 4A4C <3> db %$string 782 <3> %pop 783 000003CF 2763 <2> variant 07ch, 39 783 ****************** <2> expansion: ainfo = 10083 783 ****************** <2> expansion: escaped = 39 783 ****************** <2> expansion: escapes = 0 784 000003D1 F77D58 <2> variant 18ch, 12, ASM_MACH3 784 ****************** <2> expansion: ainfo = 32088 784 ****************** <2> expansion: escaped = 125 784 ****************** <2> expansion: escapes = 0 785 000003D4 FF <2> endvariant 786 <2> mne JLE ; ofs=3F8h 786 <3> %push 786 <3> usesection ASMTABLE2, 1 786 <3> %assign %$currofs $ - asmtab 786 ****************** <3> expansion: currofs = 981 786 <3> %ifnempty %2 786 <3> db %2 786 <3> %endif 786 <3> __SECT__ 786 <3> %defstr %$string %1 786 ****************** <3> expansion: string = 'JLE' 786 <3> %strlen %$string_size %$string 786 ****************** <3> expansion: string_size = 3 786 <3> %if %$string_size > 15 786 <3> %error Mnemonic %1 is too long! 786 <3> %endif 786 00000647 533D <3> dw (%$currofs)<<4|%$string_size 786 <3> %assign MN_%1 $ - mnlist 786 ****************** <3> expansion: MN_JLE = 1354 786 00000649 4A4C45 <3> db %$string 786 <3> %pop 787 000003D5 2805 <2> variant 07eh, 39 787 ****************** <2> expansion: ainfo = 10245 787 ****************** <2> expansion: escaped = 40 787 ****************** <2> expansion: escapes = 0 788 000003D7 F77DFA <2> variant 18eh, 12, ASM_MACH3 788 ****************** <2> expansion: ainfo = 32250 788 ****************** <2> expansion: escaped = 125 788 ****************** <2> expansion: escapes = 0 789 000003DA FF <2> endvariant 790 <2> mne JNA ; ofs=3FEh 790 <3> %push 790 <3> usesection ASMTABLE2, 1 790 <3> %assign %$currofs $ - asmtab 790 ****************** <3> expansion: currofs = 987 790 <3> %ifnempty %2 790 <3> db %2 790 <3> %endif 790 <3> __SECT__ 790 <3> %defstr %$string %1 790 ****************** <3> expansion: string = 'JNA' 790 <3> %strlen %$string_size %$string 790 ****************** <3> expansion: string_size = 3 790 <3> %if %$string_size > 15 790 <3> %error Mnemonic %1 is too long! 790 <3> %endif 790 0000064C B33D <3> dw (%$currofs)<<4|%$string_size 790 <3> %assign MN_%1 $ - mnlist 790 ****************** <3> expansion: MN_JNA = 1359 790 0000064E 4A4E41 <3> db %$string 790 <3> %pop 791 000003DB 257D <2> variant 076h, 39 791 ****************** <2> expansion: ainfo = 9597 791 ****************** <2> expansion: escaped = 37 791 ****************** <2> expansion: escapes = 0 792 000003DD F77B72 <2> variant 186h, 12, ASM_MACH3 792 ****************** <2> expansion: ainfo = 31602 792 ****************** <2> expansion: escaped = 123 792 ****************** <2> expansion: escapes = 0 793 000003E0 FF <2> endvariant 794 <2> mne JNAE ; ofs=404h 794 <3> %push 794 <3> usesection ASMTABLE2, 1 794 <3> %assign %$currofs $ - asmtab 794 ****************** <3> expansion: currofs = 993 794 <3> %ifnempty %2 794 <3> db %2 794 <3> %endif 794 <3> __SECT__ 794 <3> %defstr %$string %1 794 ****************** <3> expansion: string = 'JNAE' 794 <3> %strlen %$string_size %$string 794 ****************** <3> expansion: string_size = 4 794 <3> %if %$string_size > 15 794 <3> %error Mnemonic %1 is too long! 794 <3> %endif 794 00000651 143E <3> dw (%$currofs)<<4|%$string_size 794 <3> %assign MN_%1 $ - mnlist 794 ****************** <3> expansion: MN_JNAE = 1364 794 00000653 4A4E4145 <3> db %$string 794 <3> %pop 795 000003E1 2439 <2> variant 072h, 39 795 ****************** <2> expansion: ainfo = 9273 795 ****************** <2> expansion: escaped = 36 795 ****************** <2> expansion: escapes = 0 796 000003E3 F77A2E <2> variant 182h, 12, ASM_MACH3 796 ****************** <2> expansion: ainfo = 31278 796 ****************** <2> expansion: escaped = 122 796 ****************** <2> expansion: escapes = 0 797 000003E6 FF <2> endvariant 798 <2> mne JNB ; ofs=40Ah 798 <3> %push 798 <3> usesection ASMTABLE2, 1 798 <3> %assign %$currofs $ - asmtab 798 ****************** <3> expansion: currofs = 999 798 <3> %ifnempty %2 798 <3> db %2 798 <3> %endif 798 <3> __SECT__ 798 <3> %defstr %$string %1 798 ****************** <3> expansion: string = 'JNB' 798 <3> %strlen %$string_size %$string 798 ****************** <3> expansion: string_size = 3 798 <3> %if %$string_size > 15 798 <3> %error Mnemonic %1 is too long! 798 <3> %endif 798 00000657 733E <3> dw (%$currofs)<<4|%$string_size 798 <3> %assign MN_%1 $ - mnlist 798 ****************** <3> expansion: MN_JNB = 1370 798 00000659 4A4E42 <3> db %$string 798 <3> %pop 799 000003E7 248A <2> variant 073h, 39 799 ****************** <2> expansion: ainfo = 9354 799 ****************** <2> expansion: escaped = 36 799 ****************** <2> expansion: escapes = 0 800 000003E9 F77A7F <2> variant 183h, 12, ASM_MACH3 800 ****************** <2> expansion: ainfo = 31359 800 ****************** <2> expansion: escaped = 122 800 ****************** <2> expansion: escapes = 0 801 000003EC FF <2> endvariant 802 <2> mne JNBE ; ofs=410h 802 <3> %push 802 <3> usesection ASMTABLE2, 1 802 <3> %assign %$currofs $ - asmtab 802 ****************** <3> expansion: currofs = 1005 802 <3> %ifnempty %2 802 <3> db %2 802 <3> %endif 802 <3> __SECT__ 802 <3> %defstr %$string %1 802 ****************** <3> expansion: string = 'JNBE' 802 <3> %strlen %$string_size %$string 802 ****************** <3> expansion: string_size = 4 802 <3> %if %$string_size > 15 802 <3> %error Mnemonic %1 is too long! 802 <3> %endif 802 0000065C D43E <3> dw (%$currofs)<<4|%$string_size 802 <3> %assign MN_%1 $ - mnlist 802 ****************** <3> expansion: MN_JNBE = 1375 802 0000065E 4A4E4245 <3> db %$string 802 <3> %pop 803 000003ED 25CE <2> variant 077h, 39 803 ****************** <2> expansion: ainfo = 9678 803 ****************** <2> expansion: escaped = 37 803 ****************** <2> expansion: escapes = 0 804 000003EF F77BC3 <2> variant 187h, 12, ASM_MACH3 804 ****************** <2> expansion: ainfo = 31683 804 ****************** <2> expansion: escaped = 123 804 ****************** <2> expansion: escapes = 0 805 000003F2 FF <2> endvariant 806 <2> mne JNC ; ofs=416h 806 <3> %push 806 <3> usesection ASMTABLE2, 1 806 <3> %assign %$currofs $ - asmtab 806 ****************** <3> expansion: currofs = 1011 806 <3> %ifnempty %2 806 <3> db %2 806 <3> %endif 806 <3> __SECT__ 806 <3> %defstr %$string %1 806 ****************** <3> expansion: string = 'JNC' 806 <3> %strlen %$string_size %$string 806 ****************** <3> expansion: string_size = 3 806 <3> %if %$string_size > 15 806 <3> %error Mnemonic %1 is too long! 806 <3> %endif 806 00000662 333F <3> dw (%$currofs)<<4|%$string_size 806 <3> %assign MN_%1 $ - mnlist 806 ****************** <3> expansion: MN_JNC = 1381 806 00000664 4A4E43 <3> db %$string 806 <3> %pop 807 000003F3 248A <2> variant 073h, 39 807 ****************** <2> expansion: ainfo = 9354 807 ****************** <2> expansion: escaped = 36 807 ****************** <2> expansion: escapes = 0 808 000003F5 F77A7F <2> variant 183h, 12, ASM_MACH3 808 ****************** <2> expansion: ainfo = 31359 808 ****************** <2> expansion: escaped = 122 808 ****************** <2> expansion: escapes = 0 809 000003F8 FF <2> endvariant 810 <2> mne JNE ; ofs=41Ch 810 <3> %push 810 <3> usesection ASMTABLE2, 1 810 <3> %assign %$currofs $ - asmtab 810 ****************** <3> expansion: currofs = 1017 810 <3> %ifnempty %2 810 <3> db %2 810 <3> %endif 810 <3> __SECT__ 810 <3> %defstr %$string %1 810 ****************** <3> expansion: string = 'JNE' 810 <3> %strlen %$string_size %$string 810 ****************** <3> expansion: string_size = 3 810 <3> %if %$string_size > 15 810 <3> %error Mnemonic %1 is too long! 810 <3> %endif 810 00000667 933F <3> dw (%$currofs)<<4|%$string_size 810 <3> %assign MN_%1 $ - mnlist 810 ****************** <3> expansion: MN_JNE = 1386 810 00000669 4A4E45 <3> db %$string 810 <3> %pop 811 000003F9 252C <2> variant 075h, 39 811 ****************** <2> expansion: ainfo = 9516 811 ****************** <2> expansion: escaped = 37 811 ****************** <2> expansion: escapes = 0 812 000003FB F77B21 <2> variant 185h, 12, ASM_MACH3 812 ****************** <2> expansion: ainfo = 31521 812 ****************** <2> expansion: escaped = 123 812 ****************** <2> expansion: escapes = 0 813 000003FE FF <2> endvariant 814 <2> mne JNG ; ofs=422h 814 <3> %push 814 <3> usesection ASMTABLE2, 1 814 <3> %assign %$currofs $ - asmtab 814 ****************** <3> expansion: currofs = 1023 814 <3> %ifnempty %2 814 <3> db %2 814 <3> %endif 814 <3> __SECT__ 814 <3> %defstr %$string %1 814 ****************** <3> expansion: string = 'JNG' 814 <3> %strlen %$string_size %$string 814 ****************** <3> expansion: string_size = 3 814 <3> %if %$string_size > 15 814 <3> %error Mnemonic %1 is too long! 814 <3> %endif 814 0000066C F33F <3> dw (%$currofs)<<4|%$string_size 814 <3> %assign MN_%1 $ - mnlist 814 ****************** <3> expansion: MN_JNG = 1391 814 0000066E 4A4E47 <3> db %$string 814 <3> %pop 815 000003FF 2805 <2> variant 07eh, 39 815 ****************** <2> expansion: ainfo = 10245 815 ****************** <2> expansion: escaped = 40 815 ****************** <2> expansion: escapes = 0 816 00000401 F77DFA <2> variant 18eh, 12, ASM_MACH3 816 ****************** <2> expansion: ainfo = 32250 816 ****************** <2> expansion: escaped = 125 816 ****************** <2> expansion: escapes = 0 817 00000404 FF <2> endvariant 818 <2> mne JNGE ; ofs=428h 818 <3> %push 818 <3> usesection ASMTABLE2, 1 818 <3> %assign %$currofs $ - asmtab 818 ****************** <3> expansion: currofs = 1029 818 <3> %ifnempty %2 818 <3> db %2 818 <3> %endif 818 <3> __SECT__ 818 <3> %defstr %$string %1 818 ****************** <3> expansion: string = 'JNGE' 818 <3> %strlen %$string_size %$string 818 ****************** <3> expansion: string_size = 4 818 <3> %if %$string_size > 15 818 <3> %error Mnemonic %1 is too long! 818 <3> %endif 818 00000671 5440 <3> dw (%$currofs)<<4|%$string_size 818 <3> %assign MN_%1 $ - mnlist 818 ****************** <3> expansion: MN_JNGE = 1396 818 00000673 4A4E4745 <3> db %$string 818 <3> %pop 819 00000405 2763 <2> variant 07ch, 39 819 ****************** <2> expansion: ainfo = 10083 819 ****************** <2> expansion: escaped = 39 819 ****************** <2> expansion: escapes = 0 820 00000407 F77D58 <2> variant 18ch, 12, ASM_MACH3 820 ****************** <2> expansion: ainfo = 32088 820 ****************** <2> expansion: escaped = 125 820 ****************** <2> expansion: escapes = 0 821 0000040A FF <2> endvariant 822 <2> mne JNL ; ofs=42Eh 822 <3> %push 822 <3> usesection ASMTABLE2, 1 822 <3> %assign %$currofs $ - asmtab 822 ****************** <3> expansion: currofs = 1035 822 <3> %ifnempty %2 822 <3> db %2 822 <3> %endif 822 <3> __SECT__ 822 <3> %defstr %$string %1 822 ****************** <3> expansion: string = 'JNL' 822 <3> %strlen %$string_size %$string 822 ****************** <3> expansion: string_size = 3 822 <3> %if %$string_size > 15 822 <3> %error Mnemonic %1 is too long! 822 <3> %endif 822 00000677 B340 <3> dw (%$currofs)<<4|%$string_size 822 <3> %assign MN_%1 $ - mnlist 822 ****************** <3> expansion: MN_JNL = 1402 822 00000679 4A4E4C <3> db %$string 822 <3> %pop 823 0000040B 27B4 <2> variant 07dh, 39 823 ****************** <2> expansion: ainfo = 10164 823 ****************** <2> expansion: escaped = 39 823 ****************** <2> expansion: escapes = 0 824 0000040D F77DA9 <2> variant 18dh, 12, ASM_MACH3 824 ****************** <2> expansion: ainfo = 32169 824 ****************** <2> expansion: escaped = 125 824 ****************** <2> expansion: escapes = 0 825 00000410 FF <2> endvariant 826 <2> mne JNLE ; ofs=434h 826 <3> %push 826 <3> usesection ASMTABLE2, 1 826 <3> %assign %$currofs $ - asmtab 826 ****************** <3> expansion: currofs = 1041 826 <3> %ifnempty %2 826 <3> db %2 826 <3> %endif 826 <3> __SECT__ 826 <3> %defstr %$string %1 826 ****************** <3> expansion: string = 'JNLE' 826 <3> %strlen %$string_size %$string 826 ****************** <3> expansion: string_size = 4 826 <3> %if %$string_size > 15 826 <3> %error Mnemonic %1 is too long! 826 <3> %endif 826 0000067C 1441 <3> dw (%$currofs)<<4|%$string_size 826 <3> %assign MN_%1 $ - mnlist 826 ****************** <3> expansion: MN_JNLE = 1407 826 0000067E 4A4E4C45 <3> db %$string 826 <3> %pop 827 00000411 2856 <2> variant 07fh, 39 827 ****************** <2> expansion: ainfo = 10326 827 ****************** <2> expansion: escaped = 40 827 ****************** <2> expansion: escapes = 0 828 00000413 F77E4B <2> variant 18fh, 12, ASM_MACH3 828 ****************** <2> expansion: ainfo = 32331 828 ****************** <2> expansion: escaped = 126 828 ****************** <2> expansion: escapes = 0 829 00000416 FF <2> endvariant 830 <2> mne JNO ; ofs=43Ah 830 <3> %push 830 <3> usesection ASMTABLE2, 1 830 <3> %assign %$currofs $ - asmtab 830 ****************** <3> expansion: currofs = 1047 830 <3> %ifnempty %2 830 <3> db %2 830 <3> %endif 830 <3> __SECT__ 830 <3> %defstr %$string %1 830 ****************** <3> expansion: string = 'JNO' 830 <3> %strlen %$string_size %$string 830 ****************** <3> expansion: string_size = 3 830 <3> %if %$string_size > 15 830 <3> %error Mnemonic %1 is too long! 830 <3> %endif 830 00000682 7341 <3> dw (%$currofs)<<4|%$string_size 830 <3> %assign MN_%1 $ - mnlist 830 ****************** <3> expansion: MN_JNO = 1413 830 00000684 4A4E4F <3> db %$string 830 <3> %pop 831 00000417 23E8 <2> variant 071h, 39 831 ****************** <2> expansion: ainfo = 9192 831 ****************** <2> expansion: escaped = 35 831 ****************** <2> expansion: escapes = 0 832 00000419 F779DD <2> variant 181h, 12, ASM_MACH3 832 ****************** <2> expansion: ainfo = 31197 832 ****************** <2> expansion: escaped = 121 832 ****************** <2> expansion: escapes = 0 833 0000041C FF <2> endvariant 834 <2> mne JNP ; ofs=440h 834 <3> %push 834 <3> usesection ASMTABLE2, 1 834 <3> %assign %$currofs $ - asmtab 834 ****************** <3> expansion: currofs = 1053 834 <3> %ifnempty %2 834 <3> db %2 834 <3> %endif 834 <3> __SECT__ 834 <3> %defstr %$string %1 834 ****************** <3> expansion: string = 'JNP' 834 <3> %strlen %$string_size %$string 834 ****************** <3> expansion: string_size = 3 834 <3> %if %$string_size > 15 834 <3> %error Mnemonic %1 is too long! 834 <3> %endif 834 00000687 D341 <3> dw (%$currofs)<<4|%$string_size 834 <3> %assign MN_%1 $ - mnlist 834 ****************** <3> expansion: MN_JNP = 1418 834 00000689 4A4E50 <3> db %$string 834 <3> %pop 835 0000041D 2712 <2> variant 07bh, 39 835 ****************** <2> expansion: ainfo = 10002 835 ****************** <2> expansion: escaped = 39 835 ****************** <2> expansion: escapes = 0 836 0000041F F77D07 <2> variant 18bh, 12, ASM_MACH3 836 ****************** <2> expansion: ainfo = 32007 836 ****************** <2> expansion: escaped = 125 836 ****************** <2> expansion: escapes = 0 837 00000422 FF <2> endvariant 838 <2> mne JNS ; ofs=446h 838 <3> %push 838 <3> usesection ASMTABLE2, 1 838 <3> %assign %$currofs $ - asmtab 838 ****************** <3> expansion: currofs = 1059 838 <3> %ifnempty %2 838 <3> db %2 838 <3> %endif 838 <3> __SECT__ 838 <3> %defstr %$string %1 838 ****************** <3> expansion: string = 'JNS' 838 <3> %strlen %$string_size %$string 838 ****************** <3> expansion: string_size = 3 838 <3> %if %$string_size > 15 838 <3> %error Mnemonic %1 is too long! 838 <3> %endif 838 0000068C 3342 <3> dw (%$currofs)<<4|%$string_size 838 <3> %assign MN_%1 $ - mnlist 838 ****************** <3> expansion: MN_JNS = 1423 838 0000068E 4A4E53 <3> db %$string 838 <3> %pop 839 00000423 2670 <2> variant 079h, 39 839 ****************** <2> expansion: ainfo = 9840 839 ****************** <2> expansion: escaped = 38 839 ****************** <2> expansion: escapes = 0 840 00000425 F77C65 <2> variant 189h, 12, ASM_MACH3 840 ****************** <2> expansion: ainfo = 31845 840 ****************** <2> expansion: escaped = 124 840 ****************** <2> expansion: escapes = 0 841 00000428 FF <2> endvariant 842 <2> mne JNZ ; ofs=44Ch 842 <3> %push 842 <3> usesection ASMTABLE2, 1 842 <3> %assign %$currofs $ - asmtab 842 ****************** <3> expansion: currofs = 1065 842 <3> %ifnempty %2 842 <3> db %2 842 <3> %endif 842 <3> __SECT__ 842 <3> %defstr %$string %1 842 ****************** <3> expansion: string = 'JNZ' 842 <3> %strlen %$string_size %$string 842 ****************** <3> expansion: string_size = 3 842 <3> %if %$string_size > 15 842 <3> %error Mnemonic %1 is too long! 842 <3> %endif 842 00000691 9342 <3> dw (%$currofs)<<4|%$string_size 842 <3> %assign MN_%1 $ - mnlist 842 ****************** <3> expansion: MN_JNZ = 1428 842 00000693 4A4E5A <3> db %$string 842 <3> %pop 843 00000429 252C <2> variant 075h, 39 843 ****************** <2> expansion: ainfo = 9516 843 ****************** <2> expansion: escaped = 37 843 ****************** <2> expansion: escapes = 0 844 0000042B F77B21 <2> variant 185h, 12, ASM_MACH3 844 ****************** <2> expansion: ainfo = 31521 844 ****************** <2> expansion: escaped = 123 844 ****************** <2> expansion: escapes = 0 845 0000042E FF <2> endvariant 846 <2> mne JO ; ofs=452h 846 <3> %push 846 <3> usesection ASMTABLE2, 1 846 <3> %assign %$currofs $ - asmtab 846 ****************** <3> expansion: currofs = 1071 846 <3> %ifnempty %2 846 <3> db %2 846 <3> %endif 846 <3> __SECT__ 846 <3> %defstr %$string %1 846 ****************** <3> expansion: string = 'JO' 846 <3> %strlen %$string_size %$string 846 ****************** <3> expansion: string_size = 2 846 <3> %if %$string_size > 15 846 <3> %error Mnemonic %1 is too long! 846 <3> %endif 846 00000696 F242 <3> dw (%$currofs)<<4|%$string_size 846 <3> %assign MN_%1 $ - mnlist 846 ****************** <3> expansion: MN_JO = 1433 846 00000698 4A4F <3> db %$string 846 <3> %pop 847 0000042F 2397 <2> variant 070h, 39 847 ****************** <2> expansion: ainfo = 9111 847 ****************** <2> expansion: escaped = 35 847 ****************** <2> expansion: escapes = 0 848 00000431 F7798C <2> variant 180h, 12, ASM_MACH3 848 ****************** <2> expansion: ainfo = 31116 848 ****************** <2> expansion: escaped = 121 848 ****************** <2> expansion: escapes = 0 849 00000434 FF <2> endvariant 850 <2> mne JP ; ofs=458h 850 <3> %push 850 <3> usesection ASMTABLE2, 1 850 <3> %assign %$currofs $ - asmtab 850 ****************** <3> expansion: currofs = 1077 850 <3> %ifnempty %2 850 <3> db %2 850 <3> %endif 850 <3> __SECT__ 850 <3> %defstr %$string %1 850 ****************** <3> expansion: string = 'JP' 850 <3> %strlen %$string_size %$string 850 ****************** <3> expansion: string_size = 2 850 <3> %if %$string_size > 15 850 <3> %error Mnemonic %1 is too long! 850 <3> %endif 850 0000069A 5243 <3> dw (%$currofs)<<4|%$string_size 850 <3> %assign MN_%1 $ - mnlist 850 ****************** <3> expansion: MN_JP = 1437 850 0000069C 4A50 <3> db %$string 850 <3> %pop 851 00000435 26C1 <2> variant 07ah, 39 851 ****************** <2> expansion: ainfo = 9921 851 ****************** <2> expansion: escaped = 38 851 ****************** <2> expansion: escapes = 0 852 00000437 F77CB6 <2> variant 18ah, 12, ASM_MACH3 852 ****************** <2> expansion: ainfo = 31926 852 ****************** <2> expansion: escaped = 124 852 ****************** <2> expansion: escapes = 0 853 0000043A FF <2> endvariant 854 <2> mne JPE ; ofs=45Eh 854 <3> %push 854 <3> usesection ASMTABLE2, 1 854 <3> %assign %$currofs $ - asmtab 854 ****************** <3> expansion: currofs = 1083 854 <3> %ifnempty %2 854 <3> db %2 854 <3> %endif 854 <3> __SECT__ 854 <3> %defstr %$string %1 854 ****************** <3> expansion: string = 'JPE' 854 <3> %strlen %$string_size %$string 854 ****************** <3> expansion: string_size = 3 854 <3> %if %$string_size > 15 854 <3> %error Mnemonic %1 is too long! 854 <3> %endif 854 0000069E B343 <3> dw (%$currofs)<<4|%$string_size 854 <3> %assign MN_%1 $ - mnlist 854 ****************** <3> expansion: MN_JPE = 1441 854 000006A0 4A5045 <3> db %$string 854 <3> %pop 855 0000043B 26C1 <2> variant 07ah, 39 855 ****************** <2> expansion: ainfo = 9921 855 ****************** <2> expansion: escaped = 38 855 ****************** <2> expansion: escapes = 0 856 0000043D F77CB6 <2> variant 18ah, 12, ASM_MACH3 856 ****************** <2> expansion: ainfo = 31926 856 ****************** <2> expansion: escaped = 124 856 ****************** <2> expansion: escapes = 0 857 00000440 FF <2> endvariant 858 <2> mne JPO ; ofs=464h 858 <3> %push 858 <3> usesection ASMTABLE2, 1 858 <3> %assign %$currofs $ - asmtab 858 ****************** <3> expansion: currofs = 1089 858 <3> %ifnempty %2 858 <3> db %2 858 <3> %endif 858 <3> __SECT__ 858 <3> %defstr %$string %1 858 ****************** <3> expansion: string = 'JPO' 858 <3> %strlen %$string_size %$string 858 ****************** <3> expansion: string_size = 3 858 <3> %if %$string_size > 15 858 <3> %error Mnemonic %1 is too long! 858 <3> %endif 858 000006A3 1344 <3> dw (%$currofs)<<4|%$string_size 858 <3> %assign MN_%1 $ - mnlist 858 ****************** <3> expansion: MN_JPO = 1446 858 000006A5 4A504F <3> db %$string 858 <3> %pop 859 00000441 2712 <2> variant 07bh, 39 859 ****************** <2> expansion: ainfo = 10002 859 ****************** <2> expansion: escaped = 39 859 ****************** <2> expansion: escapes = 0 860 00000443 F77D07 <2> variant 18bh, 12, ASM_MACH3 860 ****************** <2> expansion: ainfo = 32007 860 ****************** <2> expansion: escaped = 125 860 ****************** <2> expansion: escapes = 0 861 00000446 FF <2> endvariant 862 <2> mne JS ; ofs=46Ah 862 <3> %push 862 <3> usesection ASMTABLE2, 1 862 <3> %assign %$currofs $ - asmtab 862 ****************** <3> expansion: currofs = 1095 862 <3> %ifnempty %2 862 <3> db %2 862 <3> %endif 862 <3> __SECT__ 862 <3> %defstr %$string %1 862 ****************** <3> expansion: string = 'JS' 862 <3> %strlen %$string_size %$string 862 ****************** <3> expansion: string_size = 2 862 <3> %if %$string_size > 15 862 <3> %error Mnemonic %1 is too long! 862 <3> %endif 862 000006A8 7244 <3> dw (%$currofs)<<4|%$string_size 862 <3> %assign MN_%1 $ - mnlist 862 ****************** <3> expansion: MN_JS = 1451 862 000006AA 4A53 <3> db %$string 862 <3> %pop 863 00000447 261F <2> variant 078h, 39 863 ****************** <2> expansion: ainfo = 9759 863 ****************** <2> expansion: escaped = 38 863 ****************** <2> expansion: escapes = 0 864 00000449 F77C14 <2> variant 188h, 12, ASM_MACH3 864 ****************** <2> expansion: ainfo = 31764 864 ****************** <2> expansion: escaped = 124 864 ****************** <2> expansion: escapes = 0 865 0000044C FF <2> endvariant 866 <2> mne JZ ; ofs=470h 866 <3> %push 866 <3> usesection ASMTABLE2, 1 866 <3> %assign %$currofs $ - asmtab 866 ****************** <3> expansion: currofs = 1101 866 <3> %ifnempty %2 866 <3> db %2 866 <3> %endif 866 <3> __SECT__ 866 <3> %defstr %$string %1 866 ****************** <3> expansion: string = 'JZ' 866 <3> %strlen %$string_size %$string 866 ****************** <3> expansion: string_size = 2 866 <3> %if %$string_size > 15 866 <3> %error Mnemonic %1 is too long! 866 <3> %endif 866 000006AC D244 <3> dw (%$currofs)<<4|%$string_size 866 <3> %assign MN_%1 $ - mnlist 866 ****************** <3> expansion: MN_JZ = 1455 866 000006AE 4A5A <3> db %$string 866 <3> %pop 867 0000044D 24DB <2> variant 074h, 39 867 ****************** <2> expansion: ainfo = 9435 867 ****************** <2> expansion: escaped = 36 867 ****************** <2> expansion: escapes = 0 868 0000044F F77AD0 <2> variant 184h, 12, ASM_MACH3 868 ****************** <2> expansion: ainfo = 31440 868 ****************** <2> expansion: escaped = 122 868 ****************** <2> expansion: escapes = 0 869 00000452 FF <2> endvariant 870 <2> mne JMP ; ofs=476h 870 <3> %push 870 <3> usesection ASMTABLE2, 1 870 <3> %assign %$currofs $ - asmtab 870 ****************** <3> expansion: currofs = 1107 870 <3> %ifnempty %2 870 <3> db %2 870 <3> %endif 870 <3> __SECT__ 870 <3> %defstr %$string %1 870 ****************** <3> expansion: string = 'JMP' 870 <3> %strlen %$string_size %$string 870 ****************** <3> expansion: string_size = 3 870 <3> %if %$string_size > 15 870 <3> %error Mnemonic %1 is too long! 870 <3> %endif 870 000006B0 3345 <3> dw (%$currofs)<<4|%$string_size 870 <3> %assign MN_%1 $ - mnlist 870 ****************** <3> expansion: MN_JMP = 1459 870 000006B2 4A4D50 <3> db %$string 870 <3> %pop 871 00000453 4A82 <2> variant 0ebh, 39 871 ****************** <2> expansion: ainfo = 19074 871 ****************** <2> expansion: escaped = 74 871 ****************** <2> expansion: escapes = 0 872 00000455 49C5 <2> variant 0e9h, 12 872 ****************** <2> expansion: ainfo = 18885 872 ****************** <2> expansion: escaped = 73 872 ****************** <2> expansion: escapes = 0 873 00000457 C1CC <2> variant AGRP(4,4), 40 873 ****************** <2> expansion: ainfo = 49612 873 ****************** <2> expansion: escaped = 193 873 ****************** <2> expansion: escapes = 0 874 00000459 C203 <2> variant AGRP(4,5), 14 874 ****************** <2> expansion: ainfo = 49667 874 ****************** <2> expansion: escaped = 194 874 ****************** <2> expansion: escapes = 0 875 0000045B 4A17 <2> variant 0eah, 13 875 ****************** <2> expansion: ainfo = 18967 875 ****************** <2> expansion: escaped = 74 875 ****************** <2> expansion: escapes = 0 876 0000045D FF <2> endvariant 877 <2> mne LAHF ; ofs=481h 877 <3> %push 877 <3> usesection ASMTABLE2, 1 877 <3> %assign %$currofs $ - asmtab 877 ****************** <3> expansion: currofs = 1118 877 <3> %ifnempty %2 877 <3> db %2 877 <3> %endif 877 <3> __SECT__ 877 <3> %defstr %$string %1 877 ****************** <3> expansion: string = 'LAHF' 877 <3> %strlen %$string_size %$string 877 ****************** <3> expansion: string_size = 4 877 <3> %if %$string_size > 15 877 <3> %error Mnemonic %1 is too long! 877 <3> %endif 877 000006B5 E445 <3> dw (%$currofs)<<4|%$string_size 877 <3> %assign MN_%1 $ - mnlist 877 ****************** <3> expansion: MN_LAHF = 1464 877 000006B7 4C414846 <3> db %$string 877 <3> %pop 878 0000045E 324F <2> variant 09fh, 0 878 ****************** <2> expansion: ainfo = 12879 878 ****************** <2> expansion: escaped = 50 878 ****************** <2> expansion: escapes = 0 879 00000460 FF <2> endvariant 880 <2> mne LAR ; ofs=484h 880 <3> %push 880 <3> usesection ASMTABLE2, 1 880 <3> %assign %$currofs $ - asmtab 880 ****************** <3> expansion: currofs = 1121 880 <3> %ifnempty %2 880 <3> db %2 880 <3> %endif 880 <3> __SECT__ 880 <3> %defstr %$string %1 880 ****************** <3> expansion: string = 'LAR' 880 <3> %strlen %$string_size %$string 880 ****************** <3> expansion: string_size = 3 880 <3> %if %$string_size > 15 880 <3> %error Mnemonic %1 is too long! 880 <3> %endif 880 000006BB 1346 <3> dw (%$currofs)<<4|%$string_size 880 <3> %assign MN_%1 $ - mnlist 880 ****************** <3> expansion: MN_LAR = 1470 880 000006BD 4C4152 <3> db %$string 880 <3> %pop 881 00000461 F651AA <2> variant 102h, 8, ASM_MACH2 881 ****************** <2> expansion: ainfo = 20906 881 ****************** <2> expansion: escaped = 81 881 ****************** <2> expansion: escapes = 0 882 00000464 FF <2> endvariant 883 <2> mne LDS ; ofs=488h 883 <3> %push 883 <3> usesection ASMTABLE2, 1 883 <3> %assign %$currofs $ - asmtab 883 ****************** <3> expansion: currofs = 1125 883 <3> %ifnempty %2 883 <3> db %2 883 <3> %endif 883 <3> __SECT__ 883 <3> %defstr %$string %1 883 ****************** <3> expansion: string = 'LDS' 883 <3> %strlen %$string_size %$string 883 ****************** <3> expansion: string_size = 3 883 <3> %if %$string_size > 15 883 <3> %error Mnemonic %1 is too long! 883 <3> %endif 883 000006C0 5346 <3> dw (%$currofs)<<4|%$string_size 883 <3> %assign MN_%1 $ - mnlist 883 ****************** <3> expansion: MN_LDS = 1475 883 000006C2 4C4453 <3> db %$string 883 <3> %pop 884 00000465 3E5C <2> variant 0c5h, 7 884 ****************** <2> expansion: ainfo = 15964 884 ****************** <2> expansion: escaped = 62 884 ****************** <2> expansion: escapes = 0 885 00000467 FF <2> endvariant 886 <2> mne LSS ; ofs=48Bh 886 <3> %push 886 <3> usesection ASMTABLE2, 1 886 <3> %assign %$currofs $ - asmtab 886 ****************** <3> expansion: currofs = 1128 886 <3> %ifnempty %2 886 <3> db %2 886 <3> %endif 886 <3> __SECT__ 886 <3> %defstr %$string %1 886 ****************** <3> expansion: string = 'LSS' 886 <3> %strlen %$string_size %$string 886 ****************** <3> expansion: string_size = 3 886 <3> %if %$string_size > 15 886 <3> %error Mnemonic %1 is too long! 886 <3> %endif 886 000006C5 8346 <3> dw (%$currofs)<<4|%$string_size 886 <3> %assign MN_%1 $ - mnlist 886 ****************** <3> expansion: MN_LSS = 1480 886 000006C7 4C5353 <3> db %$string 886 <3> %pop 887 00000468 F78959 <2> variant 1b2h, 7, ASM_MACH3 887 ****************** <2> expansion: ainfo = 35161 887 ****************** <2> expansion: escaped = 137 887 ****************** <2> expansion: escapes = 0 888 0000046B FF <2> endvariant 889 <2> mne LES ; ofs=48Fh 889 <3> %push 889 <3> usesection ASMTABLE2, 1 889 <3> %assign %$currofs $ - asmtab 889 ****************** <3> expansion: currofs = 1132 889 <3> %ifnempty %2 889 <3> db %2 889 <3> %endif 889 <3> __SECT__ 889 <3> %defstr %$string %1 889 ****************** <3> expansion: string = 'LES' 889 <3> %strlen %$string_size %$string 889 ****************** <3> expansion: string_size = 3 889 <3> %if %$string_size > 15 889 <3> %error Mnemonic %1 is too long! 889 <3> %endif 889 000006CA C346 <3> dw (%$currofs)<<4|%$string_size 889 <3> %assign MN_%1 $ - mnlist 889 ****************** <3> expansion: MN_LES = 1485 889 000006CC 4C4553 <3> db %$string 889 <3> %pop 890 0000046C 3E0B <2> variant 0c4h, 7 890 ****************** <2> expansion: ainfo = 15883 890 ****************** <2> expansion: escaped = 62 890 ****************** <2> expansion: escapes = 0 891 0000046E FF <2> endvariant 892 <2> mne LFS ; ofs=492h 892 <3> %push 892 <3> usesection ASMTABLE2, 1 892 <3> %assign %$currofs $ - asmtab 892 ****************** <3> expansion: currofs = 1135 892 <3> %ifnempty %2 892 <3> db %2 892 <3> %endif 892 <3> __SECT__ 892 <3> %defstr %$string %1 892 ****************** <3> expansion: string = 'LFS' 892 <3> %strlen %$string_size %$string 892 ****************** <3> expansion: string_size = 3 892 <3> %if %$string_size > 15 892 <3> %error Mnemonic %1 is too long! 892 <3> %endif 892 000006CF F346 <3> dw (%$currofs)<<4|%$string_size 892 <3> %assign MN_%1 $ - mnlist 892 ****************** <3> expansion: MN_LFS = 1490 892 000006D1 4C4653 <3> db %$string 892 <3> %pop 893 0000046F F789FB <2> variant 1b4h, 7, ASM_MACH3 893 ****************** <2> expansion: ainfo = 35323 893 ****************** <2> expansion: escaped = 137 893 ****************** <2> expansion: escapes = 0 894 00000472 FF <2> endvariant 895 <2> mne LGS ; ofs=496h 895 <3> %push 895 <3> usesection ASMTABLE2, 1 895 <3> %assign %$currofs $ - asmtab 895 ****************** <3> expansion: currofs = 1139 895 <3> %ifnempty %2 895 <3> db %2 895 <3> %endif 895 <3> __SECT__ 895 <3> %defstr %$string %1 895 ****************** <3> expansion: string = 'LGS' 895 <3> %strlen %$string_size %$string 895 ****************** <3> expansion: string_size = 3 895 <3> %if %$string_size > 15 895 <3> %error Mnemonic %1 is too long! 895 <3> %endif 895 000006D4 3347 <3> dw (%$currofs)<<4|%$string_size 895 <3> %assign MN_%1 $ - mnlist 895 ****************** <3> expansion: MN_LGS = 1495 895 000006D6 4C4753 <3> db %$string 895 <3> %pop 896 00000473 F78A4C <2> variant 1b5h, 7, ASM_MACH3 896 ****************** <2> expansion: ainfo = 35404 896 ****************** <2> expansion: escaped = 138 896 ****************** <2> expansion: escapes = 0 897 00000476 FF <2> endvariant 898 <2> mne LEA ; ofs=49Ah 898 <3> %push 898 <3> usesection ASMTABLE2, 1 898 <3> %assign %$currofs $ - asmtab 898 ****************** <3> expansion: currofs = 1143 898 <3> %ifnempty %2 898 <3> db %2 898 <3> %endif 898 <3> __SECT__ 898 <3> %defstr %$string %1 898 ****************** <3> expansion: string = 'LEA' 898 <3> %strlen %$string_size %$string 898 ****************** <3> expansion: string_size = 3 898 <3> %if %$string_size > 15 898 <3> %error Mnemonic %1 is too long! 898 <3> %endif 898 000006D9 7347 <3> dw (%$currofs)<<4|%$string_size 898 <3> %assign MN_%1 $ - mnlist 898 ****************** <3> expansion: MN_LEA = 1500 898 000006DB 4C4541 <3> db %$string 898 <3> %pop 899 00000477 2CA4 <2> variant 08dh, 7 899 ****************** <2> expansion: ainfo = 11428 899 ****************** <2> expansion: escaped = 44 899 ****************** <2> expansion: escapes = 0 900 00000479 FF <2> endvariant 901 <2> mne LGDT ; ofs=4A1h 901 <3> %push 901 <3> usesection ASMTABLE2, 1 901 <3> %assign %$currofs $ - asmtab 901 ****************** <3> expansion: currofs = 1146 901 <3> %ifnempty %2 901 <3> db %2 901 <3> %endif 901 <3> __SECT__ 901 <3> %defstr %$string %1 901 ****************** <3> expansion: string = 'LGDT' 901 <3> %strlen %$string_size %$string 901 ****************** <3> expansion: string_size = 4 901 <3> %if %$string_size > 15 901 <3> %error Mnemonic %1 is too long! 901 <3> %endif 901 000006DE A447 <3> dw (%$currofs)<<4|%$string_size 901 <3> %assign MN_%1 $ - mnlist 901 ****************** <3> expansion: MN_LGDT = 1505 901 000006E0 4C474454 <3> db %$string 901 <3> %pop 902 0000047A F6C8B7 <2> variant AGRP(7,2), 29, ASM_MACH2 902 ****************** <2> expansion: ainfo = 51383 902 ****************** <2> expansion: escaped = 200 902 ****************** <2> expansion: escapes = 0 903 0000047D FF <2> endvariant 904 <2> mne LIDT ; ofs=4A5h 904 <3> %push 904 <3> usesection ASMTABLE2, 1 904 <3> %assign %$currofs $ - asmtab 904 ****************** <3> expansion: currofs = 1150 904 <3> %ifnempty %2 904 <3> db %2 904 <3> %endif 904 <3> __SECT__ 904 <3> %defstr %$string %1 904 ****************** <3> expansion: string = 'LIDT' 904 <3> %strlen %$string_size %$string 904 ****************** <3> expansion: string_size = 4 904 <3> %if %$string_size > 15 904 <3> %error Mnemonic %1 is too long! 904 <3> %endif 904 000006E4 E447 <3> dw (%$currofs)<<4|%$string_size 904 <3> %assign MN_%1 $ - mnlist 904 ****************** <3> expansion: MN_LIDT = 1511 904 000006E6 4C494454 <3> db %$string 904 <3> %pop 905 0000047E F6C908 <2> variant AGRP(7,3), 29, ASM_MACH2 905 ****************** <2> expansion: ainfo = 51464 905 ****************** <2> expansion: escaped = 201 905 ****************** <2> expansion: escapes = 0 906 00000481 FF <2> endvariant 907 <2> mne LLDT ; ofs=4A9h 907 <3> %push 907 <3> usesection ASMTABLE2, 1 907 <3> %assign %$currofs $ - asmtab 907 ****************** <3> expansion: currofs = 1154 907 <3> %ifnempty %2 907 <3> db %2 907 <3> %endif 907 <3> __SECT__ 907 <3> %defstr %$string %1 907 ****************** <3> expansion: string = 'LLDT' 907 <3> %strlen %$string_size %$string 907 ****************** <3> expansion: string_size = 4 907 <3> %if %$string_size > 15 907 <3> %error Mnemonic %1 is too long! 907 <3> %endif 907 000006EA 2448 <3> dw (%$currofs)<<4|%$string_size 907 <3> %assign MN_%1 $ - mnlist 907 ****************** <3> expansion: MN_LLDT = 1517 907 000006EC 4C4C4454 <3> db %$string 907 <3> %pop 908 00000482 F6CB4B <2> variant AGRP(8,2), 41, ASM_MACH2 908 ****************** <2> expansion: ainfo = 52043 908 ****************** <2> expansion: escaped = 203 908 ****************** <2> expansion: escapes = 0 909 00000485 FF <2> endvariant 910 <2> mne LMSW ; ofs=4ADh 910 <3> %push 910 <3> usesection ASMTABLE2, 1 910 <3> %assign %$currofs $ - asmtab 910 ****************** <3> expansion: currofs = 1158 910 <3> %ifnempty %2 910 <3> db %2 910 <3> %endif 910 <3> __SECT__ 910 <3> %defstr %$string %1 910 ****************** <3> expansion: string = 'LMSW' 910 <3> %strlen %$string_size %$string 910 ****************** <3> expansion: string_size = 4 910 <3> %if %$string_size > 15 910 <3> %error Mnemonic %1 is too long! 910 <3> %endif 910 000006F0 6448 <3> dw (%$currofs)<<4|%$string_size 910 <3> %assign MN_%1 $ - mnlist 910 ****************** <3> expansion: MN_LMSW = 1523 910 000006F2 4C4D5357 <3> db %$string 910 <3> %pop 911 00000486 F6CA07 <2> variant AGRP(7,6), 41, ASM_MACH2 911 ****************** <2> expansion: ainfo = 51719 911 ****************** <2> expansion: escaped = 202 911 ****************** <2> expansion: escapes = 0 912 00000489 FF <2> endvariant 913 <2> mne LOCK, ASM_SPECIAL, 0f0h ; ofs=4B1h 913 <3> %push 913 <3> usesection ASMTABLE2, 1 913 <3> %assign %$currofs $ - asmtab 913 ****************** <3> expansion: currofs = 1162 913 <3> %ifnempty %2 913 0000048A FFF0 <3> db %2 913 <3> %endif 913 <3> __SECT__ 913 <3> %defstr %$string %1 913 ****************** <3> expansion: string = 'LOCK' 913 <3> %strlen %$string_size %$string 913 ****************** <3> expansion: string_size = 4 913 <3> %if %$string_size > 15 913 <3> %error Mnemonic %1 is too long! 913 <3> %endif 913 000006F6 A448 <3> dw (%$currofs)<<4|%$string_size 913 <3> %assign MN_%1 $ - mnlist 913 ****************** <3> expansion: MN_LOCK = 1529 913 000006F8 4C4F434B <3> db %$string 913 <3> %pop 914 <2> mne LODSB ; ofs=4B3h 914 <3> %push 914 <3> usesection ASMTABLE2, 1 914 <3> %assign %$currofs $ - asmtab 914 ****************** <3> expansion: currofs = 1164 914 <3> %ifnempty %2 914 <3> db %2 914 <3> %endif 914 <3> __SECT__ 914 <3> %defstr %$string %1 914 ****************** <3> expansion: string = 'LODSB' 914 <3> %strlen %$string_size %$string 914 ****************** <3> expansion: string_size = 5 914 <3> %if %$string_size > 15 914 <3> %error Mnemonic %1 is too long! 914 <3> %endif 914 000006FC C548 <3> dw (%$currofs)<<4|%$string_size 914 <3> %assign MN_%1 $ - mnlist 914 ****************** <3> expansion: MN_LODSB = 1535 914 000006FE 4C4F445342 <3> db %$string 914 <3> %pop 915 0000048C 366C <2> variant 0ach, 0 915 ****************** <2> expansion: ainfo = 13932 915 ****************** <2> expansion: escaped = 54 915 ****************** <2> expansion: escapes = 0 916 0000048E FF <2> endvariant 917 <2> mne LSL ; ofs=4C8h 917 <3> %push 917 <3> usesection ASMTABLE2, 1 917 <3> %assign %$currofs $ - asmtab 917 ****************** <3> expansion: currofs = 1167 917 <3> %ifnempty %2 917 <3> db %2 917 <3> %endif 917 <3> __SECT__ 917 <3> %defstr %$string %1 917 ****************** <3> expansion: string = 'LSL' 917 <3> %strlen %$string_size %$string 917 ****************** <3> expansion: string_size = 3 917 <3> %if %$string_size > 15 917 <3> %error Mnemonic %1 is too long! 917 <3> %endif 917 00000703 F348 <3> dw (%$currofs)<<4|%$string_size 917 <3> %assign MN_%1 $ - mnlist 917 ****************** <3> expansion: MN_LSL = 1542 917 00000705 4C534C <3> db %$string 917 <3> %pop 918 0000048F F651FB <2> variant 103h, 8, ASM_MACH2 918 ****************** <2> expansion: ainfo = 20987 918 ****************** <2> expansion: escaped = 81 918 ****************** <2> expansion: escapes = 0 919 00000492 FF <2> endvariant 920 <2> mne LTR ; ofs=4CCh 920 <3> %push 920 <3> usesection ASMTABLE2, 1 920 <3> %assign %$currofs $ - asmtab 920 ****************** <3> expansion: currofs = 1171 920 <3> %ifnempty %2 920 <3> db %2 920 <3> %endif 920 <3> __SECT__ 920 <3> %defstr %$string %1 920 ****************** <3> expansion: string = 'LTR' 920 <3> %strlen %$string_size %$string 920 ****************** <3> expansion: string_size = 3 920 <3> %if %$string_size > 15 920 <3> %error Mnemonic %1 is too long! 920 <3> %endif 920 00000708 3349 <3> dw (%$currofs)<<4|%$string_size 920 <3> %assign MN_%1 $ - mnlist 920 ****************** <3> expansion: MN_LTR = 1547 920 0000070A 4C5452 <3> db %$string 920 <3> %pop 921 00000493 F6CB9C <2> variant AGRP(8,3), 41, ASM_MACH2 921 ****************** <2> expansion: ainfo = 52124 921 ****************** <2> expansion: escaped = 203 921 ****************** <2> expansion: escapes = 0 922 00000496 FF <2> endvariant 923 <2> mne MOV ; ofs=4D0h 923 <3> %push 923 <3> usesection ASMTABLE2, 1 923 <3> %assign %$currofs $ - asmtab 923 ****************** <3> expansion: currofs = 1175 923 <3> %ifnempty %2 923 <3> db %2 923 <3> %endif 923 <3> __SECT__ 923 <3> %defstr %$string %1 923 ****************** <3> expansion: string = 'MOV' 923 <3> %strlen %$string_size %$string 923 ****************** <3> expansion: string_size = 3 923 <3> %if %$string_size > 15 923 <3> %error Mnemonic %1 is too long! 923 <3> %endif 923 0000070D 7349 <3> dw (%$currofs)<<4|%$string_size 923 <3> %assign MN_%1 $ - mnlist 923 ****************** <3> expansion: MN_MOV = 1552 923 0000070F 4D4F56 <3> db %$string 923 <3> %pop 924 00000497 32CC <2> variant 0a0h, 44 924 ****************** <2> expansion: ainfo = 13004 924 ****************** <2> expansion: escaped = 50 924 ****************** <2> expansion: escapes = 0 925 00000499 336F <2> variant 0a2h, 45 925 ****************** <2> expansion: ainfo = 13167 925 ****************** <2> expansion: escaped = 51 925 ****************** <2> expansion: escapes = 0 926 0000049B 2B0C <2> variant 088h, 4 926 ****************** <2> expansion: ainfo = 11020 926 ****************** <2> expansion: escaped = 43 926 ****************** <2> expansion: escapes = 0 927 0000049D 2BAF <2> variant 08ah, 5 927 ****************** <2> expansion: ainfo = 11183 927 ****************** <2> expansion: escaped = 43 927 ****************** <2> expansion: escapes = 0 928 0000049F 2C76 <2> variant 08ch, 42 928 ****************** <2> expansion: ainfo = 11382 928 ****************** <2> expansion: escaped = 44 928 ****************** <2> expansion: escapes = 0 929 000004A1 2D19 <2> variant 08eh, 43 929 ****************** <2> expansion: ainfo = 11545 929 ****************** <2> expansion: escaped = 45 929 ****************** <2> expansion: escapes = 0 930 000004A3 37DE <2> variant 0b0h, 46 930 ****************** <2> expansion: ainfo = 14302 930 ****************** <2> expansion: escaped = 55 930 ****************** <2> expansion: escapes = 0 931 000004A5 3A67 <2> variant 0b8h, 47 931 ****************** <2> expansion: ainfo = 14951 931 ****************** <2> expansion: escaped = 58 931 ****************** <2> expansion: escapes = 0 932 000004A7 CD0A <2> variant AGRP(9,0), 2 932 ****************** <2> expansion: ainfo = 52490 932 ****************** <2> expansion: escaped = 205 932 ****************** <2> expansion: escapes = 0 933 000004A9 F75B66 <2> variant 120h, 70, ASM_MACH3 933 ****************** <2> expansion: ainfo = 23398 933 ****************** <2> expansion: escaped = 91 933 ****************** <2> expansion: escapes = 0 934 000004AC F75C09 <2> variant 122h, 71, ASM_MACH3 934 ****************** <2> expansion: ainfo = 23561 934 ****************** <2> expansion: escaped = 92 934 ****************** <2> expansion: escapes = 0 935 000004AF F75BB9 <2> variant 121h, 72, ASM_MACH3 935 ****************** <2> expansion: ainfo = 23481 935 ****************** <2> expansion: escaped = 91 935 ****************** <2> expansion: escapes = 0 936 000004B2 F75C5C <2> variant 123h, 73, ASM_MACH3 936 ****************** <2> expansion: ainfo = 23644 936 ****************** <2> expansion: escaped = 92 936 ****************** <2> expansion: escapes = 0 937 000004B5 F75CAE <2> variant 124h, 74, ASM_MACH3 937 ****************** <2> expansion: ainfo = 23726 937 ****************** <2> expansion: escaped = 92 937 ****************** <2> expansion: escapes = 0 938 000004B8 F75D51 <2> variant 126h, 75, ASM_MACH3 938 ****************** <2> expansion: ainfo = 23889 938 ****************** <2> expansion: escaped = 93 938 ****************** <2> expansion: escapes = 0 939 000004BB FF <2> endvariant 940 <2> mne MOVD ; ofs=4F5h 940 <3> %push 940 <3> usesection ASMTABLE2, 1 940 <3> %assign %$currofs $ - asmtab 940 ****************** <3> expansion: currofs = 1212 940 <3> %ifnempty %2 940 <3> db %2 940 <3> %endif 940 <3> __SECT__ 940 <3> %defstr %$string %1 940 ****************** <3> expansion: string = 'MOVD' 940 <3> %strlen %$string_size %$string 940 ****************** <3> expansion: string_size = 4 940 <3> %if %$string_size > 15 940 <3> %error Mnemonic %1 is too long! 940 <3> %endif 940 00000712 C44B <3> dw (%$currofs)<<4|%$string_size 940 <3> %assign MN_%1 $ - mnlist 940 ****************** <3> expansion: MN_MOVD = 1557 940 00000714 4D4F5644 <3> db %$string 940 <3> %pop 941 000004BC F9741A <2> variant 16eh, 76, ASM_MACH5 941 ****************** <2> expansion: ainfo = 29722 941 ****************** <2> expansion: escaped = 116 941 ****************** <2> expansion: escapes = 0 942 000004BF F9792B <2> variant 17eh, 77, ASM_MACH5 942 ****************** <2> expansion: ainfo = 31019 942 ****************** <2> expansion: escaped = 121 942 ****************** <2> expansion: escapes = 0 943 000004C2 FF <2> endvariant 944 <2> mne MOVQ ; ofs=4FCh 944 <3> %push 944 <3> usesection ASMTABLE2, 1 944 <3> %assign %$currofs $ - asmtab 944 ****************** <3> expansion: currofs = 1219 944 <3> %ifnempty %2 944 <3> db %2 944 <3> %endif 944 <3> __SECT__ 944 <3> %defstr %$string %1 944 ****************** <3> expansion: string = 'MOVQ' 944 <3> %strlen %$string_size %$string 944 ****************** <3> expansion: string_size = 4 944 <3> %if %$string_size > 15 944 <3> %error Mnemonic %1 is too long! 944 <3> %endif 944 00000718 344C <3> dw (%$currofs)<<4|%$string_size 944 <3> %assign MN_%1 $ - mnlist 944 ****************** <3> expansion: MN_MOVQ = 1563 944 0000071A 4D4F5651 <3> db %$string 944 <3> %pop 945 000004C3 F9746D <2> variant 16fh, 78, ASM_MACH5 945 ****************** <2> expansion: ainfo = 29805 945 ****************** <2> expansion: escaped = 116 945 ****************** <2> expansion: escapes = 0 946 000004C6 F9797E <2> variant 17fh, 79, ASM_MACH5 946 ****************** <2> expansion: ainfo = 31102 946 ****************** <2> expansion: escaped = 121 946 ****************** <2> expansion: escapes = 0 947 000004C9 FF <2> endvariant 948 <2> mne PACKSSDW ; ofs=503h 948 <3> %push 948 <3> usesection ASMTABLE2, 1 948 <3> %assign %$currofs $ - asmtab 948 ****************** <3> expansion: currofs = 1226 948 <3> %ifnempty %2 948 <3> db %2 948 <3> %endif 948 <3> __SECT__ 948 <3> %defstr %$string %1 948 ****************** <3> expansion: string = 'PACKSSDW' 948 <3> %strlen %$string_size %$string 948 ****************** <3> expansion: string_size = 8 948 <3> %if %$string_size > 15 948 <3> %error Mnemonic %1 is too long! 948 <3> %endif 948 0000071E A84C <3> dw (%$currofs)<<4|%$string_size 948 <3> %assign MN_%1 $ - mnlist 948 ****************** <3> expansion: MN_PACKSSDW = 1569 948 00000720 5041434B53534457 <3> db %$string 948 <3> %pop 949 000004CA F97329 <2> variant 16bh, 78, ASM_MACH5 949 ****************** <2> expansion: ainfo = 29481 949 ****************** <2> expansion: escaped = 115 949 ****************** <2> expansion: escapes = 0 950 000004CD FF <2> endvariant 951 <2> mne PACKSSWB ; ofs=507h 951 <3> %push 951 <3> usesection ASMTABLE2, 1 951 <3> %assign %$currofs $ - asmtab 951 ****************** <3> expansion: currofs = 1230 951 <3> %ifnempty %2 951 <3> db %2 951 <3> %endif 951 <3> __SECT__ 951 <3> %defstr %$string %1 951 ****************** <3> expansion: string = 'PACKSSWB' 951 <3> %strlen %$string_size %$string 951 ****************** <3> expansion: string_size = 8 951 <3> %if %$string_size > 15 951 <3> %error Mnemonic %1 is too long! 951 <3> %endif 951 00000728 E84C <3> dw (%$currofs)<<4|%$string_size 951 <3> %assign MN_%1 $ - mnlist 951 ****************** <3> expansion: MN_PACKSSWB = 1579 951 0000072A 5041434B53535742 <3> db %$string 951 <3> %pop 952 000004CE F970A1 <2> variant 163h, 78, ASM_MACH5 952 ****************** <2> expansion: ainfo = 28833 952 ****************** <2> expansion: escaped = 112 952 ****************** <2> expansion: escapes = 0 953 000004D1 FF <2> endvariant 954 <2> mne PACKUSWB ; ofs=50Bh 954 <3> %push 954 <3> usesection ASMTABLE2, 1 954 <3> %assign %$currofs $ - asmtab 954 ****************** <3> expansion: currofs = 1234 954 <3> %ifnempty %2 954 <3> db %2 954 <3> %endif 954 <3> __SECT__ 954 <3> %defstr %$string %1 954 ****************** <3> expansion: string = 'PACKUSWB' 954 <3> %strlen %$string_size %$string 954 ****************** <3> expansion: string_size = 8 954 <3> %if %$string_size > 15 954 <3> %error Mnemonic %1 is too long! 954 <3> %endif 954 00000732 284D <3> dw (%$currofs)<<4|%$string_size 954 <3> %assign MN_%1 $ - mnlist 954 ****************** <3> expansion: MN_PACKUSWB = 1589 954 00000734 5041434B55535742 <3> db %$string 954 <3> %pop 955 000004D2 F971E5 <2> variant 167h, 78, ASM_MACH5 955 ****************** <2> expansion: ainfo = 29157 955 ****************** <2> expansion: escaped = 113 955 ****************** <2> expansion: escapes = 0 956 000004D5 FF <2> endvariant 957 <2> mne PADDB ; ofs=50Fh 957 <3> %push 957 <3> usesection ASMTABLE2, 1 957 <3> %assign %$currofs $ - asmtab 957 ****************** <3> expansion: currofs = 1238 957 <3> %ifnempty %2 957 <3> db %2 957 <3> %endif 957 <3> __SECT__ 957 <3> %defstr %$string %1 957 ****************** <3> expansion: string = 'PADDB' 957 <3> %strlen %$string_size %$string 957 ****************** <3> expansion: string_size = 5 957 <3> %if %$string_size > 15 957 <3> %error Mnemonic %1 is too long! 957 <3> %endif 957 0000073C 654D <3> dw (%$currofs)<<4|%$string_size 957 <3> %assign MN_%1 $ - mnlist 957 ****************** <3> expansion: MN_PADDB = 1599 957 0000073E 5041444442 <3> db %$string 957 <3> %pop 958 000004D6 F9A10A <2> variant 1fch, 78, ASM_MACH5 958 ****************** <2> expansion: ainfo = 41226 958 ****************** <2> expansion: escaped = 161 958 ****************** <2> expansion: escapes = 0 959 000004D9 FF <2> endvariant 960 <2> mne PADDW ; ofs=513h 960 <3> %push 960 <3> usesection ASMTABLE2, 1 960 <3> %assign %$currofs $ - asmtab 960 ****************** <3> expansion: currofs = 1242 960 <3> %ifnempty %2 960 <3> db %2 960 <3> %endif 960 <3> __SECT__ 960 <3> %defstr %$string %1 960 ****************** <3> expansion: string = 'PADDW' 960 <3> %strlen %$string_size %$string 960 ****************** <3> expansion: string_size = 5 960 <3> %if %$string_size > 15 960 <3> %error Mnemonic %1 is too long! 960 <3> %endif 960 00000743 A54D <3> dw (%$currofs)<<4|%$string_size 960 <3> %assign MN_%1 $ - mnlist 960 ****************** <3> expansion: MN_PADDW = 1606 960 00000745 5041444457 <3> db %$string 960 <3> %pop 961 000004DA F9A15B <2> variant 1fdh, 78, ASM_MACH5 961 ****************** <2> expansion: ainfo = 41307 961 ****************** <2> expansion: escaped = 161 961 ****************** <2> expansion: escapes = 0 962 000004DD FF <2> endvariant 963 <2> mne PADDD ; ofs=517h 963 <3> %push 963 <3> usesection ASMTABLE2, 1 963 <3> %assign %$currofs $ - asmtab 963 ****************** <3> expansion: currofs = 1246 963 <3> %ifnempty %2 963 <3> db %2 963 <3> %endif 963 <3> __SECT__ 963 <3> %defstr %$string %1 963 ****************** <3> expansion: string = 'PADDD' 963 <3> %strlen %$string_size %$string 963 ****************** <3> expansion: string_size = 5 963 <3> %if %$string_size > 15 963 <3> %error Mnemonic %1 is too long! 963 <3> %endif 963 0000074A E54D <3> dw (%$currofs)<<4|%$string_size 963 <3> %assign MN_%1 $ - mnlist 963 ****************** <3> expansion: MN_PADDD = 1613 963 0000074C 5041444444 <3> db %$string 963 <3> %pop 964 000004DE F9A1AC <2> variant 1feh, 78, ASM_MACH5 964 ****************** <2> expansion: ainfo = 41388 964 ****************** <2> expansion: escaped = 161 964 ****************** <2> expansion: escapes = 0 965 000004E1 FF <2> endvariant 966 <2> mne PADDSB ; ofs=51Bh 966 <3> %push 966 <3> usesection ASMTABLE2, 1 966 <3> %assign %$currofs $ - asmtab 966 ****************** <3> expansion: currofs = 1250 966 <3> %ifnempty %2 966 <3> db %2 966 <3> %endif 966 <3> __SECT__ 966 <3> %defstr %$string %1 966 ****************** <3> expansion: string = 'PADDSB' 966 <3> %strlen %$string_size %$string 966 ****************** <3> expansion: string_size = 6 966 <3> %if %$string_size > 15 966 <3> %error Mnemonic %1 is too long! 966 <3> %endif 966 00000751 264E <3> dw (%$currofs)<<4|%$string_size 966 <3> %assign MN_%1 $ - mnlist 966 ****************** <3> expansion: MN_PADDSB = 1620 966 00000753 504144445342 <3> db %$string 966 <3> %pop 967 000004E2 F99BFA <2> variant 1ech, 78, ASM_MACH5 967 ****************** <2> expansion: ainfo = 39930 967 ****************** <2> expansion: escaped = 155 967 ****************** <2> expansion: escapes = 0 968 000004E5 FF <2> endvariant 969 <2> mne PADDSW ; ofs=51Fh 969 <3> %push 969 <3> usesection ASMTABLE2, 1 969 <3> %assign %$currofs $ - asmtab 969 ****************** <3> expansion: currofs = 1254 969 <3> %ifnempty %2 969 <3> db %2 969 <3> %endif 969 <3> __SECT__ 969 <3> %defstr %$string %1 969 ****************** <3> expansion: string = 'PADDSW' 969 <3> %strlen %$string_size %$string 969 ****************** <3> expansion: string_size = 6 969 <3> %if %$string_size > 15 969 <3> %error Mnemonic %1 is too long! 969 <3> %endif 969 00000759 664E <3> dw (%$currofs)<<4|%$string_size 969 <3> %assign MN_%1 $ - mnlist 969 ****************** <3> expansion: MN_PADDSW = 1628 969 0000075B 504144445357 <3> db %$string 969 <3> %pop 970 000004E6 F99C4B <2> variant 1edh, 78, ASM_MACH5 970 ****************** <2> expansion: ainfo = 40011 970 ****************** <2> expansion: escaped = 156 970 ****************** <2> expansion: escapes = 0 971 000004E9 FF <2> endvariant 972 <2> mne PADDUSB ; ofs=523h 972 <3> %push 972 <3> usesection ASMTABLE2, 1 972 <3> %assign %$currofs $ - asmtab 972 ****************** <3> expansion: currofs = 1258 972 <3> %ifnempty %2 972 <3> db %2 972 <3> %endif 972 <3> __SECT__ 972 <3> %defstr %$string %1 972 ****************** <3> expansion: string = 'PADDUSB' 972 <3> %strlen %$string_size %$string 972 ****************** <3> expansion: string_size = 7 972 <3> %if %$string_size > 15 972 <3> %error Mnemonic %1 is too long! 972 <3> %endif 972 00000761 A74E <3> dw (%$currofs)<<4|%$string_size 972 <3> %assign MN_%1 $ - mnlist 972 ****************** <3> expansion: MN_PADDUSB = 1636 972 00000763 50414444555342 <3> db %$string 972 <3> %pop 973 000004EA F996EA <2> variant 1dch, 78, ASM_MACH5 973 ****************** <2> expansion: ainfo = 38634 973 ****************** <2> expansion: escaped = 150 973 ****************** <2> expansion: escapes = 0 974 000004ED FF <2> endvariant 975 <2> mne PADDUSW ; ofs=527h 975 <3> %push 975 <3> usesection ASMTABLE2, 1 975 <3> %assign %$currofs $ - asmtab 975 ****************** <3> expansion: currofs = 1262 975 <3> %ifnempty %2 975 <3> db %2 975 <3> %endif 975 <3> __SECT__ 975 <3> %defstr %$string %1 975 ****************** <3> expansion: string = 'PADDUSW' 975 <3> %strlen %$string_size %$string 975 ****************** <3> expansion: string_size = 7 975 <3> %if %$string_size > 15 975 <3> %error Mnemonic %1 is too long! 975 <3> %endif 975 0000076A E74E <3> dw (%$currofs)<<4|%$string_size 975 <3> %assign MN_%1 $ - mnlist 975 ****************** <3> expansion: MN_PADDUSW = 1645 975 0000076C 50414444555357 <3> db %$string 975 <3> %pop 976 000004EE F9973B <2> variant 1ddh, 78, ASM_MACH5 976 ****************** <2> expansion: ainfo = 38715 976 ****************** <2> expansion: escaped = 151 976 ****************** <2> expansion: escapes = 0 977 000004F1 FF <2> endvariant 978 <2> mne PAND ; ofs=52Bh 978 <3> %push 978 <3> usesection ASMTABLE2, 1 978 <3> %assign %$currofs $ - asmtab 978 ****************** <3> expansion: currofs = 1266 978 <3> %ifnempty %2 978 <3> db %2 978 <3> %endif 978 <3> __SECT__ 978 <3> %defstr %$string %1 978 ****************** <3> expansion: string = 'PAND' 978 <3> %strlen %$string_size %$string 978 ****************** <3> expansion: string_size = 4 978 <3> %if %$string_size > 15 978 <3> %error Mnemonic %1 is too long! 978 <3> %endif 978 00000773 244F <3> dw (%$currofs)<<4|%$string_size 978 <3> %assign MN_%1 $ - mnlist 978 ****************** <3> expansion: MN_PAND = 1654 978 00000775 50414E44 <3> db %$string 978 <3> %pop 979 000004F2 F99699 <2> variant 1dbh, 78, ASM_MACH5 979 ****************** <2> expansion: ainfo = 38553 979 ****************** <2> expansion: escaped = 150 979 ****************** <2> expansion: escapes = 0 980 000004F5 FF <2> endvariant 981 <2> mne PANDN ; ofs=52Fh 981 <3> %push 981 <3> usesection ASMTABLE2, 1 981 <3> %assign %$currofs $ - asmtab 981 ****************** <3> expansion: currofs = 1270 981 <3> %ifnempty %2 981 <3> db %2 981 <3> %endif 981 <3> __SECT__ 981 <3> %defstr %$string %1 981 ****************** <3> expansion: string = 'PANDN' 981 <3> %strlen %$string_size %$string 981 ****************** <3> expansion: string_size = 5 981 <3> %if %$string_size > 15 981 <3> %error Mnemonic %1 is too long! 981 <3> %endif 981 00000779 654F <3> dw (%$currofs)<<4|%$string_size 981 <3> %assign MN_%1 $ - mnlist 981 ****************** <3> expansion: MN_PANDN = 1660 981 0000077B 50414E444E <3> db %$string 981 <3> %pop 982 000004F6 F997DD <2> variant 1dfh, 78, ASM_MACH5 982 ****************** <2> expansion: ainfo = 38877 982 ****************** <2> expansion: escaped = 151 982 ****************** <2> expansion: escapes = 0 983 000004F9 FF <2> endvariant 984 <2> mne PCMPEQB ; ofs=533h 984 <3> %push 984 <3> usesection ASMTABLE2, 1 984 <3> %assign %$currofs $ - asmtab 984 ****************** <3> expansion: currofs = 1274 984 <3> %ifnempty %2 984 <3> db %2 984 <3> %endif 984 <3> __SECT__ 984 <3> %defstr %$string %1 984 ****************** <3> expansion: string = 'PCMPEQB' 984 <3> %strlen %$string_size %$string 984 ****************** <3> expansion: string_size = 7 984 <3> %if %$string_size > 15 984 <3> %error Mnemonic %1 is too long! 984 <3> %endif 984 00000780 A74F <3> dw (%$currofs)<<4|%$string_size 984 <3> %assign MN_%1 $ - mnlist 984 ****************** <3> expansion: MN_PCMPEQB = 1667 984 00000782 50434D50455142 <3> db %$string 984 <3> %pop 985 000004FA F97602 <2> variant 174h, 78, ASM_MACH5 985 ****************** <2> expansion: ainfo = 30210 985 ****************** <2> expansion: escaped = 118 985 ****************** <2> expansion: escapes = 0 986 000004FD FF <2> endvariant 987 <2> mne PCMPEQW ; ofs=537h 987 <3> %push 987 <3> usesection ASMTABLE2, 1 987 <3> %assign %$currofs $ - asmtab 987 ****************** <3> expansion: currofs = 1278 987 <3> %ifnempty %2 987 <3> db %2 987 <3> %endif 987 <3> __SECT__ 987 <3> %defstr %$string %1 987 ****************** <3> expansion: string = 'PCMPEQW' 987 <3> %strlen %$string_size %$string 987 ****************** <3> expansion: string_size = 7 987 <3> %if %$string_size > 15 987 <3> %error Mnemonic %1 is too long! 987 <3> %endif 987 00000789 E74F <3> dw (%$currofs)<<4|%$string_size 987 <3> %assign MN_%1 $ - mnlist 987 ****************** <3> expansion: MN_PCMPEQW = 1676 987 0000078B 50434D50455157 <3> db %$string 987 <3> %pop 988 000004FE F97653 <2> variant 175h, 78, ASM_MACH5 988 ****************** <2> expansion: ainfo = 30291 988 ****************** <2> expansion: escaped = 118 988 ****************** <2> expansion: escapes = 0 989 00000501 FF <2> endvariant 990 <2> mne PCMPEQD ; ofs=53Bh 990 <3> %push 990 <3> usesection ASMTABLE2, 1 990 <3> %assign %$currofs $ - asmtab 990 ****************** <3> expansion: currofs = 1282 990 <3> %ifnempty %2 990 <3> db %2 990 <3> %endif 990 <3> __SECT__ 990 <3> %defstr %$string %1 990 ****************** <3> expansion: string = 'PCMPEQD' 990 <3> %strlen %$string_size %$string 990 ****************** <3> expansion: string_size = 7 990 <3> %if %$string_size > 15 990 <3> %error Mnemonic %1 is too long! 990 <3> %endif 990 00000792 2750 <3> dw (%$currofs)<<4|%$string_size 990 <3> %assign MN_%1 $ - mnlist 990 ****************** <3> expansion: MN_PCMPEQD = 1685 990 00000794 50434D50455144 <3> db %$string 990 <3> %pop 991 00000502 F976A4 <2> variant 176h, 78, ASM_MACH5 991 ****************** <2> expansion: ainfo = 30372 991 ****************** <2> expansion: escaped = 118 991 ****************** <2> expansion: escapes = 0 992 00000505 FF <2> endvariant 993 <2> mne PCMPGTB ; ofs=53Fh 993 <3> %push 993 <3> usesection ASMTABLE2, 1 993 <3> %assign %$currofs $ - asmtab 993 ****************** <3> expansion: currofs = 1286 993 <3> %ifnempty %2 993 <3> db %2 993 <3> %endif 993 <3> __SECT__ 993 <3> %defstr %$string %1 993 ****************** <3> expansion: string = 'PCMPGTB' 993 <3> %strlen %$string_size %$string 993 ****************** <3> expansion: string_size = 7 993 <3> %if %$string_size > 15 993 <3> %error Mnemonic %1 is too long! 993 <3> %endif 993 0000079B 6750 <3> dw (%$currofs)<<4|%$string_size 993 <3> %assign MN_%1 $ - mnlist 993 ****************** <3> expansion: MN_PCMPGTB = 1694 993 0000079D 50434D50475442 <3> db %$string 993 <3> %pop 994 00000506 F970F2 <2> variant 164h, 78, ASM_MACH5 994 ****************** <2> expansion: ainfo = 28914 994 ****************** <2> expansion: escaped = 112 994 ****************** <2> expansion: escapes = 0 995 00000509 FF <2> endvariant 996 <2> mne PCMPGTW ; ofs=543h 996 <3> %push 996 <3> usesection ASMTABLE2, 1 996 <3> %assign %$currofs $ - asmtab 996 ****************** <3> expansion: currofs = 1290 996 <3> %ifnempty %2 996 <3> db %2 996 <3> %endif 996 <3> __SECT__ 996 <3> %defstr %$string %1 996 ****************** <3> expansion: string = 'PCMPGTW' 996 <3> %strlen %$string_size %$string 996 ****************** <3> expansion: string_size = 7 996 <3> %if %$string_size > 15 996 <3> %error Mnemonic %1 is too long! 996 <3> %endif 996 000007A4 A750 <3> dw (%$currofs)<<4|%$string_size 996 <3> %assign MN_%1 $ - mnlist 996 ****************** <3> expansion: MN_PCMPGTW = 1703 996 000007A6 50434D50475457 <3> db %$string 996 <3> %pop 997 0000050A F97143 <2> variant 165h, 78, ASM_MACH5 997 ****************** <2> expansion: ainfo = 28995 997 ****************** <2> expansion: escaped = 113 997 ****************** <2> expansion: escapes = 0 998 0000050D FF <2> endvariant 999 <2> mne PCMPGTD ; ofs=547h 999 <3> %push 999 <3> usesection ASMTABLE2, 1 999 <3> %assign %$currofs $ - asmtab 999 ****************** <3> expansion: currofs = 1294 999 <3> %ifnempty %2 999 <3> db %2 999 <3> %endif 999 <3> __SECT__ 999 <3> %defstr %$string %1 999 ****************** <3> expansion: string = 'PCMPGTD' 999 <3> %strlen %$string_size %$string 999 ****************** <3> expansion: string_size = 7 999 <3> %if %$string_size > 15 999 <3> %error Mnemonic %1 is too long! 999 <3> %endif 999 000007AD E750 <3> dw (%$currofs)<<4|%$string_size 999 <3> %assign MN_%1 $ - mnlist 999 ****************** <3> expansion: MN_PCMPGTD = 1712 999 000007AF 50434D50475444 <3> db %$string 999 <3> %pop 1000 0000050E F97194 <2> variant 166h, 78, ASM_MACH5 1000 ****************** <2> expansion: ainfo = 29076 1000 ****************** <2> expansion: escaped = 113 1000 ****************** <2> expansion: escapes = 0 1001 00000511 FF <2> endvariant 1002 <2> mne PMADDWD ; ofs=54Bh 1002 <3> %push 1002 <3> usesection ASMTABLE2, 1 1002 <3> %assign %$currofs $ - asmtab 1002 ****************** <3> expansion: currofs = 1298 1002 <3> %ifnempty %2 1002 <3> db %2 1002 <3> %endif 1002 <3> __SECT__ 1002 <3> %defstr %$string %1 1002 ****************** <3> expansion: string = 'PMADDWD' 1002 <3> %strlen %$string_size %$string 1002 ****************** <3> expansion: string_size = 7 1002 <3> %if %$string_size > 15 1002 <3> %error Mnemonic %1 is too long! 1002 <3> %endif 1002 000007B6 2751 <3> dw (%$currofs)<<4|%$string_size 1002 <3> %assign MN_%1 $ - mnlist 1002 ****************** <3> expansion: MN_PMADDWD = 1721 1002 000007B8 504D4144445744 <3> db %$string 1002 <3> %pop 1003 00000512 F99ED3 <2> variant 1f5h, 78, ASM_MACH5 1003 ****************** <2> expansion: ainfo = 40659 1003 ****************** <2> expansion: escaped = 158 1003 ****************** <2> expansion: escapes = 0 1004 00000515 FF <2> endvariant 1005 <2> mne PMULHW ; ofs=54Fh 1005 <3> %push 1005 <3> usesection ASMTABLE2, 1 1005 <3> %assign %$currofs $ - asmtab 1005 ****************** <3> expansion: currofs = 1302 1005 <3> %ifnempty %2 1005 <3> db %2 1005 <3> %endif 1005 <3> __SECT__ 1005 <3> %defstr %$string %1 1005 ****************** <3> expansion: string = 'PMULHW' 1005 <3> %strlen %$string_size %$string 1005 ****************** <3> expansion: string_size = 6 1005 <3> %if %$string_size > 15 1005 <3> %error Mnemonic %1 is too long! 1005 <3> %endif 1005 000007BF 6651 <3> dw (%$currofs)<<4|%$string_size 1005 <3> %assign MN_%1 $ - mnlist 1005 ****************** <3> expansion: MN_PMULHW = 1730 1005 000007C1 504D554C4857 <3> db %$string 1005 <3> %pop 1006 00000516 F999C3 <2> variant 1e5h, 78, ASM_MACH5 1006 ****************** <2> expansion: ainfo = 39363 1006 ****************** <2> expansion: escaped = 153 1006 ****************** <2> expansion: escapes = 0 1007 00000519 FF <2> endvariant 1008 <2> mne PMULLW ; ofs=553h 1008 <3> %push 1008 <3> usesection ASMTABLE2, 1 1008 <3> %assign %$currofs $ - asmtab 1008 ****************** <3> expansion: currofs = 1306 1008 <3> %ifnempty %2 1008 <3> db %2 1008 <3> %endif 1008 <3> __SECT__ 1008 <3> %defstr %$string %1 1008 ****************** <3> expansion: string = 'PMULLW' 1008 <3> %strlen %$string_size %$string 1008 ****************** <3> expansion: string_size = 6 1008 <3> %if %$string_size > 15 1008 <3> %error Mnemonic %1 is too long! 1008 <3> %endif 1008 000007C7 A651 <3> dw (%$currofs)<<4|%$string_size 1008 <3> %assign MN_%1 $ - mnlist 1008 ****************** <3> expansion: MN_PMULLW = 1738 1008 000007C9 504D554C4C57 <3> db %$string 1008 <3> %pop 1009 0000051A F994B3 <2> variant 1d5h, 78, ASM_MACH5 1009 ****************** <2> expansion: ainfo = 38067 1009 ****************** <2> expansion: escaped = 148 1009 ****************** <2> expansion: escapes = 0 1010 0000051D FF <2> endvariant 1011 <2> mne POR ; ofs=557h 1011 <3> %push 1011 <3> usesection ASMTABLE2, 1 1011 <3> %assign %$currofs $ - asmtab 1011 ****************** <3> expansion: currofs = 1310 1011 <3> %ifnempty %2 1011 <3> db %2 1011 <3> %endif 1011 <3> __SECT__ 1011 <3> %defstr %$string %1 1011 ****************** <3> expansion: string = 'POR' 1011 <3> %strlen %$string_size %$string 1011 ****************** <3> expansion: string_size = 3 1011 <3> %if %$string_size > 15 1011 <3> %error Mnemonic %1 is too long! 1011 <3> %endif 1011 000007CF E351 <3> dw (%$currofs)<<4|%$string_size 1011 <3> %assign MN_%1 $ - mnlist 1011 ****************** <3> expansion: MN_POR = 1746 1011 000007D1 504F52 <3> db %$string 1011 <3> %pop 1012 0000051E F99BA9 <2> variant 1ebh, 78, ASM_MACH5 1012 ****************** <2> expansion: ainfo = 39849 1012 ****************** <2> expansion: escaped = 155 1012 ****************** <2> expansion: escapes = 0 1013 00000521 FF <2> endvariant 1014 <2> mne PSLLW ; ofs=55Bh 1014 <3> %push 1014 <3> usesection ASMTABLE2, 1 1014 <3> %assign %$currofs $ - asmtab 1014 ****************** <3> expansion: currofs = 1314 1014 <3> %ifnempty %2 1014 <3> db %2 1014 <3> %endif 1014 <3> __SECT__ 1014 <3> %defstr %$string %1 1014 ****************** <3> expansion: string = 'PSLLW' 1014 <3> %strlen %$string_size %$string 1014 ****************** <3> expansion: string_size = 5 1014 <3> %if %$string_size > 15 1014 <3> %error Mnemonic %1 is too long! 1014 <3> %endif 1014 000007D4 2552 <3> dw (%$currofs)<<4|%$string_size 1014 <3> %assign MN_%1 $ - mnlist 1014 ****************** <3> expansion: MN_PSLLW = 1751 1014 000007D6 50534C4C57 <3> db %$string 1014 <3> %pop 1015 00000522 F99D8F <2> variant 1f1h, 78, ASM_MACH5 1015 ****************** <2> expansion: ainfo = 40335 1015 ****************** <2> expansion: escaped = 157 1015 ****************** <2> expansion: escapes = 0 1016 00000525 F9D1C6 <2> variant AGRP(10,6), 80, ASM_MACH5 1016 ****************** <2> expansion: ainfo = 53702 1016 ****************** <2> expansion: escaped = 209 1016 ****************** <2> expansion: escapes = 0 1017 00000528 FF <2> endvariant 1018 <2> mne PSLLD ; ofs=562h 1018 <3> %push 1018 <3> usesection ASMTABLE2, 1 1018 <3> %assign %$currofs $ - asmtab 1018 ****************** <3> expansion: currofs = 1321 1018 <3> %ifnempty %2 1018 <3> db %2 1018 <3> %endif 1018 <3> __SECT__ 1018 <3> %defstr %$string %1 1018 ****************** <3> expansion: string = 'PSLLD' 1018 <3> %strlen %$string_size %$string 1018 ****************** <3> expansion: string_size = 5 1018 <3> %if %$string_size > 15 1018 <3> %error Mnemonic %1 is too long! 1018 <3> %endif 1018 000007DB 9552 <3> dw (%$currofs)<<4|%$string_size 1018 <3> %assign MN_%1 $ - mnlist 1018 ****************** <3> expansion: MN_PSLLD = 1758 1018 000007DD 50534C4C44 <3> db %$string 1018 <3> %pop 1019 00000529 F99DE0 <2> variant 1f2h, 78, ASM_MACH5 1019 ****************** <2> expansion: ainfo = 40416 1019 ****************** <2> expansion: escaped = 157 1019 ****************** <2> expansion: escapes = 0 1020 0000052C F9D44E <2> variant AGRP(11,6), 80, ASM_MACH5 1020 ****************** <2> expansion: ainfo = 54350 1020 ****************** <2> expansion: escaped = 212 1020 ****************** <2> expansion: escapes = 0 1021 0000052F FF <2> endvariant 1022 <2> mne PSLLQ ; ofs=569h 1022 <3> %push 1022 <3> usesection ASMTABLE2, 1 1022 <3> %assign %$currofs $ - asmtab 1022 ****************** <3> expansion: currofs = 1328 1022 <3> %ifnempty %2 1022 <3> db %2 1022 <3> %endif 1022 <3> __SECT__ 1022 <3> %defstr %$string %1 1022 ****************** <3> expansion: string = 'PSLLQ' 1022 <3> %strlen %$string_size %$string 1022 ****************** <3> expansion: string_size = 5 1022 <3> %if %$string_size > 15 1022 <3> %error Mnemonic %1 is too long! 1022 <3> %endif 1022 000007E2 0553 <3> dw (%$currofs)<<4|%$string_size 1022 <3> %assign MN_%1 $ - mnlist 1022 ****************** <3> expansion: MN_PSLLQ = 1765 1022 000007E4 50534C4C51 <3> db %$string 1022 <3> %pop 1023 00000530 F99E31 <2> variant 1f3h, 78, ASM_MACH5 1023 ****************** <2> expansion: ainfo = 40497 1023 ****************** <2> expansion: escaped = 158 1023 ****************** <2> expansion: escapes = 0 1024 00000533 F9D6D6 <2> variant AGRP(12,6), 80, ASM_MACH5 1024 ****************** <2> expansion: ainfo = 54998 1024 ****************** <2> expansion: escaped = 214 1024 ****************** <2> expansion: escapes = 0 1025 00000536 FF <2> endvariant 1026 <2> mne PSRAW ; ofs=570h 1026 <3> %push 1026 <3> usesection ASMTABLE2, 1 1026 <3> %assign %$currofs $ - asmtab 1026 ****************** <3> expansion: currofs = 1335 1026 <3> %ifnempty %2 1026 <3> db %2 1026 <3> %endif 1026 <3> __SECT__ 1026 <3> %defstr %$string %1 1026 ****************** <3> expansion: string = 'PSRAW' 1026 <3> %strlen %$string_size %$string 1026 ****************** <3> expansion: string_size = 5 1026 <3> %if %$string_size > 15 1026 <3> %error Mnemonic %1 is too long! 1026 <3> %endif 1026 000007E9 7553 <3> dw (%$currofs)<<4|%$string_size 1026 <3> %assign MN_%1 $ - mnlist 1026 ****************** <3> expansion: MN_PSRAW = 1772 1026 000007EB 5053524157 <3> db %$string 1026 <3> %pop 1027 00000537 F9987F <2> variant 1e1h, 78, ASM_MACH5 1027 ****************** <2> expansion: ainfo = 39039 1027 ****************** <2> expansion: escaped = 152 1027 ****************** <2> expansion: escapes = 0 1028 0000053A F9D124 <2> variant AGRP(10,4), 80, ASM_MACH5 1028 ****************** <2> expansion: ainfo = 53540 1028 ****************** <2> expansion: escaped = 209 1028 ****************** <2> expansion: escapes = 0 1029 0000053D FF <2> endvariant 1030 <2> mne PSRAD ; ofs=577h 1030 <3> %push 1030 <3> usesection ASMTABLE2, 1 1030 <3> %assign %$currofs $ - asmtab 1030 ****************** <3> expansion: currofs = 1342 1030 <3> %ifnempty %2 1030 <3> db %2 1030 <3> %endif 1030 <3> __SECT__ 1030 <3> %defstr %$string %1 1030 ****************** <3> expansion: string = 'PSRAD' 1030 <3> %strlen %$string_size %$string 1030 ****************** <3> expansion: string_size = 5 1030 <3> %if %$string_size > 15 1030 <3> %error Mnemonic %1 is too long! 1030 <3> %endif 1030 000007F0 E553 <3> dw (%$currofs)<<4|%$string_size 1030 <3> %assign MN_%1 $ - mnlist 1030 ****************** <3> expansion: MN_PSRAD = 1779 1030 000007F2 5053524144 <3> db %$string 1030 <3> %pop 1031 0000053E F998D0 <2> variant 1e2h, 78, ASM_MACH5 1031 ****************** <2> expansion: ainfo = 39120 1031 ****************** <2> expansion: escaped = 152 1031 ****************** <2> expansion: escapes = 0 1032 00000541 F9D3AC <2> variant AGRP(11,4), 80, ASM_MACH5 1032 ****************** <2> expansion: ainfo = 54188 1032 ****************** <2> expansion: escaped = 211 1032 ****************** <2> expansion: escapes = 0 1033 00000544 FF <2> endvariant 1034 <2> mne PSRLW ; ofs=57Eh 1034 <3> %push 1034 <3> usesection ASMTABLE2, 1 1034 <3> %assign %$currofs $ - asmtab 1034 ****************** <3> expansion: currofs = 1349 1034 <3> %ifnempty %2 1034 <3> db %2 1034 <3> %endif 1034 <3> __SECT__ 1034 <3> %defstr %$string %1 1034 ****************** <3> expansion: string = 'PSRLW' 1034 <3> %strlen %$string_size %$string 1034 ****************** <3> expansion: string_size = 5 1034 <3> %if %$string_size > 15 1034 <3> %error Mnemonic %1 is too long! 1034 <3> %endif 1034 000007F7 5554 <3> dw (%$currofs)<<4|%$string_size 1034 <3> %assign MN_%1 $ - mnlist 1034 ****************** <3> expansion: MN_PSRLW = 1786 1034 000007F9 5053524C57 <3> db %$string 1034 <3> %pop 1035 00000545 F9936F <2> variant 1d1h, 78, ASM_MACH5 1035 ****************** <2> expansion: ainfo = 37743 1035 ****************** <2> expansion: escaped = 147 1035 ****************** <2> expansion: escapes = 0 1036 00000548 F9D082 <2> variant AGRP(10,2), 80, ASM_MACH5 1036 ****************** <2> expansion: ainfo = 53378 1036 ****************** <2> expansion: escaped = 208 1036 ****************** <2> expansion: escapes = 0 1037 0000054B FF <2> endvariant 1038 <2> mne PSRLD ; ofs=585h 1038 <3> %push 1038 <3> usesection ASMTABLE2, 1 1038 <3> %assign %$currofs $ - asmtab 1038 ****************** <3> expansion: currofs = 1356 1038 <3> %ifnempty %2 1038 <3> db %2 1038 <3> %endif 1038 <3> __SECT__ 1038 <3> %defstr %$string %1 1038 ****************** <3> expansion: string = 'PSRLD' 1038 <3> %strlen %$string_size %$string 1038 ****************** <3> expansion: string_size = 5 1038 <3> %if %$string_size > 15 1038 <3> %error Mnemonic %1 is too long! 1038 <3> %endif 1038 000007FE C554 <3> dw (%$currofs)<<4|%$string_size 1038 <3> %assign MN_%1 $ - mnlist 1038 ****************** <3> expansion: MN_PSRLD = 1793 1038 00000800 5053524C44 <3> db %$string 1038 <3> %pop 1039 0000054C F993C0 <2> variant 1d2h, 78, ASM_MACH5 1039 ****************** <2> expansion: ainfo = 37824 1039 ****************** <2> expansion: escaped = 147 1039 ****************** <2> expansion: escapes = 0 1040 0000054F F9D30A <2> variant AGRP(11,2), 80, ASM_MACH5 1040 ****************** <2> expansion: ainfo = 54026 1040 ****************** <2> expansion: escaped = 211 1040 ****************** <2> expansion: escapes = 0 1041 00000552 FF <2> endvariant 1042 <2> mne PSRLQ ; ofs=58Ch 1042 <3> %push 1042 <3> usesection ASMTABLE2, 1 1042 <3> %assign %$currofs $ - asmtab 1042 ****************** <3> expansion: currofs = 1363 1042 <3> %ifnempty %2 1042 <3> db %2 1042 <3> %endif 1042 <3> __SECT__ 1042 <3> %defstr %$string %1 1042 ****************** <3> expansion: string = 'PSRLQ' 1042 <3> %strlen %$string_size %$string 1042 ****************** <3> expansion: string_size = 5 1042 <3> %if %$string_size > 15 1042 <3> %error Mnemonic %1 is too long! 1042 <3> %endif 1042 00000805 3555 <3> dw (%$currofs)<<4|%$string_size 1042 <3> %assign MN_%1 $ - mnlist 1042 ****************** <3> expansion: MN_PSRLQ = 1800 1042 00000807 5053524C51 <3> db %$string 1042 <3> %pop 1043 00000553 F99411 <2> variant 1d3h, 78, ASM_MACH5 1043 ****************** <2> expansion: ainfo = 37905 1043 ****************** <2> expansion: escaped = 148 1043 ****************** <2> expansion: escapes = 0 1044 00000556 F9D592 <2> variant AGRP(12,2), 80, ASM_MACH5 1044 ****************** <2> expansion: ainfo = 54674 1044 ****************** <2> expansion: escaped = 213 1044 ****************** <2> expansion: escapes = 0 1045 00000559 FF <2> endvariant 1046 <2> mne PSUBB ; ofs=593h 1046 <3> %push 1046 <3> usesection ASMTABLE2, 1 1046 <3> %assign %$currofs $ - asmtab 1046 ****************** <3> expansion: currofs = 1370 1046 <3> %ifnempty %2 1046 <3> db %2 1046 <3> %endif 1046 <3> __SECT__ 1046 <3> %defstr %$string %1 1046 ****************** <3> expansion: string = 'PSUBB' 1046 <3> %strlen %$string_size %$string 1046 ****************** <3> expansion: string_size = 5 1046 <3> %if %$string_size > 15 1046 <3> %error Mnemonic %1 is too long! 1046 <3> %endif 1046 0000080C A555 <3> dw (%$currofs)<<4|%$string_size 1046 <3> %assign MN_%1 $ - mnlist 1046 ****************** <3> expansion: MN_PSUBB = 1807 1046 0000080E 5053554242 <3> db %$string 1046 <3> %pop 1047 0000055A F99FC6 <2> variant 1f8h, 78, ASM_MACH5 1047 ****************** <2> expansion: ainfo = 40902 1047 ****************** <2> expansion: escaped = 159 1047 ****************** <2> expansion: escapes = 0 1048 0000055D FF <2> endvariant 1049 <2> mne PSUBW ; ofs=597h 1049 <3> %push 1049 <3> usesection ASMTABLE2, 1 1049 <3> %assign %$currofs $ - asmtab 1049 ****************** <3> expansion: currofs = 1374 1049 <3> %ifnempty %2 1049 <3> db %2 1049 <3> %endif 1049 <3> __SECT__ 1049 <3> %defstr %$string %1 1049 ****************** <3> expansion: string = 'PSUBW' 1049 <3> %strlen %$string_size %$string 1049 ****************** <3> expansion: string_size = 5 1049 <3> %if %$string_size > 15 1049 <3> %error Mnemonic %1 is too long! 1049 <3> %endif 1049 00000813 E555 <3> dw (%$currofs)<<4|%$string_size 1049 <3> %assign MN_%1 $ - mnlist 1049 ****************** <3> expansion: MN_PSUBW = 1814 1049 00000815 5053554257 <3> db %$string 1049 <3> %pop 1050 0000055E F9A017 <2> variant 1f9h, 78, ASM_MACH5 1050 ****************** <2> expansion: ainfo = 40983 1050 ****************** <2> expansion: escaped = 160 1050 ****************** <2> expansion: escapes = 0 1051 00000561 FF <2> endvariant 1052 <2> mne PSUBD ; ofs=59Bh 1052 <3> %push 1052 <3> usesection ASMTABLE2, 1 1052 <3> %assign %$currofs $ - asmtab 1052 ****************** <3> expansion: currofs = 1378 1052 <3> %ifnempty %2 1052 <3> db %2 1052 <3> %endif 1052 <3> __SECT__ 1052 <3> %defstr %$string %1 1052 ****************** <3> expansion: string = 'PSUBD' 1052 <3> %strlen %$string_size %$string 1052 ****************** <3> expansion: string_size = 5 1052 <3> %if %$string_size > 15 1052 <3> %error Mnemonic %1 is too long! 1052 <3> %endif 1052 0000081A 2556 <3> dw (%$currofs)<<4|%$string_size 1052 <3> %assign MN_%1 $ - mnlist 1052 ****************** <3> expansion: MN_PSUBD = 1821 1052 0000081C 5053554244 <3> db %$string 1052 <3> %pop 1053 00000562 F9A068 <2> variant 1fah, 78, ASM_MACH5 1053 ****************** <2> expansion: ainfo = 41064 1053 ****************** <2> expansion: escaped = 160 1053 ****************** <2> expansion: escapes = 0 1054 00000565 FF <2> endvariant 1055 <2> mne PSUBSB ; ofs=59Fh 1055 <3> %push 1055 <3> usesection ASMTABLE2, 1 1055 <3> %assign %$currofs $ - asmtab 1055 ****************** <3> expansion: currofs = 1382 1055 <3> %ifnempty %2 1055 <3> db %2 1055 <3> %endif 1055 <3> __SECT__ 1055 <3> %defstr %$string %1 1055 ****************** <3> expansion: string = 'PSUBSB' 1055 <3> %strlen %$string_size %$string 1055 ****************** <3> expansion: string_size = 6 1055 <3> %if %$string_size > 15 1055 <3> %error Mnemonic %1 is too long! 1055 <3> %endif 1055 00000821 6656 <3> dw (%$currofs)<<4|%$string_size 1055 <3> %assign MN_%1 $ - mnlist 1055 ****************** <3> expansion: MN_PSUBSB = 1828 1055 00000823 505355425342 <3> db %$string 1055 <3> %pop 1056 00000566 F99AB6 <2> variant 1e8h, 78, ASM_MACH5 1056 ****************** <2> expansion: ainfo = 39606 1056 ****************** <2> expansion: escaped = 154 1056 ****************** <2> expansion: escapes = 0 1057 00000569 FF <2> endvariant 1058 <2> mne PSUBSW ; ofs=5A3h 1058 <3> %push 1058 <3> usesection ASMTABLE2, 1 1058 <3> %assign %$currofs $ - asmtab 1058 ****************** <3> expansion: currofs = 1386 1058 <3> %ifnempty %2 1058 <3> db %2 1058 <3> %endif 1058 <3> __SECT__ 1058 <3> %defstr %$string %1 1058 ****************** <3> expansion: string = 'PSUBSW' 1058 <3> %strlen %$string_size %$string 1058 ****************** <3> expansion: string_size = 6 1058 <3> %if %$string_size > 15 1058 <3> %error Mnemonic %1 is too long! 1058 <3> %endif 1058 00000829 A656 <3> dw (%$currofs)<<4|%$string_size 1058 <3> %assign MN_%1 $ - mnlist 1058 ****************** <3> expansion: MN_PSUBSW = 1836 1058 0000082B 505355425357 <3> db %$string 1058 <3> %pop 1059 0000056A F99B07 <2> variant 1e9h, 78, ASM_MACH5 1059 ****************** <2> expansion: ainfo = 39687 1059 ****************** <2> expansion: escaped = 155 1059 ****************** <2> expansion: escapes = 0 1060 0000056D FF <2> endvariant 1061 <2> mne PSUBUSB ; ofs=5A7h 1061 <3> %push 1061 <3> usesection ASMTABLE2, 1 1061 <3> %assign %$currofs $ - asmtab 1061 ****************** <3> expansion: currofs = 1390 1061 <3> %ifnempty %2 1061 <3> db %2 1061 <3> %endif 1061 <3> __SECT__ 1061 <3> %defstr %$string %1 1061 ****************** <3> expansion: string = 'PSUBUSB' 1061 <3> %strlen %$string_size %$string 1061 ****************** <3> expansion: string_size = 7 1061 <3> %if %$string_size > 15 1061 <3> %error Mnemonic %1 is too long! 1061 <3> %endif 1061 00000831 E756 <3> dw (%$currofs)<<4|%$string_size 1061 <3> %assign MN_%1 $ - mnlist 1061 ****************** <3> expansion: MN_PSUBUSB = 1844 1061 00000833 50535542555342 <3> db %$string 1061 <3> %pop 1062 0000056E F995A6 <2> variant 1d8h, 78, ASM_MACH5 1062 ****************** <2> expansion: ainfo = 38310 1062 ****************** <2> expansion: escaped = 149 1062 ****************** <2> expansion: escapes = 0 1063 00000571 FF <2> endvariant 1064 <2> mne PSUBUSW ; ofs=5ABh 1064 <3> %push 1064 <3> usesection ASMTABLE2, 1 1064 <3> %assign %$currofs $ - asmtab 1064 ****************** <3> expansion: currofs = 1394 1064 <3> %ifnempty %2 1064 <3> db %2 1064 <3> %endif 1064 <3> __SECT__ 1064 <3> %defstr %$string %1 1064 ****************** <3> expansion: string = 'PSUBUSW' 1064 <3> %strlen %$string_size %$string 1064 ****************** <3> expansion: string_size = 7 1064 <3> %if %$string_size > 15 1064 <3> %error Mnemonic %1 is too long! 1064 <3> %endif 1064 0000083A 2757 <3> dw (%$currofs)<<4|%$string_size 1064 <3> %assign MN_%1 $ - mnlist 1064 ****************** <3> expansion: MN_PSUBUSW = 1853 1064 0000083C 50535542555357 <3> db %$string 1064 <3> %pop 1065 00000572 F995F7 <2> variant 1d9h, 78, ASM_MACH5 1065 ****************** <2> expansion: ainfo = 38391 1065 ****************** <2> expansion: escaped = 149 1065 ****************** <2> expansion: escapes = 0 1066 00000575 FF <2> endvariant 1067 <2> mne PUNPCKHBW ; ofs=5AFh 1067 <3> %push 1067 <3> usesection ASMTABLE2, 1 1067 <3> %assign %$currofs $ - asmtab 1067 ****************** <3> expansion: currofs = 1398 1067 <3> %ifnempty %2 1067 <3> db %2 1067 <3> %endif 1067 <3> __SECT__ 1067 <3> %defstr %$string %1 1067 ****************** <3> expansion: string = 'PUNPCKHBW' 1067 <3> %strlen %$string_size %$string 1067 ****************** <3> expansion: string_size = 9 1067 <3> %if %$string_size > 15 1067 <3> %error Mnemonic %1 is too long! 1067 <3> %endif 1067 00000843 6957 <3> dw (%$currofs)<<4|%$string_size 1067 <3> %assign MN_%1 $ - mnlist 1067 ****************** <3> expansion: MN_PUNPCKHBW = 1862 1067 00000845 50554E50434B484257 <3> db %$string 1067 <3> %pop 1068 00000576 F97236 <2> variant 168h, 78, ASM_MACH5 1068 ****************** <2> expansion: ainfo = 29238 1068 ****************** <2> expansion: escaped = 114 1068 ****************** <2> expansion: escapes = 0 1069 00000579 FF <2> endvariant 1070 <2> mne PUNPCKHWD ; ofs=5B3h 1070 <3> %push 1070 <3> usesection ASMTABLE2, 1 1070 <3> %assign %$currofs $ - asmtab 1070 ****************** <3> expansion: currofs = 1402 1070 <3> %ifnempty %2 1070 <3> db %2 1070 <3> %endif 1070 <3> __SECT__ 1070 <3> %defstr %$string %1 1070 ****************** <3> expansion: string = 'PUNPCKHWD' 1070 <3> %strlen %$string_size %$string 1070 ****************** <3> expansion: string_size = 9 1070 <3> %if %$string_size > 15 1070 <3> %error Mnemonic %1 is too long! 1070 <3> %endif 1070 0000084E A957 <3> dw (%$currofs)<<4|%$string_size 1070 <3> %assign MN_%1 $ - mnlist 1070 ****************** <3> expansion: MN_PUNPCKHWD = 1873 1070 00000850 50554E50434B485744 <3> db %$string 1070 <3> %pop 1071 0000057A F97287 <2> variant 169h, 78, ASM_MACH5 1071 ****************** <2> expansion: ainfo = 29319 1071 ****************** <2> expansion: escaped = 114 1071 ****************** <2> expansion: escapes = 0 1072 0000057D FF <2> endvariant 1073 <2> mne PUNPCKHDQ ; ofs=5B7h 1073 <3> %push 1073 <3> usesection ASMTABLE2, 1 1073 <3> %assign %$currofs $ - asmtab 1073 ****************** <3> expansion: currofs = 1406 1073 <3> %ifnempty %2 1073 <3> db %2 1073 <3> %endif 1073 <3> __SECT__ 1073 <3> %defstr %$string %1 1073 ****************** <3> expansion: string = 'PUNPCKHDQ' 1073 <3> %strlen %$string_size %$string 1073 ****************** <3> expansion: string_size = 9 1073 <3> %if %$string_size > 15 1073 <3> %error Mnemonic %1 is too long! 1073 <3> %endif 1073 00000859 E957 <3> dw (%$currofs)<<4|%$string_size 1073 <3> %assign MN_%1 $ - mnlist 1073 ****************** <3> expansion: MN_PUNPCKHDQ = 1884 1073 0000085B 50554E50434B484451 <3> db %$string 1073 <3> %pop 1074 0000057E F972D8 <2> variant 16ah, 78, ASM_MACH5 1074 ****************** <2> expansion: ainfo = 29400 1074 ****************** <2> expansion: escaped = 114 1074 ****************** <2> expansion: escapes = 0 1075 00000581 FF <2> endvariant 1076 <2> mne PUNPCKLBW ; ofs=5BBh 1076 <3> %push 1076 <3> usesection ASMTABLE2, 1 1076 <3> %assign %$currofs $ - asmtab 1076 ****************** <3> expansion: currofs = 1410 1076 <3> %ifnempty %2 1076 <3> db %2 1076 <3> %endif 1076 <3> __SECT__ 1076 <3> %defstr %$string %1 1076 ****************** <3> expansion: string = 'PUNPCKLBW' 1076 <3> %strlen %$string_size %$string 1076 ****************** <3> expansion: string_size = 9 1076 <3> %if %$string_size > 15 1076 <3> %error Mnemonic %1 is too long! 1076 <3> %endif 1076 00000864 2958 <3> dw (%$currofs)<<4|%$string_size 1076 <3> %assign MN_%1 $ - mnlist 1076 ****************** <3> expansion: MN_PUNPCKLBW = 1895 1076 00000866 50554E50434B4C4257 <3> db %$string 1076 <3> %pop 1077 00000582 F96FAE <2> variant 160h, 78, ASM_MACH5 1077 ****************** <2> expansion: ainfo = 28590 1077 ****************** <2> expansion: escaped = 111 1077 ****************** <2> expansion: escapes = 0 1078 00000585 FF <2> endvariant 1079 <2> mne PUNPCKLWD ; ofs=5BFh 1079 <3> %push 1079 <3> usesection ASMTABLE2, 1 1079 <3> %assign %$currofs $ - asmtab 1079 ****************** <3> expansion: currofs = 1414 1079 <3> %ifnempty %2 1079 <3> db %2 1079 <3> %endif 1079 <3> __SECT__ 1079 <3> %defstr %$string %1 1079 ****************** <3> expansion: string = 'PUNPCKLWD' 1079 <3> %strlen %$string_size %$string 1079 ****************** <3> expansion: string_size = 9 1079 <3> %if %$string_size > 15 1079 <3> %error Mnemonic %1 is too long! 1079 <3> %endif 1079 0000086F 6958 <3> dw (%$currofs)<<4|%$string_size 1079 <3> %assign MN_%1 $ - mnlist 1079 ****************** <3> expansion: MN_PUNPCKLWD = 1906 1079 00000871 50554E50434B4C5744 <3> db %$string 1079 <3> %pop 1080 00000586 F96FFF <2> variant 161h, 78, ASM_MACH5 1080 ****************** <2> expansion: ainfo = 28671 1080 ****************** <2> expansion: escaped = 111 1080 ****************** <2> expansion: escapes = 0 1081 00000589 FF <2> endvariant 1082 <2> mne PUNPCKLDQ ; ofs=5C3h 1082 <3> %push 1082 <3> usesection ASMTABLE2, 1 1082 <3> %assign %$currofs $ - asmtab 1082 ****************** <3> expansion: currofs = 1418 1082 <3> %ifnempty %2 1082 <3> db %2 1082 <3> %endif 1082 <3> __SECT__ 1082 <3> %defstr %$string %1 1082 ****************** <3> expansion: string = 'PUNPCKLDQ' 1082 <3> %strlen %$string_size %$string 1082 ****************** <3> expansion: string_size = 9 1082 <3> %if %$string_size > 15 1082 <3> %error Mnemonic %1 is too long! 1082 <3> %endif 1082 0000087A A958 <3> dw (%$currofs)<<4|%$string_size 1082 <3> %assign MN_%1 $ - mnlist 1082 ****************** <3> expansion: MN_PUNPCKLDQ = 1917 1082 0000087C 50554E50434B4C4451 <3> db %$string 1082 <3> %pop 1083 0000058A F97050 <2> variant 162h, 78, ASM_MACH5 1083 ****************** <2> expansion: ainfo = 28752 1083 ****************** <2> expansion: escaped = 112 1083 ****************** <2> expansion: escapes = 0 1084 0000058D FF <2> endvariant 1085 <2> mne PXOR ; ofs=5C7h 1085 <3> %push 1085 <3> usesection ASMTABLE2, 1 1085 <3> %assign %$currofs $ - asmtab 1085 ****************** <3> expansion: currofs = 1422 1085 <3> %ifnempty %2 1085 <3> db %2 1085 <3> %endif 1085 <3> __SECT__ 1085 <3> %defstr %$string %1 1085 ****************** <3> expansion: string = 'PXOR' 1085 <3> %strlen %$string_size %$string 1085 ****************** <3> expansion: string_size = 4 1085 <3> %if %$string_size > 15 1085 <3> %error Mnemonic %1 is too long! 1085 <3> %endif 1085 00000885 E458 <3> dw (%$currofs)<<4|%$string_size 1085 <3> %assign MN_%1 $ - mnlist 1085 ****************** <3> expansion: MN_PXOR = 1928 1085 00000887 50584F52 <3> db %$string 1085 <3> %pop 1086 0000058E F99CED <2> variant 1efh, 78, ASM_MACH5 1086 ****************** <2> expansion: ainfo = 40173 1086 ****************** <2> expansion: escaped = 156 1086 ****************** <2> expansion: escapes = 0 1087 00000591 FF <2> endvariant 1088 <2> mne MOVSB ; ofs=5CBh 1088 <3> %push 1088 <3> usesection ASMTABLE2, 1 1088 <3> %assign %$currofs $ - asmtab 1088 ****************** <3> expansion: currofs = 1426 1088 <3> %ifnempty %2 1088 <3> db %2 1088 <3> %endif 1088 <3> __SECT__ 1088 <3> %defstr %$string %1 1088 ****************** <3> expansion: string = 'MOVSB' 1088 <3> %strlen %$string_size %$string 1088 ****************** <3> expansion: string_size = 5 1088 <3> %if %$string_size > 15 1088 <3> %error Mnemonic %1 is too long! 1088 <3> %endif 1088 0000088B 2559 <3> dw (%$currofs)<<4|%$string_size 1088 <3> %assign MN_%1 $ - mnlist 1088 ****************** <3> expansion: MN_MOVSB = 1934 1088 0000088D 4D4F565342 <3> db %$string 1088 <3> %pop 1089 00000592 33E4 <2> variant 0a4h, 0 1089 ****************** <2> expansion: ainfo = 13284 1089 ****************** <2> expansion: escaped = 51 1089 ****************** <2> expansion: escapes = 0 1090 00000594 FF <2> endvariant 1091 <2> mne MOVSX ; ofs=5D1h 1091 <3> %push 1091 <3> usesection ASMTABLE2, 1 1091 <3> %assign %$currofs $ - asmtab 1091 ****************** <3> expansion: currofs = 1429 1091 <3> %ifnempty %2 1091 <3> db %2 1091 <3> %endif 1091 <3> __SECT__ 1091 <3> %defstr %$string %1 1091 ****************** <3> expansion: string = 'MOVSX' 1091 <3> %strlen %$string_size %$string 1091 ****************** <3> expansion: string_size = 5 1091 <3> %if %$string_size > 15 1091 <3> %error Mnemonic %1 is too long! 1091 <3> %endif 1091 00000892 5559 <3> dw (%$currofs)<<4|%$string_size 1091 <3> %assign MN_%1 $ - mnlist 1091 ****************** <3> expansion: MN_MOVSX = 1941 1091 00000894 4D4F565358 <3> db %$string 1091 <3> %pop 1092 00000595 F78D4E <2> variant 1beh, 48, ASM_MACH3 1092 ****************** <2> expansion: ainfo = 36174 1092 ****************** <2> expansion: escaped = 141 1092 ****************** <2> expansion: escapes = 0 1093 00000598 F78DA0 <2> variant 1bfh, 49, ASM_MACH3 1093 ****************** <2> expansion: ainfo = 36256 1093 ****************** <2> expansion: escaped = 141 1093 ****************** <2> expansion: escapes = 0 1094 0000059B FF <2> endvariant 1095 <2> mne MOVZX ; ofs=5D8h 1095 <3> %push 1095 <3> usesection ASMTABLE2, 1 1095 <3> %assign %$currofs $ - asmtab 1095 ****************** <3> expansion: currofs = 1436 1095 <3> %ifnempty %2 1095 <3> db %2 1095 <3> %endif 1095 <3> __SECT__ 1095 <3> %defstr %$string %1 1095 ****************** <3> expansion: string = 'MOVZX' 1095 <3> %strlen %$string_size %$string 1095 ****************** <3> expansion: string_size = 5 1095 <3> %if %$string_size > 15 1095 <3> %error Mnemonic %1 is too long! 1095 <3> %endif 1095 00000899 C559 <3> dw (%$currofs)<<4|%$string_size 1095 <3> %assign MN_%1 $ - mnlist 1095 ****************** <3> expansion: MN_MOVZX = 1948 1095 0000089B 4D4F565A58 <3> db %$string 1095 <3> %pop 1096 0000059C F78AC6 <2> variant 1b6h, 48, ASM_MACH3 1096 ****************** <2> expansion: ainfo = 35526 1096 ****************** <2> expansion: escaped = 138 1096 ****************** <2> expansion: escapes = 0 1097 0000059F F78B18 <2> variant 1b7h, 49, ASM_MACH3 1097 ****************** <2> expansion: ainfo = 35608 1097 ****************** <2> expansion: escaped = 139 1097 ****************** <2> expansion: escapes = 0 1098 000005A2 FF <2> endvariant 1099 <2> mne MUL ; ofs=5DFh 1099 <3> %push 1099 <3> usesection ASMTABLE2, 1 1099 <3> %assign %$currofs $ - asmtab 1099 ****************** <3> expansion: currofs = 1443 1099 <3> %ifnempty %2 1099 <3> db %2 1099 <3> %endif 1099 <3> __SECT__ 1099 <3> %defstr %$string %1 1099 ****************** <3> expansion: string = 'MUL' 1099 <3> %strlen %$string_size %$string 1099 ****************** <3> expansion: string_size = 3 1099 <3> %if %$string_size > 15 1099 <3> %error Mnemonic %1 is too long! 1099 <3> %endif 1099 000008A0 335A <3> dw (%$currofs)<<4|%$string_size 1099 <3> %assign MN_%1 $ - mnlist 1099 ****************** <3> expansion: MN_MUL = 1955 1099 000008A2 4D554C <3> db %$string 1099 <3> %pop 1100 000005A3 C6C4 <2> variant AGRP(6,4), 16 1100 ****************** <2> expansion: ainfo = 50884 1100 ****************** <2> expansion: escaped = 198 1100 ****************** <2> expansion: escapes = 0 1101 000005A5 FF <2> endvariant 1102 <2> mne NEG ; ofs=5E2h 1102 <3> %push 1102 <3> usesection ASMTABLE2, 1 1102 <3> %assign %$currofs $ - asmtab 1102 ****************** <3> expansion: currofs = 1446 1102 <3> %ifnempty %2 1102 <3> db %2 1102 <3> %endif 1102 <3> __SECT__ 1102 <3> %defstr %$string %1 1102 ****************** <3> expansion: string = 'NEG' 1102 <3> %strlen %$string_size %$string 1102 ****************** <3> expansion: string_size = 3 1102 <3> %if %$string_size > 15 1102 <3> %error Mnemonic %1 is too long! 1102 <3> %endif 1102 000008A5 635A <3> dw (%$currofs)<<4|%$string_size 1102 <3> %assign MN_%1 $ - mnlist 1102 ****************** <3> expansion: MN_NEG = 1960 1102 000008A7 4E4547 <3> db %$string 1102 <3> %pop 1103 000005A6 FBC673 <2> variant AGRP(6,3), 16, ASM_LOCKABLE 1103 ****************** <2> expansion: ainfo = 50803 1103 ****************** <2> expansion: escaped = 198 1103 ****************** <2> expansion: escapes = 0 1104 000005A9 FF <2> endvariant 1105 <2> mne NOP ; ofs=5E6h 1105 <3> %push 1105 <3> usesection ASMTABLE2, 1 1105 <3> %assign %$currofs $ - asmtab 1105 ****************** <3> expansion: currofs = 1450 1105 <3> %ifnempty %2 1105 <3> db %2 1105 <3> %endif 1105 <3> __SECT__ 1105 <3> %defstr %$string %1 1105 ****************** <3> expansion: string = 'NOP' 1105 <3> %strlen %$string_size %$string 1105 ****************** <3> expansion: string_size = 3 1105 <3> %if %$string_size > 15 1105 <3> %error Mnemonic %1 is too long! 1105 <3> %endif 1105 000008AA A35A <3> dw (%$currofs)<<4|%$string_size 1105 <3> %assign MN_%1 $ - mnlist 1105 ****************** <3> expansion: MN_NOP = 1965 1105 000008AC 4E4F50 <3> db %$string 1105 <3> %pop 1106 000005AA 2D90 <2> variant 090h, 0 1106 ****************** <2> expansion: ainfo = 11664 1106 ****************** <2> expansion: escaped = 45 1106 ****************** <2> expansion: escapes = 0 1107 000005AC FF <2> endvariant 1108 <2> mne NOT ; ofs=5E9h 1108 <3> %push 1108 <3> usesection ASMTABLE2, 1 1108 <3> %assign %$currofs $ - asmtab 1108 ****************** <3> expansion: currofs = 1453 1108 <3> %ifnempty %2 1108 <3> db %2 1108 <3> %endif 1108 <3> __SECT__ 1108 <3> %defstr %$string %1 1108 ****************** <3> expansion: string = 'NOT' 1108 <3> %strlen %$string_size %$string 1108 ****************** <3> expansion: string_size = 3 1108 <3> %if %$string_size > 15 1108 <3> %error Mnemonic %1 is too long! 1108 <3> %endif 1108 000008AF D35A <3> dw (%$currofs)<<4|%$string_size 1108 <3> %assign MN_%1 $ - mnlist 1108 ****************** <3> expansion: MN_NOT = 1970 1108 000008B1 4E4F54 <3> db %$string 1108 <3> %pop 1109 000005AD FBC622 <2> variant AGRP(6,2), 16, ASM_LOCKABLE 1109 ****************** <2> expansion: ainfo = 50722 1109 ****************** <2> expansion: escaped = 198 1109 ****************** <2> expansion: escapes = 0 1110 000005B0 FF <2> endvariant 1111 <2> mne OR ; ofs=5EDh 1111 <3> %push 1111 <3> usesection ASMTABLE2, 1 1111 <3> %assign %$currofs $ - asmtab 1111 ****************** <3> expansion: currofs = 1457 1111 <3> %ifnempty %2 1111 <3> db %2 1111 <3> %endif 1111 <3> __SECT__ 1111 <3> %defstr %$string %1 1111 ****************** <3> expansion: string = 'OR' 1111 <3> %strlen %$string_size %$string 1111 ****************** <3> expansion: string_size = 2 1111 <3> %if %$string_size > 15 1111 <3> %error Mnemonic %1 is too long! 1111 <3> %endif 1111 000008B4 125B <3> dw (%$currofs)<<4|%$string_size 1111 <3> %assign MN_%1 $ - mnlist 1111 ****************** <3> expansion: MN_OR = 1975 1111 000008B6 4F52 <3> db %$string 1111 <3> %pop 1112 000005B1 FBB91C <2> variant AGRP(1,1), 3, ASM_LOCKABLE 1112 ****************** <2> expansion: ainfo = 47388 1112 ****************** <2> expansion: escaped = 185 1112 ****************** <2> expansion: escapes = 0 1113 000005B4 03CD <2> variant 00ch, 1 1113 ****************** <2> expansion: ainfo = 973 1113 ****************** <2> expansion: escaped = 3 1113 ****************** <2> expansion: escapes = 0 1114 000005B6 FBBBA3 <2> variant AGRP(2,1), 2, ASM_LOCKABLE 1114 ****************** <2> expansion: ainfo = 48035 1114 ****************** <2> expansion: escaped = 187 1114 ****************** <2> expansion: escapes = 0 1115 000005B9 FB028C <2> variant 008h, 4, ASM_LOCKABLE 1115 ****************** <2> expansion: ainfo = 652 1115 ****************** <2> expansion: escaped = 2 1115 ****************** <2> expansion: escapes = 0 1116 000005BC 032F <2> variant 00ah, 5 1116 ****************** <2> expansion: ainfo = 815 1116 ****************** <2> expansion: escaped = 3 1116 ****************** <2> expansion: escapes = 0 1117 000005BE FF <2> endvariant 1118 <2> mne ORG, ASM_SPECIAL ; ofs=5FBh 1118 <3> %push 1118 <3> usesection ASMTABLE2, 1 1118 <3> %assign %$currofs $ - asmtab 1118 ****************** <3> expansion: currofs = 1471 1118 <3> %ifnempty %2 1118 000005BF FF <3> db %2 1118 <3> %endif 1118 <3> __SECT__ 1118 <3> %defstr %$string %1 1118 ****************** <3> expansion: string = 'ORG' 1118 <3> %strlen %$string_size %$string 1118 ****************** <3> expansion: string_size = 3 1118 <3> %if %$string_size > 15 1118 <3> %error Mnemonic %1 is too long! 1118 <3> %endif 1118 000008B8 F35B <3> dw (%$currofs)<<4|%$string_size 1118 <3> %assign MN_%1 $ - mnlist 1118 ****************** <3> expansion: MN_ORG = 1979 1118 000008BA 4F5247 <3> db %$string 1118 <3> %pop 1119 <2> mne OUT ; ofs=5FDh 1119 <3> %push 1119 <3> usesection ASMTABLE2, 1 1119 <3> %assign %$currofs $ - asmtab 1119 ****************** <3> expansion: currofs = 1472 1119 <3> %ifnempty %2 1119 <3> db %2 1119 <3> %endif 1119 <3> __SECT__ 1119 <3> %defstr %$string %1 1119 ****************** <3> expansion: string = 'OUT' 1119 <3> %strlen %$string_size %$string 1119 ****************** <3> expansion: string_size = 3 1119 <3> %if %$string_size > 15 1119 <3> %error Mnemonic %1 is too long! 1119 <3> %endif 1119 000008BD 035C <3> dw (%$currofs)<<4|%$string_size 1119 <3> %assign MN_%1 $ - mnlist 1119 ****************** <3> expansion: MN_OUT = 1984 1119 000008BF 4F5554 <3> db %$string 1119 <3> %pop 1120 000005C0 48F8 <2> variant 0e6h, 50 1120 ****************** <2> expansion: ainfo = 18680 1120 ****************** <2> expansion: escaped = 72 1120 ****************** <2> expansion: escapes = 0 1121 000005C2 4B81 <2> variant 0eeh, 51 1121 ****************** <2> expansion: ainfo = 19329 1121 ****************** <2> expansion: escaped = 75 1121 ****************** <2> expansion: escapes = 0 1122 000005C4 FF <2> endvariant 1123 <2> mne OUTSB ; ofs=602h 1123 <3> %push 1123 <3> usesection ASMTABLE2, 1 1123 <3> %assign %$currofs $ - asmtab 1123 ****************** <3> expansion: currofs = 1477 1123 <3> %ifnempty %2 1123 <3> db %2 1123 <3> %endif 1123 <3> __SECT__ 1123 <3> %defstr %$string %1 1123 ****************** <3> expansion: string = 'OUTSB' 1123 <3> %strlen %$string_size %$string 1123 ****************** <3> expansion: string_size = 5 1123 <3> %if %$string_size > 15 1123 <3> %error Mnemonic %1 is too long! 1123 <3> %endif 1123 000008C2 555C <3> dw (%$currofs)<<4|%$string_size 1123 <3> %assign MN_%1 $ - mnlist 1123 ****************** <3> expansion: MN_OUTSB = 1989 1123 000008C4 4F55545342 <3> db %$string 1123 <3> %pop 1124 000005C5 F522CE <2> variant 06eh, 0, ASM_MACH1 1124 ****************** <2> expansion: ainfo = 8910 1124 ****************** <2> expansion: escaped = 34 1124 ****************** <2> expansion: escapes = 0 1125 000005C8 FF <2> endvariant 1126 <2> mne POP ; ofs=60Ah 1126 <3> %push 1126 <3> usesection ASMTABLE2, 1 1126 <3> %assign %$currofs $ - asmtab 1126 ****************** <3> expansion: currofs = 1481 1126 <3> %ifnempty %2 1126 <3> db %2 1126 <3> %endif 1126 <3> __SECT__ 1126 <3> %defstr %$string %1 1126 ****************** <3> expansion: string = 'POP' 1126 <3> %strlen %$string_size %$string 1126 ****************** <3> expansion: string_size = 3 1126 <3> %if %$string_size > 15 1126 <3> %error Mnemonic %1 is too long! 1126 <3> %endif 1126 000008C9 935C <3> dw (%$currofs)<<4|%$string_size 1126 <3> %assign MN_%1 $ - mnlist 1126 ****************** <3> expansion: MN_POP = 1996 1126 000008CB 504F50 <3> db %$string 1126 <3> %pop 1127 000005C9 D75C <2> variant AGRP(13,0), 52 1127 ****************** <2> expansion: ainfo = 55132 1127 ****************** <2> expansion: escaped = 215 1127 ****************** <2> expansion: escapes = 0 1128 000005CB 1BE9 <2> variant 058h, 17 1128 ****************** <2> expansion: ainfo = 7145 1128 ****************** <2> expansion: escaped = 27 1128 ****************** <2> expansion: escapes = 0 1129 000005CD 0A12 <2> variant 01fh, 67 1129 ****************** <2> expansion: ainfo = 2578 1129 ****************** <2> expansion: escaped = 10 1129 ****************** <2> expansion: escapes = 0 1130 000005CF 0277 <2> variant 007h, 64 1130 ****************** <2> expansion: ainfo = 631 1130 ****************** <2> expansion: escaped = 2 1130 ****************** <2> expansion: escapes = 0 1131 000005D1 0789 <2> variant 017h, 66 1131 ****************** <2> expansion: ainfo = 1929 1131 ****************** <2> expansion: escaped = 7 1131 ****************** <2> expansion: escapes = 0 1132 000005D3 F78435 <2> variant 1a1h, 68, ASM_MACH3 1132 ****************** <2> expansion: ainfo = 33845 1132 ****************** <2> expansion: escaped = 132 1132 ****************** <2> expansion: escapes = 0 1133 000005D6 F786BE <2> variant 1a9h, 69, ASM_MACH3 1133 ****************** <2> expansion: ainfo = 34494 1133 ****************** <2> expansion: escaped = 134 1133 ****************** <2> expansion: escapes = 0 1134 000005D9 FF <2> endvariant 1135 <2> mne PUSH ; ofs=622h 1135 <3> %push 1135 <3> usesection ASMTABLE2, 1 1135 <3> %assign %$currofs $ - asmtab 1135 ****************** <3> expansion: currofs = 1498 1135 <3> %ifnempty %2 1135 <3> db %2 1135 <3> %endif 1135 <3> __SECT__ 1135 <3> %defstr %$string %1 1135 ****************** <3> expansion: string = 'PUSH' 1135 <3> %strlen %$string_size %$string 1135 ****************** <3> expansion: string_size = 4 1135 <3> %if %$string_size > 15 1135 <3> %error Mnemonic %1 is too long! 1135 <3> %endif 1135 000008CE A45D <3> dw (%$currofs)<<4|%$string_size 1135 <3> %assign MN_%1 $ - mnlist 1135 ****************** <3> expansion: MN_PUSH = 2001 1135 000008D0 50555348 <3> db %$string 1135 <3> %pop 1136 000005DA 1961 <2> variant 050h, 17 1136 ****************** <2> expansion: ainfo = 6497 1136 ****************** <2> expansion: escaped = 25 1136 ****************** <2> expansion: escapes = 0 1137 000005DC C26E <2> variant AGRP(4,6), 40 1137 ****************** <2> expansion: ainfo = 49774 1137 ****************** <2> expansion: escaped = 194 1137 ****************** <2> expansion: escapes = 0 1138 000005DE F521C0 <2> variant 06ah, 54, ASM_MACH1 1138 ****************** <2> expansion: ainfo = 8640 1138 ****************** <2> expansion: escaped = 33 1138 ****************** <2> expansion: escapes = 0 1139 000005E1 F5211D <2> variant 068h, 53, ASM_MACH1 1139 ****************** <2> expansion: ainfo = 8477 1139 ****************** <2> expansion: escaped = 33 1139 ****************** <2> expansion: escapes = 0 1140 000005E4 04AF <2> variant 00eh, 65 1140 ****************** <2> expansion: ainfo = 1199 1140 ****************** <2> expansion: escaped = 4 1140 ****************** <2> expansion: escapes = 0 1141 000005E6 0738 <2> variant 016h, 66 1141 ****************** <2> expansion: ainfo = 1848 1141 ****************** <2> expansion: escaped = 7 1141 ****************** <2> expansion: escapes = 0 1142 000005E8 09C1 <2> variant 01eh, 67 1142 ****************** <2> expansion: ainfo = 2497 1142 ****************** <2> expansion: escaped = 9 1142 ****************** <2> expansion: escapes = 0 1143 000005EA 0226 <2> variant 006h, 64 1143 ****************** <2> expansion: ainfo = 550 1143 ****************** <2> expansion: escaped = 2 1143 ****************** <2> expansion: escapes = 0 1144 000005EC F783E4 <2> variant 1a0h, 68, ASM_MACH3 1144 ****************** <2> expansion: ainfo = 33764 1144 ****************** <2> expansion: escaped = 131 1144 ****************** <2> expansion: escapes = 0 1145 000005EF F7866D <2> variant 1a8h, 69, ASM_MACH3 1145 ****************** <2> expansion: ainfo = 34413 1145 ****************** <2> expansion: escaped = 134 1145 ****************** <2> expansion: escapes = 0 1146 000005F2 FF <2> endvariant 1147 <2> mne RCL ; ofs=642h 1147 <3> %push 1147 <3> usesection ASMTABLE2, 1 1147 <3> %assign %$currofs $ - asmtab 1147 ****************** <3> expansion: currofs = 1523 1147 <3> %ifnempty %2 1147 <3> db %2 1147 <3> %endif 1147 <3> __SECT__ 1147 <3> %defstr %$string %1 1147 ****************** <3> expansion: string = 'RCL' 1147 <3> %strlen %$string_size %$string 1147 ****************** <3> expansion: string_size = 3 1147 <3> %if %$string_size > 15 1147 <3> %error Mnemonic %1 is too long! 1147 <3> %endif 1147 000008D4 335F <3> dw (%$currofs)<<4|%$string_size 1147 <3> %assign MN_%1 $ - mnlist 1147 ****************** <3> expansion: MN_RCL = 2007 1147 000008D6 52434C <3> db %$string 1147 <3> %pop 1148 000005F3 DA89 <2> variant AGRP(14,2), 55 1148 ****************** <2> expansion: ainfo = 55945 1148 ****************** <2> expansion: escaped = 218 1148 ****************** <2> expansion: escapes = 0 1149 000005F5 DD12 <2> variant AGRP(15,2), 56 1149 ****************** <2> expansion: ainfo = 56594 1149 ****************** <2> expansion: escaped = 221 1149 ****************** <2> expansion: escapes = 0 1150 000005F7 F5DF9B <2> variant AGRP(16,2), 57, ASM_MACH1 1150 ****************** <2> expansion: ainfo = 57243 1150 ****************** <2> expansion: escaped = 223 1150 ****************** <2> expansion: escapes = 0 1151 000005FA FF <2> endvariant 1152 <2> mne RCR ; ofs=64Ah 1152 <3> %push 1152 <3> usesection ASMTABLE2, 1 1152 <3> %assign %$currofs $ - asmtab 1152 ****************** <3> expansion: currofs = 1531 1152 <3> %ifnempty %2 1152 <3> db %2 1152 <3> %endif 1152 <3> __SECT__ 1152 <3> %defstr %$string %1 1152 ****************** <3> expansion: string = 'RCR' 1152 <3> %strlen %$string_size %$string 1152 ****************** <3> expansion: string_size = 3 1152 <3> %if %$string_size > 15 1152 <3> %error Mnemonic %1 is too long! 1152 <3> %endif 1152 000008D9 B35F <3> dw (%$currofs)<<4|%$string_size 1152 <3> %assign MN_%1 $ - mnlist 1152 ****************** <3> expansion: MN_RCR = 2012 1152 000008DB 524352 <3> db %$string 1152 <3> %pop 1153 000005FB DADA <2> variant AGRP(14,3), 55 1153 ****************** <2> expansion: ainfo = 56026 1153 ****************** <2> expansion: escaped = 218 1153 ****************** <2> expansion: escapes = 0 1154 000005FD DD63 <2> variant AGRP(15,3), 56 1154 ****************** <2> expansion: ainfo = 56675 1154 ****************** <2> expansion: escaped = 221 1154 ****************** <2> expansion: escapes = 0 1155 000005FF F5DFEC <2> variant AGRP(16,3), 57, ASM_MACH1 1155 ****************** <2> expansion: ainfo = 57324 1155 ****************** <2> expansion: escaped = 223 1155 ****************** <2> expansion: escapes = 0 1156 00000602 FF <2> endvariant 1157 <2> mne ROL ; ofs=652h 1157 <3> %push 1157 <3> usesection ASMTABLE2, 1 1157 <3> %assign %$currofs $ - asmtab 1157 ****************** <3> expansion: currofs = 1539 1157 <3> %ifnempty %2 1157 <3> db %2 1157 <3> %endif 1157 <3> __SECT__ 1157 <3> %defstr %$string %1 1157 ****************** <3> expansion: string = 'ROL' 1157 <3> %strlen %$string_size %$string 1157 ****************** <3> expansion: string_size = 3 1157 <3> %if %$string_size > 15 1157 <3> %error Mnemonic %1 is too long! 1157 <3> %endif 1157 000008DE 3360 <3> dw (%$currofs)<<4|%$string_size 1157 <3> %assign MN_%1 $ - mnlist 1157 ****************** <3> expansion: MN_ROL = 2017 1157 000008E0 524F4C <3> db %$string 1157 <3> %pop 1158 00000603 D9E7 <2> variant AGRP(14,0), 55 1158 ****************** <2> expansion: ainfo = 55783 1158 ****************** <2> expansion: escaped = 217 1158 ****************** <2> expansion: escapes = 0 1159 00000605 DC70 <2> variant AGRP(15,0), 56 1159 ****************** <2> expansion: ainfo = 56432 1159 ****************** <2> expansion: escaped = 220 1159 ****************** <2> expansion: escapes = 0 1160 00000607 F5DEF9 <2> variant AGRP(16,0), 57, ASM_MACH1 1160 ****************** <2> expansion: ainfo = 57081 1160 ****************** <2> expansion: escaped = 222 1160 ****************** <2> expansion: escapes = 0 1161 0000060A FF <2> endvariant 1162 <2> mne ROR ; ofs=65Ah 1162 <3> %push 1162 <3> usesection ASMTABLE2, 1 1162 <3> %assign %$currofs $ - asmtab 1162 ****************** <3> expansion: currofs = 1547 1162 <3> %ifnempty %2 1162 <3> db %2 1162 <3> %endif 1162 <3> __SECT__ 1162 <3> %defstr %$string %1 1162 ****************** <3> expansion: string = 'ROR' 1162 <3> %strlen %$string_size %$string 1162 ****************** <3> expansion: string_size = 3 1162 <3> %if %$string_size > 15 1162 <3> %error Mnemonic %1 is too long! 1162 <3> %endif 1162 000008E3 B360 <3> dw (%$currofs)<<4|%$string_size 1162 <3> %assign MN_%1 $ - mnlist 1162 ****************** <3> expansion: MN_ROR = 2022 1162 000008E5 524F52 <3> db %$string 1162 <3> %pop 1163 0000060B DA38 <2> variant AGRP(14,1), 55 1163 ****************** <2> expansion: ainfo = 55864 1163 ****************** <2> expansion: escaped = 218 1163 ****************** <2> expansion: escapes = 0 1164 0000060D DCC1 <2> variant AGRP(15,1), 56 1164 ****************** <2> expansion: ainfo = 56513 1164 ****************** <2> expansion: escaped = 220 1164 ****************** <2> expansion: escapes = 0 1165 0000060F F5DF4A <2> variant AGRP(16,1), 57, ASM_MACH1 1165 ****************** <2> expansion: ainfo = 57162 1165 ****************** <2> expansion: escaped = 223 1165 ****************** <2> expansion: escapes = 0 1166 00000612 FF <2> endvariant 1167 <2> mne RDMSR ; ofs=662h 1167 <3> %push 1167 <3> usesection ASMTABLE2, 1 1167 <3> %assign %$currofs $ - asmtab 1167 ****************** <3> expansion: currofs = 1555 1167 <3> %ifnempty %2 1167 <3> db %2 1167 <3> %endif 1167 <3> __SECT__ 1167 <3> %defstr %$string %1 1167 ****************** <3> expansion: string = 'RDMSR' 1167 <3> %strlen %$string_size %$string 1167 ****************** <3> expansion: string_size = 5 1167 <3> %if %$string_size > 15 1167 <3> %error Mnemonic %1 is too long! 1167 <3> %endif 1167 000008E8 3561 <3> dw (%$currofs)<<4|%$string_size 1167 <3> %assign MN_%1 $ - mnlist 1167 ****************** <3> expansion: MN_RDMSR = 2027 1167 000008EA 52444D5352 <3> db %$string 1167 <3> %pop 1168 00000613 F960D2 <2> variant 132h, 0, ASM_MACH5 1168 ****************** <2> expansion: ainfo = 24786 1168 ****************** <2> expansion: escaped = 96 1168 ****************** <2> expansion: escapes = 0 1169 00000616 FF <2> endvariant 1170 <2> mne RDTSC ; ofs=666h 1170 <3> %push 1170 <3> usesection ASMTABLE2, 1 1170 <3> %assign %$currofs $ - asmtab 1170 ****************** <3> expansion: currofs = 1559 1170 <3> %ifnempty %2 1170 <3> db %2 1170 <3> %endif 1170 <3> __SECT__ 1170 <3> %defstr %$string %1 1170 ****************** <3> expansion: string = 'RDTSC' 1170 <3> %strlen %$string_size %$string 1170 ****************** <3> expansion: string_size = 5 1170 <3> %if %$string_size > 15 1170 <3> %error Mnemonic %1 is too long! 1170 <3> %endif 1170 000008EF 7561 <3> dw (%$currofs)<<4|%$string_size 1170 <3> %assign MN_%1 $ - mnlist 1170 ****************** <3> expansion: MN_RDTSC = 2034 1170 000008F1 5244545343 <3> db %$string 1170 <3> %pop 1171 00000617 F96081 <2> variant 131h, 0, ASM_MACH5 1171 ****************** <2> expansion: ainfo = 24705 1171 ****************** <2> expansion: escaped = 96 1171 ****************** <2> expansion: escapes = 0 1172 0000061A FF <2> endvariant 1173 <2> mne REP, ASM_SPECIAL, 0f3h ; ofs=66Ah 1173 <3> %push 1173 <3> usesection ASMTABLE2, 1 1173 <3> %assign %$currofs $ - asmtab 1173 ****************** <3> expansion: currofs = 1563 1173 <3> %ifnempty %2 1173 0000061B FFF3 <3> db %2 1173 <3> %endif 1173 <3> __SECT__ 1173 <3> %defstr %$string %1 1173 ****************** <3> expansion: string = 'REP' 1173 <3> %strlen %$string_size %$string 1173 ****************** <3> expansion: string_size = 3 1173 <3> %if %$string_size > 15 1173 <3> %error Mnemonic %1 is too long! 1173 <3> %endif 1173 000008F6 B361 <3> dw (%$currofs)<<4|%$string_size 1173 <3> %assign MN_%1 $ - mnlist 1173 ****************** <3> expansion: MN_REP = 2041 1173 000008F8 524550 <3> db %$string 1173 <3> %pop 1174 <2> mne REPZ, ASM_SPECIAL, 0f3h ; ofs=66Ch 1174 <3> %push 1174 <3> usesection ASMTABLE2, 1 1174 <3> %assign %$currofs $ - asmtab 1174 ****************** <3> expansion: currofs = 1565 1174 <3> %ifnempty %2 1174 0000061D FFF3 <3> db %2 1174 <3> %endif 1174 <3> __SECT__ 1174 <3> %defstr %$string %1 1174 ****************** <3> expansion: string = 'REPZ' 1174 <3> %strlen %$string_size %$string 1174 ****************** <3> expansion: string_size = 4 1174 <3> %if %$string_size > 15 1174 <3> %error Mnemonic %1 is too long! 1174 <3> %endif 1174 000008FB D461 <3> dw (%$currofs)<<4|%$string_size 1174 <3> %assign MN_%1 $ - mnlist 1174 ****************** <3> expansion: MN_REPZ = 2046 1174 000008FD 5245505A <3> db %$string 1174 <3> %pop 1175 <2> mne REPNZ, ASM_SPECIAL, 0f2h ; ofs=66Eh 1175 <3> %push 1175 <3> usesection ASMTABLE2, 1 1175 <3> %assign %$currofs $ - asmtab 1175 ****************** <3> expansion: currofs = 1567 1175 <3> %ifnempty %2 1175 0000061F FFF2 <3> db %2 1175 <3> %endif 1175 <3> __SECT__ 1175 <3> %defstr %$string %1 1175 ****************** <3> expansion: string = 'REPNZ' 1175 <3> %strlen %$string_size %$string 1175 ****************** <3> expansion: string_size = 5 1175 <3> %if %$string_size > 15 1175 <3> %error Mnemonic %1 is too long! 1175 <3> %endif 1175 00000901 F561 <3> dw (%$currofs)<<4|%$string_size 1175 <3> %assign MN_%1 $ - mnlist 1175 ****************** <3> expansion: MN_REPNZ = 2052 1175 00000903 5245504E5A <3> db %$string 1175 <3> %pop 1176 <2> mne REPE, ASM_SPECIAL, 0f3h ; ofs=670h 1176 <3> %push 1176 <3> usesection ASMTABLE2, 1 1176 <3> %assign %$currofs $ - asmtab 1176 ****************** <3> expansion: currofs = 1569 1176 <3> %ifnempty %2 1176 00000621 FFF3 <3> db %2 1176 <3> %endif 1176 <3> __SECT__ 1176 <3> %defstr %$string %1 1176 ****************** <3> expansion: string = 'REPE' 1176 <3> %strlen %$string_size %$string 1176 ****************** <3> expansion: string_size = 4 1176 <3> %if %$string_size > 15 1176 <3> %error Mnemonic %1 is too long! 1176 <3> %endif 1176 00000908 1462 <3> dw (%$currofs)<<4|%$string_size 1176 <3> %assign MN_%1 $ - mnlist 1176 ****************** <3> expansion: MN_REPE = 2059 1176 0000090A 52455045 <3> db %$string 1176 <3> %pop 1177 <2> mne REPNE, ASM_SPECIAL, 0f2h ; ofs=672h 1177 <3> %push 1177 <3> usesection ASMTABLE2, 1 1177 <3> %assign %$currofs $ - asmtab 1177 ****************** <3> expansion: currofs = 1571 1177 <3> %ifnempty %2 1177 00000623 FFF2 <3> db %2 1177 <3> %endif 1177 <3> __SECT__ 1177 <3> %defstr %$string %1 1177 ****************** <3> expansion: string = 'REPNE' 1177 <3> %strlen %$string_size %$string 1177 ****************** <3> expansion: string_size = 5 1177 <3> %if %$string_size > 15 1177 <3> %error Mnemonic %1 is too long! 1177 <3> %endif 1177 0000090E 3562 <3> dw (%$currofs)<<4|%$string_size 1177 <3> %assign MN_%1 $ - mnlist 1177 ****************** <3> expansion: MN_REPNE = 2065 1177 00000910 5245504E45 <3> db %$string 1177 <3> %pop 1178 <2> mne RSM ; ofs=683h 1178 <3> %push 1178 <3> usesection ASMTABLE2, 1 1178 <3> %assign %$currofs $ - asmtab 1178 ****************** <3> expansion: currofs = 1573 1178 <3> %ifnempty %2 1178 <3> db %2 1178 <3> %endif 1178 <3> __SECT__ 1178 <3> %defstr %$string %1 1178 ****************** <3> expansion: string = 'RSM' 1178 <3> %strlen %$string_size %$string 1178 ****************** <3> expansion: string_size = 3 1178 <3> %if %$string_size > 15 1178 <3> %error Mnemonic %1 is too long! 1178 <3> %endif 1178 00000915 5362 <3> dw (%$currofs)<<4|%$string_size 1178 <3> %assign MN_%1 $ - mnlist 1178 ****************** <3> expansion: MN_RSM = 2072 1178 00000917 52534D <3> db %$string 1178 <3> %pop 1179 00000625 F986CA <2> variant 1aah, 0, ASM_MACH5 1179 ****************** <2> expansion: ainfo = 34506 1179 ****************** <2> expansion: escaped = 134 1179 ****************** <2> expansion: escapes = 0 1180 00000628 FF <2> endvariant 1181 <2> mne SAHF ; ofs=687h 1181 <3> %push 1181 <3> usesection ASMTABLE2, 1 1181 <3> %assign %$currofs $ - asmtab 1181 ****************** <3> expansion: currofs = 1577 1181 <3> %ifnempty %2 1181 <3> db %2 1181 <3> %endif 1181 <3> __SECT__ 1181 <3> %defstr %$string %1 1181 ****************** <3> expansion: string = 'SAHF' 1181 <3> %strlen %$string_size %$string 1181 ****************** <3> expansion: string_size = 4 1181 <3> %if %$string_size > 15 1181 <3> %error Mnemonic %1 is too long! 1181 <3> %endif 1181 0000091A 9462 <3> dw (%$currofs)<<4|%$string_size 1181 <3> %assign MN_%1 $ - mnlist 1181 ****************** <3> expansion: MN_SAHF = 2077 1181 0000091C 53414846 <3> db %$string 1181 <3> %pop 1182 00000629 31FE <2> variant 09eh, 0 1182 ****************** <2> expansion: ainfo = 12798 1182 ****************** <2> expansion: escaped = 49 1182 ****************** <2> expansion: escapes = 0 1183 0000062B FF <2> endvariant 1184 <2> mne SAL ; ofs=68Ah 1184 <3> %push 1184 <3> usesection ASMTABLE2, 1 1184 <3> %assign %$currofs $ - asmtab 1184 ****************** <3> expansion: currofs = 1580 1184 <3> %ifnempty %2 1184 <3> db %2 1184 <3> %endif 1184 <3> __SECT__ 1184 <3> %defstr %$string %1 1184 ****************** <3> expansion: string = 'SAL' 1184 <3> %strlen %$string_size %$string 1184 ****************** <3> expansion: string_size = 3 1184 <3> %if %$string_size > 15 1184 <3> %error Mnemonic %1 is too long! 1184 <3> %endif 1184 00000920 C362 <3> dw (%$currofs)<<4|%$string_size 1184 <3> %assign MN_%1 $ - mnlist 1184 ****************** <3> expansion: MN_SAL = 2083 1184 00000922 53414C <3> db %$string 1184 <3> %pop 1185 0000062C DB2B <2> variant AGRP(14,4), 55 1185 ****************** <2> expansion: ainfo = 56107 1185 ****************** <2> expansion: escaped = 219 1185 ****************** <2> expansion: escapes = 0 1186 0000062E DDB4 <2> variant AGRP(15,4), 56 1186 ****************** <2> expansion: ainfo = 56756 1186 ****************** <2> expansion: escaped = 221 1186 ****************** <2> expansion: escapes = 0 1187 00000630 F5E03D <2> variant AGRP(16,4), 57, ASM_MACH1 1187 ****************** <2> expansion: ainfo = 57405 1187 ****************** <2> expansion: escaped = 224 1187 ****************** <2> expansion: escapes = 0 1188 00000633 FF <2> endvariant 1189 <2> mne SAR ; ofs=692h 1189 <3> %push 1189 <3> usesection ASMTABLE2, 1 1189 <3> %assign %$currofs $ - asmtab 1189 ****************** <3> expansion: currofs = 1588 1189 <3> %ifnempty %2 1189 <3> db %2 1189 <3> %endif 1189 <3> __SECT__ 1189 <3> %defstr %$string %1 1189 ****************** <3> expansion: string = 'SAR' 1189 <3> %strlen %$string_size %$string 1189 ****************** <3> expansion: string_size = 3 1189 <3> %if %$string_size > 15 1189 <3> %error Mnemonic %1 is too long! 1189 <3> %endif 1189 00000925 4363 <3> dw (%$currofs)<<4|%$string_size 1189 <3> %assign MN_%1 $ - mnlist 1189 ****************** <3> expansion: MN_SAR = 2088 1189 00000927 534152 <3> db %$string 1189 <3> %pop 1190 00000634 DC1E <2> variant AGRP(14,7), 55 1190 ****************** <2> expansion: ainfo = 56350 1190 ****************** <2> expansion: escaped = 220 1190 ****************** <2> expansion: escapes = 0 1191 00000636 DEA7 <2> variant AGRP(15,7), 56 1191 ****************** <2> expansion: ainfo = 56999 1191 ****************** <2> expansion: escaped = 222 1191 ****************** <2> expansion: escapes = 0 1192 00000638 F5E130 <2> variant AGRP(16,7), 57, ASM_MACH1 1192 ****************** <2> expansion: ainfo = 57648 1192 ****************** <2> expansion: escaped = 225 1192 ****************** <2> expansion: escapes = 0 1193 0000063B FF <2> endvariant 1194 <2> mne SEG ; ofs=69Ah 1194 <3> %push 1194 <3> usesection ASMTABLE2, 1 1194 <3> %assign %$currofs $ - asmtab 1194 ****************** <3> expansion: currofs = 1596 1194 <3> %ifnempty %2 1194 <3> db %2 1194 <3> %endif 1194 <3> __SECT__ 1194 <3> %defstr %$string %1 1194 ****************** <3> expansion: string = 'SEG' 1194 <3> %strlen %$string_size %$string 1194 ****************** <3> expansion: string_size = 3 1194 <3> %if %$string_size > 15 1194 <3> %error Mnemonic %1 is too long! 1194 <3> %endif 1194 0000092A C363 <3> dw (%$currofs)<<4|%$string_size 1194 <3> %assign MN_%1 $ - mnlist 1194 ****************** <3> expansion: MN_SEG = 2093 1194 0000092C 534547 <3> db %$string 1194 <3> %pop 1195 0000063C 0C46 <2> variant 026h, 64 1195 ****************** <2> expansion: ainfo = 3142 1195 ****************** <2> expansion: escaped = 12 1195 ****************** <2> expansion: escapes = 0 1196 0000063E 0ECF <2> variant 02eh, 65 1196 ****************** <2> expansion: ainfo = 3791 1196 ****************** <2> expansion: escaped = 14 1196 ****************** <2> expansion: escapes = 0 1197 00000640 1158 <2> variant 036h, 66 1197 ****************** <2> expansion: ainfo = 4440 1197 ****************** <2> expansion: escaped = 17 1197 ****************** <2> expansion: escapes = 0 1198 00000642 13E1 <2> variant 03eh, 67 1198 ****************** <2> expansion: ainfo = 5089 1198 ****************** <2> expansion: escaped = 19 1198 ****************** <2> expansion: escapes = 0 1199 00000644 1FE8 <2> variant 064h, 68 1199 ****************** <2> expansion: ainfo = 8168 1199 ****************** <2> expansion: escaped = 31 1199 ****************** <2> expansion: escapes = 0 1200 00000646 203A <2> variant 065h, 69 1200 ****************** <2> expansion: ainfo = 8250 1200 ****************** <2> expansion: escaped = 32 1200 ****************** <2> expansion: escapes = 0 1201 00000648 FF <2> endvariant 1202 <2> mne ES, ASM_SPECIAL, 026h ; ofs=6A7h 1202 <3> %push 1202 <3> usesection ASMTABLE2, 1 1202 <3> %assign %$currofs $ - asmtab 1202 ****************** <3> expansion: currofs = 1609 1202 <3> %ifnempty %2 1202 00000649 FF26 <3> db %2 1202 <3> %endif 1202 <3> __SECT__ 1202 <3> %defstr %$string %1 1202 ****************** <3> expansion: string = 'ES' 1202 <3> %strlen %$string_size %$string 1202 ****************** <3> expansion: string_size = 2 1202 <3> %if %$string_size > 15 1202 <3> %error Mnemonic %1 is too long! 1202 <3> %endif 1202 0000092F 9264 <3> dw (%$currofs)<<4|%$string_size 1202 <3> %assign MN_%1 $ - mnlist 1202 ****************** <3> expansion: MN_ES = 2098 1202 00000931 4553 <3> db %$string 1202 <3> %pop 1203 <2> mne CS, ASM_SPECIAL, 02eh ; ofs=6A9h 1203 <3> %push 1203 <3> usesection ASMTABLE2, 1 1203 <3> %assign %$currofs $ - asmtab 1203 ****************** <3> expansion: currofs = 1611 1203 <3> %ifnempty %2 1203 0000064B FF2E <3> db %2 1203 <3> %endif 1203 <3> __SECT__ 1203 <3> %defstr %$string %1 1203 ****************** <3> expansion: string = 'CS' 1203 <3> %strlen %$string_size %$string 1203 ****************** <3> expansion: string_size = 2 1203 <3> %if %$string_size > 15 1203 <3> %error Mnemonic %1 is too long! 1203 <3> %endif 1203 00000933 B264 <3> dw (%$currofs)<<4|%$string_size 1203 <3> %assign MN_%1 $ - mnlist 1203 ****************** <3> expansion: MN_CS = 2102 1203 00000935 4353 <3> db %$string 1203 <3> %pop 1204 <2> mne SS, ASM_SPECIAL, 036h ; ofs=6ABh 1204 <3> %push 1204 <3> usesection ASMTABLE2, 1 1204 <3> %assign %$currofs $ - asmtab 1204 ****************** <3> expansion: currofs = 1613 1204 <3> %ifnempty %2 1204 0000064D FF36 <3> db %2 1204 <3> %endif 1204 <3> __SECT__ 1204 <3> %defstr %$string %1 1204 ****************** <3> expansion: string = 'SS' 1204 <3> %strlen %$string_size %$string 1204 ****************** <3> expansion: string_size = 2 1204 <3> %if %$string_size > 15 1204 <3> %error Mnemonic %1 is too long! 1204 <3> %endif 1204 00000937 D264 <3> dw (%$currofs)<<4|%$string_size 1204 <3> %assign MN_%1 $ - mnlist 1204 ****************** <3> expansion: MN_SS = 2106 1204 00000939 5353 <3> db %$string 1204 <3> %pop 1205 <2> mne DS, ASM_SPECIAL, 03eh ; ofs=6ADh 1205 <3> %push 1205 <3> usesection ASMTABLE2, 1 1205 <3> %assign %$currofs $ - asmtab 1205 ****************** <3> expansion: currofs = 1615 1205 <3> %ifnempty %2 1205 0000064F FF3E <3> db %2 1205 <3> %endif 1205 <3> __SECT__ 1205 <3> %defstr %$string %1 1205 ****************** <3> expansion: string = 'DS' 1205 <3> %strlen %$string_size %$string 1205 ****************** <3> expansion: string_size = 2 1205 <3> %if %$string_size > 15 1205 <3> %error Mnemonic %1 is too long! 1205 <3> %endif 1205 0000093B F264 <3> dw (%$currofs)<<4|%$string_size 1205 <3> %assign MN_%1 $ - mnlist 1205 ****************** <3> expansion: MN_DS = 2110 1205 0000093D 4453 <3> db %$string 1205 <3> %pop 1206 <2> mne FS, ASM_SPECIAL, 064h ; ofs=6AFh 1206 <3> %push 1206 <3> usesection ASMTABLE2, 1 1206 <3> %assign %$currofs $ - asmtab 1206 ****************** <3> expansion: currofs = 1617 1206 <3> %ifnempty %2 1206 00000651 FF64 <3> db %2 1206 <3> %endif 1206 <3> __SECT__ 1206 <3> %defstr %$string %1 1206 ****************** <3> expansion: string = 'FS' 1206 <3> %strlen %$string_size %$string 1206 ****************** <3> expansion: string_size = 2 1206 <3> %if %$string_size > 15 1206 <3> %error Mnemonic %1 is too long! 1206 <3> %endif 1206 0000093F 1265 <3> dw (%$currofs)<<4|%$string_size 1206 <3> %assign MN_%1 $ - mnlist 1206 ****************** <3> expansion: MN_FS = 2114 1206 00000941 4653 <3> db %$string 1206 <3> %pop 1207 <2> mne GS, ASM_SPECIAL, 065h ; ofs=6B1h 1207 <3> %push 1207 <3> usesection ASMTABLE2, 1 1207 <3> %assign %$currofs $ - asmtab 1207 ****************** <3> expansion: currofs = 1619 1207 <3> %ifnempty %2 1207 00000653 FF65 <3> db %2 1207 <3> %endif 1207 <3> __SECT__ 1207 <3> %defstr %$string %1 1207 ****************** <3> expansion: string = 'GS' 1207 <3> %strlen %$string_size %$string 1207 ****************** <3> expansion: string_size = 2 1207 <3> %if %$string_size > 15 1207 <3> %error Mnemonic %1 is too long! 1207 <3> %endif 1207 00000943 3265 <3> dw (%$currofs)<<4|%$string_size 1207 <3> %assign MN_%1 $ - mnlist 1207 ****************** <3> expansion: MN_GS = 2118 1207 00000945 4753 <3> db %$string 1207 <3> %pop 1208 <2> mne SHL ; ofs=6B3h 1208 <3> %push 1208 <3> usesection ASMTABLE2, 1 1208 <3> %assign %$currofs $ - asmtab 1208 ****************** <3> expansion: currofs = 1621 1208 <3> %ifnempty %2 1208 <3> db %2 1208 <3> %endif 1208 <3> __SECT__ 1208 <3> %defstr %$string %1 1208 ****************** <3> expansion: string = 'SHL' 1208 <3> %strlen %$string_size %$string 1208 ****************** <3> expansion: string_size = 3 1208 <3> %if %$string_size > 15 1208 <3> %error Mnemonic %1 is too long! 1208 <3> %endif 1208 00000947 5365 <3> dw (%$currofs)<<4|%$string_size 1208 <3> %assign MN_%1 $ - mnlist 1208 ****************** <3> expansion: MN_SHL = 2122 1208 00000949 53484C <3> db %$string 1208 <3> %pop 1209 00000655 DB2B <2> variant AGRP(14,4), 55 1209 ****************** <2> expansion: ainfo = 56107 1209 ****************** <2> expansion: escaped = 219 1209 ****************** <2> expansion: escapes = 0 1210 00000657 DDB4 <2> variant AGRP(15,4), 56 1210 ****************** <2> expansion: ainfo = 56756 1210 ****************** <2> expansion: escaped = 221 1210 ****************** <2> expansion: escapes = 0 1211 00000659 F5E03D <2> variant AGRP(16,4), 57, ASM_MACH1 1211 ****************** <2> expansion: ainfo = 57405 1211 ****************** <2> expansion: escaped = 224 1211 ****************** <2> expansion: escapes = 0 1212 0000065C FF <2> endvariant 1213 <2> mne SHR ; ofs=6BBh 1213 <3> %push 1213 <3> usesection ASMTABLE2, 1 1213 <3> %assign %$currofs $ - asmtab 1213 ****************** <3> expansion: currofs = 1629 1213 <3> %ifnempty %2 1213 <3> db %2 1213 <3> %endif 1213 <3> __SECT__ 1213 <3> %defstr %$string %1 1213 ****************** <3> expansion: string = 'SHR' 1213 <3> %strlen %$string_size %$string 1213 ****************** <3> expansion: string_size = 3 1213 <3> %if %$string_size > 15 1213 <3> %error Mnemonic %1 is too long! 1213 <3> %endif 1213 0000094C D365 <3> dw (%$currofs)<<4|%$string_size 1213 <3> %assign MN_%1 $ - mnlist 1213 ****************** <3> expansion: MN_SHR = 2127 1213 0000094E 534852 <3> db %$string 1213 <3> %pop 1214 0000065D DB7C <2> variant AGRP(14,5), 55 1214 ****************** <2> expansion: ainfo = 56188 1214 ****************** <2> expansion: escaped = 219 1214 ****************** <2> expansion: escapes = 0 1215 0000065F DE05 <2> variant AGRP(15,5), 56 1215 ****************** <2> expansion: ainfo = 56837 1215 ****************** <2> expansion: escaped = 222 1215 ****************** <2> expansion: escapes = 0 1216 00000661 F5E08E <2> variant AGRP(16,5), 57, ASM_MACH1 1216 ****************** <2> expansion: ainfo = 57486 1216 ****************** <2> expansion: escaped = 224 1216 ****************** <2> expansion: escapes = 0 1217 00000664 FF <2> endvariant 1218 <2> mne SBB ; ofs=6C3h 1218 <3> %push 1218 <3> usesection ASMTABLE2, 1 1218 <3> %assign %$currofs $ - asmtab 1218 ****************** <3> expansion: currofs = 1637 1218 <3> %ifnempty %2 1218 <3> db %2 1218 <3> %endif 1218 <3> __SECT__ 1218 <3> %defstr %$string %1 1218 ****************** <3> expansion: string = 'SBB' 1218 <3> %strlen %$string_size %$string 1218 ****************** <3> expansion: string_size = 3 1218 <3> %if %$string_size > 15 1218 <3> %error Mnemonic %1 is too long! 1218 <3> %endif 1218 00000951 5366 <3> dw (%$currofs)<<4|%$string_size 1218 <3> %assign MN_%1 $ - mnlist 1218 ****************** <3> expansion: MN_SBB = 2132 1218 00000953 534242 <3> db %$string 1218 <3> %pop 1219 00000665 FBB9BE <2> variant AGRP(1,3), 3, ASM_LOCKABLE 1219 ****************** <2> expansion: ainfo = 47550 1219 ****************** <2> expansion: escaped = 185 1219 ****************** <2> expansion: escapes = 0 1220 00000668 08DD <2> variant 01ch, 1 1220 ****************** <2> expansion: ainfo = 2269 1220 ****************** <2> expansion: escaped = 8 1220 ****************** <2> expansion: escapes = 0 1221 0000066A FBBC45 <2> variant AGRP(2,3), 2, ASM_LOCKABLE 1221 ****************** <2> expansion: ainfo = 48197 1221 ****************** <2> expansion: escaped = 188 1221 ****************** <2> expansion: escapes = 0 1222 0000066D FB079C <2> variant 018h, 4, ASM_LOCKABLE 1222 ****************** <2> expansion: ainfo = 1948 1222 ****************** <2> expansion: escaped = 7 1222 ****************** <2> expansion: escapes = 0 1223 00000670 083F <2> variant 01ah, 5 1223 ****************** <2> expansion: ainfo = 2111 1223 ****************** <2> expansion: escaped = 8 1223 ****************** <2> expansion: escapes = 0 1224 00000672 FF <2> endvariant 1225 <2> mne SCASB ; ofs=6D1h 1225 <3> %push 1225 <3> usesection ASMTABLE2, 1 1225 <3> %assign %$currofs $ - asmtab 1225 ****************** <3> expansion: currofs = 1651 1225 <3> %ifnempty %2 1225 <3> db %2 1225 <3> %endif 1225 <3> __SECT__ 1225 <3> %defstr %$string %1 1225 ****************** <3> expansion: string = 'SCASB' 1225 <3> %strlen %$string_size %$string 1225 ****************** <3> expansion: string_size = 5 1225 <3> %if %$string_size > 15 1225 <3> %error Mnemonic %1 is too long! 1225 <3> %endif 1225 00000956 3567 <3> dw (%$currofs)<<4|%$string_size 1225 <3> %assign MN_%1 $ - mnlist 1225 ****************** <3> expansion: MN_SCASB = 2137 1225 00000958 5343415342 <3> db %$string 1225 <3> %pop 1226 00000673 370E <2> variant 0aeh, 0 1226 ****************** <2> expansion: ainfo = 14094 1226 ****************** <2> expansion: escaped = 55 1226 ****************** <2> expansion: escapes = 0 1227 00000675 FF <2> endvariant 1228 <2> mne SETA ; ofs=6D7h 1228 <3> %push 1228 <3> usesection ASMTABLE2, 1 1228 <3> %assign %$currofs $ - asmtab 1228 ****************** <3> expansion: currofs = 1654 1228 <3> %ifnempty %2 1228 <3> db %2 1228 <3> %endif 1228 <3> __SECT__ 1228 <3> %defstr %$string %1 1228 ****************** <3> expansion: string = 'SETA' 1228 <3> %strlen %$string_size %$string 1228 ****************** <3> expansion: string_size = 4 1228 <3> %if %$string_size > 15 1228 <3> %error Mnemonic %1 is too long! 1228 <3> %endif 1228 0000095D 6467 <3> dw (%$currofs)<<4|%$string_size 1228 <3> %assign MN_%1 $ - mnlist 1228 ****************** <3> expansion: MN_SETA = 2144 1228 0000095F 53455441 <3> db %$string 1228 <3> %pop 1229 00000676 F78102 <2> variant 197h, 59, ASM_MACH3 1229 ****************** <2> expansion: ainfo = 33026 1229 ****************** <2> expansion: escaped = 129 1229 ****************** <2> expansion: escapes = 0 1230 00000679 FF <2> endvariant 1231 <2> mne SETAE ; ofs=6DBh 1231 <3> %push 1231 <3> usesection ASMTABLE2, 1 1231 <3> %assign %$currofs $ - asmtab 1231 ****************** <3> expansion: currofs = 1658 1231 <3> %ifnempty %2 1231 <3> db %2 1231 <3> %endif 1231 <3> __SECT__ 1231 <3> %defstr %$string %1 1231 ****************** <3> expansion: string = 'SETAE' 1231 <3> %strlen %$string_size %$string 1231 ****************** <3> expansion: string_size = 5 1231 <3> %if %$string_size > 15 1231 <3> %error Mnemonic %1 is too long! 1231 <3> %endif 1231 00000963 A567 <3> dw (%$currofs)<<4|%$string_size 1231 <3> %assign MN_%1 $ - mnlist 1231 ****************** <3> expansion: MN_SETAE = 2150 1231 00000965 5345544145 <3> db %$string 1231 <3> %pop 1232 0000067A F77FBE <2> variant 193h, 59, ASM_MACH3 1232 ****************** <2> expansion: ainfo = 32702 1232 ****************** <2> expansion: escaped = 127 1232 ****************** <2> expansion: escapes = 0 1233 0000067D FF <2> endvariant 1234 <2> mne SETB ; ofs=6DFh 1234 <3> %push 1234 <3> usesection ASMTABLE2, 1 1234 <3> %assign %$currofs $ - asmtab 1234 ****************** <3> expansion: currofs = 1662 1234 <3> %ifnempty %2 1234 <3> db %2 1234 <3> %endif 1234 <3> __SECT__ 1234 <3> %defstr %$string %1 1234 ****************** <3> expansion: string = 'SETB' 1234 <3> %strlen %$string_size %$string 1234 ****************** <3> expansion: string_size = 4 1234 <3> %if %$string_size > 15 1234 <3> %error Mnemonic %1 is too long! 1234 <3> %endif 1234 0000096A E467 <3> dw (%$currofs)<<4|%$string_size 1234 <3> %assign MN_%1 $ - mnlist 1234 ****************** <3> expansion: MN_SETB = 2157 1234 0000096C 53455442 <3> db %$string 1234 <3> %pop 1235 0000067E F77F6D <2> variant 192h, 59, ASM_MACH3 1235 ****************** <2> expansion: ainfo = 32621 1235 ****************** <2> expansion: escaped = 127 1235 ****************** <2> expansion: escapes = 0 1236 00000681 FF <2> endvariant 1237 <2> mne SETBE ; ofs=6E3h 1237 <3> %push 1237 <3> usesection ASMTABLE2, 1 1237 <3> %assign %$currofs $ - asmtab 1237 ****************** <3> expansion: currofs = 1666 1237 <3> %ifnempty %2 1237 <3> db %2 1237 <3> %endif 1237 <3> __SECT__ 1237 <3> %defstr %$string %1 1237 ****************** <3> expansion: string = 'SETBE' 1237 <3> %strlen %$string_size %$string 1237 ****************** <3> expansion: string_size = 5 1237 <3> %if %$string_size > 15 1237 <3> %error Mnemonic %1 is too long! 1237 <3> %endif 1237 00000970 2568 <3> dw (%$currofs)<<4|%$string_size 1237 <3> %assign MN_%1 $ - mnlist 1237 ****************** <3> expansion: MN_SETBE = 2163 1237 00000972 5345544245 <3> db %$string 1237 <3> %pop 1238 00000682 F780B1 <2> variant 196h, 59, ASM_MACH3 1238 ****************** <2> expansion: ainfo = 32945 1238 ****************** <2> expansion: escaped = 128 1238 ****************** <2> expansion: escapes = 0 1239 00000685 FF <2> endvariant 1240 <2> mne SETC ; ofs=6E7h 1240 <3> %push 1240 <3> usesection ASMTABLE2, 1 1240 <3> %assign %$currofs $ - asmtab 1240 ****************** <3> expansion: currofs = 1670 1240 <3> %ifnempty %2 1240 <3> db %2 1240 <3> %endif 1240 <3> __SECT__ 1240 <3> %defstr %$string %1 1240 ****************** <3> expansion: string = 'SETC' 1240 <3> %strlen %$string_size %$string 1240 ****************** <3> expansion: string_size = 4 1240 <3> %if %$string_size > 15 1240 <3> %error Mnemonic %1 is too long! 1240 <3> %endif 1240 00000977 6468 <3> dw (%$currofs)<<4|%$string_size 1240 <3> %assign MN_%1 $ - mnlist 1240 ****************** <3> expansion: MN_SETC = 2170 1240 00000979 53455443 <3> db %$string 1240 <3> %pop 1241 00000686 F77F6D <2> variant 192h, 59, ASM_MACH3 1241 ****************** <2> expansion: ainfo = 32621 1241 ****************** <2> expansion: escaped = 127 1241 ****************** <2> expansion: escapes = 0 1242 00000689 FF <2> endvariant 1243 <2> mne SETE ; ofs=6EBh 1243 <3> %push 1243 <3> usesection ASMTABLE2, 1 1243 <3> %assign %$currofs $ - asmtab 1243 ****************** <3> expansion: currofs = 1674 1243 <3> %ifnempty %2 1243 <3> db %2 1243 <3> %endif 1243 <3> __SECT__ 1243 <3> %defstr %$string %1 1243 ****************** <3> expansion: string = 'SETE' 1243 <3> %strlen %$string_size %$string 1243 ****************** <3> expansion: string_size = 4 1243 <3> %if %$string_size > 15 1243 <3> %error Mnemonic %1 is too long! 1243 <3> %endif 1243 0000097D A468 <3> dw (%$currofs)<<4|%$string_size 1243 <3> %assign MN_%1 $ - mnlist 1243 ****************** <3> expansion: MN_SETE = 2176 1243 0000097F 53455445 <3> db %$string 1243 <3> %pop 1244 0000068A F7800F <2> variant 194h, 59, ASM_MACH3 1244 ****************** <2> expansion: ainfo = 32783 1244 ****************** <2> expansion: escaped = 128 1244 ****************** <2> expansion: escapes = 0 1245 0000068D FF <2> endvariant 1246 <2> mne SETG ; ofs=6EFh 1246 <3> %push 1246 <3> usesection ASMTABLE2, 1 1246 <3> %assign %$currofs $ - asmtab 1246 ****************** <3> expansion: currofs = 1678 1246 <3> %ifnempty %2 1246 <3> db %2 1246 <3> %endif 1246 <3> __SECT__ 1246 <3> %defstr %$string %1 1246 ****************** <3> expansion: string = 'SETG' 1246 <3> %strlen %$string_size %$string 1246 ****************** <3> expansion: string_size = 4 1246 <3> %if %$string_size > 15 1246 <3> %error Mnemonic %1 is too long! 1246 <3> %endif 1246 00000983 E468 <3> dw (%$currofs)<<4|%$string_size 1246 <3> %assign MN_%1 $ - mnlist 1246 ****************** <3> expansion: MN_SETG = 2182 1246 00000985 53455447 <3> db %$string 1246 <3> %pop 1247 0000068E F7838A <2> variant 19fh, 59, ASM_MACH3 1247 ****************** <2> expansion: ainfo = 33674 1247 ****************** <2> expansion: escaped = 131 1247 ****************** <2> expansion: escapes = 0 1248 00000691 FF <2> endvariant 1249 <2> mne SETGE ; ofs=6F3h 1249 <3> %push 1249 <3> usesection ASMTABLE2, 1 1249 <3> %assign %$currofs $ - asmtab 1249 ****************** <3> expansion: currofs = 1682 1249 <3> %ifnempty %2 1249 <3> db %2 1249 <3> %endif 1249 <3> __SECT__ 1249 <3> %defstr %$string %1 1249 ****************** <3> expansion: string = 'SETGE' 1249 <3> %strlen %$string_size %$string 1249 ****************** <3> expansion: string_size = 5 1249 <3> %if %$string_size > 15 1249 <3> %error Mnemonic %1 is too long! 1249 <3> %endif 1249 00000989 2569 <3> dw (%$currofs)<<4|%$string_size 1249 <3> %assign MN_%1 $ - mnlist 1249 ****************** <3> expansion: MN_SETGE = 2188 1249 0000098B 5345544745 <3> db %$string 1249 <3> %pop 1250 00000692 F782E8 <2> variant 19dh, 59, ASM_MACH3 1250 ****************** <2> expansion: ainfo = 33512 1250 ****************** <2> expansion: escaped = 130 1250 ****************** <2> expansion: escapes = 0 1251 00000695 FF <2> endvariant 1252 <2> mne SETL ; ofs=6F7h 1252 <3> %push 1252 <3> usesection ASMTABLE2, 1 1252 <3> %assign %$currofs $ - asmtab 1252 ****************** <3> expansion: currofs = 1686 1252 <3> %ifnempty %2 1252 <3> db %2 1252 <3> %endif 1252 <3> __SECT__ 1252 <3> %defstr %$string %1 1252 ****************** <3> expansion: string = 'SETL' 1252 <3> %strlen %$string_size %$string 1252 ****************** <3> expansion: string_size = 4 1252 <3> %if %$string_size > 15 1252 <3> %error Mnemonic %1 is too long! 1252 <3> %endif 1252 00000990 6469 <3> dw (%$currofs)<<4|%$string_size 1252 <3> %assign MN_%1 $ - mnlist 1252 ****************** <3> expansion: MN_SETL = 2195 1252 00000992 5345544C <3> db %$string 1252 <3> %pop 1253 00000696 F78297 <2> variant 19ch, 59, ASM_MACH3 1253 ****************** <2> expansion: ainfo = 33431 1253 ****************** <2> expansion: escaped = 130 1253 ****************** <2> expansion: escapes = 0 1254 00000699 FF <2> endvariant 1255 <2> mne SETLE ; ofs=6FBh 1255 <3> %push 1255 <3> usesection ASMTABLE2, 1 1255 <3> %assign %$currofs $ - asmtab 1255 ****************** <3> expansion: currofs = 1690 1255 <3> %ifnempty %2 1255 <3> db %2 1255 <3> %endif 1255 <3> __SECT__ 1255 <3> %defstr %$string %1 1255 ****************** <3> expansion: string = 'SETLE' 1255 <3> %strlen %$string_size %$string 1255 ****************** <3> expansion: string_size = 5 1255 <3> %if %$string_size > 15 1255 <3> %error Mnemonic %1 is too long! 1255 <3> %endif 1255 00000996 A569 <3> dw (%$currofs)<<4|%$string_size 1255 <3> %assign MN_%1 $ - mnlist 1255 ****************** <3> expansion: MN_SETLE = 2201 1255 00000998 5345544C45 <3> db %$string 1255 <3> %pop 1256 0000069A F78339 <2> variant 19eh, 59, ASM_MACH3 1256 ****************** <2> expansion: ainfo = 33593 1256 ****************** <2> expansion: escaped = 131 1256 ****************** <2> expansion: escapes = 0 1257 0000069D FF <2> endvariant 1258 <2> mne SETNA ; ofs=6FFh 1258 <3> %push 1258 <3> usesection ASMTABLE2, 1 1258 <3> %assign %$currofs $ - asmtab 1258 ****************** <3> expansion: currofs = 1694 1258 <3> %ifnempty %2 1258 <3> db %2 1258 <3> %endif 1258 <3> __SECT__ 1258 <3> %defstr %$string %1 1258 ****************** <3> expansion: string = 'SETNA' 1258 <3> %strlen %$string_size %$string 1258 ****************** <3> expansion: string_size = 5 1258 <3> %if %$string_size > 15 1258 <3> %error Mnemonic %1 is too long! 1258 <3> %endif 1258 0000099D E569 <3> dw (%$currofs)<<4|%$string_size 1258 <3> %assign MN_%1 $ - mnlist 1258 ****************** <3> expansion: MN_SETNA = 2208 1258 0000099F 5345544E41 <3> db %$string 1258 <3> %pop 1259 0000069E F780B1 <2> variant 196h, 59, ASM_MACH3 1259 ****************** <2> expansion: ainfo = 32945 1259 ****************** <2> expansion: escaped = 128 1259 ****************** <2> expansion: escapes = 0 1260 000006A1 FF <2> endvariant 1261 <2> mne SETNAE ; ofs=703h 1261 <3> %push 1261 <3> usesection ASMTABLE2, 1 1261 <3> %assign %$currofs $ - asmtab 1261 ****************** <3> expansion: currofs = 1698 1261 <3> %ifnempty %2 1261 <3> db %2 1261 <3> %endif 1261 <3> __SECT__ 1261 <3> %defstr %$string %1 1261 ****************** <3> expansion: string = 'SETNAE' 1261 <3> %strlen %$string_size %$string 1261 ****************** <3> expansion: string_size = 6 1261 <3> %if %$string_size > 15 1261 <3> %error Mnemonic %1 is too long! 1261 <3> %endif 1261 000009A4 266A <3> dw (%$currofs)<<4|%$string_size 1261 <3> %assign MN_%1 $ - mnlist 1261 ****************** <3> expansion: MN_SETNAE = 2215 1261 000009A6 5345544E4145 <3> db %$string 1261 <3> %pop 1262 000006A2 F77F6D <2> variant 192h, 59, ASM_MACH3 1262 ****************** <2> expansion: ainfo = 32621 1262 ****************** <2> expansion: escaped = 127 1262 ****************** <2> expansion: escapes = 0 1263 000006A5 FF <2> endvariant 1264 <2> mne SETNB ; ofs=707h 1264 <3> %push 1264 <3> usesection ASMTABLE2, 1 1264 <3> %assign %$currofs $ - asmtab 1264 ****************** <3> expansion: currofs = 1702 1264 <3> %ifnempty %2 1264 <3> db %2 1264 <3> %endif 1264 <3> __SECT__ 1264 <3> %defstr %$string %1 1264 ****************** <3> expansion: string = 'SETNB' 1264 <3> %strlen %$string_size %$string 1264 ****************** <3> expansion: string_size = 5 1264 <3> %if %$string_size > 15 1264 <3> %error Mnemonic %1 is too long! 1264 <3> %endif 1264 000009AC 656A <3> dw (%$currofs)<<4|%$string_size 1264 <3> %assign MN_%1 $ - mnlist 1264 ****************** <3> expansion: MN_SETNB = 2223 1264 000009AE 5345544E42 <3> db %$string 1264 <3> %pop 1265 000006A6 F77FBE <2> variant 193h, 59, ASM_MACH3 1265 ****************** <2> expansion: ainfo = 32702 1265 ****************** <2> expansion: escaped = 127 1265 ****************** <2> expansion: escapes = 0 1266 000006A9 FF <2> endvariant 1267 <2> mne SETNBE ; ofs=70Bh 1267 <3> %push 1267 <3> usesection ASMTABLE2, 1 1267 <3> %assign %$currofs $ - asmtab 1267 ****************** <3> expansion: currofs = 1706 1267 <3> %ifnempty %2 1267 <3> db %2 1267 <3> %endif 1267 <3> __SECT__ 1267 <3> %defstr %$string %1 1267 ****************** <3> expansion: string = 'SETNBE' 1267 <3> %strlen %$string_size %$string 1267 ****************** <3> expansion: string_size = 6 1267 <3> %if %$string_size > 15 1267 <3> %error Mnemonic %1 is too long! 1267 <3> %endif 1267 000009B3 A66A <3> dw (%$currofs)<<4|%$string_size 1267 <3> %assign MN_%1 $ - mnlist 1267 ****************** <3> expansion: MN_SETNBE = 2230 1267 000009B5 5345544E4245 <3> db %$string 1267 <3> %pop 1268 000006AA F78102 <2> variant 197h, 59, ASM_MACH3 1268 ****************** <2> expansion: ainfo = 33026 1268 ****************** <2> expansion: escaped = 129 1268 ****************** <2> expansion: escapes = 0 1269 000006AD FF <2> endvariant 1270 <2> mne SETNC ; ofs=70Fh 1270 <3> %push 1270 <3> usesection ASMTABLE2, 1 1270 <3> %assign %$currofs $ - asmtab 1270 ****************** <3> expansion: currofs = 1710 1270 <3> %ifnempty %2 1270 <3> db %2 1270 <3> %endif 1270 <3> __SECT__ 1270 <3> %defstr %$string %1 1270 ****************** <3> expansion: string = 'SETNC' 1270 <3> %strlen %$string_size %$string 1270 ****************** <3> expansion: string_size = 5 1270 <3> %if %$string_size > 15 1270 <3> %error Mnemonic %1 is too long! 1270 <3> %endif 1270 000009BB E56A <3> dw (%$currofs)<<4|%$string_size 1270 <3> %assign MN_%1 $ - mnlist 1270 ****************** <3> expansion: MN_SETNC = 2238 1270 000009BD 5345544E43 <3> db %$string 1270 <3> %pop 1271 000006AE F77FBE <2> variant 193h, 59, ASM_MACH3 1271 ****************** <2> expansion: ainfo = 32702 1271 ****************** <2> expansion: escaped = 127 1271 ****************** <2> expansion: escapes = 0 1272 000006B1 FF <2> endvariant 1273 <2> mne SETNE ; ofs=713h 1273 <3> %push 1273 <3> usesection ASMTABLE2, 1 1273 <3> %assign %$currofs $ - asmtab 1273 ****************** <3> expansion: currofs = 1714 1273 <3> %ifnempty %2 1273 <3> db %2 1273 <3> %endif 1273 <3> __SECT__ 1273 <3> %defstr %$string %1 1273 ****************** <3> expansion: string = 'SETNE' 1273 <3> %strlen %$string_size %$string 1273 ****************** <3> expansion: string_size = 5 1273 <3> %if %$string_size > 15 1273 <3> %error Mnemonic %1 is too long! 1273 <3> %endif 1273 000009C2 256B <3> dw (%$currofs)<<4|%$string_size 1273 <3> %assign MN_%1 $ - mnlist 1273 ****************** <3> expansion: MN_SETNE = 2245 1273 000009C4 5345544E45 <3> db %$string 1273 <3> %pop 1274 000006B2 F78060 <2> variant 195h, 59, ASM_MACH3 1274 ****************** <2> expansion: ainfo = 32864 1274 ****************** <2> expansion: escaped = 128 1274 ****************** <2> expansion: escapes = 0 1275 000006B5 FF <2> endvariant 1276 <2> mne SETNG ; ofs=717h 1276 <3> %push 1276 <3> usesection ASMTABLE2, 1 1276 <3> %assign %$currofs $ - asmtab 1276 ****************** <3> expansion: currofs = 1718 1276 <3> %ifnempty %2 1276 <3> db %2 1276 <3> %endif 1276 <3> __SECT__ 1276 <3> %defstr %$string %1 1276 ****************** <3> expansion: string = 'SETNG' 1276 <3> %strlen %$string_size %$string 1276 ****************** <3> expansion: string_size = 5 1276 <3> %if %$string_size > 15 1276 <3> %error Mnemonic %1 is too long! 1276 <3> %endif 1276 000009C9 656B <3> dw (%$currofs)<<4|%$string_size 1276 <3> %assign MN_%1 $ - mnlist 1276 ****************** <3> expansion: MN_SETNG = 2252 1276 000009CB 5345544E47 <3> db %$string 1276 <3> %pop 1277 000006B6 F78339 <2> variant 19eh, 59, ASM_MACH3 1277 ****************** <2> expansion: ainfo = 33593 1277 ****************** <2> expansion: escaped = 131 1277 ****************** <2> expansion: escapes = 0 1278 000006B9 FF <2> endvariant 1279 <2> mne SETNGE ; ofs=71Bh 1279 <3> %push 1279 <3> usesection ASMTABLE2, 1 1279 <3> %assign %$currofs $ - asmtab 1279 ****************** <3> expansion: currofs = 1722 1279 <3> %ifnempty %2 1279 <3> db %2 1279 <3> %endif 1279 <3> __SECT__ 1279 <3> %defstr %$string %1 1279 ****************** <3> expansion: string = 'SETNGE' 1279 <3> %strlen %$string_size %$string 1279 ****************** <3> expansion: string_size = 6 1279 <3> %if %$string_size > 15 1279 <3> %error Mnemonic %1 is too long! 1279 <3> %endif 1279 000009D0 A66B <3> dw (%$currofs)<<4|%$string_size 1279 <3> %assign MN_%1 $ - mnlist 1279 ****************** <3> expansion: MN_SETNGE = 2259 1279 000009D2 5345544E4745 <3> db %$string 1279 <3> %pop 1280 000006BA F78297 <2> variant 19ch, 59, ASM_MACH3 1280 ****************** <2> expansion: ainfo = 33431 1280 ****************** <2> expansion: escaped = 130 1280 ****************** <2> expansion: escapes = 0 1281 000006BD FF <2> endvariant 1282 <2> mne SETNL ; ofs=71Fh 1282 <3> %push 1282 <3> usesection ASMTABLE2, 1 1282 <3> %assign %$currofs $ - asmtab 1282 ****************** <3> expansion: currofs = 1726 1282 <3> %ifnempty %2 1282 <3> db %2 1282 <3> %endif 1282 <3> __SECT__ 1282 <3> %defstr %$string %1 1282 ****************** <3> expansion: string = 'SETNL' 1282 <3> %strlen %$string_size %$string 1282 ****************** <3> expansion: string_size = 5 1282 <3> %if %$string_size > 15 1282 <3> %error Mnemonic %1 is too long! 1282 <3> %endif 1282 000009D8 E56B <3> dw (%$currofs)<<4|%$string_size 1282 <3> %assign MN_%1 $ - mnlist 1282 ****************** <3> expansion: MN_SETNL = 2267 1282 000009DA 5345544E4C <3> db %$string 1282 <3> %pop 1283 000006BE F782E8 <2> variant 19dh, 59, ASM_MACH3 1283 ****************** <2> expansion: ainfo = 33512 1283 ****************** <2> expansion: escaped = 130 1283 ****************** <2> expansion: escapes = 0 1284 000006C1 FF <2> endvariant 1285 <2> mne SETNLE ; ofs=723h 1285 <3> %push 1285 <3> usesection ASMTABLE2, 1 1285 <3> %assign %$currofs $ - asmtab 1285 ****************** <3> expansion: currofs = 1730 1285 <3> %ifnempty %2 1285 <3> db %2 1285 <3> %endif 1285 <3> __SECT__ 1285 <3> %defstr %$string %1 1285 ****************** <3> expansion: string = 'SETNLE' 1285 <3> %strlen %$string_size %$string 1285 ****************** <3> expansion: string_size = 6 1285 <3> %if %$string_size > 15 1285 <3> %error Mnemonic %1 is too long! 1285 <3> %endif 1285 000009DF 266C <3> dw (%$currofs)<<4|%$string_size 1285 <3> %assign MN_%1 $ - mnlist 1285 ****************** <3> expansion: MN_SETNLE = 2274 1285 000009E1 5345544E4C45 <3> db %$string 1285 <3> %pop 1286 000006C2 F7838A <2> variant 19fh, 59, ASM_MACH3 1286 ****************** <2> expansion: ainfo = 33674 1286 ****************** <2> expansion: escaped = 131 1286 ****************** <2> expansion: escapes = 0 1287 000006C5 FF <2> endvariant 1288 <2> mne SETNO ; ofs=727h 1288 <3> %push 1288 <3> usesection ASMTABLE2, 1 1288 <3> %assign %$currofs $ - asmtab 1288 ****************** <3> expansion: currofs = 1734 1288 <3> %ifnempty %2 1288 <3> db %2 1288 <3> %endif 1288 <3> __SECT__ 1288 <3> %defstr %$string %1 1288 ****************** <3> expansion: string = 'SETNO' 1288 <3> %strlen %$string_size %$string 1288 ****************** <3> expansion: string_size = 5 1288 <3> %if %$string_size > 15 1288 <3> %error Mnemonic %1 is too long! 1288 <3> %endif 1288 000009E7 656C <3> dw (%$currofs)<<4|%$string_size 1288 <3> %assign MN_%1 $ - mnlist 1288 ****************** <3> expansion: MN_SETNO = 2282 1288 000009E9 5345544E4F <3> db %$string 1288 <3> %pop 1289 000006C6 F77F1C <2> variant 191h, 59, ASM_MACH3 1289 ****************** <2> expansion: ainfo = 32540 1289 ****************** <2> expansion: escaped = 127 1289 ****************** <2> expansion: escapes = 0 1290 000006C9 FF <2> endvariant 1291 <2> mne SETNP ; ofs=72Bh 1291 <3> %push 1291 <3> usesection ASMTABLE2, 1 1291 <3> %assign %$currofs $ - asmtab 1291 ****************** <3> expansion: currofs = 1738 1291 <3> %ifnempty %2 1291 <3> db %2 1291 <3> %endif 1291 <3> __SECT__ 1291 <3> %defstr %$string %1 1291 ****************** <3> expansion: string = 'SETNP' 1291 <3> %strlen %$string_size %$string 1291 ****************** <3> expansion: string_size = 5 1291 <3> %if %$string_size > 15 1291 <3> %error Mnemonic %1 is too long! 1291 <3> %endif 1291 000009EE A56C <3> dw (%$currofs)<<4|%$string_size 1291 <3> %assign MN_%1 $ - mnlist 1291 ****************** <3> expansion: MN_SETNP = 2289 1291 000009F0 5345544E50 <3> db %$string 1291 <3> %pop 1292 000006CA F78246 <2> variant 19bh, 59, ASM_MACH3 1292 ****************** <2> expansion: ainfo = 33350 1292 ****************** <2> expansion: escaped = 130 1292 ****************** <2> expansion: escapes = 0 1293 000006CD FF <2> endvariant 1294 <2> mne SETNS ; ofs=72Fh 1294 <3> %push 1294 <3> usesection ASMTABLE2, 1 1294 <3> %assign %$currofs $ - asmtab 1294 ****************** <3> expansion: currofs = 1742 1294 <3> %ifnempty %2 1294 <3> db %2 1294 <3> %endif 1294 <3> __SECT__ 1294 <3> %defstr %$string %1 1294 ****************** <3> expansion: string = 'SETNS' 1294 <3> %strlen %$string_size %$string 1294 ****************** <3> expansion: string_size = 5 1294 <3> %if %$string_size > 15 1294 <3> %error Mnemonic %1 is too long! 1294 <3> %endif 1294 000009F5 E56C <3> dw (%$currofs)<<4|%$string_size 1294 <3> %assign MN_%1 $ - mnlist 1294 ****************** <3> expansion: MN_SETNS = 2296 1294 000009F7 5345544E53 <3> db %$string 1294 <3> %pop 1295 000006CE F781A4 <2> variant 199h, 59, ASM_MACH3 1295 ****************** <2> expansion: ainfo = 33188 1295 ****************** <2> expansion: escaped = 129 1295 ****************** <2> expansion: escapes = 0 1296 000006D1 FF <2> endvariant 1297 <2> mne SETNZ ; ofs=733h 1297 <3> %push 1297 <3> usesection ASMTABLE2, 1 1297 <3> %assign %$currofs $ - asmtab 1297 ****************** <3> expansion: currofs = 1746 1297 <3> %ifnempty %2 1297 <3> db %2 1297 <3> %endif 1297 <3> __SECT__ 1297 <3> %defstr %$string %1 1297 ****************** <3> expansion: string = 'SETNZ' 1297 <3> %strlen %$string_size %$string 1297 ****************** <3> expansion: string_size = 5 1297 <3> %if %$string_size > 15 1297 <3> %error Mnemonic %1 is too long! 1297 <3> %endif 1297 000009FC 256D <3> dw (%$currofs)<<4|%$string_size 1297 <3> %assign MN_%1 $ - mnlist 1297 ****************** <3> expansion: MN_SETNZ = 2303 1297 000009FE 5345544E5A <3> db %$string 1297 <3> %pop 1298 000006D2 F78060 <2> variant 195h, 59, ASM_MACH3 1298 ****************** <2> expansion: ainfo = 32864 1298 ****************** <2> expansion: escaped = 128 1298 ****************** <2> expansion: escapes = 0 1299 000006D5 FF <2> endvariant 1300 <2> mne SETO ; ofs=737h 1300 <3> %push 1300 <3> usesection ASMTABLE2, 1 1300 <3> %assign %$currofs $ - asmtab 1300 ****************** <3> expansion: currofs = 1750 1300 <3> %ifnempty %2 1300 <3> db %2 1300 <3> %endif 1300 <3> __SECT__ 1300 <3> %defstr %$string %1 1300 ****************** <3> expansion: string = 'SETO' 1300 <3> %strlen %$string_size %$string 1300 ****************** <3> expansion: string_size = 4 1300 <3> %if %$string_size > 15 1300 <3> %error Mnemonic %1 is too long! 1300 <3> %endif 1300 00000A03 646D <3> dw (%$currofs)<<4|%$string_size 1300 <3> %assign MN_%1 $ - mnlist 1300 ****************** <3> expansion: MN_SETO = 2310 1300 00000A05 5345544F <3> db %$string 1300 <3> %pop 1301 000006D6 F77ECB <2> variant 190h, 59, ASM_MACH3 1301 ****************** <2> expansion: ainfo = 32459 1301 ****************** <2> expansion: escaped = 126 1301 ****************** <2> expansion: escapes = 0 1302 000006D9 FF <2> endvariant 1303 <2> mne SETP ; ofs=73Bh 1303 <3> %push 1303 <3> usesection ASMTABLE2, 1 1303 <3> %assign %$currofs $ - asmtab 1303 ****************** <3> expansion: currofs = 1754 1303 <3> %ifnempty %2 1303 <3> db %2 1303 <3> %endif 1303 <3> __SECT__ 1303 <3> %defstr %$string %1 1303 ****************** <3> expansion: string = 'SETP' 1303 <3> %strlen %$string_size %$string 1303 ****************** <3> expansion: string_size = 4 1303 <3> %if %$string_size > 15 1303 <3> %error Mnemonic %1 is too long! 1303 <3> %endif 1303 00000A09 A46D <3> dw (%$currofs)<<4|%$string_size 1303 <3> %assign MN_%1 $ - mnlist 1303 ****************** <3> expansion: MN_SETP = 2316 1303 00000A0B 53455450 <3> db %$string 1303 <3> %pop 1304 000006DA F781F5 <2> variant 19ah, 59, ASM_MACH3 1304 ****************** <2> expansion: ainfo = 33269 1304 ****************** <2> expansion: escaped = 129 1304 ****************** <2> expansion: escapes = 0 1305 000006DD FF <2> endvariant 1306 <2> mne SETPE ; ofs=73Fh 1306 <3> %push 1306 <3> usesection ASMTABLE2, 1 1306 <3> %assign %$currofs $ - asmtab 1306 ****************** <3> expansion: currofs = 1758 1306 <3> %ifnempty %2 1306 <3> db %2 1306 <3> %endif 1306 <3> __SECT__ 1306 <3> %defstr %$string %1 1306 ****************** <3> expansion: string = 'SETPE' 1306 <3> %strlen %$string_size %$string 1306 ****************** <3> expansion: string_size = 5 1306 <3> %if %$string_size > 15 1306 <3> %error Mnemonic %1 is too long! 1306 <3> %endif 1306 00000A0F E56D <3> dw (%$currofs)<<4|%$string_size 1306 <3> %assign MN_%1 $ - mnlist 1306 ****************** <3> expansion: MN_SETPE = 2322 1306 00000A11 5345545045 <3> db %$string 1306 <3> %pop 1307 000006DE F781F5 <2> variant 19ah, 59, ASM_MACH3 1307 ****************** <2> expansion: ainfo = 33269 1307 ****************** <2> expansion: escaped = 129 1307 ****************** <2> expansion: escapes = 0 1308 000006E1 FF <2> endvariant 1309 <2> mne SETPO ; ofs=743h 1309 <3> %push 1309 <3> usesection ASMTABLE2, 1 1309 <3> %assign %$currofs $ - asmtab 1309 ****************** <3> expansion: currofs = 1762 1309 <3> %ifnempty %2 1309 <3> db %2 1309 <3> %endif 1309 <3> __SECT__ 1309 <3> %defstr %$string %1 1309 ****************** <3> expansion: string = 'SETPO' 1309 <3> %strlen %$string_size %$string 1309 ****************** <3> expansion: string_size = 5 1309 <3> %if %$string_size > 15 1309 <3> %error Mnemonic %1 is too long! 1309 <3> %endif 1309 00000A16 256E <3> dw (%$currofs)<<4|%$string_size 1309 <3> %assign MN_%1 $ - mnlist 1309 ****************** <3> expansion: MN_SETPO = 2329 1309 00000A18 534554504F <3> db %$string 1309 <3> %pop 1310 000006E2 F78246 <2> variant 19bh, 59, ASM_MACH3 1310 ****************** <2> expansion: ainfo = 33350 1310 ****************** <2> expansion: escaped = 130 1310 ****************** <2> expansion: escapes = 0 1311 000006E5 FF <2> endvariant 1312 <2> mne SETS ; ofs=747h 1312 <3> %push 1312 <3> usesection ASMTABLE2, 1 1312 <3> %assign %$currofs $ - asmtab 1312 ****************** <3> expansion: currofs = 1766 1312 <3> %ifnempty %2 1312 <3> db %2 1312 <3> %endif 1312 <3> __SECT__ 1312 <3> %defstr %$string %1 1312 ****************** <3> expansion: string = 'SETS' 1312 <3> %strlen %$string_size %$string 1312 ****************** <3> expansion: string_size = 4 1312 <3> %if %$string_size > 15 1312 <3> %error Mnemonic %1 is too long! 1312 <3> %endif 1312 00000A1D 646E <3> dw (%$currofs)<<4|%$string_size 1312 <3> %assign MN_%1 $ - mnlist 1312 ****************** <3> expansion: MN_SETS = 2336 1312 00000A1F 53455453 <3> db %$string 1312 <3> %pop 1313 000006E6 F78153 <2> variant 198h, 59, ASM_MACH3 1313 ****************** <2> expansion: ainfo = 33107 1313 ****************** <2> expansion: escaped = 129 1313 ****************** <2> expansion: escapes = 0 1314 000006E9 FF <2> endvariant 1315 <2> mne SETZ ; ofs=74Bh 1315 <3> %push 1315 <3> usesection ASMTABLE2, 1 1315 <3> %assign %$currofs $ - asmtab 1315 ****************** <3> expansion: currofs = 1770 1315 <3> %ifnempty %2 1315 <3> db %2 1315 <3> %endif 1315 <3> __SECT__ 1315 <3> %defstr %$string %1 1315 ****************** <3> expansion: string = 'SETZ' 1315 <3> %strlen %$string_size %$string 1315 ****************** <3> expansion: string_size = 4 1315 <3> %if %$string_size > 15 1315 <3> %error Mnemonic %1 is too long! 1315 <3> %endif 1315 00000A23 A46E <3> dw (%$currofs)<<4|%$string_size 1315 <3> %assign MN_%1 $ - mnlist 1315 ****************** <3> expansion: MN_SETZ = 2342 1315 00000A25 5345545A <3> db %$string 1315 <3> %pop 1316 000006EA F7800F <2> variant 194h, 59, ASM_MACH3 1316 ****************** <2> expansion: ainfo = 32783 1316 ****************** <2> expansion: escaped = 128 1316 ****************** <2> expansion: escapes = 0 1317 000006ED FF <2> endvariant 1318 <2> mne SGDT ; ofs=74Fh 1318 <3> %push 1318 <3> usesection ASMTABLE2, 1 1318 <3> %assign %$currofs $ - asmtab 1318 ****************** <3> expansion: currofs = 1774 1318 <3> %ifnempty %2 1318 <3> db %2 1318 <3> %endif 1318 <3> __SECT__ 1318 <3> %defstr %$string %1 1318 ****************** <3> expansion: string = 'SGDT' 1318 <3> %strlen %$string_size %$string 1318 ****************** <3> expansion: string_size = 4 1318 <3> %if %$string_size > 15 1318 <3> %error Mnemonic %1 is too long! 1318 <3> %endif 1318 00000A29 E46E <3> dw (%$currofs)<<4|%$string_size 1318 <3> %assign MN_%1 $ - mnlist 1318 ****************** <3> expansion: MN_SGDT = 2348 1318 00000A2B 53474454 <3> db %$string 1318 <3> %pop 1319 000006EE F6C815 <2> variant AGRP(7,0), 29, ASM_MACH2 1319 ****************** <2> expansion: ainfo = 51221 1319 ****************** <2> expansion: escaped = 200 1319 ****************** <2> expansion: escapes = 0 1320 000006F1 FF <2> endvariant 1321 <2> mne SIDT ; ofs=753h 1321 <3> %push 1321 <3> usesection ASMTABLE2, 1 1321 <3> %assign %$currofs $ - asmtab 1321 ****************** <3> expansion: currofs = 1778 1321 <3> %ifnempty %2 1321 <3> db %2 1321 <3> %endif 1321 <3> __SECT__ 1321 <3> %defstr %$string %1 1321 ****************** <3> expansion: string = 'SIDT' 1321 <3> %strlen %$string_size %$string 1321 ****************** <3> expansion: string_size = 4 1321 <3> %if %$string_size > 15 1321 <3> %error Mnemonic %1 is too long! 1321 <3> %endif 1321 00000A2F 246F <3> dw (%$currofs)<<4|%$string_size 1321 <3> %assign MN_%1 $ - mnlist 1321 ****************** <3> expansion: MN_SIDT = 2354 1321 00000A31 53494454 <3> db %$string 1321 <3> %pop 1322 000006F2 F6C866 <2> variant AGRP(7,1), 29, ASM_MACH2 1322 ****************** <2> expansion: ainfo = 51302 1322 ****************** <2> expansion: escaped = 200 1322 ****************** <2> expansion: escapes = 0 1323 000006F5 FF <2> endvariant 1324 <2> mne SHLD ; ofs=757h 1324 <3> %push 1324 <3> usesection ASMTABLE2, 1 1324 <3> %assign %$currofs $ - asmtab 1324 ****************** <3> expansion: currofs = 1782 1324 <3> %ifnempty %2 1324 <3> db %2 1324 <3> %endif 1324 <3> __SECT__ 1324 <3> %defstr %$string %1 1324 ****************** <3> expansion: string = 'SHLD' 1324 <3> %strlen %$string_size %$string 1324 ****************** <3> expansion: string_size = 4 1324 <3> %if %$string_size > 15 1324 <3> %error Mnemonic %1 is too long! 1324 <3> %endif 1324 00000A35 646F <3> dw (%$currofs)<<4|%$string_size 1324 <3> %assign MN_%1 $ - mnlist 1324 ****************** <3> expansion: MN_SHLD = 2360 1324 00000A37 53484C44 <3> db %$string 1324 <3> %pop 1325 000006F6 F78520 <2> variant 1a4h, 60, ASM_MACH3 1325 ****************** <2> expansion: ainfo = 34080 1325 ****************** <2> expansion: escaped = 133 1325 ****************** <2> expansion: escapes = 0 1326 000006F9 F78572 <2> variant 1a5h, 61, ASM_MACH3 1326 ****************** <2> expansion: ainfo = 34162 1326 ****************** <2> expansion: escaped = 133 1326 ****************** <2> expansion: escapes = 0 1327 000006FC FF <2> endvariant 1328 <2> mne SHRD ; ofs=75Eh 1328 <3> %push 1328 <3> usesection ASMTABLE2, 1 1328 <3> %assign %$currofs $ - asmtab 1328 ****************** <3> expansion: currofs = 1789 1328 <3> %ifnempty %2 1328 <3> db %2 1328 <3> %endif 1328 <3> __SECT__ 1328 <3> %defstr %$string %1 1328 ****************** <3> expansion: string = 'SHRD' 1328 <3> %strlen %$string_size %$string 1328 ****************** <3> expansion: string_size = 4 1328 <3> %if %$string_size > 15 1328 <3> %error Mnemonic %1 is too long! 1328 <3> %endif 1328 00000A3B D46F <3> dw (%$currofs)<<4|%$string_size 1328 <3> %assign MN_%1 $ - mnlist 1328 ****************** <3> expansion: MN_SHRD = 2366 1328 00000A3D 53485244 <3> db %$string 1328 <3> %pop 1329 000006FD F787A8 <2> variant 1ach, 60, ASM_MACH3 1329 ****************** <2> expansion: ainfo = 34728 1329 ****************** <2> expansion: escaped = 135 1329 ****************** <2> expansion: escapes = 0 1330 00000700 F787FA <2> variant 1adh, 61, ASM_MACH3 1330 ****************** <2> expansion: ainfo = 34810 1330 ****************** <2> expansion: escaped = 135 1330 ****************** <2> expansion: escapes = 0 1331 00000703 FF <2> endvariant 1332 <2> mne SLDT ; ofs=765h 1332 <3> %push 1332 <3> usesection ASMTABLE2, 1 1332 <3> %assign %$currofs $ - asmtab 1332 ****************** <3> expansion: currofs = 1796 1332 <3> %ifnempty %2 1332 <3> db %2 1332 <3> %endif 1332 <3> __SECT__ 1332 <3> %defstr %$string %1 1332 ****************** <3> expansion: string = 'SLDT' 1332 <3> %strlen %$string_size %$string 1332 ****************** <3> expansion: string_size = 4 1332 <3> %if %$string_size > 15 1332 <3> %error Mnemonic %1 is too long! 1332 <3> %endif 1332 00000A41 4470 <3> dw (%$currofs)<<4|%$string_size 1332 <3> %assign MN_%1 $ - mnlist 1332 ****************** <3> expansion: MN_SLDT = 2372 1332 00000A43 534C4454 <3> db %$string 1332 <3> %pop 1333 00000704 F6CAA8 <2> variant AGRP(8,0), 40, ASM_MACH2 1333 ****************** <2> expansion: ainfo = 51880 1333 ****************** <2> expansion: escaped = 202 1333 ****************** <2> expansion: escapes = 0 1334 00000707 FF <2> endvariant 1335 <2> mne SMSW ; ofs=769h 1335 <3> %push 1335 <3> usesection ASMTABLE2, 1 1335 <3> %assign %$currofs $ - asmtab 1335 ****************** <3> expansion: currofs = 1800 1335 <3> %ifnempty %2 1335 <3> db %2 1335 <3> %endif 1335 <3> __SECT__ 1335 <3> %defstr %$string %1 1335 ****************** <3> expansion: string = 'SMSW' 1335 <3> %strlen %$string_size %$string 1335 ****************** <3> expansion: string_size = 4 1335 <3> %if %$string_size > 15 1335 <3> %error Mnemonic %1 is too long! 1335 <3> %endif 1335 00000A47 8470 <3> dw (%$currofs)<<4|%$string_size 1335 <3> %assign MN_%1 $ - mnlist 1335 ****************** <3> expansion: MN_SMSW = 2378 1335 00000A49 534D5357 <3> db %$string 1335 <3> %pop 1336 00000708 F6C964 <2> variant AGRP(7,4), 40, ASM_MACH2 1336 ****************** <2> expansion: ainfo = 51556 1336 ****************** <2> expansion: escaped = 201 1336 ****************** <2> expansion: escapes = 0 1337 0000070B FF <2> endvariant 1338 <2> mne STC ; ofs=76Dh 1338 <3> %push 1338 <3> usesection ASMTABLE2, 1 1338 <3> %assign %$currofs $ - asmtab 1338 ****************** <3> expansion: currofs = 1804 1338 <3> %ifnempty %2 1338 <3> db %2 1338 <3> %endif 1338 <3> __SECT__ 1338 <3> %defstr %$string %1 1338 ****************** <3> expansion: string = 'STC' 1338 <3> %strlen %$string_size %$string 1338 ****************** <3> expansion: string_size = 3 1338 <3> %if %$string_size > 15 1338 <3> %error Mnemonic %1 is too long! 1338 <3> %endif 1338 00000A4D C370 <3> dw (%$currofs)<<4|%$string_size 1338 <3> %assign MN_%1 $ - mnlist 1338 ****************** <3> expansion: MN_STC = 2384 1338 00000A4F 535443 <3> db %$string 1338 <3> %pop 1339 0000070C 4EC9 <2> variant 0f9h, 0 1339 ****************** <2> expansion: ainfo = 20169 1339 ****************** <2> expansion: escaped = 78 1339 ****************** <2> expansion: escapes = 0 1340 0000070E FF <2> endvariant 1341 <2> mne STD ; ofs=770h 1341 <3> %push 1341 <3> usesection ASMTABLE2, 1 1341 <3> %assign %$currofs $ - asmtab 1341 ****************** <3> expansion: currofs = 1807 1341 <3> %ifnempty %2 1341 <3> db %2 1341 <3> %endif 1341 <3> __SECT__ 1341 <3> %defstr %$string %1 1341 ****************** <3> expansion: string = 'STD' 1341 <3> %strlen %$string_size %$string 1341 ****************** <3> expansion: string_size = 3 1341 <3> %if %$string_size > 15 1341 <3> %error Mnemonic %1 is too long! 1341 <3> %endif 1341 00000A52 F370 <3> dw (%$currofs)<<4|%$string_size 1341 <3> %assign MN_%1 $ - mnlist 1341 ****************** <3> expansion: MN_STD = 2389 1341 00000A54 535444 <3> db %$string 1341 <3> %pop 1342 0000070F 500D <2> variant 0fdh, 0 1342 ****************** <2> expansion: ainfo = 20493 1342 ****************** <2> expansion: escaped = 80 1342 ****************** <2> expansion: escapes = 0 1343 00000711 FF <2> endvariant 1344 <2> mne STI ; ofs=773h 1344 <3> %push 1344 <3> usesection ASMTABLE2, 1 1344 <3> %assign %$currofs $ - asmtab 1344 ****************** <3> expansion: currofs = 1810 1344 <3> %ifnempty %2 1344 <3> db %2 1344 <3> %endif 1344 <3> __SECT__ 1344 <3> %defstr %$string %1 1344 ****************** <3> expansion: string = 'STI' 1344 <3> %strlen %$string_size %$string 1344 ****************** <3> expansion: string_size = 3 1344 <3> %if %$string_size > 15 1344 <3> %error Mnemonic %1 is too long! 1344 <3> %endif 1344 00000A57 2371 <3> dw (%$currofs)<<4|%$string_size 1344 <3> %assign MN_%1 $ - mnlist 1344 ****************** <3> expansion: MN_STI = 2394 1344 00000A59 535449 <3> db %$string 1344 <3> %pop 1345 00000712 4F6B <2> variant 0fbh, 0 1345 ****************** <2> expansion: ainfo = 20331 1345 ****************** <2> expansion: escaped = 79 1345 ****************** <2> expansion: escapes = 0 1346 00000714 FF <2> endvariant 1347 <2> mne STOSB ; ofs=776h 1347 <3> %push 1347 <3> usesection ASMTABLE2, 1 1347 <3> %assign %$currofs $ - asmtab 1347 ****************** <3> expansion: currofs = 1813 1347 <3> %ifnempty %2 1347 <3> db %2 1347 <3> %endif 1347 <3> __SECT__ 1347 <3> %defstr %$string %1 1347 ****************** <3> expansion: string = 'STOSB' 1347 <3> %strlen %$string_size %$string 1347 ****************** <3> expansion: string_size = 5 1347 <3> %if %$string_size > 15 1347 <3> %error Mnemonic %1 is too long! 1347 <3> %endif 1347 00000A5C 5571 <3> dw (%$currofs)<<4|%$string_size 1347 <3> %assign MN_%1 $ - mnlist 1347 ****************** <3> expansion: MN_STOSB = 2399 1347 00000A5E 53544F5342 <3> db %$string 1347 <3> %pop 1348 00000715 35CA <2> variant 0aah, 0 1348 ****************** <2> expansion: ainfo = 13770 1348 ****************** <2> expansion: escaped = 53 1348 ****************** <2> expansion: escapes = 0 1349 00000717 FF <2> endvariant 1350 <2> mne STR ; ofs=77Ch 1350 <3> %push 1350 <3> usesection ASMTABLE2, 1 1350 <3> %assign %$currofs $ - asmtab 1350 ****************** <3> expansion: currofs = 1816 1350 <3> %ifnempty %2 1350 <3> db %2 1350 <3> %endif 1350 <3> __SECT__ 1350 <3> %defstr %$string %1 1350 ****************** <3> expansion: string = 'STR' 1350 <3> %strlen %$string_size %$string 1350 ****************** <3> expansion: string_size = 3 1350 <3> %if %$string_size > 15 1350 <3> %error Mnemonic %1 is too long! 1350 <3> %endif 1350 00000A63 8371 <3> dw (%$currofs)<<4|%$string_size 1350 <3> %assign MN_%1 $ - mnlist 1350 ****************** <3> expansion: MN_STR = 2406 1350 00000A65 535452 <3> db %$string 1350 <3> %pop 1351 00000718 F6CAFA <2> variant AGRP(8,1), 41, ASM_MACH2 1351 ****************** <2> expansion: ainfo = 51962 1351 ****************** <2> expansion: escaped = 202 1351 ****************** <2> expansion: escapes = 0 1352 0000071B FF <2> endvariant 1353 <2> mne SUB ; ofs=780h 1353 <3> %push 1353 <3> usesection ASMTABLE2, 1 1353 <3> %assign %$currofs $ - asmtab 1353 ****************** <3> expansion: currofs = 1820 1353 <3> %ifnempty %2 1353 <3> db %2 1353 <3> %endif 1353 <3> __SECT__ 1353 <3> %defstr %$string %1 1353 ****************** <3> expansion: string = 'SUB' 1353 <3> %strlen %$string_size %$string 1353 ****************** <3> expansion: string_size = 3 1353 <3> %if %$string_size > 15 1353 <3> %error Mnemonic %1 is too long! 1353 <3> %endif 1353 00000A68 C371 <3> dw (%$currofs)<<4|%$string_size 1353 <3> %assign MN_%1 $ - mnlist 1353 ****************** <3> expansion: MN_SUB = 2411 1353 00000A6A 535542 <3> db %$string 1353 <3> %pop 1354 0000071C FBBA60 <2> variant AGRP(1,5), 3, ASM_LOCKABLE 1354 ****************** <2> expansion: ainfo = 47712 1354 ****************** <2> expansion: escaped = 186 1354 ****************** <2> expansion: escapes = 0 1355 0000071F 0DED <2> variant 02ch, 1 1355 ****************** <2> expansion: ainfo = 3565 1355 ****************** <2> expansion: escaped = 13 1355 ****************** <2> expansion: escapes = 0 1356 00000721 FBBCE7 <2> variant AGRP(2,5), 2, ASM_LOCKABLE 1356 ****************** <2> expansion: ainfo = 48359 1356 ****************** <2> expansion: escaped = 188 1356 ****************** <2> expansion: escapes = 0 1357 00000724 FB0CAC <2> variant 028h, 4, ASM_LOCKABLE 1357 ****************** <2> expansion: ainfo = 3244 1357 ****************** <2> expansion: escaped = 12 1357 ****************** <2> expansion: escapes = 0 1358 00000727 0D4F <2> variant 02ah, 5 1358 ****************** <2> expansion: ainfo = 3407 1358 ****************** <2> expansion: escaped = 13 1358 ****************** <2> expansion: escapes = 0 1359 00000729 FF <2> endvariant 1360 <2> mne TEST ; ofs=78Eh 1360 <3> %push 1360 <3> usesection ASMTABLE2, 1 1360 <3> %assign %$currofs $ - asmtab 1360 ****************** <3> expansion: currofs = 1834 1360 <3> %ifnempty %2 1360 <3> db %2 1360 <3> %endif 1360 <3> __SECT__ 1360 <3> %defstr %$string %1 1360 ****************** <3> expansion: string = 'TEST' 1360 <3> %strlen %$string_size %$string 1360 ****************** <3> expansion: string_size = 4 1360 <3> %if %$string_size > 15 1360 <3> %error Mnemonic %1 is too long! 1360 <3> %endif 1360 00000A6D A472 <3> dw (%$currofs)<<4|%$string_size 1360 <3> %assign MN_%1 $ - mnlist 1360 ****************** <3> expansion: MN_TEST = 2416 1360 00000A6F 54455354 <3> db %$string 1360 <3> %pop 1361 0000072A 3529 <2> variant 0a8h, 1 1361 ****************** <2> expansion: ainfo = 13609 1361 ****************** <2> expansion: escaped = 53 1361 ****************** <2> expansion: escapes = 0 1362 0000072C C572 <2> variant AGRP(6,0), 2 1362 ****************** <2> expansion: ainfo = 50546 1362 ****************** <2> expansion: escaped = 197 1362 ****************** <2> expansion: escapes = 0 1363 0000072E 29C8 <2> variant 084h, 4 1363 ****************** <2> expansion: ainfo = 10696 1363 ****************** <2> expansion: escaped = 41 1363 ****************** <2> expansion: escapes = 0 1364 00000730 29C9 <2> variant 084h, 5 1364 ****************** <2> expansion: ainfo = 10697 1364 ****************** <2> expansion: escaped = 41 1364 ****************** <2> expansion: escapes = 0 1365 00000732 FF <2> endvariant 1366 <2> mne UD0 ; ofs=797h 1366 <3> %push 1366 <3> usesection ASMTABLE2, 1 1366 <3> %assign %$currofs $ - asmtab 1366 ****************** <3> expansion: currofs = 1843 1366 <3> %ifnempty %2 1366 <3> db %2 1366 <3> %endif 1366 <3> __SECT__ 1366 <3> %defstr %$string %1 1366 ****************** <3> expansion: string = 'UD0' 1366 <3> %strlen %$string_size %$string 1366 ****************** <3> expansion: string_size = 3 1366 <3> %if %$string_size > 15 1366 <3> %error Mnemonic %1 is too long! 1366 <3> %endif 1366 00000A73 3373 <3> dw (%$currofs)<<4|%$string_size 1366 <3> %assign MN_%1 $ - mnlist 1366 ****************** <3> expansion: MN_UD0 = 2422 1366 00000A75 554430 <3> db %$string 1366 <3> %pop 1367 00000733 F5A1AF <2> variant 1ffh, 0, ASM_MACH1 1367 ****************** <2> expansion: ainfo = 41391 1367 ****************** <2> expansion: escaped = 161 1367 ****************** <2> expansion: escapes = 0 1368 00000736 FF <2> endvariant 1369 <2> mne UD1 ; ofs=79Bh 1369 <3> %push 1369 <3> usesection ASMTABLE2, 1 1369 <3> %assign %$currofs $ - asmtab 1369 ****************** <3> expansion: currofs = 1847 1369 <3> %ifnempty %2 1369 <3> db %2 1369 <3> %endif 1369 <3> __SECT__ 1369 <3> %defstr %$string %1 1369 ****************** <3> expansion: string = 'UD1' 1369 <3> %strlen %$string_size %$string 1369 ****************** <3> expansion: string_size = 3 1369 <3> %if %$string_size > 15 1369 <3> %error Mnemonic %1 is too long! 1369 <3> %endif 1369 00000A78 7373 <3> dw (%$currofs)<<4|%$string_size 1369 <3> %assign MN_%1 $ - mnlist 1369 ****************** <3> expansion: MN_UD1 = 2427 1369 00000A7A 554431 <3> db %$string 1369 <3> %pop 1370 00000737 F58B89 <2> variant 1b9h, 0, ASM_MACH1 1370 ****************** <2> expansion: ainfo = 35721 1370 ****************** <2> expansion: escaped = 139 1370 ****************** <2> expansion: escapes = 0 1371 0000073A FF <2> endvariant 1372 <2> mne UD2 ; ofs=79Fh 1372 <3> %push 1372 <3> usesection ASMTABLE2, 1 1372 <3> %assign %$currofs $ - asmtab 1372 ****************** <3> expansion: currofs = 1851 1372 <3> %ifnempty %2 1372 <3> db %2 1372 <3> %endif 1372 <3> __SECT__ 1372 <3> %defstr %$string %1 1372 ****************** <3> expansion: string = 'UD2' 1372 <3> %strlen %$string_size %$string 1372 ****************** <3> expansion: string_size = 3 1372 <3> %if %$string_size > 15 1372 <3> %error Mnemonic %1 is too long! 1372 <3> %endif 1372 00000A7D B373 <3> dw (%$currofs)<<4|%$string_size 1372 <3> %assign MN_%1 $ - mnlist 1372 ****************** <3> expansion: MN_UD2 = 2432 1372 00000A7F 554432 <3> db %$string 1372 <3> %pop 1373 0000073B F5547B <2> variant 10bh, 0, ASM_MACH1 1373 ****************** <2> expansion: ainfo = 21627 1373 ****************** <2> expansion: escaped = 84 1373 ****************** <2> expansion: escapes = 0 1374 0000073E FF <2> endvariant 1375 <2> mne VERR ; ofs=7A3h 1375 <3> %push 1375 <3> usesection ASMTABLE2, 1 1375 <3> %assign %$currofs $ - asmtab 1375 ****************** <3> expansion: currofs = 1855 1375 <3> %ifnempty %2 1375 <3> db %2 1375 <3> %endif 1375 <3> __SECT__ 1375 <3> %defstr %$string %1 1375 ****************** <3> expansion: string = 'VERR' 1375 <3> %strlen %$string_size %$string 1375 ****************** <3> expansion: string_size = 4 1375 <3> %if %$string_size > 15 1375 <3> %error Mnemonic %1 is too long! 1375 <3> %endif 1375 00000A82 F473 <3> dw (%$currofs)<<4|%$string_size 1375 <3> %assign MN_%1 $ - mnlist 1375 ****************** <3> expansion: MN_VERR = 2437 1375 00000A84 56455252 <3> db %$string 1375 <3> %pop 1376 0000073F F6CBED <2> variant AGRP(8,4), 41, ASM_MACH2 1376 ****************** <2> expansion: ainfo = 52205 1376 ****************** <2> expansion: escaped = 203 1376 ****************** <2> expansion: escapes = 0 1377 00000742 FF <2> endvariant 1378 <2> mne VERW ; ofs=7A7h 1378 <3> %push 1378 <3> usesection ASMTABLE2, 1 1378 <3> %assign %$currofs $ - asmtab 1378 ****************** <3> expansion: currofs = 1859 1378 <3> %ifnempty %2 1378 <3> db %2 1378 <3> %endif 1378 <3> __SECT__ 1378 <3> %defstr %$string %1 1378 ****************** <3> expansion: string = 'VERW' 1378 <3> %strlen %$string_size %$string 1378 ****************** <3> expansion: string_size = 4 1378 <3> %if %$string_size > 15 1378 <3> %error Mnemonic %1 is too long! 1378 <3> %endif 1378 00000A88 3474 <3> dw (%$currofs)<<4|%$string_size 1378 <3> %assign MN_%1 $ - mnlist 1378 ****************** <3> expansion: MN_VERW = 2443 1378 00000A8A 56455257 <3> db %$string 1378 <3> %pop 1379 00000743 F6CC3E <2> variant AGRP(8,5), 41, ASM_MACH2 1379 ****************** <2> expansion: ainfo = 52286 1379 ****************** <2> expansion: escaped = 204 1379 ****************** <2> expansion: escapes = 0 1380 00000746 FF <2> endvariant 1381 <2> mne WAIT ; ofs=7ABh 1381 <3> %push 1381 <3> usesection ASMTABLE2, 1 1381 <3> %assign %$currofs $ - asmtab 1381 ****************** <3> expansion: currofs = 1863 1381 <3> %ifnempty %2 1381 <3> db %2 1381 <3> %endif 1381 <3> __SECT__ 1381 <3> %defstr %$string %1 1381 ****************** <3> expansion: string = 'WAIT' 1381 <3> %strlen %$string_size %$string 1381 ****************** <3> expansion: string_size = 4 1381 <3> %if %$string_size > 15 1381 <3> %error Mnemonic %1 is too long! 1381 <3> %endif 1381 00000A8E 7474 <3> dw (%$currofs)<<4|%$string_size 1381 <3> %assign MN_%1 $ - mnlist 1381 ****************** <3> expansion: MN_WAIT = 2449 1381 00000A90 57414954 <3> db %$string 1381 <3> %pop 1382 00000747 310B <2> variant 09bh, 0 1382 ****************** <2> expansion: ainfo = 12555 1382 ****************** <2> expansion: escaped = 49 1382 ****************** <2> expansion: escapes = 0 1383 00000749 FF <2> endvariant 1384 <2> mne WBINVD ; ofs=7AEh 1384 <3> %push 1384 <3> usesection ASMTABLE2, 1 1384 <3> %assign %$currofs $ - asmtab 1384 ****************** <3> expansion: currofs = 1866 1384 <3> %ifnempty %2 1384 <3> db %2 1384 <3> %endif 1384 <3> __SECT__ 1384 <3> %defstr %$string %1 1384 ****************** <3> expansion: string = 'WBINVD' 1384 <3> %strlen %$string_size %$string 1384 ****************** <3> expansion: string_size = 6 1384 <3> %if %$string_size > 15 1384 <3> %error Mnemonic %1 is too long! 1384 <3> %endif 1384 00000A94 A674 <3> dw (%$currofs)<<4|%$string_size 1384 <3> %assign MN_%1 $ - mnlist 1384 ****************** <3> expansion: MN_WBINVD = 2455 1384 00000A96 5742494E5644 <3> db %$string 1384 <3> %pop 1385 0000074A F853D9 <2> variant 109h, 0, ASM_MACH4 1385 ****************** <2> expansion: ainfo = 21465 1385 ****************** <2> expansion: escaped = 83 1385 ****************** <2> expansion: escapes = 0 1386 0000074D FF <2> endvariant 1387 <2> mne WRMSR ; ofs=7B2h 1387 <3> %push 1387 <3> usesection ASMTABLE2, 1 1387 <3> %assign %$currofs $ - asmtab 1387 ****************** <3> expansion: currofs = 1870 1387 <3> %ifnempty %2 1387 <3> db %2 1387 <3> %endif 1387 <3> __SECT__ 1387 <3> %defstr %$string %1 1387 ****************** <3> expansion: string = 'WRMSR' 1387 <3> %strlen %$string_size %$string 1387 ****************** <3> expansion: string_size = 5 1387 <3> %if %$string_size > 15 1387 <3> %error Mnemonic %1 is too long! 1387 <3> %endif 1387 00000A9C E574 <3> dw (%$currofs)<<4|%$string_size 1387 <3> %assign MN_%1 $ - mnlist 1387 ****************** <3> expansion: MN_WRMSR = 2463 1387 00000A9E 57524D5352 <3> db %$string 1387 <3> %pop 1388 0000074E F96030 <2> variant 130h, 0, ASM_MACH5 1388 ****************** <2> expansion: ainfo = 24624 1388 ****************** <2> expansion: escaped = 96 1388 ****************** <2> expansion: escapes = 0 1389 00000751 FF <2> endvariant 1390 <2> mne XADD ; ofs=7B6h 1390 <3> %push 1390 <3> usesection ASMTABLE2, 1 1390 <3> %assign %$currofs $ - asmtab 1390 ****************** <3> expansion: currofs = 1874 1390 <3> %ifnempty %2 1390 <3> db %2 1390 <3> %endif 1390 <3> __SECT__ 1390 <3> %defstr %$string %1 1390 ****************** <3> expansion: string = 'XADD' 1390 <3> %strlen %$string_size %$string 1390 ****************** <3> expansion: string_size = 4 1390 <3> %if %$string_size > 15 1390 <3> %error Mnemonic %1 is too long! 1390 <3> %endif 1390 00000AA3 2475 <3> dw (%$currofs)<<4|%$string_size 1390 <3> %assign MN_%1 $ - mnlist 1390 ****************** <3> expansion: MN_XADD = 2470 1390 00000AA5 58414444 <3> db %$string 1390 <3> %pop 1391 00000752 FBF88DC4 <2> variant 1c0h, 4, ASM_LOCKABLE, ASM_MACH4 1391 ****************** <2> expansion: ainfo = 36292 1391 ****************** <2> expansion: escaped = 141 1391 ****************** <2> expansion: escapes = 0 1392 00000756 FF <2> endvariant 1393 <2> mne XCHG ; ofs=7BBh 1393 <3> %push 1393 <3> usesection ASMTABLE2, 1 1393 <3> %assign %$currofs $ - asmtab 1393 ****************** <3> expansion: currofs = 1879 1393 <3> %ifnempty %2 1393 <3> db %2 1393 <3> %endif 1393 <3> __SECT__ 1393 <3> %defstr %$string %1 1393 ****************** <3> expansion: string = 'XCHG' 1393 <3> %strlen %$string_size %$string 1393 ****************** <3> expansion: string_size = 4 1393 <3> %if %$string_size > 15 1393 <3> %error Mnemonic %1 is too long! 1393 <3> %endif 1393 00000AA9 7475 <3> dw (%$currofs)<<4|%$string_size 1393 <3> %assign MN_%1 $ - mnlist 1393 ****************** <3> expansion: MN_XCHG = 2476 1393 00000AAB 58434847 <3> db %$string 1393 <3> %pop 1394 00000757 2DCE <2> variant 090h, 62 1394 ****************** <2> expansion: ainfo = 11726 1394 ****************** <2> expansion: escaped = 45 1394 ****************** <2> expansion: escapes = 0 1395 00000759 2DCF <2> variant 090h, 63 1395 ****************** <2> expansion: ainfo = 11727 1395 ****************** <2> expansion: escaped = 45 1395 ****************** <2> expansion: escapes = 0 1396 0000075B FB2A6A <2> variant 086h, 4, ASM_LOCKABLE 1396 ****************** <2> expansion: ainfo = 10858 1396 ****************** <2> expansion: escaped = 42 1396 ****************** <2> expansion: escapes = 0 1397 0000075E FB2A6B <2> variant 086h, 5, ASM_LOCKABLE 1397 ****************** <2> expansion: ainfo = 10859 1397 ****************** <2> expansion: escaped = 42 1397 ****************** <2> expansion: escapes = 0 1398 00000761 FF <2> endvariant 1399 <2> mne XLAT ; ofs=7C6h 1399 <3> %push 1399 <3> usesection ASMTABLE2, 1 1399 <3> %assign %$currofs $ - asmtab 1399 ****************** <3> expansion: currofs = 1890 1399 <3> %ifnempty %2 1399 <3> db %2 1399 <3> %endif 1399 <3> __SECT__ 1399 <3> %defstr %$string %1 1399 ****************** <3> expansion: string = 'XLAT' 1399 <3> %strlen %$string_size %$string 1399 ****************** <3> expansion: string_size = 4 1399 <3> %if %$string_size > 15 1399 <3> %error Mnemonic %1 is too long! 1399 <3> %endif 1399 00000AAF 2476 <3> dw (%$currofs)<<4|%$string_size 1399 <3> %assign MN_%1 $ - mnlist 1399 ****************** <3> expansion: MN_XLAT = 2482 1399 00000AB1 584C4154 <3> db %$string 1399 <3> %pop 1400 00000762 4407 <2> variant 0d7h, 0 1400 ****************** <2> expansion: ainfo = 17415 1400 ****************** <2> expansion: escaped = 68 1400 ****************** <2> expansion: escapes = 0 1401 00000764 FF <2> endvariant 1402 <2> mne XLATB ; ofs=7C9h 1402 <3> %push 1402 <3> usesection ASMTABLE2, 1 1402 <3> %assign %$currofs $ - asmtab 1402 ****************** <3> expansion: currofs = 1893 1402 <3> %ifnempty %2 1402 <3> db %2 1402 <3> %endif 1402 <3> __SECT__ 1402 <3> %defstr %$string %1 1402 ****************** <3> expansion: string = 'XLATB' 1402 <3> %strlen %$string_size %$string 1402 ****************** <3> expansion: string_size = 5 1402 <3> %if %$string_size > 15 1402 <3> %error Mnemonic %1 is too long! 1402 <3> %endif 1402 00000AB5 5576 <3> dw (%$currofs)<<4|%$string_size 1402 <3> %assign MN_%1 $ - mnlist 1402 ****************** <3> expansion: MN_XLATB = 2488 1402 00000AB7 584C415442 <3> db %$string 1402 <3> %pop 1403 00000765 4407 <2> variant 0d7h, 0 1403 ****************** <2> expansion: ainfo = 17415 1403 ****************** <2> expansion: escaped = 68 1403 ****************** <2> expansion: escapes = 0 1404 00000767 FF <2> endvariant 1405 <2> mne XOR ; ofs=7CCh 1405 <3> %push 1405 <3> usesection ASMTABLE2, 1 1405 <3> %assign %$currofs $ - asmtab 1405 ****************** <3> expansion: currofs = 1896 1405 <3> %ifnempty %2 1405 <3> db %2 1405 <3> %endif 1405 <3> __SECT__ 1405 <3> %defstr %$string %1 1405 ****************** <3> expansion: string = 'XOR' 1405 <3> %strlen %$string_size %$string 1405 ****************** <3> expansion: string_size = 3 1405 <3> %if %$string_size > 15 1405 <3> %error Mnemonic %1 is too long! 1405 <3> %endif 1405 00000ABC 8376 <3> dw (%$currofs)<<4|%$string_size 1405 <3> %assign MN_%1 $ - mnlist 1405 ****************** <3> expansion: MN_XOR = 2495 1405 00000ABE 584F52 <3> db %$string 1405 <3> %pop 1406 00000768 FBBAB1 <2> variant AGRP(1,6), 3, ASM_LOCKABLE 1406 ****************** <2> expansion: ainfo = 47793 1406 ****************** <2> expansion: escaped = 186 1406 ****************** <2> expansion: escapes = 0 1407 0000076B 1075 <2> variant 034h, 1 1407 ****************** <2> expansion: ainfo = 4213 1407 ****************** <2> expansion: escaped = 16 1407 ****************** <2> expansion: escapes = 0 1408 0000076D FBBD38 <2> variant AGRP(2,6), 2, ASM_LOCKABLE 1408 ****************** <2> expansion: ainfo = 48440 1408 ****************** <2> expansion: escaped = 189 1408 ****************** <2> expansion: escapes = 0 1409 00000770 FB0F34 <2> variant 030h, 4, ASM_LOCKABLE 1409 ****************** <2> expansion: ainfo = 3892 1409 ****************** <2> expansion: escaped = 15 1409 ****************** <2> expansion: escapes = 0 1410 00000773 0FD7 <2> variant 032h, 5 1410 ****************** <2> expansion: ainfo = 4055 1410 ****************** <2> expansion: escaped = 15 1410 ****************** <2> expansion: escapes = 0 1411 00000775 FF <2> endvariant 1412 <2> 1413 <2> ; The following mnemonics allow an address size suffix 1414 <2> ; but do not require it. 1415 <2> 1416 <2> mnlist_a_suffix_allowed label near 1417 <2> 1418 <2> mne LOOP ; ofs=4B9h 1418 <3> %push 1418 <3> usesection ASMTABLE2, 1 1418 <3> %assign %$currofs $ - asmtab 1418 ****************** <3> expansion: currofs = 1910 1418 <3> %ifnempty %2 1418 <3> db %2 1418 <3> %endif 1418 <3> __SECT__ 1418 <3> %defstr %$string %1 1418 ****************** <3> expansion: string = 'LOOP' 1418 <3> %strlen %$string_size %$string 1418 ****************** <3> expansion: string_size = 4 1418 <3> %if %$string_size > 15 1418 <3> %error Mnemonic %1 is too long! 1418 <3> %endif 1418 00000AC1 6477 <3> dw (%$currofs)<<4|%$string_size 1418 <3> %assign MN_%1 $ - mnlist 1418 ****************** <3> expansion: MN_LOOP = 2500 1418 00000AC3 4C4F4F50 <3> db %$string 1418 <3> %pop 1419 00000776 47A9 <2> variant 0e2h, 39 1419 ****************** <2> expansion: ainfo = 18345 1419 ****************** <2> expansion: escaped = 71 1419 ****************** <2> expansion: escapes = 0 1420 00000778 FF <2> endvariant 1421 <2> mne LOOPZ ; ofs=4BCh 1421 <3> %push 1421 <3> usesection ASMTABLE2, 1 1421 <3> %assign %$currofs $ - asmtab 1421 ****************** <3> expansion: currofs = 1913 1421 <3> %ifnempty %2 1421 <3> db %2 1421 <3> %endif 1421 <3> __SECT__ 1421 <3> %defstr %$string %1 1421 ****************** <3> expansion: string = 'LOOPZ' 1421 <3> %strlen %$string_size %$string 1421 ****************** <3> expansion: string_size = 5 1421 <3> %if %$string_size > 15 1421 <3> %error Mnemonic %1 is too long! 1421 <3> %endif 1421 00000AC7 9577 <3> dw (%$currofs)<<4|%$string_size 1421 <3> %assign MN_%1 $ - mnlist 1421 ****************** <3> expansion: MN_LOOPZ = 2506 1421 00000AC9 4C4F4F505A <3> db %$string 1421 <3> %pop 1422 00000779 4758 <2> variant 0e1h, 39 1422 ****************** <2> expansion: ainfo = 18264 1422 ****************** <2> expansion: escaped = 71 1422 ****************** <2> expansion: escapes = 0 1423 0000077B FF <2> endvariant 1424 <2> mne LOOPE ; ofs=4BFh 1424 <3> %push 1424 <3> usesection ASMTABLE2, 1 1424 <3> %assign %$currofs $ - asmtab 1424 ****************** <3> expansion: currofs = 1916 1424 <3> %ifnempty %2 1424 <3> db %2 1424 <3> %endif 1424 <3> __SECT__ 1424 <3> %defstr %$string %1 1424 ****************** <3> expansion: string = 'LOOPE' 1424 <3> %strlen %$string_size %$string 1424 ****************** <3> expansion: string_size = 5 1424 <3> %if %$string_size > 15 1424 <3> %error Mnemonic %1 is too long! 1424 <3> %endif 1424 00000ACE C577 <3> dw (%$currofs)<<4|%$string_size 1424 <3> %assign MN_%1 $ - mnlist 1424 ****************** <3> expansion: MN_LOOPE = 2513 1424 00000AD0 4C4F4F5045 <3> db %$string 1424 <3> %pop 1425 0000077C 4758 <2> variant 0e1h, 39 1425 ****************** <2> expansion: ainfo = 18264 1425 ****************** <2> expansion: escaped = 71 1425 ****************** <2> expansion: escapes = 0 1426 0000077E FF <2> endvariant 1427 <2> mne LOOPNZ ; ofs=4C2h 1427 <3> %push 1427 <3> usesection ASMTABLE2, 1 1427 <3> %assign %$currofs $ - asmtab 1427 ****************** <3> expansion: currofs = 1919 1427 <3> %ifnempty %2 1427 <3> db %2 1427 <3> %endif 1427 <3> __SECT__ 1427 <3> %defstr %$string %1 1427 ****************** <3> expansion: string = 'LOOPNZ' 1427 <3> %strlen %$string_size %$string 1427 ****************** <3> expansion: string_size = 6 1427 <3> %if %$string_size > 15 1427 <3> %error Mnemonic %1 is too long! 1427 <3> %endif 1427 00000AD5 F677 <3> dw (%$currofs)<<4|%$string_size 1427 <3> %assign MN_%1 $ - mnlist 1427 ****************** <3> expansion: MN_LOOPNZ = 2520 1427 00000AD7 4C4F4F504E5A <3> db %$string 1427 <3> %pop 1428 0000077F 4707 <2> variant 0e0h, 39 1428 ****************** <2> expansion: ainfo = 18183 1428 ****************** <2> expansion: escaped = 71 1428 ****************** <2> expansion: escapes = 0 1429 00000781 FF <2> endvariant 1430 <2> mne LOOPNE ; ofs=4C5h 1430 <3> %push 1430 <3> usesection ASMTABLE2, 1 1430 <3> %assign %$currofs $ - asmtab 1430 ****************** <3> expansion: currofs = 1922 1430 <3> %ifnempty %2 1430 <3> db %2 1430 <3> %endif 1430 <3> __SECT__ 1430 <3> %defstr %$string %1 1430 ****************** <3> expansion: string = 'LOOPNE' 1430 <3> %strlen %$string_size %$string 1430 ****************** <3> expansion: string_size = 6 1430 <3> %if %$string_size > 15 1430 <3> %error Mnemonic %1 is too long! 1430 <3> %endif 1430 00000ADD 2678 <3> dw (%$currofs)<<4|%$string_size 1430 <3> %assign MN_%1 $ - mnlist 1430 ****************** <3> expansion: MN_LOOPNE = 2528 1430 00000ADF 4C4F4F504E45 <3> db %$string 1430 <3> %pop 1431 00000782 4707 <2> variant 0e0h, 39 1431 ****************** <2> expansion: ainfo = 18183 1431 ****************** <2> expansion: escaped = 71 1431 ****************** <2> expansion: escapes = 0 1432 00000784 FF <2> endvariant 1433 <2> 1434 <2> ; The following mnemonics allow an operand size suffix 1435 <2> ; but do not require it. 1436 <2> 1437 <2> mnlist_o_suffix_allowed label near 1438 <2> 1439 <2> mne ENTER ; ofs=14Ch 1439 <3> %push 1439 <3> usesection ASMTABLE2, 1 1439 <3> %assign %$currofs $ - asmtab 1439 ****************** <3> expansion: currofs = 1925 1439 <3> %ifnempty %2 1439 <3> db %2 1439 <3> %endif 1439 <3> __SECT__ 1439 <3> %defstr %$string %1 1439 ****************** <3> expansion: string = 'ENTER' 1439 <3> %strlen %$string_size %$string 1439 ****************** <3> expansion: string_size = 5 1439 <3> %if %$string_size > 15 1439 <3> %error Mnemonic %1 is too long! 1439 <3> %endif 1439 00000AE5 5578 <3> dw (%$currofs)<<4|%$string_size 1439 <3> %assign MN_%1 $ - mnlist 1439 ****************** <3> expansion: MN_ENTER = 2536 1439 00000AE7 454E544552 <3> db %$string 1439 <3> %pop 1440 00000785 F53F5A <2> variant 0c8h, 18, ASM_MACH1 1440 ****************** <2> expansion: ainfo = 16218 1440 ****************** <2> expansion: escaped = 63 1440 ****************** <2> expansion: escapes = 0 1441 00000788 FF <2> endvariant 1442 <2> mne FLDENV ; ofs=285h 1442 <3> %push 1442 <3> usesection ASMTABLE2, 1 1442 <3> %assign %$currofs $ - asmtab 1442 ****************** <3> expansion: currofs = 1929 1442 <3> %ifnempty %2 1442 <3> db %2 1442 <3> %endif 1442 <3> __SECT__ 1442 <3> %defstr %$string %1 1442 ****************** <3> expansion: string = 'FLDENV' 1442 <3> %strlen %$string_size %$string 1442 ****************** <3> expansion: string_size = 6 1442 <3> %if %$string_size > 15 1442 <3> %error Mnemonic %1 is too long! 1442 <3> %endif 1442 00000AEC 9678 <3> dw (%$currofs)<<4|%$string_size 1442 <3> %assign MN_%1 $ - mnlist 1442 ****************** <3> expansion: MN_FLDENV = 2543 1442 00000AEE 464C44454E56 <3> db %$string 1442 <3> %pop 1443 00000789 AC8E <2> variant 221h, 29 1443 ****************** <2> expansion: ainfo = 44174 1443 ****************** <2> expansion: escaped = 172 1443 ****************** <2> expansion: escapes = 0 1444 0000078B FF <2> endvariant 1445 <2> mne FRSTOR ; ofs=2B8h 1445 <3> %push 1445 <3> usesection ASMTABLE2, 1 1445 <3> %assign %$currofs $ - asmtab 1445 ****************** <3> expansion: currofs = 1932 1445 <3> %ifnempty %2 1445 <3> db %2 1445 <3> %endif 1445 <3> __SECT__ 1445 <3> %defstr %$string %1 1445 ****************** <3> expansion: string = 'FRSTOR' 1445 <3> %strlen %$string_size %$string 1445 ****************** <3> expansion: string_size = 6 1445 <3> %if %$string_size > 15 1445 <3> %error Mnemonic %1 is too long! 1445 <3> %endif 1445 00000AF4 C678 <3> dw (%$currofs)<<4|%$string_size 1445 <3> %assign MN_%1 $ - mnlist 1445 ****************** <3> expansion: MN_FRSTOR = 2551 1445 00000AF6 465253544F52 <3> db %$string 1445 <3> %pop 1446 0000078C ADD2 <2> variant 225h, 29 1446 ****************** <2> expansion: ainfo = 44498 1446 ****************** <2> expansion: escaped = 173 1446 ****************** <2> expansion: escapes = 0 1447 0000078E FF <2> endvariant 1448 <2> mne FSAVE, ASM_WAIT ; ofs=2BBh 1448 <3> %push 1448 <3> usesection ASMTABLE2, 1 1448 <3> %assign %$currofs $ - asmtab 1448 ****************** <3> expansion: currofs = 1935 1448 <3> %ifnempty %2 1448 0000078F FE <3> db %2 1448 <3> %endif 1448 <3> __SECT__ 1448 <3> %defstr %$string %1 1448 ****************** <3> expansion: string = 'FSAVE' 1448 <3> %strlen %$string_size %$string 1448 ****************** <3> expansion: string_size = 5 1448 <3> %if %$string_size > 15 1448 <3> %error Mnemonic %1 is too long! 1448 <3> %endif 1448 00000AFC F578 <3> dw (%$currofs)<<4|%$string_size 1448 <3> %assign MN_%1 $ - mnlist 1448 ****************** <3> expansion: MN_FSAVE = 2559 1448 00000AFE 4653415645 <3> db %$string 1448 <3> %pop 1449 <2> mne FNSAVE ; ofs=2BCh 1449 <3> %push 1449 <3> usesection ASMTABLE2, 1 1449 <3> %assign %$currofs $ - asmtab 1449 ****************** <3> expansion: currofs = 1936 1449 <3> %ifnempty %2 1449 <3> db %2 1449 <3> %endif 1449 <3> __SECT__ 1449 <3> %defstr %$string %1 1449 ****************** <3> expansion: string = 'FNSAVE' 1449 <3> %strlen %$string_size %$string 1449 ****************** <3> expansion: string_size = 6 1449 <3> %if %$string_size > 15 1449 <3> %error Mnemonic %1 is too long! 1449 <3> %endif 1449 00000B03 0679 <3> dw (%$currofs)<<4|%$string_size 1449 <3> %assign MN_%1 $ - mnlist 1449 ****************** <3> expansion: MN_FNSAVE = 2566 1449 00000B05 464E53415645 <3> db %$string 1449 <3> %pop 1450 00000790 B2E2 <2> variant 235h, 29 1450 ****************** <2> expansion: ainfo = 45794 1450 ****************** <2> expansion: escaped = 178 1450 ****************** <2> expansion: escapes = 0 1451 00000792 FF <2> endvariant 1452 <2> mne FSTENV, ASM_WAIT ; ofs=2EDh 1452 <3> %push 1452 <3> usesection ASMTABLE2, 1 1452 <3> %assign %$currofs $ - asmtab 1452 ****************** <3> expansion: currofs = 1939 1452 <3> %ifnempty %2 1452 00000793 FE <3> db %2 1452 <3> %endif 1452 <3> __SECT__ 1452 <3> %defstr %$string %1 1452 ****************** <3> expansion: string = 'FSTENV' 1452 <3> %strlen %$string_size %$string 1452 ****************** <3> expansion: string_size = 6 1452 <3> %if %$string_size > 15 1452 <3> %error Mnemonic %1 is too long! 1452 <3> %endif 1452 00000B0B 3679 <3> dw (%$currofs)<<4|%$string_size 1452 <3> %assign MN_%1 $ - mnlist 1452 ****************** <3> expansion: MN_FSTENV = 2574 1452 00000B0D 465354454E56 <3> db %$string 1452 <3> %pop 1453 <2> mne FNSTENV ; ofs=2EEh 1453 <3> %push 1453 <3> usesection ASMTABLE2, 1 1453 <3> %assign %$currofs $ - asmtab 1453 ****************** <3> expansion: currofs = 1940 1453 <3> %ifnempty %2 1453 <3> db %2 1453 <3> %endif 1453 <3> __SECT__ 1453 <3> %defstr %$string %1 1453 ****************** <3> expansion: string = 'FNSTENV' 1453 <3> %strlen %$string_size %$string 1453 ****************** <3> expansion: string_size = 7 1453 <3> %if %$string_size > 15 1453 <3> %error Mnemonic %1 is too long! 1453 <3> %endif 1453 00000B13 4779 <3> dw (%$currofs)<<4|%$string_size 1453 <3> %assign MN_%1 $ - mnlist 1453 ****************** <3> expansion: MN_FNSTENV = 2582 1453 00000B15 464E5354454E56 <3> db %$string 1453 <3> %pop 1454 00000794 B19E <2> variant 231h, 29 1454 ****************** <2> expansion: ainfo = 45470 1454 ****************** <2> expansion: escaped = 177 1454 ****************** <2> expansion: escapes = 0 1455 00000796 FF <2> endvariant 1456 <2> mne IRET ; ofs=3BAh 1456 <3> %push 1456 <3> usesection ASMTABLE2, 1 1456 <3> %assign %$currofs $ - asmtab 1456 ****************** <3> expansion: currofs = 1943 1456 <3> %ifnempty %2 1456 <3> db %2 1456 <3> %endif 1456 <3> __SECT__ 1456 <3> %defstr %$string %1 1456 ****************** <3> expansion: string = 'IRET' 1456 <3> %strlen %$string_size %$string 1456 ****************** <3> expansion: string_size = 4 1456 <3> %if %$string_size > 15 1456 <3> %error Mnemonic %1 is too long! 1456 <3> %endif 1456 00000B1C 7479 <3> dw (%$currofs)<<4|%$string_size 1456 <3> %assign MN_%1 $ - mnlist 1456 ****************** <3> expansion: MN_IRET = 2591 1456 00000B1E 49524554 <3> db %$string 1456 <3> %pop 1457 00000797 417F <2> variant 0cfh, 0 1457 ****************** <2> expansion: ainfo = 16767 1457 ****************** <2> expansion: escaped = 65 1457 ****************** <2> expansion: escapes = 0 1458 00000799 FF <2> endvariant 1459 <2> mne LEAVE ; ofs=49Dh 1459 <3> %push 1459 <3> usesection ASMTABLE2, 1 1459 <3> %assign %$currofs $ - asmtab 1459 ****************** <3> expansion: currofs = 1946 1459 <3> %ifnempty %2 1459 <3> db %2 1459 <3> %endif 1459 <3> __SECT__ 1459 <3> %defstr %$string %1 1459 ****************** <3> expansion: string = 'LEAVE' 1459 <3> %strlen %$string_size %$string 1459 ****************** <3> expansion: string_size = 5 1459 <3> %if %$string_size > 15 1459 <3> %error Mnemonic %1 is too long! 1459 <3> %endif 1459 00000B22 A579 <3> dw (%$currofs)<<4|%$string_size 1459 <3> %assign MN_%1 $ - mnlist 1459 ****************** <3> expansion: MN_LEAVE = 2597 1459 00000B24 4C45415645 <3> db %$string 1459 <3> %pop 1460 0000079A F53F99 <2> variant 0c9h, 0, ASM_MACH1 1460 ****************** <2> expansion: ainfo = 16281 1460 ****************** <2> expansion: escaped = 63 1460 ****************** <2> expansion: escapes = 0 1461 0000079D FF <2> endvariant 1462 <2> mne POPA ; ofs=61Bh 1462 <3> %push 1462 <3> usesection ASMTABLE2, 1 1462 <3> %assign %$currofs $ - asmtab 1462 ****************** <3> expansion: currofs = 1950 1462 <3> %ifnempty %2 1462 <3> db %2 1462 <3> %endif 1462 <3> __SECT__ 1462 <3> %defstr %$string %1 1462 ****************** <3> expansion: string = 'POPA' 1462 <3> %strlen %$string_size %$string 1462 ****************** <3> expansion: string_size = 4 1462 <3> %if %$string_size > 15 1462 <3> %error Mnemonic %1 is too long! 1462 <3> %endif 1462 00000B29 E479 <3> dw (%$currofs)<<4|%$string_size 1462 <3> %assign MN_%1 $ - mnlist 1462 ****************** <3> expansion: MN_POPA = 2604 1462 00000B2B 504F5041 <3> db %$string 1462 <3> %pop 1463 0000079E F51EB1 <2> variant 061h, 0, ASM_MACH1 1463 ****************** <2> expansion: ainfo = 7857 1463 ****************** <2> expansion: escaped = 30 1463 ****************** <2> expansion: escapes = 0 1464 000007A1 FF <2> endvariant 1465 <2> mne POPF ; ofs=61Fh 1465 <3> %push 1465 <3> usesection ASMTABLE2, 1 1465 <3> %assign %$currofs $ - asmtab 1465 ****************** <3> expansion: currofs = 1954 1465 <3> %ifnempty %2 1465 <3> db %2 1465 <3> %endif 1465 <3> __SECT__ 1465 <3> %defstr %$string %1 1465 ****************** <3> expansion: string = 'POPF' 1465 <3> %strlen %$string_size %$string 1465 ****************** <3> expansion: string_size = 4 1465 <3> %if %$string_size > 15 1465 <3> %error Mnemonic %1 is too long! 1465 <3> %endif 1465 00000B2F 247A <3> dw (%$currofs)<<4|%$string_size 1465 <3> %assign MN_%1 $ - mnlist 1465 ****************** <3> expansion: MN_POPF = 2610 1465 00000B31 504F5046 <3> db %$string 1465 <3> %pop 1466 000007A2 31AD <2> variant 09dh, 0 1466 ****************** <2> expansion: ainfo = 12717 1466 ****************** <2> expansion: escaped = 49 1466 ****************** <2> expansion: escapes = 0 1467 000007A4 FF <2> endvariant 1468 <2> mne PUSHA ; ofs=63Bh 1468 <3> %push 1468 <3> usesection ASMTABLE2, 1 1468 <3> %assign %$currofs $ - asmtab 1468 ****************** <3> expansion: currofs = 1957 1468 <3> %ifnempty %2 1468 <3> db %2 1468 <3> %endif 1468 <3> __SECT__ 1468 <3> %defstr %$string %1 1468 ****************** <3> expansion: string = 'PUSHA' 1468 <3> %strlen %$string_size %$string 1468 ****************** <3> expansion: string_size = 5 1468 <3> %if %$string_size > 15 1468 <3> %error Mnemonic %1 is too long! 1468 <3> %endif 1468 00000B35 557A <3> dw (%$currofs)<<4|%$string_size 1468 <3> %assign MN_%1 $ - mnlist 1468 ****************** <3> expansion: MN_PUSHA = 2616 1468 00000B37 5055534841 <3> db %$string 1468 <3> %pop 1469 000007A5 F51E60 <2> variant 060h, 0, ASM_MACH1 1469 ****************** <2> expansion: ainfo = 7776 1469 ****************** <2> expansion: escaped = 30 1469 ****************** <2> expansion: escapes = 0 1470 000007A8 FF <2> endvariant 1471 <2> mne PUSHF ; ofs=63Fh 1471 <3> %push 1471 <3> usesection ASMTABLE2, 1 1471 <3> %assign %$currofs $ - asmtab 1471 ****************** <3> expansion: currofs = 1961 1471 <3> %ifnempty %2 1471 <3> db %2 1471 <3> %endif 1471 <3> __SECT__ 1471 <3> %defstr %$string %1 1471 ****************** <3> expansion: string = 'PUSHF' 1471 <3> %strlen %$string_size %$string 1471 ****************** <3> expansion: string_size = 5 1471 <3> %if %$string_size > 15 1471 <3> %error Mnemonic %1 is too long! 1471 <3> %endif 1471 00000B3C 957A <3> dw (%$currofs)<<4|%$string_size 1471 <3> %assign MN_%1 $ - mnlist 1471 ****************** <3> expansion: MN_PUSHF = 2623 1471 00000B3E 5055534846 <3> db %$string 1471 <3> %pop 1472 000007A9 315C <2> variant 09ch, 0 1472 ****************** <2> expansion: ainfo = 12636 1472 ****************** <2> expansion: escaped = 49 1472 ****************** <2> expansion: escapes = 0 1473 000007AB FF <2> endvariant 1474 <2> mne RETN ; ofs=674h 1474 <3> %push 1474 <3> usesection ASMTABLE2, 1 1474 <3> %assign %$currofs $ - asmtab 1474 ****************** <3> expansion: currofs = 1964 1474 <3> %ifnempty %2 1474 <3> db %2 1474 <3> %endif 1474 <3> __SECT__ 1474 <3> %defstr %$string %1 1474 ****************** <3> expansion: string = 'RETN' 1474 <3> %strlen %$string_size %$string 1474 ****************** <3> expansion: string_size = 4 1474 <3> %if %$string_size > 15 1474 <3> %error Mnemonic %1 is too long! 1474 <3> %endif 1474 00000B43 C47A <3> dw (%$currofs)<<4|%$string_size 1474 <3> %assign MN_%1 $ - mnlist 1474 ****************** <3> expansion: MN_RETN = 2630 1474 00000B45 5245544E <3> db %$string 1474 <3> %pop 1475 000007AC 3DB3 <2> variant 0c3h, 0 1475 ****************** <2> expansion: ainfo = 15795 1475 ****************** <2> expansion: escaped = 61 1475 ****************** <2> expansion: escapes = 0 1476 000007AE 3D9C <2> variant 0c2h, 58 1476 ****************** <2> expansion: ainfo = 15772 1476 ****************** <2> expansion: escaped = 61 1476 ****************** <2> expansion: escapes = 0 1477 000007B0 FF <2> endvariant 1478 <2> mne RET ; ofs=679h 1478 <3> %push 1478 <3> usesection ASMTABLE2, 1 1478 <3> %assign %$currofs $ - asmtab 1478 ****************** <3> expansion: currofs = 1969 1478 <3> %ifnempty %2 1478 <3> db %2 1478 <3> %endif 1478 <3> __SECT__ 1478 <3> %defstr %$string %1 1478 ****************** <3> expansion: string = 'RET' 1478 <3> %strlen %$string_size %$string 1478 ****************** <3> expansion: string_size = 3 1478 <3> %if %$string_size > 15 1478 <3> %error Mnemonic %1 is too long! 1478 <3> %endif 1478 00000B49 137B <3> dw (%$currofs)<<4|%$string_size 1478 <3> %assign MN_%1 $ - mnlist 1478 ****************** <3> expansion: MN_RET = 2636 1478 00000B4B 524554 <3> db %$string 1478 <3> %pop 1479 000007B1 3DB3 <2> variant 0c3h, 0 1479 ****************** <2> expansion: ainfo = 15795 1479 ****************** <2> expansion: escaped = 61 1479 ****************** <2> expansion: escapes = 0 1480 000007B3 3D9C <2> variant 0c2h, 58 1480 ****************** <2> expansion: ainfo = 15772 1480 ****************** <2> expansion: escaped = 61 1480 ****************** <2> expansion: escapes = 0 1481 000007B5 FF <2> endvariant 1482 <2> mne RETF ; ofs=67Eh 1482 <3> %push 1482 <3> usesection ASMTABLE2, 1 1482 <3> %assign %$currofs $ - asmtab 1482 ****************** <3> expansion: currofs = 1974 1482 <3> %ifnempty %2 1482 <3> db %2 1482 <3> %endif 1482 <3> __SECT__ 1482 <3> %defstr %$string %1 1482 ****************** <3> expansion: string = 'RETF' 1482 <3> %strlen %$string_size %$string 1482 ****************** <3> expansion: string_size = 4 1482 <3> %if %$string_size > 15 1482 <3> %error Mnemonic %1 is too long! 1482 <3> %endif 1482 00000B4E 647B <3> dw (%$currofs)<<4|%$string_size 1482 <3> %assign MN_%1 $ - mnlist 1482 ****************** <3> expansion: MN_RETF = 2641 1482 00000B50 52455446 <3> db %$string 1482 <3> %pop 1483 000007B6 403B <2> variant 0cbh, 0 1483 ****************** <2> expansion: ainfo = 16443 1483 ****************** <2> expansion: escaped = 64 1483 ****************** <2> expansion: escapes = 0 1484 000007B8 4024 <2> variant 0cah, 58 1484 ****************** <2> expansion: ainfo = 16420 1484 ****************** <2> expansion: escaped = 64 1484 ****************** <2> expansion: escapes = 0 1485 000007BA FF <2> endvariant 1486 <2> 1487 <2> ; The following mnemonics require an operand size suffix. 1488 <2> 1489 <2> mnlist_o_suffix_required label near 1490 <2> 1491 <2> mne CMPS ; ofs=11Eh 1491 <3> %push 1491 <3> usesection ASMTABLE2, 1 1491 <3> %assign %$currofs $ - asmtab 1491 ****************** <3> expansion: currofs = 1979 1491 <3> %ifnempty %2 1491 <3> db %2 1491 <3> %endif 1491 <3> __SECT__ 1491 <3> %defstr %$string %1 1491 ****************** <3> expansion: string = 'CMPS' 1491 <3> %strlen %$string_size %$string 1491 ****************** <3> expansion: string_size = 4 1491 <3> %if %$string_size > 15 1491 <3> %error Mnemonic %1 is too long! 1491 <3> %endif 1491 00000B54 B47B <3> dw (%$currofs)<<4|%$string_size 1491 <3> %assign MN_%1 $ - mnlist 1491 ****************** <3> expansion: MN_CMPS = 2647 1491 00000B56 434D5053 <3> db %$string 1491 <3> %pop 1492 000007BB 34D7 <2> variant 0a7h, 0 1492 ****************** <2> expansion: ainfo = 13527 1492 ****************** <2> expansion: escaped = 52 1492 ****************** <2> expansion: escapes = 0 1493 000007BD FF <2> endvariant 1494 <2> mne INS ; ofs=394h 1494 <3> %push 1494 <3> usesection ASMTABLE2, 1 1494 <3> %assign %$currofs $ - asmtab 1494 ****************** <3> expansion: currofs = 1982 1494 <3> %ifnempty %2 1494 <3> db %2 1494 <3> %endif 1494 <3> __SECT__ 1494 <3> %defstr %$string %1 1494 ****************** <3> expansion: string = 'INS' 1494 <3> %strlen %$string_size %$string 1494 ****************** <3> expansion: string_size = 3 1494 <3> %if %$string_size > 15 1494 <3> %error Mnemonic %1 is too long! 1494 <3> %endif 1494 00000B5A E37B <3> dw (%$currofs)<<4|%$string_size 1494 <3> %assign MN_%1 $ - mnlist 1494 ****************** <3> expansion: MN_INS = 2653 1494 00000B5C 494E53 <3> db %$string 1494 <3> %pop 1495 000007BE F5227D <2> variant 06dh, 0, ASM_MACH1 1495 ****************** <2> expansion: ainfo = 8829 1495 ****************** <2> expansion: escaped = 34 1495 ****************** <2> expansion: escapes = 0 1496 000007C1 FF <2> endvariant 1497 <2> mne LODS ; ofs=4B6h 1497 <3> %push 1497 <3> usesection ASMTABLE2, 1 1497 <3> %assign %$currofs $ - asmtab 1497 ****************** <3> expansion: currofs = 1986 1497 <3> %ifnempty %2 1497 <3> db %2 1497 <3> %endif 1497 <3> __SECT__ 1497 <3> %defstr %$string %1 1497 ****************** <3> expansion: string = 'LODS' 1497 <3> %strlen %$string_size %$string 1497 ****************** <3> expansion: string_size = 4 1497 <3> %if %$string_size > 15 1497 <3> %error Mnemonic %1 is too long! 1497 <3> %endif 1497 00000B5F 247C <3> dw (%$currofs)<<4|%$string_size 1497 <3> %assign MN_%1 $ - mnlist 1497 ****************** <3> expansion: MN_LODS = 2658 1497 00000B61 4C4F4453 <3> db %$string 1497 <3> %pop 1498 000007C2 36BD <2> variant 0adh, 0 1498 ****************** <2> expansion: ainfo = 14013 1498 ****************** <2> expansion: escaped = 54 1498 ****************** <2> expansion: escapes = 0 1499 000007C4 FF <2> endvariant 1500 <2> mne MOVS ; ofs=5CEh 1500 <3> %push 1500 <3> usesection ASMTABLE2, 1 1500 <3> %assign %$currofs $ - asmtab 1500 ****************** <3> expansion: currofs = 1989 1500 <3> %ifnempty %2 1500 <3> db %2 1500 <3> %endif 1500 <3> __SECT__ 1500 <3> %defstr %$string %1 1500 ****************** <3> expansion: string = 'MOVS' 1500 <3> %strlen %$string_size %$string 1500 ****************** <3> expansion: string_size = 4 1500 <3> %if %$string_size > 15 1500 <3> %error Mnemonic %1 is too long! 1500 <3> %endif 1500 00000B65 547C <3> dw (%$currofs)<<4|%$string_size 1500 <3> %assign MN_%1 $ - mnlist 1500 ****************** <3> expansion: MN_MOVS = 2664 1500 00000B67 4D4F5653 <3> db %$string 1500 <3> %pop 1501 000007C5 3435 <2> variant 0a5h, 0 1501 ****************** <2> expansion: ainfo = 13365 1501 ****************** <2> expansion: escaped = 52 1501 ****************** <2> expansion: escapes = 0 1502 000007C7 FF <2> endvariant 1503 <2> mne OUTS ; ofs=606h 1503 <3> %push 1503 <3> usesection ASMTABLE2, 1 1503 <3> %assign %$currofs $ - asmtab 1503 ****************** <3> expansion: currofs = 1992 1503 <3> %ifnempty %2 1503 <3> db %2 1503 <3> %endif 1503 <3> __SECT__ 1503 <3> %defstr %$string %1 1503 ****************** <3> expansion: string = 'OUTS' 1503 <3> %strlen %$string_size %$string 1503 ****************** <3> expansion: string_size = 4 1503 <3> %if %$string_size > 15 1503 <3> %error Mnemonic %1 is too long! 1503 <3> %endif 1503 00000B6B 847C <3> dw (%$currofs)<<4|%$string_size 1503 <3> %assign MN_%1 $ - mnlist 1503 ****************** <3> expansion: MN_OUTS = 2670 1503 00000B6D 4F555453 <3> db %$string 1503 <3> %pop 1504 000007C8 F5231F <2> variant 06fh, 0, ASM_MACH1 1504 ****************** <2> expansion: ainfo = 8991 1504 ****************** <2> expansion: escaped = 35 1504 ****************** <2> expansion: escapes = 0 1505 000007CB FF <2> endvariant 1506 <2> mne SCAS ; ofs=6D4h 1506 <3> %push 1506 <3> usesection ASMTABLE2, 1 1506 <3> %assign %$currofs $ - asmtab 1506 ****************** <3> expansion: currofs = 1996 1506 <3> %ifnempty %2 1506 <3> db %2 1506 <3> %endif 1506 <3> __SECT__ 1506 <3> %defstr %$string %1 1506 ****************** <3> expansion: string = 'SCAS' 1506 <3> %strlen %$string_size %$string 1506 ****************** <3> expansion: string_size = 4 1506 <3> %if %$string_size > 15 1506 <3> %error Mnemonic %1 is too long! 1506 <3> %endif 1506 00000B71 C47C <3> dw (%$currofs)<<4|%$string_size 1506 <3> %assign MN_%1 $ - mnlist 1506 ****************** <3> expansion: MN_SCAS = 2676 1506 00000B73 53434153 <3> db %$string 1506 <3> %pop 1507 000007CC 375F <2> variant 0afh, 0 1507 ****************** <2> expansion: ainfo = 14175 1507 ****************** <2> expansion: escaped = 55 1507 ****************** <2> expansion: escapes = 0 1508 000007CE FF <2> endvariant 1509 <2> mne STOS ; ofs=779h 1509 <3> %push 1509 <3> usesection ASMTABLE2, 1 1509 <3> %assign %$currofs $ - asmtab 1509 ****************** <3> expansion: currofs = 1999 1509 <3> %ifnempty %2 1509 <3> db %2 1509 <3> %endif 1509 <3> __SECT__ 1509 <3> %defstr %$string %1 1509 ****************** <3> expansion: string = 'STOS' 1509 <3> %strlen %$string_size %$string 1509 ****************** <3> expansion: string_size = 4 1509 <3> %if %$string_size > 15 1509 <3> %error Mnemonic %1 is too long! 1509 <3> %endif 1509 00000B77 F47C <3> dw (%$currofs)<<4|%$string_size 1509 <3> %assign MN_%1 $ - mnlist 1509 ****************** <3> expansion: MN_STOS = 2682 1509 00000B79 53544F53 <3> db %$string 1509 <3> %pop 1510 000007CF 361B <2> variant 0abh, 0 1510 ****************** <2> expansion: ainfo = 13851 1510 ****************** <2> expansion: escaped = 54 1510 ****************** <2> expansion: escapes = 0 1511 000007D1 FF <2> endvariant 1512 <2> 1513 <2> end_mnlist label near 1514 <2> 1515 <2> ;--- Disassembler: compressed table of the opcode types. 1516 <2> ;--- If the item has the format OT(xx), it refers to table 'oplists'. 1517 <2> ;--- Otherwise it's an offset for internal table 'disjmp'. 1518 <2> 1519 <2> optypes label byte 1520 00000B7D 101011110D0D4C4C <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01),OT(40),OT(40) ; 00 - 07 (main opcode part) 1521 00000B85 101011110D0D4D02 <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01),OT(41), 002h ; 08 - 0f 1522 00000B8D 101011110D0D4E4E <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01),OT(42),OT(42) ; 10 - 17 1523 00000B95 101011110D0D4F4F <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01),OT(43),OT(43) ; 18 - 1f 1524 00000B9D 101011110D0D0A0C <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01), 00Ah,OT(00) ; 20 - 27 1525 00000BA5 101011110D0D0A0C <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01), 00Ah,OT(00) ; 28 - 2f 1526 00000BAD 101011110D0D0A0C <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01), 00Ah,OT(00) ; 30 - 37 1527 00000BB5 101011110D0D0A0C <2> db OT(04),OT(04),OT(05),OT(05),OT(01),OT(01), 00Ah,OT(00) ; 38 - 3f 1528 00000BBD 1D1D1D1D1D1D1D1D <2> db OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11) ; 40 - 47 1529 00000BC5 1D1D1D1D1D1D1D1D <2> db OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11) ; 48 - 4f 1530 00000BCD 1D1D1D1D1D1D1D1D <2> db OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11) ; 50 - 57 1531 00000BD5 1D1D1D1D1D1D1D1D <2> db OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11),OT(11) ; 58 - 5f 1532 00000BDD 0C0C13120A0A0A0A <2> db OT(00),OT(00),OT(07),OT(06), 00Ah, 00Ah, 00Ah, 00Ah ; 60 - 67 1533 00000BE5 412D422B0C0C0C0C <2> db OT(35),OT(21),OT(36),OT(1F),OT(00),OT(00),OT(00),OT(00) ; 68 - 6f 1534 00000BED 3333333333333333 <2> db OT(27),OT(27),OT(27),OT(27),OT(27),OT(27),OT(27),OT(27) ; 70 - 77 1535 00000BF5 3333333333333333 <2> db OT(27),OT(27),OT(27),OT(27),OT(27),OT(27),OT(27),OT(27) ; 78 - 7f 1536 00000BFD 0404000410101111 <2> db 004h, 004h, 000h, 004h,OT(04),OT(04),OT(05),OT(05) ; 80 - 87 1537 00000C05 1010111136133704 <2> db OT(04),OT(04),OT(05),OT(05),OT(2A),OT(07),OT(2B), 004h ; 88 - 8f 1538 00000C0D 0C4A4A4A4A4A4A4A <2> db OT(00),OT(3E),OT(3E),OT(3E),OT(3E),OT(3E),OT(3E),OT(3E) ; 90 - 97 1539 00000C15 0C0C190C0C0C0C0C <2> db OT(00),OT(00),OT(0D),OT(00),OT(00),OT(00),OT(00),OT(00) ; 98 - 9f 1540 00000C1D 383839390C0C0C0C <2> db OT(2C),OT(2C),OT(2D),OT(2D),OT(00),OT(00),OT(00),OT(00) ; a0 - a7 1541 00000C25 0D0D0C0C0C0C0C0C <2> db OT(01),OT(01),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00) ; a8 - af 1542 00000C2D 3A3A3A3A3A3A3A3A <2> db OT(2E),OT(2E),OT(2E),OT(2E),OT(2E),OT(2E),OT(2E),OT(2E) ; b0 - b7 1543 00000C35 3B3B3B3B3B3B3B3B <2> db OT(2F),OT(2F),OT(2F),OT(2F),OT(2F),OT(2F),OT(2F),OT(2F) ; b8 - bf 1544 00000C3D 0404460C13130404 <2> db 004h, 004h,OT(3A),OT(00),OT(07),OT(07), 004h, 004h ; c0 - c7 1545 00000C45 1E0C460C0C320C0C <2> db OT(12),OT(00),OT(3A),OT(00),OT(00),OT(26),OT(00),OT(00) ; c8 - cf 1546 00000C4D 040404043232000C <2> db 004h, 004h, 004h, 004h,OT(26),OT(26), 000h,OT(00) ; d0 - d7 1547 00000C55 0606060606060606 <2> db 006h, 006h, 006h, 006h, 006h, 006h, 006h, 006h ; d8 - df 1548 00000C5D 333333332F2F3E3E <2> db OT(27),OT(27),OT(27),OT(27),OT(23),OT(23),OT(32),OT(32) ; e0 - e7 1549 00000C65 1818193330303F3F <2> db OT(0C),OT(0C),OT(0D),OT(27),OT(24),OT(24),OT(33),OT(33) ; e8 - ef 1550 00000C6D 0A0C0A0A0C0C0404 <2> db 00Ah,OT(00), 00Ah, 00Ah,OT(00),OT(00), 004h, 004h ; f0 - f7 1551 00000C75 0C0C0C0C0C0C0404 <2> db OT(00),OT(00),OT(00),OT(00),OT(00),OT(00), 004h, 004h ; f8 - ff 1552 00000C7D 0E0E0E0E0E0E0E0E <2> db OT(02),OT(02),OT(02),OT(02),OT(02),OT(02),OT(02),OT(02) ; 100 - 107 (Intel group 1) 1553 00000C85 0F0F0F0F0F0F0F0F <2> db OT(03),OT(03),OT(03),OT(03),OT(03),OT(03),OT(03),OT(03) ; 108 - 10f 1554 00000C8D 4343434343430043 <2> db OT(37),OT(37),OT(37),OT(37),OT(37),OT(37), 000h,OT(37) ; 110 - 117 (Intel group 2) 1555 00000C95 4444444444440044 <2> db OT(38),OT(38),OT(38),OT(38),OT(38),OT(38), 000h,OT(38) ; 118 - 11f 1556 00000C9D 4545454545450045 <2> db OT(39),OT(39),OT(39),OT(39),OT(39),OT(39), 000h,OT(39) ; 120 - 127 (Intel group 2a) 1557 00000CA5 0E001C1C1C1C1C1C <2> db OT(02), 000h,OT(10),OT(10),OT(10),OT(10),OT(10),OT(10) ; 128 - 12f (Intel group 3) 1558 00000CAD 1C1C341A341A3400 <2> db OT(10),OT(10),OT(28),OT(0E),OT(28),OT(0E),OT(28), 000h ; 130 - 137 (Intel group 5) 1559 00000CB5 3435353535350000 <2> db OT(28),OT(29),OT(29),OT(29),OT(29),OT(29), 000h, 000h ; 138 - 13f (Intel group 6) 1560 00000CBD 2929292934003529 <2> db OT(1D),OT(1D),OT(1D),OT(1D),OT(28), 000h,OT(29),OT(1D) ; 140 - 147 (Intel group 7) 1561 00000CC5 1F1F1F1F1F1F1F1F <2> db OT(13),OT(13),OT(13),OT(13),OT(13),OT(13),OT(13),OT(13) ; 148 - 14f (Coprocessor d8) 1562 00000CCD 2121282821212121 <2> db OT(15),OT(15),OT(1C),OT(1C),OT(15),OT(15),OT(15),OT(15) ; 150 - 157 1563 00000CD5 1F001F1F29252925 <2> db OT(13), 000h,OT(13),OT(13),OT(1D),OT(19),OT(1D),OT(19) ; 158 - 15f (Coprocessor d9) 1564 00000CDD 2728080008080808 <2> db OT(1B),OT(1C), 008h, 000h, 008h, 008h, 008h, 008h ; 160 - 167 1565 00000CE5 2424242424242424 <2> db OT(18),OT(18),OT(18),OT(18),OT(18),OT(18),OT(18),OT(18) ; 168 - 16f (Coprocessor da) 1566 00000CED 2121212100080000 <2> db OT(15),OT(15),OT(15),OT(15), 000h, 008h, 000h, 000h ; 170 - 177 1567 00000CF5 2400242400260026 <2> db OT(18), 000h,OT(18),OT(18), 000h,OT(1A), 000h,OT(1A) ; 178 - 17f (Coprocessor db) 1568 00000CFD 2121212108282800 <2> db OT(15),OT(15),OT(15),OT(15), 008h,OT(1C),OT(1C), 000h ; 180 - 187 1569 00000D05 2020202020202020 <2> db OT(14),OT(14),OT(14),OT(14),OT(14),OT(14),OT(14),OT(14) ; 188 - 18f (Coprocessor dc) 1570 00000D0D 2222000022222222 <2> db OT(16),OT(16), 000h, 000h,OT(16),OT(16),OT(16),OT(16) ; 190 - 197 1571 00000D15 2000202029002925 <2> db OT(14), 000h,OT(14),OT(14),OT(1D), 000h,OT(1D),OT(19) ; 198 - 19f (Coprocessor dd) 1572 00000D1D 2700272728280000 <2> db OT(1B), 000h,OT(1B),OT(1B),OT(1C),OT(1C), 000h, 000h ; 1a0 - 1a7 1573 00000D25 2525252525252525 <2> db OT(19),OT(19),OT(19),OT(19),OT(19),OT(19),OT(19),OT(19) ; 1a8 - 1af (Coprocessor de) 1574 00000D2D 2323000823232323 <2> db OT(17),OT(17), 000h, 008h,OT(17),OT(17),OT(17),OT(17) ; 1b0 - 1b7 1575 00000D35 25002525261B261B <2> db OT(19), 000h,OT(19),OT(19),OT(1A),OT(0F),OT(1A),OT(0F) ; 1b8 - 1bf (Coprocessor df) 1576 00000D3D 0000000008282800 <2> db 000h, 000h, 000h, 000h, 008h,OT(1C),OT(1C), 000h ; 1c0 - 1c7 1577 00000D45 0C0C0C0C0C0C0C00 <2> db OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00), 000h ; 1c8 - 1cf (Coprocessor groups) 1578 00000D4D 0C0C0C0C0C0C0C0C <2> db OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00) ; 1d0 - 1d7 1579 00000D55 0C0C0C0C0C0C0C0C <2> db OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00) ; 1d8 - 1df 1580 <2> ;--- The rest of these are squeezed. 1581 00000D5D 00040414140C0C0C <2> db 0, 004h, 004h,OT(08),OT(08),OT(00),OT(00),OT(00) ;00 1582 00000D65 0C5254535556570C <2> db OT(00),OT(46),OT(48),OT(47),OT(49),OT(4A),OT(4B),OT(00) ;08 1583 00000D6D 0C0C141414141414 <2> db OT(00),OT(00),OT(08),OT(08),OT(08),OT(08),OT(08),OT(08) ;10 1584 00000D75 1414141414141414 <2> db OT(08),OT(08),OT(08),OT(08),OT(08),OT(08),OT(08),OT(08) ;18 1585 00000D7D 14145A5A5A5A5A5A <2> db OT(08),OT(08),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E) ;20 1586 00000D85 5A5A5A5A5A5A585A <2> db OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4C),OT(4E) ;28 1587 00000D8D 0404045A5A5A0C59 <2> db 004h, 004h, 004h,OT(4E),OT(4E),OT(4E),OT(00),OT(4D) ;30 1588 00000D95 5B18181818181818 <2> db OT(4F),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C) ;38 1589 00000D9D 1818181818181818 <2> db OT(0C),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C),OT(0C) ;40 1590 00000DA5 1847474747474747 <2> db OT(0C),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B) ;48 1591 00000DAD 4747474747474747 <2> db OT(3B),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B),OT(3B) ;50 1592 00000DB5 4750500C16484951 <2> db OT(3B),OT(44),OT(44),OT(00),OT(0A),OT(3C),OT(3D),OT(45) ;58 1593 00000DBD 510C164849141010 <2> db OT(45),OT(00),OT(0A),OT(3C),OT(3D),OT(08),OT(04),OT(04) ;60 1594 00000DC5 131613133C3D0C04 <2> db OT(07),OT(0A),OT(07),OT(07),OT(30),OT(31),OT(00), 004h ;68 1595 00000DCD 1614143C3D101004 <2> db OT(0A),OT(08),OT(08),OT(30),OT(31),OT(04),OT(04), 004h ;70 1596 00000DD5 1515151515151515 <2> db OT(09),OT(09),OT(09),OT(09),OT(09),OT(09),OT(09),OT(09) ;78 1597 00000DDD 5A5A5A5A5A5A5A5A <2> db OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E) ;80 1598 00000DE5 5A5A5A5A5A5A5A5A <2> db OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E) ;88 1599 00000DED 5A5A5A5A5A5A5A5A <2> db OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(4E) ;90 1600 00000DF5 5A5A5A5A5A0C1C1C <2> db OT(4E),OT(4E),OT(4E),OT(4E),OT(4E),OT(00),OT(10),OT(10) ;98 1601 00000DFD 46171717171B400E <2> db OT(3A),OT(0B),OT(0B),OT(0B),OT(0B),OT(0F),OT(34),OT(02) ;A0 1602 00000E05 5C5C5C5C5C5C5C5C <2> db OT(50),OT(50),OT(50),OT(50),OT(50),OT(50),OT(50),OT(50) ;A8 1603 00000E0D 0C0C0C0C0C0C0C0C <2> db OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00),OT(00) ;B0 1604 00000E15 0C0C0C0C2A <2> db OT(00),OT(00),OT(00),OT(00),OT(1E) 1605 <2> 1606 <2> P186 equ 1000h 1607 <2> P286 equ 2000h 1608 <2> P386 equ 3000h 1609 <2> P486 equ 4000h 1610 <2> P586 equ 5000h 1611 <2> P686 equ 6000h 1612 <2> 1613 <2> ;--- Disassembler: compressed table of additional information. 1614 <2> ;--- Bits 0-11 usually are the offset of the mnemonics table. 1615 <2> ;--- Bits 12-15 are the CPU which introduced this opcode. 1616 <2> 1617 <2> opinfo label word 1618 00000E1A 3600360036003600 <2> dw MN_ADD, MN_ADD, MN_ADD, MN_ADD ; 00 1619 00000E22 36003600D107CC07 <2> dw MN_ADD, MN_ADD, MN_PUSH, MN_POP ; 04 1620 00000E2A B707B707B707B707 <2> dw MN_OR, MN_OR, MN_OR, MN_OR ; 08 1621 00000E32 B707B707D107E001 <2> dw MN_OR, MN_OR, MN_PUSH, 01e0h ; 0c 1622 00000E3A 3100310031003100 <2> dw MN_ADC, MN_ADC, MN_ADC, MN_ADC ; 10 1623 00000E42 31003100D107CC07 <2> dw MN_ADC, MN_ADC, MN_PUSH, MN_POP ; 14 1624 00000E4A 5408540854085408 <2> dw MN_SBB, MN_SBB, MN_SBB, MN_SBB ; 18 1625 00000E52 54085408D107CC07 <2> dw MN_SBB, MN_SBB, MN_PUSH, MN_POP ; 1c 1626 00000E5A 3B003B003B003B00 <2> dw MN_AND, MN_AND, MN_AND, MN_AND ; 20 1627 00000E62 3B003B000100B701 <2> dw MN_AND, MN_AND, 0001h, MN_DAA ; 24 1628 00000E6A 6B096B096B096B09 <2> dw MN_SUB, MN_SUB, MN_SUB, MN_SUB ; 28 1629 00000E72 6B096B090101BC01 <2> dw MN_SUB, MN_SUB, 0101h, MN_DAS ; 2c 1630 00000E7A BF09BF09BF09BF09 <2> dw MN_XOR, MN_XOR, MN_XOR, MN_XOR ; 30 1631 00000E82 BF09BF0901021D00 <2> dw MN_XOR, MN_XOR, 0201h, MN_AAA ; 34 1632 00000E8A 8601860186018601 <2> dw MN_CMP, MN_CMP, MN_CMP, MN_CMP ; 38 1633 00000E92 8601860101032C00 <2> dw MN_CMP, MN_CMP, 0301h, MN_AAS ; 3c 1634 00000E9A D104D104D104D104 <2> dw MN_INC, MN_INC, MN_INC, MN_INC ; 40 1635 00000EA2 D104D104D104D104 <2> dw MN_INC, MN_INC, MN_INC, MN_INC ; 44 1636 00000EAA C901C901C901C901 <2> dw MN_DEC, MN_DEC, MN_DEC, MN_DEC ; 48 1637 00000EB2 C901C901C901C901 <2> dw MN_DEC, MN_DEC, MN_DEC, MN_DEC ; 4c 1638 00000EBA D107D107D107D107 <2> dw MN_PUSH, MN_PUSH, MN_PUSH, MN_PUSH ; 50 1639 00000EC2 D107D107D107D107 <2> dw MN_PUSH, MN_PUSH, MN_PUSH, MN_PUSH ; 54 1640 00000ECA CC07CC07CC07CC07 <2> dw MN_POP, MN_POP, MN_POP, MN_POP ; 58 1641 00000ED2 CC07CC07CC07CC07 <2> dw MN_POP, MN_POP, MN_POP, MN_POP ; 5c 1642 00000EDA 381A2C1A46104020 <2> dw P186 + MN_PUSHA, P186 + MN_POPA, P186 + MN_BOUND, P286 + MN_ARPL ; 60 1643 00000EE2 0134013510302030 <2> dw P386 + 0401h, P386 + 0501h, P386 + 0010h, P386 + 0020h ; 64 1644 00000EEA D117C714D117C714 <2> dw P186 + MN_PUSH, P186 + MN_IMUL, P186 + MN_PUSH, P186 + MN_IMUL ; 68 1645 00000EF2 D6145D1AC5176E1A <2> dw P186 + MN_INSB, P186 + MN_INS, P186 + MN_OUTSB, P186 + MN_OUTS ; 6c 1646 00000EFA 990585051F051A05 <2> dw MN_JO, MN_JNO, MN_JB, MN_JAE ; 70 1647 00000F02 AF05940523051605 <2> dw MN_JZ, MN_JNZ, MN_JBE, MN_JA ; 74 1648 00000F0A AB058F05A105A605 <2> dw MN_JS, MN_JNS, MN_JPE, MN_JPO ; 78 1649 00000F12 460541054A053D05 <2> dw MN_JL, MN_JGE, MN_JLE, MN_JG ; 7c 1650 00000F1A 0001000100000801 <2> dw 0100h, 0100h, 0000h, 0108h ; 80 1651 00000F22 70097009AC09AC09 <2> dw MN_TEST, MN_TEST, MN_XCHG, MN_XCHG ; 84 1652 00000F2A 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; 88 1653 00000F32 1006DC051006F802 <2> dw MN_MOV, MN_LEA, MN_MOV, 02f8h ; 8c 1654 00000F3A AD07AC09AC09AC09 <2> dw MN_NOP, MN_XCHG, MN_XCHG, MN_XCHG ; 90 1655 00000F42 AC09AC09AC09AC09 <2> dw MN_XCHG, MN_XCHG, MN_XCHG, MN_XCHG ; 94 1656 00000F4A 7700AD0171009109 <2> dw MN_CBW, MN_CWD, MN_CALL, MN_WAIT ; 98 1657 00000F52 3F0A320A1D08B805 <2> dw MN_PUSHF, MN_POPF, MN_SAHF, MN_LAHF ; 9c 1658 00000F5A 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; a0 1659 00000F62 8E07680A8B01570A <2> dw MN_MOVSB, MN_MOVS, MN_CMPSB, MN_CMPS ; a4 1660 00000F6A 700970095F097A0A <2> dw MN_TEST, MN_TEST, MN_STOSB, MN_STOS ; a8 1661 00000F72 FF05620A5908740A <2> dw MN_LODSB, MN_LODS, MN_SCASB, MN_SCAS ; ac 1662 00000F7A 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b0 1663 00000F82 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b4 1664 00000F8A 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; b8 1665 00000F92 1006100610061006 <2> dw MN_MOV, MN_MOV, MN_MOV, MN_MOV ; bc 1666 00000F9A 20012001460A460A <2> dw 0120h, 0120h, MN_RETN, MN_RETN ; c0 1667 00000FA2 CD05C30500030003 <2> dw MN_LES, MN_LDS, 0300h, 0300h ; c4 1668 00000FAA E819251A510A510A <2> dw P186 + MN_ENTER, P186 + MN_LEAVE, MN_RETF, MN_RETF ; c8 1669 00000FB2 F504DC0402051F0A <2> dw MN_INT3, MN_INT, MN_INTO, MN_IRET ; cc 1670 00000FBA 1001100118011801 <2> dw 0110h, 0110h, 0118h, 0118h ; d0 1671 00000FC2 270022000000B809 <2> dw MN_AAM, MN_AAD, 0000h, MN_XLATB ; d4 1672 00000FCA 4801580168017801 <2> dw 0148h, 0158h, 0168h, 0178h ; d8 1673 00000FD2 88019801A801B801 <2> dw 0188h, 0198h, 01a8h, 01b8h ; dc 1674 00000FDA D809CA09C4092C05 <2> dw MN_LOOPNZ, MN_LOOPZ, MN_LOOP, MN_JCXZ ; e0 1675 00000FE2 CD04CD04C007C007 <2> dw MN_IN, MN_IN, MN_OUT, MN_OUT ; e4 1676 00000FEA 7100B305B305B305 <2> dw MN_CALL, MN_JMP, MN_JMP, MN_JMP ; e8 1677 00000FF2 CD04CD04C007C007 <2> dw MN_IN, MN_IN, MN_OUT, MN_OUT ; ec 1678 00000FFA 0800E16402000600 <2> dw 0008h, P686 + MN_INT1, 0002h, 0006h ; f0 1679 00001002 BC04970028012801 <2> dw MN_HLT, MN_CMC, 0128h, 0128h ; f4 1680 0000100A 820050098C005A09 <2> dw MN_CLC, MN_STC, MN_CLI, MN_STI ; f8 1681 00001012 87005509E0023001 <2> dw MN_CLD, MN_STD, 02e0h, 0130h ; fc 1682 0000101A 3600B70731005408 <2> dw MN_ADD, MN_OR, MN_ADC, MN_SBB ; 100 1683 00001022 3B006B09BF098601 <2> dw MN_AND, MN_SUB, MN_XOR, MN_CMP ; 104 1684 0000102A 3600B70731005408 <2> dw MN_ADD, MN_OR, MN_ADC, MN_SBB ; 108 1685 00001032 3B006B09BF098601 <2> dw MN_AND, MN_SUB, MN_XOR, MN_CMP ; 10c 1686 0000103A E107E607D707DC07 <2> dw MN_ROL, MN_ROR, MN_RCL, MN_RCR ; 110 1687 00001042 4A084F0800002808 <2> dw MN_SHL, MN_SHR, 0000h, MN_SAR ; 114 1688 0000104A E107E607D707DC07 <2> dw MN_ROL, MN_ROR, MN_RCL, MN_RCR ; 118 1689 00001052 4A084F0800002808 <2> dw MN_SHL, MN_SHR, 0000h, MN_SAR ; 11c 1690 0000105A E117E617D717DC17 <2> dw P186 + MN_ROL, P186 + MN_ROR, P186 + MN_RCL, P186 + MN_RCR ; 120 1691 00001062 4A184F1800002818 <2> dw P186 + MN_SHL, P186 + MN_SHR, 0000h, P186 + MN_SAR ; 124 1692 0000106A 70090000B207A807 <2> dw MN_TEST, 0000h, MN_NOT, MN_NEG ; 128 1693 00001072 A307C704CE01C104 <2> dw MN_MUL, MN_IMUL, MN_DIV, MN_IDIV ; 12c 1694 0000107A D104C90171007100 <2> dw MN_INC, MN_DEC, MN_CALL, MN_CALL ; 130 1695 00001082 B305B305D1070000 <2> dw MN_JMP, MN_JMP, MN_PUSH, 0000h ; 134 1696 0000108A 44296629ED250B26 <2> dw P286 + MN_SLDT, P286 + MN_STR, P286 + MN_LLDT, P286 + MN_LTR ; 138 1697 00001092 85298B2900000000 <2> dw P286 + MN_VERR, P286 + MN_VERW, 0000h, 0000h ; 13c 1698 0000109A 2C293229E125E725 <2> dw P286 + MN_SGDT, P286 + MN_SIDT, P286 + MN_LGDT, P286 + MN_LIDT ; 140 1699 000010A2 4A290000F3250E45 <2> dw P286 + MN_SMSW, 0000h, P286 + MN_LMSW, P486 + MN_INVLPG ; 144 1700 000010AA EA019D039B02B002 <2> dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 148 1701 000010B2 36044A04DD02F102 <2> dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 14c 1702 000010BA EA019D039B02B002 <2> dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 150 1703 000010C2 36044A04DD02F102 <2> dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 154 1704 000010CA 560300000D041204 <2> dw MN_FLD, 0000h, MN_FST, MN_FSTP ; 158 1705 000010D2 EF099503160A1F04 <2> dw MN_FLDENV, MN_FNLDCW, MN_FNSTENV, MN_FNSTCW ; 15c 1706 000010DA 56039D0420030000 <2> dw MN_FLD, MN_FXCH, 0320h, 0000h ; 160 1707 000010E2 2803C801D001D801 <2> dw 0328h, 01c8h, 01d0h, 01d8h ; 164 1708 000010EA F701AA031C032303 <2> dw MN_FIADD, MN_FIMUL, MN_FICOM, MN_FICOMP ; 168 1709 000010F2 43045904EA020003 <2> dw MN_FISUB, MN_FISUBR, MN_FIDIV, MN_FIDIVR ; 16c 1710 000010FA 3162426239628B62 <2> dw P686 + MN_FCMOVB, P686 + MN_FCMOVE, P686 + MN_FCMOVBE, P686 + MN_FCMOVU ; 170 1711 00001102 0000300300000000 <2> dw 0000h, 0330h, 0000h, 0000h ; 174 1712 0000110A 2B03000049034F03 <2> dw MN_FILD, 0000h, MN_FIST, MN_FISTP ; 178 1713 00001112 0000560300001204 <2> dw 0000h, MN_FLD, 0000h, MN_FSTP ; 17c 1714 0000111A 5D62706266627962 <2> dw P686 + MN_FCMOVNB, P686 + MN_FCMOVNE, P686 + MN_FCMOVNBE, P686 + MN_FCMOVNU ; 180 1715 00001122 38036E64A1620000 <2> dw 0338h, P686 + MN_FUCOMI, P686 + MN_FCOMI, 0000h ; 184 1716 0000112A EA019D039B02B002 <2> dw MN_FADD, MN_FMUL, MN_FCOM, MN_FCOMP ; 188 1717 00001132 36044A04DD02F102 <2> dw MN_FSUB, MN_FSUBR, MN_FDIV, MN_FDIVR ; 18c 1718 0000113A EA019D0300000000 <2> dw MN_FADD, MN_FMUL, 0000h, 0000h ; 190 1719 00001142 4A043604F102DD02 <2> dw MN_FSUBR, MN_FSUB, MN_FDIVR, MN_FDIV ; 194 1720 0000114A 560300000D041204 <2> dw MN_FLD, 0000h, MN_FST, MN_FSTP ; 198 1721 00001152 F7090000060A2E04 <2> dw MN_FRSTOR, 0000h, MN_FNSAVE, MN_FNSTSW ; 19c 1722 0000115A 150300000D041204 <2> dw MN_FFREE, 0000h, MN_FST, MN_FSTP ; 1a0 1723 00001162 67347F3400000000 <2> dw P386 + MN_FUCOM, P386 + MN_FUCOMP, 0000h, 0000h ; 1a4 1724 0000116A F701AA031C032303 <2> dw MN_FIADD, MN_FIMUL, MN_FICOM, MN_FICOMP ; 1a8 1725 00001172 43045904EA020003 <2> dw MN_FISUB, MN_FISUBR, MN_FIDIV, MN_FIDIVR ; 1ac 1726 0000117A F001A30300004003 <2> dw MN_FADDP, MN_FMULP, 0000h, 0340h ; 1b0 1727 00001182 51043C04F802E302 <2> dw MN_FSUBRP, MN_FSUBP, MN_FDIVRP, MN_FDIVP ; 1b4 1728 0000118A 2B03000049034F03 <2> dw MN_FILD, 0000h, MN_FIST, MN_FISTP ; 1b8 1729 00001192 FE012B0304024F03 <2> dw MN_FBLD, MN_FILD, MN_FBSTP, MN_FISTP ; 1bc 1730 0000119A 0000000000000000 <2> dw 0000h, 0000h, 0000h, 0000h ; 1c0 1731 000011A2 48037664A8620000 <2> dw 0348h, P686 + MN_FUCOMIP, P686 + MN_FCOMIP, 0000h ; 1c4 1732 000011AA 5B03610369037103 <2> dw MN_FLD1, MN_FLDL2T, MN_FLDL2E, MN_FLDPI ; 1c8 1733 000011B2 7803800388030000 <2> dw MN_FLDLG2, MN_FLDLN2, MN_FLDZ, 0000h ; 1cc 1734 000011BA DD01AC04CE03B703 <2> dw MN_F2XM1, MN_FYL2X, MN_FPTAN, MN_FPATAN ; 1d0 1735 000011C2 A304C633C5023103 <2> dw MN_FXTRACT, P386 + MN_FPREM1, MN_FDECSTP, MN_FINCSTP ; 1d4 1736 000011CA BF03B3040604FD33 <2> dw MN_FPREM, MN_FYL2XP1, MN_FSQRT, P386 + MN_FSINCOS ; 1d8 1737 000011D2 D503DE03F733BF32 <2> dw MN_FRNDINT, MN_FSCALE, P386 + MN_FSIN, P386 + MN_FCOS ; 1dc 1738 <2> ;--- The rest of these are squeezed. 1739 000011DA 000038014001BE25 <2> dw 0, 0138h, 0140h, P286 + MN_LAR ;00 1740 000011E2 0626912008459749 <2> dw P286 + MN_LSL, P286 + MN_CLTS, P486 + MN_INVD, P486 + MN_WBINVD ;04 1741 000011EA 8019103610361036 <2> dw P186 + MN_UD2, P386 + MN_MOV, P386 + MN_MOV, P386 + MN_MOV ;08 1742 000011F2 1036103610369F59 <2> dw P386 + MN_MOV, P386 + MN_MOV, P386 + MN_MOV, P586 + MN_WRMSR ;0C 1743 000011FA F257EB575A613A61 <2> dw P586 + MN_RDTSC, P586 + MN_RDMSR, P686 + MN_CMOVO, P686 + MN_CMOVNO ;10 1744 00001202 AB60A3607F615261 <2> dw P686 + MN_CMOVB, P686 + MN_CMOVAE, P686 + MN_CMOVZ, P686 + MN_CMOVNZ ;14 1745 0000120A B2609C6078614A61 <2> dw P686 + MN_CMOVBE, P686 + MN_CMOVA, P686 + MN_CMOVS, P686 + MN_CMOVNS ;18 1746 00001212 68617061D760CF60 <2> dw P686 + MN_CMOVPE, P686 + MN_CMOVPO, P686 + MN_CMOVL, P686 + MN_CMOVGE ;1C 1747 0000121A DE60C86067577257 <2> dw P686 + MN_CMOVLE, P686 + MN_CMOVG, P586 + MN_PUNPCKLBW, P586 + MN_PUNPCKLWD ;20 1748 00001222 7D572B569E56A756 <2> dw P586 + MN_PUNPCKLDQ, P586 + MN_PACKSSWB, P586 + MN_PCMPGTB, P586 + MN_PCMPGTW ;24 1749 0000122A B056355646575157 <2> dw P586 + MN_PCMPGTD, P586 + MN_PACKUSWB, P586 + MN_PUNPCKHBW, P586 + MN_PUNPCKHWD ;28 1750 00001232 5C57215615561B56 <2> dw P586 + MN_PUNPCKHDQ, P586 + MN_PACKSSDW, P586 + MN_MOVD, P586 + MN_MOVQ ;2C 1751 0000123A 0803100318038356 <2> dw 0308h, 0310h, 0318h, P586 + MN_PCMPEQB ;30 1752 00001242 8C569556D7511556 <2> dw P586 + MN_PCMPEQW, P586 + MN_PCMPEQD, P586 + MN_EMMS, P586 + MN_MOVD ;34 1753 0000124A 1B56993585351F35 <2> dw P586 + MN_MOVQ, P386 + MN_JO, P386 + MN_JNO, P386 + MN_JB ;38 1754 00001252 1A35AF3594352335 <2> dw P386 + MN_JAE, P386 + MN_JZ, P386 + MN_JNZ, P386 + MN_JBE ;3C 1755 0000125A 1635AB358F35A135 <2> dw P386 + MN_JA, P386 + MN_JS, P386 + MN_JNS, P386 + MN_JPE ;40 1756 00001262 A635463541354A35 <2> dw P386 + MN_JPO, P386 + MN_JL, P386 + MN_JGE, P386 + MN_JLE ;44 1757 0000126A 3D350639EA386D38 <2> dw P386 + MN_JG, P386 + MN_SETO, P386 + MN_SETNO, P386 + MN_SETB ;48 1758 00001272 66382639FF387338 <2> dw P386 + MN_SETAE, P386 + MN_SETZ, P386 + MN_SETNZ, P386 + MN_SETBE ;4C 1759 0000127A 60382039F8381239 <2> dw P386 + MN_SETA, P386 + MN_SETS, P386 + MN_SETNS, P386 + MN_SETPE ;50 1760 00001282 193993388C389938 <2> dw P386 + MN_SETPO, P386 + MN_SETL, P386 + MN_SETGE, P386 + MN_SETLE ;54 1761 0000128A 8638D137CC37A651 <2> dw P386 + MN_SETG, P386 + MN_PUSH, P386 + MN_POP, P586 + MN_CPUID ;58 1762 00001292 5E3038393839D137 <2> dw P386 + MN_BT, P386 + MN_SHLD, P386 + MN_SHLD, P386 + MN_PUSH ;5C 1763 0000129A CC3718586C303E39 <2> dw P386 + MN_POP, P586 + MN_RSM, P386 + MN_BTS, P386 + MN_SHRD ;60 1764 000012A2 3E39C73492419241 <2> dw P386 + MN_SHRD, P386 + MN_IMUL, P486 + MN_CMPXCHG, P486 + MN_CMPXCHG ;64 1765 000012AA C8356730D235D735 <2> dw P386 + MN_LSS, P386 + MN_BTR, P386 + MN_LFS, P386 + MN_LGS ;68 1766 000012B2 9C379C377B19E802 <2> dw P386 + MN_MOVZX, P386 + MN_MOVZX, P186 + MN_UD1, 02e8h ;6C 1767 000012BA 62304D3052309537 <2> dw P386 + MN_BTC, P386 + MN_BSF, P386 + MN_BSR, P386 + MN_MOVSX ;70 1768 000012C2 9537A649A649F002 <2> dw P386 + MN_MOVSX, P486 + MN_XADD, P486 + MN_XADD, 02f0h ;74 1769 000012CA 5740574057405740 <2> dw P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP ;78 1770 000012D2 5740574057405740 <2> dw P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP, P486 + MN_BSWAP ;7C 1771 000012DA FA5601570857CA56 <2> dw P586 + MN_PSRLW, P586 + MN_PSRLD, P586 + MN_PSRLQ, P586 + MN_PMULLW ;80 1772 000012E2 34573D5776566456 <2> dw P586 + MN_PSUBUSB, P586 + MN_PSUBUSW, P586 + MN_PAND, P586 + MN_PADDUSB ;84 1773 000012EA 6D567C56EC56F356 <2> dw P586 + MN_PADDUSW, P586 + MN_PANDN, P586 + MN_PSRAW, P586 + MN_PSRAD ;88 1774 000012F2 C25624572C57D256 <2> dw P586 + MN_PMULHW, P586 + MN_PSUBSB, P586 + MN_PSUBSW, P586 + MN_POR ;8C 1775 000012FA 54565C568857D756 <2> dw P586 + MN_PADDSB, P586 + MN_PADDSW, P586 + MN_PXOR, P586 + MN_PSLLW ;90 1776 00001302 DE56E556B9560F57 <2> dw P586 + MN_PSLLD, P586 + MN_PSLLQ, P586 + MN_PMADDWD, P586 + MN_PSUBB ;94 1777 0000130A 16571D573F564656 <2> dw P586 + MN_PSUBW, P586 + MN_PSUBD, P586 + MN_PADDB, P586 + MN_PADDW ;98 1778 00001312 4D567619D104C901 <2> dw P586 + MN_PADDD, P186 + MN_UD0, MN_INC, MN_DEC ;9C 1779 0000131A 16005E306C306730 <2> dw MN_BOXCB, P386 + MN_BT, P386 + MN_BTS, P386 + MN_BTR ;A0 1780 00001322 62309B51CC071006 <2> dw P386 + MN_BTC, P586 + MN_CMPXCHG8B, MN_POP, MN_MOV ;A4 1781 0000132A FA56EC56D7560157 <2> dw P586 + MN_PSRLW, P586 + MN_PSRAW, P586 + MN_PSLLW, P586 + MN_PSRLD ;A8 1782 00001332 F356DE560857E556 <2> dw P586 + MN_PSRAD, P586 + MN_PSLLD, P586 + MN_PSRLQ, P586 + MN_PSLLQ ;AC 1783 0000133A B1030B02E4016104 <2> dw MN_FNOP, MN_FCHS, MN_FABS, MN_FTST ;B0 1784 00001342 970487340E03D502 <2> dw MN_FXAM, P386 + MN_FUCOMPP, MN_FNENI, MN_FNDISI ;B4 1785 0000134A 18024103EE23B702 <2> dw MN_FNCLEX, MN_FNINIT, P286 + MN_FNSETPM, MN_FCOMPP ;B8 1786 00001352 2E04 <2> dw MN_FNSTSW 1787 <2> 1788 <2> ;--- Disassembler: table converts unsqueezed numbers to squeezed. 1789 <2> 1790 <2> sqztab label byte 1791 00001354 0102030400000500 <2> db 1, 2, 3, 4, 0, 0, 5, 0 ;1E0 1792 0000135C 0607000800000000 <2> db 6, 7, 0, 8, 0, 0, 0, 0 ;1E8 1793 00001364 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;1F0 1794 0000136C 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;1F8 1795 00001374 090A0B0C0D000E00 <2> db 9, 10, 11, 12, 13, 0, 14, 0 ;200 1796 0000137C 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;208 1797 00001384 0F10110000000000 <2> db 15, 16, 17, 0, 0, 0, 0, 0 ;210 1798 0000138C 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;218 1799 00001394 1213141516171819 <2> db 18, 19, 20, 21, 22, 23, 24, 25 ;220 1800 0000139C 1A1B1C1D1E1F2021 <2> db 26, 27, 28, 29, 30, 31, 32, 33 ;228 1801 000013A4 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;230 1802 000013AC 0000000000000000 <2> db 0, 0, 0, 0, 0, 0, 0, 0 ;238 1803 000013B4 2223242526272829 <2> db 34, 35, 36, 37, 38, 39, 40, 41 ;240 1804 000013BC 2A2B2C2D00002E2F <2> db 42, 43, 44, 45, 0, 0, 46, 47 ;248 1805 000013C4 0030313233343536 <2> db 0, 48, 49, 50, 51, 52, 53, 54 ;250 1806 000013CC 0000000000003738 <2> db 0, 0, 0, 0, 0, 0, 55, 56 ;258 1807 000013D4 393A3B3C3D3E3F40 <2> db 57, 58, 59, 60, 61, 62, 63, 64 ;260 1808 000013DC 4142434445464748 <2> db 65, 66, 67, 68, 69, 70, 71, 72 ;268 1809 000013E4 494A4B4C4D4E4F50 <2> db 73, 74, 75, 76, 77, 78, 79, 80 ;270 1810 000013EC 5152535455565758 <2> db 81, 82, 83, 84, 85, 86, 87, 88 ;278 1811 000013F4 595A5B5C5D5E0000 <2> db 89, 90, 91, 92, 93, 94, 0, 0 ;280 1812 000013FC 5F60616263640065 <2> db 95, 96, 97, 98, 99,100, 0,101 ;288 1813 00001404 666768696A6B6C6D <2> db 102,103,104,105,106,107,108,109 ;290 1814 0000140C 006E6F7071727374 <2> db 0,110,111,112,113,114,115,116 ;298 1815 00001414 7576000000000077 <2> db 117,118, 0, 0, 0, 0, 0,119 ;2A0 1816 0000141C 78797A7B7C7D7E7F <2> db 120,121,122,123,124,125,126,127 ;2A8 1817 00001424 0080818200830000 <2> db 0,128,129,130, 0,131, 0, 0 ;2B0 1818 0000142C 8485008687880089 <2> db 132,133, 0,134,135,136, 0,137 ;2B8 1819 00001434 008A8B00008C0000 <2> db 0,138,139, 0, 0,140, 0, 0 ;2C0 1820 0000143C 8D8E008F90910092 <2> db 141,142, 0,143,144,145, 0,146 ;2C8 1821 00001444 0093949500960000 <2> db 0,147,148,149, 0,150, 0, 0 ;2D0 1822 0000144C 979899009A9B9C9D <2> db 151,152,153, 0,154,155,156,157 ;2D8 1823 00001454 9E9F0000000000A0 <2> db 158,159, 0, 0, 0, 0, 0,160 ;2E0 1824 0000145C 00000000A1A2A3A4 <2> db 0, 0, 0, 0,161,162,163,164 ;2E8 1825 00001464 00A5000000000000 <2> db 0,165, 0, 0, 0, 0, 0, 0 ;2F0 1826 0000146C A600000000000000 <2> db 166, 0, 0, 0, 0, 0, 0, 0 ;2F8 1827 00001474 A700000000000000 <2> db 167, 0, 0, 0, 0, 0, 0, 0 ;300 1828 0000147C 0000A800A900AA00 <2> db 0, 0,168, 0,169, 0,170, 0 ;308 1829 00001484 0000AB00AC00AD00 <2> db 0, 0,171, 0,172, 0,173, 0 ;310 1830 0000148C 0000AE000000AF00 <2> db 0, 0,174, 0, 0, 0,175, 0 ;318 1831 00001494 B000000000000000 <2> db 176, 0, 0, 0, 0, 0, 0, 0 ;320 1832 0000149C B1B20000B3B40000 <2> db 177,178, 0, 0,179,180, 0, 0 ;328 1833 000014A4 00B5000000000000 <2> db 0,181, 0, 0, 0, 0, 0, 0 ;330 1834 000014AC B6B7B8B9BA000000 <2> db 182,183,184,185,186, 0, 0, 0 ;338 1835 000014B4 00BB000000000000 <2> db 0,187, 0, 0, 0, 0, 0, 0 ;340 1836 000014BC BC00000000000000 <2> db 188, 0, 0, 0, 0, 0, 0, 0 ;348 1837 <2> 1838 <2> ;--- Disassembler: table of mnemonics that change in the presence of a WAIT 1839 <2> ;--- instruction. 1840 <2> 1841 000014C4 3A03390338033B035D- <2> wtab1 dw 033ah,0339h,0338h,033bh,015dh,019eh,033ch,015fh 1841 000014CD 019E013C035F01 <2> 1842 000014D4 5E0148039F01 <2> dw 015eh,0348h,019fh 1843 <2> wtab2 label word 1844 000014DA 1102 <2> dw MN_FCLEX 1845 000014DC CE02 <2> dw MN_FDISI 1846 000014DE 0803 <2> dw MN_FENI 1847 000014E0 3A03 <2> dw MN_FINIT 1848 000014E2 8E03 <2> dw MN_FLDCW 1849 000014E4 FF09 <2> dw MN_FSAVE 1850 000014E6 E603 <2> dw MN_FSETPM 1851 000014E8 1804 <2> dw MN_FSTCW 1852 000014EA 0E0A <2> dw MN_FSTENV 1853 000014EC 2704 <2> dw MN_FSTSW 1854 000014EE 2704 <2> dw MN_FSTSW 1855 <2> N_WTAB equ ($ - wtab2) / 2 1856 <2> 1857 <2> ;--- Disassembler: table for operands which have a different mnemonic for 1858 <2> ;--- their 32 bit versions (66h prefix). 1859 <2> 1860 000014F0 98009900 <2> ltabo1 dw 098h,099h 1861 <2> ltabo2 label word 1862 000014F4 7C00 <2> dw MN_CWDE 1863 000014F6 B201 <2> dw MN_CDQ 1864 <2> N_LTABO equ ($ - ltabo2) / 2 1865 <2> 1866 <2> ;--- Disassembler: table for operands which have a different mnemonic for 1867 <2> ;--- their 32 bit versions (67h prefix). 1868 <2> 1869 000014F8 E300 <2> ltaba1 dw 0e3h 1870 <2> ltaba2 label word 1871 000014FA 3205 <2> dw MN_JECXZ 1872 <2> N_LTABA equ ($ - ltaba2) / 2 1873 <2> 1874 <2> ;--- Disassembler: table of lockable instructions 1875 <2> 1876 <2> locktab label word 1877 000014FC 0A0102011000110008- <2> dw 010ah,0102h,010h,011h,0108h,0100h,00h,01h 1877 00001505 01000100000100 <2> 1878 0000150C 0C010401200021009B- <2> dw 010ch,0104h,020h,021h,029bh,02efh,0293h,02eeh 1878 00001515 02EF029302EE02 <2> 1879 0000151C 8B02ED0290029102E1- <2> dw 028bh,02edh,0290h,0291h,02e1h,0131h,02e0h,0130h 1879 00001525 023101E0023001 <2> 1880 0000152C 2B012A010901010108- <2> dw 012bh,012ah,0109h,0101h,08h,09h,010bh,0103h 1880 00001535 0009000B010301 <2> 1881 0000153C 180019000D01050128- <2> dw 018h,019h,010dh,0105h,028h,029h,02a0h,02a1h 1881 00001545 002900A002A102 <2> 1882 0000154C 860087000E01060130- <2> dw 086h,087h,010eh,0106h,030h,031h 1882 00001555 003100 <2> 1883 <2> N_LOCK equ ($ - locktab) / 2 1884 <2> 1885 <2> ;--- Equates used in the assembly-language code. 1886 <2> 1887 <2> SPARSE_BASE equ 01e0h 1888 <2> SFPGROUP3 equ 0338h 1889 <2> 348 <1> [list +] 349 <1> opindex: 350 <1> [list -] 350 ****************** <1> expansion: i = 0 350 ****************** <1> expansion: label = "OPLIST_" 350 ****************** <1> expansion: digit = 0 350 ****************** <1> expansion: label = 'OPLIST_0' 350 ****************** <1> expansion: digit = 0 350 ****************** <1> expansion: label = 'OPLIST_00' 350 ****************** <1> expansion: label = OPLIST_00 366 00001558 00 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 1 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_01' 366 ****************** <2> expansion: label = OPLIST_01 366 00001559 00 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 2 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_02' 366 ****************** <2> expansion: label = OPLIST_02 366 0000155A 02 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 3 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_03' 366 ****************** <2> expansion: label = OPLIST_03 366 0000155B 04 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 4 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_04' 366 ****************** <2> expansion: label = OPLIST_04 366 0000155C 06 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 5 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_05' 366 ****************** <2> expansion: label = OPLIST_05 366 0000155D 08 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 6 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 6 366 ****************** <2> expansion: label = 'OPLIST_06' 366 ****************** <2> expansion: label = OPLIST_06 366 0000155E 0A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 7 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 7 366 ****************** <2> expansion: label = 'OPLIST_07' 366 ****************** <2> expansion: label = OPLIST_07 366 0000155F 0C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 8 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 8 366 ****************** <2> expansion: label = 'OPLIST_08' 366 ****************** <2> expansion: label = OPLIST_08 366 00001560 0E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 9 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 9 366 ****************** <2> expansion: label = 'OPLIST_09' 366 ****************** <2> expansion: label = OPLIST_09 366 00001561 10 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 10 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 10 366 ****************** <2> expansion: label = 'OPLIST_0A' 366 ****************** <2> expansion: label = OPLIST_0A 366 00001562 11 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 11 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 11 366 ****************** <2> expansion: label = 'OPLIST_0B' 366 ****************** <2> expansion: label = OPLIST_0B 366 00001563 13 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 12 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 12 366 ****************** <2> expansion: label = 'OPLIST_0C' 366 ****************** <2> expansion: label = OPLIST_0C 366 00001564 15 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 13 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 13 366 ****************** <2> expansion: label = 'OPLIST_0D' 366 ****************** <2> expansion: label = OPLIST_0D 366 00001565 16 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 14 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 14 366 ****************** <2> expansion: label = 'OPLIST_0E' 366 ****************** <2> expansion: label = OPLIST_0E 366 00001566 17 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 15 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_0' 366 ****************** <2> expansion: digit = 15 366 ****************** <2> expansion: label = 'OPLIST_0F' 366 ****************** <2> expansion: label = OPLIST_0F 366 00001567 18 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 16 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_10' 366 ****************** <2> expansion: label = OPLIST_10 366 00001568 19 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 17 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_11' 366 ****************** <2> expansion: label = OPLIST_11 366 00001569 1A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 18 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_12' 366 ****************** <2> expansion: label = OPLIST_12 366 0000156A 1B <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 19 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_13' 366 ****************** <2> expansion: label = OPLIST_13 366 0000156B 1D <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 20 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_14' 366 ****************** <2> expansion: label = OPLIST_14 366 0000156C 1E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 21 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_15' 366 ****************** <2> expansion: label = OPLIST_15 366 0000156D 1F <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 22 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 6 366 ****************** <2> expansion: label = 'OPLIST_16' 366 ****************** <2> expansion: label = OPLIST_16 366 0000156E 21 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 23 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 7 366 ****************** <2> expansion: label = 'OPLIST_17' 366 ****************** <2> expansion: label = OPLIST_17 366 0000156F 23 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 24 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 8 366 ****************** <2> expansion: label = 'OPLIST_18' 366 ****************** <2> expansion: label = OPLIST_18 366 00001570 26 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 25 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 9 366 ****************** <2> expansion: label = 'OPLIST_19' 366 ****************** <2> expansion: label = OPLIST_19 366 00001571 27 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 26 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 10 366 ****************** <2> expansion: label = 'OPLIST_1A' 366 ****************** <2> expansion: label = OPLIST_1A 366 00001572 28 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 27 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 11 366 ****************** <2> expansion: label = 'OPLIST_1B' 366 ****************** <2> expansion: label = OPLIST_1B 366 00001573 29 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 28 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 12 366 ****************** <2> expansion: label = 'OPLIST_1C' 366 ****************** <2> expansion: label = OPLIST_1C 366 00001574 2A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 29 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 13 366 ****************** <2> expansion: label = 'OPLIST_1D' 366 ****************** <2> expansion: label = OPLIST_1D 366 00001575 2C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 30 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 14 366 ****************** <2> expansion: label = 'OPLIST_1E' 366 ****************** <2> expansion: label = OPLIST_1E 366 00001576 2D <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 31 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_1' 366 ****************** <2> expansion: digit = 15 366 ****************** <2> expansion: label = 'OPLIST_1F' 366 ****************** <2> expansion: label = OPLIST_1F 366 00001577 2E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 32 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_20' 366 ****************** <2> expansion: label = OPLIST_20 366 00001578 31 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 33 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_21' 366 ****************** <2> expansion: label = OPLIST_21 366 00001579 34 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 34 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_22' 366 ****************** <2> expansion: label = OPLIST_22 366 0000157A 37 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 35 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_23' 366 ****************** <2> expansion: label = OPLIST_23 366 0000157B 3A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 36 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_24' 366 ****************** <2> expansion: label = OPLIST_24 366 0000157C 3C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 37 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_25' 366 ****************** <2> expansion: label = OPLIST_25 366 0000157D 3E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 38 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 6 366 ****************** <2> expansion: label = 'OPLIST_26' 366 ****************** <2> expansion: label = OPLIST_26 366 0000157E 3F <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 39 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 7 366 ****************** <2> expansion: label = 'OPLIST_27' 366 ****************** <2> expansion: label = OPLIST_27 366 0000157F 40 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 40 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 8 366 ****************** <2> expansion: label = 'OPLIST_28' 366 ****************** <2> expansion: label = OPLIST_28 366 00001580 41 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 41 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 9 366 ****************** <2> expansion: label = 'OPLIST_29' 366 ****************** <2> expansion: label = OPLIST_29 366 00001581 42 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 42 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 10 366 ****************** <2> expansion: label = 'OPLIST_2A' 366 ****************** <2> expansion: label = OPLIST_2A 366 00001582 43 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 43 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 11 366 ****************** <2> expansion: label = 'OPLIST_2B' 366 ****************** <2> expansion: label = OPLIST_2B 366 00001583 45 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 44 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 12 366 ****************** <2> expansion: label = 'OPLIST_2C' 366 ****************** <2> expansion: label = OPLIST_2C 366 00001584 47 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 45 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 13 366 ****************** <2> expansion: label = 'OPLIST_2D' 366 ****************** <2> expansion: label = OPLIST_2D 366 00001585 49 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 46 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 14 366 ****************** <2> expansion: label = 'OPLIST_2E' 366 ****************** <2> expansion: label = OPLIST_2E 366 00001586 4B <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 47 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_2' 366 ****************** <2> expansion: digit = 15 366 ****************** <2> expansion: label = 'OPLIST_2F' 366 ****************** <2> expansion: label = OPLIST_2F 366 00001587 4D <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 48 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_30' 366 ****************** <2> expansion: label = OPLIST_30 366 00001588 4F <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 49 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_31' 366 ****************** <2> expansion: label = OPLIST_31 366 00001589 52 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 50 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_32' 366 ****************** <2> expansion: label = OPLIST_32 366 0000158A 55 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 51 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_33' 366 ****************** <2> expansion: label = OPLIST_33 366 0000158B 57 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 52 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_34' 366 ****************** <2> expansion: label = OPLIST_34 366 0000158C 59 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 53 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_35' 366 ****************** <2> expansion: label = OPLIST_35 366 0000158D 5A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 54 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 6 366 ****************** <2> expansion: label = 'OPLIST_36' 366 ****************** <2> expansion: label = OPLIST_36 366 0000158E 5C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 55 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 7 366 ****************** <2> expansion: label = 'OPLIST_37' 366 ****************** <2> expansion: label = OPLIST_37 366 0000158F 5E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 56 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 8 366 ****************** <2> expansion: label = 'OPLIST_38' 366 ****************** <2> expansion: label = OPLIST_38 366 00001590 60 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 57 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 9 366 ****************** <2> expansion: label = 'OPLIST_39' 366 ****************** <2> expansion: label = OPLIST_39 366 00001591 62 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 58 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 10 366 ****************** <2> expansion: label = 'OPLIST_3A' 366 ****************** <2> expansion: label = OPLIST_3A 366 00001592 64 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 59 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 11 366 ****************** <2> expansion: label = 'OPLIST_3B' 366 ****************** <2> expansion: label = OPLIST_3B 366 00001593 65 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 60 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 12 366 ****************** <2> expansion: label = 'OPLIST_3C' 366 ****************** <2> expansion: label = OPLIST_3C 366 00001594 66 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 61 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 13 366 ****************** <2> expansion: label = 'OPLIST_3D' 366 ****************** <2> expansion: label = OPLIST_3D 366 00001595 69 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 62 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 14 366 ****************** <2> expansion: label = 'OPLIST_3E' 366 ****************** <2> expansion: label = OPLIST_3E 366 00001596 6C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 63 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_3' 366 ****************** <2> expansion: digit = 15 366 ****************** <2> expansion: label = 'OPLIST_3F' 366 ****************** <2> expansion: label = OPLIST_3F 366 00001597 6E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 64 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_40' 366 ****************** <2> expansion: label = OPLIST_40 366 00001598 70 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 65 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 1 366 ****************** <2> expansion: label = 'OPLIST_41' 366 ****************** <2> expansion: label = OPLIST_41 366 00001599 71 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 66 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 2 366 ****************** <2> expansion: label = 'OPLIST_42' 366 ****************** <2> expansion: label = OPLIST_42 366 0000159A 72 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 67 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 3 366 ****************** <2> expansion: label = 'OPLIST_43' 366 ****************** <2> expansion: label = OPLIST_43 366 0000159B 73 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 68 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_44' 366 ****************** <2> expansion: label = OPLIST_44 366 0000159C 74 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 69 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_45' 366 ****************** <2> expansion: label = OPLIST_45 366 0000159D 75 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 70 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 6 366 ****************** <2> expansion: label = 'OPLIST_46' 366 ****************** <2> expansion: label = OPLIST_46 366 0000159E 76 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 71 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 7 366 ****************** <2> expansion: label = 'OPLIST_47' 366 ****************** <2> expansion: label = OPLIST_47 366 0000159F 78 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 72 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 8 366 ****************** <2> expansion: label = 'OPLIST_48' 366 ****************** <2> expansion: label = OPLIST_48 366 000015A0 7A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 73 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 9 366 ****************** <2> expansion: label = 'OPLIST_49' 366 ****************** <2> expansion: label = OPLIST_49 366 000015A1 7C <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 74 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 10 366 ****************** <2> expansion: label = 'OPLIST_4A' 366 ****************** <2> expansion: label = OPLIST_4A 366 000015A2 7E <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 75 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 11 366 ****************** <2> expansion: label = 'OPLIST_4B' 366 ****************** <2> expansion: label = OPLIST_4B 366 000015A3 80 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 76 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 12 366 ****************** <2> expansion: label = 'OPLIST_4C' 366 ****************** <2> expansion: label = OPLIST_4C 366 000015A4 82 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 77 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 13 366 ****************** <2> expansion: label = 'OPLIST_4D' 366 ****************** <2> expansion: label = OPLIST_4D 366 000015A5 84 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 78 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 14 366 ****************** <2> expansion: label = 'OPLIST_4E' 366 ****************** <2> expansion: label = OPLIST_4E 366 000015A6 86 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 79 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 4 366 ****************** <2> expansion: label = 'OPLIST_4' 366 ****************** <2> expansion: digit = 15 366 ****************** <2> expansion: label = 'OPLIST_4F' 366 ****************** <2> expansion: label = OPLIST_4F 366 000015A7 88 <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 80 366 ****************** <2> expansion: label = "OPLIST_" 366 ****************** <2> expansion: digit = 5 366 ****************** <2> expansion: label = 'OPLIST_5' 366 ****************** <2> expansion: digit = 0 366 ****************** <2> expansion: label = 'OPLIST_50' 366 ****************** <2> expansion: label = OPLIST_50 366 000015A8 8A <2> db %$label - %$i 366 <2> [list -] 366 ****************** <2> expansion: i = 81 424 <1> 425 <1> usesection lDEBUG_DATA_ENTRY 425 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 668 669 670 usesection lDEBUG_DATA_ENTRY 670 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 671 672 msg_start: 673 %include "msg.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug messages 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_DATA_ENTRY 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 19 <1> 20 <1> msg: 21 <1> .help: 22 0000040E 446562756767656420- <1> db _PROGNAME,_VERSION," help screen",13,10 22 00000417 6C4465627567202832- <1> 22 00000420 3031392D30362D3039- <1> 22 00000429 292068656C70207363- <1> 22 00000432 7265656E0D0A <1> 23 00000438 617373656D626C6509- <1> db "assemble",9, "A [address]",13,10 23 00000441 41205B616464726573- <1> 23 0000044A 735D0D0A <1> 24 <1> %if 0 25 <1> db "set option bits",9, "BS value",13,10 26 <1> db "unset opt bits",9, "BU value",13,10 27 <1> db "reset opt bits",9, "BR value",13,10 28 <1> %endif 29 <1> %if _BREAKPOINTS 30 0000044E 73657420627265616B- <1> db "set breakpoint",9, "B[P] index|NEW address",13,10 ; "[X/R/W/RW]" " [cond]" 30 00000457 706F696E7409425B50- <1> 30 00000460 5D20696E6465787C4E- <1> 30 00000469 455720616464726573- <1> 30 00000472 730D0A <1> 31 00000475 20636C656172090942- <1> db " clear",9,9, "BC index|ALL",13,10 31 0000047E 4320696E6465787C41- <1> 31 00000487 4C4C0D0A <1> 32 0000048B 2064697361626C6509- <1> db " disable",9, "BD index|ALL",13,10 32 00000494 424420696E6465787C- <1> 32 0000049D 414C4C0D0A <1> 33 000004A2 20656E61626C650909- <1> db " enable",9,9, "BE index|ALL",13,10 33 000004AB 424520696E6465787C- <1> 33 000004B4 414C4C0D0A <1> 34 000004B9 20746F67676C650909- <1> db " toggle",9,9, "BT index|ALL",13,10 34 000004C2 425420696E6465787C- <1> 34 000004CB 414C4C0D0A <1> 35 000004D0 206C6973740909424C- <1> db " list",9,9, "BL [index|ALL]",13,10 35 000004D9 205B696E6465787C41- <1> 35 000004E2 4C4C5D0D0A <1> 36 <1> %endif 37 <1> %if _DEBUG 38 <1> ; db "assume InDOS",9, "BD [0|1]",13,10 39 000004E7 627265616B20757077- <1> db "break upwards",9, "BU",13,10 39 000004F0 617264730942550D0A <1> 40 <1> %endif 41 000004F9 636F6D706172650909- <1> db "compare",9,9, "C range address",13,10 41 00000502 432072616E67652061- <1> 41 0000050B 6464726573730D0A <1> 42 00000513 64756D70090944205B- <1> db "dump",9,9, "D [range]",13,10 42 0000051C 72616E67655D0D0A <1> 43 <1> %if _INT 44 00000524 64756D7020696E7465- <1> db "dump interrupts",9, "DI interrupt [count]",13,10 44 0000052D 727275707473094449- <1> 44 00000536 20696E746572727570- <1> 44 0000053F 74205B636F756E745D- <1> 44 00000548 0D0A <1> 45 <1> %endif 46 <1> %if _PM 47 <1> db "dump LDT",9, "DL selector [count]",13,10 48 <1> %endif 49 <1> %if _MCB 50 0000054A 64756D70204D434220- <1> db "dump MCB chain",9, "DM",13,10 50 00000553 636861696E09444D0D- <1> 50 0000055C 0A <1> 51 <1> ;db "dump S/SD MCBs",9, "DS",13,10 52 <1> %endif 53 <1> %if _DSTRINGS 54 0000055D 646973706C61792073- <1> db "display strings",9, "DZ/D$/D[W]# [address]",13,10 54 00000566 7472696E677309445A- <1> 54 0000056F 2F44242F445B575D23- <1> 54 00000578 205B61646472657373- <1> 54 00000581 5D0D0A <1> 55 <1> %endif 56 <1> %if _PM 57 <1> db "dump ext memory",9, "DX physical_address",13,10 58 <1> %endif 59 00000584 656E74657209094520- <1> db "enter",9,9, "E address [list]",13,10 59 0000058D 61646472657373205B- <1> 59 00000596 6C6973745D0D0A <1> 60 0000059D 66696C6C0909462072- <1> db "fill",9,9, "F range list",13,10 60 000005A6 616E6765206C697374- <1> 60 000005AF 0D0A <1> 61 000005B1 676F090947205B3D61- <1> db "go",9,9, "G [=address] [breakpts]",13,10 61 000005BA 6464726573735D205B- <1> 61 000005C3 627265616B7074735D- <1> 61 000005CC 0D0A <1> 62 000005CE 686578206164642F73- <1> db "hex add/sub",9, "H value1 value2",13,10 62 000005D7 756209482076616C75- <1> 62 000005E0 65312076616C756532- <1> 62 000005E9 0D0A <1> 63 000005EB 696E7075740909495B- <1> db "input",9,9, "I[W|D] port",13,10 63 000005F4 577C445D20706F7274- <1> 63 000005FD 0D0A <1> 64 000005FF 6C6F61642070726F67- <1> db "load program",9, "L [address]",13,10 64 00000608 72616D094C205B6164- <1> 64 00000611 64726573735D0D0A <1> 65 00000619 6C6F61642073656374- <1> db "load sectors",9, "L address drive sector count",13,10 65 00000622 6F7273094C20616464- <1> 65 0000062B 726573732064726976- <1> 65 00000634 6520736563746F7220- <1> 65 0000063D 636F756E740D0A <1> 66 00000644 6D6F766509094D2072- <1> db "move",9,9, "M range address",13,10 66 0000064D 616E67652061646472- <1> 66 00000656 6573730D0A <1> 67 0000065B 38307838362F783837- <1> db "80x86/x87 mode",9, "M [0..6|C|NC|C2|?]",13,10 67 00000664 206D6F6465094D205B- <1> 67 0000066D 302E2E367C437C4E43- <1> 67 00000676 7C43327C3F5D0D0A <1> 68 0000067E 736574206E616D6509- <1> db "set name",9, "N [[drive:][path]progname.ext [parameters]]",13,10 68 00000687 4E205B5B6472697665- <1> 68 00000690 3A5D5B706174685D70- <1> 68 00000699 726F676E616D652E65- <1> 68 000006A2 7874205B706172616D- <1> 68 000006AB 65746572735D5D0D0A <1> 69 000006B4 6F757470757409094F- <1> db "output",9,9, "O[W|D] port value",13,10 69 000006BD 5B577C445D20706F72- <1> 69 000006C6 742076616C75650D0A <1> 70 000006CF 70726F636565640909- <1> db "proceed",9,9, "P [=address] [count [WHILE cond] [SILENT [count]]]",13,10 70 000006D8 50205B3D6164647265- <1> 70 000006E1 73735D205B636F756E- <1> 70 000006EA 74205B5748494C4520- <1> 70 000006F3 636F6E645D205B5349- <1> 70 000006FC 4C454E54205B636F75- <1> 70 00000705 6E745D5D5D0D0A <1> 71 0000070C 717569740909510D0A <1> db "quit",9,9, "Q",13,10 72 00000715 726567697374657209- <1> db "register",9, "R [register [value]]",13,10 72 0000071E 52205B726567697374- <1> 72 00000727 6572205B76616C7565- <1> 72 00000730 5D5D0D0A <1> 73 <1> %if _MMXSUPP 74 00000734 4D4D58207265676973- <1> db "MMX register",9, "RM",13,10 74 0000073D 74657209524D0D0A <1> 75 <1> %endif 76 <1> %if _RN 77 00000745 465055207265676973- <1> db "FPU register",9, "RN",13,10 77 0000074E 74657209524E0D0A <1> 78 <1> %endif 79 00000756 746F67676C65203338- <1> db "toggle 386 regs",9, "RX",13,10 79 0000075F 362072656773095258- <1> 79 00000768 0D0A <1> 80 0000076A 736561726368090953- <1> db "search",9,9, "S range list",13,10 80 00000773 2072616E6765206C69- <1> 80 0000077C 73740D0A <1> 81 00000780 747261636509095420- <1> db "trace",9,9, "T [=address] [count [WHILE cond] [SILENT [count]]]",13,10 81 00000789 5B3D61646472657373- <1> 81 00000792 5D205B636F756E7420- <1> 81 0000079B 5B5748494C4520636F- <1> 81 000007A4 6E645D205B53494C45- <1> 81 000007AD 4E54205B636F756E74- <1> 81 000007B6 5D5D5D0D0A <1> 82 000007BB 747261636520286578- <1> db "trace (exc str)",9 82 000007C4 63207374722909 <1> 83 000007CB 5450205B3D61646472- <1> db "TP [=address] [count [WHILE cond] [SILENT [count]]]",13,10 83 000007D4 6573735D205B636F75- <1> 83 000007DD 6E74205B5748494C45- <1> 83 000007E6 20636F6E645D205B53- <1> 83 000007EF 494C454E54205B636F- <1> 83 000007F8 756E745D5D5D0D0A <1> 84 00000800 7472616365206D6F64- <1> db "trace mode",9, "TM [0|1]",13,10 84 00000809 6509544D205B307C31- <1> 84 00000812 5D0D0A <1> 85 <1> %if _TSR 86 00000815 656E74657220545352- <1> db "enter TSR mode",9, "TSR",13,10 86 0000081E 206D6F646509545352- <1> 86 00000827 0D0A <1> 87 <1> %endif 88 00000829 756E617373656D626C- <1> db "unassemble",9, "U [range]",13,10 88 00000832 650955205B72616E67- <1> 88 0000083B 655D0D0A <1> 89 0000083F 77726974652070726F- <1> db "write program",9, "W [address]",13,10 89 00000848 6772616D0957205B61- <1> 89 00000851 6464726573735D0D0A <1> 90 0000085A 777269746520736563- <1> db "write sectors",9, "W address drive sector count",13,10 90 00000863 746F72730957206164- <1> 90 0000086C 647265737320647269- <1> 90 00000875 766520736563746F72- <1> 90 0000087E 20636F756E740D0A <1> 91 <1> %if _EMS 92 00000886 657870616E64656420- <1> db "expanded mem",9, "XA/XD/XM/XR/XS, X? for help",13,10 92 0000088F 6D656D0958412F5844- <1> 92 00000898 2F584D2F58522F5853- <1> 92 000008A1 2C20583F20666F7220- <1> 92 000008AA 68656C700D0A <1> 93 <1> %endif 94 000008B0 0D0A <1> db 13,10 95 000008B2 4164646974696F6E61- <1> db "Additional help topics:",13,10 95 000008BB 6C2068656C7020746F- <1> 95 000008C4 706963733A0D0A <1> 96 <1> %if _EXTHELP 97 000008CB 205265676973746572- <1> db " Registers",9, "?R",13,10 97 000008D4 73093F520D0A <1> 98 000008DA 20466C61677309093F- <1> db " Flags",9,9, "?F",13,10 98 000008E3 460D0A <1> 99 <1> %if _COND 100 000008E6 20436F6E646974696F- <1> db " Conditionals",9, "?C",13,10 100 000008EF 6E616C73093F430D0A <1> 101 <1> %endif 102 <1> %if _EXPRESSIONS 103 000008F8 204578707265737369- <1> db " Expressions",9, "?E",13,10 103 00000901 6F6E73093F450D0A <1> 104 <1> %endif 105 <1> %if _VARIABLES || _OPTIONS || _PSPVARIABLES 106 00000909 205661726961626C65- <1> db " Variables",9, "?V",13,10 106 00000912 73093F560D0A <1> 107 <1> %endif 108 00000918 2052756E206B657977- <1> db " Run keywords",9, "?RUN",13,10 108 00000921 6F726473093F52554E- <1> 108 0000092A 0D0A <1> 109 <1> %if _OPTIONS 110 0000092C 204F7074696F6E7309- <1> db " Options",9, "?O",13,10 110 00000935 3F4F0D0A <1> 111 <1> %endif 112 <1> %if _BOOTLDR 113 00000939 20426F6F74206C6F61- <1> db " Boot loading",9, "?BOOT",13,10 113 00000942 64696E67093F424F4F- <1> 113 0000094B 540D0A <1> 114 <1> %endif 115 <1> %endif 116 0000094E 206C44656275672062- <1> db " lDebug build",9, "?BUILD",13,10 116 00000957 75696C64093F425549- <1> 116 00000960 4C440D0A <1> 117 00000964 206C44656275672062- <1> db " lDebug build",9, "?B",13,10 117 0000096D 75696C64093F420D0A <1> 118 <1> %if _EXTHELP 119 00000976 206C4465627567206C- <1> db " lDebug license",9, "?L",13,10 119 0000097F 6963656E7365093F4C- <1> 119 00000988 0D0A <1> 120 <1> %endif 121 <1> %if _PM 122 <1> db 13,10 123 <1> db "Prompts: '-' = real or V86 mode; '#' = protected mode",13,10 124 <1> %endif 125 0000098A 00 <1> asciz 126 <1> 127 <1> .run: 128 0000098B 52554E00 <1> asciz "RUN" 129 <1> .help_run: 130 0000098F 542028747261636529- <1> db "T (trace), TP (trace except proceed past string operations), and P (proceed)",13,10 130 00000998 2C2054502028747261- <1> 130 000009A1 636520657863657074- <1> 130 000009AA 2070726F6365656420- <1> 130 000009B3 706173742073747269- <1> 130 000009BC 6E67206F7065726174- <1> 130 000009C5 696F6E73292C20616E- <1> 130 000009CE 642050202870726F63- <1> 130 000009D7 656564290D0A <1> 131 000009DD 63616E20626520666F- <1> db "can be followed by a number of repetitions and then the keyword WHILE,",13,10 131 000009E6 6C6C6F776564206279- <1> 131 000009EF 2061206E756D626572- <1> 131 000009F8 206F66207265706574- <1> 131 00000A01 6974696F6E7320616E- <1> 131 00000A0A 64207468656E207468- <1> 131 00000A13 65206B6579776F7264- <1> 131 00000A1C 205748494C452C0D0A <1> 132 00000A25 7768696368206D7573- <1> db "which must be followed by a conditional expression.",13,10 132 00000A2E 7420626520666F6C6C- <1> 132 00000A37 6F7765642062792061- <1> 132 00000A40 20636F6E646974696F- <1> 132 00000A49 6E616C206578707265- <1> 132 00000A52 7373696F6E2E0D0A <1> 133 00000A5A 0D0A <1> db 13,10 134 00000A5C 5468652073656C6563- <1> db "The selected run command is repeated as many times as specified by the",13,10 134 00000A65 7465642072756E2063- <1> 134 00000A6E 6F6D6D616E64206973- <1> 134 00000A77 207265706561746564- <1> 134 00000A80 206173206D616E7920- <1> 134 00000A89 74696D657320617320- <1> 134 00000A92 737065636966696564- <1> 134 00000A9B 206279207468650D0A <1> 135 00000AA4 6E756D6265722C206F- <1> db "number, or until the WHILE condition evaluates no longer to true.",13,10 135 00000AAD 7220756E74696C2074- <1> 135 00000AB6 6865205748494C4520- <1> 135 00000ABF 636F6E646974696F6E- <1> 135 00000AC8 206576616C75617465- <1> 135 00000AD1 73206E6F206C6F6E67- <1> 135 00000ADA 657220746F20747275- <1> 135 00000AE3 652E0D0A <1> 136 00000AE7 0D0A <1> db 13,10 137 00000AE9 416674657220746865- <1> db "After the number of repetitions or (if present) after the WHILE condition",13,10 137 00000AF2 206E756D626572206F- <1> 137 00000AFB 662072657065746974- <1> 137 00000B04 696F6E73206F722028- <1> 137 00000B0D 69662070726573656E- <1> 137 00000B16 742920616674657220- <1> 137 00000B1F 746865205748494C45- <1> 137 00000B28 20636F6E646974696F- <1> 137 00000B31 6E0D0A <1> 138 00000B34 746865206B6579776F- <1> db "the keyword SILENT may follow. If that is the case, all register dumps",13,10 138 00000B3D 72642053494C454E54- <1> 138 00000B46 206D617920666F6C6C- <1> 138 00000B4F 6F772E204966207468- <1> 138 00000B58 617420697320746865- <1> 138 00000B61 20636173652C20616C- <1> 138 00000B6A 6C2072656769737465- <1> 138 00000B73 722064756D70730D0A <1> 139 00000B7C 646F6E652064757269- <1> db "done during the run are buffered by the debugger and the run remains",13,10 139 00000B85 6E6720746865207275- <1> 139 00000B8E 6E2061726520627566- <1> 139 00000B97 666572656420627920- <1> 139 00000BA0 746865206465627567- <1> 139 00000BA9 67657220616E642074- <1> 139 00000BB2 68652072756E207265- <1> 139 00000BBB 6D61696E730D0A <1> 140 00000BC2 73696C656E742E2041- <1> db "silent. After the run, the last dumps are replayed from the buffer",13,10 140 00000BCB 667465722074686520- <1> 140 00000BD4 72756E2C2074686520- <1> 140 00000BDD 6C6173742064756D70- <1> 140 00000BE6 732061726520726570- <1> 140 00000BEF 6C617965642066726F- <1> 140 00000BF8 6D2074686520627566- <1> 140 00000C01 6665720D0A <1> 141 00000C06 616E6420646973706C- <1> db "and displayed. At most as many dumps as fit into the buffer are",13,10 141 00000C0F 617965642E20417420- <1> 141 00000C18 6D6F7374206173206D- <1> 141 00000C21 616E792064756D7073- <1> 141 00000C2A 206173206669742069- <1> 141 00000C33 6E746F207468652062- <1> 141 00000C3C 756666657220617265- <1> 141 00000C45 0D0A <1> 142 00000C47 646973706C61796564- <1> db "displayed. (The buffer is currently up to 8 KiB sized.)",13,10 142 00000C50 2E2028546865206275- <1> 142 00000C59 666665722069732063- <1> 142 00000C62 757272656E746C7920- <1> 142 00000C6B 757020746F2038204B- <1> 142 00000C74 69422073697A65642E- <1> 142 00000C7D 290D0A <1> 143 00000C80 0D0A <1> db 13,10 144 00000C82 49662061206E756D62- <1> db "If a number follows behind the SILENT keyword, only at most that many",13,10 144 00000C8B 657220666F6C6C6F77- <1> 144 00000C94 7320626568696E6420- <1> 144 00000C9D 7468652053494C454E- <1> 144 00000CA6 54206B6579776F7264- <1> 144 00000CAF 2C206F6E6C79206174- <1> 144 00000CB8 206D6F737420746861- <1> 144 00000CC1 74206D616E790D0A <1> 145 00000CC9 64756D707320617265- <1> db "dumps are displayed from the buffer. The dumps that are displayed",13,10 145 00000CD2 20646973706C617965- <1> 145 00000CDB 642066726F6D207468- <1> 145 00000CE4 65206275666665722E- <1> 145 00000CED 205468652064756D70- <1> 145 00000CF6 732074686174206172- <1> 145 00000CFF 6520646973706C6179- <1> 145 00000D08 65640D0A <1> 146 00000D0C 61726520616C776179- <1> db "are always those last written into the buffer, thus last occurred.",13,10 146 00000D15 732074686F7365206C- <1> 146 00000D1E 617374207772697474- <1> 146 00000D27 656E20696E746F2074- <1> 146 00000D30 686520627566666572- <1> 146 00000D39 2C2074687573206C61- <1> 146 00000D42 7374206F6363757272- <1> 146 00000D4B 65642E0D0A <1> 147 00000D50 00 <1> asciz 148 <1> 149 <1> .string_build: 150 00000D51 4255494C4400 <1> asciz "BUILD" 151 <1> 152 <1> .build_short: 153 00000D57 446562756767656420- <1> db _PROGNAME,_VERSION,13,10 153 00000D60 6C4465627567202832- <1> 153 00000D69 3031392D30362D3039- <1> 153 00000D72 290D0A <1> 154 <1> %ifnidn _REVISIONID,"" 155 00000D75 536F7572636520436F- <1> db "Source Control Revision ID: ",_REVISIONID,13,10 155 00000D7E 6E74726F6C20526576- <1> 155 00000D87 6973696F6E2049443A- <1> 155 00000D90 206867203132653663- <1> 155 00000D99 663238323063360D0A <1> 156 <1> %endif 157 00000DA2 00 <1> asciz 158 <1> 159 <1> .build: 160 00000DA3 446562756767656420- <1> db _PROGNAME,_VERSION,13,10 160 00000DAC 6C4465627567202832- <1> 160 00000DB5 3031392D30362D3039- <1> 160 00000DBE 290D0A <1> 161 <1> %ifnidn _REVISIONID,"" 162 00000DC1 536F7572636520436F- <1> db "Source Control Revision ID: ",_REVISIONID,13,10 162 00000DCA 6E74726F6C20526576- <1> 162 00000DD3 6973696F6E2049443A- <1> 162 00000DDC 206867203132653663- <1> 162 00000DE5 663238323063360D0A <1> 163 <1> %endif 164 <1> %if _EXTHELP 165 00000DEE 0D0A <1> db 13,10 166 <1> %if _PM 167 <1> db "DPMI-capable",13,10 168 <1> %endif 169 <1> %if _PM && _NOEXTENDER 170 <1> db " DPMI host without extender",13,10 171 <1> %endif 172 <1> %if _PM && _WIN9XSUPP 173 <1> db " No Windows 4 DPMI hook",13,10 174 <1> %endif 175 <1> %if _PM && _DOSEMU 176 <1> db " No DOSEMU DPMI hook",13,10 177 <1> %endif 178 <1> %if _PM && _EXCCSIP 179 <1> db " Display exception address",13,10 180 <1> %endif 181 <1> %if _PM && _DISPHOOK 182 <1> db " Display hooking DPMI entry",13,10 183 <1> %endif 184 <1> %if _DEBUG 185 00000DF0 44656275676761626C- <1> db "Debuggable",13,10 185 00000DF9 650D0A <1> 186 <1> %endif 187 <1> %if _INT 188 00000DFC 444920636F6D6D616E- <1> db "DI command",13,10 188 00000E05 640D0A <1> 189 <1> %endif 190 <1> %if _MCB 191 00000E08 444D20636F6D6D616E- <1> db "DM command",13,10 191 00000E11 640D0A <1> 192 <1> %endif 193 <1> %if _DSTRINGS 194 00000E14 4420737472696E6720- <1> db "D string commands",13,10 194 00000E1D 636F6D6D616E64730D- <1> 194 00000E26 0A <1> 195 <1> %endif 196 <1> %if _SDUMP 197 00000E27 53206D617463682064- <1> db "S match dumps line of following data",13,10 197 00000E30 756D7073206C696E65- <1> 197 00000E39 206F6620666F6C6C6F- <1> 197 00000E42 77696E672064617461- <1> 197 00000E4B 0D0A <1> 198 <1> %endif 199 <1> %if _RN 200 00000E4D 524E20636F6D6D616E- <1> db "RN command",13,10 200 00000E56 640D0A <1> 201 <1> %endif 202 <1> %if _USESDA 203 00000E59 416363657373205344- <1> db "Access SDA current PSP field",13,10 203 00000E62 412063757272656E74- <1> 203 00000E6B 20505350206669656C- <1> 203 00000E74 640D0A <1> 204 <1> %endif 205 <1> %if _VDD 206 00000E77 4C6F6164204E545644- <1> db "Load NTVDM VDD for sector access",13,10 206 00000E80 4D2056444420666F72- <1> 206 00000E89 20736563746F722061- <1> 206 00000E92 63636573730D0A <1> 207 <1> %endif 208 <1> %if _EMS 209 00000E99 5820636F6D6D616E64- <1> db "X commands for EMS access",13,10 209 00000EA2 7320666F7220454D53- <1> 209 00000EAB 206163636573730D0A <1> 210 <1> %endif 211 <1> %if _MMXSUPP 212 00000EB4 524D20636F6D6D616E- <1> db "RM command and reading MMX registers as variables",13,10 212 00000EBD 6420616E6420726561- <1> 212 00000EC6 64696E67204D4D5820- <1> 212 00000ECF 726567697374657273- <1> 212 00000ED8 206173207661726961- <1> 212 00000EE1 626C65730D0A <1> 213 <1> %endif 214 <1> %if _EXPRESSIONS 215 00000EE7 45787072657373696F- <1> db "Expression evaluator",13,10 215 00000EF0 6E206576616C756174- <1> 215 00000EF9 6F720D0A <1> 216 <1> %endif 217 <1> %if _INDIRECTION 218 00000EFD 20496E646972656374- <1> db " Indirection in expressions",13,10 218 00000F06 696F6E20696E206578- <1> 218 00000F0F 7072657373696F6E73- <1> 218 00000F18 0D0A <1> 219 <1> %endif 220 <1> %if _VARIABLES 221 00000F1A 5661726961626C6573- <1> db "Variables with user-defined purpose",13,10 221 00000F23 207769746820757365- <1> 221 00000F2C 722D646566696E6564- <1> 221 00000F35 20707572706F73650D- <1> 221 00000F3E 0A <1> 222 <1> %endif 223 <1> %if _OPTIONS 224 00000F3F 446562756767657220- <1> db "Debugger option and status variables",13,10 224 00000F48 6F7074696F6E20616E- <1> 224 00000F51 642073746174757320- <1> 224 00000F5A 7661726961626C6573- <1> 224 00000F63 0D0A <1> 225 <1> %endif 226 <1> %if _PSPVARIABLES 227 00000F65 505350207661726961- <1> db "PSP variables",13,10 227 00000F6E 626C65730D0A <1> 228 <1> %endif 229 <1> %if _COND 230 00000F74 436F6E646974696F6E- <1> db "Conditional jump notice in register dump",13,10 230 00000F7D 616C206A756D70206E- <1> 230 00000F86 6F7469636520696E20- <1> 230 00000F8F 726567697374657220- <1> 230 00000F98 64756D700D0A <1> 231 <1> %endif 232 <1> %if _TSR 233 00000F9E 545352206D6F646520- <1> db "TSR mode (Process detachment)",13,10 233 00000FA7 2850726F6365737320- <1> 233 00000FB0 6465746163686D656E- <1> 233 00000FB9 74290D0A <1> 234 <1> %endif 235 <1> %if _DEVICE 236 <1> db "Loadable device driver",13,10 237 <1> %endif 238 <1> %if _BOOTLDR 239 00000FBD 426F6F74206C6F6164- <1> db "Boot loader",13,10 239 00000FC6 65720D0A <1> 240 <1> %endif 241 <1> %if _BREAKPOINTS 242 00000FCA 5065726D616E656E74- <1> db "Permanent breakpoints",13,10 242 00000FD3 20627265616B706F69- <1> 242 00000FDC 6E74730D0A <1> 243 <1> %endif 244 <1> %push 245 00000FE1 496E74657263657074- <1> db "Intercepted" 245 00000FEA 6564 <1> 246 <1> %if _PM 247 <1> db " 86M" 248 <1> %endif 249 00000FEC 20696E746572727570- <1> db " interrupts:" 249 00000FF5 74733A <1> 250 <1> %define %$pref " " 250 ****************** <1> expansion: pref = " " 251 <1> %macro dispint 2.nolist 252 <1> %if %1 253 <1> db %$pref, %2 254 <1> %define %$pref ", " 255 <1> %endif 256 <1> %endmacro 257 00000FF8 203030 <1> dispint 1, "00" 257 ****************** <1> expansion: pref = ", " 258 00000FFB 2C203031 <1> dispint _CATCHINT01, "01" 258 ****************** <1> expansion: pref = ", " 259 00000FFF 2C203033 <1> dispint _CATCHINT03, "03" 259 ****************** <1> expansion: pref = ", " 260 00001003 2C203036 <1> dispint _CATCHINT06, "06" 260 ****************** <1> expansion: pref = ", " 261 00001007 2C203138 <1> dispint _CATCHINT18, "18" 261 ****************** <1> expansion: pref = ", " 262 0000100B 2C203139 <1> dispint _CATCHINT19, "19" 262 ****************** <1> expansion: pref = ", " 263 <1> dispint _PM, "2F.1687 (internal)" 264 <1> %ifidn %$pref," " 265 <1> db " none" 266 <1> %endif 267 0000100F 0D0A <1> db 13,10 268 <1> %if _PM 269 <1> db "Intercepted DPMI exceptions:" 270 <1> %define %$pref " " 271 <1> dispint 1, "00" 272 <1> dispint 1, "01" 273 <1> dispint 1, "03" 274 <1> dispint _CATCHEXC06, "06" 275 <1> dispint _CATCHEXC0C, "0C" 276 <1> dispint 1, "0D" 277 <1> dispint 1, "0E" 278 <1> %ifidn %$pref," " 279 <1> db " none" 280 <1> %endif 281 <1> db 13,10 282 <1> %endif 283 <1> %unmacro dispint 2.nolist 284 <1> %pop 285 <1> %if _EXTHELP 286 00001011 457874656E64656420- <1> db "Extended built-in help pages",13,10 286 0000101A 6275696C742D696E20- <1> 286 00001023 68656C702070616765- <1> 286 0000102C 730D0A <1> 287 <1> %endif 288 <1> %if _ONLYNON386 289 <1> db "Only supports non-386 operation",13,10 290 <1> %endif 291 <1> %if _ONLY386 292 <1> db "Only supports 386+ operation",13,10 293 <1> %endif 294 <1> %endif 295 0000102F 00 <1> asciz 296 <1> 297 <1> %if _EXTHELP 298 <1> .license: 299 00001030 6C4465627567202D20- <1> db "lDebug - libre x86 DOS debugger",13,10 299 00001039 6C6962726520783836- <1> 299 00001042 20444F532064656275- <1> 299 0000104B 676765720D0A <1> 300 00001051 0D0A <1> db 13,10 301 00001053 436F70797269676874- <1> db "Copyright (C) 1995-2003 Paul Vojta",13,10 301 0000105C 202843292031393935- <1> 301 00001065 2D3230303320506175- <1> 301 0000106E 6C20566F6A74610D0A <1> 302 00001077 436F70797269676874- <1> db "Copyright (C) 2008-2012 C. Masloch",13,10 302 00001080 202843292032303038- <1> 302 00001089 2D3230313220432E20- <1> 302 00001092 4D61736C6F63680D0A <1> 303 0000109B 0D0A <1> db 13,10 304 0000109D 5573616765206F6620- <1> db "Usage of the works is permitted provided that this",13,10 304 000010A6 74686520776F726B73- <1> 304 000010AF 206973207065726D69- <1> 304 000010B8 747465642070726F76- <1> 304 000010C1 696465642074686174- <1> 304 000010CA 20746869730D0A <1> 305 000010D1 696E737472756D656E- <1> db "instrument is retained with the works, so that any entity",13,10 305 000010DA 742069732072657461- <1> 305 000010E3 696E65642077697468- <1> 305 000010EC 2074686520776F726B- <1> 305 000010F5 732C20736F20746861- <1> 305 000010FE 7420616E7920656E74- <1> 305 00001107 6974790D0A <1> 306 0000110C 746861742075736573- <1> db "that uses the works is notified of this instrument.",13,10 306 00001115 2074686520776F726B- <1> 306 0000111E 73206973206E6F7469- <1> 306 00001127 66696564206F662074- <1> 306 00001130 68697320696E737472- <1> 306 00001139 756D656E742E0D0A <1> 307 00001141 0D0A <1> db 13,10 308 00001143 444953434C41494D45- <1> db "DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY.",13,10 308 0000114C 523A2054484520574F- <1> 308 00001155 524B53204152452057- <1> 308 0000115E 4954484F5554205741- <1> 308 00001167 5252414E54592E0D0A <1> 309 00001170 0D0A <1> db 13,10 310 00001172 0D0A <1> db 13,10 311 00001174 546869732069732074- <1> db "This is the license and copyright information that applies to lDebug; but note",13,10 311 0000117D 6865206C6963656E73- <1> 311 00001186 6520616E6420636F70- <1> 311 0000118F 79726967687420696E- <1> 311 00001198 666F726D6174696F6E- <1> 311 000011A1 207468617420617070- <1> 311 000011AA 6C69657320746F206C- <1> 311 000011B3 44656275673B206275- <1> 311 000011BC 74206E6F74650D0A <1> 312 000011C4 746861742074686572- <1> db "that there have been substantial contributions to the code base that are not",13,10 312 000011CD 652068617665206265- <1> 312 000011D6 656E20737562737461- <1> 312 000011DF 6E7469616C20636F6E- <1> 312 000011E8 747269627574696F6E- <1> 312 000011F1 7320746F2074686520- <1> 312 000011FA 636F64652062617365- <1> 312 00001203 207468617420617265- <1> 312 0000120C 206E6F740D0A <1> 313 00001212 636F70797269676874- <1> db "copyrighted (public domain).",13,10 313 0000121B 656420287075626C69- <1> 313 00001224 6320646F6D61696E29- <1> 313 0000122D 2E0D0A <1> 314 00001230 00 <1> asciz 315 <1> 316 <1> .reghelp: 317 00001231 417661696C61626C65- <1> db "Available 16-bit registers:",9,9,"Available 32-bit registers: (386+)",13,10 317 0000123A 2031362D6269742072- <1> 317 00001243 65676973746572733A- <1> 317 0000124C 0909417661696C6162- <1> 317 00001255 6C652033322D626974- <1> 317 0000125E 207265676973746572- <1> 317 00001267 733A20283338362B29- <1> 317 00001270 0D0A <1> 318 00001272 415809416363756D75- <1> db "AX",9,"Accumulator",9,9,9,"EAX",13,10 318 0000127B 6C61746F7209090945- <1> 318 00001284 41580D0A <1> 319 00001288 425809426173652072- <1> db "BX",9,"Base register",9,9,9,"EBX",13,10 319 00001291 656769737465720909- <1> 319 0000129A 094542580D0A <1> 320 000012A0 435809436F756E7465- <1> db "CX",9,"Counter",9,9,9,9,"ECX",13,10 320 000012A9 72090909094543580D- <1> 320 000012B2 0A <1> 321 000012B3 445809446174612072- <1> db "DX",9,"Data register",9,9,9,"EDX",13,10 321 000012BC 656769737465720909- <1> 321 000012C5 094544580D0A <1> 322 000012CB 535009537461636B20- <1> db "SP",9,"Stack pointer",9,9,9,"ESP",13,10 322 000012D4 706F696E7465720909- <1> 322 000012DD 094553500D0A <1> 323 000012E3 425009426173652070- <1> db "BP",9,"Base pointer",9,9,9,"EBP",13,10 323 000012EC 6F696E746572090909- <1> 323 000012F5 4542500D0A <1> 324 000012FA 534909536F75726365- <1> db "SI",9,"Source index",9,9,9,"ESI",13,10 324 00001303 20696E646578090909- <1> 324 0000130C 4553490D0A <1> 325 00001311 44490944657374696E- <1> db "DI",9,"Destination index",9,9,"EDI",13,10 325 0000131A 6174696F6E20696E64- <1> 325 00001323 657809094544490D0A <1> 326 0000132C 445309446174612073- <1> db "DS",9,"Data segment",13,10 326 00001335 65676D656E740D0A <1> 327 0000133D 455309457874726120- <1> db "ES",9,"Extra segment",13,10 327 00001346 7365676D656E740D0A <1> 328 0000134F 535309537461636B20- <1> db "SS",9,"Stack segment",13,10 328 00001358 7365676D656E740D0A <1> 329 00001361 435309436F64652073- <1> db "CS",9,"Code segment",13,10 329 0000136A 65676D656E740D0A <1> 330 00001372 465309457874726120- <1> db "FS",9,"Extra segment 2 (386+)",13,10 330 0000137B 7365676D656E742032- <1> 330 00001384 20283338362B290D0A <1> 331 0000138D 475309457874726120- <1> db "GS",9,"Extra segment 3 (386+)",13,10 331 00001396 7365676D656E742033- <1> 331 0000139F 20283338362B290D0A <1> 332 000013A8 495009496E73747275- <1> db "IP",9,"Instruction pointer",9,9,"EIP",13,10 332 000013B1 6374696F6E20706F69- <1> 332 000013BA 6E7465720909454950- <1> 332 000013C3 0D0A <1> 333 000013C5 464C09466C61677309- <1> db "FL",9,"Flags",9,9,9,9,"EFL",13,10 333 000013CE 09090945464C0D0A <1> 334 000013D6 0D0A <1> db 13,10 335 <1> %if _MMXSUPP 336 000013D8 417661696C61626C65- <1> db "Available 64-bit Matrix Math Extension (MMX) registers: (if supported)",13,10 336 000013E1 2036342D626974204D- <1> 336 000013EA 6174726978204D6174- <1> 336 000013F3 6820457874656E7369- <1> 336 000013FC 6F6E20284D4D582920- <1> 336 00001405 726567697374657273- <1> 336 0000140E 3A2028696620737570- <1> 336 00001417 706F72746564290D0A <1> 337 00001420 4D4D78094D4D287829- <1> db "MMx",9,"MM(x)",9,"MMX register x, where x is 0 to 7",13,10 337 00001429 094D4D582072656769- <1> 337 00001432 7374657220782C2077- <1> 337 0000143B 686572652078206973- <1> 337 00001444 203020746F20370D0A <1> 338 0000144D 0D0A <1> db 13,10 339 <1> %endif 340 0000144F 456E746572203F4620- <1> db "Enter ?F to display the recognized flags.",13,10 340 00001458 746F20646973706C61- <1> 340 00001461 792074686520726563- <1> 340 0000146A 6F676E697A65642066- <1> 340 00001473 6C6167732E0D0A <1> 341 0000147A 00 <1> asciz 342 <1> 343 <1> .flaghelp: 344 0000147B 5265636F676E697A65- <1> db "Recognized flags:",13,10 344 00001484 6420666C6167733A0D- <1> 344 0000148D 0A <1> 345 0000148E 56616C7565094E616D- <1> db "Value",9,"Name",9,9,9, " Set",9,9,9, " Clear",13,10 345 00001497 650909092020536574- <1> 345 000014A0 0909092020436C6561- <1> 345 000014A9 720D0A <1> 346 000014AC 3038303020204F4620- <1> db "0800 OF Overflow Flag",9,9,"OV Overflow",9,9, "NV No overflow",13,10 346 000014B5 204F766572666C6F77- <1> 346 000014BE 20466C616709094F56- <1> 346 000014C7 20204F766572666C6F- <1> 346 000014D0 7709094E5620204E6F- <1> 346 000014D9 206F766572666C6F77- <1> 346 000014E2 0D0A <1> 347 000014E4 303430302020444620- <1> db "0400 DF Direction Flag",9,"DN Down",9,9, "UP Up",13,10 347 000014ED 20446972656374696F- <1> 347 000014F6 6E20466C616709444E- <1> 347 000014FF 2020446F776E090955- <1> 347 00001508 50202055700D0A <1> 348 0000150F 303230302020494620- <1> db "0200 IF Interrupt Flag",9,"EI Enable interrupts",9,"DI Disable interrupts",13,10 348 00001518 20496E746572727570- <1> 348 00001521 7420466C6167094549- <1> 348 0000152A 2020456E61626C6520- <1> 348 00001533 696E74657272757074- <1> 348 0000153C 730944492020446973- <1> 348 00001545 61626C6520696E7465- <1> 348 0000154E 7272757074730D0A <1> 349 00001556 303038302020534620- <1> db "0080 SF Sign Flag",9,9, "NG Negative",9,9, "PL Plus",13,10 349 0000155F 205369676E20466C61- <1> 349 00001568 6709094E4720204E65- <1> 349 00001571 676174697665090950- <1> 349 0000157A 4C2020506C75730D0A <1> 350 00001583 3030343020205A4620- <1> db "0040 ZF Zero Flag",9,9, "ZR Zero",9,9, "NZ Not zero",13,10 350 0000158C 205A65726F20466C61- <1> 350 00001595 6709095A5220205A65- <1> 350 0000159E 726F09094E5A20204E- <1> 350 000015A7 6F74207A65726F0D0A <1> 351 000015B0 303031302020414620- <1> db "0010 AF Auxiliary Flag",9,"AC Auxiliary carry",9,"NA No auxiliary carry",13,10 351 000015B9 20417578696C696172- <1> 351 000015C2 7920466C6167094143- <1> 351 000015CB 2020417578696C6961- <1> 351 000015D4 727920636172727909- <1> 351 000015DD 4E4120204E6F206175- <1> 351 000015E6 78696C696172792063- <1> 351 000015EF 617272790D0A <1> 352 000015F5 303030342020504620- <1> db "0004 PF Parity Flag",9,9, "PE Parity even",9,9, "PO Parity odd",13,10 352 000015FE 205061726974792046- <1> 352 00001607 6C6167090950452020- <1> 352 00001610 506172697479206576- <1> 352 00001619 656E0909504F202050- <1> 352 00001622 6172697479206F6464- <1> 352 0000162B 0D0A <1> 353 0000162D 303030312020434620- <1> db "0001 CF Carry Flag",9,9, "CY Carry",9,9, "NC No carry",13,10 353 00001636 20436172727920466C- <1> 353 0000163F 616709094359202043- <1> 353 00001648 6172727909094E4320- <1> 353 00001651 204E6F206361727279- <1> 353 0000165A 0D0A <1> 354 0000165C 0D0A <1> db 13,10 355 0000165E 5468652073686F7274- <1> db "The short names of the flag states are displayed when dumping registers",13,10 355 00001667 206E616D6573206F66- <1> 355 00001670 2074686520666C6167- <1> 355 00001679 207374617465732061- <1> 355 00001682 726520646973706C61- <1> 355 0000168B 796564207768656E20- <1> 355 00001694 64756D70696E672072- <1> 355 0000169D 65676973746572730D- <1> 355 000016A6 0A <1> 356 000016A7 616E642063616E2062- <1> db "and can be entered to modify the symbolic F register with R. The short",13,10 356 000016B0 6520656E7465726564- <1> 356 000016B9 20746F206D6F646966- <1> 356 000016C2 79207468652073796D- <1> 356 000016CB 626F6C696320462072- <1> 356 000016D4 656769737465722077- <1> 356 000016DD 69746820522E205468- <1> 356 000016E6 652073686F72740D0A <1> 357 000016EF 6E616D6573206F6620- <1> db "names of the flags can be modified by R.",13,10 357 000016F8 74686520666C616773- <1> 357 00001701 2063616E206265206D- <1> 357 0000170A 6F6469666965642062- <1> 357 00001713 7920522E0D0A <1> 358 00001719 00 <1> asciz 359 <1> 360 <1> %if _COND 361 <1> .condhelp: 362 0000171A 496E20746865207265- <1> db "In the register dump displayed by the R, T, P and G commands, conditional",13,10 362 00001723 676973746572206475- <1> 362 0000172C 6D7020646973706C61- <1> 362 00001735 796564206279207468- <1> 362 0000173E 6520522C20542C2050- <1> 362 00001747 20616E64204720636F- <1> 362 00001750 6D6D616E64732C2063- <1> 362 00001759 6F6E646974696F6E61- <1> 362 00001762 6C0D0A <1> 363 00001765 6A756D707320617265- <1> db "jumps are displayed with a notice that shows whether the instruction will",13,10 363 0000176E 20646973706C617965- <1> 363 00001777 642077697468206120- <1> 363 00001780 6E6F74696365207468- <1> 363 00001789 61742073686F777320- <1> 363 00001792 776865746865722074- <1> 363 0000179B 686520696E73747275- <1> 363 000017A4 6374696F6E2077696C- <1> 363 000017AD 6C0D0A <1> 364 000017B0 63617573652061206A- <1> db "cause a jump depending on its condition and the current register and flag",13,10 364 000017B9 756D7020646570656E- <1> 364 000017C2 64696E67206F6E2069- <1> 364 000017CB 747320636F6E646974- <1> 364 000017D4 696F6E20616E642074- <1> 364 000017DD 68652063757272656E- <1> 364 000017E6 742072656769737465- <1> 364 000017EF 7220616E6420666C61- <1> 364 000017F8 670D0A <1> 365 000017FB 636F6E74656E74732E- <1> db 'contents. This notice shows either "jumping" or "not jumping" as appropriate.',13,10 365 00001804 2054686973206E6F74- <1> 365 0000180D 6963652073686F7773- <1> 365 00001816 206569746865722022- <1> 365 0000181F 6A756D70696E672220- <1> 365 00001828 6F7220226E6F74206A- <1> 365 00001831 756D70696E67222061- <1> 365 0000183A 7320617070726F7072- <1> 365 00001843 696174652E0D0A <1> 366 0000184A 0D0A <1> db 13,10 367 0000184C 54686520636F6E6469- <1> db "The conditional jumps use these conditions: (second column negates)",13,10 367 00001855 74696F6E616C206A75- <1> 367 0000185E 6D7073207573652074- <1> 367 00001867 6865736520636F6E64- <1> 367 00001870 6974696F6E733A2028- <1> 367 00001879 7365636F6E6420636F- <1> 367 00001882 6C756D6E206E656761- <1> 367 0000188B 746573290D0A <1> 368 00001891 206A6F09096A6E6F09- <1> db " jo",9,9,"jno",9,9,"OF",13,10 368 0000189A 094F460D0A <1> 369 0000189F 206A63206A62206A6E- <1> db " jc jb jnae",9,"jnc jnb jae",9,"CF",13,10 369 000018A8 6165096A6E63206A6E- <1> 369 000018B1 62206A61650943460D- <1> 369 000018BA 0A <1> 370 000018BB 206A7A206A6509096A- <1> db " jz je",9,9,"jnz jne",9,9,"ZF",13,10 370 000018C4 6E7A206A6E6509095A- <1> 370 000018CD 460D0A <1> 371 000018D0 206A6265206A6E6109- <1> db " jbe jna",9,"jnbe ja",9,9,"ZF||CF",13,10 371 000018D9 6A6E6265206A610909- <1> 371 000018E2 5A467C7C43460D0A <1> 372 000018EA 206A7309096A6E7309- <1> db " js",9,9,"jns",9,9,"SF",13,10 372 000018F3 0953460D0A <1> 373 000018F8 206A70206A70650909- <1> db " jp jpe",9,9,"jnp jpo",9,9,"PF",13,10 373 00001901 6A6E70206A706F0909- <1> 373 0000190A 50460D0A <1> 374 0000190E 206A6C206A6E676509- <1> db " jl jnge",9,"jnl jge",9,9,"OF^^SF",13,10 374 00001917 6A6E6C206A67650909- <1> 374 00001920 4F465E5E53460D0A <1> 375 00001928 206A6C65206A6E6709- <1> db " jle jng",9,"jnle jg",9,9,"OF^^SF || ZF",13,10 375 00001931 6A6E6C65206A670909- <1> 375 0000193A 4F465E5E5346207C7C- <1> 375 00001943 205A460D0A <1> 376 00001948 206A28652963787A09- <1> db " j(e)cxz",9,9,9,"(e)cx==0",13,10 376 00001951 090928652963783D3D- <1> 376 0000195A 300D0A <1> 377 0000195D 206C6F6F7009090909- <1> db " loop",9,9,9,9,"(e)cx!=1",13,10 377 00001966 2865296378213D310D- <1> 377 0000196F 0A <1> 378 00001970 206C6F6F707A206C6F- <1> db " loopz loope",9,9,9,"(e)cx!=1 && ZF",13,10 378 00001979 6F7065090909286529- <1> 378 00001982 6378213D3120262620- <1> 378 0000198B 5A460D0A <1> 379 0000198F 206C6F6F706E7A206C- <1> db " loopnz loopne",9,9,9,"(e)cx!=1 && !ZF",13,10 379 00001998 6F6F706E6509090928- <1> 379 000019A1 65296378213D312026- <1> 379 000019AA 2620215A460D0A <1> 380 000019B1 0D0A <1> db 13,10 381 000019B3 456E746572203F4620- <1> db "Enter ?F to display a description of the flag names.",13,10 381 000019BC 746F20646973706C61- <1> 381 000019C5 792061206465736372- <1> 381 000019CE 697074696F6E206F66- <1> 381 000019D7 2074686520666C6167- <1> 381 000019E0 206E616D65732E0D0A <1> 382 000019E9 00 <1> asciz 383 <1> %endif 384 <1> 385 <1> %if _EXPRESSIONS 386 <1> .expressionhelp: 387 000019EA 5265636F676E697A65- <1> db "Recognized operators in expressions:",13,10 387 000019F3 64206F70657261746F- <1> 387 000019FC 727320696E20657870- <1> 387 00001A05 72657373696F6E733A- <1> 387 00001A0E 0D0A <1> 388 00001A10 7C0962697477697365- <1> db "|",9, "bitwise OR",9,9, "||",9, "boolean OR",13,10 388 00001A19 204F5209097C7C0962- <1> 388 00001A22 6F6F6C65616E204F52- <1> 388 00001A2B 0D0A <1> 389 00001A2D 5E0962697477697365- <1> db "^",9, "bitwise XOR",9,9, "^^",9, "boolean XOR",13,10 389 00001A36 20584F5209095E5E09- <1> 389 00001A3F 626F6F6C65616E2058- <1> 389 00001A48 4F520D0A <1> 390 00001A4C 260962697477697365- <1> db "&",9, "bitwise AND",9,9, "&&",9, "boolean AND",13,10 390 00001A55 20414E440909262609- <1> 390 00001A5E 626F6F6C65616E2041- <1> 390 00001A67 4E440D0A <1> 391 00001A6B 3E3E096269742D7368- <1> db ">>",9, "bit-shift right",9,9, ">",9,"test if above",13,10 391 00001A74 696674207269676874- <1> 391 00001A7D 09093E097465737420- <1> 391 00001A86 69662061626F76650D- <1> 391 00001A8F 0A <1> 392 00001A90 3E3E3E097369676E65- <1> db ">>>",9, "signed bit-shift right",9, "<",9,"test if below",13,10 392 00001A99 64206269742D736869- <1> 392 00001AA2 667420726967687409- <1> 392 00001AAB 3C0974657374206966- <1> 392 00001AB4 2062656C6F770D0A <1> 393 00001ABC 3C3C096269742D7368- <1> db "<<",9, "bit-shift left",9,9, ">=",9,"test if above-or-equal",13,10 393 00001AC5 696674206C65667409- <1> 393 00001ACE 093E3D097465737420- <1> 393 00001AD7 69662061626F76652D- <1> 393 00001AE0 6F722D657175616C0D- <1> 393 00001AE9 0A <1> 394 00001AEA 3E3C096269742D6D69- <1> db "><",9, "bit-mirror",9,9, "<=",9,"test if below-or-equal",13,10 394 00001AF3 72726F7209093C3D09- <1> 394 00001AFC 746573742069662062- <1> 394 00001B05 656C6F772D6F722D65- <1> 394 00001B0E 7175616C0D0A <1> 395 00001B14 2B096164646974696F- <1> db "+",9, "addition",9,9, "==",9,"test if equal",13,10 395 00001B1D 6E09093D3D09746573- <1> 395 00001B26 742069662065717561- <1> 395 00001B2F 6C0D0A <1> 396 00001B32 2D0973756274726163- <1> db "-",9, "subtraction",9,9, "!=",9,"test if not equal",13,10 396 00001B3B 74696F6E0909213D09- <1> 396 00001B44 74657374206966206E- <1> 396 00001B4D 6F7420657175616C0D- <1> 396 00001B56 0A <1> 397 00001B57 2A096D756C7469706C- <1> db "*",9, "multiplication",9,9, "=>",9,"same as >=",13,10 397 00001B60 69636174696F6E0909- <1> 397 00001B69 3D3E0973616D652061- <1> 397 00001B72 73203E3D0D0A <1> 398 00001B78 2F096469766973696F- <1> db "/",9, "division",9,9, "=<",9,"same as <=",13,10 398 00001B81 6E09093D3C0973616D- <1> 398 00001B8A 65206173203C3D0D0A <1> 399 00001B93 25096D6F64756C6F20- <1> db "%",9, "modulo (A-(A/B*B))",9, "<>",9,"same as !=",13,10 399 00001B9C 28412D28412F422A42- <1> 399 00001BA5 2929093C3E0973616D- <1> 399 00001BAE 6520617320213D0D0A <1> 400 00001BB7 2A2A09706F7765720D- <1> db "**",9, "power",13,10 400 00001BC0 0A <1> 401 00001BC1 0D0A <1> db 13,10 402 00001BC3 496D706C6963697420- <1> db "Implicit operater precedence is handled in the listed order, with increasing",13,10 402 00001BCC 6F7065726174657220- <1> 402 00001BD5 707265636564656E63- <1> 402 00001BDE 652069732068616E64- <1> 402 00001BE7 6C656420696E207468- <1> 402 00001BF0 65206C697374656420- <1> 402 00001BF9 6F726465722C207769- <1> 402 00001C02 746820696E63726561- <1> 402 00001C0B 73696E670D0A <1> 403 00001C11 707265636564656E63- <1> db "precedence: (Brackets specify explicit precedence of an expression.)",13,10 403 00001C1A 653A2028427261636B- <1> 403 00001C23 657473207370656369- <1> 403 00001C2C 6679206578706C6963- <1> 403 00001C35 697420707265636564- <1> 403 00001C3E 656E6365206F662061- <1> 403 00001C47 6E2065787072657373- <1> 403 00001C50 696F6E2E290D0A <1> 404 00001C57 20626F6F6C65616E20- <1> db " boolean operators OR, XOR, AND (each has a different precedence)",13,10 404 00001C60 6F70657261746F7273- <1> 404 00001C69 204F522C20584F522C- <1> 404 00001C72 20414E442028656163- <1> 404 00001C7B 682068617320612064- <1> 404 00001C84 6966666572656E7420- <1> 404 00001C8D 707265636564656E63- <1> 404 00001C96 65290D0A <1> 405 00001C9A 20636F6D7061726973- <1> db " comparison operators",13,10 405 00001CA3 6F6E206F7065726174- <1> 405 00001CAC 6F72730D0A <1> 406 00001CB1 206269747769736520- <1> db " bitwise operators OR, XOR, AND (each has a different precedence)",13,10 406 00001CBA 6F70657261746F7273- <1> 406 00001CC3 204F522C20584F522C- <1> 406 00001CCC 20414E442028656163- <1> 406 00001CD5 682068617320612064- <1> 406 00001CDE 6966666572656E7420- <1> 406 00001CE7 707265636564656E63- <1> 406 00001CF0 65290D0A <1> 407 00001CF4 20736869667420616E- <1> db " shift and bit-mirror operators",13,10 407 00001CFD 64206269742D6D6972- <1> 407 00001D06 726F72206F70657261- <1> 407 00001D0F 746F72730D0A <1> 408 00001D15 206164646974696F6E- <1> db " addition and subtraction operators",13,10 408 00001D1E 20616E642073756274- <1> 408 00001D27 72616374696F6E206F- <1> 408 00001D30 70657261746F72730D- <1> 408 00001D39 0A <1> 409 00001D3A 206D756C7469706C69- <1> db " multiplication, division and modulo operators",13,10 409 00001D43 636174696F6E2C2064- <1> 409 00001D4C 69766973696F6E2061- <1> 409 00001D55 6E64206D6F64756C6F- <1> 409 00001D5E 206F70657261746F72- <1> 409 00001D67 730D0A <1> 410 00001D6A 20706F776572206F70- <1> db " power operator",13,10 410 00001D73 657261746F720D0A <1> 411 00001D7B 0D0A <1> db 13,10 412 00001D7D 5265636F676E697A65- <1> db "Recognized unary operators: (modifying the next number)",13,10 412 00001D86 6420756E617279206F- <1> 412 00001D8F 70657261746F72733A- <1> 412 00001D98 20286D6F6469667969- <1> 412 00001DA1 6E6720746865206E65- <1> 412 00001DAA 7874206E756D626572- <1> 412 00001DB3 290D0A <1> 413 00001DB6 2B09706F7369746976- <1> db "+",9, "positive (does nothing)",13,10 413 00001DBF 652028646F6573206E- <1> 413 00001DC8 6F7468696E67290D0A <1> 414 00001DD1 2D096E656761746976- <1> db "-",9, "negative",13,10 414 00001DDA 650D0A <1> 415 00001DDD 7E0962697477697365- <1> db "~",9, "bitwise NOT",13,10 415 00001DE6 204E4F540D0A <1> 416 00001DEC 2109626F6F6C65616E- <1> db "!",9, "boolean NOT",13,10 416 00001DF5 204E4F540D0A <1> 417 00001DFB 3F096162736F6C7574- <1> db "?",9, "absolute value",13,10 417 00001E04 652076616C75650D0A <1> 418 00001E0D 212109636F6E766572- <1> db "!!",9, "convert to boolean",13,10 418 00001E16 7420746F20626F6F6C- <1> 418 00001E1F 65616E0D0A <1> 419 00001E24 0D0A <1> db 13,10 420 00001E26 4E6F74652074686174- <1> db "Note that the power operator does not affect unary operator handling.",13,10 420 00001E2F 2074686520706F7765- <1> 420 00001E38 72206F70657261746F- <1> 420 00001E41 7220646F6573206E6F- <1> 420 00001E4A 742061666665637420- <1> 420 00001E53 756E617279206F7065- <1> 420 00001E5C 7261746F722068616E- <1> 420 00001E65 646C696E672E0D0A <1> 421 00001E6D 466F7220696E737461- <1> db 'For instance, "- 2 ** 2" is parsed as "(-2) ** 2" and evaluates to 4.',13,10 421 00001E76 6E63652C20222D2032- <1> 421 00001E7F 202A2A203222206973- <1> 421 00001E88 207061727365642061- <1> 421 00001E91 732022282D3229202A- <1> 421 00001E9A 2A20322220616E6420- <1> 421 00001EA3 6576616C7561746573- <1> 421 00001EAC 20746F20342E0D0A <1> 422 00001EB4 0D0A <1> db 13,10 423 00001EB6 416C74686F75676820- <1> db "Although a negative unary and signed bit-shift right operator are provided",13,10 423 00001EBF 61206E656761746976- <1> 423 00001EC8 6520756E6172792061- <1> 423 00001ED1 6E64207369676E6564- <1> 423 00001EDA 206269742D73686966- <1> 423 00001EE3 74207269676874206F- <1> 423 00001EEC 70657261746F722061- <1> 423 00001EF5 72652070726F766964- <1> 423 00001EFE 65640D0A <1> 424 00001F02 746865206578707265- <1> db "the expression evaluator is intrinsically unsigned. Particularly the division,",13,10 424 00001F0B 7373696F6E20657661- <1> 424 00001F14 6C7561746F72206973- <1> 424 00001F1D 20696E7472696E7369- <1> 424 00001F26 63616C6C7920756E73- <1> 424 00001F2F 69676E65642E205061- <1> 424 00001F38 72746963756C61726C- <1> 424 00001F41 792074686520646976- <1> 424 00001F4A 6973696F6E2C0D0A <1> 425 00001F52 6D756C7469706C6963- <1> db "multiplication, modulo and all comparison operators operate unsigned. Due to",13,10 425 00001F5B 6174696F6E2C206D6F- <1> 425 00001F64 64756C6F20616E6420- <1> 425 00001F6D 616C6C20636F6D7061- <1> 425 00001F76 7269736F6E206F7065- <1> 425 00001F7F 7261746F7273206F70- <1> 425 00001F88 657261746520756E73- <1> 425 00001F91 69676E65642E204475- <1> 425 00001F9A 6520746F0D0A <1> 426 00001FA0 746869732C20746865- <1> db 'this, the expression "-1 < 0" evaluates to zero.',13,10 426 00001FA9 206578707265737369- <1> 426 00001FB2 6F6E20222D31203C20- <1> 426 00001FBB 3022206576616C7561- <1> 426 00001FC4 74657320746F207A65- <1> 426 00001FCD 726F2E0D0A <1> 427 00001FD2 0D0A <1> db 13,10 428 00001FD4 5265636F676E697A65- <1> db "Recognized terms in an expression:",13,10 428 00001FDD 64207465726D732069- <1> 428 00001FE6 6E20616E2065787072- <1> 428 00001FEF 657373696F6E3A0D0A <1> 429 00001FF8 2033322D6269742069- <1> db " 32-bit immediates",13,10 429 00002001 6D6D65646961746573- <1> 429 0000200A 0D0A <1> 430 0000200C 20382D626974207265- <1> db " 8-bit registers",13,10 430 00002015 676973746572730D0A <1> 431 0000201E 2031362D6269742072- <1> db " 16-bit registers including segment registers (except FS, GS)",13,10 431 00002027 656769737465727320- <1> 431 00002030 696E636C7564696E67- <1> 431 00002039 207365676D656E7420- <1> 431 00002042 726567697374657273- <1> 431 0000204B 202865786365707420- <1> 431 00002054 46532C204753290D0A <1> 432 0000205D 2033322D6269742063- <1> db " 32-bit compound registers made of two 16-bit registers (eg DXAX)",13,10 432 00002066 6F6D706F756E642072- <1> 432 0000206F 656769737465727320- <1> 432 00002078 6D616465206F662074- <1> 432 00002081 776F2031362D626974- <1> 432 0000208A 207265676973746572- <1> 432 00002093 732028656720445841- <1> 432 0000209C 58290D0A <1> 433 000020A0 2033322D6269742072- <1> db " 32-bit registers and FS, GS only if running on a 386+",13,10 433 000020A9 656769737465727320- <1> 433 000020B2 616E642046532C2047- <1> 433 000020BB 53206F6E6C79206966- <1> 433 000020C4 2072756E6E696E6720- <1> 433 000020CD 6F6E2061203338362B- <1> 433 000020D6 0D0A <1> 434 <1> %if _MMXSUPP 435 000020D8 2036342D626974204D- <1> db " 64-bit MMX registers only if running on a CPU with MMX (r/o for now)",13,10 435 000020E1 4D5820726567697374- <1> 435 000020EA 657273206F6E6C7920- <1> 435 000020F3 69662072756E6E696E- <1> 435 000020FC 67206F6E2061204350- <1> 435 00002105 552077697468204D4D- <1> 435 0000210E 582028722F6F20666F- <1> 435 00002117 72206E6F77290D0A <1> 436 0000211F 20204D4D304C2C204D- <1> db " MM0L, MM(0)L accesses the low 32 bits of the register",13,10 436 00002128 4D2830294C20616363- <1> 436 00002131 657373657320746865- <1> 436 0000213A 206C6F772033322062- <1> 436 00002143 697473206F66207468- <1> 436 0000214C 652072656769737465- <1> 436 00002155 720D0A <1> 437 00002158 20204D4D30482C204D- <1> db " MM0H, MM(0)H accesses the high 32 bits of the register",13,10 437 00002161 4D2830294820616363- <1> 437 0000216A 657373657320746865- <1> 437 00002173 206869676820333220- <1> 437 0000217C 62697473206F662074- <1> 437 00002185 686520726567697374- <1> 437 0000218E 65720D0A <1> 438 00002192 20204D4D305A2C204D- <1> db " MM0Z, MM(0)Z reads the low 32 bits; writes the full register (zero-extend)",13,10 438 0000219B 4D2830295A20726561- <1> 438 000021A4 647320746865206C6F- <1> 438 000021AD 772033322062697473- <1> 438 000021B6 3B2077726974657320- <1> 438 000021BF 7468652066756C6C20- <1> 438 000021C8 726567697374657220- <1> 438 000021D1 287A65726F2D657874- <1> 438 000021DA 656E64290D0A <1> 439 000021E0 20204D4D30532C204D- <1> db " MM0S, MM(0)S reads the low 32 bits; writes the full register (sign-extend)",13,10 439 000021E9 4D2830295320726561- <1> 439 000021F2 647320746865206C6F- <1> 439 000021FB 772033322062697473- <1> 439 00002204 3B2077726974657320- <1> 439 0000220D 7468652066756C6C20- <1> 439 00002216 726567697374657220- <1> 439 0000221F 287369676E2D657874- <1> 439 00002228 656E64290D0A <1> 440 0000222E 20204D4D302C204D4D- <1> db " MM0, MM(0) is an alias for the MM0Z syntax",13,10 440 00002237 28302920697320616E- <1> 440 00002240 20616C69617320666F- <1> 440 00002249 7220746865204D4D30- <1> 440 00002252 5A2073796E7461780D- <1> 440 0000225B 0A <1> 441 <1> %endif 442 <1> %if _VARIABLES 443 0000225C 2033322D6269742076- <1> db " 32-bit variables V0..VF",13,10 443 00002265 61726961626C657320- <1> 443 0000226E 56302E2E56460D0A <1> 444 <1> %endif 445 <1> %if _OPTIONS || _PSPVARIABLES 446 00002276 2033322D6269742073- <1> db " 32-bit special variable" 446 0000227F 70656369616C207661- <1> 446 00002288 726961626C65 <1> 447 <1> %if _OPTIONS 448 0000228E 732044434F2C204443- <1> db "s DCO, DCS, DAO, DAS, DIF, DPI" 448 00002297 532C2044414F2C2044- <1> 448 000022A0 41532C204449462C20- <1> 448 000022A9 445049 <1> 449 <1> %if _PSPVARIABLES 450 000022AC 2C <1> db "," 451 <1> %endif 452 <1> %endif 453 <1> %if _PSPVARIABLES 454 000022AD 20505049 <1> db " PPI" 455 <1> %endif 456 000022B1 0D0A <1> db 13,10 457 000022B3 2031362D6269742073- <1> db " 16-bit special variables" 457 000022BC 70656369616C207661- <1> 457 000022C5 726961626C6573 <1> 458 <1> %if _OPTIONS 459 000022CC 204450522C20445050 <1> db " DPR, DPP" 460 <1> %if _PM 461 <1> db ", DPS" 462 <1> %endif 463 <1> %if _PSPVARIABLES 464 000022D5 2C <1> db "," 465 <1> %endif 466 <1> %endif 467 <1> %if _PSPVARIABLES 468 000022D6 205053502C20505052 <1> db " PSP, PPR" 469 <1> %endif 470 000022DF 0D0A <1> db 13,10 471 <1> %endif 472 <1> %if _INDIRECTION 473 000022E1 20627974652F776F72- <1> db " byte/word/dword memory content (eg byte [seg:ofs], where both the optional",13,10 473 000022EA 642F64776F7264206D- <1> 473 000022F3 656D6F727920636F6E- <1> 473 000022FC 74656E742028656720- <1> 473 00002305 62797465205B736567- <1> 473 0000230E 3A6F66735D2C207768- <1> 473 00002317 65726520626F746820- <1> 473 00002320 746865206F7074696F- <1> 473 00002329 6E616C0D0A <1> 474 0000232E 20207365676D656E74- <1> db " segment as well as the offset are expressions too)",13,10 474 00002337 2061732077656C6C20- <1> 474 00002340 617320746865206F66- <1> 474 00002349 667365742061726520- <1> 474 00002352 65787072657373696F- <1> 474 0000235B 6E7320746F6F290D0A <1> 475 <1> %endif 476 00002364 546865206578707265- <1> db "The expression evaluator case-insensitively checks for names of variables",13,10 476 0000236D 7373696F6E20657661- <1> 476 00002376 6C7561746F72206361- <1> 476 0000237F 73652D696E73656E73- <1> 476 00002388 69746976656C792063- <1> 476 00002391 6865636B7320666F72- <1> 476 0000239A 206E616D6573206F66- <1> 476 000023A3 207661726961626C65- <1> 476 000023AC 730D0A <1> 477 000023AF 616E64207265676973- <1> db "and registers" 477 000023B8 74657273 <1> 478 <1> %if _INDIRECTION 479 000023BC 2061732077656C6C20- <1> db " as well as size specifiers" 479 000023C5 61732073697A652073- <1> 479 000023CE 706563696669657273 <1> 480 <1> %endif 481 000023D7 2E0D0A <1> db '.',13,10 482 000023DA 0D0A <1> db 13,10 483 000023DC 456E746572203F5220- <1> db "Enter ?R to display the recognized register names.",13,10 483 000023E5 746F20646973706C61- <1> 483 000023EE 792074686520726563- <1> 483 000023F7 6F676E697A65642072- <1> 483 00002400 65676973746572206E- <1> 483 00002409 616D65732E0D0A <1> 484 <1> %if _VARIABLES || _OPTIONS || _PSPVARIABLES 485 00002410 456E746572203F5620- <1> db "Enter ?V to display the recognized variables.",13,10 485 00002419 746F20646973706C61- <1> 485 00002422 792074686520726563- <1> 485 0000242B 6F676E697A65642076- <1> 485 00002434 61726961626C65732E- <1> 485 0000243D 0D0A <1> 486 <1> %endif 487 0000243F 00 <1> asciz 488 <1> %endif 489 <1> 490 <1> %if _OPTIONS 491 <1> .ophelp: 492 00002440 417661696C61626C65- <1> db "Available options: (read/write DCO, read DCS)",13,10 492 00002449 206F7074696F6E733A- <1> 492 00002452 2028726561642F7772- <1> 492 0000245B 6974652044434F2C20- <1> 492 00002464 726561642044435329- <1> 492 0000246D 0D0A <1> 493 0000246F 303030312052583A20- <1> db _4digitshex(dispregs32), " RX: 32-bit register display",13,10 493 00002478 33322D626974207265- <1> 493 00002481 676973746572206469- <1> 493 0000248A 73706C61790D0A <1> 494 00002491 3030303220544D3A20- <1> db _4digitshex(traceints), " TM: trace into interrupts",13,10 494 0000249A 747261636520696E74- <1> 494 000024A3 6F20696E7465727275- <1> 494 000024AC 7074730D0A <1> 495 000024B1 3030303420616C6C6F- <1> db _4digitshex(cpdepchars), " allow dumping of CP-dependant characters",13,10 495 000024BA 772064756D70696E67- <1> 495 000024C3 206F662043502D6465- <1> 495 000024CC 70656E64616E742063- <1> 495 000024D5 686172616374657273- <1> 495 000024DE 0D0A <1> 496 000024E0 3030303820616C7761- <1> db _4digitshex(fakeindos), " always assume InDOS flag non-zero, to debug DOS or TSRs",13,10 496 000024E9 797320617373756D65- <1> 496 000024F2 20496E444F5320666C- <1> 496 000024FB 6167206E6F6E2D7A65- <1> 496 00002504 726F2C20746F206465- <1> 496 0000250D 62756720444F53206F- <1> 496 00002516 7220545352730D0A <1> 497 0000251E 303031302064697361- <1> db _4digitshex(nonpagingdevice)," disallow paged output to StdOut",13,10 497 00002527 6C6C6F772070616765- <1> 497 00002530 64206F757470757420- <1> 497 00002539 746F205374644F7574- <1> 497 00002542 0D0A <1> 498 00002544 3030323020616C6C6F- <1> db _4digitshex(pagingdevice), " allow paged output to non-StdOut",13,10 498 0000254D 77207061676564206F- <1> 498 00002556 757470757420746F20- <1> 498 0000255F 6E6F6E2D5374644F75- <1> 498 00002568 740D0A <1> 499 0000256B 303034302064697370- <1> db _4digitshex(hexrn), " display raw hexadecimal content of FPU registers",13,10 499 00002574 6C6179207261772068- <1> 499 0000257D 657861646563696D61- <1> 499 00002586 6C20636F6E74656E74- <1> 499 0000258F 206F66204650552072- <1> 499 00002598 65676973746572730D- <1> 499 000025A1 0A <1> 500 000025A2 30313030207768656E- <1> db _4digitshex(nondospaging), " when prompting during paging, do not use DOS for input",13,10 500 000025AB 2070726F6D7074696E- <1> 500 000025B4 6720647572696E6720- <1> 500 000025BD 706167696E672C2064- <1> 500 000025C6 6F206E6F7420757365- <1> 500 000025CF 20444F5320666F7220- <1> 500 000025D8 696E7075740D0A <1> 501 000025DF 3032303020646F206E- <1> db _4digitshex(nohlt), " do not execute HLT instruction to idle",13,10 501 000025E8 6F7420657865637574- <1> 501 000025F1 6520484C5420696E73- <1> 501 000025FA 7472756374696F6E20- <1> 501 00002603 746F2069646C650D0A <1> 502 0000260C 3034303020646F206E- <1> db _4digitshex(biosidles), " do not idle, the keyboard BIOS idles itself",13,10 502 00002615 6F742069646C652C20- <1> 502 0000261E 746865206B6579626F- <1> 502 00002627 6172642042494F5320- <1> 502 00002630 69646C657320697473- <1> 502 00002639 656C660D0A <1> 503 0000263E 3130303020696E2064- <1> db _4digitshex(use_si_units), " in disp_*_size use SI units (kB = 1000, etc)." 503 00002647 6973705F2A5F73697A- <1> 503 00002650 652075736520534920- <1> 503 00002659 756E69747320286B42- <1> 503 00002662 203D20313030302C20- <1> 503 0000266B 657463292E <1> 504 00002670 206F76657272696465- <1> db " overrides ",_4digitshex(use_jedec_units),"!",13,10 504 00002679 732032303030210D0A <1> 505 00002682 3230303020696E2064- <1> db _4digitshex(use_jedec_units)," in disp_*_size use JEDEC units (kB = 1024)",13,10 505 0000268B 6973705F2A5F73697A- <1> 505 00002694 6520757365204A4544- <1> 505 0000269D 454320756E69747320- <1> 505 000026A6 286B42203D20313032- <1> 505 000026AF 34290D0A <1> 506 000026B3 3430303020656E6162- <1> db _4digitshex(enable_serial)," enable serial I/O (port ",_4digitshex(_UART_BASE),"h interrupt ",_2digitshex(_INTNUM),"h)",13,10 506 000026BC 6C652073657269616C- <1> 506 000026C5 20492F4F2028706F72- <1> 506 000026CE 742030324638682069- <1> 506 000026D7 6E7465727275707420- <1> 506 000026E0 304268290D0A <1> 507 000026E6 383030302064697361- <1> db _4digitshex(int8_disable_serial)," disable serial I/O when breaking after 5 seconds Ctrl pressed",13,10 507 000026EF 626C65207365726961- <1> 507 000026F8 6C20492F4F20776865- <1> 507 00002701 6E20627265616B696E- <1> 507 0000270A 672061667465722035- <1> 507 00002713 207365636F6E647320- <1> 507 0000271C 4374726C2070726573- <1> 507 00002725 7365640D0A <1> 508 0000272A 0D0A <1> db 13,10 509 0000272C 496E7465726E616C20- <1> db "Internal flags: (read DIF)",13,10 509 00002735 666C6167733A202872- <1> 509 0000273E 65616420444946290D- <1> 509 00002747 0A <1> 510 00002748 30303030303120496E- <1> db _6digitshex(oldpacket), " Int25/Int26 packet method available",13,10 510 00002751 7432352F496E743236- <1> 510 0000275A 207061636B6574206D- <1> 510 00002763 6574686F6420617661- <1> 510 0000276C 696C61626C650D0A <1> 511 00002774 30303030303220496E- <1> db _6digitshex(newpacket), " Int21.7305 packet method available",13,10 511 0000277D 7432312E3733303520- <1> 511 00002786 7061636B6574206D65- <1> 511 0000278F 74686F642061766169- <1> 511 00002798 6C61626C650D0A <1> 512 <1> %if _VDD 513 0000279F 303030303034205644- <1> db _6digitshex(ntpacket), " VDD registered and usable",13,10 513 000027A8 442072656769737465- <1> 513 000027B1 72656420616E642075- <1> 513 000027BA 7361626C650D0A <1> 514 <1> %endif 515 000027C1 30303030303820696E- <1> db _6digitshex(pagedcommand), " internal flag for paged output",13,10 515 000027CA 7465726E616C20666C- <1> 515 000027D3 616720666F72207061- <1> 515 000027DC 676564206F75747075- <1> 515 000027E5 740D0A <1> 516 000027E8 303030303130204445- <1> db _6digitshex(notstdinput), " DEBUG's input isn't StdIn",13,10 516 000027F1 425547277320696E70- <1> 516 000027FA 75742069736E277420- <1> 516 00002803 537464496E0D0A <1> 517 0000280A 303030303230204445- <1> db _6digitshex(inputfile), " DEBUG's input is a file",13,10 517 00002813 425547277320696E70- <1> 517 0000281C 757420697320612066- <1> 517 00002825 696C650D0A <1> 518 0000282A 303030303430204445- <1> db _6digitshex(notstdoutput), " DEBUG's output isn't StdOut",13,10 518 00002833 4255472773206F7574- <1> 518 0000283C 7075742069736E2774- <1> 518 00002845 205374644F75740D0A <1> 519 0000284E 303030303830204445- <1> db _6digitshex(outputfile), " DEBUG's output is a file",13,10 519 00002857 4255472773206F7574- <1> 519 00002860 707574206973206120- <1> 519 00002869 66696C650D0A <1> 520 <1> %if _PM 521 <1> db _6digitshex(hooked2F), " Int2F.1687 hooked",13,10 522 <1> db _6digitshex(nohook2F), " Int2F.1687 won't be hooked",13,10 523 <1> db _6digitshex(dpminohlt), " do not execute HLT to idle in PM",13,10 524 <1> db _6digitshex(protectedmode), " in protected mode",13,10 525 <1> %endif 526 0000286F 303031303030207374- <1> db _6digitshex(debuggeeA20), " state of debuggee's A20",13,10 526 00002878 617465206F66206465- <1> 526 00002881 627567676565277320- <1> 526 0000288A 4132300D0A <1> 527 0000288F 303032303030207374- <1> db _6digitshex(debuggerA20), " state of debugger's A20 (not implemented: same as previous)",13,10 527 00002898 617465206F66206465- <1> 527 000028A1 627567676572277320- <1> 527 000028AA 41323020286E6F7420- <1> 527 000028B3 696D706C656D656E74- <1> 527 000028BC 65643A2073616D6520- <1> 527 000028C5 61732070726576696F- <1> 527 000028CE 7573290D0A <1> 528 <1> %if _BOOTLDR 529 000028D3 303034303030206465- <1> db _6digitshex(nodosloaded), " debugger booted independent of a DOS",13,10 529 000028DC 62756767657220626F- <1> 529 000028E5 6F74656420696E6465- <1> 529 000028EE 70656E64656E74206F- <1> 529 000028F7 66206120444F530D0A <1> 530 <1> %endif 531 00002900 303038303030204350- <1> db _6digitshex(has386), " CPU is at least a 386 (32-bit CPU)",13,10 531 00002909 55206973206174206C- <1> 531 00002912 656173742061203338- <1> 531 0000291B 36202833322D626974- <1> 531 00002924 20435055290D0A <1> 532 0000292B 30313030303020696E- <1> db _6digitshex(usecharcounter), " internal flag for tab output processing",13,10 532 00002934 7465726E616C20666C- <1> 532 0000293D 616720666F72207461- <1> 532 00002946 62206F757470757420- <1> 532 0000294F 70726F63657373696E- <1> 532 00002958 670D0A <1> 533 <1> %if _VDD 534 0000295B 303230303030207275- <1> db _6digitshex(runningnt), " running inside NTVDM",13,10 534 00002964 6E6E696E6720696E73- <1> 534 0000296D 696465204E5456444D- <1> 534 00002976 0D0A <1> 535 <1> %endif 536 <1> %if _PM 537 <1> db _6digitshex(canswitchmode), " DPMI raw mode switch usable to set breakpoints",13,10 538 <1> db _6digitshex(modeswitched), " internal flag for mode switching",13,10 539 <1> %endif 540 00002978 31303030303020696E- <1> db _6digitshex(promptwaiting), " internal flag for paged output",13,10 540 00002981 7465726E616C20666C- <1> 540 0000298A 616720666F72207061- <1> 540 00002993 676564206F75747075- <1> 540 0000299C 740D0A <1> 541 <1> %if _PM 542 <1> db _6digitshex(switchbuffer), " internal flag for mode switching",13,10 543 <1> %endif 544 <1> %if _TSR 545 0000299F 34303030303020696E- <1> db _6digitshex(tsrmode), " in TSR mode (detached debugger process)",13,10 545 000029A8 20545352206D6F6465- <1> 545 000029B1 202864657461636865- <1> 545 000029BA 642064656275676765- <1> 545 000029C3 722070726F63657373- <1> 545 000029CC 290D0A <1> 546 <1> %endif 547 <1> %if _DOSEMU 548 000029CF 303130303030303020- <1> db _8digitshex(runningdosemu), " running inside dosemu",13,10 548 000029D8 72756E6E696E672069- <1> 548 000029E1 6E7369646520646F73- <1> 548 000029EA 656D750D0A <1> 549 <1> %endif 550 <1> %if _BOOTLDR 551 000029EF 3032303030303030 <1> db _8digitshex(load_is_ldp) 552 000029F7 20626F6F74206C6F61- <1> db " boot load: partition specified as ",'"ldp"',13,10 552 00002A00 643A20706172746974- <1> 552 00002A09 696F6E207370656369- <1> 552 00002A12 666965642061732022- <1> 552 00002A1B 6C6470220D0A <1> 553 <1> %endif 554 00002A21 3034303030303030 <1> db _8digitshex(tt_while) 555 00002A29 20542F54502F503A20- <1> db " T/TP/P: while condition specified",13,10 555 00002A32 7768696C6520636F6E- <1> 555 00002A3B 646974696F6E207370- <1> 555 00002A44 656369666965640D0A <1> 556 00002A4D 3038303030303030 <1> db _8digitshex(tt_p) 557 00002A55 2054503A2050207370- <1> db " TP: P specified (proceed past string ops)",13,10 557 00002A5E 656369666965642028- <1> 557 00002A67 70726F636565642070- <1> 557 00002A70 61737420737472696E- <1> 557 00002A79 67206F7073290D0A <1> 558 00002A81 3130303030303030 <1> db _8digitshex(tt_silent_mode) 559 00002A89 20542F54502F503A20- <1> db " T/TP/P: silent mode (SILENT specified)",13,10 559 00002A92 73696C656E74206D6F- <1> 559 00002A9B 6465202853494C454E- <1> 559 00002AA4 542073706563696669- <1> 559 00002AAD 6564290D0A <1> 560 00002AB2 3230303030303030 <1> db _8digitshex(tt_silence) 561 00002ABA 20542F54502F503A20- <1> db " T/TP/P: silent mode is active, writing to silent buffer",13,10 561 00002AC3 73696C656E74206D6F- <1> 561 00002ACC 646520697320616374- <1> 561 00002AD5 6976652C2077726974- <1> 561 00002ADE 696E6720746F207369- <1> 561 00002AE7 6C656E742062756666- <1> 561 00002AF0 65720D0A <1> 562 00002AF4 0D0A <1> db 13,10 563 00002AF6 417661696C61626C65- <1> db "Available assembler/disassembler options: (read/write DAO, read DAS)",13,10 563 00002AFF 20617373656D626C65- <1> 563 00002B08 722F64697361737365- <1> 563 00002B11 6D626C6572206F7074- <1> 563 00002B1A 696F6E733A20287265- <1> 563 00002B23 61642F777269746520- <1> 563 00002B2C 44414F2C2072656164- <1> 563 00002B35 20444153290D0A <1> 564 00002B3C 303120446973617373- <1> db _2digitshex(disasm_lowercase), " Disassembler: lowercase output",13,10 564 00002B45 656D626C65723A206C- <1> 564 00002B4E 6F7765726361736520- <1> 564 00002B57 6F75747075740D0A <1> 565 00002B5F 303220446973617373- <1> db _2digitshex(disasm_commablank)," Disassembler: output blank behind comma",13,10 565 00002B68 656D626C65723A206F- <1> 565 00002B71 757470757420626C61- <1> 565 00002B7A 6E6B20626568696E64- <1> 565 00002B83 20636F6D6D610D0A <1> 566 00002B8B 303420446973617373- <1> db _2digitshex(disasm_nasm), " Disassembler: output addresses in NASM syntax",13,10 566 00002B94 656D626C65723A206F- <1> 566 00002B9D 757470757420616464- <1> 566 00002BA6 72657373657320696E- <1> 566 00002BAF 204E41534D2073796E- <1> 566 00002BB8 7461780D0A <1> 567 00002BBD 00 <1> asciz 568 <1> %endif 569 <1> 570 <1> %if _VARIABLES || _OPTIONS || _PSPVARIABLES 571 <1> .varhelp: 572 00002BBE 417661696C61626C65- <1> db "Available " 572 00002BC7 20 <1> 573 <1> %if _PSPVARIABLES && !(_VARIABLES || _OPTIONS) 574 <1> db "read-only " 575 <1> %endif 576 00002BC8 6C4465627567207661- <1> db "lDebug variables:",13,10 576 00002BD1 726961626C65733A0D- <1> 576 00002BDA 0A <1> 577 <1> %if _VARIABLES 578 00002BDB 56302E2E5646095573- <1> db "V0..VF",9,"User-specified usage",13,10 578 00002BE4 65722D737065636966- <1> 578 00002BED 696564207573616765- <1> 578 00002BF6 0D0A <1> 579 <1> %endif 580 <1> %if _OPTIONS 581 00002BF8 44434F094465627567- <1> db "DCO",9,"Debugger Common Options",13,10 581 00002C01 67657220436F6D6D6F- <1> 581 00002C0A 6E204F7074696F6E73- <1> 581 00002C13 0D0A <1> 582 00002C15 44414F094465627567- <1> db "DAO",9,"Debugger Assembler/disassembler Options",13,10 582 00002C1E 67657220417373656D- <1> 582 00002C27 626C65722F64697361- <1> 582 00002C30 7373656D626C657220- <1> 582 00002C39 4F7074696F6E730D0A <1> 583 <1> %endif 584 <1> %if _OPTIONS || _PSPVARIABLES && (_OPTIONS || _VARIABLES) 585 00002C42 2054686520666F6C6C- <1> db " The following variables cannot be written:",13,10 585 00002C4B 6F77696E6720766172- <1> 585 00002C54 6961626C6573206361- <1> 585 00002C5D 6E6E6F742062652077- <1> 585 00002C66 72697474656E3A0D0A <1> 586 <1> %endif 587 <1> %if _PSPVARIABLES 588 00002C6F 505350094465627567- <1> db "PSP",9,"Debuggee Process" 588 00002C78 6765652050726F6365- <1> 588 00002C81 7373 <1> 589 <1> %if _PM 590 <1> db " (as real mode segment)" 591 <1> %endif 592 00002C83 0D0A <1> db 13,10 593 00002C85 505052094465627567- <1> db "PPR",9,"Debuggee's Parent Process",13,10 593 00002C8E 676565277320506172- <1> 593 00002C97 656E742050726F6365- <1> 593 00002CA0 73730D0A <1> 594 00002CA4 505049094465627567- <1> db "PPI",9,"Debuggee's Parent Process Interrupt 22h",13,10 594 00002CAD 676565277320506172- <1> 594 00002CB6 656E742050726F6365- <1> 594 00002CBF 737320496E74657272- <1> 594 00002CC8 757074203232680D0A <1> 595 <1> %endif 596 <1> %if _OPTIONS 597 00002CD1 444946094465627567- <1> db "DIF",9,"Debugger Internal Flags",13,10 597 00002CDA 67657220496E746572- <1> 597 00002CE3 6E616C20466C616773- <1> 597 00002CEC 0D0A <1> 598 00002CEE 444353094465627567- <1> db "DCS",9,"Debugger Common Startup options",13,10 598 00002CF7 67657220436F6D6D6F- <1> 598 00002D00 6E2053746172747570- <1> 598 00002D09 206F7074696F6E730D- <1> 598 00002D12 0A <1> 599 00002D13 444153094465627567- <1> db "DAS",9,"Debugger Assembler/disassembler Startup options",13,10 599 00002D1C 67657220417373656D- <1> 599 00002D25 626C65722F64697361- <1> 599 00002D2E 7373656D626C657220- <1> 599 00002D37 53746172747570206F- <1> 599 00002D40 7074696F6E730D0A <1> 600 00002D48 445052094465627567- <1> db "DPR",9,"Debugger Process" 600 00002D51 6765722050726F6365- <1> 600 00002D5A 7373 <1> 601 <1> %if _PM 602 <1> db " (as Real mode segment)",13,10 603 <1> db "DPS",9,"Debugger Process Selector (zero in real mode)" 604 <1> %endif 605 00002D5C 0D0A <1> db 13,10 606 00002D5E 445050094465627567- <1> db "DPP",9,"Debugger's Parent Process" 606 00002D67 676572277320506172- <1> 606 00002D70 656E742050726F6365- <1> 606 00002D79 7373 <1> 607 <1> %if _TSR 608 00002D7B 20287A65726F20696E- <1> db " (zero in TSR mode)" 608 00002D84 20545352206D6F6465- <1> 608 00002D8D 29 <1> 609 <1> %endif 610 00002D8E 0D0A <1> db 13,10 611 00002D90 445049094465627567- <1> db "DPI",9,"Debugger's Parent process Interrupt 22h" 611 00002D99 676572277320506172- <1> 611 00002DA2 656E742070726F6365- <1> 611 00002DAB 737320496E74657272- <1> 611 00002DB4 75707420323268 <1> 612 <1> %if _TSR 613 00002DBB 20287A65726F20696E- <1> db " (zero in TSR mode)" 613 00002DC4 20545352206D6F6465- <1> 613 00002DCD 29 <1> 614 <1> %endif 615 00002DCE 0D0A <1> db 13,10 616 00002DD0 0D0A <1> db 13,10 617 00002DD2 456E746572203F4F20- <1> db "Enter ?O to display the options and internal flags.",13,10 617 00002DDB 746F20646973706C61- <1> 617 00002DE4 7920746865206F7074- <1> 617 00002DED 696F6E7320616E6420- <1> 617 00002DF6 696E7465726E616C20- <1> 617 00002DFF 666C6167732E0D0A <1> 618 <1> %endif 619 00002E07 00 <1> asciz 620 <1> %endif 621 <1> %if _BOOTLDR 622 <1> .boothelp: 623 00002E08 426F6F74206C6F6164- <1> db "Boot loading commands:",13,10 623 00002E11 696E6720636F6D6D61- <1> 623 00002E1A 6E64733A0D0A <1> 624 00002E20 424F4F54204C495354- <1> db "BOOT LIST HDA",9,"[note: writes to memory @ 600h and 7C00h]",13,10 624 00002E29 20484441095B6E6F74- <1> 624 00002E32 653A20777269746573- <1> 624 00002E3B 20746F206D656D6F72- <1> 624 00002E44 792040203630306820- <1> 624 00002E4D 616E64203743303068- <1> 624 00002E56 5D0D0A <1> 625 <1> %if _DOSEMU 626 00002E59 424F4F542051554954- <1> db "BOOT QUIT",9,"[exits dosemu]",13,10 626 00002E62 095B65786974732064- <1> 626 00002E6B 6F73656D755D0D0A <1> 627 <1> %endif 628 00002E73 424F4F54205B50524F- <1> db "BOOT [PROTOCOL=SECTOR] HDA[num]|FDA",13,10 628 00002E7C 544F434F4C3D534543- <1> 628 00002E85 544F525D204844415B- <1> 628 00002E8E 6E756D5D7C4644410D- <1> 628 00002E97 0A <1> 629 00002E98 424F4F542050524F54- <1> db "BOOT PROTOCOL=proto [opt] HDAnum|FDA [filename1] [filename2]",13,10 629 00002EA1 4F434F4C3D70726F74- <1> 629 00002EAA 6F205B6F70745D2048- <1> 629 00002EB3 44416E756D7C464441- <1> 629 00002EBC 205B66696C656E616D- <1> 629 00002EC5 65315D205B66696C65- <1> 629 00002ECE 6E616D65325D0D0A <1> 630 00002ED6 0D0A <1> db 13,10 631 00002ED8 417661696C61626C65- <1> db "Available protocols:",13,10 631 00002EE1 2070726F746F636F6C- <1> 631 00002EEA 733A0D0A <1> 632 00002EEE 204C444F5309094C44- <1> db " LDOS",9,9, "LDOS.COM or L[D]DEBUG.COM at 70h, 0:400h",13,10 632 00002EF7 4F532E434F4D206F72- <1> 632 00002F00 204C5B445D44454255- <1> 632 00002F09 472E434F4D20617420- <1> 632 00002F12 3730682C20303A3430- <1> 632 00002F1B 30680D0A <1> 633 00002F1F 2046524545444F5309- <1> db " FREEDOS",9,"KERNEL.SYS or METAKERN.SYS at 60h, 0:0",13,10 633 00002F28 4B45524E454C2E5359- <1> 633 00002F31 53206F72204D455441- <1> 633 00002F3A 4B45524E2E53595320- <1> 633 00002F43 6174203630682C2030- <1> 633 00002F4C 3A300D0A <1> 634 00002F50 20454452444F530909- <1> db " EDRDOS",9,9,"DRBIO.SYS at 70h, 0:0",13,10 634 00002F59 445242494F2E535953- <1> 634 00002F62 206174203730682C20- <1> 634 00002F6B 303A300D0A <1> 635 00002F70 204D53444F53360909- <1> db " MSDOS6",9,9, "IO.SYS + MSDOS.SYS at 70h, 0:0",13,10 635 00002F79 494F2E535953202B20- <1> 635 00002F82 4D53444F532E535953- <1> 635 00002F8B 206174203730682C20- <1> 635 00002F94 303A300D0A <1> 636 00002F99 204D53444F53370909- <1> db " MSDOS7",9,9, "IO.SYS at 70h, 0:200h",13,10 636 00002FA2 494F2E535953206174- <1> 636 00002FAB 203730682C20303A32- <1> 636 00002FB4 3030680D0A <1> 637 00002FB9 2049424D444F530909- <1> db " IBMDOS",9,9, "IBMBIO.COM + IBMDOS.COM at 70h, 0:0",13,10 637 00002FC2 49424D42494F2E434F- <1> 637 00002FCB 4D202B2049424D444F- <1> 637 00002FD4 532E434F4D20617420- <1> 637 00002FDD 3730682C20303A300D- <1> 637 00002FE6 0A <1> 638 00002FE7 204E544C445209094E- <1> db " NTLDR",9,9, "NTLDR at 2000h, 0:0",13,10 638 00002FF0 544C44522061742032- <1> 638 00002FF9 303030682C20303A30- <1> 638 00003002 0D0A <1> 639 00003004 205258444F532E3009- <1> db " RXDOS.0",9,"RXDOSBIO.SYS + RXDOS.SYS at 70h, 0:0",13,10 639 0000300D 5258444F5342494F2E- <1> 639 00003016 535953202B20525844- <1> 639 0000301F 4F532E535953206174- <1> 639 00003028 203730682C20303A30- <1> 639 00003031 0D0A <1> 640 00003033 205258444F532E3109- <1> db " RXDOS.1",9,"RXBIO.SYS + RXDOS.SYS at 70h, 0:0",13,10 640 0000303C 525842494F2E535953- <1> 640 00003045 202B205258444F532E- <1> 640 0000304E 535953206174203730- <1> 640 00003057 682C20303A300D0A <1> 641 0000305F 205258444F532E3209- <1> db " RXDOS.2",9,"RXDOS.COM at 70h, 0:400h",13,10 641 00003068 5258444F532E434F4D- <1> 641 00003071 206174203730682C20- <1> 641 0000307A 303A343030680D0A <1> 642 00003082 20534543544F520909- <1> db " SECTOR",9,9,"(default) load partition boot sector or MBR",13,10 642 0000308B 2864656661756C7429- <1> 642 00003094 206C6F616420706172- <1> 642 0000309D 746974696F6E20626F- <1> 642 000030A6 6F7420736563746F72- <1> 642 000030AF 206F72204D42520D0A <1> 643 000030B8 20534543544F52414C- <1> db " SECTORALT",9,"as SECTOR, but entry at 07C0h:0",13,10 643 000030C1 540961732053454354- <1> 643 000030CA 4F522C206275742065- <1> 643 000030D3 6E7472792061742030- <1> 643 000030DC 374330683A300D0A <1> 644 000030E4 0D0A <1> db 13,10 645 000030E6 417661696C61626C65- <1> db "Available options:",13,10 645 000030EF 206F7074696F6E733A- <1> 645 000030F8 0D0A <1> 646 000030FA 204D494E504152413D- <1> db " MINPARA=num",9,9, "load at least that many paragraphs",13,10 646 00003103 6E756D09096C6F6164- <1> 646 0000310C 206174206C65617374- <1> 646 00003115 2074686174206D616E- <1> 646 0000311E 792070617261677261- <1> 646 00003127 7068730D0A <1> 647 0000312C 204D4158504152413D- <1> db " MAXPARA=num",9,9, "load at most that many paragraphs",13,10 647 00003135 6E756D09096C6F6164- <1> 647 0000313E 206174206D6F737420- <1> 647 00003147 74686174206D616E79- <1> 647 00003150 207061726167726170- <1> 647 00003159 68730D0A <1> 648 0000315D 205345474D454E543D- <1> db " SEGMENT=num",9,9, "change segment at that the kernel loads",13,10 648 00003166 6E756D09096368616E- <1> 648 0000316F 6765207365676D656E- <1> 648 00003178 742061742074686174- <1> 648 00003181 20746865206B65726E- <1> 648 0000318A 656C206C6F6164730D- <1> 648 00003193 0A <1> 649 00003194 20454E5452593D5B6E- <1> db " ENTRY=[num:]num",9,"change entrypoint (CS (relative) : IP)",13,10 649 0000319D 756D3A5D6E756D0963- <1> 649 000031A6 68616E676520656E74- <1> 649 000031AF 7279706F696E742028- <1> 649 000031B8 4353202872656C6174- <1> 649 000031C1 69766529203A204950- <1> 649 000031CA 290D0A <1> 651 000031CD 204250423D5B6E756D- <1> db " BPB=[num:]num",9,9, "change BPB load address (segment -1 = auto-BPB)",13,10 651 000031D6 3A5D6E756D09096368- <1> 651 000031DF 616E67652042504220- <1> 651 000031E8 6C6F61642061646472- <1> 651 000031F1 65737320287365676D- <1> 651 000031FA 656E74202D31203D20- <1> 651 00003203 6175746F2D42504229- <1> 651 0000320C 0D0A <1> 652 0000320E 426F6F6C65616E206F- <1> db "Boolean options: [opt=bool]",13,10 652 00003217 7074696F6E733A205B- <1> 652 00003220 6F70743D626F6F6C5D- <1> 652 00003229 0D0A <1> 653 0000322B 205345545F444C5F55- <1> db " SET_DL_UNIT",9,9,"set dl to load unit",13,10 653 00003234 4E4954090973657420- <1> 653 0000323D 646C20746F206C6F61- <1> 653 00003246 6420756E69740D0A <1> 654 0000324E 205345545F424C5F55- <1> db " SET_BL_UNIT",9,9,"set bl to load unit",13,10 654 00003257 4E4954090973657420- <1> 654 00003260 626C20746F206C6F61- <1> 654 00003269 6420756E69740D0A <1> 655 00003271 205345545F53494449- <1> db " SET_SIDI_CLUSTER",9,"set si:di to first cluster",13,10 655 0000327A 5F434C555354455209- <1> 655 00003283 7365742073693A6469- <1> 655 0000328C 20746F206669727374- <1> 655 00003295 20636C75737465720D- <1> 655 0000329E 0A <1> 656 0000329F 205345545F44535349- <1> db " SET_DSSI_DPT",9,9,"set ds:si to DPT address",13,10 656 000032A8 5F4450540909736574- <1> 656 000032B1 2064733A736920746F- <1> 656 000032BA 204450542061646472- <1> 656 000032C3 6573730D0A <1> 657 000032C8 20505553485F445054- <1> db " PUSH_DPT",9,9,"push DPT address and DPT entry address",13,10 657 000032D1 090970757368204450- <1> 657 000032DA 542061646472657373- <1> 657 000032E3 20616E642044505420- <1> 657 000032EC 656E74727920616464- <1> 657 000032F5 726573730D0A <1> 658 000032FB 204441544153544152- <1> db " DATASTART_HIDDEN",9,"add hidden sectors to datastart var",13,10 658 00003304 545F48494444454E09- <1> 658 0000330D 616464206869646465- <1> 658 00003316 6E20736563746F7273- <1> 658 0000331F 20746F206461746173- <1> 658 00003328 74617274207661720D- <1> 658 00003331 0A <1> 659 00003332 205345545F41584258- <1> db " SET_AXBX_DATASTART",9,"set ax:bx to datastart var",13,10 659 0000333B 5F4441544153544152- <1> 659 00003344 54097365742061783A- <1> 659 0000334D 627820746F20646174- <1> 659 00003356 617374617274207661- <1> 659 0000335F 720D0A <1> 660 00003362 205345545F44534250- <1> db " SET_DSBP_BPB",9,9,"set ds:bp to BPB address",13,10 660 0000336B 5F4250420909736574- <1> 660 00003374 2064733A627020746F- <1> 660 0000337D 204250422061646472- <1> 660 00003386 6573730D0A <1> 661 0000338B 204C42415F5345545F- <1> db " LBA_SET_TYPE",9,9,"set LBA partition type in BPB",13,10 661 00003394 545950450909736574- <1> 661 0000339D 204C42412070617274- <1> 661 000033A6 6974696F6E20747970- <1> 661 000033AF 6520696E204250420D- <1> 661 000033B8 0A <1> 663 000033B9 204D4553534147455F- <1> db " MESSAGE_TABLE",9,9, "provide message table pointed to at 1EEh",13,10 663 000033C2 5441424C4509097072- <1> 663 000033CB 6F76696465206D6573- <1> 663 000033D4 73616765207461626C- <1> 663 000033DD 6520706F696E746564- <1> 663 000033E6 20746F206174203145- <1> 663 000033EF 45680D0A <1> 665 000033F3 205345545F41584258- <1> db " SET_AXBX_ROOT_HIDDEN",9, "set ax:bx to root start with hidden sectors",13,10 665 000033FC 5F524F4F545F484944- <1> 665 00003405 44454E097365742061- <1> 665 0000340E 783A627820746F2072- <1> 665 00003417 6F6F74207374617274- <1> 665 00003420 207769746820686964- <1> 665 00003429 64656E20736563746F- <1> 665 00003432 72730D0A <1> 666 00003436 00 <1> asciz 667 <1> %endif 668 <1> %endif 669 <1> 670 00003437 54686973206C446562- <1> .readonly: asciz "This lDebug variable cannot be written to. See ?V.",13,10 670 00003440 756720766172696162- <1> 670 00003449 6C652063616E6E6F74- <1> 670 00003452 206265207772697474- <1> 670 0000345B 656E20746F2E205365- <1> 670 00003464 65203F562E0D0A00 <1> 671 0000346C 5B6D6F72655D <1> .more: db "[more]" 672 <1> .more_size equ $-.more 673 00003472 0D2020202020200D <1> .more_over: db 13," ",13 ; to overwrite previous prompt 674 <1> .more_over_size equ $-.more_over 675 0000347A 5E430D0A <1> .ctrlc: db "^C",13,10 676 <1> .ctrlc_size equ $-.ctrlc 677 0000347E 00 <1> asciz 678 0000347F 333836207265676973- <1> .regs386: asciz "386 registers are " 678 00003488 746572732061726520- <1> 678 00003491 00 <1> 679 00003492 6E6F7420 <1> .regs386_off:db "not " 680 00003496 646973706C61796564- <1> .regs386_on: asciz "displayed",13,10 680 0000349F 0D0A00 <1> 681 <1> 682 <1> %if _EMS 683 <1> .xhelp: 684 000034A2 457870616E64656420- <1> db "Expanded memory (EMS) commands:",13,10 684 000034AB 6D656D6F7279202845- <1> 684 000034B4 4D532920636F6D6D61- <1> 684 000034BD 6E64733A0D0A <1> 685 000034C3 2020416C6C6F636174- <1> db " Allocate",9, "XA count",13,10 685 000034CC 6509584120636F756E- <1> 685 000034D5 740D0A <1> 686 000034D8 20204465616C6C6F63- <1> db " Deallocate",9, "XD handle",13,10 686 000034E1 617465095844206861- <1> 686 000034EA 6E646C650D0A <1> 687 000034F0 20204D6170206D656D- <1> db " Map memory",9, "XM logical-page physical-page handle",13,10 687 000034F9 6F727909584D206C6F- <1> 687 00003502 676963616C2D706167- <1> 687 0000350B 652070687973696361- <1> 687 00003514 6C2D70616765206861- <1> 687 0000351D 6E646C650D0A <1> 688 00003523 20205265616C6C6F63- <1> db " Reallocate",9, "XR handle count",13,10 688 0000352C 617465095852206861- <1> 688 00003535 6E646C6520636F756E- <1> 688 0000353E 740D0A <1> 689 00003541 202053686F77207374- <1> db " Show status",9, "XS",13,10 689 0000354A 617475730958530D0A <1> 690 00003553 00 <1> asciz 691 <1> %endif 692 <1> 693 <1> %if _MCB 694 00003554 456E64206F66206368- <1> .invmcbadr: asciz "End of chain: invalid MCB address.",13,10 694 0000355D 61696E3A20696E7661- <1> 694 00003566 6C6964204D43422061- <1> 694 0000356F 6464726573732E0D0A- <1> 694 00003578 00 <1> 695 <1> %endif 696 <1> 697 <1> %if _TSR 698 00003579 43616E6E6F7420676F- <1> .pspnotfound: asciz "Cannot go resident, child PSP not found.",13,10 698 00003582 207265736964656E74- <1> 698 0000358B 2C206368696C642050- <1> 698 00003594 5350206E6F7420666F- <1> 698 0000359D 756E642E0D0A00 <1> 699 000035A4 43616E6E6F7420676F- <1> .psphooked: asciz "Cannot go resident, child PSP parent return address hooked.",13,10 699 000035AD 207265736964656E74- <1> 699 000035B6 2C206368696C642050- <1> 699 000035BF 535020706172656E74- <1> 699 000035C8 2072657475726E2061- <1> 699 000035D1 64647265737320686F- <1> 699 000035DA 6F6B65642E0D0A00 <1> 700 000035E2 506174636865642050- <1> .nowtsr1: asciz "Patched PSP at " 700 000035EB 53502061742000 <1> 701 000035F2 2C206E6F7720726573- <1> .nowtsr2: asciz ", now resident.",13,10 701 000035FB 6964656E742E0D0A00 <1> 702 00003604 416C72656164792072- <1> .alreadytsr: asciz "Already resident.",13,10 702 0000360D 65736964656E742E0D- <1> 702 00003616 0A00 <1> 703 <1> %endif 704 <1> %if _PM && (_TSR || _BOOTLDR) 705 <1> .cannotpmquit: asciz "Cannot quit, still in protected mode.",13,10 706 <1> %endif 707 <1> %if _BOOTLDR 708 00003618 436F6D6D616E64206E- <1> .nobootsupp: asciz "Command not supported in boot loaded mode.",13,10 708 00003621 6F7420737570706F72- <1> 708 0000362A 74656420696E20626F- <1> 708 00003633 6F74206C6F61646564- <1> 708 0000363C 206D6F64652E0D0A00 <1> 709 00003645 426F6F74206661696C- <1> .bootfail: asciz "Boot failure: " 709 0000364E 7572653A2000 <1> 710 00003654 52656164696E672073- <1> .bootfail_read: db "Reading sector failed (error " 710 0000365D 6563746F7220666169- <1> 710 00003666 6C656420286572726F- <1> 710 0000366F 7220 <1> 711 00003671 5F5F68292E0D0A00 <1> .bootfail_read_errorcode: asciz "__h).",13,10 712 00003679 426F6F742073656374- <1> .bootfail_sig: asciz "Boot sector signature missing (is not AA55h).",13,10 712 00003682 6F72207369676E6174- <1> 712 0000368B 757265206D69737369- <1> 712 00003694 6E6720286973206E6F- <1> 712 0000369D 74204141353568292E- <1> 712 000036A6 0D0A00 <1> 713 000036A9 506172746974696F6E- <1> .bootfail_sig_parttable: ascii "Partition table signature missing" 713 000036B2 207461626C65207369- <1> 713 000036BB 676E6174757265206D- <1> 713 000036C4 697373696E67 <1> 714 000036CA 20286973206E6F7420- <1> asciz " (is not AA55h).",13,10 714 000036D3 4141353568292E0D0A- <1> 714 000036DC 00 <1> 715 000036DD 426F6F742073656374- <1> .bootfail_code: asciz "Boot sector code invalid (is 0000h).",13,10 715 000036E6 6F7220636F64652069- <1> 715 000036EF 6E76616C6964202869- <1> 715 000036F8 73203030303068292E- <1> 715 00003701 0D0A00 <1> 716 <1> .bootfail_secsizediffer: 717 00003704 425042204270532064- <1> asciz "BPB BpS differs from actual sector size.",13,10 717 0000370D 696666657273206672- <1> 717 00003716 6F6D2061637475616C- <1> 717 0000371F 20736563746F722073- <1> 717 00003728 697A652E0D0A00 <1> 718 0000372F 4F7574206F66206D65- <1> .boot_out_of_memory_error: asciz "Out of memory.", 13,10 718 00003738 6D6F72792E0D0A00 <1> 719 00003740 546F6F206D616E7920- <1> .boot_too_many_partitions_error:asciz "Too many partitions (or a loop).",13,10 719 00003749 706172746974696F6E- <1> 719 00003752 7320286F722061206C- <1> 719 0000375B 6F6F70292E0D0A00 <1> 720 00003763 506172746974696F6E- <1> .boot_partition_cycle_error: asciz "Partition table cycle detected.",13,10 720 0000376C 207461626C65206379- <1> 720 00003775 636C65206465746563- <1> 720 0000377E 7465642E0D0A00 <1> 721 00003785 506172746974696F6E- <1> .boot_partition_not_found: asciz "Partition not found.",13,10 721 0000378E 206E6F7420666F756E- <1> 721 00003797 642E0D0A00 <1> 722 0000379C 52656164206572726F- <1> .boot_access_error: asciz "Read error.", 13,10 722 000037A5 722E0D0A00 <1> 723 000037AA 536563746F72207369- <1> .boot_sector_too_large: asciz "Sector size too small (< 32 bytes).", 13,10 723 000037B3 7A6520746F6F20736D- <1> 723 000037BC 616C6C20283C203332- <1> 723 000037C5 206279746573292E0D- <1> 723 000037CE 0A00 <1> 724 000037D0 536563746F72207369- <1> .boot_sector_too_small: asciz "Sector size too large (> 8192 bytes).", 13,10 724 000037D9 7A6520746F6F206C61- <1> 724 000037E2 72676520283E203831- <1> 724 000037EB 393220627974657329- <1> 724 000037F4 2E0D0A00 <1> 725 000037F8 536563746F72207369- <1> .boot_sector_not_power: asciz "Sector size not a power of two.", 13,10 725 00003801 7A65206E6F74206120- <1> 725 0000380A 706F776572206F6620- <1> 725 00003813 74776F2E0D0A00 <1> 726 0000381A 496E76616C69642067- <1> .boot_invalid_sectors: asciz "Invalid geometry sectors.", 13,10 726 00003823 656F6D657472792073- <1> 726 0000382C 6563746F72732E0D0A- <1> 726 00003835 00 <1> 727 00003836 496E76616C69642067- <1> .boot_invalid_heads: asciz "Invalid geometry heads.", 13,10 727 0000383F 656F6D657472792068- <1> 727 00003848 656164732E0D0A00 <1> 728 00003850 46696C65206E6F7420- <1> .boot_file_not_found: asciz "File not found.",13,10 728 00003859 666F756E642E0D0A00 <1> 729 00003862 46696C6520746F6F20- <1> .boot_file_too_big_error: asciz "File too big.",13,10 729 0000386B 6269672E0D0A00 <1> 730 00003872 46696C6520746F6F20- <1> .boot_file_too_small_error: asciz "File too small.",13,10 730 0000387B 736D616C6C2E0D0A00 <1> 731 00003884 42616420616D6F756E- <1> .boot_badclusters: asciz "Bad amount of clusters.",13,10 731 0000388D 74206F6620636C7573- <1> 731 00003896 746572732E0D0A00 <1> 732 0000389E 42616420636C757374- <1> .boot_badchain: asciz "Bad cluster chain.",13,10 732 000038A7 657220636861696E2E- <1> 732 000038B0 0D0A00 <1> 733 000038B3 496E76616C69642066- <1> .boot_invalid_filename: asciz "Invalid filename.",13,10 733 000038BC 696C656E616D652E0D- <1> 733 000038C5 0A00 <1> 734 000038C7 43616E6E6F74207365- <1> .boot_cannot_set_both: asciz "Cannot set both " 734 000038D0 7420626F74682000 <1> 735 000038D8 20616E642000 <1> .boot_and: asciz " and " 736 000038DE 2E0D0A00 <1> .boot_dot_crlf: asciz ".",13,10 737 000038E2 2120496E7465726E61- <1> .boot_internal_error: asciz "! Internal error !",13,10 737 000038EB 6C206572726F722021- <1> 737 000038F4 0D0A00 <1> 738 000038F7 42504220616E64206C- <1> .boot_bpb_load_overlap: asciz "BPB and load area overlap.",13,10 738 00003900 6F6164206172656120- <1> 738 00003909 6F7665726C61702E0D- <1> 738 00003912 0A00 <1> 739 00003914 5365676D656E742074- <1> .boot_segment_too_low: asciz "Segment too low.",13,10 739 0000391D 6F6F206C6F772E0D0A- <1> 739 00003926 00 <1> 740 00003927 42504220746F6F206C- <1> .boot_bpb_too_low: asciz "BPB too low.",13,10 740 00003930 6F772E0D0A00 <1> 741 00003936 2120496E7465726E61- <1> .boot_auxbuff_crossing: db "! Internal error !, " 741 0000393F 6C206572726F722021- <1> 741 00003948 2C20 <1> 742 0000394A 617578627566662063- <1> asciz "auxbuff crosses 64 KiB boundary.",13,10 742 00003953 726F73736573203634- <1> 742 0000395C 204B694220626F756E- <1> 742 00003965 646172792E0D0A00 <1> 743 0000396D 5245414400 <1> .read: asciz "READ" 744 00003972 575249544500 <1> .write: asciz "WRITE" 745 00003978 424F4F5400 <1> .boot: asciz "BOOT" 746 0000397D 5155495400 <1> .quit: asciz "QUIT" 747 00003982 50524F544F434F4C00 <1> .protocol: asciz "PROTOCOL" 748 0000398B 5345474D454E5400 <1> .segment: asciz "SEGMENT" 749 00003993 454E54525900 <1> .entry: asciz "ENTRY" 750 00003999 42504200 <1> .bpb: asciz "BPB" 751 0000399D 4D494E5041524100 <1> .minpara: asciz "MINPARA" 752 000039A5 4D41585041524100 <1> .maxpara: asciz "MAXPARA" 753 000039AD 534543544F5200 <1> .sector: asciz "SECTOR" 754 000039B4 534543544F52414C54- <1> .sector_alt: asciz "SECTORALT" 754 000039BD 00 <1> 755 000039BE 4B45524E454C2E5359- <1> .freedos_kernel_name: asciz "KERNEL.SYS" 755 000039C7 5300 <1> 756 000039C9 445242494F2E535953- <1> .edrdos_kernel_name: asciz "DRBIO.SYS" 756 000039D2 00 <1> 757 000039D3 4C444F532E434F4D00 <1> .ldos_kernel_name: asciz "LDOS.COM" 758 <1> .msdos7_kernel_name: 759 000039DC 494F2E53595300 <1> .msdos6_kernel_name: asciz "IO.SYS" 760 000039E3 4D53444F532E535953- <1> .msdos6_add_name: asciz "MSDOS.SYS" 760 000039EC 00 <1> 761 000039ED 49424D42494F2E434F- <1> .ibmdos_kernel_name: asciz "IBMBIO.COM" 761 000039F6 4D00 <1> 762 000039F8 49424D444F532E434F- <1> .ibmdos_add_name: asciz "IBMDOS.COM" 762 00003A01 4D00 <1> 763 00003A03 4E544C445200 <1> .ntldr_kernel_name: asciz "NTLDR" 764 00003A09 424F4F544D475200 <1> .bootmgr_kernel_name: asciz "BOOTMGR" 765 00003A11 5258444F5342494F2E- <1> .rxdos.0_kernel_name: asciz "RXDOSBIO.SYS" 765 00003A1A 53595300 <1> 766 00003A1E 525842494F2E535953- <1> .rxdos.1_kernel_name: asciz "RXBIO.SYS" 766 00003A27 00 <1> 767 <1> .rxdos.0_add_name: 768 00003A28 5258444F532E535953- <1> .rxdos.1_add_name: asciz "RXDOS.SYS" 768 00003A31 00 <1> 769 00003A32 5258444F532E434F4D- <1> .rxdos.2_kernel_name: asciz "RXDOS.COM" 769 00003A3B 00 <1> 770 00003A3C 00 <1> .addname_empty: asciz 771 00003A3D 43616E6E6F74207175- <1> .cannotbootquit_memsizes: asciz "Cannot quit, memory size changed.",13,10 771 00003A46 69742C206D656D6F72- <1> 771 00003A4F 792073697A65206368- <1> 771 00003A58 616E6765642E0D0A00 <1> 772 <1> %endif 773 00003A61 5748494C4500 <1> .while: asciz "WHILE" 774 00003A67 53494C454E5400 <1> .silent: asciz "SILENT" 775 00003A6E 2120496E7465726E61- <1> .silent_error: asciz "! Internal error during silent buffer handling !",13,10 775 00003A77 6C206572726F722064- <1> 775 00003A80 7572696E672073696C- <1> 775 00003A89 656E74206275666665- <1> 775 00003A92 722068616E646C696E- <1> 775 00003A9B 6720210D0A00 <1> 776 00003AA1 5768696C6520636F6E- <1> .while_not_true:asciz "While condition not true, returning.",13,10 776 00003AAA 646974696F6E206E6F- <1> 776 00003AB3 7420747275652C2072- <1> 776 00003ABC 657475726E696E672E- <1> 776 00003AC5 0D0A00 <1> 777 00003AC8 5768696C6520636F6E- <1> .while_terminated_before: asciz "While condition ",'"' 777 00003AD1 646974696F6E202200 <1> 778 00003ADA 22206E6F206C6F6E67- <1> .while_terminated_after: asciz '"'," no longer true.",13,10 778 00003AE3 657220747275652E0D- <1> 778 00003AEC 0A00 <1> 779 00003AEE 4E6F2073657269616C- <1> .no_progress: asciz "No serial comm progress after 5 seconds, giving up. (Keyboard enabled.)",13,10 779 00003AF7 20636F6D6D2070726F- <1> 779 00003B00 677265737320616674- <1> 779 00003B09 65722035207365636F- <1> 779 00003B12 6E64732C2067697669- <1> 779 00003B1B 6E672075702E20284B- <1> 779 00003B24 6579626F6172642065- <1> 779 00003B2D 6E61626C65642E290D- <1> 779 00003B36 0A00 <1> 780 00003B38 0D0A44656275676765- <1> .serial_request_keep: asciz 13,10,_PROGNAME," connected to serial port. Enter KEEP to confirm.",13,10 780 00003B41 64206C446562756720- <1> 780 00003B4A 636F6E6E6563746564- <1> 780 00003B53 20746F207365726961- <1> 780 00003B5C 6C20706F72742E2045- <1> 780 00003B65 6E746572204B454550- <1> 780 00003B6E 20746F20636F6E6669- <1> 780 00003B77 726D2E0D0A00 <1> 781 00003B7D 4E6F204B454550206B- <1> .serial_no_keep_timer: asciz "No KEEP keyword confirmation after timeout, giving up. (Keyboard enabled.)",13,10 781 00003B86 6579776F726420636F- <1> 781 00003B8F 6E6669726D6174696F- <1> 781 00003B98 6E2061667465722074- <1> 781 00003BA1 696D656F75742C2067- <1> 781 00003BAA 6976696E672075702E- <1> 781 00003BB3 20284B6579626F6172- <1> 781 00003BBC 6420656E61626C6564- <1> 781 00003BC5 2E290D0A00 <1> 782 00003BCA 4E6F204B454550206B- <1> .serial_no_keep_enter: asciz "No KEEP keyword confirmation, enabling keyboard.",13,10 782 00003BD3 6579776F726420636F- <1> 782 00003BDC 6E6669726D6174696F- <1> 782 00003BE5 6E2C20656E61626C69- <1> 782 00003BEE 6E67206B6579626F61- <1> 782 00003BF7 72642E0D0A00 <1> 783 00003BFD 4B45455000 <1> .keep: asciz "KEEP" 784 00003C02 206B4D475400 <1> .prefixes: asciz " kMGT" 785 00003C08 50726F63657373206C- <1> .ll_unterm: ascizline "Process loading aborted: Attached process didn't terminate!" 785 00003C11 6F6164696E67206162- <1> 785 00003C1A 6F727465643A204174- <1> 785 00003C23 746163686564207072- <1> 785 00003C2C 6F6365737320646964- <1> 785 00003C35 6E2774207465726D69- <1> 785 00003C3E 6E617465210D0A00 <1> 786 00003C46 43616E6E6F74207175- <1> .qq_unterm: ascizline "Cannot quit, attached process didn't terminate!" 786 00003C4F 69742C206174746163- <1> 786 00003C58 6865642070726F6365- <1> 786 00003C61 7373206469646E2774- <1> 786 00003C6A 207465726D696E6174- <1> 786 00003C73 65210D0A00 <1> 787 <1> 788 <1> %if _INPUT_FILE_HANDLES 789 00003C78 5920636F6D6D616E64- <1> .yy_requires_filename: asciz "Y command requires a filename.",13,10 789 00003C81 207265717569726573- <1> 789 00003C8A 20612066696C656E61- <1> 789 00003C93 6D652E0D0A00 <1> 790 <1> .yy_filename_missing_unquote: 791 00003C99 5920636F6D6D616E64- <1> asciz "Y command filename missing ending quote.",13,10 791 00003CA2 2066696C656E616D65- <1> 791 00003CAB 206D697373696E6720- <1> 791 00003CB4 656E64696E67207175- <1> 791 00003CBD 6F74652E0D0A00 <1> 792 00003CC4 5920636F6D6D616E64- <1> .yy_filename_empty: asciz "Y command filename is empty.",13,10 792 00003CCD 2066696C656E616D65- <1> 792 00003CD6 20697320656D707479- <1> 792 00003CDF 2E0D0A00 <1> 793 00003CE3 5920636F6D6D616E64- <1> .yy_too_many_handles: asciz "Y command has too many open files.",13,10 793 00003CEC 2068617320746F6F20- <1> 793 00003CF5 6D616E79206F70656E- <1> 793 00003CFE 2066696C65732E0D0A- <1> 793 00003D07 00 <1> 794 00003D08 5920636F6D6D616E64- <1> .yy_error_file_open: asciz "Y command failed to open file.",13,10 794 00003D11 206661696C65642074- <1> 794 00003D1A 6F206F70656E206669- <1> 794 00003D23 6C652E0D0A00 <1> 795 <1> %endif 796 <1> 797 <1> %if _BREAKPOINTS 798 00003D29 414C4C00 <1> .all: asciz "ALL" 799 00003D2D 4E455700 <1> .new: asciz "NEW" 800 00003D31 4E6F20756E75736564- <1> .bb_no_new: asciz "No unused breakpoint left!",13,10 800 00003D3A 20627265616B706F69- <1> 800 00003D43 6E74206C656674210D- <1> 800 00003D4C 0A00 <1> 801 00003D4E 486974207065726D61- <1> .bb_hit: db "Hit permanent breakpoint " 801 00003D57 6E656E742062726561- <1> 801 00003D60 6B706F696E7420 <1> 802 00003D67 5F5F <1> .bb_hit.index: db "__" 803 00003D69 0D0A00 <1> .bb_hit.edit: asciz 13,10 804 <1> ; db ", c" 805 00003D6C 6F756E7465723D <1> db "ounter=" 806 00003D73 5F5F5F5F0D0A00 <1> .bb_hit.counter:asciz "____",13,10 807 <1> 808 00003D7A 506173736564207065- <1> .bb_pass: db "Passed permanent breakpoint " 808 00003D83 726D616E656E742062- <1> 808 00003D8C 7265616B706F696E74- <1> 808 00003D95 20 <1> 809 00003D96 5F5F2C20636F756E74- <1> .bb_pass.index: db "__, counter=" 809 00003D9F 65723D <1> 810 00003DA2 5F5F5F5F0D0A00 <1> .bb_pass.counter: asciz "____",13,10 811 00003DA9 42502000 <1> .bp: asciz "BP " 812 00003DAD 202B00 <1> .bpenabled: asciz " +" 813 00003DB0 202D00 <1> .bpdisabled: asciz " -" 814 00003DB3 20556E7573656400 <1> .bpunused: asciz " Unused" 815 00003DBB 204C696E3D00 <1> .bpaddress: asciz " Lin=" 816 00003DC1 202800 <1> .bpcontent: asciz " (" 817 00003DC4 2920436F756E746572- <1> .bpcounter: asciz ") Counter=" 817 00003DCD 3D00 <1> 818 <1> %if 0 819 <1> BP 00 Unused 820 <1> BP 00 + Lin=12345678 (CC) Counter=8000 821 <1> 1234567890123456789012345678901234567890 822 <1> %endif 823 00003DCF 4E6F20627265616B70- <1> .bpnone: asciz "No breakpoints set currently.",13,10 823 00003DD8 6F696E747320736574- <1> 823 00003DE1 2063757272656E746C- <1> 823 00003DEA 792E0D0A00 <1> 824 <1> %endif 825 00003DEF 5468652000 <1> .cant_bp_the: asciz "The " 826 00003DF4 70726F636565642062- <1> .cant_bp_type_proceed: asciz "proceed breakpoint" 826 00003DFD 7265616B706F696E74- <1> 826 00003E06 00 <1> 827 00003E07 7065726D616E656E74- <1> .cant_bp_type_permanent: db "permanent breakpoint " 827 00003E10 20627265616B706F69- <1> 827 00003E19 6E7420 <1> 828 00003E1C 5F5F00 <1> .cant_bp_type_permanent.index: asciz "__" 829 00003E1F 204720627265616B70- <1> .cant_bp_type_gg: asciz " G breakpoint" 829 00003E28 6F696E7400 <1> 830 00003E2D 20286C696E65617220 <1> .cant_bp_linear: db " (linear " 831 00003E36 2D2D2D2D5F <1> .cant_bp_linear.address1: db "----_" 832 00003E3B 2D2D2D2D292000 <1> .cant_bp_linear.address2: asciz "----) " 833 00003E42 63616E6E6F74206265- <1> .cant_bp_write: asciz "cannot be written. " 833 00003E4B 207772697474656E2E- <1> 833 00003E54 2000 <1> 834 00003E56 63616E6E6F74206265- <1> .cant_bp_restore: db "cannot be restored to " 834 00003E5F 20726573746F726564- <1> 834 00003E68 20746F20 <1> 835 00003E6C 5F5F2E2000 <1> .cant_bp_restore.value: asciz "__. " 836 00003E71 4E6F206572726F722E- <1> .cant_bp_reason0: asciz "No error. (Internal error, report!)",13,10 836 00003E7A 2028496E7465726E61- <1> 836 00003E83 6C206572726F722C20- <1> 836 00003E8C 7265706F727421290D- <1> 836 00003E95 0A00 <1> 837 00003E97 497420697320726561- <1> .cant_bp_reason1: asciz "It is read-only.",13,10 837 00003EA0 642D6F6E6C792E0D0A- <1> 837 00003EA9 00 <1> 838 00003EAA 497420697320756E72- <1> .cant_bp_reason2: asciz "It is unreachable.",13,10 838 00003EB3 6561636861626C652E- <1> 838 00003EBC 0D0A00 <1> 839 00003EBF 497420686173206265- <1> .cant_bp_reason3: db "It has been overwritten with " 839 00003EC8 656E206F7665727772- <1> 839 00003ED1 697474656E20776974- <1> 839 00003EDA 6820 <1> 840 00003EDC 5F5F2E0D0A00 <1> .cant_bp_reason3.value: asciz "__.",13,10 841 00003EE2 556E6B6E6F776E2065- <1> .cant_bp_reasonu: asciz "Unknown error. (Internal error, report!)",13,10 841 00003EEB 72726F722E2028496E- <1> 841 00003EF4 7465726E616C206572- <1> 841 00003EFD 726F722C207265706F- <1> 841 00003F06 727421290D0A00 <1> 842 <1> 843 00003F0D 20202000 <1> .list_bp_first: asciz " " 844 00003F11 204720627265616B70- <1> .list_bp: db " G breakpoint, linear " 844 00003F1A 6F696E742C206C696E- <1> 844 00003F23 65617220 <1> 845 <1> .list_bp.address1: 846 00003F27 2D2D2D2D5F <1> db "----_" 847 <1> .list_bp.address2: 848 00003F2C 2D2D2D2D2C20636F6E- <1> db "----, content " 848 00003F35 74656E7420 <1> 849 <1> .list_bp.value: 850 00003F3A 5F5F00 <1> asciz "__" 851 <1> .list_bp_not_cseip: equ crlf 852 <1> %if _PM 853 <1> .list_bp_cseip_32: 854 <1> asciz " (is at CS:EIP)",13,10 855 <1> %endif 856 <1> .list_bp_csip_16: 857 00003F3D 202869732061742043- <1> asciz " (is at CS:IP)",13,10 857 00003F46 533A4950290D0A00 <1> 858 <1> .list_bp_none: 859 00003F4E 546865204720627265- <1> asciz "The G breakpoint list is empty.",13,10 859 00003F57 616B706F696E74206C- <1> 859 00003F60 69737420697320656D- <1> 859 00003F69 7074792E0D0A00 <1> 860 <1> 861 00003F70 00 <1> .empty_message: asciz 862 00003F71 4C49535400 <1> .list: asciz "LIST" 863 00003F76 414741494E00 <1> .again: asciz "AGAIN" 864 00003F7C 52656163686564206C- <1> .uu_too_many_repeat: asciz "Reached limit of repeating disassembly.",13,10 864 00003F85 696D6974206F662072- <1> 864 00003F8E 6570656174696E6720- <1> 864 00003F97 646973617373656D62- <1> 864 00003FA0 6C792E0D0A00 <1> 865 <1> 866 <1> %if 0 867 <1> .optiontable: dw dispregs32, .r32off, .r32on 868 <1> dw traceints, .traceoff, .traceon 869 <1> dw cpdepchars, .cpoff, .cpon 870 <1> dw fakeindos, .dosoff, .doson 871 <1> dw nonpagingdevice, .nonpageoff, .nonpageon 872 <1> dw pagingdevice, .pageoff, .pageon 873 <1> dw hexrn, .readrnoff, .readrnon 874 <1> dw 0 875 <1> 876 <1> .r32off: asciz "Dump 16-bit register set" 877 <1> .r32on: asciz "Dump 32-bit register set" 878 <1> .traceoff: asciz "Interrupts are traced" 879 <1> .traceon: asciz "Interrupts are processed" 880 <1> .cpoff: asciz "Extended ASCII characters replaced" 881 <1> .cpon: asciz "Extended ASCII characters displayed" 882 <1> .dosoff: asciz "InDOS is checked" 883 <1> .doson: asciz "InDOS assumed on" 884 <1> ;asciz "InDOS assumed off" 885 <1> .nonpageoff: asciz 886 <1> .nonpageon: asciz "Paging disabled" 887 <1> .pageoff: asciz 888 <1> .pageon: asciz "Paging enabled" 889 <1> .readrnoff: asciz "Readable RN enabled" 890 <1> .readrnon: asciz "Readable RN disabled" 891 <1> %endif 892 <1> 893 00003FA6 5761726E696E673A20- <1> .warnprefix: asciz "Warning: Prefixes in excess of 14, using trace flag.",13,10 893 00003FAF 507265666978657320- <1> 893 00003FB8 696E20657863657373- <1> 893 00003FC1 206F662031342C2075- <1> 893 00003FCA 73696E672074726163- <1> 893 00003FD3 6520666C61672E0D0A- <1> 893 00003FDC 00 <1> 894 <1> 895 <1> %if _DEBUG 896 00003FDD 427265616B696E6720- <1> .bu: asciz "Breaking to next instance.",13,10 896 00003FE6 746F206E6578742069- <1> 896 00003FEF 6E7374616E63652E0D- <1> 896 00003FF8 0A00 <1> 897 <1> %else 898 <1> .notbu: asciz "Already in topmost instance. (This is no debugging build of lDebug.)",13,10 899 <1> %endif 900 <1> 901 <1> %if _PM 902 <1> .ofs32: asciz "Cannot access 16-bit segment with 32-bit offset.",13,10 903 <1> %endif 904 <1> 905 <1> 906 <1> %define smcb_messages ..@notype,"" 906 ****************** <1> expansion: smcb_messages = ..@notype,"" 907 <1> 908 <1> %imacro smcbtype 2.nolist 909 <1> dw %2, %%label 910 <1> %defstr %%str %1 911 <1> %xdefine smcb_messages smcb_messages,%%label,%%str 912 <1> %endmacro 913 <1> 914 <1> %imacro smcbmsg 2-*.nolist 915 <1> %if %0 & 1 916 <1> %error Expected even number of parameters 917 <1> %endif 918 <1> %rotate 2 919 <1> %rep (%0 - 2) / 2 920 <1> %1: asciz %2 921 <1> %rotate 2 922 <1> %endrep 923 <1> %endmacro 924 <1> 925 00003FFA 90 <1> align 4 926 <1> smcbtypes: 927 00003FFC 0000[7840] <1> smcbtype S_OTHER, 00h 927 ****************** <1> expansion: ..@4462.str = 'S_OTHER' 927 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER' 928 00004000 0100[8040] <1> smcbtype S_DOSENTRY, 01h 928 ****************** <1> expansion: ..@4463.str = 'S_DOSENTRY' 928 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY' 929 00004004 0200[8B40] <1> smcbtype S_DOSCODE, 02h 929 ****************** <1> expansion: ..@4464.str = 'S_DOSCODE' 929 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE' 930 00004008 0300[9540] <1> smcbtype S_DOSDATA, 03h 930 ****************** <1> expansion: ..@4465.str = 'S_DOSDATA' 930 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA' 931 0000400C 0400[9F40] <1> smcbtype S_IRQSCODE, 04h 931 ****************** <1> expansion: ..@4466.str = 'S_IRQSCODE' 931 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE' 932 00004010 0500[AA40] <1> smcbtype S_IRQSDATA, 05h 932 ****************** <1> expansion: ..@4467.str = 'S_IRQSDATA' 932 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA' 933 00004014 0600[B540] <1> smcbtype S_CDS, 06h 933 ****************** <1> expansion: ..@4468.str = 'S_CDS' 933 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS' 934 00004018 0700[BB40] <1> smcbtype S_LFNCDS, 07h 934 ****************** <1> expansion: ..@4469.str = 'S_LFNCDS' 934 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS' 935 0000401C 0800[C440] <1> smcbtype S_DPB, 08h 935 ****************** <1> expansion: ..@4470.str = 'S_DPB' 935 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB' 936 00004020 0900[CA40] <1> smcbtype S_UPB, 09h 936 ****************** <1> expansion: ..@4471.str = 'S_UPB' 936 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB' 937 00004024 0A00[D040] <1> smcbtype S_SFT, 0Ah 937 ****************** <1> expansion: ..@4472.str = 'S_SFT' 937 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT' 938 00004028 0B00[D640] <1> smcbtype S_FCBSFT, 0Bh 938 ****************** <1> expansion: ..@4473.str = 'S_FCBSFT' 938 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT' 939 0000402C 0C00[DF40] <1> smcbtype S_CCB, 0Ch 939 ****************** <1> expansion: ..@4474.str = 'S_CCB' 939 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB' 940 00004030 0D00[E540] <1> smcbtype S_IRT, 0Dh 940 ****************** <1> expansion: ..@4475.str = 'S_IRT' 940 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT' 941 00004034 0E00[EB40] <1> smcbtype S_SECTOR, 0Eh 941 ****************** <1> expansion: ..@4476.str = 'S_SECTOR' 941 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR' 942 00004038 0F00[F440] <1> smcbtype S_NLS, 0Fh 942 ****************** <1> expansion: ..@4477.str = 'S_NLS' 942 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS' 943 0000403C 1000[FA40] <1> smcbtype S_EBDA, 10h 943 ****************** <1> expansion: ..@4478.str = 'S_EBDA' 943 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA' 944 00004040 1900[0141] <1> smcbtype S_INITCONFIG, 19h 944 ****************** <1> expansion: ..@4479.str = 'S_INITCONFIG' 944 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG' 945 00004044 1A00[0E41] <1> smcbtype S_INITFATSEG, 1Ah 945 ****************** <1> expansion: ..@4480.str = 'S_INITFATSEG' 945 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG' 946 00004048 1B00[1B41] <1> smcbtype S_INITSECTORSEG, 1Bh 946 ****************** <1> expansion: ..@4481.str = 'S_INITSECTORSEG' 946 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG' 947 0000404C 1C00[2B41] <1> smcbtype S_INITSTACKBPB,1Ch 947 ****************** <1> expansion: ..@4482.str = 'S_INITSTACKBPB' 947 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB' 948 00004050 1D00[3A41] <1> smcbtype S_INITPSP, 1Dh 948 ****************** <1> expansion: ..@4483.str = 'S_INITPSP' 948 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP' 949 00004054 1E00[4441] <1> smcbtype S_ENVIRONMENT, 1Eh 949 ****************** <1> expansion: ..@4484.str = 'S_ENVIRONMENT' 949 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT' 950 00004058 1F00[5241] <1> smcbtype S_INITIALIZE, 1Fh 950 ****************** <1> expansion: ..@4485.str = 'S_INITIALIZE' 950 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE' 951 0000405C 2000[5F41] <1> smcbtype S_DEVICE, 20h ; Device 951 ****************** <1> expansion: ..@4486.str = 'S_DEVICE' 951 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE' 952 00004060 2100[6841] <1> smcbtype S_DEVICEMEMORY,21h ; Allocated by device 952 ****************** <1> expansion: ..@4487.str = 'S_DEVICEMEMORY' 952 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE',..@4487.label,'S_DEVICEMEMORY' 953 00004064 3000[7741] <1> smcbtype S_EXCLDUMA, 30h ; Excluded UMA 953 ****************** <1> expansion: ..@4488.str = 'S_EXCLDUMA' 953 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE',..@4487.label,'S_DEVICEMEMORY',..@4488.label,'S_EXCLDUMA' 954 00004068 3100[8241] <1> smcbtype S_EXCLDUMASUB, 31h ; Excluded UMA with sub-chain of used MCBs 954 ****************** <1> expansion: ..@4489.str = 'S_EXCLDUMASUB' 954 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE',..@4487.label,'S_DEVICEMEMORY',..@4488.label,'S_EXCLDUMA',..@4489.label,'S_EXCLDUMASUB' 955 0000406C 3200[9041] <1> smcbtype S_EXCLDLH, 32h ; Excluded by LH 955 ****************** <1> expansion: ..@4490.str = 'S_EXCLDLH' 955 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE',..@4487.label,'S_DEVICEMEMORY',..@4488.label,'S_EXCLDUMA',..@4489.label,'S_EXCLDUMASUB',..@4490.label,'S_EXCLDLH' 956 00004070 3300[9A41] <1> smcbtype S_EXCLDDOS, 33h 956 ****************** <1> expansion: ..@4491.str = 'S_EXCLDDOS' 956 ****************** <1> expansion: smcb_messages = ..@notype,"",..@4462.label,'S_OTHER',..@4463.label,'S_DOSENTRY',..@4464.label,'S_DOSCODE',..@4465.label,'S_DOSDATA',..@4466.label,'S_IRQSCODE',..@4467.label,'S_IRQSDATA',..@4468.label,'S_CDS',..@4469.label,'S_LFNCDS',..@4470.label,'S_DPB',..@4471.label,'S_UPB',..@4472.label,'S_SFT',..@4473.label,'S_FCBSFT',..@4474.label,'S_CCB',..@4475.label,'S_IRT',..@4476.label,'S_SECTOR',..@4477.label,'S_NLS',..@4478.label,'S_EBDA',..@4479.label,'S_INITCONFIG',..@4480.label,'S_INITFATSEG',..@4481.label,'S_INITSECTORSEG',..@4482.label,'S_INITSTACKBPB',..@4483.label,'S_INITPSP',..@4484.label,'S_ENVIRONMENT',..@4485.label,'S_INITIALIZE',..@4486.label,'S_DEVICE',..@4487.label,'S_DEVICEMEMORY',..@4488.label,'S_EXCLDUMA',..@4489.label,'S_EXCLDUMASUB',..@4490.label,'S_EXCLDLH',..@4491.label,'S_EXCLDDOS' 957 00004074 FFFFFFFF <1> dw -1, -1 958 <1> 959 00004078 535F4F544845520053- <1> smcbmsg smcb_messages 959 00004081 5F444F53454E545259- <1> 959 0000408A 00535F444F53434F44- <1> 959 00004093 4500535F444F534441- <1> 959 0000409C 544100535F49525153- <1> 959 000040A5 434F444500535F4952- <1> 959 000040AE 51534441544100535F- <1> 959 000040B7 43445300535F4C464E- <1> 959 000040C0 43445300535F445042- <1> 959 000040C9 00535F55504200535F- <1> 959 000040D2 53465400535F464342- <1> 959 000040DB 53465400535F434342- <1> 959 000040E4 00535F49525400535F- <1> 959 000040ED 534543544F5200535F- <1> 959 000040F6 4E4C5300535F454244- <1> 959 000040FF 4100535F494E495443- <1> 959 00004108 4F4E46494700535F49- <1> 959 00004111 4E4954464154534547- <1> 959 0000411A 00535F494E49545345- <1> 959 00004123 43544F525345470053- <1> 959 0000412C 5F494E495453544143- <1> 959 00004135 4B42504200535F494E- <1> 959 0000413E 495450535000535F45- <1> 959 00004147 4E5649524F4E4D454E- <1> 959 00004150 5400535F494E495449- <1> 959 00004159 414C495A4500535F44- <1> 959 00004162 455649434500535F44- <1> 959 0000416B 45564943454D454D4F- <1> 959 00004174 525900535F4558434C- <1> 959 0000417D 44554D4100535F4558- <1> 959 00004186 434C44554D41535542- <1> 959 0000418F 00535F4558434C444C- <1> 959 00004198 4800535F4558434C44- <1> 959 000041A1 444F5300 <1> 960 <1> 961 000041A5 756E6B6E6F776E00 <1> smcbmsg_unknown: asciz "unknown" 962 <1> 963 <1> %undef smcb_messages 964 <1> %unimacro smcbtype 2.nolist 965 <1> %unimacro smcbmsg 2-*.nolist 966 <1> 967 000041AD 5E204572726F72 <1> errcarat: db "^ Error" 968 000041B4 0D0A00 <1> crlf: asciz 13,10 969 <1> 970 <1> 971 <1> %if _BOOTLDR 972 <1> %define lot_list 972 ****************** <1> expansion: lot_list = 973 <1> %define lot_comma 973 ****************** <1> expansion: lot_comma = 974 <1> %macro lot_entry 2.nolist 975 <1> LOAD_%2 equ %1 976 <1> dw LOAD_%2, .%2 977 <1> %defstr %%string %2 978 <1> %xdefine lot_list lot_list lot_comma .%2:, db %%string, db 0 979 <1> %define lot_comma , 980 <1> %endmacro 981 <1> 982 <1> %macro lot_messages 0-*.nolist 983 <1> %rep (%0 / 3) 984 <1> %1 985 <1> %2 986 <1> %3 987 <1> %rotate 3 988 <1> %endrep 989 <1> %endmacro 990 <1> 991 000041B7 90 <1> align 4 992 <1> loadoptiontable: 993 000041B8 0100[0042] <1> lot_entry 1, SET_DL_UNIT 993 ****************** <1> expansion: ..@4527.string = 'SET_DL_UNIT' 993 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 993 ****************** <1> expansion: lot_comma = , 994 000041BC 0200[0C42] <1> lot_entry 2, SET_BL_UNIT 994 ****************** <1> expansion: ..@4528.string = 'SET_BL_UNIT' 994 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 994 ****************** <1> expansion: lot_comma = , 995 000041C0 0400[1842] <1> lot_entry 4, SET_SIDI_CLUSTER 995 ****************** <1> expansion: ..@4529.string = 'SET_SIDI_CLUSTER' 995 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 995 ****************** <1> expansion: lot_comma = , 996 000041C4 1000[2942] <1> lot_entry 10h, SET_DSSI_DPT 996 ****************** <1> expansion: ..@4530.string = 'SET_DSSI_DPT' 996 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 996 ****************** <1> expansion: lot_comma = , 997 000041C8 2000[3642] <1> lot_entry 20h, PUSH_DPT 997 ****************** <1> expansion: ..@4531.string = 'PUSH_DPT' 997 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 997 ****************** <1> expansion: lot_comma = , 998 000041CC 4000[3F42] <1> lot_entry 40h, DATASTART_HIDDEN 998 ****************** <1> expansion: ..@4532.string = 'DATASTART_HIDDEN' 998 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 998 ****************** <1> expansion: lot_comma = , 999 000041D0 8000[5042] <1> lot_entry 80h, SET_AXBX_DATASTART 999 ****************** <1> expansion: ..@4533.string = 'SET_AXBX_DATASTART' 999 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 , .SET_AXBX_DATASTART:, db 'SET_AXBX_DATASTART', db 0 999 ****************** <1> expansion: lot_comma = , 1000 000041D4 0001[6342] <1> lot_entry 100h, SET_DSBP_BPB 1000 ****************** <1> expansion: ..@4534.string = 'SET_DSBP_BPB' 1000 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 , .SET_AXBX_DATASTART:, db 'SET_AXBX_DATASTART', db 0 , .SET_DSBP_BPB:, db 'SET_DSBP_BPB', db 0 1000 ****************** <1> expansion: lot_comma = , 1001 000041D8 0002[7042] <1> lot_entry 200h, LBA_SET_TYPE 1001 ****************** <1> expansion: ..@4535.string = 'LBA_SET_TYPE' 1001 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 , .SET_AXBX_DATASTART:, db 'SET_AXBX_DATASTART', db 0 , .SET_DSBP_BPB:, db 'SET_DSBP_BPB', db 0 , .LBA_SET_TYPE:, db 'LBA_SET_TYPE', db 0 1001 ****************** <1> expansion: lot_comma = , 1002 000041DC 0004[7D42] <1> lot_entry 400h, MESSAGE_TABLE 1002 ****************** <1> expansion: ..@4536.string = 'MESSAGE_TABLE' 1002 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 , .SET_AXBX_DATASTART:, db 'SET_AXBX_DATASTART', db 0 , .SET_DSBP_BPB:, db 'SET_DSBP_BPB', db 0 , .LBA_SET_TYPE:, db 'LBA_SET_TYPE', db 0 , .MESSAGE_TABLE:, db 'MESSAGE_TABLE', db 0 1002 ****************** <1> expansion: lot_comma = , 1003 000041E0 0008[8B42] <1> lot_entry 800h, SET_AXBX_ROOT_HIDDEN 1003 ****************** <1> expansion: ..@4537.string = 'SET_AXBX_ROOT_HIDDEN' 1003 ****************** <1> expansion: lot_list = .SET_DL_UNIT:, db 'SET_DL_UNIT', db 0 , .SET_BL_UNIT:, db 'SET_BL_UNIT', db 0 , .SET_SIDI_CLUSTER:, db 'SET_SIDI_CLUSTER', db 0 , .SET_DSSI_DPT:, db 'SET_DSSI_DPT', db 0 , .PUSH_DPT:, db 'PUSH_DPT', db 0 , .DATASTART_HIDDEN:, db 'DATASTART_HIDDEN', db 0 , .SET_AXBX_DATASTART:, db 'SET_AXBX_DATASTART', db 0 , .SET_DSBP_BPB:, db 'SET_DSBP_BPB', db 0 , .LBA_SET_TYPE:, db 'LBA_SET_TYPE', db 0 , .MESSAGE_TABLE:, db 'MESSAGE_TABLE', db 0 , .SET_AXBX_ROOT_HIDDEN:, db 'SET_AXBX_ROOT_HIDDEN', db 0 1003 ****************** <1> expansion: lot_comma = , 1004 000041E4 00000000 <1> dw 0, 0 1005 <1> 1006 <1> .incompatible: 1007 000041E8 02008000 <1> dw LOAD_SET_BL_UNIT, LOAD_SET_AXBX_DATASTART 1008 000041EC 02000008 <1> dw LOAD_SET_BL_UNIT, LOAD_SET_AXBX_ROOT_HIDDEN 1009 000041F0 80000008 <1> dw LOAD_SET_AXBX_DATASTART, LOAD_SET_AXBX_ROOT_HIDDEN 1010 000041F4 04001000 <1> dw LOAD_SET_SIDI_CLUSTER, LOAD_SET_DSSI_DPT 1011 000041F8 00011000 <1> dw LOAD_SET_DSBP_BPB, LOAD_SET_DSSI_DPT 1012 000041FC 00000000 <1> dw 0, 0 1013 <1> 1014 00004200 5345545F444C5F554E- <1> lot_messages lot_list 1014 00004209 4954005345545F424C- <1> 1014 00004212 5F554E495400534554- <1> 1014 0000421B 5F534944495F434C55- <1> 1014 00004224 53544552005345545F- <1> 1014 0000422D 445353495F44505400- <1> 1014 00004236 505553485F44505400- <1> 1014 0000423F 444154415354415254- <1> 1014 00004248 5F48494444454E0053- <1> 1014 00004251 45545F415842585F44- <1> 1014 0000425A 415441535441525400- <1> 1014 00004263 5345545F445342505F- <1> 1014 0000426C 425042004C42415F53- <1> 1014 00004275 45545F54595045004D- <1> 1014 0000427E 4553534147455F5441- <1> 1014 00004287 424C45005345545F41- <1> 1014 00004290 5842585F524F4F545F- <1> 1014 00004299 48494444454E00 <1> 1015 <1> 1016 <1> %unmacro lot_entry 2.nolist 1017 <1> %unmacro lot_messages 0-*.nolist 1018 <1> 1019 <1> 1020 <1> msdos7_message_table: 1021 <1> ; the first four bytes give displacements to the various 1022 <1> ; messages. an ASCIZ message indicates that this was the 1023 <1> ; last message. a message terminated by 0FFh indicates 1024 <1> ; that the last message (displacement at table + 3) is 1025 <1> ; to follow after this message. 1026 <1> ; the maximum allowed displacement is 7Fh. the minimum 1027 <1> ; allowed displacement is 1, to avoid a zero displacement. 1028 <1> ; only the last message is terminated by a zero byte, 1029 <1> ; as that zero byte indicates the end of the message table. 1030 <1> ; (the entire table is treated as one ASCIZ string.) 1031 <1> ; MS-DOS 7.10 from MSW 98 SE seems to have at least 167h (359) 1032 <1> ; bytes allocated to its buffer for these. 1033 <1> ; 1034 <1> ; this message table was discussed in a dosemu2 repo at 1035 <1> ; https://github.com/stsp/dosemu2/issues/681 1036 000042A0 03 <1> . db .msg_invalid_system - ($ + 1) 1037 000042A1 13 <1> db .msg_io_error - ($ + 1) 1038 000042A2 01 <1> db .msg_invalid_system - ($ + 1) 1039 000042A3 1D <1> db .msg_press_any_key - ($ + 1) 1040 <1> 1041 <1> .msg_invalid_system: 1042 000042A4 0D0A496E76616C6964- <1> db 13,10,"Invalid system", -1 1042 000042AD 2073797374656DFF <1> 1043 <1> 1044 <1> .msg_io_error: 1045 000042B5 0D0A492F4F20657272- <1> db 13,10,"I/O error", -1 1045 000042BE 6F72FF <1> 1046 <1> 1047 <1> .msg_press_any_key: 1048 000042C1 0D0A4368616E676520- <1> db 13,10,"Change disk and press any key",13,10,0 1048 000042CA 6469736B20616E6420- <1> 1048 000042D3 707265737320616E79- <1> 1048 000042DC 206B65790D0A00 <1> 1049 <1> .end: 1050 <1> .size: equ .end - . 1051 <1> 1052 <1> %if .size > 150h 1053 <1> %error Message table too large! 1054 <1> %endif 1055 <1> 1056 <1> 1057 <1> 1058 000042E3 90 <1> align 4 1059 <1> loadsettings: 1060 <1> istruc LOADSETTINGS 1060 ****************** <1> expansion: strucname = LOADSETTINGS 1061 000042E4 [D339] <1> at lsKernelName, dw msg.ldos_kernel_name 1062 000042E6 [3C3A] <1> at lsAddName, dw msg.addname_empty 1063 000042E8 6000 <1> at lsMinPara, dw 60h 1064 000042EA FFFF <1> at lsMaxPara, dw -1 1065 000042EC 0300 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_BL_UNIT 1066 000042EE 7000 <1> at lsSegment, dw 70h 1067 000042F0 00040000 <1> at lsEntry, dd 400h 1068 000042F4 007CFFFF <1> at lsBPB, dw 7C00h, -1 1069 000042F8 4C444F5300 <1> at lsName, asciz "LDOS" 1070 000042FD 00 <1> iend 1071 <1> istruc LOADSETTINGS 1071 ****************** <1> expansion: strucname = LOADSETTINGS 1072 00004300 [BE39] <1> at lsKernelName, dw msg.freedos_kernel_name 1073 00004302 [3C3A] <1> at lsAddName, dw msg.addname_empty 1074 00004304 2000 <1> at lsMinPara, dw 20h 1075 00004306 FFFF <1> at lsMaxPara, dw -1 1076 00004308 0300 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_BL_UNIT 1077 0000430A 6000 <1> at lsSegment, dw 60h 1078 0000430C 00000000 <1> at lsEntry, dd 0 1079 00004310 007CFFFF <1> at lsBPB, dw 7C00h, -1 1080 00004314 46524545444F5300 <1> at lsName, asciz "FREEDOS" 1081 <1> iend 1082 <1> istruc LOADSETTINGS 1082 ****************** <1> expansion: strucname = LOADSETTINGS 1083 0000431C [C939] <1> at lsKernelName, dw msg.edrdos_kernel_name 1084 0000431E [3C3A] <1> at lsAddName, dw msg.addname_empty 1085 00004320 2000 <1> at lsMinPara, dw 20h 1086 00004322 FFFF <1> at lsMaxPara, dw -1 1088 00004324 0301 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_BL_UNIT | LOAD_SET_DSBP_BPB 1089 00004326 7000 <1> at lsSegment, dw 70h 1090 00004328 00000000 <1> at lsEntry, dd 0 1091 0000432C 007CFFFF <1> at lsBPB, dw 7C00h, -1 1092 00004330 454452444F5300 <1> at lsName, asciz "EDRDOS" 1093 00004337 00 <1> iend 1094 <1> istruc LOADSETTINGS 1094 ****************** <1> expansion: strucname = LOADSETTINGS 1095 00004338 [DC39] <1> at lsKernelName, dw msg.msdos6_kernel_name 1096 0000433A [E339] <1> at lsAddName, dw msg.msdos6_add_name 1097 0000433C 2000 <1> at lsMinPara, dw 20h 1098 0000433E 6000 <1> at lsMaxPara, dw 60h 1101 00004340 F100 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_AXBX_DATASTART | LOAD_DATASTART_HIDDEN | LOAD_SET_DSSI_DPT | LOAD_PUSH_DPT 1102 00004342 7000 <1> at lsSegment, dw 70h 1103 00004344 00000000 <1> at lsEntry, dd 0 1104 00004348 007C0000 <1> at lsBPB, dw 7C00h, 0 1105 0000434C 4D53444F533600 <1> at lsName, asciz "MSDOS6" 1106 00004353 00 <1> iend 1107 <1> istruc LOADSETTINGS 1107 ****************** <1> expansion: strucname = LOADSETTINGS 1108 00004354 [113A] <1> at lsKernelName, dw msg.rxdos.0_kernel_name 1109 00004356 [283A] <1> at lsAddName, dw msg.rxdos.0_add_name 1110 00004358 2000 <1> at lsMinPara, dw 20h 1111 0000435A 6000 <1> at lsMaxPara, dw 60h 1113 0000435C 3108 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_AXBX_ROOT_HIDDEN | LOAD_SET_DSSI_DPT | LOAD_PUSH_DPT 1114 0000435E 7000 <1> at lsSegment, dw 70h 1115 00004360 00000000 <1> at lsEntry, dd 0 1116 00004364 007C0000 <1> at lsBPB, dw 7C00h, 0 1117 00004368 5258444F532E3000 <1> at lsName, asciz "RXDOS.0" 1118 <1> iend 1119 <1> istruc LOADSETTINGS 1119 ****************** <1> expansion: strucname = LOADSETTINGS 1120 00004370 [1E3A] <1> at lsKernelName, dw msg.rxdos.1_kernel_name 1121 00004372 [283A] <1> at lsAddName, dw msg.rxdos.1_add_name 1122 00004374 2000 <1> at lsMinPara, dw 20h 1123 00004376 6000 <1> at lsMaxPara, dw 60h 1125 00004378 3108 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_AXBX_ROOT_HIDDEN | LOAD_SET_DSSI_DPT | LOAD_PUSH_DPT 1126 0000437A 7000 <1> at lsSegment, dw 70h 1127 0000437C 00000000 <1> at lsEntry, dd 0 1128 00004380 007C0000 <1> at lsBPB, dw 7C00h, 0 1129 00004384 5258444F532E3100 <1> at lsName, asciz "RXDOS.1" 1130 <1> iend 1131 <1> istruc LOADSETTINGS 1131 ****************** <1> expansion: strucname = LOADSETTINGS 1132 0000438C [323A] <1> at lsKernelName, dw msg.rxdos.2_kernel_name 1133 0000438E [3C3A] <1> at lsAddName, dw msg.addname_empty 1134 00004390 6000 <1> at lsMinPara, dw 60h 1135 00004392 FFFF <1> at lsMaxPara, dw -1 1136 00004394 0300 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_BL_UNIT 1137 00004396 7000 <1> at lsSegment, dw 70h 1138 00004398 00040000 <1> at lsEntry, dd 400h 1139 0000439C 007CFFFF <1> at lsBPB, dw 7C00h, -1 1140 000043A0 5258444F532E3200 <1> at lsName, asciz "RXDOS.2" 1141 <1> iend 1142 <1> istruc LOADSETTINGS 1142 ****************** <1> expansion: strucname = LOADSETTINGS 1143 000043A8 [ED39] <1> at lsKernelName, dw msg.ibmdos_kernel_name 1144 000043AA [F839] <1> at lsAddName, dw msg.ibmdos_add_name 1145 000043AC 2000 <1> at lsMinPara, dw 20h 1146 000043AE 8000 <1> at lsMaxPara, dw 80h 1149 000043B0 F100 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_AXBX_DATASTART | LOAD_DATASTART_HIDDEN | LOAD_SET_DSSI_DPT | LOAD_PUSH_DPT 1150 000043B2 7000 <1> at lsSegment, dw 70h 1151 000043B4 00000000 <1> at lsEntry, dd 0 1152 000043B8 007C0000 <1> at lsBPB, dw 7C00h, 0 1153 000043BC 49424D444F5300 <1> at lsName, asciz "IBMDOS" 1154 000043C3 00 <1> iend 1155 <1> istruc LOADSETTINGS 1155 ****************** <1> expansion: strucname = LOADSETTINGS 1156 000043C4 [DC39] <1> at lsKernelName, dw msg.msdos7_kernel_name 1157 000043C6 [3C3A] <1> at lsAddName, dw msg.addname_empty 1158 000043C8 2000 <1> at lsMinPara, dw 20h 1159 000043CA 8000 <1> at lsMaxPara, dw 80h 1162 000043CC 6506 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_SET_SIDI_CLUSTER | LOAD_DATASTART_HIDDEN | LOAD_PUSH_DPT | LOAD_LBA_SET_TYPE | LOAD_MESSAGE_TABLE 1163 000043CE 7000 <1> at lsSegment, dw 70h 1164 000043D0 00020000 <1> at lsEntry, dd 200h 1165 000043D4 007CFFFF <1> at lsBPB, dw 7C00h, -1 1166 000043D8 4D53444F533700 <1> at lsName, asciz "MSDOS7" 1167 000043DF 00 <1> iend 1168 <1> istruc LOADSETTINGS 1168 ****************** <1> expansion: strucname = LOADSETTINGS 1169 000043E0 [033A] <1> at lsKernelName, dw msg.ntldr_kernel_name 1170 000043E2 [3C3A] <1> at lsAddName, dw msg.addname_empty 1171 000043E4 2000 <1> at lsMinPara, dw 20h 1172 000043E6 FFFF <1> at lsMaxPara, dw -1 1174 000043E8 4100 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_DATASTART_HIDDEN 1175 000043EA 0020 <1> at lsSegment, dw 2000h 1176 000043EC 00000000 <1> at lsEntry, dd 0 1177 000043F0 007C0000 <1> at lsBPB, dw 7C00h, 0 1178 000043F4 4E544C445200 <1> at lsName, asciz "NTLDR" 1179 000043FA 00 <1> iend 1180 <1> istruc LOADSETTINGS 1180 ****************** <1> expansion: strucname = LOADSETTINGS 1181 000043FC [093A] <1> at lsKernelName, dw msg.bootmgr_kernel_name 1182 000043FE [3C3A] <1> at lsAddName, dw msg.addname_empty 1183 00004400 2000 <1> at lsMinPara, dw 20h 1184 00004402 FFFF <1> at lsMaxPara, dw -1 1186 00004404 4100 <1> at lsOptions, dw LOAD_SET_DL_UNIT | LOAD_DATASTART_HIDDEN 1187 00004406 0020 <1> at lsSegment, dw 2000h 1188 00004408 00000000 <1> at lsEntry, dd 0 1189 0000440C 007C0000 <1> at lsBPB, dw 7C00h, 0 1190 00004410 424F4F544D475200 <1> at lsName, asciz "BOOTMGR" 1191 <1> iend 1192 00004418 0000 <1> dw 0 1193 <1> %endif 1194 <1> 1195 <1> 1196 0000441A 0D21 <1> dskerrs: db dskerr0-dskerrs,dskerr1-dskerrs 1197 0000441C 3444 <1> db dskerr2-dskerrs,dskerr3-dskerrs 1198 0000441E 5494 <1> db dskerr4-dskerrs,dskerr9-dskerrs 1199 00004420 6570 <1> db dskerr6-dskerrs,dskerr7-dskerrs 1200 00004422 8394 <1> db dskerr8-dskerrs,dskerr9-dskerrs 1201 00004424 A2AE <1> db dskerra-dskerrs,dskerrb-dskerrs 1202 00004426 B9 <1> db dskerrc-dskerrs 1203 00004427 57726974652070726F- <1> dskerr0: asciz "Write protect error" 1203 00004430 74656374206572726F- <1> 1203 00004439 7200 <1> 1204 0000443B 556E6B6E6F776E2075- <1> dskerr1: asciz "Unknown unit error" 1204 00004444 6E6974206572726F72- <1> 1204 0000444D 00 <1> 1205 0000444E 4472697665206E6F74- <1> dskerr2: asciz "Drive not ready" 1205 00004457 20726561647900 <1> 1206 0000445E 556E6B6E6F776E2063- <1> dskerr3: asciz "Unknown command" 1206 00004467 6F6D6D616E6400 <1> 1207 0000446E 44617461206572726F- <1> dskerr4: asciz "Data error (CRC)" 1207 00004477 7220284352432900 <1> 1208 0000447F 5365656B206572726F- <1> dskerr6: asciz "Seek error" 1208 00004488 7200 <1> 1209 0000448A 556E6B6E6F776E206D- <1> dskerr7: asciz "Unknown media type" 1209 00004493 656469612074797065- <1> 1209 0000449C 00 <1> 1210 0000449D 536563746F72206E6F- <1> dskerr8: asciz "Sector not found" 1210 000044A6 7420666F756E6400 <1> 1211 000044AE 556E6B6E6F776E2065- <1> dskerr9: asciz "Unknown error" 1211 000044B7 72726F7200 <1> 1212 000044BC 577269746520666175- <1> dskerra: asciz "Write fault" 1212 000044C5 6C7400 <1> 1213 000044C8 52656164206661756C- <1> dskerrb: asciz "Read fault" 1213 000044D1 7400 <1> 1214 000044D3 47656E6572616C2066- <1> dskerrc: asciz "General failure" 1214 000044DC 61696C75726500 <1> 1215 000044E3 207265616400 <1> reading: asciz " read" 1216 000044E9 207772697400 <1> writing: asciz " writ" 1217 000044EF 696E67206472697665- <1> drive: db "ing drive " 1217 000044F8 20 <1> 1218 000044F9 5F00 <1> driveno: asciz "_" 1219 000044FB 383038362F383800 <1> msg8088: asciz "8086/88" 1220 00004503 78383600 <1> msgx86: asciz "x86" 1221 00004507 20776974686F757420- <1> no_copr: asciz " without coprocessor" 1221 00004510 636F70726F63657373- <1> 1221 00004519 6F7200 <1> 1222 0000451C 207769746820636F70- <1> has_copr: asciz " with coprocessor" 1222 00004525 726F636573736F7200 <1> 1223 0000452E 207769746820323837- <1> has_287: asciz " with 287" 1223 00004537 00 <1> 1224 00004538 7472616365206D6F64- <1> tmodes: db "trace mode is " 1224 00004541 6520697320 <1> 1225 00004546 5F202D20696E746572- <1> tmodev: asciz "_ - interrupts are " 1225 0000454F 727570747320617265- <1> 1225 00004558 2000 <1> 1226 0000455A 74726163656400 <1> tmode1: asciz "traced" 1227 00004561 70726F636573736564- <1> tmode0: asciz "processed" 1227 0000456A 00 <1> 1228 0000456B 2028756E7573656429- <1> unused: asciz " (unused)" 1228 00004574 00 <1> 1229 00004575 5B6E65656473207838- <1> needsmsg: db "[needs x86]" 1229 0000457E 365D <1> 1230 <1> needsmsg_L: equ $-needsmsg 1231 00004580 5B6E65656473206D61- <1> needsmath: db "[needs math coprocessor]" 1231 00004589 746820636F70726F63- <1> 1231 00004592 6573736F725D <1> 1232 <1> needsmath_L: equ $-needsmath 1233 00004598 5B6F62736F6C657465- <1> obsolete: db "[obsolete]" 1233 000045A1 5D <1> 1234 <1> obsolete_L: equ $-obsolete 1235 000045A2 446976696465206572- <1> int0msg: asciz "Divide error",13,10 1235 000045AB 726F720D0A00 <1> 1236 000045B1 556E65787065637465- <1> int1msg: asciz "Unexpected single-step interrupt",13,10 1236 000045BA 642073696E676C652D- <1> 1236 000045C3 7374657020696E7465- <1> 1236 000045CC 72727570740D0A00 <1> 1237 000045D4 556E65787065637465- <1> int3msg: asciz "Unexpected breakpoint interrupt",13,10 1237 000045DD 6420627265616B706F- <1> 1237 000045E6 696E7420696E746572- <1> 1237 000045EF 727570740D0A00 <1> 1238 <1> %if _CATCHINT06 1239 000045F6 496E76616C6964206F- <1> int6msg: asciz "Invalid opcode",13,10 1239 000045FF 70636F64650D0A00 <1> 1240 <1> %endif 1241 <1> %if _CATCHINT08 1242 00004607 446574656374656420- <1> int8msg: asciz "Detected Control pressed 5 seconds",13,10 1242 00004610 436F6E74726F6C2070- <1> 1242 00004619 726573736564203520- <1> 1242 00004622 7365636F6E64730D0A- <1> 1242 0000462B 00 <1> 1243 0000462C 446574656374656420- <1> int8_kbd_msg: asciz "Detected Control pressed 5 seconds (Keyboard enabled)",13,10 1243 00004635 436F6E74726F6C2070- <1> 1243 0000463E 726573736564203520- <1> 1243 00004647 7365636F6E64732028- <1> 1243 00004650 4B6579626F61726420- <1> 1243 00004659 656E61626C6564290D- <1> 1243 00004662 0A00 <1> 1244 <1> runint_ctrlc_msg: 1245 00004664 446574656374656420- <1> asciz "Detected double Control-C via serial",13,10 1245 0000466D 646F75626C6520436F- <1> 1245 00004676 6E74726F6C2D432076- <1> 1245 0000467F 69612073657269616C- <1> 1245 00004688 0D0A00 <1> 1246 <1> %endif 1247 <1> %if _CATCHINT18 1248 0000468B 4469736B6C65737320- <1> int18msg: asciz "Diskless boot hook called",13,10 1248 00004694 626F6F7420686F6F6B- <1> 1248 0000469D 2063616C6C65640D0A- <1> 1248 000046A6 00 <1> 1249 <1> %endif 1250 <1> %if _CATCHINT19 1251 000046A7 426F6F74206C6F6164- <1> int19msg: asciz "Boot load called",13,10 1251 000046B0 2063616C6C65640D0A- <1> 1251 000046B9 00 <1> 1252 <1> %endif 1253 <1> %if _PM 1254 <1> %if _CATCHEXC06 1255 <1> exc6msg: asciz "Invalid opcode fault",13,10 1256 <1> %endif 1257 <1> %if _CATCHEXC0C 1258 <1> excCmsg: asciz "Stack fault",13,10 1259 <1> %endif 1260 <1> excDmsg: asciz "General protection fault",13,10 1261 <1> %if _EXCCSIP 1262 <1> excloc: db "CS:IP=" 1263 <1> exccsip: asciz " : ",13,10 1264 <1> %endif 1265 <1> excEmsg: asciz "Page fault",13,10 1266 <1> nodosext: asciz "Command not supported in protected mode without a DOS extender",13,10 1267 <1> nopmsupp: asciz "Command not supported in protected mode",13,10 1268 <1> %if _DISPHOOK 1269 <1> dpmihook: db "DPMI entry hooked, new entry=" 1270 <1> dpmihookcs: asciz "____:",_4digitshex(mydpmientry+DATASECTIONFIXUP),13,10 1271 <1> msg.dpmi_no_hook: asciz "DPMI entry cannot be hooked!",13,10 1272 <1> %endif 1273 <1> nodesc: asciz "resource not accessible in real mode",13,10 1274 <1> ;descwrong: asciz "descriptor not accessible",13,10 1275 <1> gatewrong: asciz "gate not accessible",13,10 1276 <1> msg.msdos: asciz "MS-DOS" 1277 <1> descr: db "____ base=" 1278 <1> descbase: db "________ limit=" 1279 <1> desclim: db "________ attr=" 1280 <1> descattr: db "____",13,10 1281 <1> asciz 1282 <1> %endif ; _PM 1283 000046BA 4572726F7220696E20- <1> ph_msg: asciz "Error in sequence of calls to hack.",13,10 1283 000046C3 73657175656E636520- <1> 1283 000046CC 6F662063616C6C7320- <1> 1283 000046D5 746F206861636B2E0D- <1> 1283 000046DE 0A00 <1> 1284 <1> 1285 000046E0 0D0A50726F6772616D- <1> progtrm: db 13,10,"Program terminated normally (" 1285 000046E9 207465726D696E6174- <1> 1285 000046F2 6564206E6F726D616C- <1> 1285 000046FB 6C792028 <1> 1286 000046FF 5F5F5F5F290D0A00 <1> progexit: asciz "____)",13,10 1287 00004707 45584520616E642048- <1> nowhexe: asciz "EXE and HEX files cannot be written",13,10 1287 00004710 45582066696C657320- <1> 1287 00004719 63616E6E6F74206265- <1> 1287 00004722 207772697474656E0D- <1> 1287 0000472B 0A00 <1> 1288 0000472D 43616E6E6F74207772- <1> nownull: asciz "Cannot write: no file name given",13,10 1288 00004736 6974653A206E6F2066- <1> 1288 0000473F 696C65206E616D6520- <1> 1288 00004748 676976656E0D0A00 <1> 1289 00004750 57726974696E672000 <1> wwmsg1: asciz "Writing " 1290 00004759 2062797465730D0A00 <1> wwmsg2: asciz " bytes",13,10 1291 00004762 4469736B2066756C6C- <1> diskful: asciz "Disk full",13,10 1291 0000476B 0D0A00 <1> 1292 0000476E 4572726F7220 <1> openerr: db "Error " 1293 00004774 5F5F5F5F206F70656E- <1> openerr1: asciz "____ opening file",13,10 1293 0000477D 696E672066696C650D- <1> 1293 00004786 0A00 <1> 1294 00004788 46696C65206E6F7420- <1> doserr2: asciz "File not found",13,10 1294 00004791 666F756E640D0A00 <1> 1295 00004799 50617468206E6F7420- <1> doserr3: asciz "Path not found",13,10 1295 000047A2 666F756E640D0A00 <1> 1296 000047AA 416363657373206465- <1> doserr5: asciz "Access denied",13,10 1296 000047B3 6E6965640D0A00 <1> 1297 000047BA 496E73756666696369- <1> doserr8: asciz "Insufficient memory",13,10 1297 000047C3 656E74206D656D6F72- <1> 1297 000047CC 790D0A00 <1> 1298 <1> 1299 <1> %if _EMS 1300 <1> ;emmname: db "EMMXXXX0" 1301 000047D0 454D53206E6F742069- <1> emsnot: asciz "EMS not installed",13,10 1301 000047D9 6E7374616C6C65640D- <1> 1301 000047E2 0A00 <1> 1302 000047E4 454D5320696E746572- <1> emserr1: asciz "EMS internal error",13,10 1302 000047ED 6E616C206572726F72- <1> 1302 000047F6 0D0A00 <1> 1303 000047F9 48616E646C65206E6F- <1> emserr3: asciz "Handle not found",13,10 1303 00004802 7420666F756E640D0A- <1> 1303 0000480B 00 <1> 1304 0000480C 4E6F20667265652068- <1> emserr5: asciz "No free handles",13,10 1304 00004815 616E646C65730D0A00 <1> 1305 0000481E 546F74616C20706167- <1> emserr7: asciz "Total pages exceeded",13,10 1305 00004827 657320657863656564- <1> 1305 00004830 65640D0A00 <1> 1306 00004835 467265652070616765- <1> emserr8: asciz "Free pages exceeded",13,10 1306 0000483E 732065786365656465- <1> 1306 00004847 640D0A00 <1> 1307 0000484B 506172616D65746572- <1> emserr9: asciz "Parameter error",13,10 1307 00004854 206572726F720D0A00 <1> 1308 0000485D 4C6F676963616C2070- <1> emserra: asciz "Logical page out of range",13,10 1308 00004866 616765206F7574206F- <1> 1308 0000486F 662072616E67650D0A- <1> 1308 00004878 00 <1> 1309 00004879 506879736963616C20- <1> emserrb: asciz "Physical page out of range",13,10 1309 00004882 70616765206F757420- <1> 1309 0000488B 6F662072616E67650D- <1> 1309 00004894 0A00 <1> 1310 00004896 [E447][E447]0000- <1> emserrs: dw emserr1,emserr1,0,emserr3,0,emserr5,0,emserr7 1310 0000489C [F947]0000[0C48]00- <1> 1310 000048A3 00[1E48] <1> 1311 000048A6 [3548][4B48][5D48]- <1> dw emserr8,emserr9,emserra,emserrb 1311 000048AC [7948] <1> 1312 000048AE 454D53206572726F72- <1> emserrx: asciz "EMS error " 1312 000048B7 2000 <1> 1313 000048B9 48616E646C65206372- <1> xaans: db "Handle created = " 1313 000048C2 6561746564203D20 <1> 1314 000048CA 5F5F5F5F0D0A00 <1> xaans1: asciz "____",13,10 1315 000048D1 48616E646C6520 <1> xdans: db "Handle " 1316 000048D8 5F5F5F5F206465616C- <1> xdans1: asciz "____ deallocated",13,10 1316 000048E1 6C6F63617465640D0A- <1> 1316 000048EA 00 <1> 1317 000048EB 48616E646C65207265- <1> xrans: asciz "Handle reallocated",13,10 1317 000048F4 616C6C6F6361746564- <1> 1317 000048FD 0D0A00 <1> 1318 00004900 4C6F676963616C2070- <1> xmans: db "Logical page " 1318 00004909 61676520 <1> 1319 0000490D 5F5F206D6170706564- <1> xmans1: db "__ mapped to physical page " 1319 00004916 20746F207068797369- <1> 1319 0000491F 63616C207061676520 <1> 1320 00004928 5F5F0D0A00 <1> xmans2: asciz "__",13,10 1321 0000492D 48616E646C6520 <1> xsstr1: db "Handle " 1322 00004934 5F5F5F5F2068617320 <1> xsstr1a: db "____ has " 1323 0000493D 5F5F5F5F2070616765- <1> xsstr1b: asciz "____ pages allocated",13,10 1323 00004946 7320616C6C6F636174- <1> 1323 0000494F 65640D0A00 <1> 1324 00004954 706879732E20706167- <1> xsstr2: db "phys. page " 1324 0000495D 6520 <1> 1325 0000495F 5F5F203D207365676D- <1> xsstr2a: db "__ = segment " 1325 00004968 656E7420 <1> 1326 0000496C 5F5F5F5F202000 <1> xsstr2b: asciz "____ " 1327 00004973 5F5F5F5F206F662061- <1> xsstr3: db "____ of a total " 1327 0000497C 20746F74616C20 <1> 1328 00004983 5F5F5F5F20454D5320- <1> xsstr3a: asciz "____ EMS " 1328 0000498C 00 <1> 1329 0000498D 657320686176652062- <1> xsstr4: asciz "es have been allocated",13,10 1329 00004996 65656E20616C6C6F63- <1> 1329 0000499F 617465640D0A00 <1> 1330 000049A6 70616700 <1> xsstrpg: asciz "pag" 1331 000049AA 68616E646C00 <1> xsstrhd: asciz "handl" 1332 000049B0 6E6F206D6170706162- <1> xsnopgs: asciz "no mappable pages",13,10,13,10 1332 000049B9 6C652070616765730D- <1> 1332 000049C2 0A0D0A00 <1> 1333 <1> %endif 1334 <1> 1335 000049C6 90 <1> align 4 1336 000049C8 000800040002800040- <1> flagbits: dw 800h,400h,200h, 80h,040h,010h,004h,001h 1336 000049D1 00100004000100 <1> 1337 000049D8 4F56444E45494E475A- <1> flagson: dw "OV","DN","EI","NG","ZR","AC","PE","CY" 1337 000049E1 52414350454359 <1> 1338 000049E8 4E5655504449504C4E- <1> flagsoff: dw "NV","UP","DI","PL","NZ","NA","PO","NC" 1338 000049F1 5A4E41504F4E43 <1> 1339 000049F8 4F464446494653465A- <1> flagnames: dw "OF","DF","IF","SF","ZF","AF","PF","CF" 1339 00004A01 46414650464346 <1> 1340 <1> 1341 <1> %if _COND 1342 00004A08 6E6F7420 <1> msg.condnotjump:db "not " 1343 00004A0C 6A756D70696E6700 <1> msg.condjump: asciz "jumping" 1344 <1> %endif 1345 <1> 1346 00004A14 206D6174636865730D- <1> msg.matches: asciz " matches",13,10 1346 00004A1D 0A00 <1> 1347 <1> 1348 00004A1F 90 <1> align 4 1349 00004A20 414C4148424C424843- <1> reg8names: dw "AL","AH","BL","BH","CL","CH","DL","DH" 1349 00004A29 4C4348444C4448 <1> 1350 <1> ; Even entries are xL registers, odd ones the xH ones. 1351 <1> ; Order matches that of the first four regs entries. 1352 <1> 1353 00004A30 415842584358445853- <1> reg16names: dw "AX","BX","CX","DX","SP","BP","SI","DI" 1353 00004A39 50425053494449 <1> 1354 00004A40 445345535353435346- <1> dw "DS","ES","SS","CS","FS","GS","IP","FL" 1354 00004A49 5347534950464C <1> 1355 <1> ; 32-bit registers are the first eight and last two entries of 1356 <1> ; reg16names with 'E', which are all non-segment registers. 1357 <1> ; Segment registers can be detected by the 'S' as second letter. 1358 <1> ; FS and GS are the fourth- and third-to-last entries. 1359 <1> ; Order matches that of the sixteen regs entries. 1360 <1> 1361 <1> 1362 <1> ; Table of recognised default (unsigned) types. 1363 <1> ; 1364 <1> ; If any number of characters match, use the type. 1365 <1> ; If an additional "S" is found in front of a valid 1366 <1> ; type, the type is set to signed. (Word and byte 1367 <1> ; types are sign-extended to a dword value.) 1368 <1> ; 1369 <1> ; Each odd entry is an alternative name for the even 1370 <1> ; entry preceding it. 1371 <1> types: 1372 00004A50 0442595445 <1> countedb "BYTE" ; ("B" is hexadecimal) 1372 ****************** <1> expansion: len = 0 1372 ****************** <1> expansion: addlen = 4 1372 ****************** <1> expansion: len = 4 1373 00004A55 0443484152 <1> countedb "CHAR" ; ("C" is hexadecimal) 1373 ****************** <1> expansion: len = 0 1373 ****************** <1> expansion: addlen = 4 1373 ****************** <1> expansion: len = 4 1374 00004A5A 04574F5244 <1> countedb "WORD" 1374 ****************** <1> expansion: len = 0 1374 ****************** <1> expansion: addlen = 4 1374 ****************** <1> expansion: len = 4 1375 00004A5F 0553484F5254 <1> countedb "SHORT" 1375 ****************** <1> expansion: len = 0 1375 ****************** <1> expansion: addlen = 5 1375 ****************** <1> expansion: len = 5 1376 00004A65 0544574F5244 <1> countedb "DWORD" ; ("D" is hexadecimal) 1376 ****************** <1> expansion: len = 0 1376 ****************** <1> expansion: addlen = 5 1376 ****************** <1> expansion: len = 5 1377 00004A6B 044C4F4E47 <1> countedb "LONG" 1377 ****************** <1> expansion: len = 0 1377 ****************** <1> expansion: addlen = 4 1377 ****************** <1> expansion: len = 4 1378 <1> .addresses: 1379 00004A70 07504F494E544552 <1> countedb "POINTER" 1379 ****************** <1> expansion: len = 0 1379 ****************** <1> expansion: addlen = 7 1379 ****************** <1> expansion: len = 7 1380 00004A78 03505452 <1> countedb "PTR" 1380 ****************** <1> expansion: len = 0 1380 ****************** <1> expansion: addlen = 3 1380 ****************** <1> expansion: len = 3 1381 00004A7C 064F4646534554 <1> countedb "OFFSET" 1381 ****************** <1> expansion: len = 0 1381 ****************** <1> expansion: addlen = 6 1381 ****************** <1> expansion: len = 6 1382 00004A83 034F4653 <1> countedb "OFS" 1382 ****************** <1> expansion: len = 0 1382 ****************** <1> expansion: addlen = 3 1382 ****************** <1> expansion: len = 3 1383 00004A87 075345474D454E54 <1> countedb "SEGMENT" 1383 ****************** <1> expansion: len = 0 1383 ****************** <1> expansion: addlen = 7 1383 ****************** <1> expansion: len = 7 1384 <1> .end: 1385 <1> 1386 <1> maxtypesize equ 7 ; size of "SEGMENT" and "POINTER" 674 675 msg_end: 676 677 numdef SHOWMSGSIZE, 0 677 ****************** expansion: _SHOWMSGSIZE = 1 678 %if _SHOWMSGSIZE 679 %assign MSGSIZE msg_end - msg_start 679 ****************** expansion: MSGSIZE = 18049 680 %warning msg holds MSGSIZE bytes 680 ****************** warning: msg holds 18049 bytes [-w+user] 681 %endif 682 683 684 usesection lDEBUG_DATA_ENTRY 684 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 685 686 %if _PM 687 align 4 688 dpmientry: dd 0 ; DPMI entry point returned by DPMI host 689 dpmiwatch: dd 0 690 dpmi_rm2pm: dd 0 691 dpmi_rmsav: dd 0 692 dpmi_pm2rm: dw 0,0,0 693 dpmi_pmsav: dw 0,0,0 694 align 2 695 dssel: dw 0 ; debugger's (16-bit RW) data selector 696 cssel: dw 0 ; debugger's (16-bit RE) code selector 697 scratchsel: dw 0 ; scratch selector used for various purposes, limit -1 698 dpmi32: db 0 ; 32-bit client if true 699 bCSAttr: db 0 ; current code attribute (D bit) 700 bAddr32: db 0 ; Address attribute. if 1, hiword(edx) is valid 701 702 703 ; Int2F handler. Starts with an IISP header. 704 debug2F: 705 jmp short actual2F 706 oldi2F: dd -1 707 db "KB" 708 db 0 709 jmp short _retf 710 times 7 db 0 711 712 actual2F: 713 pushf 714 cmp ax, 1687h 715 dpmidisable: ; set this byte to __TEST_IMM8 to disable new DPMI entry 716 je dpmiquery 717 popf 718 jumpoldi2F: 719 jmp far [ cs:oldi2F ] 720 721 dpmiquery: 722 push cs 723 call jumpoldi2F 724 test ax, ax 725 jnz .nohost 726 727 mov word [ cs:dpmientry+0 ], di 728 mov word [ cs:dpmientry+2 ], es 729 mov di, mydpmientry 730 push cs 731 pop es 732 .nohost: 733 iret 734 735 mydpmientry: 736 mov byte [ cs:dpmi32 ], 0 737 test al, 1 738 jz .16 739 inc byte [ cs:dpmi32 ] 740 .16: 741 call far [ cs:dpmientry ] 742 jnc installdpmi 743 _retf: 744 retf 745 746 %xdefine __CPU_PREV__ __CPU__ 747 cpu 286 748 installdpmi: 749 pusha 750 mov bp, sp ; [bp+16]=ip, [bp+18]=cs 751 pushf 752 push ds 753 mov bx, cs 754 mov ax, 000Ah ; get a data descriptor for DEBUG's segment 755 int 31h 756 jc .fataldpmierr 757 mov ds, ax 758 mov word [ cssel ], cs 759 mov word [ dssel ], ax 760 761 mov cx, 1 ; allocate code_sel selector 762 xor ax, ax 763 int 31h 764 jc .fataldpmierr 765 mov word [ code_sel ], ax 766 mov bx, ax 767 xor cx, cx 768 or dx, -1 ; cx:dx = 0FFFFh 769 mov ax, 0008h 770 int 31h ; set limit 64 KiB 771 jc .fataldpmierr 772 lar cx, word [ cssel ] ; get access rights/type of cs 773 shr cx, 8 ; proper format for 31.0009 774 ; high byte zero (16-bit and byte-granular selector) 775 mov ax, 0009h 776 int 31h ; set descriptor access rights/type 777 jc .fataldpmierr 778 779 mov dx, word [ code_seg ] 780 mov cx, dx 781 shl dx, 4 782 shr cx, 12 783 mov ax, 0007h 784 int 31h ; set selector base to code segment's base 785 786 call entry_to_code_sel, installdpmi_code 787 788 .fataldpmierr: 789 mov ax, 4CFFh 790 int 21h 791 792 793 usesection lDEBUG_CODE 794 795 code_insure_low_byte_not_0CCh 796 installdpmi_code: 797 d4 call d4message 798 d4 asciz "In installdpmi_code",13,10 799 800 mov cx, 2 ; alloc 2 descriptors 801 xor ax, ax 802 int 31h 803 jc .fataldpmierr 804 805 d4 call d4message 806 d4 asciz "In installdpmi_code, allocated 2 descriptors",13,10 807 808 mov word [ scratchsel ], ax ; the first is used as scratch descriptor 809 mov bx, ax 810 xor cx, cx 811 %if 1 812 _386 dec cx ; set a limit of FFFFFFFFh if 386 813 %else 814 cmp byte [ dpmi32 ], 0 815 je .16 816 dec cx ; set a limit of FFFFFFFFh if 32-bit client 817 .16: 818 %endif 819 or dx, byte -1 820 mov ax, 0008h 821 int 31h 822 mov ax, 0003h 823 int 31h ; get selector increment 824 %if 0 825 jnc .03sup 826 mov ax, 8 827 .03sup: 828 %endif 829 add bx, ax ; the second selector is client's CS 830 xor cx, cx ; this limit is FFFFh even for 32-bits 831 mov ax, 0008h 832 int 31h 833 mov dx, word [ bp+18 ] ; get client's CS 834 call setrmaddr ; set base 835 lar cx, word [ cssel ] 836 shr cx, 8 ; CS remains 16-bit 837 mov ax, 0009h 838 int 31h 839 mov dx, bx 840 mov word [ bp+18 ], bx 841 842 cld 843 844 mov si, convsegs 845 mov cx, NUMSEGS 846 .loopseg: 847 d4 call d4message 848 d4 asciz "In installdpmi_code.loopseg",13,10 849 850 lodsw 851 mov di, ax 852 mov bx, word [di] 853 mov ax, 0002h 854 int 31h 855 jc .fataldpmierr 856 mov word [di], ax 857 loop .loopseg 858 859 d4 call d4message 860 d4 asciz "In installdpmi_code after .loopseg",13,10 861 862 _386 push edi 863 _386 xor edi, edi ; clear edih 864 clropt [internalflags], canswitchmode|switchbuffer 865 xor bp, bp 866 _386 inc bp 867 _386 inc bp 868 .save16: 869 mov ax, 0305h ; get raw mode-switch save state addresses 870 int 31h 871 jc .cannotswitch 872 cmp ax, _AUXBUFFSIZE ; fits into auxbuff ? 873 ja .cannotswitch ; no --> 874 test ax, ax 875 jz .nobuffer 876 mov word [auxbuff_switchbuffer_size], ax 877 setopt [internalflags], switchbuffer 878 mov word [dpmi_rmsav+0], cx 879 mov word [dpmi_rmsav+2], bx 880 _386_o32 ; mov dword [dpmi_pmsav], edi 881 mov word [dpmi_pmsav], di 882 mov word [ds:bp+dpmi_pmsav+2], si 883 .nobuffer: 884 _386 xor edi, edi ; clear edih 885 mov ax, 0306h ; get raw mode-switch addresses 886 int 31h 887 jc .cannotswitch 888 setopt [internalflags], canswitchmode 889 mov word [dpmi_rm2pm+0], cx 890 mov word [dpmi_rm2pm+2], bx 891 _386_o32 ; mov dword [dpmi_pm2rm], edi 892 mov word [dpmi_pm2rm], di 893 mov word [ds:bp+dpmi_pm2rm+2], si 894 .cannotswitch: 895 _386 pop edi 896 897 _386 push edx 898 _386 xor edx, edx ; clear edxh 899 mov si, exctab ; hook several exceptions 900 mov dx, exc00 901 .loopexc: 902 lodsb 903 d4 call d4message 904 d4 asciz "In installdpmi_code.loopexc, ax=" 905 d4 push ax 906 d4 call disp_stack_hex 907 d4 call d4message 908 d4 asciz 13,10 909 910 mov bl, al 911 mov cx, word [cssel] 912 mov ax, 0203h 913 int 31h 914 add dx, byte exc01-exc00 915 cmp si, endexctab 916 jb .loopexc 917 _386 pop edx 918 919 mov bl, 2Fh ; get int 2Fh real-mode vector 920 mov ax, 0200h 921 int 31h 922 cmp cx, word [pspdbg] ; did we hook it and are the last in chain? 923 jne .notours ; no --> 924 mov dx, word [oldi2F+0] 925 mov cx, word [oldi2F+2] ; then unhook 926 mov ax, 0201h 927 int 31h 928 clropt [internalflags], hooked2F 929 .notours: 930 d4 call d4message 931 d4 asciz "In installdpmi_code end",13,10 932 pop ds 933 popf 934 popa 935 retf 936 937 .fataldpmierr: 938 d4 call d4message 939 d4 asciz "In installdpmi_code.fataldpmierr",13,10 940 mov ax, 4CFFh 941 int 21h 942 943 944 usesection lDEBUG_DATA_ENTRY 945 946 convsegs: 947 dw pInDOS+2 948 %if _USESDA 949 dw pSDA+2 950 %endif 951 dw a_addr+4 952 dw d_addr+4 953 dw auxbuff_segorsel 954 NUMSEGS equ ($-convsegs)/2 955 956 exctab: 957 db 00h 958 db 01h 959 db 03h 960 %if _CATCHEXC06 961 db 06h 962 %endif 963 %if _CATCHEXC0C 964 db 0Ch 965 %endif 966 db 0Dh 967 db 0Eh 968 endexctab: 969 970 971 struc exceptionframe16 972 resw 8 ; pusha 973 fr16_ds: resw 1 ; push ds 974 resw 2 ; 16-bit return address to DPMI host 975 resw 1 ; error code 976 fr16_ip: resw 1 977 fr16_cs: resw 1 978 fr16_fl: resw 1 979 fr16_sp: resw 1 980 fr16_ss: resw 1 981 endstruc 982 983 struc exceptionframe32 984 resd 8 ; pushad 985 resw 1 ; stack alignment 986 fr32_ds: resw 1 ; push ds 987 resd 2 ; 32-bit return address to DPMI host 988 resd 1 ; error code 989 fr32_eip: resd 1 990 fr32_cs: resd 1 991 fr32_efl: resd 1 992 fr32_esp: resd 1 993 fr32_ss: resd 1 994 endstruc 995 996 %macro exc_entry 2-3.nolist 997 exc %+ %1 %+ : 998 push ds 999 push %2 1000 %ifempty %3 1001 jmp short exc 1002 %elifnidn %3,last 1003 %fatal Invalid third parameter 1004 %endif 1005 %endmacro 1006 1007 ; Exception handlers. 1008 ; These are the entry into the debugger in protected mode. 1009 ; The address difference between exc00 and exc01 is 1010 ; assumed to be the same for all the entries. (Above, in 1011 ; installdpmi, where the exception handlers are installed.) 1012 1013 exc_entry 00, int0msg 1014 exc_entry 01, int1msg 1015 exc_entry 03, int3msg 1016 %if _CATCHEXC06 1017 exc_entry 06, exc6msg 1018 %endif 1019 %if _CATCHEXC0C 1020 exc_entry 0C, excCmsg 1021 %endif 1022 exc_entry 0D, excDmsg 1023 exc_entry 0E, excEmsg, last 1024 exc: 1025 mov ds, word [cs:dssel] 1026 pop word [run_int] 1027 call entry_to_code_sel, exc_code 1028 1029 1030 usesection lDEBUG_CODE 1031 1032 code_insure_low_byte_not_0CCh 1033 exc_code: 1034 cmp byte [dpmi32], 0 1035 jz exc16 1036 1037 [cpu 386] 1038 exc32: 1039 push ax ; stack alignment 1040 pushad 1041 mov ebp, esp 1042 mov eax, dword [ ebp + fr32_eip ] 1043 mov bx, word [ ebp + fr32_cs ] 1044 mov ecx, dword [ ebp + fr32_efl ] 1045 mov edx, dword [ ebp + fr32_esp ] 1046 mov si, word [ ebp + fr32_ss ] 1047 mov word [ ebp + fr32_cs ], cs 1048 mov word [ ebp + fr32_ss ], ds 1049 cmp byte [ bInDbg ], 0 ; did the exception occur inside DEBUG? 1050 je @F ; no --> 1051 1052 ; inside debugger 1053 push ds 1054 pop es 1055 %if _EXCCSIP 1056 mov di, exccsip 1057 mov ax, bx 1058 call hexword 1059 inc di 1060 mov ax, word [ ebp + fr32_eip ] 1061 call hexword 1062 %endif 1063 mov dword [ ebp + fr32_eip ], debuggerexception 1064 movzx eax, word [ savesp ] 1065 mov dword [ ebp + fr32_esp ], eax 1066 clropt [ ebp + fr32_efl ], 100h ; reset TF 1067 jmp short @FF 1068 1069 @@: ; inside debuggee 1070 setopt [internalflags], protectedmode 1071 mov dword [ ebp + fr32_eip ], intrtn2_code 1072 clropt [ ebp + fr32_efl ], 300h ; reset IF + TF 1073 mov dword [ ebp + fr32_esp ], reg_ss 1074 mov dword [ reg_eip ], eax 1075 mov word [ reg_cs ], bx 1076 ; mov dword [ reg_efl ], ecx ; (eflh is saved in intrtn2_code) 1077 mov word [ reg_efl ], cx 1078 mov dword [ reg_esp ], edx 1079 mov word [ reg_ss ], si 1080 push word [ ebp + fr32_ds ] 1081 pop word [ reg_ds ] 1082 1083 @@: 1084 popad 1085 pop ax ; stack alignment 1086 pop ds 1087 o32 retf 1088 1089 __CPU__ 1090 exc16: 1091 pusha 1092 mov bp, sp 1093 mov ax, word [ bp + fr16_ip ] 1094 mov bx, word [ bp + fr16_cs ] 1095 mov cx, word [ bp + fr16_fl ] 1096 mov dx, word [ bp + fr16_sp ] 1097 mov si, word [ bp + fr16_ss ] 1098 mov word [ bp + fr16_cs ], cs 1099 mov word [ bp + fr16_ss ], ds 1100 cmp byte [ bInDbg ], 0 ; did the exception occur inside DEBUG? 1101 je isdebuggee16 1102 push ds 1103 pop es 1104 %if _EXCCSIP 1105 mov di, exccsip ; render CS:IP if internal GPF 1106 mov ax, bx 1107 call hexword 1108 inc di 1109 mov ax, word [ bp + fr16_ip ] 1110 call hexword 1111 %endif 1112 mov word [ bp + fr16_ip ], debuggerexception 1113 mov ax, word [ savesp ] 1114 mov word [ bp + fr16_sp ], ax 1115 clropt [ bp + fr16_fl ], 100h ; reset TF 1116 jmp short isdebugger16 1117 isdebuggee16: 1118 setopt [internalflags], protectedmode 1119 mov word [ bp + fr16_ip ], intrtn2_code 1120 clropt [ bp + fr16_fl ], 300h ; reset IF + TF 1121 mov word [ bp + fr16_sp ], reg_ss 1122 mov word [ reg_eip ], ax 1123 mov word [ reg_cs ], bx 1124 mov word [ reg_efl ], cx 1125 mov word [ reg_esp ], dx 1126 mov word [ reg_ss ], si 1127 push word [ bp + fr16_ds ] 1128 pop word [ reg_ds ] 1129 isdebugger16: 1130 popa 1131 pop ds 1132 retf 1133 1134 %xdefine __CPU__ __CPU_PREV__ 1135 %undef __CPU_PREV__ 1136 __CPU__ 1137 1138 1139 ; Test if bx is a 32-bit selector (as opposed to a 16-bit selector or a segment) 1140 ; 1141 ; INP: bx = selector (PM) or segment (RM) 1142 ; OUT: NZ = 32-bit 1143 ; ZR = 16-bit 1144 ; NC 1145 testattrhigh: 1146 _386 call ispm 1147 _386 jz .pm ; 386 and PM, check selector --> 1148 ; not PM or no 386 1149 cmp al, al ; ZR, NC 1150 retn 1151 .pm: 1152 [cpu 386] 1153 push eax 1154 lar eax, ebx ; access rights 1155 test eax, 400000h ; test bit (NC) 1156 pop eax 1157 retn 1158 __CPU__ 1159 1160 1161 i23pm: 1162 cmp byte [ cs:dpmi32 ], 0 ; always NC 1163 je .retf16_2 1164 o32 1165 retf 4 ; retfd 4 1166 .retf16_2: 1167 retf 2 1168 1169 i24pm: 1170 mov al, 03h ; fail 1171 cmp byte [ cs:dpmi32 ], 0 1172 je .iret16 1173 o32 ; iretd 1174 .iret16: 1175 iret 1176 1177 cpu 8086 1178 %endif ; _PM 1179 1180 1181 1182 usesection lDEBUG_CODE 1182 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 1183 %if _DEBUG4 || _DEBUG5 1184 %define _DEB_ASM_PREFIX 1184 ****************** expansion: _DEB_ASM_PREFIX = 1185 %include "deb.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> Debugging output functions independent of DOS 5 <1> Public Domain, 2008-2012 by C. Masloch 6 <1> 7 <1> Usage of the works is permitted provided that this 8 <1> instrument is retained with the works, so that any entity 9 <1> that uses the works is notified of this instrument. 10 <1> 11 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 12 <1> 13 <1> %endif 14 <1> 15 <1> %if 0 16 <1> 17 <1> Only the registers noted here are changed or returned, including flags. 18 <1> 19 <1> d4dumpregs displays numeric value of all 16-bit registers. 20 <1> d4message displays ASCIZ message behind the call. (Returns behind message.) 21 <1> d5dumpregs displays numeric value of all 16-bit registers. 22 <1> d5message displays ASCIZ message behind the call. (Returns behind message.) 23 <1> disp_al displays character in al. 24 <1> disp_al_dec displays al as decimal number, without leading zeros. 25 <1> disp_al_hex displays al as hexadecimal number, with two digits. 26 <1> disp_ax_hex displays ax as hexadecimal number, with four digits. 27 <1> d4uppercase uppercases character in al. 28 <1> disp_stack_hex displays the word on the stack as hexadecimal number (and pops it). 29 <1> disp_msg displays ASCIZ string pointed to by ds:si. 30 <1> d4getc returns ASCII character in al, scancode in ah. (al might be zero.) 31 <1> d4pauseforkey waits until a key is pressed. (The key-press is discarded.) 32 <1> 33 <1> This was all thrown together really quick without more thought to it. 34 <1> 35 <1> %endif 36 <1> 37 <1> numdef DEBUG_TO_SERIAL, 1 37 ****************** <1> expansion: _DEBUG_TO_SERIAL = 1 38 <1> %ifidni _DEB_ASM_PREFIX, init_ 39 <1> overridedef DEBUG_TO_SERIAL, 0 40 <1> %endif 41 <1> 42 <1> 43 <1> %[_DEB_ASM_PREFIX]d5dumpregs: 44 <1> %[_DEB_ASM_PREFIX]d4dumpregs: 45 00000000 9C <1> pushf 46 00000001 50 <1> push ax 47 00000002 53 <1> push bx 48 00000003 51 <1> push cx 49 00000004 52 <1> push dx 50 00000005 56 <1> push si 51 00000006 57 <1> push di 52 00000007 55 <1> push bp 53 00000008 89E0 <1> mov ax, sp 54 0000000A 83C012 <1> add ax, byte 18 55 0000000D 50 <1> push ax 56 0000000E 0E <1> push cs 57 0000000F 16 <1> push ss 58 00000010 1E <1> push ds 59 00000011 06 <1> push es 60 <1> 61 00000012 89E3 <1> mov bx, sp 62 00000014 B80701 <1> mov ax, 1<<8|7 63 00000017 50 <1> push ax 64 00000018 B80E00 <1> mov ax, 14 65 0000001B 0E <1> push cs 66 0000001C 1F <1> pop ds 67 0000001D BA[5200] <1> mov dx, .regnames 68 <1> 69 00000020 89E5 <1> mov bp, sp 70 <1> %assign _columns 0 70 ****************** <1> expansion: _columns = 0 71 <1> %assign _blanks 1 71 ****************** <1> expansion: _blanks = 1 72 <1> 73 00000022 31C9 <1> xor cx, cx 74 <1> 75 <1> .looprows: 76 00000024 50 <1> push ax 77 00000025 B00D <1> mov al, 13 78 00000027 E8D800 <1> call %[_DEB_ASM_PREFIX]disp_al 79 0000002A B00A <1> mov al, 10 80 0000002C E8D300 <1> call %[_DEB_ASM_PREFIX]disp_al 81 <1> %if 0 82 <1> push cx 83 <1> push dx 84 <1> xor cx, cx 85 <1> mov cl, byte [ _blanks + bp ] 86 <1> jcxz .doneblanks 87 <1> mov al, 32 88 <1> .loopblanks: 89 <1> call %[_DEB_ASM_PREFIX]disp_al 90 <1> loop .loopblanks 91 <1> .doneblanks: 92 <1> pop dx 93 <1> pop cx 94 <1> %endif 95 0000002F 58 <1> pop ax 96 <1> 97 00000030 8A4E00 <1> mov cl, byte [ _columns + bp ] 98 <1> .loopcolumns: 99 00000033 E83800 <1> call %[_DEB_ASM_PREFIX]disp_reg 100 00000036 83C202 <1> add dx, byte 2 101 00000039 83C302 <1> add bx, byte 2 102 0000003C 48 <1> dec ax 103 0000003D 7404 <1> jz .done 104 0000003F E2F2 <1> loop .loopcolumns 105 00000041 EBE1 <1> jmp short .looprows 106 <1> 107 <1> .done: 108 00000043 58 <1> pop ax 109 <1> 110 00000044 07 <1> pop es 111 00000045 1F <1> pop ds 112 00000046 58 <1> pop ax 113 00000047 58 <1> pop ax 114 00000048 58 <1> pop ax 115 00000049 5D <1> pop bp 116 0000004A 5F <1> pop di 117 0000004B 5E <1> pop si 118 0000004C 5A <1> pop dx 119 0000004D 59 <1> pop cx 120 0000004E 5B <1> pop bx 121 0000004F 58 <1> pop ax 122 00000050 9D <1> popf 123 00000051 C3 <1> retn 124 <1> 125 <1> .regnames: 126 00000052 657364737373637373- <1> db "esdssscsspbpdisidxcxbxaxflip" 126 0000005B 706270646973696478- <1> 126 00000064 637862786178666C69- <1> 126 0000006D 70 <1> 127 <1> 128 <1> 129 <1> ; ss:bx-> word value 130 <1> ; ds:dx-> 2-byte message 131 <1> %[_DEB_ASM_PREFIX]disp_reg: 132 0000006E 50 <1> push ax 133 0000006F 87DA <1> xchg bx, dx 134 00000071 8B07 <1> mov ax, [ bx ] ; get 2 bytes at [ ds:dx ] 135 00000073 87DA <1> xchg bx, dx 136 00000075 E88A00 <1> call %[_DEB_ASM_PREFIX]disp_al 137 00000078 86C4 <1> xchg al, ah 138 0000007A E88500 <1> call %[_DEB_ASM_PREFIX]disp_al 139 <1> 140 0000007D B03D <1> mov al, '=' 141 0000007F E88000 <1> call %[_DEB_ASM_PREFIX]disp_al 142 <1> 143 00000082 368B07 <1> mov ax, [ ss:bx ] 144 00000085 E8B800 <1> call %[_DEB_ASM_PREFIX]disp_ax_hex 145 <1> 146 00000088 B020 <1> mov al, 32 147 0000008A E87500 <1> call %[_DEB_ASM_PREFIX]disp_al 148 0000008D 58 <1> pop ax 149 0000008E C3 <1> retn 150 <1> 151 <1> 152 <1> %if 0 153 <1> %[_DEB_ASM_PREFIX]d4pocketdosmemdump: 154 <1> pushf 155 <1> push es 156 <1> push ds 157 <1> push si 158 <1> push di 159 <1> push bx 160 <1> push ax 161 <1> push cx 162 <1> 163 <1> cld 164 <1> push cs 165 <1> pop es 166 <1> mov di, .pocketdosmemfnfull 167 <1> mov cx, -1 168 <1> mov al, ':' 169 <1> .colonloop: 170 <1> repne scasb 171 <1> cmp di, .dummycolon+1 172 <1> je .colondone 173 <1> cmp byte [es:di], '\' 174 <1> je .colonloop 175 <1> mov byte [es:di-1], '.' 176 <1> jmp short .colonloop 177 <1> .colondone: 178 <1> 179 <1> ; A simple check whether we're running in PocketDOS. 180 <1> xor ax, ax 181 <1> mov ds, ax 182 <1> mov ax, word [ 0F8h*4 ] 183 <1> inc ax ; 0FFFFh ? 184 <1> jz .notfound ; not PocketDOS --> 185 <1> dec ax ; 0 ? 186 <1> jz .notfound ; not PocketDOS --> 187 <1> 188 <1> push cs 189 <1> pop es 190 <1> mov bx, .pocketdosmemdll ; es:bx-> ASCIZ DLL file name 191 <1> xor ax, ax 192 <1> int 0F8h ; IntF8.00 initialize 193 <1> 194 <1> test al, al 195 <1> jz .notfound ; --> 00h, not found 196 <1> cmp al, -1 197 <1> je .notfound ; --> FFh, too many DLLs loaded 198 <1> 199 <1> push cs 200 <1> pop ds 201 <1> mov si, .pocketdosmemfnfull ; ds:si-> FN 202 <1> xor bx, bx ; bx = number of paragraphs, 0 = 10000h 203 <1> mov es, bx ; es:0-> start of dump 204 <1> mov ah, 02h 205 <1> push ax 206 <1> int 0F8h ; IntF8.02 call DLL 207 <1> pop ax ; preserve handle in al 208 <1> 209 <1> mov si, .pocketdosmemfninit0 ; ds:si-> FN 210 <1> mov bx, resimagepsp_size_p 211 <1> push cs 212 <1> pop es ; es:0-> start of dump 213 <1> mov ah, 02h 214 <1> push ax 215 <1> int 0F8h ; IntF8.02 call DLL 216 <1> pop ax ; preserve handle in al 217 <1> 218 <1> mov ah, 01h 219 <1> int 0F8h ; IntF8.01 close 220 <1> 221 <1> call %[_DEB_ASM_PREFIX]d4message 222 <1> asciz 13,10,"Memory dumps created." 223 <1> 224 <1> .notfound: 225 <1> pop cx 226 <1> pop ax 227 <1> pop bx 228 <1> pop di 229 <1> pop si 230 <1> pop ds 231 <1> pop es 232 <1> popf 233 <1> retn 234 <1> 235 <1> .pocketdosmemdll: asciz "PDOSMEM.DLL" 236 <1> .pocketdosmemfnfull: asciz "D:\LITEST\init-",__DATE__,"T",__TIME__,"-full.bin" 237 <1> .pocketdosmemfninit0: asciz "D:\LITEST\init-",__DATE__,"T",__TIME__,"-ldebug.bin" 238 <1> .dummycolon: db ":" 239 <1> %endif 240 <1> 241 <1> 242 <1> %[_DEB_ASM_PREFIX]disp_stack_hex: 243 0000008F 50 <1> push ax 244 00000090 55 <1> push bp 245 00000091 89E5 <1> mov bp, sp 246 00000093 8B4606 <1> mov ax, [bp+6] 247 00000096 5D <1> pop bp 248 00000097 E8A600 <1> call %[_DEB_ASM_PREFIX]disp_ax_hex 249 0000009A 58 <1> pop ax 250 0000009B C20200 <1> retn 2 251 <1> 252 <1> %[_DEB_ASM_PREFIX]d5message: 253 <1> %[_DEB_ASM_PREFIX]d4message: 254 0000009E 50 <1> push ax 255 0000009F 53 <1> push bx 256 000000A0 56 <1> push si 257 000000A1 55 <1> push bp 258 000000A2 89E5 <1> mov bp, sp 259 000000A4 8B7608 <1> mov si, [bp+8] 260 000000A7 9C <1> pushf 261 000000A8 2E803CCC <1> cmp byte [cs:si], 0CCh 262 000000AC 7512 <1> jne @FF 263 000000AE CC <1> int3 264 000000AF 2E803CCC <1> cmp byte [cs:si], 0CCh 265 000000B3 750B <1> jne @FF 266 000000B5 BE[CC00] <1> mov si, .msg_error 267 000000B8 E8E500 <1> call %[_DEB_ASM_PREFIX]init0display 268 <1> @@: 268 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.inv.2 268 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.inv.1 268 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.0 268 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.1 268 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.2 268 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.3 268 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.4 268 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.5 268 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.inv.2 268 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.inv.1 268 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.0 268 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.1 268 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.2 268 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.3 268 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.4 268 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.5 268 ****************** <1> expansion: __@@_num = 6 269 000000BB FB <1> sti 270 000000BC F4 <1> hlt 271 000000BD CC <1> int3 272 000000BE EBFB <1> jmp @B 273 <1> 274 <1> @@: 274 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.inv.1 274 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.0 274 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.1 274 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.2 274 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.3 274 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.4 274 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.5 274 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.6 274 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.inv.1 274 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.0 274 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.1 274 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.2 274 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.3 274 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.4 274 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.5 274 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.6 274 ****************** <1> expansion: __@@_num = 7 275 000000C0 E8DD00 <1> call %[_DEB_ASM_PREFIX]init0display 276 000000C3 9D <1> popf 277 000000C4 897608 <1> mov word [bp+8], si 278 000000C7 5D <1> pop bp 279 000000C8 5E <1> pop si 280 000000C9 5B <1> pop bx 281 000000CA 58 <1> pop ax 282 000000CB C3 <1> retn 283 <1> 284 <1> .msg_error: 285 000000CC 4572726F7220696E20- <1> asciz "Error in d4message, detected breakpoint in message.",13,10 285 000000D5 64346D657373616765- <1> 285 000000DE 2C2064657465637465- <1> 285 000000E7 6420627265616B706F- <1> 285 000000F0 696E7420696E206D65- <1> 285 000000F9 73736167652E0D0A00 <1> 286 <1> 287 <1> 288 <1> %[_DEB_ASM_PREFIX]disp_al: 289 00000102 50 <1> push ax 290 00000103 53 <1> push bx 291 00000104 9C <1> pushf 292 00000105 E87200 <1> call %[_DEB_ASM_PREFIX]init0int10tty 293 00000108 9D <1> popf 294 00000109 5B <1> pop bx 295 0000010A 58 <1> pop ax 296 0000010B C3 <1> retn 297 <1> 298 <1> 299 <1> %[_DEB_ASM_PREFIX]disp_al_dec: 300 0000010C 9C <1> pushf 301 0000010D 50 <1> push ax 302 0000010E 51 <1> push cx 303 0000010F B96400 <1> mov cx, 100 304 00000112 E80E00 <1> call .div 305 00000115 B10A <1> mov cl, 10 306 00000117 E80900 <1> call .div 307 0000011A 0430 <1> add al, '0' 308 0000011C E8E3FF <1> call %[_DEB_ASM_PREFIX]disp_al 309 0000011F 59 <1> pop cx 310 00000120 58 <1> pop ax 311 00000121 9D <1> popf 312 00000122 C3 <1> retn 313 <1> 314 <1> .div: 315 00000123 30E4 <1> xor ah, ah 316 00000125 F6F1 <1> div cl 317 00000127 08C5 <1> or ch, al 318 00000129 7405 <1> jz .leadingzero 319 0000012B 0430 <1> add al, '0' 320 0000012D E8D2FF <1> call %[_DEB_ASM_PREFIX]disp_al 321 <1> .leadingzero: 322 00000130 86C4 <1> xchg al, ah 323 00000132 C3 <1> retn 324 <1> 325 <1> 326 <1> %[_DEB_ASM_PREFIX]d4uppercase: 327 00000133 9C <1> pushf 328 00000134 3C61 <1> cmp al, 'a' 329 00000136 7206 <1> jb .return 330 00000138 3C7A <1> cmp al, 'z' 331 0000013A 7702 <1> ja .return 332 0000013C 24DF <1> and al, ~ 20h 333 <1> .return: 334 0000013E 9D <1> popf 335 0000013F C3 <1> retn 336 <1> 337 <1> 338 <1> %[_DEB_ASM_PREFIX]disp_ax_hex: ; ax 339 00000140 86C4 <1> xchg al,ah 340 00000142 E80200 <1> call %[_DEB_ASM_PREFIX]disp_al_hex ; display former ah 341 00000145 86C4 <1> xchg al,ah ; and fall trough for al 342 <1> %[_DEB_ASM_PREFIX]disp_al_hex: ; al 343 00000147 51 <1> push cx 344 00000148 9C <1> pushf 345 00000149 B104 <1> mov cl,4 346 0000014B D2C8 <1> ror al,cl 347 0000014D E80400 <1> call %[_DEB_ASM_PREFIX]disp_al_lownibble_hex ; display former high-nibble 348 00000150 D2C0 <1> rol al,cl 349 00000152 9D <1> popf 350 00000153 59 <1> pop cx 351 <1> ; and fall trough for low-nibble 352 <1> %[_DEB_ASM_PREFIX]disp_al_lownibble_hex: 353 00000154 9C <1> pushf 354 00000155 50 <1> push ax ; save ax for call return 355 00000156 240F <1> and al, 00001111b ; high nibble must be zero 356 00000158 0430 <1> add al, '0' ; if number is 0-9, now it's the correct character 357 0000015A 3C39 <1> cmp al, '9' 358 0000015C 7602 <1> jna .decimalnum ; if we get decimal number with this, ok --> 359 0000015E 0407 <1> add al, 7 ; otherwise, add 7 and we are inside our alphabet 360 <1> .decimalnum: 361 00000160 E89FFF <1> call %[_DEB_ASM_PREFIX]disp_al 362 00000163 58 <1> pop ax 363 00000164 9D <1> popf 364 00000165 C3 <1> retn 365 <1> 366 <1> 367 <1> %[_DEB_ASM_PREFIX]disp_msg: 368 00000166 9C <1> pushf 369 00000167 56 <1> push si 370 00000168 50 <1> push ax 371 00000169 89D6 <1> mov si, dx 372 0000016B FC <1> cld 373 <1> .loop: 374 0000016C AC <1> lodsb 375 0000016D 08C0 <1> or al, al 376 0000016F 7405 <1> jz .return 377 00000171 E88EFF <1> call %[_DEB_ASM_PREFIX]disp_al 378 00000174 EBF6 <1> jmp short .loop 379 <1> 380 <1> .return: 381 00000176 58 <1> pop ax 382 00000177 5E <1> pop si 383 00000178 9D <1> popf 384 00000179 C3 <1> retn 385 <1> 386 <1> 387 <1> ; Display character with Int10 388 <1> ; 389 <1> ; INP: al = character 390 <1> ; OUT: - 391 <1> ; CHG: ax, bx 392 <1> ; STT: - 393 <1> %[_DEB_ASM_PREFIX]init0int10tty: 394 <1> %if _DEBUG_TO_SERIAL 395 0000017A 36F606[7D00]40 <1> testopt [ss:options], enable_serial 395 ****************** <1> expansion: adr = '[ss:options]' 395 ****************** <1> expansion: len = 12 395 ****************** <1> expansion: tf = '[' 395 ****************** <1> expansion: tb = ']' 395 ****************** <1> expansion: adr = 'ss:options' 395 ****************** <1> expansion: adr = ss:options 396 00000180 740C <1> jz @F 397 00000182 1E <1> push ds 398 00000183 06 <1> push es 399 00000184 16 <1> push ss 400 00000185 1F <1> pop ds 401 00000186 16 <1> push ss 402 00000187 07 <1> pop es 403 00000188 E8127B <1> call serial_send_char 404 0000018B 07 <1> pop es 405 0000018C 1F <1> pop ds 406 0000018D C3 <1> retn 407 <1> 408 <1> @@: 408 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.0 408 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.1 408 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.2 408 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.3 408 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.4 408 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.5 408 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.6 408 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.7 408 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.0 408 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.1 408 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.2 408 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.3 408 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.4 408 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.5 408 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.6 408 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.7 408 ****************** <1> expansion: __@@_num = 8 409 <1> %endif 410 0000018E 50 <1> push ax 411 0000018F B40F <1> mov ah, 0Fh 412 00000191 CD10 <1> int 10h ; get video mode and active page 413 00000193 58 <1> pop ax 414 00000194 B40E <1> mov ah, 0Eh 415 00000196 B307 <1> mov bl, 07h 416 00000198 55 <1> push bp 417 00000199 CD10 <1> int 10h ; write character 418 0000019B 5D <1> pop bp 419 0000019C C3 <1> retn 420 <1> 421 <1> ; Display message with Int10 422 <1> ; 423 <1> ; INP: cs:si-> ASCIZ message 424 <1> ; OUT: - 425 <1> ; CHG: ax, si, bx 426 <1> ; STT: UP 427 <1> %[_DEB_ASM_PREFIX]init0display.display: 428 0000019D E8DAFF <1> call %[_DEB_ASM_PREFIX]init0int10tty 429 <1> %[_DEB_ASM_PREFIX]init0display: 430 000001A0 FC <1> cld 431 000001A1 2EAC <1> cs lodsb ; get character 432 000001A3 84C0 <1> test al, al ; zero ? 433 000001A5 75F6 <1> jnz .display ; no, display and get next character --> 434 <1> %[_DEB_ASM_PREFIX]init0flush.retn: 435 000001A7 C3 <1> retn 436 <1> 437 <1> 438 <1> %[_DEB_ASM_PREFIX]d4getc: 439 000001A8 9C <1> pushf 440 <1> %if _DEBUG_TO_SERIAL 441 000001A9 1E <1> push ds 442 000001AA 06 <1> push es 443 000001AB 16 <1> push ss 444 000001AC 1F <1> pop ds 445 000001AD 16 <1> push ss 446 000001AE 07 <1> pop es 447 000001AF E8F575 <1> call getc.rawnext 448 000001B2 07 <1> pop es 449 000001B3 1F <1> pop ds 450 <1> %else 451 <1> xor ax, ax 452 <1> int 16h 453 <1> %endif 454 000001B4 9D <1> popf 455 000001B5 C3 <1> retn 456 <1> 457 <1> %[_DEB_ASM_PREFIX]d4pauseforkey: 458 000001B6 50 <1> push ax 459 000001B7 E8EEFF <1> call %[_DEB_ASM_PREFIX]d4getc 460 000001BA E8E1FE <1> d4 call %[_DEB_ASM_PREFIX]d4message 461 000001BD 64347061757365666F- <1> d4 asciz "d4pauseforkey received ax=" 461 000001C6 726B65792072656365- <1> 461 000001CF 697665642061783D00 <1> 462 000001D8 E865FF <1> d4 call %[_DEB_ASM_PREFIX]disp_ax_hex 463 000001DB E8C0FE <1> d4 call %[_DEB_ASM_PREFIX]d4message 464 000001DE 0D0A00 <1> d4 asciz 13,10 465 000001E1 58 <1> pop ax 466 000001E2 C3 <1> retn 467 <1> 468 <1> 469 <1> %ifidni _DEB_ASM_PREFIX, init_ 470 <1> resetdef DEBUG_TO_SERIAL 471 <1> %endif 1186 %endif 1187 1188 usesection lDEBUG_DATA_ENTRY 1188 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 1189 ; INP: word [cs:ip] = near address to jump to in other segment 1190 entry_to_code_seg: 1191 00004A8F 50 push ax ; word space for ?jumpaddress_ip, is ax 1192 00004A90 2EA1[2A02] mov ax, word [cs:code_seg] 1193 %if _PM 1194 jmp entry_to_code_common 1195 1196 entry_to_code_sel: 1197 push ax 1198 mov ax, word [cs:code_sel] 1199 %endif 1200 1201 entry_to_code_common: 1202 lframe 0 1202 ****************** expansion: bits = 16 1202 ****************** expansion: base_size = 2 1202 ****************** expansion: near_offset = 2 1202 ****************** expansion: far_offset = 4 1202 ****************** expansion: int_offset = 6 1202 ****************** expansion: inner = 0 1202 ****************** expansion: nested = 0 1202 ****************** expansion: autoret = 1202 ****************** expansion: parofs = 0 1202 ****************** expansion: pars_size = 0 1202 ****************** expansion: pars_return_size = 0 1202 ****************** expansion: parlist = 1202 ****************** expansion: labellist = empty,empty,empty 1202 ****************** expansion: ofs = 0 1202 ****************** expansion: enter = 0 1202 ****************** expansion: req = 0 1202 ****************** expansion: usereq = 0 1202 ****************** expansion: emit = 1 1202 ****************** expansion: restore_frame_ofs = 0 1202 ****************** expansion: pars_inner_size = 0 1203 lpar word, jumpaddress_cs_and_orig_ip 1203 ****************** expansion: varsize = 2 1203 ****************** expansion: newlabel = jumpaddress_cs_and_orig_ip 1203 ****************** expansion: labellist = jumpaddress_cs_and_orig_ip,undefined,,empty,empty,empty 1203 ****************** expansion: pars_size = 2 1203 ****************** expansion: parlist = 2,jumpaddress_cs_and_orig_ip 1203 ****************** expansion: req = 1 1204 lpar word, jumpaddress_ip 1204 ****************** expansion: varsize = 2 1204 ****************** expansion: newlabel = jumpaddress_ip 1204 ****************** expansion: labellist = jumpaddress_ip,undefined,,jumpaddress_cs_and_orig_ip,undefined,,empty,empty,empty 1204 ****************** expansion: pars_size = 4 1204 ****************** expansion: parlist = 2,jumpaddress_cs_and_orig_ip,2,jumpaddress_ip 1204 ****************** expansion: req = 1 1205 00004A94 5589E5 lenter 1205 ****************** expansion: wasearly = 0 1205 ****************** expansion: early = 0 1205 ****************** expansion: lsizevariables = 0 1205 ****************** expansion: req = 1 1205 ****************** expansion: enter_emitted = 0 1205 ****************** expansion: enter = 1 1205 ****************** expansion: 186 = 0 1205 ****************** expansion: newlabel = frame_bp 1205 ****************** expansion: labellist = frame_bp,undefined,,jumpaddress_ip,undefined,,jumpaddress_cs_and_orig_ip,undefined,,empty,empty,empty 1205 ****************** expansion: ?frame_bp = 0 1205 ****************** expansion: lsizeparameters = 4 1205 ****************** expansion: pars_size = 2 1205 ****************** expansion: ?jumpaddress_cs_and_orig_ip = 4 1205 ****************** expansion: pars_size = 0 1205 ****************** expansion: ?jumpaddress_ip = 2 1206 1207 00004A97 56 push si 1208 00004A98 9C pushf 1209 00004A99 FC cld 1210 1211 00004A9A 874604 xchg word [bp + ?jumpaddress_cs_and_orig_ip], ax ; fill function segment 1212 00004A9D 89C6 mov si, ax 1213 00004A9F 2EAD cs lodsw 1214 %if _DEBUG 1215 00004AA1 3CCC cmp al, 0CCh ; debugger breakpoint ? 1216 00004AA3 750C jne @F ; no --> 1217 00004AA5 CC int3 ; break to make it remove the breakpoint 1218 00004AA6 4E dec si 1219 00004AA7 4E dec si 1220 00004AA8 2EAD cs lodsw ; reload the word 1221 00004AAA 3CCC cmp al, 0CCh 1222 00004AAC 7503 jne @F 1223 1224 .l: 1225 00004AAE CC int3 1226 00004AAF EBFD jmp .l 1227 1228 @@: 1228 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.1 1228 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.2 1228 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.3 1228 ****************** expansion: @B (case-insensitive) = ..@.@@.1.4 1228 ****************** expansion: @F (case-insensitive) = ..@.@@.1.5 1228 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.6 1228 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.7 1228 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.8 1228 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.1 1228 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.2 1228 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.3 1228 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.4 1228 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.5 1228 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.6 1228 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.7 1228 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.8 1228 ****************** expansion: __@@_num = 9 1229 %endif 1230 00004AB1 874602 xchg word [bp + ?jumpaddress_ip], ax ; fill function offset 1231 ; (and restore ax) 1232 1233 00004AB4 9D popf 1234 00004AB5 5E pop si 1235 1236 00004AB6 5D lleave 1236 ****************** expansion: 186 = 0 1236 ****************** expansion: 186 = 0 1236 ****************** expansion: lsizeparameters = 4 1236 ****************** expansion: __lframe__autoret = 1237 00004AB7 CB retf ; jump to dword [bp + ?jumpaddress] 1238 1239 1240 1241 ; debug22 - Interrupt 22h handler 1242 ; 1243 ; This is for DEBUG itself: it's a catch-all for the various Int23 1244 ; and Int24 calls that may occur unpredictably at any time. What we 1245 ; do is pretend to be a command interpreter (which we are, in a sense, 1246 ; just with different sort of commands) by setting our parent PSP 1247 ; value equal to our own PSP so that DOS does not free our memory when 1248 ; we quit. Therefore control ends up here when DOS detects Control-C 1249 ; or an Abort in the critical error prompt is selected. 1250 debug22: 1251 00004AB8 FA cli 1252 .cleartraceflag: 1253 00004AB9 FC cld ; reestablish things 1254 00004ABA 8CC8 mov ax, cs 1255 00004ABC 8ED8 mov ds, ax 1256 00004ABE 8ED0 mov ss, ax 1257 00004AC0 8B26[5802] mov sp, word [ savesp ] ; restore stack 1258 00004AC4 E8C8FF[E301] call entry_to_code_seg, cmd3 1259 1260 1261 usesection lDEBUG_CODE 1261 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 1262 1263 code_insure_low_byte_not_0CCh 1264 ; Begin main command loop. 1265 cmd3: 1266 000001E3 8B26[5802] mov sp, word [ savesp ] ; restore stack (this must be first) 1267 000001E7 FB sti 1268 000001E8 C706[5A02][E301] mov word [ errret ], cmd3 1269 000001EE C706[5C02][1567] mov word [ throwret ], errhandler 1270 000001F4 1E push ds 1271 000001F5 07 pop es 1272 1273 %if _PM 1274 call getsegmented_resetmode 1275 %endif 1276 000001F6 E8E574 call silence_dump 1277 1278 cmd3_serial_init: 1279 000001F9 F606[7D00]40 testopt [options], enable_serial 1279 ****************** expansion: adr = '[options]' 1279 ****************** expansion: len = 9 1279 ****************** expansion: tf = '[' 1279 ****************** expansion: tb = ']' 1279 ****************** expansion: adr = 'options' 1279 ****************** expansion: adr = options 1280 000001FE 7503E99900 jz .check_disable_serial 1281 .check_enable_serial: 1282 00000203 F606[ED02]01 testopt [serial_flags], sf_init_done 1282 ****************** expansion: adr = '[serial_flags]' 1282 ****************** expansion: len = 14 1282 ****************** expansion: tf = '[' 1282 ****************** expansion: tb = ']' 1282 ****************** expansion: adr = 'serial_flags' 1282 ****************** expansion: adr = serial_flags 1283 00000208 7403E99E00 jnz .done_serial 1284 .enable_serial: 1285 1286 0000020D E8E479 call serial_clear_fifos 1287 00000210 C706[BA02]F802 mov word [baseport], _UART_BASE 1288 00000216 E89D79 call serial_install_interrupt_handler 1289 00000219 E8EB79 call serial_init_UART 1290 1291 0000021C 800E[ED02]01 setopt [serial_flags], sf_init_done 1291 ****************** expansion: adr = '[serial_flags]' 1291 ****************** expansion: len = 14 1291 ****************** expansion: tf = '[' 1291 ****************** expansion: tb = ']' 1291 ****************** expansion: adr = 'serial_flags' 1291 ****************** expansion: adr = serial_flags 1292 1293 00000221 BA[383B] mov dx, msg.serial_request_keep 1294 00000224 E84875 call putsz 1295 1296 00000227 BF[A901] mov di, line_out 1297 %if _DEBUG 1298 0000022A B07E mov al, '~' ; indicate instance is to be debugged 1299 0000022C AA stosb 1300 %endif 1301 0000022D B03D mov al, '=' 1302 0000022F AA stosb 1303 00000230 B020 mov al, 32 1304 00000232 AA stosb 1305 1306 00000233 31C0 xor ax, ax 1307 00000235 A3[EE02] mov word [getline_timer_count], ax 1308 00000238 A3[F002] mov word [getline_timer_last], ax 1309 0000023B C706[F202][5D02] mov word [getline_timer_func], .timer 1310 1311 00000241 E86F76 call getline00 1312 1313 00000244 E83872 call skipcomm0 1314 00000247 4E dec si 1315 00000248 BA[FD3B] mov dx, msg.keep 1316 0000024B E8E471 call isstring? 1317 0000024E 745B je .done_serial 1318 1319 00000250 BA[CA3B] mov dx, msg.serial_no_keep_enter 1320 .no_keep: 1321 00000253 8026[7D00]BF clropt [options], enable_serial 1321 ****************** expansion: adr = '[options]' 1321 ****************** expansion: len = 9 1321 ****************** expansion: tf = '[' 1321 ****************** expansion: tb = ']' 1321 ****************** expansion: adr = 'options' 1321 ****************** expansion: adr = options 1322 00000258 E81475 call putsz 1323 0000025B EB86 jmp cmd3 1324 1325 1326 .timer: 1327 0000025D 50 push ax 1328 0000025E 52 push dx 1329 0000025F 51 push cx 1330 00000260 06 push es 1331 1332 00000261 BA4000 mov dx, 40h 1333 00000264 8EC2 mov es, dx 1334 1335 00000266 8B0E[EE02] mov cx, word [getline_timer_count] 1336 0000026A 8B16[F002] mov dx, word [getline_timer_last] 1337 1338 0000026E 263B166C00 cmp dx, word [es:6Ch] 1339 00000273 741A je .timer_next 1340 00000275 268B166C00 mov dx, word [es:6Ch] 1341 0000027A 41 inc cx 1342 0000027B B012 mov al, 18 1343 0000027D F626[EB02] mul byte [serial_keep_timeout] 1344 00000281 85C0 test ax, ax 1345 00000283 740A jz .timer_next 1346 00000285 39C1 cmp cx, ax 1347 00000287 7206 jb .timer_next 1348 1349 00000289 07 pop es 1350 0000028A BA[7D3B] mov dx, msg.serial_no_keep_timer 1351 0000028D EBC4 jmp .no_keep 1352 1353 .timer_next: 1354 0000028F 890E[EE02] mov word [getline_timer_count], cx 1355 00000293 8916[F002] mov word [getline_timer_last], dx 1356 00000297 07 pop es 1357 00000298 59 pop cx 1358 00000299 5A pop dx 1359 0000029A 58 pop ax 1360 0000029B C3 retn 1361 1362 1363 .check_disable_serial: 1364 0000029C F606[ED02]01 testopt [serial_flags], sf_init_done 1364 ****************** expansion: adr = '[serial_flags]' 1364 ****************** expansion: len = 14 1364 ****************** expansion: tf = '[' 1364 ****************** expansion: tb = ']' 1364 ****************** expansion: adr = 'serial_flags' 1364 ****************** expansion: adr = serial_flags 1365 000002A1 7408 jz .done_serial 1366 .disable_serial: 1367 1368 000002A3 E8A979 call serial_clean_up 1369 1370 000002A6 8026[ED02]FE clropt [serial_flags], sf_init_done 1370 ****************** expansion: adr = '[serial_flags]' 1370 ****************** expansion: len = 14 1370 ****************** expansion: tf = '[' 1370 ****************** expansion: tb = ']' 1370 ****************** expansion: adr = 'serial_flags' 1370 ****************** expansion: adr = serial_flags 1371 .done_serial: 1372 1373 000002AB E8987A call ensuredebuggeeloaded ; if no task is active, create a dummy one 1374 000002AE BF[A901] mov di, line_out ; build prompt 1375 %if _DEBUG 1376 000002B1 B07E mov al, '~' ; indicate instance is to be debugged 1377 000002B3 AA stosb 1378 %endif 1379 000002B4 B02D mov al, '-' ; main prompt 1380 %if _PM 1381 call ispm 1382 jnz .realmode 1383 mov al, '#' ; PM main prompt 1384 .realmode: 1385 %endif 1386 000002B6 AA stosb 1387 1388 000002B7 C606[5752]00 mov byte [hhflag], 0 1389 000002BC C706[F202][1B03] mov word [getline_timer_func], dmycmd 1390 000002C2 800E[8400]08 setopt [internalflags], pagedcommand ; 2009-02-21: default to page all commands 1390 ****************** expansion: adr = '[internalflags]' 1390 ****************** expansion: len = 15 1390 ****************** expansion: tf = '[' 1390 ****************** expansion: tb = ']' 1390 ****************** expansion: adr = 'internalflags' 1390 ****************** expansion: adr = internalflags 1391 000002C7 8026[8600]FE clropt [internalflags], usecharcounter ; reset this automatically 1391 ****************** expansion: adr = '[internalflags]' 1391 ****************** expansion: len = 15 1391 ****************** expansion: tf = '[' 1391 ****************** expansion: tb = ']' 1391 ****************** expansion: adr = 'internalflags' 1391 ****************** expansion: adr = internalflags 1392 000002CC 8026[8700]CF clropt [internalflags], tt_silence | tt_silent_mode 1392 ****************** expansion: adr = '[internalflags]' 1392 ****************** expansion: len = 15 1392 ****************** expansion: tf = '[' 1392 ****************** expansion: tb = ']' 1392 ****************** expansion: adr = 'internalflags' 1392 ****************** expansion: adr = internalflags 1393 ; reset, in case it's still set 1395 000002D1 8126[8800]3FF7 clropt [internalflags2], dif2_tpg_proceed_bp_set | dif2_bp_failure | dif2_tpg_keep_proceed_bp, 1 1395 ****************** expansion: adr = '[internalflags2]' 1395 ****************** expansion: len = 16 1395 ****************** expansion: tf = '[' 1395 ****************** expansion: tb = ']' 1395 ****************** expansion: adr = 'internalflags2' 1395 ****************** expansion: adr = internalflags2 1396 000002D7 8026[8A00]DF clropt [internalflags2], dif2_closed_input_file 1396 ****************** expansion: adr = '[internalflags2]' 1396 ****************** expansion: len = 16 1396 ****************** expansion: tf = '[' 1396 ****************** expansion: tb = ']' 1396 ****************** expansion: adr = 'internalflags2' 1396 ****************** expansion: adr = internalflags2 1397 1398 000002DC E8D475 call getline00 ; prompted input, also resets linecounter 1399 1400 000002DF 3C0D cmp al, 13 1401 000002E1 7508 jne .notblank 1402 000002E3 8B16[E002] mov dx, word [lastcmd] 1403 000002E7 8804 mov byte [si], al 1404 000002E9 EB28 jmp short cmd4 1405 .notblank: 1406 000002EB C706[E002][1B03] mov word [lastcmd], dmycmd 1407 000002F1 3C3B cmp al, ';' 1408 000002F3 7503E9EBFE je cmd3 ; if comment --> 1409 000002F8 3C3F cmp al, '?' 1410 000002FA 7420 je help ; if request for help --> 1411 000002FC E8B155 call uppercase 1412 000002FF 2C41 sub al, 'A' 1413 00000301 3C18 cmp al, 'Y'-'A' 1414 00000303 7603E9F363 ja error ; if not recognized 1415 00000308 98 cbw 1416 00000309 93 xchg bx, ax 1417 0000030A E87171 call skipcomma 1418 0000030D D1E3 shl bx, 1 1419 0000030F 8B97[4A00] mov dx, word [ cmdlist+bx ] 1420 cmd4: 1421 00000313 BF[A901] mov di, line_out 1422 00000316 FFD2 call dx 1423 cmd3_j1: 1424 00000318 E9C8FE jmp cmd3 ; back to the top 1425 1426 1427 dmycmd: 1428 0000031B C3 retn 1429 1430 help: 1431 0000031C E85F71 call skipcomma 1432 0000031F E88E55 call uppercase 1433 %if _EXTHELP 1434 %if _COND 1435 00000322 BA[1A17] mov dx, msg.condhelp 1436 00000325 3C43 cmp al, 'C' 1437 00000327 7462 je .spec 1438 %endif 1439 %if _OPTIONS 1440 00000329 BA[4024] mov dx, msg.ophelp 1441 0000032C 3C4F cmp al, 'O' 1442 0000032E 745B je .spec ; option help --> 1443 %endif 1444 %if _EXPRESSIONS 1445 00000330 BA[EA19] mov dx, msg.expressionhelp 1446 00000333 3C45 cmp al, 'E' 1447 00000335 7454 je .spec 1448 %endif 1449 %endif 1450 %if _EMS 1451 00000337 BA[A234] mov dx, msg.xhelp 1452 0000033A 3C58 cmp al, 'X' 1453 0000033C 744D je .spec 1454 %endif 1455 %if _BOOTLDR || 1 1456 0000033E 4E dec si 1457 %if _BOOTLDR 1458 0000033F BA[7839] mov dx, msg.boot 1459 00000342 E8ED70 call isstring? 1460 00000345 BA[082E] mov dx, msg.boothelp 1461 00000348 7441 je .spec 1462 %endif 1463 0000034A BA[510D] mov dx, msg.string_build 1464 0000034D E8E270 call isstring? 1465 00000350 BA[570D] mov dx, msg.build_short 1466 00000353 7436 je .spec 1467 00000355 BA[8B09] mov dx, msg.run 1468 00000358 E8D770 call isstring? 1469 0000035B BA[8F09] mov dx, msg.help_run 1470 0000035E 742B je .spec 1471 00000360 AC lodsb 1472 00000361 E84C55 call uppercase 1473 %endif 1474 00000364 BA[A30D] mov dx, msg.build 1475 00000367 3C42 cmp al, 'B' 1476 00000369 7420 je .spec ; build info --> 1477 %if _EXTHELP 1478 0000036B BA[3010] mov dx, msg.license 1479 0000036E 3C4C cmp al, 'L' 1480 00000370 7419 je .spec ; licence --> 1481 00000372 BA[7B14] mov dx, msg.flaghelp 1482 00000375 3C46 cmp al, 'F' 1483 00000377 7412 je .spec ; flag help --> 1484 00000379 BA[3112] mov dx, msg.reghelp 1485 0000037C 3C52 cmp al, 'R' 1486 0000037E 740B je .spec ; register help --> 1487 %if _VARIABLES || _OPTIONS || _PSPVARIABLES 1488 00000380 BA[BE2B] mov dx, msg.varhelp 1489 00000383 3C56 cmp al, 'V' 1490 00000385 7404 je .spec ; variable help --> 1491 %endif 1492 %endif 1493 00000387 BA[0E04] mov dx, msg.help ; default help 1494 0000038A A8 db __TEST_IMM8 ; (skip lodsb) 1495 .spec: 1496 0000038B AC lodsb 1497 0000038C E8E470 call chkeol 1498 prnquit: 1499 0000038F E8DD73 call putsz ; print string 1500 00000392 EB84 jmp short cmd3_j1 ; done 1501 1502 00000394 E96463 errorj1:jmp error 1503 1504 1505 %include "aa.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug A command - Assembler 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_DATA_ENTRY 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 19 <1> 20 00004AC9 0000 <1> aa13a_mnemposition: dw 0 ; -> mnemonic, to display error 21 00004ACB 00 <1> aa_mnemsuffix: db 0 ; 0 = normal, 1 = 'W' suffix, 2 = 'D' suffix 22 <1> 23 00004ACC 00 <1> asm_mn_flags: db 0 ; flags for the mnemonic 24 <1> AMF_D32 equ 1 ; 32-bit opcode/data operand 25 <1> AMF_WAIT equ 2 26 <1> AMF_A32 equ 4 ; address operand is 32-bit 27 <1> AMF_SIB equ 8 ; there's a SIB in the arguments 28 <1> AMF_MSEG equ 10h ; if a seg prefix was given before mnemonic 29 <1> AMF_FSGS equ 20h ; if FS or GS was encountered 30 <1> AMF_D16 equ 40h ; 16-bit opcode/data operand 31 <1> AMF_ADDR equ 80h ; address operand is given (write address size prefix) 32 <1> 33 00004ACD 00 <1> aa_saved_prefix:db 0 ; WAIT or REP... prefix 34 <1> ; aa_saved_prefix and aa_seg_pre must be consecutive. 35 00004ACE 00 <1> aa_seg_pre: db 0 ; segment prefix 36 <1> 37 00004ACF 0000 <1> mneminfo: dw 0 ; address associated with the mnemonic 38 <1> 39 <1> ; The following 7 words (through a_opcode) must all be consecutive. 40 00004AD1 0000 <1> rmaddr: dw 0 ; address of operand giving the R/M byte 41 <1> ; regmem and sibbyte must be consecutive 42 00004AD3 00 <1> regmem: db 0 ; mod reg r/m part of instruction 43 00004AD4 00 <1> sibbyte: db 0 ; SIB byte 44 00004AD5 0000 <1> immaddr: dw 0 ; address of operand giving the immed stf 45 00004AD7 0000 <1> xxaddr: dw 0 ; address of additional stuff 46 <1> ; dismach and dmflags must be consecutive 47 00004AD9 00 <1> dismach: db 0 ; type of processor needed 48 00004ADA 00 <1> dmflags: db 0 ; flags for extra processor features 49 <1> 50 <1> DM_COPR equ 1 ; math coprocessor 51 <1> DM_MMX equ 2 ; MMX extensions 52 <1> 53 00004ADB 00 <1> opcode_or: db 0 ; extra bits in the op code 54 00004ADC 00 <1> opsize: db 0 ; size of this operation (2 or 4) 55 00004ADD 00 <1> varflags: db 0 ; flags for this variant 56 <1> 57 <1> VAR_LOCKABLE equ 1 ; variant is lockable 58 <1> VAR_MODRM equ 2 ; if there's a MOD R/M here 59 <1> VAR_SIZ_GIVN equ 4 ; if a size was given 60 <1> VAR_SIZ_FORCD equ 8 ; if only one size is permitted 61 <1> VAR_SIZ_NEED equ 10h ; if we need the size 62 <1> VAR_D16 equ 20h ; if operand size is WORD 63 <1> VAR_D32 equ 40h ; if operand size is DWORD 64 <1> 65 00004ADE 0000 <1> a_opcode: dw 0 ; op code info for this variant 66 00004AE0 00 <1> a_reqsize: db 0 ; size that this arg should be 67 <1> 68 00004AE1 0000 <1> a_opcode2: dw 0 ; copy of a_opcode for obs-instruction 69 00004AE3 E0DBE1DBE4DB240126- <1> dw 0DBE0h,0DBE1h,0DBE4h,124h,126h ; obs. instruction codes 69 00004AEC 01 <1> 70 <1> ; (the above must follow a_opcode2) 71 <1> 72 00004AED 0101020404 <1> obsmach: db 1,1,2,4,4 ; max permissible machine for the above 73 <1> 74 00004AF2 00040201 <1> aadbsiz: db 0,4,2,1 ; table for max size of db operand 75 00004AF6 0000[3106][3306]- <1> aadbsto: dw 0,aa28,aa29,aa30 ; table for routine to store a number 75 00004AFC [3506] <1> 76 <1> 77 00004AFE 0B000D000F000E00 <1> modrmtab: db 11,0,13,0,15,0,14,0 ; [bx], [bp], [di], [si] 78 00004B06 0F0D0E0D0F0B0E0B <1> db 15,13,14,13,15,11,14,11 ; [bp+di],[bp+si],[bx+di],[bx+si] 79 <1> 80 00004B0E 610D <1> aam_args: db 'a',13 81 <1> 82 <1> ; Equates for parsed arguments. 83 <1> ARG_DEREF equ 1 ; non-immediate memory reference 84 <1> ARG_MODRM equ 2 ; if we've computed the MOD R/M byte 85 <1> ARG_JUSTREG equ 4 ; a solo register 86 <1> ARG_WEIRDREG equ 8 ; if it's a segment register or CR, etc. 87 <1> ARG_IMMED equ 10h ; if it's just a number 88 <1> ARG_FARADDR equ 20h ; if it's of the form xxxx:yyyyyyyy 89 <1> 90 <1> ; For each operand type in the following table, the first byte is 91 <1> ; the bits, at least one of which must be present; the second is the 92 <1> ; bits all of which must be absent. 93 <1> ; For each entry in bittab, there's an entry in asm_jmp1. 94 00004B10 10 <1> bittab: db ARG_IMMED ; OP_IMM 95 00004B11 05 <1> db ARG_DEREF+ARG_JUSTREG ; OP_RM 96 00004B12 01 <1> db ARG_DEREF ; OP_M 97 00004B13 04 <1> db ARG_JUSTREG ; OP_R_MOD 98 00004B14 01 <1> db ARG_DEREF ; OP_MOFFS 99 00004B15 04 <1> db ARG_JUSTREG ; OP_R 100 00004B16 04 <1> db ARG_JUSTREG ; OP_R_ADD 101 00004B17 04 <1> db ARG_JUSTREG ; OP_AX 102 <1> 103 00004B18 01 <1> db ARG_DEREF ; 0 OP_M64 104 00004B19 01 <1> db ARG_DEREF ; 1 OP_MFLOAT 105 00004B1A 01 <1> db ARG_DEREF ; 2 OP_MDOUBLE 106 00004B1B 01 <1> db ARG_DEREF ; 3 OP_M80 107 00004B1C 01 <1> db ARG_DEREF ; 4 OP_MXX 108 00004B1D 01 <1> db ARG_DEREF ; 5 OP_FARMEM 109 00004B1E 20 <1> db ARG_FARADDR ; 6 OP_FARIMM 110 00004B1F 10 <1> db ARG_IMMED ; 7 OP_REL8 111 00004B20 10 <1> db ARG_IMMED ; 8 OP_REL1632 112 00004B21 08 <1> db ARG_WEIRDREG ; 9 OP_1CHK 113 00004B22 08 <1> db ARG_WEIRDREG ; 10 OP_STI 114 00004B23 08 <1> db ARG_WEIRDREG ; 11 OP_CR 115 00004B24 08 <1> db ARG_WEIRDREG ; 12 OP_DR 116 00004B25 08 <1> db ARG_WEIRDREG ; 13 OP_TR 117 00004B26 08 <1> db ARG_WEIRDREG ; 14 OP_SEGREG 118 00004B27 10 <1> db ARG_IMMED ; 15 OP_IMMS8 119 00004B28 10 <1> db ARG_IMMED ; 16 OP_IMM8 120 00004B29 08 <1> db ARG_WEIRDREG ; 17 OP_MMX 121 00004B2A 08 <1> db ARG_WEIRDREG ; 18 OP_MMX_MOD 122 00004B2B FF <1> db 0FFh ; 19 OP_SHOSIZ 123 <1> 124 00004B2C 10 <1> db ARG_IMMED ; OP_1 125 00004B2D 10 <1> db ARG_IMMED ; OP_3 126 00004B2E 04 <1> db ARG_JUSTREG ; OP_DX 127 00004B2F 04 <1> db ARG_JUSTREG ; OP_CL 128 00004B30 08 <1> db ARG_WEIRDREG ; OP_ST 129 00004B31 08 <1> db ARG_WEIRDREG ; OP_CS 130 00004B32 08 <1> db ARG_WEIRDREG ; OP_DS 131 00004B33 08 <1> db ARG_WEIRDREG ; OP_ES 132 00004B34 08 <1> db ARG_WEIRDREG ; OP_FS 133 00004B35 08 <1> db ARG_WEIRDREG ; OP_GS 134 00004B36 08 <1> db ARG_WEIRDREG ; OP_SS 135 <1> 136 <1> 137 <1> ; Jump table for operand types. 138 00004B37 [B20B][940B][940B]- <1> asm_jmp1: dw aop_imm,aop_rm,aop_m,aop_r_mod ; OP_IMM, OP_RM, OP_M, OP_R_MOD 138 00004B3D [940B] <1> 139 00004B3F [B80B][990B][A80B]- <1> dw aop_moffs,aop_r,aop_r_add,aop_ax ; OP_MOFFS, OP_R, OP_R_ADD, OP_AX 139 00004B45 [C30B] <1> 140 00004B47 [3B0C][3B0C][3B0C] <1> dw ao17,ao17,ao17 ; OP_M64, OP_MFLOAT, OP_MDOUBLE 141 00004B4D [3B0C][3B0C][3B0C] <1> dw ao17,ao17,ao17 ; OP_M80, OP_MXX, OP_FARMEM 142 00004B53 [440C][630C][B60C] <1> dw ao21,ao23,ao25 ; OP_FARIMM, OP_REL8, OP_REL1632 143 00004B59 [140D][180D][2D0D] <1> dw ao29,aop_sti,aop_cr ; OP_1CHK, OP_STI, OP_CR 144 00004B5F [490D][4D0D][760D] <1> dw ao34,ao35,ao39 ; OP_DR, OP_TR, OP_SEGREG 145 00004B65 [880D][960D][1F0D] <1> dw ao41,ao42,aop_mmx ; OP_IMMS8, OP_IMM8, OP_MMX 146 00004B6B [230D] <1> dw aop_mmx_mod 147 00004B6D [B40D][DA0D][E10D] <1> dw ao44,ao46,ao47 ; OP_SHOSIZ, OP_1, OP_3 148 00004B73 [E80D][E80D][E80D] <1> dw ao48,ao48,ao48 ; OP_DX, OP_CL, OP_ST 149 00004B79 [E80D][E80D][E80D] <1> dw ao48,ao48,ao48 ; OP_CS, OP_DS, OP_ES 150 00004B7F [E80D][E80D][E80D] <1> dw ao48,ao48,ao48 ; OP_FS, OP_GS, OP_SS 151 <1> 152 <1> ; special ops DX, CL, ST, CS, DS, ES, FS, GS, SS 153 <1> ; entry required if ao48 is set above 154 00004B85 0A011E <1> asm_regnum: db 10,1,30 ; DX, CL, ST 155 00004B88 191B181C1D1A <1> db 25,27,24,28,29,26 ; CS, DS, ES, FS, GS, SS 156 <1> 157 <1> ; sizes for OP_M64, OP_MFLOAT, OP_MDOUBLE, OP_M80, OP_MXX, OP_FARMEM 158 00004B8E 05060708 <1> asm_siznum: db 5, 6, 7, 8 ; qword, float, double, tbyte 159 00004B92 FF0C <1> db -1, 12 ; none, far 160 <1> 161 <1> ; size qualifier 162 <1> ; 1 BY = BYTE 163 <1> ; 2 WO = WORD 164 <1> ; 3 unused 165 <1> ; 4 DW = DWORD 166 <1> ; 5 QW = QWORD 167 <1> ; 6 FL = FLOAT (REAL4) 168 <1> ; 7 DO = DOUBLE (REAL8) 169 <1> ; 8 TB = TBYTE (REAL10) 170 <1> ; 9 SH = SHORT 171 <1> ; 10 LO = LONG 172 <1> ; 11 NE = NEAR 173 <1> ; 12 FA = FAR 174 <1> 175 <1> SIZ_BYTE equ 1 176 <1> SIZ_WORD equ 2 177 <1> SIZ_DWORD equ 4 178 <1> SIZ_QWORD equ 5 179 <1> 180 00004B94 4259574F574F445751- <1> sizetcnam: db "BY","WO","WO","DW","QW","FL","DO","TB","SH","LO","NE","FA" 180 00004B9D 57464C444F54425348- <1> 180 00004BA6 4C4F4E454641 <1> 181 <1> endarea sizetcnam 182 <1> 183 <1> 184 <1> usesection lDEBUG_CODE 184 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 185 <1> 186 <1> %if 0 187 <1> ; write byte in al to bx:(e)dx, then increment (e)dx 188 <1> writeasm: 189 <1> call writemem 190 <1> _386_PM_o32 ; inc edx 191 <1> inc dx 192 <1> retn 193 <1> 194 <1> ; write cx bytes from ds:si to bx:(e)dx 195 <1> writeasmn: 196 <1> jcxz .nowrite 197 <1> .loop: 198 <1> lodsb 199 <1> call writeasm 200 <1> loop .loop 201 <1> .nowrite: 202 <1> retn 203 <1> %endif 204 <1> 205 <1> 206 <1> aa_cmd3_check: 207 00000397 AC <1> lodsb 208 00000398 E8D870 <1> call chkeol 209 <1> aa_cmd3: 210 0000039B E945FE <1> jmp cmd3 ; exit assembler mode --> 211 <1> 212 <1> 213 <1> aa: 214 0000039E 8B1E[6C03] <1> mov bx, word [ reg_cs ] ; default segment to use 215 <1> aa00a: 216 000003A2 E8C370 <1> call iseol? 217 000003A5 740E <1> je aa01 ; if end of line --> 218 000003A7 E88C65 <1> call getaddr ; get address into bx:(e)dx 219 000003AA E8C670 <1> call chkeol ; expect end of line here 220 <1> _386_PM_o32 ; mov dword [ a_addr ], edx 221 000003AD 8916[9E02] <1> mov word [ a_addr ], dx ; save the address 222 000003B1 891E[A202] <1> mov word [ a_addr+4 ], bx 223 <1> 224 <1> ; Begin loop over input lines. 225 <1> aa01: 226 000003B5 C706[5A02][B503] <1> mov word [ errret ], aa01 227 000003BB 8B26[5802] <1> mov sp, word [ savesp ] ; restore the stack (this implies no "retn") 228 000003BF BF[A901] <1> mov di, line_out 229 000003C2 A1[A202] <1> mov ax, word [ a_addr+4 ] 230 <1> %if _PM 231 <1> mov bx, ax 232 <1> %endif 233 000003C5 E83671 <1> call hexword 234 000003C8 B03A <1> mov al, ':' 235 000003CA AA <1> stosb 236 000003CB C606[CC4A]00 <1> mov byte [ asm_mn_flags ], 0 237 <1> %if _PM 238 <1> mov byte [ bCSAttr ], 0 239 <1> call testattrhigh 240 <1> jz .16 241 <1> mov byte [ bCSAttr ], 40h ; set 32-bit attrib for later checks here 242 <1> mov ax, word [ a_addr+2 ] 243 <1> call hexword 244 <1> .16: 245 <1> %endif 246 000003D0 A1[9E02] <1> mov ax, word [ a_addr+0 ] 247 000003D3 E82871 <1> call hexword 248 000003D6 B020 <1> mov al, 32 249 000003D8 AA <1> stosb 250 000003D9 E8D774 <1> call getline00 251 000003DC 3C2E <1> cmp al, '.' 252 000003DE 74B7 <1> je aa_cmd3_check 253 000003E0 3C0D <1> cmp al, 13 254 000003E2 74B7 <1> je aa_cmd3 ; if done, return to command line --> 255 000003E4 3C3B <1> cmp al, ';' 256 000003E6 74CD <1> je aa01 ; if comment 257 000003E8 C706[CD4A]0000 <1> mov word [ aa_saved_prefix ], 0 ; clear aa_saved_prefix and aa_seg_pre 258 <1> 259 <1> ; Get mnemonic and look it up. 260 <1> ; (At this point, it has been determined that it is not empty.) 261 <1> ; 262 <1> ; INP: al = first character 263 <1> ; si-> remaining string (al isn't EOL) 264 <1> aa02: 265 000003EE BF[A901] <1> mov di, line_out ; -> buffer 266 000003F1 31C9 <1> xor cx, cx ; = 0 267 000003F3 8936[C94A] <1> mov [ aa13a_mnemposition ], si 268 <1> 269 000003F7 A9 <1> db __TEST_IMM16 ; skip stosb,lodsb initially 270 <1> @@: 270 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.2 270 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.3 270 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.4 270 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.5 270 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.6 270 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.7 270 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.8 270 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.9 270 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.2 270 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.3 270 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.4 270 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.5 270 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.6 270 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.7 270 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.8 270 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.9 270 ****************** <1> expansion: __@@_num = 10 271 000003F8 AA <1> stosb 272 000003F9 AC <1> lodsb 273 000003FA 41 <1> inc cx ; count length 274 000003FB E8B254 <1> call uppercase 275 000003FE E86770 <1> call iseol? ; end of mnemonic ? 276 00000401 740C <1> je @F 277 00000403 3C3A <1> cmp al, ':' 278 00000405 7408 <1> je @F ; (for prefixes, else will be an error later) 279 00000407 3C20 <1> cmp al, 32 280 00000409 7404 <1> je @F 281 0000040B 3C09 <1> cmp al, 9 282 0000040D 75E9 <1> jne @B ; not yet --> 283 <1> @@: 283 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.3 283 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.4 283 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.5 283 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.6 283 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.7 283 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.8 283 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.9 283 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.10 283 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.3 283 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.4 283 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.5 283 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.6 283 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.7 283 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.8 283 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.9 283 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.10 283 ****************** <1> expansion: __@@_num = 11 284 <1> 285 0000040F 49 <1> dec cx ; = length of input 286 00000410 E89A70 <1> call skipwh0 ; skip to next field 287 00000413 4E <1> dec si 288 <1> 289 00000414 8A45FF <1> mov al, [di-1] ; get last stored character 290 00000417 3C57 <1> cmp al, 'W' ; possible suffix? 291 00000419 7406 <1> je @F 292 0000041B 3C44 <1> cmp al, 'D' 293 0000041D 7402 <1> je @F ; yes --> 294 0000041F 30C0 <1> xor al, al 295 <1> @@: 295 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.4 295 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.5 295 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.6 295 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.7 295 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.8 295 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.9 295 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.10 295 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.11 295 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.4 295 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.5 295 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.6 295 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.7 295 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.8 295 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.9 295 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.10 295 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.11 295 ****************** <1> expansion: __@@_num = 12 296 00000421 A2[CB4A] <1> mov [aa_mnemsuffix], al ; store 'D', 'W', or 0 297 <1> 298 00000424 56 <1> push si ; save position in input line 299 <1> 300 00000425 BE[FF00] <1> mov si, mnlist ; -> first area: no or optional suffix 301 00000428 BA[540B] <1> mov dx, mnlist_o_suffix_required; -> end of first area 302 <1> 303 <1> ; [line_out] = name to search 304 <1> ; cx = length of name to search 305 <1> ; si-> next mnlist entry 306 <1> ; dx-> behind last mnlist entry of this area 307 <1> ; w[ss:sp]-> next field in input line (operand or EOL) 308 <1> aa_mnemlistloop: 309 0000042B AD <1> lodsw ; load combined word, si-> name 310 0000042C 83E00F <1> and ax, 0Fh ; separate mnemonic length 311 0000042F 39C8 <1> cmp ax, cx ; length matches ? 312 00000431 741D <1> je .length_match ; yes, check name --> 313 <1> .cmps_mismatch: 314 00000433 01C6 <1> add si, ax ; -> behind entry 315 00000435 39D6 <1> cmp si, dx ; at end of this list area ? 316 00000437 72F2 <1> jb aa_mnemlistloop ; not yet, check next entry --> 317 <1> 318 00000439 81FA[540B] <1> cmp dx, mnlist_o_suffix_required; was first or second area ? 319 0000043D 750D <1> jne .mnem_invalid ; second, not found --> 320 <1> 321 0000043F BE[C10A] <1> mov si, mnlist_a_suffix_allowed ; -> second area: optional or required suffix 322 00000442 BA[7D0B] <1> mov dx, end_mnlist ; -> end of second area 323 <1> 324 00000445 49 <1> dec cx ; prepare for second look-up 325 00000446 3826[CB4A] <1> cmp [aa_mnemsuffix], ah ; is there a valid suffix ? (ah still 0) 326 0000044A 75DF <1> jne aa_mnemlistloop ; yes, check for suffixed instruction --> 327 <1> 328 <1> .mnem_invalid: 329 0000044C 58 <1> pop ax ; (discard) 330 0000044D E95D01 <1> jmp aa13a ; complain --> 331 <1> 332 <1> .length_match: ; found a name of correct length 333 00000450 BF[A901] <1> mov di, line_out ; -> all-capitals input 334 00000453 89F3 <1> mov bx, si ; -> name 335 00000455 F3A6 <1> repe cmpsb ; compare names 336 00000457 89DE <1> mov si, bx 337 00000459 89C1 <1> mov cx, ax ; restore length 338 0000045B 75D6 <1> jne .cmps_mismatch ; not this, continue --> 339 <1> 340 <1> ; We found the mnemonic. 341 <1> ; (bx=si)-> entry's mnemonic 342 <1> ; dx-> behind last mnlist entry of this area 343 <1> ; w[ss:sp]-> next field in input line (operand or EOL) 344 0000045D 89F0 <1> mov ax, si ; -> mnemonic's name 345 <1> 346 0000045F 81FA[7D0B] <1> cmp dx, end_mnlist ; was first or second area ? 347 00000463 7409 <1> je .handlesuffix ; second, there's a suffix to handle --> 348 <1> 349 00000465 3D[C10A] <1> cmp ax, mnlist_a_suffix_allowed ; optional suffix that was not specified? 350 00000468 7232 <1> jb aa_mnemonic_found ; no, done with the suffixes already --> 351 <1> 352 <1> %if _PM 353 <1> mov dl, byte [ bCSAttr ] ; dl = whether a 32-bit CS 354 <1> %else 355 0000046A 30D2 <1> xor dl, dl ; 86 Mode is always 16-bit 356 <1> %endif 357 0000046C EB09 <1> jmp sho .suffix_decide 358 <1> 359 <1> .handlesuffix: 360 <1> 361 0000046E 8A16[CB4A] <1> mov dl, byte [ aa_mnemsuffix ] ; dl = 'W' or 'D'. 'W' is odd, 'D' is even 362 00000472 F6D2 <1> not dl ; make 'W' an even value, 'D' an odd one 363 00000474 80E201 <1> and dl, 1 ; 'W' results in 0, 'D' in 1 364 <1> 365 <1> .suffix_decide: 366 00000477 3D[E50A] <1> cmp ax, mnlist_o_suffix_allowed ; address size suffix ? 367 0000047A 7212 <1> jb .a_suffix ; yes --> 368 <1> 369 <1> ; Operand size suffix. 370 0000047C 84D2 <1> test dl, dl ; which ? 371 0000047E 7407 <1> jz .o_suffix_w 372 00000480 800E[CC4A]01 <1> or byte [asm_mn_flags], AMF_D32 ; o32 373 00000485 EB15 <1> jmp sho aa_mnemonic_found 374 <1> 375 <1> .o_suffix_w: 376 00000487 800E[CC4A]40 <1> or byte [asm_mn_flags], AMF_D16 ; o16 377 0000048C EB0E <1> jmp sho aa_mnemonic_found 378 <1> 379 <1> ; Address size suffix. 380 <1> .a_suffix: 381 0000048E 84D2 <1> test dl, dl ; which ? 382 00000490 7405 <1> jz .a_suffix_w 383 00000492 800E[CC4A]84 <1> or byte [asm_mn_flags], AMF_ADDR|AMF_A32; a32 384 <1> .a_suffix_w: 385 00000497 800E[CC4A]80 <1> or byte [asm_mn_flags], AMF_ADDR ; a16 (AMF_A32 still clear) 386 <1> 387 <1> aa_mnemonic_found: 388 0000049C B104 <1> mov cl, 4 389 0000049E 8B74FE <1> mov si, [si-2] ; get the combined word 390 000004A1 D3EE <1> shr si, cl ; extract offset into asmtab 391 000004A3 81C6[0000] <1> add si, asmtab ; -> asmtab sequence 392 <1> 393 <1> ; bx-> name of matching mnlist entry 394 <1> ; If this mnemonic is suffixable/suffixed, 395 <1> ; AMF_D32,AMF_D16,AMF_ADDR,AMF_A32 show suffix status 396 <1> ; si-> associated asmtab sequence 397 <1> ; w[ss:sp]-> next field in input line (operand or EOL) 398 <1> 399 <1> %if 0 400 <1> 401 <1> Now si points to the spot in asmtab corresponding to this mnemonic. 402 <1> The format of the assembler table is as follows. 403 <1> First, there is optionally one of the following bytes: 404 <1> 405 <1> ASM_SPECIAL This is a special mnemonic (directive or AAx). 406 <1> ASM_WAIT The instruction is prefixed by a WAIT. 407 <1> ASM_D32 This is a 32-bit instruction variant. 408 <1> ASM_D16 This is a 16-bit instruction variant. 409 <1> 410 <1> Then, except for non-AAx ASM_SPECIAL, this is followed by one or 411 <1> more of the following sequences, indicating an instruction variant. 412 <1> 413 <1> ASM_LOCKABLE Indicates that this instruction can follow a LOCK prefix. 414 <1> ASM_MACHx Indicates the CPU this instruction requires, 1..6 (186..686). 415 <1> ASM_ESCAPE Escapes a large following word. The assembler table contains 416 <1> as many escapes as necessary; each escape means to add the 417 <1> value of ASM_ESCAPE to the following high byte of the info 418 <1> word. This will easily overflow the word, so a dword is 419 <1> required to process the info word. ASM_ESCAPE currently 420 <1> needs to be equal to ASM_FIRST (ie. the lowest assembler 421 <1> table prefix byte) because otherwise some values would have 422 <1> no valid encoding. _ASM_ESCAPE_USED is a preprocessor 423 <1> variable which will be 0 in case there are no ASM_ESCAPE 424 <1> bytes to be found in the table. 425 <1> [word] This is a 16-bit integer, most significant byte first, giving 426 <1> ASMMOD * a + b, where b is an index into the array opindex 427 <1> (indicating the operand list), and a is as follows (hex): 428 <1> 0..FF The (one-byte) instruction. 429 <1> 100..1FF The lower 8 bits give the second byte of 430 <1> a two-byte instruction beginning with 0Fh. 431 <1> 200..23F Bits 2-0 say which floating point instruction 432 <1> this is (D8h-DFh), and 5-3 give the /r field. 433 <1> 240..1247 (a-240h)/8 is the index in the array agroups 434 <1> (which gives the real value of a), and the 435 <1> low-order 3 bits gives the /r field. 436 <1> [byte] This gives the second byte of a floating point 437 <1> instruction if 0D8h <= a <= 0DFh. 438 <1> 439 <1> Following these is an ASM_END byte. (ASM_SPECIAL has the same value as 440 <1> ASM_END, but the context allows to decide which one is meant.) 441 <1> 442 <1> Exceptions: 443 <1> ASM_SPECIAL are not followed by this opcode information (except AAx). 444 <1> ASM_SPECIAL segment, LOCK and REP prefixes are followed by the literal 445 <1> prefix byte. 446 <1> ASM_SPECIAL for all mnemonics except AAx and the prefixes are not 447 <1> followed by anything at all. 448 <1> 449 <1> The ASM_ symbols are defined where debugtbl.inc is included in debug.asm. 450 <1> 451 <1> %endif 452 <1> 453 <1> ; To do: BITS, USE16, USE32, USEAUTO, CPU 454 000004A7 AC <1> lodsb ; get a possible prefix 455 <1> .checkprefix: 456 <1> %if 1 457 000004A8 3CFF <1> cmp al, ASM_SPECIAL ; a special mnemonic ? 458 000004AA 7403E99600 <1> jne .notspecial ; no --> 459 <1> 460 <1> ; Dispatch based on mnemonic. 461 000004AF 31C0 <1> xor ax, ax 462 000004B1 81FB[1001] <1> cmp bx, mnlist+MN_O16 463 000004B5 7503E9A200 <1> je aa_sizeprefix ; o16 (ax = 0) --> 464 000004BA 40 <1> inc ax 465 000004BB 81FB[0601] <1> cmp bx, mnlist+MN_A16 466 000004BF 7503E99800 <1> je aa_sizeprefix ; a16 (ax = 1) --> 467 000004C4 B402 <1> mov ah, 2 468 000004C6 81FB[0101] <1> cmp bx, mnlist+MN_A32 469 000004CA 7503E98D00 <1> je aa_sizeprefix ; a32 (ax = 201h) --> 470 000004CF 48 <1> dec ax 471 000004D0 81FB[0B01] <1> cmp bx, mnlist+MN_O32 472 000004D4 7503E98300 <1> je aa_sizeprefix ; o32 (ax = 200h) --> 473 000004D9 81FB[F806] <1> cmp bx, mnlist+MN_LOCK 474 000004DD 7503E9C200 <1> je aa18 ; lock --> 475 000004E2 81FB[F808] <1> cmp bx, mnlist+MN_REP 476 000004E6 7209 <1> jb .notreplock 477 000004E8 81FB[1009] <1> cmp bx, mnlist+MN_REPNE 478 000004EC 7703E9B300 <1> jbe aa18 ; rep, repe, repne --> 479 <1> .notreplock: 480 000004F1 81FB[3109] <1> cmp bx, mnlist+MN_ES 481 000004F5 7209 <1> jb .notseg 482 000004F7 81FB[4509] <1> cmp bx, mnlist+MN_GS 483 000004FB 7703E99900 <1> jbe aa17 ; single segment prefix --> 484 <1> .notseg: 485 00000500 81FB[2101] <1> cmp bx, mnlist+MN_AAD 486 00000504 7503E92E01 <1> je aa_aax ; aad --> 487 00000509 81FB[2601] <1> cmp bx, mnlist+MN_AAM 488 0000050D 7503E92501 <1> je aa_aax ; aam --> 489 00000512 833E[CD4A]00 <1> cmp word [ aa_saved_prefix ], byte 0 490 00000517 7403E99100 <1> jne aa13a ; if there was a prefix or a segment, error --> 491 0000051C 5E <1> pop si ; get position in input line 492 <1> ;cmp bx, mnlist+MN_SEG 493 <1> ;je aa_seg ; SEG mnemonic, process --> 494 0000051D 81FB[BA08] <1> cmp bx, mnlist+MN_ORG 495 00000521 7503E98E00 <1> je aa_org 496 00000526 B80100 <1> mov ax, 1 497 00000529 81FB[C402] <1> cmp bx, mnlist+MN_DD 498 0000052D 7503E98A00 <1> je aa20m ; dd (ax = 1) --> 499 00000532 40 <1> inc ax 500 00000533 81FB[D202] <1> cmp bx, mnlist+MN_DW 501 00000537 7503E98000 <1> je aa20m ; dw (ax = 2) --> 502 0000053C 40 <1> inc ax 503 0000053D 81FB[C002] <1> cmp bx, mnlist+MN_DB 504 00000541 7479 <1> je aa20m ; db (ax = 3) --> 505 00000543 EB68 <1> jmp short aa13a ; unhandled special mnemonic --> 506 <1> 507 <1> .notspecial: 508 00000545 2CFC <1> sub al, ASM_D16 ; mnemonic has a prefix ? 509 00000547 7207 <1> jb .normal ; no --> 510 00000549 7409 <1> je .d16 ; it is a 16-bit mnemonic form --> 511 <1> %else 512 <1> cmp al, ASM_O16PREF 513 <1> jb .normal ; no special mnemonic --> 514 <1> cmp al, ASM_A32PREF 515 <1> jbe aa_sizeprefix ; 386 address/operand size prefix --> 516 <1> 517 <1> sub al, ASM_LOCKREP ; check for mnemonic flag byte, 518 <1> ; and convert it to 0..9 if one 519 <1> jb .normal ; if none --> 520 <1> je aa18 ; if LOCK/REP --> 521 <1> cbw 522 <1> dec ax 523 <1> jz aa17 ; if segment prefix (ASM_SEG) --> 524 <1> dec ax 525 <1> jz aa_aax ; if aad or aam (ASM_AAX) --> 526 <1> dec ax 527 <1> jz .d16 ; if ASM_D16 --> 528 <1> cmp al, 3 529 <1> jae aa20 ; if ASM_ORG or ASM_DD or ASM_DW or ASM_DB --> 530 <1> %endif 531 0000054B 0806[CC4A] <1> or [ asm_mn_flags ], al ; save AMF_D32 or AMF_WAIT (1 or 2) 532 0000054F A8 <1> db __TEST_IMM8 ; (skip dec) 533 <1> .normal: 534 00000550 4E <1> dec si ; -> first byte of mnemonic info 535 <1> .ab01: 536 00000551 E9F300 <1> jmp ab01 ; now process the arguments 537 <1> .d16: 538 00000554 800E[CC4A]40 <1> or byte [ asm_mn_flags ], AMF_D16 539 00000559 46 <1> inc si ; skip the ASM_D32 byte 540 0000055A EBF5 <1> jmp short .ab01 ; now process the arguments 541 <1> 542 <1> aa_sizeprefix: 543 <1> %if 0 544 <1> sub al, ASM_O16PREF ; 0 = o16, 1 = a16, 2 = o32, 3 = a32 545 <1> mov ah, al 546 <1> and ax, (2<<8)|1 ; ah = 2 if 32-bit prefix, al = 1 if ASIZE 547 <1> %endif 548 <1> %if _PM 549 <1> or ah, byte [ bCSAttr ] 550 <1> jz .nobyte ; 16-bit CS and 16-bit prefix, no output --> 551 <1> cmp ah, 40h| 2 552 <1> je .nobyte ; 32-bit CS and 32-bit prefix, no output --> 553 <1> %else 554 0000055C 84E4 <1> test ah, ah 555 0000055E 7409 <1> jz .nobyte ; 16-bit CS and 16-bit prefix --> 556 <1> %endif 557 <1> 558 <1> ; CS differs from the prefix's type. 559 <1> ; Output a prefix byte. 560 00000560 0466 <1> add al, 66h ; 66h if OSIZE, 67h if ASIZE 561 00000562 BF[A901] <1> mov di, line_out 562 00000565 AA <1> stosb 563 00000566 E8B000 <1> call aa_copymem 564 <1> .nobyte: 565 <1> aa_handleprefixes: 566 00000569 5E <1> pop si 567 0000056A AC <1> lodsb ; get character 568 0000056B 3C3A <1> cmp al, ':' 569 0000056D 7503 <1> jne .nocolon 570 0000056F E83A6F <1> call skipwhite ; skip a colon 571 <1> .nocolon: 572 00000572 E8F36E <1> call iseol? ; end of line? 573 00000575 7403E974FE <1> jne aa02 ; no, process instruction --> 574 <1> 575 <1> ; No instruction follows. 576 <1> ; Write out saved LOCK/REP and/or segment prefix. 577 0000057A A0[CE4A] <1> mov al, byte [ aa_seg_pre ] 578 0000057D 84C0 <1> test al, al 579 0000057F 7407 <1> jz .noseg 580 00000581 BF[A901] <1> mov di, line_out 581 00000584 AA <1> stosb 582 00000585 E89100 <1> call aa_copymem 583 <1> .noseg: 584 00000588 A0[CD4A] <1> mov al, byte [ aa_saved_prefix ] 585 0000058B 84C0 <1> test al, al 586 0000058D 7407 <1> jz .noreplock 587 0000058F BF[A901] <1> mov di, line_out 588 00000592 AA <1> stosb 589 00000593 E88300 <1> call aa_copymem 590 <1> .noreplock: 591 <1> aa01_j1: 592 00000596 E91CFE <1> jmp aa01 ; return to prompt 593 <1> 594 <1> %if 0 595 <1> ; SEG directive (segment prefix follows) 596 <1> aa_seg: 597 <1> call skipwhite 598 <1> mov ah, byte [si] 599 <1> and ax, ~2020h 600 <1> mov di, segrgnam 601 <1> mov cx, 6 602 <1> repne scasw 603 <1> jne aa24 ; if not found 604 <1> push si ; save si in case there's no colon 605 <1> inc si ; skip "?s" 606 <1> call skipwhite 607 <1> pop si 608 <1> call chkeol 609 <1> mov bx, prefixlist + 5 610 <1> sub bx, cx 611 <1> mov al, byte [ bx ] ; look up the prefix byte 612 <1> mov di, line_out 613 <1> stosb 614 <1> call aa_copymem 615 <1> jmp short aa01_j1 616 <1> %endif 617 <1> 618 <1> ; segment prefix 619 <1> aa17: 620 00000599 AC <1> lodsb ; get prefix value 621 0000059A A2[CE4A] <1> mov byte [ aa_seg_pre ], al 622 0000059D 800E[CC4A]10 <1> or byte [ asm_mn_flags ], AMF_MSEG 623 000005A2 EBC5 <1> jmp short aa_handleprefixes 624 <1> 625 <1> ; LOCK or REP prefix 626 <1> aa18: 627 000005A4 AC <1> lodsb ; get prefix value 628 000005A5 8606[CD4A] <1> xchg al, byte [ aa_saved_prefix ] 629 000005A9 84C0 <1> test al, al 630 000005AB 74BC <1> jz aa_handleprefixes 631 <1> ; if there already was a saved prefix: 632 <1> aa13a: 633 000005AD 8B36[C94A] <1> mov si, [ aa13a_mnemposition ] 634 000005B1 E94761 <1> jmp error 635 <1> 636 <1> %if 0 637 <1> ; Pseudo ops (org or db/dw/dd). 638 <1> aa20: 639 <1> cmp word [ aa_saved_prefix ], byte 0 640 <1> jne aa13a ; if there was a prefix or a segment, error --> 641 <1> pop si ; get position in input line 642 <1> sub al, 3 ; AX=0 if org, 1 if dd, 2 if dw, 3 if db. 643 <1> jne aa20m ; if not ORG 644 <1> %endif 645 <1> 646 <1> aa_org: 647 <1> ; Process ORG pseudo op. 648 000005B4 AC <1> lodsb 649 000005B5 8B1E[A202] <1> mov bx, word [ a_addr+4 ] ; default segment 650 000005B9 E9E6FD <1> jmp aa00a ; go to top, set address if any given 651 <1> 652 <1> ; Data instructions (DB/DW/DD). 653 <1> aa20m: 654 000005BC BF[A901] <1> mov di, line_out ; put the bytes here when we get them 655 000005BF 93 <1> xchg ax, bx ; mov bx,ax 656 000005C0 8A87[F24A] <1> mov al, byte [ aadbsiz+bx ] ; move maximum size 657 000005C4 A2[F24A] <1> mov byte [ aadbsiz ], al 658 000005C7 D1E3 <1> shl bx, 1 659 000005C9 8B87[F64A] <1> mov ax, word [ aadbsto+bx ] ; move address of storage routine 660 000005CD A3[F64A] <1> mov word [ aadbsto ],ax 661 000005D0 E8D96E <1> call skipwhite 662 000005D3 E8926E <1> call iseol? 663 000005D6 743D <1> je aa27 ; if end of line 664 <1> 665 <1> aa21: 666 000005D8 3C22 <1> cmp al, '"' 667 000005DA 741B <1> je aa22 ; if string 668 000005DC 3C27 <1> cmp al, "'" 669 000005DE 7417 <1> je aa22 ; if string 670 000005E0 E87D08 <1> call aageti ; get a numerical value into dx:bx, size into cl 671 000005E3 3A0E[F24A] <1> cmp cl, byte [ aadbsiz ] 672 000005E7 7720 <1> ja aa24 ; if overflow 673 000005E9 93 <1> xchg ax, bx 674 000005EA FF16[F64A] <1> call near [ aadbsto ] ; store the value 675 000005EE 81FF[B102] <1> cmp di, line_out_end 676 000005F2 7715 <1> ja aa24 ; if output line overflow 677 000005F4 93 <1> xchg ax, bx 678 000005F5 EB16 <1> jmp short aa26 ; done with this one 679 <1> 680 <1> aa22: 681 000005F7 88C4 <1> mov ah, al 682 <1> aa23: 683 000005F9 AC <1> lodsb 684 000005FA 3C0D <1> cmp al, 13 685 000005FC 740B <1> je aa24 ; if end of line (closing quote missing) --> 686 000005FE 38E0 <1> cmp al, ah 687 00000600 740A <1> je aa25 ; if end of string 688 00000602 AA <1> stosb 689 00000603 81FF[B102] <1> cmp di, line_out_end 690 00000607 76F0 <1> jbe aa23 ; if output line not overflowing 691 <1> aa24: 692 00000609 E9EF60 <1> jmp error ; error 693 <1> aa25: 694 0000060C AC <1> lodsb 695 <1> aa26: 696 0000060D E86F6E <1> call skipcomm0 697 00000610 E8556E <1> call iseol? 698 00000613 75C3 <1> jne aa21 ; if not end of line 699 <1> 700 <1> ; End of line. Copy it to debuggee's memory. 701 <1> aa27: 702 00000615 B8[B503] <1> mov ax, aa01 703 00000618 50 <1> push ax 704 <1> 705 <1> ; INP: di-> behind memory to copy (starts at line_out) 706 <1> ; [a_addr]-> destination 707 <1> ; OUT: memory copied 708 <1> ; a_addr offset updated 709 <1> ; es set to ss 710 <1> ; CHG: (e)si, (e)cx, (e)di 711 <1> aa_copymem: 712 00000619 BE[A901] <1> mov si, line_out ; ds:si-> data 713 0000061C 89F9 <1> mov cx, di ; -> behind data 714 0000061E 29F1 <1> sub cx, si ; = size of data 715 00000620 8E06[A202] <1> mov es, word [ a_addr+4 ] 716 <1> _386_PM_o32 ; mov edi, dword [ a_addr+0 ] 717 00000624 8B3E[9E02] <1> mov di, word [ a_addr+0 ] ; es:(e)di-> destination 718 <1> _386_PM movzx ecx, cx 719 <1> _386_PM movzx esi, si ; fix high words 720 <1> _386_PM_a32 721 00000628 F3A4 <1> rep movsb ; copy it 722 <1> _386_PM_o32 ; mov dword [ a_addr+0 ], edi 723 0000062A 893E[9E02] <1> mov word [ a_addr+0 ], di ; save new address 724 0000062E 16 <1> push ss 725 0000062F 07 <1> pop es 726 00000630 C3 <1> retn 727 <1> 728 <1> ; Routines to store a byte/word/dword, 729 <1> ; into a buffer in our memory. 730 <1> aa28: 731 00000631 AB <1> stosw ; store a dword value 732 00000632 92 <1> xchg ax, dx 733 <1> aa29: 734 00000633 AB <1> stosw ; store a word value 735 00000634 C3 <1> retn 736 <1> 737 <1> aa30: 738 00000635 AA <1> stosb ; store a byte value 739 00000636 C3 <1> retn 740 <1> 741 <1> %if _PM && 0 742 <1> aa_use16: 743 <1> cmp word [ aa_saved_prefix ], byte 0 744 <1> jne aa13a 745 <1> pop si 746 <1> lodsb 747 <1> call chkeol 748 <1> mov dl, 16 749 <1> jmp short aa_bits.parse 750 <1> 751 <1> aa_use32: 752 <1> cmp word [ aa_saved_prefix ], byte 0 753 <1> jne aa13a 754 <1> pop si 755 <1> lodsb 756 <1> call chkeol 757 <1> mov dl, 32 758 <1> jmp short aa_bits.parse 759 <1> 760 <1> aa_useauto: 761 <1> cmp word [ aa_saved_prefix ], byte 0 762 <1> jne aa13a 763 <1> pop si 764 <1> lodsb 765 <1> call chkeol 766 <1> jmp short aa_bits.auto 767 <1> 768 <1> aa_bits: 769 <1> cmp word [ aa_saved_prefix ], byte 0 770 <1> jne aa13a ; if there was a prefix or a segment, error --> 771 <1> pop si ; get position in input line 772 <1> 773 <1> ; Check whether "AUTO" requested. 774 <1> push si 775 <1> lodsw 776 <1> and ax, ~2020h 777 <1> cmp ax, "AU" 778 <1> jne .notauto 779 <1> lodsw 780 <1> and ax, ~2020h 781 <1> cmp ax, "TO" 782 <1> jne .notauto 783 <1> lodsb 784 <1> call iseol? 785 <1> jne .notauto 786 <1> pop ax 787 <1> .auto: 788 <1> xor ax, ax 789 <1> mov al, byte [ bCSAttr+1 ] 790 <1> test al, al ; any saved ? 791 <1> jz aa01_j1 ; no --> 792 <1> mov word [ bCSAttr ], ax ; restore 793 <1> jmp short aa01_j1 794 <1> 795 <1> .notauto: 796 <1> pop si 797 <1> lodsb 798 <1> push si 799 <1> call getbyte 800 <1> call chkeol 801 <1> pop si 802 <1> .parse: 803 <1> mov ax, word [ bCSAttr ] 804 <1> or al, 1 805 <1> cmp dl, 16 806 <1> je .16 807 <1> cmp dl, 16h 808 <1> je .16 809 <1> cmp dl, 32 810 <1> je .32 811 <1> cmp dl, 32h 812 <1> jne aa24 813 <1> .32: 814 <1> _no386 jmp aa24 815 <1> test ah, ah 816 <1> mov ah, al 817 <1> mov al, 40h 818 <1> jmp short .save 819 <1> 820 <1> .16: 821 <1> test ah, ah 822 <1> mov ah, al 823 <1> mov al, 0 824 <1> .save: 825 <1> jnz .saved 826 <1> mov byte [ bCSAttr+1 ], ah 827 <1> .saved: 828 <1> mov byte [ bCSAttr ], al 829 <1> jmp short aa01_j1 830 <1> %endif 831 <1> 832 <1> ; Here we process the AAD and AAM instructions. They are special 833 <1> ; in that they may take a one-byte argument, or none (in which case 834 <1> ; the argument defaults to 0Ah = ten). 835 <1> aa_aax: 836 00000637 8936[CF4A] <1> mov word [ mneminfo ], si ; save this address 837 0000063B 5E <1> pop si 838 0000063C AC <1> lodsb 839 0000063D E8286E <1> call iseol? 840 00000640 750B <1> jne ab01b ; if not end of line --> 841 00000642 BE[0E4B] <1> mov si, aam_args ; fake a 0Ah argument if none given 842 00000645 EB05 <1> jmp short ab01a 843 <1> 844 <1> 845 <1> ; Process normal instructions. 846 <1> 847 <1> ; First we parse each argument into the following structure, 848 <1> ; stored consecutively at line_out, line_out+OPRND_size, etc. 849 <1> ; 850 <1> ; For arguments of the form xxxx:yyyyyyyy, xxxx is stored in 851 <1> ; OPRND.num2, and yyyyyyyy in OPRND.num. The number of bytes 852 <1> ; in yyyyyyyy is stored in opaddr, 2 is stored in OPRND.numadd, 853 <1> ; and di is stored in xxaddr. 854 <1> struc OPRND 854 ****************** <1> expansion: strucname = OPRND 855 00000000 <1> .flags: resb 1 ; 0 flags (ARG_DEREF, etc) 856 00000001 <1> resb 1 ; 1 unused 857 00000002 <1> .sizearg: resb 1 ; 2 size argument, if any (1=byte, 2=word, 4=dword, 5=qword 858 <1> ; 6=float, 7=double, 8=tbyte, 9=short, 10=long, 11=near, 12=far) 859 00000003 <1> .sizedis: resb 1 ; 3 size of ModR/M displacement 860 <1> .reg1: ; 4 ModR/M byte or first register (byte) 861 00000004 <1> .numadd: resb 1 ; 4 number of additional bytes at num2 (up to 4) 862 <1> .num2: ; 5 second number (word) 863 00000005 <1> .reg2: resb 1 ; 5 index register, second register or SIB byte 864 <1> ; reg2 needs to follow reg1 immediately 865 00000006 <1> .index: resb 1 ; 6 index factor 866 00000007 <1> .orednum: resb 1 ; 7 sizes of numbers are ORed here 867 00000008 <1> .num: resd 1 ; 8 number 868 <1> endstruc 1 869 <1> 870 <1> 871 <1> ab01: 872 00000647 8936[CF4A] <1> mov word [ mneminfo ], si ; save this address 873 0000064B 5E <1> pop si ; get position in line 874 <1> ab01a: 875 0000064C AC <1> lodsb 876 <1> ab01b: 877 0000064D BF[A901] <1> mov di, line_out 878 <1> 879 <1> ; Loop over operands. 880 <1> ab02: 881 00000650 E8156E <1> call iseol? 882 00000653 7503 <1> jne ab04 ; if not end of line 883 <1> ab99_j1: 884 00000655 E91503 <1> jmp ab99 ; to next phase 885 <1> 886 <1> ab04: 887 00000658 57 <1> push di ; clear out the next storage area 888 00000659 B90600 <1> mov cx, OPRND_size_w 889 0000065C 31C0 <1> xor ax, ax 890 0000065E F3AB <1> rep stosw 891 00000660 5F <1> pop di 892 <1> 893 <1> ; Small loop over "BYTE PTR" and segment prefixes. 894 <1> ab05: 895 00000661 4E <1> dec si 896 00000662 8B04 <1> mov ax, word [ si ] 897 00000664 25DFDF <1> and ax, TOUPPER_W 898 00000667 807D0200 <1> cmp byte [ di+OPRND.sizearg ], 0 899 0000066B 7533 <1> jne ab07 ; if already have a size qualifier ("BYTE PTR",...) 900 0000066D 57 <1> push di 901 0000066E BF[944B] <1> mov di, sizetcnam 902 00000671 B90C00 <1> mov cx, sizetcnam_size_w 903 00000674 F2AF <1> repne scasw 904 00000676 5F <1> pop di 905 00000677 7527 <1> jne ab07 ; if not found 906 00000679 85C9 <1> test cx, cx 907 0000067B 7509 <1> jnz ab06 ; if not "FA" 908 0000067D 8A4402 <1> mov al, byte [ si+2 ] 909 00000680 24DF <1> and al, TOUPPER 910 00000682 3C52 <1> cmp al, 'R' 911 00000684 7550 <1> jne ab09 ; if not "FAR" (could be hexadecimal) --> 912 <1> ab06: 913 00000686 80E90C <1> sub cl, sizetcnam_size_w 914 00000689 F6D9 <1> neg cl ; convert to 1..12 915 0000068B 884D02 <1> mov byte [ di+OPRND.sizearg ], cl 916 0000068E E8116E <1> call skipalpha ; go to next token 917 00000691 8A24 <1> mov ah, byte [si] 918 00000693 25DFDF <1> and ax, TOUPPER_W 919 00000696 3D5054 <1> cmp ax, "PT" 920 00000699 75C6 <1> jne ab05 ; if not "PTR" 921 0000069B E8046E <1> call skipalpha ; go to next token (ignore "PTR") 922 0000069E EBC1 <1> jmp short ab05 923 <1> 924 <1> ab07: 925 000006A0 E80400 <1> call ab08 926 000006A3 7531 <1> jne ab09 ; not a segment prefix --> 927 000006A5 EBBA <1> jmp short ab05 ; if it was a segment prefix --> 928 <1> 929 <1> ; Test for and process segment prefix 930 <1> ; 931 <1> ; INP: b[aa_seg_pre] 932 <1> ; si-> string 933 <1> ; ax = w[si] (uppercased) 934 <1> ; OUT: NZ if no segment prefix, 935 <1> ; si unchanged 936 <1> ; ZR if segment prefix, 937 <1> ; si-> behind prefix + 1 938 <1> ; al = character behind prefix 939 <1> ; CHG: ax, bx, cx 940 <1> ab08: 941 000006A7 803E[CE4A]00 <1> cmp byte [ aa_seg_pre ], 0 942 000006AC 7525 <1> jne .ret ; if we already have a segment prefix 943 000006AE 57 <1> push di 944 000006AF BF[3C4F] <1> mov di, segrgnam 945 000006B2 B90600 <1> mov cx, 6 946 000006B5 F2AF <1> repne scasw 947 000006B7 5F <1> pop di 948 000006B8 7519 <1> jne .ret ; if not found 949 000006BA 56 <1> push si ; save si in case there's no colon 950 000006BB AD <1> lodsw ; skip "?s" 951 000006BC E8ED6D <1> call skipwhite 952 000006BF 3C3A <1> cmp al, ':' 953 000006C1 7511 <1> jne .retpopsi ; if not followed by ':' 954 000006C3 58 <1> pop ax ; discard saved si 955 000006C4 E8E56D <1> call skipwhite ; skip it 956 000006C7 BB[634F] <1> mov bx, prefixlist + 5 957 000006CA 29CB <1> sub bx, cx 958 000006CC 8A07 <1> mov al, byte [ bx ] ; look up the prefix byte 959 000006CE A2[CE4A] <1> mov byte [ aa_seg_pre ], al ; save it away 960 000006D1 38C0 <1> cmp al, al ; ZR, valid segment prefix 961 <1> .ret: 962 000006D3 C3 <1> retn 963 <1> 964 <1> .retpopsi: 965 000006D4 5E <1> pop si 966 000006D5 C3 <1> retn 967 <1> 968 <1> ; Begin parsing main part of argument. 969 <1> 970 <1> ; First check registers. 971 <1> ab09: 972 000006D6 57 <1> push di ; check for solo registers 973 000006D7 BF[1C4F] <1> mov di, rgnam816 974 000006DA B93600 <1> mov cx, N_ALLREGS; *2?? 27 975 000006DD E82E08 <1> call aagetreg 976 000006E0 5F <1> pop di 977 000006E1 727F <1> jc ab14 ; if not a register 978 000006E3 800D04 <1> or byte [di+OPRND.flags], ARG_JUSTREG 979 000006E6 885D04 <1> mov byte [di+OPRND.reg1], bl ; save register number 980 000006E9 80FB18 <1> cmp bl, 24 ; 0..23 = AL..DH, AX..DI, EAX..EDI 981 000006EC 730B <1> jae ab09a ; if it's not a normal register 982 000006EE 93 <1> xchg ax, bx ; mov al, bl 983 000006EF B103 <1> mov cl, 3 984 000006F1 D2E8 <1> shr al, cl ; al = size: 0 -> byte, 1 -> word, 2 -> dword 985 000006F3 04FE <1> add al, -2 986 000006F5 1403 <1> adc al, 3 ; convert to 1, 2, 4 (respectively) 987 000006F7 EB5A <1> jmp short ab13 988 <1> 989 <1> ab09a: 990 000006F9 80350C <1> xor byte [di+OPRND.flags], ARG_JUSTREG|ARG_WEIRDREG 991 000006FC B002 <1> mov al, SIZ_WORD ; register size 992 000006FE 80FB1E <1> cmp bl, REG_ST ; 24..29 = segment registers 993 00000701 7737 <1> ja ab11 ; if it's MM, CR, DR, or TR --> 994 00000703 740C <1> je ab09b ; if it's ST --> 995 00000705 80FB1C <1> cmp bl, 28 996 00000708 7249 <1> jb ab13 ; if it's a non-386 segment register --> 997 0000070A 800E[CC4A]20 <1> or byte [asm_mn_flags], AMF_FSGS ; else flag it 998 0000070F EB42 <1> jmp short ab13 999 <1> 1000 <1> ; ST registers 1001 <1> ab09b: 1002 00000711 AC <1> lodsb 1003 <1> ; Check for NASM FPU register notation: ST0..ST7 1004 00000712 3C30 <1> cmp al, '0' ; digit following ? 1005 00000714 720B <1> jb .par 1006 00000716 3C37 <1> cmp al, '7' 1007 00000718 7707 <1> ja .par ; no --> 1008 0000071A 2C30 <1> sub al, '0' 1009 0000071C 884505 <1> mov byte [di+OPRND.reg2], al ; save number 1010 0000071F EB30 <1> jmp short ab12 ; --> 1011 <1> 1012 <1> .par: 1013 <1> ; Check for MASM FPU register notation: ST(0)..ST(7) 1014 00000721 3C28 <1> cmp al, '(' ; parenthesis following ? 1015 00000723 7403 <1> je .ispar ; yes --> 1016 <1> ; Plain ST (= ST0) 1017 00000725 4E <1> dec si 1018 00000726 EB29 <1> jmp short ab12 1019 <1> 1020 <1> .ispar: 1021 00000728 AC <1> lodsb ; get digit 1022 00000729 2C30 <1> sub al, '0' 1023 0000072B 3C07 <1> cmp al, 7 1024 0000072D 7708 <1> ja ab10 ; if not 0..7 1025 0000072F 884505 <1> mov byte [di+OPRND.reg2], al ; save the number 1026 00000732 AC <1> lodsb 1027 00000733 3C29 <1> cmp al, ')' ; validate that there's a closing parenthesis 1028 00000735 741A <1> je ab12 ; okay --> 1029 <1> ab10: 1030 <1> aa24_j2: 1031 00000737 E9CFFE <1> jmp aa24 ; error 1032 <1> 1033 <1> ; other registers: 31..34 (MM, CR, DR, TR) 1034 <1> ab11: 1035 0000073A AC <1> lodsb 1036 0000073B 2C30 <1> sub al, '0' ; get digit 1037 0000073D 3C07 <1> cmp al, 7 1038 0000073F 77F6 <1> ja ab10 ; if error --> 1039 00000741 884505 <1> mov byte [di+OPRND.reg2], al ; save the number 1040 00000744 B004 <1> mov al, SIZ_DWORD ; register size 1041 00000746 80FB1F <1> cmp bl, REG_MM 1042 00000749 7508 <1> jne ab13 ; if not MM register 1043 0000074B 800D04 <1> or byte [di+OPRND.flags], ARG_JUSTREG 1044 0000074E B005 <1> mov al, SIZ_QWORD 1045 00000750 A9 <1> db __TEST_IMM16 ; (skip mov) 1046 <1> ab12: 1047 00000751 B000 <1> mov al, 0 ; size for ST registers 1048 <1> ab13: 1049 00000753 3A4502 <1> cmp al, byte [di+OPRND.sizearg] ; compare with stated size 1050 00000756 7407 <1> je ab13a ; if same 1051 00000758 864502 <1> xchg al, byte [di+OPRND.sizearg] 1052 0000075B 84C0 <1> test al, al 1053 0000075D 75D8 <1> jnz ab10 ; if wrong size given, error --> 1054 <1> ab13a: 1055 0000075F E9ED01 <1> jmp ab44 ; done with this operand 1056 <1> 1057 <1> ; It's not a register reference. Try for a number. 1058 <1> ab14: 1059 00000762 AC <1> lodsb 1060 00000763 E8D606 <1> call aaifnum 1061 00000766 7236 <1> jc ab17 ; it's not a number 1062 <1> ab14a: 1063 00000768 E8F506 <1> call aageti ; get the number 1064 0000076B 884D07 <1> mov byte [di+OPRND.orednum], cl 1065 0000076E 895D08 <1> mov word [di+OPRND.num+0], bx 1066 00000771 89550A <1> mov word [di+OPRND.num+2], dx 1067 00000774 E8366D <1> call skipwh0 1068 00000777 80F902 <1> cmp cl, 2 1069 0000077A 7F22 <1> jg ab17 ; if we can't have a colon here 1070 0000077C 3C3A <1> cmp al, ':' 1071 0000077E 751E <1> jne ab17 ; if not xxxx:yyyy 1072 00000780 E8296D <1> call skipwhite 1073 00000783 E8DA06 <1> call aageti 1074 00000786 8B4D08 <1> mov cx, word [di+OPRND.num+0] 1075 00000789 894D05 <1> mov word [di+OPRND.num2], cx 1076 0000078C 895D08 <1> mov word [di+OPRND.num+0], bx 1077 0000078F 89550A <1> mov word [di+OPRND.num+2], dx 1078 00000792 800D20 <1> or byte [di+OPRND.flags], ARG_FARADDR 1079 00000795 E9B601 <1> jmp ab43 ; done with this operand 1080 <1> 1081 <1> ab15: 1082 00000798 E9B300 <1> jmp ab30 ; do post-processing 1083 <1> 1084 <1> ; Check for [...]. 1085 <1> ab16: 1086 0000079B E80E6D <1> call skipwhite 1087 <1> ab17: 1088 0000079E 3C5B <1> cmp al, '[' ; begin loop over sets of [] 1089 000007A0 75F6 <1> jne ab15 ; if not [ 1090 000007A2 800D01 <1> or byte [di+OPRND.flags], ARG_DEREF ; set the flag 1091 <1> 1092 <1> ; Process NASM segment prefix inside brackets if any 1093 000007A5 E8046D <1> call skipwhite 1094 000007A8 8A24 <1> mov ah, byte [si] 1095 000007AA 25DFDF <1> and ax, TOUPPER_W 1096 000007AD 4E <1> dec si ; set up for ab08 1097 000007AE E8F6FE <1> call ab08 1098 000007B1 7403 <1> jz ab19 ; if segment prefix (called skipwhite) 1099 <1> ab18: 1100 000007B3 E8F66C <1> call skipwhite 1101 <1> ab19: 1102 000007B6 3C5D <1> cmp al, ']' ; begin loop within [] 1103 000007B8 74E1 <1> je ab16 ; if done 1104 <1> 1105 <1> ; Check for a register (within []). 1106 000007BA 4E <1> dec si 1107 000007BB 57 <1> push di 1108 000007BC BF[2C4F] <1> mov di, rgnam16 1109 000007BF B90800 <1> mov cx, N_REGS16 1110 000007C2 E84907 <1> call aagetreg 1111 000007C5 5F <1> pop di 1112 000007C6 7243 <1> jc ab25 ; if not a register 1113 000007C8 80FB10 <1> cmp bl, 16 1114 000007CB 7305 <1> jae ab20 ; if 32-bit register 1115 000007CD 80C308 <1> add bl, 8 ; adjust 0..7 to 8..15 1116 000007D0 EB1D <1> jmp short ab21 1117 <1> ab20: 1118 000007D2 807D0500 <1> cmp byte [di+OPRND.reg2], 0 1119 000007D6 7517 <1> jnz ab21 ; if we already have an index 1120 000007D8 E8D16C <1> call skipwhite 1121 000007DB 4E <1> dec si 1122 000007DC 3C2A <1> cmp al, '*' 1123 000007DE 750F <1> jne ab21 ; if not followed by '*' 1124 000007E0 46 <1> inc si 1125 000007E1 885D05 <1> mov byte [di+OPRND.reg2], bl ; save index register 1126 000007E4 E8C56C <1> call skipwhite 1127 000007E7 E87606 <1> call aageti 1128 000007EA E8FF06 <1> call aaconvindex 1129 000007ED EB51 <1> jmp short ab28 ; ready for next part 1130 <1> 1131 <1> ab21: 1132 000007EF 807D0400 <1> cmp byte [di+OPRND.reg1], 0 1133 000007F3 7505 <1> jne ab22 ; if there's already a register 1134 000007F5 885D04 <1> mov byte [di+OPRND.reg1], bl 1135 000007F8 EB09 <1> jmp ab23 1136 <1> ab22: 1137 000007FA 807D0500 <1> cmp byte [di+OPRND.reg2], 0 1138 000007FE 7508 <1> jne ab24 ; if too many registers 1139 00000800 885D05 <1> mov byte [di+OPRND.reg2], bl 1140 <1> ab23: 1141 00000803 E8A66C <1> call skipwhite 1142 00000806 EB38 <1> jmp short ab28 ; ready for next part 1143 <1> 1144 <1> ab24: 1145 <1> aa24_j3: 1146 00000808 E9FEFD <1> jmp aa24 ; error 1147 <1> 1148 <1> ; Try for a number (within []). 1149 <1> ab25: 1150 0000080B AC <1> lodsb 1151 <1> ab26: 1152 0000080C E85106 <1> call aageti ; get a number (or flag an error) 1153 0000080F E89B6C <1> call skipwh0 1154 00000812 3C2A <1> cmp al, '*' 1155 00000814 740B <1> je ab27 ; if it's an index factor 1156 00000816 084D07 <1> or byte [di+OPRND.orednum], cl 1157 00000819 015D08 <1> add word [di+OPRND.num+0], bx 1158 0000081C 11550A <1> adc word [di+OPRND.num+2], dx 1159 0000081F EB1F <1> jmp short ab28 ; next part ... 1160 <1> 1161 <1> ab27: 1162 00000821 E8C806 <1> call aaconvindex 1163 00000824 E8856C <1> call skipwhite 1164 00000827 4E <1> dec si 1165 00000828 57 <1> push di 1166 00000829 BF[2C4F] <1> mov di, rgnam16 1167 0000082C 31C9 <1> xor cx, cx 1168 0000082E E8DD06 <1> call aagetreg 1169 00000831 5F <1> pop di 1170 00000832 72D4 <1> jc ab24 ; if error 1171 00000834 807D0500 <1> cmp byte [di+OPRND.reg2], 0 1172 00000838 75CE <1> jne ab24 ; if there is already a register 1173 0000083A 885D05 <1> mov byte [di+OPRND.reg2], bl 1174 0000083D E86C6C <1> call skipwhite 1175 <1> 1176 <1> ; Ready for the next term within []. 1177 <1> ab28: 1178 00000840 3C2D <1> cmp al, '-' 1179 00000842 74C8 <1> je ab26 ; if a (negative) number is next 1180 00000844 3C2B <1> cmp al, '+' 1181 00000846 7503 <1> jne ab29 ; if no next term (presumably) 1182 00000848 E968FF <1> jmp ab18 1183 <1> ab29: 1184 0000084B E968FF <1> jmp ab19 ; back for more 1185 <1> 1186 <1> ; Post-processing for complicated arguments. 1187 <1> ab30: 1188 0000084E 837D0400 <1> cmp word [di+OPRND.reg1], 0 1189 00000852 752C <1> jne ab32 ; if registers were given ( ==> create MOD R/M) 1190 00000854 807D0700 <1> cmp byte [di+OPRND.orednum], 0 1191 00000858 7424 <1> je ab31 ; if nothing was given ( ==> error) 1192 0000085A 803D00 <1> cmp byte [di+OPRND.flags], 0 1193 0000085D 7506 <1> jne ab30b ; if it was not immediate 1194 0000085F 800D10 <1> or byte [di+OPRND.flags], ARG_IMMED 1195 <1> ab30a: 1196 00000862 E9E900 <1> jmp ab43 ; done with this argument 1197 <1> ab30b: 1198 00000865 800E[CC4A]80 <1> or byte [asm_mn_flags], AMF_ADDR 1199 0000086A B002 <1> mov al, 2 ; size of the displacement 1200 0000086C F6450704 <1> test byte [di+OPRND.orednum], 4 1201 00000870 7407 <1> jz ab30c ; if no 32-bit displacement --> 1202 00000872 40 <1> inc ax 1203 00000873 40 <1> inc ax ; al = 4 1204 00000874 800E[CC4A]04 <1> or byte [asm_mn_flags], AMF_A32 ; 32-bit addressing 1205 <1> ab30c: 1206 00000879 884503 <1> mov byte [di+OPRND.sizedis], al ; save displacement size 1207 0000087C EBE4 <1> jmp short ab30a ; done with this argument 1208 <1> ab31: 1209 0000087E EB88 <1> jmp short aa24_j3 ; flag an error 1210 <1> 1211 <1> ; Create the MOD R/M byte. 1212 <1> ; (For disp-only or register, this will be done later as needed.) 1213 <1> ab32: 1214 00000880 800D02 <1> or byte [di+OPRND.flags], ARG_MODRM 1215 00000883 8A4504 <1> mov al, byte [di+OPRND.reg1] 1216 00000886 0A4505 <1> or al, byte [di+OPRND.reg2] 1217 00000889 A810 <1> test al, 10h 1218 0000088B 7525 <1> jnz ab34 ; if 32-bit addressing 1219 0000088D F6450704 <1> test byte [di+OPRND.orednum], 4 1220 00000891 751F <1> jnz ab34 ; if 32-bit addressing 1221 00000893 800E[CC4A]80 <1> or byte [asm_mn_flags], AMF_ADDR 1222 00000898 8B4504 <1> mov ax, word [di+OPRND.reg1] ; get reg1 and reg2 1223 0000089B 38E0 <1> cmp al, ah 1224 0000089D 7702 <1> ja ab33 ; make sure al >= ah 1225 0000089F 86C4 <1> xchg al, ah 1226 <1> ab33: 1227 000008A1 57 <1> push di 1228 000008A2 BF[FE4A] <1> mov di, modrmtab 1229 000008A5 B90800 <1> mov cx, 8 1230 000008A8 F2AF <1> repne scasw 1231 000008AA 5F <1> pop di 1232 000008AB 75D1 <1> jne ab31 ; if not among the possibilities (error) 1233 000008AD BB0602 <1> mov bx, 206h ; max disp = 2 bytes; 6 ==> (non-existent) [bp] 1234 000008B0 EB6A <1> jmp short ab39 ; done (just about) 1235 <1> 1236 <1> ; 32-bit addressing 1237 <1> ab34: 1238 000008B2 800E[CC4A]84 <1> or byte [asm_mn_flags], AMF_A32 | AMF_ADDR ; 32-bit addressing 1239 000008B7 8A4504 <1> mov al, byte [di+OPRND.reg1] 1240 000008BA 0A4506 <1> or al, byte [di+OPRND.index] 1241 000008BD 7508 <1> jnz ab35 ; if we can't optimize [Exx*1] to [Exx] 1242 000008BF 8B4504 <1> mov ax, word [di+OPRND.reg1] 1243 000008C2 86C4 <1> xchg al, ah 1244 000008C4 894504 <1> mov word [di+OPRND.reg1], ax 1245 <1> ab35: 1246 000008C7 BB0504 <1> mov bx, 405h ; max disp = 4 bytes; 5 ==> (non-existent) [bp] 1247 000008CA 807D0500 <1> cmp byte [di+OPRND.reg2], 0 1248 000008CE 7510 <1> jne ab36 ; if there's a SIB 1249 000008D0 8A4D04 <1> mov cl, byte [di+OPRND.reg1] 1250 000008D3 80F910 <1> cmp cl, 16 1251 000008D6 7CA6 <1> jl ab31 ; if wrong register type 1252 000008D8 80E107 <1> and cl, 7 1253 000008DB 80F904 <1> cmp cl, 4 ; check for ESP 1254 000008DE 753C <1> jne ab39 ; if not, then we're done (otherwise do SIB) 1255 <1> 1256 <1> ab36: 1257 000008E0 800E[CC4A]08 <1> or byte [asm_mn_flags], AMF_SIB ; form SIB 1258 000008E5 8A6D06 <1> mov ch, byte [di+OPRND.index] ; get SS bits 1259 000008E8 B103 <1> mov cl, 3 1260 000008EA D2E5 <1> shl ch, cl ; shift them halfway into place 1261 000008EC 8A4505 <1> mov al, byte [di+OPRND.reg2] ; index register 1262 000008EF 3C14 <1> cmp al, 20 1263 000008F1 748B <1> je ab31 ; if ESP ( ==> error) 1264 000008F3 3C00 <1> cmp al, 0 1265 000008F5 7502 <1> jne ab37 ; if not zero 1266 000008F7 B014 <1> mov al, 20 ; set it for index byte 4 1267 <1> ab37: 1268 000008F9 3C10 <1> cmp al, 16 1269 000008FB 7C81 <1> jl ab31 ; if wrong register type 1270 000008FD 2407 <1> and al, 7 1271 000008FF 08C5 <1> or ch, al ; put it into the SIB 1272 00000901 D2E5 <1> shl ch, cl ; shift it into place 1273 00000903 41 <1> inc cx ; R/M for SIB = 4 1274 00000904 8A4504 <1> mov al, byte [di+OPRND.reg1] ; now get the low 3 bits 1275 00000907 84C0 <1> test al, al 1276 00000909 7505 <1> jnz ab38 ; if there was a first register 1277 0000090B 80CD05 <1> or ch, 5 1278 0000090E EB38 <1> jmp short ab42 ; MOD = 0, disp is 4 bytes 1279 <1> 1280 <1> ab38: 1281 00000910 3C10 <1> cmp al, 16 1282 00000912 7C56 <1> jl ab45 ; if wrong register type 1283 00000914 2407 <1> and al, 7 ; first register 1284 00000916 08C5 <1> or ch, al ; put it into the SIB 1285 00000918 3C05 <1> cmp al, 5 1286 0000091A 7406 <1> je ab40 ; if it's EBP, then we don't recognize disp=0 1287 <1> ; otherwise bl will be set to 0 1288 <1> 1289 <1> ; Find the size of the displacement. 1290 <1> ab39: 1291 0000091C 38D9 <1> cmp cl, bl 1292 0000091E 7402 <1> je ab40 ; if it's [(E)BP], then disp=0 is still 1 byte 1293 00000920 B300 <1> mov bl, 0 ; allow 0-byte disp 1294 <1> 1295 <1> ab40: 1296 00000922 51 <1> push cx 1297 00000923 8A4508 <1> mov al, byte [di+OPRND.num+0] 1298 00000926 B107 <1> mov cl, 7 1299 00000928 D2F8 <1> sar al, cl 1300 0000092A 59 <1> pop cx 1301 0000092B 8A6509 <1> mov ah, byte [di+OPRND.num+1] 1302 0000092E 38E0 <1> cmp al, ah 1303 00000930 7513 <1> jne ab41 ; if it's bigger than 1 byte 1304 00000932 3B450A <1> cmp ax, word [di+OPRND.num+2] 1305 00000935 750E <1> jne ab41 ; ditto 1306 00000937 B700 <1> mov bh, 0 ; no displacement 1307 00000939 0A5D08 <1> or bl, byte [di+OPRND.num+0] 1308 0000093C 740A <1> jz ab42 ; if disp = 0 and it's not (E)BP 1309 0000093E FEC7 <1> inc bh ; disp = 1 byte 1310 00000940 80C940 <1> or cl, 40h ; set MOD = 1 1311 00000943 EB03 <1> jmp short ab42 ; done 1312 <1> 1313 <1> ab41: 1314 00000945 80C980 <1> or cl, 80h ; set MOD = 2 1315 <1> 1316 <1> ab42: 1317 00000948 887D03 <1> mov byte [di+OPRND.sizedis], bh ; store displacement size 1318 0000094B 894D04 <1> mov word [di+OPRND.reg1], cx ; store MOD R/M and maybe SIB 1319 <1> 1320 <1> ; Finish up with the operand. 1321 <1> ab43: 1322 0000094E 4E <1> dec si 1323 <1> ab44: 1324 0000094F E85A6B <1> call skipwhite 1325 00000952 83C70C <1> add di, byte OPRND_size 1326 00000955 E8106B <1> call iseol? 1327 00000958 7413 <1> je ab99 ; if end of line --> 1328 0000095A 3C2C <1> cmp al, ',' 1329 0000095C 750C <1> jne ab45 ; if not comma ( ==> error) 1330 0000095E 81FF[CD01] <1> cmp di, line_out+3*OPRND_size 1331 00000962 7306 <1> jae ab45 ; if too many operands 1332 00000964 E8456B <1> call skipwhite 1333 00000967 E9E6FC <1> jmp ab02 1334 <1> 1335 <1> ab45: 1336 0000096A E99CFC <1> jmp aa24 ; error jump 1337 <1> 1338 <1> ab99: 1339 0000096D C605FF <1> mov byte [di+OPRND.flags], -1 ; end of parsing phase 1340 <1> 1341 <1> %if 0 1342 <1> For the next phase, we match the parsed arguments with the set of 1343 <1> permissible argument lists for the opcode. The first match wins. 1344 <1> Therefore the argument lists should be ordered such that the 1345 <1> cheaper ones come first. 1346 <1> 1347 <1> There is a tricky issue regarding sizes of memory references. 1348 <1> Here are the rules: 1349 <1> ; 1. If a memory reference is given with a size, then it's OK. 1350 <1> 2. If a memory reference is given without a size, but some 1351 <1> other argument is a register (which implies a size), 1352 <1> then the memory reference inherits that size. 1353 <1> ; Exceptions: OP_CL does not imply a size (it's the shift counter) 1354 <1> OP_SHOSIZ 1355 <1> 3. If 1 and 2 do not apply, but this is the last possible argument 1356 <1> list, and if the argument list requires a particular size, then 1357 <1> that size is used. 1358 <1> 4. In all other cases, flag an error. 1359 <1> %endif 1360 <1> 1361 <1> ac01: 1362 00000970 31C0 <1> xor ax, ax 1363 00000972 BF[D14A] <1> mov di, rmaddr 1364 00000975 B90700 <1> mov cx, 7 1365 00000978 F3AB <1> rep stosw ; clear variant-specific variables 1366 0000097A 8B36[CF4A] <1> mov si, word [mneminfo] ; -> the next argument variant 1367 <1> %if _ASM_ESCAPE_USED 1368 <1> xor bx, bx ; cx:bx = counter of ASM_ESCAPEs 1369 <1> %endif 1370 <1> ; Parse the variant's assembler table entry 1371 <1> ; si-> next argument variant 1372 <1> ; variant-specific variables cleared 1373 <1> ; cx:bx = 0 1374 <1> 1375 <1> ac02: 1376 0000097E AC <1> lodsb 1377 <1> %if _ASM_ESCAPE_USED 1378 <1> cmp al, ASM_ESCAPE 1379 <1> jne .notescape 1380 <1> add bx, ASM_ESCAPE 1381 <1> ;adc cx, byte 0 ; (silly) 1382 <1> jc ac04 ; if this branches, too many escapes --> 1383 <1> jmp short ac02 1384 <1> .notescape: 1385 <1> %endif 1386 0000097F 2CF5 <1> sub al, ASM_MACH1 1387 00000981 7216 <1> jb ac05 ; if no more special bytes 1388 00000983 3C06 <1> cmp al, ASM_LOCKABLE-ASM_MACH1 1389 00000985 7408 <1> je ac03 ; if ASM_LOCKABLE 1390 00000987 770D <1> ja ac04 ; if ASM_END or another (--> error) 1391 00000989 40 <1> inc ax 1392 0000098A A2[D94A] <1> mov byte [dismach], al ; save machine type 1393 0000098D EBEF <1> jmp short ac02 ; back for next byte 1394 <1> ac03: 1395 0000098F 800E[DD4A]01 <1> or byte [varflags], VAR_LOCKABLE 1396 00000994 EBE8 <1> jmp short ac02 ; back for next byte 1397 <1> 1398 <1> ac04: 1399 00000996 E914FC <1> jmp aa13a ; error 1400 <1> 1401 <1> ; Get and unpack the word. 1402 <1> ac05: 1403 00000999 4E <1> dec si 1404 0000099A AD <1> lodsw 1405 0000099B 86C4 <1> xchg al, ah ; put into little-endian order 1406 0000099D 31D2 <1> xor dx, dx 1407 <1> %if _ASM_ESCAPE_USED 1408 <1> add ax, bx ; add in the ASM_ESCAPE adjustment 1409 <1> adc dx, cx ; account for overflow (cx = 0) 1410 <1> %endif 1411 0000099F BB5100 <1> mov bx, ASMMOD 1412 000009A2 F7F3 <1> div bx ; ax = a_opcode; dx = index into opindex 1413 000009A4 A3[DE4A] <1> mov word [a_opcode], ax ; save ax 1414 000009A7 A3[E14A] <1> mov word [a_opcode2], ax ; save the second copy 1415 000009AA 3DDF00 <1> cmp ax, 0DFh ; a coprocessor instruction ? 1416 000009AD 7717 <1> ja ac05a 1417 000009AF 3CD8 <1> cmp al, 0D8h 1418 000009B1 7213 <1> jb ac05a ; if no coprocessor instruction --> 1419 000009B3 800E[DA4A]01 <1> or byte [dmflags], DM_COPR ; flag it as an x87 instruction 1420 000009B8 88C4 <1> mov ah, al ; ah = low order byte of opcode 1421 000009BA AC <1> lodsb ; get extra byte 1422 000009BB A2[D34A] <1> mov byte [regmem], al ; save it in regmem 1423 000009BE A3[E14A] <1> mov word [a_opcode2], ax ; save this for obsolete-instruction detection 1424 000009C1 800E[DD4A]02 <1> or byte [varflags], VAR_MODRM ; flag its presence 1425 <1> ac05a: 1426 000009C6 8936[CF4A] <1> mov [mneminfo], si ; save si back again 1427 000009CA 89D6 <1> mov si, dx 1428 000009CC 8A9C[5815] <1> mov bl, byte [opindex+si] 1429 000009D0 01D3 <1> add bx, dx ; adjust to get correct index into oplists 1430 000009D2 8DB7[0000] <1> lea si, [oplists+bx] ; si = the address of our operand list 1431 000009D6 BF[A901] <1> mov di, line_out 1432 <1> 1433 <1> ; Begin loop over operands. 1434 <1> ; [a_opcode] etc set for opcode 1435 <1> ; si-> operand list 1436 <1> ; di-> next parsed operand 1437 <1> ; [mneminfo]-> mnemonic's next variant in assembler table 1438 <1> ac06: 1439 000009D9 AC <1> lodsb ; get next operand byte 1440 000009DA 3C00 <1> cmp al, 0 1441 000009DC 7434 <1> je ac10 ; if end of list 1442 000009DE 803DFF <1> cmp byte [di+OPRND.flags], -1 1443 000009E1 742C <1> je ac01_j1 ; if too few operands were given 1444 000009E3 3C40 <1> cmp al, OP_SIZE 1445 000009E5 7208 <1> jb ac07 ; if no size needed 1446 <1> %if 0 1447 <1> mov ah, 0 1448 <1> mov cl, 4 1449 <1> shl ax, cl ; move bits 4..7 (size) to ah (OP_1632=5, OP_8=6, OP_16=7, ...) 1450 <1> shr al, cl ; move bits 0..3 back 1451 <1> %else 1452 000009E7 D410 <1> aam 16 ; ax=00XY -> ax=0X0Y 1453 <1> %endif 1454 000009E9 8826[E04A] <1> mov byte [a_reqsize], ah ; save it away 1455 000009ED EB02 <1> jmp short ac08 1456 <1> 1457 <1> ac07: ; al = OP_M64.. 1458 000009EF 040E <1> add al, 8*2-2 ; adjust for the 8 start entries in asm_jmp8 1459 <1> 1460 <1> ac08: 1461 000009F1 98 <1> cbw 1462 000009F2 93 <1> xchg ax, bx ; now bx contains the offset 1463 000009F3 8B8F[374B] <1> mov cx, word [asm_jmp1+bx] ; subroutine address 1464 000009F7 D1EB <1> shr bx,1 1465 000009F9 8A87[104B] <1> mov al, byte [bittab+bx] 1466 000009FD 8405 <1> test al, byte [di+OPRND.flags] 1467 000009FF 740E <1> jz ac09 ; if no required bits are present 1468 00000A01 FFD1 <1> call cx ; call its specific routine 1469 00000A03 817CFF565A <1> cmp word [si-1], (OP_1632|OP_R)<<8|(OP_1632|OP_R_MOD) 1470 00000A08 74CF <1> je ac06 ; (hack) for IMUL instruction 1471 00000A0A 83C70C <1> add di, byte OPRND_size ; next operand 1472 <1> ac06_j1: 1473 00000A0D EBCA <1> jmp short ac06 ; back for more 1474 <1> 1475 <1> ac09: 1476 <1> ac01_j1: 1477 00000A0F E95EFF <1> jmp ac01 ; back to next possibility 1478 <1> 1479 <1> ; End of operand list. 1480 <1> ac10: 1481 00000A12 803DFF <1> cmp byte [di+OPRND.flags], -1 1482 00000A15 75F8 <1> jne ac09 ; if too many operands were given 1483 <1> 1484 <1> ; Final check on sizes 1485 00000A17 A0[DD4A] <1> mov al, byte [varflags] 1486 00000A1A A810 <1> test al, VAR_SIZ_NEED 1487 00000A1C 7414 <1> jz ac12 ; if no size needed 1488 00000A1E A804 <1> test al, VAR_SIZ_GIVN 1489 00000A20 7510 <1> jnz ac12 ; if a size was given 1490 00000A22 A808 <1> test al, VAR_SIZ_FORCD 1491 00000A24 74E9 <1> jz ac09 ; if the size was not forced ( ==> reject) 1492 00000A26 8B36[CF4A] <1> mov si, word [mneminfo] 1493 00000A2A 803CFF <1> cmp byte [si], ASM_END 1494 00000A2D 7403 <1> je ac12 ; if this is the last one 1495 <1> ac11: 1496 00000A2F E97BFB <1> jmp aa13a ; it was not, error --> (not a retry) 1497 <1> 1498 <1> ; Check other prefixes. 1499 <1> ac12: 1500 00000A32 A0[CD4A] <1> mov al, byte [aa_saved_prefix] 1501 00000A35 3C00 <1> cmp al, 0 1502 00000A37 7421 <1> je ac14 ; if no saved prefixes to check 1503 00000A39 3CF0 <1> cmp al, 0F0h 1504 00000A3B 7509 <1> jne ac13 ; if it's a rep prefix 1505 00000A3D F606[DD4A]01 <1> test byte [varflags], VAR_LOCKABLE 1506 00000A42 74EB <1> jz ac11 ; if this variant is not lockable, error --> 1507 00000A44 EB14 <1> jmp short ac14 ; done 1508 <1> 1509 <1> ac13: 1510 00000A46 A1[DE4A] <1> mov ax, word [a_opcode] ; check if opcode is OK for rep{,z,nz} 1511 00000A49 24FE <1> and al, ~1 ; clear low order bit (MOVSW -> MOVSB) 1512 <1> 1513 00000A4B 3DFF00 <1> cmp ax, 0FFh 1514 00000A4E 77DF <1> ja ac11 ; if it's not a 1-byte instruction, error --> 1515 00000A50 BF[0704] <1> mov di, replist ; list of instructions that go with rep 1516 00000A53 B90700 <1> mov cx, REP_LEN ; scan all (REP + REPxx) 1517 00000A56 F2AE <1> repne scasb 1518 00000A58 75D5 <1> jne ac11 ; if it's not among them, error --> 1519 <1> 1520 <1> ac14: 1521 00000A5A F606[CC4A]10 <1> test byte [asm_mn_flags], AMF_MSEG 1522 00000A5F 7412 <1> jz ac15 ; if no segment prefix before mnemonic --> 1523 00000A61 A1[DE4A] <1> mov ax, word [a_opcode] ; check if opcode allows this 1524 00000A64 3DFF00 <1> cmp ax, 0FFh 1525 00000A67 77C6 <1> ja ac11 ; if it's not a 1-byte instruction, error --> 1526 00000A69 BF[FE03] <1> mov di, segprfxtab 1527 00000A6C B90900 <1> mov cx, SEGP_LEN 1528 00000A6F F2AE <1> repne scasb 1529 00000A71 75BC <1> jne ac11 ; if it's not in the list, error --> 1530 <1> 1531 <1> ac15: 1532 00000A73 8B1E[D54A] <1> mov bx, word [immaddr] 1533 00000A77 09DB <1> or bx, bx 1534 00000A79 740C <1> jz ac16 ; if no immediate data 1535 00000A7B A0[DC4A] <1> mov al, byte [opsize] 1536 00000A7E F6D8 <1> neg al 1537 00000A80 D0E0 <1> shl al, 1 1538 00000A82 844707 <1> test al, byte [bx+7] 1539 00000A85 75A8 <1> jnz ac11 ; if the immediate data was too big, error --> 1540 <1> 1541 <1> ; Put the instruction together 1542 <1> ; (maybe is this why they call it an assembler) 1543 <1> 1544 <1> ; First, the prefixes (including preceding WAIT instruction) 1545 <1> ac16: 1546 <1> _386_PM_o32 ; mov edi, dword [a_addr] 1547 00000A87 8B3E[9E02] <1> mov di, word [a_addr] 1548 00000A8B 8E06[A202] <1> mov es, word [a_addr+4] 1549 00000A8F F606[CC4A]02 <1> test byte [asm_mn_flags], AMF_WAIT 1550 00000A94 7403 <1> jz .nowaitprefix ; if no wait instruction beforehand 1551 00000A96 B09B <1> mov al, 9Bh 1552 <1> _386_PM_a32 1553 00000A98 AA <1> stosb 1554 <1> .nowaitprefix: 1555 <1> 1556 00000A99 A0[CD4A] <1> mov al,[aa_saved_prefix] 1557 00000A9C 84C0 <1> test al, al 1558 00000A9E 7401 <1> jz .noprefix ; if no LOCK or REP prefix 1559 <1> _386_PM_a32 1560 00000AA0 AA <1> stosb 1561 <1> .noprefix: 1562 <1> 1563 <1> ;--- a 67h address size prefix is needed 1564 <1> ;--- 1. for CS16: if AMF_ADDR=1 and AMF_A32=1 1565 <1> ;--- 2. for CS32: if AMF_ADDR=1 and AMF_A32=0 1566 <1> 1567 00000AA1 A0[CC4A] <1> mov al, byte [asm_mn_flags] 1568 00000AA4 A880 <1> test al, AMF_ADDR 1569 00000AA6 7407 <1> jz .noaddressprefix 1570 00000AA8 2404 <1> and al, AMF_A32 1571 <1> %if _PM 1572 <1> or al, byte [bCSAttr] 1573 <1> jz .noaddressprefix ; if 16-bit CS and 16-bit addressing --> 1574 <1> cmp al, AMF_A32| 40h 1575 <1> jz .noaddressprefix ; if 32-bit CS and 32-bit addressing --> 1576 <1> %else 1577 00000AAA 7403 <1> jz .noaddressprefix ; 16-bit addressing in RM --> 1578 <1> %endif 1579 <1> ; Otherwise, the CS and addressing bitness mismatch. Write a prefix. 1580 00000AAC B067 <1> mov al, 67h 1581 <1> _386_PM_a32 1582 00000AAE AA <1> stosb ; store address size prefix 1583 <1> .noaddressprefix: 1584 <1> 1585 <1> ;--- a 66h data size prefix is needed 1586 <1> ;--- for CS16: if VAR_D32 == 1 or AMF_D32 == 1 1587 <1> ;--- for CS32: if VAR_D16 == 1 or AMF_D16 == 1 1588 <1> 1589 00000AAF 8A26[CC4A] <1> mov ah, byte [asm_mn_flags] 1590 00000AB3 A0[DD4A] <1> mov al, byte [varflags] 1591 <1> %if _PM 1592 <1> test byte [bCSAttr], 40h 1593 <1> jz .dataprefix_rm 1594 <1> test ax, VAR_D16|(AMF_D16<<8) 1595 <1> jnz .dataprefix 1596 <1> jmp short .nodataprefix 1597 <1> .dataprefix_rm: 1598 <1> %endif 1599 00000AB6 A94001 <1> test ax, VAR_D32|(AMF_D32<<8) 1600 00000AB9 7403 <1> jz .nodataprefix 1601 <1> .dataprefix: 1602 00000ABB B066 <1> mov al, 66h 1603 <1> _386_PM_a32 1604 00000ABD AA <1> stosb ; store operand size prefix 1605 <1> .nodataprefix: 1606 <1> 1607 00000ABE A0[CE4A] <1> mov al, [aa_seg_pre] 1608 00000AC1 3C00 <1> cmp al, 0 1609 00000AC3 740A <1> je ac22 ; if no segment prefix 1610 <1> _386_PM_a32 1611 00000AC5 AA <1> stosb 1612 00000AC6 3C64 <1> cmp al, 64h 1613 00000AC8 7205 <1> jb ac22 ; if not 64 or 65 (FS or GS) --> 1614 00000ACA 800E[CC4A]20 <1> or byte [asm_mn_flags], AMF_FSGS ; flag it 1615 <1> ac22: 1616 <1> 1617 <1> ; Now emit the instruction itself. 1618 00000ACF A1[DE4A] <1> mov ax, word [a_opcode] 1619 00000AD2 89C3 <1> mov bx, ax 1620 00000AD4 81EB4002 <1> sub bx, 240h 1621 00000AD8 7317 <1> jae ac23 ; if 576.. (AGRP) --> 1622 00000ADA 3D0002 <1> cmp ax, 200h 1623 00000ADD 7229 <1> jb ac24 ; if regular instruction --> 1624 00000ADF 800E[DA4A]01 <1> or byte [dmflags], DM_COPR ; flag it as an x87 instruction 1625 00000AE4 2438 <1> and al, 38h ; get register part 1626 00000AE6 0806[D34A] <1> or byte [regmem], al 1627 00000AEA 93 <1> xchg ax, bx ; mov ax, bx (the low bits of bx are good) 1628 00000AEB 2407 <1> and al, 7 1629 00000AED 0CD8 <1> or al, 0D8h 1630 00000AEF EB20 <1> jmp short ac25 ; on to decoding the instruction 1631 <1> 1632 <1> ac23: 1633 00000AF1 800E[DD4A]02 <1> or byte [varflags], VAR_MODRM ; flag presence of ModR/M byte 1634 00000AF6 B103 <1> mov cl, 3 ; one instruction of a group 1635 00000AF8 D3EB <1> shr bx, cl ; separate AGRP()'s num part 1636 00000AFA 2407 <1> and al, 7 ; separate ModR/M register value 1637 00000AFC D2E0 <1> shl al, cl 1638 00000AFE 0806[D34A] <1> or byte [regmem], al ; fix ModR/M byte 1639 00000B02 D1E3 <1> shl bx, 1 1640 00000B04 8B87[DD00] <1> mov ax, word [agroups+bx] ; get actual opcode 1641 <1> 1642 <1> ac24: 1643 00000B08 84E4 <1> test ah, ah 1644 00000B0A 7405 <1> jz ac25 ; if no 0Fh first --> 1645 00000B0C 50 <1> push ax ; store a 0Fh 1646 00000B0D B00F <1> mov al, 0Fh 1647 <1> _386_PM_a32 1648 00000B0F AA <1> stosb 1649 00000B10 58 <1> pop ax 1650 <1> ac25: 1651 00000B11 0A06[DB4A] <1> or al, byte [opcode_or] ; put additional bits into the opcode 1652 <1> _386_PM_a32 1653 00000B15 AA <1> stosb ; store the op code itself 1654 <1> 1655 <1> ; Now store the extra stuff that comes with the instruction. 1656 00000B16 A1[D34A] <1> mov ax, word [regmem] 1657 00000B19 F606[DD4A]02 <1> test byte [varflags], VAR_MODRM 1658 00000B1E 740B <1> jz ac26 ; if no ModR/M --> 1659 <1> _386_PM_a32 1660 00000B20 AA <1> stosb ; store the ModR/M byte 1661 00000B21 F606[CC4A]08 <1> test byte [asm_mn_flags], AMF_SIB 1662 00000B26 7403 <1> jz ac26 ; if no SIB --> 1663 00000B28 88E0 <1> mov al, ah 1664 <1> _386_PM_a32 1665 00000B2A AA <1> stosb ; store the SIB byte, too 1666 <1> ac26: 1667 <1> 1668 00000B2B 8B1E[D14A] <1> mov bx, word [rmaddr] 1669 00000B2F 85DB <1> test bx, bx 1670 00000B31 740A <1> jz ac27 ; if no offset associated with the R/M --> 1671 <1> _386_PM_o32 ; xor ecx, ecx 1672 00000B33 31C9 <1> xor cx, cx 1673 00000B35 8A4F03 <1> mov cl, byte [bx+OPRND.sizedis] 1674 <1> _386_PM_o32 ; lea esi, [bx+OPRND.num] 1675 00000B38 8D7708 <1> lea si, [bx+OPRND.num] 1676 <1> _386_PM_a32 1677 00000B3B F3A4 <1> rep movsb ; store the R/M offset (or memory offset) 1678 <1> ac27: 1679 <1> 1680 <1> ; Now store immediate data 1681 00000B3D 8B1E[D54A] <1> mov bx, word [immaddr] 1682 00000B41 85DB <1> test bx, bx 1683 00000B43 740B <1> jz ac28 ; if no immediate data --> 1684 <1> _386_PM_o32 ; xor ecx, ecx 1685 00000B45 31C9 <1> xor cx, cx 1686 00000B47 8A0E[DC4A] <1> mov cl, byte [opsize] 1687 <1> _386_PM_o32 ; lea esi, [bx+OPRND.num] 1688 00000B4B 8D7708 <1> lea si, [bx+OPRND.num] 1689 <1> _386_PM_a32 1690 00000B4E F3A4 <1> rep movsb 1691 <1> ac28: 1692 <1> 1693 <1> ; Now store additional bytes (needed for, e.g., enter instruction 1694 <1> ; and far memory address) 1695 00000B50 8B1E[D74A] <1> mov bx, word [xxaddr] 1696 00000B54 85DB <1> test bx, bx 1697 00000B56 7409 <1> jz ac29 ; if no additional data --> 1698 <1> _386_PM_o32 ; lea esi, [bx+OPRND.numadd] 1699 00000B58 8D7704 <1> lea si, [bx+OPRND.numadd] 1700 <1> _386_PM_o32 ; xor eax, eax 1701 00000B5B 31C0 <1> xor ax, ax 1702 00000B5D AC <1> lodsb 1703 <1> _386_PM_o32 ; xchg eax, ecx 1704 00000B5E 91 <1> xchg ax, cx ; (mov cx, ax) 1705 <1> _386_PM_a32 1706 00000B5F F3A4 <1> rep movsb 1707 <1> ac29: 1708 <1> 1709 <1> ; Done emitting. Update assembler address offset. 1710 00000B61 16 <1> push ss 1711 00000B62 07 <1> pop es ; restore es 1712 <1> _386_PM_o32 ; mov dword [a_addr], edi 1713 00000B63 893E[9E02] <1> mov word [a_addr], di 1714 <1> 1715 <1> ; Compute machine type. 1716 00000B67 803E[D94A]03 <1> cmp byte [dismach], 3 1717 00000B6C 7313 <1> jae ac31 ; if we already know a 386 is needed 1718 00000B6E F606[CC4A]25 <1> test byte [asm_mn_flags], AMF_D32 | AMF_A32 | AMF_FSGS 1719 00000B73 7507 <1> jnz ac30 ; if 386 --> 1720 00000B75 F606[DD4A]40 <1> test byte [varflags], VAR_D32 1721 00000B7A 7405 <1> jz ac31 ; if not 386 --> 1722 <1> ac30: 1723 00000B7C C606[D94A]03 <1> mov byte [dismach], 3 1724 <1> ac31: 1725 00000B81 BF[E34A] <1> mov di, a_opcode2+2 ; info on this instruction 1726 00000B84 E8762E <1> call showmach ; get machine message into si, length into cx 1727 00000B87 E308 <1> jcxz ac33 ; if no message 1728 <1> 1729 <1> ac32: 1730 00000B89 BF[A901] <1> mov di, line_out 1731 00000B8C F3A4 <1> rep movsb ; copy the line to line_out 1732 00000B8E E8A569 <1> call putsline_crlf 1733 <1> 1734 <1> ac33: 1735 00000B91 E921F8 <1> jmp aa01 ; back for the next input line 1736 <1> 1737 <1> %if 0 1738 <1> ; This is debugging code. It assumes that the original value 1739 <1> ; of a_addr is on the top of the stack. 1740 <1> pop si ; get orig. a_addr 1741 <1> mov ax, word [a_addr+4] 1742 <1> mov word [u_addr], si 1743 <1> mov word [u_addr+4], ax ; (doesn't work with 32-bit CS) 1744 <1> mov bx, word [a_addr] 1745 <1> sub bx, si 1746 <1> mov di, line_out 1747 <1> mov cx, 10 1748 <1> mov al, ' ' 1749 <1> rep stosb 1750 <1> mov ds, word [a_addr+4] 1751 <1> 1752 <1> ax1: lodsb 1753 <1> call hexbyte ; display the generated bytes 1754 <1> dec bx 1755 <1> jnz ax1 1756 <1> push ss 1757 <1> pop ds 1758 <1> call putsline_crlf 1759 <1> mov byte [disflags], 0 1760 <1> call disasm ; disassemble the new instruction 1761 <1> jmp aa01 ; back to next input line 1762 <1> %endif 1763 <1> 1764 <1> ; Routines to check for specific operand types. 1765 <1> ; Upon success, the routine returns. 1766 <1> ; Upon failure, it pops the return address and jumps to ac01. 1767 <1> ; The routines must preserve si and di. 1768 <1> 1769 <1> ; OP_RM, OP_M, OP_R_MOD: form MOD R/M byte. 1770 <1> aop_rm: 1771 <1> aop_m: 1772 <1> aop_r_mod: 1773 00000B94 E86E02 <1> call ao90 ; form reg/mem byte 1774 00000B97 EB30 <1> jmp short ao07 ; go to the size check 1775 <1> 1776 <1> ; OP_R: register. 1777 <1> aop_r: 1778 00000B99 8A4504 <1> mov al, byte [di+OPRND.reg1] ; register number 1779 00000B9C 2407 <1> and al, 7 1780 00000B9E B103 <1> mov cl, 3 1781 00000BA0 D2E0 <1> shl al, cl ; shift it into place 1782 00000BA2 0806[D34A] <1> or byte [regmem], al ; put it into the reg/mem byte 1783 00000BA6 EB21 <1> jmp short ao07 ; go to the size check 1784 <1> 1785 <1> ; OP_R_ADD: register, added to the instruction. 1786 <1> aop_r_add: 1787 00000BA8 8A4504 <1> mov al, byte [di+OPRND.reg1] 1788 00000BAB 2407 <1> and al, 7 1789 00000BAD A2[DB4A] <1> mov byte [opcode_or], al ; put it there 1790 00000BB0 EB17 <1> jmp short ao07 ; go to the size check 1791 <1> 1792 <1> ; OP_IMM: immediate data. 1793 <1> aop_imm: 1794 00000BB2 893E[D54A] <1> mov word [immaddr], di ; save the location of this 1795 00000BB6 EB11 <1> jmp short ao07 ; go to the size check 1796 <1> 1797 <1> ; OP_MOFFS: just the memory offset 1798 <1> aop_moffs: 1799 00000BB8 F60502 <1> test byte [di+OPRND.flags], ARG_MODRM 1800 00000BBB 7547 <1> jnz ao11 ; if MOD R/M byte ( ==> reject) 1801 00000BBD 893E[D14A] <1> mov word [rmaddr], di ; save the operand pointer 1802 00000BC1 EB06 <1> jmp short ao07 ; go to the size check 1803 <1> 1804 <1> ; OP_AX: check for AL/AX/EAX 1805 <1> aop_ax: 1806 00000BC3 F6450407 <1> test byte [di+OPRND.reg1], 7 1807 00000BC7 753B <1> jnz ao11 ; if wrong register, reject --> 1808 <1> ; jmp short ao07 ; go to the size check 1809 <1> 1810 <1> ; Size check 1811 <1> ao07: 1812 00000BC9 800E[DD4A]10 <1> or byte [varflags], VAR_SIZ_NEED 1813 00000BCE A0[E04A] <1> mov al, byte [a_reqsize] 1814 00000BD1 2C05 <1> sub al, 5 ; OP_1632 >> 4 1815 00000BD3 7C32 <1> jl ao12 ; if OP_ALL 1816 00000BD5 7440 <1> je ao13 ; if OP_1632 1817 <1> ; OP_8 = 1, OP_16 = 2, OP_32 = 3, OP_64 = 4 1818 00000BD7 04FD <1> add al, -3 1819 00000BD9 1403 <1> adc al, 3 ; convert 3 --> 4 and 4 --> 5 1820 <1> ao08: 1821 00000BDB 800E[DD4A]18 <1> or byte [varflags], VAR_SIZ_FORCD| VAR_SIZ_NEED 1822 <1> ao08_1: 1823 00000BE0 8A5D02 <1> mov bl, byte [di+OPRND.sizearg] 1824 00000BE3 84DB <1> test bl, bl 1825 00000BE5 7409 <1> jz ao09 ; if no size given 1826 00000BE7 800E[DD4A]04 <1> or byte [varflags], VAR_SIZ_GIVN 1827 00000BEC 38D8 <1> cmp al, bl 1828 00000BEE 7514 <1> jne ao11 ; if sizes conflict, reject --> 1829 <1> ao09: 1830 00000BF0 3A06[DC4A] <1> cmp al, byte [opsize] 1831 00000BF4 740D <1> je ao10 ; if sizes agree --> 1832 00000BF6 8606[DC4A] <1> xchg al, byte [opsize] 1833 00000BFA 3C00 <1> cmp al, 0 1834 00000BFC 7506 <1> jne ao11 ; if sizes disagree, reject --> 1835 00000BFE 800E[DD4A]04 <1> or byte [varflags], VAR_SIZ_GIVN ; added in DEBUG/X 1.18 1836 <1> ao10: 1837 00000C03 C3 <1> retn 1838 <1> 1839 <1> ao11: 1840 <1> ao50_j1: 1841 00000C04 E9EB01 <1> jmp ao50 ; reject 1842 <1> 1843 <1> ; OP_ALL - Allow all sizes. 1844 <1> ao12: 1845 00000C07 8A4502 <1> mov al, byte [di+OPRND.sizearg] 1846 00000C0A 3C01 <1> cmp al, 1 1847 00000C0C 7424 <1> je ao15 ; if byte 1848 00000C0E 720A <1> jb ao14 ; if unknown 1849 00000C10 800E[DB4A]01 <1> or byte [opcode_or], 1 ; set bit in instruction 1850 00000C15 EB03 <1> jmp short ao14 ; if size is 16 or 32 1851 <1> 1852 <1> ; OP_1632 - word or dword. 1853 <1> ao13: 1854 00000C17 8A4502 <1> mov al, byte [di+OPRND.sizearg] 1855 <1> ao14: 1856 00000C1A 84C0 <1> test al, al 1857 00000C1C 741C <1> jz ao16 ; if still unknown 1858 00000C1E 3C02 <1> cmp al, 2 1859 00000C20 7507 <1> jne ao15_1 ; if word 1860 00000C22 800E[DD4A]20 <1> or byte [varflags], VAR_D16 1861 00000C27 EB09 <1> jmp short ao15 1862 <1> ao15_1: 1863 00000C29 3C04 <1> cmp al, 4 1864 00000C2B 75D7 <1> jne ao11 ; if not dword 1865 00000C2D 800E[DD4A]40 <1> or byte [varflags], VAR_D32 ; set flag 1866 <1> ao15: 1867 00000C32 A2[DC4A] <1> mov byte [opsize], al 1868 00000C35 800E[DD4A]04 <1> or byte [varflags], VAR_SIZ_GIVN 1869 <1> ao16: 1870 00000C3A C3 <1> retn 1871 <1> 1872 <1> ; OP_M64 - 64-bit memory reference. 1873 <1> ; OP_MFLOAT - single-precision floating point memory reference. 1874 <1> ; OP_MDOUBLE - double-precision floating point memory reference. 1875 <1> ; OP_M80 - 80-bit memory reference. 1876 <1> ; OP_MXX - memory reference, size unknown. 1877 <1> ; OP_FARMEM - far memory pointer 1878 <1> ao17: 1879 00000C3B E8C701 <1> call ao90 ; form reg/mem byte 1880 00000C3E 8A87[864B] <1> mov al, byte [asm_siznum+bx-(OP_M64+16-2)/2] 1881 00000C42 EB97 <1> jmp short ao08 ; check size 1882 <1> 1883 <1> ; OP_FARIMM - far address contained in instruction 1884 <1> ao21: 1885 00000C44 B002 <1> mov al, 2 1886 <1> %if _PM 1887 <1> test byte [bCSAttr], 40h 1888 <1> jnz ao21_1 1889 <1> %endif 1890 00000C46 837D0A00 <1> cmp word [di+OPRND.num+2], byte 0 1891 00000C4A 7407 <1> je ao22 ; if 16-bit address --> 1892 <1> ao21_1: 1893 00000C4C 800E[DD4A]40 <1> or byte [varflags], VAR_D32 1894 00000C51 B004 <1> mov al, 4 1895 <1> ao22: 1896 00000C53 C6450402 <1> mov byte [di+OPRND.numadd], 2 ; 2 additional bytes (segment part) 1897 00000C57 893E[D54A] <1> mov word [immaddr], di 1898 00000C5B A2[DC4A] <1> mov byte [opsize], al ; size of offset, 2 or 4 1899 <1> ao22a: 1900 00000C5E 893E[D74A] <1> mov word [xxaddr], di 1901 00000C62 C3 <1> retn 1902 <1> 1903 <1> ; OP_REL8 - relative address 1904 <1> ao23: 1905 00000C63 B009 <1> mov al, 9 ; short 1906 00000C65 E88F01 <1> call aasizchk ; check the size 1907 <1> _386_PM_o32 1908 00000C68 A1[9E02] <1> mov ax, word [a_addr] ; offset 1909 <1> _386_PM_o32 1910 00000C6B 40 <1> inc ax 1911 <1> _386_PM_o32 1912 00000C6C 40 <1> inc ax ; $ 1913 00000C6D 8A0E[CC4A] <1> mov cl, byte [asm_mn_flags] 1914 <1> 1915 00000C71 F6C180 <1> test cl, AMF_ADDR 1916 00000C74 7517 <1> jnz ao23aa 1917 <1> ; JxCXZ, LOOPx, LOOPZx and LOOPNZx need a 67h, not a 66h prefix 1918 00000C76 F6C141 <1> test cl, AMF_D32 | AMF_D16 1919 00000C79 7418 <1> jz ao23b ; if not JxCXZ, LOOPx 1920 00000C7B F6C101 <1> test cl, AMF_D32 1921 00000C7E 7403 <1> jz ao23a 1922 00000C80 80C904 <1> or cl, AMF_A32 1923 <1> ao23a: 1924 00000C83 80E1BE <1> and cl, ~(AMF_D32 | AMF_D16) 1925 00000C86 80C980 <1> or cl, AMF_ADDR 1926 00000C89 880E[CC4A] <1> mov byte [asm_mn_flags], cl 1927 <1> ao23aa: 1928 00000C8D 80E104 <1> and cl, AMF_A32 1929 <1> %if _PM 1930 <1> or cl, byte [bCSAttr] 1931 <1> jz ao23b ; 16-bit CS and addressing --> 1932 <1> cmp cl, AMF_A32| 40h 1933 <1> je ao23b ; 32-bit CS and addressing --> 1934 <1> %else 1935 00000C90 7401 <1> jz ao23b ; RM CS and 16-bit addressing --> 1936 <1> %endif 1937 <1> _386_PM_o32 1938 00000C92 40 <1> inc ax ; adjust $ for the prefix that will be used 1939 <1> ao23b: 1940 00000C93 89C3 <1> mov bx, ax 1941 00000C95 31C9 <1> xor cx, cx 1942 <1> _386_PM push eax 1943 <1> _386_PM pop ax 1944 <1> _386_PM pop cx 1945 00000C97 8B4508 <1> mov ax, word [di+OPRND.num+0] 1946 00000C9A 8B550A <1> mov dx, word [di+OPRND.num+2] 1947 00000C9D 29D8 <1> sub ax, bx 1948 00000C9F 19CA <1> sbb dx, cx 1949 00000CA1 884505 <1> mov byte [di+OPRND.num2], al 1950 00000CA4 B107 <1> mov cl, 7 1951 00000CA6 D2F8 <1> sar al, cl 1952 00000CA8 38E0 <1> cmp al, ah 1953 00000CAA 7535 <1> jne ao24 ; if too big, reject --> 1954 00000CAC 39D0 <1> cmp ax, dx 1955 00000CAE 7531 <1> jne ao24 ; if too big, reject --> 1956 00000CB0 C6450401 <1> mov byte [di+OPRND.numadd], 1 ; save the length 1957 00000CB4 EBA8 <1> jmp short ao22a ; save it away 1958 <1> 1959 <1> 1960 <1> ; OP_REL1632: relative jump/call to a longer address. 1961 <1> ao25: 1962 00000CB6 8B1E[9E02] <1> mov bx, word [a_addr+0] 1963 00000CBA 8B0E[A002] <1> mov cx, word [a_addr+2] 1964 00000CBE B80300 <1> mov ax, 3 1965 00000CC1 813E[DE4A]0001 <1> cmp word [a_opcode], 100h ; ??? 1966 00000CC7 7201 <1> jb ao26 1967 00000CC9 40 <1> inc ax 1968 <1> ao26: 1969 00000CCA 01C3 <1> add bx, ax 1970 00000CCC 83D100 <1> adc cx, byte 0 1971 00000CCF 8B550A <1> mov dx, word [di+OPRND.num+2] 1972 00000CD2 8A4502 <1> mov al, byte [di+OPRND.sizearg] 1973 00000CD5 84C0 <1> test al, al 1974 00000CD7 740B <1> jz ao27 ; if no size given --> 1975 00000CD9 3C0A <1> cmp al, 10 1976 00000CDB 7407 <1> je ao27 ; if "long" given --> 1977 00000CDD 3C04 <1> cmp al, 4 1978 00000CDF 740B <1> je ao27_1 ; if the size given was "dword" --> 1979 <1> ao24: 1980 <1> ao50_j2: 1981 00000CE1 E90E01 <1> jmp ao50 ; reject 1982 <1> 1983 <1> ao27: 1984 <1> %if _PM 1985 <1> test byte [bCSAttr], 40h 1986 <1> jnz ao27_1 1987 <1> %endif 1988 00000CE4 85D2 <1> test dx, dx 1989 00000CE6 75F9 <1> jnz ao24 ; if operand is too big, reject --> 1990 00000CE8 B002 <1> mov al, 2 1991 00000CEA EB11 <1> jmp short ao28 1992 <1> ao27_1: 1993 00000CEC B004 <1> mov al, 4 1994 00000CEE 800E[DD4A]40 <1> or byte [varflags], VAR_D32 1995 00000CF3 B400 <1> mov ah, 0 1996 00000CF5 50 <1> push ax 1997 00000CF6 48 <1> dec ax 1998 <1> %if _PM 1999 <1> test byte [bCSAttr], 40h 2000 <1> jz ao27_2 2001 <1> dec ax ; no prefix needed 2002 <1> ao27_2: 2003 <1> %endif 2004 00000CF7 01C3 <1> add bx, ax 2005 00000CF9 83D100 <1> adc cx, byte 0 2006 00000CFC 58 <1> pop ax 2007 <1> ao28: 2008 00000CFD 884504 <1> mov byte [di+OPRND.numadd], al ; store the size 2009 00000D00 8B4508 <1> mov ax, word [di+OPRND.num+0] 2010 00000D03 31C9 <1> xor cx, cx 2011 00000D05 29D8 <1> sub ax, bx 2012 00000D07 19CA <1> sbb dx, cx ; compute DX:AX - CX:BX 2013 00000D09 894505 <1> mov word [di+OPRND.num2+0], ax 2014 00000D0C 895507 <1> mov word [di+OPRND.num2+2], dx 2015 00000D0F 893E[D74A] <1> mov word [xxaddr], di 2016 00000D13 C3 <1> retn 2017 <1> 2018 <1> ; OP_1CHK - The assembler can ignore this one. 2019 <1> ao29: 2020 00000D14 58 <1> pop ax ; discard return address 2021 <1> ac06_j2: 2022 00000D15 E9F5FC <1> jmp ac06_j1 ; next operand 2023 <1> 2024 <1> ; OP_STI - ST(I). 2025 <1> aop_sti: 2026 00000D18 B01E <1> mov al, REG_ST ; code for ST 2027 00000D1A 8A5D05 <1> mov bl, byte [di+OPRND.reg2] 2028 00000D1D EB47 <1> jmp short ao38 ; to common code --> 2029 <1> 2030 <1> ; OP_MMX (previously was OP_ECX (used for LOOPx)) 2031 <1> aop_mmx: 2032 00000D1F B01F <1> mov al, REG_MM 2033 00000D21 EB3C <1> jmp short ao37 ; to common code --> 2034 <1> 2035 <1> ; OP_MMX_MOD 2036 <1> aop_mmx_mod: 2037 00000D23 B01F <1> mov al, REG_MM 2038 00000D25 8A5D05 <1> mov bl, byte [di+OPRND.reg2] 2039 00000D28 80CBC0 <1> or bl, 0C0h 2040 00000D2B EB39 <1> jmp short ao38 2041 <1> 2042 <1> ; OP_CR 2043 <1> aop_cr: 2044 00000D2D 8A4505 <1> mov al, byte [di+OPRND.reg2] ; get the index 2045 00000D30 3C04 <1> cmp al, 4 2046 00000D32 77AD <1> ja ao24 ; if too big, reject --> 2047 00000D34 7505 <1> jne ao32 ; if not CR4 2048 00000D36 C606[D94A]05 <1> mov byte [dismach], 5 ; CR4 is new to the 586 2049 <1> ao32: 2050 00000D3B 3C01 <1> cmp al, 1 2051 00000D3D 7506 <1> jne ao33 2052 00000D3F 807D0CFF <1> cmp byte [di+OPRND_size+OPRND.flags], -1 2053 00000D43 759C <1> jne ao24 ; reject if no other arg (can't mov CR1,xx) 2054 <1> ao33: 2055 00000D45 B020 <1> mov al, REG_CR ; code for CR 2056 00000D47 EB16 <1> jmp short ao37 ; to common code 2057 <1> 2058 <1> ; OP_DR 2059 <1> ao34: 2060 00000D49 B021 <1> mov al, REG_DR ; code for DR 2061 00000D4B EB12 <1> jmp short ao37 ; to common code 2062 <1> 2063 <1> ; OP_TR 2064 <1> ao35: 2065 00000D4D 8A4505 <1> mov al, byte [di+OPRND.reg2] ; get the index 2066 00000D50 3C03 <1> cmp al, 3 2067 00000D52 728D <1> jb ao24 ; if too small, reject --> 2068 00000D54 3C06 <1> cmp al, 6 2069 00000D56 7305 <1> jae ao36 2070 00000D58 C606[D94A]04 <1> mov byte [dismach], 4 ; TR3-5 are new to the 486 2071 <1> ao36: 2072 00000D5D B022 <1> mov al, REG_TR ; code for TR 2073 <1> 2074 <1> ; Common code for these weird registers. 2075 <1> ao37: 2076 00000D5F 8A5D05 <1> mov bl, byte [di+OPRND.reg2] 2077 00000D62 B103 <1> mov cl, 3 2078 00000D64 D2E3 <1> shl bl, cl 2079 <1> ao38: 2080 00000D66 081E[D34A] <1> or byte [regmem], bl 2081 00000D6A 800E[DD4A]02 <1> or byte [varflags], VAR_MODRM 2082 00000D6F 3A4504 <1> cmp al, byte [di+OPRND.reg1] ; check for the right numbered register 2083 00000D72 7413 <1> je ao40 ; if yes, then return 2084 <1> ao38a: 2085 00000D74 EB7C <1> jmp short ao50 ; reject --> 2086 <1> 2087 <1> ; OP_SEGREG 2088 <1> ao39: 2089 00000D76 8A4504 <1> mov al, byte [di+OPRND.reg1] 2090 00000D79 2C18 <1> sub al, 24 2091 00000D7B 3C06 <1> cmp al, 6 2092 00000D7D 73F5 <1> jae ao38a ; if not a segment register, reject --> 2093 00000D7F B103 <1> mov cl, 3 2094 00000D81 D2E0 <1> shl al, cl 2095 00000D83 0806[D34A] <1> or byte [regmem], al 2096 <1> ao40: 2097 00000D87 C3 <1> retn 2098 <1> 2099 <1> ; OP_IMMS8 - Sign-extended immediate byte (PUSH xx) 2100 <1> ao41: 2101 00000D88 8026[DD4A]EF <1> and byte [varflags], ~VAR_SIZ_NEED ; added for v1.09. Ok? 2102 00000D8D 8B4508 <1> mov ax, word [di+OPRND.num+0] 2103 00000D90 B107 <1> mov cl, 7 2104 00000D92 D2F8 <1> sar al, cl 2105 00000D94 EB05 <1> jmp short ao43 ; common code 2106 <1> 2107 <1> ; OP_IMM8 - Immediate byte 2108 <1> ao42: 2109 00000D96 8B4508 <1> mov ax, word [di+OPRND.num+0] 2110 00000D99 B000 <1> mov al, 0 2111 <1> ao43: 2112 00000D9B 38E0 <1> cmp al, ah 2113 00000D9D 7553 <1> jne ao50 ; if too big, reject --> 2114 00000D9F 3B450A <1> cmp ax, word [di+OPRND.num+2] 2115 00000DA2 754E <1> jne ao50 ; if too big, reject --> 2116 00000DA4 B001 <1> mov al, 1 2117 00000DA6 E84E00 <1> call aasizchk ; check that size == 0 or 1 2118 00000DA9 8A6508 <1> mov ah, byte [di+OPRND.num+0] ; store the byte, length 1 2119 00000DAC 894504 <1> mov word [di+OPRND.numadd], ax ; store length (0/1) + the byte 2120 00000DAF 893E[D74A] <1> mov word [xxaddr], di 2121 <1> ao43r: 2122 00000DB3 C3 <1> retn 2123 <1> 2124 <1> ; OP_SHOSIZ - force the user to declare the size of the next operand 2125 <1> ao44: 2126 00000DB4 F606[DD4A]10 <1> test byte [varflags], VAR_SIZ_NEED 2127 00000DB9 7407 <1> jz ao45 ; if no testing needs to be done 2128 00000DBB F606[DD4A]04 <1> test byte [varflags], VAR_SIZ_GIVN 2129 00000DC0 7430 <1> jz ao50 ; if size was given ( ==> reject) 2130 <1> ao45: 2131 00000DC2 8026[DD4A]FB <1> and byte [varflags], ~VAR_SIZ_GIVN ; clear the flag 2132 00000DC7 803C22 <1> cmp byte [si], OP_IMM8 2133 00000DCA 7405 <1> je ao45a ; if OP_IMM8 is next, then don't set VAR_SIZ_NEED 2134 00000DCC 800E[DD4A]10 <1> or byte [varflags], VAR_SIZ_NEED 2135 <1> ao45a: 2136 00000DD1 C606[DC4A]00 <1> mov byte [opsize], 0 2137 00000DD6 58 <1> pop ax ; discard return address 2138 00000DD7 E93BFF <1> jmp ac06_j2 ; next operand 2139 <1> 2140 <1> ; OP_1 2141 <1> ao46: 2142 00000DDA 817D070101 <1> cmp word [di+7], 101h ; check both size and value 2143 00000DDF EB0F <1> jmp short ao49 ; test it later 2144 <1> 2145 <1> ; OP_3 2146 <1> ao47: 2147 00000DE1 817D070103 <1> cmp word [di+7], 301h ; check both size and value 2148 00000DE6 EB08 <1> jmp short ao49 ; test it later 2149 <1> 2150 <1> ; OP_DX, OP_CL, OP_ST, OP_ES, ..., OP_GS 2151 <1> ao48: 2152 00000DE8 8A87[674B] <1> mov al, [asm_regnum+bx-(OP_DX+16-2)/2] 2153 <1> ao48a: 2154 00000DEC 98 <1> cbw 2155 00000DED 3B4504 <1> cmp ax, word [di+OPRND.reg1] 2156 <1> 2157 <1> ao49: 2158 00000DF0 7404 <1> je ao51 2159 <1> 2160 <1> ; Reject this operand list. 2161 <1> ao50: 2162 00000DF2 58 <1> pop ax ; discard return address 2163 00000DF3 E97AFB <1> jmp ac01 ; go back to try the next alternative 2164 <1> 2165 <1> ao51: 2166 00000DF6 C3 <1> retn 2167 <1> 2168 <1> ; AASIZCHK - Check that the size given is 0 or AL. 2169 <1> aasizchk: 2170 00000DF7 807D0200 <1> cmp byte [di+OPRND.sizearg], 0 2171 00000DFB 74F9 <1> je ao51 2172 00000DFD 384502 <1> cmp byte [di+OPRND.sizearg], al 2173 00000E00 74F4 <1> je ao51 2174 00000E02 58 <1> pop ax ; discard return address 2175 00000E03 EBED <1> jmp short ao50 ; reject this list --> 2176 <1> 2177 <1> ; Do reg/mem processing. 2178 <1> ; 2179 <1> ; INP: di-> OPRND structure 2180 <1> ; CHG: ax 2181 <1> ao90: 2182 00000E05 F60504 <1> test byte [di+OPRND.flags], ARG_JUSTREG 2183 00000E08 7516 <1> jnz ao92 ; if just register 2184 00000E0A F60502 <1> test byte [di+OPRND.flags], ARG_MODRM 2185 00000E0D 7405 <1> jz ao91 ; if no precomputed MOD R/M byte 2186 00000E0F 8B4504 <1> mov ax, word [di+OPRND.reg1] ; get the precomputed bytes 2187 00000E12 EB1A <1> jmp short ao93 ; done 2188 <1> 2189 <1> ao91: 2190 00000E14 B006 <1> mov al, 6 ; convert plain displacement to MOD R/M 2191 00000E16 F606[CC4A]04 <1> test byte [asm_mn_flags], AMF_A32 2192 00000E1B 7411 <1> jz ao93 ; if 16-bit addressing 2193 00000E1D 48 <1> dec ax 2194 00000E1E EB0E <1> jmp short ao93 ; done 2195 <1> 2196 <1> ao92: 2197 00000E20 8A4504 <1> mov al, byte [di+OPRND.reg1] ; convert register to MOD R/M 2198 <1> %if 1 2199 00000E23 3C1F <1> cmp al, REG_MM 2200 00000E25 7503 <1> jne .notmm 2201 00000E27 8A4505 <1> mov al, byte [di+OPRND.reg2] 2202 <1> .notmm: 2203 <1> %endif 2204 00000E2A 2407 <1> and al, 7 ; get low 3 bits 2205 00000E2C 0CC0 <1> or al, 0C0h 2206 <1> 2207 <1> ao93: 2208 00000E2E 0906[D34A] <1> or word [regmem], ax ; store the MOD R/M and SIB 2209 00000E32 800E[DD4A]02 <1> or byte [varflags], VAR_MODRM ; flag its presence 2210 00000E37 893E[D14A] <1> mov word [rmaddr], di ; save a pointer 2211 00000E3B C3 <1> retn ; done 2212 <1> 2213 <1> ; AAIFNUM - Determine if a number starts here 2214 <1> ; 2215 <1> ; INP: al = first character 2216 <1> ; si-> next character 2217 <1> ; OUT: CY if no number starts there 2218 <1> ; NC if a number starts there 2219 <1> ; CHG: - 2220 <1> ; 2221 <1> ; Note: Actually checks for a plus or minus sign that 2222 <1> ; is followed by a valid (hexadecimal) digit, 2223 <1> ; or just a digit without specified sign. 2224 <1> aaifnum: 2225 00000E3C 56 <1> push si 2226 00000E3D 50 <1> push ax 2227 00000E3E 3C2D <1> cmp al, '-' ; minus or plus sign ? 2228 00000E40 7404 <1> je @F 2229 00000E42 3C2B <1> cmp al, '+' 2230 00000E44 7503 <1> jne @FF ; no --> 2231 <1> @@: 2231 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.5 2231 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.6 2231 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.7 2231 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.8 2231 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.9 2231 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.10 2231 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.11 2231 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.12 2231 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.5 2231 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.6 2231 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.7 2231 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.8 2231 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.9 2231 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.10 2231 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.11 2231 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.12 2231 ****************** <1> expansion: __@@_num = 13 2232 00000E46 E86366 <1> call skipwhite ; skip sign, and (if any) blanks 2233 <1> @@: 2233 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.6 2233 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.7 2233 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.8 2233 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.9 2233 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.10 2233 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.11 2233 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.12 2233 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.13 2233 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.6 2233 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.7 2233 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.8 2233 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.9 2233 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.10 2233 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.11 2233 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.12 2233 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.13 2233 ****************** <1> expansion: __@@_num = 14 2234 00000E49 3C28 <1> cmp al, '(' 2235 00000E4B F9 <1> stc 2236 00000E4C 7404 <1> je @F 2237 00000E4E 2C30 <1> sub al, '0' 2238 00000E50 3C0A <1> cmp al, 10 2239 <1> @@: 2239 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.7 2239 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.8 2239 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.9 2239 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.10 2239 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.11 2239 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.12 2239 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.13 2239 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.14 2239 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.7 2239 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.8 2239 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.9 2239 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.10 2239 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.11 2239 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.12 2239 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.13 2239 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.14 2239 ****************** <1> expansion: __@@_num = 15 2240 00000E52 58 <1> pop ax 2241 00000E53 7208 <1> jb @F ; if a decimal digit --> 2242 <1> 2243 00000E55 50 <1> push ax 2244 00000E56 24DF <1> and al, TOUPPER 2245 00000E58 2C41 <1> sub al, 'A' 2246 00000E5A 3C06 <1> cmp al, 6 2247 00000E5C 58 <1> pop ax 2248 <1> @@: 2248 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.8 2248 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.9 2248 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.10 2248 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.11 2248 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.12 2248 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.13 2248 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.14 2248 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.15 2248 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.8 2248 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.9 2248 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.10 2248 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.11 2248 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.12 2248 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.13 2248 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.14 2248 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.15 2248 ****************** <1> expansion: __@@_num = 16 2249 00000E5D F5 <1> cmc ; carry clear <==> it's a number 2250 00000E5E 5E <1> pop si 2251 00000E5F C3 <1> retn 2252 <1> 2253 <1> 2254 <1> ; AAGETI - Get a number from the input line. 2255 <1> ; 2256 <1> ; Entry AL First character of number 2257 <1> ; SI Address of next character of number 2258 <1> ; Exit DX:BX Resulting number 2259 <1> ; CL 1 if it's a byte, 2 if a word, 4 if a dword 2260 <1> ; AL Next character not in number 2261 <1> ; SI Address of next character after that 2262 <1> ; Uses AH, CH 2263 <1> aageti: 2264 <1> ; Incorporate expression evaluator here. 2265 00000E60 3C2D <1> cmp al, '-' 2266 00000E62 7416 <1> je aag1 ; if negative number --> 2267 00000E64 3C2B <1> cmp al, '+' ; (unnecessary) plus sign ? 2268 00000E66 7503 <1> jne @F ; no --> 2269 00000E68 E84166 <1> call skipwhite ; skip it, plus blanks 2270 <1> @@: 2270 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.9 2270 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.10 2270 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.11 2270 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.12 2270 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.13 2270 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.14 2270 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.15 2270 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.16 2270 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.9 2270 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.10 2270 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.11 2270 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.12 2270 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.13 2270 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.14 2270 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.15 2270 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.16 2270 ****************** <1> expansion: __@@_num = 17 2271 00000E6B E84100 <1> call aag4 ; get the bare number 2272 00000E6E B90100 <1> mov cx, 1 ; set up cx 2273 00000E71 09D2 <1> or dx, dx 2274 00000E73 7536 <1> jnz aag2 ; if dword 2275 00000E75 08FF <1> or bh, bh 2276 00000E77 7534 <1> jnz aag3 ; if word 2277 00000E79 C3 <1> retn ; it's a byte 2278 <1> 2279 <1> aag1: 2280 00000E7A E82F66 <1> call skipwhite 2281 00000E7D E82F00 <1> call aag4 ; get the bare number 2282 00000E80 89D9 <1> mov cx, bx 2283 00000E82 09D1 <1> or cx, dx 2284 00000E84 B90100 <1> mov cx, 1 2285 00000E87 7421 <1> jz aag1a ; if -0 2286 00000E89 F7D2 <1> not dx ; negate the answer 2287 00000E8B F7DB <1> neg bx 2288 00000E8D F5 <1> cmc 2289 00000E8E 83D200 <1> adc dx, byte 0 2290 00000E91 F6C680 <1> test dh, 80h 2291 00000E94 7453 <1> jz aag7 ; if error 2292 00000E96 83FAFF <1> cmp dx, byte -1 2293 00000E99 7510 <1> jne aag2 ; if dword 2294 00000E9B F6C780 <1> test bh, 80h 2295 00000E9E 740B <1> jz aag2 ; if dword 2296 00000EA0 80FFFF <1> cmp bh, -1 2297 00000EA3 7508 <1> jne aag3 ; if word 2298 00000EA5 F6C380 <1> test bl, 80h 2299 00000EA8 7403 <1> jz aag3 ; if word 2300 <1> aag1a: 2301 <1> aag4.got_expr: 2302 00000EAA C3 <1> retn ; it's a byte 2303 <1> 2304 <1> aag2: 2305 00000EAB 41 <1> inc cx ;return: it's a dword 2306 00000EAC 41 <1> inc cx 2307 <1> aag3: 2308 00000EAD 41 <1> inc cx ;return: it's a word 2309 00000EAE C3 <1> retn 2310 <1> 2311 <1> aag4: 2312 00000EAF 3C28 <1> cmp al, '(' 2313 00000EB1 7511 <1> jne .not_expr 2314 00000EB3 AC <1> lodsb ; skip opening paren 2315 00000EB4 E85661 <1> call getexpression ; returns bx:dx = numerical value 2316 00000EB7 87DA <1> xchg bx, dx ; dx:bx = number 2317 00000EB9 E8F165 <1> call skipwh0 2318 00000EBC 3C29 <1> cmp al, ')' 2319 00000EBE AC <1> lodsb 2320 00000EBF 74E9 <1> je .got_expr 2321 00000EC1 4E <1> dec si 2322 00000EC2 EB25 <1> jmp aag7 2323 <1> 2324 <1> .not_expr: 2325 00000EC4 31DB <1> xor bx, bx ; get the basic integer 2326 00000EC6 31D2 <1> xor dx, dx 2327 00000EC8 E84C65 <1> call getnyb 2328 00000ECB 721C <1> jc aag7 ; if not a hex digit 2329 <1> aag5: 2330 00000ECD 08C3 <1> or bl, al ; add it to the number 2331 <1> @@: 2331 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.10 2331 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.11 2331 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.12 2331 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.13 2331 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.14 2331 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.15 2331 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.16 2331 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.17 2331 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.10 2331 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.11 2331 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.12 2331 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.13 2331 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.14 2331 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.15 2331 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.16 2331 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.17 2331 ****************** <1> expansion: __@@_num = 18 2332 00000ECF AC <1> lodsb 2333 00000ED0 3C5F <1> cmp al, '_' 2334 00000ED2 74FB <1> je @B 2335 00000ED4 E84065 <1> call getnyb 2336 00000ED7 72D1 <1> jc aag1a ; if done 2337 00000ED9 F6C6F0 <1> test dh, 0F0h 2338 00000EDC 750B <1> jnz aag7 ; if overflow 2339 00000EDE B90400 <1> mov cx, 4 2340 <1> aag6: 2341 00000EE1 D1E3 <1> shl bx, 1 ; shift it by 4 2342 00000EE3 D1D2 <1> rcl dx, 1 2343 00000EE5 E2FA <1> loop aag6 2344 00000EE7 EBE4 <1> jmp short aag5 2345 <1> 2346 <1> aag7: 2347 00000EE9 E90F58 <1> jmp error 2348 <1> 2349 <1> ; AACONVINDEX - Convert results from AAGETI and store index value 2350 <1> ; 2351 <1> ; Entry DX:BX,CL As in exit from AAGETI 2352 <1> ; DI Points to information record for this arg 2353 <1> ; Exit SS bits stored in [di+OPRND.index] 2354 <1> ; Uses DL 2355 <1> aaconvindex: 2356 00000EEC 80F901 <1> cmp cl, 1 2357 00000EEF 7517 <1> jne aacv1 ; if the number is too large 2358 00000EF1 80FB01 <1> cmp bl, 1 2359 00000EF4 7414 <1> je aacv2 ; if 1 2360 00000EF6 42 <1> inc dx 2361 00000EF7 80FB02 <1> cmp bl, 2 2362 00000EFA 740E <1> je aacv2 ; if 2 2363 00000EFC 42 <1> inc dx 2364 00000EFD 80FB04 <1> cmp bl, 4 2365 00000F00 7408 <1> je aacv2 ; if 4 2366 00000F02 42 <1> inc dx 2367 00000F03 80FB08 <1> cmp bl, 8 2368 00000F06 7402 <1> je aacv2 ; if 8 2369 <1> aacv1: 2370 00000F08 EBDF <1> jmp short aag7 ; error 2371 <1> 2372 <1> aacv2: 2373 00000F0A 885506 <1> mov byte [di+OPRND.index], dl ; save the value 2374 00000F0D C3 <1> retn 2375 <1> 2376 <1> ; AAGETREG - Get register for the assembler. 2377 <1> ; 2378 <1> ; Entry DI Start of register table 2379 <1> ; CX Length of register table 2380 <1> ; SI Address of first character in register name 2381 <1> ; Exit SI Updated if a register was found 2382 <1> ; BX Register number, defined as in the table below. 2383 <1> ; Uses AX, CX, DI 2384 <1> ; 2385 <1> ; Exit value of BX: 2386 <1> ; DI = rgnam816, CX = 27 DI = rgnam16, CX = 8 2387 <1> ; ---------------------- -------------------- 2388 <1> ; 0 .. 7: AL .. BH 0 .. 7: AX .. DI 2389 <1> ; 8 .. 15: AX .. DI 2390 <1> ; 16 .. 23: EAX..EDI 16 .. 23: EAX..EDI 2391 <1> ; 24 .. 29: ES .. GS 2392 <1> ; 30 .. 34: ST .. TR 2393 <1> aagetreg: 2394 00000F0E 8B04 <1> mov ax, word [si] 2395 00000F10 25DFDF <1> and ax, TOUPPER_W ; convert to upper case 2396 00000F13 3C45 <1> cmp al, 'E' ; check for EAX, etc. 2397 00000F15 7522 <1> jne aagr1 ; if not 2398 00000F17 50 <1> push ax 2399 00000F18 88E0 <1> mov al, ah 2400 00000F1A 8A6402 <1> mov ah, byte [si+2] 2401 00000F1D 80E4DF <1> and ah, TOUPPER 2402 00000F20 57 <1> push di 2403 00000F21 BF[2C4F] <1> mov di, rgnam16 2404 00000F24 51 <1> push cx 2405 00000F25 B90800 <1> mov cx, N_REGS16 2406 00000F28 F2AF <1> repne scasw 2407 00000F2A 89CB <1> mov bx, cx 2408 00000F2C 59 <1> pop cx 2409 00000F2D 5F <1> pop di 2410 00000F2E 58 <1> pop ax 2411 00000F2F 7508 <1> jne aagr1 ; if no match 2412 00000F31 46 <1> inc si 2413 00000F32 F7D3 <1> not bx 2414 00000F34 80C318 <1> add bl, 8+16 ; adjust BX 2415 00000F37 EB11 <1> jmp short aagr2 ; finish up 2416 <1> 2417 <1> aagr1: 2418 00000F39 89CB <1> mov bx, cx ; (if cx = 0, this is always reached with 2419 00000F3B F2AF <1> repne scasw ; ZF clear) 2420 00000F3D 750F <1> jne aagr3 ; if no match 2421 00000F3F 29CB <1> sub bx, cx 2422 00000F41 4B <1> dec bx 2423 00000F42 80FB10 <1> cmp bl, 16 2424 00000F45 7203 <1> jb aagr2 ; if AL .. BH or AX .. DI 2425 00000F47 80C308 <1> add bl, 8 2426 <1> aagr2: 2427 00000F4A 46 <1> inc si ; skip the register name 2428 00000F4B 46 <1> inc si 2429 00000F4C F8 <1> clc 2430 00000F4D C3 <1> retn 2431 <1> aagr3: 2432 00000F4E F9 <1> stc ; not found 2433 00000F4F C3 <1> retn 1506 %include "dd.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug D commands - Dump data 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> ; D command - hex/ASCII dump. 21 <1> ddd: 22 <1> %if _INT || _PM || _MCB || _DSTRINGS 23 00000F50 E85D49 <1> call uppercase 24 <1> %endif 25 <1> %if _DSTRINGS 26 00000F53 3C5A <1> cmp al, 'Z' ; DZ command ? 27 00000F55 7503E93301 <1> je dz ; yes --> 28 00000F5A 3C24 <1> cmp al, '$' ; D$ command ? 29 00000F5C 7503E90501 <1> je dcpm ; yes --> 30 00000F61 3C23 <1> cmp al, '#' ; D# command ? 31 00000F63 7503E91801 <1> je dcounted ; yes --> 32 00000F68 3C57 <1> cmp al, 'W' 33 00000F6A 750B <1> jne .notstring 34 00000F6C 50 <1> push ax 35 00000F6D AC <1> lodsb 36 00000F6E 3C23 <1> cmp al, '#' ; DW# command ? 37 00000F70 58 <1> pop ax 38 00000F71 7503E9FD00 <1> je dwcounted ; yes --> 39 00000F76 4E <1> dec si 40 <1> .notstring: 41 <1> %endif 42 <1> %if _INT 43 00000F77 3C49 <1> cmp al, 'I' ; DI command ? 44 00000F79 750D <1> jne .notdi 45 <1> %if 1 46 00000F7B 50 <1> push ax 47 00000F7C AC <1> lodsb 48 00000F7D 4E <1> dec si 49 00000F7E 24DF <1> and al, TOUPPER 50 00000F80 3C50 <1> cmp al, 'P' ; distinguish 'di ...' and 'd ip' 51 00000F82 58 <1> pop ax 52 00000F83 7403 <1> je .notdi 53 <1> %endif 54 00000F85 E9A901 <1> jmp gateout ; yes --> 55 <1> .notdi: 56 <1> %endif 57 <1> %if _PM 58 <1> cmp al, 'L' ; DL command ? 59 <1> jne .notdl 60 <1> jmp descout ; yes --> 61 <1> .notdl: 62 <1> cmp al, 'X' ; DX command ? 63 <1> _386 je extmem ; yes --> 64 <1> .notdx: 65 <1> %endif 66 <1> %if _MCB 67 00000F88 3C4D <1> cmp al, 'M' ; DM command ? 68 00000F8A 7503 <1> jne .notdm 69 00000F8C E95502 <1> jmp mcbout ; yes --> 70 <1> .notdm: 71 <1> %endif 72 00000F8F E81B65 <1> call skipwh0 73 00000F92 E8D364 <1> call iseol? 74 00000F95 7514 <1> jne dd1 ; if an address was given 75 <1> lastddd: 76 <1> _386_PM_o32 ; mov edx, dword [d_addr] 77 00000F97 8B16[A402] <1> mov dx, word [d_addr] ; compute range of 80h or until end of segment 78 <1> _386_PM_o32 ; mov esi, edx 79 00000F9B 89D6 <1> mov si, dx 80 00000F9D 8B1E[A802] <1> mov bx, [d_addr+4] 81 <1> _386_PM call testattrhigh 82 <1> _386_PM jnz .32 83 00000FA1 83C27F <1> add dx, byte 7Fh 84 00000FA4 731A <1> jnc dd2 85 00000FA6 83CAFF <1> or dx, byte -1 86 00000FA9 EB15 <1> jmp short dd2 87 <1> 88 <1> %if _PM 89 <1> cpu 386 90 <1> .32: 91 <1> add edx, byte 7Fh 92 <1> jnc dd2 ; if no overflow 93 <1> or edx, byte -1 94 <1> jmp short dd2 95 <1> cpu 8086 96 <1> %endif 97 <1> dd1: 98 00000FAB B98000 <1> mov cx, 80h ; default length 99 00000FAE 8B1E[6003] <1> mov bx, word [reg_ds] 100 00000FB2 E82859 <1> call getrangeX ; get address range into bx:(e)dx 101 00000FB5 E8BB64 <1> call chkeol ; expect end of line here 102 <1> 103 00000FB8 891E[A802] <1> mov word [d_addr+4], bx ; save segment (offset is saved later) 104 <1> _386_PM_o32 ; mov esi, edx 105 00000FBC 89D6 <1> mov si, dx ; bx:(e)si = start 106 <1> _386_PM_o32 ; mov edx, ecx 107 00000FBE 89CA <1> mov dx, cx ; bx:(e)dx = last 108 <1> %if _PM && 0 109 <1> jmp short dd2_1 110 <1> %endif 111 <1> 112 <1> ; Parsing is done. Print first line. 113 <1> dd2: 114 00000FC0 E89B19 <1> call handle_serial_flags_ctrl_c 115 <1> %if _PM 116 <1> call ispm 117 <1> jnz dd2_1 118 <1> cpu 286 119 <1> verr bx ; readable ? 120 <1> cpu 8086 121 <1> jz dd2_1 122 <1> %if 1 123 <1> mov dx, .errmsg 124 <1> jmp putsz 125 <1> .errmsg:asciz "Segment is not readable.",13,10 126 <1> %else 127 <1> mov bx, word [reg_ds] 128 <1> mov word [d_addr+4], bx 129 <1> %endif 130 <1> dd2_1: 131 <1> %endif 132 00000FC3 C706[E002][970F] <1> mov word [lastcmd], lastddd 133 00000FC9 A1[A802] <1> mov ax, word [d_addr+4] 134 00000FCC E82F65 <1> call hexword 135 00000FCF B03A <1> mov al, ':' 136 00000FD1 AA <1> stosb 137 <1> _386_PM_o32 ; mov eax, esi 138 00000FD2 89F0 <1> mov ax, si 139 00000FD4 24F0 <1> and al, 0F0h 140 <1> %if _PM 141 <1> call testattrhigh ; 32-bit segment ? 142 <1> jz .16 ; no --> (don't display zero high word) 143 <1> call hexword_high ; yes, display high word of address 144 <1> jmp short .common 145 <1> 146 <1> ; Insure that the high word is zero. 147 <1> .16: 148 <1> ;_386 test esi, ~0FFFFh 149 <1> ;_386 jnz .error 150 <1> _386 test edx, ~0FFFFh 151 <1> _386 jz .common 152 <1> ;.error: 153 <1> _386 mov dx, msg.ofs32 154 <1> _386 jmp putsz 155 <1> .common: 156 <1> %endif 157 00000FD6 E82565 <1> call hexword 158 00000FD9 50 <1> push ax 159 00000FDA B82020 <1> mov ax, 32<<8|32 160 00000FDD AB <1> stosw 161 00000FDE 58 <1> pop ax 162 00000FDF 8D5D30 <1> lea bx, [di+3*16] 163 00000FE2 E8BE57 <1> call prephack ; set up for faking int vectors 23 and 24 164 <1> 165 <1> ; blank the start of the line if offset isn't paragraph aligned 166 <1> dd3: 167 00000FE5 39F0 <1> cmp ax, si ; skip to position in line 168 00000FE7 740E <1> je dd4 ; if we're there yet 169 00000FE9 50 <1> push ax 170 00000FEA B82020 <1> mov ax, 32<<8|32 171 00000FED AB <1> stosw 172 00000FEE AA <1> stosb 173 00000FEF 268807 <1> mov byte [es:bx], al 174 00000FF2 43 <1> inc bx 175 00000FF3 58 <1> pop ax 176 00000FF4 40 <1> inc ax 177 00000FF5 EBEE <1> jmp short dd3 178 <1> 179 <1> ; Begin main loop over lines of output. 180 <1> dd4: 181 <1> _386_PM_o32 ; mov ecx, esi 182 00000FF7 89F1 <1> mov cx, si 183 00000FF9 80C90F <1> or cl, 0Fh 184 <1> _386_PM_o32 ; cmp ecx, edx 185 00000FFC 39D1 <1> cmp cx, dx ; compare with end address 186 00000FFE 7202 <1> jb dd5 ; if we write to the end of the line 187 <1> ;_386_PM_o32 ; mov ecx, edx 188 00001000 89D1 <1> mov cx, dx 189 <1> dd5: 190 <1> ;_386_PM_o32 ; sub ecx, esi 191 00001002 29F1 <1> sub cx, si 192 <1> ;_386_PM_o32 ; inc ecx 193 00001004 41 <1> inc cx ; cx = number of bytes to print this line 194 <1> ; up to 16.. no 32-bit register required 195 00001005 E8C457 <1> call dohack ; substitute interrupt vectors 196 00001008 8E1E[A802] <1> mov ds, word [d_addr+4] 197 <1> dd6: 198 <1> _386_PM_a32 199 0000100C AC <1> lodsb 200 0000100D E83300 <1> call dd_store ; stores number and space at es:di->, char at es:bx-> 201 00001010 E2FA <1> loop dd6 ; (16-bit. cx >= 16) 202 <1> 203 <1> dd9: 204 00001012 F7C60F00 <1> test si, 0Fh ; space out till end of line 205 00001016 7408 <1> jz dd10 206 00001018 B82020 <1> mov ax, 32<<8|32 207 0000101B AB <1> stosw 208 0000101C AA <1> stosb 209 <1> _386_PM_o32 ; inc esi 210 0000101D 46 <1> inc si 211 0000101E EBF2 <1> jmp short dd9 212 <1> 213 <1> dd10: 214 00001020 16 <1> push ss ; restore ds 215 00001021 1F <1> pop ds 216 00001022 C645E72D <1> mov byte [di-(1+(8*3))], '-' 217 00001026 E8B757 <1> call unhack 218 00001029 89DF <1> mov di, bx 219 0000102B 52 <1> push dx 220 0000102C E80765 <1> call putsline_crlf 221 0000102F 5A <1> pop dx 222 00001030 8B1E[A802] <1> mov bx, word [d_addr+4] 223 00001034 BF[A901] <1> mov di, line_out ; reset di,bx for next line 224 <1> _386_PM_o32 ; dec esi 225 00001037 4E <1> dec si 226 <1> _386_PM_o32 ; cmp esi, edx 227 00001038 39D6 <1> cmp si, dx 228 <1> _386_PM_o32 ; inc esi 229 0000103A 46 <1> inc si 230 0000103B 7283 <1> jb dd2 ; display next line --> 231 <1> dd11: 232 <1> ; This check is necessary to wrap around at FFFFh (64 KiB) 233 <1> ; for 16-bit segments instead of at FFFFFFFFh (4 GiB). 234 <1> _386_PM call testattrhigh ; 32-bit segment ? 235 <1> _386_PM jz .16 ; no --> 236 <1> _386_PM_o32 ; inc edx 237 <1> .16: 238 0000103D 42 <1> inc dx ; set up the address for the next 'D' command. 239 <1> _386_PM_o32 ; mov dword [d_addr], edx 240 0000103E 8916[A402] <1> mov word [d_addr], dx 241 00001042 C3 <1> retn 242 <1> 243 <1> 244 <1> ; Store a character into the buffer. Characters that can't 245 <1> ; be displayed are replaced by a dot. 246 <1> ; 247 <1> ; INP: al = character 248 <1> ; es:bx-> buffer for displayed characters 249 <1> ; es:di-> buffer for hexadecimal number 250 <1> ; OUT: es:bx-> behind displayed character 251 <1> ; es:di-> behind hexadecimal number and space 252 <1> ; CHG: ax 253 <1> ; STT: ds unknown 254 <1> dd_store: 255 00001043 88C4 <1> mov ah, al 256 00001045 3C20 <1> cmp al, 32 ; below blank ? 257 00001047 720E <1> jb .ctrl ; control char --> 258 00001049 3C7F <1> cmp al, 127 ; DEL ? 259 0000104B 740A <1> je .ctrl ; yes, control char --> 260 0000104D 720A <1> jb .noctrl ; below, not a control char --> 261 0000104F 36F606[7C00]04 <1> testopt [ss:options], cpdepchars ; allow CP-dependant characters ? 261 ****************** <1> expansion: adr = '[ss:options]' 261 ****************** <1> expansion: len = 12 261 ****************** <1> expansion: tf = '[' 261 ****************** <1> expansion: tb = ']' 261 ****************** <1> expansion: adr = 'ss:options' 261 ****************** <1> expansion: adr = ss:options 262 00001055 7502 <1> jnz .noctrl ; yes --> 263 <1> .ctrl: 264 00001057 B42E <1> mov ah, '.' 265 <1> .noctrl: 266 00001059 268827 <1> mov byte [es:bx], ah 267 0000105C 43 <1> inc bx 268 0000105D 51 <1> push cx 269 0000105E E8A464 <1> call hexbyte 270 00001061 59 <1> pop cx 271 00001062 B020 <1> mov al, 32 272 00001064 AA <1> stosb 273 00001065 C3 <1> retn 274 <1> 275 <1> 276 <1> %if _PM 277 <1> ; DL command 278 <1> descout: 279 <1> call skipwhite 280 <1> call getword ; get word into DX 281 <1> mov bx, dx 282 <1> call skipcomm0 283 <1> mov dx, 1 284 <1> cmp al, 13 285 <1> je .onlyone 286 <1> call uppercase 287 <1> cmp al, 'L' 288 <1> jne .notlength 289 <1> call skipcomma 290 <1> .notlength: 291 <1> call getword 292 <1> call chkeol 293 <1> .onlyone: 294 <1> inc dx ; (note js at nextdesc changed to jz) 295 <1> mov si, dx ; save count 296 <1> call ispm 297 <1> je nextdesc 298 <1> mov dx, nodesc 299 <1> jmp putsz 300 <1> desc_done: 301 <1> retn 302 <1> cpu 286 303 <1> nextdesc: 304 <1> dec si 305 <1> jz desc_done 306 <1> mov di, descr 307 <1> mov ax, bx 308 <1> call hexword 309 <1> mov di, descbase 310 <1> push di 311 <1> mov ax, "??" 312 <1> stosw 313 <1> stosw 314 <1> stosw 315 <1> stosw 316 <1> add di, byte (desclim-(descbase+8)) 317 <1> stosw 318 <1> stosw 319 <1> stosw 320 <1> stosw 321 <1> add di, byte (descattr-(desclim+8)) 322 <1> stosw 323 <1> stosw 324 <1> pop di 325 <1> ; lar ax, bx 326 <1> ; jnz skipdesc ; tell that this descriptor is invalid 327 <1> mov ax, 6 328 <1> int 31h 329 <1> jc desc_o1 330 <1> mov ax, cx 331 <1> call hexword 332 <1> mov ax, dx 333 <1> call hexword 334 <1> desc_o1: 335 <1> mov di, desclim 336 <1> _no386_jmps use16desc 337 <1> cpu 386 338 <1> lsl eax, ebx 339 <1> jnz desc_out 340 <1> push ax 341 <1> shr eax, 16 342 <1> call hexword 343 <1> pop ax 344 <1> call hexword 345 <1> lar eax, ebx 346 <1> shr eax, 8 347 <1> desc_o2: 348 <1> mov di, descattr 349 <1> call hexword 350 <1> desc_out: 351 <1> mov dx, descr 352 <1> call putsz 353 <1> add bx, byte 8 354 <1> jmp short nextdesc 355 <1> cpu 286 356 <1> use16desc: 357 <1> lsl ax, bx 358 <1> jnz desc_out 359 <1> call hexword 360 <1> mov ax, 32<<8|32 361 <1> stosw 362 <1> stosw 363 <1> lar ax, bx 364 <1> shr ax, 8 365 <1> jmp short desc_o2 366 <1> cpu 8086 367 <1> %endif 368 <1> 369 <1> %if _DSTRINGS 370 <1> ; D$ command 371 <1> dcpm: 372 00001066 C606[CE02]24 <1> mov byte [dstringtype], 36 373 0000106B C706[CF02][BC02] <1> mov word [dstringaddr], dcpm_addr 374 00001071 EB25 <1> jmp short dstring 375 <1> 376 <1> ; DW# command 377 <1> dwcounted: 378 00001073 C606[CE02]FE <1> mov byte [dstringtype], 0FEh 379 00001078 C706[CF02][C802] <1> mov word [dstringaddr], dwcount_addr 380 0000107E EB18 <1> jmp short dstring 381 <1> 382 <1> ; D# command 383 <1> dcounted: 384 00001080 C606[CE02]FF <1> mov byte [dstringtype], 0FFh 385 00001085 C706[CF02][C202] <1> mov word [dstringaddr], dcount_addr 386 0000108B EB0B <1> jmp short dstring 387 <1> 388 <1> ; DZ command 389 <1> dz: 390 0000108D C606[CE02]00 <1> mov byte [dstringtype], 0 391 00001092 C706[CF02][B602] <1> mov word [dstringaddr], dz_addr 392 <1> 393 <1> ; common code for all string commands 394 <1> dstring: 395 00001098 E81164 <1> call skipwhite 396 0000109B 3C3B <1> cmp al, ';' 397 0000109D 7404 <1> je .last 398 0000109F 3C0D <1> cmp al, 13 399 000010A1 7508 <1> jne .getaddr ; if an address was given 400 <1> .last: 401 000010A3 8B1E[CF02] <1> mov bx, word [dstringaddr] 402 <1> _386_PM_o32 ; mov edx, dword [bx] 403 000010A7 8B17 <1> mov dx, word [bx] 404 000010A9 EB12 <1> jmp short .haveaddr ; edx = offset, [bx+4] = segment 405 <1> .getaddr: 406 000010AB 8B1E[6003] <1> mov bx, word [reg_ds] 407 000010AF E88458 <1> call getaddrX ; get address into bx:(e)dx 408 000010B2 E8BE63 <1> call chkeol ; expect end of line here 409 000010B5 53 <1> push bx 410 000010B6 8B1E[CF02] <1> mov bx, word [dstringaddr] 411 000010BA 8F4704 <1> pop word [bx+4] ; save segment (offset behind string is saved later) 412 <1> .haveaddr: 413 000010BD C706[E002][A310] <1> mov word [lastcmd], dstring.last 414 000010C3 E8DD56 <1> call prephack 415 <1> _386_PM_o32 ; mov esi, edx 416 000010C6 89D6 <1> mov si, dx 417 000010C8 800E[8600]01 <1> setopt [internalflags], usecharcounter 417 ****************** <1> expansion: adr = '[internalflags]' 417 ****************** <1> expansion: len = 15 417 ****************** <1> expansion: tf = '[' 417 ****************** <1> expansion: tb = ']' 417 ****************** <1> expansion: adr = 'internalflags' 417 ****************** <1> expansion: adr = internalflags 418 000010CD C606[5602]01 <1> mov byte [ charcounter ], 1 ; initialize 419 000010D2 E8F756 <1> call dohack 420 000010D5 8E5F04 <1> mov ds, word [bx+4] ; ds:(e)si-> string 421 000010D8 36803E[CE02]FE <1> cmp byte [ss:dstringtype], 0FEh 422 000010DE 7232 <1> jb .terminated ; terminated string --> 423 000010E0 9F <1> lahf 424 <1> _386_PM_a32 425 000010E1 AC <1> lodsb ; load first byte 426 000010E2 31C9 <1> xor cx, cx 427 000010E4 88C1 <1> mov cl, al ; low byte of count 428 000010E6 9E <1> sahf 429 000010E7 7503 <1> jne .counted ; only byte count --> 430 <1> _386_PM_a32 431 000010E9 AC <1> lodsb ; load second byte 432 000010EA 88C5 <1> mov ch, al ; high byte of count 433 <1> .counted: 434 000010EC E331 <1> jcxz .done ; length zero --> 435 <1> .loop: 436 <1> _386_PM_a32 437 000010EE AC <1> lodsb ; get character 438 000010EF E80400 <1> call .char ; display 439 000010F2 E2FA <1> loop .loop ; until done --> 440 000010F4 EB29 <1> jmp short .done 441 <1> 442 <1> .char: 443 000010F6 16 <1> push ss 444 000010F7 1F <1> pop ds 445 000010F8 50 <1> push ax 446 000010F9 E8E456 <1> call unhack ; restore state 447 000010FC 58 <1> pop ax 448 000010FD 56 <1> push si 449 000010FE 51 <1> push cx 450 000010FF E88866 <1> call putc ; display 451 00001102 59 <1> pop cx 452 00001103 5E <1> pop si 453 00001104 E85718 <1> call handle_serial_flags_ctrl_c 454 00001107 E8C256 <1> call dohack 455 0000110A 8B1E[CF02] <1> mov bx, word [dstringaddr] 456 0000110E 8E5F04 <1> mov ds, word [bx+4] ; go back to special state 457 00001111 C3 <1> retn 458 <1> 459 <1> .terminated: 460 <1> _386_PM_a32 461 00001112 AC <1> lodsb ; load character 462 00001113 363A06[CE02] <1> cmp al, byte [ss:dstringtype] 463 00001118 7405 <1> je .done ; it's the terminator --> 464 0000111A E8D9FF <1> call .char ; display 465 0000111D EBF3 <1> jmp short .terminated ; and get next --> 466 <1> 467 <1> .done: 468 0000111F 16 <1> push ss 469 00001120 1F <1> pop ds ; restore ds 470 <1> _386_PM_o32 ; mov dword [bx], esi 471 00001121 8937 <1> mov word [bx], si 472 00001123 E8BA56 <1> call unhack 473 00001126 B00D <1> mov al, 13 474 00001128 E85F66 <1> call putc 475 0000112B B00A <1> mov al, 10 476 0000112D E85A66 <1> call putc 477 00001130 C3 <1> retn 478 <1> %endif 479 <1> 480 <1> %if _INT 481 <1> ; DI command 482 <1> gateout: 483 00001131 E87863 <1> call skipwhite 484 00001134 E8C962 <1> call getbyte ; get byte into DL 485 00001137 30F6 <1> xor dh, dh 486 00001139 89D3 <1> mov bx, dx 487 0000113B E84163 <1> call skipcomm0 488 0000113E BA0100 <1> mov dx, 1 489 00001141 3C0D <1> cmp al, 13 490 00001143 7451 <1> je .onlyone 491 00001145 3C3B <1> cmp al, ';' 492 00001147 744D <1> je .onlyone 493 00001149 E86447 <1> call uppercase 494 0000114C 3C4C <1> cmp al, 'L' 495 0000114E 753B <1> jne .notlength 496 00001150 E82B63 <1> call skipcomma 497 00001153 E89A62 <1> call getword ; get byte into DL 498 00001156 09D2 <1> or dx, dx 499 00001158 741A <1> jz .err 500 0000115A 81FA0001 <1> cmp dx, 100h 501 0000115E 740A <1> je .checkrange 502 00001160 50 <1> push ax 503 00001161 80E41F <1> and ah, 1Fh 504 00001164 80FC08 <1> cmp ah, 8 505 00001167 58 <1> pop ax 506 00001168 770A <1> ja .err 507 <1> .checkrange: 508 0000116A 52 <1> push dx 509 0000116B 01DA <1> add dx, bx 510 0000116D 81FA0001 <1> cmp dx, 100h 511 00001171 5A <1> pop dx 512 00001172 761F <1> jna .rangeok 513 <1> .err: 514 00001174 E98455 <1> jmp error 515 <1> 516 <1> .last: 517 00001177 31DB <1> xor bx, bx 518 00001179 8A1E[D102] <1> mov bl, byte [lastint] 519 0000117D BA0100 <1> mov dx, 1 520 00001180 FEC3 <1> inc bl 521 00001182 7512 <1> jnz .onlyone 522 00001184 C706[E002][1B03] <1> mov word [lastcmd], dmycmd 523 0000118A C3 <1> retn 524 <1> 525 <1> .notlength: 526 0000118B E87262 <1> call getbyte 527 0000118E 30F6 <1> xor dh, dh 528 00001190 28DA <1> sub dl, bl 529 00001192 42 <1> inc dx 530 <1> .rangeok: 531 00001193 E8DD62 <1> call chkeol 532 <1> .onlyone: 533 00001196 C706[E002][7711] <1> mov word [lastcmd], .last 534 0000119C E80456 <1> call prephack 535 0000119F 89D6 <1> mov si, dx ; save count 536 <1> .next: 537 000011A1 881E[D102] <1> mov byte [lastint], bl 538 000011A5 E82456 <1> call dohack 539 000011A8 BF[A901] <1> mov di, line_out 540 000011AB B8696E <1> mov ax, "in" 541 000011AE AB <1> stosw 542 000011AF B87420 <1> mov ax, "t " 543 000011B2 AB <1> stosw 544 000011B3 88D8 <1> mov al, bl 545 000011B5 E84D63 <1> call hexbyte 546 000011B8 B020 <1> mov al, 32 547 000011BA AA <1> stosb 548 <1> %if _PM 549 <1> call ispm 550 <1> jnz .rm 551 <1> cpu 286 552 <1> mov ax, 0204h 553 <1> cmp bl, 20h 554 <1> adc bh, 1 ; if below, bh = 2 555 <1> .loopexception: 556 <1> int 31h 557 <1> jc .failed 558 <1> mov ax, cx 559 <1> call hexword 560 <1> mov al, ':' 561 <1> stosb 562 <1> _386_PM_o32 ; mov eax, edx 563 <1> mov ax, dx 564 <1> cmp byte [dpmi32], 0 565 <1> jz .gate16 566 <1> call hexword_high 567 <1> .gate16: 568 <1> call hexword 569 <1> mov al, 32 570 <1> stosb 571 <1> mov ax, 0202h 572 <1> dec bh 573 <1> jnz .loopexception 574 <1> call unhack 575 <1> push bx 576 <1> call putsline_crlf 577 <1> pop bx 578 <1> inc bx 579 <1> dec si 580 <1> jnz .next 581 <1> retn 582 <1> .rm: 583 <1> %endif 584 000011BB B102 <1> mov cl, 2 585 000011BD 53 <1> push bx 586 000011BE 1E <1> push ds 587 000011BF D3E3 <1> shl bx, cl 588 000011C1 31C0 <1> xor ax, ax 589 000011C3 8ED8 <1> mov ds, ax 590 000011C5 8B4702 <1> mov ax, word [bx+2] 591 000011C8 8B17 <1> mov dx, word [bx+0] 592 000011CA 1F <1> pop ds 593 000011CB 5B <1> pop bx 594 000011CC E82F63 <1> call hexword 595 000011CF B03A <1> mov al, ':' 596 000011D1 AA <1> stosb 597 000011D2 89D0 <1> mov ax, dx 598 <1> %if _PM 599 <1> mov bh, 1 600 <1> jmp short .gate16 601 <1> 602 <1> .failed: 603 <1> call unhack 604 <1> mov dx, gatewrong 605 <1> jmp putsz 606 <1> %else 607 000011D4 E82763 <1> call hexword 608 000011D7 E80656 <1> call unhack 609 000011DA 53 <1> push bx 610 000011DB E85863 <1> call putsline_crlf 611 000011DE 5B <1> pop bx 612 000011DF 43 <1> inc bx 613 000011E0 4E <1> dec si 614 000011E1 75BE <1> jnz .next 615 000011E3 C3 <1> retn 616 <1> %endif 617 <1> %endif 618 <1> 619 <1> %if _MCB 620 <1> ; DM command 621 <1> mcbout: 622 000011E4 E8C562 <1> call skipwhite 623 000011E7 8B16[8602] <1> mov dx, word [wMCB] 624 000011EB 3C0D <1> cmp al, 13 625 000011ED 740A <1> je .lolmcb 626 000011EF 3C3B <1> cmp al, ';' 627 000011F1 7406 <1> je .lolmcb 628 000011F3 E8FA61 <1> call getword 629 000011F6 E87A62 <1> call chkeol 630 <1> .lolmcb: 631 000011F9 89D6 <1> mov si, dx 632 000011FB BF[A901] <1> mov di, line_out 633 000011FE B85053 <1> mov ax, "PS" 634 00001201 AB <1> stosw 635 00001202 B8503A <1> mov ax, "P:" 636 00001205 AB <1> stosw 637 00001206 B020 <1> mov al, 32 638 00001208 AA <1> stosb 639 00001209 A1[6402] <1> mov ax, word [pspdbe] 640 0000120C E8EF62 <1> call hexword 641 0000120F E82463 <1> call putsline_crlf ; destroys cx,dx,bx 642 00001212 B14D <1> mov cl, 'M' 643 <1> .next: 644 00001214 83FEFF <1> cmp si, byte -1 645 00001217 7405 <1> je .invmcb 646 00001219 83FE50 <1> cmp si, byte 50h 647 0000121C 7306 <1> jae .valmcb 648 <1> .invmcb: 649 0000121E BA[5435] <1> mov dx, msg.invmcbadr 650 00001221 E94B65 <1> jmp putsz 651 <1> .valmcb: 652 00001224 BF[A901] <1> mov di, line_out 653 00001227 1E <1> push ds 654 <1> %if _PM 655 <1> call setds2si 656 <1> %else 657 00001228 8EDE <1> mov ds, si 658 <1> %endif 659 0000122A 8A2E0000 <1> mov ch, byte [0000] 660 0000122E 8B1E0100 <1> mov bx, word [0001] 661 00001232 8B160300 <1> mov dx, word [0003] 662 <1> 663 00001236 89F0 <1> mov ax, si 664 00001238 E8C362 <1> call hexword ; segment address of MCB 665 0000123B B020 <1> mov al, 32 666 0000123D AA <1> stosb 667 0000123E 88E8 <1> mov al, ch 668 00001240 E8C262 <1> call hexbyte ; 'M' or 'Z' 669 00001243 B020 <1> mov al, 32 670 00001245 AA <1> stosb 671 00001246 89D8 <1> mov ax, bx 672 00001248 E8B362 <1> call hexword ; MCB owner 673 0000124B B020 <1> mov al, 32 674 0000124D AA <1> stosb 675 0000124E 89D0 <1> mov ax, dx 676 00001250 E8AB62 <1> call hexword ; MCB size in paragraphs 677 <1> 678 00001253 B020 <1> mov al, 32 679 00001255 AA <1> stosb 680 00001256 89D0 <1> mov ax, dx ; ax = size in paragraphs 681 00001258 53 <1> push bx 682 00001259 50 <1> push ax 683 0000125A 52 <1> push dx 684 0000125B 51 <1> push cx 685 0000125C 31D2 <1> xor dx, dx ; dx:ax = size in paragraphs 686 0000125E B91000 <1> mov cx, 16 ; cx = 16, multiplier (get size in bytes) 687 00001261 BB0800 <1> mov bx, 4+4 ; bx = 4+4, width 688 <1> 689 00001264 E89800 <1> call disp_dxax_times_cx_width_bx_size 690 00001267 59 <1> pop cx 691 00001268 5A <1> pop dx 692 00001269 58 <1> pop ax 693 0000126A 5B <1> pop bx 694 <1> 695 0000126B 85DB <1> test bx, bx 696 0000126D 7471 <1> jz .freemcb ; free MCBs have no name --> 697 0000126F B020 <1> mov al, 32 698 00001271 AA <1> stosb 699 00001272 56 <1> push si 700 00001273 51 <1> push cx 701 00001274 52 <1> push dx 702 00001275 BE0800 <1> mov si, 8 703 00001278 B90200 <1> mov cx, 2 704 0000127B 39F3 <1> cmp bx, si ; is it a "system" MCB? (owner 0008h or 0007h) 705 0000127D 7707 <1> ja @F 706 0000127F 803C53 <1> cmp byte [si], "S" ; "S", "SD", "SC" ? 707 00001282 7407 <1> je .nextmcbchar ; yes, limit name to two characters --> 708 00001284 EB03 <1> jmp .nextmcbchar_cx_si ; no, assume full name given 709 <1> @@: 709 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.11 709 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.12 709 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.13 709 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.14 709 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.15 709 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.16 709 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.17 709 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.18 709 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.11 709 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.12 709 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.13 709 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.14 709 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.15 709 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.16 709 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.17 709 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.18 709 ****************** <1> expansion: __@@_num = 19 710 00001286 4B <1> dec bx ; => owner block's MCB 711 <1> %if _PM 712 <1> call setds2bx 713 <1> %else 714 00001287 8EDB <1> mov ds, bx 715 <1> %endif 716 <1> .nextmcbchar_cx_si: 717 00001289 89F1 <1> mov cx, si ; = 8 718 <1> .nextmcbchar: ; copy name of owner MCB 719 0000128B AC <1> lodsb 720 0000128C AA <1> stosb 721 0000128D 08C0 <1> or al, al 722 0000128F E0FA <1> loopnz .nextmcbchar ; was not NUL and more bytes left ? 723 00001291 84C0 <1> test al, al 724 00001293 7501 <1> jnz @F 725 00001295 4F <1> dec di 726 <1> @@: 726 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.12 726 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.13 726 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.14 726 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.15 726 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.16 726 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.17 726 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.18 726 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.19 726 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.12 726 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.13 726 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.14 726 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.15 726 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.16 726 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.17 726 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.18 726 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.19 726 ****************** <1> expansion: __@@_num = 20 727 <1> 728 00001296 833E010008 <1> cmp word [1], 8 729 0000129B 7540 <1> jne .not_s_mcb 730 0000129D 833E080053 <1> cmp word [8], "S" ; S MCB ? 731 000012A2 7539 <1> jne .not_s_mcb 732 <1> 733 000012A4 B82074 <1> mov ax, " t" 734 000012A7 AB <1> stosw 735 000012A8 B87970 <1> mov ax, "yp" 736 000012AB AB <1> stosw 737 000012AC B86520 <1> mov ax, "e " 738 000012AF AB <1> stosw 739 <1> 740 000012B0 31C0 <1> xor ax, ax 741 000012B2 A00A00 <1> mov al, [10] 742 000012B5 E84D62 <1> call hexbyte 743 <1> 744 000012B8 1E <1> push ds 745 000012B9 16 <1> push ss 746 000012BA 1F <1> pop ds 747 000012BB BE[FC3F] <1> mov si, smcbtypes 748 <1> .s_mcb_loop: 749 000012BE 833CFF <1> cmp word [si], -1 750 000012C1 740E <1> je .s_mcb_unknown 751 000012C3 3904 <1> cmp word [si], ax 752 000012C5 7405 <1> je .s_mcb_known 753 000012C7 83C604 <1> add si, 4 754 000012CA EBF2 <1> jmp .s_mcb_loop 755 <1> 756 <1> .s_mcb_known: 757 000012CC 8B7402 <1> mov si, word [si + 2] 758 000012CF EB03 <1> jmp .s_mcb_common 759 <1> 760 <1> .s_mcb_unknown: 761 000012D1 BE[A541] <1> mov si, smcbmsg_unknown 762 <1> .s_mcb_common: 763 000012D4 B020 <1> mov al, 32 764 <1> @@: 764 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.13 764 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.14 764 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.15 764 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.16 764 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.17 764 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.18 764 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.19 764 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.20 764 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.13 764 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.14 764 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.15 764 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.16 764 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.17 764 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.18 764 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.19 764 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.20 764 ****************** <1> expansion: __@@_num = 21 765 000012D6 AA <1> stosb 766 000012D7 AC <1> lodsb 767 000012D8 84C0 <1> test al, al 768 000012DA 75FA <1> jnz @B 769 <1> 770 000012DC 1F <1> pop ds 771 <1> 772 <1> .not_s_mcb: 773 000012DD 5A <1> pop dx 774 000012DE 59 <1> pop cx 775 000012DF 5E <1> pop si 776 <1> .freemcb: 777 <1> 778 000012E0 1F <1> pop ds 779 000012E1 80FD4D <1> cmp ch, 'M' 780 000012E4 7406 <1> je .disp 781 000012E6 80FD5A <1> cmp ch, 'Z' 782 000012E9 7401 <1> je .disp 783 <1> .ret: 784 000012EB C3 <1> retn 785 <1> 786 <1> .disp: 787 000012EC 88E9 <1> mov cl, ch 788 000012EE 52 <1> push dx 789 000012EF 51 <1> push cx 790 000012F0 E84362 <1> call putsline_crlf ; destroys cx,dx,bx 791 000012F3 59 <1> pop cx 792 000012F4 5A <1> pop dx 793 000012F5 01D6 <1> add si, dx 794 000012F7 72F2 <1> jc .ret ; over FFFFh, must be end of chain --> (hmm) 795 000012F9 46 <1> inc si 796 000012FA 74EF <1> jz .ret 797 000012FC E915FF <1> jmp .next 798 <1> 799 <1> %if _PM 800 <1> setds2si: 801 <1> mov bx, si 802 <1> setds2bx: 803 <1> call ispm 804 <1> jnz sd2s_ex 805 <1> mov dx, bx 806 <1> call setrmsegm 807 <1> sd2s_ex: 808 <1> mov ds, bx 809 <1> retn 810 <1> %endif ; _PM 811 <1> %endif ; _MCB 812 <1> 813 <1> ;--- DX command. Display extended memory 814 <1> 815 <1> %if _PM 816 <1> cpu 386 817 <1> extmem: 818 <1> mov dx, word [x_addr+0] 819 <1> mov bx, word [x_addr+2] 820 <1> call skipwhite 821 <1> cmp al, ';' 822 <1> je extmem_1 823 <1> cmp al, 13 824 <1> jz extmem_1 825 <1> call getdword ; get linear address into bx:dx 826 <1> call chkeol ; expect end of line here 827 <1> extmem_1: 828 <1> mov word [lastcmd], extmem 829 <1> push bx 830 <1> push dx 831 <1> pop ebp 832 <1> 833 <1> mov di, stack ; create a GDT for Int15.87 834 <1> xor ax, ax 835 <1> mov cx, 8 836 <1> rep stosw 837 <1> mov ax, 007Fh 838 <1> stosw 839 <1> mov ax, dx 840 <1> stosw 841 <1> mov al, bl 842 <1> stosb 843 <1> mov ax, 0093h 844 <1> stosw 845 <1> mov al, bh 846 <1> stosb 847 <1> mov ax, 007Fh 848 <1> stosw 849 <1> mov ax, line_in+128 850 <1> mov bx, word [pspdbg] 851 <1> movzx ebx, bx 852 <1> shl ebx, 4 853 <1> movzx eax, ax 854 <1> add eax, ebx ; eax = flat address of line_in+128 855 <1> stosw 856 <1> shr eax, 16 857 <1> stosb 858 <1> mov bl, ah 859 <1> mov ax, 0093h 860 <1> stosw 861 <1> mov al, bl 862 <1> stosb 863 <1> mov cx, 8 864 <1> xor ax, ax 865 <1> rep stosw 866 <1> 867 <1> call ispm 868 <1> mov si, stack 869 <1> mov cx, 0040h 870 <1> mov ah, 87h 871 <1> jnz extmem_rm 872 <1> push word [pspdbg] 873 <1> push 15h 874 <1> call intcall 875 <1> jmp short i15ok 876 <1> extmem_rm: 877 <1> int 15h 878 <1> i15ok: 879 <1> jc extmem_exit 880 <1> mov si, line_in+128 881 <1> mov ch, 8h 882 <1> nexti15l: 883 <1> call handle_serial_flags_ctrl_c 884 <1> mov di, line_out 885 <1> mov eax, ebp 886 <1> shr eax, 16 887 <1> call hexword 888 <1> mov ax, bp 889 <1> call hexword 890 <1> mov ax, 32<<8|32 891 <1> stosw 892 <1> mov bx, line_out+10+3*16 893 <1> mov cl, 10h 894 <1> nexti15b: 895 <1> lodsb 896 <1> call dd_store 897 <1> dec cl 898 <1> jnz nexti15b 899 <1> mov byte [di-(8*3+1)], '-' ; display a '-' after 8 bytes 900 <1> add di, 16 901 <1> push cx 902 <1> call putsline_crlf 903 <1> pop cx 904 <1> add ebp, byte 10h 905 <1> dec ch 906 <1> jnz nexti15l 907 <1> mov dword [x_addr], ebp 908 <1> extmem_exit: 909 <1> retn 910 <1> cpu 8086 911 <1> %endif 912 <1> 913 <1> ; INP: dx:ax = numerator 914 <1> ; cx = multiplier 915 <1> ; bx = field width 916 <1> ; es:di -> buffer where to store 917 <1> ; STT: UP 918 <1> ; OUT: written to buffer, es:di -> behind written string 919 <1> disp_dxax_times_cx_width_bx_size: 920 <1> lframe near 920 ****************** <1> expansion: bits = 16 920 ****************** <1> expansion: base_size = 2 920 ****************** <1> expansion: near_offset = 2 920 ****************** <1> expansion: far_offset = 4 920 ****************** <1> expansion: int_offset = 6 920 ****************** <1> expansion: inner = 0 920 ****************** <1> expansion: nested = 0 920 ****************** <1> expansion: autoret = 920 ****************** <1> expansion: autoret = near 920 ****************** <1> expansion: parofs = 2 920 ****************** <1> expansion: pars_size = 0 920 ****************** <1> expansion: pars_return_size = 0 920 ****************** <1> expansion: parlist = 920 ****************** <1> expansion: labellist = empty,empty,empty 920 ****************** <1> expansion: ofs = 0 920 ****************** <1> expansion: enter = 0 920 ****************** <1> expansion: req = 0 920 ****************** <1> expansion: usereq = 0 920 ****************** <1> expansion: emit = 1 920 ****************** <1> expansion: restore_frame_ofs = 0 920 ****************** <1> expansion: pars_inner_size = 0 921 <1> lvar 4 + 4 + 2, buffer 921 ****************** <1> expansion: varsize = 10 921 ****************** <1> expansion: ofs = -10 921 ****************** <1> expansion: newlabel = buffer 921 ****************** <1> expansion: labellist = buffer,undefined,,empty,empty,empty 921 ****************** <1> expansion: ?buffer = -10 921 ****************** <1> expansion: req = 1 921 ****************** <1> expansion: hadvar = 1 922 <1> lvar 6, dividend 922 ****************** <1> expansion: varsize = 6 922 ****************** <1> expansion: ofs = -16 922 ****************** <1> expansion: newlabel = dividend 922 ****************** <1> expansion: labellist = dividend,undefined,,buffer,undefined,,empty,empty,empty 922 ****************** <1> expansion: ?dividend = -16 922 ****************** <1> expansion: req = 1 922 ****************** <1> expansion: hadvar = 1 923 000012FF 5589E58D66F0 <1> lenter 923 ****************** <1> expansion: wasearly = 0 923 ****************** <1> expansion: early = 0 923 ****************** <1> expansion: lsizevariables = 16 923 ****************** <1> expansion: req = 1 923 ****************** <1> expansion: enter_emitted = 0 923 ****************** <1> expansion: enter = 1 923 ****************** <1> expansion: 186 = 0 923 ****************** <1> expansion: newlabel = frame_bp 923 ****************** <1> expansion: labellist = frame_bp,undefined,,dividend,undefined,,buffer,undefined,,empty,empty,empty 923 ****************** <1> expansion: ?frame_bp = 0 923 ****************** <1> expansion: newlabel = frame_ip 923 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,dividend,undefined,,buffer,undefined,,empty,empty,empty 923 ****************** <1> expansion: ?frame_ip = 2 923 ****************** <1> expansion: lsizeparameters = 0 924 <1> lvar word, width 924 ****************** <1> expansion: varsize = 2 924 ****************** <1> expansion: ofs = -18 924 ****************** <1> expansion: newlabel = width 924 ****************** <1> expansion: labellist = width,undefined,,frame_ip,undefined,,frame_bp,undefined,,dividend,undefined,,buffer,undefined,,empty,empty,empty 924 ****************** <1> expansion: ?width = -18 924 ****************** <1> expansion: req = 1 924 ****************** <1> expansion: hadvar = 1 925 00001305 53 <1> push bx 926 00001306 56 <1> push si 927 00001307 1E <1> push ds 928 00001308 51 <1> push cx 929 00001309 50 <1> push ax 930 0000130A 52 <1> push dx 931 0000130B 06 <1> push es 932 0000130C 57 <1> push di 933 <1> 934 0000130D 16 <1> push ss ; push cs 935 0000130E 1F <1> pop ds 936 0000130F 16 <1> push ss 937 00001310 07 <1> pop es 938 <1> 939 00001311 52 <1> push dx 940 00001312 F7E1 <1> mul cx 941 00001314 97 <1> xchg ax, di 942 00001315 87D6 <1> xchg dx, si ; si:di = first mul 943 <1> 944 00001317 58 <1> pop ax 945 00001318 F7E1 <1> mul cx 946 0000131A 01F0 <1> add ax, si 947 0000131C 83D200 <1> adc dx, 0 ; dx:ax = second mul + adj, dx:ax:di = mul 948 <1> 949 0000131F 89F9 <1> mov cx, di ; dx:ax:cx = mul 950 <1> 951 00001321 894EF0 <1> mov word [bp + ?dividend], cx 952 00001324 8946F2 <1> mov word [bp + ?dividend + 2], ax 953 00001327 8956F4 <1> mov word [bp + ?dividend + 4], dx 954 <1> 955 0000132A BE[023C] <1> mov si, msg.prefixes 956 <1> .loop: 957 0000132D 837EF400 <1> cmp word [bp + ?dividend + 4], 0 958 00001331 750D <1> jnz .divide 959 00001333 837EF200 <1> cmp word [bp + ?dividend + 2], 0 960 00001337 7507 <1> jnz .divide 961 00001339 817EF00008 <1> cmp word [bp + ?dividend], 2048 962 0000133E 7621 <1> jbe .end 963 <1> .divide: 964 00001340 46 <1> inc si 965 00001341 B90004 <1> mov cx, 1024 ; 1000 here if SI units 966 00001344 F606[7D00]10 <1> testopt [options], use_si_units ; SI units ? 966 ****************** <1> expansion: adr = '[options]' 966 ****************** <1> expansion: len = 9 966 ****************** <1> expansion: tf = '[' 966 ****************** <1> expansion: tb = ']' 966 ****************** <1> expansion: adr = 'options' 966 ****************** <1> expansion: adr = options 967 00001349 7403 <1> jz @F ; no --> 968 0000134B B9E803 <1> mov cx, 1000 ; yes, use 1000 969 <1> @@: 969 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.14 969 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.15 969 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.16 969 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.17 969 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.18 969 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.19 969 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.20 969 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.21 969 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.14 969 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.15 969 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.16 969 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.17 969 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.18 969 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.19 969 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.20 969 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.21 969 ****************** <1> expansion: __@@_num = 22 970 <1> 971 0000134E 31D2 <1> xor dx, dx 972 00001350 BF0600 <1> mov di, 6 973 <1> .loop_divide: 974 00001353 8B43EE <1> mov ax, [bp + ?dividend - 2 + di] 975 00001356 F7F1 <1> div cx 976 00001358 8943EE <1> mov word [bp + ?dividend - 2 + di], ax 977 0000135B 4F <1> dec di 978 0000135C 4F <1> dec di 979 0000135D 75F4 <1> jnz .loop_divide 980 <1> ; dx = last remainder 981 0000135F EBCC <1> jmp .loop 982 <1> 983 <1> .end: 984 00001361 8D7EFF <1> lea di, [bp + ?buffer + 4 + 4 + 1] 985 00001364 FD <1> std 986 00001365 B042 <1> mov al, "B" 987 00001367 AA <1> stosb 988 00001368 8A04 <1> mov al, [si] 989 0000136A 3C20 <1> cmp al, 32 990 0000136C 740F <1> je @FF 991 <1> 992 0000136E F606[7D00]30 <1> testopt [options], use_si_units | use_jedec_units ; SI / JEDEC units ? 992 ****************** <1> expansion: adr = '[options]' 992 ****************** <1> expansion: len = 9 992 ****************** <1> expansion: tf = '[' 992 ****************** <1> expansion: tb = ']' 992 ****************** <1> expansion: adr = 'options' 992 ****************** <1> expansion: adr = options 993 00001373 7507 <1> jnz @F ; yes --> 994 00001375 24DF <1> and al, ~20h ; uppercase, don't do this if SI units 995 00001377 50 <1> push ax 996 00001378 B069 <1> mov al, "i" 997 0000137A AA <1> stosb ; don't store this if SI units 998 0000137B 58 <1> pop ax 999 <1> @@: 999 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.15 999 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.16 999 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.17 999 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.18 999 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.19 999 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.20 999 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.21 999 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.22 999 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.15 999 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.16 999 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.17 999 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.18 999 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.19 999 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.20 999 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.21 999 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.22 999 ****************** <1> expansion: __@@_num = 23 1000 0000137C AA <1> stosb 1001 <1> @@: 1001 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.16 1001 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.17 1001 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.18 1001 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.19 1001 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.20 1001 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.21 1001 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.22 1001 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.23 1001 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.16 1001 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.17 1001 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.18 1001 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.19 1001 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.20 1001 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.21 1001 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.22 1001 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.23 1001 ****************** <1> expansion: __@@_num = 24 1002 0000137D B020 <1> mov al, 32 1003 0000137F AA <1> stosb 1004 <1> 1005 00001380 8B46F0 <1> mov ax, word [bp + ?dividend] 1006 00001383 B90A00 <1> mov cx, 10 1007 <1> .loop_write: 1008 00001386 31D2 <1> xor dx, dx 1009 00001388 F7F1 <1> div cx 1010 0000138A 92 <1> xchg ax, dx 1011 <1> ; ax = remainder (next digit) 1012 <1> ; dx = result of div 1013 0000138B 0430 <1> add al, '0' 1014 0000138D AA <1> stosb 1015 0000138E 92 <1> xchg ax, dx ; ax = result of div 1016 0000138F 85C0 <1> test ax, ax ; any more ? 1017 00001391 75F3 <1> jnz .loop_write ; loop --> 1018 <1> 1019 00001393 FC <1> cld 1020 <1> 1021 00001394 8D5EFF <1> lea bx, [bp + ?buffer + 4 + 4 + 1] 1022 00001397 29FB <1> sub bx, di 1023 00001399 89FE <1> mov si, di 1024 <1> 1025 0000139B 5F <1> pop di 1026 0000139C 07 <1> pop es 1027 <1> 1028 0000139D 8B4EEE <1> mov cx, [bp + ?width] 1029 000013A0 29D9 <1> sub cx, bx 1030 000013A2 7605 <1> jbe .none_blank 1031 <1> .loop_blank: 1032 000013A4 B020 <1> mov al, 32 1033 000013A6 AA <1> stosb 1034 000013A7 E2FB <1> loop .loop_blank 1035 <1> .none_blank: 1036 <1> 1037 000013A9 89D9 <1> mov cx, bx 1038 <1> .loop_disp: 1039 000013AB 46 <1> inc si 1040 000013AC 368A04 <1> mov al, [ss:si] 1041 000013AF AA <1> stosb 1042 000013B0 E2F9 <1> loop .loop_disp 1043 <1> 1044 000013B2 5A <1> pop dx 1045 000013B3 58 <1> pop ax 1046 000013B4 59 <1> pop cx 1047 000013B5 1F <1> pop ds 1048 000013B6 5E <1> pop si 1049 000013B7 5B <1> pop bx 1050 000013B8 89EC5D <1> lleave 1050 ****************** <1> expansion: 186 = 0 1050 ****************** <1> expansion: lsizeparameters = 0 1050 ****************** <1> expansion: __lframe__autoret = near 1051 000013BB C3 <1> lret 1051 ****************** <1> expansion: type = auto 1051 ****************** <1> expansion: type = __lframe__autoret 1051 ****************** <1> expansion: inst = retn 1051 ****************** <1> expansion: remov = 0 1051 ****************** <1> expansion: remov = 0 1051 ****************** <1> expansion: remov = 1052 <1> 1507 %include "rr.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug R commands - Register access 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> ; R command - dump and manipulate registers. 21 <1> rr: 22 000013BC E8A960 <1> call iseol? 23 000013BF 7503E91D03 <1> je dumpregs ; if no parameters --> 24 <1> 25 <1> %if !_ONLYNON386 || (_OPTIONS || _VARIABLES) || _MMXSUPP || _RN 26 000013C4 50 <1> push ax 27 000013C5 56 <1> push si 28 000013C6 E8E360 <1> call skipwhite 29 000013C9 E89C60 <1> call iseol? ; line ends after single character ? 30 000013CC 5E <1> pop si 31 000013CD 58 <1> pop ax 32 000013CE 7553 <1> jne short rr1 ; no, not other kinds of dumps --> 33 <1> 34 000013D0 E8DD44 <1> call uppercase 35 000013D3 3C46 <1> cmp al, 'F' ; only valid input to a later check 36 000013D5 7503E98301 <1> je rr2.writeprompt ; so go there --> 37 <1> ; (note that byte [si-1] must != '.') 38 <1> %if _OPTIONS || _VARIABLES 39 000013DA 3C56 <1> cmp al, 'V' 40 000013DC 7503E9E504 <1> je dumpvars 41 <1> %endif 42 <1> %if _MMXSUPP 43 000013E1 3C4D <1> cmp al, 'M' 44 000013E3 750A <1> jne .notrm 45 000013E5 803E[9302]00 <1> cmp byte [has_mmx], 0 46 000013EA 7403 <1> je .notrm 47 000013EC E97F05 <1> jmp dumpregsMMX 48 <1> .notrm: 49 <1> %endif 50 000013EF 3C58 <1> _386 cmp al, 'X' 50 ****************** <1> expansion: entry = 5103 50 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103 50 ****************** <1> expansion: entry = 5104 50 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104 50 ****************** <1> expansion: entry = 5105 51 000013F1 7411 <1> _386 je short rrx 51 ****************** <1> expansion: entry = 5105 51 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105 51 ****************** <1> expansion: entry = 5106 51 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106 51 ****************** <1> expansion: entry = 5107 52 <1> %if _RN 53 000013F3 3C4E <1> cmp al, 'N' 54 000013F5 750A <1> jne .notrn 55 000013F7 803E[9102]00 <1> cmp byte [has_87], 0 56 000013FC 7403 <1> je .notrn 57 000013FE E97403 <1> jmp dumpregsFPU 58 <1> .notrn: 59 <1> %endif 60 00001401 E9F752 <1> jmp error ; all other single characters are invalid 61 <1> %endif 62 <1> 63 <1> %ifn _ONLYNON386 64 <1> rrx: 65 00001404 AC <1> lodsb 66 00001405 E86B60 <1> call chkeol 67 00001408 8036[7C00]01 <1> xoropt [options], dispregs32 67 ****************** <1> expansion: adr = '[options]' 67 ****************** <1> expansion: len = 9 67 ****************** <1> expansion: tf = '[' 67 ****************** <1> expansion: tb = ']' 67 ****************** <1> expansion: adr = 'options' 67 ****************** <1> expansion: adr = options 68 0000140D BA[7F34] <1> mov dx, msg.regs386 69 00001410 E85C63 <1> call putsz 70 00001413 BA[9634] <1> mov dx, msg.regs386_on 71 00001416 F606[7C00]01 <1> testopt [options], dispregs32 71 ****************** <1> expansion: adr = '[options]' 71 ****************** <1> expansion: len = 9 71 ****************** <1> expansion: tf = '[' 71 ****************** <1> expansion: tb = ']' 71 ****************** <1> expansion: adr = 'options' 71 ****************** <1> expansion: adr = options 72 0000141B 7503 <1> jnz .on 73 0000141D BA[9234] <1> mov dx, msg.regs386_off 74 <1> .on: 75 00001420 E94C63 <1> jmp putsz 76 <1> %endif 77 <1> 78 <1> rr1: 79 00001423 89F5 <1> mov bp, si ; (bp-1)-> potential name 80 00001425 E81559 <1> call isvariable? 81 00001428 7303E90E01 <1> jc rr2 82 0000142D 88C8 <1> mov al, cl 83 0000142F B100 <1> mov cl, 0 84 00001431 4D <1> dec bp ; -> name 85 00001432 4E <1> dec si ; (to reload al) 86 00001433 50 <1> push ax ; h = variable's field type, l = its size 87 00001434 86CD <1> xchg cl, ch ; cx = variable's name's length 88 <1> 89 00001436 E84560 <1> call skipcomma 90 00001439 3C2E <1> cmp al, '.' ; special ? 91 0000143B 7405 <1> je short .writeprompt ; yes --> 92 0000143D E82860 <1> call iseol? 93 00001440 7546 <1> jne short .noprompt 94 <1> .writeprompt: 95 00001442 56 <1> push si ; -> behind dot if any 96 00001443 89EE <1> mov si, bp ; -> name 97 00001445 BF[A901] <1> mov di, line_out 98 <1> .writename: 99 00001448 AC <1> lodsb 100 00001449 E86444 <1> call uppercase 101 0000144C AA <1> stosb 102 0000144D E2F9 <1> loop .writename 103 0000144F 5E <1> pop si ; -> behind dot if any 104 00001450 B020 <1> mov al, 32 105 00001452 AA <1> stosb 106 00001453 59 <1> pop cx ; h = variable's field type, l = its size 107 00001454 87DA <1> xchg bx, dx 108 00001456 8B07 <1> mov ax, word [bx] 109 00001458 87DA <1> xchg bx, dx 110 0000145A 51 <1> push cx 111 0000145B 80F904 <1> cmp cl, 4 112 0000145E 7205 <1> jb .pnohigh 113 00001460 E89B60 <1> call hexword ; display high word 114 00001463 EB08 <1> jmp @F 115 <1> .pnohigh: 116 00001465 80F903 <1> cmp cl, 3 117 00001468 7203 <1> jb @F 118 0000146A E89860 <1> call hexbyte 119 <1> @@: 119 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.17 119 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.18 119 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.19 119 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.20 119 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.21 119 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.22 119 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.23 119 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.24 119 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.17 119 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.18 119 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.19 119 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.20 119 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.21 119 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.22 119 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.23 119 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.24 119 ****************** <1> expansion: __@@_num = 25 120 0000146D 8B07 <1> mov ax, word [bx] 121 0000146F 80F902 <1> cmp cl, 2 122 00001472 7207 <1> jb .pnobyte 123 00001474 86C4 <1> xchg al, ah 124 00001476 E88C60 <1> call hexbyte ; display high byte 125 00001479 86C4 <1> xchg al, ah 126 <1> .pnobyte: 127 0000147B E88760 <1> call hexbyte ; display low byte 128 0000147E E82602 <1> call dot_prompt 129 00001481 59 <1> pop cx ; h = variable's field type, l = its size 130 00001482 7503E9AD00 <1> je .return 131 00001487 A8 <1> db __TEST_IMM8 ; (skip pop) 132 <1> .noprompt: 133 00001488 59 <1> pop cx ; h = variable's field type, l = its size 134 00001489 84ED <1> test ch, ch 135 0000148B 7403E9A500 <1> jnz .readonly 136 00001490 880E[D602] <1> mov byte [rrtype], cl 137 00001494 53 <1> push bx 138 00001495 52 <1> push dx 139 00001496 51 <1> push cx 140 00001497 50 <1> push ax 141 00001498 56 <1> push si 142 00001499 E8F854 <1> call isoperator? 143 0000149C 750E <1> jne .nooperator 144 0000149E 89CB <1> mov bx, cx 145 000014A0 01DB <1> add bx, bx 146 000014A2 50 <1> push ax 147 000014A3 FF97[B151] <1> call near [operatordispatchers+bx] 148 000014A7 58 <1> pop ax 149 000014A8 85DB <1> test bx, bx 150 000014AA 7504 <1> jnz .gotoperator 151 <1> .nooperator: 152 000014AC BB1700 <1> mov bx, OPERATOR_RIGHTOP; set default computation function 153 000014AF A8 <1> db __TEST_IMM8 154 <1> .gotoperator: 155 000014B0 AC <1> lodsb 156 <1> 157 000014B1 E81602 <1> call isassignmentoperator? 158 000014B4 7317 <1> jnc .assign_op_done ; found an assignment operator --> 159 000014B6 83FB17 <1> cmp bx, OPERATOR_RIGHTOP; dummy (no operator specified) ? 160 000014B9 7412 <1> je .assign_op_done ; yes, assignment operator not required --> 161 000014BB 59 <1> pop cx 162 000014BC 58 <1> pop ax ; restore al, si in front of operator 163 000014BD 50 <1> push ax 164 000014BE 51 <1> push cx 165 000014BF 87F1 <1> xchg si, cx 166 000014C1 51 <1> push cx 167 000014C2 E8C954 <1> call isunaryoperator? ; is this a valid unary operator too ? 168 000014C5 59 <1> pop cx 169 000014C6 74E4 <1> je .nooperator ; yes --> 170 000014C8 87F1 <1> xchg si, cx 171 <1> errorj9: equ $ 172 000014CA E92E52 <1> jmp error ; error where the assignment operator needs to be 173 <1> .assign_op_done: 174 000014CD 59 <1> pop cx 175 000014CE 59 <1> pop cx 176 000014CF 59 <1> pop cx 177 000014D0 53 <1> push bx 178 000014D1 E8AB5F <1> call skipcomm0 179 <1> 180 000014D4 E8365B <1> call getexpression ; bx:dx = expression result 181 000014D7 E8995F <1> call chkeol 182 000014DA 59 <1> pop cx ; operator computation function 183 000014DB 5D <1> pop bp ; bp-> high word 184 000014DC 5F <1> pop di ; di-> low word 185 000014DD FF7600 <1> push word [bp] 186 000014E0 FF35 <1> push word [di] 187 000014E2 8F06[5852] <1> pop word [hhvar] 188 000014E6 8F06[5A52] <1> pop word [hhvar+2] ; save variable's current value (as left operand) 189 000014EA 8826[5C52] <1> mov byte [hhtype], ah ; type info 190 000014EE 803E[D602]04 <1> cmp byte [rrtype], 4 191 000014F3 7318 <1> jae .cleardword 192 000014F5 803E[D602]02 <1> cmp byte [rrtype], 2 193 000014FA 770C <1> ja .clearthreebyte 194 000014FC 7405 <1> je .clearword 195 <1> .clearbyte: 196 000014FE C606[5952]00 <1> mov byte [hhvar + 1], 0 ; clear second byte 197 <1> .clearword: 198 00001503 C606[5A52]00 <1> mov byte [hhvar + 2], 0 ; clear third byte 199 <1> .clearthreebyte: 200 00001508 C606[5B52]00 <1> mov byte [hhvar + 3], 0 ; clear fourth byte 201 <1> .cleardword: 202 0000150D 87CB <1> xchg cx, bx 203 0000150F 01DB <1> add bx, bx 204 00001511 8B9F[E151] <1> mov bx, word [bx + operatorfunctions] 205 00001515 87CB <1> xchg cx, bx ; cx = operator function 206 00001517 FFD1 <1> call cx ; compute 207 <1> 208 <1> ; This should check whether the computed number fits. 209 00001519 803E[D602]02 <1> cmp byte [rrtype], 2 210 0000151E 7212 <1> jb .setbyte 211 00001520 740D <1> je .setword 212 00001522 803E[D602]04 <1> cmp byte [rrtype], 4 213 00001527 7203 <1> jb .setthreebyte 214 <1> .setdword: 215 00001529 887E01 <1> mov byte [bp + 1], bh ; set fourth byte 216 <1> .setthreebyte: 217 0000152C 885E00 <1> mov byte [bp], bl ; set third byte 218 <1> .setword: 219 0000152F 887501 <1> mov byte [di + 1], dh ; set second byte 220 <1> .setbyte: 221 00001532 8815 <1> mov byte [di], dl ; set first byte 222 <1> .return: 223 <1> rr1b: 224 00001534 C3 <1> retn 225 <1> 226 <1> rr1.readonly: 227 00001535 BA[3734] <1> mov dx, msg.readonly 228 00001538 E93462 <1> jmp putsz 229 <1> 230 <1> ; Change flag register with mnemonics - F 231 <1> rr2: 232 0000153B E87243 <1> call uppercase 233 0000153E 3C46 <1> cmp al, 'F' 234 00001540 7403E99000 <1> jne rr3 ; if not 'F' --> 235 00001545 50 <1> push ax 236 00001546 8A04 <1> mov al, byte [si] 237 00001548 E85F54 <1> call isseparator? ; valid separator ? 238 0000154B 58 <1> pop ax 239 0000154C 7403E98400 <1> jne rr3 ; no --> 240 <1> .ef: 241 00001551 E82A5F <1> call skipcomma 242 00001554 3C2E <1> cmp al, '.' ; special ? 243 00001556 7405 <1> je .writeprompt ; yes --> 244 00001558 E80D5F <1> call iseol? ; end of line ? 245 0000155B 750A <1> jne .noprompt ; no --> 246 <1> .writeprompt: 247 0000155D 56 <1> push si 248 0000155E E84A03 <1> call dmpflags 249 00001561 5E <1> pop si ; -> behind dot if any 250 00001562 E84201 <1> call dot_prompt 251 00001565 74CD <1> je short rr1b ; if no change 252 <1> .noprompt: 253 <1> 254 00001567 E86001 <1> call isassignmentoperator? 255 0000156A 56 <1> push si 256 0000156B 7308 <1> jnc .noteol ; at least one value is required --> 257 <1> .check_loop: 258 0000156D E80F5F <1> call skipcomm0 259 00001570 E8F55E <1> call iseol? 260 00001573 7420 <1> je .really ; return if done 261 <1> .noteol: 262 00001575 E83843 <1> call uppercase 263 00001578 86C4 <1> xchg al, ah 264 0000157A AC <1> lodsb 265 0000157B E83243 <1> call uppercase 266 0000157E 86C4 <1> xchg al, ah ; ax = mnemonic 267 00001580 BF[D849] <1> mov di, flagson 268 00001583 B91000 <1> mov cx, 16 269 00001586 F2AF <1> repne scasw 270 00001588 7507 <1> jne short .errordec ; if no match 271 0000158A AC <1> lodsb 272 0000158B E81C54 <1> call isseparator? 273 0000158E 74DD <1> je .check_loop 274 <1> .errordec2: 275 00001590 4E <1> dec si 276 <1> .errordec: 277 <1> errordec: equ $ 278 00001591 4E <1> dec si ; back up one before flagging an error 279 00001592 E96651 <1> jmp error 280 <1> 281 <1> .really: 282 00001595 5E <1> pop si 283 00001596 4E <1> dec si 284 00001597 AC <1> lodsb 285 <1> .loop: 286 00001598 E8CD5E <1> call iseol? 287 0000159B 7497 <1> je rr1b ; return if done 288 <1> 289 0000159D E81043 <1> call uppercase 290 000015A0 86C4 <1> xchg al, ah 291 000015A2 AC <1> lodsb 292 000015A3 E80A43 <1> call uppercase 293 000015A6 86C4 <1> xchg al, ah ; ax = mnemonic 294 <1> 295 000015A8 BF[D849] <1> mov di, flagson 296 000015AB B91000 <1> mov cx, 16 297 000015AE F2AF <1> repne scasw 298 000015B0 75DF <1> jne short .errordec ; if no match 299 000015B2 81FF[E849] <1> cmp di, flagsoff 300 000015B6 7709 <1> ja .clear ; if we're clearing 301 000015B8 8B45EE <1> mov ax, word [di-(flagson-flagbits)-2] 302 000015BB 0906[7C03] <1> or word [reg_efl], ax ; set the bit 303 000015BF EB09 <1> jmp short .common 304 <1> .clear: 305 000015C1 8B45DE <1> mov ax, word [di-(flagsoff-flagbits)-2] 306 000015C4 F7D0 <1> not ax 307 000015C6 2106[7C03] <1> and word [reg_efl], ax ; clear the bit 308 <1> .common: 309 000015CA AC <1> lodsb 310 000015CB E8DC53 <1> call isseparator? 311 000015CE 75C0 <1> jne short .errordec2 312 000015D0 E8AC5E <1> call skipcomm0 313 000015D3 EBC3 <1> jmp short .loop 314 <1> 315 <1> ; Change flag register with mnemonics - EF 316 <1> rr3: 317 000015D5 86C4 <1> xchg al, ah 318 000015D7 AC <1> lodsb 319 000015D8 E8D542 <1> call uppercase 320 000015DB 86C4 <1> xchg al, ah ; ax = next two characters 321 000015DD 3D4546 <1> _386 cmp ax, "EF" 321 ****************** <1> expansion: entry = 5597 321 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597 321 ****************** <1> expansion: entry = 5598 321 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598 321 ****************** <1> expansion: entry = 5599 321 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599 321 ****************** <1> expansion: entry = 5600 322 000015E0 750B <1> _386 jne rr4 ; if not "EF" --> 322 ****************** <1> expansion: entry = 5600 322 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600 322 ****************** <1> expansion: entry = 5601 322 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601 322 ****************** <1> expansion: entry = 5602 323 000015E2 50 <1> _386 push ax 323 ****************** <1> expansion: entry = 5602 323 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602 323 ****************** <1> expansion: entry = 5603 324 000015E3 8A04 <1> _386 mov al, byte [si] 324 ****************** <1> expansion: entry = 5603 324 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603 324 ****************** <1> expansion: entry = 5604 324 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604 324 ****************** <1> expansion: entry = 5605 325 000015E5 E8C253 <1> _386 call isseparator? ; valid separator ? 325 ****************** <1> expansion: entry = 5605 325 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605 325 ****************** <1> expansion: entry = 5606 325 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606 325 ****************** <1> expansion: entry = 5607 325 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607 325 ****************** <1> expansion: entry = 5608 326 000015E8 58 <1> _386 pop ax 326 ****************** <1> expansion: entry = 5608 326 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608 326 ****************** <1> expansion: entry = 5609 327 000015E9 0F8464FF <1> _386 je rr2.ef 327 ****************** <1> expansion: entry = 5609 327 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609 327 ****************** <1> expansion: entry = 5610 327 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610 327 ****************** <1> expansion: entry = 5611 327 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611 327 ****************** <1> expansion: entry = 5612 327 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612 327 ****************** <1> expansion: entry = 5613 328 <1> 329 <1> ; Change a single flag with mnemonic 330 <1> rr4: 331 000015ED BF[F849] <1> mov di, flagnames 332 000015F0 B90800 <1> mov cx, 8 333 000015F3 F2AF <1> repne scasw 334 000015F5 759A <1> jne short rr2.errordec 335 000015F7 89C2 <1> mov dx, ax 336 000015F9 AC <1> lodsb 337 000015FA E8AD53 <1> call isseparator? 338 000015FD 7591 <1> jne short rr2.errordec2 339 000015FF FF75CE <1> push word [di-(flagnames-flagbits)-2] 340 00001602 E87A5E <1> call skipcomm0 341 00001605 3C2E <1> cmp al, '.' ; special ? 342 00001607 7405 <1> je .writeprompt ; yes --> 343 00001609 E85C5E <1> call iseol? 344 0000160C 7519 <1> jne .noprompt 345 <1> .writeprompt: 346 0000160E BF[A901] <1> mov di, line_out 347 00001611 89D0 <1> mov ax, dx 348 00001613 AB <1> stosw 349 00001614 58 <1> pop ax 350 00001615 50 <1> push ax 351 00001616 8506[7C03] <1> test word [reg_efl], ax ; is it off ? 352 0000161A B82030 <1> mov ax, " 0" ; assume so 353 0000161D 7402 <1> jz .off ; it is off --> 354 0000161F FEC4 <1> inc ah ; is on, set to '1' 355 <1> .off: 356 00001621 AB <1> stosw 357 00001622 E88200 <1> call dot_prompt 358 00001625 747E <1> je .ret_pop ; if no change --> 359 <1> .noprompt: 360 00001627 E83E5E <1> call iseol? ; end of line ? 361 0000162A 7479 <1> je .ret_pop ; yes, no change requested --> 362 0000162C 51 <1> push cx 363 0000162D 50 <1> push ax 364 0000162E 56 <1> push si 365 0000162F E86253 <1> call isoperator? 366 00001632 7520 <1> jne .nooperator 367 00001634 89CB <1> mov bx, cx 368 00001636 01DB <1> add bx, bx 369 00001638 50 <1> push ax 370 00001639 FF97[B151] <1> call near [operatordispatchers+bx] 371 0000163D 58 <1> pop ax 372 0000163E 85DB <1> test bx, bx 373 00001640 7412 <1> jz .nooperator 374 00001642 80FB16 <1> cmp bl, OPERATOR_BOOL_AND 375 00001645 770D <1> ja .nooperator 376 00001647 80FB14 <1> cmp bl, OPERATOR_BOOL_OR 377 0000164A 730C <1> jae .gotoperator 378 0000164C 80C303 <1> add bl, OPERATOR_BOOL_OR - OPERATOR_BIT_OR 379 0000164F 80FB14 <1> cmp bl, OPERATOR_BOOL_OR 380 00001652 7304 <1> jae .gotoperator 381 <1> .nooperator: 382 00001654 BB1700 <1> mov bx, OPERATOR_RIGHTOP; set default computation function 383 00001657 A8 <1> db __TEST_IMM8 384 <1> .gotoperator: 385 00001658 AC <1> lodsb 386 <1> 387 00001659 E86E00 <1> call isassignmentoperator? 388 0000165C 7308 <1> jnc .assign_op_done ; found an assignment operator --> 389 0000165E 83FB17 <1> cmp bx, OPERATOR_RIGHTOP; dummy (no operator specified) ? 390 <1> %if 1 ; since | ^ & are never unary operators 391 00001661 7403E99550 <1> jne error 392 <1> %else 393 <1> je .assign_op_done ; yes, assignment operator not required --> 394 <1> pop cx 395 <1> pop ax ; restore al, si in front of operator 396 <1> push ax 397 <1> push cx 398 <1> xchg si, cx 399 <1> push cx 400 <1> call isunaryoperator? ; is this a valid unary operator too ? 401 <1> pop cx 402 <1> je .nooperator ; yes --> 403 <1> xchg si, cx 404 <1> jmp error ; error where the assignment operator needs to be 405 <1> %endif 406 <1> .assign_op_done: 407 00001666 59 <1> pop cx 408 00001667 59 <1> pop cx 409 00001668 59 <1> pop cx 410 00001669 53 <1> push bx 411 0000166A E8A059 <1> call getexpression 412 0000166D E8035E <1> call chkeol 413 00001670 E8BF56 <1> call toboolean 414 00001673 59 <1> pop cx ; operator index 415 00001674 31C0 <1> xor ax, ax 416 00001676 A2[5C52] <1> mov byte [hhtype], al 417 00001679 A3[5A52] <1> mov word [hhvar+2], ax 418 0000167C 5E <1> pop si 419 0000167D 56 <1> push si ; flag 420 0000167E 8536[7C03] <1> test word [reg_efl], si 421 00001682 7401 <1> jz .notset 422 00001684 40 <1> inc ax 423 <1> .notset: 424 00001685 A3[5852] <1> mov word [hhvar], ax 425 00001688 87CB <1> xchg cx, bx 426 0000168A 01DB <1> add bx, bx 427 0000168C 8B9F[E151] <1> mov bx, word [bx+operatorfunctions] 428 00001690 87CB <1> xchg cx, bx ; cx = operator function 429 00001692 FFD1 <1> call cx ; compute 430 00001694 58 <1> pop ax 431 00001695 85D2 <1> test dx, dx 432 00001697 7405 <1> jz .clear 433 00001699 0906[7C03] <1> or word [reg_efl], ax ; set the bit 434 0000169D C3 <1> retn 435 <1> .clear: 436 0000169E F7D0 <1> not ax 437 000016A0 2106[7C03] <1> and word [reg_efl], ax ; clear the bit 438 000016A4 C3 <1> retn 439 <1> 440 <1> .ret_pop: 441 000016A5 58 <1> pop ax 442 000016A6 C3 <1> retn 443 <1> 444 <1> 445 <1> ; INP: di-> behind prompt to display (in line_out) 446 <1> ; Iff byte[si-1] == '.', 447 <1> ; only display without actual prompting 448 <1> ; si-> line to check for EOL 449 <1> ; OUT: NZ iff actually prompted and got non-empty line, 450 <1> ; al = first character 451 <1> ; si-> next character 452 <1> ; dx, bx preserved 453 <1> ; CHG: ax, cx, si, di, dx, bx 454 <1> dot_prompt: 455 000016A7 807CFF2E <1> cmp byte [si-1], '.' ; syntax for display without prompt ? 456 000016AB 7414 <1> je .onlydisplay ; yes --> 457 000016AD 53 <1> push bx 458 000016AE 52 <1> push dx 459 000016AF E8FA61 <1> call getline0 460 000016B2 5A <1> pop dx 461 000016B3 5B <1> pop bx 462 000016B4 E8B15D <1> call iseol? ; no change requested ? 463 000016B7 7410 <1> je .ret ; yes --> (ZR) 464 000016B9 3C2E <1> cmp al, '.' ; other syntax for no change ? 465 000016BB 750C <1> jne .ret ; no --> (NZ) 466 <1> .chkeol1: 467 000016BD AC <1> lodsb 468 000016BE E9B25D <1> jmp chkeol ; (ZR) 469 <1> 470 <1> .onlydisplay: 471 000016C1 E8F9FF <1> call .chkeol1 472 000016C4 E86F5E <1> call putsline_crlf 473 000016C7 38C0 <1> cmp al, al ; ZR 474 <1> .ret: 475 000016C9 C3 <1> retn 476 <1> 477 <1> 478 <1> ; INP: al = first character 479 <1> ; si-> remaining string 480 <1> ; OUT: CY if no assignment operator was found 481 <1> ; NC if an assignment operator was found, 482 <1> ; al = first character behind it (skipcomma called) 483 <1> ; si-> remaining string behind character al 484 <1> isassignmentoperator?: 485 000016CA 3C3A <1> cmp al, ':' 486 000016CC 750A <1> jne .checksingleequality 487 000016CE AC <1> lodsb 488 000016CF 3C3D <1> cmp al, '=' 489 000016D1 7409 <1> je .skip ; long form assignment operator --> 490 <1> ; A single colon. Report "no assignment operator" here. 491 000016D3 4E <1> dec si 492 000016D4 B03A <1> mov al, ':' ; restore si, al 493 <1> .return_cy: 494 000016D6 F9 <1> stc 495 000016D7 C3 <1> retn 496 <1> 497 <1> .checksingleequality: 498 000016D8 3C3D <1> cmp al, '=' 499 000016DA 75FA <1> jne .return_cy ; no assignment operator --> 500 <1> .skip: 501 000016DC E89F5D <1> call skipcomma 502 000016DF F8 <1> clc 503 000016E0 C3 <1> retn 504 <1> 505 <1> 506 <1> ; DUMPREGS - Dump registers. 507 <1> ; 508 <1> ; 16 bit: 8 regs, line break, first 4 segment regs, IP, flags 509 <1> ; 32 bit: 6 regs, line break, 2 regs, flags, line break, 6 segment regs, EIP 510 <1> dumpregs: 511 000016E1 BE[304A] <1> mov si, reg16names 512 000016E4 BF[A901] <1> mov di, line_out 513 000016E7 B90800 <1> mov cx, 8 ; display all 8 standard regs (16-bit) 514 000016EA F606[7C00]01 <1> testopt [options], dispregs32 514 ****************** <1> expansion: adr = '[options]' 514 ****************** <1> expansion: len = 9 514 ****************** <1> expansion: tf = '[' 514 ****************** <1> expansion: tb = ']' 514 ****************** <1> expansion: adr = 'options' 514 ****************** <1> expansion: adr = options 515 000016EF 7402 <1> jz .firstrow16 516 000016F1 B106 <1> mov cl, 6 ; room for 6 standard regs (32-bit) only 517 <1> .firstrow16: 518 000016F3 9C <1> pushf 519 000016F4 57 <1> push di 520 000016F5 E84D00 <1> call dmpr1 ; display first row 521 000016F8 E8345E <1> call trimputs 522 000016FB 5F <1> pop di ; (reset di) 523 000016FC 9D <1> popf ; (reset ZF) 524 000016FD 7511 <1> jnz .secondrow32 525 000016FF B104 <1> mov cl, 4 ; display 4 segment regs 526 00001701 E84100 <1> call dmpr1 527 00001704 83C604 <1> add si, byte 2*2 ; skip FS+GS 528 00001707 41 <1> inc cx ; (= 1) 529 00001708 E83A00 <1> call dmpr1 ; display IP 530 0000170B E89D01 <1> call dmpflags ; display flags in 16-bit display 531 0000170E EB18 <1> jmp short .lastrowdone 532 <1> .secondrow32: 533 00001710 57 <1> push di 534 00001711 B102 <1> mov cl, 2 ; display rest of 32-bit standard regs 535 00001713 E82F00 <1> call dmpr1 536 00001716 56 <1> push si 537 00001717 E89101 <1> call dmpflags ; display flags in 32-bit display 538 0000171A E8195E <1> call putsline_crlf 539 0000171D 5E <1> pop si 540 0000171E 5F <1> pop di ; (reset di) 541 0000171F B106 <1> mov cl, 6 ; display all segment registers 542 00001721 E82100 <1> call dmpr1 543 00001724 41 <1> inc cx ; (= 1) 544 00001725 E81D00 <1> call dmpr1 ; display EIP 545 <1> .lastrowdone: 546 00001728 E8045E <1> call trimputs 547 <1> 548 <1> ; Set U address to CS:(E)IP. 549 0000172B BE[7803] <1> mov si, reg_eip 550 0000172E BF[AA02] <1> mov di, u_addr 551 00001731 56 <1> push si 552 00001732 57 <1> push di 553 00001733 A5 <1> movsw 554 00001734 A5 <1> movsw 555 00001735 A1[6C03] <1> mov ax, word [reg_cs] 556 00001738 AB <1> stosw 557 00001739 C606[004F]03 <1> mov byte [disflags], DIS_F_REPT | DIS_F_SHOW 558 0000173E E88F18 <1> call disasm 559 <1> 560 <1> ; Reset U offset to (E)IP. 561 00001741 5F <1> pop di 562 00001742 5E <1> pop si 563 00001743 A5 <1> movsw 564 <1> _386_PM movsw 565 00001744 C3 <1> retn 566 <1> 567 <1> 568 <1> ; Function to display multiple register entries. 569 <1> ; 570 <1> ; INP: [options]&dispregs32 = whether to display 32-bit registers, 571 <1> ; except segment registers which are always 16-bit 572 <1> ; si-> 2-byte register name in table 573 <1> ; cx = number of registers to display 574 <1> ; OUT: si-> register name in table after the last one displayed 575 <1> ; cx = 0 576 <1> ; CHG: bx, ax 577 <1> dmpr1: 578 <1> .: 579 00001745 8D9CD0B4 <1> lea bx, [si-(reg16names+DATASECTIONFIXUP)] 580 00001749 01DB <1> add bx, bx ; index * 4 581 0000174B 807C0153 <1> cmp byte [si+1], 'S' ; segment register ? 582 0000174F 740A <1> je .no_e ; always 16-bit --> (ZR) 583 00001751 F606[7C00]01 <1> testopt [options], dispregs32 ; display 32-bit register ? 583 ****************** <1> expansion: adr = '[options]' 583 ****************** <1> expansion: len = 9 583 ****************** <1> expansion: tf = '[' 583 ****************** <1> expansion: tb = ']' 583 ****************** <1> expansion: adr = 'options' 583 ****************** <1> expansion: adr = options 584 00001756 7403 <1> jz .no_e ; no --> (ZR) 585 00001758 B045 <1> mov al, 'E' 586 0000175A AA <1> stosb ; store E for Exx register name 587 <1> .no_e: 588 0000175B A5 <1> movsw ; store register name, increase pointer 589 0000175C B03D <1> mov al, '=' 590 0000175E AA <1> stosb ; store equality sign 591 0000175F 7407 <1> jz .no_high ; (ZF left from before) 592 00001761 8B87[4203] <1> mov ax, word [regs + bx + 2] 593 00001765 E8965D <1> call hexword ; store high word (only if 32-bit register) 594 <1> .no_high: 595 00001768 8B87[4003] <1> mov ax, word [regs + bx] 596 0000176C E88F5D <1> call hexword ; store low word 597 0000176F B020 <1> mov al, 32 598 00001771 AA <1> stosb ; store space 599 00001772 E2D1 <1> loop . 600 00001774 C3 <1> retn 601 <1> ; Note: This code doesn't use 386+ registers to display our internal 602 <1> ; variables for these. Currently, setting the RX bit of options 603 <1> ; will display the 32-bit variables even on non-386 machines. 604 <1> ; Changing this code to require EAX would require changes to our 605 <1> ; check too. 606 <1> ; 32-bit code probably wouldn't be much shorter than the current 607 <1> ; implementation as well. 608 <1> 609 <1> %if _RN 610 <1> ; The layout for FSAVE/FRSTOR depends on mode and 16-/32-bit. 611 <1> 612 <1> %if 0 613 <1> struc FPENV16 614 <1> .cw: resw 1 ; 00h 615 <1> .sw: resw 1 ; 02h 616 <1> .tw: resw 1 ; 04h 617 <1> .fip: resw 1 ; 06h IP offset 618 <1> .opc: ; 08h RM: opcode (0-10), IP 16-19 in high bits 619 <1> .fcs: resw 1 ; 08h PM: IP selector 620 <1> .fop: resw 1 ; 0Ah operand pointer offset 621 <1> .foph: ; 0Ch RM: operand pointer 16-19 in high bits 622 <1> .fos: resw 1 ; 0Ch PM: operand pointer selector 623 <1> endstruc; 0Eh 624 <1> 625 <1> struc FPENV32 626 <1> .cw: resd 1 ; 00h 627 <1> .sw: resd 1 ; 04h 628 <1> .tw: resd 1 ; 08h 629 <1> .fip: resd 1 ; 0Ch ip offset (RM: bits 0-15 only) 630 <1> .fopcr: ; 10h (dword) RM: opcode (0-10), ip (12-27) 631 <1> .fcs: resw 1 ; 10h PM: ip selector 632 <1> .fopcp: resw 1 ; 12h PM: opcode (bits 0-10) 633 <1> .foo: resd 1 ; 14h operand pointer offset (RM: bits 0-15 only) 634 <1> .fooh: ; 18h (dword) RM: operand pointer (12-27) 635 <1> .fos: resw 1 ; 18h PM: operand pointer selector 636 <1> resw 1 ; 1Ah PM: not used 637 <1> endstruc; 1Ch 638 <1> %endif 639 <1> 640 <1> 641 <1> usesection lDEBUG_DATA_ENTRY 641 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 642 <1> 643 <1> ; dumpregsFPU - Dump Floating Point Registers 644 <1> fregnames: 645 00004BAC 435753575457 <1> db "CW", "SW", "TW" 646 00004BB2 4F50433D49503D4450- <1> db "OPC=", "IP=", "DP=" 646 00004BBB 3D <1> 647 00004BBC 656D707479 <1> msg.empty: db "empty" 648 <1> endarea msg.empty 649 00004BC1 4E614E <1> msg.nan: db "NaN" 650 <1> endarea msg.nan 651 <1> 652 <1> 653 <1> usesection lDEBUG_CODE 653 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 654 <1> 655 <1> dumpregsFPU: 656 00001775 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 657 <1> ; => auxbuff 658 00001779 31FF <1> xor di, di ; -> auxbuff 659 0000177B B98000 <1> mov cx, 128 660 0000177E 31C0 <1> xor ax, ax 661 00001780 F3AB <1> rep stosw ; initialise auxbuff 662 <1> %if _AUXBUFFSIZE < (128 * 2) 663 <1> %error auxbuff not large enough for dumpregsFPU 664 <1> %endif 665 00001782 BF[A901] <1> mov di, line_out 666 00001785 BE[AC4B] <1> mov si, fregnames 667 00001788 31DB <1> xor bx, bx ; es:bx -> auxbuff 668 0000178A 66 <1> _386_o32 668 ****************** <1> expansion: entry = 6026 668 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026 668 ****************** <1> expansion: entry = 6027 669 0000178B 26DD37 <1> fnsave [es:bx] 670 <1> 671 <1> ; display CW, SW and TW 672 0000178E 16 <1> push ss 673 0000178F 07 <1> pop es ; es:di -> line_out 674 00001790 B90300 <1> mov cx, 3 675 <1> .nextfpr: 676 00001793 16 <1> push ss 677 00001794 1F <1> pop ds ; ds:si -> fregnames entry 678 00001795 A5 <1> movsw 679 00001796 B03D <1> mov al, '=' 680 00001798 AA <1> stosb 681 00001799 87F3 <1> xchg si, bx 682 0000179B 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] 683 <1> ; ds:si -> auxbuff entry 684 0000179F 66 <1> _386_o32 ; lodsd 684 ****************** <1> expansion: entry = 6047 684 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047 684 ****************** <1> expansion: entry = 6048 685 000017A0 AD <1> lodsw 686 000017A1 87F3 <1> xchg si, bx 687 000017A3 50 <1> push ax 688 000017A4 E8575D <1> call hexword 689 000017A7 B020 <1> mov al, 32 690 000017A9 AA <1> stosb 691 000017AA E2E7 <1> loop .nextfpr 692 <1> 693 <1> ; display OPC 694 <1> ; in 16-bit PM, there's no OPC 695 <1> ; in 32-bit PM, there's one, but the location differs from RM 696 000017AC 53 <1> push bx 697 <1> %if _PM 698 <1> call ispm 699 <1> jz .notpm_opc 700 <1> add bx, byte 2 ; location of OPC in PM differs from RM 701 <1> _no386 add si, byte 4 ; no OPC in 16-bit PM 702 <1> _no386 jmp short .no_opc 703 <1> .notpm_opc: 704 <1> %endif 705 000017AD 16 <1> push ss 706 000017AE 1F <1> pop ds ; ds:si -> fregnames entry 707 000017AF A5 <1> movsw 708 000017B0 A5 <1> movsw 709 000017B1 87F3 <1> xchg si, bx 710 000017B3 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] 711 <1> ; ds:si -> auxbuff entry 712 000017B7 66 <1> _386_o32 ; lodsd 712 ****************** <1> expansion: entry = 6071 712 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071 712 ****************** <1> expansion: entry = 6072 713 000017B8 AD <1> lodsw ; skip word/dword 714 000017B9 AD <1> lodsw 715 000017BA 87F3 <1> xchg si, bx 716 000017BC 25FF07 <1> and ax, 07FFh ; bits 0-10 only 717 000017BF E83C5D <1> call hexword 718 000017C2 B020 <1> mov al, 32 719 000017C4 AA <1> stosb 720 <1> .no_opc: 721 000017C5 5B <1> pop bx 722 <1> 723 <1> ; display IP and DP 724 000017C6 B102 <1> mov cl, 2 725 <1> .nextfp: 726 000017C8 51 <1> push cx 727 000017C9 16 <1> push ss 728 000017CA 1F <1> pop ds ; ds:si -> fregnames entry 729 000017CB A5 <1> movsw 730 000017CC A4 <1> movsb 731 000017CD 87F3 <1> xchg si, bx 732 000017CF 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] 733 <1> ; ds:si -> auxbuff entry 734 000017D3 66 <1> _386_o32 ; lodsd 734 ****************** <1> expansion: entry = 6099 734 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099 734 ****************** <1> expansion: entry = 6100 735 000017D4 AD <1> lodsw 736 000017D5 66 <1> _386_o32 ; mov edx, eax 736 ****************** <1> expansion: entry = 6101 736 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101 736 ****************** <1> expansion: entry = 6102 737 000017D6 89C2 <1> mov dx, ax 738 000017D8 66 <1> _386_o32 ; lodsd 738 ****************** <1> expansion: entry = 6104 738 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104 738 ****************** <1> expansion: entry = 6105 739 000017D9 AD <1> lodsw 740 000017DA 87F3 <1> xchg si, bx 741 000017DC 16 <1> push ss 742 000017DD 1F <1> pop ds ; ds:si -> fregnames entry 743 <1> %if _PM 744 <1> call ispm 745 <1> jz .notpm_ipdp 746 <1> call hexword 747 <1> mov al, ':' 748 <1> stosb 749 <1> jmp short .fppm 750 <1> .notpm_ipdp: 751 <1> %endif 752 000017DE B10C <1> mov cl, 12 753 000017E0 66 <1> _386_o32 ; shr eax, cl 753 ****************** <1> expansion: entry = 6112 753 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112 753 ****************** <1> expansion: entry = 6113 754 000017E1 D3E8 <1> shr ax, cl 755 000017E3 E8185D <1> _386 call hexword 755 ****************** <1> expansion: entry = 6115 755 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115 755 ****************** <1> expansion: entry = 6116 755 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116 755 ****************** <1> expansion: entry = 6117 755 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117 755 ****************** <1> expansion: entry = 6118 756 000017E6 EB03 <1> _386 jmp short .fppm 756 ****************** <1> expansion: entry = 6118 756 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118 756 ****************** <1> expansion: entry = 6119 756 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119 756 ****************** <1> expansion: entry = 6120 757 000017E8 E8255D <1> call hexnyb 758 <1> .fppm: 759 <1> _386_PM_o32 ; mov eax, edx 760 000017EB 89D0 <1> mov ax, dx 761 <1> _386_PM call ispm 762 <1> _386_PM jz .notpm_fppm 763 <1> _386_PM call hexword_high 764 <1> .notpm_fppm: 765 000017ED E80E5D <1> call hexword 766 000017F0 B020 <1> mov al, 32 767 000017F2 AA <1> stosb 768 000017F3 59 <1> pop cx 769 000017F4 E2D2 <1> loop .nextfp 770 <1> 771 000017F6 87F3 <1> xchg si, bx 772 000017F8 16 <1> push ss 773 000017F9 1F <1> pop ds ; ds = es = ss 774 000017FA E8325D <1> call trimputs 775 <1> 776 <1> ; display ST0..7 777 000017FD 5D <1> pop bp ; TW 778 000017FE 58 <1> pop ax ; SW 779 000017FF 5A <1> pop dx ; CW (discarded here) 780 <1> 781 00001800 B10A <1> mov cl, 10 782 00001802 D3E8 <1> shr ax, cl ; move TOP to bits 1..3 783 00001804 240E <1> and al, 1110b ; separate TOP 784 00001806 88C1 <1> mov cl, al 785 00001808 D3CD <1> ror bp, cl ; adjust TW 786 <1> 787 0000180A B130 <1> mov cl, '0' 788 <1> .nextst: 789 0000180C BF[A901] <1> mov di, line_out 790 0000180F 51 <1> push cx 791 00001810 B85354 <1> mov ax, "ST" 792 00001813 AB <1> stosw 793 00001814 88C8 <1> mov al, cl 794 00001816 B43D <1> mov ah, '=' 795 00001818 AB <1> stosw 796 00001819 57 <1> push di 797 0000181A A801 <1> test al, 1 798 0000181C B020 <1> mov al, 32 799 0000181E B91600 <1> mov cx, 22 800 00001821 F3AA <1> rep stosb 801 00001823 7404 <1> jz .oddst 802 00001825 B80D0A <1> mov ax, 10<<8|13 803 00001828 AB <1> stosw 804 <1> .oddst: 805 00001829 B000 <1> mov al, 0 806 0000182B AA <1> stosb ; make it an ASCIZ string 807 0000182C 5F <1> pop di 808 <1> 809 0000182D 89E8 <1> mov ax, bp 810 0000182F D1CD <1> ror bp, 1 811 00001831 D1CD <1> ror bp, 1 812 00001833 2403 <1> and al, 3 ; 00b = valid, 01b = zero, 10b = NaN, 11b = empty 813 00001835 741F <1> jz .isvalid 814 00001837 56 <1> push si 815 00001838 16 <1> push ss 816 00001839 1F <1> pop ds ; ds = es = ss 817 0000183A BE[BC4B] <1> mov si, msg.empty 818 0000183D B105 <1> mov cl, msg.empty_size 819 0000183F 3C03 <1> cmp al, 3 820 00001841 740E <1> je .gotst 821 00001843 BE[C14B] <1> mov si, msg.nan 822 00001846 B103 <1> mov cl, msg.nan_size 823 00001848 3C02 <1> cmp al, 2 824 0000184A 7405 <1> je .gotst 825 0000184C B030 <1> mov al, '0' 826 0000184E AA <1> stosb 827 0000184F 31C9 <1> xor cx, cx 828 <1> .gotst: 829 00001851 F3A4 <1> rep movsb 830 00001853 5E <1> pop si 831 00001854 EB34 <1> jmp short .regoutdone 832 <1> 833 <1> .isvalid: 834 00001856 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] 835 <1> ; ds:si -> auxbuff entry 836 0000185A 36F606[7C00]40 <1> testopt [ss:options], hexrn 836 ****************** <1> expansion: adr = '[ss:options]' 836 ****************** <1> expansion: len = 12 836 ****************** <1> expansion: tf = '[' 836 ****************** <1> expansion: tb = ']' 836 ****************** <1> expansion: adr = 'ss:options' 836 ****************** <1> expansion: adr = ss:options 837 00001860 7508 <1> jnz .hex 838 00001862 57 <1> push di ; -> buffer (first parameter; in es = ss) 839 00001863 1E <1> push ds 840 00001864 56 <1> push si ; -> auxbuff entry (second parameter) 841 00001865 E8D901 <1> call FloatToStr 842 00001868 EB20 <1> jmp short .regoutdone 843 <1> 844 <1> .hex: 845 0000186A 8B4408 <1> mov ax, word [si+8] 846 0000186D E88E5C <1> call hexword 847 00001870 B02E <1> mov al, '.' 848 00001872 AA <1> stosb 849 00001873 8B4406 <1> mov ax, word [si+6] 850 00001876 E8855C <1> call hexword 851 00001879 8B4404 <1> mov ax, word [si+4] 852 0000187C E87F5C <1> call hexword 853 0000187F 8B4402 <1> mov ax, word [si+2] 854 00001882 E8795C <1> call hexword 855 00001885 8B04 <1> mov ax, word [si+0] 856 00001887 E8745C <1> call hexword 857 <1> 858 <1> .regoutdone: 859 0000188A BA[A901] <1> mov dx, line_out 860 0000188D 16 <1> push ss 861 0000188E 1F <1> pop ds ; ds = es = ss 862 0000188F E8DD5E <1> call putsz 863 00001892 59 <1> pop cx 864 <1> 865 00001893 83C60A <1> add si, byte 10 ; -> next ST 866 00001896 FEC1 <1> inc cl 867 00001898 80F938 <1> cmp cl, '8' 868 0000189B 7403E96CFF <1> jne .nextst 869 000018A0 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 870 <1> ; es => auxbuff 871 000018A4 66 <1> _386_o32 871 ****************** <1> expansion: entry = 6308 871 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308 871 ****************** <1> expansion: entry = 6309 872 000018A5 26DD260000 <1> frstor [es:0] 873 000018AA C3 <1> retn 874 <1> %endif 875 <1> 876 <1> 877 <1> ; DMPFLAGS - Dump flags output. 878 <1> dmpflags: 879 000018AB BE[C849] <1> mov si, flagbits 880 000018AE B90800 <1> mov cx, 8 881 000018B1 AD <1> .loop: lodsw 882 000018B2 8506[7C03] <1> test ax, word [reg_efl] 883 000018B6 8B441E <1> mov ax, word [si+(flagsoff-flagbits)-2] 884 000018B9 7403 <1> jz .off ; if not set 885 000018BB 8B440E <1> mov ax, word [si+(flagson-flagbits)-2] 886 000018BE AB <1> .off: stosw 887 000018BF B020 <1> mov al, 32 888 000018C1 AA <1> stosb 889 000018C2 E2ED <1> loop .loop 890 000018C4 4F <1> dec di ; -> last (unnecessary) blank 891 000018C5 C3 <1> retn 892 <1> 893 <1> 894 <1> %if _OPTIONS || _VARIABLES 895 <1> dumpvars: 896 <1> %if _VARIABLES 897 000018C6 BE[8003] <1> mov si, vregs 898 <1> %endif 899 000018C9 31DB <1> xor bx, bx 900 <1> .loop: 901 000018CB BF[A901] <1> mov di, line_out 902 000018CE 31D2 <1> xor dx, dx 903 <1> %if _VARIABLES 904 000018D0 B90400 <1> mov cx, 4 905 000018D3 E87400 <1> call .dump ; display four variables 906 000018D6 43 <1> inc bx ; (would be one off here) 907 000018D7 56 <1> push si 908 <1> %else 909 <1> add bx, byte 4 ; (no motivation to optimize that) 910 <1> %endif 911 <1> %if _OPTIONS 912 <1> %if _VARIABLES 913 000018D8 B82020 <1> mov ax, 32<<8|32 914 000018DB AB <1> stosw ; more blanks inbetween 915 <1> %endif 916 000018DC 80FB10 <1> cmp bl, 16 917 000018DF 7436 <1> je .3 918 000018E1 80FB08 <1> cmp bl, 8 919 000018E4 771E <1> ja .2 920 000018E6 740E <1> je .1 921 <1> 922 <1> ; First line, display DCO and DCS 923 <1> .0: 924 000018E8 B8434F <1> mov ax, "CO" 925 000018EB BE[7C00] <1> mov si, options 926 000018EE E84A00 <1> call .dump_option 927 000018F1 B84353 <1> mov ax, "CS" 928 000018F4 EB36 <1> jmp short .next 929 <1> 930 <1> ; Second line, DAO and DAS 931 <1> .1: 932 000018F6 B8414F <1> mov ax, "AO" 933 000018F9 BE[8C00] <1> mov si, asm_options 934 000018FC E83C00 <1> call .dump_option 935 000018FF B84153 <1> mov ax, "AS" 936 00001902 EB28 <1> jmp short .next 937 <1> 938 <1> ; Third line, DIF and DPI 939 <1> .2: 940 00001904 B84946 <1> mov ax, "IF" 941 00001907 BE[8400] <1> mov si, internalflags 942 0000190A E82E00 <1> call .dump_option 943 0000190D B85049 <1> mov ax, "PI" 944 00001910 BE[8002] <1> mov si, psp22 945 00001913 42 <1> inc dx 946 00001914 42 <1> inc dx 947 00001915 EB15 <1> jmp short .next 948 <1> 949 <1> ; Fourth line, DPR, DPS (if _PM) and DPP 950 <1> .3: 951 00001917 42 <1> inc dx 952 00001918 B85052 <1> mov ax, "PR" 953 0000191B BE[6602] <1> mov si, pspdbg 954 0000191E E81A00 <1> call .dump_option 955 <1> %if _PM 956 <1> xor ax, ax 957 <1> call ispm 958 <1> jnz .3_rm 959 <1> push ds 960 <1> db __TEST_IMM8 ; (skip push) 961 <1> .3_rm: 962 <1> push ax 963 <1> mov ax, "PS" 964 <1> mov si, sp 965 <1> call .dump_options 966 <1> pop ax 967 <1> %else 968 00001921 B82020 <1> mov ax, 32<<8|32 969 00001924 AB <1> stosw 970 00001925 AB <1> stosw 971 <1> %endif 972 00001926 B85050 <1> mov ax, "PP" 973 00001929 BE[8402] <1> mov si, parent 974 <1> 975 <1> .next: 976 0000192C E80C00 <1> call .dump_options 977 <1> %endif 978 0000192F 53 <1> push bx 979 00001930 E8035C <1> call putsline_crlf ; display line 980 00001933 5B <1> pop bx ; (retain counter) 981 <1> %if _VARIABLES 982 00001934 5E <1> pop si ; (retain pointer to next variable) 983 <1> %endif 984 00001935 80FB10 <1> cmp bl, 16 ; was end ? 985 00001938 7591 <1> jne .loop ; no, loop --> 986 0000193A C3 <1> retn ; done 987 <1> 988 <1> ; INP: ax = 2-byte option name ('N' will precede this) 989 <1> ; d[si] = value 990 <1> ; OUT: si-> behind value 991 <1> ; cx = 0 992 <1> ; CHG: ax 993 <1> .dump_options: 994 <1> %if _VARIABLES 995 <1> .dump_option: 996 0000193B C7052044 <1> mov word [di], " D" 997 0000193F AF <1> scasw 998 <1> %else 999 <1> mov byte [di], ' ' 1000 <1> inc di 1001 <1> .dump_option: 1002 <1> mov byte [di], 'D' 1003 <1> inc di 1004 <1> %endif 1005 00001940 AB <1> stosw 1006 <1> %if _VARIABLES ; falls through otherwise, always count 1 1007 00001941 B90100 <1> mov cx, 1 1008 00001944 EB0C <1> jmp short .dump_one 1009 <1> %endif 1010 <1> 1011 <1> %if 0 1012 <1> PM && OPTIONS && VARIABLES 1013 <1> V0=00000000 V1=00000000 V2=00000000 V3=00000000 DCO=00000000 DCS=00000000 1014 <1> V4=00000000 V5=00000000 V6=00000000 V7=00000000 DAO=00000000 DAS=00000000 1015 <1> V8=00000000 V9=00000000 VA=00000000 VB=00000000 DIF=0000840D DPI=0616:01DE 1016 <1> VC=00000000 VD=00000000 VE=00000000 VF=00000000 DPR=0984 DPS=0000 DPP=0616 1017 <1> 1018 <1> !PM && OPTIONS && VARIABLES 1019 <1> V0=00000000 V1=00000000 V2=00000000 V3=00000000 DCO=00000000 DCS=00000000 1020 <1> V4=00000000 V5=00000000 V6=00000000 V7=00000000 DAO=00000000 DAS=00000000 1021 <1> V8=00000000 V9=00000000 VA=00000000 VB=00000000 DIF=0000840D DPI=0616:01DE 1022 <1> VC=00000000 VD=00000000 VE=00000000 VF=00000000 DPR=0984 DPP=0616 1023 <1> 1024 <1> !OPTIONS && VARIABLES 1025 <1> V0=00000000 V1=00000000 V2=00000000 V3=00000000 1026 <1> V4=00000000 V5=00000000 V6=00000000 V7=00000000 1027 <1> V8=00000000 V9=00000000 VA=00000000 VB=00000000 1028 <1> VC=00000000 VD=00000000 VE=00000000 VF=00000000 1029 <1> 1030 <1> !PM && OPTIONS && !VARIABLES 1031 <1> DCO=00000000 DCS=00000000 1032 <1> DAO=00000000 DAS=00000000 1033 <1> DIF=0000840D DPI=0616:01DE 1034 <1> DPR=0984 DPP=0616 1035 <1> 1036 <1> PM && OPTIONS && !VARIABLES 1037 <1> DCO=00000000 DCS=00000000 1038 <1> DAO=00000000 DAS=00000000 1039 <1> DIF=0000840D DPI=0616:01DE 1040 <1> DPR=0984 DPS=0000 DPP=0616 1041 <1> 1042 <1> !OPTIONS && !VARIABLES 1043 <1> %endif 1044 <1> %if 0 1045 <1> DCO Debugger Common Options 1046 <1> DCS Debugger Common Startup options 1047 <1> DIF Debugger Internal Flags 1048 <1> DPR Debugger Process (Real-mode segment) 1049 <1> DPS Debugger Process Selector, or zero 1050 <1> DPP Debugger Parent Process 1051 <1> DPI Debugger Parent Interrupt 22h 1052 <1> DAO Debugger Assembler/disassembler Options 1053 <1> DAS Debugger Assembler/disassembler Startup options 1054 <1> %endif 1055 <1> 1056 <1> %if _VARIABLES 1057 <1> .dump_loop: 1058 00001946 43 <1> inc bx 1059 00001947 B020 <1> mov al, 32 1060 00001949 AA <1> stosb 1061 <1> .dump: 1062 0000194A B056 <1> mov al, 'V' 1063 0000194C AA <1> stosb 1064 0000194D 88D8 <1> mov al, bl 1065 0000194F E8BE5B <1> call hexnyb 1066 <1> %endif 1067 <1> .dump_one: 1068 00001952 B03D <1> mov al, '=' 1069 00001954 AA <1> stosb 1070 00001955 AD <1> lodsw 1071 00001956 80FA01 <1> cmp dl, 1 1072 00001959 740D <1> je .dumpw 1073 0000195B 50 <1> push ax 1074 0000195C AD <1> lodsw 1075 0000195D 9C <1> pushf 1076 0000195E E89D5B <1> call hexword 1077 00001961 9D <1> popf 1078 00001962 7203 <1> jb .nocolon 1079 00001964 B03A <1> mov al, ':' 1080 00001966 AA <1> stosb 1081 <1> .nocolon: 1082 00001967 58 <1> pop ax 1083 <1> .dumpw: 1084 00001968 E8935B <1> call hexword 1085 <1> %if _VARIABLES 1086 0000196B E2D9 <1> loop .dump_loop 1087 <1> %endif 1088 0000196D C3 <1> retn 1089 <1> %endif 1090 <1> 1091 <1> %if _MMXSUPP 1092 <1> cpu 586 1092 ****************** <1> expansion: __CPU__ = [cpu 586] 1093 <1> dumpregsMMX: 1094 0000196E 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] ; => auxbuff 1095 00001972 66 <1> o32 1096 00001973 DD360000 <1> fnsave [0] 1097 00001977 BE1C00 <1> mov si, 7*4 1098 0000197A B130 <1> mov cl, '0' 1099 0000197C BF[A901] <1> mov di, line_out 1100 <1> .nextreg: 1101 0000197F 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] ; => auxbuff 1102 00001983 B84D4D <1> mov ax, "MM" 1103 00001986 AB <1> stosw 1104 00001987 88C8 <1> mov al, cl 1105 00001989 B43D <1> mov ah, '=' 1106 0000198B AB <1> stosw 1107 0000198C 51 <1> push cx 1108 0000198D B208 <1> mov dl, 8 1109 <1> .nextbyte: 1110 0000198F AC <1> lodsb 1111 00001990 E8725B <1> call hexbyte 1112 00001993 B020 <1> mov al, 32 1113 00001995 F6C201 <1> test dl, 1 1114 00001998 7402 <1> jz .oddbyte 1115 0000199A B02D <1> mov al, '-' 1116 <1> .oddbyte: 1117 0000199C AA <1> stosb 1118 0000199D FECA <1> dec dl 1119 0000199F 75EE <1> jnz .nextbyte 1120 000019A1 4F <1> dec di 1121 000019A2 B82020 <1> mov ax, 32<<8|32 1122 000019A5 AB <1> stosw 1123 000019A6 83C602 <1> add si, byte 2 1124 000019A9 59 <1> pop cx 1125 000019AA F6C101 <1> test cl, 1 1126 000019AD 740A <1> jz .oddreg 1127 000019AF 51 <1> push cx 1128 000019B0 16 <1> push ss 1129 000019B1 1F <1> pop ds ; ds = es = ss 1130 000019B2 E87A5B <1> call trimputs 1131 000019B5 59 <1> pop cx 1132 000019B6 BF[A901] <1> mov di, line_out 1133 <1> .oddreg: 1134 000019B9 FEC1 <1> inc cl 1135 000019BB 80F938 <1> cmp cl, '8' 1136 000019BE 75BF <1> jne .nextreg 1137 000019C0 8E1E[2C02] <1> mov ds, word [auxbuff_segorsel] ; => auxbuff 1138 000019C4 66 <1> o32 1139 000019C5 D9260000 <1> fldenv [0] 1140 000019C9 C3 <1> retn 1141 <1> cpu 8086 1141 ****************** <1> expansion: __CPU__ = [cpu 8086] 1142 <1> %endif 1508 %if _RN 1509 %include "fptostr.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> Copyright (C) 2008-2012 C. Masloch 5 <1> 6 <1> Usage of the works is permitted provided that this 7 <1> instrument is retained with the works, so that any entity 8 <1> that uses the works is notified of this instrument. 9 <1> 10 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 11 <1> 12 <1> %endif 13 <1> 14 <1> 15 <1> usesection lDEBUG_DATA_ENTRY 15 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 16 <1> 17 <1> ;--- defines procedures 18 <1> ;--- PowerOf10 19 <1> ;--- FloatToBCD 20 <1> ;--- FloatToStr 21 <1> 22 <1> ; These are bits in the FP status word. 23 <1> 24 <1> FP_LESSTHAN equ 01h 25 <1> FP_EQUALTO equ 40h 26 <1> 27 00004BC4 0000000000002440 <1> ten: dq 10.0 28 00004BCC 0080E03779C34143 <1> ten16: dq 1.0e16 29 <1> ;rounder:dq 5.0e10 30 <1> 31 00004BD4 00000000000000A002- <1> ten_1: dt 1.0e1 ; 10.0 31 00004BDD 40 <1> 32 00004BDE 00000000000000C805- <1> dt 1.0e2 ; 100.0 32 00004BE7 40 <1> 33 00004BE8 00000000000000FA08- <1> dt 1.0e3 ; 1,000.0 33 00004BF1 40 <1> 34 00004BF2 000000000000409C0C- <1> dt 1.0e4 ; 10,000.0 34 00004BFB 40 <1> 35 00004BFC 00000000000050C30F- <1> dt 1.0e5 ; 100,000.0 35 00004C05 40 <1> 36 00004C06 00000000000024F412- <1> dt 1.0e6 ; 1,000,000.0 36 00004C0F 40 <1> 37 00004C10 000000000080969816- <1> dt 1.0e7 ; 10,000,000.0 37 00004C19 40 <1> 38 00004C1A 000000000020BCBE19- <1> dt 1.0e8 ; 100,000,000.0 38 00004C23 40 <1> 39 00004C24 0000000000286BEE1C- <1> dt 1.0e9 ; 1,000,000,000.0 39 00004C2D 40 <1> 40 00004C2E 0000000000F9029520- <1> dt 1.0e10 ; 10,000,000,000.0 40 00004C37 40 <1> 41 00004C38 0000000040B743BA23- <1> dt 1.0e11 ; 100,000,000,000.0 41 00004C41 40 <1> 42 00004C42 0000000010A5D4E826- <1> dt 1.0e12 ; 1,000,000,000,000.0 42 00004C4B 40 <1> 43 00004C4C 000000002AE784912A- <1> dt 1.0e13 ; 10,000,000,000,000.0 43 00004C55 40 <1> 44 00004C56 00000080F420E6B52D- <1> dt 1.0e14 ; 100,000,000,000,000.0 44 00004C5F 40 <1> 45 00004C60 000000A031A95FE330- <1> dt 1.0e15 ; 1,000,000,000,000,000.0 45 00004C69 40 <1> 46 <1> 47 00004C6A 00000004BFC91B8E34- <1> ten_16: dt 1.0e16 47 00004C73 40 <1> 48 00004C74 9EB5702BA8ADC59D69- <1> dt 1.0e32 48 00004C7D 40 <1> 49 00004C7E D795430E058D29AF9E- <1> dt 1.0e48 49 00004C87 40 <1> 50 00004C88 D5A6CFFF491F78C2D3- <1> dt 1.0e64 50 00004C91 40 <1> 51 00004C92 FCF7DA878F7AE7D708- <1> dt 1.0e80 51 00004C9B 41 <1> 52 00004C9C A3149BC516ABB3EF3D- <1> dt 1.0e96 52 00004CA5 41 <1> 53 00004CA6 9E322399C0AD0F8573- <1> dt 1.0e112 53 00004CAF 41 <1> 54 00004CB0 E08CE980C947BA93A8- <1> dt 1.0e128 54 00004CB9 41 <1> 55 00004CBA E7A6D3A8C5B902A4DD- <1> dt 1.0e144 55 00004CC3 41 <1> 56 00004CC4 AA17E67F2BA116B612- <1> dt 1.0e160 56 00004CCD 42 <1> 57 00004CCE 93BF9B8591A228CA47- <1> dt 1.0e176 57 00004CD7 42 <1> 58 00004CD8 6B5527398DF770E07C- <1> dt 1.0e192 58 00004CE1 42 <1> 59 00004CE2 46618237350C2EF9B1- <1> dt 1.0e208 59 00004CEB 42 <1> 60 00004CEC 30C93CE3FF96528AE7- <1> dt 1.0e224 60 00004CF5 42 <1> 61 00004CF6 6617BFD6F3A691991C- <1> dt 1.0e240 61 00004CFF 43 <1> 62 <1> 63 00004D00 8EDEF99DFBEB7EAA51- <1> ten_256:dt 1.0e256 63 00004D09 43 <1> 64 <1> 65 <1> ; The remaining exponents are only necessary for 10-byte doubles. 66 <1> 67 00004D0A C7910EA6AEA019E3A3- <1> dt 1.0e512 67 00004D13 46 <1> 68 00004D14 8CA600CDA89C3F97F6- <1> dt 1.0e768 68 00004D1D 49 <1> 69 00004D1E 170C7581867576C948- <1> dt 1.0e1024 69 00004D27 4D <1> 70 00004D28 CB6E85EB0E8C2C869B- <1> dt 1.0e1280 70 00004D31 50 <1> 71 00004D32 E4A793393B35B8B2ED- <1> dt 1.0e1536 71 00004D3B 53 <1> 72 00004D3C 8CB84A9284DD0DEE3F- <1> dt 1.0e1792 72 00004D45 57 <1> 73 00004D46 E55D3DC55D3B8B9E92- <1> dt 1.0e2048 73 00004D4F 5A <1> 74 00004D50 6F80F44132202ED3E4- <1> dt 1.0e2304 74 00004D59 5D <1> 75 00004D5A A6F0A120C054A58C37- <1> dt 1.0e2560 75 00004D63 61 <1> 76 00004D64 CC77D99B9A0A57BB89- <1> dt 1.0e2816 76 00004D6D 64 <1> 77 00004D6E 8B5A8BD8255D89F9DB- <1> dt 1.0e3072 77 00004D77 67 <1> 78 00004D78 45FE99567DEF30A62E- <1> dt 1.0e3328 78 00004D81 6B <1> 79 00004D82 F8F327BFA2C85DDD80- <1> dt 1.0e3584 79 00004D8B 6E <1> 80 00004D8C 9B97208A025260C425- <1> dt 1.0e4096 80 00004D95 75 <1> 81 00004D96 B41CE17BE352C98278- <1> dt 1.0e4352 81 00004D9F 78 <1> 82 00004DA0 F059D56E621135AECA- <1> dt 1.0e4608 82 00004DA9 7B <1> 83 00004DAA 6D6D14B97F380BE81C- <1> dt 1.0e4864 83 00004DB3 7F <1> 84 <1> 85 <1> 86 <1> usesection lDEBUG_CODE 86 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 87 <1> 88 <1> ; Divide or multiply st0 to normalize it 89 <1> ; 90 <1> ; INP: ax = exponent word 91 <1> ; CHG: bx, dx, cl 92 <1> PowerOf10: 93 000019CA 56 <1> push si 94 000019CB 50 <1> push ax 95 000019CC 85C0 <1> test ax, ax 96 000019CE 7902 <1> jns .notnegative 97 000019D0 F7D8 <1> neg ax 98 <1> .notnegative: 99 000019D2 D9E8 <1> fld1 100 000019D4 88C3 <1> mov bl, al 101 000019D6 80E30F <1> and bl, 0Fh ; bits 0..3 102 000019D9 7406 <1> je .0..3zero 103 000019DB BE[D44B] <1> mov si, ten_1 104 000019DE E82B00 <1> call mul10 105 <1> .0..3zero: 106 000019E1 88C3 <1> mov bl, al 107 000019E3 B104 <1> mov cl, 4 108 000019E5 D2EB <1> shr bl, cl 109 000019E7 80E30F <1> and bl, 0Fh ; bits 4..7 110 000019EA 7406 <1> je .4..7zero 111 000019EC BE[6A4C] <1> mov si, ten_16 112 000019EF E81A00 <1> call mul10 113 <1> .4..7zero: 114 000019F2 88E3 <1> mov bl, ah 115 000019F4 80E31F <1> and bl, 1Fh ; bits 8..12 116 000019F7 7406 <1> jz .8..12zero 117 000019F9 BE[004D] <1> mov si, ten_256 118 000019FC E80D00 <1> call mul10 119 <1> .8..12zero: 120 000019FF 58 <1> pop ax 121 00001A00 85C0 <1> test ax, ax 122 00001A02 7904 <1> jns .notnegative2 123 00001A04 DEF9 <1> fdivp st1 124 00001A06 5E <1> pop si 125 00001A07 C3 <1> retn 126 <1> 127 <1> .notnegative2: 128 00001A08 DEC9 <1> fmulp st1 129 00001A0A 5E <1> pop si 130 00001A0B C3 <1> retn 131 <1> 132 <1> mul10: 133 00001A0C FECB <1> dec bl 134 00001A0E B700 <1> mov bh, 0 135 00001A10 50 <1> push ax 136 00001A11 89D8 <1> mov ax, bx 137 00001A13 01C0 <1> add ax, ax 138 00001A15 01C0 <1> add ax, ax ; *4 139 00001A17 01C3 <1> add bx, ax ; *5 140 00001A19 01DB <1> add bx, bx ; *10 141 00001A1B 58 <1> pop ax 142 00001A1C DB28 <1> fld tword [bx + si] 143 00001A1E DEC9 <1> fmulp st1 144 00001A20 C3 <1> retn 145 <1> 146 <1> 147 <1> ; Convert a floating point register to ASCII. For internal use. 148 <1> ; The result always has exactly 18 digits, with zero padding 149 <1> ; on the left if required. 150 <1> ; 151 <1> ; INP: st0 = number to convert, 0 <= st0 < 1.0E19 152 <1> ; di-> 18-character output buffer 153 <1> ; CHG: si, di, cx, ax 154 <1> FloatToBCD: 155 00001A21 55 <1> push bp 156 00001A22 89E5 <1> mov bp, sp 157 00001A24 83EC0C <1> sub sp, 12 158 <1> 159 <1> ; The fbstp instruction converts the top of the stack to 160 <1> ; a packed BCD form in ten bytes, with two digits per 161 <1> ; byte. The top byte has the sign, which we ignore. 162 00001A27 DF76F4 <1> fbstp [ bp-12 ] 163 <1> 164 <1> ; Now we need to unpack the BCD to ASCII. 165 00001A2A 8D76FC <1> lea si, [ bp-4 ] 166 00001A2D B90900 <1> mov cx, 9 167 <1> .nextdigits: 168 00001A30 8A04 <1> mov al, byte [ si ] ; xxxx xxxx AAAA BBBB 169 00001A32 4E <1> dec si 170 <1> %if 0 171 <1> mov ah, 0 ; 0000 0000 AAAA BBBB 172 <1> push cx 173 <1> mov cl, 4 174 <1> ror ax, cl ; BBBB xxxx xxxx AAAA 175 <1> rol ah, cl ; xxxx BBBB xxxx AAAA 176 <1> pop cx 177 <1> ;and ax, 0F0Fh ; 0000 BBBB 0000 AAAA 178 <1> %else 179 00001A33 D410 <1> aam 16 ; 0000 AAAA 0000 BBBB 180 00001A35 86C4 <1> xchg al, ah ; 0000 BBBB 0000 AAAA 181 <1> %endif 182 00001A37 053030 <1> add ax, "00" 183 00001A3A AB <1> stosw 184 00001A3B E2F3 <1> loop .nextdigits 185 00001A3D 89EC <1> mov sp, bp 186 00001A3F 5D <1> pop bp 187 00001A40 C3 <1> retn 188 <1> 189 <1> 190 <1> ; Convert a double precision number to a string. 191 <1> ; 192 <1> ; Entry: dword [far pfpin] -> 8-byte double to convert, non-zero 193 <1> ; es = ss : word [pszDbl] -> character buffer 194 <1> ; 195 <1> ; Exit: es = ss : word [pszDbl] -> converted value 196 <1> ; 197 <1> ; CHG: ax, bx, cx, dx 198 <1> ; 199 <1> ; The buffer at pszDbl should be at least 19 bytes long. 200 <1> ; The buffer needs to be initialized with blanks. 201 <1> 202 <1> ;FloatToStr PROC stdcall public USES si di pfpin: ptr TBYTE, pszDbl: PTR BYTE 203 <1> FloatToStr: 204 <1> lframe near 204 ****************** <1> expansion: bits = 16 204 ****************** <1> expansion: base_size = 2 204 ****************** <1> expansion: near_offset = 2 204 ****************** <1> expansion: far_offset = 4 204 ****************** <1> expansion: int_offset = 6 204 ****************** <1> expansion: inner = 0 204 ****************** <1> expansion: nested = 0 204 ****************** <1> expansion: autoret = 204 ****************** <1> expansion: autoret = near 204 ****************** <1> expansion: parofs = 2 204 ****************** <1> expansion: pars_size = 0 204 ****************** <1> expansion: pars_return_size = 0 204 ****************** <1> expansion: parlist = 204 ****************** <1> expansion: labellist = empty,empty,empty 204 ****************** <1> expansion: ofs = 0 204 ****************** <1> expansion: enter = 0 204 ****************** <1> expansion: req = 0 204 ****************** <1> expansion: usereq = 0 204 ****************** <1> expansion: emit = 1 204 ****************** <1> expansion: restore_frame_ofs = 0 204 ****************** <1> expansion: pars_inner_size = 0 205 <1> lpar word, ??pszDbl ; pszDbl: PTR BYTE, near 205 ****************** <1> expansion: varsize = 2 205 ****************** <1> expansion: newlabel = ??pszDbl 205 ****************** <1> expansion: labellist = ??pszDbl,undefined,,empty,empty,empty 205 ****************** <1> expansion: pars_size = 2 205 ****************** <1> expansion: parlist = 2,??pszDbl 205 ****************** <1> expansion: req = 1 206 <1> lpar dword, ??pfpin ; pfpin: ptr TBYTE, but far 206 ****************** <1> expansion: varsize = 4 206 ****************** <1> expansion: newlabel = ??pfpin 206 ****************** <1> expansion: labellist = ??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 206 ****************** <1> expansion: pars_size = 6 206 ****************** <1> expansion: parlist = 2,??pszDbl,4,??pfpin 206 ****************** <1> expansion: req = 1 207 <1> lvar word, ??iExp ; LOCAL iExp: WORD 207 ****************** <1> expansion: varsize = 2 207 ****************** <1> expansion: ofs = -2 207 ****************** <1> expansion: newlabel = ??iExp 207 ****************** <1> expansion: labellist = ??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 207 ****************** <1> expansion: ???iExp = -2 207 ****************** <1> expansion: req = 1 207 ****************** <1> expansion: hadvar = 1 208 <1> lvar word, ??mystat ; LOCAL mystat: WORD 208 ****************** <1> expansion: varsize = 2 208 ****************** <1> expansion: ofs = -4 208 ****************** <1> expansion: newlabel = ??mystat 208 ****************** <1> expansion: labellist = ??mystat,undefined,,??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 208 ****************** <1> expansion: ???mystat = -4 208 ****************** <1> expansion: req = 1 208 ****************** <1> expansion: hadvar = 1 209 <1> lvar 10, ??fpin ; LOCAL fpin: TBYTE 209 ****************** <1> expansion: varsize = 10 209 ****************** <1> expansion: ofs = -14 209 ****************** <1> expansion: newlabel = ??fpin 209 ****************** <1> expansion: labellist = ??fpin,undefined,,??mystat,undefined,,??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 209 ****************** <1> expansion: ???fpin = -14 209 ****************** <1> expansion: req = 1 209 ****************** <1> expansion: hadvar = 1 210 <1> lvar 22, ??szTemp ; LOCAL szTemp[22]: BYTE 210 ****************** <1> expansion: varsize = 22 210 ****************** <1> expansion: ofs = -36 210 ****************** <1> expansion: newlabel = ??szTemp 210 ****************** <1> expansion: labellist = ??szTemp,undefined,,??fpin,undefined,,??mystat,undefined,,??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 210 ****************** <1> expansion: ???szTemp = -36 210 ****************** <1> expansion: req = 1 210 ****************** <1> expansion: hadvar = 1 211 00001A41 5589E58D66DC <1> lenter 211 ****************** <1> expansion: wasearly = 0 211 ****************** <1> expansion: early = 0 211 ****************** <1> expansion: lsizevariables = 36 211 ****************** <1> expansion: req = 1 211 ****************** <1> expansion: enter_emitted = 0 211 ****************** <1> expansion: enter = 1 211 ****************** <1> expansion: 186 = 0 211 ****************** <1> expansion: newlabel = frame_bp 211 ****************** <1> expansion: labellist = frame_bp,undefined,,??szTemp,undefined,,??fpin,undefined,,??mystat,undefined,,??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 211 ****************** <1> expansion: ?frame_bp = 0 211 ****************** <1> expansion: newlabel = frame_ip 211 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,??szTemp,undefined,,??fpin,undefined,,??mystat,undefined,,??iExp,undefined,,??pfpin,undefined,,??pszDbl,undefined,,empty,empty,empty 211 ****************** <1> expansion: ?frame_ip = 2 211 ****************** <1> expansion: lsizeparameters = 6 211 ****************** <1> expansion: pars_size = 4 211 ****************** <1> expansion: ???pszDbl = 8 211 ****************** <1> expansion: pars_size = 0 211 ****************** <1> expansion: ???pfpin = 4 212 <1> 213 <1> %define iExp bp+???%+%? 213 ****************** <1> expansion: iExp = bp+???%+%? 214 <1> %define mystat bp+???%+%? 214 ****************** <1> expansion: mystat = bp+???%+%? 215 <1> %define fpin bp+???%+%? 215 ****************** <1> expansion: fpin = bp+???%+%? 216 <1> %define szTemp bp+???%+%? 216 ****************** <1> expansion: szTemp = bp+???%+%? 217 <1> %define pfpin bp+???%+%? 217 ****************** <1> expansion: pfpin = bp+???%+%? 218 <1> %define pszDbl bp+???%+%? 218 ****************** <1> expansion: pszDbl = bp+???%+%? 219 <1> 220 00001A47 1E <1> push ds 221 00001A48 56 <1> push si ; USES si 222 00001A49 06 <1> push es 223 00001A4A 57 <1> push di ; USES di 224 <1> 225 <1> ; Special case zero has been filtered already. (fxtract fails for zero.) 226 00001A4B C57604 <1> lds si, [pfpin] 227 00001A4E 16 <1> push ss 228 00001A4F 07 <1> pop es 229 00001A50 8D7EF2 <1> lea di, [fpin] 230 00001A53 B90500 <1> mov cx, 5 231 00001A56 F3A5 <1> rep movsw ; store number in local buffer 232 00001A58 16 <1> push ss 233 00001A59 1F <1> pop ds 234 <1> 235 00001A5A 8B7E08 <1> mov di, [pszDbl] ; -> output buffer 236 <1> 237 <1> ; Check for a negative number. 238 00001A5D F646FB80 <1> test byte [fpin+9], 80h 239 00001A61 7407 <1> jz .ispositive 240 00001A63 8066FB7F <1> and byte [fpin+9], ~80h ; change to positive 241 00001A67 B02D <1> mov al, '-' ; store a minus sign 242 00001A69 AA <1> stosb 243 <1> .ispositive: 244 <1> 245 <1> ; Load our value onto the stack two times. 246 00001A6A DB6EF2 <1> fld tword [fpin] 247 00001A6D D9C0 <1> fld st0 248 <1> 249 <1> ; Compute the closest power of 10 below the number. We can't get an 250 <1> ; exact value because of rounding. We could get close by adding in 251 <1> ; log10(mantissa), but it still wouldn't be exact. Since we'll have to 252 <1> ; check the result anyway, it's silly to waste cycles worrying about 253 <1> ; the mantissa. 254 <1> ; 255 <1> ; The exponent is basically log2(fpin). Those of you who remember 256 <1> ; algebra realize that log2(fpin) x log10(2) = log10(fpin), which is 257 <1> ; what we want. 258 <1> 259 00001A6F D9F4 <1> fxtract ; ST = mantissa, exponent, fpin 260 00001A71 DDD8 <1> fstp st0 ; discard the mantissa 261 00001A73 D9EC <1> fldlg2 ; push log10(2) 262 00001A75 DEC9 <1> fmulp st1, st0 ; ST = log10(fpin), fpin 263 00001A77 DF5EFE <1> fistp word [iExp] ; ST = fpin 264 <1> 265 <1> ; An 8-byte double can carry almost 16 digits of precision. Actually, it's 266 <1> ; 15.9 digits, so some numbers close to 1E17 will be wrong in the bottom 267 <1> ; digit. If this is a concern, change the 18 or 16 to a 15. 268 <1> ; 269 <1> ; A 10-byte double can carry almost 19 digits, but fbstp only stores the 270 <1> ; guaranteed 18. Since we're doing 10-byte doubles, we check for 18 instead of 16. 271 <1> 272 00001A7A 837EFE12 <1> cmp word [iExp], 18 273 00001A7E 7332 <1> jae .notbelow18 274 00001A80 D9C0 <1> fld st0 ; ST = fpin, fpin 275 00001A82 D9FC <1> frndint ; ST = int(fpin), fpin 276 00001A84 D8D9 <1> fcomp st1 ; ST = fpin, status set 277 00001A86 9BDD7EFC <1> fstsw word [mystat] 278 00001A8A 8B46FC <1> mov ax, word [mystat] 279 00001A8D 9E <1> sahf 280 00001A8E 7522 <1> jne .notequal 281 <1> 282 <1> ; We have an integer! Lucky day. Go convert it into a temp buffer. 283 <1> 284 00001A90 57 <1> push di 285 00001A91 8D7EDC <1> lea di, [szTemp] 286 00001A94 E88AFF <1> call FloatToBCD 287 00001A97 5F <1> pop di 288 <1> 289 00001A98 B81100 <1> mov ax, 16+1 290 00001A9B 8B4EFE <1> mov cx, word [iExp] 291 00001A9E 29C8 <1> sub ax, cx 292 00001AA0 41 <1> inc cx 293 00001AA1 8D76DC <1> lea si, [szTemp] 294 00001AA4 01C6 <1> add si, ax 295 <1> 296 <1> ; The off-by-one order of magnitude problem below can hit us here. 297 <1> ; We just trim off the possible leading zero. 298 <1> 299 00001AA6 803C30 <1> cmp byte [si], '0' 300 00001AA9 7502 <1> jnz .not0digit 301 00001AAB 46 <1> inc si 302 00001AAC 49 <1> dec cx 303 <1> .not0digit: 304 <1> 305 <1> ; Copy the rest of the converted BCD value to our buffer. 306 <1> 307 00001AAD F3A4 <1> rep movsb 308 00001AAF E99800 <1> jmp .ftsExit 309 <1> 310 <1> .notequal: 311 <1> .notbelow18: 312 <1> 313 <1> ; Have fbstp round to 17 places. 314 <1> 315 00001AB2 B81000 <1> mov ax, 16 ; experiment 316 00001AB5 2B46FE <1> sub ax, word [iExp] ; adjust exponent to 17 317 00001AB8 E80FFF <1> call PowerOf10 318 <1> 319 <1> ; Either we have exactly 17 digits, or we have exactly 16 digits. We can 320 <1> ; detect that condition and adjust now. 321 <1> 322 00001ABB DC16[CC4B] <1> fcom qword [ten16] 323 <1> ; x0xxxx00 means top of stack > ten16 324 <1> ; x0xxxx01 means top of stack < ten16 325 <1> ; x1xxxx00 means top of stack = ten16 326 00001ABF 9BDD7EFC <1> fstsw word [mystat] 327 00001AC3 8B46FC <1> mov ax, word [mystat] 328 00001AC6 F6C401 <1> test ah, 1 329 00001AC9 7407 <1> jz .notset1 330 00001ACB DC0E[C44B] <1> fmul qword [ten] 331 00001ACF FF4EFE <1> dec word [iExp] 332 <1> .notset1: 333 <1> 334 <1> ; Go convert to BCD. 335 <1> 336 00001AD2 57 <1> push di 337 00001AD3 8D7EDC <1> lea di, [szTemp] 338 00001AD6 E848FF <1> call FloatToBCD 339 00001AD9 5F <1> pop di 340 <1> 341 00001ADA 8D76DD <1> lea si, [szTemp+1] ; point to converted buffer 342 <1> 343 <1> ; If the exponent is between -15 and 16, we should express this as a number 344 <1> ; without scientific notation. 345 <1> 346 00001ADD 8B4EFE <1> mov cx, word [iExp] 347 00001AE0 51 <1> push cx 348 00001AE1 83C10F <1> add cx, 15 349 00001AE4 83F91F <1> cmp cx, 15+16 350 00001AE7 59 <1> pop cx 351 00001AE8 7734 <1> ja .fts6 352 <1> 353 <1> ; If the exponent is less than zero, we insert '0.', then -cx 354 <1> ; leading zeros, then 16 digits of mantissa. If the exponent is 355 <1> ; positive, we copy cx+1 digits, then a decimal point (maybe), then 356 <1> ; the remaining 16-cx digits. 357 <1> 358 00001AEA 41 <1> inc cx 359 00001AEB 83F900 <1> cmp cx, byte 0 360 00001AEE 7F0F <1> jg .ispos1 361 00001AF0 B8302E <1> mov ax, "0." 362 00001AF3 AB <1> stosw 363 00001AF4 F7D9 <1> neg cx 364 00001AF6 B030 <1> mov al, '0' 365 00001AF8 F3AA <1> rep stosb 366 00001AFA B91000 <1> mov cx, 16 367 00001AFD EB0B <1> jmp short .fts3 368 <1> .ispos1: 369 00001AFF F3A4 <1> rep movsb 370 00001B01 B02E <1> mov al, '.' 371 00001B03 AA <1> stosb 372 00001B04 B91000 <1> mov cx, 16 373 00001B07 2B4EFE <1> sub cx, word [iExp] 374 <1> .fts3: 375 00001B0A F3A4 <1> rep movsb 376 <1> 377 <1> ; Trim off trailing zeros. 378 <1> 379 <1> .nextitem2: 380 00001B0C 807DFF30 <1> cmp byte [di-1], '0' 381 00001B10 7503 <1> jne .fts1 382 00001B12 4F <1> dec di 383 00001B13 EBF7 <1> jmp short .nextitem2 384 <1> .fts1: 385 <1> 386 <1> ; If we cleared out all the decimal digits, kill the decimal point, too. 387 <1> 388 00001B15 807DFF2E <1> cmp byte [di-1], '.' 389 00001B19 7501 <1> jnz .fts2 390 00001B1B 4F <1> dec di 391 <1> .fts2: 392 <1> 393 <1> ; That's it. 394 <1> 395 00001B1C EB2C <1> jmp short .ftsExit 396 <1> .fts6: 397 <1> 398 <1> ; Now convert this to a standard, usable format. If needed, a minus 399 <1> ; sign is already present in the outgoing buffer, and di already points 400 <1> ; past it. 401 <1> 402 00001B1E A4 <1> movsb ; copy the first digit 403 00001B1F B02E <1> mov al, '.' 404 00001B21 AA <1> stosb ; plop in a decimal point 405 00001B22 A5 <1> movsw 406 00001B23 A5 <1> movsw 407 00001B24 A5 <1> movsw ; copy six more digits 408 <1> 409 <1> %if 0 410 <1> 411 <1> ; The printf %g specified trims off trailing zeros here. I dislike 412 <1> ; this, so I've disabled it. Comment out the %if 0 and %endif if you 413 <1> ; want this. 414 <1> 415 <1> .fts61: 416 <1> cmp byte [di-1], '0' 417 <1> je .fts62 418 <1> dec di 419 <1> jmp short .fts61 420 <1> .fts62: 421 <1> %endif 422 <1> 423 <1> ; Shove in the exponent. If you support 10-byte reals, remember to 424 <1> ; allow 4 digits for the exponent. 425 <1> 426 00001B25 B8652B <1> mov ax, "e+" 427 00001B28 8B56FE <1> mov dx, word [iExp] 428 00001B2B 85D2 <1> test dx, dx 429 00001B2D 7904 <1> jns .fts7 430 00001B2F F7DA <1> neg dx 431 00001B31 B42D <1> mov ah, '-' 432 <1> .fts7: 433 00001B33 AB <1> stosw 434 <1> 435 00001B34 92 <1> xchg ax, dx 436 00001B35 BE0A00 <1> mov si, 10 437 00001B38 B90400 <1> mov cx, 4 438 <1> .fts8: 439 00001B3B 31D2 <1> xor dx, dx 440 00001B3D F7F6 <1> div si 441 00001B3F 52 <1> push dx 442 00001B40 E2F9 <1> loop .fts8 443 00001B42 B104 <1> mov cl, 4 444 <1> .fts9: 445 00001B44 58 <1> pop ax 446 00001B45 0430 <1> add al, '0' 447 00001B47 AA <1> stosb 448 00001B48 E2FA <1> loop .fts9 449 <1> 450 <1> %if 0 451 <1> add di, byte 4 ; -> terminator 452 <1> %endif 453 <1> 454 <1> ; Clean up and go home. 455 <1> 456 <1> .ftsExit: 457 <1> ; fldcw [stat] ; restore control word 458 <1> ; fwait 459 <1> %if 0 460 <1> mov ax, di 461 <1> sub ax, word [pszDbl] 462 <1> mov cx, 21 463 <1> sub cx, ax 464 <1> mov al, 32 465 <1> rep stosb 466 <1> %endif 467 00001B4A 5F <1> pop di 468 00001B4B 07 <1> pop es 469 00001B4C 5E <1> pop si 470 00001B4D 1F <1> pop ds 471 <1> 472 00001B4E 89EC5D <1> lleave 472 ****************** <1> expansion: 186 = 0 472 ****************** <1> expansion: lsizeparameters = 6 472 ****************** <1> expansion: __lframe__autoret = near 473 00001B51 C20600 <1> lret 473 ****************** <1> expansion: type = auto 473 ****************** <1> expansion: type = __lframe__autoret 473 ****************** <1> expansion: inst = retn 473 ****************** <1> expansion: remov = 0 473 ****************** <1> expansion: remov = 6 474 <1> 475 <1> %undef pfpin 476 <1> %undef pszDbl 477 <1> %undef iExp 478 <1> %undef mystat 479 <1> %undef fpin 480 <1> %undef szTemp 1510 %endif 1511 %include "run.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug code and commands (P, T, G) to run debuggee code 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> gg_repeat: 21 00001B54 800E[8800]20 <1> setopt [internalflags2], dif2_gg_again 21 ****************** <1> expansion: adr = '[internalflags2]' 21 ****************** <1> expansion: len = 16 21 ****************** <1> expansion: tf = '[' 21 ****************** <1> expansion: tb = ']' 21 ****************** <1> expansion: adr = 'internalflags2' 21 ****************** <1> expansion: adr = internalflags2 22 00001B59 EB05 <1> jmp @F 23 <1> 24 <1> ; G command - go. 25 <1> gg: 26 00001B5B 8026[8800]DF <1> clropt [internalflags2], dif2_gg_again 26 ****************** <1> expansion: adr = '[internalflags2]' 26 ****************** <1> expansion: len = 16 26 ****************** <1> expansion: tf = '[' 26 ****************** <1> expansion: tb = ']' 26 ****************** <1> expansion: adr = 'internalflags2' 26 ****************** <1> expansion: adr = internalflags2 27 <1> @@: 27 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.18 27 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.19 27 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.20 27 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.21 27 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.22 27 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.23 27 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.24 27 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.25 27 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.18 27 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.19 27 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.20 27 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.21 27 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.22 27 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.23 27 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.24 27 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.25 27 ****************** <1> expansion: __@@_num = 26 28 00001B60 C706[A000][703F] <1> mov word [gg_deferred_message], msg.empty_message 29 00001B66 C706[A200][703F] <1> mov word [bb_deferred_message], msg.empty_message 30 <1> 31 00001B6C BB[1B03] <1> mov bx, dmycmd 32 00001B6F F606[7E00]02 <1> testopt [options], gg_no_autorepeat 32 ****************** <1> expansion: adr = '[options]' 32 ****************** <1> expansion: len = 9 32 ****************** <1> expansion: tf = '[' 32 ****************** <1> expansion: tb = ']' 32 ****************** <1> expansion: adr = 'options' 32 ****************** <1> expansion: adr = options 33 00001B74 7503 <1> jnz @F 34 00001B76 BB[541B] <1> mov bx, gg_repeat 35 <1> @@: 35 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.19 35 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.20 35 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.21 35 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.22 35 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.23 35 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.24 35 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.25 35 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.26 35 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.19 35 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.20 35 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.21 35 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.22 35 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.23 35 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.24 35 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.25 35 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.26 35 ****************** <1> expansion: __@@_num = 27 36 00001B79 891E[E002] <1> mov word [lastcmd], bx 37 <1> 38 00001B7D 800E[8800]08 <1> setopt [internalflags2], dif2_gg_is_gg 38 ****************** <1> expansion: adr = '[internalflags2]' 38 ****************** <1> expansion: len = 16 38 ****************** <1> expansion: tf = '[' 38 ****************** <1> expansion: tb = ']' 38 ****************** <1> expansion: adr = 'internalflags2' 38 ****************** <1> expansion: adr = internalflags2 41 00001B82 8026[8800]E8 <1> clropt [internalflags2], dif2_gg_is_first | dif2_gg_first_detected | dif2_gg_skip_cseip | dif2_gg_skip_non_cseip 41 ****************** <1> expansion: adr = '[internalflags2]' 41 ****************** <1> expansion: len = 16 41 ****************** <1> expansion: tf = '[' 41 ****************** <1> expansion: tb = ']' 41 ****************** <1> expansion: adr = 'internalflags2' 41 ****************** <1> expansion: adr = internalflags2 42 <1> 43 00001B87 FF36[6C03] <1> push word [reg_cs] ; save original CS 44 00001B8B 8F06[DC02] <1> pop word [eqladdr+4] 45 00001B8F E8B713 <1> call parseql ; process =addr 46 <1> 47 00001B92 F606[7E00]01 <1> testopt [options], gg_do_not_skip_bp 47 ****************** <1> expansion: adr = '[options]' 47 ****************** <1> expansion: len = 9 47 ****************** <1> expansion: tf = '[' 47 ****************** <1> expansion: tb = ']' 47 ****************** <1> expansion: adr = 'options' 47 ****************** <1> expansion: adr = options 48 00001B97 752A <1> jnz .do_not_skip_cseip 49 00001B99 800E[8800]01 <1> setopt [internalflags2], dif2_gg_is_first 49 ****************** <1> expansion: adr = '[internalflags2]' 49 ****************** <1> expansion: len = 16 49 ****************** <1> expansion: tf = '[' 49 ****************** <1> expansion: tb = ']' 49 ****************** <1> expansion: adr = 'internalflags2' 49 ****************** <1> expansion: adr = internalflags2 50 <1> 51 00001B9E 803E[D702]00 <1> cmp byte [eqflag], 0 52 00001BA3 7507 <1> jne .cseip_take_eql 53 <1> 54 <1> _386_PM_o32 ; xor ecx, ecx 55 00001BA5 31C9 <1> xor cx, cx 56 00001BA7 E81308 <1> call get_cseip_ecx_linear 57 00001BAA EB0B <1> jmp .got_cseip 58 <1> 59 <1> .cseip_take_eql: 60 00001BAC 8B1E[DC02] <1> mov bx, word [eqladdr + 4] 61 <1> _386_PM_o32 ; mov edx, word [eqladdr] 62 00001BB0 8B16[D802] <1> mov dx, word [eqladdr] 63 00001BB4 E81008 <1> call getlinear 64 <1> .got_cseip: 65 00001BB7 7303E93F4B <1> jc error 66 00001BBC A3[9400] <1> mov word [gg_first_cseip_linear], ax 67 00001BBF 8916[9600] <1> mov word [gg_first_cseip_linear + 2], dx 68 <1> .do_not_skip_cseip: 69 <1> 70 <1> %ifn _NUM_G_BP 71 <1> call chkeol 72 <1> 73 <1> %if _BREAKPOINTS 74 <1> call bb_writepoints_init_reset 75 <1> %endif 76 <1> 77 <1> %else 78 00001BC3 4E <1> dec si 79 00001BC4 E8B758 <1> call skipcomma 80 00001BC7 4E <1> dec si 81 00001BC8 BA[763F] <1> mov dx, msg.again 82 00001BCB E86458 <1> call isstring? 83 00001BCE 752A <1> jne @F ; (after this, do not dec si!) 84 <1> 85 <1> gg_again: 86 <1> 87 <1> %if _AUXBUFFSIZE < (BPSIZE * _NUM_G_BP + 1) 88 <1> %error auxbuff not large enough for gg breakpoint list 89 <1> %endif 90 <1> 91 00001BD0 56 <1> push si 92 00001BD1 BE[6701] <1> mov si, g_bplist.used_count 93 00001BD4 31C0 <1> xor ax, ax 94 00001BD6 AC <1> lodsb ; ax = number of breakpoints set yet 95 00001BD7 4E <1> dec si ; -> gg breakpoint list 96 00001BD8 89C1 <1> mov cx, ax 97 00001BDA 01C9 <1> add cx, cx 98 00001BDC 01C9 <1> add cx, cx ; * 4 99 <1> %if _PM 100 <1> add cx, ax ; * 5 101 <1> %endif 102 00001BDE 41 <1> inc cx ; include the count 103 00001BDF 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 104 00001BE3 31FF <1> xor di, di ; es:di -> auxbuff 105 00001BE5 F3A4 <1> rep movsb ; initialise auxbuff list 106 <1> 107 00001BE7 5E <1> pop si ; si -> separator after "AGAIN" keyword 108 00001BE8 BF0100 <1> mov di, 1 ; -> first point 109 00001BEB 89C1 <1> mov cx, ax 110 00001BED B0CC <1> mov al, 0CCh 111 00001BEF E306 <1> jcxz .end 112 <1> .loop: 113 00001BF1 83C703 <1> add di, BPSIZE - 1 ; -> point content 114 00001BF4 AA <1> stosb ; initialise breakpoint content 115 00001BF5 E2FA <1> loop .loop 116 <1> .end: 117 <1> ; es:di -> after last breakpoint in array 118 00001BF7 E98000 <1> jmp gg3 ; parse additional points (do not dec si!) 119 <1> 120 <1> @@: 120 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.20 120 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.21 120 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.22 120 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.23 120 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.24 120 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.25 120 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.26 120 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.27 120 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.20 120 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.21 120 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.22 120 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.23 120 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.24 120 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.25 120 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.26 120 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.27 120 ****************** <1> expansion: __@@_num = 28 121 00001BFA F606[8800]20 <1> testopt [internalflags2], dif2_gg_again 121 ****************** <1> expansion: adr = '[internalflags2]' 121 ****************** <1> expansion: len = 16 121 ****************** <1> expansion: tf = '[' 121 ****************** <1> expansion: tb = ']' 121 ****************** <1> expansion: adr = 'internalflags2' 121 ****************** <1> expansion: adr = internalflags2 122 00001BFF 75CF <1> jnz gg_again 123 <1> 124 <1> 125 <1> gg_list: 126 00001C01 BA[713F] <1> mov dx, msg.list 127 00001C04 E82B58 <1> call isstring? 128 00001C07 7568 <1> jne .not 129 <1> 130 00001C09 AC <1> lodsb 131 00001C0A E86658 <1> call chkeol 132 <1> 133 00001C0D 800E[8800]05 <1> setopt [internalflags2], dif2_gg_is_first | dif2_gg_skip_cseip 133 ****************** <1> expansion: adr = '[internalflags2]' 133 ****************** <1> expansion: len = 16 133 ****************** <1> expansion: tf = '[' 133 ****************** <1> expansion: tb = ']' 133 ****************** <1> expansion: adr = 'internalflags2' 133 ****************** <1> expansion: adr = internalflags2 134 <1> 135 00001C12 BE[6801] <1> mov si, g_bplist.bp 136 00001C15 31C9 <1> xor cx, cx 137 00001C17 8A4CFF <1> mov cl, byte [si - 1] 138 00001C1A 31DB <1> xor bx, bx 139 00001C1C E34D <1> jcxz .none 140 <1> .loop: 141 00001C1E 43 <1> inc bx 142 00001C1F E8D304 <1> call gg_bb_lods_bp_linear 143 <1> 144 00001C22 BF[273F] <1> mov di, msg.list_bp.address1 145 00001C25 92 <1> xchg ax, dx 146 00001C26 E8D558 <1> call hexword 147 00001C29 47 <1> inc di 148 <1> ; mov di, msg.list_bp.address2 149 00001C2A 92 <1> xchg ax, dx 150 00001C2B E8D058 <1> call hexword 151 <1> 152 00001C2E E8C206 <1> call gg_bb_check_is_first 153 <1> ; we set up the dif2_gg_skip_cseip flag, 154 00001C31 BA[B441] <1> mov dx, msg.list_bp_not_cseip 155 <1> ; so if CY (do not skip), initialise this 156 00001C34 7203 <1> jc .not_cseip 157 <1> ; if NC (do skip), use other string 158 <1> %if _PM 159 <1> mov bx, word [reg_cs] 160 <1> cmp byte [eqflag], 0 161 <1> je @F 162 <1> mov bx, word [eqladdr + 4] 163 <1> @@: 164 <1> mov dx, msg.list_bp_cseip_32 165 <1> call testattrhigh 166 <1> jnz @F ; if 32-bit cs --> 167 <1> %endif 168 00001C36 BA[3D3F] <1> mov dx, msg.list_bp_csip_16 169 <1> @@: 169 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.21 169 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.22 169 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.23 169 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.24 169 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.25 169 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.26 169 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.27 169 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.28 169 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.21 169 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.22 169 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.23 169 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.24 169 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.25 169 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.26 169 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.27 169 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.28 169 ****************** <1> expansion: __@@_num = 29 170 <1> .not_cseip: 171 00001C39 52 <1> push dx 172 <1> 173 00001C3A BF[3A3F] <1> mov di, msg.list_bp.value 174 00001C3D AC <1> lodsb 175 00001C3E E8C458 <1> call hexbyte 176 <1> 177 00001C41 89D8 <1> mov ax, bx 178 00001C43 BF[A901] <1> mov di, line_out 179 00001C46 53 <1> push bx 180 00001C47 51 <1> push cx 181 00001C48 E8E206 <1> call ordinalbyte 182 <1> 183 00001C4B 57 <1> push di 184 00001C4C 81EF[AC01] <1> sub di, line_out + 1 + 2 185 <1> ; 1 = a digit, 2 = ordinal suffix, 186 <1> ; result = how many additional digits are used 187 00001C50 BA[0D3F] <1> mov dx, msg.list_bp_first 188 00001C53 01FA <1> add dx, di 189 00001C55 E8175B <1> call putsz ; show blanks first 190 00001C58 5F <1> pop di 191 00001C59 E8DE58 <1> call putsline 192 00001C5C 59 <1> pop cx 193 00001C5D 5B <1> pop bx 194 <1> 195 00001C5E BA[113F] <1> mov dx, msg.list_bp 196 00001C61 E80B5B <1> call putsz 197 <1> 198 00001C64 5A <1> pop dx 199 00001C65 E8075B <1> call putsz 200 <1> 201 00001C68 E2B4 <1> loop .loop 202 <1> .end: 203 <1> ; mov dx, msg.list_bp_first_detected 204 <1> ; testopt [internalflags2], dif2_gg_first_detected 205 <1> ; jnz .putsz 206 00001C6A C3 <1> retn 207 <1> 208 <1> .none: 209 00001C6B BA[4E3F] <1> mov dx, msg.list_bp_none 210 <1> .putsz: 211 00001C6E E9FE5A <1> jmp putsz 212 <1> 213 <1> .not: 214 <1> 215 <1> ; Store the address of each breakpoint into the buffer. We also 216 <1> ; make sure that there aren't too many breakpoints. (The user can 217 <1> ; specify them with 2 byte per breakpoints which gives about 128 218 <1> ; breakpoints with a full command line.) The breakpoints will only 219 <1> ; be set later when we have verified that the line contains no 220 <1> ; syntax errors and that there aren't too many breakpoints. 221 <1> ; 222 <1> ; Note: With "G AGAIN" (or the gg_repeat handler), the user 223 <1> ; can actually specify an arbitrary amount of 224 <1> ; breakpoints. However, we limit the amount. 225 <1> %if _AUXBUFFSIZE < (BPSIZE * _NUM_G_BP + 1) 226 <1> %error auxbuff not large enough for gg breakpoint list 227 <1> %endif 228 00001C71 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 229 00001C75 31FF <1> xor di, di ; es:di -> auxbuff 230 00001C77 31C0 <1> xor ax, ax 231 00001C79 AA <1> stosb ; counter of saved breakpoints 232 <1> gg3: 233 <1> ; dec si ; don't use skipcomm0 instead - need to restore al 234 00001C7A E80158 <1> call skipcomma 235 00001C7D 3C3B <1> cmp al, ';' 236 00001C7F 742E <1> je gg4 237 00001C81 3C0D <1> cmp al, 13 238 00001C83 742A <1> je gg4 ; if done --> 239 00001C85 8B1E[DC02] <1> mov bx, word [eqladdr+4]; default segment 240 00001C89 06 <1> push es 241 00001C8A 16 <1> push ss 242 00001C8B 07 <1> pop es ; set STT es = ds = ss 243 00001C8C E86B07 <1> call getlinearaddr ; get linear address into bx:dx (CHG edx) 244 00001C8F 07 <1> pop es 245 00001C90 7303E9664A <1> jc error 246 00001C95 26803E000010 <1> cmp byte [es:0], _NUM_G_BP 247 00001C9B 7203E95B4A <1> jae error ; can't store another breakpoint, g_bplist is full --> 248 00001CA0 92 <1> xchg ax, dx ; ax = low word 249 00001CA1 AB <1> stosw 250 00001CA2 93 <1> xchg ax, bx ; to store high byte/word 251 <1> %if _PM 252 <1> stosw 253 <1> %else 254 00001CA3 AA <1> stosb ; bits 24-31 (dh) always zero in 21-bit addresses 255 <1> %endif 256 00001CA4 B0CC <1> mov al, 0CCh 257 00001CA6 AA <1> stosb ; later filled with the byte read from this address 258 00001CA7 26FE060000 <1> inc byte [es:0] ; increment count 259 00001CAC 4E <1> dec si 260 00001CAD EBCB <1> jmp short gg3 261 <1> 262 <1> gg4: 263 00001CAF 89F9 <1> mov cx, di ; -> after last point, = size of list 264 00001CB1 06 <1> push es 265 00001CB2 1E <1> push ds 266 00001CB3 07 <1> pop es 267 00001CB4 1F <1> pop ds ; swap 268 00001CB5 31F6 <1> xor si, si ; ds:si -> auxbuff 269 00001CB7 BF[6701] <1> mov di, g_bplist.used_count 270 <1> ; es:di -> gg breakpoint list 271 00001CBA F3A4 <1> rep movsb ; copy list over 272 00001CBC 16 <1> push ss 273 00001CBD 1F <1> pop ds ; reset segregs 274 <1> 275 <1> gg5: 276 <1> %if _BREAKPOINTS 277 00001CBE E88404 <1> call bb_writepoints_init_reset 278 <1> ; try to write bb points 279 <1> ; (detect and write to cseip point too) 280 <1> ; If this fails, it handles the errors and tries to restore 281 <1> ; all its own points, then aborts the command. 282 <1> %endif 283 00001CC1 BE[6701] <1> mov si, g_bplist.used_count 284 00001CC4 31C0 <1> xor ax, ax 285 00001CC6 AC <1> lodsb ; si-> first point 286 00001CC7 89C1 <1> mov cx, ax ; cx = number of saved breakpoints 287 00001CC9 51 <1> push cx 288 00001CCA E8D005 <1> call gg_writepoints ; Store breakpoint bytes in the given locations. 289 00001CCD 733C <1> jnc .points_set ; successful --> 290 <1> 291 <1> 292 <1> ; Failure to write to a gg breakpoint. Now the fun starts! 293 00001CCF 5A <1> pop dx 294 <1> ; dx = number of points tried to write 295 <1> ; cx = number of points not written 296 00001CD0 29CA <1> sub dx, cx ; = number of points written 297 00001CD2 89D1 <1> mov cx, dx 298 <1> ; We now first have to try restoring all the points we 299 <1> ; already set because they might be inside the DOS or 300 <1> ; BIOS handlers we would otherwise call. So instead of 301 <1> ; displaying errors as we detect them, all the intel is 302 <1> ; stored first until all points have been taken care of 303 <1> ; (if possible). We then display error messages. 304 <1> %if _BREAKPOINTS 305 00001CD4 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 306 <1> %endif 307 00001CD7 89E5 <1> mov bp, sp ; -> behind gg error info, -> bb error info 308 00001CD9 01D2 <1> add dx, dx 309 00001CDB 29D4 <1> sub sp, dx ; reserve space for gg error info 310 00001CDD 50 <1> push ax ; store error info on point that failed to be written 311 <1> 312 <1> ; The gg points were written last, so restore them first. 313 00001CDE E8DB04 <1> call gg_restorepoints_and_init_error_info 314 <1> %if _BREAKPOINTS 315 00001CE1 51 <1> push cx 316 <1> ; Next, restore the bb points. 317 00001CE2 B91000 <1> mov cx, _NUM_B_BP ; = index above last one to restore 318 00001CE5 E81505 <1> call bb_restorepoints_and_init_error_info 319 00001CE8 59 <1> pop cx ; (preserve index of failed gg point) 320 <1> %endif 321 00001CE9 58 <1> pop ax 322 <1> 323 <1> ; ax = info on initially failed point 324 <1> ; cx = 0-based index of initially failed point 325 <1> ; = number of points tried to restore 326 00001CEA 89CE <1> mov si, cx 327 00001CEC 01F6 <1> add si, si 328 00001CEE 01F6 <1> add si, si ; *4 329 <1> %if _PM 330 <1> add si, cx ; *5 331 <1> %endif 332 00001CF0 81C6[6801] <1> add si, g_bplist.bp 333 <1> 334 <1> ; si-> point 335 <1> ; ax = info (ah = reason, al = new value if reason 3) 336 <1> ; cx = 0-based index of initially failed point 337 00001CF4 51 <1> push cx 338 00001CF5 FF7402 <1> push word [si + 2] 339 00001CF8 FF34 <1> push word [si] ; stack: linear address 340 00001CFA BB0080 <1> mov bx, 8000h ; bh = 80h (gg), 341 <1> ; bl = what we tried to restore (n/a) 342 00001CFD E8E90C <1> call display_breakpoint_failure 343 00001D00 59 <1> pop cx 344 00001D01 E88006 <1> call gg_handlefailedrestore 345 <1> %if _BREAKPOINTS 346 00001D04 E84E06 <1> call bb_handlefailedrestore 347 00001D07 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 348 <1> %else 349 <1> mov sp, bp 350 <1> %endif 351 <1> ; (discard bb + gg error info) 352 00001D0A C3 <1> retn 353 <1> 354 <1> 355 <1> .points_set: 356 00001D0B 59 <1> pop cx ; = number of points set 357 <1> ; All bb and gg points were successfully written. 358 <1> ; Next: Handle cseip case, if such a point has been detected. 359 <1> 360 <1> 361 <1> ; old cseip breakpoint handling comment: 362 <1> ; interrupt ? emuint : .isstdtrace (including DPMI hack, pushf handling) 363 <1> 364 <1> %endif ; _NUM_G_BP 365 <1> 366 <1> 367 <1> %if _NUM_G_BP || _BREAKPOINTS 368 00001D0C F606[8800]10 <1> testopt [internalflags2], dif2_gg_first_detected 368 ****************** <1> expansion: adr = '[internalflags2]' 368 ****************** <1> expansion: len = 16 368 ****************** <1> expansion: tf = '[' 368 ****************** <1> expansion: tb = ']' 368 ****************** <1> expansion: adr = 'internalflags2' 368 ****************** <1> expansion: adr = internalflags2 369 00001D11 7503E9F801 <1> jz .only_run ; easy case, no cseip point detected --> 370 <1> 371 <1> 372 <1> ; Enter special mode: Restore cseip breakpoint content. 373 00001D16 800E[8800]02 <1> setopt [internalflags2], dif2_gg_skip_non_cseip 373 ****************** <1> expansion: adr = '[internalflags2]' 373 ****************** <1> expansion: len = 16 373 ****************** <1> expansion: tf = '[' 373 ****************** <1> expansion: tb = ']' 373 ****************** <1> expansion: adr = 'internalflags2' 373 ****************** <1> expansion: adr = internalflags2 374 <1> 375 <1> ; cx = number of points written 376 <1> %if _BREAKPOINTS 377 00001D1B 83EC20 <1> sub sp, _NUM_B_BP * 2 378 <1> %endif 379 00001D1E 89E5 <1> mov bp, sp ; -> behind error info 380 <1> %if _NUM_G_BP 381 00001D20 89CA <1> mov dx, cx 382 00001D22 01D2 <1> add dx, dx 383 00001D24 29D4 <1> sub sp, dx 384 00001D26 E89304 <1> call gg_restorepoints_and_init_error_info 385 <1> 386 00001D29 7326 <1> jnc .gg_restore_cseip_success 387 <1> 388 <1> 389 <1> ; Error in gg_restorepoints. Try to restore other gg, all bb. 390 <1> 391 <1> ; Exit special mode: Handle non-cseip breakpoints again. 392 00001D2B 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 392 ****************** <1> expansion: adr = '[internalflags2]' 392 ****************** <1> expansion: len = 16 392 ****************** <1> expansion: tf = '[' 392 ****************** <1> expansion: tb = ']' 392 ****************** <1> expansion: adr = 'internalflags2' 392 ****************** <1> expansion: adr = internalflags2 393 <1> 394 <1> ; Enter special mode: Skip cseip breakpoints. 395 00001D30 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 395 ****************** <1> expansion: adr = '[internalflags2]' 395 ****************** <1> expansion: len = 16 395 ****************** <1> expansion: tf = '[' 395 ****************** <1> expansion: tb = ']' 395 ****************** <1> expansion: adr = 'internalflags2' 395 ****************** <1> expansion: adr = internalflags2 396 <1> 397 <1> ; As we already tried to restore all cseip gg points, 398 <1> ; here we skip these in the gg_restorepoints call. 399 00001D35 E88704 <1> call gg_restorepoints 400 <1> 401 <1> ; Exit special mode: No longer skip cseip breakpoints. 402 00001D38 8026[8800]FB <1> clropt [internalflags2], dif2_gg_skip_cseip 402 ****************** <1> expansion: adr = '[internalflags2]' 402 ****************** <1> expansion: len = 16 402 ****************** <1> expansion: tf = '[' 402 ****************** <1> expansion: tb = ']' 402 ****************** <1> expansion: adr = 'internalflags2' 402 ****************** <1> expansion: adr = internalflags2 403 <1> 404 <1> ; Any cseip bb points aren't yet restored, so do not skip them. 405 <1> %if _BREAKPOINTS 406 00001D3D 51 <1> push cx 407 00001D3E B91000 <1> mov cx, _NUM_B_BP 408 00001D41 E8B904 <1> call bb_restorepoints_and_init_error_info 409 00001D44 59 <1> pop cx 410 <1> %endif 411 <1> %else 412 <1> jmp .gg_restore_cseip_success 413 <1> %endif 414 <1> 415 <1> .gg_bb_cseip_fail_common: 416 <1> ; The failure that led us here is already noted in the info. 417 <1> %if _NUM_G_BP 418 00001D45 E83C06 <1> call gg_handlefailedrestore 419 <1> %endif 420 <1> %if _BREAKPOINTS 421 00001D48 E80A06 <1> call bb_handlefailedrestore 422 <1> %endif 423 <1> %if _NUM_G_BP 424 <1> %if _BREAKPOINTS 425 00001D4B 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 426 <1> %else 427 <1> mov sp, bp 428 <1> %endif 429 <1> %elif _BREAKPOINTS 430 <1> add sp, _NUM_B_BP * 2 431 <1> %endif 432 00001D4E E992E4 <1> jmp cmd3 433 <1> 434 <1> .gg_restore_cseip_success: 435 <1> %if _BREAKPOINTS 436 00001D51 B91000 <1> mov cx, _NUM_B_BP ; = index above last one to restore 437 00001D54 E8A604 <1> call bb_restorepoints_and_init_error_info 438 00001D57 7322 <1> jnc @F ; no error ? --> 439 <1> 440 <1> ; Error in bb_restorepoints. Try to restore other gg, other bb. 441 <1> 442 <1> ; Exit special mode: Handle non-cseip breakpoints again. 443 00001D59 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 443 ****************** <1> expansion: adr = '[internalflags2]' 443 ****************** <1> expansion: len = 16 443 ****************** <1> expansion: tf = '[' 443 ****************** <1> expansion: tb = ']' 443 ****************** <1> expansion: adr = 'internalflags2' 443 ****************** <1> expansion: adr = internalflags2 444 <1> 445 <1> ; Enter special mode: Skip cseip breakpoints. 446 00001D5E 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 446 ****************** <1> expansion: adr = '[internalflags2]' 446 ****************** <1> expansion: len = 16 446 ****************** <1> expansion: tf = '[' 446 ****************** <1> expansion: tb = ']' 446 ****************** <1> expansion: adr = 'internalflags2' 446 ****************** <1> expansion: adr = internalflags2 447 <1> 448 <1> ; As we already tried to restore all cseip gg and bb points, 449 <1> ; here we skip these in the bb_restorepoints call. 450 <1> %if _NUM_G_BP 451 00001D63 31C9 <1> xor cx, cx 452 00001D65 8A0E[6701] <1> mov cl, byte [g_bplist.used_count] 453 00001D69 E85304 <1> call gg_restorepoints 454 00001D6C 51 <1> push cx 455 <1> %endif 456 00001D6D B91000 <1> mov cx, _NUM_B_BP 457 00001D70 E88D04 <1> call bb_restorepoints 458 <1> %if _NUM_G_BP 459 00001D73 59 <1> pop cx 460 <1> %endif 461 <1> 462 <1> ; Exit special mode: No longer skip cseip breakpoints. 463 00001D74 8026[8800]FB <1> clropt [internalflags2], dif2_gg_skip_cseip 463 ****************** <1> expansion: adr = '[internalflags2]' 463 ****************** <1> expansion: len = 16 463 ****************** <1> expansion: tf = '[' 463 ****************** <1> expansion: tb = ']' 463 ****************** <1> expansion: adr = 'internalflags2' 463 ****************** <1> expansion: adr = internalflags2 464 <1> 465 00001D79 EBCA <1> jmp .gg_bb_cseip_fail_common 466 <1> 467 <1> @@: 467 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.22 467 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.23 467 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.24 467 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.25 467 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.26 467 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.27 467 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.28 467 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.29 467 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.22 467 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.23 467 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.24 467 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.25 467 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.26 467 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.27 467 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.28 467 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.29 467 ****************** <1> expansion: __@@_num = 30 468 <1> ; Success! Now discard the reserved error info. 469 00001D7B 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 470 <1> %else 471 <1> mov sp, bp 472 <1> %endif 473 <1> 474 <1> ; Special mode restoration handled. Now trace one instruction. 475 <1> ; (Proceed if repeated string op or interrupt.) 476 00001D7E BA0F00 <1> mov dx, 15 ; DL = number of bytes to go; DH = prefix flags. 477 00001D81 8B1E[6C03] <1> mov bx, word [reg_cs] 478 <1> _386_PM_o32 ; mov esi, dword [reg_eip] 479 00001D85 8B36[7803] <1> mov si, word [reg_eip] 480 <1> .pp2: 481 00001D89 E8A80D <1> call pp16 ; get next instruction byte into AL 482 00001D8C BF[C003] <1> mov di, ppbytes 483 00001D8F B91800 <1> mov cx, PPLEN_ONLY_STRING 484 00001D92 F2AE <1> repne scasb 485 00001D94 7524 <1> jne .not_p ; if not one of these --> 486 00001D96 8A451E <1> mov al,byte [di+PPLEN-1]; get corresponding byte in ppinfo 487 00001D99 A880 <1> test al, 80h ; prefix ? 488 00001D9B 740E <1> jz .pp3 ; no --> 489 00001D9D 08C6 <1> or dh, al ; set the OSIZE or ASIZE flags if either of these 490 <1> ; Note: Multiple OSIZE in a 16-bit cs do not toggle 491 <1> ; between decoding as O32 and O16, they're always 492 <1> ; decoded as O32. The same is true for A32, and 493 <1> ; in a 32-bit cs for O16 and A16. 494 00001D9F FECA <1> dec dl 495 00001DA1 75E6 <1> jnz .pp2 ; if not out of bytes --> 496 00001DA3 C706[A000][A63F] <1> mov word [gg_deferred_message], msg.warnprefix 497 00001DA9 EB0F <1> jmp .not_p 498 <1> 499 <1> ; A repeatable string instruction is to be decoded. 500 <1> ; Finish the decoding and skip the appropriate number 501 <1> ; of opcode bytes. 502 <1> .pp3: 503 <1> _386_PM call pp_fix32bitflags 504 00001DAB A840 <1> test al, 40h 505 00001DAD 7403E94949 <1> jnz error 506 <1> %if 0 507 <1> test al, 40h ; different opcode length depends on OSIZE ? 508 <1> jz .ignoreosize ; no --> 509 <1> and al, 3Fh 510 <1> and dh, 2 511 <1> add al, dh 512 <1> .ignoreosize: 513 <1> %endif 514 00001DB2 98 <1> cbw 515 <1> _386_PM movzx eax, ax ; clear high word (in case it counts) 516 <1> _386_PM_o32 ; add esi, eax 517 00001DB3 01C6 <1> add si, ax 518 <1> ; jmp short pp11 ; we have a skippable instruction here 519 <1> ; pp11: 520 <1> _386_PM call testattrhigh 521 <1> _386_PM jnz .32 ; full 32-bit offset valid --> 522 <1> _386_PM movzx esi, si ; clear high word here 523 <1> .32: 524 00001DB5 E8D10C <1> call proceedbreakpoint ; run until the breakpoint is hit 525 00001DB8 EB03 <1> jmp short @F 526 <1> 527 <1> .not_p: 528 00001DBA E86609 <1> call traceone ; call common code 529 <1> @@: 529 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.23 529 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.24 529 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.25 529 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.26 529 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.27 529 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.28 529 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.29 529 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.30 529 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.23 529 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.24 529 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.25 529 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.26 529 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.27 529 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.28 529 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.29 529 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.30 529 ****************** <1> expansion: __@@_num = 31 530 00001DBD 9C <1> pushf 531 <1> 532 <1> ; Exit special mode, do not skip non-cseip breakpoints anymore. 533 00001DBE 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 533 ****************** <1> expansion: adr = '[internalflags2]' 533 ****************** <1> expansion: len = 16 533 ****************** <1> expansion: tf = '[' 533 ****************** <1> expansion: tb = ']' 533 ****************** <1> expansion: adr = 'internalflags2' 533 ****************** <1> expansion: adr = internalflags2 534 <1> 535 <1> ; Enter special mode: Skip matching/restoring cseip breakpoint. 536 00001DC3 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 536 ****************** <1> expansion: adr = '[internalflags2]' 536 ****************** <1> expansion: len = 16 536 ****************** <1> expansion: tf = '[' 536 ****************** <1> expansion: tb = ']' 536 ****************** <1> expansion: adr = 'internalflags2' 536 ****************** <1> expansion: adr = internalflags2 537 <1> 538 00001DC8 F6C47F <1> test ah, 7Fh ; error happened during proceedbreakpoint ? 539 00001DCB 743D <1> jz @F ; no --> 540 <1> 541 00001DCD 59 <1> pop cx ; (discard flags on stack) 542 <1> 543 00001DCE 50 <1> push ax 544 <1> 545 <1> %if _NUM_G_BP 546 00001DCF 31C9 <1> xor cx, cx 547 00001DD1 8A0E[6701] <1> mov cl, byte [g_bplist.used_count] 548 <1> %endif 549 <1> 550 <1> %if _BREAKPOINTS 551 00001DD5 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 552 <1> %endif 553 00001DD8 89E5 <1> mov bp, sp ; -> behind gg error info, -> bb error info 554 <1> %if _NUM_G_BP 555 00001DDA 89CA <1> mov dx, cx 556 00001DDC 01D2 <1> add dx, dx 557 00001DDE 29D4 <1> sub sp, dx ; reserve space for gg error info 558 00001DE0 E8D903 <1> call gg_restorepoints_and_init_error_info 559 <1> %endif 560 <1> %if _BREAKPOINTS 561 00001DE3 51 <1> push cx 562 00001DE4 B91000 <1> mov cx, _NUM_B_BP 563 00001DE7 E81304 <1> call bb_restorepoints_and_init_error_info 564 00001DEA 59 <1> pop cx 565 <1> %endif 566 <1> ; Exit special mode: No longer skip cseip breakpoints. 567 00001DEB 8026[8800]FB <1> clropt [internalflags2], dif2_gg_skip_cseip 567 ****************** <1> expansion: adr = '[internalflags2]' 567 ****************** <1> expansion: len = 16 567 ****************** <1> expansion: tf = '[' 567 ****************** <1> expansion: tb = ']' 567 ****************** <1> expansion: adr = 'internalflags2' 567 ****************** <1> expansion: adr = internalflags2 568 00001DF0 58 <1> pop ax 569 00001DF1 51 <1> push cx 570 <1> 571 00001DF2 E89501 <1> call put_deferred_message_silent 572 <1> 573 00001DF5 FF36[A600] <1> push word [tpg_proceed_bp + 2] 574 00001DF9 FF36[A400] <1> push word [tpg_proceed_bp] 575 00001DFD 8A1E[A700] <1> mov bl, [tpg_proceed_bp + BPSIZE - 1] 576 00001E01 B700 <1> mov bh, 0 ; proceed breakpoint 577 00001E03 E8E30B <1> call display_breakpoint_failure 578 00001E06 59 <1> pop cx 579 00001E07 E93BFF <1> jmp .gg_bb_cseip_fail_common 580 <1> 581 <1> 582 <1> @@: 582 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.24 582 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.25 582 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.26 582 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.27 582 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.28 582 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.29 582 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.30 582 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.31 582 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.24 582 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.25 582 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.26 582 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.27 582 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.28 582 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.29 582 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.30 582 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.31 582 ****************** <1> expansion: __@@_num = 32 583 00001E0A 9D <1> popf 584 <1> 585 00001E0B 7303E90601 <1> jc .after_run ; an unexpected interrupt occured --> 586 <1> 587 00001E10 E8E902 <1> call gg_bb_check_hit ; expected interrupt matches our gg or bb ? 588 00001E13 720A <1> jc @F ; no --> 589 00001E15 9C <1> pushf 590 00001E16 50 <1> push ax 591 00001E17 E84701 <1> call .after_run_restore ; restore stuff 592 00001E1A 58 <1> pop ax 593 00001E1B 9D <1> popf 594 00001E1C E9FD00 <1> jmp .after_gg_bb_check_hit 595 <1> ; handle unexpected/expected interrupt 596 <1> 597 <1> 598 <1> @@: 598 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.25 598 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.26 598 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.27 598 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.28 598 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.29 598 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.30 598 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.31 598 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.32 598 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.25 598 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.26 598 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.27 598 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.28 598 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.29 598 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.30 598 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.31 598 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.32 598 ****************** <1> expansion: __@@_num = 33 599 <1> ; Exit special mode, do not skip cseip breakpoints anymore. 600 00001E1F 8026[8800]FB <1> clropt [internalflags2], dif2_gg_skip_cseip 600 ****************** <1> expansion: adr = '[internalflags2]' 600 ****************** <1> expansion: len = 16 600 ****************** <1> expansion: tf = '[' 600 ****************** <1> expansion: tb = ']' 600 ****************** <1> expansion: adr = 'internalflags2' 600 ****************** <1> expansion: adr = internalflags2 601 <1> 602 <1> ; Enter special mode: Skip writing non-cseip breakpoint. 603 00001E24 800E[8800]02 <1> setopt [internalflags2], dif2_gg_skip_non_cseip 603 ****************** <1> expansion: adr = '[internalflags2]' 603 ****************** <1> expansion: len = 16 603 ****************** <1> expansion: tf = '[' 603 ****************** <1> expansion: tb = ']' 603 ****************** <1> expansion: adr = 'internalflags2' 603 ****************** <1> expansion: adr = internalflags2 604 <1> 605 <1> %if _BREAKPOINTS 606 00001E29 E8E903 <1> call bb_writepoints ; write cseip bb breakpoint, if any 607 00001E2C 7368 <1> jnc @F 608 <1> 609 <1> %if _NUM_G_BP 610 00001E2E 31D2 <1> xor dx, dx 611 00001E30 8A16[6701] <1> mov dl, byte [g_bplist.used_count] 612 <1> %endif 613 <1> 614 <1> ; dx = where to start restoring cseip gg points 615 <1> ; (may be number of gg points (ie -> after last) for all) 616 <1> ; cx = index of failed bb point 617 <1> ; (may be _NUM_B_BP for all) 618 00001E34 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 619 00001E37 89E5 <1> mov bp, sp 620 <1> %if _NUM_G_BP 621 00001E39 31DB <1> xor bx, bx 622 00001E3B 8A1E[6701] <1> mov bl, byte [g_bplist.used_count] 623 00001E3F 01DB <1> add bx, bx 624 00001E41 29DC <1> sub sp, bx ; reserve space for gg error info 625 00001E43 D1EB <1> shr bx, 1 ; = number of gg points to set/restore 626 <1> %endif 627 <1> ; cx = index of failed point 628 <1> ; = index above last one to restore 629 <1> ; ax = error info for failed point 630 00001E45 50 <1> push ax 631 00001E46 51 <1> push cx 632 <1> 633 00001E47 E8A503 <1> call bb_restorepoints_init_error_info 634 <1> %if _NUM_G_BP 635 00001E4A 89D9 <1> mov cx, bx 636 00001E4C E85E03 <1> call gg_restorepoints_init_error_info 637 <1> %endif 638 <1> 639 00001E4F 59 <1> pop cx 640 00001E50 51 <1> push cx 641 00001E51 53 <1> push bx ; preserve number of written gg points 642 <1> %if _NUM_G_BP 643 00001E52 51 <1> push cx 644 00001E53 89D1 <1> mov cx, dx ; give number of written gg points 645 <1> ; while attempting to write cseip gg point 646 00001E55 E86703 <1> call gg_restorepoints ; restore cseip breakpoints 647 00001E58 59 <1> pop cx ; give number of point that failed to be restored 648 <1> %endif 649 00001E59 E8A403 <1> call bb_restorepoints ; restore cseip breakpoints 650 <1> 651 <1> ; Exit special mode: Do not skip non-cseip breakpoint. 652 00001E5C 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 652 ****************** <1> expansion: adr = '[internalflags2]' 652 ****************** <1> expansion: len = 16 652 ****************** <1> expansion: tf = '[' 652 ****************** <1> expansion: tb = ']' 652 ****************** <1> expansion: adr = 'internalflags2' 652 ****************** <1> expansion: adr = internalflags2 653 <1> 654 <1> ; Enter special mode, skip cseip breakpoints. 655 00001E61 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 655 ****************** <1> expansion: adr = '[internalflags2]' 655 ****************** <1> expansion: len = 16 655 ****************** <1> expansion: tf = '[' 655 ****************** <1> expansion: tb = ']' 655 ****************** <1> expansion: adr = 'internalflags2' 655 ****************** <1> expansion: adr = internalflags2 656 <1> 657 00001E66 59 <1> pop cx ; = number of written gg points 658 <1> %if _NUM_G_BP 659 00001E67 E85503 <1> call gg_restorepoints 660 <1> %endif 661 00001E6A B91000 <1> mov cx, _NUM_B_BP 662 00001E6D E89003 <1> call bb_restorepoints 663 <1> 664 00001E70 E81701 <1> call put_deferred_message_silent 665 <1> 666 <1> %if _NUM_G_BP 667 00001E73 E80E05 <1> call gg_handlefailedrestore 668 <1> %endif 669 00001E76 E8DC04 <1> call bb_handlefailedrestore 670 00001E79 59 <1> pop cx ; restore index of failed bb point 671 00001E7A 58 <1> pop ax ; restore error info of failed bb point 672 00001E7B 89CE <1> mov si, cx 673 00001E7D 01F6 <1> add si, si 674 00001E7F 01F6 <1> add si, si ; * 4 675 <1> %if _PM 676 <1> add si, cx ; * 5 677 <1> %endif 678 00001E81 81C6[0701] <1> add si, b_bplist.bp ; -> point 679 <1> 680 <1> ; si-> point 681 <1> ; ax = info (ah = reason, al = new value if reason 3) 682 <1> ; cx = 0-based index of initially failed point 683 00001E85 FF7402 <1> push word [si + 2] 684 00001E88 FF34 <1> push word [si] ; stack: linear address 685 00001E8A BB0040 <1> mov bx, 4000h ; bh = 40h (bb), 686 <1> ; bl = what we tried to restore (n/a) 687 00001E8D E8590B <1> call display_breakpoint_failure 688 <1> 689 <1> %if _NUM_G_BP 690 00001E90 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 691 <1> %else 692 <1> add sp, _NUM_B_BP * 2 693 <1> %endif 694 <1> ; discard gg + bb error info 695 00001E93 E94DE3 <1> jmp cmd3 696 <1> 697 <1> @@: 697 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.26 697 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.27 697 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.28 697 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.29 697 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.30 697 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.31 697 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.32 697 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.33 697 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.26 697 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.27 697 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.28 697 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.29 697 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.30 697 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.31 697 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.32 697 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.33 697 ****************** <1> expansion: __@@_num = 34 698 <1> %endif 699 <1> %if _NUM_G_BP 700 00001E96 BE[6701] <1> mov si, g_bplist.used_count 701 00001E99 31C0 <1> xor ax, ax 702 00001E9B AC <1> lodsb ; si-> first point 703 00001E9C 89C1 <1> mov cx, ax ; cx = number of saved breakpoints 704 00001E9E 51 <1> push cx 705 00001E9F E8FB03 <1> call gg_writepoints ; write cseip gg breakpoint, if any 706 00001EA2 7369 <1> jnc .only_run_pop ; successful --> 707 <1> 708 00001EA4 31DB <1> xor bx, bx 709 00001EA6 8A1E[6701] <1> mov bl, byte [g_bplist.used_count] 710 <1> 711 00001EAA 89DA <1> mov dx, bx ; = number of points tried to write 712 00001EAC 29CA <1> sub dx, cx ; - number of points still to write 713 <1> ; = number of points written 714 <1> ; = 0-based index of failed gg cseip point 715 <1> %if _BREAKPOINTS 716 00001EAE B91000 <1> mov cx, _NUM_B_BP ; index after last bb point 717 00001EB1 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 718 <1> %endif 719 00001EB4 89E5 <1> mov bp, sp 720 00001EB6 01DB <1> add bx, bx 721 00001EB8 29DC <1> sub sp, bx ; reserve space for gg error info 722 00001EBA D1EB <1> shr bx, 1 ; = number of gg points to set/restore 723 <1> 724 00001EBC 50 <1> push ax 725 <1> %if _BREAKPOINTS 726 00001EBD E82F03 <1> call bb_restorepoints_init_error_info 727 <1> %endif 728 00001EC0 89D9 <1> mov cx, bx ; = number of gg points 729 00001EC2 E8E802 <1> call gg_restorepoints_init_error_info 730 00001EC5 58 <1> pop ax 731 <1> 732 <1> ; cx = _NUM_B_BP 733 <1> ; dx = index of failed gg point 734 <1> ; ax = error info for failed point 735 00001EC6 52 <1> push dx 736 00001EC7 50 <1> push ax 737 <1> 738 00001EC8 53 <1> push bx ; preserve number of written gg points 739 00001EC9 51 <1> push cx 740 00001ECA 89D1 <1> mov cx, dx ; give number of written gg points 741 <1> ; while attempting to write cseip gg point 742 00001ECC E8F002 <1> call gg_restorepoints ; restore cseip breakpoints 743 00001ECF 59 <1> pop cx ; = _NUM_B_BP 744 <1> %if _BREAKPOINTS 745 00001ED0 E82D03 <1> call bb_restorepoints ; restore cseip breakpoints 746 <1> %endif 747 <1> 748 <1> ; Exit special mode: Do not skip non-cseip breakpoint. 749 00001ED3 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 749 ****************** <1> expansion: adr = '[internalflags2]' 749 ****************** <1> expansion: len = 16 749 ****************** <1> expansion: tf = '[' 749 ****************** <1> expansion: tb = ']' 749 ****************** <1> expansion: adr = 'internalflags2' 749 ****************** <1> expansion: adr = internalflags2 750 <1> 751 <1> ; Enter special mode, skip cseip breakpoints. 752 00001ED8 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 752 ****************** <1> expansion: adr = '[internalflags2]' 752 ****************** <1> expansion: len = 16 752 ****************** <1> expansion: tf = '[' 752 ****************** <1> expansion: tb = ']' 752 ****************** <1> expansion: adr = 'internalflags2' 752 ****************** <1> expansion: adr = internalflags2 753 <1> 754 <1> %if _BREAKPOINTS 755 00001EDD B91000 <1> mov cx, _NUM_B_BP 756 00001EE0 E81D03 <1> call bb_restorepoints 757 <1> %endif 758 00001EE3 59 <1> pop cx ; = number of written gg points 759 00001EE4 E8D802 <1> call gg_restorepoints 760 <1> 761 00001EE7 E8A000 <1> call put_deferred_message_silent 762 <1> 763 00001EEA E89704 <1> call gg_handlefailedrestore 764 <1> %if _BREAKPOINTS 765 00001EED E86504 <1> call bb_handlefailedrestore 766 <1> %endif 767 00001EF0 58 <1> pop ax ; restore error info of failed gg point 768 00001EF1 59 <1> pop cx ; restore index of failed gg point 769 00001EF2 89CE <1> mov si, cx 770 00001EF4 01F6 <1> add si, si 771 00001EF6 01F6 <1> add si, si ; * 4 772 <1> %if _PM 773 <1> add si, cx ; * 5 774 <1> %endif 775 00001EF8 81C6[6801] <1> add si, g_bplist.bp ; -> point 776 <1> 777 <1> ; si-> point 778 <1> ; ax = info (ah = reason, al = new value if reason 3) 779 <1> ; cx = 0-based index of initially failed point 780 00001EFC FF7402 <1> push word [si + 2] 781 00001EFF FF34 <1> push word [si] ; stack: linear address 782 00001F01 BB0080 <1> mov bx, 8000h ; bh = 80h (bb), 783 <1> ; bl = what we tried to restore (n/a) 784 00001F04 E8E20A <1> call display_breakpoint_failure 785 <1> 786 <1> %if _BREAKPOINTS 787 00001F07 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 788 <1> %else 789 <1> mov sp, bp 790 <1> %endif 791 <1> ; discard gg + bb error info 792 00001F0A E9D6E2 <1> jmp cmd3 793 <1> 794 <1> 795 <1> .only_run_pop: 796 00001F0D 59 <1> pop cx 797 <1> %endif 798 <1> %endif ; _NUM_G_BP || _BREAKPOINTS 799 <1> 800 <1> .only_run: 801 <1> ; Clear all special modes. Stop specialcasing cseip breakpoint. 804 00001F0E 8026[8800]E8 <1> clropt [internalflags2], dif2_gg_is_first | dif2_gg_first_detected | dif2_gg_skip_cseip | dif2_gg_skip_non_cseip 804 ****************** <1> expansion: adr = '[internalflags2]' 804 ****************** <1> expansion: len = 16 804 ****************** <1> expansion: tf = '[' 804 ****************** <1> expansion: tb = ']' 804 ****************** <1> expansion: adr = 'internalflags2' 804 ****************** <1> expansion: adr = internalflags2 805 <1> 806 00001F13 E8AE0C <1> call run ; Now run the program. 807 <1> .after_run: 808 <1> %if _NUM_G_BP || _BREAKPOINTS 809 00001F16 E84800 <1> call .after_run_restore 810 <1> 811 00001F19 E8E001 <1> call gg_bb_check_hit 812 <1> .after_gg_bb_check_hit: 813 00001F1C 7303 <1> jnc .expectedinterrupt 814 <1> %endif ; _NUM_G_BP || _BREAKPOINTS 815 <1> .unexpectedinterrupt: 816 00001F1E E9CB07 <1> jmp unexpectedinterrupt ; print messages for unexpected breakpoint and quit. 817 <1> 818 <1> %if _NUM_G_BP || _BREAKPOINTS 819 <1> .expectedinterrupt: 820 00001F21 E87900 <1> call adjust_cseip_after_breakpoint 821 <1> ; it's one of our breakpoints, adjust (e)ip 822 <1> 823 00001F24 F606[8900]08 <1> testopt [internalflags2], dif2_bp_failure 823 ****************** <1> expansion: adr = '[internalflags2]' 823 ****************** <1> expansion: len = 16 823 ****************** <1> expansion: tf = '[' 823 ****************** <1> expansion: tb = ']' 823 ****************** <1> expansion: adr = 'internalflags2' 823 ****************** <1> expansion: adr = internalflags2 824 00001F29 7530 <1> jnz .actual_hit ; after failure, handle as actual hit 825 <1> 826 00001F2B A801 <1> test al, 1 ; actual hit ? else: non-hit, pass or non-pass 827 00001F2D 752C <1> jnz .actual_hit ; yes --> 828 <1> 829 00001F2F A802 <1> test al, 2 ; at least pass match ? 830 00001F31 7408 <1> jz .nonpassnonhit ; no --> 831 <1> 832 <1> .passnonhit: 833 <1> ; As this is G, these are never actually silent. We're just 834 <1> ; using the silent functions for now because they are 835 <1> ; available and do everything that needs to be done here. 836 00001F33 E85400 <1> call put_deferred_message_silent 837 00001F36 50 <1> push ax 838 00001F37 E8F409 <1> call dumpregs_silent ; (includes handle_serial_flags_ctrl_c) 839 00001F3A 58 <1> pop ax 840 <1> 841 <1> .nonpassnonhit: 842 00001F3B E8200A <1> call handle_serial_flags_ctrl_c 843 <1> 844 <1> ; al & 4 always set 845 <1> 847 00001F3E 8026[8800]E9 <1> clropt [internalflags2], dif2_gg_skip_non_cseip | dif2_gg_skip_cseip | dif2_gg_first_detected 847 ****************** <1> expansion: adr = '[internalflags2]' 847 ****************** <1> expansion: len = 16 847 ****************** <1> expansion: tf = '[' 847 ****************** <1> expansion: tb = ']' 847 ****************** <1> expansion: adr = 'internalflags2' 847 ****************** <1> expansion: adr = internalflags2 848 00001F43 800E[8800]01 <1> setopt [internalflags2], dif2_gg_is_first 848 ****************** <1> expansion: adr = '[internalflags2]' 848 ****************** <1> expansion: len = 16 848 ****************** <1> expansion: tf = '[' 848 ****************** <1> expansion: tb = ']' 848 ****************** <1> expansion: adr = 'internalflags2' 848 ****************** <1> expansion: adr = internalflags2 849 <1> 850 00001F48 FF36[9A00] <1> push word [gg_next_cseip_linear + 2] 851 00001F4C FF36[9800] <1> push word [gg_next_cseip_linear] 852 00001F50 8F06[9400] <1> pop word [gg_first_cseip_linear] 853 00001F54 8F06[9600] <1> pop word [gg_first_cseip_linear + 2] 854 <1> 855 00001F58 E963FD <1> jmp gg5 856 <1> 857 <1> 858 <1> .actual_hit: 859 00001F5B E82C00 <1> call put_deferred_message_silent 860 <1> ; (put bb message after gg_bb_check_hit call) 861 00001F5E E9CD09 <1> jmp dumpregs_silent ; (handles sf_(double_)ctrl_c) 862 <1> %endif 863 <1> 864 <1> 865 <1> .after_run_restore: 866 <1> %if _NUM_G_BP || _BREAKPOINTS 867 00001F61 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 868 00001F64 89E5 <1> mov bp, sp ; -> behind gg error info, -> bb error info 869 <1> %if _NUM_G_BP 870 00001F66 31C9 <1> xor cx, cx 871 00001F68 8A0E[6701] <1> mov cl, byte [g_bplist.used_count] 872 00001F6C 89CA <1> mov dx, cx 873 00001F6E 01D2 <1> add dx, dx 874 00001F70 29D4 <1> sub sp, dx ; reserve space for gg error info 875 00001F72 E84702 <1> call gg_restorepoints_and_init_error_info 876 <1> ; try restoring gg points, and fill error info 877 <1> %endif 878 <1> %if _BREAKPOINTS 879 00001F75 51 <1> push cx 880 00001F76 B91000 <1> mov cx, _NUM_B_BP ; = index above last one to restore 881 00001F79 E88102 <1> call bb_restorepoints_and_init_error_info 882 <1> ; try restoring bb points, and fill error info 883 00001F7C 59 <1> pop cx 884 <1> %endif 885 <1> 886 00001F7D E80A00 <1> call put_deferred_message_silent 887 <1> 888 <1> %if _NUM_G_BP 889 00001F80 E80104 <1> call gg_handlefailedrestore 890 <1> ; handle gg point restore failures 891 <1> %endif 892 <1> %if _BREAKPOINTS 893 00001F83 E8CF03 <1> call bb_handlefailedrestore 894 <1> ; handle bb point restore failures 895 <1> %endif 896 <1> %if _NUM_G_BP 897 <1> %if _BREAKPOINTS 898 00001F86 8D6620 <1> lea sp, [bp + _NUM_B_BP * 2] 899 <1> %else 900 <1> mov sp, bp ; remove the stack frame 901 <1> %endif 902 <1> %else 903 <1> add sp, _NUM_B_BP * 2 904 <1> %endif 905 <1> %endif ; _NUM_G_BP || _BREAKPOINTS 906 00001F89 C3 <1> retn 907 <1> 908 <1> 909 <1> ; INP: word [gg_deferred_message] 910 <1> ; word [bb_deferred_message] 911 <1> ; OUT: variables reset to msg.empty_message 912 <1> ; messages displayed; first the gg one then the bb one 913 <1> ; CHG: dx 914 <1> ; STT: ds = es = ss 915 <1> ; 916 <1> ; Note: Uses putsz_silent, meaning if silent mode is 917 <1> ; enabled, the messages are written to the 918 <1> ; silent buffer instead of displayed. 919 <1> put_deferred_message_silent: 920 00001F8A BA[703F] <1> mov dx, msg.empty_message 921 00001F8D 52 <1> push dx 922 00001F8E 8716[A000] <1> xchg dx, word [gg_deferred_message] 923 00001F92 E83B07 <1> call putsz_silent 924 00001F95 5A <1> pop dx 925 00001F96 8716[A200] <1> xchg dx, word [bb_deferred_message] 926 00001F9A E93307 <1> jmp putsz_silent 927 <1> 928 <1> 929 <1> ; INP: [internalflags2] & dif2_tpg_adjusted_cseip 930 <1> ; [internalflags2] & dif2_tpg_do_not_adjust 931 <1> ; word [reg_cs] 932 <1> ; (d)word [reg_eip] 933 <1> ; OUT: If both flags clear on input, 934 <1> ; set [internalflags2] & dif2_tpg_adjusted_cseip 935 <1> ; cs:(e)ip adjusted by decrementing (e)ip 936 <1> ; (It is only decremented by the first call to this 937 <1> ; function, which sets the flag in dif2.) 938 <1> ; Else, 939 <1> ; do nothing 940 <1> ; CHG: bx 941 <1> ; STT: ds = ss = debugger data selector 942 <1> adjust_cseip_after_breakpoint: 944 00001F9D F606[8900]06 <1> testopt [internalflags2], dif2_tpg_adjusted_cseip | dif2_tpg_do_not_adjust 944 ****************** <1> expansion: adr = '[internalflags2]' 944 ****************** <1> expansion: len = 16 944 ****************** <1> expansion: tf = '[' 944 ****************** <1> expansion: tb = ']' 944 ****************** <1> expansion: adr = 'internalflags2' 944 ****************** <1> expansion: adr = internalflags2 945 00001FA2 7509 <1> jnz .retn 946 00001FA4 800E[8900]02 <1> setopt [internalflags2], dif2_tpg_adjusted_cseip 946 ****************** <1> expansion: adr = '[internalflags2]' 946 ****************** <1> expansion: len = 16 946 ****************** <1> expansion: tf = '[' 946 ****************** <1> expansion: tb = ']' 946 ****************** <1> expansion: adr = 'internalflags2' 946 ****************** <1> expansion: adr = internalflags2 947 <1> _386_PM mov bx, word [reg_cs] 948 <1> _386_PM call testattrhigh 949 <1> _386_PM jz .16 ; 16-bit cs --> 950 <1> _386_PM o32 ; dec dword [reg_eip] 951 <1> .16: 952 00001FA9 FF0E[7803] <1> dec word [reg_eip] ; re-execute (restored) opcode one byte in front of this 953 <1> .retn: 954 00001FAD C3 <1> retn 955 <1> 956 <1> 957 <1> %ifn _BREAKPOINTS 958 <1> bb_check_hit: 959 <1> xor ax, ax 960 <1> stc 961 <1> retn 962 <1> %else 963 <1> ; INP: word [run_int] 964 <1> ; word [reg_cs] 965 <1> ; (d)word [reg_eip] 966 <1> ; bb breakpoints 967 <1> ; OUT: NC if a breakpoint was hit, 968 <1> ; (e)ip must be decremented by one 969 <1> ; word [bb_deferred_message] set if bb point matched 970 <1> ; (The bb point's index is already written to this msg.) 971 <1> ; ax & 1 set if non-pass match (actual hit), 972 <1> ; else ax & 2 set if pass match (consider as hit first, 973 <1> ; but dump registers next (not to silent buffer) 974 <1> ; and then continue execution) 975 <1> ; else ax & 4 always set, indicates any match 976 <1> ; (including matches that should merely continue) 977 <1> ; all pass points' counters stepped 978 <1> ; CY if no breakpoint was hit, 979 <1> ; ax = 0 980 <1> ; CHG: all 981 <1> ; STT: es = ds = ss 982 <1> bb_check_hit: 983 <1> lframe near 983 ****************** <1> expansion: bits = 16 983 ****************** <1> expansion: base_size = 2 983 ****************** <1> expansion: near_offset = 2 983 ****************** <1> expansion: far_offset = 4 983 ****************** <1> expansion: int_offset = 6 983 ****************** <1> expansion: inner = 0 983 ****************** <1> expansion: nested = 0 983 ****************** <1> expansion: autoret = 983 ****************** <1> expansion: autoret = near 983 ****************** <1> expansion: parofs = 2 983 ****************** <1> expansion: pars_size = 0 983 ****************** <1> expansion: pars_return_size = 0 983 ****************** <1> expansion: parlist = 983 ****************** <1> expansion: labellist = empty,empty,empty 983 ****************** <1> expansion: ofs = 0 983 ****************** <1> expansion: enter = 0 983 ****************** <1> expansion: req = 0 983 ****************** <1> expansion: usereq = 0 983 ****************** <1> expansion: emit = 1 983 ****************** <1> expansion: restore_frame_ofs = 0 983 ****************** <1> expansion: pars_inner_size = 0 984 00001FAE 5589E5 <1> lenter 984 ****************** <1> expansion: wasearly = 0 984 ****************** <1> expansion: early = 0 984 ****************** <1> expansion: lsizevariables = 0 984 ****************** <1> expansion: req = 1 984 ****************** <1> expansion: enter_emitted = 0 984 ****************** <1> expansion: enter = 1 984 ****************** <1> expansion: 186 = 0 984 ****************** <1> expansion: newlabel = frame_bp 984 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 984 ****************** <1> expansion: ?frame_bp = 0 984 ****************** <1> expansion: newlabel = frame_ip 984 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 984 ****************** <1> expansion: ?frame_ip = 2 984 ****************** <1> expansion: lsizeparameters = 0 985 00001FB1 31C0 <1> xor ax, ax 986 <1> lequ 1, flag_trigger 986 ****************** <1> expansion: newlabel = flag_trigger 986 ****************** <1> expansion: labellist = flag_trigger,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 986 ****************** <1> expansion: ?flag_trigger = 1 987 <1> lequ 2, flag_pass 987 ****************** <1> expansion: newlabel = flag_pass 987 ****************** <1> expansion: labellist = flag_pass,undefined,,flag_trigger,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 987 ****************** <1> expansion: ?flag_pass = 2 988 <1> lequ 4, flag_match 988 ****************** <1> expansion: newlabel = flag_match 988 ****************** <1> expansion: labellist = flag_match,undefined,,flag_pass,undefined,,flag_trigger,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 988 ****************** <1> expansion: ?flag_match = 4 989 <1> lvar word, flags 989 ****************** <1> expansion: varsize = 2 989 ****************** <1> expansion: ofs = -2 989 ****************** <1> expansion: newlabel = flags 989 ****************** <1> expansion: labellist = flags,undefined,,flag_match,undefined,,flag_pass,undefined,,flag_trigger,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 989 ****************** <1> expansion: ?flags = -2 989 ****************** <1> expansion: req = 1 989 ****************** <1> expansion: hadvar = 1 990 00001FB3 50 <1> push ax 991 <1> 992 <1> ; Finish up. Check if it was one of _our_ breakpoints. 993 00001FB4 813E[DE02][D445] <1> cmp word [run_int], int3msg 994 00001FBA 7505 <1> jne @F ; if not interrupt 03h --> 995 <1> 996 <1> ; Get previous cs:eip (where breakpoint was executed if any at all). 997 00001FBC E88004 <1> call get_cseip_of_possible_breakpoint 998 <1> ; dx:ax = linear address of previous cs:eip 999 <1> ; bx = reg_cs 1000 00001FBF EB15 <1> jmp .check 1001 <1> 1002 <1> @@: 1002 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.27 1002 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.28 1002 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.29 1002 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.30 1002 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.31 1002 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.32 1002 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.33 1002 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.34 1002 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.27 1002 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.28 1002 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.29 1002 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.30 1002 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.31 1002 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.32 1002 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.33 1002 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.34 1002 ****************** <1> expansion: __@@_num = 35 1003 <1> ; For T/TP/P: if trace interrupt fired just while 1004 <1> ; pointing at a bb point, do match. 1005 00001FC1 813E[DE02][B145] <1> cmp word [run_int], int1msg 1006 00001FC7 7403E9FF00 <1> jne .gg9 1007 <1> 1008 00001FCC 800E[8900]04 <1> setopt [internalflags2], dif2_tpg_do_not_adjust 1008 ****************** <1> expansion: adr = '[internalflags2]' 1008 ****************** <1> expansion: len = 16 1008 ****************** <1> expansion: tf = '[' 1008 ****************** <1> expansion: tb = ']' 1008 ****************** <1> expansion: adr = 'internalflags2' 1008 ****************** <1> expansion: adr = internalflags2 1009 <1> ; remember that we should not adjust 1010 <1> _386_PM_o32 1011 00001FD1 31C9 <1> xor cx, cx 1012 00001FD3 E8E703 <1> call get_cseip_ecx_linear 1013 <1> ; get linear of this cs:(e)ip 1014 <1> .check: 1015 00001FD6 7303E9F000 <1> jc .gg9 1016 <1> 1017 <1> ; Store the matched address (if any) here in case of non-hit 1018 <1> ; match. (Ie, non-hit pass match or non-hit non-pass match.) 1019 00001FDB A3[9800] <1> mov word [gg_next_cseip_linear], ax 1020 00001FDE 8916[9A00] <1> mov word [gg_next_cseip_linear + 2], dx 1021 <1> 1022 00001FE2 87DA <1> xchg bx, dx 1023 00001FE4 91 <1> xchg cx, ax ; bx:cx = linear address of previous cs:eip 1024 00001FE5 31C0 <1> xor ax, ax 1025 <1> .loop: 1026 00001FE7 53 <1> push bx 1027 00001FE8 50 <1> push ax 1028 00001FE9 E88538 <1> call calcpointbit ; bx = index, ah = value 1029 00001FEC 84A7[0101] <1> test byte [b_bplist.used_mask+bx], ah 1030 <1> ; (NC) 1031 00001FF0 7503E9C000 <1> jz .next 1032 00001FF5 84A7[0301] <1> test byte [b_bplist.disabled_mask+bx], ah 1033 <1> ; (NC) 1034 00001FF9 7403E9B700 <1> jnz .next 1035 00001FFE 58 <1> pop ax 1036 00001FFF 5B <1> pop bx 1037 00002000 53 <1> push bx 1038 00002001 50 <1> push ax 1039 00002002 89C6 <1> mov si, ax 1040 00002004 01F6 <1> add si, si 1041 00002006 01F6 <1> add si, si 1042 <1> %if _PM 1043 <1> add si, ax 1044 <1> %endif 1045 00002008 81C6[0701] <1> add si, b_bplist.bp ; -> point 1046 <1> 1047 0000200C E8E600 <1> call gg_bb_lods_bp_linear 1048 <1> 1049 0000200F E8E102 <1> call gg_bb_check_is_first 1050 00002012 7203E99E00 <1> jnc .next 1051 <1> 1052 00002017 39C8 <1> cmp ax, cx 1053 00002019 7403E99700 <1> jne .next 1054 0000201E 39DA <1> cmp dx, bx 1055 00002020 7403E99000 <1> jne .next 1056 <1> 1057 <1> .hit: 1058 00002025 58 <1> pop ax 1059 00002026 50 <1> push ax 1060 <1> 1061 00002027 804EFE04 <1> or byte [bp + ?flags], ?flag_match 1062 <1> 1063 0000202B 89C7 <1> mov di, ax 1064 0000202D 01FF <1> add di, di 1065 0000202F 8D9D[4701] <1> lea bx, [b_bplist.counter + di] 1066 <1> ; word [bx] = this matched point's counter 1067 <1> 1068 00002033 F646FE03 <1> test byte [bp + ?flags], ?flag_trigger | ?flag_pass 1069 00002037 740D <1> jz @F ; none set yet ? --> 1070 00002039 E89600 <1> call step_pass_counter ; step counter even if already matched 1071 0000203C 7377 <1> jnc .next ; (either is already set, so additional 1072 <1> ; setting of ?flag_pass is skipped) 1073 0000203E F646FE01 <1> test byte [bp + ?flags], ?flag_trigger 1074 00002042 7571 <1> jnz .next ; (trigger is already set, so skip triggering) 1075 00002044 EB05 <1> jmp .setup_trigger ; triggered (after previous pass match) 1076 <1> 1077 <1> @@: 1077 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.28 1077 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.29 1077 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.30 1077 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.31 1077 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.32 1077 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.33 1077 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.34 1077 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.35 1077 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.28 1077 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.29 1077 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.30 1077 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.31 1077 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.32 1077 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.33 1077 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.34 1077 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.35 1077 ****************** <1> expansion: __@@_num = 36 1078 00002046 E88900 <1> call step_pass_counter ; step counter of matched point, no flag yet 1079 00002049 7350 <1> jnc .check_pass ; not triggered, check for pass match --> 1080 <1> 1081 <1> .setup_trigger: 1082 <1> ; Trigger! (And the first detected triggering point.) 1083 0000204B 804EFE01 <1> or byte [bp + ?flags], ?flag_trigger 1084 <1> 1085 <1> ; Store breakpoint index in message. 1086 0000204F BF[673D] <1> mov di, msg.bb_hit.index 1087 00002052 E8B054 <1> call hexbyte ; store index of this point 1088 <1> 1089 <1> ; Initialise message to linebreak and NUL at .edit sublabel. 1090 00002055 C706[693D]0D0A <1> mov word [msg.bb_hit.edit], 13 | (10 << 8) 1091 0000205B C606[6B3D]00 <1> mov byte [msg.bb_hit.edit + 2], 0 1092 <1> 1093 <1> ; Get counter of this breakpoint. 1094 00002060 8B07 <1> mov ax, word [bx] 1095 <1> ; Store counter in message. 1096 00002062 BF[733D] <1> mov di, msg.bb_hit.counter 1097 00002065 E89654 <1> call hexword 1098 <1> ; Is it equal to default ? 1099 00002068 3D0080 <1> cmp ax, 8000h 1100 0000206B 740B <1> je @F ; yes, skip --> 1101 <1> 1102 <1> ; Edit message to make it display the counter. 1103 0000206D C706[693D]2C20 <1> mov word [msg.bb_hit.edit], ", " 1104 00002073 C606[6B3D]63 <1> mov byte [msg.bb_hit.edit + 2], "c" 1105 <1> @@: 1105 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.29 1105 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.30 1105 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.31 1105 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.32 1105 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.33 1105 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.34 1105 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.35 1105 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.36 1105 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.29 1105 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.30 1105 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.31 1105 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.32 1105 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.33 1105 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.34 1105 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.35 1105 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.36 1105 ****************** <1> expansion: __@@_num = 37 1106 <1> 1107 00002078 C706[A200][4E3D] <1> mov word [bb_deferred_message], msg.bb_hit 1108 <1> 1109 0000207E F606[8800]08 <1> testopt [internalflags2], dif2_gg_is_gg 1109 ****************** <1> expansion: adr = '[internalflags2]' 1109 ****************** <1> expansion: len = 16 1109 ****************** <1> expansion: tf = '[' 1109 ****************** <1> expansion: tb = ']' 1109 ****************** <1> expansion: adr = 'internalflags2' 1109 ****************** <1> expansion: adr = internalflags2 1110 00002083 7407 <1> jz @F 1111 00002085 F606[7E00]08 <1> testopt [options], gg_bb_hit_no_repeat 1111 ****************** <1> expansion: adr = '[options]' 1111 ****************** <1> expansion: len = 9 1111 ****************** <1> expansion: tf = '[' 1111 ****************** <1> expansion: tb = ']' 1111 ****************** <1> expansion: adr = 'options' 1111 ****************** <1> expansion: adr = options 1112 0000208A EB05 <1> jmp @FF 1113 <1> @@: 1113 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.30 1113 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.31 1113 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.32 1113 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.33 1113 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.34 1113 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.35 1113 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.36 1113 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.37 1113 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.30 1113 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.31 1113 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.32 1113 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.33 1113 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.34 1113 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.35 1113 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.36 1113 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.37 1113 ****************** <1> expansion: __@@_num = 38 1114 0000208C F606[7E00]10 <1> testopt [options], tp_bb_hit_no_repeat 1114 ****************** <1> expansion: adr = '[options]' 1114 ****************** <1> expansion: len = 9 1114 ****************** <1> expansion: tf = '[' 1114 ****************** <1> expansion: tb = ']' 1114 ****************** <1> expansion: adr = 'options' 1114 ****************** <1> expansion: adr = options 1115 <1> @@: 1115 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.31 1115 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.32 1115 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.33 1115 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.34 1115 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.35 1115 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.36 1115 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.37 1115 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.38 1115 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.31 1115 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.32 1115 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.33 1115 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.34 1115 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.35 1115 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.36 1115 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.37 1115 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.38 1115 ****************** <1> expansion: __@@_num = 39 1116 00002091 7406 <1> jz @F 1117 00002093 C706[E002][1B03] <1> mov word [lastcmd], dmycmd 1118 <1> @@: 1118 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.32 1118 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.33 1118 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.34 1118 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.35 1118 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.36 1118 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.37 1118 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.38 1118 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.39 1118 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.32 1118 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.33 1118 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.34 1118 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.35 1118 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.36 1118 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.37 1118 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.38 1118 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.39 1118 ****************** <1> expansion: __@@_num = 40 1119 <1> 1120 00002099 EB1A <1> jmp .next 1121 <1> 1122 <1> .check_pass: 1123 0000209B 7418 <1> jz .next ; no pass match ? --> 1124 <1> 1125 0000209D 804EFE02 <1> or byte [bp + ?flags], ?flag_pass 1126 <1> 1127 <1> ; Store breakpoint index in message. 1128 000020A1 BF[963D] <1> mov di, msg.bb_pass.index 1129 000020A4 E85E54 <1> call hexbyte ; store index of this point 1130 <1> 1131 <1> ; Get counter of this breakpoint. 1132 000020A7 8B07 <1> mov ax, word [bx] 1133 <1> ; Store counter in message. 1134 000020A9 BF[A23D] <1> mov di, msg.bb_pass.counter 1135 000020AC E84F54 <1> call hexword 1136 <1> 1137 000020AF C706[A200][7A3D] <1> mov word [bb_deferred_message], msg.bb_pass 1138 <1> 1139 <1> .next: 1140 000020B5 58 <1> pop ax 1141 000020B6 5B <1> pop bx 1142 <1> 1143 000020B7 40 <1> inc ax 1144 000020B8 83F810 <1> cmp ax, _NUM_B_BP 1145 000020BB 7303E927FF <1> jb .loop 1146 <1> 1147 000020C0 F646FE07 <1> test byte [bp + ?flags], ?flag_pass | ?flag_trigger | ?flag_match 1148 000020C4 7405 <1> jz .gg9 ; (NC) 1149 <1> 1150 000020C6 8B46FE <1> mov ax, word [bp + ?flags] 1151 000020C9 EB03 <1> jmp .return ; still NC 1152 <1> 1153 <1> .gg9: 1154 000020CB 31C0 <1> xor ax, ax 1155 000020CD F9 <1> stc 1156 <1> .return: 1157 000020CE 89EC5D <1> lleave 1157 ****************** <1> expansion: 186 = 0 1157 ****************** <1> expansion: lsizeparameters = 0 1157 ****************** <1> expansion: __lframe__autoret = near 1158 000020D1 C3 <1> retn 1159 <1> 1160 <1> 1161 <1> ; INP: word [bx] = pass counter of this breakpoint 1162 <1> ; OUT: NC if to proceed (no trigger), 1163 <1> ; ZR if no pass message display 1164 <1> ; NZ if pass message display 1165 <1> ; CY if to trigger 1166 <1> step_pass_counter: 1167 000020D2 F707FF3F <1> test word [bx], 3FFFh ; is it already at a terminal state ? 1168 000020D6 740A <1> jz .no_decrement ; yes, do not further decrement --> 1169 000020D8 FF0F <1> dec word [bx] ; decrement (to 0/4000h/8000h/C000h) 1170 000020DA 7417 <1> jz .trigger ; case for decrementing 1 to 0 --> 1171 000020DC 813F0040 <1> cmp word [bx], 4000h 1172 000020E0 7411 <1> je .trigger ; case for decrementing 4001h to 4000h 1173 <1> .no_decrement: 1174 000020E2 813F0080 <1> cmp word [bx], 8000h ; decrement resulted in 8000h 1175 000020E6 740B <1> je .trigger ; or was already in that state? --> 1176 000020E8 813F00C0 <1> cmp word [bx], 0_C000h 1177 000020EC 7405 <1> je .trigger ; or C000h --> 1178 <1> .proceed: 1179 000020EE F6470140 <1> test byte [bx + 1], 40h ; (NC) ZR if no pass message 1180 000020F2 C3 <1> retn 1181 <1> 1182 <1> .trigger: 1183 000020F3 F9 <1> stc 1184 000020F4 C3 <1> retn 1185 <1> %endif 1186 <1> 1187 <1> 1188 <1> ; INP: si -> linear address of breakpoint 1189 <1> ; (32 bits if _PM, else 24 bits) 1190 <1> ; OUT: dx:ax = linear address of breakpoint 1191 <1> ; si -> behind linear address 1192 <1> gg_bb_lods_bp_linear: 1193 000020F5 AD <1> lodsw 1194 000020F6 92 <1> xchg ax, dx 1195 <1> %if _PM 1196 <1> lodsw 1197 <1> %else 1198 000020F7 31C0 <1> xor ax, ax 1199 000020F9 AC <1> lodsb 1200 <1> %endif 1201 000020FA 92 <1> xchg ax, dx 1202 000020FB C3 <1> retn 1203 <1> 1204 <1> 1205 <1> ; INP: word [run_int] 1206 <1> ; word [reg_cs] 1207 <1> ; (d)word [reg_eip] 1208 <1> ; gg/bb breakpoints 1209 <1> ; OUT: NC if a breakpoint was hit, 1210 <1> ; (e)ip must be decremented by one 1211 <1> ; word [bb_deferred_message] set if bb point matched 1212 <1> ; (The bb point's index is already written to this msg.) 1213 <1> ; ax = 7 if non-bb match, else 1214 <1> ; ax & 1 set if non-pass match (actual hit), 1215 <1> ; else ax & 2 set if pass match (consider as hit first, 1216 <1> ; but dump registers next (not to silent buffer) 1217 <1> ; and then continue execution) 1218 <1> ; else ax & 4 always set, indicates any match 1219 <1> ; (including matches that should merely continue) 1220 <1> ; all pass points' counters stepped 1221 <1> ; CY if no breakpoint was hit, 1222 <1> ; ax = 0 1223 <1> ; CHG: all 1224 <1> ; STT: es = ds = ss 1225 <1> gg_bb_check_hit: 1226 000020FC E8AFFE <1> call bb_check_hit 1227 000020FF 720D <1> jc .gg_check_hit 1228 <1> 1229 00002101 A801 <1> test al, 1 ; actual bb hit ? 1230 00002103 7507 <1> jnz .ret_NC ; yes, return as hit 1231 <1> 1232 00002105 50 <1> push ax ; bb is pass match or any other match, 1233 00002106 E80500 <1> call gg_check_hit ; is gg a match ? 1234 00002109 58 <1> pop ax 1235 0000210A 732D <1> jnc gg_check_hit.hit ; yes --> (set NC, ax = 7) 1236 <1> 1237 <1> ; Here, we return the flags 2 (set if pass match) and 1238 <1> ; 4 (always set, indicating any match). 1239 <1> 1240 <1> .ret_NC: 1241 0000210C F8 <1> clc 1242 0000210D C3 <1> retn 1243 <1> 1244 <1> .gg_check_hit: 1245 <1> ; (fall through) 1246 <1> 1247 <1> %ifn _NUM_G_BP 1248 <1> gg_check_hit: 1249 <1> stc 1250 <1> retn 1251 <1> %else 1252 <1> ; INP: word [run_int] 1253 <1> ; word [reg_cs] 1254 <1> ; (d)word [reg_eip] 1255 <1> ; bb breakpoints 1256 <1> ; OUT: NC if a breakpoint was hit, 1257 <1> ; (e)ip must be decremented by one 1258 <1> ; ax = 7 1259 <1> ; CY if no breakpoint was hit, 1260 <1> ; ax = 0 1261 <1> ; CHG: all 1262 <1> ; STT: es = ds = ss 1263 <1> gg_check_hit: 1264 <1> ; Finish up. Check if it was one of _our_ breakpoints. 1265 0000210E 813E[DE02][D445] <1> cmp word [run_int], int3msg 1266 00002114 752B <1> jne .gg9 ; if not interrupt 03h --> 1267 <1> 1268 <1> ; Get previous cs:eip (where breakpoint was executed if any at all). 1269 00002116 E82603 <1> call get_cseip_of_possible_breakpoint 1270 <1> ; dx:ax = linear address of previous cs:eip 1271 00002119 7226 <1> jc .gg9 1272 0000211B BE[6801] <1> mov si, g_bplist.bp 1273 0000211E 31C9 <1> xor cx, cx 1274 00002120 8A4CFF <1> mov cl, byte [si-1] ; number of saved breakpoints 1275 00002123 E31C <1> jcxz .gg9 ; none, so always unexpected --> 1276 <1> 1277 00002125 89C7 <1> mov di, ax 1278 00002127 89D3 <1> mov bx, dx ; bx:di = linear address of previous cs:(e)ip 1279 <1> 1280 <1> .loop_gg6: 1281 00002129 E8C9FF <1> call gg_bb_lods_bp_linear 1282 <1> 1283 0000212C E8C401 <1> call gg_bb_check_is_first 1284 0000212F 730D <1> jnc .next 1285 <1> 1286 00002131 39DA <1> cmp dx, bx 1287 00002133 7509 <1> jne .next 1288 00002135 39F8 <1> cmp ax, di 1289 00002137 7505 <1> jne .next 1290 <1> 1291 <1> .hit: 1292 00002139 B80700 <1> mov ax, 7 1293 0000213C F8 <1> clc 1294 0000213D C3 <1> retn 1295 <1> 1296 <1> .next: 1297 0000213E 46 <1> inc si ; skip saved (actually CCh) byte 1298 0000213F E2E8 <1> loop .loop_gg6 ; try next if there's any 1299 <1> 1300 <1> .gg9: 1301 00002141 31C0 <1> xor ax, ax 1302 00002143 F9 <1> stc 1303 00002144 C3 <1> retn 1304 <1> %endif 1305 <1> 1306 <1> 1307 <1> %if _BREAKPOINTS 1308 <1> bb_writepoints_init_reset: 1309 00002145 BF[0701] <1> mov di, b_bplist.bp 1310 00002148 B0CC <1> mov al, 0CCh 1311 0000214A B91000 <1> mov cx, _NUM_B_BP 1312 <1> .loop: 1313 0000214D 83C703 <1> add di, BPSIZE - 1 1314 00002150 AA <1> stosb 1315 00002151 E2FA <1> loop .loop 1316 <1> 1317 <1> ; This is called first by gg before writing any of the 1318 <1> ; gg points. So, if it fails, it only needs to restore 1319 <1> ; its own points, not any of the gg points. 1320 <1> ; This is also called deep down in run_with_bb when called 1321 <1> ; from tt or pp. In this case, there may be a proceed 1322 <1> ; breakpoint already written. On failure, after having 1323 <1> ; restored all yet-written bb points, this proceed 1324 <1> ; breakpoint is restored too. 1325 <1> ; 1326 <1> ; INP: bb breakpoints 1327 <1> ; tpg_proceed_bp 1328 <1> ; OUT: does not return if an error occurred, 1329 <1> ; instead jumps to cmd3 1330 <1> bb_writepoints_init: 1331 00002153 E8BF00 <1> call bb_writepoints 1332 00002156 7354 <1> jnc .retn 1333 <1> 1334 00002158 83EC20 <1> sub sp, _NUM_B_BP * 2 ; reserve space for bb error info 1335 0000215B 89E5 <1> mov bp, sp 1336 <1> ; cx = index of failed point 1337 <1> ; = index above last one to restore 1338 <1> ; ax = error info of failed point 1339 0000215D 50 <1> push ax 1340 0000215E 51 <1> push cx 1341 0000215F E89B00 <1> call bb_restorepoints_and_init_error_info 1342 <1> 1343 <1> bb_restorepoints_exit: equ $ 1344 <1> ; If this is not gg and T/P wrote a proceed breakpoint, 1345 <1> ; restore it here (after having restored bb points). 1346 00002162 E81C08 <1> call proceed_writepoint_restore 1347 00002165 BB0000 <1> mov bx, 0 ; (preserve CF) 1348 00002168 7305 <1> jnc @F 1349 0000216A 80CC80 <1> or ah, 80h ; mark error during restoration 1350 0000216D 89C3 <1> mov bx, ax ; bx & 80h set: error restoring pp 1351 <1> @@: 1351 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.33 1351 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.34 1351 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.35 1351 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.36 1351 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.37 1351 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.38 1351 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.39 1351 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.40 1351 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.33 1351 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.34 1351 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.35 1351 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.36 1351 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.37 1351 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.38 1351 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.39 1351 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.40 1351 ****************** <1> expansion: __@@_num = 41 1352 <1> 1353 0000216F 59 <1> pop cx 1354 00002170 58 <1> pop ax ; error info + index of failed point 1355 <1> 1356 00002171 89CE <1> mov si, cx 1357 00002173 01F6 <1> add si, si 1358 00002175 01F6 <1> add si, si ; * 4 1359 <1> %if _PM 1360 <1> add si, cx ; * 5 1361 <1> %endif 1362 00002177 81C6[0701] <1> add si, b_bplist.bp ; -> point 1363 <1> 1364 0000217B 53 <1> push bx 1365 <1> 1366 0000217C 83F9FF <1> cmp cx, -1 1367 0000217F 740B <1> je @F 1368 <1> 1369 <1> %if _PM 1370 <1> call getsegmented_resetmode 1371 <1> %endif 1372 <1> 1373 <1> ; si-> point 1374 <1> ; ax = info (ah = reason, al = new value if reason 3) 1375 <1> ; cx = 0-based index of initially failed point 1376 00002181 FF7402 <1> push word [si + 2] 1377 00002184 FF34 <1> push word [si] ; stack: linear address 1378 00002186 BB0040 <1> mov bx, 4000h ; bh = 40h (bb), 1379 <1> ; bl = what we tried to restore (n/a) 1380 00002189 E85D08 <1> call display_breakpoint_failure 1381 <1> 1382 <1> @@: 1382 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.34 1382 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.35 1382 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.36 1382 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.37 1382 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.38 1382 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.39 1382 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.40 1382 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.41 1382 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.34 1382 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.35 1382 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.36 1382 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.37 1382 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.38 1382 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.39 1382 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.40 1382 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.41 1382 ****************** <1> expansion: __@@_num = 42 1383 0000218C E8C601 <1> call bb_handlefailedrestore 1384 <1> 1385 0000218F 58 <1> pop ax 1386 00002190 F6C480 <1> test ah, 80h ; pp failed to restore ? 1387 00002193 7411 <1> jz @F 1388 <1> 1389 00002195 FF36[A600] <1> push word [tpg_proceed_bp + 2] 1390 00002199 FF36[A400] <1> push word [tpg_proceed_bp] 1391 0000219D 8A1E[A700] <1> mov bl, [tpg_proceed_bp + BPSIZE - 1] 1392 000021A1 B700 <1> mov bh, 0 ; proceed breakpoint 1393 000021A3 E84308 <1> call display_breakpoint_failure 1394 <1> @@: 1394 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.35 1394 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.36 1394 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.37 1394 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.38 1394 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.39 1394 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.40 1394 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.41 1394 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.42 1394 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.35 1394 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.36 1394 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.37 1394 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.38 1394 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.39 1394 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.40 1394 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.41 1394 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.42 1394 ****************** <1> expansion: __@@_num = 43 1395 000021A6 83C420 <1> add sp, _NUM_B_BP * 2 ; discard bb error info 1396 000021A9 E937E0 <1> jmp cmd3 1397 <1> 1398 <1> .retn: 1399 000021AC C3 <1> retn 1400 <1> %endif 1401 <1> 1402 <1> 1403 <1> %if _NUM_G_BP 1404 <1> ; INP: ss:bp -> behind gg error info space 1405 <1> ; cx = number of error info words on stack 1406 <1> ; OUT: error info space initialised to all zeros 1407 <1> ; CHG: ax, di, es 1408 <1> ; STT: sets es to ss 1409 <1> gg_restorepoints_init_error_info: 1410 000021AD 16 <1> push ss 1411 000021AE 07 <1> pop es 1412 000021AF 89EF <1> mov di, bp ; es:di -> behind error info 1413 000021B1 51 <1> push cx 1414 000021B2 4F <1> dec di 1415 000021B3 4F <1> dec di 1416 000021B4 31C0 <1> xor ax, ax 1417 000021B6 FD <1> std 1418 000021B7 F3AB <1> rep stosw ; initialize error info 1419 000021B9 FC <1> cld 1420 000021BA 59 <1> pop cx 1421 000021BB C3 <1> retn 1422 <1> 1423 <1> 1424 <1> gg_restorepoints_and_init_error_info: 1425 000021BC E8EEFF <1> call gg_restorepoints_init_error_info 1426 <1> 1427 <1> ; Restore gg breakpoints. 1428 <1> ; On errors remember failures but restore all remaining anyway. 1429 <1> ; 1430 <1> ; INP: cx = number of breakpoints to restore (<= 255), 1431 <1> ; assumed at beginning of g_bplist.bp 1432 <1> ; ss:bp -> behind cx words for error info 1433 <1> ; OUT: NC if all points restored successfully 1434 <1> ; CY if at least one point couldn't be restored, 1435 <1> ; error info filled, high byte: 1436 <1> ; reason = 0 = no error (this point didn't fail), 1437 <1> ; 1 = couldn't write, 1438 <1> ; 2 = unreachable, 1439 <1> ; 3 = overwritten), 1440 <1> ; low byte: new byte value (if reason 3) 1441 <1> ; CHG: ax, bx, (e)dx, si, di, es 1442 <1> ; STT: sets es to ss 1443 <1> ; 1444 <1> ; Note: The points are restored in reverse, from the list back 1445 <1> ; to the front. The first point is handled last. 1446 <1> gg_restorepoints: 1447 000021BF 89CE <1> mov si, cx 1448 000021C1 01F6 <1> add si, si 1449 000021C3 01F6 <1> add si, si 1450 <1> %if BPSIZE == 5 1451 <1> add si, cx 1452 <1> %endif 1453 000021C5 81C6[6401] <1> add si, g_bplist.bp - BPSIZE ; -> last point in list (first to restore) 1454 <1> 1455 000021C9 F8 <1> clc ; assume success 1456 000021CA 51 <1> push cx 1457 000021CB 9C <1> pushf 1458 000021CC E31E <1> jcxz .done ; nothing to do --> 1459 <1> .loop: 1460 000021CE E8D000 <1> call gg_writepoints_restore ; Restore breakpoint bytes. 1461 000021D1 7319 <1> jnc .done ; successful --> 1462 000021D3 5A <1> pop dx ; discard flags 1463 000021D4 5B <1> pop bx 1464 000021D5 53 <1> push bx 1465 000021D6 9C <1> pushf ; store (CY) flags 1466 <1> 1467 000021D7 50 <1> push ax 1468 000021D8 89F7 <1> mov di, si 1469 000021DA 81EF[6C01] <1> sub di, BPSIZE+g_bplist.bp 1470 <1> %if BPSIZE == 5 1471 <1> mov ax, di 1472 <1> xor dx, dx 1473 <1> mov di, 5 1474 <1> div di 1475 <1> mov di, ax ; di = 0-based point index 1476 <1> shl di, 1 ; di = 0-based error info offset 1477 <1> %elif BPSIZE == 4 1478 000021DE D1EF <1> shr di, 1 ; di = 0-based error info offset 1479 <1> %else 1480 <1> %error "Unexpected BPSIZE" 1481 <1> %endif 1482 000021E0 29DF <1> sub di, bx 1483 000021E2 29DF <1> sub di, bx 1484 000021E4 8F03 <1> pop word [bp+di] ; store error info 1485 000021E6 49 <1> dec cx ; exclude the failed point 1486 000021E7 83EE08 <1> sub si, 2*BPSIZE ; -> the point _before_ failed one 1487 000021EA EBE2 <1> jmp short .loop 1488 <1> .done: 1489 <1> %if _PM 1490 <1> call getsegmented_resetmode 1491 <1> %endif 1492 000021EC 9D <1> popf ; get flags. CY if any couldn't be restored 1493 000021ED 59 <1> pop cx ; restore cx 1494 000021EE C3 <1> retn 1495 <1> %endif 1496 <1> 1497 <1> 1498 <1> %if _BREAKPOINTS 1499 <1> ; INP: ss:bp -> error info space (one word per bb breakpoint) 1500 <1> ; OUT: error info space initialised to all zeros 1501 <1> ; CHG: ax, di, es 1502 <1> ; STT: sets es to ss 1503 <1> ; 1504 <1> ; Note: This initialises words for all bb points. 1505 <1> ; While the value in cx is preserved, it is 1506 <1> ; assumed that space for all points is allocated. 1507 <1> bb_restorepoints_init_error_info: 1508 000021EF 16 <1> push ss 1509 000021F0 07 <1> pop es 1510 000021F1 89EF <1> mov di, bp 1511 000021F3 31C0 <1> xor ax, ax 1512 000021F5 51 <1> push cx 1513 000021F6 B91000 <1> mov cx, _NUM_B_BP 1514 000021F9 F3AB <1> rep stosw 1515 000021FB 59 <1> pop cx 1516 000021FC C3 <1> retn 1517 <1> 1518 <1> 1519 <1> bb_restorepoints_and_init_error_info: 1520 000021FD E8EFFF <1> call bb_restorepoints_init_error_info 1521 <1> 1522 <1> ; Restore bb breakpoints. 1523 <1> ; On errors remember failures but restore all remaining anyway. 1524 <1> ; 1525 <1> ; INP: cx = index above last one to restore 1526 <1> ; ss:bp -> error info space (one word per bb breakpoint) 1527 <1> ; OUT: NC if all points restored successfully 1528 <1> ; CY if at least one point couldn't be restored, 1529 <1> ; error info filled, high byte: 1530 <1> ; reason = 0 = no error (this point didn't fail), 1531 <1> ; 1 = couldn't write, 1532 <1> ; 2 = unreachable, 1533 <1> ; 3 = overwritten), 1534 <1> ; low byte: new byte value (if reason 3) 1535 <1> ; CHG: ax, bx, cx, (e)dx, si, di, es 1536 <1> ; STT: sets es to ss 1537 <1> ; 1538 <1> ; Note: The points are restored in reverse, from the list back 1539 <1> ; to the front. The first point is handled last. 1540 <1> bb_restorepoints: 1541 <1> 1542 00002200 F8 <1> clc ; assume success 1543 00002201 9C <1> pushf 1544 00002202 E30F <1> jcxz .done 1545 <1> .loop: 1546 00002204 E81400 <1> call bb_writepoints_restore 1547 00002207 730A <1> jnc .done 1548 00002209 5A <1> pop dx ; (discard flags) 1549 0000220A 9C <1> pushf ; store (CY) flags 1550 <1> ; cx = index of point that failed to write 1551 <1> ; ah = reason, al = new byte value (reason 3) 1552 0000220B 89CF <1> mov di, cx 1553 0000220D 01FF <1> add di, di 1554 0000220F 8903 <1> mov word [bp + di], ax ; store error info 1555 00002211 EBF1 <1> jmp .loop 1556 <1> 1557 <1> .done: 1558 00002213 9D <1> popf 1559 <1> %if _PM 1560 <1> call getsegmented_resetmode 1561 <1> %endif 1562 00002214 C3 <1> retn 1563 <1> 1564 <1> 1565 <1> ; Loop through bb breakpoints and exchange the saved 1566 <1> ; byte with that one at the actual address. Used to write 1567 <1> ; the breakpoints. 1568 <1> ; 1569 <1> ; INP: - 1570 <1> ; OUT: NC if successful 1571 <1> ; CY if error writing a point, 1572 <1> ; cx = index of point that failed to write 1573 <1> ; (all PRIOR points were processed successfully, 1574 <1> ; either written successfully or skipped) 1575 <1> ; CHG: ax, bx, (e)dx, si, cx, di 1576 <1> bb_writepoints: 1577 00002215 31C9 <1> xor cx, cx 1578 00002217 BF0100 <1> mov di, 1 1579 0000221A A9 <1> db __TEST_IMM16 ; (skip xor, NC) 1580 <1> 1581 <1> ; Same, but go through the breakpoints in reverse order 1582 <1> ; and check that what we overwrite is a 0CCh byte. If so, 1583 <1> ; restore the original value. (The 0CCh is discarded.) 1584 <1> ; 1585 <1> ; INP: cx = index *above* last to write (_NUM_B_BP for all) 1586 <1> ; OUT: NC if successful 1587 <1> ; CY if error writing a point, 1588 <1> ; cx = index of point that failed to write 1589 <1> ; ah = 1 if error because point could not be written 1590 <1> ; ah = 2 if error because address is unreachable 1591 <1> ; ah = 3 if error because point contained non-0CCh value, 1592 <1> ; al = new byte 1593 <1> ; CHG: ax, bx, (e)dx, si, cx, di 1594 <1> bb_writepoints_restore: 1595 0000221B 31FF <1> xor di, di ; (NC) 1596 <1> bb_wp: 1597 <1> lframe near 1597 ****************** <1> expansion: bits = 16 1597 ****************** <1> expansion: base_size = 2 1597 ****************** <1> expansion: near_offset = 2 1597 ****************** <1> expansion: far_offset = 4 1597 ****************** <1> expansion: int_offset = 6 1597 ****************** <1> expansion: inner = 0 1597 ****************** <1> expansion: nested = 0 1597 ****************** <1> expansion: autoret = 1597 ****************** <1> expansion: autoret = near 1597 ****************** <1> expansion: parofs = 2 1597 ****************** <1> expansion: pars_size = 0 1597 ****************** <1> expansion: pars_return_size = 0 1597 ****************** <1> expansion: parlist = 1597 ****************** <1> expansion: labellist = empty,empty,empty 1597 ****************** <1> expansion: ofs = 0 1597 ****************** <1> expansion: enter = 0 1597 ****************** <1> expansion: req = 0 1597 ****************** <1> expansion: usereq = 0 1597 ****************** <1> expansion: emit = 1 1597 ****************** <1> expansion: restore_frame_ofs = 0 1597 ****************** <1> expansion: pars_inner_size = 0 1598 0000221D 5589E5 <1> lenter 1598 ****************** <1> expansion: wasearly = 0 1598 ****************** <1> expansion: early = 0 1598 ****************** <1> expansion: lsizevariables = 0 1598 ****************** <1> expansion: req = 1 1598 ****************** <1> expansion: enter_emitted = 0 1598 ****************** <1> expansion: enter = 1 1598 ****************** <1> expansion: 186 = 0 1598 ****************** <1> expansion: newlabel = frame_bp 1598 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 1598 ****************** <1> expansion: ?frame_bp = 0 1598 ****************** <1> expansion: newlabel = frame_ip 1598 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 1598 ****************** <1> expansion: ?frame_ip = 2 1598 ****************** <1> expansion: lsizeparameters = 0 1599 <1> lvar word, is_write 1599 ****************** <1> expansion: varsize = 2 1599 ****************** <1> expansion: ofs = -2 1599 ****************** <1> expansion: newlabel = is_write 1599 ****************** <1> expansion: labellist = is_write,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 1599 ****************** <1> expansion: ?is_write = -2 1599 ****************** <1> expansion: req = 1 1599 ****************** <1> expansion: hadvar = 1 1600 00002220 57 <1> push di 1601 <1> 1602 00002221 F646FE01 <1> test byte [bp + ?is_write], 1 1603 <1> ; (NC) is it writing ? 1604 00002225 7450 <1> jz .next ; no, is restoring, first decrement cx --> 1605 <1> 1606 <1> .loop: 1607 00002227 89C8 <1> mov ax, cx 1608 00002229 E84536 <1> call calcpointbit ; bx = index, ah = value 1609 0000222C 84A7[0101] <1> test byte [b_bplist.used_mask+bx], ah 1610 <1> ; (NC) 1611 00002230 7445 <1> jz .next 1612 00002232 84A7[0301] <1> test byte [b_bplist.disabled_mask+bx], ah 1613 <1> ; (NC) 1614 00002236 753F <1> jnz .next 1615 <1> 1616 00002238 89CE <1> mov si, cx 1617 0000223A 01F6 <1> add si, si 1618 0000223C 01F6 <1> add si, si 1619 <1> %if _PM 1620 <1> add si, cx 1621 <1> %endif 1622 0000223E 81C6[0701] <1> add si, b_bplist.bp ; -> point 1623 <1> 1624 00002242 E8B0FE <1> call gg_bb_lods_bp_linear 1625 <1> ; dx:ax = linear address 1626 <1> 1627 00002245 E8AB00 <1> call gg_bb_check_is_first 1628 00002248 732D <1> jnc .next ; (NC) 1629 <1> 1630 0000224A E81202 <1> call getsegmented ; bx:(e)dx = segmented address 1631 0000224D AC <1> lodsb ; get byte to write 1632 0000224E B402 <1> mov ah, 2 1633 00002250 723B <1> jc .return ; not in PM anymore/address not available --> (CY) 1634 00002252 F646FE01 <1> test byte [bp + ?is_write], 1 1635 <1> ; writing? 1636 00002256 7517 <1> jnz .forward_nocheck ; yes --> 1637 <1> 1638 <1> .backward_check: 1639 00002258 50 <1> push ax 1640 00002259 E8803D <1> call readmem ; read current byte 1641 0000225C 3CCC <1> cmp al, 0CCh ; is this still what we wrote? 1642 0000225E B483 <1> mov ah, 83h ; (80h = error occurred while restoring) 1643 00002260 F9 <1> stc 1644 00002261 752A <1> jne .return_discard ; nope --> (CY) 1645 00002263 58 <1> pop ax 1646 00002264 E84D3D <1> call writemem ; return the byte to its original value 1647 00002267 720E <1> jc .next ; failed --> (CY, handled there) 1648 00002269 C644FFCC <1> mov byte [si-1], 0CCh ; reset stored point 1649 0000226D EB08 <1> jmp short .next 1650 <1> 1651 <1> .forward_nocheck: 1652 0000226F E8423D <1> call writemem 1653 00002272 7203 <1> jc .next 1654 00002274 8844FF <1> mov byte [si-1], al ; save the previous byte there 1655 <1> .next: 1656 00002277 B401 <1> mov ah, 1 ; (in case of error) 1657 00002279 7212 <1> jc .return ; failed to write --> (CY) 1658 <1> 1659 0000227B F646FE01 <1> test byte [bp + ?is_write], 1 1660 0000227F 7505 <1> jnz .is_write_next 1661 00002281 49 <1> dec cx ; restore: decrement index 1662 00002282 79A3 <1> jns .loop ; decremented to 0FFFFh ? no, loop --> 1663 00002284 EB06 <1> jmp .return_NC 1664 <1> 1665 <1> .is_write_next: 1666 00002286 41 <1> inc cx ; write: increment index 1667 00002287 83F910 <1> cmp cx, _NUM_B_BP ; above last ? 1668 0000228A 729B <1> jb .loop ; no, loop --> 1669 <1> .return_NC: 1670 0000228C F8 <1> clc 1671 <1> .return: 1672 <1> .return_discard: 1673 0000228D 730A <1> jnc .ret 1674 <1> 1675 0000228F F646FE01 <1> test byte [bp + ?is_write], 1 1676 <1> ; restoring ? 1677 00002293 7503 <1> jnz .ret_CY ; no --> 1678 00002295 80CC80 <1> or ah, 80h ; error occurred while restoring 1679 <1> .ret_CY: 1680 00002298 F9 <1> stc 1681 <1> .ret: 1682 <1> %if _PM 1683 <1> call getsegmented_resetmode 1684 <1> %endif 1685 00002299 89EC5D <1> lleave 1685 ****************** <1> expansion: 186 = 0 1685 ****************** <1> expansion: lsizeparameters = 0 1685 ****************** <1> expansion: __lframe__autoret = near 1686 0000229C C3 <1> lret 1686 ****************** <1> expansion: type = auto 1686 ****************** <1> expansion: type = __lframe__autoret 1686 ****************** <1> expansion: inst = retn 1686 ****************** <1> expansion: remov = 0 1686 ****************** <1> expansion: remov = 0 1686 ****************** <1> expansion: remov = 1687 <1> %endif 1688 <1> 1689 <1> 1690 <1> %if _NUM_G_BP 1691 <1> ; Loop through saved breakpoints and exchange the saved 1692 <1> ; byte with that one at the actual address. Used to write 1693 <1> ; the breakpoints. 1694 <1> ; 1695 <1> ; INP: si-> current point 1696 <1> ; cx = number of points to write (might be zero) 1697 <1> ; OUT: NC if successful 1698 <1> ; CY if error writing a point, 1699 <1> ; cx = number of points still to write (including failed one) 1700 <1> ; (si-BPSIZE)-> point that failed 1701 <1> ; CHG: ax, bx, (e)dx, si, cx, di 1702 <1> gg_writepoints: 1703 0000229D BF0100 <1> mov di, 1 1704 000022A0 A9 <1> db __TEST_IMM16 ; (skip xor, NC) 1705 <1> 1706 <1> ; Same, but go through the breakpoints in reverse order 1707 <1> ; and check that what we overwrite is a 0CCh byte. If so, 1708 <1> ; restore the original value. (The 0CCh is discarded.) 1709 <1> ; 1710 <1> ; Additionally: 1711 <1> ; OUT: CY if error writing a point, 1712 <1> ; ah = 1 if error because point could not be written 1713 <1> ; ah = 2 if error because address is unreachable 1714 <1> ; ah = 3 if error because point contained non-0CCh value, 1715 <1> ; al = new byte 1716 <1> gg_writepoints_restore: 1717 000022A1 31FF <1> xor di, di ; (NC) 1718 <1> gg_wp: 1719 000022A3 E341 <1> jcxz .return ;if nothing to do --> (still NC from xor/test) 1720 <1> .loop: 1721 000022A5 E84DFE <1> call gg_bb_lods_bp_linear 1722 <1> ; dx:ax = linear address 1723 <1> 1724 000022A8 E84800 <1> call gg_bb_check_is_first 1725 000022AB 7207 <1> jc @F ; if to handle this breakpoint --> 1726 <1> 1727 <1> ; Skip to next breakpoint. 1728 000022AD 46 <1> inc si ; -> after point 1729 <1> 1730 000022AE 85FF <1> test di, di ; (NC) 1731 000022B0 752E <1> jnz .next ; going forward --> 1732 000022B2 EB21 <1> jmp .next_lea_si ; (NC) 1733 <1> 1734 <1> ; Handle this breakpoint. 1735 <1> @@: 1735 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.36 1735 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.37 1735 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.38 1735 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.39 1735 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.40 1735 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.41 1735 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.42 1735 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.43 1735 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.36 1735 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.37 1735 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.38 1735 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.39 1735 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.40 1735 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.41 1735 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.42 1735 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.43 1735 ****************** <1> expansion: __@@_num = 44 1736 000022B4 E8A801 <1> call getsegmented ; bx:(e)dx = segmented address 1737 000022B7 AC <1> lodsb ; get byte to write 1738 000022B8 B402 <1> mov ah, 2 1739 000022BA 722A <1> jc .return ; not in PM anymore/address not available --> (CY) 1740 000022BC 85FF <1> test di, di ; writing? 1741 000022BE 751A <1> jnz .forward_nocheck ; yes --> 1742 <1> 1743 <1> .backward_check: 1744 000022C0 50 <1> push ax 1745 000022C1 E8183D <1> call readmem ; read current byte 1746 000022C4 3CCC <1> cmp al, 0CCh ; is this still what we wrote? 1747 000022C6 B483 <1> mov ah, 83h ; (80h = error occurred while restoring) 1748 000022C8 F9 <1> stc 1749 000022C9 7526 <1> jne .return_discard ; nope --> (CY) 1750 000022CB 58 <1> pop ax 1751 000022CC E8E53C <1> call writemem ; return the byte to its original value 1752 000022CF 720F <1> jc .next ; failed --> (CY, handled there) 1753 000022D1 C644FFCC <1> mov byte [si-1], 0CCh ; reset stored point 1754 <1> .next_lea_si: 1755 000022D5 8D74F8 <1> lea si, [si-2*BPSIZE] ; adjust (for reverse writing) 1756 000022D8 EB06 <1> jmp short .next 1757 <1> 1758 <1> .forward_nocheck: 1759 000022DA E8D73C <1> call writemem 1760 000022DD 8844FF <1> mov byte [si-1], al ; save the previous byte there 1761 <1> .next: 1762 000022E0 B401 <1> mov ah, 1 ; (in case of error) 1763 000022E2 7202 <1> jc .return ; failed to write --> (CY) 1764 000022E4 E2BF <1> loop .loop 1765 <1> .return: ; (NC) 1766 000022E6 730A <1> jnc .ret 1767 <1> 1768 000022E8 85FF <1> test di, di ; restoring ? 1769 000022EA 7503 <1> jnz .ret_CY ; no --> 1770 000022EC 80CC80 <1> or ah, 80h ; error occurred while restoring 1771 <1> .ret_CY: 1772 000022EF F9 <1> stc 1773 000022F0 52 <1> push dx ; (counteract effect of pop) 1774 <1> .return_discard: 1775 000022F1 5A <1> pop dx 1776 <1> .ret: 1777 <1> %if _PM 1778 <1> call getsegmented_resetmode 1779 <1> %endif 1780 000022F2 C3 <1> retn 1781 <1> %endif 1782 <1> 1783 <1> 1784 <1> ; INP: dx:ax = linear address of point to be (re)set 1785 <1> ; dword [internalflags2] 1786 <1> ; dword [gg_first_cseip_linear] 1787 <1> ; OUT: CY if to (re)set breakpoint 1788 <1> ; if: no flag set 1789 <1> ; or: dx:ax doesn't match, dif2_gg_skip_non_cseip clear 1790 <1> ; (setting non-cseip point) 1791 <1> ; or: dx:ax matches, dif2_gg_skip_cseip clear 1792 <1> ; (setting cseip point afterwards) 1793 <1> ; NC if to not (re)set breakpoint 1794 <1> ; if: dx:ax doesn't match, dif2_gg_skip_non_cseip set 1795 <1> ; (not setting non-cseip point afterwards) 1796 <1> ; or: dx:ax matches, dif2_gg_skip_cseip set 1797 <1> ; (not setting cseip point) 1798 <1> gg_bb_check_is_first: 1800 000022F3 F606[8800]07 <1> testopt [internalflags2], dif2_gg_is_first | dif2_gg_skip_cseip | dif2_gg_skip_non_cseip 1800 ****************** <1> expansion: adr = '[internalflags2]' 1800 ****************** <1> expansion: len = 16 1800 ****************** <1> expansion: tf = '[' 1800 ****************** <1> expansion: tb = ']' 1800 ****************** <1> expansion: adr = 'internalflags2' 1800 ****************** <1> expansion: adr = internalflags2 1801 000022F8 7418 <1> jz .continue 1802 <1> 1803 000022FA 3906[9400] <1> cmp [gg_first_cseip_linear], ax 1804 000022FE 7514 <1> jne .is_not_first 1805 00002300 3916[9600] <1> cmp [gg_first_cseip_linear + 2], dx 1806 00002304 750E <1> jne .is_not_first 1807 <1> 1808 <1> .is_first: 1809 00002306 800E[8800]10 <1> setopt [internalflags2], dif2_gg_first_detected 1809 ****************** <1> expansion: adr = '[internalflags2]' 1809 ****************** <1> expansion: len = 16 1809 ****************** <1> expansion: tf = '[' 1809 ****************** <1> expansion: tb = ']' 1809 ****************** <1> expansion: adr = 'internalflags2' 1809 ****************** <1> expansion: adr = internalflags2 1810 0000230B F606[8800]04 <1> testopt [internalflags2], dif2_gg_skip_cseip 1810 ****************** <1> expansion: adr = '[internalflags2]' 1810 ****************** <1> expansion: len = 16 1810 ****************** <1> expansion: tf = '[' 1810 ****************** <1> expansion: tb = ']' 1810 ****************** <1> expansion: adr = 'internalflags2' 1810 ****************** <1> expansion: adr = internalflags2 1811 00002310 7509 <1> jnz .skip 1812 <1> .continue: 1813 00002312 F9 <1> stc 1814 00002313 C3 <1> retn 1815 <1> 1816 <1> .is_not_first: 1817 00002314 F606[8800]02 <1> testopt [internalflags2], dif2_gg_skip_non_cseip 1817 ****************** <1> expansion: adr = '[internalflags2]' 1817 ****************** <1> expansion: len = 16 1817 ****************** <1> expansion: tf = '[' 1817 ****************** <1> expansion: tb = ']' 1817 ****************** <1> expansion: adr = 'internalflags2' 1817 ****************** <1> expansion: adr = internalflags2 1818 00002319 74F7 <1> jz .continue 1819 <1> .skip: 1820 0000231B F8 <1> clc 1821 0000231C C3 <1> retn 1822 <1> 1823 <1> 1824 <1> ; INP: al = number to put 1825 <1> ; OUT: putsline called with ordinal string 1826 <1> ; CHG: di, [line_out], ax 1827 <1> putordinalbyte: 1828 0000231D 53 <1> push bx 1829 0000231E 51 <1> push cx 1830 0000231F 52 <1> push dx 1831 <1> 1832 <1> ; Note that trim_overflow in front of line_out is 1833 <1> ; initialised to '0', which we depend on here. 1834 <1> ; With the output from decbyte, at least two decimal 1835 <1> ; digits are always valid in the buffer. 1836 00002320 BF[A901] <1> mov di, line_out 1837 00002323 E80700 <1> call ordinalbyte 1838 00002326 E81152 <1> call putsline 1839 00002329 5A <1> pop dx 1840 0000232A 59 <1> pop cx 1841 0000232B 5B <1> pop bx 1842 0000232C C3 <1> retn 1843 <1> 1844 <1> 1845 <1> ordinalbyte: 1846 0000232D E8A151 <1> call decbyte 1847 00002330 8B45FE <1> mov ax, [di - 2] ; al = lower address, higher decimal digit 1848 <1> ; ah = higher address, lower decimal digit 1849 00002333 3C31 <1> cmp al, '1' 1850 00002335 7417 <1> je .gotsuf_th ; 11th, 12th, 13th or other teen --> 1851 00002337 BA7374 <1> mov dx, "st" 1852 0000233A 80FC31 <1> cmp ah, '1' 1853 0000233D 7412 <1> je .gotsuf ; if low digit was one --> 1854 0000233F BA6E64 <1> mov dx, "nd" 1855 00002342 80FC32 <1> cmp ah, '2' 1856 00002345 740A <1> je .gotsuf ; if low digit was two --> 1857 00002347 B272 <1> mov dl, 'r' 1858 00002349 80FC33 <1> cmp ah, '3' 1859 0000234C 7403 <1> je .gotsuf ; if low digit was three --> 1860 <1> .gotsuf_th: 1861 0000234E BA7468 <1> mov dx, "th" 1862 <1> .gotsuf: 1863 00002351 89D0 <1> mov ax, dx 1864 00002353 AB <1> stosw 1865 00002354 C3 <1> retn 1866 <1> 1867 <1> 1868 <1> %if _BREAKPOINTS 1869 <1> ; INP: ss:bp -> error info (points at first info word) 1870 <1> ; Each word provides information for one point we tried 1871 <1> ; to restore. The lowest info word corresponds to the 1872 <1> ; first bb breakpoint (bb 00), followed by the info word 1873 <1> ; for the second bb breakpoint (bb 01), and so on. 1874 <1> ; There are always as many info words as there are 1875 <1> ; bb breakpoints. 1876 <1> ; CHG: ax, bx, cx, dx, di, si 1877 <1> ; STT: sets es to ss 1878 <1> bb_handlefailedrestore: 1879 00002355 31FF <1> xor di, di 1880 00002357 31C9 <1> xor cx, cx 1881 00002359 16 <1> push ss 1882 0000235A 07 <1> pop es 1883 0000235B BE[0701] <1> mov si, b_bplist.bp 1884 <1> .loop: 1885 0000235E 8B03 <1> mov ax, word [bp + di] 1886 00002360 F6C47F <1> test ah, 7Fh ; failed ? 1887 00002363 7414 <1> jz .next 1888 00002365 51 <1> push cx 1889 00002366 57 <1> push di 1890 <1> ; cx = 0-based index 1891 00002367 FF7402 <1> push word [si + 2] 1892 0000236A FF34 <1> push word [si] ; stack: linear address 1893 0000236C 8A5C03 <1> mov bl, byte [si + BPSIZE - 1] 1894 <1> ; bl = what we tried to restore 1895 0000236F B740 <1> mov bh, 40h ; bh = 40h (bb) 1896 00002371 80CC80 <1> or ah, 80h ; ah & 80h = set (is restore) 1897 00002374 E87206 <1> call display_breakpoint_failure 1898 00002377 5F <1> pop di 1899 00002378 59 <1> pop cx 1900 <1> .next: 1901 00002379 83C604 <1> add si, BPSIZE 1902 0000237C AF <1> scasw ; di += 2 1903 0000237D 41 <1> inc cx 1904 0000237E 83F910 <1> cmp cx, _NUM_B_BP 1905 00002381 72DB <1> jb .loop 1906 <1> .end: 1907 00002383 C3 <1> retn 1908 <1> %endif 1909 <1> 1910 <1> 1911 <1> %if _NUM_G_BP 1912 <1> ; INP: cx = number of restored points (number of info words) 1913 <1> ; ss:bp-> error info (points *behind* last info word) 1914 <1> ; Each word provides information for one point we tried 1915 <1> ; to restore. The lowest info word corresponds to the 1916 <1> ; first gg breakpoint, followed by the info word for 1917 <1> ; the second gg breakpoint (if any), and so on. 1918 <1> ; CHG: ax, bx, cx, dx, di, si 1919 <1> ; STT: sets es to ss 1920 <1> gg_handlefailedrestore: 1921 00002384 89CF <1> mov di, cx 1922 00002386 01FF <1> add di, di 1923 00002388 F7DF <1> neg di 1924 0000238A 16 <1> push ss 1925 0000238B 07 <1> pop es 1926 0000238C BB0000 <1> mov bx, 0 1927 0000238F BE[6801] <1> mov si, g_bplist.bp 1928 00002392 E325 <1> jcxz .end 1929 <1> .loop: 1930 00002394 8B03 <1> mov ax, word [bp+di] 1931 00002396 F6C47F <1> test ah, 7Fh ; failed? 1932 00002399 7416 <1> jz .next ; no --> 1933 <1> 1934 <1> ; si-> point 1935 <1> ; ax = info (ah = reason, al = new value if reason 3) 1936 <1> ; bx = point's 0-based index 1937 <1> .display: 1938 0000239B 53 <1> push bx 1939 0000239C 57 <1> push di 1940 0000239D 89D9 <1> mov cx, bx ; cx = 0-based index 1941 0000239F FF7402 <1> push word [si + 2] 1942 000023A2 FF34 <1> push word [si] ; stack: linear address 1943 000023A4 8A5C03 <1> mov bl, byte [si + BPSIZE - 1] 1944 <1> ; bl = what we tried to restore 1945 000023A7 B780 <1> mov bh, 80h ; bh = 80h (gg) 1946 000023A9 80CC80 <1> or ah, 80h ; ah & 80h = set (is restore) 1947 000023AC E83A06 <1> call display_breakpoint_failure 1948 000023AF 5F <1> pop di 1949 000023B0 5B <1> pop bx 1950 <1> .next: 1951 000023B1 43 <1> inc bx ; increment counter 1952 000023B2 83C604 <1> add si, BPSIZE ; -> next point 1953 000023B5 47 <1> inc di 1954 000023B6 47 <1> inc di ; di+bp-> next error info 1955 000023B7 75DB <1> jnz .loop ; not yet at end --> 1956 <1> .end: 1957 000023B9 C3 <1> retn 1958 <1> %endif ; _NUM_G_BP 1959 <1> 1960 <1> 1961 <1> ; INP: word [reg_cs] 1962 <1> ; (d)word [reg_eip] 1963 <1> ; OUT: bx = word [reg_cs] 1964 <1> ; CY if invalid address 1965 <1> ; NC if address is valid, 1966 <1> ; dx:ax = linear address 1967 <1> ; CHG: edx, ax, ecx 1968 <1> get_cseip_minus_1_linear: 1969 <1> _386_PM_o32 ; or ecx, byte -1 1970 000023BA 83C9FF <1> or cx, byte -1 1971 <1> 1972 <1> ; INP: word [reg_cs] 1973 <1> ; (d)word [reg_eip] 1974 <1> ; (e)cx = adjustment to (e)ip 1975 <1> ; OUT: bx = word [reg_cs] 1976 <1> ; CY if invalid address 1977 <1> ; NC if address is valid, 1978 <1> ; dx:ax = linear address 1979 <1> ; CHG: edx, ax 1980 <1> get_cseip_ecx_linear: 1981 000023BD 8B1E[6C03] <1> mov bx, [reg_cs] ; bx = cs 1982 <1> _386_PM_o32 1983 000023C1 8B16[7803] <1> mov dx, [reg_eip] ; (e)dx = (e)ip 1984 <1> _386_PM_o32 1985 000023C5 01CA <1> add dx, cx ; bx:(e)dx = adjusted cs:(e)ip 1986 <1> ; (getlinear doesn't use the high word of edx if it's a 16-bit cs) 1987 <1> ; call getlinear ; dx:ax = linear address of this cs:eip 1988 <1> ; (fall through) 1989 <1> 1990 <1> ; INP: If currently in RM, 1991 <1> ; bx:dx = segment:offset of address 1992 <1> ; If currently in PM, 1993 <1> ; bx:(e)dx = selector:offset of address 1994 <1> ; OUT: bx = unchanged (selector/segment) 1995 <1> ; CY if address is invalid, 1996 <1> ; because Int31.0006 failed for bx or 1997 <1> ; because 32-bit address overflowed or 1998 <1> ; because A20 could not be switched on 1999 <1> ; NC if address is valid, 2000 <1> ; dx:ax = linear address 2001 <1> ; dh is always zero if the address is in RM address space 2002 <1> ; CHG: dx, ax 2003 <1> getlinear: 2004 <1> %if _PM 2005 <1> call getsegmented_resetmode 2006 <1> ; This must execute in the correct mode, 2007 <1> ; because we get the input from whatever 2008 <1> ; mode we were originally entered in. 2009 <1> %endif 2010 <1> %if _DEBUG1 2011 000023C7 E80D00 <1> call .do_not_use_test ; get linear address 2012 000023CA 720A <1> jc @F ; already an error ? then return --> 2013 000023CC 53 <1> push bx 2014 000023CD 51 <1> push cx 2015 000023CE BB[6801] <1> mov bx, test_records_getLinear 2016 000023D1 E8050A <1> call handle_test_case_multiple_16 2017 <1> ; check whether this should testcase the error 2018 <1> ; CY to indicate error from this call 2019 000023D4 59 <1> pop cx 2020 000023D5 5B <1> pop bx 2021 <1> @@: 2021 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.37 2021 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.38 2021 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.39 2021 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.40 2021 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.41 2021 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.42 2021 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.43 2021 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.44 2021 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.37 2021 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.38 2021 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.39 2021 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.40 2021 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.41 2021 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.42 2021 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.43 2021 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.44 2021 ****************** <1> expansion: __@@_num = 45 2022 000023D6 C3 <1> retn 2023 <1> 2024 <1> %endif 2025 <1> .do_not_use_test: 2026 000023D7 53 <1> push bx 2027 <1> %if _PM 2028 <1> call ispm 2029 <1> jnz .rm 2030 <1> mov ax, 0006h 2031 <1> push cx 2032 <1> push dx 2033 <1> int 31h ; get selector base address into cx:dx 2034 <1> pop ax ; (edxh:)ax = offset, cx:dx = base 2035 <1> jc .return_cx_bx 2036 <1> 2037 <1> _386 call testattrhigh 2038 <1> _386 jz .16 2039 <1> _386 push edx 2040 <1> _386 pop bx 2041 <1> _386 pop bx ; bx = high word edx (in 32-bit PM segment) 2042 <1> _386 jmp .32 2043 <1> .16: ; bx:ax = offset 2044 <1> xor bx, bx ; 16-bit PM segment, clear offset high word 2045 <1> .32: 2046 <1> add ax, dx 2047 <1> adc bx, cx ; add the base 2048 <1> xchg bx, dx ; dx:ax = 32-bit linear address 2049 <1> clc 2050 <1> 2051 <1> .return_cx_bx: 2052 <1> pop cx 2053 <1> pop bx 2054 <1> retn 2055 <1> .rm: 2056 <1> %endif 2057 000023D8 89D8 <1> mov ax, bx 2058 000023DA 51 <1> push cx 2059 000023DB B104 <1> mov cl, 4 2060 000023DD D3C0 <1> rol ax, cl 2061 000023DF 59 <1> pop cx 2062 000023E0 BBF0FF <1> mov bx, 0FFF0h 2063 000023E3 21C3 <1> and bx, ax ; bx = low word adjustment 2064 000023E5 83E00F <1> and ax, byte 0Fh ; ax = higher bits which don't fit in the low word 2065 000023E8 01DA <1> add dx, bx 2066 000023EA 83D000 <1> adc ax, byte 0 2067 000023ED 92 <1> xchg ax, dx ; dx:ax = 21-bit linear address 2068 000023EE F606[8500]10 <1> testopt [internalflags], debuggeeA20 2068 ****************** <1> expansion: adr = '[internalflags]' 2068 ****************** <1> expansion: len = 15 2068 ****************** <1> expansion: tf = '[' 2068 ****************** <1> expansion: tb = ']' 2068 ****************** <1> expansion: adr = 'internalflags' 2068 ****************** <1> expansion: adr = internalflags 2069 000023F3 7503 <1> jnz .return_bx ; A20 line enabled, no need to adjust (NC) 2070 000023F5 80E2EF <1> and dl, ~10h ; clear corresponding bit of the address if it was set (NC) 2071 <1> .return_bx: 2072 000023F8 5B <1> pop bx 2073 000023F9 C3 <1> retn 2074 <1> 2075 <1> 2076 <1> ; INP: bx = segment/selector to use by default 2077 <1> ; al = next character in input 2078 <1> ; si -> following character in input 2079 <1> ; OUT: NC if successful, 2080 <1> ; bx:dx = linear address 2081 <1> ; (if not _PM, this always fits in 24 bits) 2082 <1> ; al = next character 2083 <1> ; si -> following character 2084 <1> ; CY if error 2085 <1> getlinearaddr: 2086 <1> %if _PM 2087 <1> call getsegmented_resetmode 2088 <1> %endif 2089 000023FA E88250 <1> call skipcomm0 2090 000023FD 3C40 <1> cmp al, '@' 2091 000023FF 7530 <1> jne .at_not 2092 00002401 AC <1> lodsb ; insure we have a blank or opening parens 2093 00002402 3C28 <1> cmp al, '(' 2094 00002404 740A <1> je .at 2095 00002406 3C09 <1> cmp al, 9 2096 00002408 7406 <1> je .at 2097 0000240A 3C20 <1> cmp al, 32 2098 0000240C 7402 <1> je .at 2099 0000240E EB1E <1> jmp .at_not_reload ; assume the @ is part of a symbol 2100 <1> 2101 <1> .at: 2102 00002410 E89A50 <1> call skipwh0 2103 00002413 3C28 <1> cmp al, '(' 2104 00002415 750D <1> jne .at_not_paren 2105 <1> 2106 00002417 E8F34B <1> call getdword 2107 0000241A E89050 <1> call skipwh0 2108 0000241D 3C29 <1> cmp al, ')' 2109 0000241F 751C <1> jne .error 2110 00002421 AC <1> lodsb 2111 <1> 2112 00002422 EB03 <1> jmp .at_got 2113 <1> 2114 <1> .at_not_paren: 2115 00002424 E8E64B <1> call getdword 2116 <1> .at_got: 2117 <1> %ifn _PM 2118 <1> ; test bh, bh 2119 <1> ; jnz .error 2120 00002427 83FB11 <1> cmp bx, 11h 2121 0000242A 7311 <1> jae .error 2122 <1> %endif 2123 0000242C F8 <1> clc 2124 0000242D C3 <1> retn 2125 <1> 2126 <1> .at_not_reload: 2127 0000242E 4E <1> dec si 2128 0000242F 4E <1> dec si 2129 00002430 AC <1> lodsb 2130 <1> .at_not: 2131 00002431 E80245 <1> call getaddr 2132 00002434 50 <1> push ax 2133 00002435 E88FFF <1> call getlinear 2134 00002438 93 <1> xchg bx, ax ; dx:bx = linear 2135 00002439 87D3 <1> xchg dx, bx ; bx:dx = linear 2136 0000243B 58 <1> pop ax ; al = next character 2137 0000243C C3 <1> retn 2138 <1> 2139 <1> .error: 2140 0000243D F9 <1> stc 2141 0000243E C3 <1> retn 2142 <1> 2143 <1> 2144 <1> ; INP: word [reg_cs] 2145 <1> ; (d)word [reg_eip] 2146 <1> ; dword [tpg_possible_breakpoint] 2147 <1> ; [internalflags2] & dif2_tpg_have_bp 2148 <1> ; OUT: CY if invalid address 2149 <1> ; NC if address is valid, 2150 <1> ; dx:ax = linear address 2151 <1> ; CHG: edx, ax, ecx, bx 2152 <1> ; STT: ds = ss = debugger data selector 2153 <1> get_cseip_of_possible_breakpoint: 2154 0000243F A1[9C00] <1> mov ax, [tpg_possible_breakpoint] 2155 00002442 8B16[9E00] <1> mov dx, [tpg_possible_breakpoint + 2] 2156 <1> ; dx:ax = stored possible breakpoint address 2157 00002446 F606[8900]01 <1> testopt [internalflags2], dif2_tpg_have_bp 2157 ****************** <1> expansion: adr = '[internalflags2]' 2157 ****************** <1> expansion: len = 16 2157 ****************** <1> expansion: tf = '[' 2157 ****************** <1> expansion: tb = ']' 2157 ****************** <1> expansion: adr = 'internalflags2' 2157 ****************** <1> expansion: adr = internalflags2 2158 0000244B 7511 <1> jnz .retn ; (NC) if already stored --> 2159 0000244D E86AFF <1> call get_cseip_minus_1_linear 2160 <1> ; dx:ax = linear address at cs:(e)ip - 1 2161 00002450 720C <1> jc .retn ; (CY) if getlinear failed --> 2162 00002452 A3[9C00] <1> mov [tpg_possible_breakpoint], ax 2163 00002455 8916[9E00] <1> mov [tpg_possible_breakpoint + 2], dx 2164 <1> ; store for later use 2165 00002459 800E[8900]01 <1> setopt [internalflags2], dif2_tpg_have_bp 2165 ****************** <1> expansion: adr = '[internalflags2]' 2165 ****************** <1> expansion: len = 16 2165 ****************** <1> expansion: tf = '[' 2165 ****************** <1> expansion: tb = ']' 2165 ****************** <1> expansion: adr = 'internalflags2' 2165 ****************** <1> expansion: adr = internalflags2 2166 <1> ; (NC) 2167 <1> .retn: 2168 0000245E C3 <1> retn 2169 <1> 2170 <1> 2171 <1> %if _PM 2172 <1> 2173 <1> ; DEBUGX: when a mode switch from PM to RM did occur in the debuggee, 2174 <1> ; breakpoint addresses in non-RM address space are unreachable. 2175 <1> ; To enable the debugger to reset the breakpoints, it has to switch 2176 <1> ; temporarily to PM. (In DEBUG/X 1.19, a switch from RM to PM in the 2177 <1> ; debuggee will temporarily switch the debugger back to RM too. We 2178 <1> ; handle this case without a switch as the linear RM address can be 2179 <1> ; accessed directly in PM, assuming that the DPMI hosts linear-to- 2180 <1> ; physical mapping for the RM address space is the same as the one 2181 <1> ; we get in PM.) 2182 <1> 2183 <1> ; (To use mode switching in any case, the format the breakpoints are 2184 <1> ; stored in needs to be modified. Additionally, the mode switching 2185 <1> ; needs to be done elsewhere instead of in getsegmented. resetmode 2186 <1> ; can be used as is, even if a mode switch from PM to RM occured.) 2187 <1> 2188 <1> switchmode: 2189 <1> ;--- raw switch: 2190 <1> ;--- si:e/di: new cs:e/ip 2191 <1> ;--- dx:e/bx: new ss:e/sp 2192 <1> ;--- ax: new ds 2193 <1> ;--- cx: new es 2194 <1> _386 xor ebx, ebx ; clear ebxh 2195 <1> mov bx, sp 2196 <1> _386 xor edi, edi ; clear edih 2197 <1> mov di, .back_after_switch 2198 <1> call ispm 2199 <1> jnz .pm 2200 <1> mov ax, [dssel] ; switch rm -> pm 2201 <1> mov si, [code_sel] 2202 <1> mov dx, ax 2203 <1> mov cx, ax 2204 <1> jmp far [dpmi_rm2pm] 2205 <1> .pm: 2206 <1> mov ax, [pspdbg] ; switch pm -> rm 2207 <1> mov si, ax 2208 <1> mov dx, ax 2209 <1> mov cx, ax 2210 <1> _386_o32 ; jmp far dword [dpmi_pm2rm] 2211 <1> jmp far [dpmi_pm2rm] 2212 <1> 2213 <1> .back_after_switch: 2214 <1> xoropt [internalflags], protectedmode 2215 <1> retn 2216 <1> 2217 <1> 2218 <1> ; INP: al = direction, 0 = save state, 1 = restore state 2219 <1> ; [auxbuff] = state buffer 2220 <1> ; ES = debugger data selector 2221 <1> ; CHG: edi 2222 <1> sr_state: 2223 <1> testopt [internalflags], switchbuffer 2224 <1> jz .return ; no need to call --> 2225 <1> _386_o32 ; xor edi, edi 2226 <1> xor di, di 2227 <1> call ispm 2228 <1> jnz .pm 2229 <1> mov es, word [auxbuff_segment] 2230 <1> call far [dpmi_rmsav] 2231 <1> retn 2232 <1> .pm: 2233 <1> mov es, word [auxbuff_segorsel] 2234 <1> _386_o32 ; call far dword [dpmi_pmsav] 2235 <1> call far [dpmi_pmsav] 2236 <1> .return: 2237 <1> retn 2238 <1> 2239 <1> 2240 <1> ; INP: [internalflags] & modeswitched 2241 <1> ; OUT: flag cleared, mode switched back if had been switched 2242 <1> ; CHG: - (not even flags!) 2243 <1> ; STT: es = ds = ss = debugger data segment/selector 2244 <1> ; 2245 <1> ; Switches back to RM if a mode switch to PM was done by getsegmented. 2246 <1> ; Does nothing otherwise. (Can be called multiple times.) 2247 <1> getsegmented_resetmode: 2248 <1> pushf 2249 <1> testopt [internalflags], modeswitched ; switched mode previously ? 2250 <1> je .return ; no --> 2251 <1> clropt [internalflags], modeswitched ; reset the flag 2252 <1> %xdefine __CPU_PREV__ __CPU__ 2253 <1> cpu 286 2254 <1> _386_o32 2255 <1> pusha 2256 <1> _386 push fs 2257 <1> _386 push gs 2258 <1> call switchmode ; switch back to the mode we were entered in (RM) 2259 <1> mov al, 1 2260 <1> call sr_state ; restore state 2261 <1> _386 pop gs 2262 <1> _386 pop fs 2263 <1> _386_o32 2264 <1> popa 2265 <1> %xdefine __CPU__ __CPU_PREV__ 2266 <1> %undef __CPU_PREV__ 2267 <1> __CPU__ 2268 <1> .return: 2269 <1> popf 2270 <1> retn 2271 <1> %endif 2272 <1> 2273 <1> ; INP: dx:ax = linear address 2274 <1> ; OUT: CY if inaccessible 2275 <1> ; NC if accessible, 2276 <1> ; bx:(e)dx = segment:offset or selector:offset address 2277 <1> ; A temporary mode switch from RM to PM might have occured. 2278 <1> ; This has to be reset by calling getsegmented_resetmode. 2279 <1> ; CHG: (e)ax, (e)bx, (e)dx, fs, gs 2280 <1> ; STT: es = ds = ss = our segment/selector 2281 <1> ; 2282 <1> ; It is assumed that only one byte needs to be accessed. 2283 <1> ; (A workaround to access multiple bytes would be to access each 2284 <1> ; byte separately and call this function for each of the bytes.) 2285 <1> ; 2286 <1> ; The TSR command code assumes that getsegmented.pm does not switch 2287 <1> ; modes and that it will return an offset in (e)dx that allows 2288 <1> ; 16-bit access. Adjust that code if either is no longer true. 2289 <1> getsegmented: 2290 <1> %if _DEBUG1 2291 0000245F 53 <1> push bx 2292 00002460 51 <1> push cx 2293 00002461 BB[C801] <1> mov bx, test_records_getSegmented 2294 00002464 E87209 <1> call handle_test_case_multiple_16 2295 00002467 59 <1> pop cx 2296 00002468 5B <1> pop bx 2297 00002469 7301 <1> jnc @F 2298 <1> ; stc ; (already CY if the conditional didn't jump) 2299 0000246B C3 <1> retn 2300 <1> 2301 <1> @@: 2301 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.38 2301 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.39 2301 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.40 2301 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.41 2301 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.42 2301 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.43 2301 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.44 2301 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.45 2301 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.38 2301 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.39 2301 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.40 2301 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.41 2301 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.42 2301 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.43 2301 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.44 2301 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.45 2301 ****************** <1> expansion: __@@_num = 46 2302 <1> %endif 2303 <1> .do_not_use_test: 2304 <1> 2305 <1> %if _PM 2306 <1> call ispm 2307 <1> jnz .rm 2308 <1> .pm: 2309 <1> push cx 2310 <1> mov bx, word [scratchsel] 2311 <1> xchg ax, dx 2312 <1> xchg ax, cx ; cx:dx = linear address 2313 <1> mov ax, 0007h 2314 <1> int 31h ; set base to the address 2315 <1> pop cx 2316 <1> jc .invalid 2317 <1> %if 0 ; scratchsel is expected by other code to access arbitrary data ?? 2318 <1> push cx 2319 <1> mov ax, 0008h 2320 <1> xor cx, cx 2321 <1> xor dx, dx 2322 <1> int 31h ; set limit to zero (access to one byte only) 2323 <1> pop cx 2324 <1> jc .invalid 2325 <1> %endif 2326 <1> _386_o32 ; xor edx, edx 2327 <1> xor dx, dx ; bx:(e)dx = selector:offset (using scratchsel with the address as base) 2328 <1> retn ; (NC) 2329 <1> %endif 2330 <1> .rm: 2331 0000246C 83FA10 <1> cmp dx, byte 10h ; check for address space 2332 0000246F 7219 <1> jb .nothma ; below HMA, normal access --> 2333 00002471 7402 <1> je .checkhma ; possibly in HMA --> 2334 <1> .nonrmspace: ; above HMA 2335 <1> %if _PM 2336 <1> ; It's a PM address but we are in RM. 2337 <1> testopt [internalflags], canswitchmode 2338 <1> jz .invalid ; can't switch to PM --> 2339 <1> .switchmodes: 2340 <1> _386_o32 2341 <1> push si 2342 <1> _386_o32 2343 <1> push di 2344 <1> _386_o32 2345 <1> push cx 2346 <1> setopt [internalflags], modeswitched ; set flag for resetmode 2347 <1> mov al, 0 2348 <1> call sr_state ; save state 2349 <1> call switchmode ; switch to PM 2350 <1> _386_o32 2351 <1> pop cx 2352 <1> _386_o32 2353 <1> pop di 2354 <1> _386_o32 2355 <1> pop si 2356 <1> jmp short .pm 2357 <1> 2358 <1> .invalid: ; the address is inaccessible 2359 <1> %endif 2360 00002473 F9 <1> stc 2361 00002474 C3 <1> retn 2362 <1> 2363 <1> .checkhma: 2364 00002475 83F8F0 <1> cmp ax, -10h ; valid offset for HMA ? 2365 00002478 73F9 <1> jae .nonrmspace ; no, above HMA --> 2366 0000247A F606[8500]20 <1> testopt [internalflags], debuggerA20 ; A20 on, HMA accessible ? 2366 ****************** <1> expansion: adr = '[internalflags]' 2366 ****************** <1> expansion: len = 15 2366 ****************** <1> expansion: tf = '[' 2366 ****************** <1> expansion: tb = ']' 2366 ****************** <1> expansion: adr = 'internalflags' 2366 ****************** <1> expansion: adr = internalflags 2367 0000247F 74F2 <1> jz .nonrmspace ; no, treat as above HMA (DEBUGX) --> 2368 00002481 BBFFFF <1> mov bx, 0FFFFh ; the HMA must always be addressed by segment FFFFh 2369 00002484 83C010 <1> add ax, byte 10h ; and the offset is always at least 0010h (FFFFh:0010h = 00100000h) 2370 <1> ; (NC because we checked that this won't overflow) 2371 00002487 92 <1> xchg ax, dx ; bx:dx = segment:offset 2372 00002488 EB11 <1> jmp .zero_edxh 2373 <1> 2374 <1> .nothma: 2375 0000248A 51 <1> push cx 2376 0000248B B104 <1> mov cl, 4 2377 0000248D D3CA <1> ror dx, cl ; dx (high 4 bits) = high 4 bits of segment 2378 0000248F 89C3 <1> mov bx, ax 2379 00002491 D3EB <1> shr bx, cl ; bx = low 12 bits of segment 2380 00002493 09DA <1> or dx, bx ; dx = segment 2381 00002495 83E00F <1> and ax, byte 0Fh ; ax = low 4 bits of linear, used as offset (NC) 2382 00002498 92 <1> xchg ax, dx 2383 00002499 93 <1> xchg ax, bx ; bx:dx = segment:offset 2384 0000249A 59 <1> pop cx 2385 <1> .zero_edxh: 2386 <1> _386_PM movzx edx, dx 2387 0000249B C3 <1> retn 2388 <1> 2389 <1> 2390 <1> ; T command - Trace. 2391 <1> tt: 2392 0000249C 88C4 <1> mov ah, al 2393 0000249E 80E4DF <1> and ah, TOUPPER 2394 000024A1 80FC4D <1> cmp ah, 'M' 2395 000024A4 754B <1> jnz isnotmodeset 2396 000024A6 E8D54F <1> call skipcomma 2397 000024A9 3C3B <1> cmp al, ';' 2398 000024AB 7420 <1> je ismodeget 2399 000024AD 3C0D <1> cmp al, 13 2400 000024AF 741C <1> je ismodeget 2401 000024B1 E83C4F <1> call getword 2402 000024B4 E8BC4F <1> call chkeol ; expect end of line here 2403 000024B7 83FA01 <1> cmp dx, 1 2404 000024BA 7603E93C42 <1> ja error 2405 000024BF 7407 <1> je .set ; selected 1 --> 2406 <1> .clear: ; selected 0 2407 000024C1 8026[7C00]FD <1> clropt [options], traceints 2407 ****************** <1> expansion: adr = '[options]' 2407 ****************** <1> expansion: len = 9 2407 ****************** <1> expansion: tf = '[' 2407 ****************** <1> expansion: tb = ']' 2407 ****************** <1> expansion: adr = 'options' 2407 ****************** <1> expansion: adr = options 2408 000024C6 EB05 <1> jmp short .get 2409 <1> .set: 2410 000024C8 800E[7C00]02 <1> setopt [options], traceints 2410 ****************** <1> expansion: adr = '[options]' 2410 ****************** <1> expansion: len = 9 2410 ****************** <1> expansion: tf = '[' 2410 ****************** <1> expansion: tb = ']' 2410 ****************** <1> expansion: adr = 'options' 2410 ****************** <1> expansion: adr = options 2411 <1> .get: 2412 <1> ismodeget: 2413 000024CD B030 <1> mov al, '0' 2414 000024CF BE[6145] <1> mov si, tmode0 2415 000024D2 F606[7C00]02 <1> testopt [options], traceints 2415 ****************** <1> expansion: adr = '[options]' 2415 ****************** <1> expansion: len = 9 2415 ****************** <1> expansion: tf = '[' 2415 ****************** <1> expansion: tb = ']' 2415 ****************** <1> expansion: adr = 'options' 2415 ****************** <1> expansion: adr = options 2416 000024D7 7404 <1> jz .zero 2417 000024D9 40 <1> inc ax 2418 000024DA BE[5A45] <1> mov si, tmode1 2419 <1> .zero: 2420 000024DD A2[4645] <1> mov byte [tmodev], al 2421 000024E0 BF[A901] <1> mov di, line_out 2422 000024E3 56 <1> push si 2423 000024E4 BE[3845] <1> mov si, tmodes 2424 000024E7 E8E14F <1> call showstring 2425 000024EA 5E <1> pop si 2426 000024EB E8DD4F <1> call showstring 2427 000024EE E94550 <1> jmp putsline_crlf 2428 <1> 2429 <1> isnotmodeset: 2430 <1> %if _TSR 2431 000024F1 80FC53 <1> cmp ah, 'S' 2432 000024F4 750D <1> jne @F 2433 000024F6 50 <1> push ax 2434 000024F7 8A04 <1> mov al, byte [si] 2435 000024F9 24DF <1> and al, TOUPPER 2436 000024FB 3C52 <1> cmp al, 'R' 2437 000024FD 58 <1> pop ax 2438 000024FE 7503E95501 <1> je tsr 2439 <1> %endif 2440 <1> @@: 2440 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.39 2440 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.40 2440 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.41 2440 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.42 2440 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.43 2440 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.44 2440 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.45 2440 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.46 2440 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.39 2440 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.40 2440 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.41 2440 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.42 2440 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.43 2440 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.44 2440 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.45 2440 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.46 2440 ****************** <1> expansion: __@@_num = 47 2441 00002503 8026[8700]F7 <1> clropt [internalflags], tt_p 2441 ****************** <1> expansion: adr = '[internalflags]' 2441 ****************** <1> expansion: len = 15 2441 ****************** <1> expansion: tf = '[' 2441 ****************** <1> expansion: tb = ']' 2441 ****************** <1> expansion: adr = 'internalflags' 2441 ****************** <1> expansion: adr = internalflags 2442 00002508 80FC50 <1> cmp ah, 'P' 2443 0000250B 7506 <1> jne @F 2444 0000250D AC <1> lodsb 2445 0000250E 800E[8700]08 <1> setopt [internalflags], tt_p 2445 ****************** <1> expansion: adr = '[internalflags]' 2445 ****************** <1> expansion: len = 15 2445 ****************** <1> expansion: tf = '[' 2445 ****************** <1> expansion: tb = ']' 2445 ****************** <1> expansion: adr = 'internalflags' 2445 ****************** <1> expansion: adr = internalflags 2446 <1> @@: 2446 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.40 2446 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.41 2446 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.42 2446 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.43 2446 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.44 2446 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.45 2446 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.46 2446 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.47 2446 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.40 2446 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.41 2446 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.42 2446 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.43 2446 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.44 2446 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.45 2446 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.46 2446 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.47 2446 ****************** <1> expansion: __@@_num = 48 2447 <1> tt0: 2448 00002513 C706[E002][1325] <1> mov word [lastcmd], tt0 2449 00002519 E8D308 <1> call parse_pt ; process arguments 2450 0000251C 8026[8900]EF <1> clropt [internalflags2], dif2_is_pp 2450 ****************** <1> expansion: adr = '[internalflags2]' 2450 ****************** <1> expansion: len = 16 2450 ****************** <1> expansion: tf = '[' 2450 ****************** <1> expansion: tb = ']' 2450 ****************** <1> expansion: adr = 'internalflags2' 2450 ****************** <1> expansion: adr = internalflags2 2451 <1> 2452 <1> ; Do it times. 2453 <1> tt1: 2454 00002521 53 <1> push bx 2455 00002522 51 <1> push cx 2456 <1> 2457 00002523 F606[8700]08 <1> testopt [internalflags], tt_p 2457 ****************** <1> expansion: adr = '[internalflags]' 2457 ****************** <1> expansion: len = 15 2457 ****************** <1> expansion: tf = '[' 2457 ****************** <1> expansion: tb = ']' 2457 ****************** <1> expansion: adr = 'internalflags' 2457 ****************** <1> expansion: adr = internalflags 2458 00002528 743C <1> jz .not_p 2459 <1> 2460 0000252A BA0F00 <1> mov dx, 15 ; DL = number of bytes to go; DH = prefix flags. 2461 0000252D 8B1E[6C03] <1> mov bx, word [reg_cs] 2462 <1> _386_PM_o32 ; mov esi, dword [reg_eip] 2463 00002531 8B36[7803] <1> mov si, word [reg_eip] 2464 <1> .pp2: 2465 00002535 E8FC05 <1> call pp16 ; get next instruction byte into AL 2466 00002538 BF[C003] <1> mov di, ppbytes 2467 0000253B B91800 <1> mov cx, PPLEN_ONLY_STRING 2468 0000253E F2AE <1> repne scasb 2469 00002540 7524 <1> jne .not_p ; if not one of these --> 2470 00002542 8A451E <1> mov al,byte [di+PPLEN-1]; get corresponding byte in ppinfo 2471 00002545 A880 <1> test al, 80h ; prefix ? 2472 00002547 740E <1> jz .pp3 ; no --> 2473 00002549 08C6 <1> or dh, al ; set the OSIZE or ASIZE flags if either of these 2474 <1> ; Note: Multiple OSIZE in a 16-bit cs do not toggle 2475 <1> ; between decoding as O32 and O16, they're always 2476 <1> ; decoded as O32. The same is true for A32, and 2477 <1> ; in a 32-bit cs for O16 and A16. 2478 0000254B FECA <1> dec dl 2479 0000254D 75E6 <1> jnz .pp2 ; if not out of bytes --> 2480 0000254F BA[A63F] <1> mov dx, msg.warnprefix 2481 00002552 E81A52 <1> call putsz 2482 00002555 EB0F <1> jmp .not_p 2483 <1> 2484 <1> ; A repeatable string instruction is to be decoded. 2485 <1> ; Finish the decoding and skip the appropriate number 2486 <1> ; of opcode bytes. 2487 <1> .pp3: 2488 <1> _386_PM call pp_fix32bitflags 2489 00002557 A840 <1> test al, 40h 2490 00002559 7403E99D41 <1> jnz error 2491 <1> %if 0 2492 <1> test al, 40h ; different opcode length depends on OSIZE ? 2493 <1> jz .ignoreosize ; no --> 2494 <1> and al, 3Fh 2495 <1> and dh, 2 2496 <1> add al, dh 2497 <1> .ignoreosize: 2498 <1> %endif 2499 0000255E 98 <1> cbw 2500 <1> _386_PM movzx eax, ax ; clear high word (in case it counts) 2501 <1> _386_PM_o32 ; add esi, eax 2502 0000255F 01C6 <1> add si, ax 2503 <1> ; jmp short pp11 ; we have a skippable instruction here 2504 <1> ; pp11: 2505 <1> _386_PM call testattrhigh 2506 <1> _386_PM jnz .32 ; full 32-bit offset valid --> 2507 <1> _386_PM movzx esi, si ; clear high word here 2508 <1> .32: 2509 00002561 E82505 <1> call proceedbreakpoint ; run until the breakpoint is hit 2510 00002564 EB03 <1> jmp short @F 2511 <1> 2512 <1> .not_p: 2513 00002566 E8BA01 <1> call traceone ; call common code 2514 <1> @@: 2514 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.41 2514 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.42 2514 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.43 2514 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.44 2514 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.45 2514 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.46 2514 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.47 2514 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.48 2514 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.41 2514 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.42 2514 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.43 2514 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.44 2514 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.45 2514 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.46 2514 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.47 2514 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.48 2514 ****************** <1> expansion: __@@_num = 49 2515 00002569 7303E97E01 <1> jc unexpectedinterrupt ; an unexpected interrupt occured --> 2516 <1> %if _BREAKPOINTS 2517 0000256E 7413 <1> jz @F ; (breakpoint after instruction was hit) 2518 <1> 2519 <1> ; bb breakpoint was hit. dumpregs, then return 2520 00002570 E87B00 <1> call handle_bb_hit_pass_match 2521 00002573 7204 <1> jc .actual_hit ; actual match ? --> 2522 00002575 740F <1> jz tt2.nodump ; non-silent mode ? --> 2523 00002577 EB0A <1> jmp tt2 ; silent mode --> 2524 <1> 2525 <1> .actual_hit: 2526 00002579 E80EFA <1> call put_deferred_message_silent 2527 0000257C E8AF03 <1> call dumpregs_silent 2528 0000257F 59 <1> pop cx 2529 00002580 5B <1> pop bx ; (discard counter) 2530 00002581 EB16 <1> jmp @FF 2531 <1> @@: 2531 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.42 2531 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.43 2531 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.44 2531 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.45 2531 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.46 2531 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.47 2531 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.48 2531 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.49 2531 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.42 2531 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.43 2531 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.44 2531 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.45 2531 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.46 2531 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.47 2531 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.48 2531 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.49 2531 ****************** <1> expansion: __@@_num = 50 2532 <1> %endif 2533 <1> tt2: 2534 00002583 E8A803 <1> call dumpregs_silent ; dump registers 2535 <1> .nodump: 2536 <1> 2537 00002586 E81600 <1> call tt_handle_while 2538 00002589 59 <1> pop cx 2539 0000258A 5B <1> pop bx 2540 <1> 2541 0000258B 83E901 <1> sub cx, 1 2542 0000258E 83DB00 <1> sbb bx, 0 ; decrement loop counter 2543 <1> 2544 00002591 85DB <1> test bx, bx 2545 00002593 7508 <1> jnz tt1_jmp ; loop --> 2546 00002595 85C9 <1> test cx, cx 2547 00002597 7504 <1> jnz tt1_jmp ; loop --> 2548 <1> 2549 <1> @@: 2549 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.43 2549 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.44 2549 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.45 2549 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.46 2549 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.47 2549 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.48 2549 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.49 2549 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.50 2549 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.43 2549 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.44 2549 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.45 2549 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.46 2549 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.47 2549 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.48 2549 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.49 2549 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.50 2549 ****************** <1> expansion: __@@_num = 51 2550 00002599 E84251 <1> call silence_dump 2551 <1> 2552 0000259C C3 <1> retn 2553 <1> 2554 <1> tt1_jmp: 2555 0000259D EB82 <1> jmp tt1 2556 <1> 2557 <1> 2558 <1> tt_handle_while: 2559 0000259F F606[8700]04 <1> testopt [internalflags], tt_while 2559 ****************** <1> expansion: adr = '[internalflags]' 2559 ****************** <1> expansion: len = 15 2559 ****************** <1> expansion: tf = '[' 2559 ****************** <1> expansion: tb = ']' 2559 ****************** <1> expansion: adr = 'internalflags' 2559 ****************** <1> expansion: adr = internalflags 2560 000025A4 7426 <1> jz @F 2561 <1> 2562 000025A6 E82400 <1> call .copy_condition_to_line_out 2563 <1> ; dx = si -> line_out with condition 2564 000025A9 AC <1> lodsb 2565 000025AA E8604A <1> call getexpression ; parse stored expression 2566 000025AD E88247 <1> call toboolean ; get boolean 2567 000025B0 85D2 <1> test dx, dx ; true ? 2568 000025B2 7518 <1> jnz @F ; yes, continue --> 2569 <1> 2570 000025B4 E82751 <1> call silence_dump 2571 <1> 2572 000025B7 BA[C83A] <1> mov dx, msg.while_terminated_before 2573 000025BA E8B251 <1> call putsz 2574 000025BD E80D00 <1> call .copy_condition_to_line_out 2575 000025C0 E8AC51 <1> call putsz ; display condition 2576 000025C3 BA[DA3A] <1> mov dx, msg.while_terminated_after 2577 000025C6 E8A651 <1> call putsz 2578 000025C9 E917DC <1> jmp cmd3 2579 <1> 2580 <1> @@: 2580 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.44 2580 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.45 2580 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.46 2580 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.47 2580 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.48 2580 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.49 2580 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.50 2580 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.51 2580 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.44 2580 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.45 2580 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.46 2580 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.47 2580 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.48 2580 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.49 2580 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.50 2580 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.51 2580 ****************** <1> expansion: __@@_num = 52 2581 000025CC C3 <1> retn 2582 <1> 2583 <1> 2584 <1> .copy_condition_to_line_out: 2585 000025CD 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 2586 000025D1 31FF <1> xor di, di ; -> stored expression (if not PM) 2587 <1> %if _PM 2588 <1> add di, word [auxbuff_switchbuffer_size] 2589 <1> ; -> stored expression 2590 <1> %endif 2591 000025D3 89FE <1> mov si, di 2592 000025D5 B9FFFF <1> mov cx, -1 2593 000025D8 B000 <1> mov al, 0 2594 000025DA F2AE <1> repne scasb 2595 000025DC F7D1 <1> not cx ; = length, including zero terminator 2596 000025DE 06 <1> push es 2597 000025DF 1F <1> pop ds ; ds:si -> auxbuff stored expression 2598 000025E0 16 <1> push ss 2599 000025E1 07 <1> pop es 2600 000025E2 BF[A901] <1> mov di, line_out ; -> line_out 2601 000025E5 57 <1> push di 2602 000025E6 F3A4 <1> rep movsb ; move over 2603 000025E8 5E <1> pop si 2604 <1> 2605 000025E9 89F2 <1> mov dx, si 2606 000025EB 16 <1> push ss 2607 000025EC 1F <1> pop ds ; -> line_out 2608 000025ED C3 <1> retn 2609 <1> 2610 <1> 2611 <1> ; INP: cl = flags indicating what kind of bb match occurred 2612 <1> ; cl & 1 set if actual hit, 2613 <1> ; else cl & 2 set if pass match, 2614 <1> ; else it is a non-pass non-hit match 2615 <1> ; (cl & 4 always set (indicates any bb match)) 2616 <1> ; cl & 8 set if pp/tt breakpoint hit 2617 <1> ; dword [ss:sp] = command repetition counter 2618 <1> ; OUT: NC if pass match or non-pass non-hit match, 2619 <1> ; if pass match: deferred message output, dumpregs output 2620 <1> ; if cl & 8 set (pass/nonpass bb, tt/pp hit): 2621 <1> ; ZR if [internalflags] & tt_silent_mode clear 2622 <1> ; NZ if [internalflags] & tt_silent_mode set 2623 <1> ; if cl & 8 clear (pass/nonpass bb, no tt/pp hit): 2624 <1> ; ZR 2625 <1> ; dword [ss:sp] increased by 1 2626 <1> ; CY if actual hit (hit bb) 2627 <1> handle_bb_hit_pass_match: 2628 <1> d5 call d5message 2629 <1> d5 asciz "in handle_bb_hit_pass_match",13,10 2630 <1> 2631 000025EE 91 <1> xchg ax, cx 2632 <1> 2633 000025EF F606[8900]08 <1> testopt [internalflags2], dif2_bp_failure 2633 ****************** <1> expansion: adr = '[internalflags2]' 2633 ****************** <1> expansion: len = 16 2633 ****************** <1> expansion: tf = '[' 2633 ****************** <1> expansion: tb = ']' 2633 ****************** <1> expansion: adr = 'internalflags2' 2633 ****************** <1> expansion: adr = internalflags2 2634 000025F4 7560 <1> jnz .actual_hit ; after failure, handle as actual hit 2635 <1> 2636 000025F6 A801 <1> test al, 1 ; actual hit ? else: non-hit, pass or non-pass 2637 000025F8 755C <1> jnz .actual_hit ; yes --> 2638 <1> 2639 000025FA A802 <1> test al, 2 ; at least pass match ? 2640 000025FC 7418 <1> jz .nonpassnonhit ; no --> 2641 <1> 2642 <1> .passnonhit: 2643 <1> 2644 <1> d5 call d5message 2645 <1> d5 asciz "bb pass non-hit",13,10 2646 <1> 2647 <1> ; call put_deferred_message_loud 2648 000025FE BA[703F] <1> mov dx, msg.empty_message 2649 00002601 52 <1> push dx 2650 00002602 8716[A000] <1> xchg dx, word [gg_deferred_message] 2651 00002606 E86651 <1> call putsz 2652 00002609 5A <1> pop dx 2653 0000260A 8716[A200] <1> xchg dx, word [bb_deferred_message] 2654 0000260E E85E51 <1> call putsz 2655 <1> 2656 00002611 50 <1> push ax 2657 <1> ; call dumpregs_loud ; (includes handle_serial_flags_ctrl_c) 2658 00002612 E8CCF0 <1> call dumpregs 2659 00002615 58 <1> pop ax 2660 <1> .nonpassnonhit: 2661 00002616 E84503 <1> call handle_serial_flags_ctrl_c 2662 <1> 2663 <1> ; al & 4 always set 2664 <1> 2666 00002619 8026[8800]E9 <1> clropt [internalflags2], dif2_gg_skip_non_cseip | dif2_gg_skip_cseip | dif2_gg_first_detected 2666 ****************** <1> expansion: adr = '[internalflags2]' 2666 ****************** <1> expansion: len = 16 2666 ****************** <1> expansion: tf = '[' 2666 ****************** <1> expansion: tb = ']' 2666 ****************** <1> expansion: adr = 'internalflags2' 2666 ****************** <1> expansion: adr = internalflags2 2667 0000261E 800E[8800]01 <1> setopt [internalflags2], dif2_gg_is_first 2667 ****************** <1> expansion: adr = '[internalflags2]' 2667 ****************** <1> expansion: len = 16 2667 ****************** <1> expansion: tf = '[' 2667 ****************** <1> expansion: tb = ']' 2667 ****************** <1> expansion: adr = 'internalflags2' 2667 ****************** <1> expansion: adr = internalflags2 2668 <1> 2669 00002623 FF36[9A00] <1> push word [gg_next_cseip_linear + 2] 2670 00002627 FF36[9800] <1> push word [gg_next_cseip_linear] 2671 0000262B 8F06[9400] <1> pop word [gg_first_cseip_linear] 2672 0000262F 8F06[9600] <1> pop word [gg_first_cseip_linear + 2] 2673 <1> 2674 00002633 A808 <1> test al, 8 ; not bb hit, is tt/pp hit ? 2675 00002635 7519 <1> jnz @FF ; yes --> 2676 <1> 2677 00002637 F706[8800]8010 <1> testopt [internalflags2], dif2_is_pp | dif2_tpg_keep_proceed_bp, 1 2677 ****************** <1> expansion: adr = '[internalflags2]' 2677 ****************** <1> expansion: len = 16 2677 ****************** <1> expansion: tf = '[' 2677 ****************** <1> expansion: tb = ']' 2677 ****************** <1> expansion: adr = 'internalflags2' 2677 ****************** <1> expansion: adr = internalflags2 2678 0000263D 7502 <1> jnz @F 2679 0000263F EB0F <1> jmp @FF 2680 <1> 2681 <1> @@: 2681 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.45 2681 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.46 2681 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.47 2681 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.48 2681 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.49 2681 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.50 2681 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.51 2681 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.52 2681 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.45 2681 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.46 2681 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.47 2681 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.48 2681 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.49 2681 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.50 2681 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.51 2681 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.52 2681 ****************** <1> expansion: __@@_num = 53 2682 <1> lframe near 2682 ****************** <1> expansion: bits = 16 2682 ****************** <1> expansion: base_size = 2 2682 ****************** <1> expansion: near_offset = 2 2682 ****************** <1> expansion: far_offset = 4 2682 ****************** <1> expansion: int_offset = 6 2682 ****************** <1> expansion: inner = 0 2682 ****************** <1> expansion: nested = 0 2682 ****************** <1> expansion: autoret = 2682 ****************** <1> expansion: autoret = near 2682 ****************** <1> expansion: parofs = 2 2682 ****************** <1> expansion: pars_size = 0 2682 ****************** <1> expansion: pars_return_size = 0 2682 ****************** <1> expansion: parlist = 2682 ****************** <1> expansion: labellist = empty,empty,empty 2682 ****************** <1> expansion: ofs = 0 2682 ****************** <1> expansion: enter = 0 2682 ****************** <1> expansion: req = 0 2682 ****************** <1> expansion: usereq = 0 2682 ****************** <1> expansion: emit = 1 2682 ****************** <1> expansion: restore_frame_ofs = 0 2682 ****************** <1> expansion: pars_inner_size = 0 2683 <1> lpar dword, counter 2683 ****************** <1> expansion: varsize = 4 2683 ****************** <1> expansion: newlabel = counter 2683 ****************** <1> expansion: labellist = counter,undefined,,empty,empty,empty 2683 ****************** <1> expansion: pars_size = 4 2683 ****************** <1> expansion: parlist = 4,counter 2683 ****************** <1> expansion: req = 1 2684 <1> lpar_return 2684 ****************** <1> expansion: pars_return_size = 4 2684 ****************** <1> expansion: req = 1 2685 00002641 5589E5 <1> lenter 2685 ****************** <1> expansion: wasearly = 0 2685 ****************** <1> expansion: early = 0 2685 ****************** <1> expansion: lsizevariables = 0 2685 ****************** <1> expansion: req = 1 2685 ****************** <1> expansion: enter_emitted = 0 2685 ****************** <1> expansion: enter = 1 2685 ****************** <1> expansion: 186 = 0 2685 ****************** <1> expansion: newlabel = frame_bp 2685 ****************** <1> expansion: labellist = frame_bp,undefined,,counter,undefined,,empty,empty,empty 2685 ****************** <1> expansion: ?frame_bp = 0 2685 ****************** <1> expansion: newlabel = frame_ip 2685 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,counter,undefined,,empty,empty,empty 2685 ****************** <1> expansion: ?frame_ip = 2 2685 ****************** <1> expansion: lsizeparameters = 4 2685 ****************** <1> expansion: pars_size = 0 2685 ****************** <1> expansion: ?counter = 4 2686 00002644 83460401 <1> add word [bp + ?counter], 1 2687 00002648 83560600 <1> adc word [bp + ?counter + 2], 0 2688 0000264C 5D <1> lleave 2688 ****************** <1> expansion: 186 = 0 2688 ****************** <1> expansion: 186 = 0 2688 ****************** <1> expansion: lsizeparameters = 0 2688 ****************** <1> expansion: __lframe__autoret = near 2689 0000264D 38C0 <1> cmp al, al ; (NC, ZR) 2690 0000264F C3 <1> retn 2691 <1> 2692 <1> @@: 2692 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.46 2692 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.47 2692 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.48 2692 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.49 2692 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.50 2692 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.51 2692 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.52 2692 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.53 2692 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.46 2692 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.47 2692 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.48 2692 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.49 2692 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.50 2692 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.51 2692 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.52 2692 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.53 2692 ****************** <1> expansion: __@@_num = 54 2693 00002650 F606[8700]10 <1> testopt [internalflags], tt_silent_mode 2693 ****************** <1> expansion: adr = '[internalflags]' 2693 ****************** <1> expansion: len = 15 2693 ****************** <1> expansion: tf = '[' 2693 ****************** <1> expansion: tb = ']' 2693 ****************** <1> expansion: adr = 'internalflags' 2693 ****************** <1> expansion: adr = internalflags 2694 <1> ; (NC, ZF is ZR if to skip dump) 2695 00002655 C3 <1> retn 2696 <1> 2697 <1> .actual_hit: 2698 <1> d5 call d5message 2699 <1> d5 asciz "bb hit",13,10 2700 <1> 2701 00002656 F9 <1> stc 2702 00002657 C3 <1> retn 2703 <1> 2704 <1> 2705 <1> %if _TSR 2706 <1> tsr: 2707 00002658 46 <1> inc si 2708 00002659 AC <1> lodsb 2709 0000265A E8164E <1> call chkeol 2710 0000265D F606[8600]40 <1> testopt [internalflags], tsrmode 2710 ****************** <1> expansion: adr = '[internalflags]' 2710 ****************** <1> expansion: len = 15 2710 ****************** <1> expansion: tf = '[' 2710 ****************** <1> expansion: tb = ']' 2710 ****************** <1> expansion: adr = 'internalflags' 2710 ****************** <1> expansion: adr = internalflags 2711 00002662 7405 <1> jz .try ; not yet resident --> 2712 00002664 BA[0436] <1> mov dx, msg.alreadytsr 2713 00002667 EB38 <1> jmp short .putsz 2714 <1> .try: 2715 00002669 8B16[6402] <1> mov dx, word [pspdbe] 2716 0000266D 8B1E[6602] <1> mov bx, word [pspdbg] 2717 00002671 BF0A00 <1> mov di, 0Ah 2718 <1> .loop: 2719 <1> %if _PM 2720 <1> mov cx, dx ; = original segment address 2721 <1> call ispm 2722 <1> jnz .rm 2723 <1> push bx 2724 <1> mov ax, dx 2725 <1> cpu 186 2726 <1> shr dx, 12 2727 <1> shl ax, 4 ; shift to get a 32-bit linear address 2728 <1> cpu 8086 2729 <1> call getsegmented.pm ; set up selector for access 2730 <1> ; This call makes some assumptions: 2731 <1> ; - No mode switch occurs; we are still in PM. 2732 <1> ; Currently none is performed from PM. 2733 <1> ; - (e)dx isn't larger than about FFD0h. 2734 <1> ; Currently scratchsel with an offset of zero is returned. 2735 <1> mov di, dx ; -> PSP 2736 <1> mov dx, bx 2737 <1> pop bx 2738 <1> add di, byte 0Ah ; -> PSP termination vector 2739 <1> .rm: 2740 <1> %endif 2741 00002674 8EC2 <1> mov es, dx 2742 00002676 268B450C <1> mov ax, word [es:(di-0Ah)+16h] 2743 0000267A 40 <1> inc ax 2744 0000267B 741F <1> jz .pspnotfound 2745 0000267D 48 <1> dec ax 2746 0000267E 741C <1> jz .pspnotfound ; parent is invalid --> 2747 <1> %if _PM 2748 <1> cmp ax, cx 2749 <1> %else 2750 00002680 39D0 <1> cmp ax, dx 2751 <1> %endif 2752 00002682 7418 <1> je .pspnotfound ; parent is the process itself --> 2753 00002684 89C2 <1> mov dx, ax 2754 00002686 39D8 <1> cmp ax, bx 2755 00002688 75EA <1> jne .loop ; parent is not us --> 2756 0000268A 26813D[1B4E] <1> cmp word [es:di], int22 2757 0000268F 7506 <1> jne .psphooked 2758 00002691 26395D02 <1> cmp word [es:di+2], bx 2759 00002695 740D <1> je .found ; correct vector --> (otherwise: hooked) 2760 <1> .psphooked: 2761 00002697 BA[A435] <1> mov dx, msg.psphooked 2762 0000269A EB03 <1> jmp short .putsz_es 2763 <1> .pspnotfound: 2764 0000269C BA[7935] <1> mov dx, msg.pspnotfound 2765 <1> .putsz_es: 2766 0000269F 16 <1> push ss 2767 000026A0 07 <1> pop es 2768 <1> .putsz: 2769 000026A1 E9CB50 <1> jmp putsz 2770 <1> 2771 <1> .found: 2772 000026A4 BE[8002] <1> mov si, psp22 2773 000026A7 A5 <1> movsw 2774 000026A8 A5 <1> movsw ; write our parent's vector 2775 000026A9 83C708 <1> add di, 16h-(0Ah+4) 2776 000026AC A5 <1> movsw ; write our parent 2777 000026AD 800E[8600]40 <1> setopt [internalflags], tsrmode ; note that we are resident 2777 ****************** <1> expansion: adr = '[internalflags]' 2777 ****************** <1> expansion: len = 15 2777 ****************** <1> expansion: tf = '[' 2777 ****************** <1> expansion: tb = ']' 2777 ****************** <1> expansion: adr = 'internalflags' 2777 ****************** <1> expansion: adr = internalflags 2778 <1> %if _PM 2779 <1> push cx 2780 <1> %else 2781 000026B2 06 <1> push es 2782 <1> %endif 2783 000026B3 BA[E235] <1> mov dx, msg.nowtsr1 2784 000026B6 E8E6FF <1> call .putsz_es 2785 000026B9 58 <1> pop ax 2786 000026BA BF[A901] <1> mov di, line_out 2787 000026BD E83E4E <1> call hexword 2788 000026C0 E8774E <1> call putsline 2789 000026C3 BF[8002] <1> mov di, psp22 2790 000026C6 31C0 <1> xor ax, ax 2791 000026C8 AB <1> stosw 2792 000026C9 AB <1> stosw 2793 000026CA AB <1> stosw ; clear our parent/int22 fields 2794 000026CB BA[F235] <1> mov dx, msg.nowtsr2 2795 000026CE EBD1 <1> jmp short .putsz 2796 <1> %endif 2797 <1> 2798 <1> 2799 <1> ; INP: dx -> message, zero-terminated 2800 <1> ; CHG: - 2801 <1> ; OUT: message displayed or put into silent buffer 2802 <1> ; STT: ds = es = ss = debugger data selector 2803 <1> putsz_silent: 2804 000026D0 F606[8700]10 <1> testopt [internalflags], tt_silent_mode 2804 ****************** <1> expansion: adr = '[internalflags]' 2804 ****************** <1> expansion: len = 15 2804 ****************** <1> expansion: tf = '[' 2804 ****************** <1> expansion: tb = ']' 2804 ****************** <1> expansion: adr = 'internalflags' 2804 ****************** <1> expansion: adr = internalflags 2805 000026D5 7405 <1> jz @F 2806 000026D7 800E[8700]20 <1> setopt [internalflags], tt_silence 2806 ****************** <1> expansion: adr = '[internalflags]' 2806 ****************** <1> expansion: len = 15 2806 ****************** <1> expansion: tf = '[' 2806 ****************** <1> expansion: tb = ']' 2806 ****************** <1> expansion: adr = 'internalflags' 2806 ****************** <1> expansion: adr = internalflags 2807 <1> @@: 2807 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.47 2807 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.48 2807 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.49 2807 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.50 2807 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.51 2807 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.52 2807 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.53 2807 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.54 2807 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.47 2807 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.48 2807 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.49 2807 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.50 2807 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.51 2807 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.52 2807 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.53 2807 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.54 2807 ****************** <1> expansion: __@@_num = 55 2808 000026DC E89050 <1> call putsz ; print string 2809 000026DF F606[8700]10 <1> testopt [internalflags], tt_silent_mode 2809 ****************** <1> expansion: adr = '[internalflags]' 2809 ****************** <1> expansion: len = 15 2809 ****************** <1> expansion: tf = '[' 2809 ****************** <1> expansion: tb = ']' 2809 ****************** <1> expansion: adr = 'internalflags' 2809 ****************** <1> expansion: adr = internalflags 2810 000026E4 7405 <1> jz @F 2811 000026E6 8026[8700]DF <1> clropt [internalflags], tt_silence 2811 ****************** <1> expansion: adr = '[internalflags]' 2811 ****************** <1> expansion: len = 15 2811 ****************** <1> expansion: tf = '[' 2811 ****************** <1> expansion: tb = ']' 2811 ****************** <1> expansion: adr = 'internalflags' 2811 ****************** <1> expansion: adr = internalflags 2812 <1> @@: 2812 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.48 2812 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.49 2812 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.50 2812 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.51 2812 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.52 2812 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.53 2812 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.54 2812 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.55 2812 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.48 2812 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.49 2812 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.50 2812 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.51 2812 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.52 2812 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.53 2812 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.54 2812 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.55 2812 ****************** <1> expansion: __@@_num = 56 2813 000026EB C3 <1> retn 2814 <1> 2815 <1> 2816 <1> ; Print message about unexpected interrupt, dump registers, and 2817 <1> ; end command. This code is also used by the G and P commands. 2818 <1> unexpectedinterrupt: 2819 000026EC 8B16[DE02] <1> mov dx, word [run_int] 2820 000026F0 E8DDFF <1> call putsz_silent 2821 <1> %if _CATCHINT19 2822 000026F3 81FA[A746] <1> cmp dx, int19msg 2823 000026F7 7409 <1> je .noregs ; if it terminated, skip the registers 2824 <1> %endif 2825 000026F9 81FA[E046] <1> cmp dx, progtrm 2826 000026FD 7403 <1> je .noregs ; if it terminated, skip the registers 2827 000026FF E82C02 <1> call dumpregs_silent 2828 <1> .noregs: 2829 00002702 E8D94F <1> call silence_dump 2830 <1> 2831 00002705 F606[8800]08 <1> testopt [internalflags2], dif2_gg_is_gg 2831 ****************** <1> expansion: adr = '[internalflags2]' 2831 ****************** <1> expansion: len = 16 2831 ****************** <1> expansion: tf = '[' 2831 ****************** <1> expansion: tb = ']' 2831 ****************** <1> expansion: adr = 'internalflags2' 2831 ****************** <1> expansion: adr = internalflags2 2832 0000270A 7407 <1> jz @F 2833 0000270C F606[7E00]20 <1> testopt [options], gg_unexpected_no_repeat 2833 ****************** <1> expansion: adr = '[options]' 2833 ****************** <1> expansion: len = 9 2833 ****************** <1> expansion: tf = '[' 2833 ****************** <1> expansion: tb = ']' 2833 ****************** <1> expansion: adr = 'options' 2833 ****************** <1> expansion: adr = options 2834 00002711 EB05 <1> jmp @FF 2835 <1> @@: 2835 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.49 2835 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.50 2835 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.51 2835 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.52 2835 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.53 2835 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.54 2835 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.55 2835 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.56 2835 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.49 2835 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.50 2835 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.51 2835 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.52 2835 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.53 2835 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.54 2835 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.55 2835 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.56 2835 ****************** <1> expansion: __@@_num = 57 2836 00002713 F606[7E00]40 <1> testopt [options], tp_unexpected_no_repeat 2836 ****************** <1> expansion: adr = '[options]' 2836 ****************** <1> expansion: len = 9 2836 ****************** <1> expansion: tf = '[' 2836 ****************** <1> expansion: tb = ']' 2836 ****************** <1> expansion: adr = 'options' 2836 ****************** <1> expansion: adr = options 2837 <1> @@: 2837 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.50 2837 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.51 2837 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.52 2837 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.53 2837 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.54 2837 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.55 2837 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.56 2837 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.57 2837 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.50 2837 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.51 2837 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.52 2837 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.53 2837 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.54 2837 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.55 2837 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.56 2837 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.57 2837 ****************** <1> expansion: __@@_num = 58 2838 00002718 7406 <1> jz @F 2839 0000271A C706[E002][1B03] <1> mov word [lastcmd], dmycmd 2840 <1> @@: 2840 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.51 2840 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.52 2840 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.53 2840 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.54 2840 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.55 2840 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.56 2840 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.57 2840 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.58 2840 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.51 2840 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.52 2840 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.53 2840 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.54 2840 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.55 2840 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.56 2840 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.57 2840 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.58 2840 ****************** <1> expansion: __@@_num = 59 2841 <1> 2842 00002720 E9C0DA <1> jmp cmd3 ; back to the start 2843 <1> 2844 <1> 2845 <1> ; Trace an instruction. 2846 <1> ; INP: - 2847 <1> ; OUT: NC if the breakpoint was hit, 2848 <1> ; d[reg_eip] adjusted 2849 <1> ; (ZF only set if _BREAKPOINTS) 2850 <1> ; ZR if breakpoint after instruction was hit 2851 <1> ; NZ if another breakpoint (bb) was hit 2852 <1> ; CY if the breakpoint was not hit 2853 <1> traceone: 2854 00002723 F606[8800]80 <1> testopt [internalflags2], dif2_tpg_keep_proceed_bp 2854 ****************** <1> expansion: adr = '[internalflags2]' 2854 ****************** <1> expansion: len = 16 2854 ****************** <1> expansion: tf = '[' 2854 ****************** <1> expansion: tb = ']' 2854 ****************** <1> expansion: adr = 'internalflags2' 2854 ****************** <1> expansion: adr = internalflags2 2855 00002728 757D <1> jnz .proceedbreakpoint 2856 <1> 2857 0000272A 31C9 <1> xor cx, cx 2858 0000272C E86538 <1> call getcseipbyte 2859 0000272F 3CCD <1> cmp al, 0CDh ; int opcode? 2860 00002731 7577 <1> jne .isstdtrace ; no --> 2861 00002733 41 <1> inc cx 2862 00002734 E85D38 <1> call getcseipbyte 2863 00002737 3C03 <1> cmp al, 3 2864 00002739 746F <1> je .isstdtrace ; int 3 opcode --> 2865 0000273B F606[7C00]02 <1> testopt [options], traceints ; TM=1? 2865 ****************** <1> expansion: adr = '[options]' 2865 ****************** <1> expansion: len = 9 2865 ****************** <1> expansion: tf = '[' 2865 ****************** <1> expansion: tb = ']' 2865 ****************** <1> expansion: adr = 'options' 2865 ****************** <1> expansion: adr = options 2866 00002740 7503E9A300 <1> jz isstdtraceX 2867 00002745 3C01 <1> cmp al, 1 2868 00002747 7461 <1> je .isstdtrace ; int 1 opcode --> 2869 <1> 2870 <1> ; TM==1, single-step into the INT 2871 00002749 88C3 <1> mov bl, al 2872 <1> %if _PM 2873 <1> call ispm 2874 <1> jz .singlestep_into_interrupt_pm 2875 <1> %endif 2876 0000274B B700 <1> mov bh, 0 2877 0000274D 1E <1> push ds 2878 0000274E 31C0 <1> xor ax, ax 2879 00002750 8ED8 <1> mov ds, ax 2880 00002752 D1E3 <1> shl bx, 1 2881 00002754 D1E3 <1> shl bx, 1 2882 00002756 C537 <1> lds si, [bx] 2883 00002758 8A04 <1> mov al, byte [si] 2884 0000275A FA <1> cli 2885 0000275B FE04 <1> inc byte [si] 2886 0000275D 3804 <1> cmp byte [si], al 2887 0000275F 8804 <1> mov byte [si], al 2888 00002761 FB <1> sti 2889 00002762 8CDB <1> mov bx, ds ; bx:si-> interrupt handler (RM, 16 bit) 2890 00002764 89D8 <1> mov ax, bx 2891 00002766 1F <1> pop ds 2892 00002767 753E <1> jne .singlestep_into_interrupt_setbp 2893 <1> 2894 <1> ; The interrupt handler is in a ROM. 2895 <1> %if 0 2896 <1> jmp short isstdtraceX 2897 <1> %else 2898 00002769 8736[7803] <1> xchg si, word [reg_eip] 2899 0000276D 8706[6C03] <1> xchg ax, word [reg_cs] ; get cs:ip, set interrupt handler address 2900 00002771 8B0E[7C03] <1> mov cx, word [reg_efl] ; get flags 2901 00002775 1E <1> push ds 2902 00002776 8B1E[5003] <1> mov bx, word [reg_esp] 2903 0000277A 8E1E[6803] <1> mov ds, word [reg_ss] ; ds:bx-> debuggee stack 2904 0000277E 83EB06 <1> sub bx, byte 6 ; reserve enough space for flags, cs, ip 2905 00002781 46 <1> inc si 2906 00002782 46 <1> inc si ; skip CDh xxh opcode 2907 00002783 894F04 <1> mov word [bx+4], cx 2908 00002786 894702 <1> mov word [bx+2], ax 2909 00002789 8937 <1> mov word [bx+0], si ; save flags, cs, ip on stack 2910 0000278B 1F <1> pop ds 2911 0000278C 891E[5003] <1> mov word [reg_esp], bx ; update sp 2912 00002790 8026[7D03]FC <1> and byte [reg_efl+1], ~(2|1) ; clear IF and TF (NC) 2913 <1> ; Note: If invalid flag values were previously set by the user 2914 <1> ; by directly accessing the FL or EFL register, these won't be 2915 <1> ; fixed by us now. This could be worked around by executing a 2916 <1> ; NOP in debuggee's environment (or only with debuggee's flags) 2917 <1> ; first, but I don't think it's much of an issue. 2918 00002795 C706[DE02][B145] <1> mov word [run_int], int1msg 2921 0000279B 8126[8800]7FF8 <1> clropt [internalflags2], dif2_tpg_have_bp | dif2_tpg_adjusted_cseip | dif2_tpg_do_not_adjust | dif2_tpg_keep_proceed_bp, 1 2921 ****************** <1> expansion: adr = '[internalflags2]' 2921 ****************** <1> expansion: len = 16 2921 ****************** <1> expansion: tf = '[' 2921 ****************** <1> expansion: tb = ']' 2921 ****************** <1> expansion: adr = 'internalflags2' 2921 ****************** <1> expansion: adr = internalflags2 2922 000027A1 B90800 <1> mov cx, 8 2923 000027A4 31C0 <1> xor ax, ax ; NC, ZR 2924 000027A6 C3 <1> retn 2925 <1> 2926 <1> %endif 2927 <1> %if _PM 2928 <1> .singlestep_into_interrupt_pm: 2929 <1> mov ax, 0204h 2930 <1> int 31h 2931 <1> mov bx, cx 2932 <1> _386_o32 ; mov esi, edx 2933 <1> mov si, dx ; bx:(e)si-> interrupt handler 2934 <1> test bl, 4 ; is it a LDT selector? (NC) 2935 <1> jz isstdtraceX ; no --> 2936 <1> %endif 2937 <1> .singlestep_into_interrupt_setbp: 2938 <1> .proceedbreakpoint: 2939 000027A7 E9DF02 <1> jmp proceedbreakpoint 2940 <1> 2941 <1> .isstdtrace: 2942 <1> %if _PM 2943 <1> call ispm 2944 <1> jz .notdpmientry ; already in PM --> 2945 <1> mov ax, w[reg_eip] ; is this a switch to protected mode ? 2946 <1> cmp ax, w[dpmiwatch+0] 2947 <1> jne .notdpmientry 2948 <1> mov ax, w[reg_cs] 2949 <1> cmp ax, w[dpmiwatch+2] 2950 <1> je isdpmientry ; yes, catch it --> (this means really "go") 2951 <1> .notdpmientry: 2952 <1> %endif 2953 000027AA 800E[7D03]01 <1> or byte [reg_efl+1], 1 ; set single-step mode (cleared when returning into DEBUG) 2954 000027AF 31C9 <1> xor cx, cx 2955 000027B1 E84A00 <1> call skipprefixes 2956 000027B4 3C9C <1> cmp al, 9Ch ; opcode "PUSHF"? 2957 000027B6 7514 <1> jnz .notpushf 2958 000027B8 E80904 <1> call run 2959 <1> 2960 <1> ; Clear TF in the fl word or efl dword 2961 <1> ; pointed to by debuggee's ss:(e)sp 2962 000027BB 06 <1> push es 2963 <1> %if _PM 2964 <1> mov bx, word [reg_ss] ; get ss selector into bx 2965 <1> mov es, bx 2966 <1> _386 call testattrhigh ; check whether a 32-bit ss 2967 <1> %else 2968 000027BC 8E06[6803] <1> mov es, word [reg_ss] 2969 <1> %endif 2970 <1> _386_PM_o32 ; mov ebx, dword [reg_esp] 2971 000027C0 8B1E[5003] <1> mov bx, word [reg_esp] ; es:(e)bx-> debuggee's stack 2972 <1> _386_PM jz .pushf_16 2973 <1> _386_PM and byte [es:ebx+1], ~1 ; clear TF 2974 <1> _386_PM jmp short .pushf_common 2975 <1> .pushf_16: 2976 000027C4 26806701FE <1> and byte [es:bx+1], ~1 ; clear TF 2977 <1> .pushf_common: 2978 000027C9 07 <1> pop es 2979 000027CA EB09 <1> jmp short .checkreturn 2980 <1> .notpushf: 2981 <1> %if _BREAKPOINTS 2982 000027CC E86B03 <1> call run_with_bb 2983 000027CF 89C1 <1> mov cx, ax 2984 000027D1 B400 <1> mov ah, 0 2985 000027D3 7310 <1> jnc .ret_NZ_NC 2986 <1> %else 2987 <1> call run 2988 <1> xor cx, cx 2989 <1> xor ax, ax 2990 <1> %endif 2991 <1> .checkreturn: 2992 000027D5 813E[DE02][B145] <1> cmp word [run_int], int1msg 2993 000027DB 7506 <1> jne .nomatch 2994 000027DD 80C908 <1> or cl, 8 2995 000027E0 38C0 <1> cmp al, al ; if correct interrupt (ZR, NC) 2996 000027E2 C3 <1> retn 2997 <1> 2998 <1> .nomatch: 2999 000027E3 F9 <1> stc 3000 000027E4 C3 <1> retn 3001 <1> 3002 <1> %if _BREAKPOINTS 3003 <1> .ret_NZ_NC: 3004 000027E5 0C04 <1> or al, 4 ; (NZ, NC) 3005 000027E7 C3 <1> retn 3006 <1> %endif 3007 <1> 3008 <1> 3009 <1> ; an INT is to be processed (TM is 0) 3010 <1> ; to avoid the nasty x86 bug which makes IRET 3011 <1> ; cause a debug exception 1 instruction too late 3012 <1> ; a breakpoint is set behind the INT 3013 <1> 3014 <1> isstdtraceX: 3015 000027E8 B90200 <1> mov cx, 2 3016 000027EB E84600 <1> call iswriteablecseip ; is it ROM ? 3017 000027EE 72BA <1> jc traceone.isstdtrace ; is read-only --> 3018 000027F0 8B1E[6C03] <1> mov bx, word [reg_cs] 3019 <1> 3020 <1> ; (e)si = (e)ip + 2 3021 <1> ; We don't test whether it's a 32-bit code segment here. 3022 <1> ; The previous code would leave the high word of esi uninitialized then. 3023 <1> _386_PM_o32 ; mov esi, dword [reg_eip] 3024 000027F4 8B36[7803] <1> mov si, word [reg_eip] 3025 <1> _386_PM_o32 ; add esi, byte 2 3026 000027F8 83C602 <1> add si, byte 2 ; ! do not remove the byte override, else o32 won't work 3027 000027FB E98B02 <1> jmp proceedbreakpoint ; set BP at BX:(E)SI and run debuggee 3028 <1> 3029 <1> ; Call getcseipbyte and loop while increasing cx if the returned 3030 <1> ; byte was a prefix. Returns the first non-prefix byte (an opcode) 3031 <1> ; in al. (WAIT or FWAIT is not considered a prefix because it's 3032 <1> ; really an opcode and we also trace it without executing a 3033 <1> ; following FPU opcode.) 3034 <1> skipprefixes: 3035 <1> .: 3036 000027FE E89337 <1> call getcseipbyte 3037 00002801 3C26 <1> cmp al, 26h 3038 00002803 742A <1> je .prefix ; ES 3039 00002805 3C2E <1> cmp al, 2Eh 3040 00002807 7426 <1> je .prefix ; CS 3041 00002809 3C36 <1> cmp al, 36h 3042 0000280B 7422 <1> je .prefix ; SS 3043 0000280D 3C3E <1> cmp al, 3Eh 3044 0000280F 741E <1> je .prefix ; DS 3045 00002811 3CF0 <1> cmp al, 0F0h 3046 00002813 741A <1> je .prefix ; LOCK 3047 00002815 3CF3 <1> cmp al, 0F3h 3048 00002817 7416 <1> je .prefix ; REPZ 3049 00002819 3CF2 <1> cmp al, 0F2h 3050 0000281B 7412 <1> je .prefix ; REPNZ 3051 0000281D EB14 <1> _no386_jmps .noprefix ; no 386, following aren't prefixes (invalid opcodes on 186+) --> 3051 ****************** <1> expansion: entry = 10269 3051 ****************** <1> expansion: PATCH_386_TABLE = "",10269 3051 ****************** <1> expansion: entry = 10270 3051 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270 3051 ****************** <1> expansion: entry = 10271 3052 0000281F 3C64 <1> cmp al, 64h 3053 00002821 740C <1> je .prefix ; FS 3054 00002823 3C65 <1> cmp al, 65h 3055 00002825 7408 <1> je .prefix ; GS 3056 00002827 3C66 <1> cmp al, 66h 3057 00002829 7404 <1> je .prefix ; o32/o16 3058 0000282B 3C67 <1> cmp al, 67h 3059 0000282D 7504 <1> jne .noprefix ; not a32/a16 3060 <1> .prefix: 3061 0000282F 41 <1> inc cx 3062 <1> ; jmp short . 3063 00002830 79CC <1> jns . ; this is not correct but serves as hack to avoid an infinite loop 3064 <1> ; (note that getcseipbyte really uses cx as signed number) 3065 00002832 49 <1> dec cx ; back to 07FFFh 3066 <1> .noprefix: 3067 00002833 C3 <1> retn 3068 <1> 3069 <1> 3070 <1> ;--- test if memory at CS:E/IP can be written to 3071 <1> ;--- return C if not 3072 <1> 3073 <1> iswriteablecseip: 3074 00002834 E85D37 <1> call getcseipbyte ; get byte at CS:EIP+CX 3075 00002837 88C4 <1> mov ah, al 3076 00002839 34FF <1> xor al, 0FFh 3077 0000283B E86637 <1> call setcseipbyte 3078 0000283E 720E <1> jc .return 3079 00002840 E85137 <1> call getcseipbyte 3080 00002843 38C4 <1> cmp ah, al ; is it ROM? 3081 00002845 F9 <1> stc 3082 00002846 7406 <1> jz .return 3083 00002848 88E0 <1> mov al, ah 3084 0000284A E85737 <1> call setcseipbyte 3085 0000284D F8 <1> clc 3086 <1> .return: 3087 0000284E C3 <1> retn 3088 <1> 3089 <1> 3090 <1> %if _PM 3091 <1> debuggerexception: 3092 <1> call unhack 3093 <1> mov dx, word [run_int] 3094 <1> call putsz ; print string 3095 <1> %if _EXCCSIP 3096 <1> mov dx, excloc 3097 <1> call putsz 3098 <1> %endif 3099 <1> jmp cmd3 3100 <1> %endif 3101 <1> 3102 <1> 3103 <1> %if _PM 3104 <1> [cpu 386] 3105 <1> ; INP: dh = flags as for pp2,pp3,pp5 (1 = ASIZE, 2 = OSIZE) 3106 <1> ; OUT: dh = flags as used by pp3,pp5 (1 = A32, 2 = O32) 3107 <1> pp_fix32bitflags: 3108 <1> call testattrhigh 3109 <1> jz .16 3110 <1> xor dh, 1|2 ; toggle OSIZE and ASIZE (once) 3111 <1> .16: 3112 <1> retn 3113 <1> __CPU__ 3114 <1> %endif 3115 <1> 3116 <1> ; P command - proceed (i.e., skip over call/int/loop/string instruction). 3117 <1> pp: 3118 0000284F C706[E002][4F28] <1> mov word [lastcmd], pp 3119 00002855 E89705 <1> call parse_pt ; process arguments 3120 00002858 800E[8900]10 <1> setopt [internalflags2], dif2_is_pp 3120 ****************** <1> expansion: adr = '[internalflags2]' 3120 ****************** <1> expansion: len = 16 3120 ****************** <1> expansion: tf = '[' 3120 ****************** <1> expansion: tb = ']' 3120 ****************** <1> expansion: adr = 'internalflags2' 3120 ****************** <1> expansion: adr = internalflags2 3121 <1> 3122 <1> ; Do it times. First check the type of instruction. 3123 <1> pp1: 3124 0000285D 53 <1> push bx 3125 0000285E 51 <1> push cx ; save bx:cx 3126 0000285F BA0F00 <1> mov dx, 15 ; DL = number of bytes to go; DH = prefix flags. 3127 00002862 8B1E[6C03] <1> mov bx, word [reg_cs] 3128 <1> _386_PM_o32 ; mov esi, dword [reg_eip] 3129 00002866 8B36[7803] <1> mov si, word [reg_eip] 3130 <1> pp2: 3131 0000286A E8C702 <1> call pp16 ; get next instruction byte into AL 3132 0000286D BF[C003] <1> mov di, ppbytes 3133 00002870 B91F00 <1> mov cx, PPLEN 3134 00002873 F2AE <1> repne scasb 3135 00002875 7525 <1> jne pp5 ; if not one of these --> 3136 00002877 8A451E <1> mov al,byte [di+PPLEN-1]; get corresponding byte in ppinfo 3137 0000287A A880 <1> test al, 80h ; prefix ? 3138 0000287C 740E <1> jz pp3 ; no --> 3139 0000287E 08C6 <1> or dh, al ; set the OSIZE or ASIZE flags if either of these 3140 <1> ; Note: Multiple OSIZE in a 16-bit cs do not toggle 3141 <1> ; between decoding as O32 and O16, they're always 3142 <1> ; decoded as O32. The same is true for A32, and 3143 <1> ; in a 32-bit cs for O16 and A16. 3144 00002880 FECA <1> dec dl 3145 00002882 75E6 <1> jnz pp2 ; if not out of bytes --> 3146 00002884 BA[A63F] <1> mov dx, msg.warnprefix 3147 00002887 E8E54E <1> call putsz 3148 0000288A EB56 <1> jmp short pp12 3149 <1> 3150 <1> ; A repeatable string, interrupt, call immediate or loop 3151 <1> ; instruction is to be decoded. Finish the decoding and 3152 <1> ; skip the appropriate number of opcode bytes. 3153 <1> pp3: 3154 <1> _386_PM call pp_fix32bitflags 3155 0000288C A840 <1> test al, 40h ; different opcode length depends on OSIZE ? 3156 0000288E 7407 <1> jz .ignoreosize ; no --> 3157 00002890 243F <1> and al, 3Fh 3158 00002892 80E602 <1> and dh, 2 3159 00002895 00F0 <1> add al, dh 3160 <1> .ignoreosize: 3161 00002897 98 <1> cbw 3162 <1> _386_PM movzx eax, ax ; clear high word (in case it counts) 3163 <1> _386_PM_o32 ; add esi, eax 3164 00002898 01C6 <1> add si, ax 3165 0000289A EB3D <1> jmp short pp11 ; we have a skippable instruction here 3166 <1> 3167 <1> pp5: 3168 <1> _386_PM call pp_fix32bitflags 3169 0000289C 3CFF <1> cmp al, 0FFh ; FF/2 or FF/3 indirect call ? 3170 0000289E 7542 <1> jne pp12 ; no, just an ordinary instruction --> 3171 000028A0 E89102 <1> call pp16 ; get MOD REG R/M byte 3172 000028A3 24F7 <1> and al, ~8 ; clear lowest bit of REG field (/3 --> /2) 3173 000028A5 3410 <1> xor al, 10h ; /2 --> /0 3174 000028A7 A838 <1> test al, 38h 3175 000028A9 7537 <1> jnz pp12 ; if not FF/2 or FF/3 --> 3176 000028AB 3CC0 <1> cmp al, 0C0h 3177 000028AD 732A <1> jae .adjust0 ; if just a register --> 3178 000028AF F6C601 <1> test dh, 1 3179 000028B2 750E <1> jnz .a32 ; if 32-bit addressing --> 3180 000028B4 3C06 <1> cmp al, 6 3181 000028B6 741F <1> je .adjust2 ; if just plain disp16 --> 3182 000028B8 3C40 <1> cmp al, 40h 3183 000028BA 721D <1> jb .adjust0 ; if indirect register --> 3184 000028BC 3C80 <1> cmp al, 80h 3185 000028BE 7218 <1> jb .adjust1 ; if disp8[reg(s)] 3186 000028C0 EB15 <1> jmp short .adjust2 ; it's disp16[reg(s)] 3187 <1> 3188 <1> ; Handle 32-bit addressing (A32 ModR/M referencing memory) 3189 <1> .a32: 3190 000028C2 3C05 <1> cmp al, 5 3191 000028C4 740F <1> je .adjust4 ; if just plain disp32 --> 3192 000028C6 3404 <1> xor al, 4 3193 000028C8 A807 <1> test al, 7 3194 000028CA 7501 <1> jnz .a32_nosib ; if no SIB byte --> 3195 <1> _386_PM_o32 ; inc esi 3196 000028CC 46 <1> inc si ; skip the SIB byte 3197 <1> .a32_nosib: 3198 000028CD 3C40 <1> cmp al, 40h 3199 000028CF 7208 <1> jb .adjust0 ; if indirect register --> 3200 000028D1 3C80 <1> cmp al, 80h 3201 000028D3 7203 <1> jb .adjust1 ; if disp8[reg(s)] --> 3202 <1> ; otherwise, it's disp32[reg(s)] 3203 <1> .adjust4: 3204 <1> _386_PM_o32 ; inc esi 3205 000028D5 46 <1> inc si ; skip an instruction byte 3206 <1> _386_PM_o32 ; inc esi 3207 000028D6 46 <1> inc si ; skip an instruction byte 3208 <1> .adjust2: 3209 <1> _386_PM_o32 ; inc esi 3210 000028D7 46 <1> inc si ; skip an instruction byte 3211 <1> .adjust1: 3212 <1> _386_PM_o32 ; inc esi 3213 000028D8 46 <1> inc si ; skip an instruction byte 3214 <1> .adjust0: 3215 <1> pp11: 3216 <1> _386_PM call testattrhigh 3217 <1> _386_PM jnz .32 ; full 32-bit offset valid --> 3218 <1> _386_PM movzx esi, si ; clear high word here 3219 <1> .32: 3220 <1> @@: 3220 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.52 3220 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.53 3220 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.54 3220 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.55 3220 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.56 3220 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.57 3220 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.58 3220 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.59 3220 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.52 3220 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.53 3220 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.54 3220 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.55 3220 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.56 3220 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.57 3220 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.58 3220 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.59 3220 ****************** <1> expansion: __@@_num = 60 3221 000028D9 E8AD01 <1> call proceedbreakpoint ; run until the breakpoint is hit 3222 000028DC 724D <1> jc pp15 ; unexpected --> 3223 <1> %if _BREAKPOINTS 3224 000028DE 7513 <1> jnz pp12.bb_hit 3225 <1> %endif 3226 000028E0 EB2C <1> jmp short pp13 3227 <1> 3228 <1> pp12: 3229 000028E2 F606[8800]80 <1> testopt [internalflags2], dif2_tpg_keep_proceed_bp 3229 ****************** <1> expansion: adr = '[internalflags2]' 3229 ****************** <1> expansion: len = 16 3229 ****************** <1> expansion: tf = '[' 3229 ****************** <1> expansion: tb = ']' 3229 ****************** <1> expansion: adr = 'internalflags2' 3229 ****************** <1> expansion: adr = internalflags2 3230 000028E7 75F0 <1> jnz @B 3231 <1> 3232 000028E9 800E[7D03]01 <1> or byte [reg_efl+1], 1 ; set single-step mode 3233 <1> %if _BREAKPOINTS 3234 000028EE E84902 <1> call run_with_bb ; trace instruction 3235 000028F1 7213 <1> jc @F 3236 <1> .bb_hit: 3237 <1> 3238 000028F3 E8F8FC <1> call handle_bb_hit_pass_match 3239 000028F6 7204 <1> jc .actual_hit 3240 <1> d5 call d5message 3241 <1> d5 asciz "in pp12.bb_hit after non-hit",13,10 3242 000028F8 7417 <1> jz pp13.nodump 3243 000028FA EB12 <1> jmp pp13 3244 <1> 3245 <1> 3246 <1> .actual_hit: 3247 000028FC E88BF6 <1> call put_deferred_message_silent 3248 000028FF E82C00 <1> call dumpregs_silent 3249 00002902 59 <1> pop cx 3250 00002903 5B <1> pop bx ; (discard) 3251 00002904 EB1E <1> jmp @FF 3252 <1> 3253 <1> @@: 3253 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.53 3253 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.54 3253 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.55 3253 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.56 3253 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.57 3253 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.58 3253 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.59 3253 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.60 3253 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.53 3253 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.54 3253 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.55 3253 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.56 3253 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.57 3253 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.58 3253 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.59 3253 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.60 3253 ****************** <1> expansion: __@@_num = 61 3254 <1> %else 3255 <1> call run ; trace instruction 3256 <1> %endif 3257 <1> 3258 <1> ; We could check here for the correct address too, but that 3259 <1> ; would require disassembling the instruction and correctly so. 3260 <1> ; (Disassembling it incorrectly would only result in spurious 3261 <1> ; "Unexpected single-step interrupt" messages aborting multi- 3262 <1> ; traces though, so it won't be fatal.) 3263 <1> ; Wouldn't really be useful though: Only the "int1" or "int 01h" 3264 <1> ; instructions should cause this, and their operation means we 3265 <1> ; might as well behave as if the breakpoint was expected. 3266 00002906 813E[DE02][B145] <1> cmp word [run_int], int1msg 3267 0000290C 751D <1> jne pp15 ; if some other interrupt (unexpected) --> 3268 <1> 3269 <1> pp13: 3270 <1> ; An expected breakpoint. Dump registers, then loop. 3271 0000290E E81D00 <1> call dumpregs_silent 3272 <1> 3273 <1> .nodump: 3274 00002911 E88BFC <1> call tt_handle_while 3275 00002914 59 <1> pop cx 3276 00002915 5B <1> pop bx 3277 <1> 3278 00002916 83E901 <1> sub cx, 1 3279 00002919 83DB00 <1> sbb bx, 0 3280 <1> 3281 0000291C 85DB <1> test bx, bx 3282 0000291E 7508 <1> jnz pp14 3283 00002920 85C9 <1> test cx, cx 3284 00002922 7504 <1> jnz pp14 ; back for more --> 3285 <1> 3286 <1> @@: 3286 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.54 3286 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.55 3286 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.56 3286 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.57 3286 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.58 3286 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.59 3286 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.60 3286 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.61 3286 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.54 3286 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.55 3286 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.56 3286 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.57 3286 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.58 3286 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.59 3286 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.60 3286 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.61 3286 ****************** <1> expansion: __@@_num = 62 3287 00002924 E8B74D <1> call silence_dump 3288 <1> 3289 00002927 C3 <1> retn 3290 <1> 3291 <1> %if ($ - pp1 - 1) < 128 3292 <1> pp14: equ pp1 3293 <1> %else 3294 00002928 E932FF <1> pp14: jmp pp1 3295 <1> %endif 3296 <1> 3297 <1> pp15: 3298 0000292B E9BEFD <1> jmp unexpectedinterrupt ; print message about unexpected interrupt 3299 <1> ; and quit 3300 <1> 3301 <1> 3302 <1> dumpregs_silent: 3303 0000292E F606[8700]10 <1> testopt [internalflags], tt_silent_mode 3303 ****************** <1> expansion: adr = '[internalflags]' 3303 ****************** <1> expansion: len = 15 3303 ****************** <1> expansion: tf = '[' 3303 ****************** <1> expansion: tb = ']' 3303 ****************** <1> expansion: adr = 'internalflags' 3303 ****************** <1> expansion: adr = internalflags 3304 00002933 7405 <1> jz @F 3305 00002935 800E[8700]20 <1> setopt [internalflags], tt_silence 3305 ****************** <1> expansion: adr = '[internalflags]' 3305 ****************** <1> expansion: len = 15 3305 ****************** <1> expansion: tf = '[' 3305 ****************** <1> expansion: tb = ']' 3305 ****************** <1> expansion: adr = 'internalflags' 3305 ****************** <1> expansion: adr = internalflags 3306 <1> ; Call dumpregs (trimputs, puts, putsline, disasm) with 3307 <1> ; "silence" flag (writes to auxbuff instead of terminal). 3308 <1> @@: 3308 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.55 3308 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.56 3308 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.57 3308 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.58 3308 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.59 3308 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.60 3308 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.61 3308 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.62 3308 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.55 3308 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.56 3308 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.57 3308 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.58 3308 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.59 3308 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.60 3308 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.61 3308 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.62 3308 ****************** <1> expansion: __@@_num = 63 3309 0000293A E8A4ED <1> call dumpregs 3310 0000293D F606[8700]10 <1> testopt [internalflags], tt_silent_mode 3310 ****************** <1> expansion: adr = '[internalflags]' 3310 ****************** <1> expansion: len = 15 3310 ****************** <1> expansion: tf = '[' 3310 ****************** <1> expansion: tb = ']' 3310 ****************** <1> expansion: adr = 'internalflags' 3310 ****************** <1> expansion: adr = internalflags 3311 00002942 741A <1> jz @F 3312 <1> ; Terminate the last dump's output with a NUL byte. 3313 00002944 06 <1> push es 3314 00002945 57 <1> push di 3315 00002946 50 <1> push ax 3316 00002947 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 3317 0000294B 8B3E[3002] <1> mov di, word [auxbuff_behind_last_silent] 3318 0000294F B000 <1> mov al, 0 3319 00002951 AA <1> stosb 3320 00002952 FF06[3002] <1> inc word [auxbuff_behind_last_silent] 3321 <1> ; -> point past the NUL 3322 00002956 58 <1> pop ax 3323 00002957 5F <1> pop di 3324 00002958 07 <1> pop es 3325 00002959 8026[8700]DF <1> clropt [internalflags], tt_silence 3325 ****************** <1> expansion: adr = '[internalflags]' 3325 ****************** <1> expansion: len = 15 3325 ****************** <1> expansion: tf = '[' 3325 ****************** <1> expansion: tb = ']' 3325 ****************** <1> expansion: adr = 'internalflags' 3325 ****************** <1> expansion: adr = internalflags 3326 <1> @@: 3326 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.56 3326 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.57 3326 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.58 3326 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.59 3326 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.60 3326 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.61 3326 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.62 3326 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.63 3326 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.56 3326 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.57 3326 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.58 3326 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.59 3326 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.60 3326 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.61 3326 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.62 3326 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.63 3326 ****************** <1> expansion: __@@_num = 64 3327 <1> 3328 <1> handle_serial_flags_ctrl_c: 3329 0000295E 36F606[ED02]02 <1> testopt [ss:serial_flags], sf_ctrl_c 3329 ****************** <1> expansion: adr = '[ss:serial_flags]' 3329 ****************** <1> expansion: len = 17 3329 ****************** <1> expansion: tf = '[' 3329 ****************** <1> expansion: tb = ']' 3329 ****************** <1> expansion: adr = 'ss:serial_flags' 3329 ****************** <1> expansion: adr = ss:serial_flags 3330 00002964 7501 <1> jnz @F 3331 00002966 C3 <1> retn 3332 <1> 3333 <1> @@: 3333 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.57 3333 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.58 3333 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.59 3333 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.60 3333 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.61 3333 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.62 3333 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.63 3333 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.64 3333 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.57 3333 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.58 3333 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.59 3333 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.60 3333 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.61 3333 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.62 3333 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.63 3333 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.64 3333 ****************** <1> expansion: __@@_num = 65 3334 00002967 16 <1> push ss 3335 00002968 1F <1> pop ds 3336 00002969 16 <1> push ss 3337 0000296A 07 <1> pop es 3338 0000296B 8026[ED02]F9 <1> clropt [serial_flags], sf_ctrl_c | sf_double_ctrl_c 3338 ****************** <1> expansion: adr = '[serial_flags]' 3338 ****************** <1> expansion: len = 14 3338 ****************** <1> expansion: tf = '[' 3338 ****************** <1> expansion: tb = ']' 3338 ****************** <1> expansion: adr = 'serial_flags' 3338 ****************** <1> expansion: adr = serial_flags 3339 00002970 E86B4D <1> call silence_dump 3340 00002973 BA[7A34] <1> mov dx, msg.ctrlc 3341 00002976 E8F64D <1> call putsz 3342 <1> @@: 3342 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.58 3342 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.59 3342 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.60 3342 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.61 3342 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.62 3342 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.63 3342 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.64 3342 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.65 3342 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.58 3342 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.59 3342 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.60 3342 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.61 3342 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.62 3342 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.63 3342 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.64 3342 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.65 3342 ****************** <1> expansion: __@@_num = 66 3343 00002979 E8BF4E <1> call getc_if_any ; drain the buffer 3344 0000297C 75FB <1> jnz @B ; if any was available --> 3345 0000297E E962D8 <1> jmp cmd3 3346 <1> 3347 <1> 3348 <1> ; INP: bp [tpg_proceed_bp], 3349 <1> ; linear address and point content to write 3350 <1> ; opt [internalflags2] & dif2_tpg_proceed_bp_set 3351 <1> ; set if a breakpoint was written 3352 <1> ; OUT: CY if error, 3353 <1> ; bp [tpg_proceed_bp] = has point content to restore 3354 <1> ; ah = reason = 0 = no error (never), 3355 <1> ; 1 = couldn't write, 3356 <1> ; 2 = unreachable, 3357 <1> ; 3 = overwritten, al = new byte value 3358 <1> ; NC if no error, 3359 <1> ; ah = 0 3360 <1> ; opt [internalflags2] & dif2_tpg_proceed_bp_set 3361 <1> ; cleared 3362 <1> ; CHG: di, (e)dx, ax, bx 3363 <1> ; STT: might switch modes due to getsegmented call 3364 <1> proceed_writepoint_restore: 3365 00002981 B400 <1> mov ah, 0 3366 00002983 F606[8800]40 <1> testopt [internalflags2], dif2_tpg_proceed_bp_set 3366 ****************** <1> expansion: adr = '[internalflags2]' 3366 ****************** <1> expansion: len = 16 3366 ****************** <1> expansion: tf = '[' 3366 ****************** <1> expansion: tb = ']' 3366 ****************** <1> expansion: adr = 'internalflags2' 3366 ****************** <1> expansion: adr = internalflags2 3367 00002988 745E <1> jz proceed_wp.retn ; (NC) 3368 0000298A BF0100 <1> mov di, 1 3369 0000298D EB02 <1> jmp proceed_wp 3370 <1> 3371 <1> ; INP: bp [tpg_proceed_bp], 3372 <1> ; linear address and point content to write (0CCh) 3373 <1> ; OUT: CY if error, 3374 <1> ; bp [tpg_proceed_bp] = has point content 0CCh 3375 <1> ; ah = reason = 0 = no error (never), 3376 <1> ; 1 = couldn't write, 3377 <1> ; 2 = unreachable, 3378 <1> ; 3 = overwritten (never) 3379 <1> ; NC if no error (either flag not set or point restored), 3380 <1> ; ah = 0 3381 <1> ; opt [internalflags2] & dif2_tpg_proceed_bp_set 3382 <1> ; set 3383 <1> ; CHG: di, (e)dx, ax, bx 3384 <1> ; STT: might switch modes due to getsegmented call 3385 <1> proceed_writepoint: 3386 0000298F 31FF <1> xor di, di 3387 <1> proceed_wp: 3388 <1> lframe near 3388 ****************** <1> expansion: bits = 16 3388 ****************** <1> expansion: base_size = 2 3388 ****************** <1> expansion: near_offset = 2 3388 ****************** <1> expansion: far_offset = 4 3388 ****************** <1> expansion: int_offset = 6 3388 ****************** <1> expansion: inner = 0 3388 ****************** <1> expansion: nested = 0 3388 ****************** <1> expansion: autoret = 3388 ****************** <1> expansion: autoret = near 3388 ****************** <1> expansion: parofs = 2 3388 ****************** <1> expansion: pars_size = 0 3388 ****************** <1> expansion: pars_return_size = 0 3388 ****************** <1> expansion: parlist = 3388 ****************** <1> expansion: labellist = empty,empty,empty 3388 ****************** <1> expansion: ofs = 0 3388 ****************** <1> expansion: enter = 0 3388 ****************** <1> expansion: req = 0 3388 ****************** <1> expansion: usereq = 0 3388 ****************** <1> expansion: emit = 1 3388 ****************** <1> expansion: restore_frame_ofs = 0 3388 ****************** <1> expansion: pars_inner_size = 0 3389 00002991 5589E5 <1> lenter 3389 ****************** <1> expansion: wasearly = 0 3389 ****************** <1> expansion: early = 0 3389 ****************** <1> expansion: lsizevariables = 0 3389 ****************** <1> expansion: req = 1 3389 ****************** <1> expansion: enter_emitted = 0 3389 ****************** <1> expansion: enter = 1 3389 ****************** <1> expansion: 186 = 0 3389 ****************** <1> expansion: newlabel = frame_bp 3389 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 3389 ****************** <1> expansion: ?frame_bp = 0 3389 ****************** <1> expansion: newlabel = frame_ip 3389 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 3389 ****************** <1> expansion: ?frame_ip = 2 3389 ****************** <1> expansion: lsizeparameters = 0 3390 00002994 83F701 <1> xor di, 1 3391 <1> lvar word, is_write 3391 ****************** <1> expansion: varsize = 2 3391 ****************** <1> expansion: ofs = -2 3391 ****************** <1> expansion: newlabel = is_write 3391 ****************** <1> expansion: labellist = is_write,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 3391 ****************** <1> expansion: ?is_write = -2 3391 ****************** <1> expansion: req = 1 3391 ****************** <1> expansion: hadvar = 1 3392 00002997 57 <1> push di 3393 <1> 3394 00002998 A1[A400] <1> mov ax, word [tpg_proceed_bp] 3395 <1> %if _PM 3396 <1> mov dx, word [tpg_proceed_bp + 2] 3397 <1> %else 3398 0000299B 31D2 <1> xor dx, dx 3399 0000299D 8A16[A600] <1> mov dl, byte [tpg_proceed_bp + 2] 3400 <1> %endif 3401 000029A1 E8BBFA <1> call getsegmented 3402 000029A4 A0[A700] <1> mov al, byte [tpg_proceed_bp + BPSIZE - 1] 3403 <1> ; al = byte to restore 3404 000029A7 B402 <1> mov ah, 2 ; error reason: unreachable 3405 000029A9 723A <1> jc .return 3406 <1> 3407 000029AB F646FE01 <1> test byte [bp + ?is_write], 1 3408 <1> ; (NC) is it writing ? 3409 000029AF 7518 <1> jnz .write 3410 <1> .restore: 3411 000029B1 50 <1> push ax 3412 000029B2 E82736 <1> call readmem ; read current byte 3413 000029B5 3CCC <1> cmp al, 0CCh ; is this still what we wrote? 3414 000029B7 B403 <1> mov ah, 3 ; error reason: overwritten, al = new value 3415 000029B9 F9 <1> stc 3416 000029BA 7529 <1> jne .return_discard ; nope --> (CY) 3417 000029BC 58 <1> pop ax 3418 000029BD E8F435 <1> call writemem ; return the byte to its original value 3419 000029C0 720D <1> jc .next ; failed --> (CY, handled there) 3420 000029C2 C606[A700]CC <1> mov byte [tpg_proceed_bp + BPSIZE - 1], 0CCh 3421 <1> ; reset stored point 3422 000029C7 EB06 <1> jmp short .next 3423 <1> 3424 <1> .write: 3425 000029C9 E8E835 <1> call writemem 3426 000029CC A2[A700] <1> mov byte [tpg_proceed_bp + BPSIZE - 1], al 3427 <1> ; save the previous byte there 3428 <1> .next: 3429 000029CF B401 <1> mov ah, 1 ; (in case of error) error reason: cannot write 3430 000029D1 7212 <1> jc .return ; failed to write --> (CY) 3431 000029D3 B400 <1> mov ah, 0 ; (no error) 3432 <1> 3433 000029D5 800E[8800]40 <1> setopt [internalflags2], dif2_tpg_proceed_bp_set 3433 ****************** <1> expansion: adr = '[internalflags2]' 3433 ****************** <1> expansion: len = 16 3433 ****************** <1> expansion: tf = '[' 3433 ****************** <1> expansion: tb = ']' 3433 ****************** <1> expansion: adr = 'internalflags2' 3433 ****************** <1> expansion: adr = internalflags2 3434 <1> ; set flag in case of successful writing 3435 000029DA F646FE01 <1> test byte [bp + ?is_write], 1 3436 <1> ; (NC) is it writing ? 3437 000029DE 7505 <1> jnz .return ; yes, leave flag set --> 3438 000029E0 8026[8800]BF <1> clropt [internalflags2], dif2_tpg_proceed_bp_set 3438 ****************** <1> expansion: adr = '[internalflags2]' 3438 ****************** <1> expansion: len = 16 3438 ****************** <1> expansion: tf = '[' 3438 ****************** <1> expansion: tb = ']' 3438 ****************** <1> expansion: adr = 'internalflags2' 3438 ****************** <1> expansion: adr = internalflags2 3439 <1> ; (NC) clear flag in case of successful restoring 3440 <1> .return: 3441 <1> .return_discard: 3442 <1> %if _PM 3443 <1> call getsegmented_resetmode 3444 <1> %endif 3445 000029E5 89EC5D <1> lleave 3445 ****************** <1> expansion: 186 = 0 3445 ****************** <1> expansion: lsizeparameters = 0 3445 ****************** <1> expansion: __lframe__autoret = near 3446 <1> .retn: 3447 000029E8 C3 <1> retn 3448 <1> 3449 <1> 3450 <1> ; INP: ah & 7Fh = status = 0 = no error, 3451 <1> ; 1 = couldn't write, 3452 <1> ; 2 = unreachable, 3453 <1> ; 3 = overwritten, al = new value 3454 <1> ; ah & 80h = set if error restoring point, 3455 <1> ; else error writing point 3456 <1> ; bh & 80h = set if gg breakpoint, 3457 <1> ; cx = index (0-based) 3458 <1> ; bh & 40h = set if bb breakpoint, 3459 <1> ; cx = index (0-based) 3460 <1> ; bh & C0h = clear if proceed breakpoint 3461 <1> ; bl = what we tried to restore, only set if ah & 80h set 3462 <1> ; dword [ss:sp] = linear address (24 bit if non-_PM) 3463 <1> ; CHG: ax, bx, cx, dx, di 3464 <1> ; STT: ds = es = ss = debugger data selector 3465 <1> display_breakpoint_failure: 3466 <1> %if _PM 3467 <1> call getsegmented_resetmode 3468 <1> ; This is a cautionary measure. 3469 <1> %endif 3470 <1> 3471 000029E9 50 <1> push ax 3472 000029EA 53 <1> push bx 3473 000029EB 56 <1> push si 3474 000029EC E8EF4C <1> call silence_dump ; do away with silent mode 3475 000029EF 5E <1> pop si 3476 000029F0 5B <1> pop bx 3477 000029F1 58 <1> pop ax 3478 <1> 3479 000029F2 800E[8900]08 <1> setopt [internalflags2], dif2_bp_failure 3479 ****************** <1> expansion: adr = '[internalflags2]' 3479 ****************** <1> expansion: len = 16 3479 ****************** <1> expansion: tf = '[' 3479 ****************** <1> expansion: tb = ']' 3479 ****************** <1> expansion: adr = 'internalflags2' 3479 ****************** <1> expansion: adr = internalflags2 3480 <1> 3481 <1> lframe near 3481 ****************** <1> expansion: bits = 16 3481 ****************** <1> expansion: base_size = 2 3481 ****************** <1> expansion: near_offset = 2 3481 ****************** <1> expansion: far_offset = 4 3481 ****************** <1> expansion: int_offset = 6 3481 ****************** <1> expansion: inner = 0 3481 ****************** <1> expansion: nested = 0 3481 ****************** <1> expansion: autoret = 3481 ****************** <1> expansion: autoret = near 3481 ****************** <1> expansion: parofs = 2 3481 ****************** <1> expansion: pars_size = 0 3481 ****************** <1> expansion: pars_return_size = 0 3481 ****************** <1> expansion: parlist = 3481 ****************** <1> expansion: labellist = empty,empty,empty 3481 ****************** <1> expansion: ofs = 0 3481 ****************** <1> expansion: enter = 0 3481 ****************** <1> expansion: req = 0 3481 ****************** <1> expansion: usereq = 0 3481 ****************** <1> expansion: emit = 1 3481 ****************** <1> expansion: restore_frame_ofs = 0 3481 ****************** <1> expansion: pars_inner_size = 0 3482 <1> lpar dword, linear 3482 ****************** <1> expansion: varsize = 4 3482 ****************** <1> expansion: newlabel = linear 3482 ****************** <1> expansion: labellist = linear,undefined,,empty,empty,empty 3482 ****************** <1> expansion: pars_size = 4 3482 ****************** <1> expansion: parlist = 4,linear 3482 ****************** <1> expansion: req = 1 3483 000029F7 5589E5 <1> lenter 3483 ****************** <1> expansion: wasearly = 0 3483 ****************** <1> expansion: early = 0 3483 ****************** <1> expansion: lsizevariables = 0 3483 ****************** <1> expansion: req = 1 3483 ****************** <1> expansion: enter_emitted = 0 3483 ****************** <1> expansion: enter = 1 3483 ****************** <1> expansion: 186 = 0 3483 ****************** <1> expansion: newlabel = frame_bp 3483 ****************** <1> expansion: labellist = frame_bp,undefined,,linear,undefined,,empty,empty,empty 3483 ****************** <1> expansion: ?frame_bp = 0 3483 ****************** <1> expansion: newlabel = frame_ip 3483 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,linear,undefined,,empty,empty,empty 3483 ****************** <1> expansion: ?frame_ip = 2 3483 ****************** <1> expansion: lsizeparameters = 4 3483 ****************** <1> expansion: pars_size = 0 3483 ****************** <1> expansion: ?linear = 4 3484 <1> lvar word, input_ax 3484 ****************** <1> expansion: varsize = 2 3484 ****************** <1> expansion: ofs = -2 3484 ****************** <1> expansion: newlabel = input_ax 3484 ****************** <1> expansion: labellist = input_ax,undefined,,frame_ip,undefined,,frame_bp,undefined,,linear,undefined,,empty,empty,empty 3484 ****************** <1> expansion: ?input_ax = -2 3484 ****************** <1> expansion: req = 1 3484 ****************** <1> expansion: hadvar = 1 3485 000029FA 50 <1> push ax 3486 <1> 3487 000029FB BA[EF3D] <1> mov dx, msg.cant_bp_the 3488 000029FE E86E4D <1> call putsz 3489 00002A01 F6C780 <1> test bh, 80h 3490 00002A04 740B <1> jz @F 3491 <1> 3492 00002A06 89C8 <1> mov ax, cx 3493 00002A08 40 <1> inc ax ; make it 1-based 3494 00002A09 E811F9 <1> call putordinalbyte 3495 <1> 3496 00002A0C BA[1F3E] <1> mov dx, msg.cant_bp_type_gg 3497 00002A0F EB15 <1> jmp .got_type 3498 <1> 3499 <1> @@: 3499 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.59 3499 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.60 3499 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.61 3499 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.62 3499 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.63 3499 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.64 3499 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.65 3499 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.66 3499 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.59 3499 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.60 3499 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.61 3499 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.62 3499 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.63 3499 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.64 3499 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.65 3499 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.66 3499 ****************** <1> expansion: __@@_num = 67 3500 00002A11 F6C740 <1> test bh, 40h 3501 00002A14 740D <1> jz @F 3502 <1> 3503 00002A16 89C8 <1> mov ax, cx 3504 00002A18 BF[1C3E] <1> mov di, msg.cant_bp_type_permanent.index 3505 00002A1B E8E74A <1> call hexbyte ; (0-based index) 3506 <1> 3507 00002A1E BA[073E] <1> mov dx, msg.cant_bp_type_permanent 3508 00002A21 EB03 <1> jmp .got_type 3509 <1> 3510 <1> @@: 3510 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.60 3510 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.61 3510 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.62 3510 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.63 3510 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.64 3510 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.65 3510 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.66 3510 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.67 3510 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.60 3510 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.61 3510 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.62 3510 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.63 3510 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.64 3510 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.65 3510 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.66 3510 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.67 3510 ****************** <1> expansion: __@@_num = 68 3511 00002A23 BA[F43D] <1> mov dx, msg.cant_bp_type_proceed 3512 <1> 3513 <1> .got_type: 3514 00002A26 E8464D <1> call putsz 3515 <1> 3516 00002A29 BF[363E] <1> mov di, msg.cant_bp_linear.address1 3517 00002A2C 8B4606 <1> mov ax, word [bp + ?linear + 2] 3518 <1> %ifn _PM 3519 00002A2F B400 <1> mov ah, 0 3520 <1> %endif 3521 00002A31 E8CA4A <1> call hexword 3522 00002A34 47 <1> inc di 3523 <1> ; mov di, msg.cant_bp_linear.address2 3524 00002A35 8B4604 <1> mov ax, word [bp + ?linear] 3525 00002A38 E8C34A <1> call hexword 3526 <1> 3527 00002A3B BA[2D3E] <1> mov dx, msg.cant_bp_linear 3528 00002A3E E82E4D <1> call putsz 3529 <1> 3530 00002A41 BF[6C3E] <1> mov di, msg.cant_bp_restore.value 3531 00002A44 89D8 <1> mov ax, bx 3532 00002A46 E8BC4A <1> call hexbyte 3533 <1> 3534 00002A49 BA[423E] <1> mov dx, msg.cant_bp_write 3535 00002A4C 8B46FE <1> mov ax, word [bp + ?input_ax] 3536 00002A4F F6C480 <1> test ah, 80h 3537 00002A52 7406 <1> jz @F 3538 00002A54 80E47F <1> and ah, ~80h 3539 00002A57 BA[563E] <1> mov dx, msg.cant_bp_restore 3540 <1> @@: 3540 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.61 3540 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.62 3540 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.63 3540 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.64 3540 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.65 3540 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.66 3540 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.67 3540 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.68 3540 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.61 3540 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.62 3540 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.63 3540 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.64 3540 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.65 3540 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.66 3540 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.67 3540 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.68 3540 ****************** <1> expansion: __@@_num = 69 3541 00002A5A E8124D <1> call putsz 3542 <1> 3543 00002A5D BF[DC3E] <1> mov di, msg.cant_bp_reason3.value 3544 00002A60 E8A24A <1> call hexbyte 3545 <1> 3546 00002A63 BA[713E] <1> mov dx, msg.cant_bp_reason0 3547 00002A66 80FC01 <1> cmp ah, 1 3548 00002A69 7215 <1> jb @F 3549 00002A6B BA[973E] <1> mov dx, msg.cant_bp_reason1 3550 00002A6E 7410 <1> je @F 3551 00002A70 BA[AA3E] <1> mov dx, msg.cant_bp_reason2 3552 00002A73 80FC03 <1> cmp ah, 3 3553 00002A76 7208 <1> jb @F 3554 00002A78 BA[BF3E] <1> mov dx, msg.cant_bp_reason3 3555 00002A7B 7403 <1> je @F 3556 00002A7D BA[E23E] <1> mov dx, msg.cant_bp_reasonu 3557 <1> @@: 3557 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.62 3557 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.63 3557 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.64 3557 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.65 3557 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.66 3557 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.67 3557 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.68 3557 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.69 3557 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.62 3557 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.63 3557 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.64 3557 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.65 3557 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.66 3557 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.67 3557 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.68 3557 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.69 3557 ****************** <1> expansion: __@@_num = 70 3558 00002A80 E8EC4C <1> call putsz 3559 <1> 3560 00002A83 89EC5D <1> lleave 3560 ****************** <1> expansion: 186 = 0 3560 ****************** <1> expansion: lsizeparameters = 4 3560 ****************** <1> expansion: __lframe__autoret = near 3561 00002A86 C20400 <1> lret 3561 ****************** <1> expansion: type = auto 3561 ****************** <1> expansion: type = __lframe__autoret 3561 ****************** <1> expansion: inst = retn 3561 ****************** <1> expansion: remov = 0 3561 ****************** <1> expansion: remov = 4 3562 <1> 3563 <1> 3564 <1> %if _PM 3565 <1> isdpmientry: 3566 <1> testopt [internalflags], nohook2F 3567 <1> jz .stdhook 3568 <1> mov word [reg_eip], mydpmientry 3569 <1> mov word [reg_cs], ds ; if Int2F not hooked, point to the hook here 3570 <1> ; ds => lDEBUG_DATA_ENTRY 3571 <1> .stdhook: 3572 <1> ; Run code until it returned far. 3573 <1> mov bx, word [reg_esp] 3574 <1> push ds 3575 <1> mov ds, word [reg_ss] ; ds:bx-> (16-bit) stack 3576 <1> mov si, word [bx+0] 3577 <1> mov bx, word [bx+2] ; get (16-bit) far return address 3578 <1> pop ds 3579 <1> %endif 3580 <1> ; Proceed over an instruction 3581 <1> ; INP: bx:(e)si-> where to write the breakpoint 3582 <1> ; OUT: NC if the breakpoint was hit, 3583 <1> ; ah = 0 3584 <1> ; ch = 0 3585 <1> ; d[reg_eip] adjusted 3586 <1> ; cx & 8 set if proceed point hit 3587 <1> ; (ZF only set if _BREAKPOINTS) 3588 <1> ; ZR if breakpoint after instruction was hit, 3589 <1> ; cx & 7 = 0 3590 <1> ; NZ if another breakpoint (bb) was hit, 3591 <1> ; cx & 1 set if non-pass match (actual hit), 3592 <1> ; else cx & 2 set if pass match (consider as hit first, 3593 <1> ; but dump registers next (not to silent buffer) 3594 <1> ; and then continue execution) 3595 <1> ; else cx & 4 always set, indicates any match 3596 <1> ; (including matches that should merely continue) 3597 <1> ; all pass points' counters stepped 3598 <1> ; CY if the breakpoint was not hit, 3599 <1> ; cx = 0 3600 <1> ; If [internalflags2] & dif2_gg_is_gg is set: 3601 <1> ; ah & 7Fh = status = 0 = no error, 3602 <1> ; 1 = couldn't write, 3603 <1> ; 2 = unreachable, 3604 <1> ; 3 = overwritten, al = new value 3605 <1> ; ah & 80h = set if error restoring point, 3606 <1> ; else error writing point to begin with 3607 <1> ; If that flag is clear: 3608 <1> ; Does not return if a breakpoint cannot be written 3609 <1> ; or cannot be restored, jumps to cmd3 instead. 3610 <1> proceedbreakpoint: 3611 <1> _386_PM_o32 ; mov edx, esi 3612 00002A89 89F2 <1> mov dx, si ; bx:(e)dx = segmented 3613 00002A8B E839F9 <1> call getlinear ; dx:ax = linear 3614 <1> 3615 00002A8E F606[8800]80 <1> testopt [internalflags2], dif2_tpg_keep_proceed_bp 3615 ****************** <1> expansion: adr = '[internalflags2]' 3615 ****************** <1> expansion: len = 16 3615 ****************** <1> expansion: tf = '[' 3615 ****************** <1> expansion: tb = ']' 3615 ****************** <1> expansion: adr = 'internalflags2' 3615 ****************** <1> expansion: adr = internalflags2 3616 00002A93 7507 <1> jnz @F 3617 <1> 3618 00002A95 A3[A400] <1> mov word [tpg_proceed_bp], ax 3619 <1> ; The following two instructions must be in this order. 3620 <1> ; For the non-_PM build, writing to the second word 3621 <1> ; of the breakpoint also writes to the content byte. 3622 00002A98 8916[A600] <1> mov word [tpg_proceed_bp + 2], dx 3623 <1> ; store in point 3624 <1> @@: 3624 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.63 3624 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.64 3624 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.65 3624 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.66 3624 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.67 3624 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.68 3624 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.69 3624 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.70 3624 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.63 3624 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.64 3624 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.65 3624 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.66 3624 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.67 3624 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.68 3624 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.69 3624 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.70 3624 ****************** <1> expansion: __@@_num = 71 3625 00002A9C C606[A700]CC <1> mov byte [tpg_proceed_bp + BPSIZE - 1], 0CCh 3626 <1> ; initialise content 3627 00002AA1 E8EBFE <1> call proceed_writepoint 3628 00002AA4 731F <1> jnc @F 3629 <1> 3630 00002AA6 31C9 <1> xor cx, cx ; cx = 0 in case of branching 3631 00002AA8 F606[8800]08 <1> testopt [internalflags2], dif2_gg_is_gg 3631 ****************** <1> expansion: adr = '[internalflags2]' 3631 ****************** <1> expansion: len = 16 3631 ****************** <1> expansion: tf = '[' 3631 ****************** <1> expansion: tb = ']' 3631 ****************** <1> expansion: adr = 'internalflags2' 3631 ****************** <1> expansion: adr = internalflags2 3632 <1> ; is it from gg ? 3633 00002AAD 7403E98000 <1> jnz .return_CY ; (CY) yes, return to gg 3634 <1> 3635 00002AB2 80E47F <1> and ah, ~80h 3636 00002AB5 FF36[A600] <1> push word [tpg_proceed_bp + 2] 3637 00002AB9 FF36[A400] <1> push word [tpg_proceed_bp] 3638 00002ABD B700 <1> mov bh, 0 3639 00002ABF E827FF <1> call display_breakpoint_failure 3640 00002AC2 E91ED7 <1> jmp cmd3 3641 <1> 3642 <1> @@: 3642 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.64 3642 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.65 3642 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.66 3642 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.67 3642 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.68 3642 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.69 3642 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.70 3642 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.71 3642 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.64 3642 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.65 3642 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.66 3642 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.67 3642 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.68 3642 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.69 3642 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.70 3642 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.71 3642 ****************** <1> expansion: __@@_num = 72 3643 <1> %if _BREAKPOINTS 3644 00002AC5 E87200 <1> call run_with_bb 3645 <1> %else 3646 <1> call run 3647 <1> xor ax, ax 3648 <1> %endif 3649 00002AC8 50 <1> push ax 3650 <1> 3651 <1> ; It's important to keep the linear address saved inbetween, 3652 <1> ; even though we save by value (as opposed to DEBUG/X G's saving 3653 <1> ; of the reference) because the selector that we used for the 3654 <1> ; access might now be invalid or (worse) point elsewhere, or 3655 <1> ; a mode change might have occured. (The latter is sometimes 3656 <1> ; handled by a specific kludge in DEBUG/X, but not always.) 3657 <1> 3658 00002AC9 E8B5FE <1> call proceed_writepoint_restore 3659 00002ACC 7326 <1> jnc @F 3660 <1> 3661 00002ACE 80CC80 <1> or ah, 80h ; mark error during restoration 3662 00002AD1 F606[8800]08 <1> testopt [internalflags2], dif2_gg_is_gg 3662 ****************** <1> expansion: adr = '[internalflags2]' 3662 ****************** <1> expansion: len = 16 3662 ****************** <1> expansion: tf = '[' 3662 ****************** <1> expansion: tb = ']' 3662 ****************** <1> expansion: adr = 'internalflags2' 3662 ****************** <1> expansion: adr = internalflags2 3663 <1> ; is it from gg ? 3664 00002AD6 7559 <1> jnz .return_CY_pop_cx ; (CY) yes, return to gg 3665 <1> 3666 <1> %if _PM 3667 <1> call getsegmented_resetmode 3668 <1> %endif 3669 <1> 3670 00002AD8 50 <1> push ax 3671 00002AD9 E8024C <1> call silence_dump 3672 00002ADC 58 <1> pop ax 3673 <1> 3674 00002ADD E8AAF4 <1> call put_deferred_message_silent 3675 <1> 3676 00002AE0 FF36[A600] <1> push word [tpg_proceed_bp + 2] 3677 00002AE4 FF36[A400] <1> push word [tpg_proceed_bp] 3678 00002AE8 8A1E[A700] <1> mov bl, [tpg_proceed_bp + BPSIZE - 1] 3679 00002AEC B700 <1> mov bh, 0 3680 00002AEE E8F8FE <1> call display_breakpoint_failure 3681 00002AF1 E9EFD6 <1> jmp cmd3 3682 <1> 3683 <1> @@: 3683 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.65 3683 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.66 3683 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.67 3683 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.68 3683 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.69 3683 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.70 3683 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.71 3683 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.72 3683 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.65 3683 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.66 3683 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.67 3683 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.68 3683 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.69 3683 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.70 3683 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.71 3683 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.72 3683 ****************** <1> expansion: __@@_num = 73 3684 <1> %if _PM 3685 <1> call getsegmented_resetmode 3686 <1> %endif 3687 00002AF4 E848F9 <1> call get_cseip_of_possible_breakpoint 3688 <1> ; dx:ax = linear address 1 before cs:(e)ip 3689 00002AF7 7236 <1> jc .return_CY_pop_cx_ax_zero 3690 <1> 3691 <1> %if _PM 3692 <1> cmp word [tpg_proceed_bp + 2], dx 3693 <1> %else 3694 00002AF9 84F6 <1> test dh, dh ; (bits 24 to 31 set. shouldn't happen) 3695 00002AFB 7519 <1> jnz .not_pp 3696 00002AFD 3816[A600] <1> cmp byte [tpg_proceed_bp + 2], dl 3697 <1> %endif 3698 00002B01 7513 <1> jne .not_pp 3699 00002B03 3906[A400] <1> cmp word [tpg_proceed_bp], ax 3700 00002B07 750D <1> jne .not_pp ; is unexpected (not behind the breakpoint) --> 3701 <1> 3702 <1> ; Need to check this here, because we have to 3703 <1> ; decrement (e)ip if the breakpoint was hit. 3704 00002B09 813E[DE02][D445] <1> cmp word [run_int], int3msg 3705 00002B0F 7505 <1> jne .not_pp ; is unexpected (not returned by interrupt 03h) --> 3706 00002B11 59 <1> pop cx 3707 00002B12 80C908 <1> or cl, 8 ; set flag: pp hit 3708 <1> 3709 00002B15 A8 <1> db __TEST_IMM8 ; (skip pop cx) 3710 <1> .not_pp: 3711 00002B16 59 <1> pop cx 3712 <1> 3713 00002B17 E319 <1> jcxz .return_CY ; bb hit/pass/nonpass or pp hit ? if no --> 3714 <1> 3715 00002B19 E881F4 <1> call adjust_cseip_after_breakpoint 3716 <1> ; decrement (e)ip to point at the instruction 3717 <1> 3718 00002B1C F6C101 <1> test cl, 1 ; bb hit ? 3719 00002B1F 750A <1> jnz .return ; yes, return (NC, NZ) --> 3720 <1> 3721 00002B21 F6C108 <1> test cl, 8 ; proceed point matched ? 3722 00002B24 7506 <1> jnz @F ; yes --> 3723 <1> 3724 00002B26 800E[8800]80 <1> setopt [internalflags2], dif2_tpg_keep_proceed_bp 3724 ****************** <1> expansion: adr = '[internalflags2]' 3724 ****************** <1> expansion: len = 16 3724 ****************** <1> expansion: tf = '[' 3724 ****************** <1> expansion: tb = ']' 3724 ****************** <1> expansion: adr = 'internalflags2' 3724 ****************** <1> expansion: adr = internalflags2 3725 <1> ; flag that we should keep this proceed point 3726 <1> ; (NC, NZ) 3727 <1> .return: 3728 00002B2B C3 <1> retn 3729 <1> 3730 <1> @@: 3730 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.66 3730 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.67 3730 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.68 3730 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.69 3730 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.70 3730 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.71 3730 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.72 3730 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.73 3730 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.66 3730 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.67 3730 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.68 3730 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.69 3730 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.70 3730 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.71 3730 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.72 3730 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.73 3730 ****************** <1> expansion: __@@_num = 74 3731 <1> ; return with ax = 0, NC, ZR 3732 <1> ; 3733 <1> ; (hit proceed point, no hit bb (possibly pass/non-pass bb) 3734 00002B2C 31C0 <1> xor ax, ax ; ah = 0 (NC, ZR) 3735 00002B2E C3 <1> retn 3736 <1> 3737 <1> ; set ax = 0, pop cx, CY 3738 <1> .return_CY_pop_cx_ax_zero: 3739 00002B2F 31C0 <1> xor ax, ax 3740 <1> 3741 <1> ; pop cx, CY (preserve ax) 3742 <1> .return_CY_pop_cx: 3743 00002B31 59 <1> pop cx 3744 <1> .return_CY: 3745 00002B32 F9 <1> stc 3746 00002B33 C3 <1> retn 3747 <1> 3748 <1> 3749 <1> ; PPX - Get next byte in instruction stream. 3750 <1> ; INP: bx:(e)si-> next byte 3751 <1> ; OUT: al = next byte 3752 <1> ; (e)si incremented 3753 <1> pp16: 3754 <1> %if _PM 3755 <1> call testattrhigh 3756 <1> %endif 3757 00002B34 1E <1> push ds 3758 00002B35 8EDB <1> mov ds, bx 3759 <1> %if _PM 3760 <1> jz .16 3761 <1> a32 ; use esi for lodsb 3762 <1> .16: 3763 <1> %endif 3764 00002B37 AC <1> lodsb 3765 00002B38 1F <1> pop ds 3766 00002B39 C3 <1> retn 3767 <1> ; begin loop over instruction bytes. 3768 <1> 3769 <1> 3770 <1> %if _BREAKPOINTS 3771 <1> ; Run with bb breakpoints 3772 <1> ; 3773 <1> ; OUT: CY if another breakpoint (not a bb one) or trace hit, 3774 <1> ; cx = 0 3775 <1> ; NC if a bb breakpoint hit, 3776 <1> ; cx & 1 set if it is an actual hit 3777 <1> ; else cx & 2 set if it is a pass match, 3778 <1> ; else it is a non-pass non-match 3779 <1> ; (cx & 4 always set) 3780 <1> run_with_bb: 3781 00002B3A F606[8800]08 <1> testopt [internalflags2], dif2_gg_is_gg 3781 ****************** <1> expansion: adr = '[internalflags2]' 3781 ****************** <1> expansion: len = 16 3781 ****************** <1> expansion: tf = '[' 3781 ****************** <1> expansion: tb = ']' 3781 ****************** <1> expansion: adr = 'internalflags2' 3781 ****************** <1> expansion: adr = internalflags2 3782 00002B3F 750C <1> jnz .no_bb 3783 <1> 3784 00002B41 F606[8700]C0 <1> testopt [internalflags], tt_no_bb | tt_no_bb_first 3784 ****************** <1> expansion: adr = '[internalflags]' 3784 ****************** <1> expansion: len = 15 3784 ****************** <1> expansion: tf = '[' 3784 ****************** <1> expansion: tb = ']' 3784 ****************** <1> expansion: adr = 'internalflags' 3784 ****************** <1> expansion: adr = internalflags 3785 00002B46 740C <1> jz @F 3786 <1> 3787 00002B48 8026[8700]7F <1> clropt [internalflags], tt_no_bb_first 3787 ****************** <1> expansion: adr = '[internalflags]' 3787 ****************** <1> expansion: len = 15 3787 ****************** <1> expansion: tf = '[' 3787 ****************** <1> expansion: tb = ']' 3787 ****************** <1> expansion: adr = 'internalflags' 3787 ****************** <1> expansion: adr = internalflags 3788 <1> 3789 <1> .no_bb: 3790 00002B4D E87400 <1> call run 3791 00002B50 31C9 <1> xor cx, cx 3792 00002B52 F9 <1> stc 3793 00002B53 C3 <1> retn 3794 <1> 3795 <1> @@: 3795 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.67 3795 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.68 3795 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.69 3795 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.70 3795 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.71 3795 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.72 3795 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.73 3795 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.74 3795 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.67 3795 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.68 3795 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.69 3795 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.70 3795 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.71 3795 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.72 3795 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.73 3795 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.74 3795 ****************** <1> expansion: __@@_num = 75 3796 <1> .gg5: 3797 <1> %if _BREAKPOINTS 3798 00002B54 E8EEF5 <1> call bb_writepoints_init_reset 3799 <1> %endif 3800 <1> 3801 00002B57 F606[8800]10 <1> testopt [internalflags2], dif2_gg_first_detected 3801 ****************** <1> expansion: adr = '[internalflags2]' 3801 ****************** <1> expansion: len = 16 3801 ****************** <1> expansion: tf = '[' 3801 ****************** <1> expansion: tb = ']' 3801 ****************** <1> expansion: adr = 'internalflags2' 3801 ****************** <1> expansion: adr = internalflags2 3802 00002B5C 7436 <1> jz .only_run ; easy case, no cseip point detected --> 3803 <1> 3804 <1> 3805 <1> ; Enter special mode: Restore cseip breakpoint content. 3806 00002B5E 800E[8800]02 <1> setopt [internalflags2], dif2_gg_skip_non_cseip 3806 ****************** <1> expansion: adr = '[internalflags2]' 3806 ****************** <1> expansion: len = 16 3806 ****************** <1> expansion: tf = '[' 3806 ****************** <1> expansion: tb = ']' 3806 ****************** <1> expansion: adr = 'internalflags2' 3806 ****************** <1> expansion: adr = internalflags2 3807 <1> 3808 00002B63 83EC20 <1> sub sp, _NUM_B_BP * 2 3809 00002B66 89E5 <1> mov bp, sp ; -> error info 3810 <1> 3811 00002B68 B91000 <1> mov cx, _NUM_B_BP ; = index above last one to restore 3812 00002B6B E88FF6 <1> call bb_restorepoints_and_init_error_info 3813 00002B6E 7317 <1> jnc @F ; no error ? --> 3814 <1> 3815 <1> ; Error in bb_restorepoints. Try to restore other bb. 3816 <1> 3817 <1> ; Exit special mode: Handle non-cseip breakpoints again. 3818 00002B70 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 3818 ****************** <1> expansion: adr = '[internalflags2]' 3818 ****************** <1> expansion: len = 16 3818 ****************** <1> expansion: tf = '[' 3818 ****************** <1> expansion: tb = ']' 3818 ****************** <1> expansion: adr = 'internalflags2' 3818 ****************** <1> expansion: adr = internalflags2 3819 <1> 3820 <1> ; Enter special mode: Skip cseip breakpoints. 3821 00002B75 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 3821 ****************** <1> expansion: adr = '[internalflags2]' 3821 ****************** <1> expansion: len = 16 3821 ****************** <1> expansion: tf = '[' 3821 ****************** <1> expansion: tb = ']' 3821 ****************** <1> expansion: adr = 'internalflags2' 3821 ****************** <1> expansion: adr = internalflags2 3822 <1> 3823 <1> ; As we already tried to restore all cseip bb points, 3824 <1> ; here we skip these in the bb_restorepoints call. 3825 00002B7A B91000 <1> mov cx, _NUM_B_BP 3826 00002B7D E880F6 <1> call bb_restorepoints 3827 <1> 3828 <1> ; Exit special mode: No longer skip cseip breakpoints. 3829 00002B80 8026[8800]FB <1> clropt [internalflags2], dif2_gg_skip_cseip 3829 ****************** <1> expansion: adr = '[internalflags2]' 3829 ****************** <1> expansion: len = 16 3829 ****************** <1> expansion: tf = '[' 3829 ****************** <1> expansion: tb = ']' 3829 ****************** <1> expansion: adr = 'internalflags2' 3829 ****************** <1> expansion: adr = internalflags2 3830 <1> 3831 <1> ; The failure that led us here is already noted in the info. 3832 00002B85 EB1D <1> jmp .bb_exit 3833 <1> 3834 <1> 3835 <1> @@: 3835 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.68 3835 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.69 3835 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.70 3835 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.71 3835 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.72 3835 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.73 3835 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.74 3835 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.75 3835 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.68 3835 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.69 3835 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.70 3835 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.71 3835 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.72 3835 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.73 3835 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.74 3835 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.75 3835 ****************** <1> expansion: __@@_num = 76 3836 <1> ; Success! Now discard the reserved error info. 3837 00002B87 83C420 <1> add sp, _NUM_B_BP * 2 3838 <1> 3839 <1> ; Exit special mode, do not skip non-cseip breakpoints anymore. 3840 00002B8A 8026[8800]FD <1> clropt [internalflags2], dif2_gg_skip_non_cseip 3840 ****************** <1> expansion: adr = '[internalflags2]' 3840 ****************** <1> expansion: len = 16 3840 ****************** <1> expansion: tf = '[' 3840 ****************** <1> expansion: tb = ']' 3840 ****************** <1> expansion: adr = 'internalflags2' 3840 ****************** <1> expansion: adr = internalflags2 3841 <1> 3842 <1> ; Enter special mode: Skip matching/restoring cseip breakpoint. 3843 00002B8F 800E[8800]04 <1> setopt [internalflags2], dif2_gg_skip_cseip 3843 ****************** <1> expansion: adr = '[internalflags2]' 3843 ****************** <1> expansion: len = 16 3843 ****************** <1> expansion: tf = '[' 3843 ****************** <1> expansion: tb = ']' 3843 ****************** <1> expansion: adr = 'internalflags2' 3843 ****************** <1> expansion: adr = internalflags2 3844 <1> 3845 <1> .only_run: 3846 00002B94 E82D00 <1> call run 3847 <1> .after_run: 3848 <1> 3849 <1> %if _BREAKPOINTS 3850 00002B97 83EC20 <1> sub sp, _NUM_B_BP * 2 3851 00002B9A 89E5 <1> mov bp, sp 3852 <1> 3853 00002B9C B91000 <1> mov cx, _NUM_B_BP ; = index above last one to restore 3854 00002B9F E85BF6 <1> call bb_restorepoints_and_init_error_info 3855 00002BA2 7308 <1> jnc @F 3856 <1> 3857 <1> .bb_exit: 3858 00002BA4 B8FFFF <1> mov ax, -1 3859 00002BA7 50 <1> push ax ; (unused: ax error info) 3860 00002BA8 50 <1> push ax ; cx error point index, -1 = invalid 3861 <1> 3862 00002BA9 E9B6F5 <1> jmp bb_restorepoints_exit 3863 <1> 3864 <1> 3865 <1> @@: 3865 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.69 3865 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.70 3865 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.71 3865 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.72 3865 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.73 3865 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.74 3865 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.75 3865 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.76 3865 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.69 3865 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.70 3865 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.71 3865 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.72 3865 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.73 3865 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.74 3865 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.75 3865 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.76 3865 ****************** <1> expansion: __@@_num = 77 3866 00002BAC 83C420 <1> add sp, _NUM_B_BP * 2 3867 <1> 3868 00002BAF E8FCF3 <1> call bb_check_hit 3869 00002BB2 89C1 <1> mov cx, ax 3870 00002BB4 9C <1> pushf 3871 <1> ; Clear all special modes. Stop specialcasing cseip breakpoint. 3872 <1> ; 3873 <1> ; This resets all the special flags for subsequent calls. 3876 00002BB5 8026[8800]E8 <1> clropt [internalflags2], dif2_gg_is_first | dif2_gg_first_detected | dif2_gg_skip_cseip | dif2_gg_skip_non_cseip 3876 ****************** <1> expansion: adr = '[internalflags2]' 3876 ****************** <1> expansion: len = 16 3876 ****************** <1> expansion: tf = '[' 3876 ****************** <1> expansion: tb = ']' 3876 ****************** <1> expansion: adr = 'internalflags2' 3876 ****************** <1> expansion: adr = internalflags2 3877 00002BBA 9D <1> popf 3878 00002BBB 7302 <1> jnc @F 3879 <1> 3880 00002BBD F9 <1> stc 3881 <1> ; cx = flags as returned by bb_check_hit 3882 00002BBE C3 <1> retn 3883 <1> 3884 <1> @@: 3884 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.70 3884 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.71 3884 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.72 3884 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.73 3884 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.74 3884 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.75 3884 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.76 3884 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.77 3884 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.70 3884 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.71 3884 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.72 3884 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.73 3884 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.74 3884 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.75 3884 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.76 3884 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.77 3884 ****************** <1> expansion: __@@_num = 78 3885 00002BBF E8DBF3 <1> call adjust_cseip_after_breakpoint 3886 <1> ; re-execute (restored) opcode one byte in front of this 3887 00002BC2 F8 <1> clc ; (NC) 3888 <1> ; cx = flags as returned by bb_check_hit 3889 00002BC3 C3 <1> retn 3890 <1> %endif 3891 <1> %endif 3892 <1> 3893 <1> 3894 <1> ; Run - Start up the running program. 3895 <1> ; 3896 <1> ; INP: b[eqflag], a[eqladdr] = address given behind '=' for command 3897 <1> ; w[pspdbe] = process of debuggee 3898 <1> ; [run2324] = interrupt handlers 23h and 24h to set 3899 <1> ; values for registers in d[reg_eax] etc 3900 <1> ; OUT: (_DEBUG) [intsave] updated 3901 <1> ; d[reg_eax] etc updated 3902 <1> ; w[run_int]-> message of how execution returned 3903 <1> ; UP, EI, high word efl = 0, es = ds = ss 3904 <1> ; CHG: all 3905 <1> ; STT: ds = ss 3906 <1> ; UP 3907 <1> ; (INP:es ignored) 3908 <1> run: 3909 <1> %if _PM 3910 <1> call getsegmented_resetmode ; Cautionary. Probably not needed. 3911 <1> %endif 3915 00002BC4 8126[8800]7FF0 <1> clropt [internalflags2], dif2_tpg_have_bp | dif2_tpg_adjusted_cseip | dif2_tpg_do_not_adjust | dif2_bp_failure | dif2_tpg_keep_proceed_bp, 1 3915 ****************** <1> expansion: adr = '[internalflags2]' 3915 ****************** <1> expansion: len = 16 3915 ****************** <1> expansion: tf = '[' 3915 ****************** <1> expansion: tb = ']' 3915 ****************** <1> expansion: adr = 'internalflags2' 3915 ****************** <1> expansion: adr = internalflags2 3916 00002BCA E89C03 <1> call seteq ; set CS:IP to '=' address 3917 00002BCD 8B1E[6402] <1> mov bx, word [pspdbe] 3918 00002BD1 E84F2F <1> call setpsp ; set debuggee's PSP 3919 00002BD4 E8833B <1> call setint2324 ; set debuggee's int 23/24 3920 <1> %if _DEBUG ; set this copy's divide/trace/breakpoint ints 3921 <1> %if _TSR || _BOOTLDR 3922 <1> ..@patch_tsr_quit_run: 3923 00002BD7 A8 <1> db __TEST_IMM8 3924 00002BD8 36 <1> db __REL8__(.skipints) 3925 <1> %endif 3926 00002BD9 51 <1> push cx 3927 00002BDA 56 <1> push si 3928 00002BDB 50 <1> push ax 3929 00002BDC 52 <1> push dx 3930 <1> %if _BOOTLDR 3931 00002BDD 06 <1> push es 3932 00002BDE 53 <1> push bx 3933 <1> %endif 3934 00002BDF B90700 <1> mov cx, inttab_number 3935 00002BE2 BE[F402] <1> mov si, inttab 3936 <1> .intloop: 3937 00002BE5 AC <1> lodsb 3938 00002BE6 92 <1> xchg ax, dx 3939 00002BE7 AD <1> lodsw ; get address 3940 00002BE8 92 <1> xchg ax, dx 3941 <1> %if _BOOTLDR 3942 00002BE9 F606[8500]40 <1> testopt [internalflags], nodosloaded 3942 ****************** <1> expansion: adr = '[internalflags]' 3942 ****************** <1> expansion: len = 15 3942 ****************** <1> expansion: tf = '[' 3942 ****************** <1> expansion: tb = ']' 3942 ****************** <1> expansion: adr = 'internalflags' 3942 ****************** <1> expansion: adr = internalflags 3943 00002BEE 7413 <1> jz .int21_25 3944 00002BF0 31DB <1> xor bx, bx 3945 00002BF2 8EC3 <1> mov es, bx 3946 00002BF4 88C3 <1> mov bl, al 3947 00002BF6 01DB <1> add bx, bx 3948 00002BF8 01DB <1> add bx, bx 3949 00002BFA 268917 <1> mov word [ es:bx ], dx 3950 00002BFD 268C5F02 <1> mov word [ es:bx+2 ], ds ; => lDEBUG_DATA_ENTRY 3951 00002C01 EB04 <1> jmp short .intset 3952 <1> .int21_25: 3953 <1> %endif 3954 00002C03 B425 <1> mov ah, 25h ; set interrupt vector 3955 00002C05 CD21 <1> int 21h ; dx => lDEBUG_DATA_ENTRY 3956 <1> .intset: 3957 00002C07 E2DC <1> loop .intloop 3958 <1> %if _BOOTLDR 3959 00002C09 5B <1> pop bx 3960 00002C0A 07 <1> pop es 3961 <1> %endif 3962 00002C0B 5A <1> pop dx 3963 00002C0C 58 <1> pop ax 3964 00002C0D 5E <1> pop si 3965 00002C0E 59 <1> pop cx 3966 <1> .skipints: 3967 <1> %endif 3968 <1> 3969 <1> .2: 3970 00002C0F 8926[6002] <1> mov word [run_sp], sp ; save stack position 3971 00002C13 2B26[6202] <1> sub sp, word [spadjust] 3972 00002C17 89262E00 <1> mov word [SPSAV], sp 3973 00002C1B FA <1> cli 3974 00002C1C BC[4003] <1> mov sp, regs 3975 <1> %ifn _ONLY386 3976 00002C1F EB15 <1> _386_jmps .386 ; --> 3976 ****************** <1> expansion: entry = 11295 3976 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295 3976 ****************** <1> expansion: entry = 11296 3976 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296 3976 ****************** <1> expansion: entry = 11297 3977 00002C21 58 <1> pop ax 3978 00002C22 58 <1> pop ax ; discard all high words 3979 00002C23 5B <1> pop bx 3980 00002C24 58 <1> pop ax 3981 00002C25 59 <1> pop cx 3982 00002C26 58 <1> pop ax 3983 00002C27 5A <1> pop dx 3984 00002C28 58 <1> pop ax 3985 00002C29 58 <1> pop ax ; we'll get esp later 3986 00002C2A 58 <1> pop ax 3987 00002C2B 5D <1> pop bp 3988 00002C2C 58 <1> pop ax 3989 00002C2D 5E <1> pop si 3990 00002C2E 58 <1> pop ax 3991 00002C2F 5F <1> pop di 3992 00002C30 58 <1> pop ax 3993 00002C31 07 <1> pop es ; temporary load DS value into ES (to make sure it is valid) 3994 00002C32 58 <1> pop ax ; discard high words of segment registers 3995 00002C33 07 <1> pop es ; now load the true value for ES 3996 <1> %endif 3997 <1> %ifn _ONLYNON386 3998 <1> %ifn _ONLY386 3999 00002C34 EB1B <1> jmp short .common 4000 <1> %endif 4001 <1> 4002 <1> .386: 4003 <1> cpu 386 4003 ****************** <1> expansion: __CPU__ = [cpu 386] 4004 00002C36 6658 <1> pop eax 4005 00002C38 665B <1> pop ebx 4006 00002C3A 6659 <1> pop ecx 4007 00002C3C 665A <1> pop edx 4008 00002C3E 58 <1> pop ax 4009 00002C3F 58 <1> pop ax ; we'll get esp later 4010 00002C40 665D <1> pop ebp 4011 00002C42 665E <1> pop esi 4012 00002C44 665F <1> pop edi 4013 00002C46 07 <1> pop es ; temporary load DS value into ES (to make sure it is valid) 4014 00002C47 58 <1> pop ax ; discard high words of segment registers 4015 00002C48 07 <1> pop es ; now load the true value for ES 4016 <1> ; pop ax 4017 <1> ; pop ax ; get ss later 4018 <1> ; pop ax 4019 <1> ; pop ax ; get cs later 4020 <1> ; pop ax 4021 00002C49 83C40A <1> add sp, byte 5*2 4022 00002C4C 0FA1 <1> pop fs 4023 00002C4E 58 <1> pop ax 4024 00002C4F 0FA9 <1> pop gs 4025 <1> cpu 8086 4025 ****************** <1> expansion: __CPU__ = [cpu 8086] 4026 <1> .common: 4027 <1> %endif 4028 00002C51 A1[4003] <1> mov ax, word [reg_eax] ; restore ax (used to discard words) 4029 00002C54 8E16[6803] <1> mov ss, word [reg_ss] 4030 <1> %if _ONLYNON386 4031 <1> mov sp, word [reg_esp] 4032 <1> %else 4033 <1> ..@patch_no386_ds: 4034 00002C58 66 <1> o32 ; mov esp, dword [reg_esp] 4035 00002C59 8B26[5003] <1> mov sp, word [reg_esp] ; restore program stack 4036 <1> %endif 4037 00002C5D C606[9402]00 <1> mov byte [bInDbg], 0 4038 00002C62 66 <1> _386_o32 ; push dword [reg_efl] 4038 ****************** <1> expansion: entry = 11362 4038 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362 4038 ****************** <1> expansion: entry = 11363 4039 00002C63 FF36[7C03] <1> push word [reg_efl] 4040 00002C67 66 <1> _386_o32 ; push dword [reg_cs] ; high word is zero 4040 ****************** <1> expansion: entry = 11367 4040 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367 4040 ****************** <1> expansion: entry = 11368 4041 00002C68 FF36[6C03] <1> push word [reg_cs] 4042 00002C6C 66 <1> _386_o32 ; push dword [reg_eip] 4042 ****************** <1> expansion: entry = 11372 4042 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372 4042 ****************** <1> expansion: entry = 11373 4043 00002C6D FF36[7803] <1> push word [reg_eip] 4044 00002C71 F606[7D03]02 <1> test byte [reg_efl+1], 2 ; IF set? 4045 00002C76 8E1E[6003] <1> mov ds, word [reg_ds] ; restore ds 4046 00002C7A 7401 <1> jz .di 4047 00002C7C FB <1> sti ; required for ring3 protected mode if IOPL==0 4048 <1> .di: 4049 <1> %if _ONLYNON386 4050 <1> iret 4051 <1> %else 4052 <1> ..@patch_no386_iret: 4053 00002C7D 66 <1> o32 ; iretd 4054 00002C7E CF <1> iret ; jump to program 4055 <1> %endif 4056 <1> 4057 <1> ; The byte at ..@patch_no386_ds will be adjusted to a ds prefix on non-386 processors. 4058 <1> ; This does not change the following instruction's behaviour (aside from changing it 4059 <1> ; to a 16-bit instruction as intended) and insures that sp is set in the instruction 4060 <1> ; right behind the instruction that sets ss. 4061 <1> 4062 <1> ; The byte at ..@patch_no386_iret will be adjusted to an iret instruction on non-386 processors. 4063 <1> ; This avoids the NOP that would be written there if _386_o32 was used, because the iret 4064 <1> ; should follow right behind the sti instruction. 4065 <1> 4066 <1> 4067 <1> usesection lDEBUG_DATA_ENTRY 4067 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 4068 <1> 4069 <1> %if _CATCHINT08 4070 <1> intr8: 4071 00004DB4 9C <1> pushf 4072 00004DB5 2EFF1E[1C03] <1> call far [cs:intr8_original] 4073 00004DBA 9C <1> pushf 4074 00004DBB 53 <1> push bx 4075 00004DBC 1E <1> push ds 4076 <1> 4077 00004DBD 0E <1> push cs 4078 00004DBE 1F <1> pop ds 4079 <1> 4080 00004DBF 803E[9402]00 <1> cmp byte [bInDbg], 0 ; in debugger ? 4081 00004DC4 754C <1> jne .reset ; yes --> 4082 <1> 4083 00004DC6 F606[ED02]04 <1> testopt [serial_flags], sf_double_ctrl_c 4083 ****************** <1> expansion: adr = '[serial_flags]' 4083 ****************** <1> expansion: len = 14 4083 ****************** <1> expansion: tf = '[' 4083 ****************** <1> expansion: tb = ']' 4083 ****************** <1> expansion: adr = 'serial_flags' 4083 ****************** <1> expansion: adr = serial_flags 4084 00004DCB 7408 <1> jz @F 4085 <1> 4086 00004DCD C706[DE02][6446] <1> mov word [run_int], runint_ctrlc_msg 4087 00004DD3 EB38 <1> jmp @FF 4088 <1> 4089 <1> @@: 4089 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.71 4089 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.72 4089 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.73 4089 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.74 4089 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.75 4089 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.76 4089 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.77 4089 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.78 4089 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.71 4089 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.72 4089 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.73 4089 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.74 4089 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.75 4089 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.76 4089 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.77 4089 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.78 4089 ****************** <1> expansion: __@@_num = 79 4090 00004DD5 BB4000 <1> mov bx, 40h 4091 00004DD8 8EDB <1> mov ds, bx 4092 00004DDA F606170004 <1> test byte [17h], 4 ; CTRL currently pressed ? 4093 00004DDF 0E <1> push cs 4094 00004DE0 1F <1> pop ds 4095 00004DE1 742F <1> jz .reset ; no --> 4096 <1> 4097 00004DE3 FF06[E802] <1> inc word [intr8_counter] 4098 00004DE7 833E[E802]5A <1> cmp word [intr8_counter], 18 * 5 ; ca 5 seconds 4099 00004DEC 7229 <1> jb .return 4100 <1> 4101 00004DEE C706[DE02][0746] <1> mov word [run_int], int8msg 4102 00004DF4 F606[7D00]80 <1> testopt [options], int8_disable_serial 4102 ****************** <1> expansion: adr = '[options]' 4102 ****************** <1> expansion: len = 9 4102 ****************** <1> expansion: tf = '[' 4102 ****************** <1> expansion: tb = ']' 4102 ****************** <1> expansion: adr = 'options' 4102 ****************** <1> expansion: adr = options 4103 00004DF9 7412 <1> jz @F 4104 00004DFB F606[7D00]40 <1> testopt [options], enable_serial 4104 ****************** <1> expansion: adr = '[options]' 4104 ****************** <1> expansion: len = 9 4104 ****************** <1> expansion: tf = '[' 4104 ****************** <1> expansion: tb = ']' 4104 ****************** <1> expansion: adr = 'options' 4104 ****************** <1> expansion: adr = options 4105 00004E00 740B <1> jz @F 4106 <1> 4107 00004E02 8026[7D00]BF <1> clropt [options], enable_serial 4107 ****************** <1> expansion: adr = '[options]' 4107 ****************** <1> expansion: len = 9 4107 ****************** <1> expansion: tf = '[' 4107 ****************** <1> expansion: tb = ']' 4107 ****************** <1> expansion: adr = 'options' 4107 ****************** <1> expansion: adr = options 4108 00004E07 C706[DE02][2C46] <1> mov word [run_int], int8_kbd_msg 4109 <1> 4110 <1> @@: 4110 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.72 4110 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.73 4110 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.74 4110 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.75 4110 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.76 4110 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.77 4110 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.78 4110 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.79 4110 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.72 4110 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.73 4110 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.74 4110 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.75 4110 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.76 4110 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.77 4110 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.78 4110 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.79 4110 ****************** <1> expansion: __@@_num = 80 4111 00004E0D 1F <1> pop ds 4112 00004E0E 5B <1> pop bx 4113 00004E0F 9D <1> popf 4114 00004E10 EB64 <1> jmp intrtn 4115 <1> 4116 <1> .reset: 4117 00004E12 8326[E802]00 <1> and word [intr8_counter], 0 4118 <1> .return: 4119 00004E17 1F <1> pop ds 4120 00004E18 5B <1> pop bx 4121 00004E19 9D <1> popf 4122 00004E1A CF <1> iret 4123 <1> %endif 4124 <1> 4125 <1> 4126 <1> ; Interrupt 22h (program termination) handler. 4127 <1> int22: 4128 00004E1B FA <1> cli 4129 <1> .cleartraceflag: 4130 00004E1C 0E <1> push cs 4131 00004E1D 1F <1> pop ds 4132 00004E1E 0E <1> push cs 4133 00004E1F 17 <1> pop ss 4134 00004E20 8B26[6002] <1> mov sp, word [run_sp] ; restore running stack 4135 00004E24 C706[DE02][E046] <1> mov word [run_int], progtrm ; set interrupt message 4136 00004E2A C706[E002][1B03] <1> mov word [lastcmd], dmycmd ; disable T/P/G auto-repeat 4137 <1> %if _PM 4138 <1> push word [InDosSegm] 4139 <1> pop word [pInDOS+2] 4140 <1> %if _USESDA 4141 <1> push word [SDASegm] 4142 <1> pop word [pSDA+2] ; return both values to RM addresses 4143 <1> %endif 4144 <1> push word [auxbuff_segment] 4145 <1> pop word [auxbuff_segorsel] 4146 <1> clropt [internalflags], protectedmode ; reset PM flag 4147 <1> %endif 4148 00004E30 E85CFC[DF2C] <1> call entry_to_code_seg, intrtn1_code 4149 <1> ; jump to register saving routine 4150 <1> 4151 <1> 4152 <1> ; Interrupt 00h (divide error) handler. 4153 00004E35 2EC706[DE02][A245] <1> intr0: mov word [cs:run_int], int0msg ; remember interrupt type 4154 00004E3C EB38 <1> jmp short intrtn ; jump to register saving routine 4155 <1> 4156 <1> 4157 <1> ; Interrupt 01h (single-step interrupt) handler. 4158 00004E3E 2EC706[DE02][B145] <1> intr1: mov word [cs:run_int], int1msg ; remember interrupt type 4159 00004E45 EB2F <1> jmp short intrtn ; jump to register saving routine 4160 <1> 4161 <1> 4162 <1> ; Interrupt 03h (breakpoint interrupt) handler. 4163 00004E47 2EC706[DE02][D445] <1> intr3: mov word [cs:run_int], int3msg ; remember interrupt type 4164 <1> %if _CATCHINT06 4165 00004E4E EB26 <1> jmp short intrtn ; jump to register saving routine 4166 <1> 4167 <1> 4168 <1> ; Interrupt 06h (invalid opcode) handler. 4169 00004E50 2EC706[DE02][F645] <1> intr6: mov word [cs:run_int], int6msg ; remember interrupt type 4170 <1> %endif 4171 <1> %if _CATCHINT18 4172 00004E57 EB1D <1> jmp short intrtn ; jump to register saving routine 4173 <1> 4174 <1> 4175 <1> ; Interrupt 18h (diskless boot hook) handler. 4176 00004E59 2EC706[DE02][8B46] <1> intr18: mov word [cs:run_int], int18msg ; remember interrupt type 4177 <1> %endif 4178 <1> %if _CATCHINT19 4179 00004E60 EB14 <1> jmp short intrtn ; jump to register saving routine 4180 <1> 4181 <1> 4182 <1> ; Interrupt 19h (boot load) handler. 4183 00004E62 2EC706[DE02][A746] <1> intr19: mov word [cs:run_int], int19msg ; remember interrupt type 4184 00004E69 2EC706[E002][1B03] <1> mov word [cs:lastcmd], dmycmd ; disable T/P/G auto-repeat 4185 00004E70 2EC606[E202]00 <1> mov byte [cs:bInit], 0 4186 <1> %endif 4187 <1> 4188 <1> ; Common interrupt routine. 4189 <1> 4190 <1> ; Housekeeping. 4191 <1> intrtn: 4192 00004E76 FA <1> cli ; just in case 4193 00004E77 2E8F06[7803] <1> pop word [cs:reg_eip] ; recover things from stack 4194 00004E7C 2E8F06[6C03] <1> pop word [cs:reg_cs] 4195 00004E81 2E8F06[7C03] <1> pop word [cs:reg_efl] 4196 00004E86 2E8C1E[6003] <1> mov word [cs:reg_ds], ds ; ! word-aligned (AC flag) 4197 00004E8B 2EA3[4003] <1> mov word [cs:reg_eax], ax ; ! word-aligned (AC flag) 4198 00004E8F 8CC8 <1> mov ax, cs 4199 00004E91 8ED8 <1> mov ds, ax ; => lDEBUG_DATA_ENTRY 4200 00004E93 E8F9FB[7F2C] <1> call entry_to_code_seg, intrtn_code 4201 <1> ; To avoid delaying the code segment switch, we use the client's 4202 <1> ; stack here to call (jump) via entry_to_code_seg. 4203 <1> 4204 <1> 4205 <1> usesection lDEBUG_CODE 4205 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 4206 <1> 4207 <1> code_insure_low_byte_not_0CCh 4208 <1> intrtn_code: 4209 00002C7F 8C16[6803] <1> mov word [reg_ss], ss ; save stack position 4210 00002C83 8326[7A03]00 <1> _386 and word [reg_eip+2], byte 0 ; we're from real mode 4210 ****************** <1> expansion: entry = 11395 4210 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395 4210 ****************** <1> expansion: entry = 11396 4210 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396 4210 ****************** <1> expansion: entry = 11397 4210 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397 4210 ****************** <1> expansion: entry = 11398 4210 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398 4210 ****************** <1> expansion: entry = 11399 4210 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399 4210 ****************** <1> expansion: entry = 11400 4211 00002C88 66 <1> _386_o32 ; mov dword [reg_esp], esp 4211 ****************** <1> expansion: entry = 11400 4211 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400 4211 ****************** <1> expansion: entry = 11401 4212 00002C89 8926[5003] <1> mov word [reg_esp], sp 4213 00002C8D 8ED0 <1> mov ss, ax ; mov ss, cs ; (don't use the stack here) 4214 <1> 4215 <1> %if _PM 4216 <1> clropt [internalflags], protectedmode ; reset PM flag 4217 <1> jmp @F 4218 <1> 4219 <1> intrtn2_code: ; <--- entry protected mode 4220 <1> mov word [ss:reg_ds], ds ; ! word-aligned (AC flag) 4221 <1> mov word [ss:reg_eax], ax ; ! word-aligned (AC flag) 4222 <1> mov ax, ss 4223 <1> mov ds, ax ; mov ds, ss 4224 <1> @@: 4225 <1> %endif 4226 00002C8F B80200 <1> mov ax, 2 4227 <1> %ifn _ONLY386 4228 00002C92 EB1A <1> _386_jmps .386 ; --> 4228 ****************** <1> expansion: entry = 11410 4228 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410 4228 ****************** <1> expansion: entry = 11411 4228 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411 4228 ****************** <1> expansion: entry = 11412 4229 00002C94 BC[6603] <1> mov sp, reg_es+2 4230 00002C97 06 <1> push es 4231 <1> ; sub sp, ax 4232 <1> ; sub sp, ax ; ds already saved 4233 <1> ; sub sp, ax ; don't overwrite high word of di 4234 00002C98 83EC06 <1> sub sp, byte 3*2 4235 00002C9B 57 <1> push di 4236 00002C9C 29C4 <1> sub sp, ax 4237 00002C9E 56 <1> push si 4238 00002C9F 29C4 <1> sub sp, ax 4239 00002CA1 55 <1> push bp 4240 <1> ; sub sp, ax 4241 <1> ; sub sp, ax ; sp already saved 4242 <1> ; sub sp, ax 4243 00002CA2 83EC06 <1> sub sp, byte 3*2 4244 00002CA5 52 <1> push dx 4245 00002CA6 29C4 <1> sub sp, ax 4246 00002CA8 51 <1> push cx 4247 00002CA9 29C4 <1> sub sp, ax 4248 00002CAB 53 <1> push bx 4249 <1> %endif 4250 <1> %ifn _ONLYNON386 4251 <1> %ifn _ONLY386 4252 00002CAC EB31 <1> jmp short .common 4253 <1> %endif 4254 <1> 4255 <1> .386: 4256 <1> cpu 386 4256 ****************** <1> expansion: __CPU__ = [cpu 386] 4257 00002CAE BC[7603] <1> mov sp, reg_gs+2 4258 00002CB1 0FA8 <1> push gs 4259 00002CB3 29C4 <1> sub sp, ax ; don't overwrite high words of segments 4260 00002CB5 0FA0 <1> push fs 4261 <1> ; sub sp, ax 4262 <1> ; sub sp, ax ; cs already saved 4263 <1> ; sub sp, ax 4264 <1> ; sub sp, ax ; ss already saved 4265 <1> ; sub sp, ax 4266 00002CB7 83EC0A <1> sub sp, byte 5*2 4267 00002CBA 06 <1> push es 4268 <1> ; sub sp, ax 4269 <1> ; sub sp, ax ; ds already saved 4270 00002CBB 83EC04 <1> sub sp, byte 2*2 4271 00002CBE 6657 <1> push edi 4272 00002CC0 6656 <1> push esi 4273 00002CC2 6655 <1> push ebp 4274 <1> ; sub sp, ax 4275 <1> ; sub sp, ax ; sp already saved 4276 00002CC4 83EC04 <1> sub sp, byte 2*2 4277 00002CC7 6652 <1> push edx 4278 00002CC9 6651 <1> push ecx 4279 00002CCB 669C <1> pushfd ; (this overwrites reg_ebx) 4280 00002CCD 01C4 <1> add sp, ax ; discard low word of efl 4281 00002CCF 8F06[7E03] <1> pop word [reg_efl+2] 4282 00002CD3 6A00 <1> push 0 4283 00002CD5 9C <1> pushf ; (this also overwrites reg_ebx) 4284 00002CD6 669D <1> popfd ; clear high word of efl inside debugger (resets AC flag) 4285 00002CD8 6653 <1> push ebx 4286 00002CDA A1[4003] <1> mov ax, word [reg_eax] ; restore ax 4287 00002CDD 6650 <1> push eax ; so we don't overwrite it with 2 here 4288 <1> cpu 8086 4288 ****************** <1> expansion: __CPU__ = [cpu 8086] 4289 <1> .common: 4290 <1> %endif 4291 <1> 4292 <1> code_insure_low_byte_not_0CCh 4293 <1> ; Clean up. 4294 <1> intrtn1_code: 4295 00002CDF 8B26[6002] <1> mov sp, word [run_sp] ; restore running stack 4296 00002CE3 FC <1> cld ; clear direction flag 4297 00002CE4 FB <1> sti ; interrupts back on 4298 00002CE5 8026[7D03]FE <1> clropt [reg_efl], 100h ; clear TF 4298 ****************** <1> expansion: adr = '[reg_efl]' 4298 ****************** <1> expansion: len = 9 4298 ****************** <1> expansion: tf = '[' 4298 ****************** <1> expansion: tb = ']' 4298 ****************** <1> expansion: adr = 'reg_efl' 4298 ****************** <1> expansion: adr = reg_efl 4299 <1> 4300 00002CEA 813E[DE02][B145] <1> cmp word [run_int], int1msg 4301 00002CF0 751B <1> jne @F 4302 00002CF2 8CD8 <1> mov ax, ds 4303 00002CF4 3906[6C03] <1> cmp word [reg_cs], ax 4304 00002CF8 7513 <1> jne @F 4305 00002CFA 813E[7803][1C4E] <1> cmp word [reg_eip], int22.cleartraceflag 4306 00002D00 7406 <1> je .run.2.ZR 4307 00002D02 813E[7803][B94A] <1> cmp word [reg_eip], debug22.cleartraceflag 4308 <1> .run.2.ZR: 4309 00002D08 7503E902FF <1> je run.2 4310 <1> 4311 <1> @@: 4311 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.73 4311 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.74 4311 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.75 4311 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.76 4311 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.77 4311 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.78 4311 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.79 4311 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.80 4311 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.73 4311 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.74 4311 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.75 4311 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.76 4311 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.77 4311 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.78 4311 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.79 4311 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.80 4311 ****************** <1> expansion: __@@_num = 81 4312 00002D0D E8302E <1> call getpsp 4313 00002D10 891E[6402] <1> mov word [pspdbe], bx 4314 <1> 4315 00002D14 E85F3A <1> call getint2324 ; save debuggee's int 23/24, set debugger's int 23/24 4316 <1> 4317 00002D17 1E <1> push ds 4318 00002D18 07 <1> pop es 4319 00002D19 E8052E <1> call setpspdbg ; set PSP of debugger 4320 <1> %if _DEBUG ; reset to next copy's divide/trace/breakpoint ints 4321 00002D1C 51 <1> push cx 4322 00002D1D 56 <1> push si 4323 00002D1E 57 <1> push di 4324 00002D1F 50 <1> push ax 4325 00002D20 53 <1> push bx 4326 00002D21 52 <1> push dx 4327 00002D22 B90700 <1> mov cx, inttab_number 4328 00002D25 BF[0C03] <1> mov di, intsave 4329 00002D28 BE[F402] <1> mov si, inttab 4330 <1> .intloop: 4331 00002D2B AC <1> lodsb 4332 00002D2C 88C3 <1> mov bl, al 4333 00002D2E 83C602 <1> add si, byte 2 4334 00002D31 87F7 <1> xchg si, di 4335 00002D33 AD <1> lodsw 4336 00002D34 89C2 <1> mov dx, ax 4337 00002D36 AD <1> lodsw 4338 00002D37 87F7 <1> xchg si, di 4339 00002D39 1E <1> push ds 4340 <1> %if _BOOTLDR 4341 00002D3A F606[8500]40 <1> testopt [internalflags], nodosloaded 4341 ****************** <1> expansion: adr = '[internalflags]' 4341 ****************** <1> expansion: len = 15 4341 ****************** <1> expansion: tf = '[' 4341 ****************** <1> expansion: tb = ']' 4341 ****************** <1> expansion: adr = 'internalflags' 4341 ****************** <1> expansion: adr = internalflags 4342 00002D3F 7413 <1> jz .int21_25_2 4343 00002D41 50 <1> push ax 4344 00002D42 52 <1> push dx 4345 00002D43 31C0 <1> xor ax, ax 4346 00002D45 8ED8 <1> mov ds, ax 4347 00002D47 30FF <1> xor bh, bh 4348 00002D49 01DB <1> add bx, bx 4349 00002D4B 01DB <1> add bx, bx 4350 00002D4D 8F07 <1> pop word [ bx ] 4351 00002D4F 8F4702 <1> pop word [ bx+2 ] 4352 00002D52 EB08 <1> jmp short .intset_2 4353 <1> .int21_25_2: 4354 <1> %endif 4355 00002D54 8ED8 <1> mov ds, ax 4356 00002D56 88D8 <1> mov al, bl 4357 00002D58 B425 <1> mov ah, 25h 4358 <1> %if _PM 4359 <1> %fatal Cannot build DDEBUGX: handler switching needs to be fixed 4360 <1> %endif 4361 00002D5A CD21 <1> int 21h 4362 <1> .intset_2: 4363 00002D5C 1F <1> pop ds 4364 00002D5D E2CC <1> loop .intloop 4365 00002D5F 5A <1> pop dx 4366 00002D60 5B <1> pop bx 4367 00002D61 58 <1> pop ax 4368 00002D62 5F <1> pop di 4369 00002D63 5E <1> pop si 4370 00002D64 59 <1> pop cx 4371 <1> %endif 4372 <1> 4373 00002D65 800E[8500]30 <1> setopt [internalflags], debuggerA20|debuggeeA20 ; assume A20 is on 4373 ****************** <1> expansion: adr = '[internalflags]' 4373 ****************** <1> expansion: len = 15 4373 ****************** <1> expansion: tf = '[' 4373 ****************** <1> expansion: tb = ']' 4373 ****************** <1> expansion: adr = 'internalflags' 4373 ****************** <1> expansion: adr = internalflags 4374 <1> %if _PM 4375 <1> call ispm 4376 <1> jz .a20done ; assume A20 on. (is this the right thing to do?) 4377 <1> %endif 4378 00002D6A 06 <1> push es 4379 00002D6B 1E <1> push ds 4380 00002D6C 57 <1> push di 4381 00002D6D 56 <1> push si 4382 00002D6E 51 <1> push cx 4383 00002D6F 31F6 <1> xor si, si 4384 00002D71 8EDE <1> mov ds, si ; ds = 0000h 4385 00002D73 4E <1> dec si 4386 00002D74 8EC6 <1> mov es, si ; es = FFFFh 4387 00002D76 46 <1> inc si ; ds:si = 0000h:0000h = 00000h 4388 00002D77 BF1000 <1> mov di, 0010h ; es:di = FFFFh:0010h = 100000h (same address if it overflows) 4389 00002D7A 89F9 <1> mov cx, di ; 32 byte (16 = 10h word) 4390 00002D7C F3A7 <1> repe cmpsw ; compare them and assume A20 line switched off if same 4391 00002D7E 59 <1> pop cx 4392 00002D7F 5E <1> pop si 4393 00002D80 5F <1> pop di 4394 00002D81 1F <1> pop ds 4395 00002D82 07 <1> pop es 4396 00002D83 7505 <1> jne .a20done ; not equal, A20 line is switched on --> 4397 <1> ; if equal, the A20 line is probably switched off 4398 00002D85 8026[8500]CF <1> clropt [internalflags], debuggerA20|debuggeeA20 ; assume A20 is off 4398 ****************** <1> expansion: adr = '[internalflags]' 4398 ****************** <1> expansion: len = 15 4398 ****************** <1> expansion: tf = '[' 4398 ****************** <1> expansion: tb = ']' 4398 ****************** <1> expansion: adr = 'internalflags' 4398 ****************** <1> expansion: adr = internalflags 4399 <1> 4400 <1> %if 0 ;_LOCALENABLEA20 4401 <1> ; This doesn't serve any particular reason if we have no business accessing the HMA. 4402 <1> ; What's more important is that the dump, assemble, and disassemble commands *should* 4403 <1> ; use a disabled A20 if it is disabled to the debuggee. Thus, enabling A20 belongs, if 4404 <1> ; at all, into getsegmented (similar to the switch to PM) as there may be breakpoints in 4405 <1> ; the HMA that we need to reset. 4406 <1> mov ax, 4300h 4407 <1> int 2Fh ; XMS v2 installation check 4408 <1> cmp al, 80h ; installed ? 4409 <1> jne .a20done ; no --> 4410 <1> mov ax, 4310h 4411 <1> int 2Fh ; get entry 4412 <1> mov ah, 05h 4413 <1> push cs 4414 <1> call callfaresbx ; local enable A20 4415 <1> push ds 4416 <1> pop es 4417 <1> dec ax 4418 <1> jnz .a20done ; not able to enable A20 --> 4419 <1> ; actually check here to insure it is on? 4420 <1> setopt [internalflags], debuggerA20 ; our A20 is on 4421 <1> %endif 4422 <1> .a20done: 4423 <1> 4424 00002D8A C606[9402]01 <1> mov byte [bInDbg], 1 4425 <1> %if _CATCHINT19 4426 00002D8F 813E[DE02][A746] <1> cmp word [run_int], int19msg 4427 00002D95 741C <1> je @F 4428 <1> %endif 4429 00002D97 813E[DE02][E046] <1> cmp word [run_int], progtrm 4430 00002D9D 7519 <1> jnz .isnotterm 4431 <1> %if _BOOTLDR 4432 00002D9F B8FFFF <1> mov ax, -1 4433 00002DA2 F606[8500]40 <1> testopt [internalflags], nodosloaded 4433 ****************** <1> expansion: adr = '[internalflags]' 4433 ****************** <1> expansion: len = 15 4433 ****************** <1> expansion: tf = '[' 4433 ****************** <1> expansion: tb = ']' 4433 ****************** <1> expansion: adr = 'internalflags' 4433 ****************** <1> expansion: adr = internalflags 4434 00002DA7 7504 <1> jnz .no_int21_4D 4435 <1> %endif 4436 00002DA9 B44D <1> mov ah, 4Dh 4437 00002DAB CD21 <1> int 21h 4438 <1> .no_int21_4D: 4439 00002DAD BF[FF46] <1> mov di, progexit 4440 00002DB0 E84B47 <1> call hexword 4441 <1> @@: 4441 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.74 4441 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.75 4441 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.76 4441 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.77 4441 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.78 4441 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.79 4441 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.80 4441 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.81 4441 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.74 4441 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.75 4441 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.76 4441 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.77 4441 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.78 4441 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.79 4441 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.80 4441 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.81 4441 ****************** <1> expansion: __@@_num = 82 4442 00002DB3 800E[8600]80 <1> setopt [internalflags], attachedterm 4442 ****************** <1> expansion: adr = '[internalflags]' 4442 ****************** <1> expansion: len = 15 4442 ****************** <1> expansion: tf = '[' 4442 ****************** <1> expansion: tb = ']' 4442 ****************** <1> expansion: adr = 'internalflags' 4442 ****************** <1> expansion: adr = internalflags 4443 <1> .isnotterm: 4444 00002DB8 C3 <1> retn 4445 <1> 4446 <1> %if 0 ;_LOCALENABLEA20 4447 <1> callfaresbx: 4448 <1> push es 4449 <1> push bx 4450 <1> retf 4451 <1> %endif 4452 <1> 4453 <1> 4454 <1> %if _DEBUG1 4455 <1> ; INP: bx -> dword address, word counter 4456 <1> ; dx:ax = linear address to check 4457 <1> ; OUT: NC if to proceed as usual 4458 <1> ; CY if address matched and counter indicates trigger 4459 <1> ; (ie, this should cause the caller to fail) 4460 <1> ; If the address matched, the counter has been stepped. 4461 <1> ; (The result of that step indicates whether to trigger.) 4462 <1> ; STT: ds = ss = debugger data selector 4463 <1> handle_test_case: 4464 00002DB9 3907 <1> cmp word [bx], ax 4465 00002DBB 7518 <1> jne .proceed 4466 00002DBD 395702 <1> cmp word [bx + 2], dx 4467 00002DC0 7513 <1> jne .proceed 4468 <1> 4469 00002DC2 F74704FF7F <1> test word [bx + 4], 7FFFh ; is it already at a terminal state ? 4470 00002DC7 7405 <1> jz .no_decrement ; yes, do not further decrement --> 4471 00002DC9 FF4F04 <1> dec word [bx + 4] ; decrement (towards 0 or 8000h) 4472 00002DCC 7409 <1> jz .trigger ; case for decrementing 1 to 0 --> 4473 <1> .no_decrement: 4474 00002DCE 817F040080 <1> cmp word [bx + 4], 8000h ; decrement resulted in 8000h 4475 00002DD3 7402 <1> je .trigger ; or was already in that state? --> 4476 <1> .proceed: 4477 00002DD5 F8 <1> clc 4478 00002DD6 C3 <1> retn 4479 <1> 4480 <1> .trigger: 4481 00002DD7 F9 <1> stc 4482 00002DD8 C3 <1> retn 4483 <1> 4484 <1> 4485 <1> ; INP: bx -> first test record (dword address, word counter) 4486 <1> ; dx:ax = linear address to check 4487 <1> ; cx = number of consecutive test records to check 4488 <1> ; OUT: NC if to proceed as usual 4489 <1> ; CY if address matched and counter indicates trigger 4490 <1> ; (ie, this should cause the caller to fail) 4491 <1> ; CHG: bx, cx 4492 <1> ; STT: ds = ss = debugger data selector 4493 <1> ; 4494 <1> ; Note that all test cases are tried and, if the address 4495 <1> ; matches, their counters are stepped. In particular, 4496 <1> ; a trigger no longer causes us to skip all further 4497 <1> ; test cases that may have the same address. 4498 <1> ; If at least one of the matching test cases indicates a 4499 <1> ; trigger condition after its stepping, the return is CY. 4500 <1> handle_test_case_multiple_16: 4501 00002DD9 B91000 <1> mov cx, 16 4502 <1> handle_test_case_multiple: 4503 00002DDC F8 <1> clc 4504 00002DDD 9C <1> pushf ; initialise flags on stack with NC 4505 00002DDE E30D <1> jcxz .end 4506 <1> .loop: 4507 00002DE0 E8D6FF <1> call handle_test_case 4508 00002DE3 7303 <1> jnc .next 4509 00002DE5 9D <1> popf ; (discard) 4510 00002DE6 F9 <1> stc 4511 00002DE7 9C <1> pushf ; new flags on stack with CY 4512 <1> .next: 4513 00002DE8 83C306 <1> add bx, 6 4514 00002DEB E2F3 <1> loop .loop 4515 <1> .end: 4516 00002DED 9D <1> popf 4517 00002DEE C3 <1> retn 4518 <1> %endif 4519 <1> 4520 <1> 4521 <1> ; PARSE_PT - Parse 'p' or 't' command. Also resets pagedcommand flag. 4522 <1> ; Entry AL First character of command 4523 <1> ; SI Address of next character 4524 <1> ; Exit BX:CX Number of times to repeat 4525 <1> ; Uses AH,BX,CX,DX. 4526 <1> 4527 <1> parse_pt: 4528 00002DEF C706[A000][703F] <1> mov word [gg_deferred_message], msg.empty_message 4529 00002DF5 C706[A200][703F] <1> mov word [bb_deferred_message], msg.empty_message 4530 00002DFB 8026[8800]F7 <1> clropt [internalflags2], dif2_gg_is_gg 4530 ****************** <1> expansion: adr = '[internalflags2]' 4530 ****************** <1> expansion: len = 16 4530 ****************** <1> expansion: tf = '[' 4530 ****************** <1> expansion: tb = ']' 4530 ****************** <1> expansion: adr = 'internalflags2' 4530 ****************** <1> expansion: adr = internalflags2 4531 00002E00 8026[8400]F7 <1> clropt [internalflags], pagedcommand 4531 ****************** <1> expansion: adr = '[internalflags]' 4531 ****************** <1> expansion: len = 15 4531 ****************** <1> expansion: tf = '[' 4531 ****************** <1> expansion: tb = ']' 4531 ****************** <1> expansion: adr = 'internalflags' 4531 ****************** <1> expansion: adr = internalflags 4532 00002E05 8026[8700]AB <1> clropt [internalflags], tt_while | tt_silent_mode | tt_no_bb 4532 ****************** <1> expansion: adr = '[internalflags]' 4532 ****************** <1> expansion: len = 15 4532 ****************** <1> expansion: tf = '[' 4532 ****************** <1> expansion: tb = ']' 4532 ****************** <1> expansion: adr = 'internalflags' 4532 ****************** <1> expansion: adr = internalflags 4533 00002E0A 8326[3202]00 <1> and word [tt_silent_mode_number], 0 4534 <1> 4535 <1> ; TP.NB, T.NB, P.NB: trace/proceed without bb breakpoints 4536 <1> ; 4537 <1> ; Note that when such a command is repeated through lastcmd, 4538 <1> ; it gets an empty line, thus tt_no_bb remains clear, and 4539 <1> ; the corresponding command without .NB is run. 4540 00002E0F 3C2E <1> cmp al, '.' 4541 00002E11 7520 <1> jne .no_dot 4542 <1> 4543 00002E13 AD <1> lodsw 4544 00002E14 25DFDF <1> and ax, TOUPPER_W 4545 00002E17 3D4E42 <1> cmp ax, "NB" 4546 00002E1A 7411 <1> je .dot_nb 4547 <1> ; TP.SB, T.SB, P.SB: trace/proceed without bb for first step 4548 00002E1C 3D5342 <1> cmp ax, "SB" 4549 00002E1F 7405 <1> je .dot_sb 4550 00002E21 4E <1> dec si 4551 00002E22 4E <1> dec si 4552 00002E23 E9D538 <1> jmp error 4553 <1> 4554 <1> .dot_sb: 4555 00002E26 800E[8700]80 <1> setopt [internalflags], tt_no_bb_first 4555 ****************** <1> expansion: adr = '[internalflags]' 4555 ****************** <1> expansion: len = 15 4555 ****************** <1> expansion: tf = '[' 4555 ****************** <1> expansion: tb = ']' 4555 ****************** <1> expansion: adr = 'internalflags' 4555 ****************** <1> expansion: adr = internalflags 4556 00002E2B EB05 <1> jmp .dot_common 4557 <1> 4558 <1> .dot_nb: 4559 00002E2D 800E[8700]40 <1> setopt [internalflags], tt_no_bb 4559 ****************** <1> expansion: adr = '[internalflags]' 4559 ****************** <1> expansion: len = 15 4559 ****************** <1> expansion: tf = '[' 4559 ****************** <1> expansion: tb = ']' 4559 ****************** <1> expansion: adr = 'internalflags' 4559 ****************** <1> expansion: adr = internalflags 4560 <1> .dot_common: 4561 00002E32 AC <1> lodsb 4562 <1> .no_dot: 4563 00002E33 E81301 <1> call parseql ; process =addr 4564 00002E36 E84646 <1> call skipcomm0 ; skip any white space 4565 00002E39 31DB <1> xor bx, bx 4566 00002E3B B90100 <1> mov cx, 1 ; bx:cx = default count 4567 00002E3E E82746 <1> call iseol? 4568 00002E41 7503E9A200 <1> je .ppt1 ; if no count given 4569 00002E46 E8C441 <1> call getdword ; bx:dx = given count 4570 <1> 4571 00002E49 53 <1> push bx 4572 00002E4A 52 <1> push dx ; push count 4573 00002E4B E85F46 <1> call skipwh0 4574 00002E4E E81746 <1> call iseol? 4575 00002E51 7503E98500 <1> je .no_while 4576 00002E56 4E <1> dec si 4577 00002E57 BA[613A] <1> mov dx, msg.while 4578 00002E5A E8D545 <1> call isstring? 4579 00002E5D 740F <1> je .found_while 4580 <1> 4581 00002E5F E8C400 <1> call .handle_silent ; (error if no SILENT keyword) 4582 <1> 4583 <1> ; Initialise auxbuff pointers in case there is no WHILE clause. 4584 <1> %if _PM 4585 <1> mov bx, word [auxbuff_switchbuffer_size] 4586 <1> %else 4587 00002E62 31DB <1> xor bx, bx 4588 <1> %endif 4589 00002E64 891E[2E02] <1> mov word [auxbuff_behind_while_condition], bx 4590 00002E68 891E[3002] <1> mov word [auxbuff_behind_last_silent], bx 4591 <1> 4592 00002E6C EB6D <1> jmp .no_while 4593 <1> 4594 <1> 4595 <1> .found_while: 4596 00002E6E E80D46 <1> call skipcomma 4597 00002E71 4E <1> dec si 4598 00002E72 89F1 <1> mov cx, si 4599 00002E74 AC <1> lodsb 4600 00002E75 E89541 <1> call getexpression 4601 00002E78 E8B73E <1> call toboolean 4602 00002E7B E82F46 <1> call skipwh0 4603 00002E7E 52 <1> push dx 4604 00002E7F 56 <1> push si 4605 00002E80 E8E545 <1> call iseol? ; expect end of line here 4606 00002E83 7404 <1> je .no_while_silent 4607 <1> 4608 00002E85 4E <1> dec si 4609 00002E86 E89D00 <1> call .handle_silent 4610 <1> 4611 <1> .no_while_silent: 4612 00002E89 5E <1> pop si 4613 00002E8A 5A <1> pop dx 4614 00002E8B 85D2 <1> test dx, dx ; condition true now ? 4615 00002E8D 7509 <1> jnz @F 4616 <1> 4617 00002E8F BA[A13A] <1> mov dx, msg.while_not_true 4618 00002E92 E8DA48 <1> call putsz 4619 00002E95 E94BD3 <1> jmp cmd3 4620 <1> 4621 <1> @@: 4621 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.75 4621 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.76 4621 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.77 4621 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.78 4621 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.79 4621 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.80 4621 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.81 4621 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.82 4621 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.75 4621 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.76 4621 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.77 4621 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.78 4621 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.79 4621 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.80 4621 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.81 4621 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.82 4621 ****************** <1> expansion: __@@_num = 83 4622 <1> %if _PM 4623 <1> mov bx, word [auxbuff_switchbuffer_size] 4624 <1> %else 4625 00002E98 31DB <1> xor bx, bx 4626 <1> %endif 4627 <1> ; (si + 1) -> line terminator (13, ';', 0) or next keyword 4628 <1> @@: 4628 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.76 4628 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.77 4628 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.78 4628 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.79 4628 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.80 4628 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.81 4628 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.82 4628 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.83 4628 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.76 4628 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.77 4628 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.78 4628 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.79 4628 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.80 4628 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.81 4628 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.82 4628 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.83 4628 ****************** <1> expansion: __@@_num = 84 4629 00002E9A 4E <1> dec si ; -> terminator, or blank 4630 00002E9B 807CFF20 <1> cmp byte [si - 1], 32 ; another blank at end ? 4631 00002E9F 74F9 <1> je @B ; yes --> 4632 00002EA1 807CFF09 <1> cmp byte [si - 1], 9 4633 00002EA5 74F3 <1> je @B ; yes --> 4634 00002EA7 89F0 <1> mov ax, si 4635 00002EA9 29C8 <1> sub ax, cx ; ax = length of expression 4636 00002EAB 53 <1> push bx 4637 00002EAC 01C3 <1> add bx, ax 4638 00002EAE 81FB0F20 <1> cmp bx, _AUXBUFFSIZE - 1 4639 00002EB2 7603E94438 <1> ja error 4640 00002EB7 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 4641 <1> ; => auxbuff 4642 00002EBB 5B <1> pop bx ; -> behind switchbuffer 4643 00002EBC 89CE <1> mov si, cx ; -> expression start 4644 00002EBE 89C1 <1> mov cx, ax ; = length of expression 4645 <1> .loop: 4646 00002EC0 AC <1> lodsb 4647 00002EC1 268807 <1> mov byte [es:bx], al 4648 00002EC4 43 <1> inc bx ; store expression 4649 00002EC5 E2F9 <1> loop .loop 4650 00002EC7 26C60700 <1> mov byte [es:bx], 0 ; terminate string 4651 00002ECB 43 <1> inc bx 4652 00002ECC 891E[2E02] <1> mov word [auxbuff_behind_while_condition], bx 4653 00002ED0 891E[3002] <1> mov word [auxbuff_behind_last_silent], bx 4654 00002ED4 16 <1> push ss 4655 00002ED5 07 <1> pop es 4656 <1> 4657 00002ED6 800E[8700]04 <1> setopt [internalflags], tt_while 4657 ****************** <1> expansion: adr = '[internalflags]' 4657 ****************** <1> expansion: len = 15 4657 ****************** <1> expansion: tf = '[' 4657 ****************** <1> expansion: tb = ']' 4657 ****************** <1> expansion: adr = 'internalflags' 4657 ****************** <1> expansion: adr = internalflags 4658 <1> .no_while: 4659 00002EDB 59 <1> pop cx 4660 00002EDC 5B <1> pop bx ; bx:cx = given count 4661 <1> 4662 00002EDD 85DB <1> test bx, bx 4663 00002EDF 7507 <1> jnz @F 4664 00002EE1 85C9 <1> test cx, cx 4665 00002EE3 7503E91338 <1> jz error ; must be at least 1, else error --> 4666 <1> @@: 4666 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.77 4666 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.78 4666 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.79 4666 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.80 4666 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.81 4666 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.82 4666 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.83 4666 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.84 4666 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.77 4666 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.78 4666 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.79 4666 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.80 4666 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.81 4666 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.82 4666 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.83 4666 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.84 4666 ****************** <1> expansion: __@@_num = 85 4667 <1> .ppt1: 4668 00002EE8 53 <1> push bx 4669 00002EE9 51 <1> push cx 4670 <1> 4673 00002EEA 8026[8800]E8 <1> clropt [internalflags2], dif2_gg_is_first | dif2_gg_first_detected | dif2_gg_skip_cseip | dif2_gg_skip_non_cseip 4673 ****************** <1> expansion: adr = '[internalflags2]' 4673 ****************** <1> expansion: len = 16 4673 ****************** <1> expansion: tf = '[' 4673 ****************** <1> expansion: tb = ']' 4673 ****************** <1> expansion: adr = 'internalflags2' 4673 ****************** <1> expansion: adr = internalflags2 4674 <1> 4675 00002EEF F606[7E00]04 <1> testopt [options], tp_do_not_skip_bp 4675 ****************** <1> expansion: adr = '[options]' 4675 ****************** <1> expansion: len = 9 4675 ****************** <1> expansion: tf = '[' 4675 ****************** <1> expansion: tb = ']' 4675 ****************** <1> expansion: adr = 'options' 4675 ****************** <1> expansion: adr = options 4676 00002EF4 752A <1> jnz .do_not_skip_cseip 4677 00002EF6 800E[8800]01 <1> setopt [internalflags2], dif2_gg_is_first 4677 ****************** <1> expansion: adr = '[internalflags2]' 4677 ****************** <1> expansion: len = 16 4677 ****************** <1> expansion: tf = '[' 4677 ****************** <1> expansion: tb = ']' 4677 ****************** <1> expansion: adr = 'internalflags2' 4677 ****************** <1> expansion: adr = internalflags2 4678 <1> 4679 00002EFB 803E[D702]00 <1> cmp byte [eqflag], 0 4680 00002F00 7507 <1> jne .cseip_take_eql 4681 <1> 4682 <1> _386_PM_o32 ; xor ecx, ecx 4683 00002F02 31C9 <1> xor cx, cx 4684 00002F04 E8B6F4 <1> call get_cseip_ecx_linear 4685 00002F07 EB0B <1> jmp .got_cseip 4686 <1> 4687 <1> .cseip_take_eql: 4688 00002F09 8B1E[DC02] <1> mov bx, word [eqladdr + 4] 4689 <1> _386_PM_o32 ; mov edx, word [eqladdr] 4690 00002F0D 8B16[D802] <1> mov dx, word [eqladdr] 4691 00002F11 E8B3F4 <1> call getlinear 4692 <1> .got_cseip: 4693 00002F14 7303E9E237 <1> jc error 4694 00002F19 A3[9400] <1> mov word [gg_first_cseip_linear], ax 4695 00002F1C 8916[9600] <1> mov word [gg_first_cseip_linear + 2], dx 4696 <1> .do_not_skip_cseip: 4697 <1> 4698 00002F20 59 <1> pop cx 4699 00002F21 5B <1> pop bx 4700 <1> 4701 00002F22 E84400 <1> call seteq ; make the = operand take effect 4702 00002F25 C3 <1> retn 4703 <1> 4704 <1> 4705 <1> .handle_silent: 4706 00002F26 BA[673A] <1> mov dx, msg.silent 4707 00002F29 E80645 <1> call isstring? 4708 00002F2C 7403E9CA37 <1> jne error 4709 00002F31 E84A45 <1> call skipcomma 4710 00002F34 E83145 <1> call iseol? 4711 00002F37 740A <1> je .no_silent_mode_number 4712 <1> 4713 00002F39 E8B444 <1> call getword 4714 00002F3C 8916[3202] <1> mov word [tt_silent_mode_number], dx 4715 00002F40 E83045 <1> call chkeol 4716 <1> 4717 <1> .no_silent_mode_number: 4718 00002F43 800E[8700]10 <1> setopt [internalflags], tt_silent_mode 4718 ****************** <1> expansion: adr = '[internalflags]' 4718 ****************** <1> expansion: len = 15 4718 ****************** <1> expansion: tf = '[' 4718 ****************** <1> expansion: tb = ']' 4718 ****************** <1> expansion: adr = 'internalflags' 4718 ****************** <1> expansion: adr = internalflags 4719 00002F48 C3 <1> retn 4720 <1> 4721 <1> 4722 <1> ; PARSEQL - Parse `=' operand for `g', 'p' and `t' commands. 4723 <1> ; Entry AL First character of command 4724 <1> ; SI Address of next character 4725 <1> ; Exit AL First character beyond range 4726 <1> ; SI Address of the character after that 4727 <1> ; eqflag Nonzero if an `=' operand was present 4728 <1> ; eqladdr Address, if one was given 4729 <1> ; Uses AH,BX,CX,DX. 4730 <1> 4731 <1> parseql: 4732 00002F49 C606[D702]00 <1> mov byte [eqflag], 0 ; mark '=' as absent 4733 00002F4E 3C3D <1> cmp al, '=' 4734 00002F50 7516 <1> jne peq1 ; if no '=' operand 4735 00002F52 E85745 <1> call skipwhite 4736 00002F55 8B1E[6C03] <1> mov bx, word [reg_cs] ; default segment 4737 00002F59 E8DA39 <1> call getaddrX ; get the address into bx:(e)dx 4738 <1> %if _PM 4739 <1> mov word [eqladdr+2], 0 4740 <1> cmp byte [bAddr32], 0 4741 <1> jz .nohighofs 4742 <1> o32 ; mov dword [eqladdr], edx 4743 <1> .nohighofs: 4744 <1> %endif 4745 00002F5C 8916[D802] <1> mov word [eqladdr+0], dx 4746 00002F60 891E[DC02] <1> mov word [eqladdr+4], bx 4747 00002F64 FE06[D702] <1> inc byte [eqflag] 4748 <1> peq1: 4749 00002F68 C3 <1> retn 4750 <1> 4751 <1> 4752 <1> ; SETEQ - Copy the = arguments to their place, if appropriate. 4753 <1> ; (This is not done immediately, because the command may have 4754 <1> ; a syntax error.) 4755 <1> ; Uses AX. 4756 <1> seteq: 4757 00002F69 803E[D702]00 <1> cmp byte [eqflag], 0 4758 00002F6E 7411 <1> je .return ; if no `=' operand 4759 00002F70 A1[D802] <1> mov ax, word [eqladdr+0] 4760 00002F73 A3[7803] <1> mov word [reg_eip], ax 4761 <1> %if _PM 4762 <1> mov ax, word [eqladdr+2] 4763 <1> mov word [reg_eip+2], ax 4764 <1> %endif 4765 00002F76 A1[DC02] <1> mov ax, word [eqladdr+4] 4766 00002F79 A3[6C03] <1> mov word [reg_cs], ax 4767 00002F7C C606[D702]00 <1> mov byte [eqflag], 0 ; clear the flag 4768 <1> .return: 4769 00002F81 C3 <1> retn 1512 %include "uu.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug U command - Disassembler 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> ; U command - disassemble. 21 <1> uu: 22 00002F82 C706[E002][8D2F] <1> mov word [lastcmd], lastuu 23 00002F88 E8DD44 <1> call iseol? 24 00002F8B 7510 <1> jne uu1 ; if an address was given 25 <1> 26 <1> lastuu: 27 <1> _386_PM_o32 ; mov ecx, dword [u_addr] 28 00002F8D 8B0E[AA02] <1> mov cx, word [u_addr] 29 <1> _386_PM_o32 ; mov edx, ecx 30 00002F91 89CA <1> mov dx, cx 31 <1> _386_PM_o32 ; add ecx, byte 1Fh 32 00002F93 83C11F <1> add cx, byte 1Fh 33 00002F96 7303 <1> jnc .no_overflow ; if no overflow --> 34 <1> _386_PM_o32 ; or ecx, byte -1 35 00002F98 83C9FF <1> or cx, byte -1 ; til end of segment 36 <1> .no_overflow: 37 00002F9B EB15 <1> jmp short uu2 38 <1> 39 <1> uu1: 40 00002F9D B92000 <1> mov cx, 20h ; default length 41 00002FA0 8B1E[6C03] <1> mov bx, word [reg_cs] 42 00002FA4 E83639 <1> call getrangeX ; get address range into bx:(e)dx 43 00002FA7 E8C944 <1> call chkeol ; expect end of line here 44 00002FAA 891E[AE02] <1> mov word [u_addr+4], bx 45 <1> _386_PM_o32 ; mov dword [u_addr], edx 46 00002FAE 8916[AA02] <1> mov word [u_addr], dx 47 <1> 48 <1> ; (d)word [u_addr] = offset start address 49 <1> ; word [u_addr+4] = segment start address 50 <1> ; (e)cx = end address 51 <1> ; (e)dx = start adddress (same as [u_addr]) 52 <1> uu2: 53 <1> _386_PM_o32 ; inc ecx 54 00002FB2 41 <1> inc cx 55 <1> uu3: 56 00002FB3 E8A8F9 <1> call handle_serial_flags_ctrl_c 57 <1> _386_PM_o32 ; push ecx 58 00002FB6 51 <1> push cx 59 <1> _386_PM_o32 ; push edx 60 00002FB7 52 <1> push dx 61 00002FB8 C606[004F]00 <1> mov byte [disflags], 0 62 00002FBD E81000 <1> call disasm ; do it 63 <1> _386_PM_o32 ; pop ebx 64 00002FC0 5B <1> pop bx 65 <1> _386_PM_o32 ; pop ecx 66 00002FC1 59 <1> pop cx 67 <1> _386_PM_o32 ; mov eax, dword [u_addr] 68 00002FC2 A1[AA02] <1> mov ax, word [u_addr] 69 <1> _386_PM_o32 ; mov edx, eax 70 00002FC5 89C2 <1> mov dx, ax 71 <1> _386_PM_o32 ; sub eax, ecx 72 00002FC7 29C8 <1> sub ax, cx ; current position - end 73 <1> _386_PM_o32 ; sub ebx, ecx 74 00002FC9 29CB <1> sub bx, cx ; previous position - end 75 <1> _386_PM_o32 ; cmp eax, ebx 76 00002FCB 39D8 <1> cmp ax, bx 77 00002FCD 73E4 <1> jnb uu3 ; if we haven't reached the goal 78 00002FCF C3 <1> retn 79 <1> 80 <1> 81 <1> usesection lDEBUG_DATA_ENTRY 81 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 82 <1> 83 <1> ; Jump table for OP_IMM, OP_RM, OP_M, OP_R_MOD, OP_MOFFS, OP_R, OP_R_ADD, 84 <1> ; and OP_AX. 85 <1> 86 <1> align 2 87 <1> disjmp2: 88 00004E98 [3134][6234][0A36]- <1> dw dop_imm, dop_rm, dop_m, dop_r_mod 88 00004E9E [1736] <1> 89 00004EA0 [5334][2036][5A36]- <1> dw dop_moffs, dop_r, dop_r_add, dop_ax 89 00004EA6 [5F36] <1> 90 <1> 91 <1> ; jump table for displaying operands 92 <1> ; must be in the order of OP_M64 .. OP_SHOSIZ 93 <1> optab: 94 00004EA8 [6336][6736][7836]- <1> dw dop_m64, dop_mfloat, dop_mdouble, dop_m80 94 00004EAE [9536] <1> 95 00004EB0 [BF36][AB36][D136]- <1> dw dop_mxx, dop_farmem, dop_farimm, dop_rel8 95 00004EB6 [4B37] <1> 96 00004EB8 [8837][C437][D437]- <1> dw dop_rel1632, dop49, dop_sti, dop_cr 96 00004EBE [EA37] <1> 97 00004EC0 [0938][1438][3038]- <1> dw dop_dr, dop_tr, dop_segreg, dop_imms8 97 00004EC6 [4E38] <1> 98 00004EC8 [6038][6638][6E38]- <1> dw dop_imm8, dop_mmx, dop_mmx_mod, dop_shosiz 98 00004ECE [7C38] <1> 99 <1> 100 <1> 101 00004ED0 310033004458434C53- <1> db '1',0,'3',0,'DXCLSTCSDSESFSGSSS' ;simple strings 101 00004ED9 544353445345534653- <1> 101 00004EE2 47535353 <1> 102 <1> 103 <1> OP_STR equ OP_1 ;first string entry 104 <1> 105 <1> ; DISASM - Disassemble. 106 <1> 107 <1> align 2 108 00004EE6 0000 <1> dis_n: dw 0 ; number of bytes in instruction so far 109 00004EE8 0000 <1> dw 0 110 00004EEA 00 <1> preflags: db 0 ; flags for prefixes found so far (includes OSIZE,ASIZE) 111 00004EEB 00 <1> preused: db 0 ; flags for prefixes used so far 112 <1> %if _PM 113 <1> presizeflags: db 0 ; O32,A32 flags = (OSIZE,ASIZE) XOR (32-bit cs?) 114 <1> %else 115 <1> presizeflags: equ preflags ; O32,A32 flags are always equal to OSIZE,ASIZE 116 <1> %endif 117 <1> 118 <1> PRESEG equ 1 ; segment prefix 119 <1> PREREP equ 2 ; rep prefixes 120 <1> PREREPZ equ 4 ; F3h, not F2h 121 <1> PRELOCK equ 8 ; lock prefix 122 <1> PREOSIZE equ 10h ; flag for OSIZE prefix 123 <1> PREASIZE equ 20h ; flag for ASIZE prefix 124 <1> PRE32D equ 10h ; flag for 32-bit data 125 <1> PRE32A equ 20h ; flag for 32-bit addressing 126 <1> PREWAIT equ 40h ; prefix wait (not really a prefix) 127 <1> GOTREGM equ 80h ; set if we have the reg/mem part 128 <1> 129 00004EEC 00 <1> instru: db 0 ; the main instruction byte 130 00004EED 00 <1> disp8: db 0 131 <1> align 2 132 00004EEE 0000 <1> index: dw 0 ; index of the instruction (unsqueezed) 133 00004EF0 380339033C03 <1> dw SFPGROUP3, SFPGROUP3+1, SFPGROUP3+4 134 00004EF6 04020602 <1> dw SPARSE_BASE+24h, SPARSE_BASE+26h ; obsolete-instruction values 135 00004EFA 00 <1> rmsize: db 0 ; <0 or 0 or >0 means mod r/m is 8 or 16 or 32 136 00004EFB 00 <1> segmnt: db 0 ; segment determined by prefix (or otherwise) 137 00004EFC 0000 <1> addrr: dw 0 ; address in mod r/m byte 138 00004EFE 0000 <1> savesp2:dw 0 ; save the stack pointer here (used in disasm) 139 <1> 140 00004F00 00 <1> disflags: db 0 ; flags for the disassembler 141 <1> 142 <1> ;--- equates for disflags: 143 <1> 144 <1> DIS_F_REPT equ 1 ; repeat after pop ss, etc. 145 <1> DIS_F_SHOW equ 2 ; show memory contents 146 <1> DIS_I_SHOW equ 4 ; there are memory contents to show 147 <1> DIS_I_UNUSED equ 8 ; (internal) print " (unused)" 148 <1> DIS_I_SHOWSIZ equ 10h ; (internal) always show the operand size 149 <1> DIS_I_KNOWSIZ equ 20h ; (internal) we know the operand size of instr. 150 <1> DIS_I_MOV_SS equ 40h ; (internal) note for repetition: mov ss 151 <1> 152 00004F01 00 <1> disflags2: db 0 ; another copy of DIS_I_KNOWSIZ 153 00004F02 00 <1> disrepeatcount: db 0 154 <1> 155 00004F03 90 <1> align 2 156 00004F04 0000 <1> sizeloc: dw 0 ; address of size words in output line 157 <1> %if _COND 158 00004F06 0000 <1> condmsg: dw 0 ; -> conditionals message to display (if R and no mem) 159 <1> %endif 160 <1> 161 <1> ; Jump table for a certain place. 162 <1> ; The size of this table matches OPTYPES_BASE. 163 <1> align 2 164 <1> disjmp: 165 00004F08 [8538] <1> dw disbad ; illegal instruction 166 00004F0A [4930] <1> dw da_twobyte ; two-byte instruction 167 00004F0C [5530] <1> dw da_insgrp ; instruction group 168 00004F0E [5C30] <1> dw da_fpuins ; coprocessor instruction 169 00004F10 [7730] <1> dw da_fpugrp ; coprocessor instruction group 170 00004F12 [8030] <1> dw da_insprf ; instruction prefix (including 66h/67h) 171 <1> 172 <1> ; Table for 16-bit mod r/m addressing. 8 = BX, 4 = BP, 2 = SI, 1 = DI. 173 00004F14 0A09060502010408 <1> rmtab: db 8+2, 8+1, 4+2, 4+1, 2, 1, 4, 8 174 <1> 175 <1> align 2 176 <1> ; Tables of register names. 177 <1> ; rgnam816/rgnam16/segrgnam/xregnam must be consecutive. 178 00004F1C 414C434C444C424C41- <1> rgnam816: dw "AL","CL","DL","BL","AH","CH","DH","BH" ; 0..7 178 00004F25 48434844484248 <1> 179 00004F2C 415843584458425853- <1> rgnam16: dw "AX","CX","DX","BX","SP","BP","SI","DI" ; 8..15 (16-bit), 16..23 (32-bit) 179 00004F35 50425053494449 <1> 180 <1> N_REGS16 equ ($-rgnam16)/2 181 00004F3C 455343535353445346- <1> segrgnam: dw "ES","CS","SS","DS","FS","GS" ; 24..29 181 00004F45 534753 <1> 182 00004F48 53544D4D4352445254- <1> xregnam: dw "ST","MM","CR","DR","TR" ; 30..34 182 00004F51 52 <1> 183 <1> N_ALLREGS equ $-rgnam816 184 <1> 185 <1> REG_ST equ 30 186 <1> REG_MM equ 31 187 <1> REG_CR equ 32 188 <1> REG_DR equ 33 189 <1> REG_TR equ 34 190 <1> 191 <1> align 2 192 00004F52 [6403][6C03][6803]- <1> segrgaddr: dw reg_es,reg_cs,reg_ss,reg_ds,reg_fs,reg_gs 192 00004F58 [6003][7003][7403] <1> 193 <1> 194 <1> ; Tables for handling of named prefixes. 195 <1> 196 00004F5E 262E363E6465 <1> prefixlist: db 26h,2Eh,36h,3Eh,64h,65h ; segment prefixes (in order) 197 00004F64 9BF0F2F3 <1> db 9Bh,0F0h,0F2h,0F3h ; WAIT,LOCK,REPNE,REPE 198 00004F68 6667 <1> db 066h,067h ; OSIZE, ASIZE 199 <1> N_PREFIX: equ $ - prefixlist 200 <1> 201 <1> align 2 202 00004F6A 9109F90511080B08 <1> prefixmnem: dw MN_WAIT,MN_LOCK,MN_REPNE,MN_REPE 203 00004F72 0C000200 <1> dw MN_O32,MN_A32 ; in 16-bit CS, OSIZE is O32 and ASIZE is A32 204 <1> %if _PM 205 <1> dw MN_O16,MN_A16 ; in 32-bit CS, OSIZE is O16 and ASIZE is A16 206 <1> %endif 207 <1> 208 <1> %if _COND 209 <1> align 2 210 <1> cond_table: 211 00004F76 0008 <1> dw 800h ; OF 212 00004F78 0100 <1> dw 1 ; CF 213 00004F7A 4000 <1> dw 40h ; ZF 214 00004F7C 4100 <1> dw 41h ; CF | ZF 215 00004F7E 8000 <1> dw 80h ; SF 216 00004F80 0400 <1> dw 4 ; PF 217 <1> ; dw cond_L_GE ; handled specifically 218 <1> ; dw cond_LE_G ; handled specifically 219 <1> %endif 220 <1> 221 <1> 222 <1> usesection lDEBUG_CODE 222 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 223 <1> 224 <1> disasm: 225 00002FD0 C606[024F]00 <1> mov byte [disrepeatcount], 0 ; number of repeated disassembly lines 226 <1> .preserve_disrepeatcount: 227 <1> %if _COND 228 00002FD5 8326[064F]00 <1> and word [condmsg], 0 ; initialize conditions message 229 <1> %endif 230 <1> .preserve_condmsg_and_disrepeatcount: 231 00002FDA 8926[FE4E] <1> mov word [savesp2], sp 232 <1> _386_PM_o32 ; xor eax, eax 233 00002FDE 31C0 <1> xor ax, ax 234 <1> _386_PM_o32 ; mov dword [dis_n], eax 235 00002FE0 A3[E64E] <1> mov word [dis_n], ax 236 00002FE3 A2[ED4E] <1> mov byte [disp8], al 237 00002FE6 A3[EA4E] <1> mov word [preflags], ax ; clear preflags and preused 238 00002FE9 C606[FB4E]03 <1> mov byte [segmnt], 3 ; initially use DS segment 239 00002FEE C606[FA4E]80 <1> mov byte [rmsize], 80h ; don't display any memory 240 00002FF3 A3[D94A] <1> mov word [dismach], ax ; no special machine needed, so far 241 <1> %if _PM 242 <1> mov byte [bCSAttr], al 243 <1> mov bx, word [u_addr+4] 244 <1> call testattrhigh 245 <1> jz .16 246 <1> mov byte [bCSAttr], 40h 247 <1> .16: 248 <1> %endif 249 00002FF6 E8640A <1> call disgetbyte ; get a byte of the instruction 250 00002FF9 3C9B <1> cmp al, 9Bh ; wait instruction (must be the first prefix) 251 00002FFB 7508 <1> jne da2 ; if not --> 252 <1> 253 <1> ; The wait instruction is actually a separate instruction as far as 254 <1> ; the x86 is concerned, but we treat it as a prefix since there are 255 <1> ; some mnemonics that incorporate it. But it has to be treated specially 256 <1> ; since you can't do, e.g., seg cs wait ... but must do wait seg cs ... 257 <1> ; instead. We'll catch it later if the wait instruction is not going to 258 <1> ; be part of a shared mnemonic. 259 <1> 260 00002FFD 800E[EA4E]40 <1> or byte [preflags], PREWAIT 261 <1> 262 <1> ; If we've found a prefix, we return here for the actual instruction 263 <1> ; (or another prefix). 264 <1> 265 <1> da1: 266 00003002 E8580A <1> call disgetbyte 267 <1> da2: 268 00003005 A2[EC4E] <1> mov [instru],al ; save away the instruction 269 00003008 B400 <1> mov ah,0 270 <1> 271 <1> ; Now we have the sequence number of the instruction in AX. Look it up. 272 <1> 273 <1> da3: 274 0000300A 89C3 <1> mov bx,ax 275 0000300C A3[EE4E] <1> mov [index],ax ; save the compressed index 276 0000300F 3DE001 <1> cmp ax,SPARSE_BASE 277 00003012 720A <1> jb da4 ; if it's not from the squeezed part of the table 278 00003014 8A9F[7411] <1> mov bl,[sqztab+bx-SPARSE_BASE] 279 00003018 B700 <1> mov bh,0 280 0000301A 81C3E001 <1> add bx,SPARSE_BASE ; bx = compressed index 281 <1> 282 <1> da4: 283 0000301E 8A8F[7D0B] <1> mov cl, [optypes+bx]; cx = opcode type 284 00003022 B500 <1> mov ch, 0 285 00003024 D1E3 <1> shl bx, 1 286 00003026 8B9F[1A0E] <1> mov bx, [opinfo+bx] ; bx = other info (usually the mnemonic) 287 0000302A 89CE <1> mov si, cx 288 0000302C 89D8 <1> mov ax, bx 289 0000302E B10C <1> mov cl, 12 290 00003030 D3E8 <1> shr ax, cl 291 00003032 3A06[D94A] <1> cmp al, [dismach] 292 00003036 7203 <1> jb da5 ; if a higher machine is already required 293 00003038 A2[D94A] <1> mov [dismach], al ; set machine type 294 <1> da5: 295 0000303B 80E70F <1> and bh, 0Fh ; remove the machine field 296 0000303E 83FE0C <1> cmp si, OPTYPES_BASE 297 00003041 7357 <1> jae da13_unp ; if this is an actual instruction 298 00003043 FF94[084F] <1> call [disjmp+si] ; otherwise, do more specific processing 299 00003047 EBC1 <1> jmp s da3 ; back for more 300 <1> 301 <1> ; Two-byte instruction. 302 <1> 303 <1> da_twobyte: 304 00003049 E8110A <1> call disgetbyte 305 0000304C A2[EC4E] <1> mov [instru],al 306 0000304F B400 <1> mov ah,0 307 00003051 05E001 <1> add ax,SPARSE_BASE 308 00003054 C3 <1> ret 309 <1> 310 <1> ; Instruction group. 311 <1> 312 <1> da_insgrp: 313 00003055 E88608 <1> call getregmem_r ; get the middle 3 bits of the R/M byte 314 00003058 98 <1> cbw 315 00003059 01D8 <1> add ax,bx ; offset 316 0000305B C3 <1> ret 317 <1> 318 <1> ; Coprocessor instruction. 319 <1> 320 <1> da_fpuins: 321 0000305C 800E[004F]10 <1> or byte [disflags],DIS_I_SHOWSIZ 322 00003061 800E[DA4A]01 <1> or byte [dmflags],DM_COPR 323 00003066 E87F08 <1> call getregmem 324 00003069 3CC0 <1> cmp al,0c0h 325 0000306B 72E8 <1> jb da_insgrp ;range 00-bfh is same as an instruction group 326 0000306D B103 <1> mov cl,3 327 0000306F D2E8 <1> shr al,cl ;C0h --> 18h 328 00003071 2C10 <1> sub al,18h-8 ;18h --> 8 329 00003073 98 <1> cbw 330 00003074 01D8 <1> add ax,bx ;offset 331 00003076 C3 <1> ret 332 <1> 333 <1> ; Coprocessor instruction group. 334 <1> 335 <1> da_fpugrp: 336 00003077 A0[D34A] <1> mov al,[regmem] 337 0000307A 2407 <1> and al,7 338 0000307C 98 <1> cbw 339 0000307D 01D8 <1> add ax,bx 340 0000307F C3 <1> ret 341 <1> 342 <1> ; Instruction prefix. At this point, bl = prefix bits; bh = segment 343 <1> 344 <1> da_insprf: 345 00003080 841E[EA4E] <1> test bl,[preflags] 346 00003084 7511 <1> jnz da12 ; if there are duplicates 347 00003086 081E[EA4E] <1> or [preflags],bl 348 0000308A F6C301 <1> test bl,PRESEG 349 0000308D 7404 <1> jz da11 ; if not a segment 350 0000308F 883E[FB4E] <1> mov [segmnt],bh ; save the segment 351 <1> da11: 352 00003093 58 <1> pop ax ; discard return address 353 00003094 E96BFF <1> jmp da1 354 <1> 355 <1> da12: 356 00003097 E9EB07 <1> jmp disbad ; we don't allow duplicate prefixes 357 <1> 358 <1> ; si = index into table opindex, + OPTYPES_BASE 359 <1> da13_unp: 360 0000309A 31C0 <1> xor ax, ax 361 0000309C 8A84[4C15] <1> mov al, [si-OPTYPES_BASE+opindex] ; ax = adjustment (from opindex) 362 000030A0 01C6 <1> add si, ax ; add in the adjustment 363 <1> ; (the existing adjustment by OPTYPES_BASE is unaffected) 364 <1> 365 <1> ; OK. Here we go. This is an actual instruction. 366 <1> ; bx = offset of mnemonic in mnlist 367 <1> ; si = offset of operand list in oplists 368 <1> ; First print the op mnemonic. 369 <1> 370 <1> da13: 371 <1> %if _PM 372 <1> mov al, byte [preflags] 373 <1> ; and al, PREOSIZE | PREASIZE ; get OSIZE,ASIZE status (= O32,A32 in 16-bit cs) 374 <1> _386 test byte [bCSAttr], 40h ; in a 32-bit segment? 375 <1> _386 jz .16 ; no --> 376 <1> _386 xor al, PRE32D | PRE32A ; OSIZE,ASIZE present means O16,A16 377 <1> .16: 378 <1> mov byte [presizeflags], al ; set O32,A32 status 379 <1> %endif 380 000030A2 56 <1> push si 381 000030A3 8DB7[FF00] <1> lea si,[mnlist+bx] ; offset of mnemonic 382 000030A7 81FE[5601] <1> cmp si,mnlist+MN_BSWAP 383 000030AB 7505 <1> jne da13a ; if not BSWAP 384 000030AD E84209 <1> call dischk32d 385 000030B0 74E5 <1> jz da12 ; if no operand-size prefix --> 386 <1> da13a: 387 000030B2 E87B08 <1> call showop ; print out the op code (at line_out+28) 388 000030B5 C706[044F]0000 <1> mov word [sizeloc], 0 ; clear out this flag 389 000030BB 5E <1> pop si ; recover list of operands 390 000030BC 81C6[F4FF] <1> add si,oplists-OPTYPES_BASE 391 000030C0 803C00 <1> cmp byte [si],0 392 000030C3 745E <1> je da21_e ; if we're done 393 <1> 394 <1> ; Loop over operands. si-> next operand type. 395 <1> ; Fortunately the operands appear in the instruction in the same 396 <1> ; order as they appear in the disassembly output. 397 <1> 398 <1> da14: 399 000030C5 C606[014F]00 <1> mov byte [disflags2], 0 ; clear out size-related flags 400 000030CA AC <1> lodsb ; get the operand type 401 000030CB 3C40 <1> cmp al,OP_SIZE 402 000030CD 7237 <1> jb da18 ; if it's not size dependent 403 000030CF C606[014F]20 <1> mov byte [disflags2],DIS_I_KNOWSIZ ;indicate variable size 404 000030D4 3C60 <1> cmp al,OP_8 405 000030D6 731B <1> jae da16 ; if the size is fixed (8, 16, 32, 64) 406 000030D8 3C50 <1> cmp al,OP_1632 407 000030DA 7309 <1> jae da15 ; if word or dword 408 000030DC B4FF <1> mov ah,-1 409 000030DE F606[EC4E]01 <1> test byte [instru],1 410 000030E3 7416 <1> jz da17 ; if byte 411 <1> da15: 412 000030E5 800E[EB4E]10 <1> or byte [preused],PRE32D; mark this flag as used 413 000030EA 8A26[EA4E] <1> mov ah,[presizeflags] 414 000030EE 80E410 <1> and ah,PRE32D ;this will be 10h for dword, 00h for word 415 000030F1 EB08 <1> jmp s da17 ;done 416 <1> 417 <1> da16: 418 000030F3 88C4 <1> mov ah,al ;OP_8, OP_16, OP_32 or OP_64 (we know which) 419 000030F5 80E4F0 <1> and ah,0f0h ;this converts ah to <0 for byte, =0 for word, 420 000030F8 80EC70 <1> sub ah,OP_16 ;and >0 for dword (byte=F0h, word=00h, dword=10h, qword=20h) 421 <1> 422 <1> ; Now we know the size (in ah); branch off to do the operand itself. 423 <1> 424 <1> da17: 425 000030FB 88C3 <1> mov bl,al 426 000030FD 83E30E <1> and bx,0Eh ; 8 entries (IMM, RM, M, R_MOD, M_OFFS, R, R_ADD, AX) 427 00003100 FF97[984E] <1> call [disjmp2+bx] ;print out the operand 428 00003104 EB1A <1> jmp s da20 ;done with operand 429 <1> 430 <1> ; Sizeless operands. 431 <1> 432 <1> da18: 433 00003106 98 <1> cbw 434 00003107 93 <1> xchg ax,bx 435 00003108 80FB2A <1> cmp bl,OP_STR 436 0000310B 720F <1> jb da19 ;if it's not a string 437 0000310D 8B87[A64E] <1> mov ax,[optab+bx-2] 438 00003111 E87308 <1> call dis_stosw_lowercase 439 00003114 80FC00 <1> cmp ah,0 440 00003117 7507 <1> jnz da20 ;if it's two characters 441 00003119 4F <1> dec di 442 0000311A EB04 <1> jmp s da20 ;done with operand 443 <1> 444 <1> da19: 445 0000311C FF97[A64E] <1> call [optab+bx-2] ;otherwise, do something else 446 <1> 447 <1> ; Operand done, check if there's another one. 448 <1> da20: 449 00003120 803C00 <1> cmp byte [si],0 450 <1> da21_e: 451 00003123 740F <1> je da21 ;if we're done 452 00003125 B02C <1> mov al,',' 453 00003127 AA <1> stosb 454 00003128 F606[8C00]02 <1> testopt [asm_options], disasm_commablank 454 ****************** <1> expansion: adr = '[asm_options]' 454 ****************** <1> expansion: len = 13 454 ****************** <1> expansion: tf = '[' 454 ****************** <1> expansion: tb = ']' 454 ****************** <1> expansion: adr = 'asm_options' 454 ****************** <1> expansion: adr = asm_options 455 0000312D 7403 <1> jz .nospace 456 0000312F B020 <1> mov al, 32 457 00003131 AA <1> stosb 458 <1> .nospace: 459 00003132 EB91 <1> jmp s da14 ;another operand 460 <1> 461 <1> ; All operands done. Now check and loop for unused prefixes: 462 <1> ; OPSIZE (66h), ADDRSIZE (67h), WAIT, segment, REP, LOCK 463 <1> da21: 464 00003134 A0[EB4E] <1> mov al, [preused] ; = flags that are used 465 00003137 F6D0 <1> not al ; = flags that are not used 466 00003139 2206[EA4E] <1> and al, [preflags] ; = flags that are not used but present 467 0000313D 7503E91F01 <1> jz da28 ; if all present flags were used --> 468 00003142 B90B00 <1> mov cx, N_WTAB 469 00003145 BB[C414] <1> mov bx, wtab1 470 00003148 BA1400 <1> mov dx, 2*N_WTAB-2 471 0000314B B440 <1> mov ah, PREWAIT 472 0000314D 84E0 <1> test al, ah 473 0000314F 754D <1> jnz da23 ; if there's a WAIT prefix hanging --> 474 <1> 475 00003151 B90200 <1> mov cx, N_LTABO 476 00003154 BB[F014] <1> mov bx, ltabo1 477 00003157 BA0200 <1> mov dx, 2*N_LTABO-2 478 0000315A B410 <1> mov ah, PREOSIZE 479 0000315C 84E0 <1> test al, ah 480 0000315E 753E <1> jnz da23 ; if it's a 66h prefix --> 481 <1> 482 00003160 B420 <1> mov ah, PREASIZE 483 00003162 84E0 <1> test al, ah 484 00003164 7459 <1> jz da24 ; if it isn't a 67h prefix --> 485 <1> 486 <1> ; check whether A32 applies to an implicit operand 487 00003166 57 <1> push di 488 00003167 50 <1> push ax 489 00003168 A1[EE4E] <1> mov ax, [index] 490 0000316B 84E4 <1> test ah, ah 491 0000316D 7508 <1> jnz .nota32prfx_nz ; opcode index > FF, not in this list --> 492 0000316F B90800 <1> mov cx, A32P_LEN 493 00003172 BF[0604] <1> mov di, a32prfxtab 494 00003175 F2AE <1> repne scasb 495 <1> .nota32prfx_nz: 496 00003177 58 <1> pop ax 497 00003178 5F <1> pop di 498 00003179 751A <1> jne .nota32prfx ; not in the list --> 499 <1> 500 0000317B 0826[EB4E] <1> or [preused], ah ; mark it as used 501 0000317F B104 <1> mov cl, 4 ; (ch = 0 because A32P_LEN < 256) 502 00003181 E81C09 <1> call moveover ; make space for "A32 " 503 00003184 B84133 <1> mov ax, "A3" 504 00003187 E87B07 <1> call dis_lowercase ; al = "a" if lowercase option specified 505 0000318A A3[C501] <1> mov word [line_out+MNEMONOFS], ax 506 0000318D C706[C701]3220 <1> mov word [line_out+MNEMONOFS+2], "2 " 507 <1> da21_j0: equ $ 508 00003193 EB9F <1> jmp s da21 509 <1> 510 <1> .nota32prfx: 511 <1> ; now check whether it instead modifies the opcode 512 00003195 B90100 <1> mov cx, N_LTABA 513 00003198 BB[F814] <1> mov bx, ltaba1 514 0000319B BA0000 <1> mov dx, 2*N_LTABA-2 515 <1> 516 <1> da23: 517 0000319E 0826[EB4E] <1> or [preused], ah ; mark this (OSIZE, ASIZE or WAIT) prefix as used 518 000031A2 57 <1> push di 519 000031A3 89DF <1> mov di, bx 520 000031A5 88E3 <1> mov bl, ah 521 000031A7 A1[EE4E] <1> mov ax, [index] 522 000031AA F2AF <1> repne scasw 523 000031AC 750E <1> jne disbad2 ; if not found in the list --> 524 000031AE 01D7 <1> add di, dx ; replace the mnemonic with the 32-bit name 525 000031B0 8B35 <1> mov si, [di] 526 000031B2 81C6[FF00] <1> add si, mnlist 527 000031B6 E87707 <1> call showop ; copy instruction mnemonic 528 000031B9 5F <1> pop di 529 <1> da21_j1: 530 000031BA EBD7 <1> jmp s da21_j0 531 <1> 532 <1> disbad2: 533 000031BC E9C606 <1> jmp disbad 534 <1> 535 <1> da24: 536 000031BF A801 <1> test al, PRESEG 537 000031C1 7434 <1> jz da25 ; if not because of a segment prefix --> 538 000031C3 A1[EE4E] <1> mov ax, [index] 539 000031C6 84E4 <1> test ah, ah 540 000031C8 75F2 <1> jnz disbad2 ; if index > 256, it's none of these --> 541 000031CA 57 <1> push di 542 000031CB B90900 <1> mov cx, SEGP_LEN 543 000031CE BF[FE03] <1> mov di, segprfxtab 544 000031D1 F2AE <1> repne scasb 545 000031D3 5F <1> pop di 546 000031D4 75E6 <1> jne disbad2 ; if it's not on the list --> 547 000031D6 B90300 <1> mov cx, 3 548 000031D9 E8C408 <1> call moveover 549 000031DC 57 <1> push di 550 000031DD BF[C501] <1> mov di, line_out+MNEMONOFS 551 000031E0 E8A107 <1> call showseg ; show segment register 552 000031E3 B03A <1> mov al, ':' 553 000031E5 F606[8C00]04 <1> testopt [asm_options], disasm_nasm 553 ****************** <1> expansion: adr = '[asm_options]' 553 ****************** <1> expansion: len = 13 553 ****************** <1> expansion: tf = '[' 553 ****************** <1> expansion: tb = ']' 553 ****************** <1> expansion: adr = 'asm_options' 553 ****************** <1> expansion: adr = asm_options 554 000031EA 7402 <1> jz .notnasm 555 000031EC B020 <1> mov al, 32 556 <1> .notnasm: 557 000031EE AA <1> stosb 558 000031EF 5F <1> pop di 559 000031F0 800E[EB4E]01 <1> or byte [preused], PRESEG ; mark it as used 560 <1> da21_j2: 561 000031F5 EBC3 <1> jmp s da21_j1 562 <1> 563 <1> da25: 564 000031F7 A802 <1> test al, PREREP 565 000031F9 7435 <1> jz da26 ; if not a REP prefix 566 000031FB 2406 <1> and al, PREREP|PREREPZ 567 000031FD 0806[EB4E] <1> or [preused], al 568 00003201 A1[EE4E] <1> mov ax, [index] 569 00003204 84E4 <1> test ah, ah 570 00003206 7525 <1> jnz disbad3 ; if not in the first 256 bytes 571 00003208 24FE <1> and al, ~1 ; clear the low bit (MOVSW -> MOVSB) 572 0000320A 57 <1> push di 573 0000320B BF[0704] <1> mov di, replist 574 0000320E B90500 <1> mov cx, REP_SAME_LEN; scan those for REP first 575 00003211 F2AE <1> repne scasb 576 00003213 BE[F808] <1> mov si, mnlist+MN_REP 577 00003216 7439 <1> je da27 ; if one of the REP instructions --> 578 00003218 B102 <1> mov cl, REP_DIFF_LEN; (ch = 0) 579 0000321A F2AE <1> repne scasb 580 0000321C 750F <1> jne disbad3 ; if not one of the REPE/REPNE instructions 581 0000321E BE[0A09] <1> mov si, mnlist+MN_REPE 582 00003221 F606[EB4E]04 <1> test byte [preused], PREREPZ 583 00003226 7529 <1> jnz da27 ; if REPE 584 00003228 BE[1009] <1> mov si, mnlist+MN_REPNE 585 0000322B EB24 <1> jmp s da27 ; it's REPNE 586 <1> 587 <1> disbad3: 588 0000322D E95506 <1> jmp disbad 589 <1> 590 <1> da26: 591 00003230 A808 <1> test al, PRELOCK 592 00003232 74F9 <1> jz disbad3 ; if not a lock prefix, either --> 593 00003234 57 <1> push di 594 00003235 A1[EE4E] <1> mov ax, [index] 595 00003238 BF[FC14] <1> mov di, locktab 596 0000323B B92E00 <1> mov cx, N_LOCK 597 0000323E F2AF <1> repne scasw 598 00003240 75EB <1> jne disbad3 ; if not in the approved list --> 599 00003242 F606[EB4E]01 <1> test byte [preused], PRESEG 600 00003247 74E4 <1> jz disbad3 ; if memory was not accessed --> 601 00003249 BE[F806] <1> mov si, mnlist+MN_LOCK 602 0000324C 800E[EB4E]08 <1> or byte [preused], PRELOCK 603 <1> 604 <1> ; Slip in another mnemonic (REP or LOCK). 605 <1> ; SI = offset of mnemonic, what should be 606 <1> ; DI is on the stack. 607 <1> 608 <1> da27: 609 00003251 5F <1> pop di 610 00003252 B90800 <1> mov cx, 8 611 00003255 56 <1> push si 612 00003256 E84708 <1> call moveover 613 00003259 5E <1> pop si 614 0000325A 57 <1> push di 615 0000325B E8D206 <1> call showop 616 0000325E 5F <1> pop di 617 0000325F EB94 <1> jmp s da21_j2 618 <1> 619 <1> ; Done with instruction. Erase the size indicator, if appropriate. 620 <1> 621 <1> da28: 622 00003261 8B0E[044F] <1> mov cx, [sizeloc] 623 00003265 E324 <1> jcxz da28b ;if there was no size given 624 00003267 A0[004F] <1> mov al,[disflags] 625 0000326A A810 <1> test al,DIS_I_SHOWSIZ 626 0000326C 751D <1> jnz da28b ;if we need to show the size 627 0000326E A820 <1> test al,DIS_I_KNOWSIZ 628 00003270 7419 <1> jz da28b ;if the size is not known already 629 00003272 87CF <1> xchg cx,di 630 00003274 89FE <1> mov si,di ;save old di 631 00003276 B020 <1> mov al, 32 632 <1> da28a: 633 00003278 AE <1> scasb ;skip size name 634 00003279 75FD <1> jne da28a ;if not done yet 635 <1> ;(The above is the same as repne scasb, but 636 <1> ;has no effect on cx.) 637 0000327B F606[8C00]04 <1> testopt [asm_options], disasm_nasm 637 ****************** <1> expansion: adr = '[asm_options]' 637 ****************** <1> expansion: len = 13 637 ****************** <1> expansion: tf = '[' 637 ****************** <1> expansion: tb = ']' 637 ****************** <1> expansion: adr = 'asm_options' 637 ****************** <1> expansion: adr = asm_options 638 00003280 7503 <1> jnz .nasm 639 00003282 83C704 <1> add di, byte 4 ;skip 'PTR ' 640 <1> .nasm: 641 00003285 87F7 <1> xchg si,di 642 00003287 29F1 <1> sub cx,si 643 00003289 F3A4 <1> rep movsb ;move the line 644 <1> 645 <1> ; Now we're really done. Print out the bytes on the left. 646 <1> 647 <1> da28b: 648 0000328B 57 <1> push di ;print start of disassembly line 649 0000328C BF[A901] <1> mov di,line_out 650 0000328F A1[AE02] <1> mov ax,[u_addr+4] ;print address 651 00003292 E86942 <1> call hexword 652 00003295 B03A <1> mov al,':' 653 00003297 AA <1> stosb 654 <1> _386_PM_o32 ; mov eax, dword [u_addr] 655 00003298 A1[AA02] <1> mov ax, word [u_addr] 656 <1> %if _PM 657 <1> test byte [bCSAttr], 40h 658 <1> jz .16 659 <1> call hexword_high 660 <1> .16: 661 <1> %endif 662 0000329B E86042 <1> call hexword 663 0000329E B020 <1> mov al, 32 664 000032A0 AA <1> stosb 665 000032A1 8B1E[E64E] <1> mov bx, [dis_n] 666 <1> da28c: 667 000032A5 BE[C401] <1> mov si,line_out+MNEMONOFS - 1 668 000032A8 29FE <1> sub si, di 669 000032AA D1EE <1> shr si, 1 670 000032AC 39F3 <1> cmp bx, si 671 000032AE 7619 <1> jbe da29 ; if it's a short instruction which fits in one line 672 000032B0 29F3 <1> sub bx, si 673 000032B2 53 <1> push bx 674 000032B3 89F3 <1> mov bx, si 675 000032B5 57 <1> push di 676 000032B6 E8D107 <1> call disshowbytes 677 000032B9 E87A42 <1> call putsline_crlf 678 000032BC 59 <1> pop cx 679 000032BD 5B <1> pop bx 680 000032BE BF[A901] <1> mov di, line_out 681 000032C1 29F9 <1> sub cx, di 682 000032C3 B020 <1> mov al, 32 683 000032C5 F3AA <1> rep stosb 684 000032C7 EBDC <1> jmp short da28c 685 <1> da29: 686 000032C9 E8BE07 <1> call disshowbytes 687 <1> da30: 688 000032CC B020 <1> mov al, 32 ; pad to op code 689 000032CE B9[C501] <1> mov cx,line_out+MNEMONOFS 690 000032D1 29F9 <1> sub cx,di 691 000032D3 7202 <1> jc da30_1 692 000032D5 F3AA <1> rep stosb 693 <1> da30_1: 694 000032D7 5F <1> pop di 695 000032D8 F606[004F]08 <1> test byte [disflags],DIS_I_UNUSED 696 000032DD 740D <1> jz da32 ; if we don't print ` (unused)' 697 000032DF BE[6B45] <1> mov si,unused 698 000032E2 807DFF20 <1> cmp byte [di-1], 32 699 000032E6 7501 <1> jne da31 ; if there's already a space here 700 000032E8 46 <1> inc si 701 <1> da31: 702 000032E9 E8DF41 <1> call showstring 703 <1> 704 <1> ; Print info on minimal processor needed. 705 <1> 706 <1> da32: 707 000032EC 57 <1> push di 708 000032ED BF[F04E] <1> mov di,index+2 709 000032F0 E80A07 <1> call showmach ;show the machine type, if needed 710 000032F3 5F <1> pop di 711 000032F4 E32C <1> jcxz da32f ;if no message 712 <1> 713 <1> ; Print a message on the far right. 714 <1> 715 <1> da32_tabto: 716 000032F6 B8[F801] <1> mov ax, line_out+79 717 000032F9 29C8 <1> sub ax, cx 718 000032FB 51 <1> push cx 719 000032FC E81D42 <1> call tab_to ; tab out to the location 720 000032FF 59 <1> pop cx 721 00003300 F3A4 <1> rep movsb ; copy the string 722 <1> da32z_j1: 723 00003302 E99300 <1> jmp da32z ; done 724 <1> 725 <1> %if _COND 726 <1> ; Try dumping a condition status. 727 <1> da32_cond: 728 <1> %if _COND_RDUMP_ONLY 729 00003305 A802 <1> test al, DIS_F_SHOW ; (! DIS_F_SHOW|DIS_I_SHOW is negated here) 730 00003307 75F9 <1> jnz da32z_j1 ; not showing conditionals message --> 731 <1> %endif 732 00003309 8B36[064F] <1> mov si, word [condmsg] 733 0000330D 85F6 <1> test si, si ; stored a message here ? 734 0000330F 74F1 <1> jz da32z_j1 ; no --> 735 00003311 57 <1> push di 736 00003312 89F7 <1> mov di, si 737 00003314 B9FFFF <1> mov cx, -1 738 00003317 31C0 <1> xor ax, ax 739 00003319 F2AE <1> repne scasb 740 0000331B F7D9 <1> neg cx 741 0000331D 49 <1> dec cx 742 0000331E 49 <1> dec cx ; get string length 743 0000331F 5F <1> pop di 744 00003320 EBD4 <1> jmp short da32_tabto 745 <1> %else 746 <1> da32_cond: equ da32z_j1 747 <1> %endif 748 <1> 749 <1> ; Dump referenced memory location. 750 <1> 751 <1> da32f: 752 00003322 A0[004F] <1> mov al,[disflags] 753 00003325 3406 <1> xor al,DIS_F_SHOW + DIS_I_SHOW 754 00003327 A806 <1> test al,DIS_F_SHOW + DIS_I_SHOW 755 00003329 75DA <1> jnz da32_cond ; if there is no memory location to show --> 756 0000332B 803E[FB4E]03 <1> _no386 cmp byte [segmnt], 3 756 ****************** <1> expansion: entry = 13099 756 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099 756 ****************** <1> expansion: entry = 13100 756 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100 756 ****************** <1> expansion: entry = 13101 756 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101 756 ****************** <1> expansion: entry = 13102 756 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102 756 ****************** <1> expansion: entry = 13103 756 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103 756 ****************** <1> expansion: entry = 13104 757 00003330 77D3 <1> _no386 ja da32_cond ; if FS or GS on non-386 --> (invalid) 757 ****************** <1> expansion: entry = 13104 757 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104 757 ****************** <1> expansion: entry = 13105 757 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105 757 ****************** <1> expansion: entry = 13106 758 00003332 803E[FB4E]05 <1> cmp byte [segmnt], 5 759 00003337 77CC <1> ja da32_cond ; if invalid segment --> 760 00003339 B8[EE01] <1> mov ax,line_out+79-10 761 0000333C 803E[FA4E]00 <1> cmp byte [rmsize],0 762 00003341 7C07 <1> jl da32h ; if byte 763 00003343 7403 <1> jz da32g ; if word 764 00003345 83E804 <1> sub ax, byte 4 765 <1> da32g: 766 00003348 48 <1> dec ax 767 00003349 48 <1> dec ax 768 <1> da32h: 769 0000334A E8CF41 <1> call tab_to 770 0000334D E82806 <1> call showseg_uppercase_ax 771 <1> ; ax = segment register name 772 00003350 E8C405 <1> call dis_lowercase_refmem_w 773 00003353 AB <1> stosw 774 00003354 B03A <1> mov al,':' 775 00003356 AA <1> stosb 776 00003357 A1[FC4E] <1> mov ax,[addrr] 777 0000335A E8A141 <1> call hexword ;show offset 778 0000335D B03D <1> mov al,'=' 779 0000335F AA <1> stosb 780 00003360 A0[FB4E] <1> mov al,[segmnt] ;segment number 781 00003363 98 <1> cbw 782 00003364 D1E0 <1> shl ax,1 783 00003366 93 <1> xchg ax,bx ;mov bx,ax 784 00003367 8B9F[524F] <1> mov bx,[segrgaddr+bx] ;get address of value 785 0000336B 06 <1> push es 786 0000336C 8E07 <1> mov es,[bx] 787 0000336E 8B1E[FC4E] <1> mov bx,[addrr] 788 00003372 268A07 <1> mov al, [es:bx+0] ; avoid a "mov ax,[-1]" 789 00003375 268A6701 <1> mov ah, [es:bx+1] 790 00003379 268A5702 <1> mov dl, [es:bx+2] ; avoid a "mov dx,[-1]" 791 0000337D 268A7703 <1> mov dh, [es:bx+3] 792 00003381 07 <1> pop es 793 00003382 803E[FA4E]00 <1> cmp byte [rmsize], 0 794 00003387 7C0C <1> jl da32j ; if byte 795 00003389 7405 <1> jz da32i ; if word 796 0000338B 92 <1> xchg ax,dx 797 0000338C E86F41 <1> call hexword 798 0000338F 92 <1> xchg ax,dx 799 <1> da32i: 800 00003390 E86B41 <1> call hexword 801 00003393 EB03 <1> jmp short da32z ; done 802 <1> da32j: 803 00003395 E86D41 <1> call hexbyte ; display byte 804 <1> 805 <1> da32z: 806 00003398 E89441 <1> call trimputs ; done with operand list 807 0000339B A0[004F] <1> mov al, [disflags] 808 0000339E A801 <1> test al, DIS_F_REPT 809 000033A0 7460 <1> jz @FF ; if not repeating --> 810 000033A2 A808 <1> test al, DIS_I_UNUSED 811 000033A4 7543 <1> jnz @F ; if " (unused)" was displayed --> 812 000033A6 A840 <1> test al, DIS_I_MOV_SS 813 000033A8 A1[EE4E] <1> mov ax, [index] 814 000033AB 7405 <1> jz .not_mov_to_ss ; not mov to ss --> 815 <1> 816 <1> ; DIS_I_MOV_SS is set, check for wo[index] == 8Eh; 817 <1> ; as we only want to match move *to* ss, not from (8Ch). 818 000033AD 3D8E00 <1> cmp ax, 8Eh ; move to seg reg? 819 000033B0 7437 <1> je @F ; yes, it is mov to ss --> 820 <1> 821 <1> .not_mov_to_ss: 822 000033B2 83F817 <1> cmp ax, 17h 823 000033B5 7432 <1> je @F ; pop ss --> 824 000033B7 3DE600 <1> cmp ax, 0E6h ; out ? 825 000033BA 742D <1> je @F 826 000033BC 3DEE00 <1> cmp ax, 0EEh 827 000033BF 7428 <1> je @F 828 000033C1 83F86E <1> cmp ax, 06Eh 829 000033C4 7423 <1> je @F 830 000033C6 83F86F <1> cmp ax, 06Fh 831 000033C9 741E <1> je @F ; --> 832 000033CB 3DE400 <1> cmp ax, 0E4h ; in ? 833 000033CE 7419 <1> je @F 834 000033D0 3DEC00 <1> cmp ax, 0ECh 835 000033D3 7414 <1> je @F 836 000033D5 83F86C <1> cmp ax, 06Ch 837 000033D8 740F <1> je @F 838 000033DA 83F86D <1> cmp ax, 06Dh 839 000033DD 740A <1> je @F ; --> 840 000033DF 3DF400 <1> cmp ax, 0F4h ; hlt ? 841 000033E2 7405 <1> je @F 842 000033E4 3DFB00 <1> cmp ax, 0FBh 843 000033E7 751A <1> jne @FFF ; not sti --> 844 <1> @@: 844 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.78 844 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.79 844 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.80 844 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.81 844 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.82 844 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.83 844 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.84 844 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.85 844 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.78 844 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.79 844 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.80 844 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.81 844 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.82 844 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.83 844 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.84 844 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.85 844 ****************** <1> expansion: __@@_num = 86 845 000033E9 8026[004F]03 <1> and byte [disflags], DIS_F_REPT|DIS_F_SHOW 846 000033EE FE06[024F] <1> inc byte [disrepeatcount] 847 000033F2 803E[024F]10 <1> cmp byte [disrepeatcount], 16 848 000033F7 7303E9D9FB <1> jb disasm.preserve_disrepeatcount 849 <1> 850 000033FC BA[7C3F] <1> mov dx, msg.uu_too_many_repeat 851 000033FF E86D43 <1> call putsz 852 <1> @@: 852 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.79 852 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.80 852 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.81 852 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.82 852 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.83 852 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.84 852 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.85 852 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.86 852 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.79 852 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.80 852 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.81 852 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.82 852 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.83 852 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.84 852 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.85 852 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.86 852 ****************** <1> expansion: __@@_num = 87 853 00003402 C3 <1> retn 854 <1> 855 <1> @@: 855 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.80 855 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.81 855 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.82 855 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.83 855 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.84 855 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.85 855 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.86 855 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.87 855 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.80 855 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.81 855 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.82 855 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.83 855 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.84 855 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.85 855 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.86 855 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.87 855 ****************** <1> expansion: __@@_num = 88 856 00003403 8A3E[ED4E] <1> mov bh, byte [disp8] 857 00003407 3DEB00 <1> cmp ax, 0EBh ; unconditional short jump ? 858 0000340A 74F6 <1> je @BB ; yes, return --> 859 <1> _386_PM_o32 ; and dword [dis_n], byte 0 860 0000340C 8326[E64E]00 <1> and word [dis_n], byte 0 861 00003411 E84906 <1> call disgetbyte 862 00003414 B302 <1> mov bl, 2 ; displacement to skip a jmp short 863 00003416 3CEB <1> cmp al, 0EBh ; jmp short ? 864 00003418 7406 <1> je @F ; yes --> 865 0000341A B303 <1> mov bl, 3 ; displacement to skip a 16-bit jmp near 866 0000341C 3CE9 <1> cmp al, 0E9h ; jmp near ? 867 0000341E 75E2 <1> jne @BB ; no, return --> 868 <1> %if _PM 869 <1> test byte [bCSAttr], 40h ; 32-bit code segment ? 870 <1> jz @F ; no, 16-bit, use displacement 3 --> 871 <1> mov bl, 5 ; displacement to skip a 32-bit jmp near 872 <1> %endif 873 <1> @@: 873 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.81 873 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.82 873 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.83 873 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.84 873 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.85 873 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.86 873 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.87 873 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.88 873 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.81 873 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.82 873 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.83 873 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.84 873 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.85 873 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.86 873 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.87 873 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.88 873 ****************** <1> expansion: __@@_num = 89 874 00003420 38DF <1> cmp bh, bl ; right displacement ? 875 00003422 75DE <1> jne @BBB ; no --> 876 <1> 877 00003424 8026[004F]03 <1> and byte [disflags], DIS_F_REPT|DIS_F_SHOW 879 00003429 8336[064F]04 <1> xor word [condmsg], (msg.condnotjump + DATASECTIONFIXUP) ^ (msg.condjump + DATASECTIONFIXUP) 880 0000342E E9A9FB <1> jmp disasm.preserve_condmsg_and_disrepeatcount 881 <1> 882 <1> 883 <1> ; Here are the routines for printing out the operands themselves. 884 <1> ; Immediate data (OP_IMM) 885 <1> 886 <1> dop_imm: 887 00003431 80FC00 <1> cmp ah, 0 888 00003434 7C17 <1> jl dop03 ; if just a byte --> 889 00003436 9C <1> pushf 890 00003437 F606[004F]10 <1> test byte [disflags], DIS_I_SHOWSIZ 891 0000343C 7403 <1> jz .nosize ; if we don't need to show the size --> 892 0000343E E84B05 <1> call showsize 893 <1> .nosize: 894 00003441 E82F06 <1> call disgetword 895 00003444 9D <1> popf 896 00003445 7503E9B440 <1> je hexword ; if just a word 897 0000344A E98B05 <1> jmp disp32.ax 898 <1> 899 <1> dop03: 900 0000344D E80D06 <1> call disgetbyte ; print immediate byte 901 00003450 E9B240 <1> jmp hexbyte 902 <1> 903 <1> 904 <1> ; Memory offset reference (OP_MOFFS) 905 <1> 906 <1> dop_moffs: 907 00003453 B005 <1> mov al, 5 908 00003455 F606[EA4E]20 <1> test byte [presizeflags], PRE32A 909 0000345A 7501 <1> jnz .32 ; if 32-bit addressing --> 910 0000345C 40 <1> inc ax 911 <1> .32: 912 0000345D A2[D34A] <1> mov [regmem], al 913 00003460 EB0A <1> jmp s dop05 914 <1> 915 <1> 916 <1> ; MOD R/M (OP_RM) 917 <1> 918 <1> dop_rm: 919 00003462 E88304 <1> call getregmem 920 00003465 3CC0 <1> cmp al,0c0h 921 00003467 7203E9B701 <1> jae dop33 ; if pure register reference --> 922 <1> 923 <1> dop05: ; <--- used by OP_M, OP_M64, OP_M80, OP_MOFFS 924 0000346C E81D05 <1> call showsize ; print out size 925 0000346F E85105 <1> call showptr ; append "PTR " (if not NASM syntax) 926 <1> dop06: ; <--- used by OP_MXX, OP_MFLOAT, OP_MDOUBLE 927 00003472 800E[EB4E]01 <1> or byte [preused],PRESEG ; needed even if there's no segment override 928 <1> ; because handling of LOCK prefix relies on it 929 00003477 B05B <1> mov al, '[' 930 00003479 E88501 <1> call stosb_nasm 931 <1> 932 0000347C F606[EA4E]01 <1> test byte [preflags],PRESEG 933 00003481 7406 <1> jz dop07 ;if no segment override 934 00003483 E8FE04 <1> call showseg ;print segment name 935 00003486 B03A <1> mov al,':' 936 00003488 AA <1> stosb 937 <1> dop07: 938 00003489 A0[D34A] <1> mov al,[regmem] 939 0000348C 24C7 <1> and al,0c7h 940 0000348E 800E[EB4E]20 <1> or byte [preused],PREASIZE 941 00003493 F606[EA4E]20 <1> test byte [presizeflags],PRE32A 942 00003498 7403E9A100 <1> jnz dop18 ;if 32-bit addressing 943 0000349D 800E[004F]04 <1> or byte [disflags],DIS_I_SHOW ;we'd like to show this address 944 000034A2 C706[FC4E]0000 <1> mov word [addrr],0 ;zero out the address initially 945 000034A8 93 <1> xchg ax,bx ;mov bx,ax 946 000034A9 E84801 <1> call store_opensqubracket 947 000034AC 80FB06 <1> cmp bl,6 948 000034AF 747F <1> je dop16 ;if [xxxx] 949 000034B1 83E307 <1> and bx,7 950 000034B4 8A9F[144F] <1> mov bl,[rmtab+bx] 951 000034B8 F6C308 <1> test bl,8 952 000034BB 7519 <1> jnz dop09 ;if BX 953 000034BD F6C304 <1> test bl,4 954 000034C0 742A <1> jz dop11 ;if not BP 955 000034C2 B84250 <1> mov ax,'BP' 956 000034C5 8B0E[5403] <1> mov cx,[reg_ebp] 957 000034C9 F606[EA4E]01 <1> test byte [preflags],PRESEG 958 000034CE 750D <1> jnz dop10 ;if segment override 959 000034D0 FE0E[FB4E] <1> dec byte [segmnt] ;default is now SS 960 000034D4 EB07 <1> jmp s dop10 961 <1> 962 <1> dop09: 963 000034D6 B84258 <1> mov ax,'BX' ;BX 964 000034D9 8B0E[4403] <1> mov cx,[reg_ebx] 965 <1> 966 <1> dop10: 967 000034DD 890E[FC4E] <1> mov [addrr],cx ;print it out, etc. 968 000034E1 E8A304 <1> call dis_stosw_lowercase 969 000034E4 F6C303 <1> test bl,2+1 970 000034E7 741C <1> jz dop13 ;if done 971 000034E9 B02B <1> mov al,'+' 972 000034EB AA <1> stosb 973 <1> dop11: 974 000034EC B85349 <1> mov ax,'SI' 975 000034EF 8B0E[5803] <1> mov cx,[reg_esi] 976 000034F3 F6C301 <1> test bl,1 977 000034F6 7406 <1> jz dop12 ;if SI 978 000034F8 B044 <1> mov al,'D' ;DI 979 000034FA 8B0E[5C03] <1> mov cx,[reg_edi] 980 <1> 981 <1> dop12: 982 000034FE 010E[FC4E] <1> add [addrr], cx ; print it out, etc. 983 00003502 E88204 <1> call dis_stosw_lowercase 984 <1> dop13: 985 00003505 F606[D34A]C0 <1> test byte [regmem], 0C0h 986 0000350A 742E <1> jz s dop17 ; if no displacement --> 987 0000350C F606[D34A]80 <1> test byte [regmem], 80h 988 00003511 751A <1> jnz dop15 ; if word displacement --> 989 00003513 E84705 <1> call disgetbyte 990 00003516 98 <1> cbw 991 00003517 0106[FC4E] <1> add [addrr], ax 992 0000351B 3C00 <1> cmp al, 0 993 0000351D B42B <1> mov ah, '+' 994 0000351F 7D04 <1> jge dop14 ; if not negative --> 995 00003521 B42D <1> mov ah, '-' 996 00003523 F6D8 <1> neg al 997 <1> dop14: 998 00003525 8825 <1> mov [di], ah 999 00003527 47 <1> inc di 1000 00003528 E8DA3F <1> call hexbyte ; print the byte displacement 1001 0000352B EB0D <1> jmp s dop17 ; done --> 1002 <1> 1003 <1> dop15: 1004 0000352D B02B <1> mov al, '+' 1005 0000352F AA <1> stosb 1006 <1> dop16: 1007 00003530 E84005 <1> call disgetword 1008 00003533 0106[FC4E] <1> add [addrr], ax 1009 00003537 E8C43F <1> call hexword ; print word displacement 1010 <1> 1011 <1> dop17: 1012 0000353A B05D <1> mov al, ']' 1013 0000353C AA <1> stosb 1014 0000353D C3 <1> retn 1015 <1> 1016 <1> ; 32-bit MOD REG R/M addressing. 1017 <1> 1018 <1> dop18: 1019 0000353E 3C05 <1> cmp al, 5 1020 00003540 7454 <1> je s dop19 ; if just a disp32 address --> 1021 00003542 50 <1> push ax 1022 00003543 2407 <1> and al, 7 1023 00003545 3C04 <1> cmp al, 4 1024 00003547 7506 <1> jne dop20 ; if no SIB --> 1025 00003549 E81105 <1> call disgetbyte ; get and save it 1026 0000354C A2[D44A] <1> mov [sibbyte], al 1027 <1> dop20: 1028 0000354F 58 <1> pop ax 1029 00003550 A880 <1> test al, 80h 1030 00003552 7516 <1> jnz dop22 ; if disp32 --> 1031 00003554 A840 <1> test al, 40h 1032 00003556 7418 <1> jz dop23 ; if no disp8 --> 1033 00003558 E80205 <1> call disgetbyte 1034 0000355B 3C00 <1> cmp al, 0 1035 0000355D 7D06 <1> jge dop21 ; if not negative --> 1036 0000355F F6D8 <1> neg al 1037 00003561 C6052D <1> mov byte [di], '-' 1038 00003564 47 <1> inc di 1039 <1> dop21: 1040 00003565 E89D3F <1> call hexbyte 1041 00003568 EB03 <1> jmp s dop22a ; done --> 1042 <1> 1043 <1> dop22: 1044 0000356A E86804 <1> call disp32 ; print disp32 1045 <1> 1046 <1> dop22a: 1047 0000356D E88F00 <1> call store_plus 1048 <1> 1049 <1> dop23: 1050 00003570 A0[D34A] <1> mov al,[regmem] 1051 00003573 2407 <1> and al,7 1052 00003575 3C04 <1> cmp al,4 1053 00003577 7567 <1> jne dop28 ;if no SIB 1054 00003579 A0[D44A] <1> mov al,[sibbyte] 1055 <1> %if 1 ;bugfix: make 'u' correctly handle [ESP],[ESP+x] 1056 0000357C 3C24 <1> cmp al,24h 1057 0000357E 7504 <1> jnz noesp 1058 00003580 B004 <1> mov al,4 1059 00003582 EB5C <1> jmp short dop28 1060 <1> noesp: 1061 <1> %endif 1062 00003584 2407 <1> and al,7 1063 00003586 3C05 <1> cmp al,5 1064 00003588 7514 <1> jne dop24 ; if not [EBP] --> 1065 0000358A F606[D34A]C0 <1> test byte [regmem], 0C0h 1066 0000358F 750D <1> jnz dop24 ; if MOD != 0 --> 1067 00003591 E84104 <1> call disp32 ; show 32-bit displacement instead of [EBP] 1068 00003594 EB13 <1> jmp s dop25 1069 <1> 1070 <1> dop19: 1071 00003596 E85B00 <1> call store_opensqubracket 1072 00003599 E83904 <1> call disp32 ; display 32-bit offset 1073 <1> dop17_j1: 1074 0000359C EB9C <1> jmp s dop17 1075 <1> 1076 <1> dop24: 1077 0000359E E84700 <1> call store_opensqubracket_e 1078 000035A1 E83F04 <1> call showreg16 ; show 16-bit register name (number in AL) 1079 000035A4 B05D <1> mov al, ']' 1080 000035A6 E84D00 <1> call stosb_notnasm 1081 <1> dop25: 1082 000035A9 E85300 <1> call store_plus 1083 <1> 1084 000035AC A0[D44A] <1> mov al,[sibbyte] 1085 000035AF D0E8 <1> shr al,1 1086 000035B1 D0E8 <1> shr al,1 1087 000035B3 D0E8 <1> shr al,1 1088 000035B5 2407 <1> and al,7 1089 000035B7 3C04 <1> cmp al,4 1090 000035B9 7459 <1> je disbad1 ;if illegal 1091 000035BB E82A00 <1> call store_opensqubracket_e 1092 000035BE E82204 <1> call showreg16 1093 000035C1 8A26[D44A] <1> mov ah,[sibbyte] 1094 000035C5 F6C4C0 <1> test ah,0c0h 1095 000035C8 7414 <1> jz dop27 ;if SS = 0 1096 000035CA B02A <1> mov al,'*' 1097 000035CC AA <1> stosb 1098 000035CD B032 <1> mov al,'2' 1099 000035CF F6C480 <1> test ah,80h 1100 000035D2 7409 <1> jz dop26 ;if *2 1101 000035D4 B034 <1> mov al,'4' 1102 000035D6 F6C440 <1> test ah,40h 1103 000035D9 7402 <1> jz dop26 ;if *4 1104 000035DB B038 <1> mov al,'8' 1105 <1> dop26: 1106 000035DD AA <1> stosb 1107 <1> dop27: 1108 <1> dop17_j2: 1109 000035DE EBBC <1> jmp s dop17_j1 1110 <1> 1111 <1> ; 32-bit addressing without SIB 1112 <1> 1113 <1> dop28: 1114 000035E0 E80500 <1> call store_opensqubracket_e 1115 000035E3 E8FD03 <1> call showreg16 1116 000035E6 EBF6 <1> jmp short dop27 1117 <1> 1118 <1> ; Store '[' if not NASM syntax, 1119 <1> ; then (regardless of syntax) store 'E' 1120 <1> ; INP: di-> buffer 1121 <1> ; OUT: di-> behind "[E" or 'E' 1122 <1> ; CHG: - 1123 <1> ; 1124 <1> ; The 'E' is lowercased if that option is selected. 1125 <1> store_opensqubracket_e: 1126 000035E8 50 <1> push ax 1127 000035E9 E80800 <1> call store_opensqubracket 1128 000035EC B045 <1> mov al, 'E' 1129 000035EE E81403 <1> call dis_lowercase 1130 000035F1 AA <1> stosb 1131 000035F2 58 <1> pop ax 1132 000035F3 C3 <1> retn 1133 <1> 1134 <1> ; Store '[' if not NASM syntax 1135 <1> ; INP: di-> buffer 1136 <1> ; OUT: di-> behind '[' if not NASM syntax 1137 <1> ; CHG: al 1138 <1> store_opensqubracket: 1139 000035F4 B05B <1> mov al, '[' 1140 <1> 1141 <1> ; Store al if not NASM syntax 1142 <1> ; INP: di-> buffer 1143 <1> ; OUT: di-> behind stored byte if not NASM syntax 1144 <1> ; CHG: - 1145 <1> stosb_notnasm: 1146 000035F6 F606[8C00]04 <1> testopt [asm_options], disasm_nasm 1146 ****************** <1> expansion: adr = '[asm_options]' 1146 ****************** <1> expansion: len = 13 1146 ****************** <1> expansion: tf = '[' 1146 ****************** <1> expansion: tb = ']' 1146 ****************** <1> expansion: adr = 'asm_options' 1146 ****************** <1> expansion: adr = asm_options 1147 000035FB 7501 <1> jnz .ret 1148 000035FD AA <1> stosb 1149 000035FE C3 <1> .ret: retn 1150 <1> 1151 <1> ; Store '+' if NASM syntax 1152 <1> ; INP: di-> buffer 1153 <1> ; OUT: di-> behind '+' if NASM syntax 1154 <1> ; CHG: al 1155 <1> store_plus: 1156 000035FF B02B <1> mov al, '+' 1157 <1> 1158 <1> ; Store al if NASM syntax 1159 <1> ; INP: di-> buffer 1160 <1> ; OUT: di-> behind stored byte if NASM syntax 1161 <1> ; CHG: - 1162 <1> stosb_nasm: 1163 00003601 F606[8C00]04 <1> testopt [asm_options], disasm_nasm 1163 ****************** <1> expansion: adr = '[asm_options]' 1163 ****************** <1> expansion: len = 13 1163 ****************** <1> expansion: tf = '[' 1163 ****************** <1> expansion: tb = ']' 1163 ****************** <1> expansion: adr = 'asm_options' 1163 ****************** <1> expansion: adr = asm_options 1164 00003606 7401 <1> jz .ret 1165 00003608 AA <1> stosb 1166 00003609 C3 <1> .ret: retn 1167 <1> 1168 <1> 1169 <1> ; Memory-only reference (OP_M) 1170 <1> 1171 <1> dop_m: 1172 0000360A E8DB02 <1> call getregmem 1173 0000360D 3CC0 <1> cmp al, 0C0h 1174 0000360F 7303E958FE <1> jb dop05 ; if it's what we expect --> 1175 <1> 1176 <1> ; it's a register reference 1177 00003614 E96E02 <1> disbad1:jmp disbad ; this is not supposed to happen --> 1178 <1> 1179 <1> ; Register reference from MOD R/M part (OP_R_MOD) 1180 <1> 1181 <1> dop_r_mod: 1182 00003617 E8CE02 <1> call getregmem 1183 0000361A 3CC0 <1> cmp al,0c0h 1184 0000361C 72F6 <1> jb disbad1 ;if it's a memory reference 1185 0000361E EB03 <1> jmp s dop33 1186 <1> 1187 <1> ; Pure register reference (OP_R) 1188 <1> 1189 <1> dop_r: 1190 00003620 E8BB02 <1> call getregmem_r 1191 <1> 1192 <1> dop33: ; <--- used by OP_RM, OP_R_MOD and OP_R_ADD 1193 00003623 2407 <1> and al,7 ;entry point for regs from MOD R/M, and others 1194 00003625 8A0E[014F] <1> mov cl,[disflags2] 1195 00003629 080E[004F] <1> or [disflags],cl ;if it was variable size operand, the size 1196 <1> ;should now be marked as known. 1197 0000362D 80FC00 <1> cmp ah,0 1198 00003630 7C11 <1> jl dop35 ;if byte register 1199 00003632 740D <1> jz dop34 ;if word register 1200 <1> dop33a: 1201 00003634 80FC20 <1> cmp ah, 20h ; qword register (MMX) ? 1202 00003637 7415 <1> je dop35_1 ; --> 1203 00003639 50 <1> push ax 1204 0000363A B045 <1> mov al, 'E' 1205 0000363C E8C602 <1> call dis_lowercase 1206 0000363F AA <1> stosb 1207 00003640 58 <1> pop ax 1208 <1> ;mov byte [di],'E' ;enter here from OP_ECX 1209 <1> ;inc di 1210 <1> dop34: 1211 00003641 0408 <1> add al,8 1212 <1> dop35: 1213 00003643 98 <1> cbw 1214 00003644 D1E0 <1> shl ax,1 1215 00003646 93 <1> xchg ax,bx ;mov bx,ax 1216 00003647 8B87[1C4F] <1> mov ax,[rgnam816+bx];get the register name 1217 0000364B E93903 <1> jmp dis_stosw_lowercase 1218 <1> 1219 <1> dop35_1: 1220 0000364E 50 <1> push ax 1221 0000364F B84D4D <1> mov ax, "MM" 1222 00003652 E83203 <1> call dis_stosw_lowercase 1223 00003655 58 <1> pop ax 1224 00003656 0430 <1> add al, '0' 1225 00003658 AA <1> stosb 1226 00003659 C3 <1> retn 1227 <1> 1228 <1> ; Register number embedded in the instruction (OP_R_ADD) 1229 <1> 1230 <1> dop_r_add: 1231 0000365A A0[EC4E] <1> mov al,[instru] 1232 0000365D EBC4 <1> jmp s dop33 1233 <1> 1234 <1> ; AL or AX or EAX (OP_AX) 1235 <1> 1236 <1> dop_ax: 1237 0000365F B000 <1> mov al,0 1238 00003661 EBC0 <1> jmp s dop33 1239 <1> 1240 <1> ; QWORD mem (OP_M64) 1241 <1> ; This operand type is used by CMPXCHG8B, FILD and FISTP. 1242 <1> dop_m64: 1243 <1> ;mov ax, 'Q' ; print "QWORD" 1244 00003663 B420 <1> mov ah, 20h ; size QWORD 1245 00003665 EB35 <1> jmp s dop40 1246 <1> 1247 <1> ; FLOAT (=REAL4) mem (OP_MFLOAT) 1248 <1> dop_mfloat: 1249 00003667 B8464C <1> mov ax, "FL" 1250 0000366A E81A03 <1> call dis_stosw_lowercase 1251 0000366D B84F41 <1> mov ax, "OA" 1252 00003670 E81403 <1> call dis_stosw_lowercase 1253 00003673 B85420 <1> mov ax, "T " 1254 00003676 EB15 <1> jmp short dop38c 1255 <1> 1256 <1> ; DOUBLE (=REAL8) mem (OP_MDOUBLE). 1257 <1> 1258 <1> dop_mdouble: 1259 00003678 B8444F <1> mov ax, "DO" 1260 0000367B E80903 <1> call dis_stosw_lowercase 1261 0000367E B85542 <1> mov ax, "UB" 1262 00003681 E80303 <1> call dis_stosw_lowercase 1263 00003684 B04C <1> mov al, 'L' 1264 00003686 E87C02 <1> call dis_lowercase 1265 00003689 AA <1> stosb 1266 0000368A B84520 <1> mov ax, "E " 1267 <1> dop38c: 1268 0000368D E8F702 <1> call dis_stosw_lowercase 1269 00003690 E83003 <1> call showptr 1270 00003693 EB2F <1> jmp s dop42a 1271 <1> 1272 <1> ; TBYTE (=REAL10) mem (OP_M80). 1273 <1> 1274 <1> dop_m80: 1275 00003695 B854FF <1> mov ax,0FF00h+'T' ;print 'T' + "BYTE" 1276 00003698 E86A02 <1> call dis_lowercase 1277 0000369B AA <1> stosb 1278 <1> dop40: 1279 0000369C E84902 <1> call getregmem 1280 0000369F 3CC0 <1> cmp al,0c0h 1281 000036A1 732B <1> jae disbad5 ;if it's a register reference 1282 000036A3 8026[004F]FD <1> and byte [disflags],~DIS_F_SHOW ;don't show this 1283 000036A8 E9C1FD <1> jmp dop05 1284 <1> 1285 <1> ; Far memory (OP_FARMEM). 1286 <1> ; This is either a FAR16 (DWORD) or FAR32 (FWORD) pointer. 1287 <1> dop_farmem: 1288 000036AB E84403 <1> call dischk32d 1289 000036AE 7403 <1> jz dop41a ; if not dword far 1290 000036B0 E8F802 <1> call showdword 1291 <1> dop41a: 1292 000036B3 B84641 <1> mov ax, "FA" ; store "FAR " 1293 000036B6 E8CE02 <1> call dis_stosw_lowercase 1294 000036B9 B85220 <1> mov ax, "R " 1295 000036BC E8C802 <1> call dis_stosw_lowercase 1296 <1> 1297 <1> ; mem (OP_MXX). 1298 <1> 1299 <1> dop_mxx: 1300 000036BF 8026[004F]FD <1> and byte [disflags],~DIS_F_SHOW ;don't show this 1301 <1> dop42a: 1302 000036C4 E82102 <1> call getregmem 1303 000036C7 3CC0 <1> cmp al,0c0h 1304 000036C9 7303E9A4FD <1> jb dop06 ; mem ref, don't show size --> 1305 <1> disbad5: 1306 000036CE E9B401 <1> jmp disbad 1307 <1> 1308 <1> ; Far immediate (OP_FARP). Either FAR16 or FAR32. 1309 <1> dop_farimm: 1310 000036D1 E89F03 <1> call disgetword 1311 000036D4 50 <1> push ax 1312 000036D5 E81A03 <1> call dischk32d 1313 000036D8 7404 <1> jz dop44 ;if not 32-bit address 1314 000036DA E89603 <1> call disgetword 1315 000036DD 50 <1> push ax 1316 <1> dop44: 1317 000036DE E89203 <1> call disgetword 1318 000036E1 E81A3E <1> call hexword 1319 000036E4 B03A <1> mov al,':' 1320 000036E6 AA <1> stosb 1321 000036E7 E80803 <1> call dischk32d 1322 000036EA 7404 <1> jz dop45 ;if not 32-bit address 1323 000036EC 58 <1> pop ax 1324 000036ED E80E3E <1> call hexword 1325 <1> dop45: 1326 000036F0 58 <1> pop ax 1327 000036F1 E80A3E <1> call hexword 1328 000036F4 C3 <1> ret 1329 <1> 1330 <1> 1331 <1> %if _COND 1332 <1> ; INP: [presizeflags] & PRE32A, d[reg_ecx] 1333 <1> ; OUT: dx:ax = (e)cx 1334 <1> cond_get_ecx: 1335 000036F5 A1[4803] <1> mov ax, word [reg_ecx] 1336 000036F8 F606[EA4E]20 <1> test byte [presizeflags], PRE32A ; A32 ? 1337 000036FD 8B16[4A03] <1> mov dx, word [reg_ecx+2] 1338 00003701 7502 <1> jnz .ecx 1339 00003703 31D2 <1> xor dx, dx 1340 <1> .ecx: 1341 00003705 C3 <1> retn 1342 <1> 1343 <1> ; INP: ax = 0..15 condition code, else invalid 1344 <1> ; OUT: w[condmsg] set as appropriate 1345 <1> cond_handle: 1346 00003706 83F80F <1> cmp ax, 15 1347 00003709 7738 <1> ja .return 1348 0000370B 8B0E[7C03] <1> mov cx, word [reg_efl] ; get flags 1349 0000370F 89C3 <1> mov bx, ax 1350 00003711 80E3FE <1> and bl, ~1 ; make even 1351 00003714 2401 <1> and al, 1 ; 1 if negated condition 1352 00003716 80FB0C <1> cmp bl, 12 ; L/GE or LE/G? 1353 00003719 7306 <1> jae .specific ; yes --> 1354 <1> 1355 0000371B 858F[764F] <1> test cx, [cond_table+bx]; flag(s) set ? 1356 0000371F EB14 <1> jmp short .jump_ZF ; NZ if (normal) condition true --> 1357 <1> 1358 <1> .specific: 1359 00003721 80FB0E <1> cmp bl, 14 1360 00003724 7205 <1> jb .L_GE 1361 <1> 1362 <1> ; Handle LE/NG and G/NLE conditions. 1363 <1> ; The former says ZF | (OF ^ SF). 1364 <1> .LE_G: 1365 00003726 F6C140 <1> test cl, 40h ; ZF | .. 1366 00003729 750C <1> jnz .jump_true 1367 <1> 1368 <1> ; Handle L/NGE and GE/NL conditions. 1369 <1> ; The former says OF ^ SF. 1370 <1> .L_GE: 1371 0000372B 81E18008 <1> and cx, 880h ; OF ^ SF 1372 0000372F 7408 <1> jz .jump_false ; both clear --> 1373 00003731 81F18008 <1> xor cx, 880h 1374 <1> .jump_ZF: 1375 00003735 7402 <1> jz .jump_false ; both set --> (or ZR: (normal) condition false) 1376 <1> .jump_true: 1377 00003737 3401 <1> xor al, 1 ; (negating ^ raw truth) = cooked truth 1378 <1> .jump_false: 1379 00003739 84C0 <1> test al, al ; true ? 1380 0000373B 7507 <1> jnz .msg_jumping ; yes --> 1381 <1> 1382 <1> .msg_notjumping: 1383 0000373D C706[064F][084A] <1> mov word [condmsg], msg.condnotjump 1384 <1> .return: 1385 00003743 C3 <1> retn 1386 <1> 1387 <1> .msg_jumping: 1388 00003744 C706[064F][0C4A] <1> mov word [condmsg], msg.condjump 1389 0000374A C3 <1> retn 1390 <1> %endif 1391 <1> 1392 <1> 1393 <1> ; 8-bit relative jump (OP_REL8) 1394 <1> 1395 <1> dop_rel8: 1396 <1> %if _COND 1397 0000374B A1[EE4E] <1> mov ax, word [index] 1398 0000374E 3DE300 <1> cmp ax, 0E3h 1399 00003751 772C <1> ja .cond_done ; no conditional jump --> 1400 00003753 7211 <1> jb .cond_noncx ; not jcxz, check for other --> 1401 <1> 1402 00003755 E89DFF <1> call cond_get_ecx 1403 00003758 09D0 <1> or ax, dx 1404 0000375A 7405 <1> jz .cond_msg_jumping 1405 <1> .cond_msg_notjumping: 1406 0000375C E8DEFF <1> call cond_handle.msg_notjumping 1407 0000375F EB1E <1> jmp short .cond_done 1408 <1> 1409 <1> .cond_msg_jumping: 1410 00003761 E8E0FF <1> call cond_handle.msg_jumping 1411 00003764 EB19 <1> jmp short .cond_done 1412 <1> 1413 <1> .cond_noncx: 1414 00003766 3CE0 <1> cmp al, 0E0h 1415 00003768 7210 <1> jb .cond_nonloop ; not loop, check for other --> 1416 <1> 1417 0000376A 50 <1> push ax 1418 0000376B E887FF <1> call cond_get_ecx 1419 0000376E 48 <1> dec ax ; = 0 if cx is 1 1420 0000376F 09D0 <1> or ax, dx ; = 0 if cx is 1 and ecx is cx 1421 00003771 58 <1> pop ax 1422 00003772 74E8 <1> jz .cond_msg_notjumping ; if (e)cx is 1 --> 1423 00003774 3CE2 <1> cmp al, 0E2h 1424 00003776 74E9 <1> je .cond_msg_jumping ; loop without additional condition --> 1425 00003778 3495 <1> xor al, 0E0h^75h ; E0h (loopnz) to 75h (jnz), 1426 <1> ; E1h (loopz) to 74h (jz) 1427 <1> 1428 <1> .cond_nonloop: 1429 0000377A 2C70 <1> sub al, 70h ; (ah = 0) 1430 0000377C E887FF <1> call cond_handle ; call common code (checks for ax < 16) 1431 <1> .cond_done: 1432 <1> %endif 1433 0000377F E8DB02 <1> call disgetbyte 1434 00003782 98 <1> cbw 1435 00003783 A2[ED4E] <1> mov byte [disp8], al 1436 00003786 EB31 <1> jmp s dop48 1437 <1> 1438 <1> ; 16/32-bit relative jump (OP_REL1632) 1439 <1> 1440 <1> dop_rel1632: 1441 <1> %if _COND 1442 00003788 A1[EE4E] <1> mov ax, word [index] 1443 0000378B 2D6002 <1> sub ax, SPARSE_BASE+80h 1444 0000378E E875FF <1> call cond_handle 1445 <1> %endif 1446 00003791 E8DF02 <1> call disgetword 1447 00003794 E85B02 <1> call dischk32d 1448 00003797 7420 <1> jz dop48 ;if not 32-bit offset 1449 00003799 50 <1> push ax 1450 <1> %if _PM 1451 <1> test byte [bCSAttr],40h ;for 32-bit code segments 1452 <1> jnz dop47_1 ;no need to display "DWORD " 1453 <1> %endif 1454 0000379A E80E02 <1> call showdword 1455 <1> dop47_1: 1456 0000379D 5A <1> pop dx 1457 0000379E E8D202 <1> call disgetword 1458 000037A1 8B1E[AA02] <1> mov bx,[u_addr+0] 1459 000037A5 031E[E64E] <1> add bx,[dis_n] 1460 000037A9 1306[E84E] <1> adc ax,[dis_n + 2] 1461 000037AD 01DA <1> add dx,bx 1462 000037AF 1306[AC02] <1> adc ax,[u_addr+2] 1463 000037B3 E8483D <1> call hexword 1464 000037B6 92 <1> xchg ax,dx 1465 000037B7 EB08 <1> jmp s hexwordj1 ; call hexword and return 1466 <1> 1467 <1> dop48: 1468 <1> _386_PM movsx eax, ax 1469 <1> _386_PM_o32 ; add eax, dword [u_addr] 1470 000037B9 0306[AA02] <1> add ax, word [u_addr] 1471 <1> _386_PM_o32 ; add eax, dword [dis_n] 1472 000037BD 0306[E64E] <1> add ax, word [dis_n] 1473 <1> %if _PM 1474 <1> test byte [bCSAttr], 40h; 32-bit code segment ? 1475 <1> jz .16 ; no --> 1476 <1> call hexword_high ; yes, display (possibly non-zero) high word 1477 <1> .16: 1478 <1> %endif 1479 <1> hexwordj1: 1480 000037C1 E93A3D <1> jmp hexword ; call hexword and return 1481 <1> 1482 <1> 1483 <1> ; Check for ST(1) (OP_1CHK). 1484 <1> 1485 <1> dop49: 1486 000037C4 58 <1> pop ax ;discard return address 1487 000037C5 A0[D34A] <1> mov al,[regmem] 1488 000037C8 2407 <1> and al,7 1489 000037CA 3C01 <1> cmp al,1 1490 000037CC 7403 <1> je dop50 ;if it's ST(1) 1491 000037CE E9F4F8 <1> jmp da14 ;another operand (but no comma) 1492 <1> 1493 <1> dop50: 1494 000037D1 E960F9 <1> jmp da21 ;end of list 1495 <1> 1496 <1> ; ST(I) (OP_STI). 1497 <1> 1498 <1> dop_sti: 1499 000037D4 A0[D34A] <1> mov al, byte [regmem] 1500 000037D7 2407 <1> and al, 7 1501 000037D9 93 <1> xchg ax, bx ;mov bx,ax 1502 000037DA B85354 <1> mov ax, 'ST' 1503 000037DD E8A701 <1> call dis_stosw_lowercase; store ST(bl) 1504 000037E0 B028 <1> mov al, '(' 1505 000037E2 AA <1> stosb 1506 000037E3 B83029 <1> mov ax, '0)' 1507 000037E6 08D8 <1> or al, bl 1508 000037E8 AB <1> stosw 1509 000037E9 C3 <1> retn 1510 <1> 1511 <1> ; CRx (OP_CR). 1512 <1> 1513 <1> dop_cr: 1514 000037EA BB4352 <1> mov bx,'CR' 1515 000037ED E8EE00 <1> call getregmem_r 1516 000037F0 3C04 <1> cmp al,4 1517 000037F2 7713 <1> ja disbad4 ;if too large 1518 000037F4 7505 <1> jne dop52a 1519 000037F6 C606[D94A]05 <1> mov byte [dismach],5 ;CR4 is new to the 586 1520 <1> dop52a: 1521 000037FB 813E[EE4E]0202 <1> cmp word [index],SPARSE_BASE+22h 1522 00003801 7524 <1> jne dop55 ;if not MOV CRx,xx 1523 00003803 3C01 <1> cmp al,1 1524 00003805 7520 <1> jne dop55 ;if not CR1 1525 <1> 1526 00003807 EB7C <1> disbad4:jmp disbad ;can't MOV CR1,xx 1527 <1> 1528 <1> ; DRx (OP_DR). 1529 <1> 1530 <1> dop_dr: 1531 00003809 E8D200 <1> call getregmem_r 1532 0000380C BB4452 <1> mov bx,'DR' 1533 0000380F B9FFFF <1> mov cx,-1 ;no max or illegal value 1534 00003812 EB13 <1> jmp s dop55 1535 <1> 1536 <1> ; TRx (OP_TR). 1537 <1> 1538 <1> dop_tr: 1539 00003814 E8C700 <1> call getregmem_r 1540 00003817 3C03 <1> cmp al,3 1541 00003819 726A <1> jb disbad ;if too small 1542 0000381B 3C06 <1> cmp al,6 1543 0000381D 7305 <1> jae dop54a ;if TR6-7 1544 0000381F C606[D94A]04 <1> mov byte [dismach],4 ;TR3-5 are new to the 486 1545 <1> dop54a: 1546 00003824 BB5452 <1> mov bx,'TR' 1547 <1> 1548 <1> dop55: 1549 00003827 93 <1> xchg ax, bx 1550 00003828 E85C01 <1> call dis_stosw_lowercase; store XX 1551 0000382B 93 <1> xchg ax, bx 1552 0000382C 0C30 <1> or al, '0' 1553 0000382E AA <1> stosb 1554 0000382F C3 <1> retn 1555 <1> 1556 <1> ; Segment register (OP_SEGREG). 1557 <1> 1558 <1> dop_segreg: 1559 00003830 E8AB00 <1> call getregmem_r 1560 00003833 3C06 <1> cmp al,6 1561 00003835 734E <1> jae disbad ; if not a segment register --> 1562 00003837 3C02 <1> cmp al,2 1563 00003839 7505 <1> jne @F ; if not SS --> 1564 0000383B 800E[004F]40 <1> or byte [disflags], DIS_I_MOV_SS ; note this 1565 <1> @@: 1565 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.82 1565 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.83 1565 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.84 1565 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.85 1565 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.86 1565 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.87 1565 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.88 1565 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.89 1565 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.82 1565 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.83 1565 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.84 1565 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.85 1565 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.86 1565 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.87 1565 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.88 1565 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.89 1565 ****************** <1> expansion: __@@_num = 90 1566 00003840 3C04 <1> cmp al,4 1567 00003842 7205 <1> jb dop57a ;if not FS or GS 1568 00003844 C606[D94A]03 <1> mov byte [dismach],3;(no new 486-686 instructions involve seg regs) 1569 <1> dop57a: 1570 00003849 0410 <1> add al,16 1571 0000384B E9F5FD <1> jmp dop35 ;go print it out 1572 <1> 1573 <1> ; Sign-extended immediate byte (OP_IMMS8). "push xx" 1574 <1> 1575 <1> dop_imms8: 1576 0000384E E80C02 <1> call disgetbyte 1577 00003851 3C00 <1> cmp al,0 1578 00003853 93 <1> xchg ax,bx ;mov bl,al 1579 00003854 B02B <1> mov al,'+' 1580 00003856 7D04 <1> jge dop58a ;if >= 0 1581 00003858 F6DB <1> neg bl 1582 0000385A B02D <1> mov al,'-' 1583 <1> dop58a: 1584 0000385C AA <1> stosb 1585 0000385D 93 <1> xchg ax,bx ;mov al,bl 1586 0000385E EB03 <1> jmp s dop59a ;call hexbyte and return 1587 <1> 1588 <1> ; Immediate byte (OP_IMM8). 1589 <1> 1590 <1> dop_imm8: 1591 00003860 E8FA01 <1> call disgetbyte 1592 <1> dop59a: 1593 00003863 E99F3C <1> jmp hexbyte ;call hexbyte and return 1594 <1> 1595 <1> 1596 <1> ; Show MMx reg (OP_MMX; previously was "Show ECX if 32-bit LOOPxx"). 1597 <1> dop_mmx: 1598 00003866 BB4D4D <1> mov bx, "MM" 1599 00003869 E87200 <1> call getregmem_r 1600 0000386C EBB9 <1> jmp short dop55 1601 <1> 1602 <1> ; MMX register (in ModR/M part) 1603 <1> dop_mmx_mod: 1604 0000386E BB4D4D <1> mov bx, "MM" 1605 00003871 E87400 <1> call getregmem 1606 00003874 3CC0 <1> cmp al, 0C0h 1607 00003876 720D <1> jb disbad ; needs to be encoded as register --> 1608 00003878 2407 <1> and al, 7 1609 0000387A EBAB <1> jmp short dop55 1610 <1> 1611 <1> ; Set flag to always show size (OP_SHOSIZ). 1612 <1> dop_shosiz: 1613 0000387C 800E[004F]10 <1> or byte [disflags],DIS_I_SHOWSIZ 1614 <1> dop60a: 1615 00003881 58 <1> pop ax ;discard return address 1616 00003882 E940F8 <1> jmp da14 ;next... 1617 <1> 1618 <1> disbad: 1619 00003885 8B26[FE4E] <1> mov sp,[savesp2] ;pop junk off stack 1620 00003889 B8[A230] <1> mov ax, da13 1621 0000388C 50 <1> push ax 1622 <1> _386_PM_o32 ; xor eax, eax 1623 0000388D 31C0 <1> xor ax, ax 1624 <1> _386_PM_o32 ; mov dword [dis_n], eax 1625 0000388F A3[E64E] <1> mov word [dis_n], ax 1626 00003892 A3[EA4E] <1> mov word [preflags], ax ; clear preflags and preused 1627 <1> %if _COND 1628 00003895 A3[064F] <1> mov word [condmsg], ax ; initialize conditions message 1629 <1> %endif 1630 00003898 C606[FA4E]80 <1> mov byte [rmsize], 80h ; don't display any memory 1631 0000389D A3[D94A] <1> mov word [dismach], ax ; forget about the machine type 1632 000038A0 8026[004F]FB <1> and byte [disflags],~DIS_I_SHOW ;and flags 1633 000038A5 E8B501 <1> call disgetbyte 1634 000038A8 BF[5E4F] <1> mov di,prefixlist 1635 000038AB B90C00 <1> mov cx,N_PREFIX 1636 000038AE F2AE <1> repne scasb 1637 000038B0 740B <1> je .namedprefix ;if it's a named prefix 1638 <1> _386_PM_o32 ; dec dword [dis_n] 1639 000038B2 FF0E[E64E] <1> dec word [dis_n] 1640 000038B6 BBC101 <1> mov bx,MN_DB ;offset of 'DB' mnemonic 1641 000038B9 BE7100 <1> mov si,OPLIST_26+OPTYPES_BASE ;this says OP_IMM8 1642 000038BC C3 <1> retn 1643 <1> 1644 <1> .namedprefix: 1645 000038BD 800E[004F]08 <1> or byte [disflags],DIS_I_UNUSED ;print special flag 1646 000038C2 BB0B00 <1> mov bx,N_PREFIX - 1 1647 000038C5 29CB <1> sub bx,cx 1648 000038C7 D1E3 <1> shl bx,1 1649 000038C9 83FB0C <1> cmp bx, byte 6 *2 1650 000038CC 7208 <1> jb .segprefix ; if SEG directive --> 1651 <1> %if _PM 1652 <1> cmp bx, byte 10 *2 1653 <1> jb .non16prefix ; if not OSIZE or ASIZE --> 1654 <1> test byte [bCSAttr], 40h; 32-bit code segment ? 1655 <1> jz .non16prefix ; no, O32 or A32 --> 1656 <1> add bx, byte 4 ; yes, change to O16 or A16 1657 <1> .non16prefix: 1658 <1> %endif 1659 000038CE 8B9F[5E4F] <1> mov bx,[prefixmnem+bx-6*2] 1660 000038D2 BE0C00 <1> mov si,OPTYPES_BASE ; no operand 1661 000038D5 C3 <1> retn 1662 <1> 1663 <1> .segprefix: 1664 000038D6 8DB7BC00 <1> lea si,[bx+OPLIST_40+OPTYPES_BASE] ; this is OP_ES 1665 <1> ; lea si,[bx+fake_oplist-oplists+OPTYPES_BASE] 1666 <1> ; ; -> fake OPLIST for segments 1667 000038DA BB2D08 <1> mov bx,MN_SEG 1668 000038DD C3 <1> retn 1669 <1> 1670 <1> %if 0 1671 <1> usesection ASMTABLE1, 1 1672 <1> fake_oplist: 1673 <1> db OP_ES, 0 1674 <1> db OP_CS, 0 1675 <1> db OP_SS, 0 1676 <1> db OP_DS, 0 1677 <1> db OP_FS, 0 1678 <1> db OP_GS, 0 1679 <1> __SECT__ 1680 <1> %endif 1681 <1> 1682 <1> ; GETREGMEM_R - Get the reg part of the reg/mem part of the instruction 1683 <1> ; Uses CL 1684 <1> 1685 <1> getregmem_r: 1686 000038DE E80700 <1> call getregmem 1687 000038E1 B103 <1> mov cl,3 1688 000038E3 D2E8 <1> shr al,cl 1689 000038E5 2407 <1> and al,7 1690 000038E7 C3 <1> ret 1691 <1> 1692 <1> ; GETREGMEM - Get the reg/mem part of the instruction 1693 <1> 1694 <1> getregmem: 1695 000038E8 F606[EB4E]80 <1> test byte [preused],GOTREGM 1696 000038ED 750B <1> jnz grm1 ;if we have it already 1697 000038EF 800E[EB4E]80 <1> or byte [preused],GOTREGM 1698 000038F4 E86601 <1> call disgetbyte ;get the byte 1699 000038F7 A2[D34A] <1> mov [regmem],al ;save it away 1700 <1> 1701 000038FA A0[D34A] <1> grm1: mov al,[regmem] 1702 000038FD C3 <1> ret 1703 <1> 1704 <1> dis_lowercase_w: 1705 000038FE 86C4 <1> xchg al, ah 1706 00003900 E80200 <1> call dis_lowercase 1707 00003903 86C4 <1> xchg al, ah 1708 <1> dis_lowercase: 1709 00003905 3C41 <1> cmp al, 'A' 1710 00003907 720D <1> jb .not 1711 00003909 3C5A <1> cmp al, 'Z' 1712 0000390B 7709 <1> ja .not 1713 0000390D F606[8C00]01 <1> testopt [asm_options], disasm_lowercase 1713 ****************** <1> expansion: adr = '[asm_options]' 1713 ****************** <1> expansion: len = 13 1713 ****************** <1> expansion: tf = '[' 1713 ****************** <1> expansion: tb = ']' 1713 ****************** <1> expansion: adr = 'asm_options' 1713 ****************** <1> expansion: adr = asm_options 1714 00003912 7402 <1> jz .not 1715 00003914 0C20 <1> or al, 20h 1716 <1> .not: 1717 00003916 C3 <1> retn 1718 <1> 1719 <1> 1720 <1> dis_lowercase_refmem_w: 1721 00003917 86C4 <1> xchg al, ah 1722 00003919 E80200 <1> call dis_lowercase_refmem 1723 0000391C 86C4 <1> xchg al, ah 1724 <1> dis_lowercase_refmem: 1725 0000391E 3C41 <1> cmp al, 'A' 1726 00003920 720D <1> jb .not 1727 00003922 3C5A <1> cmp al, 'Z' 1728 00003924 7709 <1> ja .not 1729 00003926 F606[8C00]08 <1> testopt [asm_options], disasm_lowercase_refmem 1729 ****************** <1> expansion: adr = '[asm_options]' 1729 ****************** <1> expansion: len = 13 1729 ****************** <1> expansion: tf = '[' 1729 ****************** <1> expansion: tb = ']' 1729 ****************** <1> expansion: adr = 'asm_options' 1729 ****************** <1> expansion: adr = asm_options 1730 0000392B 7402 <1> jz .not 1731 0000392D 0C20 <1> or al, 20h 1732 <1> .not: 1733 0000392F C3 <1> retn 1734 <1> 1735 <1> 1736 <1> ; Show the opcode mnemonic 1737 <1> ; 1738 <1> ; INP: si-> Opcode mnemonic string of an mnlist entry. 1739 <1> ; w[si-2] & 0Fh = Length of that string. 1740 <1> ; OUT: di-> next available byte in output line 1741 <1> ; (>= line_out + 32 due to padding) 1742 <1> ; CHG: ax, cx 1743 <1> showop: 1744 00003930 BF[C501] <1> mov di, line_out+MNEMONOFS 1745 00003933 56 <1> push si 1746 <1> 1747 00003934 8B4CFE <1> mov cx, [si-2] 1748 00003937 83E10F <1> and cx, 0Fh 1749 <1> .loop: 1750 0000393A AC <1> lodsb 1751 0000393B E8C7FF <1> call dis_lowercase 1752 0000393E AA <1> stosb 1753 0000393F E2F9 <1> loop .loop 1754 <1> 1755 00003941 58 <1> pop ax ; ax-> mnemonic 1756 00003942 3D[C10A] <1> cmp ax, mnlist_a_suffix_allowed ; non-suffixed mnemonic ? 1757 00003945 7227 <1> jb .nosuffix ; yes --> 1758 00003947 3D[E50A] <1> cmp ax, mnlist_o_suffix_allowed ; optional address size suffix ? 1759 0000394A 7208 <1> jb .a_suffix_allowed ; yes --> 1760 0000394C 3D[540B] <1> cmp ax, mnlist_o_suffix_required; optional operand size suffix ? 1761 0000394F B410 <1> mov ah, PREOSIZE ; (OSIZE: check OSIZE/O32) 1762 00003951 7709 <1> ja .suffix_decide ; no, it's required --> 1763 00003953 A9 <1> db __TEST_IMM16 ; (skip mov) 1764 <1> .a_suffix_allowed: 1765 00003954 B420 <1> mov ah, PREASIZE ; optional ASIZE: check ASIZE/A32 1766 <1> 1767 <1> .suffix_decide_optional: ; check whether the suffix is necessary 1768 00003956 8426[EA4E] <1> test byte [preflags], ah ; check if such a prefix occured (ZR if not) 1769 0000395A 740E <1> jz .suffix_invisible ; no, is default form --> (hide suffix) 1770 <1> 1771 <1> .suffix_decide: ; suffix will be displayed, now only decide which 1772 0000395C B057 <1> mov al, 'W' 1773 0000395E 8426[EA4E] <1> test byte [presizeflags], ah ; 32-bit form ? 1774 00003962 7402 <1> jz .got_suffix ; no --> 1775 00003964 B044 <1> mov al, 'D' 1776 <1> .got_suffix: 1777 00003966 E89CFF <1> call dis_lowercase 1778 00003969 AA <1> stosb ; store suffix 1779 <1> 1780 <1> .suffix_invisible: ; notional suffix either displayed or left hidden, 1781 0000396A 0826[EB4E] <1> or byte [preused], ah ; in any case, mark opcode prefix as used 1782 <1> 1783 <1> .nosuffix: 1784 <1> 1785 <1> ; Store blanks to pad to 8 characters, but at least one 1786 0000396E B020 <1> mov al, 32 1787 <1> .pad: 1788 00003970 AA <1> stosb 1789 00003971 81FF[CD01] <1> cmp di, line_out+MNEMONOFS+8 1790 00003975 72F9 <1> jb .pad 1791 <1> 1792 00003977 C3 <1> retn 1793 <1> 1794 <1> 1795 <1> ; INP: byte [segmnt] = number of segment register 1796 <1> ; [segrgnam] = uppercase segment register names 1797 <1> ; CHG: bx, ax 1798 <1> ; OUT: ax = uppercase segment register name 1799 <1> showseg_uppercase_ax: 1800 00003978 A0[FB4E] <1> mov al,[segmnt] ;segment number 1801 0000397B 98 <1> cbw 1802 0000397C D1E0 <1> shl ax,1 1803 0000397E 93 <1> xchg ax,bx ;mov bx,ax 1804 0000397F 8B87[3C4F] <1> mov ax,[segrgnam+bx] ;get register name 1805 00003983 C3 <1> retn 1806 <1> 1807 <1> ; SHOWSEG - Show the segment descriptor in SEGMNT 1808 <1> ; Entry DI Where to put it 1809 <1> ; Exit DI Updated 1810 <1> ; Uses AX, BX 1811 <1> 1812 <1> showseg: 1813 00003984 E8F1FF <1> call showseg_uppercase_ax 1814 <1> dis_stosw_lowercase: 1815 00003987 E874FF <1> call dis_lowercase_w 1816 0000398A AB <1> stosw 1817 0000398B C3 <1> retn 1818 <1> 1819 <1> 1820 <1> ; Write a size specifier to the buffer 1821 <1> ; and set some flags 1822 <1> ; INP: ah = r/m size value, 1823 <1> ; F0h byte (less than zero) 1824 <1> ; 00h word (equal to zero) 1825 <1> ; 10h dword (greater than zero, but != 20h) 1826 <1> ; 20h qword (greater than zero, == 20h) 1827 <1> ; di-> buffer 1828 <1> ; OUT: di-> behind size specifier in buffer 1829 <1> ; by[rmsize] set 1830 <1> ; wo[sizeloc]-> size specifier in buffer 1831 <1> ; CHG: ax 1832 <1> ; 1833 <1> ; Size specifiers are BYTE, WORD, DWORD, and QWORD. One 1834 <1> ; blank is appended to the size specifier. 1835 <1> ; 1836 <1> ; Size specifiers are lowercased if that option is selected. 1837 <1> showsize: 1838 0000398C 8826[FA4E] <1> mov [rmsize], ah ; save r/m size 1839 00003990 893E[044F] <1> mov [sizeloc], di ; save where we're putting this 1840 00003994 B051 <1> mov al, 'Q' 1841 00003996 80FC20 <1> cmp ah, 20h ; QWORD ? 1842 00003999 7412 <1> je .qword ; yes --> 1843 0000399B 80FC00 <1> cmp ah, 0 1844 0000399E 7D09 <1> jge .notbyte ; if word or dword --> 1845 000039A0 B85445 <1> mov ax, "TE" 1846 000039A3 50 <1> push ax 1847 000039A4 B84259 <1> mov ax, "BY" 1848 000039A7 EB0F <1> jmp s .common 1849 <1> 1850 <1> .notbyte: 1851 000039A9 7406 <1> je .word ; if word 1852 <1> .dword: 1853 000039AB B044 <1> mov al, 'D' 1854 <1> .qword: 1855 000039AD E855FF <1> call dis_lowercase 1856 000039B0 AA <1> stosb 1857 <1> .word: 1858 000039B1 B85244 <1> mov ax, "RD" 1859 000039B4 50 <1> push ax 1860 000039B5 B8574F <1> mov ax, "WO" 1861 <1> .common: 1862 000039B8 E8CCFF <1> call dis_stosw_lowercase 1863 000039BB 58 <1> pop ax 1864 000039BC E8C8FF <1> call dis_stosw_lowercase 1865 000039BF B020 <1> mov al, 32 1866 000039C1 AA <1> stosb 1867 <1> showptr.ret: 1868 000039C2 C3 <1> retn 1869 <1> 1870 <1> ; Write "PTR " to a buffer if NASM syntax is not selected. 1871 <1> ; INP: di-> buffer 1872 <1> ; OUT: di-> behind written string "PTR " (or unchanged) 1873 <1> ; CHG: ax 1874 <1> ; 1875 <1> ; The string is lowercased if that option is selected. 1876 <1> showptr: 1877 000039C3 F606[8C00]04 <1> testopt [asm_options], disasm_nasm 1877 ****************** <1> expansion: adr = '[asm_options]' 1877 ****************** <1> expansion: len = 13 1877 ****************** <1> expansion: tf = '[' 1877 ****************** <1> expansion: tb = ']' 1877 ****************** <1> expansion: adr = 'asm_options' 1877 ****************** <1> expansion: adr = asm_options 1878 000039C8 75F8 <1> jnz .ret 1879 000039CA B85054 <1> mov ax, "PT" 1880 000039CD E8B7FF <1> call dis_stosw_lowercase 1881 000039D0 B85220 <1> mov ax, "R " 1882 000039D3 EBB2 <1> jmp s dis_stosw_lowercase 1883 <1> 1884 <1> ; Write "DWORD " to a buffer 1885 <1> ; INP: di-> buffer 1886 <1> ; OUT: di-> behind written string "DWORD " 1887 <1> ; CHG: ax 1888 <1> ; 1889 <1> ; The string is lowercased if that option is selected. 1890 <1> showdword: equ showsize.dword 1891 <1> 1892 <1> ; DISP32 - Print 32-bit displacement for addressing modes. 1893 <1> ; Entry None 1894 <1> ; Exit None 1895 <1> ; Uses AX 1896 <1> 1897 <1> disp32: 1898 000039D5 E89B00 <1> call disgetword 1899 <1> .ax: 1900 000039D8 50 <1> push ax 1901 000039D9 E89700 <1> call disgetword 1902 000039DC E81F3B <1> call hexword 1903 000039DF 58 <1> pop ax 1904 000039E0 E91B3B <1> jmp hexword 1905 <1> 1906 <1> ; SHOWREG16 - Show 16-bit register name. 1907 <1> ; Entry AL register number (0-7) 1908 <1> ; Exit None 1909 <1> ; Uses AX 1910 <1> 1911 <1> showreg16: 1912 000039E3 98 <1> cbw 1913 000039E4 D1E0 <1> shl ax,1 1914 000039E6 93 <1> xchg ax,bx 1915 000039E7 50 <1> push ax 1916 000039E8 8B87[2C4F] <1> mov ax,[rgnam16+bx] 1917 000039EC E898FF <1> call dis_stosw_lowercase 1918 000039EF 58 <1> pop ax 1919 000039F0 93 <1> xchg ax,bx 1920 000039F1 C3 <1> ret 1921 <1> 1922 <1> 1923 <1> ; DISCHK32D - Check for O32 (32-bit operand size). 1924 <1> dischk32d: 1925 000039F2 800E[EB4E]10 <1> or byte [preused], PREOSIZE 1926 000039F7 F606[EA4E]10 <1> test byte [presizeflags], PRE32D 1927 000039FC C3 <1> retn 1928 <1> 1929 <1> 1930 <1> ; SHOWMACH - Return string "[needs math coprocessor]", etc. 1931 <1> ; Entry di -> second item of table of 6 words 1932 <1> ; Exit si Address of string 1933 <1> ; cx Length of string, or 0 if not needed 1934 <1> ; Uses al, di 1935 <1> 1936 <1> showmach: 1937 000039FD BE[7545] <1> mov si,needsmsg ; candidate message 1938 00003A00 F606[DA4A]01 <1> test byte [dmflags],DM_COPR 1939 00003A05 741E <1> jz sm1 ; if not a coprocessor instruction 1940 00003A07 C6440937 <1> mov byte [si+9],'7' ; change message text 1941 00003A0B A0[9202] <1> mov al,[mach_87] 1942 00003A0E 803E[9102]00 <1> cmp byte [has_87],0 1943 00003A13 7517 <1> jnz sm2 ; if it has a coprocessor 1944 00003A15 A0[9002] <1> mov al,[machine] 1945 00003A18 3A06[D94A] <1> cmp al,[dismach] 1946 00003A1C 7214 <1> jb sm3 ; if we display the message 1947 00003A1E BE[8045] <1> mov si,needsmath ; print this message instead 1948 00003A21 B91800 <1> mov cx,needsmath_L 1949 00003A24 C3 <1> retn 1950 <1> 1951 <1> sm1: 1952 00003A25 C6440936 <1> mov byte [si+9],'6' ; reset message text 1953 00003A29 A0[9002] <1> mov al,[machine] 1954 <1> sm2: 1955 00003A2C 3A06[D94A] <1> cmp al,[dismach] 1956 00003A30 730C <1> jae sm4 ; if no message (so far) 1957 <1> sm3: 1958 00003A32 A0[D94A] <1> mov al,[dismach] 1959 00003A35 0430 <1> add al,'0' 1960 00003A37 884407 <1> mov [si+7],al 1961 00003A3A B90B00 <1> mov cx,needsmsg_L ; length of the message 1962 00003A3D C3 <1> retn 1963 <1> 1964 <1> ; Check for obsolete instruction. 1965 <1> sm4: 1966 00003A3E BE[9845] <1> mov si, obsolete ; candidate message 1967 00003A41 8B45FE <1> mov ax, word [di-2] ; get info on this instruction 1968 00003A44 B90500 <1> mov cx, 5 1969 00003A47 F2AF <1> repne scasw 1970 00003A49 7511 <1> jne sm6 ; if no matches 1971 00003A4B BF[F14A] <1> mov di, obsmach + 5 - 1 1972 00003A4E 29CF <1> sub di, cx 1973 00003A50 31C9 <1> xor cx, cx ; clear CX: no message 1974 00003A52 A0[9202] <1> mov al, byte [mach_87] 1975 00003A55 3A05 <1> cmp al, byte [di] 1976 00003A57 7E03 <1> jle sm5 ; if this machine is OK 1977 00003A59 B90A00 <1> mov cx, obsolete_L 1978 <1> sm5: 1979 00003A5C C3 <1> retn 1980 <1> 1981 <1> sm6: equ sm5 1982 <1> 1983 <1> 1984 <1> ; DISGETBYTE - Get byte for disassembler. 1985 <1> ; Entry None 1986 <1> ; Exit AL Next byte in instruction stream 1987 <1> ; Uses None 1988 <1> 1989 <1> disgetbyte: 1990 00003A5D 1E <1> push ds 1991 <1> _386_PM_o32 ; push esi 1992 00003A5E 56 <1> push si ; save ds, (e)si 1993 <1> _386_PM_o32 ; mov esi, dword [u_addr] 1994 00003A5F 8B36[AA02] <1> mov si, word [u_addr] 1995 <1> _386_PM_o32 ; add esi, dword [dis_n] 1996 00003A63 0336[E64E] <1> add si, word [dis_n] ; index to the right byte 1997 00003A67 8E1E[AE02] <1> mov ds, word [u_addr+4] 1998 <1> _386_PM_a32 1999 00003A6B AC <1> lodsb ; get the byte 2000 <1> _386_PM_o32 ; pop esi 2001 00003A6C 5E <1> pop si 2002 00003A6D 1F <1> pop ds ; restore regs 2003 <1> _386_PM_o32 ; inc dword [dis_n] 2004 00003A6E FF06[E64E] <1> inc word [dis_n] ; indicate that we've gotten this byte 2005 00003A72 C3 <1> retn 2006 <1> 2007 <1> 2008 <1> ; DISGETWORD - Get word for disassembler. 2009 <1> ; Entry None 2010 <1> ; Exit AX Next word 2011 <1> ; Uses None 2012 <1> 2013 <1> disgetword: 2014 00003A73 1E <1> push ds 2015 <1> _386_PM_o32 ; push esi 2016 00003A74 56 <1> push si ; save ds, (e)si 2017 <1> _386_PM_o32 ; mov esi, dword [u_addr] 2018 00003A75 8B36[AA02] <1> mov si, word [u_addr] 2019 <1> _386_PM_o32 ; add esi, dword [dis_n] 2020 00003A79 0336[E64E] <1> add si, word [dis_n] ; index to the right byte 2021 00003A7D 8E1E[AE02] <1> mov ds, word [u_addr+4] 2022 <1> _386_PM_a32 2023 00003A81 AD <1> lodsw ; get the word 2024 <1> _386_PM_o32 ; pop esi 2025 00003A82 5E <1> pop si 2026 00003A83 1F <1> pop ds ; restore regs 2027 <1> _386_PM_o32 ; add dword [dis_n], byte 2 2028 00003A84 8306[E64E]02 <1> add word [dis_n], byte 2 ; indicate that we've gotten this word 2029 00003A89 C3 <1> retn 2030 <1> 2031 <1> 2032 <1> ; DISSHOWBYTES - Show bytes for the disassembler. 2033 <1> ; Entry BX Number of bytes (must be > 0) 2034 <1> ; di-> output line 2035 <1> ; Exit u_addr updated 2036 <1> ; Uses BX, (E)SI. 2037 <1> 2038 <1> disshowbytes: 2039 <1> _386_PM_o32 ; mov esi, dword [u_addr] 2040 00003A8A 8B36[AA02] <1> mov si, word [u_addr] 2041 00003A8E 8E1E[AE02] <1> mov ds, word [u_addr+4] 2042 <1> .loop: 2043 <1> _386_PM_a32 2044 00003A92 AC <1> lodsb 2045 00003A93 E86F3A <1> call hexbyte 2046 00003A96 4B <1> dec bx 2047 00003A97 75F9 <1> jnz .loop 2048 00003A99 16 <1> push ss 2049 00003A9A 1F <1> pop ds 2050 <1> _386_PM_o32 ; mov dword [u_addr], esi 2051 00003A9B 8936[AA02] <1> mov word [u_addr], si 2052 00003A9F C3 <1> retn 2053 <1> 2054 <1> ; MOVEOVER - Move the line to the right. 2055 <1> ; Entry DI Last address + 1 of line so far 2056 <1> ; Exit CX Number of bytes to move 2057 <1> ; DI Updated 2058 <1> ; Uses SI 2059 <1> moveover: 2060 00003AA0 833E[044F]00 <1> cmp word [sizeloc], byte 0 2061 00003AA5 7404 <1> je mo1 ; if sizeloc not saved 2062 00003AA7 010E[044F] <1> add word [sizeloc], cx 2063 <1> 2064 <1> mo1: 2065 00003AAB 89FE <1> mov si, di 2066 00003AAD 01CF <1> add di, cx 2067 00003AAF 89F9 <1> mov cx, di 2068 00003AB1 81E9[C501] <1> sub cx, line_out+MNEMONOFS 2069 00003AB5 57 <1> push di 2070 00003AB6 FD <1> std 2071 00003AB7 4E <1> dec si 2072 00003AB8 4F <1> dec di 2073 00003AB9 F3A4 <1> rep movsb 2074 00003ABB 5F <1> pop di 2075 00003ABC FC <1> cld 2076 00003ABD C3 <1> retn 1513 1514 1515 usesection lDEBUG_CODE 1515 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 1516 1517 ; C command - compare bytes. 1518 cc: 1519 00003ABE E85C2D call parsecm ; parse arguments 1520 1521 ; To make the 16-bit 64 KiB compare hack below work, the 1522 ; full ecx mustn't be increased here for 16-bit segments. 1523 ; The passed ecx isn't higher than FFFFh for 16-bit segments, 1524 ; and a value of 0001_0000h needs to be passed as zero to 1525 ; the hack anyway. 1526 %if _PM 1527 cmp byte [ss:bAddr32], 0 1528 je .16 1529 cpu 386 1530 inc ecx 1531 jnz cc1 1532 jmp error 1533 cpu 8086 1534 .16: 1535 %endif 1536 00003AC1 41 inc cx 1537 cc1: 1538 00003AC2 1E push ds 1539 00003AC3 06 push es 1540 00003AC4 16 push ss 1541 00003AC5 1F pop ds ; ds := cs 1542 00003AC6 E8032D call dohack ; do the interrupt pointer hack 1543 00003AC9 07 pop es 1544 00003ACA 1F pop ds 1545 %if _PM 1546 cmp byte [ss:bAddr32], 0 1547 jz .cmp16 1548 a32 repe cmpsb 1549 mov dl, byte [esi-1] 1550 mov dh, byte [es:edi-1] 1551 jmp short .cmpdone 1552 .cmp16: 1553 %endif 1554 ; The following 3 instructions make a hack to support 64 KiB 1555 ; compare. The only time we get here with cx = 0 is the first 1556 ; iteration for a 64 KiB compare. In that case, dec cx results 1557 ; in FFFFh making repe cmpsb work. The single cmpsb will either 1558 ; jump the repe cmpsb (if it found a mismatch) or not jump it. 1559 ; The repe cmpsb might be executed with cx = 0, but will then 1560 ; not change anything including the flags so it works. 1561 00003ACB 49 dec cx 1562 00003ACC A6 cmpsb 1563 00003ACD 7502 jne .skip 1564 00003ACF F3A6 repe cmpsb ; start comparing 1565 .skip: 1566 00003AD1 8A54FF mov dl, byte [si-1] ; save the possibly errant characters 1567 00003AD4 268A75FF mov dh, byte [es:di-1] 1568 .cmpdone: 1569 00003AD8 9F lahf 1570 00003AD9 1E push ds 1571 00003ADA 06 push es 1572 00003ADB 16 push ss 1573 00003ADC 1F pop ds 1574 00003ADD E8002D call unhack ; undo the interrupt pointer hack 1575 00003AE0 07 pop es 1576 00003AE1 1F pop ds 1577 00003AE2 9E sahf 1578 00003AE3 744A je cc2 ; if we're done 1579 00003AE5 06 push es 1580 00003AE6 16 push ss 1581 00003AE7 07 pop es 1582 _386_PM_o32 ; mov ebx, edi 1583 00003AE8 89FB mov bx, di 1584 00003AEA BF[A901] mov di, line_out 1585 00003AED 8CD8 mov ax, ds 1586 00003AEF E80C3A call hexword 1587 00003AF2 B03A mov al, ':' 1588 00003AF4 AA stosb 1589 _386_PM_o32 ; mov eax, esi 1590 00003AF5 89F0 mov ax, si 1591 _386_PM_o32 ; dec eax 1592 00003AF7 48 dec ax 1593 %if _PM 1594 cmp byte [ss:bAddr32], 0 1595 jz .16si 1596 call hexword_high 1597 .16si: 1598 %endif 1599 00003AF8 E8033A call hexword 1600 00003AFB B82020 mov ax, 32<<8|32 1601 00003AFE AB stosw 1602 00003AFF 88D0 mov al, dl 1603 00003B01 E8013A call hexbyte 1604 00003B04 B82020 mov ax, 32<<8|32 1605 00003B07 AB stosw 1606 00003B08 88F0 mov al, dh 1607 00003B0A E8F839 call hexbyte 1608 00003B0D B82020 mov ax, 32<<8|32 1609 00003B10 AB stosw 1610 00003B11 58 pop ax 1611 00003B12 50 push ax 1612 00003B13 E8E839 call hexword 1613 00003B16 B03A mov al, ':' 1614 00003B18 AA stosb 1615 _386_PM_o32 ; mov eax, ebx 1616 00003B19 89D8 mov ax, bx 1617 _386_PM_o32 ; dec eax 1618 00003B1B 48 dec ax 1619 %if _PM 1620 cmp byte [ss:bAddr32], 0 1621 jz .16bx 1622 call hexword_high 1623 .16bx: 1624 %endif 1625 00003B1C E8DF39 call hexword 1626 00003B1F 1E push ds 1627 00003B20 16 push ss 1628 00003B21 1F pop ds 1629 00003B22 53 push bx 1630 00003B23 51 push cx 1631 00003B24 E80F3A call putsline_crlf 1632 00003B27 59 pop cx 1633 00003B28 5F pop di 1634 00003B29 1F pop ds 1635 00003B2A 07 pop es 1636 %if _PM 1637 cmp byte [ss:bAddr32],0 1638 jz cc1_6 1639 cpu 386 1640 jecxz cc2 1641 cpu 8086 1642 cc1_j1: 1643 jmp cc1 1644 cc1_6: 1645 %else 1646 cc1_j1 equ cc1 1647 %endif 1648 %if 0 1649 _386_PM_o32 ; inc ecx 1650 inc cx 1651 _386_PM_a32 ; loopd cc1 1652 loop cc1 ; if not done yet 1653 %else 1654 _386_PM_a32 ; jecxz cc2 1655 00003B2B E302 jcxz cc2 1656 00003B2D EB93 jmp cc1 ; if not done yet 1657 %endif 1658 cc2: 1659 00003B2F 16 push ss ; restore segment registers 1660 00003B30 1F pop ds 1661 00003B31 16 push ss 1662 00003B32 07 pop es 1663 00003B33 C3 retn 1664 1665 1666 %if _BOOTLDR 1667 %include "boot.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug "boot" commands - boot loading 5 <1> 6 <1> Copyright (C) 2008-2017 C. Masloch 7 <1> 8 <1> Usage of the works is permitted provided that this 9 <1> instrument is retained with the works, so that any entity 10 <1> that uses the works is notified of this instrument. 11 <1> 12 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 13 <1> 14 <1> %endif 15 <1> 16 <1> 17 <1> usesection lDEBUG_DATA_ENTRY 17 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 18 <1> 19 00004F82 90 <1> align 16 20 00004F90 00 <1> load_partition_table: times 16 * 4 db 0 21 <1> .end: 22 <1> 23 <1> align 16 24 <1> ; Data passed to us from loader (in case we booted) 25 <1> loaddata_loadedfrom: 26 00004FD0 00 <1> times (-LOADDATA + bsBPB + ebpbNew + BPBN_size) db 0 27 <1> 28 0000504A 90 <1> align 16 29 <1> ; data used to access storage 30 <1> load_data: 31 00005050 00 <1> times (-LOADDATA2 + bsBPB + ebpbNew + BPBN_size) db 0 32 000050DA 90 <1> align 16 33 <1> load_current_settings: 34 <1> istruc LOADSETTINGS 34 ****************** <1> expansion: strucname = LOADSETTINGS 35 000050E0 0000 <1> at lsKernelName, load_kernelname_default: dw 0 36 000050E2 0000 <1> at lsAddName, load_addname_default: dw 0 37 000050E4 0000 <1> at lsMinPara, load_minpara: dw 0 38 000050E6 0000 <1> at lsMaxPara, load_maxpara: dw 0 39 000050E8 0000 <1> at lsOptions, load_options: dw 0 40 000050EA 0000 <1> at lsSegment, load_loadseg: dw 0 41 000050EC 00000000 <1> at lsEntry, load_entrypoint: dd 0 42 000050F0 00000000 <1> at lsBPB, load_bpb: dd 0 43 <1> at lsName 44 <1> ; iend 45 <1> %pop ; (pop off the istruc context) 46 <1> 47 <1> align 4 48 000050F4 00000000 <1> load_bpb_dest: dd 0 49 <1> load_sectors: equ load_data - LOADDATA2 + bsBPB + bpbCHSSectors 50 <1> load_heads: equ load_data - LOADDATA2 + bsBPB + bpbCHSHeads 51 <1> load_sectorsize: equ load_data - LOADDATA2 + bsBPB + bpbBytesPerSector 52 <1> load_sectorsizepara: equ load_data - LOADDATA2 + ldParaPerSector 53 <1> load_sectorseg: equ load_data - LOADDATA2 + ldSectorSeg 54 <1> load_partition_sector: equ loaddata_loadedfrom - LOADDATA + bsBPB + bpbHiddenSectors 55 000050F8 0000 <1> load_partition_cycle: dw 0 56 <1> load_lba: equ load_data - LOADDATA2 + ldHasLBA 57 <1> load_unit: equ load_data - LOADDATA2 + bsBPB + ebpbNew + bpbnBootUnit 58 000050FA 00 <1> load_partition: db 0 59 000050FB 00 <1> load_current_partition: db 0 60 000050FC 00 <1> load_found_partition: db 0 61 000050FD 00 <1> load_check_dir_attr: db 0 62 000050FE 00 <1> load_sector_alt: db 0 63 <1> 64 000050FF 90 <1> align 4 65 00005100 00 <1> load_kernel_name: times 11 + 1 db 0 66 <1> align 2 67 <1> ; load_kernelname_default:dw 0 68 <1> ; ASCIZ filename for if load_kernelname_input terminates in '/' 69 0000510C 0000 <1> load_kernelname_input: dw 0 70 <1> ; input (ASCIZ '/'-terminated pathnames + optional filename) 71 0000510E 0000 <1> load_kernelname_next: dw 0 72 <1> ; next element in ASCIZ load_kernelname_input, 73 <1> ; empty string if pathname terminated in '/' 74 <1> ; load_addname_default: dw 0 75 00005110 0000 <1> load_addname_input: dw 0 76 00005112 0000 <1> load_addname_next: dw 0 77 <1> 78 <1> align 2 79 00005114 0000 <1> boot_new_memsizekib: dw 0 80 00005116 0000 <1> boot_old_memsizekib: dw 0 81 00005118 00 <1> boot_ebdaflag: db 0 ; EBDA flag: non-zero if present 82 <1> 83 00005119 90 <1> align 2 84 0000511A 00000000 <1> load_readwrite_sector: dd 0 85 0000511E 0000 <1> load_readwrite_buffer: dw 0 86 00005120 0000 <1> load_readwrite_count: dw 0 87 00005122 0000 <1> load_readwrite_function:dw 0 88 <1> 89 <1> 90 <1> usesection lDEBUG_CODE 90 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 91 <1> 92 <1> bootcmd: 93 <1> %if _PM 94 <1> call ispm 95 <1> jnz .rm 96 <1> mov dx, nopmsupp 97 <1> jmp putsz 98 <1> .rm: 99 <1> %endif 100 00003B34 E867C5 <1> d4 call d4message 101 00003B37 496E20626F6F74636D- <1> d4 asciz "In bootcmd",13,10 101 00003B40 640D0A00 <1> 102 <1> 103 00003B44 BD[8050] <1> mov bp, load_data - LOADDATA2 104 00003B47 31C0 <1> xor ax, ax 105 00003B49 89461C <1> mov [bp + bsBPB + bpbHiddenSectors + 0], ax 106 00003B4C 89461E <1> mov [bp + bsBPB + bpbHiddenSectors + 2], ax 107 00003B4F A2[FE50] <1> mov byte [load_sector_alt], al 108 <1> 109 00003B52 E82939 <1> call skipcomma 110 00003B55 4E <1> dec si 111 00003B56 BA[713F] <1> mov dx, msg.list 112 00003B59 E8D638 <1> call isstring? 113 00003B5C 7503E9FC04 <1> je .list 114 <1> 115 <1> %if _DOSEMU 116 00003B61 F606[8700]01 <1> testopt [internalflags], runningdosemu 116 ****************** <1> expansion: adr = '[internalflags]' 116 ****************** <1> expansion: len = 15 116 ****************** <1> expansion: tf = '[' 116 ****************** <1> expansion: tb = ']' 116 ****************** <1> expansion: adr = 'internalflags' 116 ****************** <1> expansion: adr = internalflags 117 00003B66 7413 <1> jz .not_dosemu 118 00003B68 BA[7D39] <1> mov dx, msg.quit 119 00003B6B E8C438 <1> call isstring? 120 00003B6E 750B <1> jne .not_dosemu 121 00003B70 31DB <1> xor bx, bx 122 00003B72 B8FFFF <1> mov ax, -1 123 00003B75 CDE6 <1> int 0E6h ; dosemu quit 124 <1> @@: 124 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.83 124 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.84 124 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.85 124 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.86 124 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.87 124 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.88 124 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.89 124 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.90 124 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.83 124 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.84 124 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.85 124 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.86 124 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.87 124 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.88 124 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.89 124 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.90 124 ****************** <1> expansion: __@@_num = 91 125 00003B77 FB <1> sti 126 00003B78 F4 <1> hlt 127 00003B79 EBFC <1> jmp @B 128 <1> .not_dosemu: 129 <1> %endif 130 <1> 131 00003B7B BA[6D39] <1> mov dx, msg.read 132 00003B7E E8B138 <1> call isstring? 133 00003B81 7503E9A209 <1> je boot_read 134 <1> 135 00003B86 BA[7239] <1> mov dx, msg.write 136 00003B89 E8A638 <1> call isstring? 137 00003B8C 7503E99F09 <1> je boot_write 138 <1> 139 00003B91 BA[8239] <1> mov dx, msg.protocol 140 00003B94 E89B38 <1> call isstring? 141 00003B97 7533 <1> jne .notproto 142 <1> 143 00003B99 E8FA38 <1> call skipequals 144 00003B9C 4E <1> dec si 145 00003B9D BA[AD39] <1> mov dx, msg.sector 146 00003BA0 E88F38 <1> call isstring? 147 00003BA3 7423 <1> je .proto_sector 148 <1> 149 00003BA5 BA[B439] <1> mov dx, msg.sector_alt 150 00003BA8 E88738 <1> call isstring? 151 00003BAB 7416 <1> je .proto_sector_alt 152 <1> 153 00003BAD BB[E442] <1> mov bx, loadsettings 154 <1> .proto_settings_next: 155 00003BB0 8D5714 <1> lea dx, [bx + lsName] 156 00003BB3 E87C38 <1> call isstring? 157 00003BB6 7424 <1> je .proto_settings 158 00003BB8 83C31C <1> add bx, LOADSETTINGS_size 159 00003BBB 833F00 <1> cmp word [bx], 0 160 00003BBE 75F0 <1> jne .proto_settings_next 161 <1> 162 00003BC0 E9382B <1> jmp error 163 <1> 164 <1> .proto_sector_alt: 165 00003BC3 C606[FE50]01 <1> mov byte [load_sector_alt], 1 166 <1> .proto_sector: 167 00003BC8 E8B338 <1> call skipcomma 168 00003BCB A8 <1> db __TEST_IMM8 169 <1> .notproto: 170 00003BCC AC <1> lodsb 171 00003BCD E8A706 <1> call parseloadunit 172 00003BD0 7203E9F502 <1> jnc .load 173 <1> 174 00003BD5 A8 <1> db __TEST_IMM8 ; skip dec 175 <1> .errordec: 176 00003BD6 4E <1> dec si 177 <1> .error: 178 00003BD7 A8 <1> db __TEST_IMM8 ; skip pop 179 <1> .errorpop: 180 00003BD8 5E <1> pop si 181 00003BD9 E91F2B <1> jmp error 182 <1> 183 <1> 184 <1> .proto_settings: 185 00003BDC 56 <1> push si 186 00003BDD 89DE <1> mov si, bx 187 00003BDF BF[E050] <1> mov di, load_current_settings 188 00003BE2 B90A00 <1> mov cx, lsName >> 1 189 00003BE5 F3A5 <1> rep movsw 190 <1> %if lsName & 1 191 <1> movsb 192 <1> %endif 193 00003BE7 FF75EC <1> push word [load_kernelname_default - (load_current_settings + lsName) + di] 194 00003BEA 8F4518 <1> pop word [load_kernelname_input - (load_current_settings + lsName) + di] 195 00003BED FF75EE <1> push word [load_addname_default - (load_current_settings + lsName) + di] 196 00003BF0 8F451C <1> pop word [load_addname_input - (load_current_settings + lsName) + di] 197 <1> 198 00003BF3 5E <1> pop si 199 <1> 200 00003BF4 E8A7C4 <1> d4 call d4message 201 00003BF7 496E20626F6F74636D- <1> d4 asciz "In bootcmd.proto_settings",13,10 201 00003C00 642E70726F746F5F73- <1> 201 00003C09 657474696E67730D0A- <1> 201 00003C12 00 <1> 202 <1> 203 <1> .proto_next: 204 00003C13 E86838 <1> call skipcomma 205 00003C16 4E <1> dec si 206 00003C17 BA[8B39] <1> mov dx, msg.segment 207 00003C1A E81538 <1> call isstring? 208 00003C1D 745E <1> je .proto_segment 209 00003C1F BA[9339] <1> mov dx, msg.entry 210 00003C22 E80D38 <1> call isstring? 211 00003C25 746E <1> je .proto_entry 212 00003C27 BA[9939] <1> mov dx, msg.bpb 213 00003C2A E80538 <1> call isstring? 214 00003C2D 7503E98200 <1> je .proto_bpb 215 00003C32 BA[9D39] <1> mov dx, msg.minpara 216 00003C35 E8FA37 <1> call isstring? 217 00003C38 7503E99600 <1> je .proto_minpara 218 00003C3D BA[A539] <1> mov dx, msg.maxpara 219 00003C40 E8EF37 <1> call isstring? 220 00003C43 7503E99900 <1> je .proto_maxpara 221 <1> 222 00003C48 BB[B841] <1> mov bx, loadoptiontable 223 <1> .proto_lot_next: 224 00003C4B 8B0F <1> mov cx, [bx] ; flag 225 00003C4D 8B5702 <1> mov dx, [bx + 2] ; -> ASCIZ message 226 00003C50 85C9 <1> test cx, cx 227 00003C52 7503E99800 <1> jz .proto_done 228 00003C57 E8D837 <1> call isstring? 229 00003C5A 7405 <1> je .proto_lot 230 00003C5C 83C304 <1> add bx, 4 231 00003C5F EBEA <1> jmp .proto_lot_next 232 <1> 233 <1> .proto_lot: 234 00003C61 E83238 <1> call skipequals 235 00003C64 89CA <1> mov dx, cx 236 00003C66 F7D2 <1> not dx 237 00003C68 2116[E850] <1> and word [load_options], dx 238 00003C6C E89E33 <1> call getexpression 239 00003C6F E8C030 <1> call toboolean 240 00003C72 85D2 <1> test dx, dx 241 00003C74 7404 <1> jz @F 242 00003C76 090E[E850] <1> or word [load_options], cx 243 <1> @@: 243 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.84 243 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.85 243 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.86 243 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.87 243 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.88 243 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.89 243 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.90 243 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.91 243 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.84 243 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.85 243 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.86 243 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.87 243 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.88 243 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.89 243 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.90 243 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.91 243 ****************** <1> expansion: __@@_num = 92 244 00003C7A 4E <1> dec si 245 00003C7B EB96 <1> jmp .proto_next 246 <1> 247 <1> .proto_segment: 248 00003C7D E81638 <1> call skipequals 249 00003C80 E86D37 <1> call getword ; dx = word 250 00003C83 83FA50 <1> cmp dx, 50h 251 00003C86 7207 <1> jb @F 252 00003C88 8916[EA50] <1> mov word [load_loadseg], dx 253 00003C8C 4E <1> dec si 254 00003C8D EB84 <1> jmp .proto_next 255 <1> 256 <1> @@: 256 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.85 256 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.86 256 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.87 256 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.88 256 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.89 256 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.90 256 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.91 256 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.92 256 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.85 256 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.86 256 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.87 256 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.88 256 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.89 256 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.90 256 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.91 256 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.92 256 ****************** <1> expansion: __@@_num = 93 257 00003C8F BA[1439] <1> mov dx, msg.boot_segment_too_low 258 00003C92 E9B803 <1> jmp .fail 259 <1> 260 <1> 261 <1> .proto_entry: 262 00003C95 E8FE37 <1> call skipequals 263 00003C98 31DB <1> xor bx, bx 264 00003C9A E8992C <1> call getaddr ; bx:(e)dx = addr 265 00003C9D 66F7C20000FFFF <1> _386 test edx, 0_FFFF_0000h 265 ****************** <1> expansion: entry = 15517 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517 265 ****************** <1> expansion: entry = 15518 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518 265 ****************** <1> expansion: entry = 15519 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519 265 ****************** <1> expansion: entry = 15520 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520 265 ****************** <1> expansion: entry = 15521 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521 265 ****************** <1> expansion: entry = 15522 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522 265 ****************** <1> expansion: entry = 15523 265 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523 265 ****************** <1> expansion: entry = 15524 266 00003CA4 0F852FFF <1> _386 jnz .error 266 ****************** <1> expansion: entry = 15524 266 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524 266 ****************** <1> expansion: entry = 15525 266 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525 266 ****************** <1> expansion: entry = 15526 266 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526 266 ****************** <1> expansion: entry = 15527 266 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527 266 ****************** <1> expansion: entry = 15528 267 00003CA8 8916[EC50] <1> mov word [load_entrypoint], dx 268 00003CAC 891E[EE50] <1> mov word [load_entrypoint + 2], bx 269 00003CB0 4E <1> dec si 270 00003CB1 E95FFF <1> jmp .proto_next 271 <1> 272 <1> .proto_bpb: 273 00003CB4 E8DF37 <1> call skipequals 274 00003CB7 31DB <1> xor bx, bx 275 00003CB9 E87A2C <1> call getaddr ; bx:(e)dx = addr 276 00003CBC 66F7C20000FFFF <1> _386 test edx, 0_FFFF_0000h 276 ****************** <1> expansion: entry = 15548 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548 276 ****************** <1> expansion: entry = 15549 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549 276 ****************** <1> expansion: entry = 15550 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550 276 ****************** <1> expansion: entry = 15551 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551 276 ****************** <1> expansion: entry = 15552 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552 276 ****************** <1> expansion: entry = 15553 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553 276 ****************** <1> expansion: entry = 15554 276 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554 276 ****************** <1> expansion: entry = 15555 277 00003CC3 0F8510FF <1> _386 jnz .error 277 ****************** <1> expansion: entry = 15555 277 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555 277 ****************** <1> expansion: entry = 15556 277 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556 277 ****************** <1> expansion: entry = 15557 277 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557 277 ****************** <1> expansion: entry = 15558 277 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558 277 ****************** <1> expansion: entry = 15559 278 00003CC7 8916[F050] <1> mov word [load_bpb], dx 279 00003CCB 891E[F250] <1> mov word [load_bpb + 2], bx 280 00003CCF 4E <1> dec si 281 00003CD0 E940FF <1> jmp .proto_next 282 <1> 283 <1> .proto_minpara: 284 00003CD3 E8C037 <1> call skipequals 285 00003CD6 E81737 <1> call getword ; dx = word 286 00003CD9 8916[E450] <1> mov word [load_minpara], dx 287 00003CDD 4E <1> dec si 288 00003CDE E932FF <1> jmp .proto_next 289 <1> 290 <1> .proto_maxpara: 291 00003CE1 E8B237 <1> call skipequals 292 00003CE4 E80937 <1> call getword ; dx = word 293 00003CE7 8916[E650] <1> mov word [load_maxpara], dx 294 00003CEB 4E <1> dec si 295 00003CEC E924FF <1> jmp .proto_next 296 <1> 297 <1> .proto_done: 298 00003CEF BB[E841] <1> mov bx, loadoptiontable.incompatible 299 <1> @@: 299 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.86 299 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.87 299 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.88 299 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.89 299 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.90 299 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.91 299 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.92 299 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.93 299 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.86 299 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.87 299 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.88 299 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.89 299 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.90 299 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.91 299 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.92 299 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.93 299 ****************** <1> expansion: __@@_num = 94 300 00003CF2 8B0F <1> mov cx, [bx] 301 00003CF4 0B4F02 <1> or cx, [bx + 2] 302 00003CF7 7458 <1> jz .proto_compatible 303 00003CF9 8B16[E850] <1> mov dx, word [load_options] 304 00003CFD 21CA <1> and dx, cx 305 00003CFF 39CA <1> cmp dx, cx 306 00003D01 7405 <1> je .proto_incompatible 307 00003D03 83C304 <1> add bx, 4 308 00003D06 EBEA <1> jmp @B 309 <1> 310 <1> .proto_incompatible: 311 00003D08 16 <1> push ss 312 00003D09 07 <1> pop es 313 00003D0A BA[4536] <1> mov dx, msg.bootfail 314 00003D0D E85F3A <1> call putsz 315 00003D10 BA[C738] <1> mov dx, msg.boot_cannot_set_both 316 00003D13 E8593A <1> call putsz 317 00003D16 8B07 <1> mov ax, word [bx] 318 00003D18 E81B00 <1> call .proto_incompatible_get_label 319 00003D1B E8513A <1> call putsz 320 00003D1E BA[D838] <1> mov dx, msg.boot_and 321 00003D21 E84B3A <1> call putsz 322 00003D24 8B4702 <1> mov ax, word [bx + 2] 323 00003D27 E80C00 <1> call .proto_incompatible_get_label 324 00003D2A E8423A <1> call putsz 325 00003D2D BA[DE38] <1> mov dx, msg.boot_dot_crlf 326 <1> .putsz_cmd3: 327 00003D30 E83C3A <1> call putsz 328 00003D33 E9ADC4 <1> jmp cmd3 329 <1> 330 <1> .proto_incompatible_get_label: 331 00003D36 53 <1> push bx 332 00003D37 BB[B841] <1> mov bx, loadoptiontable 333 <1> @@: 333 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.87 333 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.88 333 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.89 333 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.90 333 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.91 333 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.92 333 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.93 333 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.94 333 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.87 333 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.88 333 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.89 333 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.90 333 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.91 333 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.92 333 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.93 333 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.94 333 ****************** <1> expansion: __@@_num = 95 334 00003D3A 8B0F <1> mov cx, [bx] 335 00003D3C E30E <1> jcxz .proto_internal_error 336 00003D3E 39C8 <1> cmp ax, cx 337 00003D40 8B5702 <1> mov dx, word [bx + 2] 338 00003D43 7405 <1> je @F 339 00003D45 83C304 <1> add bx, 4 340 00003D48 EBF0 <1> jmp @B 341 <1> 342 <1> @@: 342 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.88 342 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.89 342 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.90 342 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.91 342 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.92 342 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.93 342 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.94 342 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.95 342 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.88 342 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.89 342 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.90 342 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.91 342 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.92 342 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.93 342 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.94 342 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.95 342 ****************** <1> expansion: __@@_num = 96 343 00003D4A 5B <1> pop bx 344 00003D4B C3 <1> retn 345 <1> 346 <1> .proto_internal_error: 347 00003D4C BA[E238] <1> mov dx, msg.boot_internal_error 348 00003D4F EBDF <1> jmp .putsz_cmd3 349 <1> 350 <1> 351 <1> .proto_compatible: 352 00003D51 AC <1> lodsb 353 00003D52 E82205 <1> call parseloadunit 354 00003D55 7303E97DFE <1> jc .error 355 00003D5A 7503E9F400 <1> jz .fn_done ; no filename given, use defaults --> 356 <1> ; al was = '/' or '\' or first pathname's first character 357 <1> ; si-> next char 358 00003D5F BB[0C51] <1> mov bx, load_kernelname_input 359 00003D62 E84A00 <1> call .pathname_parse_super 360 <1> 361 00003D65 56 <1> push si 362 00003D66 50 <1> push ax 363 00003D67 E84337 <1> call skipwh0 364 00003D6A E8FB36 <1> call iseol? 365 00003D6D 58 <1> pop ax 366 00003D6E 5E <1> pop si 367 00003D6F 7503E9DF00 <1> je .fn_done 368 <1> 369 00003D74 BB[1051] <1> mov bx, load_addname_input 370 <1> 371 00003D77 E83337 <1> call skipwh0 372 00003D7A 3C2F <1> cmp al, '/' 373 00003D7C 7404 <1> je @F 374 00003D7E 3C5C <1> cmp al, '\' 375 00003D80 7521 <1> jne .proto_not_double_slash 376 <1> @@: 376 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.89 376 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.90 376 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.91 376 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.92 376 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.93 376 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.94 376 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.95 376 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.96 376 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.89 376 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.90 376 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.91 376 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.92 376 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.93 376 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.94 376 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.95 376 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.96 376 ****************** <1> expansion: __@@_num = 97 377 00003D82 803C2F <1> cmp byte [si], '/' 378 00003D85 7405 <1> je @F 379 00003D87 803C5C <1> cmp byte [si], '\' 380 00003D8A 7517 <1> jne .proto_not_double_slash 381 <1> @@: 381 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.90 381 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.91 381 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.92 381 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.93 381 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.94 381 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.95 381 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.96 381 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.97 381 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.90 381 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.91 381 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.92 381 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.93 381 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.94 381 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.95 381 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.96 381 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.97 381 ****************** <1> expansion: __@@_num = 98 382 00003D8C 4E <1> dec si 383 00003D8D 8937 <1> mov word [bx], si 384 00003D8F C7042F2F <1> mov word [si], "//" 385 00003D93 46 <1> inc si 386 00003D94 46 <1> inc si 387 00003D95 56 <1> push si 388 00003D96 E81337 <1> call skipwhite 389 00003D99 E8D736 <1> call chkeol 390 00003D9C 5E <1> pop si 391 00003D9D C60400 <1> mov byte [si], 0 392 00003DA0 E9B000 <1> jmp .fn_done 393 <1> 394 <1> .proto_not_double_slash: 395 00003DA3 E80900 <1> call .pathname_parse_super 396 <1> 397 00003DA6 E80437 <1> call skipwh0 ; check that no trailing garbage 398 00003DA9 E8C736 <1> call chkeol ; lives here 399 00003DAC E9A400 <1> jmp .fn_done 400 <1> 401 <1> 402 <1> .pathname_parse_super: 403 00003DAF E8ECC2 <1> d4 call d4message 404 00003DB2 496E20626F6F74636D- <1> d4 asciz "In bootcmd.pathname_parse_super",13,10 404 00003DBB 642E706174686E616D- <1> 404 00003DC4 655F70617273655F73- <1> 404 00003DCD 757065720D0A00 <1> 405 <1> 406 00003DD4 E8D636 <1> call skipwh0 407 00003DD7 3C2F <1> cmp al, '/' 408 00003DD9 7404 <1> je @F 409 00003DDB 3C5C <1> cmp al, '\' 410 00003DDD 7506 <1> jne @FF 411 <1> @@: 411 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.91 411 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.92 411 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.93 411 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.94 411 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.95 411 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.96 411 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.97 411 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.98 411 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.91 411 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.92 411 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.93 411 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.94 411 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.95 411 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.96 411 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.97 411 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.98 411 ****************** <1> expansion: __@@_num = 99 412 00003DDF 4E <1> dec si 413 00003DE0 8937 <1> mov word [bx], si 414 00003DE2 46 <1> inc si 415 00003DE3 EB2D <1> jmp .pathname_check 416 <1> 417 <1> @@: 417 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.92 417 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.93 417 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.94 417 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.95 417 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.96 417 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.97 417 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.98 417 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.99 417 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.92 417 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.93 417 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.94 417 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.95 417 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.96 417 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.97 417 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.98 417 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.99 417 ****************** <1> expansion: __@@_num = 100 418 00003DE5 4E <1> dec si 419 00003DE6 8937 <1> mov word [bx], si 420 <1> 421 <1> .pathname_parse: 422 <1> .pathname_next: 423 00003DE8 E8B3C2 <1> d4 call d4message 424 00003DEB 496E20626F6F74636D- <1> d4 asciz "In bootcmd.pathname_parse",13,10 424 00003DF4 642E706174686E616D- <1> 424 00003DFD 655F70617273650D0A- <1> 424 00003E06 00 <1> 425 00003E07 E87A08 <1> call boot_parse_fn 426 <1> ; al = separator char 427 <1> ; si -> next char after that (if any) 428 00003E0A 3C2F <1> cmp al, '/' ; path separator? 429 00003E0C 7404 <1> je .pathname_check 430 00003E0E 3C5C <1> cmp al, '\' 431 00003E10 753C <1> jne .pathname_none ; no, this was the filename --> 432 <1> .pathname_check: 433 00003E12 E889C2 <1> d4 call d4message 434 00003E15 496E20626F6F74636D- <1> d4 asciz "In bootcmd.pathname_parse_check",13,10 434 00003E1E 642E706174686E616D- <1> 434 00003E27 655F70617273655F63- <1> 434 00003E30 6865636B0D0A00 <1> 435 00003E37 C644FF2F <1> mov byte [si - 1], '/' ; normalise path separator 436 00003E3B AC <1> lodsb 437 00003E3C 3C20 <1> cmp al, 32 ; space ? 438 00003E3E 740E <1> je .pathname_gotfirst 439 00003E40 3C09 <1> cmp al, 9 440 00003E42 740A <1> je .pathname_gotfirst ; yes, allow for second name --> 441 00003E44 4E <1> dec si 442 00003E45 E82036 <1> call iseol? ; EOL ? 443 00003E48 759E <1> jne .pathname_next ; no, next pathname element --> 444 00003E4A C60400 <1> mov byte [si], 0 ; terminate after trailing path sep 445 00003E4D C3 <1> retn 446 <1> 447 <1> .pathname_gotfirst: 448 <1> .pathname_none: 449 00003E4E C644FF00 <1> mov byte [si - 1], 0 ; terminate after filename 450 00003E52 C3 <1> retn 451 <1> 452 <1> 453 <1> ; DPR:word [load_kernelname_input] -> ASCIZ pathname. 454 <1> ; if it ends in '/', append DPR:word [load_kernelname_default] 455 <1> ; DPR:word [load_addname_input] -> ASCIZ pathname. 456 <1> ; if it ends in '/', append DPR:word [load_addname_default] 457 <1> ; if it's empty (and no trailing '/' in front of the zero) 458 <1> ; then no additional name is given. 459 <1> .fn_done: 460 00003E53 E848C2 <1> d4 call d4message 461 00003E56 496E20626F6F74636D- <1> d4 asciz "In bootcmd.fn_done",13,10 461 00003E5F 642E666E5F646F6E65- <1> 461 00003E68 0D0A00 <1> 462 <1> 463 00003E6B F606[8700]02 <1> testopt [internalflags], load_is_ldp 463 ****************** <1> expansion: adr = '[internalflags]' 463 ****************** <1> expansion: len = 15 463 ****************** <1> expansion: tf = '[' 463 ****************** <1> expansion: tb = ']' 463 ****************** <1> expansion: adr = 'internalflags' 463 ****************** <1> expansion: adr = internalflags 464 00003E70 754C <1> jnz .load_kernel_from_ldp 465 <1> 466 00003E72 8A1E[FA50] <1> mov bl, [load_partition] 467 00003E76 803E[C050]80 <1> cmp byte [load_unit], 80h 468 00003E7B 7216 <1> jb .p_f_is_diskette 469 00003E7D 84DB <1> test bl, bl ; partition specified ? 470 00003E7F 7503E953FD <1> jz .error ; no, error --> 471 <1> 472 00003E84 E8A913 <1> call query_geometry 473 <1> 474 00003E87 B9[B647] <1> mov cx, load_freedos_from_partition 475 00003E8A E8F210 <1> call scan_partitions 476 00003E8D BA[8537] <1> mov dx, msg.boot_partition_not_found 477 00003E90 E9BA01 <1> jmp .fail 478 <1> 479 <1> 480 <1> .p_f_is_diskette: 481 00003E93 84DB <1> test bl, bl ; partition specified ? 482 00003E95 7403E93DFD <1> jnz .error ; yes, error --> 483 <1> 484 00003E9A E89313 <1> call query_geometry 485 <1> 486 00003E9D 31C0 <1> xor ax, ax 487 00003E9F 31D2 <1> xor dx, dx 488 <1> @@: 488 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.93 488 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.94 488 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.95 488 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.96 488 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.97 488 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.98 488 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.99 488 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.100 488 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.93 488 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.94 488 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.95 488 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.96 488 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.97 488 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.98 488 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.99 488 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.100 488 ****************** <1> expansion: __@@_num = 101 489 00003EA1 8B1E[2C02] <1> mov bx, word [auxbuff_segorsel] ; bx => auxbuff 490 00003EA5 52 <1> push dx 491 00003EA6 50 <1> push ax 492 00003EA7 E81815 <1> call read_ae_512_bytes 493 <1> 494 00003EAA BA[7936] <1> mov dx, msg.bootfail_sig 495 00003EAD 26813EFE0155AA <1> cmp word [es:510], 0AA55h 496 00003EB4 7403E99401 <1> jne .fail 497 00003EB9 58 <1> pop ax 498 00003EBA 5A <1> pop dx 499 <1> 500 00003EBB E98609 <1> jmp load_freedos_common 501 <1> 502 <1> 503 <1> .load_kernel_from_ldp: 504 00003EBE E86F13 <1> call query_geometry 505 00003EC1 A1[0C50] <1> mov ax, word [load_partition_sector] 506 00003EC4 8B16[0E50] <1> mov dx, word [load_partition_sector + 2] 507 00003EC8 EBD7 <1> jmp @B 508 <1> 509 <1> 510 <1> .load: 511 00003ECA 7403E908FD <1> jnz bootcmd.error 512 <1> 513 00003ECF F606[8700]02 <1> testopt [internalflags], load_is_ldp 513 ****************** <1> expansion: adr = '[internalflags]' 513 ****************** <1> expansion: len = 15 513 ****************** <1> expansion: tf = '[' 513 ****************** <1> expansion: tb = ']' 513 ****************** <1> expansion: adr = 'internalflags' 513 ****************** <1> expansion: adr = internalflags 514 00003ED4 754C <1> jnz .load_sector_from_ldp 515 <1> 516 00003ED6 803E[FA50]00 <1> cmp byte [load_partition], 0 517 00003EDB 7451 <1> je .load_boot 518 <1> 519 00003EDD E85013 <1> call query_geometry 520 <1> 521 00003EE0 E8BBC1 <1> d4 call d4message 522 00003EE3 496E20626F6F74636D- <1> d4 asciz "In bootcmd.load (before call to scan_partitions)",13,10 522 00003EEC 642E6C6F6164202862- <1> 522 00003EF5 65666F72652063616C- <1> 522 00003EFE 6C20746F207363616E- <1> 522 00003F07 5F706172746974696F- <1> 522 00003F10 6E73290D0A00 <1> 523 <1> 524 00003F16 B9[0347] <1> mov cx, load_from_partition 525 00003F19 E86310 <1> call scan_partitions 526 00003F1C BA[8537] <1> mov dx, msg.boot_partition_not_found 527 00003F1F E92B01 <1> jmp .fail 528 <1> 529 <1> 530 <1> .load_sector_from_ldp: 531 00003F22 E80B13 <1> call query_geometry 532 00003F25 A1[0C50] <1> mov ax, word [load_partition_sector] 533 00003F28 8B16[0E50] <1> mov dx, word [load_partition_sector + 2] 534 00003F2C EB07 <1> jmp @F 535 <1> 536 <1> .load_boot: 537 00003F2E E8FF12 <1> call query_geometry 538 <1> 539 00003F31 31C0 <1> xor ax, ax 540 00003F33 31D2 <1> xor dx, dx 541 <1> @@: 541 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.94 541 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.95 541 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.96 541 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.97 541 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.98 541 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.99 541 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.100 541 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.101 541 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.94 541 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.95 541 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.96 541 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.97 541 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.98 541 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.99 541 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.100 541 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.101 541 ****************** <1> expansion: __@@_num = 102 542 00003F35 BBC007 <1> mov bx, 7C0h 543 00003F38 E8C5C0 <1> d4 call d4dumpregs 544 00003F3B E860C1 <1> d4 call d4message 545 00003F3E 0D0A496E20626F6F74- <1> d4 asciz 13,10,"In bootcmd.load_boot (before call to read_sector)",13,10 545 00003F47 636D642E6C6F61645F- <1> 545 00003F50 626F6F742028626566- <1> 545 00003F59 6F72652063616C6C20- <1> 545 00003F62 746F20726561645F73- <1> 545 00003F6B 6563746F72290D0A00 <1> 546 00003F74 52 <1> push dx 547 00003F75 50 <1> push ax 548 00003F76 E84914 <1> call read_ae_512_bytes 549 00003F79 E822C1 <1> d4 call d4message 550 00003F7C 496E20626F6F74636D- <1> d4 asciz "In bootcmd.load_boot (after call to read_sector)",13,10 550 00003F85 642E6C6F61645F626F- <1> 550 00003F8E 6F7420286166746572- <1> 550 00003F97 2063616C6C20746F20- <1> 550 00003FA0 726561645F73656374- <1> 550 00003FA9 6F72290D0A00 <1> 551 00003FAF 31D2 <1> xor dx, dx 552 00003FB1 8EC2 <1> mov es, dx 553 <1> 554 00003FB3 A0[C050] <1> mov al, byte [load_unit] ; al = boot unit 555 00003FB6 BB007C <1> mov bx, 7C00h 556 <1> 557 00003FB9 BA[7936] <1> mov dx, msg.bootfail_sig 558 00003FBC 26813EFE7D55AA <1> cmp word [es:7C00h + 510], 0AA55h 559 00003FC3 7403E98500 <1> jne .fail 560 <1> 561 00003FC8 BA[DD36] <1> mov dx, msg.bootfail_code 562 00003FCB 26833F00 <1> cmp word [es:bx], 0 563 00003FCF 747C <1> je .fail 564 <1> 565 00003FD1 50 <1> push ax 566 00003FD2 B9FF00 <1> mov cx, 510 / 2 567 00003FD5 BF0006 <1> mov di, 600h ; MBR location 568 00003FD8 31C0 <1> xor ax, ax 569 00003FDA F3AB <1> rep stosw ; initialise (sector and all entries) 570 00003FDC B855AA <1> mov ax, 0AA55h 571 00003FDF AB <1> stosw ; initialise boot sector signature 572 00003FE0 26C7060006CD19 <1> mov word [es:600h], 019CDh ; initialise boot sector code 573 00003FE7 BFBE07 <1> mov di, 600h + 510 - 4*16 ; -> first partition table entry 574 00003FEA 58 <1> pop ax 575 00003FEB 268F4508 <1> pop word [es:di + piStart] 576 00003FEF 268F450A <1> pop word [es:di + piStart + 2] ; = boot sector LBA 577 00003FF3 26C60580 <1> mov byte [es:di + 0], 80h ; "bootable" flag set 578 00003FF7 26C64504FF <1> mov byte [es:di + 4], 0FFh ; dummy value for FS type (nonzero) 579 00003FFC 26C6450C01 <1> mov byte [es:di + 12], 1 ; dummy value for length (nonzero) 580 <1> 581 <1> load_partition_common: equ $ 582 00004001 8126[7C03]FFF8 <1> and word [reg_efl], ~(400h|200h|100h) ; UP, DI, TF=0 583 00004007 893E[5803] <1> mov word [reg_esi], di 584 0000400B 893E[5403] <1> mov word [reg_ebp], di 585 0000400F 890E[6003] <1> mov word [reg_ds], cx ; ds:si -> 0:600h + offset to first entry 586 00004013 A2[4C03] <1> mov byte [reg_edx], al ; dl = boot unit 587 00004016 891E[7803] <1> mov word [reg_eip], bx 588 0000401A 890E[7A03] <1> mov word [reg_eip + 2], cx 589 0000401E 890E[6C03] <1> mov word [reg_cs], cx ; cs:eip = 0:7C00h 590 00004022 803E[FE50]00 <1> cmp byte [load_sector_alt], 0 591 00004027 740A <1> je @F 592 00004029 890E[7803] <1> mov word [reg_eip], cx 593 0000402D C706[6C03]C007 <1> mov word [reg_cs], 7C0h ; cs:eip = 07C0h:0 594 <1> @@: 594 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.95 594 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.96 594 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.97 594 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.98 594 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.99 594 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.100 594 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.101 594 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.102 594 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.95 594 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.96 594 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.97 594 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.98 594 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.99 594 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.100 594 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.101 594 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.102 594 ****************** <1> expansion: __@@_num = 103 595 00004033 891E[5003] <1> mov word [reg_esp], bx 596 00004037 890E[5203] <1> mov word [reg_esp + 2], cx 597 0000403B 890E[6803] <1> mov word [reg_ss], cx ; ss:esp = 0:7C00h 598 0000403F C3 <1> retn 599 <1> 600 <1> 601 <1> .fail_read: 602 00004040 16 <1> push ss 603 00004041 07 <1> pop es 604 00004042 BF[7136] <1> mov di, msg.bootfail_read_errorcode 605 00004045 88E0 <1> mov al, ah 606 00004047 E8BB34 <1> call hexbyte 607 0000404A BA[5436] <1> mov dx, msg.bootfail_read 608 <1> 609 <1> .fail: 610 0000404D 16 <1> push ss 611 0000404E 07 <1> pop es 612 0000404F 52 <1> push dx 613 00004050 BA[4536] <1> mov dx, msg.bootfail 614 00004053 E81937 <1> call putsz 615 00004056 5A <1> pop dx 616 00004057 E81537 <1> call putsz 617 0000405A E986C1 <1> jmp cmd3 618 <1> 619 <1> 620 <1> bootcmd.list: 621 0000405D E81E34 <1> call skipcomma 622 <1> 623 00004060 E81402 <1> call parseloadunit 624 00004063 7303E96FFB <1> jc bootcmd.error 625 00004068 7403E96AFB <1> jnz bootcmd.error 626 <1> 627 0000406D E8C011 <1> call query_geometry 628 <1> 629 00004070 F606[8700]02 <1> testopt [internalflags], load_is_ldp 629 ****************** <1> expansion: adr = '[internalflags]' 629 ****************** <1> expansion: len = 15 629 ****************** <1> expansion: tf = '[' 629 ****************** <1> expansion: tb = ']' 629 ****************** <1> expansion: adr = 'internalflags' 629 ****************** <1> expansion: adr = internalflags 630 00004075 7525 <1> jnz .list_ldp 631 <1> 632 00004077 803E[FA50]00 <1> cmp byte [load_partition], 0 633 0000407C 7418 <1> je .listall 634 <1> 635 0000407E C606[FC50]00 <1> mov byte [load_found_partition], 0 636 00004083 B9[ED40] <1> mov cx, list_single_partition 637 00004086 E8F60E <1> call scan_partitions 638 00004089 803E[FC50]00 <1> cmp byte [load_found_partition], 0 639 0000408E 7505 <1> jne @F 640 00004090 BA[8537] <1> mov dx, msg.boot_partition_not_found 641 00004093 EBB8 <1> jmp bootcmd.fail 642 <1> @@: 642 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.96 642 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.97 642 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.98 642 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.99 642 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.100 642 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.101 642 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.102 642 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.103 642 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.96 642 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.97 642 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.98 642 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.99 642 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.100 642 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.101 642 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.102 642 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.103 642 ****************** <1> expansion: __@@_num = 104 643 00004095 C3 <1> retn 644 <1> 645 <1> .listall: 646 00004096 B9[1941] <1> mov cx, list_any_partition 647 00004099 E9E30E <1> jmp scan_partitions 648 <1> 649 <1> .list_ldp: 650 0000409C C606[FC50]00 <1> mov byte [load_found_partition], 0 651 000040A1 B9[B440] <1> mov cx, list_partition_if_ldp 652 000040A4 E8D80E <1> call scan_partitions 653 000040A7 803E[FC50]00 <1> cmp byte [load_found_partition], 0 654 000040AC 7505 <1> jne @F 655 000040AE BA[8537] <1> mov dx, msg.boot_partition_not_found 656 000040B1 EB9A <1> jmp bootcmd.fail 657 <1> @@: 657 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.97 657 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.98 657 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.99 657 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.100 657 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.101 657 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.102 657 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.103 657 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.104 657 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.97 657 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.98 657 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.99 657 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.100 657 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.101 657 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.102 657 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.103 657 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.104 657 ****************** <1> expansion: __@@_num = 105 658 000040B3 C3 <1> retn 659 <1> 660 <1> 661 <1> list_partition_if_ldp: 662 000040B4 E8E7BF <1> d4 call d4message 663 000040B7 496E206C6973745F70- <1> d4 asciz "In list_partition_if_ldp",13,10 663 000040C0 6172746974696F6E5F- <1> 663 000040C9 69665F6C64700D0A00 <1> 664 <1> 665 000040D2 8B43F8 <1> mov ax, word [bp + di - 8] 666 000040D5 8B53FA <1> mov dx, word [bp + di - 6] ; root 667 000040D8 26034408 <1> add ax, word [es:si + 8] 668 000040DC 2613540A <1> adc dx, word [es:si + 8 + 2] ; add partition offset 669 000040E0 3906[0C50] <1> cmp word [load_partition_sector], ax 670 000040E4 7506 <1> jne @F 671 000040E6 3916[0E50] <1> cmp word [load_partition_sector + 2], dx 672 000040EA 7429 <1> je list_single_partition.gotit 673 <1> @@: 673 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.98 673 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.99 673 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.100 673 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.101 673 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.102 673 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.103 673 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.104 673 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.105 673 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.98 673 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.99 673 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.100 673 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.101 673 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.102 673 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.103 673 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.104 673 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.105 673 ****************** <1> expansion: __@@_num = 106 674 000040EC C3 <1> retn 675 <1> 676 <1> list_single_partition: 677 000040ED E8AEBF <1> d4 call d4message 678 000040F0 496E206C6973745F73- <1> d4 asciz "In list_single_partition",13,10 678 000040F9 696E676C655F706172- <1> 678 00004102 746974696F6E0D0A00 <1> 679 <1> 680 0000410B A0[FB50] <1> mov al, byte [load_current_partition] 681 0000410E 3A06[FA50] <1> cmp al, byte [load_partition] 682 00004112 7401 <1> je .gotit 683 00004114 C3 <1> retn 684 <1> 685 <1> .gotit: 686 00004115 FE06[FC50] <1> inc byte [load_found_partition] 687 <1> 688 <1> ; INP: es:si -> partition table entry, 689 <1> ; si = load_partition_table .. load_partition_table+48, 690 <1> ; es = ss 691 <1> ; bp + di -> above part table metadata, 692 <1> ; dwo [bp + di - 4] = root (outermost extended position) 693 <1> ; dwo [bp + di - 8] = base (current table position) 694 <1> ; CHG: ax, bx, (cx), dx 695 <1> list_any_partition: 696 00004119 06 <1> push es 697 0000411A 51 <1> push cx 698 0000411B 56 <1> push si 699 0000411C 57 <1> push di 700 <1> 701 0000411D BF[A901] <1> mov di, line_out ; reset di 702 00004120 B075 <1> mov al, "u" 703 00004122 AA <1> stosb 704 00004123 A0[C050] <1> mov al, byte [load_unit] 705 00004126 E8DC33 <1> call hexbyte 706 00004129 B02E <1> mov al, '.' 707 0000412B AA <1> stosb 708 0000412C A0[FB50] <1> mov al, byte [load_current_partition] 709 0000412F E89F33 <1> call decbyte 710 00004132 3C0A <1> cmp al, 10 711 00004134 B020 <1> mov al, 32 712 00004136 7301 <1> jae @F 713 00004138 AA <1> stosb 714 <1> @@: 714 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.99 714 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.100 714 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.101 714 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.102 714 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.103 714 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.104 714 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.105 714 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.106 714 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.99 714 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.100 714 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.101 714 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.102 714 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.103 714 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.104 714 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.105 714 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.106 714 ****************** <1> expansion: __@@_num = 107 715 00004139 AA <1> stosb 716 <1> 717 0000413A A0[C050] <1> mov al, byte [load_unit] 718 0000413D BB6664 <1> mov bx, "fd" 719 00004140 3C80 <1> cmp al, 80h 720 00004142 7202 <1> jb @F 721 00004144 B368 <1> mov bl, "h" 722 <1> @@: 722 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.100 722 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.101 722 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.102 722 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.103 722 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.104 722 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.105 722 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.106 722 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.107 722 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.100 722 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.101 722 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.102 722 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.103 722 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.104 722 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.105 722 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.106 722 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.107 722 ****************** <1> expansion: __@@_num = 108 723 00004146 247F <1> and al, ~80h 724 00004148 0461 <1> add al, 'a' 725 0000414A 3C7A <1> cmp al, 'z' 726 0000414C 7609 <1> jbe @F 727 0000414E B020 <1> mov al, 32 728 00004150 B90500 <1> mov cx, 3 + 2 729 00004153 F3AA <1> rep stosb 730 00004155 EB11 <1> jmp @FF 731 <1> 732 <1> @@: 732 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.101 732 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.102 732 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.103 732 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.104 732 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.105 732 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.106 732 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.107 732 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.108 732 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.101 732 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.102 732 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.103 732 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.104 732 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.105 732 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.106 732 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.107 732 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.108 732 ****************** <1> expansion: __@@_num = 109 733 00004157 93 <1> xchg ax, bx 734 00004158 AB <1> stosw 735 00004159 93 <1> xchg ax, bx 736 0000415A AA <1> stosb 737 0000415B A0[FB50] <1> mov al, byte [load_current_partition] 738 0000415E E87033 <1> call decbyte 739 00004161 3C0A <1> cmp al, 10 740 00004163 B020 <1> mov al, 32 741 00004165 7301 <1> jae @F 742 00004167 AA <1> stosb 743 <1> @@: 743 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.102 743 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.103 743 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.104 743 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.105 743 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.106 743 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.107 743 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.108 743 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.109 743 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.102 743 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.103 743 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.104 743 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.105 743 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.106 743 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.107 743 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.108 743 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.109 743 ****************** <1> expansion: __@@_num = 110 744 00004168 AA <1> stosb 745 <1> 746 00004169 8A4404 <1> mov al, byte [si + 4] 747 0000416C E89633 <1> call hexbyte 748 <1> 749 0000416F B020 <1> mov al, 32 750 00004171 AA <1> stosb 751 <1> 752 00004172 89F9 <1> mov cx, di ; (preserve di in line_out) 753 00004174 5F <1> pop di ; get di of scan_partitions 754 00004175 57 <1> push di 755 00004176 8B43F8 <1> mov ax, word [bp + di - 8] 756 00004179 8B53FA <1> mov dx, word [bp + di - 6] ; root 757 0000417C 89CF <1> mov di, cx ; (preserve di in line_out) 758 0000417E 034408 <1> add ax, word [si + 8] 759 00004181 13540A <1> adc dx, word [si + 8 + 2] ; add partition offset 760 00004184 92 <1> xchg ax, dx 761 00004185 E87633 <1> call hexword 762 00004188 92 <1> xchg ax, dx 763 00004189 E87233 <1> call hexword 764 <1> 765 0000418C 50 <1> push ax 766 0000418D B82028 <1> mov ax, " (" 767 00004190 AB <1> stosw 768 00004191 58 <1> pop ax 769 00004192 51 <1> push cx 770 00004193 53 <1> push bx 771 00004194 8B0E[8B50] <1> mov cx, [load_sectorsize] 772 00004198 BB0800 <1> mov bx, 4+4 773 0000419B E861D1 <1> call disp_dxax_times_cx_width_bx_size 774 0000419E 50 <1> push ax 775 0000419F B82920 <1> mov ax, ") " 776 000041A2 AB <1> stosw 777 000041A3 58 <1> pop ax 778 <1> 779 000041A4 52 <1> push dx 780 000041A5 50 <1> push ax 781 <1> 782 000041A6 8B440C <1> mov ax, word [si + 12] 783 000041A9 8B540E <1> mov dx, word [si + 12 + 2] 784 000041AC 92 <1> xchg ax, dx 785 000041AD E84E33 <1> call hexword 786 000041B0 92 <1> xchg ax, dx 787 000041B1 E84A33 <1> call hexword 788 <1> 789 000041B4 50 <1> push ax 790 000041B5 B82028 <1> mov ax, " (" 791 000041B8 AB <1> stosw 792 000041B9 58 <1> pop ax 793 000041BA E842D1 <1> call disp_dxax_times_cx_width_bx_size 794 000041BD B029 <1> mov al, ")" 795 000041BF AA <1> stosb 796 <1> 797 000041C0 58 <1> pop ax 798 000041C1 5A <1> pop dx 799 <1> 800 000041C2 5B <1> pop bx 801 000041C3 59 <1> pop cx 802 <1> 803 000041C4 807C0483 <1> cmp byte [si + piType], ptLinux 804 000041C8 7541 <1> jne .notlinux 805 <1> 806 000041CA 8B1E[2C02] <1> mov bx, word [auxbuff_segorsel] ; bx => auxbuff 807 000041CE E8E011 <1> call read_ae_1536_bytes 808 <1> 809 000041D1 26813E380453EF <1> cmp word [es:1024 + 56], 0xEF53 ; s_magic == EXT2_SUPER_MAGIC ? 810 000041D8 7403E99000 <1> jne .nolabel 811 <1> 812 000041DD 26833E4E0400 <1> cmp word [es:1024 + 76 + 2], 0 813 000041E3 7403E98500 <1> jne .nolabel 814 000041E8 26833E4C0401 <1> cmp word [es:1024 + 76], 1 ; s_rev_level == EXT2_DYNAMIC_REV ? 815 000041EE 757D <1> jne .nolabel 816 <1> 817 000041F0 06 <1> push es 818 000041F1 1F <1> pop ds 819 000041F2 BE7804 <1> mov si, 1024 + 120 820 000041F5 B91000 <1> mov cx, 16 821 000041F8 16 <1> push ss 822 000041F9 07 <1> pop es 823 <1> 824 000041FA B020 <1> mov al, 32 825 000041FC AA <1> stosb 826 <1> @@: 826 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.103 826 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.104 826 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.105 826 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.106 826 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.107 826 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.108 826 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.109 826 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.110 826 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.103 826 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.104 826 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.105 826 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.106 826 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.107 826 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.108 826 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.109 826 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.110 826 ****************** <1> expansion: __@@_num = 111 827 000041FD AC <1> lodsb 828 000041FE 84C0 <1> test al, al 829 00004200 7403 <1> jz @F 830 00004202 AA <1> stosb 831 00004203 E2F8 <1> loop @B 832 <1> @@: 832 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.104 832 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.105 832 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.106 832 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.107 832 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.108 832 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.109 832 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.110 832 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.111 832 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.104 832 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.105 832 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.106 832 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.107 832 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.108 832 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.109 832 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.110 832 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.111 832 ****************** <1> expansion: __@@_num = 112 833 <1> 834 00004205 16 <1> push ss 835 00004206 1F <1> pop ds 836 <1> 837 00004207 59 <1> pop cx 838 00004208 5E <1> pop si 839 00004209 56 <1> push si ; get si of scan_partitions 840 0000420A 51 <1> push cx 841 <1> 842 <1> .notlinux: 843 0000420B 8A5C04 <1> mov bl, byte [si + piType] 844 0000420E 80FB01 <1> cmp bl, ptFAT12 845 00004211 7419 <1> je .isfat 846 00004213 80FB04 <1> cmp bl, ptFAT16_16BIT_CHS 847 00004216 7414 <1> je .isfat 848 00004218 80FB06 <1> cmp bl, ptFAT16_CHS 849 0000421B 740F <1> je .isfat 850 0000421D 80FB0B <1> cmp bl, ptFAT32_CHS 851 00004220 740A <1> je .isfat 852 00004222 80FB0C <1> cmp bl, ptFAT32 853 00004225 7405 <1> je .isfat 854 00004227 80FB0E <1> cmp bl, ptFAT16 855 0000422A 7541 <1> jne .notfat 856 <1> .isfat: 857 <1> 858 0000422C 8B1E[2C02] <1> mov bx, word [auxbuff_segorsel] ; bx => auxbuff 859 00004230 E88F11 <1> call read_ae_512_bytes 860 <1> 861 00004233 26813EFE0155AA <1> cmp word [es:510], 0AA55h 862 0000423A 7531 <1> jne .nolabel 863 0000423C 26833E0B0000 <1> cmp word [es:bsBPB + bpbBytesPerSector], 0 864 00004242 7429 <1> je .nolabel 865 00004244 BE2B00 <1> mov si, bsBPB + bpbNew + bpbnVolumeLabel 866 00004247 26833E160000 <1> cmp word [es:bsBPB + bpbSectorsPerFAT], 0 867 0000424D 7503 <1> jne @F 868 0000424F BE4700 <1> mov si, bsBPB + ebpbNew + bpbnVolumeLabel 869 <1> @@: 869 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.105 869 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.106 869 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.107 869 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.108 869 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.109 869 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.110 869 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.111 869 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.112 869 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.105 869 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.106 869 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.107 869 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.108 869 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.109 869 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.110 869 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.111 869 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.112 869 ****************** <1> expansion: __@@_num = 113 870 00004252 26807CFB29 <1> cmp byte [es:si - bpbnVolumeLabel + bpbnExtBPBSignature], 29h 871 00004257 7514 <1> jne .nolabel 872 00004259 B90B00 <1> mov cx, 11 873 <1> 874 0000425C 06 <1> push es 875 0000425D 1F <1> pop ds 876 0000425E 16 <1> push ss 877 0000425F 07 <1> pop es 878 <1> 879 00004260 B020 <1> mov al, 32 880 00004262 AA <1> stosb 881 <1> @@: 881 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.106 881 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.107 881 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.108 881 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.109 881 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.110 881 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.111 881 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.112 881 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.113 881 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.106 881 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.107 881 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.108 881 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.109 881 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.110 881 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.111 881 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.112 881 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.113 881 ****************** <1> expansion: __@@_num = 114 882 00004263 AC <1> lodsb 883 00004264 84C0 <1> test al, al 884 00004266 7403 <1> jz @F 885 00004268 AA <1> stosb 886 00004269 E2F8 <1> loop @B 887 <1> @@: 887 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.107 887 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.108 887 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.109 887 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.110 887 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.111 887 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.112 887 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.113 887 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.114 887 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.107 887 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.108 887 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.109 887 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.110 887 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.111 887 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.112 887 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.113 887 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.114 887 ****************** <1> expansion: __@@_num = 115 888 <1> 889 0000426B 16 <1> push ss 890 0000426C 1F <1> pop ds 891 <1> .notfat: 892 <1> .nolabel: 893 0000426D 16 <1> push ss 894 0000426E 07 <1> pop es 895 0000426F E8C432 <1> call putsline_crlf 896 <1> 897 00004272 5F <1> pop di 898 00004273 5E <1> pop si 899 00004274 59 <1> pop cx 900 00004275 07 <1> pop es 901 00004276 C3 <1> retn 902 <1> 903 <1> 904 <1> ; INP: al = first character 905 <1> ; si -> next 906 <1> ; OUT: CY if no load unit (al not "H" nor "F") 907 <1> ; note: this is barely used! 908 <1> ; NC else, 909 <1> ; byte [load_unit] set 910 <1> ; byte [load_partition] set (zero if none specified) 911 <1> ; ZR if no filename specified (at end of input) 912 <1> ; NZ if presumably a filename specified, 913 <1> ; al = first character (slash or whatever non-blank) 914 <1> ; si -> next 915 <1> ; CHG: bx, cx, dx, ax, si 916 <1> parseloadunit: 917 00004277 8026[8700]FD <1> clropt [internalflags], load_is_ldp 917 ****************** <1> expansion: adr = '[internalflags]' 917 ****************** <1> expansion: len = 15 917 ****************** <1> expansion: tf = '[' 917 ****************** <1> expansion: tb = ']' 917 ****************** <1> expansion: adr = 'internalflags' 917 ****************** <1> expansion: adr = internalflags 918 0000427C E83116 <1> call uppercase 919 0000427F 3C48 <1> cmp al, 'H' 920 00004281 7503E9E000 <1> je .load_hd 921 00004286 3C46 <1> cmp al, 'F' 922 00004288 7503E9B800 <1> je .load_fd 923 0000428D 3C4C <1> cmp al, 'L' 924 0000428F 7406 <1> je .load_ld 925 00004291 3C55 <1> cmp al, 'U' 926 00004293 747D <1> je .load_u 927 <1> .retc: 928 00004295 F9 <1> stc 929 00004296 C3 <1> retn 930 <1> 931 <1> .load_ld: 932 00004297 AC <1> lodsb 933 00004298 E81516 <1> call uppercase 934 0000429B 3C44 <1> cmp al, 'D' 935 0000429D 7403E934F9 <1> jne bootcmd.errordec 936 <1> 937 000042A2 E8F9BD <1> d4 call d4message 938 000042A5 496E2070617273656C- <1> d4 asciz "In parseloadunit.load_ld",13,10 938 000042AE 6F6164756E69742E6C- <1> 938 000042B7 6F61645F6C640D0A00 <1> 939 <1> 941 000042C0 8A16[3050] <1> mov dl, byte [loaddata_loadedfrom - LOADDATA + bsBPB + ebpbNew + bpbnBootUnit] 942 000042C4 AC <1> lodsb 943 000042C5 E8E815 <1> call uppercase 944 000042C8 3C50 <1> cmp al, 'P' 945 000042CA 7403E9DE00 <1> jne @F 946 <1> 947 000042CF E8CCBD <1> d4 call d4message 948 000042D2 496E2070617273656C- <1> d4 asciz "In parseloadunit.load_ld with ldp",13,10 948 000042DB 6F6164756E69742E6C- <1> 948 000042E4 6F61645F6C64207769- <1> 948 000042ED 7468206C64700D0A00 <1> 949 <1> 950 000042F6 8816[C050] <1> mov byte [load_unit], dl 951 000042FA C606[FA50]FF <1> mov byte [load_partition], -1 952 000042FF 800E[8700]02 <1> setopt [internalflags], load_is_ldp 952 ****************** <1> expansion: adr = '[internalflags]' 952 ****************** <1> expansion: len = 15 952 ****************** <1> expansion: tf = '[' 952 ****************** <1> expansion: tb = ']' 952 ****************** <1> expansion: adr = 'internalflags' 952 ****************** <1> expansion: adr = internalflags 953 <1> 954 00004304 E8A531 <1> call skipwhite 955 00004307 E85E31 <1> call iseol? 956 0000430A 7403E90F02 <1> jne .fn 957 0000430F E90902 <1> jmp .ret_nc 958 <1> 959 <1> .load_u: 960 00004312 AC <1> lodsb 961 00004313 3C28 <1> cmp al, '(' 962 00004315 7511 <1> jne .u_not_expr 963 00004317 AC <1> lodsb 964 00004318 E8F22C <1> call getexpression 965 0000431B E88F31 <1> call skipwh0 966 0000431E 3C29 <1> cmp al, ')' 967 00004320 AC <1> lodsb 968 00004321 7403E9B0F8 <1> jne bootcmd.errordec 969 00004326 EB03 <1> jmp .u_check_dot 970 <1> 971 <1> .u_not_expr: 972 00004328 E8B20E <1> call boot_get_hexadecimal_literal 973 <1> .u_check_dot: 974 0000432B 3C2E <1> cmp al, '.' 975 0000432D 7403E9A5F8 <1> jne bootcmd.error 976 00004332 AC <1> lodsb 977 00004333 85DB <1> test bx, bx 978 00004335 7403E99DF8 <1> jnz bootcmd.error 979 0000433A 81FA0001 <1> cmp dx, 256 980 0000433E 7203E994F8 <1> jae bootcmd.error 981 00004343 EB68 <1> jmp .got_unit 982 <1> 983 <1> .load_fd: 984 00004345 B200 <1> mov dl, 0 985 <1> 986 00004347 E854BD <1> d4 call d4message 987 0000434A 496E2070617273656C- <1> d4 asciz "In parseloadunit.load_fd",13,10 987 00004353 6F6164756E69742E6C- <1> 987 0000435C 6F61645F66640D0A00 <1> 988 <1> 989 00004365 A9 <1> db __TEST_IMM16 ; skip mov 990 <1> .load_hd: 991 00004366 B280 <1> mov dl, 80h 992 00004368 E833BD <1> d4 call d4message 993 0000436B 496E2070617273656C- <1> d4 asciz "In parseloadunit.load_fd or .load_hd",13,10 993 00004374 6F6164756E69742E6C- <1> 993 0000437D 6F61645F6664206F72- <1> 993 00004386 202E6C6F61645F6864- <1> 993 0000438F 0D0A00 <1> 994 <1> 995 00004392 AC <1> lodsb 996 00004393 E81A15 <1> call uppercase 997 00004396 3C44 <1> cmp al, 'D' 998 00004398 7403E939F8 <1> jne bootcmd.errordec 999 0000439D AC <1> lodsb 1000 0000439E E80F15 <1> call uppercase 1001 000043A1 2C41 <1> sub al, 'A' 1002 000043A3 3C19 <1> cmp al, 'Z' - 'A' 1003 000043A5 7603E92DF8 <1> ja bootcmd.error 1004 000043AA 08C2 <1> or dl, al ; hdX: 80h + number, fdX: 0 + number 1005 000043AC AC <1> lodsb 1006 <1> @@: 1006 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.108 1006 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.109 1006 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.110 1006 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.111 1006 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.112 1006 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.113 1006 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.114 1006 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.115 1006 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.108 1006 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.109 1006 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.110 1006 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.111 1006 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.112 1006 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.113 1006 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.114 1006 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.115 1006 ****************** <1> expansion: __@@_num = 116 1007 <1> 1008 <1> .got_unit: 1009 000043AD 89D1 <1> mov cx, dx 1010 000043AF 880E[C050] <1> mov byte [load_unit], cl 1011 000043B3 C606[FA50]00 <1> mov byte [load_partition], 0 1012 000043B8 3C2F <1> cmp al, '/' ; slash ? 1013 000043BA 7503E95F01 <1> je .fn 1014 000043BF 3C5C <1> cmp al, '\' 1015 000043C1 7503E95801 <1> je .fn ; got a filename --> 1016 000043C6 3C20 <1> cmp al, 32 ; or blank ? 1017 000043C8 7404 <1> je @F 1018 000043CA 3C09 <1> cmp al, 9 1019 000043CC 750B <1> jne .checkeol ; check for EOL -- but no filename 1020 <1> ; (hdd1name is invalid -- must be hdd1/name or hdd1 name) 1021 <1> @@: ; was blank 1021 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.109 1021 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.110 1021 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.111 1021 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.112 1021 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.113 1021 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.114 1021 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.115 1021 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.116 1021 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.109 1021 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.110 1021 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.111 1021 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.112 1021 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.113 1021 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.114 1021 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.115 1021 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.116 1021 ****************** <1> expansion: __@@_num = 117 1022 000043CE E8DC30 <1> call skipwh0 ; skip blanks 1023 000043D1 E89430 <1> call iseol? ; EOL ? 1024 000043D4 7403E94501 <1> jne .fn ; no, is filename --> 1025 <1> ; will jump after this 1026 <1> .checkeol: 1027 000043D9 E88C30 <1> call iseol? ; EOL ? 1028 000043DC 7503E93A01 <1> je .ret_nc ; yes, no filename --> 1029 <1> 1030 000043E1 E8BABC <1> d4 call d4message 1031 000043E4 496E2070617273656C- <1> d4 asciz "In parseloadunit (after no EOL found)",13,10 1031 000043ED 6F6164756E69742028- <1> 1031 000043F6 6166746572206E6F20- <1> 1031 000043FF 454F4C20666F756E64- <1> 1031 00004408 290D0A00 <1> 1032 0000440C 51 <1> push cx 1033 0000440D 80FA80 <1> cmp dl, 80h 1034 00004410 7303E9C2F7 <1> jb bootcmd.error ; diskettes aren't partitioned 1035 00004415 3C28 <1> cmp al, '(' 1036 00004417 7578 <1> jne .not_expr 1037 00004419 AC <1> lodsb ; skip opening paren 1038 <1> 1039 0000441A E881BC <1> d4 call d4message 1040 0000441D 496E2070617273656C- <1> d4 asciz "In parseloadunit (before call to getexpression)",13,10 1040 00004426 6F6164756E69742028- <1> 1040 0000442F 6265666F7265206361- <1> 1040 00004438 6C6C20746F20676574- <1> 1040 00004441 65787072657373696F- <1> 1040 0000444A 6E290D0A00 <1> 1041 <1> 1042 0000444F E8BB2B <1> call getexpression 1043 <1> 1044 00004452 E849BC <1> d4 call d4message 1045 00004455 496E2070617273656C- <1> d4 asciz "In parseloadunit (after call to getexpression)",13,10 1045 0000445E 6F6164756E69742028- <1> 1045 00004467 61667465722063616C- <1> 1045 00004470 6C20746F2067657465- <1> 1045 00004479 787072657373696F6E- <1> 1045 00004482 290D0A00 <1> 1046 00004486 E82430 <1> call skipwh0 1047 00004489 3C29 <1> cmp al, ')' 1048 0000448B AC <1> lodsb 1049 0000448C 7446 <1> je .got_expr 1050 0000448E E945F7 <1> jmp bootcmd.errordec 1051 <1> 1052 <1> .not_expr: 1053 00004491 E80ABC <1> d4 call d4message 1054 00004494 496E2070617273656C- <1> d4 asciz "In parseloadunit (before call to boot_get_decimal_literal)",13,10 1054 0000449D 6F6164756E69742028- <1> 1054 000044A6 6265666F7265206361- <1> 1054 000044AF 6C6C20746F20626F6F- <1> 1054 000044B8 745F6765745F646563- <1> 1054 000044C1 696D616C5F6C697465- <1> 1054 000044CA 72616C290D0A00 <1> 1055 000044D1 E8010D <1> call boot_get_decimal_literal 1056 <1> .got_expr: ; bx:dx = load partition number 1057 000044D4 E8C7BB <1> d4 call d4message 1058 000044D7 496E2070617273656C- <1> d4 asciz "In parseloadunit.got_expr",13,10 1058 000044E0 6F6164756E69742E67- <1> 1058 000044E9 6F745F657870720D0A- <1> 1058 000044F2 00 <1> 1059 000044F3 59 <1> pop cx ; cl = load unit 1060 000044F4 85DB <1> test bx, bx 1061 000044F6 7403E9DCF6 <1> jnz bootcmd.error 1062 000044FB 81FAFF00 <1> cmp dx, 255 1063 000044FF 7603E9D3F6 <1> ja bootcmd.error 1064 00004504 85D2 <1> test dx, dx 1065 00004506 7503E9CCF6 <1> jz bootcmd.error 1066 0000450B E89F2F <1> call skipwh0 1067 0000450E 8816[FA50] <1> mov byte [load_partition], dl 1068 00004512 880E[C050] <1> mov byte [load_unit], cl 1069 00004516 E84F2F <1> call iseol? 1070 00004519 7503 <1> jne .fn 1071 <1> .ret_nc: 1072 0000451B 31DB <1> xor bx, bx ; NC, ZR 1073 0000451D C3 <1> retn 1074 <1> 1075 <1> .fn: 1076 0000451E E88C2F <1> call skipwh0 1077 00004521 83CB01 <1> or bx, 1 ; NC, NZ 1078 00004524 C3 <1> retn 1079 <1> 1080 <1> 1081 00004525 90 <1> align 4 1082 <1> 1083 <1> boot_read: 1084 00004528 C706[2251][D453] <1> mov word [load_readwrite_function], read_sector 1085 0000452E EB06 <1> jmp boot_readwrite 1086 <1> 1087 <1> boot_write: 1088 00004530 C706[2251][D353] <1> mov word [load_readwrite_function], write_sector 1089 <1> 1090 <1> boot_readwrite: 1091 <1> 1092 00004536 E865BB <1> d4 call d4message 1093 00004539 496E20626F6F745F72- <1> d4 asciz "In boot_readwrite",13,10 1093 00004542 65616477726974650D- <1> 1093 0000454B 0A00 <1> 1094 <1> 1095 0000454D E8462F <1> call skipequals 1096 00004550 E824FD <1> call parseloadunit 1097 00004553 7303E92901 <1> jc .error 1098 00004558 7503E92401 <1> jz .error 1099 <1> 1100 <1> %if 0 1101 <1> call skipwh0 1102 <1> mov bx, word [reg_ds] ; default segment 1103 <1> call getaddr ; get buffer address into bx:(e)dx 1104 <1> 1105 <1> _386 test edx, 0FFFF_0000h 1106 <1> _386 jnz .error 1107 <1> 1108 <1> ; (variable must be a dword!) 1109 <1> mov word [load_readwrite_buffer], dx 1110 <1> mov word [load_readwrite_buffer + 2], bx 1111 <1> %else 1112 0000455D E8902E <1> call getword 1113 <1> ; (variable is a word) 1114 00004560 8916[1E51] <1> mov word [load_readwrite_buffer], dx 1115 <1> %endif 1116 <1> 1117 00004564 E8462F <1> call skipwh0 1118 00004567 E8FE2E <1> call iseol? 1119 0000456A 7545 <1> jne @F 1120 <1> 1121 0000456C E82FBB <1> d4 call d4message 1122 0000456F 496E20626F6F745F72- <1> d4 asciz "In boot_readwrite no sector given no count given",13,10 1122 00004578 656164777269746520- <1> 1122 00004581 6E6F20736563746F72- <1> 1122 0000458A 20676976656E206E6F- <1> 1122 00004593 20636F756E74206769- <1> 1122 0000459C 76656E0D0A00 <1> 1123 <1> 1124 000045A2 8326[1A51]00 <1> and word [load_readwrite_sector], 0 1125 000045A7 8326[1C51]00 <1> and word [load_readwrite_sector + 2], 0 1126 000045AC BA0100 <1> mov dx, 1 1127 000045AF EB1C <1> jmp @FF 1128 <1> 1129 <1> @@: 1129 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.110 1129 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.111 1129 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.112 1129 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.113 1129 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.114 1129 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.115 1129 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.116 1129 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.117 1129 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.110 1129 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.111 1129 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.112 1129 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.113 1129 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.114 1129 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.115 1129 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.116 1129 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.117 1129 ****************** <1> expansion: __@@_num = 118 1130 000045B1 E8592A <1> call getexpression ; bx:dx = value 1131 <1> 1132 000045B4 8916[1A51] <1> mov word [load_readwrite_sector], dx 1133 000045B8 891E[1C51] <1> mov word [load_readwrite_sector + 2], bx 1134 <1> 1135 000045BC E8EE2E <1> call skipwh0 1136 000045BF BA0100 <1> mov dx, 1 1137 000045C2 E8A32E <1> call iseol? 1138 000045C5 7406 <1> je @F 1139 000045C7 E8262E <1> call getword 1140 000045CA E8A62E <1> call chkeol 1141 <1> @@: 1141 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.111 1141 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.112 1141 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.113 1141 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.114 1141 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.115 1141 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.116 1141 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.117 1141 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.118 1141 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.111 1141 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.112 1141 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.113 1141 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.114 1141 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.115 1141 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.116 1141 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.117 1141 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.118 1141 ****************** <1> expansion: __@@_num = 119 1142 000045CD 8916[2051] <1> mov word [load_readwrite_count], dx 1143 <1> 1144 000045D1 E85C0C <1> call query_geometry 1145 <1> 1146 000045D4 F606[8700]02 <1> testopt [internalflags], load_is_ldp 1146 ****************** <1> expansion: adr = '[internalflags]' 1146 ****************** <1> expansion: len = 15 1146 ****************** <1> expansion: tf = '[' 1146 ****************** <1> expansion: tb = ']' 1146 ****************** <1> expansion: adr = 'internalflags' 1146 ****************** <1> expansion: adr = internalflags 1147 000045D9 7403E97E00 <1> jnz .ldp 1148 <1> 1149 000045DE 803E[FA50]00 <1> cmp byte [load_partition], 0 1150 000045E3 7503E98100 <1> je .whole_unit 1151 <1> 1152 000045E8 C606[FC50]00 <1> mov byte [load_found_partition], 0 1153 000045ED B9[F945] <1> mov cx, .single_partition 1154 000045F0 E88C09 <1> call scan_partitions 1155 <1> ; cmp byte [load_found_partition], 0 1156 <1> ; jne @F 1157 000045F3 BA[8537] <1> mov dx, msg.boot_partition_not_found 1158 000045F6 E954FA <1> jmp bootcmd.fail 1159 <1> ;@@: 1160 <1> ; retn 1161 <1> 1162 <1> 1163 <1> .single_partition: 1164 <1> ; INP: es:si -> partition table entry, 1165 <1> ; si = load_partition_table .. load_partition_table+48, 1166 <1> ; es = ss 1167 <1> ; bp + di -> above part table metadata, 1168 <1> ; dwo [bp + di - 4] = root (outermost extended position) 1169 <1> ; dwo [bp + di - 8] = base (current table position) 1170 <1> ;; CHG: ax, bx, (cx), dx 1171 <1> ; CHG: all 1172 <1> 1173 000045F9 E8A2BA <1> d4 call d4message 1174 000045FC 496E20626F6F745F72- <1> d4 asciz "In boot_readwrite.single_partition",13,10 1174 00004605 65616477726974652E- <1> 1174 0000460E 73696E676C655F7061- <1> 1174 00004617 72746974696F6E0D0A- <1> 1174 00004620 00 <1> 1175 <1> 1176 00004621 A0[FB50] <1> mov al, byte [load_current_partition] 1177 00004624 3A06[FA50] <1> cmp al, byte [load_partition] 1178 00004628 7401 <1> je .gotit 1179 0000462A C3 <1> retn 1180 <1> 1181 <1> .gotit: 1182 0000462B E870BA <1> d4 call d4message 1183 0000462E 496E20626F6F745F72- <1> d4 asciz "In boot_readwrite.gotit",13,10 1183 00004637 65616477726974652E- <1> 1183 00004640 676F7469740D0A00 <1> 1184 <1> 1185 <1> ; inc byte [load_found_partition] 1186 <1> 1187 00004648 8B43F8 <1> mov ax, [bp + di - 8] 1188 0000464B 8B53FA <1> mov dx, [bp + di - 6] ; base (current table position) 1189 <1> 1190 0000464E 26034408 <1> add ax, [es:si + 8] 1191 00004652 2613540A <1> adc dx, [es:si + 8 + 2] ; add offset to logical partition 1192 <1> 1193 00004656 89EC <1> mov sp, bp 1194 00004658 5D <1> pop bp ; restore bp (scan_partitions) 1195 00004659 5B <1> pop bx ; discard ret address (scan_partitions) 1196 0000465A EB07 <1> jmp .gotbase_dxax 1197 <1> 1198 <1> 1199 <1> .ldp: 1200 0000465C A1[0C50] <1> mov ax, word [load_partition_sector] 1201 0000465F 8B16[0E50] <1> mov dx, word [load_partition_sector + 2] 1202 <1> 1203 <1> .gotbase_dxax: 1204 00004663 89461C <1> mov word [bp + bsBPB + bpbHiddenSectors + 0], ax 1205 00004666 89561E <1> mov word [bp + bsBPB + bpbHiddenSectors + 2], dx 1206 <1> 1207 <1> .whole_unit: 1208 00004669 A1[1A51] <1> mov ax, word [load_readwrite_sector] 1209 0000466C 8B16[1C51] <1> mov dx, word [load_readwrite_sector + 2] 1210 00004670 8B0E[2051] <1> mov cx, word [load_readwrite_count] 1211 00004674 8B1E[1E51] <1> mov bx, word [load_readwrite_buffer] 1212 <1> 1213 00004678 E306 <1> jcxz @FF 1214 <1> @@: 1214 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.112 1214 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.113 1214 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.114 1214 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.115 1214 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.116 1214 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.117 1214 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.118 1214 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.119 1214 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.112 1214 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.113 1214 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.114 1214 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.115 1214 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.116 1214 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.117 1214 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.118 1214 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.119 1214 ****************** <1> expansion: __@@_num = 120 1215 0000467A FF16[2251] <1> call near word [load_readwrite_function] 1216 0000467E E2FA <1> loop @B 1217 <1> @@: 1217 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.113 1217 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.114 1217 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.115 1217 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.116 1217 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.117 1217 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.118 1217 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.119 1217 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.120 1217 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.113 1217 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.114 1217 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.115 1217 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.116 1217 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.117 1217 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.118 1217 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.119 1217 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.120 1217 ****************** <1> expansion: __@@_num = 121 1218 00004680 C3 <1> retn 1219 <1> 1220 <1> .error: 1221 00004681 E97720 <1> jmp error 1222 <1> 1223 <1> 1224 <1> ; INP: ds:si-> first letter of name 1225 <1> ; es:load_kernel_name-> 12-byte buffer (for fn + 0) 1226 <1> ; CHG: ax, cx, di 1227 <1> ; OUT: al = first character after name (EOL, blank, or slash) 1228 <1> ; si -> next character 1229 <1> boot_parse_fn: 1230 00004684 B020 <1> mov al, 32 1231 00004686 BF[0051] <1> mov di, load_kernel_name 1232 00004689 B90B00 <1> mov cx, 11 1233 0000468C F3AA <1> rep stosb ; initialise to empty 1234 <1> 1235 0000468E BF[0051] <1> mov di, load_kernel_name 1236 00004691 B90900 <1> mov cx, 9 1237 <1> .loop_name: 1238 00004694 AC <1> lodsb 1239 00004695 E81812 <1> call uppercase 1240 00004698 E8CD2D <1> call iseol? 1241 0000469B 744F <1> je .loop_name_done 1242 0000469D 3C20 <1> cmp al, 32 1243 0000469F 744B <1> je .loop_name_done 1244 000046A1 3C09 <1> cmp al, 9 1245 000046A3 7447 <1> je .loop_name_done 1246 000046A5 3C2F <1> cmp al, '/' 1247 000046A7 7443 <1> je .loop_name_done 1248 000046A9 3C5C <1> cmp al, '\' 1249 000046AB 743F <1> je .loop_name_done 1250 000046AD 3C2E <1> cmp al, '.' 1251 000046AF 7409 <1> je .loop_name_ext 1252 000046B1 AA <1> stosb 1253 000046B2 E2E0 <1> loop .loop_name 1254 <1> .invalid: 1255 000046B4 BA[B338] <1> mov dx, msg.boot_invalid_filename 1256 000046B7 E993F9 <1> jmp bootcmd.fail 1257 <1> 1258 <1> .loop_name_ext: 1259 000046BA 83F909 <1> cmp cx, 9 1260 000046BD 74F5 <1> je .invalid 1261 000046BF B90400 <1> mov cx, 4 1262 000046C2 BF[0851] <1> mov di, load_kernel_name + 8 1263 <1> .loop_ext: 1264 000046C5 AC <1> lodsb 1265 000046C6 E8E711 <1> call uppercase 1266 000046C9 E89C2D <1> call iseol? 1267 000046CC 7419 <1> je .loop_ext_done 1268 000046CE 3C20 <1> cmp al, 32 1269 000046D0 7415 <1> je .loop_ext_done 1270 000046D2 3C09 <1> cmp al, 9 1271 000046D4 7411 <1> je .loop_ext_done 1272 000046D6 3C2F <1> cmp al, '/' 1273 000046D8 740D <1> je .loop_ext_done 1274 000046DA 3C5C <1> cmp al, '\' 1275 000046DC 7409 <1> je .loop_ext_done 1276 000046DE 3C2E <1> cmp al, '.' 1277 000046E0 74D2 <1> je .invalid 1278 000046E2 AA <1> stosb 1279 000046E3 E2E0 <1> loop .loop_ext 1280 000046E5 EBCD <1> jmp .invalid 1281 <1> 1282 <1> .loop_ext_done: 1283 000046E7 83F904 <1> cmp cx, 4 1284 000046EA 74C8 <1> je .invalid 1285 <1> .loop_name_done: 1286 000046EC 83F909 <1> cmp cx, 9 1287 000046EF 74C3 <1> je .invalid 1288 000046F1 C606[0B51]00 <1> mov byte [load_kernel_name + 11], 0 1289 000046F6 803E[0051]E5 <1> cmp byte [load_kernel_name], 0E5h 1290 000046FB 7505 <1> jne @F 1291 000046FD C606[0051]05 <1> mov byte [load_kernel_name], 05h 1292 <1> @@: 1292 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.114 1292 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.115 1292 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.116 1292 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.117 1292 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.118 1292 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.119 1292 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.120 1292 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.121 1292 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.114 1292 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.115 1292 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.116 1292 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.117 1292 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.118 1292 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.119 1292 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.120 1292 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.121 1292 ****************** <1> expansion: __@@_num = 122 1293 00004702 C3 <1> retn 1294 <1> 1295 <1> 1296 <1> ; INP: es:si -> partition table entry, 1297 <1> ; si = load_partition_table .. load_partition_table+48, 1298 <1> ; es = ss 1299 <1> ; bp + di -> above part table metadata, 1300 <1> ; dwo [bp + di - 4] = root (outermost extended position) 1301 <1> ; dwo [bp + di - 8] = base (current table position) 1302 <1> ; CHG: ax, bx, (cx), dx 1303 <1> load_from_partition: 1304 00004703 E898B9 <1> d4 call d4message 1305 00004706 496E206C6F61645F66- <1> d4 asciz "In load_from_partition",13,10 1305 0000470F 726F6D5F7061727469- <1> 1305 00004718 74696F6E0D0A00 <1> 1306 <1> 1307 0000471F A0[FB50] <1> mov al, byte [load_current_partition] 1308 00004722 3A06[FA50] <1> cmp al, byte [load_partition] 1309 00004726 7401 <1> je .gotit 1310 00004728 C3 <1> retn 1311 <1> 1312 <1> .gotit: 1313 00004729 E872B9 <1> d4 call d4message 1314 0000472C 496E206C6F61645F66- <1> d4 asciz "In load_from_partition.gotit",13,10 1314 00004735 726F6D5F7061727469- <1> 1314 0000473E 74696F6E2E676F7469- <1> 1314 00004747 740D0A00 <1> 1315 <1> 1316 0000474B 8B43F8 <1> mov ax, [bp + di - 8] 1317 0000474E 8B53FA <1> mov dx, [bp + di - 6] ; base (current table position) 1318 <1> 1319 00004751 52 <1> push dx 1320 00004752 50 <1> push ax 1321 00004753 06 <1> push es 1322 00004754 BB6000 <1> mov bx, 60h 1323 00004757 E8680C <1> call read_ae_512_bytes ; load partition table to 0:600h 1324 0000475A 07 <1> pop es 1325 0000475B 58 <1> pop ax 1326 0000475C 5A <1> pop dx 1327 <1> 1328 0000475D 26034408 <1> add ax, [es:si + 8] 1329 00004761 2613540A <1> adc dx, [es:si + 8 + 2] ; add offset to logical partition 1330 <1> 1331 00004765 26894408 <1> mov word [es:si + 8], ax 1332 00004769 2689540A <1> mov word [es:si + 8 + 2], dx ; store in partition table entry 1333 <1> 1334 0000476D 31C9 <1> xor cx, cx 1335 0000476F 8EC1 <1> mov es, cx ; es = 0 1336 00004771 8DB42EB7 <1> lea si, [si - (load_partition_table + DATASECTIONFIXUP) + 600h + (510 - 64)] 1337 <1> ; si = 600h + 510-64 .. 600h + 510-16 1338 00004775 26894408 <1> mov word [es:si + 8], ax 1339 00004779 2689540A <1> mov word [es:si + 8 + 2], dx ; store in partition table entry 1340 <1> 1341 <1> ; dx:ax = absolute sector number 1342 0000477D BBC007 <1> mov bx, 7C0h ; bx:0 = 7C0h:0 -> boot sector area 1343 00004780 E83F0C <1> call read_ae_512_bytes ; load partition boot sector to 0:7C00h 1344 <1> 1345 00004783 89EC <1> mov sp, bp 1346 00004785 5D <1> pop bp ; restore bp (scan_partitions) 1347 00004786 58 <1> pop ax ; discard ret address (scan_partitions) 1348 <1> 1349 00004787 BA[7936] <1> mov dx, msg.bootfail_sig 1350 0000478A 26813EFE0155AA <1> cmp word [es:510], 0AA55h 1351 00004791 7403E9B7F8 <1> jne bootcmd.fail 1352 <1> 1353 00004796 31C9 <1> xor cx, cx 1354 00004798 BA[DD36] <1> mov dx, msg.bootfail_code 1355 0000479B 26390E0000 <1> cmp word [es:0], cx 1356 000047A0 7503E9A8F8 <1> je bootcmd.fail 1357 <1> 1358 000047A5 8EC1 <1> mov es, cx ; cx = 0, es = 0 1359 000047A7 89F7 <1> mov di, si ; di -> partition table entry (seg 0) 1360 000047A9 26800D80 <1> or byte [es:di + 0], 80h ; set bootable flag 1361 000047AD A0[C050] <1> mov al, byte [load_unit] ; al = unit 1362 000047B0 BB007C <1> mov bx, 7C00h ; bx = 7C00h 1363 000047B3 E94BF8 <1> jmp load_partition_common 1364 <1> 1365 <1> 1366 <1> ; INP: es:si -> partition table entry, 1367 <1> ; si = load_partition_table .. load_partition_table+48, 1368 <1> ; es = ss 1369 <1> ; bp + di -> above part table metadata, 1370 <1> ; dwo [bp + di - 4] = root (outermost extended position) 1371 <1> ; dwo [bp + di - 8] = base (current table position) 1372 <1> ; CHG: ax, bx, (cx), dx 1373 <1> load_freedos_from_partition: 1374 000047B6 E8E5B8 <1> d4 call d4message 1375 000047B9 496E206C6F61645F66- <1> d4 asciz "In load_freedos_from_partition",13,10 1375 000047C2 726565646F735F6672- <1> 1375 000047CB 6F6D5F706172746974- <1> 1375 000047D4 696F6E0D0A00 <1> 1376 <1> 1377 000047DA A0[FB50] <1> mov al, byte [load_current_partition] 1378 000047DD 3A06[FA50] <1> cmp al, byte [load_partition] 1379 000047E1 7401 <1> je .gotit 1380 000047E3 C3 <1> retn 1381 <1> 1382 <1> .gotit: 1383 000047E4 E8B7B8 <1> d4 call d4message 1384 000047E7 496E206C6F61645F66- <1> d4 asciz "In load_freedos_from_partition.gotit",13,10 1384 000047F0 726565646F735F6672- <1> 1384 000047F9 6F6D5F706172746974- <1> 1384 00004802 696F6E2E676F746974- <1> 1384 0000480B 0D0A00 <1> 1385 <1> 1386 0000480E 8B43F8 <1> mov ax, [bp + di - 8] 1387 00004811 8B53FA <1> mov dx, [bp + di - 6] ; base (current table position) 1388 <1> 1389 00004814 26034408 <1> add ax, [es:si + 8] 1390 00004818 2613540A <1> adc dx, [es:si + 8 + 2] ; add offset to logical partition 1391 <1> 1392 0000481C 26894408 <1> mov word [es:si + 8], ax 1393 00004820 2689540A <1> mov word [es:si + 8 + 2], dx ; store in partition table entry 1394 <1> 1395 00004824 89EC <1> mov sp, bp 1396 00004826 5D <1> pop bp ; restore bp (scan_partitions) 1397 00004827 5B <1> pop bx ; discard ret address (scan_partitions) 1398 <1> 1399 <1> ; dx:ax = absolute sector number 1400 00004828 8B1E[2C02] <1> mov bx, word [auxbuff_segorsel] ; bx => auxbuff 1401 0000482C 50 <1> push ax 1402 0000482D 52 <1> push dx 1403 0000482E E8910B <1> call read_ae_512_bytes ; load partition boot sector 1404 <1> 1405 00004831 BA[7936] <1> mov dx, msg.bootfail_sig 1406 00004834 26813EFE0155AA <1> cmp word [es:510], 0AA55h 1407 0000483B 7403E90DF8 <1> jne bootcmd.fail 1408 <1> 1409 00004840 31C9 <1> xor cx, cx 1410 <1> ; mov dx, msg.bootfail_code 1411 <1> ; cmp word [es:0], cx 1412 <1> ; je bootcmd.fail 1413 <1> 1414 00004842 5A <1> pop dx 1415 00004843 58 <1> pop ax 1416 <1> 1417 <1> ; dx:ax = boot sector 1418 <1> ; byte [load_unit] = unit 1419 <1> ; es:0-> read sector 1420 <1> load_freedos_common: 1421 00004844 26A31C00 <1> mov word [es:bsBPB + bpbHiddenSectors], ax 1422 00004848 2689161E00 <1> mov word [es:bsBPB + bpbHiddenSectors + 2], dx 1423 <1> 1424 0000484D 8B5E0B <1> mov bx, [bp + bsBPB + bpbBytesPerSector] 1425 00004850 263B1E0B00 <1> cmp bx, [es:bsBPB + bpbBytesPerSector] 1426 00004855 BA[0437] <1> mov dx, msg.bootfail_secsizediffer 1427 00004858 7403E9F0F7 <1> jne bootcmd.fail 1428 <1> 1429 <1> ; preserve some variables from our pseudo BPB 1430 0000485D 31C0 <1> xor ax, ax 1431 0000485F FF7618 <1> push word [bp + bsBPB + bpbCHSSectors] 1432 00004862 268F061800 <1> pop word [es:bsBPB + bpbCHSSectors] 1433 00004867 FF761A <1> push word [bp + bsBPB + bpbCHSHeads] 1434 0000486A 268F061A00 <1> pop word [es:bsBPB + bpbCHSHeads] ; preserve geometry 1435 <1> 1436 0000486F 8B5EEA <1> mov bx, word [bp + ldParaPerSector] 1437 00004872 D1EB <1> shr bx, 1 1438 00004874 895ED4 <1> mov word [bp + ldEntriesPerSector], bx 1439 <1> 1440 00004877 2639061600 <1> cmp word [es:bsBPB + bpbSectorsPerFAT], ax 1441 0000487C 8A5E40 <1> mov bl, byte [bp + bsBPB + ebpbNew + bpbnBootUnit] 1442 0000487F 7407 <1> je .is_fat32 1443 00004881 26881E2400 <1> mov byte [es:bsBPB + bpbNew + bpbnBootUnit], bl 1444 00004886 EB05 <1> jmp short .was_fat1612 1445 <1> .is_fat32: 1446 00004888 26881E4000 <1> mov byte [es:bsBPB + ebpbNew + bpbnBootUnit], bl 1447 <1> .was_fat1612: 1448 <1> 1449 0000488D 06 <1> push es 1450 0000488E 1E <1> push ds 1451 0000488F 06 <1> push es 1452 00004890 1F <1> pop ds 1453 00004891 31F6 <1> xor si, si ; -> BPB from boot partition 1454 00004893 16 <1> push ss 1455 00004894 07 <1> pop es 1456 00004895 BF[8050] <1> mov di, load_data - LOADDATA2 ; -> our copy of a BPB 1457 00004898 B95A00 <1> mov cx, (bsBPB + ebpbNew + BPBN_size) 1458 0000489B F3A4 <1> rep movsb ; get the BPB 1459 <1> 1460 0000489D 1F <1> pop ds 1461 <1> 1462 0000489E 394616 <1> cmp word [bp + bsBPB + bpbSectorsPerFAT], ax 1463 000048A1 740B <1> je @F ; is FAT32 --> 1464 000048A3 BE[A450] <1> mov si, load_data - LOADDATA2 + bsBPB + bpbNew 1465 000048A6 BF[C050] <1> mov di, load_data - LOADDATA2 + bsBPB + ebpbNew 1466 000048A9 B91A00 <1> mov cx, BPBN_size 1467 000048AC F3A4 <1> rep movsb ; clone the FAT16 / FAT12 BPBN 1468 <1> ; to where the FAT32 BPBN lives 1469 <1> @@: 1469 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.115 1469 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.116 1469 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.117 1469 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.118 1469 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.119 1469 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.120 1469 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.121 1469 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.122 1469 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.115 1469 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.116 1469 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.117 1469 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.118 1469 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.119 1469 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.120 1469 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.121 1469 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.122 1469 ****************** <1> expansion: __@@_num = 123 1470 000048AE 07 <1> pop es 1471 <1> 1472 000048AF E85E34 <1> call bootgetmemorysize 1473 000048B2 8956E0 <1> mov word [bp + ldMemoryTop], dx 1474 000048B5 81EA0005 <1> sub dx, (20 * 1024) >> 4 1475 <1> ; leave 20 KiB free at the top, to 1476 <1> ; allow loading with the lDOS protocol (needs BPB and FAT seg 1477 <1> ; to live below its destination buffers for these) 1478 000048B9 7303 <1> jnc @F 1479 <1> .outofmem: 1480 000048BB E9CF0A <1> jmp query_geometry.out_of_memory_error 1481 <1> @@: 1481 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.116 1481 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.117 1481 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.118 1481 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.119 1481 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.120 1481 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.121 1481 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.122 1481 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.123 1481 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.116 1481 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.117 1481 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.118 1481 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.119 1481 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.120 1481 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.121 1481 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.122 1481 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.123 1481 ****************** <1> expansion: __@@_num = 124 1482 <1> 1483 000048BE 81EA0002 <1> sub dx, 8192 >> 4 1484 000048C2 72F7 <1> jc .outofmem 1485 000048C4 8956F8 <1> mov word [bp + lsvFATSeg], dx 1486 000048C7 B8FFFF <1> mov ax, -1 1487 000048CA 8946F4 <1> mov word [bp + lsvFATSector], ax 1488 000048CD 8946F6 <1> mov word [bp + lsvFATSector + 2], ax 1489 <1> 1490 000048D0 FF36[EA50] <1> push word [load_loadseg] 1491 000048D4 8F46FA <1> pop word [bp + lsvLoadSeg] 1492 <1> 1493 000048D7 833E[F250]FF <1> cmp word [load_bpb + 2], -1 1494 000048DC 7458 <1> je .auto_bpb 1495 <1> 1496 000048DE A1[F050] <1> mov ax, [load_bpb] 1497 000048E1 D1E8 <1> shr ax, 1 1498 000048E3 D1E8 <1> shr ax, 1 1499 000048E5 D1E8 <1> shr ax, 1 1500 000048E7 D1E8 <1> shr ax, 1 ; round down: start of BPB 1501 000048E9 0306[F250] <1> add ax, [load_bpb + 2] ; start of BPB 1502 000048ED 2D0301 <1> sub ax, (4096 - LOADDATA2 + 15) >> 4 ; start of stack area 1503 000048F0 50 <1> push ax 1504 000048F1 7227 <1> jc .bpb_too_low 1505 <1> 1506 000048F3 3B46FA <1> cmp ax, word [bp + lsvLoadSeg] 1507 000048F6 7729 <1> ja .loads_below_bpb 1508 <1> 1509 000048F8 83F850 <1> cmp ax, 50h 1510 000048FB 721D <1> jb .bpb_too_low 1511 <1> 1512 000048FD A1[F050] <1> mov ax, [load_bpb] 1513 00004900 050F02 <1> add ax, 512 + 15 1514 00004903 D1E8 <1> shr ax, 1 1515 00004905 D1E8 <1> shr ax, 1 1516 00004907 D1E8 <1> shr ax, 1 1517 00004909 D1E8 <1> shr ax, 1 1518 0000490B 0306[F250] <1> add ax, [load_bpb + 2] ; end of BPB / pseudo-boot-sector 1519 <1> 1520 0000490F 3B46FA <1> cmp ax, word [bp + lsvLoadSeg] 1521 00004912 760B <1> jbe .loads_above_bpb 1522 <1> 1523 00004914 BA[F738] <1> mov dx, msg.boot_bpb_load_overlap 1524 <1> .fail: 1525 00004917 E933F7 <1> jmp bootcmd.fail 1526 <1> 1527 <1> .bpb_too_low: 1528 0000491A BA[2739] <1> mov dx, msg.boot_bpb_too_low 1529 0000491D EBF8 <1> jmp .fail 1530 <1> 1531 <1> 1532 <1> .loads_above_bpb: 1533 0000491F 89D0 <1> mov ax, dx ; word [bp + ldLoadTop] = word [bp + lsvFATSeg] 1534 <1> 1535 <1> .loads_below_bpb: 1536 00004921 8946E2 <1> mov word [bp + ldLoadTop], ax 1537 00004924 FF36[F250] <1> push word [load_bpb + 2] 1538 00004928 8F06[F650] <1> pop word [load_bpb_dest + 2] 1539 0000492C FF36[F050] <1> push word [load_bpb] 1540 00004930 8F06[F450] <1> pop word [load_bpb_dest] 1541 00004934 EB2C <1> jmp .got_bpb 1542 <1> 1543 <1> 1544 <1> ; auto-BPB: allocate BPB at top and load below that 1545 <1> .auto_bpb: 1546 00004936 81EA2301 <1> sub dx, (512 - LOADDATA2 + 15 + 4096) >> 4 1547 0000493A 7303E97CFF <1> jc .outofmem 1548 <1> 1549 0000493F 52 <1> push dx 1550 00004940 89D0 <1> mov ax, dx 1551 <1> ; eg dx = 800h 1552 <1> ; want (((800h<<4) + 4096 - LOADDATA2) - 7C00h) >> 4 1553 <1> ; which is 143h 1554 <1> ; which :7C00h = 903h:0 1555 <1> ; dx + ( 4096 - LOADDATA2 - 7C00h) / 16 1556 <1> ; dx - (-4096 + LOADDATA2 + 7C00h) / 16 1557 00004942 BBF0EF <1> mov bx, (-4096 +LOADSTACKVARS) 1558 00004945 031E[F050] <1> add bx, word [load_bpb] 1559 00004949 B104 <1> mov cl, 4 1560 0000494B D3EB <1> shr bx, cl 1561 0000494D 29D8 <1> sub ax, bx 1562 <1> ; sub ax, (-4096 +LOADSTACKVARS + 7C00h) / 16 1563 0000494F 7303E967FF <1> jc .outofmem 1564 <1> ; mov word [load_bpb_dest], 7C00h 1565 00004954 FF36[F050] <1> push word [load_bpb] 1566 00004958 8F06[F450] <1> pop word [load_bpb_dest] 1567 0000495C A3[F650] <1> mov word [load_bpb_dest + 2], ax 1568 0000495F 8956E2 <1> mov word [bp + ldLoadTop], dx 1569 <1> 1570 <1> .got_bpb: 1571 00004962 58 <1> pop ax ; -> stack area 1572 00004963 06 <1> push es 1573 00004964 8EC0 <1> mov es, ax 1574 00004966 31FF <1> xor di, di 1575 00004968 31C0 <1> xor ax, ax 1576 0000496A B91809 <1> mov cx, ((512 - LOADDATA2 + 15 + 4096) & ~15) >> 1 1577 0000496D F3AB <1> rep stosw 1578 0000496F 07 <1> pop es 1579 <1> 1580 <1> 1581 <1> ; (boot.asm code starts here) 1582 <1> 1583 00004970 31C0 <1> xor ax, ax 1584 <1> ; calculate some values that we need: 1585 <1> ; adjusted sectors per cluster (store in a word, 1586 <1> ; and decode EDR-DOS's special value 0 meaning 256) 1587 00004972 8A460D <1> mov al, [bp + bsBPB + bpbSectorsPerCluster] 1588 00004975 FEC8 <1> dec al 1589 00004977 40 <1> inc ax 1590 00004978 8946E8 <1> mov [bp + ldClusterSize], ax 1591 <1> 1592 0000497B 8B46D4 <1> mov ax, [bp + ldEntriesPerSector] 1593 <1> 1594 <1> ; number of sectors used for root directory (store in CX) 1595 0000497E 31D2 <1> xor dx, dx 1596 00004980 89C3 <1> mov bx, ax 1597 00004982 48 <1> dec ax ; rounding up 1598 00004983 034611 <1> add ax, [bp + bsBPB + bpbNumRootDirEnts] ; (0 iff FAT32) 1599 00004986 11D2 <1> adc dx, dx ; account for overflow (dx was zero) 1600 00004988 F7F3 <1> div bx ; get number of root sectors 1601 0000498A 91 <1> xchg ax, cx ; cx = number of root secs 1602 <1> 1603 <1> 1604 <1> ; (iniload.asm code starts here) 1605 <1> 1606 0000498B 51 <1> push cx ; number of root secs 1607 0000498C 31C0 <1> xor ax, ax 1608 <1> ; first sector of root directory 1609 0000498E 8A4610 <1> mov al, [bp + bsBPB + bpbNumFATs] ; ! ah = 0, hence ax = number of FATs 1610 00004991 8B4E16 <1> mov cx, word [bp + bsBPB + bpbSectorsPerFAT] 1611 00004994 31FF <1> xor di, di ; di:cx = sectors per FAT 1612 <1> ; iff FAT12, FAT16 1613 00004996 85C9 <1> test cx, cx ; is FAT32 ? 1614 00004998 7506 <1> jnz @F ; no --> 1615 0000499A 8B4E24 <1> mov cx, word [bp + bsBPB + ebpbSectorsPerFATLarge] 1616 0000499D 8B7E26 <1> mov di, word [bp + bsBPB + ebpbSectorsPerFATLarge + 2] ; for FAT32 1617 <1> @@: 1617 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.117 1617 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.118 1617 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.119 1617 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.120 1617 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.121 1617 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.122 1617 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.123 1617 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.124 1617 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.117 1617 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.118 1617 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.119 1617 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.120 1617 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.121 1617 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.122 1617 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.123 1617 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.124 1617 ****************** <1> expansion: __@@_num = 125 1618 000049A0 50 <1> push ax 1619 000049A1 F7E1 <1> mul cx 1620 <1> ; ax = low word SpF*nF 1621 <1> ; dx = high word 1622 000049A3 93 <1> xchg bx, ax 1623 000049A4 87CA <1> xchg cx, dx 1624 <1> ; cx:bx = first mul 1625 000049A6 58 <1> pop ax 1626 000049A7 F7E7 <1> mul di 1627 <1> ; ax = high word adjust 1628 <1> ; dx = third word 1629 000049A9 85D2 <1> test dx, dx 1630 000049AB 7406 <1> jz @F 1631 <1> error_badchain: equ $ 1632 000049AD BA[9E38] <1> mov dx, msg.boot_badchain 1633 000049B0 E99AF6 <1> jmp bootcmd.fail 1634 <1> 1635 <1> @@: 1635 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.118 1635 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.119 1635 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.120 1635 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.121 1635 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.122 1635 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.123 1635 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.124 1635 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.125 1635 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.118 1635 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.119 1635 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.120 1635 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.121 1635 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.122 1635 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.123 1635 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.124 1635 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.125 1635 ****************** <1> expansion: __@@_num = 126 1636 000049B3 92 <1> xchg dx, ax 1637 <1> ; dx = high word adjust 1638 000049B4 01CA <1> add dx, cx 1639 <1> ; dx:bx = result 1640 000049B6 93 <1> xchg ax, bx 1641 <1> ; dx:ax = result 1642 000049B7 72F4 <1> jc error_badchain 1643 <1> 1644 000049B9 03460E <1> add ax, [bp + bsBPB + bpbReservedSectors] 1645 000049BC 83D200 <1> adc dx, byte 0 1646 000049BF 72EC <1> jc error_badchain 1647 <1> 1648 000049C1 59 <1> pop cx ; number of root sectors 1649 000049C2 31FF <1> xor di, di 1650 <1> 1651 <1> ; first sector of disk data area: 1652 000049C4 01C1 <1> add cx, ax 1653 000049C6 11D7 <1> adc di, dx 1654 000049C8 72E3 <1> jc error_badchain 1655 000049CA 894EFC <1> mov [bp + lsvDataStart], cx 1656 000049CD 897EFE <1> mov [bp + lsvDataStart + 2], di 1657 <1> 1658 000049D0 8946D0 <1> mov [bp + ldRootSector], ax 1659 000049D3 8956D2 <1> mov [bp + ldRootSector + 2], dx 1660 <1> 1661 <1> ; total sectors 1662 000049D6 31D2 <1> xor dx, dx 1663 000049D8 8B4613 <1> mov ax, [bp + bsBPB + bpbTotalSectors] 1664 000049DB 85C0 <1> test ax, ax 1665 000049DD 7506 <1> jnz @F 1666 000049DF 8B5622 <1> mov dx, [bp + bsBPB + bpbTotalSectorsLarge + 2] 1667 000049E2 8B4620 <1> mov ax, [bp + bsBPB + bpbTotalSectorsLarge] 1668 <1> 1669 <1> ; fall through and let it overwrite the field with the 1670 <1> ; already current contents. saves a jump. 1671 <1> @@: 1671 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.119 1671 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.120 1671 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.121 1671 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.122 1671 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.123 1671 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.124 1671 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.125 1671 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.126 1671 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.119 1671 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.120 1671 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.121 1671 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.122 1671 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.123 1671 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.124 1671 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.125 1671 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.126 1671 ****************** <1> expansion: __@@_num = 127 1672 000049E5 895622 <1> mov [bp + bsBPB + bpbTotalSectorsLarge + 2], dx 1673 000049E8 894620 <1> mov [bp + bsBPB + bpbTotalSectorsLarge], ax 1674 <1> 1675 <1> ; dx:ax = total sectors 1676 <1> 1677 000049EB 8B5E16 <1> mov bx, [bp + bsBPB + bpbSectorsPerFAT] 1678 000049EE C646E620 <1> mov byte [bp + ldFATType], 32 1679 000049F2 85DB <1> test bx, bx 1680 000049F4 7451 <1> jz .gotfattype 1681 <1> 1682 000049F6 31C9 <1> xor cx, cx 1683 <1> 1684 000049F8 895E24 <1> mov word [bp + bsBPB + ebpbSectorsPerFATLarge], bx 1685 000049FB 894E26 <1> mov word [bp + bsBPB + ebpbSectorsPerFATLarge + 2], cx 1686 000049FE 894E28 <1> mov word [bp + bsBPB + ebpbFSFlags], cx 1687 <1> ; FSVersion, RootCluster, FSINFOSector, BackupSector, Reserved: 1688 <1> ; uninitialised here (initialised by loaded_all later) 1689 <1> 1690 <1> ; dx:ax = total amount of sectors 1691 00004A01 2B46FC <1> sub ax, word [bp + lsvDataStart] 1692 00004A04 1B56FE <1> sbb dx, word [bp + lsvDataStart + 2] 1693 <1> 1694 <1> ; dx:ax = total amount of data sectors 1695 00004A07 89C3 <1> mov bx, ax 1696 00004A09 92 <1> xchg ax, dx 1697 00004A0A 31D2 <1> xor dx, dx 1698 00004A0C F776E8 <1> div word [bp + ldClusterSize] 1699 00004A0F 93 <1> xchg bx, ax 1700 00004A10 F776E8 <1> div word [bp + ldClusterSize] 1701 <1> ; bx:ax = quotient, dx = remainder 1702 <1> ; bx:ax = number of clusters 1703 00004A13 85DB <1> test bx, bx 1704 00004A15 7406 <1> jz @F 1705 <1> .badclusters: 1706 00004A17 BA[8438] <1> mov dx, msg.boot_badclusters 1707 00004A1A E930F6 <1> jmp bootcmd.fail 1708 <1> 1709 <1> @@: 1709 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.120 1709 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.121 1709 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.122 1709 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.123 1709 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.124 1709 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.125 1709 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.126 1709 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.127 1709 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.120 1709 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.121 1709 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.122 1709 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.123 1709 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.124 1709 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.125 1709 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.126 1709 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.127 1709 ****************** <1> expansion: __@@_num = 128 1710 00004A1D 83F8F5 <1> cmp ax, 0FFF7h - 2 1711 00004A20 77F5 <1> ja .badclusters 1712 00004A22 C646E610 <1> mov byte [bp + ldFATType], 16 1713 00004A26 3DF50F <1> cmp ax, 0FF7h - 2 1714 00004A29 771C <1> ja .gotfattype 1715 <1> 1716 00004A2B C646E60C <1> mov byte [bp + ldFATType], 12 1717 <1> 1718 <1> 1719 <1> ; (boot.asm code continues here) 1720 <1> 1721 <1> ; Load the entire FAT into memory. This is easily feasible for FAT12, 1722 <1> ; as the FAT can only contain at most 4096 entries. 1723 <1> ; (The exact condition should be "at most 4087 entries", or with a 1724 <1> ; specific FF7h semantic, "at most 4088 entries"; the more reliable 1725 <1> ; and portable alternative would be "at most 4080 entries".) 1726 <1> ; Thus, no more than 6 KiB need to be read, even though the FAT size 1727 <1> ; as indicated by word[sectors_per_fat] could be much higher. The 1728 <1> ; first loop condition below is to correctly handle the latter case. 1729 <1> ; (Sector size is assumed to be a power of two between 32 and 8192 1730 <1> ; bytes, inclusive. An 8 KiB buffer is necessary if the sector size 1731 <1> ; is 4 or 8 KiB, because reading the FAT can or will write to 8 KiB 1732 <1> ; of memory instead of only the relevant 6 KiB. This is always true 1733 <1> ; if the sector size is 8 KiB, and with 4 KiB sector size it is true 1734 <1> ; iff word[sectors_per_fat] is higher than one.) 1735 00004A2F BF0018 <1> mov di, 6 << 10 ; maximum size of FAT12 to load 1736 00004A32 8B4E16 <1> mov cx, [bp + bsBPB + bpbSectorsPerFAT] 1737 <1> ; maximum size of this FS's FAT 1738 00004A35 31D2 <1> xor dx, dx 1739 00004A37 8B460E <1> mov ax, [bp + bsBPB + bpbReservedSectors]; = first FAT sector 1740 00004A3A 8B5EF8 <1> mov bx, [bp + lsvFATSeg] 1741 <1> @@: 1741 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.121 1741 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.122 1741 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.123 1741 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.124 1741 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.125 1741 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.126 1741 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.127 1741 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.128 1741 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.121 1741 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.122 1741 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.123 1741 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.124 1741 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.125 1741 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.126 1741 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.127 1741 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.128 1741 ****************** <1> expansion: __@@_num = 129 1742 00004A3D E89409 <1> call read_sector ; read next FAT sector 1743 00004A40 2B7E0B <1> sub di, [bp + bsBPB + bpbBytesPerSector] 1744 <1> ; di = bytes still left to read 1745 00004A43 7602 <1> jbe @F ; if none --> 1746 <1> ; (jbe means jump if CF || ZF) 1747 00004A45 E2F6 <1> loop @B ; if any FAT sector still remains --> 1748 <1> @@: ; one of the limits reached; FAT read 1748 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.122 1748 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.123 1748 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.124 1748 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.125 1748 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.126 1748 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.127 1748 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.128 1748 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.129 1748 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.122 1748 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.123 1748 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.124 1748 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.125 1748 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.126 1748 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.127 1748 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.128 1748 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.129 1748 ****************** <1> expansion: __@@_num = 130 1749 <1> 1750 <1> .gotfattype: 1751 <1> 1752 00004A47 C606[FD50]00 <1> mov byte [load_check_dir_attr], 0 1753 00004A4C 8B36[0C51] <1> mov si, word [load_kernelname_input] 1754 00004A50 803C2F <1> cmp byte [si], '/' 1755 00004A53 7501 <1> jne @F 1756 00004A55 46 <1> inc si 1757 <1> @@: 1757 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.123 1757 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.124 1757 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.125 1757 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.126 1757 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.127 1757 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.128 1757 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.129 1757 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.130 1757 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.123 1757 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.124 1757 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.125 1757 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.126 1757 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.127 1757 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.128 1757 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.129 1757 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.130 1757 ****************** <1> expansion: __@@_num = 131 1758 00004A56 803C00 <1> cmp byte [si], 0 1759 00004A59 7504 <1> jne @F 1760 00004A5B 8B36[E050] <1> mov si, word [load_kernelname_default] 1761 <1> @@: 1761 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.124 1761 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.125 1761 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.126 1761 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.127 1761 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.128 1761 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.129 1761 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.130 1761 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.131 1761 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.124 1761 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.125 1761 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.126 1761 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.127 1761 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.128 1761 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.129 1761 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.130 1761 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.131 1761 ****************** <1> expansion: __@@_num = 132 1762 00004A5F 16 <1> push ss 1763 00004A60 07 <1> pop es 1764 00004A61 E820FC <1> call boot_parse_fn ; get next pathname 1765 00004A64 3C2F <1> cmp al, '/' 1766 00004A66 7509 <1> jne @F 1767 00004A68 C606[FD50]10 <1> mov byte [load_check_dir_attr], ATTR_DIRECTORY 1768 00004A6D 8936[0E51] <1> mov word [load_kernelname_next], si 1769 <1> @@: 1769 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.125 1769 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.126 1769 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.127 1769 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.128 1769 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.129 1769 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.130 1769 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.131 1769 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.132 1769 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.125 1769 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.126 1769 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.127 1769 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.128 1769 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.129 1769 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.130 1769 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.131 1769 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.132 1769 ****************** <1> expansion: __@@_num = 133 1770 <1> 1771 00004A71 BFFFFF <1> mov di, -1 1772 00004A74 89FE <1> mov si, di 1773 00004A76 897EF4 <1> mov [bp + lsvFATSector], di 1774 00004A79 8976F6 <1> mov [bp + lsvFATSector + 2], si 1775 <1> 1776 00004A7C 31C0 <1> xor ax, ax 1777 00004A7E 31D2 <1> xor dx, dx 1778 <1> 1779 <1> scan_dir_kernelname_loop: 1780 00004A80 BB0005 <1> mov bx, 500h 1781 00004A83 52 <1> push dx 1782 00004A84 50 <1> push ax 1783 00004A85 E85303 <1> call scan_dir 1784 00004A88 58 <1> pop ax 1785 00004A89 5A <1> pop dx 1786 <1> 1787 00004A8A 803E[FD50]10 <1> cmp byte [load_check_dir_attr], ATTR_DIRECTORY 1788 00004A8F 753C <1> jne got_kernelentry 1789 <1> 1790 00004A91 56 <1> push si 1791 00004A92 57 <1> push di 1792 00004A93 C606[FD50]00 <1> mov byte [load_check_dir_attr], 0 1793 00004A98 8B36[0E51] <1> mov si, word [load_kernelname_next] 1794 00004A9C 803C00 <1> cmp byte [si], 0 1795 00004A9F 7504 <1> jne @F 1796 00004AA1 8B36[E050] <1> mov si, word [load_kernelname_default] 1797 <1> @@: 1797 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.126 1797 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.127 1797 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.128 1797 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.129 1797 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.130 1797 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.131 1797 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.132 1797 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.133 1797 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.126 1797 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.127 1797 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.128 1797 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.129 1797 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.130 1797 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.131 1797 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.132 1797 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.133 1797 ****************** <1> expansion: __@@_num = 134 1798 00004AA5 06 <1> push es 1799 00004AA6 16 <1> push ss 1800 00004AA7 07 <1> pop es 1801 00004AA8 E8D9FB <1> call boot_parse_fn ; get next pathname 1802 00004AAB 07 <1> pop es 1803 00004AAC 3C2F <1> cmp al, '/' 1804 00004AAE 7509 <1> jne @F 1805 00004AB0 C606[FD50]10 <1> mov byte [load_check_dir_attr], ATTR_DIRECTORY 1806 00004AB5 8936[0E51] <1> mov word [load_kernelname_next], si 1807 <1> @@: 1807 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.127 1807 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.128 1807 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.129 1807 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.130 1807 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.131 1807 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.132 1807 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.133 1807 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.134 1807 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.127 1807 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.128 1807 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.129 1807 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.130 1807 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.131 1807 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.132 1807 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.133 1807 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.134 1807 ****************** <1> expansion: __@@_num = 135 1808 00004AB9 5F <1> pop di 1809 00004ABA 5E <1> pop si 1810 <1> 1811 00004ABB 31D2 <1> xor dx, dx 1812 00004ABD 268B471A <1> mov ax, [es:bx + deClusterLow] 1813 <1> ; = first cluster (not FAT32) 1814 00004AC1 807EE620 <1> cmp byte [bp + ldFATType], 32 1815 00004AC5 7504 <1> jne @F 1816 00004AC7 268B5714 <1> mov dx, [es:bx + deClusterHigh] 1817 <1> ; dx:ax = first cluster (FAT32) 1818 <1> @@: 1818 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.128 1818 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.129 1818 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.130 1818 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.131 1818 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.132 1818 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.133 1818 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.134 1818 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.135 1818 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.128 1818 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.129 1818 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.130 1818 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.131 1818 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.132 1818 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.133 1818 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.134 1818 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.135 1818 ****************** <1> expansion: __@@_num = 136 1819 <1> 1820 00004ACB EBB3 <1> jmp scan_dir_kernelname_loop 1821 <1> 1822 <1> 1823 <1> got_kernelentry: 1824 00004ACD 56 <1> push si 1825 00004ACE 57 <1> push di 1826 00004ACF 52 <1> push dx 1827 00004AD0 50 <1> push ax 1828 <1> 1829 00004AD1 C606[FD50]00 <1> mov byte [load_check_dir_attr], 0 1830 00004AD6 8B36[1051] <1> mov si, word [load_addname_input] 1831 00004ADA 803C2F <1> cmp byte [si], '/' 1832 00004ADD 750F <1> jne @F 1833 00004ADF 31D2 <1> xor dx, dx 1834 00004AE1 58 <1> pop ax 1835 00004AE2 58 <1> pop ax ; discard last-used directory cluster 1836 00004AE3 52 <1> push dx 1837 00004AE4 52 <1> push dx ; search from root directory 1838 00004AE5 46 <1> inc si 1839 00004AE6 803C2F <1> cmp byte [si], '/' 1840 00004AE9 7503E99000 <1> je got_no_addentry 1841 <1> @@: 1841 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.129 1841 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.130 1841 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.131 1841 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.132 1841 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.133 1841 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.134 1841 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.135 1841 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.136 1841 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.129 1841 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.130 1841 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.131 1841 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.132 1841 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.133 1841 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.134 1841 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.135 1841 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.136 1841 ****************** <1> expansion: __@@_num = 137 1842 00004AEE 803C00 <1> cmp byte [si], 0 1843 00004AF1 750C <1> jne @F 1844 00004AF3 8B36[E250] <1> mov si, word [load_addname_default] 1845 00004AF7 803C00 <1> cmp byte [si], 0 1846 00004AFA 7503E97F00 <1> je got_no_addentry 1847 <1> @@: 1847 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.130 1847 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.131 1847 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.132 1847 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.133 1847 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.134 1847 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.135 1847 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.136 1847 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.137 1847 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.130 1847 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.131 1847 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.132 1847 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.133 1847 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.134 1847 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.135 1847 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.136 1847 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.137 1847 ****************** <1> expansion: __@@_num = 138 1848 00004AFF 16 <1> push ss 1849 00004B00 07 <1> pop es 1850 00004B01 E880FB <1> call boot_parse_fn ; get next pathname 1851 00004B04 3C2F <1> cmp al, '/' 1852 00004B06 7509 <1> jne @F 1853 00004B08 C606[FD50]10 <1> mov byte [load_check_dir_attr], ATTR_DIRECTORY 1854 00004B0D 8936[0E51] <1> mov word [load_kernelname_next], si 1855 <1> @@: 1855 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.131 1855 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.132 1855 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.133 1855 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.134 1855 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.135 1855 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.136 1855 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.137 1855 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.138 1855 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.131 1855 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.132 1855 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.133 1855 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.134 1855 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.135 1855 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.136 1855 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.137 1855 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.138 1855 ****************** <1> expansion: __@@_num = 139 1856 00004B11 58 <1> pop ax 1857 00004B12 5A <1> pop dx 1858 00004B13 5F <1> pop di 1859 00004B14 5E <1> pop si 1860 <1> 1861 <1> scan_dir_addname_loop: 1862 00004B15 BB2005 <1> mov bx, 520h ; 0:bx -> space for second directory entry 1863 00004B18 E8C002 <1> call scan_dir 1864 <1> 1865 00004B1B 803E[FD50]10 <1> cmp byte [load_check_dir_attr], ATTR_DIRECTORY 1866 00004B20 756C <1> jne got_addentry 1867 <1> 1868 00004B22 56 <1> push si 1869 00004B23 57 <1> push di 1870 00004B24 52 <1> push dx 1871 00004B25 50 <1> push ax 1872 00004B26 C606[FD50]00 <1> mov byte [load_check_dir_attr], 0 1873 00004B2B 8B36[1251] <1> mov si, word [load_addname_next] 1874 00004B2F 803C00 <1> cmp byte [si], 0 1875 00004B32 7509 <1> jne @F 1876 00004B34 8B36[E250] <1> mov si, word [load_addname_default] 1877 00004B38 803C00 <1> cmp byte [si], 0 1878 00004B3B 7441 <1> je got_no_addentry 1879 <1> @@: 1879 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.132 1879 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.133 1879 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.134 1879 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.135 1879 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.136 1879 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.137 1879 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.138 1879 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.139 1879 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.132 1879 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.133 1879 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.134 1879 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.135 1879 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.136 1879 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.137 1879 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.138 1879 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.139 1879 ****************** <1> expansion: __@@_num = 140 1880 00004B3D 06 <1> push es 1881 00004B3E 16 <1> push ss 1882 00004B3F 07 <1> pop es 1883 00004B40 E841FB <1> call boot_parse_fn ; get next pathname 1884 00004B43 07 <1> pop es 1885 00004B44 3C2F <1> cmp al, '/' 1886 00004B46 7509 <1> jne @F 1887 00004B48 C606[FD50]10 <1> mov byte [load_check_dir_attr], ATTR_DIRECTORY 1888 00004B4D 8936[1251] <1> mov word [load_addname_next], si 1889 <1> @@: 1889 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.133 1889 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.134 1889 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.135 1889 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.136 1889 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.137 1889 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.138 1889 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.139 1889 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.140 1889 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.133 1889 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.134 1889 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.135 1889 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.136 1889 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.137 1889 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.138 1889 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.139 1889 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.140 1889 ****************** <1> expansion: __@@_num = 141 1890 00004B51 58 <1> pop ax 1891 00004B52 5A <1> pop dx 1892 00004B53 5F <1> pop di 1893 00004B54 5E <1> pop si 1894 <1> 1895 00004B55 31D2 <1> xor dx, dx 1896 00004B57 268B471A <1> mov ax, [es:bx + deClusterLow] 1897 <1> ; = first cluster (not FAT32) 1898 00004B5B 807EE620 <1> cmp byte [bp + ldFATType], 32 1899 00004B5F 7504 <1> jne @F 1900 00004B61 268B5714 <1> mov dx, [es:bx + deClusterHigh] 1901 <1> ; dx:ax = first cluster (FAT32) 1902 <1> @@: 1902 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.134 1902 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.135 1902 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.136 1902 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.137 1902 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.138 1902 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.139 1902 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.140 1902 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.141 1902 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.134 1902 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.135 1902 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.136 1902 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.137 1902 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.138 1902 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.139 1902 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.140 1902 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.141 1902 ****************** <1> expansion: __@@_num = 142 1903 <1> 1904 00004B65 EBAE <1> jmp scan_dir_addname_loop 1905 <1> 1906 <1> 1907 <1> helper_shift_down_and_clamp: 1908 00004B67 B90400 <1> mov cx, 4 1909 <1> @@: 1909 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.135 1909 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.136 1909 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.137 1909 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.138 1909 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.139 1909 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.140 1909 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.141 1909 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.142 1909 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.135 1909 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.136 1909 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.137 1909 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.138 1909 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.139 1909 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.140 1909 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.141 1909 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.142 1909 ****************** <1> expansion: __@@_num = 143 1910 00004B6A D0EA <1> shr dl, 1 1911 00004B6C D1D8 <1> rcr ax, 1 1912 00004B6E D1DB <1> rcr bx, 1 1913 00004B70 E2F8 <1> loop @B 1914 <1> 1915 00004B72 08D0 <1> or al, dl 1916 00004B74 89DA <1> mov dx, bx ; size in paragraphs 1917 00004B76 85C0 <1> test ax, ax ; > 0FFFFh ? 1918 00004B78 7403 <1> jz @F ; no, take actual size --> 1919 00004B7A BAFFFF <1> mov dx, 0FFFFh ; clamp to 0FFFFh 1920 <1> @@: 1920 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.136 1920 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.137 1920 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.138 1920 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.139 1920 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.140 1920 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.141 1920 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.142 1920 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.143 1920 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.136 1920 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.137 1920 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.138 1920 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.139 1920 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.140 1920 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.141 1920 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.142 1920 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.143 1920 ****************** <1> expansion: __@@_num = 144 1921 00004B7D C3 <1> retn 1922 <1> 1923 <1> got_no_addentry: 1924 00004B7E B91000 <1> mov cx, 16 1925 00004B81 31C0 <1> xor ax, ax 1926 00004B83 8EC0 <1> mov es, ax 1927 00004B85 BF2005 <1> mov di, 520h ; es:di -> space for second directory entry 1928 00004B88 F3AB <1> rep stosw ; store zeros 1929 <1> 1930 00004B8A 58 <1> pop ax 1931 00004B8B 5A <1> pop dx 1932 00004B8C 5F <1> pop di 1933 00004B8D 5E <1> pop si 1934 <1> 1935 <1> got_addentry: 1936 00004B8E 31C0 <1> xor ax, ax 1937 00004B90 8EC0 <1> mov es, ax 1938 <1> 1939 <1> 1940 <1> ; (boot32.asm code starts here) 1941 <1> 1942 00004B92 8B46E2 <1> mov ax, word [bp + ldLoadTop] 1943 00004B95 2B46EA <1> sub ax, word [bp + ldParaPerSector] 1944 00004B98 7303E91EFD <1> jc load_freedos_common.outofmem 1945 00004B9D 8946D6 <1> mov [bp + ldLastAvailableSector], ax 1946 <1> 1947 00004BA0 268B1E1C05 <1> mov bx, [es:500h + deSize] 1948 00004BA5 26A11E05 <1> mov ax, [es:500h + deSize + 2] ; ax:bx = file size 1949 00004BA9 268A160C05 <1> mov dl, [es:500h + 12] ; dl = FAT+ size bits 1950 00004BAE 88D6 <1> mov dh, dl 1951 00004BB0 81E207E0 <1> and dx, 0E007h ; obtain bits 7-5 and 2-0 1952 00004BB4 D0EE <1> shr dh, 1 1953 00004BB6 D0EE <1> shr dh, 1 1954 00004BB8 08F2 <1> or dl, dh ; dl:ax:bx = file size 1955 00004BBA 52 <1> push dx 1956 00004BBB 50 <1> push ax 1957 00004BBC 53 <1> push bx 1958 <1> 1959 00004BBD E8A7FF <1> call helper_shift_down_and_clamp 1960 <1> ; round down to next paragraph boundary 1961 00004BC0 3916[E450] <1> cmp word [load_minpara], dx 1962 00004BC4 7603E98E00 <1> ja error_filetoosmall 1963 <1> 1964 00004BC9 5B <1> pop bx 1965 00004BCA 58 <1> pop ax 1966 00004BCB 5A <1> pop dx 1967 00004BCC 8B4E0B <1> mov cx, [bp + bsBPB + bpbBytesPerSector] 1968 00004BCF 49 <1> dec cx ; BpS - 1 1969 00004BD0 01CB <1> add bx, cx 1970 00004BD2 83D000 <1> adc ax, 0 1971 00004BD5 80D200 <1> adc dl, 0 ; round up to next sector 1972 00004BD8 F7D1 <1> not cx ; ~ (BpS - 1) 1973 00004BDA 21CB <1> and bx, cx ; mask to limit to rounded-up sector 1974 00004BDC E888FF <1> call helper_shift_down_and_clamp 1975 <1> 1976 <1> ; dl:ax:bx = size in paragraphs 1977 00004BDF A1[E650] <1> mov ax, word [load_maxpara] 1978 00004BE2 39C2 <1> cmp dx, ax 1979 00004BE4 7602 <1> jbe @F 1980 00004BE6 89C2 <1> mov dx, ax 1981 <1> @@: 1981 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.137 1981 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.138 1981 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.139 1981 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.140 1981 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.141 1981 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.142 1981 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.143 1981 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.144 1981 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.137 1981 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.138 1981 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.139 1981 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.140 1981 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.141 1981 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.142 1981 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.143 1981 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.144 1981 ****************** <1> expansion: __@@_num = 145 1982 00004BE8 8956D8 <1> mov word [bp + ldParasLeft], dx 1983 00004BEB C746DA0000 <1> mov word [bp + ldParasDone], 0 1984 <1> 1985 <1> ; get starting cluster of file 1986 00004BF0 31D2 <1> xor dx, dx 1987 00004BF2 26A11A05 <1> mov ax, [es:500h + deClusterLow] 1988 <1> ; = first cluster (not FAT32) 1989 <1> 1990 00004BF6 807EE620 <1> cmp byte [bp + ldFATType], 32 1991 00004BFA 7505 <1> jne @F 1992 00004BFC 268B161405 <1> mov dx, [es:500h + deClusterHigh] 1993 <1> ; dx:ax = first cluster (FAT32) 1994 <1> @@: 1994 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.138 1994 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.139 1994 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.140 1994 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.141 1994 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.142 1994 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.143 1994 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.144 1994 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.145 1994 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.138 1994 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.139 1994 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.140 1994 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.141 1994 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.142 1994 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.143 1994 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.144 1994 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.145 1994 ****************** <1> expansion: __@@_num = 146 1995 <1> 1996 00004C01 8946F0 <1> mov word [bp + lsvFirstCluster], ax 1997 00004C04 8956F2 <1> mov word [bp + lsvFirstCluster + 2], dx 1998 <1> 1999 00004C07 E85303 <1> call check_clust 2000 00004C0A 7303E99EFD <1> jc error_badchain 2001 <1> 2002 <1> next_load_cluster: 2003 00004C0F E8AB02 <1> call clust_to_first_sector 2004 <1> ; dx:ax = first sector of cluster 2005 <1> ; cx:bx = cluster value 2006 00004C12 51 <1> push cx 2007 00004C13 53 <1> push bx ; preserve cluster number for later 2008 <1> 2009 00004C14 8B4EE8 <1> mov cx, [bp + ldClusterSize] 2010 <1> 2011 00004C17 8B5EFA <1> mov bx, [bp + lsvLoadSeg] 2012 <1> ; xxx - this will always load an entire cluster (e.g. 64 sectors), 2013 <1> ; even if the file is shorter than this 2014 <1> @@: 2014 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.139 2014 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.140 2014 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.141 2014 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.142 2014 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.143 2014 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.144 2014 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.145 2014 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.146 2014 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.139 2014 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.140 2014 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.141 2014 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.142 2014 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.143 2014 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.144 2014 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.145 2014 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.146 2014 ****************** <1> expansion: __@@_num = 147 2015 00004C1A 3B5ED6 <1> cmp bx, [bp + ldLastAvailableSector] 2016 00004C1D 7606 <1> jbe @F 2017 00004C1F BA[6238] <1> mov dx, msg.boot_file_too_big_error 2018 00004C22 E928F4 <1> jmp bootcmd.fail 2019 <1> 2020 <1> @@: 2020 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.140 2020 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.141 2020 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.142 2020 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.143 2020 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.144 2020 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.145 2020 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.146 2020 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.147 2020 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.140 2020 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.141 2020 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.142 2020 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.143 2020 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.144 2020 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.145 2020 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.146 2020 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.147 2020 ****************** <1> expansion: __@@_num = 148 2021 00004C25 06 <1> push es ; (must preserve ADR_FATBUF reference) 2022 00004C26 E8AB07 <1> call read_sector 2023 00004C29 07 <1> pop es 2024 00004C2A 895EFA <1> mov [bp + lsvLoadSeg], bx ; => after last read data 2025 <1> 2026 00004C2D 50 <1> push ax 2027 00004C2E 8B46EA <1> mov ax, [bp + ldParaPerSector] 2028 00004C31 0146DA <1> add word [bp + ldParasDone], ax 2029 00004C34 2946D8 <1> sub word [bp + ldParasLeft], ax 2030 00004C37 58 <1> pop ax 2031 00004C38 7613 <1> jbe @F ; read enough --> 2032 <1> 2033 00004C3A E2DE <1> loop @BB 2034 00004C3C 5B <1> pop bx 2035 00004C3D 59 <1> pop cx 2036 <1> 2037 00004C3E E8A102 <1> call clust_next 2038 00004C41 73CC <1> jnc next_load_cluster 2039 00004C43 40 <1> inc ax 2040 00004C44 40 <1> inc ax 2041 00004C45 A808 <1> test al, 8 ; set in 0FFF_FFF8h--0FFF_FFFFh, 2042 <1> ; clear in 0, 1, and 0FFF_FFF7h 2043 00004C47 7503E961FD <1> jz error_badchain 2044 00004C4C A9 <1> db __TEST_IMM16 2045 <1> @@: 2045 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.141 2045 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.142 2045 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.143 2045 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.144 2045 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.145 2045 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.146 2045 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.147 2045 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.148 2045 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.141 2045 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.142 2045 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.143 2045 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.144 2045 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.145 2045 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.146 2045 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.147 2045 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.148 2045 ****************** <1> expansion: __@@_num = 149 2046 00004C4D 5B <1> pop bx 2047 00004C4E 59 <1> pop cx 2048 <1> 2049 00004C4F A1[E450] <1> mov ax, word [load_minpara] 2050 00004C52 3B46DA <1> cmp ax, word [bp + ldParasDone] 2051 00004C55 7606 <1> jbe @F 2052 <1> error_filetoosmall: 2053 00004C57 BA[7238] <1> mov dx, msg.boot_file_too_small_error 2054 00004C5A E9F0F3 <1> jmp bootcmd.fail 2055 <1> @@: 2055 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.142 2055 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.143 2055 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.144 2055 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.145 2055 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.146 2055 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.147 2055 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.148 2055 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.149 2055 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.142 2055 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.143 2055 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.144 2055 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.145 2055 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.146 2055 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.147 2055 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.148 2055 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.149 2055 ****************** <1> expansion: __@@_num = 150 2056 <1> 2057 <1> ; turn off floppy motor 2058 00004C5D BAF203 <1> mov dx,3F2h 2059 00004C60 B000 <1> mov al,0 2060 00004C62 EE <1> out dx,al 2061 <1> 2062 <1> ; Set-up registers for and jump to loaded file 2063 <1> ; Already: ss:bp-> boot sector containing BPB 2064 <1> 2065 00004C63 8A5640 <1> mov dl, [bp + bsBPB + ebpbNew + bpbnBootUnit] 2066 <1> ; test word [load_options], LOAD_SET_DL_UNIT 2067 <1> ; jz @F 2068 <1> ; (always set dl) 2069 00004C66 8816[4C03] <1> mov byte [reg_edx], dl 2070 <1> @@: 2070 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.143 2070 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.144 2070 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.145 2070 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.146 2070 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.147 2070 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.148 2070 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.149 2070 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.150 2070 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.143 2070 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.144 2070 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.145 2070 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.146 2070 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.147 2070 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.148 2070 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.149 2070 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.150 2070 ****************** <1> expansion: __@@_num = 151 2071 <1> 2072 <1> ; test word [load_options], LOAD_SET_BL_UNIT 2073 <1> ; jz @F 2074 <1> ; (always set bl -- overwritten later if LOAD_SET_AXBX_DATASTART) 2075 00004C6A 8816[4403] <1> mov byte [reg_ebx], dl 2076 <1> @@: 2076 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.144 2076 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.145 2076 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.146 2076 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.147 2076 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.148 2076 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.149 2076 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.150 2076 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.151 2076 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.144 2076 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.145 2076 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.146 2076 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.147 2076 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.148 2076 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.149 2076 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.150 2076 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.151 2076 ****************** <1> expansion: __@@_num = 152 2077 <1> 2078 00004C6E 8A6E15 <1> mov ch, byte [bp + bsBPB + bpbMediaID] 2079 00004C71 882E[4903] <1> mov byte [reg_ecx + 1], ch 2080 <1> 2081 00004C75 F706[E850]4000 <1> test word [load_options], LOAD_DATASTART_HIDDEN 2082 00004C7B 740C <1> jz @F 2083 00004C7D 8B5E1C <1> mov bx, [bp + bsBPB + bpbHiddenSectors] 2084 00004C80 8B461E <1> mov ax, [bp + bsBPB + bpbHiddenSectors + 2] 2085 00004C83 015EFC <1> add word [bp + lsvDataStart], bx 2086 00004C86 1146FE <1> adc word [bp + lsvDataStart + 2], ax 2087 <1> @@: 2087 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.145 2087 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.146 2087 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.147 2087 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.148 2087 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.149 2087 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.150 2087 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.151 2087 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.152 2087 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.145 2087 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.146 2087 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.147 2087 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.148 2087 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.149 2087 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.150 2087 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.151 2087 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.152 2087 ****************** <1> expansion: __@@_num = 153 2088 <1> 2089 00004C89 F706[E850]8000 <1> test word [load_options], LOAD_SET_AXBX_DATASTART 2090 00004C8F 740D <1> jz @F 2091 00004C91 8B5EFC <1> mov bx, word [bp + lsvDataStart] 2092 00004C94 8B46FE <1> mov ax, word [bp + lsvDataStart + 2] 2093 00004C97 891E[4403] <1> mov word [reg_ebx], bx 2094 00004C9B A3[4003] <1> mov word [reg_eax], ax 2095 <1> @@: 2095 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.146 2095 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.147 2095 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.148 2095 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.149 2095 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.150 2095 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.151 2095 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.152 2095 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.153 2095 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.146 2095 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.147 2095 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.148 2095 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.149 2095 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.150 2095 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.151 2095 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.152 2095 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.153 2095 ****************** <1> expansion: __@@_num = 154 2096 <1> 2097 00004C9E F706[E850]0008 <1> test word [load_options], LOAD_SET_AXBX_ROOT_HIDDEN 2098 00004CA4 7413 <1> jz @F 2099 00004CA6 8B5ED0 <1> mov bx, word [bp + ldRootSector] 2100 00004CA9 8B46D2 <1> mov ax, word [bp + ldRootSector + 2] 2101 00004CAC 035E1C <1> add bx, word [bp + bsBPB + bpbHiddenSectors] 2102 00004CAF 13461E <1> adc ax, word [bp + bsBPB + bpbHiddenSectors + 2] 2103 00004CB2 891E[4403] <1> mov word [reg_ebx], bx 2104 00004CB6 A3[4003] <1> mov word [reg_eax], ax 2105 <1> @@: 2105 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.147 2105 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.148 2105 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.149 2105 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.150 2105 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.151 2105 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.152 2105 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.153 2105 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.154 2105 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.147 2105 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.148 2105 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.149 2105 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.150 2105 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.151 2105 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.152 2105 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.153 2105 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.154 2105 ****************** <1> expansion: __@@_num = 155 2106 <1> 2107 00004CB9 F706[E850]0400 <1> test word [load_options], LOAD_SET_SIDI_CLUSTER 2108 00004CBF 740D <1> jz @F 2109 00004CC1 8B56F2 <1> mov dx, word [bp + lsvFirstCluster + 2] 2110 00004CC4 8B46F0 <1> mov ax, word [bp + lsvFirstCluster] 2111 00004CC7 8916[5803] <1> mov word [reg_esi], dx 2112 00004CCB A3[5C03] <1> mov word [reg_edi], ax 2113 <1> @@: 2113 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.148 2113 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.149 2113 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.150 2113 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.151 2113 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.152 2113 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.153 2113 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.154 2113 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.155 2113 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.148 2113 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.149 2113 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.150 2113 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.151 2113 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.152 2113 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.153 2113 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.154 2113 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.155 2113 ****************** <1> expansion: __@@_num = 156 2114 <1> 2115 <1> ; (boot.asm code ends here) 2116 <1> 2117 <1> 2118 00004CCE C43E[F450] <1> les di, [load_bpb_dest] 2119 00004CD2 57 <1> push di 2120 00004CD3 83EF10 <1> sub di, -LOADSTACKVARS 2121 00004CD6 BE[7050] <1> mov si, load_data - LOADDATA2 + LOADSTACKVARS 2122 00004CD9 B93400 <1> mov cx, -LOADSTACKVARS + bsBPB + bpbNew 2123 00004CDC F3A4 <1> rep movsb ; move common BPB part 2124 <1> 2125 00004CDE 394E16 <1> cmp word [bp + bsBPB + bpbSectorsPerFAT], cx 2126 00004CE1 B93600 <1> mov cx, ebpbNew - bpbNew + BPBN_size ; move FAT32 EBPB part + BPBN 2127 00004CE4 7406 <1> je @F 2128 00004CE6 83C61C <1> add si, ebpbNew - bpbNew; -> BPBN 2129 00004CE9 B91A00 <1> mov cx, BPBN_size ; move only BPBN 2130 <1> @@: 2130 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.149 2130 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.150 2130 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.151 2130 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.152 2130 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.153 2130 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.154 2130 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.155 2130 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.156 2130 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.149 2130 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.150 2130 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.151 2130 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.152 2130 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.153 2130 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.154 2130 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.155 2130 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.156 2130 ****************** <1> expansion: __@@_num = 157 2131 00004CEC F3A4 <1> rep movsb 2132 <1> 2133 00004CEE 89F8 <1> mov ax, di 2134 00004CF0 5F <1> pop di 2135 00004CF1 29F8 <1> sub ax, di 2136 00004CF3 48 <1> dec ax 2137 00004CF4 48 <1> dec ax 2138 00004CF5 86C4 <1> xchg al, ah 2139 00004CF7 B0EB <1> mov al, 0EBh 2140 00004CF9 268905 <1> mov word [es:di], ax 2141 00004CFC 26C6450290 <1> mov byte [es:di + 2], 90h 2142 <1> 2143 00004D01 F706[E850]0002 <1> test word [load_options], LOAD_LBA_SET_TYPE 2144 00004D07 7416 <1> jz @F 2145 00004D09 F646E701 <1> test byte [bp + ldHasLBA], 1 2146 00004D0D 7410 <1> jz @F 2147 <1> 2148 00004D0F 26C645020E <1> mov byte [es:di + 2], 0Eh ; (LBA-enabled) FAT16 FS partition type 2149 00004D14 807EE620 <1> cmp byte [bp + ldFATType], 32 2150 00004D18 7205 <1> jb @F 2151 00004D1A 26C645020C <1> mov byte [es:di + 2], 0Ch ; (LBA-enabled) FAT32 FS partition type 2152 <1> @@: 2152 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.150 2152 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.151 2152 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.152 2152 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.153 2152 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.154 2152 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.155 2152 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.156 2152 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.157 2152 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.150 2152 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.151 2152 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.152 2152 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.153 2152 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.154 2152 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.155 2152 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.156 2152 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.157 2152 ****************** <1> expansion: __@@_num = 158 2153 <1> 2154 00004D1F 26C785FE0155AA <1> mov word [es:di + 510], 0AA55h 2155 00004D26 1E <1> push ds 2156 00004D27 31C9 <1> xor cx, cx 2157 00004D29 8ED9 <1> mov ds, cx 2158 00004D2B BE0005 <1> mov si, 500h 2159 00004D2E 57 <1> push di 2160 00004D2F 81C7D601 <1> add di, 512 - 2 - 2 - 14 - 12 - 12 2161 <1> ; 2: AA55 sig, 2: null word, 14: MS-DOS 7 protocol 2162 <1> ; message table pointer lives here, 2163 <1> ; 12: add name, 12: kernel name 2164 00004D33 B10B <1> mov cl, 11 2165 00004D35 F3A4 <1> rep movsb ; put kernel filename into the pseudo boot sector 2166 00004D37 47 <1> inc di 2167 00004D38 BE2005 <1> mov si, 520h 2168 00004D3B B10B <1> mov cl, 11 2169 00004D3D F3A4 <1> rep movsb ; put additional filename (if any) 2170 00004D3F 5F <1> pop di 2171 00004D40 1F <1> pop ds 2172 <1> 2173 00004D41 8126[7C03]FFF8 <1> and word [reg_efl], ~(400h|200h|100h) ; UP, DI, TF=0 2174 <1> 2175 00004D47 890E[7A03] <1> mov word [reg_eip + 2], cx 2176 00004D4B FF36[EC50] <1> push word [load_entrypoint] 2177 00004D4F 8F06[7803] <1> pop word [reg_eip] 2178 00004D53 A1[EE50] <1> mov ax, word [load_entrypoint + 2] 2179 00004D56 0306[EA50] <1> add ax, word [load_loadseg] 2180 00004D5A A3[6C03] <1> mov word [reg_cs], ax 2181 <1> 2182 00004D5D A1[F650] <1> mov ax, word [load_bpb_dest + 2] 2183 00004D60 A3[6803] <1> mov word [reg_ss], ax 2184 <1> ; test word [load_options], LOAD_SET_DSBP_BPB 2185 <1> ; jz @F 2186 <1> ; (always set ds -- overwritten later if LOAD_SET_DSSI_DPT) 2187 00004D63 A3[6003] <1> mov word [reg_ds], ax 2188 <1> @@: 2188 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.151 2188 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.152 2188 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.153 2188 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.154 2188 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.155 2188 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.156 2188 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.157 2188 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.158 2188 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.151 2188 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.152 2188 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.153 2188 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.154 2188 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.155 2188 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.156 2188 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.157 2188 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.158 2188 ****************** <1> expansion: __@@_num = 159 2189 00004D66 8B1E[F450] <1> mov bx, word [load_bpb_dest] 2190 00004D6A 890E[5603] <1> mov word [reg_ebp + 2], cx 2191 00004D6E 891E[5403] <1> mov word [reg_ebp], bx 2192 00004D72 89D8 <1> mov ax, bx 2193 00004D74 83EB10 <1> sub bx, -LOADSTACKVARS ; (subtracts --10h) 2194 00004D77 890E[5203] <1> mov word [reg_esp + 2], cx 2195 00004D7B 891E[5003] <1> mov word [reg_esp], bx 2196 <1> 2197 00004D7F F706[E850]0004 <1> test word [load_options], LOAD_MESSAGE_TABLE 2198 00004D85 7414 <1> jz @F 2199 00004D87 B96000 <1> mov cx, (bsBPB + ebpbNew + BPBN_size + 2 + 15) & ~15 2200 00004D8A 01C8 <1> add ax, cx 2201 00004D8C 268985EE01 <1> mov word [es:di + 1EEh], ax 2202 <1> ; this pointer points to the MS-DOS 7 message table. 2203 <1> ; 2204 <1> ; note that in actual MS-DOS 7 boot sectors, this value is 2205 <1> ; eg 17Fh, which is incorrectly used with the boot sector's 2206 <1> ; ss to load the table into the initial loader. 2207 <1> ; 2208 <1> ; refer to comments in msg.asm about msdos7_message_table. 2209 00004D91 BE[A042] <1> mov si, msdos7_message_table 2210 00004D94 01CF <1> add di, cx 2211 00004D96 B94300 <1> mov cx, msdos7_message_table.size 2212 00004D99 F3A4 <1> rep movsb 2213 <1> @@: 2213 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.152 2213 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.153 2213 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.154 2213 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.155 2213 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.156 2213 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.157 2213 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.158 2213 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.159 2213 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.152 2213 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.153 2213 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.154 2213 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.155 2213 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.156 2213 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.157 2213 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.158 2213 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.159 2213 ****************** <1> expansion: __@@_num = 160 2214 <1> 2215 00004D9B 31C0 <1> xor ax, ax 2216 00004D9D 8EC0 <1> mov es, ax 2217 00004D9F BF7800 <1> mov di, 1Eh * 4 2218 00004DA2 268B5502 <1> mov dx, word [es:di + 2] 2219 00004DA6 268B1D <1> mov bx, word [es:di] 2220 <1> 2221 00004DA9 F706[E850]1000 <1> test word [load_options], LOAD_SET_DSSI_DPT 2222 00004DAF 7408 <1> jz @F 2223 00004DB1 8916[6003] <1> mov word [reg_ds], dx 2224 00004DB5 891E[5803] <1> mov word [reg_esi], bx 2225 <1> @@: 2225 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.153 2225 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.154 2225 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.155 2225 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.156 2225 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.157 2225 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.158 2225 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.159 2225 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.160 2225 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.153 2225 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.154 2225 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.155 2225 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.156 2225 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.157 2225 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.158 2225 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.159 2225 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.160 2225 ****************** <1> expansion: __@@_num = 161 2226 00004DB9 F706[E850]2000 <1> test word [load_options], LOAD_PUSH_DPT 2227 00004DBF 7419 <1> jz @F 2228 <1> 2229 00004DC1 06 <1> push es 2230 00004DC2 57 <1> push di 2231 00004DC3 832E[5003]08 <1> sub word [reg_esp], 4 * 2 ; push four words 2232 00004DC8 8E06[6803] <1> mov es, [reg_ss] 2233 00004DCC 8B3E[5003] <1> mov di, [reg_esp] ; es:di -> stack area for the pointers 2234 00004DD0 58 <1> pop ax ; di (1Eh * 4) 2235 00004DD1 AB <1> stosw 2236 00004DD2 58 <1> pop ax ; es (0) 2237 00004DD3 AB <1> stosw 2238 00004DD4 89D8 <1> mov ax, bx 2239 00004DD6 AB <1> stosw ; si (Int1E offset) 2240 00004DD7 89D0 <1> mov ax, dx 2241 00004DD9 AB <1> stosw ; ds (Int1E segment) 2242 <1> @@: 2242 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.154 2242 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.155 2242 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.156 2242 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.157 2242 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.158 2242 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.159 2242 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.160 2242 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.161 2242 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.154 2242 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.155 2242 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.156 2242 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.157 2242 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.158 2242 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.159 2242 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.160 2242 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.161 2242 ****************** <1> expansion: __@@_num = 162 2243 00004DDA C3 <1> retn 2244 <1> 2245 <1> 2246 <1> ; INP: 0:bx -> where to place directory entry 2247 <1> ; si:di = loaded FAT sector (0 = first FAT sector) 2248 <1> ; dx:ax = directory cluster to scan, 0 for root dir 2249 <1> ; byte [bp + ldFATType] = size of FAT entry in bits 2250 <1> ; OUT: es = 0 2251 <1> ; es:bx -> directory entry (bx unchanged) 2252 <1> ; si:di = loaded FAT sector 2253 <1> ; CHG: dx, ax, si, di, cx 2254 <1> scan_dir: 2255 00004DDB 85C0 <1> test ax, ax 2256 00004DDD 7572 <1> jnz fat32_scan_root.dir_clust_dxax 2257 00004DDF 85D2 <1> test dx, dx 2258 00004DE1 756E <1> jnz fat32_scan_root.dir_clust_dxax 2259 <1> 2260 <1> ; got to scan root directory. use FAT12/FAT16 walker if so, 2261 <1> ; else use FAT32 walker 2262 <1> 2263 00004DE3 807EE610 <1> cmp byte [bp + ldFATType], 16 2264 00004DE7 7762 <1> ja fat32_scan_root 2265 <1> 2266 00004DE9 56 <1> push si 2267 00004DEA 57 <1> push di 2268 00004DEB 53 <1> push bx 2269 <1> 2270 00004DEC 8B7611 <1> mov si, word [bp + bsBPB + bpbNumRootDirEnts] 2271 <1> 2272 <1> 2273 <1> ADR_DIRBUF equ 600h 2274 <1> 2275 <1> ; (boot.asm code starts here) 2276 <1> 2277 <1> fat16_scan_root: 2278 00004DEF 85F6 <1> test si, si 2279 00004DF1 743B <1> jz error_filenotfound 2280 <1> 2281 00004DF3 8B46D0 <1> mov ax, [bp + ldRootSector] 2282 00004DF6 8B56D2 <1> mov dx, [bp + ldRootSector + 2] 2283 <1> 2284 <1> ; Scan root directory for file. We don't bother to check for deleted 2285 <1> ; entries (E5h) or entries that mark the end of the directory (00h). 2286 <1> ; number of root entries in si here 2287 <1> fat16_next_sect: 2288 00004DF9 BB6000 <1> mov bx, ADR_DIRBUF>>4 2289 00004DFC E8D505 <1> call read_sector 2290 <1> 2291 00004DFF 8B4ED4 <1> mov cx, [bp + ldEntriesPerSector] ; entries per sector as loop counter 2292 00004E02 31FF <1> xor di, di ; es:di-> first entry in this sector 2293 <1> fat16_next_ent: 2294 00004E04 268A5D0B <1> mov bl, byte [es:di + deAttrib] 2295 00004E08 F6C308 <1> test bl, ATTR_VOLLABEL 2296 00004E0B 7517 <1> jnz @F ; skip volume labels (and LFNs) --> (NZ) 2297 00004E0D 80E310 <1> and bl, ATTR_DIRECTORY ; isolate directory bit 2298 00004E10 3A1E[FD50] <1> cmp bl, byte [load_check_dir_attr] ; is it what we're searching? 2299 00004E14 750E <1> jne @F ; no --> 2300 00004E16 56 <1> push si 2301 00004E17 57 <1> push di 2302 00004E18 51 <1> push cx 2303 00004E19 BE[0051] <1> mov si, load_kernel_name ; ds:si-> name to match 2304 00004E1C B90B00 <1> mov cx, 11 ; length of padded 8.3 FAT filename 2305 00004E1F F3A6 <1> repe cmpsb ; check entry 2306 00004E21 59 <1> pop cx 2307 00004E22 5F <1> pop di 2308 00004E23 5E <1> pop si 2309 <1> @@: 2309 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.155 2309 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.156 2309 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.157 2309 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.158 2309 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.159 2309 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.160 2309 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.161 2309 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.162 2309 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.155 2309 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.156 2309 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.157 2309 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.158 2309 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.159 2309 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.160 2309 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.161 2309 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.162 2309 ****************** <1> expansion: __@@_num = 163 2310 00004E24 8D7D20 <1> lea di, [di + DIRENTRY_size] ; bytes/dirent 2311 00004E27 740B <1> je fat16_found_it ; found entry --> 2312 <1> 2313 00004E29 4E <1> dec si ; count down entire root's entries 2314 00004E2A E0D8 <1> loopnz fat16_next_ent ; count down sector's entries (jumps iff si >0 && cx >0) 2315 00004E2C 75CB <1> jnz fat16_next_sect ; (jumps iff si >0 && cx ==0) 2316 <1> ; ends up here iff si ==0 2317 <1> ; ie all root entries checked unsuccessfully 2318 <1> error_filenotfound: 2319 00004E2E BA[5038] <1> mov dx, msg.boot_file_not_found 2320 00004E31 E919F2 <1> jmp bootcmd.fail 2321 <1> 2322 <1> fat16_found_it: 2323 00004E34 5B <1> pop bx 2324 00004E35 B92000 <1> mov cx, 32 2325 00004E38 29CF <1> sub di, cx 2326 00004E3A 1E <1> push ds 2327 00004E3B 06 <1> push es 2328 00004E3C 1F <1> pop ds 2329 00004E3D 89FE <1> mov si, di ; ds:si -> entry in directory buffer 2330 00004E3F 89DF <1> mov di, bx 2331 00004E41 31C0 <1> xor ax, ax 2332 00004E43 8EC0 <1> mov es, ax ; es:di -> destination for entry 2333 00004E45 F3A4 <1> rep movsb 2334 00004E47 1F <1> pop ds 2335 00004E48 5F <1> pop di 2336 00004E49 5E <1> pop si 2337 00004E4A C3 <1> retn 2338 <1> 2339 <1> 2340 <1> ; (boot32.asm code starts here) 2341 <1> 2342 <1> fat32_scan_root: 2343 00004E4B 8B462C <1> mov ax, [bp + bsBPB + ebpbRootCluster] 2344 00004E4E 8B562E <1> mov dx, [bp + bsBPB + ebpbRootCluster + 2] 2345 <1> 2346 <1> .dir_clust_dxax: 2347 00004E51 53 <1> push bx 2348 <1> 2349 00004E52 E80801 <1> call check_clust 2350 00004E55 72D7 <1> jc error_filenotfound 2351 <1> 2352 <1> fat32_next_root_clust: 2353 00004E57 E86300 <1> call clust_to_first_sector 2354 00004E5A 51 <1> push cx 2355 00004E5B 53 <1> push bx 2356 00004E5C 8B4EE8 <1> mov cx, [bp + ldClusterSize] 2357 <1> fat32_next_root_sect: 2358 00004E5F 51 <1> push cx 2359 00004E60 8B4ED4 <1> mov cx, [bp + ldEntriesPerSector] 2360 <1> 2361 <1> ; Scan root directory for file. We don't bother to check for deleted 2362 <1> ; entries (E5h) or entries that mark the end of the directory (00h). 2363 00004E63 BB6000 <1> mov bx, ADR_DIRBUF >> 4 2364 00004E66 E86B05 <1> call read_sector 2365 <1> 2366 00004E69 57 <1> push di 2367 00004E6A 31FF <1> xor di, di ; es:di-> first entry in this sector 2368 <1> fat32_next_ent: 2369 00004E6C 268A5D0B <1> mov bl, byte [es:di + deAttrib] 2370 00004E70 F6C308 <1> test bl, ATTR_VOLLABEL 2371 00004E73 7517 <1> jnz @F ; skip volume labels (and LFNs) --> (NZ) 2372 00004E75 80E310 <1> and bl, ATTR_DIRECTORY ; isolate directory bit 2373 00004E78 3A1E[FD50] <1> cmp bl, byte [load_check_dir_attr] ; is it what we're searching? 2374 00004E7C 750E <1> jne @F ; no --> 2375 00004E7E 56 <1> push si 2376 00004E7F 57 <1> push di 2377 00004E80 51 <1> push cx 2378 00004E81 BE[0051] <1> mov si, load_kernel_name ; ds:si-> name to match 2379 00004E84 B90B00 <1> mov cx, 11 ; length of padded 8.3 FAT filename 2380 00004E87 F3A6 <1> repe cmpsb ; check entry 2381 00004E89 59 <1> pop cx 2382 00004E8A 5F <1> pop di 2383 00004E8B 5E <1> pop si 2384 <1> @@: 2384 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.156 2384 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.157 2384 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.158 2384 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.159 2384 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.160 2384 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.161 2384 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.162 2384 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.163 2384 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.156 2384 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.157 2384 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.158 2384 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.159 2384 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.160 2384 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.161 2384 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.162 2384 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.163 2384 ****************** <1> expansion: __@@_num = 164 2385 00004E8C 8D7D20 <1> lea di, [di + DIRENTRY_size] ; bytes/dirent 2386 00004E8F 740F <1> je fat32_found_it ; found entry --> 2387 <1> 2388 00004E91 E2D9 <1> loop fat32_next_ent ; count down sector's entries (jumps iff cx >0) 2389 00004E93 5F <1> pop di 2390 00004E94 59 <1> pop cx 2391 00004E95 E2C8 <1> loop fat32_next_root_sect 2392 00004E97 5B <1> pop bx 2393 00004E98 59 <1> pop cx 2394 00004E99 E84600 <1> call clust_next 2395 00004E9C 73B9 <1> jnc fat32_next_root_clust 2396 00004E9E EB8E <1> jmp error_filenotfound 2397 <1> 2398 <1> fat32_found_it: 2399 00004EA0 5A <1> pop dx ; value for di 2400 00004EA1 83C406 <1> add sp, 6 ; discard sector-in-cluster counter and cluster 2401 00004EA4 5B <1> pop bx 2402 00004EA5 B92000 <1> mov cx, 32 2403 00004EA8 29CF <1> sub di, cx 2404 00004EAA 1E <1> push ds 2405 00004EAB 06 <1> push es 2406 00004EAC 1F <1> pop ds 2407 00004EAD 56 <1> push si 2408 00004EAE 89FE <1> mov si, di ; ds:si -> entry in directory buffer 2409 00004EB0 89DF <1> mov di, bx 2410 00004EB2 31C0 <1> xor ax, ax 2411 00004EB4 8EC0 <1> mov es, ax ; es:di -> destination for entry 2412 00004EB6 F3A4 <1> rep movsb 2413 00004EB8 5E <1> pop si 2414 00004EB9 1F <1> pop ds 2415 00004EBA 89D7 <1> mov di, dx ; restore si:di = loaded FAT sector 2416 00004EBC C3 <1> retn 2417 <1> 2418 <1> 2419 <1> ; (iniload.asm code continues here) 2420 <1> 2421 <1> ; INP: dx:ax = cluster - 2 (0-based cluster) 2422 <1> ; OUT: cx:bx = input dx:ax 2423 <1> ; dx:ax = first sector of that cluster 2424 <1> ; CHG: - 2425 <1> clust_to_first_sector: 2426 00004EBD 52 <1> push dx 2427 00004EBE 50 <1> push ax 2428 00004EBF 52 <1> push dx 2429 00004EC0 F766E8 <1> mul word [bp + ldClusterSize] 2430 00004EC3 93 <1> xchg bx, ax 2431 00004EC4 87CA <1> xchg cx, dx 2432 00004EC6 58 <1> pop ax 2433 00004EC7 F766E8 <1> mul word [bp + ldClusterSize] 2434 00004ECA 85D2 <1> test dx, dx 2435 00004ECC 7511 <1> jnz .error_badchain 2436 00004ECE 92 <1> xchg dx, ax 2437 00004ECF 01CA <1> add dx, cx 2438 00004ED1 720C <1> jc .error_badchain 2439 00004ED3 93 <1> xchg ax, bx 2440 <1> 2441 00004ED4 0346FC <1> add ax, [bp + lsvDataStart] 2442 00004ED7 1356FE <1> adc dx, [bp + lsvDataStart + 2] 2443 00004EDA 7203 <1> jc .error_badchain 2444 <1> ; dx:ax = first sector in cluster 2445 00004EDC 5B <1> pop bx 2446 00004EDD 59 <1> pop cx ; cx:bx = cluster 2447 00004EDE C3 <1> retn 2448 <1> 2449 <1> .error_badchain: 2450 00004EDF E9CBFA <1> jmp error_badchain 2451 <1> 2452 <1> 2453 <1> ; INP: cx:bx = cluster (0-based) 2454 <1> ; si:di = loaded FAT sector, -1 if none 2455 <1> ; OUT: CY if no next cluster 2456 <1> ; NC if next cluster found, 2457 <1> ; dx:ax = next cluster value (0-based) 2458 <1> ; si:di = loaded FAT sector 2459 <1> ; CHG: cx, bx 2460 <1> clust_next: 2461 00004EE2 89D8 <1> mov ax, bx 2462 00004EE4 89CA <1> mov dx, cx 2463 00004EE6 83C002 <1> add ax, 2 2464 00004EE9 83D200 <1> adc dx, 0 2465 <1> 2466 00004EEC 06 <1> push es 2467 00004EED 807EE610 <1> cmp byte [bp + ldFATType], 16 2468 00004EF1 7424 <1> je .fat16 2469 00004EF3 771E <1> ja .fat32 2470 <1> 2471 <1> .fat12: 2472 <1> ; FAT12 entries are 12 bits, bytes are 8 bits. Ratio is 3 / 2, 2473 <1> ; so multiply cluster number by 3 first, then divide by 2. 2474 <1> ; ax = cluster number (up to 12 bits set) 2475 00004EF5 89C2 <1> mov dx, ax 2476 00004EF7 D1E0 <1> shl ax, 1 ; = 2n (up to 13 bits set) 2477 00004EF9 01D0 <1> add ax, dx ; = 2n+n = 3n (up to 14 bits set) 2478 00004EFB D1E8 <1> shr ax, 1 ; ax = byte offset into FAT (0..6129) 2479 <1> ; CF = whether to use high 12 bits 2480 00004EFD 19C9 <1> sbb cx, cx ; = -1 iff CY, else 0 2481 <1> 2482 <1> ; Use the calculated byte offset as an offset into the FAT 2483 <1> ; buffer, which holds all of the FAT's relevant data. 2484 00004EFF 8E46F8 <1> mov es, [bp + lsvFATSeg] 2485 00004F02 89C3 <1> mov bx, ax ; -> 16-bit word in FAT to load 2486 <1> 2487 <1> ; get 16 bits from FAT 2488 00004F04 268B07 <1> mov ax, [es:bx] 2489 <1> 2490 00004F07 80E104 <1> and cl, 4 ; = 4 iff CY after shift, else 0 2491 00004F0A D3E8 <1> shr ax, cl ; shift down iff odd entry, else unchanged 2492 00004F0C 25FF0F <1> and ax, 0FFFh ; insure it's only 12 bits 2493 00004F0F 31D2 <1> xor dx, dx 2494 00004F11 EB49 <1> jmp short .gotvalue 2495 <1> 2496 <1> .fat32: 2497 <1> ; * 4 = byte offset into FAT (0--4000_0000h) 2498 00004F13 01C0 <1> add ax, ax 2499 00004F15 11D2 <1> adc dx, dx 2500 <1> .fat16: 2501 <1> ; * 2 = byte offset into FAT (0--2_0000h) 2502 00004F17 01C0 <1> add ax, ax 2503 00004F19 11D2 <1> adc dx, dx 2504 <1> 2505 00004F1B 50 <1> push ax 2506 00004F1C 92 <1> xchg ax, dx 2507 00004F1D 31D2 <1> xor dx, dx ; dx:ax = high word 2508 00004F1F F7760B <1> div word [bp + bsBPB + bpbBytesPerSector] 2509 00004F22 89C3 <1> mov bx, ax 2510 00004F24 58 <1> pop ax ; dx = remainder, ax = low word 2511 00004F25 F7760B <1> div word [bp + bsBPB + bpbBytesPerSector] 2512 00004F28 87D3 <1> xchg dx, bx ; dx:ax = result, bx = remainder 2513 <1> ; dx:ax = sector offset into FAT (0--200_0000h) 2514 <1> ; bx = byte offset into FAT sector (0--8190) 2515 00004F2A 39F2 <1> cmp dx, si 2516 00004F2C 7504 <1> jne @F ; read sector 2517 00004F2E 39F8 <1> cmp ax, di 2518 00004F30 7418 <1> je @FF ; sector is already buffered 2519 <1> @@: 2519 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.157 2519 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.158 2519 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.159 2519 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.160 2519 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.161 2519 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.162 2519 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.163 2519 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.164 2519 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.157 2519 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.158 2519 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.159 2519 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.160 2519 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.161 2519 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.162 2519 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.163 2519 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.164 2519 ****************** <1> expansion: __@@_num = 165 2520 00004F32 89D6 <1> mov si, dx 2521 00004F34 89C7 <1> mov di, ax 2522 00004F36 8956F6 <1> mov word [bp + lsvFATSector + 2], dx 2523 00004F39 8946F4 <1> mov word [bp + lsvFATSector + 0], ax 2524 <1> 2525 00004F3C 53 <1> push bx 2526 00004F3D 03460E <1> add ax, [bp + bsBPB + bpbReservedSectors] 2527 00004F40 83D200 <1> adc dx, 0 2528 00004F43 8B5EF8 <1> mov bx, [bp + lsvFATSeg] 2529 00004F46 E88B04 <1> call read_sector 2530 00004F49 5B <1> pop bx 2531 <1> @@: 2531 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.158 2531 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.159 2531 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.160 2531 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.161 2531 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.162 2531 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.163 2531 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.164 2531 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.165 2531 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.158 2531 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.159 2531 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.160 2531 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.161 2531 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.162 2531 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.163 2531 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.164 2531 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.165 2531 ****************** <1> expansion: __@@_num = 166 2532 00004F4A 8E46F8 <1> mov es, [bp + lsvFATSeg] 2533 00004F4D 31D2 <1> xor dx, dx 2534 00004F4F 268B07 <1> mov ax, [es:bx] 2535 <1> 2536 00004F52 807EE610 <1> cmp byte [bp + ldFATType], 16 2537 00004F56 7404 <1> je @F 2538 00004F58 268B5702 <1> mov dx, [es:bx + 2] 2539 <1> @@: 2539 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.159 2539 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.160 2539 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.161 2539 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.162 2539 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.163 2539 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.164 2539 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.165 2539 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.166 2539 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.159 2539 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.160 2539 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.161 2539 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.162 2539 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.163 2539 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.164 2539 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.165 2539 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.166 2539 ****************** <1> expansion: __@@_num = 167 2540 <1> .gotvalue: 2541 00004F5C 07 <1> pop es 2542 <1> 2543 <1> ; INP: dx:ax = cluster value, 2-based 2544 <1> ; OUT: dx:ax -= 2 (makes it 0-based) 2545 <1> ; CY iff invalid cluster 2546 <1> check_clust: 2547 00004F5D 81E2FF0F <1> and dx, 0FFFh 2548 00004F61 83E802 <1> sub ax, 2 2549 00004F64 83DA00 <1> sbb dx, 0 2550 <1> 2551 00004F67 807EE610 <1> cmp byte [bp + ldFATType], 16 2552 00004F6B 7707 <1> ja .fat32 2553 00004F6D 740B <1> je .fat16 2554 <1> 2555 <1> .fat12: 2556 00004F6F 3DF50F <1> cmp ax, 0FF7h - 2 2557 00004F72 EB09 <1> jmp short .common 2558 <1> 2559 <1> .fat32: 2560 00004F74 81FAFF0F <1> cmp dx, 0FFFh 2561 00004F78 7203 <1> jb @F ; CY here means valid ...- 2562 <1> 2563 <1> .fat16: 2564 00004F7A 83F8F5 <1> cmp ax, 0FFF7h - 2 2565 <1> @@: ; -... or if NC first, CY here also 2565 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.160 2565 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.161 2565 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.162 2565 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.163 2565 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.164 2565 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.165 2565 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.166 2565 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.167 2565 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.160 2565 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.161 2565 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.162 2565 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.163 2565 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.164 2565 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.165 2565 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.166 2565 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.167 2565 ****************** <1> expansion: __@@_num = 168 2566 <1> .common: 2567 00004F7D F5 <1> cmc ; NC if valid 2568 00004F7E C3 <1> retn 2569 <1> 2570 <1> 2571 <1> scan_partitions: 2572 00004F7F 8326[F850]00 <1> and word [load_partition_cycle], 0 2573 00004F84 E817B1 <1> d4 call d4message 2574 00004F87 496E207363616E5F70- <1> d4 asciz "In scan_partitions",13,10 2574 00004F90 6172746974696F6E73- <1> 2574 00004F99 0D0A00 <1> 2575 <1> 2576 00004F9C 55 <1> push bp 2577 00004F9D 89E5 <1> mov bp, sp 2578 00004F9F 31FF <1> xor di, di 2579 00004FA1 57 <1> push di ; [bp+di-2] 2580 00004FA2 57 <1> push di ; [bp+di-4] 2581 00004FA3 57 <1> push di ; [bp+di-6] 2582 00004FA4 57 <1> push di ; [bp+di-8] 2583 <1> 2584 00004FA5 31C0 <1> xor ax, ax 2585 00004FA7 31D2 <1> xor dx, dx 2586 00004FA9 E8F2B0 <1> d4 call d4message 2587 00004FAC 496E207363616E5F70- <1> d4 asciz "In scan_partitions (before first call to read_partition_table)",13,10 2587 00004FB5 6172746974696F6E73- <1> 2587 00004FBE 20286265666F726520- <1> 2587 00004FC7 66697273742063616C- <1> 2587 00004FD0 6C20746F2072656164- <1> 2587 00004FD9 5F706172746974696F- <1> 2587 00004FE2 6E5F7461626C65290D- <1> 2587 00004FEB 0A00 <1> 2588 00004FED E8B701 <1> call read_partition_table 2589 00004FF0 E8ABB0 <1> d4 call d4message 2590 00004FF3 496E207363616E5F70- <1> d4 asciz "In scan_partitions (after first call to read_partition_table)",13,10 2590 00004FFC 6172746974696F6E73- <1> 2590 00005005 202861667465722066- <1> 2590 0000500E 697273742063616C6C- <1> 2590 00005017 20746F20726561645F- <1> 2590 00005020 706172746974696F6E- <1> 2590 00005029 5F7461626C65290D0A- <1> 2590 00005032 00 <1> 2591 00005033 BE[904F] <1> mov si, load_partition_table 2592 00005036 8816[FB50] <1> mov byte [load_current_partition], dl ; = 0 2593 <1> .loop_primary_parts: 2594 0000503A FE06[FB50] <1> inc byte [load_current_partition] 2595 0000503E 26807C0400 <1> cmp byte [es:si + 4], 0 2596 00005043 7402 <1> je .loop_primary_skip 2597 00005045 FFD1 <1> call cx ; es:si -> partition table entry 2598 <1> ; byte [load_current_partition] = which 2599 <1> .loop_primary_skip: 2600 00005047 83C610 <1> add si, 16 2601 0000504A 81FE[D04F] <1> cmp si, load_partition_table.end 2602 0000504E 72EA <1> jb .loop_primary_parts 2603 <1> 2604 <1> scan_logical: 2605 <1> .: 2606 00005050 E84BB0 <1> d4 call d4message 2607 00005053 496E207363616E5F6C- <1> d4 asciz "In scan_logical.",13,10 2607 0000505C 6F676963616C2E0D0A- <1> 2607 00005065 00 <1> 2608 00005066 BE[904F] <1> mov si, load_partition_table 2609 <1> .loop: 2610 00005069 FF06[F850] <1> inc word [load_partition_cycle] 2611 0000506D 7503E92901 <1> jz .got_partition_cycle 2612 <1> 2613 00005072 268A4404 <1> mov al, [es:si + 4] 2614 <1> 2615 00005076 31DB <1> xor bx, bx 2616 00005078 84C0 <1> test al, al 2617 0000507A 741F <1> jz .next 2618 0000507C 3C0F <1> cmp al, 0Fh ; extended partition (LBA aware) ? 2619 0000507E 742F <1> je .push ; yes --> 2620 00005080 247F <1> and al, ~80h ; extended partition Linux (85h) ? 2621 00005082 3C05 <1> cmp al, 05h ; or extended partition DOS (05h) ? 2622 00005084 7429 <1> je .push ; yes --> 2623 <1> 2624 00005086 395BFE <1> cmp word [bp+di-2], bx 2625 00005089 7505 <1> jne .logical 2626 0000508B 395BFC <1> cmp word [bp+di-4], bx 2627 0000508E 740B <1> je .next 2628 <1> .logical: 2629 00005090 FE06[FB50] <1> inc byte [load_current_partition] 2630 00005094 7503E90801 <1> jz .error_too_many_partitions 2631 00005099 FFD1 <1> call cx ; CHG: ax, bx, (cx), dx, 2632 <1> ; preserve: (cx), si, di, bp 2633 <1> .next: 2634 0000509B 83C610 <1> add si, 16 ; -> next partition table entry 2635 0000509E 81FE[D04F] <1> cmp si, load_partition_table.end ; was last? 2636 000050A2 72C5 <1> jb .loop ; no, loop --> 2637 000050A4 85FF <1> test di, di ; still some on stack? 2638 000050A6 7403E99000 <1> jnz .pop ; yes, pop 2639 000050AB 89EC <1> mov sp, bp ; restore sp 2640 000050AD 5D <1> pop bp 2641 000050AE C3 <1> retn ; and bye 2642 <1> 2643 <1> .push: 2644 000050AF E8ECAF <1> d4 call d4message 2645 000050B2 496E207363616E5F6C- <1> d4 asciz "In scan_logical.push",13,10 2645 000050BB 6F676963616C2E7075- <1> 2645 000050C4 73680D0A00 <1> 2646 <1> 2647 000050C9 56 <1> push si 2648 <1> .push_check_empty_next: 2649 000050CA 83C610 <1> add si, 16 ; -> next 2650 000050CD 81FE[D04F] <1> cmp si, load_partition_table.end ; at end? 2651 000050D1 7203E99100 <1> jae .replace ; yes, no other partitions found, replace --> 2652 000050D6 26807C0400 <1> cmp byte [es:si + 4], 0 ; is this a partition? 2653 000050DB 74ED <1> je .push_check_empty_next ; no, check next --> 2654 <1> ; found a partition after this, do push 2655 <1> ; (possibly logical or another extended) 2656 <1> .push_check_is_not_empty: 2657 000050DD E8BEAF <1> d4 call d4message 2658 000050E0 496E207363616E5F6C- <1> d4 asciz "In scan_logical.push_check_is_not_empty",13,10 2658 000050E9 6F676963616C2E7075- <1> 2658 000050F2 73685F636865636B5F- <1> 2658 000050FB 69735F6E6F745F656D- <1> 2658 00005104 7074790D0A00 <1> 2659 0000510A 5E <1> pop si ; restore -> partition table entry 2660 0000510B 56 <1> push si ; stored at word [bp+di-10] 2661 0000510C 83EF0A <1> sub di, 10 2662 0000510F FF7308 <1> push word [bp+di+10-2] 2663 00005112 FF7306 <1> push word [bp+di+10-4] ; copy root 2664 <1> 2665 00005115 268B4408 <1> mov ax, word [es:si + 8] 2666 00005119 268B540A <1> mov dx, word [es:si + 8 + 2] ; get extended partition offset 2667 0000511D 0343FC <1> add ax, word [bp+di-4] 2668 00005120 1353FE <1> adc dx, word [bp+di-2] ; add in root to get absolute sector number 2669 <1> 2670 00005123 52 <1> push dx 2671 00005124 50 <1> push ax ; new base 2672 <1> 2673 <1> .replace_common: 2674 00005125 395BFE <1> cmp word [bp+di-2], bx ; have a (nonzero) root? 2675 00005128 750B <1> jne .have_root 2676 0000512A 395BFC <1> cmp word [bp+di-4], bx 2677 0000512D 7506 <1> jne .have_root ; yes --> 2678 <1> 2679 0000512F 8953FE <1> mov word [bp+di-2], dx 2680 00005132 8943FC <1> mov word [bp+di-4], ax ; set root 2681 <1> .have_root: 2682 <1> 2683 00005135 E86F00 <1> call read_partition_table 2684 00005138 E915FF <1> jmp . 2685 <1> 2686 <1> .pop: 2687 0000513B E860AF <1> d4 call d4message 2688 0000513E 496E207363616E5F6C- <1> d4 asciz "In scan_logical.pop",13,10 2688 00005147 6F676963616C2E706F- <1> 2688 00005150 700D0A00 <1> 2689 <1> 2690 00005154 83C70A <1> add di, 10 2691 00005157 83C408 <1> add sp, 8 2692 0000515A 5E <1> pop si 2693 <1> 2694 0000515B 8B43F8 <1> mov ax, word [bp+di-8] 2695 0000515E 8B53FA <1> mov dx, word [bp+di-6] 2696 00005161 E84300 <1> call read_partition_table 2697 00005164 E934FF <1> jmp .next 2698 <1> 2699 <1> .replace: 2700 00005167 E834AF <1> d4 call d4message 2701 0000516A 496E207363616E5F6C- <1> d4 asciz "In scan_logical.replace",13,10 2701 00005173 6F676963616C2E7265- <1> 2701 0000517C 706C6163650D0A00 <1> 2702 <1> 2703 00005184 5E <1> pop si ; (discard) 2704 00005185 268B4408 <1> mov ax, word [es:si + 8] 2705 00005189 268B540A <1> mov dx, word [es:si + 8 + 2] ; get extended partition offset 2706 0000518D 0343FC <1> add ax, word [bp+di - 4] 2707 00005190 1353FE <1> adc dx, word [bp+di - 2] ; add in root 2708 00005193 8943F8 <1> mov word [bp+di - 8], ax 2709 00005196 8953FA <1> mov word [bp+di - 6], dx ; set base 2710 <1> 2711 00005199 EB8A <1> jmp .replace_common 2712 <1> 2713 <1> .got_partition_cycle: 2714 0000519B BA[6337] <1> mov dx, msg.boot_partition_cycle_error 2715 0000519E E9ACEE <1> jmp bootcmd.fail 2716 <1> 2717 <1> .error_too_many_partitions: 2718 000051A1 BA[4037] <1> mov dx, msg.boot_too_many_partitions_error 2719 000051A4 E9A6EE <1> jmp bootcmd.fail 2720 <1> 2721 <1> 2722 <1> ; INP: - 2723 <1> ; OUT: es = ss 2724 <1> ; 64 bytes [es:load_partition_table] = partition table 2725 <1> ; does not return if error 2726 <1> read_partition_table: 2727 000051A7 8B1E[2C02] <1> mov bx, word [auxbuff_segorsel] ; bx => auxbuff 2728 000051AB E81402 <1> call read_ae_512_bytes 2729 000051AE 26813EFE0155AA <1> cmp word [es:510], 0AA55h 2730 000051B5 7518 <1> jne @F 2731 000051B7 1E <1> push ds 2732 000051B8 56 <1> push si 2733 000051B9 57 <1> push di 2734 000051BA 51 <1> push cx 2735 000051BB 06 <1> push es 2736 000051BC 1F <1> pop ds 2737 000051BD BEBE01 <1> mov si, 510 - 64 2738 000051C0 16 <1> push ss 2739 000051C1 07 <1> pop es 2740 000051C2 BF[904F] <1> mov di, load_partition_table 2741 000051C5 B92000 <1> mov cx, (16 * 4) >> 1 2742 000051C8 F3A5 <1> rep movsw 2743 000051CA 59 <1> pop cx 2744 000051CB 5F <1> pop di 2745 000051CC 5E <1> pop si 2746 000051CD 1F <1> pop ds 2747 000051CE C3 <1> retn 2748 <1> 2749 <1> @@: 2749 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.161 2749 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.162 2749 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.163 2749 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.164 2749 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.165 2749 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.166 2749 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.167 2749 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.168 2749 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.161 2749 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.162 2749 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.163 2749 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.164 2749 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.165 2749 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.166 2749 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.167 2749 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.168 2749 ****************** <1> expansion: __@@_num = 169 2750 000051CF BA[A936] <1> mov dx, msg.bootfail_sig_parttable 2751 000051D2 E978EE <1> jmp bootcmd.fail 2752 <1> 2753 <1> 2754 <1> ; INP: al = first character 2755 <1> ; si -> next 2756 <1> ; OUT: doesn't return if error 2757 <1> ; bx:dx = number read 2758 <1> ; al = character after the number 2759 <1> ; si -> next 2760 <1> ; CHG: cx, ax, di 2761 <1> boot_get_decimal_literal: 2762 000051D5 BA0A00 <1> mov dx, 10 ; set base: decimal 2763 <1> %if 1 2764 000051D8 B93940 <1> mov cx, '9' | (('A'-10-1 + 10) << 8) 2765 <1> %else 2766 <1> mov cl, dl 2767 <1> add cl, '0'-1 2768 <1> cmp cl, '9' 2769 <1> jbe .lit_basebelow11 2770 <1> mov cl, '9' 2771 <1> .lit_basebelow11: ; cl = highest decimal digit for base ('1'..'9') 2772 <1> mov ch, dl 2773 <1> add ch, 'A'-10-1 ; ch = highest letter for base ('A'-x..'Z') 2774 <1> %endif 2775 000051DB EB06 <1> jmp @F 2776 <1> 2777 <1> 2778 <1> boot_get_hexadecimal_literal: 2779 000051DD BA1000 <1> mov dx, 16 ; set base: hexadecimal 2780 <1> %if 1 2781 000051E0 B93946 <1> mov cx, '9' | (('A'-10-1 + 16) << 8) 2782 <1> %else 2783 <1> mov cl, dl 2784 <1> add cl, '0'-1 2785 <1> cmp cl, '9' 2786 <1> jbe .lit_basebelow11 2787 <1> mov cl, '9' 2788 <1> .lit_basebelow11: ; cl = highest decimal digit for base ('1'..'9') 2789 <1> mov ch, dl 2790 <1> add ch, 'A'-10-1 ; ch = highest letter for base ('A'-x..'Z') 2791 <1> %endif 2792 <1> 2793 <1> @@: 2793 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.162 2793 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.163 2793 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.164 2793 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.165 2793 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.166 2793 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.167 2793 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.168 2793 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.169 2793 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.162 2793 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.163 2793 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.164 2793 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.165 2793 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.166 2793 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.167 2793 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.168 2793 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.169 2793 ****************** <1> expansion: __@@_num = 170 2794 000051E3 B400 <1> mov ah, 0 2795 000051E5 31DB <1> xor bx, bx 2796 000051E7 89D7 <1> mov di, dx ; di = base 2797 <1> 2798 000051E9 E8BC21 <1> call getexpression.lit_isdigit? ; first character must be a digit 2799 000051EC 723F <1> jc .err2 2800 000051EE 31D2 <1> xor dx, dx ; initialize value 2801 <1> .lit_loopdigit: 2802 000051F0 3C5F <1> cmp al, '_' 2803 000051F2 7430 <1> je .lit_skip 2804 000051F4 E8B121 <1> call getexpression.lit_isdigit? ; was last character ? 2805 000051F7 722E <1> jc .lit_end ; yes --> 2806 000051F9 E8B406 <1> call uppercase 2807 000051FC 2C30 <1> sub al, '0' 2808 000051FE 3C09 <1> cmp al, 9 ; was decimal digit ? 2809 00005200 7602 <1> jbe .lit_decimaldigit ; yes --> 2810 00005202 2C07 <1> sub al, 'A'-('9'+1) ; else adjust for hexadecimal digit 2811 <1> .lit_decimaldigit: 2812 00005204 50 <1> push ax 2813 00005205 89D0 <1> mov ax, dx 2814 00005207 53 <1> push bx 2815 00005208 F7E7 <1> mul di ; multiply low word with base 2816 0000520A 89D3 <1> mov bx, dx 2817 0000520C 89C2 <1> mov dx, ax 2818 0000520E 58 <1> pop ax 2819 0000520F 52 <1> push dx 2820 00005210 F7E7 <1> mul di ; multiply high word with base 2821 00005212 85D2 <1> test dx, dx 2822 00005214 5A <1> pop dx 2823 00005215 7516 <1> jnz .err2 ; overflow --> 2824 00005217 01C3 <1> add bx, ax ; add them 2825 00005219 58 <1> pop ax 2826 0000521A 7211 <1> jc .err2 ; overflow --> 2827 0000521C 00C2 <1> add dl, al ; add in the new digit 2828 0000521E 80D600 <1> adc dh, 0 2829 00005221 83D300 <1> adc bx, byte 0 2830 <1> .lit_skip: 2831 00005224 AC <1> lodsb 2832 00005225 EBC9 <1> jmp short .lit_loopdigit 2833 <1> 2834 <1> .lit_end: 2835 00005227 E88017 <1> call isseparator? ; after the number, there must be a separator 2836 0000522A 7501 <1> jne .err2 ; none here --> 2837 0000522C C3 <1> retn 2838 <1> 2839 <1> .err2: 2840 0000522D E9CB14 <1> jmp error 2841 <1> 2842 <1> 2843 <1> query_geometry: 2844 00005230 8A16[C050] <1> mov dl, [load_unit] 2845 <1> ; test dl, dl ; floppy? 2846 <1> ; jns @F ; don't attempt query, might fail --> 2847 <1> ; Note that while the original PC BIOS doesn't support this function 2848 <1> ; (for its diskettes), it does properly return the error code 01h. 2849 <1> ; https://sites.google.com/site/pcdosretro/ibmpcbios (IBM PC version 1) 2850 00005234 B408 <1> mov ah, 08h 2851 00005236 31C9 <1> xor cx, cx ; initialise cl to 0 2852 00005238 890E[9A50] <1> mov [load_heads], cx 2853 0000523C 890E[9850] <1> mov [load_sectors], cx 2854 00005240 F9 <1> stc ; initialise to CY 2855 00005241 E83301 <1> call .int13_retry ; query drive geometry 2856 00005244 720C <1> jc .try_bootsector ; apparently failed --> 2857 00005246 88F2 <1> mov dl, dh 2858 00005248 B600 <1> mov dh, 0 ; dx = maximum head number 2859 0000524A 42 <1> inc dx ; dx = number of heads (H is 0-based) 2860 0000524B 89C8 <1> mov ax, cx ; ax & 3Fh = maximum sector number 2861 0000524D 83E03F <1> and ax, 3Fh ; get sectors (number of sectors, S is 1-based) 2862 00005250 7526 <1> jnz .got_sectors_heads ; valid (S is 1-based), use these --> 2863 <1> ; zero = invalid 2864 <1> .try_bootsector: 2865 00005252 A1[2C02] <1> mov ax, word [auxbuff_segorsel] ; ax => auxbuff 2866 00005255 48 <1> dec ax ; ax => auxbuff - 16 2867 00005256 8EC0 <1> mov es, ax 2868 00005258 BB1000 <1> mov bx, 16 2869 0000525B B80102 <1> mov ax, 0201h ; read sector, 1 sector 2870 0000525E B90100 <1> mov cx, 1 ; sector 1 (1-based!), cylinder 0 (0-based) 2871 00005261 B600 <1> mov dh, 0 ; head 0 (0-based) 2872 00005263 8A16[C050] <1> mov dl, [load_unit] 2873 00005267 F9 <1> stc 2874 00005268 E80C01 <1> call .int13_retry 2875 0000526B 7303E92201 <1> jc .access_error 2876 <1> 2877 <1> ; note: the smallest supported sector size, 32 bytes, 2878 <1> ; does contain these entries (offset 18h and 1Ah in sector) 2879 <1> ; within the first BPB sector. 2880 00005270 268B4718 <1> mov ax, word [es:bx + bsBPB + bpbCHSSectors] 2881 00005274 268B571A <1> mov dx, word [es:bx + bsBPB + bpbCHSHeads] 2882 <1> 2883 <1> .got_sectors_heads: 2884 00005278 A3[9850] <1> mov word [load_sectors], ax 2885 0000527B 8916[9A50] <1> mov word [load_heads], dx 2886 <1> 2887 0000527F 85C0 <1> test ax, ax 2888 00005281 7503E92001 <1> jz .invalid_sectors 2889 00005286 83F83F <1> cmp ax, 63 2890 00005289 7603E91801 <1> ja .invalid_sectors 2891 0000528E 85D2 <1> test dx, dx 2892 00005290 7503E91601 <1> jz .invalid_heads 2893 00005295 81FA0001 <1> cmp dx, 100h 2894 00005299 7603E90D01 <1> ja .invalid_heads 2895 <1> 2896 0000529E A1[2C02] <1> mov ax, word [auxbuff_segorsel] ; ax => auxbuff 2897 000052A1 48 <1> dec ax ; ax => auxbuff - 16 2898 000052A2 8EC0 <1> mov es, ax 2899 000052A4 31C0 <1> xor ax, ax 2900 000052A6 BB1000 <1> mov bx, 16 2901 <1> 2902 <1> %if _AUXBUFFSIZE < 8192+2 2903 <1> %error Expecting to use auxbuff as sector size detection buffer 2904 <1> %endif 2905 <1> 2906 <1> d5 call d5dumpregs 2907 <1> d5 call d5message 2908 <1> d5 asciz 13,10,"In query_geometry 0",13,10 2909 <1> 2910 000052A9 89DF <1> mov di, bx 2911 000052AB B90110 <1> mov cx, (8192 + 2) >> 1 2912 <1> ; es:bx -> auxbuff, es:di = same 2913 000052AE F3AB <1> rep stosw ; fill buffer, di -> behind (auxbuff+8192+2) 2914 000052B0 B80102 <1> mov ax, 0201h ; read sector, 1 sector 2915 000052B3 41 <1> inc cx ; sector 1 (1-based!), cylinder 0 (0-based) 2916 000052B4 B600 <1> mov dh, 0 ; head 0 (0-based) 2917 000052B6 8A16[C050] <1> mov dl, [load_unit] 2918 000052BA F9 <1> stc 2919 000052BB E8B900 <1> call .int13_retry 2920 000052BE 7303E9CF00 <1> jc .access_error 2921 <1> 2922 000052C3 FD <1> std 2923 000052C4 26C747FE5E5E <1> mov word [es:bx - 2], 5E5Eh ; may overwrite last 2 bytes at line_out_end 2924 000052CA AF <1> scasw ; -> auxbuff+8192 (at last word to sca) 2925 <1> d5 call d5dumpregs 2926 <1> d5 call d5message 2927 <1> d5 asciz 13,10,"In query_geometry 1",13,10 2928 000052CB B90110 <1> mov cx, (8192 + 2) >> 1 2929 000052CE 31C0 <1> xor ax, ax 2930 000052D0 F3AF <1> repe scasw 2931 000052D2 83C704 <1> add di, 4 ; di -> first differing byte (from top) 2932 000052D5 FC <1> cld 2933 000052D6 57 <1> push di 2934 <1> 2935 000052D7 89DF <1> mov di, bx 2936 000052D9 B90110 <1> mov cx, (8192 + 2) >> 1 2937 000052DC 48 <1> dec ax ; = FFFFh 2938 000052DD F3AB <1> rep stosw 2939 <1> 2940 000052DF B80102 <1> mov ax, 0201h 2941 000052E2 41 <1> inc cx 2942 000052E3 B600 <1> mov dh, 0 2943 000052E5 8A16[C050] <1> mov dl, [load_unit] 2944 000052E9 F9 <1> stc 2945 000052EA E88A00 <1> call .int13_retry 2946 000052ED 7303E9A000 <1> jc .access_error 2947 <1> 2948 000052F2 FD <1> std 2949 000052F3 AF <1> scasw ; di -> auxbuff+8192 (last word to sca) 2950 <1> d5 call d5dumpregs 2951 <1> d5 call d5message 2952 <1> d5 asciz 13,10,"In query_geometry 2",13,10 2953 000052F4 5A <1> pop dx 2954 000052F5 B8FFFF <1> mov ax, -1 2955 000052F8 B90110 <1> mov cx, (8192 + 2) >> 1 2956 000052FB F3AF <1> repe scasw 2957 <1> %if 0 2958 <1> AAAB 2959 <1> ^ 2960 <1> sca B, match 2961 <1> ^ 2962 <1> sca B, mismatch 2963 <1> ^ 2964 <1> stop 2965 <1> %endif 2966 000052FD 83C704 <1> add di, 4 ; di -> first differing byte (from top) 2967 00005300 FC <1> cld 2968 <1> 2969 <1> %if 0 2970 <1> 0000000000000 2971 <1> AAAAAAAA00000 2972 <1> ^ 2973 <1> FFFFFFFFFFFFF 2974 <1> AAAAAAAA00FFF 2975 <1> ^ 2976 <1> %endif 2977 00005301 39FA <1> cmp dx, di ; choose the higher one 2978 00005303 7302 <1> jae @F 2979 00005305 89FA <1> mov dx, di 2980 <1> @@: 2980 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.163 2980 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.164 2980 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.165 2980 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.166 2980 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.167 2980 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.168 2980 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.169 2980 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.170 2980 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.163 2980 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.164 2980 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.165 2980 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.166 2980 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.167 2980 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.168 2980 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.169 2980 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.170 2980 ****************** <1> expansion: __@@_num = 171 2981 00005307 29DA <1> sub dx, bx ; dx = sector size 2982 <1> 2983 <1> d5 call d5dumpregs 2984 <1> d5 call d5message 2985 <1> d5 asciz 13,10,"In query_geometry 3",13,10 2986 <1> 2987 00005309 81FA0220 <1> cmp dx, 8192 + 2 2988 0000530D 7203E98500 <1> jae .sector_too_large 2989 00005312 B82000 <1> mov ax, 32 2990 00005315 39C2 <1> cmp dx, ax 2991 00005317 7303E98000 <1> jb .sector_too_small 2992 <1> @@: 2992 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.164 2992 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.165 2992 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.166 2992 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.167 2992 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.168 2992 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.169 2992 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.170 2992 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.171 2992 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.164 2992 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.165 2992 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.166 2992 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.167 2992 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.168 2992 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.169 2992 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.170 2992 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.171 2992 ****************** <1> expansion: __@@_num = 172 2993 0000531C 39C2 <1> cmp dx, ax 2994 0000531E 7409 <1> je .got_match 2995 00005320 3D0020 <1> cmp ax, 8192 2996 00005323 737C <1> jae .sector_not_power 2997 00005325 D1E0 <1> shl ax, 1 2998 00005327 EBF3 <1> jmp @B 2999 <1> 3000 <1> .got_match: 3001 00005329 A3[8B50] <1> mov word [load_sectorsize], ax 3002 0000532C B104 <1> mov cl, 4 3003 0000532E D3E8 <1> shr ax, cl 3004 00005330 A3[6A50] <1> mov word [load_sectorsizepara], ax 3005 <1> 3006 00005333 C606[6750]00 <1> mov byte [load_lba], 0 3007 00005338 B441 <1> mov ah, 41h 3008 0000533A 8A16[C050] <1> mov dl, [load_unit] 3009 0000533E BBAA55 <1> mov bx, 55AAh 3010 00005341 F9 <1> stc 3011 00005342 CD13 <1> int 13h ; 13.41.bx=55AA extensions installation check 3012 00005344 720F <1> jc .no_lba 3013 00005346 81FB55AA <1> cmp bx, 0AA55h 3014 0000534A 7509 <1> jne .no_lba 3015 0000534C F6C101 <1> test cl, 1 ; support bitmap bit 0 3016 0000534F 7404 <1> jz .no_lba 3017 <1> 3018 00005351 FE06[6750] <1> inc byte [load_lba] 3019 <1> .no_lba: 3020 <1> 3021 00005355 A1[2C02] <1> mov ax, word [auxbuff_segorsel] ; ax => auxbuff 3022 00005358 89C2 <1> mov dx, ax 3023 0000535A 81C2FF01 <1> add dx, (8192 - 16) >> 4 3024 0000535E 89C3 <1> mov bx, ax 3025 00005360 89D1 <1> mov cx, dx 3026 00005362 81E300F0 <1> and bx, 0F000h 3027 00005366 81E100F0 <1> and cx, 0F000h 3028 0000536A 39D9 <1> cmp cx, bx 3029 0000536C 7504 <1> jne @F 3030 0000536E A3[6450] <1> mov word [load_sectorseg], ax 3031 00005371 C3 <1> retn 3032 <1> 3033 <1> @@: 3033 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.165 3033 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.166 3033 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.167 3033 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.168 3033 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.169 3033 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.170 3033 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.171 3033 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.172 3033 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.165 3033 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.166 3033 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.167 3033 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.168 3033 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.169 3033 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.170 3033 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.171 3033 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.172 3033 ****************** <1> expansion: __@@_num = 173 3034 00005372 BA[3639] <1> mov dx, msg.boot_auxbuff_crossing 3035 00005375 EB37 <1> jmp .error_common_j 3036 <1> 3037 <1> 3038 <1> .int13_retry: 3039 00005377 9C <1> pushf 3040 00005378 50 <1> push ax 3041 00005379 CD13 <1> int 13h ; first try 3042 0000537B 730B <1> jnc @F ; NC, success on first attempt --> 3043 <1> 3044 <1> ; reset drive 3045 0000537D 31C0 <1> xor ax, ax 3046 0000537F CD13 <1> int 13h 3047 00005381 7205 <1> jc @F ; CY, reset failed, error in ah --> 3048 <1> 3049 <1> ; try read again 3050 00005383 58 <1> pop ax ; restore function number 3051 00005384 9D <1> popf 3052 00005385 CD13 <1> int 13h ; retry, CF error status, ah error number 3053 00005387 C3 <1> retn 3054 <1> 3055 <1> @@: ; NC or CY, stack has function number 3055 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.166 3055 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.167 3055 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.168 3055 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.169 3055 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.170 3055 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.171 3055 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.172 3055 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.173 3055 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.166 3055 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.167 3055 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.168 3055 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.169 3055 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.170 3055 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.171 3055 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.172 3055 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.173 3055 ****************** <1> expansion: __@@_num = 174 3056 00005388 44 <1> inc sp 3057 00005389 44 <1> inc sp 3058 0000538A 44 <1> inc sp 3059 0000538B 44 <1> inc sp ; discard two words on stack, preserve CF 3060 0000538C C3 <1> retn 3061 <1> 3062 <1> 3063 <1> .out_of_memory_error: 3064 0000538D BA[2F37] <1> mov dx, msg.boot_out_of_memory_error 3065 00005390 EB1C <1> jmp .error_common_j 3066 <1> .access_error: 3067 00005392 BA[9C37] <1> mov dx, msg.boot_access_error 3068 00005395 EB17 <1> jmp .error_common_j 3069 <1> .sector_too_large: 3070 00005397 BA[AA37] <1> mov dx, msg.boot_sector_too_large 3071 0000539A EB12 <1> jmp .error_common_j 3072 <1> .sector_too_small: 3073 0000539C BA[D037] <1> mov dx, msg.boot_sector_too_small 3074 0000539F EB0D <1> jmp .error_common_j 3075 <1> .sector_not_power: 3076 000053A1 BA[F837] <1> mov dx, msg.boot_sector_not_power 3077 000053A4 EB08 <1> jmp .error_common_j 3078 <1> .invalid_sectors: 3079 000053A6 BA[1A38] <1> mov dx, msg.boot_invalid_sectors 3080 000053A9 EB03 <1> jmp .error_common_j 3081 <1> .invalid_heads: 3082 000053AB BA[3638] <1> mov dx, msg.boot_invalid_heads 3083 <1> .error_common_j: 3084 000053AE E99CEC <1> jmp .error_common 3085 <1> 3086 <1> .error_common: equ bootcmd.fail 3087 <1> 3088 <1> 3089 <1> ; INP: dx:ax = first sector 3090 <1> ; bx:0 -> buffer 3091 <1> ; OUT: dx:ax = sector number after last read 3092 <1> ; es = input bx 3093 <1> ; bx:0 -> buffer after last written 3094 <1> ; CHG: - 3095 <1> ; STT: ds = ss 3096 <1> read_ae_1536_bytes: 3097 000053B1 51 <1> push cx 3098 000053B2 53 <1> push bx 3099 000053B3 B90006 <1> mov cx, 1536 3100 <1> .loop: 3101 000053B6 E81B00 <1> call read_sector 3102 000053B9 2B0E[8B50] <1> sub cx, word [load_data - LOADDATA2 + bsBPB + bpbBytesPerSector] 3103 000053BD 77F7 <1> ja .loop 3104 000053BF 07 <1> pop es 3105 000053C0 59 <1> pop cx 3106 000053C1 C3 <1> retn 3107 <1> 3108 <1> ; INP: dx:ax = first sector 3109 <1> ; bx:0 -> buffer 3110 <1> ; OUT: dx:ax = sector number after last read 3111 <1> ; es = input bx 3112 <1> ; bx:0 -> buffer after last written 3113 <1> ; CHG: - 3114 <1> ; STT: ds = ss 3115 <1> read_ae_512_bytes: 3116 000053C2 51 <1> push cx 3117 000053C3 53 <1> push bx 3118 000053C4 B90002 <1> mov cx, 512 3119 <1> .loop: 3120 000053C7 E80A00 <1> call read_sector 3121 000053CA 2B0E[8B50] <1> sub cx, word [load_data - LOADDATA2 + bsBPB + bpbBytesPerSector] 3122 000053CE 77F7 <1> ja .loop 3123 000053D0 07 <1> pop es 3124 000053D1 59 <1> pop cx 3125 000053D2 C3 <1> retn 3126 <1> 3127 <1> 3128 <1> ; Write a sector using Int13.03 or Int13.43 3129 <1> ; 3130 <1> ; Protocol as for read_sector 3131 <1> write_sector: 3132 000053D3 A8 <1> db __TEST_IMM8 ; (skip stc, NC) 3133 <1> 3134 <1> ; Read a sector using Int13.02 or Int13.42 3135 <1> ; 3136 <1> ; INP: dx:ax = sector number (within partition) 3137 <1> ; bx:0-> buffer 3138 <1> ; (_LBA) ds = ss 3139 <1> ; dword[load_data - LOADDATA2 + bsBPB + bpbHiddenSectors] 3140 <1> ; = base sector number (dx:ax is added to this to get 3141 <1> ; the absolute sector number in the selected unit.) 3142 <1> ; OUT: If unable to read, 3143 <1> ; ! jumps to error instead of returning 3144 <1> ; If sector has been read, 3145 <1> ; dx:ax = next sector number (has been incremented) 3146 <1> ; bx:0-> next buffer (bx = es+word[load_sectorsizepara]) 3147 <1> ; es = input bx 3148 <1> ; CHG: - 3149 <1> ; 3150 <1> ; Note: If error 09h (data boundary error) is returned, 3151 <1> ; the read is done into the load_sectorseg buffer, 3152 <1> ; then copied into the user buffer. 3153 <1> read_sector: 3154 000053D4 F9 <1> stc 3155 <1> 3156 <1> read_sector_CY_or_write_sector_NC: 3157 <1> lframe near 3157 ****************** <1> expansion: bits = 16 3157 ****************** <1> expansion: base_size = 2 3157 ****************** <1> expansion: near_offset = 2 3157 ****************** <1> expansion: far_offset = 4 3157 ****************** <1> expansion: int_offset = 6 3157 ****************** <1> expansion: inner = 0 3157 ****************** <1> expansion: nested = 0 3157 ****************** <1> expansion: autoret = 3157 ****************** <1> expansion: autoret = near 3157 ****************** <1> expansion: parofs = 2 3157 ****************** <1> expansion: pars_size = 0 3157 ****************** <1> expansion: pars_return_size = 0 3157 ****************** <1> expansion: parlist = 3157 ****************** <1> expansion: labellist = empty,empty,empty 3157 ****************** <1> expansion: ofs = 0 3157 ****************** <1> expansion: enter = 0 3157 ****************** <1> expansion: req = 0 3157 ****************** <1> expansion: usereq = 0 3157 ****************** <1> expansion: emit = 1 3157 ****************** <1> expansion: restore_frame_ofs = 0 3157 ****************** <1> expansion: pars_inner_size = 0 3158 000053D5 5589E5 <1> lenter 3158 ****************** <1> expansion: wasearly = 0 3158 ****************** <1> expansion: early = 0 3158 ****************** <1> expansion: lsizevariables = 0 3158 ****************** <1> expansion: req = 1 3158 ****************** <1> expansion: enter_emitted = 0 3158 ****************** <1> expansion: enter = 1 3158 ****************** <1> expansion: 186 = 0 3158 ****************** <1> expansion: newlabel = frame_bp 3158 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 3158 ****************** <1> expansion: ?frame_bp = 0 3158 ****************** <1> expansion: newlabel = frame_ip 3158 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 3158 ****************** <1> expansion: ?frame_ip = 2 3158 ****************** <1> expansion: lsizeparameters = 0 3159 <1> lvar word, is_read_bit0 3159 ****************** <1> expansion: varsize = 2 3159 ****************** <1> expansion: ofs = -2 3159 ****************** <1> expansion: newlabel = is_read_bit0 3159 ****************** <1> expansion: labellist = is_read_bit0,undefined,,frame_ip,undefined,,frame_bp,undefined,,empty,empty,empty 3159 ****************** <1> expansion: ?is_read_bit0 = -2 3159 ****************** <1> expansion: req = 1 3159 ****************** <1> expansion: hadvar = 1 3160 000053D8 9C <1> pushf 3161 <1> 3162 <1> .err: equ bootcmd.fail_read 3163 <1> d5 call d5dumpregs 3164 <1> d5 call d5message 3165 <1> d5 asciz 13,10,"In read_sector",13,10 3166 <1> 3167 000053D9 52 <1> push dx 3168 000053DA 51 <1> push cx 3169 000053DB 50 <1> push ax 3170 000053DC 56 <1> push si 3171 <1> 3172 000053DD 53 <1> push bx 3173 <1> 3174 <1> ; DX:AX==LBA sector number 3175 <1> ; add partition start (= number of hidden sectors) 3176 000053DE 0306[9C50] <1> add ax,[load_data - LOADDATA2 + bsBPB + bpbHiddenSectors + 0] 3177 000053E2 1316[9E50] <1> adc dx,[load_data - LOADDATA2 + bsBPB + bpbHiddenSectors + 2] 3178 <1> 3179 000053E6 31C9 <1> xor cx, cx 3180 000053E8 51 <1> push cx 3181 000053E9 51 <1> push cx 3182 000053EA 52 <1> push dx 3183 000053EB 50 <1> push ax ; qword sector number (lpSector) 3184 000053EC 53 <1> push bx 3185 000053ED 51 <1> push cx ; bx:0 -> buffer (lpBuffer) 3186 000053EE 41 <1> inc cx 3187 000053EF 51 <1> push cx ; word number of sectors to read (lpCount) 3188 000053F0 B110 <1> mov cl, 10h 3189 000053F2 51 <1> push cx ; word size of disk address packet (lpSize) 3190 000053F3 89E6 <1> mov si, sp ; ds:si -> disk address packet (on stack) 3191 <1> 3192 000053F5 F606[6750]01 <1> test byte [load_data - LOADDATA2 + ldHasLBA], 1 3193 000053FA 7503E9E200 <1> jz .no_lba 3194 <1> 3195 <1> d5 call d5message 3196 <1> d5 asciz "In read_sector.lba",13,10 3197 <1> 3198 000053FF 8A16[C050] <1> mov dl, byte [load_unit] 3199 00005403 E8E801 <1> call .set_ah_function_42_or_43 3200 00005406 CD13 <1> int 13h ; 13.42 extensions read 3201 00005408 7203E9CD00 <1> jnc .lba_done 3202 <1> 3203 0000540D 31C0 <1> xor ax, ax 3204 0000540F CD13 <1> int 13h 3205 00005411 7303E92AEC <1> jc .lba_error 3206 <1> 3207 <1> ; have to reset the LBAPACKET's lpCount, as the handler may 3208 <1> ; set it to "the number of blocks successfully transferred". 3209 <1> ; (in any case, the high byte is still zero.) 3210 00005416 C6440201 <1> mov byte [si + lpCount], 1 3211 <1> 3212 0000541A E8D101 <1> call .set_ah_function_42_or_43 3213 0000541D CD13 <1> int 13h 3214 0000541F 7203E9B600 <1> jnc .lba_done 3215 <1> 3216 00005424 80FC09 <1> cmp ah, 9 ; data boundary error? 3217 00005427 7403E914EC <1> jne .lba_error 3218 <1> 3219 <1> .lba_sectorseg: 3220 0000542C E8D1AB <1> d4 call d4dumpregs 3221 0000542F E86CAC <1> d4 call d4message 3222 00005432 0D0A496E2072656164- <1> d4 asciz 13,10,"In read_sector.lba_sectorseg",13,10 3222 0000543B 5F736563746F722E6C- <1> 3222 00005444 62615F736563746F72- <1> 3222 0000544D 7365670D0A00 <1> 3223 <1> 3224 00005453 F646FE01 <1> test byte [bp + ?is_read_bit0], 1 3225 00005457 7542 <1> jnz .lba_sectorseg_read 3226 <1> 3227 <1> .lba_sectorseg_write: 3228 00005459 1E <1> push ds 3229 0000545A 56 <1> push si 3230 0000545B 06 <1> push es 3231 0000545C 57 <1> push di 3232 0000545D 8B0E[8B50] <1> mov cx, word [load_sectorsize] 3233 00005461 8E06[6450] <1> mov es, word [load_sectorseg] ; => sectorseg 3234 <1> ; lds si, [si + lpBuffer + 0] 3235 00005465 8E5C06 <1> mov ds, word [si + lpBuffer + 2]; => user buffer 3236 00005468 31F6 <1> xor si, si 3237 0000546A 31FF <1> xor di, di 3238 0000546C F3A4 <1> rep movsb ; copy data into sectorseg 3239 0000546E 5F <1> pop di 3240 0000546F 07 <1> pop es 3241 00005470 5E <1> pop si 3242 00005471 1F <1> pop ds 3243 <1> 3244 00005472 FF36[6450] <1> push word [load_sectorseg] 3245 00005476 8F4406 <1> pop word [si + lpBuffer + 2] ; => sectorseg 3246 <1> ; and word [si + lpBuffer + 0], byte 0 3247 <1> 3248 00005479 C6440201 <1> mov byte [si + lpCount], 1 3249 0000547D B443 <1> mov ah, 43h 3250 0000547F CD13 <1> int 13h 3251 00005481 7316 <1> jnc @F 3252 <1> 3253 00005483 31C0 <1> xor ax, ax 3254 00005485 CD13 <1> int 13h 3255 00005487 7303E9B4EB <1> jc .lba_error 3256 <1> 3257 0000548C C6440201 <1> mov byte [si + lpCount], 1 3258 00005490 B443 <1> mov ah, 43h 3259 00005492 CD13 <1> int 13h 3260 00005494 7303E9A7EB <1> jc .lba_error 3261 <1> @@: 3261 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.167 3261 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.168 3261 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.169 3261 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.170 3261 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.171 3261 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.172 3261 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.173 3261 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.174 3261 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.167 3261 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.168 3261 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.169 3261 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.170 3261 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.171 3261 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.172 3261 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.173 3261 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.174 3261 ****************** <1> expansion: __@@_num = 175 3262 00005499 EB3F <1> jmp .lba_done 3263 <1> 3264 <1> 3265 <1> .lba_sectorseg_read: 3266 <1> ; the offset part of the pointer is already zero! 3267 <1> ; push word [si + lpBuffer + 0] 3268 0000549B FF7406 <1> push word [si + lpBuffer + 2] ; user buffer 3269 0000549E FF36[6450] <1> push word [load_sectorseg] 3270 000054A2 8F4406 <1> pop word [si + lpBuffer + 2] 3271 <1> ; and word [si + lpBuffer + 0], byte 0 3272 <1> 3273 000054A5 C6440201 <1> mov byte [si + lpCount], 1 3274 000054A9 E84201 <1> call .set_ah_function_42_or_43 3275 000054AC CD13 <1> int 13h 3276 000054AE 7317 <1> jnc .lba_sectorseg_done 3277 <1> 3278 000054B0 31C0 <1> xor ax, ax 3279 000054B2 CD13 <1> int 13h 3280 000054B4 7303E987EB <1> jc .lba_error 3281 <1> 3282 000054B9 C6440201 <1> mov byte [si + lpCount], 1 3283 000054BD E82E01 <1> call .set_ah_function_42_or_43 3284 000054C0 CD13 <1> int 13h 3285 000054C2 7303E979EB <1> jc .lba_error 3286 <1> .lba_sectorseg_done: 3287 <1> 3288 000054C7 31F6 <1> xor si, si 3289 000054C9 8E1E[6450] <1> mov ds, word [load_sectorseg] 3290 000054CD 07 <1> pop es 3291 <1> ; pop cx 3292 000054CE 57 <1> push di 3293 <1> ; mov di, cx 3294 000054CF 31FF <1> xor di, di 3295 000054D1 8B0E[8B50] <1> mov cx, word [load_sectorsize] 3296 000054D5 F3A4 <1> rep movsb 3297 000054D7 5F <1> pop di 3298 <1> 3299 000054D8 16 <1> push ss 3300 000054D9 1F <1> pop ds 3301 <1> .lba_done: 3302 000054DA 83C410 <1> add sp, 10h 3303 000054DD 5B <1> pop bx 3304 000054DE E9FB00 <1> jmp .chs_done 3305 <1> 3306 <1> .lba_error: equ .err 3307 <1> 3308 <1> .no_lba: 3309 000054E1 83C408 <1> add sp, 8 3310 000054E4 58 <1> pop ax 3311 000054E5 5A <1> pop dx 3312 000054E6 59 <1> pop cx 3313 000054E7 59 <1> pop cx 3314 <1> 3315 <1> ; DX:AX=LBA sector number 3316 <1> ; divide by number of sectors per track to get sector number 3317 <1> ; Use 32:16 DIV instead of 64:32 DIV for 8088 compatability 3318 <1> ; Use two-step 32:16 divide to avoid overflow 3319 000054E8 89C1 <1> mov cx,ax 3320 000054EA 89D0 <1> mov ax,dx 3321 000054EC 31D2 <1> xor dx,dx 3322 000054EE F736[9850] <1> div word [load_sectors] 3323 000054F2 91 <1> xchg cx,ax 3324 000054F3 F736[9850] <1> div word [load_sectors] 3325 000054F7 87CA <1> xchg cx,dx 3326 <1> 3327 <1> ; DX:AX=quotient, CX=remainder=sector (S) - 1 3328 <1> ; divide quotient by number of heads 3329 000054F9 89C3 <1> mov bx, ax 3330 000054FB 92 <1> xchg ax, dx 3331 000054FC 31D2 <1> xor dx, dx 3332 000054FE F736[9A50] <1> div word [load_heads] 3333 00005502 93 <1> xchg bx, ax 3334 00005503 F736[9A50] <1> div word [load_heads] 3335 <1> 3336 <1> ; bx:ax=quotient=cylinder (C), dx=remainder=head (H) 3337 <1> ; move variables into registers for INT 13h AH=02h 3338 00005507 88D6 <1> mov dh, dl ; dh = head 3339 00005509 41 <1> inc cx ; cl5:0 = sector 3340 0000550A 86E8 <1> xchg ch, al ; ch = cylinder 7:0, al = 0 3341 0000550C D1E8 <1> shr ax, 1 3342 0000550E D1E8 <1> shr ax, 1 ; al7:6 = cylinder 9:8 3343 <1> ; bx has bits set iff it's > 0, indicating a cylinder >= 65536. 3344 00005510 08FB <1> or bl, bh ; collect set bits from bh 3345 00005512 08C1 <1> or cl, al ; cl7:6 = cylinder 9:8 3346 <1> ; ah has bits set iff it was >= 4, indicating a cylinder >= 1024. 3347 00005514 08E3 <1> or bl, ah ; collect set bits from ah 3348 00005516 8A16[C050] <1> mov dl, [load_unit] 3349 <1> ; dl = drive 3350 0000551A B404 <1> mov ah, 04h ; error number: sector not found 3351 0000551C 7403E91FEB <1> jnz .err ; error if cylinder >= 1024 --> 3352 <1> ; ! bx = 0 (for 13.02 call) 3353 <1> 3354 <1> ; we call INT 13h AH=02h once for each sector. Multi-sector reads 3355 <1> ; may fail if we cross a track or 64K boundary 3356 00005521 07 <1> pop es 3357 <1> 3358 00005522 E8D400 <1> call .set_ax_function_0201_or_0301 3359 00005525 CD13 <1> int 13h ; read one sector 3360 00005527 7203E9AE00 <1> jnc .done 3361 <1> ; reset drive 3362 0000552C 31C0 <1> xor ax, ax 3363 0000552E CD13 <1> int 13h 3364 00005530 7303E90BEB <1> jc .err 3365 <1> 3366 <1> ; try read again 3367 00005535 E8C100 <1> call .set_ax_function_0201_or_0301 3368 00005538 CD13 <1> int 13h 3369 0000553A 7203E99B00 <1> jnc .done 3370 0000553F 80FC09 <1> cmp ah, 9 ; data boundary error? 3371 00005542 7403E9F9EA <1> jne .err 3372 <1> 3373 <1> .chs_sectorseg: 3374 00005547 E8B6AA <1> d4 call d4dumpregs 3375 0000554A E851AB <1> d4 call d4message 3376 0000554D 0D0A496E2072656164- <1> d4 asciz 13,10,"In read_sector.chs_sectorseg",13,10 3376 00005556 5F736563746F722E63- <1> 3376 0000555F 68735F736563746F72- <1> 3376 00005568 7365670D0A00 <1> 3377 <1> 3378 0000556E F646FE01 <1> test byte [bp + ?is_read_bit0], 1 3379 00005572 7534 <1> jnz .chs_sectorseg_read 3380 <1> 3381 <1> .chs_sectorseg_write: 3382 00005574 06 <1> push es 3383 <1> 3384 00005575 1E <1> push ds 3385 00005576 57 <1> push di 3386 00005577 51 <1> push cx 3387 00005578 8B0E[8B50] <1> mov cx, word [load_sectorsize] 3388 0000557C 06 <1> push es 3389 0000557D 8E06[6450] <1> mov es, word [load_sectorseg] ; => sectorseg 3390 00005581 1F <1> pop ds ; => user buffer 3391 00005582 31F6 <1> xor si, si 3392 00005584 31FF <1> xor di, di 3393 00005586 F3A4 <1> rep movsb ; copy data into sectorseg 3394 00005588 59 <1> pop cx 3395 00005589 5F <1> pop di 3396 0000558A 1F <1> pop ds 3397 <1> 3398 0000558B B80103 <1> mov ax, 0301h 3399 0000558E CD13 <1> int 13h 3400 00005590 7313 <1> jnc @F 3401 <1> 3402 00005592 31C0 <1> xor ax, ax 3403 00005594 CD13 <1> int 13h 3404 00005596 7303E9A5EA <1> jc .err 3405 <1> 3406 0000559B B80103 <1> mov ax, 0301h 3407 0000559E CD13 <1> int 13h 3408 000055A0 7303E99BEA <1> jc .err 3409 <1> @@: 3409 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.168 3409 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.169 3409 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.170 3409 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.171 3409 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.172 3409 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.173 3409 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.174 3409 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.175 3409 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.168 3409 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.169 3409 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.170 3409 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.171 3409 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.172 3409 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.173 3409 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.174 3409 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.175 3409 ****************** <1> expansion: __@@_num = 176 3410 000055A5 5B <1> pop bx 3411 000055A6 EB34 <1> jmp .chs_done 3412 <1> 3413 <1> 3414 <1> .chs_sectorseg_read: 3415 <1> 3416 000055A8 06 <1> push es ; user buffer 3417 000055A9 8E06[6450] <1> mov es, word [load_sectorseg] 3418 <1> 3419 000055AD E84900 <1> call .set_ax_function_0201_or_0301 3420 000055B0 CD13 <1> int 13h 3421 000055B2 7313 <1> jnc .chs_sectorseg_done 3422 <1> 3423 000055B4 31C0 <1> xor ax, ax 3424 000055B6 CD13 <1> int 13h 3425 000055B8 7303E983EA <1> jc .err 3426 <1> 3427 000055BD E83900 <1> call .set_ax_function_0201_or_0301 3428 000055C0 CD13 <1> int 13h 3429 000055C2 7303E979EA <1> jc .err 3430 <1> .chs_sectorseg_done: 3431 <1> 3432 000055C7 31F6 <1> xor si, si 3433 000055C9 8E1E[6450] <1> mov ds, word [load_sectorseg] 3434 000055CD 07 <1> pop es 3435 000055CE 57 <1> push di 3436 000055CF 31FF <1> xor di, di 3437 000055D1 8B0E[8B50] <1> mov cx, word [load_sectorsize] 3438 000055D5 F3A4 <1> rep movsb 3439 000055D7 5F <1> pop di 3440 <1> 3441 000055D8 16 <1> push ss 3442 000055D9 1F <1> pop ds 3443 <1> .done: 3444 <1> ; increment segment 3445 000055DA 8CC3 <1> mov bx, es 3446 <1> 3447 <1> .chs_done: 3448 000055DC 8EC3 <1> mov es, bx 3449 000055DE 031E[6A50] <1> add bx, word [load_sectorsizepara] 3450 <1> 3451 000055E2 5E <1> pop si 3452 000055E3 58 <1> pop ax 3453 000055E4 59 <1> pop cx 3454 000055E5 5A <1> pop dx 3455 <1> ; increment LBA sector number 3456 000055E6 40 <1> inc ax 3457 000055E7 7501 <1> jne @F 3458 000055E9 42 <1> inc dx 3459 <1> @@: 3459 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.169 3459 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.170 3459 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.171 3459 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.172 3459 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.173 3459 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.174 3459 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.175 3459 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.176 3459 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.169 3459 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.170 3459 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.171 3459 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.172 3459 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.173 3459 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.174 3459 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.175 3459 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.176 3459 ****************** <1> expansion: __@@_num = 177 3460 000055EA 89EC5D <1> lleave code 3460 ****************** <1> expansion: 186 = 0 3460 ****************** <1> expansion: lsizeparameters = 0 3460 ****************** <1> expansion: __lframe__autoret = near 3461 000055ED C3 <1> retn 3462 <1> 3463 <1> .set_ah_function_42_or_43: 3464 000055EE B442 <1> mov ah, 42h 3465 000055F0 F646FE01 <1> test byte [bp + ?is_read_bit0], 1 3466 000055F4 7502 <1> jnz @F 3467 000055F6 B443 <1> mov ah, 43h 3468 <1> @@: 3468 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.170 3468 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.171 3468 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.172 3468 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.173 3468 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.174 3468 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.175 3468 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.176 3468 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.177 3468 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.170 3468 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.171 3468 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.172 3468 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.173 3468 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.174 3468 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.175 3468 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.176 3468 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.177 3468 ****************** <1> expansion: __@@_num = 178 3469 000055F8 C3 <1> retn 3470 <1> 3471 <1> .set_ax_function_0201_or_0301: 3472 000055F9 B001 <1> mov al, 1 3473 <1> .set_ah_function_02_or_03: 3474 000055FB B402 <1> mov ah, 02h 3475 000055FD F646FE01 <1> test byte [bp + ?is_read_bit0], 1 3476 00005601 7502 <1> jnz @F 3477 00005603 B403 <1> mov ah, 03h 3478 <1> @@: 3478 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.171 3478 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.172 3478 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.173 3478 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.174 3478 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.175 3478 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.176 3478 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.177 3478 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.178 3478 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.171 3478 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.172 3478 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.173 3478 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.174 3478 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.175 3478 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.176 3478 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.177 3478 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.178 3478 ****************** <1> expansion: __@@_num = 179 3479 00005605 C3 <1> retn 3480 <1> 3481 <1> lleave ctx 3481 ****************** <1> expansion: lsizeparameters = 0 3481 ****************** <1> expansion: __lframe__autoret = near 3482 <1> 1668 %endif 1669 1670 1671 usesection lDEBUG_CODE 1671 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 1672 1673 bb: 1674 %if 0 1675 dec si 1676 mov bp, si 1677 .loop: 1678 lodsb 1679 call uppercase 1680 cmp al, '_' 1681 je .loop 1682 cmp al, "'" 1683 je .loop 1684 cmp al, '0' 1685 jb .end 1686 cmp al, 'Z' 1687 ja .end 1688 cmp al, '9' 1689 jbe .loop 1690 cmp al, 'A' 1691 jae .loop 1692 .end: 1693 call skipcomm0 1694 mov dx, 16 1695 cmp al, 13 1696 je .gotbase 1697 cmp al, ';' 1698 je .gotbase 1699 call getbyte 1700 cmp dl, 36 1701 ja error 1702 cmp al, 13 1703 je .gotbase 1704 cmp al, ';' 1705 je .gotbase 1706 call .read 1707 1708 .gotbase: 1709 call .read 1710 %endif 1711 1712 %if _BOOTLDR 1713 00005606 F606[8500]40 testopt [internalflags], nodosloaded 1713 ****************** expansion: adr = '[internalflags]' 1713 ****************** expansion: len = 15 1713 ****************** expansion: tf = '[' 1713 ****************** expansion: tb = ']' 1713 ****************** expansion: adr = 'internalflags' 1713 ****************** expansion: adr = internalflags 1714 0000560B 740F jz @F 1715 0000560D 4E dec si 1716 0000560E 4E dec si ; -> at 'B' 1717 0000560F BA[7839] mov dx, msg.boot 1718 00005612 E81D1E call isstring? ; check for "BOOT" 1719 00005615 7503E91AE5 je bootcmd 1720 0000561A 46 inc si ; skip 'B' 1721 0000561B AC lodsb ; load next 1722 @@: 1722 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.172 1722 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.173 1722 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.174 1722 ****************** expansion: @B (case-insensitive) = ..@.@@.1.175 1722 ****************** expansion: @F (case-insensitive) = ..@.@@.1.176 1722 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.177 1722 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.178 1722 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.179 1722 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.172 1722 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.173 1722 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.174 1722 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.175 1722 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.176 1722 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.177 1722 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.178 1722 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.179 1722 ****************** expansion: __@@_num = 180 1723 %endif 1724 0000561C E89102 call uppercase 1725 %if _BREAKPOINTS 1726 0000561F 3C50 cmp al, 'P' 1727 00005621 7432 je point_set 1728 00005623 3C4E cmp al, 'N' 1729 00005625 7503E9C100 je point_number 1730 0000562A 3C43 cmp al, 'C' 1731 0000562C 7503E9FA00 je point_clear 1732 00005631 3C44 cmp al, 'D' 1733 00005633 7503E94501 je point_disable 1734 00005638 3C45 cmp al, 'E' 1735 0000563A 7503E93201 je point_enable 1736 0000563F 3C54 cmp al, 'T' 1737 00005641 7503E94101 je point_toggle 1738 00005646 3C4C cmp al, 'L' 1739 00005648 7503E94401 je point_list 1740 %endif 1741 0000564D 3C55 cmp al, 'U' ; BU command ? 1742 0000564F 7503E95002 je bu_breakpoint 1743 1744 %if 0 1745 cmp al, 'S' 1746 je bs_setoption 1747 cmp al, 'U' 1748 je bc_unsetoption 1749 cmp al, 'R' 1750 je br_resetoption 1751 %endif 1752 1753 %if 0 1754 cmp al, 'D' ; BD command ? 1755 jne error ; no --> 1756 bd_fakeindos: ; BD command - fake InDOS on/off 1757 call skipcomma 1758 cmp al, 13 1759 je .get 1760 call getword 1761 call chkeol ; expect end of line here 1762 cmp dx, 1 1763 ja error 1764 je .set ; selected 1 --> 1765 .clear: ; selected 0 1766 clropt [options], fakeindos 1767 jmp short .get 1768 .set: 1769 setopt [options], fakeindos 1770 .get: 1771 mov al, '0' 1772 testopt [options], fakeindos 1773 jz .zero 1774 inc ax 1775 .zero: 1776 mov di, line_out 1777 stosb 1778 jmp putsline_crlf 1779 %endif 1780 1781 %ifn _BREAKPOINTS 1782 jmp short errorj4 1783 %else 1784 00005654 4E dec si 1785 point_set: 1786 00005655 E8541E call skipwhite 1787 00005658 E82502 call getpointindex 1788 0000565B 7323 jnc @F 1789 0000565D 7503E99910 jz error ; "ALL" is invalid 1790 00005662 31C9 xor cx, cx 1791 00005664 50 push ax 1792 .new_loop: 1793 00005665 89C8 mov ax, cx ; try this index 1794 00005667 E80702 call calcpointbit 1795 %if ((_NUM_B_BP+7)>>3) != 1 1796 0000566A 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1797 %else 1798 test byte [b_bplist.used_mask], ah 1799 %endif 1800 0000566E 740C jz .new_found ; found unused one --> 1801 1802 00005670 41 inc cx ; = next index 1803 00005671 83F910 cmp cx, _NUM_B_BP ; valid ? 1804 00005674 72EF jb .new_loop ; yes, try next --> 1805 1806 00005676 BA[313D] mov dx, msg.bb_no_new 1807 00005679 E913AD jmp prnquit 1808 1809 .new_found: 1810 0000567C 58 pop ax 1811 0000567D 51 push cx 1812 0000567E EB11 jmp @FF 1813 1814 @@: 1814 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.173 1814 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.174 1814 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.175 1814 ****************** expansion: @B (case-insensitive) = ..@.@@.1.176 1814 ****************** expansion: @F (case-insensitive) = ..@.@@.1.177 1814 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.178 1814 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.179 1814 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.180 1814 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.173 1814 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.174 1814 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.175 1814 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.176 1814 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.177 1814 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.178 1814 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.179 1814 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.180 1814 ****************** expansion: __@@_num = 181 1815 00005680 52 push dx 1816 00005681 50 push ax 1817 00005682 89D0 mov ax, dx 1818 00005684 E8EA01 call calcpointbit 1819 %if ((_NUM_B_BP+7)>>3) != 1 1820 00005687 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1821 %else 1822 test byte [b_bplist.used_mask], ah 1823 %endif 1824 0000568B 58 pop ax 1825 0000568C 7403E96A10 jnz error 1826 @@: 1826 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.174 1826 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.175 1826 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.176 1826 ****************** expansion: @B (case-insensitive) = ..@.@@.1.177 1826 ****************** expansion: @F (case-insensitive) = ..@.@@.1.178 1826 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.179 1826 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.180 1826 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.181 1826 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.174 1826 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.175 1826 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.176 1826 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.177 1826 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.178 1826 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.179 1826 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.180 1826 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.181 1826 ****************** expansion: __@@_num = 182 1827 00005691 8B1E[6C03] mov bx, word [reg_cs] 1828 00005695 E862CD call getlinearaddr 1829 00005698 7303E95E10 jc error 1830 0000569D E83300 call getcounter 1831 000056A0 87DA xchg bx, dx ; dx:bx = linear 1832 000056A2 93 xchg bx, ax ; dx:ax = linear 1833 000056A3 5B pop bx 1834 000056A4 52 push dx 1835 000056A5 50 push ax 1836 000056A6 89D8 mov ax, bx 1837 000056A8 01DB add bx, bx 1838 000056AA 01DB add bx, bx 1839 %if _PM 1840 add bx, ax 1841 %endif 1842 000056AC 8F87[0701] pop word [ b_bplist.bp + bx ] 1843 ; These two instructions need to stay in that order. 1844 ; For the non-PM version, the pop overwrites the byte 1845 ; that is then initialized to 0CCh (the breakpoint 1846 ; content byte). 1847 000056B0 8F87[0901] pop word [ b_bplist.bp + bx + 2 ] 1848 000056B4 C687[0A01]CC mov byte [ b_bplist.bp + bx + BPSIZE - 1 ], 0CCh 1849 000056B9 89C3 mov bx, ax 1850 000056BB 01DB add bx, bx 1851 000056BD 89BF[4701] mov word [ b_bplist.counter + bx ], di 1852 000056C1 E8AD01 call calcpointbit 1853 %if ((_NUM_B_BP+7)>>3) != 1 1854 000056C4 08A7[0101] or byte [b_bplist.used_mask+bx], ah 1855 000056C8 F6D4 not ah 1856 000056CA 20A7[0301] and byte [b_bplist.disabled_mask+bx], ah 1857 000056CE 20A7[0501] and byte [b_bplist.sticky_mask+bx], ah 1858 %else 1859 or byte [b_bplist.used_mask], ah 1860 not ah 1861 and byte [b_bplist.disabled_mask], ah 1862 and byte [b_bplist.sticky_mask], ah 1863 %endif 1864 000056D2 C3 retn 1865 1866 1867 ; INP: al = first character, si -> next character 1868 ; OUT: di = counter value (defaults to 8000h) 1869 ; CHG: ax, si (flags not changed) 1870 ; does not return if error encountered 1871 getcounter: 1872 000056D3 9C pushf 1873 000056D4 BF0080 mov di, 8000h 1874 000056D7 E8D31D call skipwh0 1875 000056DA E88B1D call iseol? 1876 000056DD 740A je .got_counter 1877 000056DF 52 push dx 1878 000056E0 E80D1D call getword 1879 000056E3 89D7 mov di, dx 1880 000056E5 5A pop dx 1881 000056E6 E88A1D call chkeol 1882 .got_counter: 1883 000056E9 9D popf 1884 000056EA C3 retn 1885 1886 1887 point_number: 1888 000056EB E8BE1D call skipwhite 1889 000056EE E88F01 call getpointindex 1890 000056F1 E8DFFF call getcounter 1891 000056F4 731E jnc @F 1892 000056F6 7403E90010 jnz error ; "NEW" is invalid --> 1893 1894 000056FB 31C9 xor cx, cx 1895 .all_loop: 1896 000056FD 89C8 mov ax, cx 1897 000056FF 89CA mov dx, cx 1898 00005701 E86D01 call calcpointbit 1899 %if ((_NUM_B_BP+7)>>3) != 1 1900 00005704 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1901 %else 1902 test byte [b_bplist.used_mask], ah 1903 %endif 1904 00005708 7403 jz .all_next 1905 0000570A E81500 call .setnumber 1906 .all_next: 1907 0000570D 41 inc cx 1908 0000570E 83F910 cmp cx, _NUM_B_BP 1909 00005711 72EA jb .all_loop 1910 00005713 C3 retn 1911 1912 @@: 1912 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.175 1912 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.176 1912 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.177 1912 ****************** expansion: @B (case-insensitive) = ..@.@@.1.178 1912 ****************** expansion: @F (case-insensitive) = ..@.@@.1.179 1912 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.180 1912 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.181 1912 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.182 1912 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.175 1912 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.176 1912 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.177 1912 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.178 1912 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.179 1912 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.180 1912 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.181 1912 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.182 1912 ****************** expansion: __@@_num = 183 1913 00005714 89D0 mov ax, dx 1914 00005716 E85801 call calcpointbit 1915 %if ((_NUM_B_BP+7)>>3) != 1 1916 00005719 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1917 %else 1918 test byte [b_bplist.used_mask], ah 1919 %endif 1920 0000571D 7503E9D90F jz error 1921 1922 .setnumber: 1923 00005722 89D3 mov bx, dx 1924 00005724 01DB add bx, bx 1925 00005726 89BF[4701] mov word [b_bplist.counter + bx], di 1926 0000572A C3 retn 1927 1928 1929 point_clear: 1930 0000572B BF[3057] mov di, .clear 1931 0000572E EB07 jmp point_clear_enable_disable_toggle_common 1932 1933 .clear: 1934 00005730 F7D0 not ax 1935 %if ((_NUM_B_BP+7)>>3) != 1 1936 00005732 20A7[0101] and byte [b_bplist.used_mask+bx], ah 1937 %else 1938 and byte [b_bplist.used_mask], ah 1939 %endif 1940 00005736 C3 retn 1941 1942 point_clear_enable_disable_toggle_common: 1943 00005737 E8721D call skipwhite 1944 0000573A E84301 call getpointindex 1945 0000573D 731E jnc @F 1946 0000573F 7403E9B70F jnz error ; "NEW" is invalid --> 1947 1948 00005744 E82C1D call chkeol 1949 00005747 31C9 xor cx, cx 1950 .all_loop: 1951 00005749 89C8 mov ax, cx 1952 0000574B E82301 call calcpointbit 1953 %if ((_NUM_B_BP+7)>>3) != 1 1954 0000574E 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1955 %else 1956 test byte [b_bplist.used_mask], ah 1957 %endif 1958 00005752 7402 jz .all_next 1959 00005754 FFD7 call di 1960 .all_next: 1961 00005756 41 inc cx 1962 00005757 83F910 cmp cx, _NUM_B_BP 1963 0000575A 72ED jb .all_loop 1964 0000575C C3 retn 1965 1966 @@: 1966 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.176 1966 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.177 1966 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.178 1966 ****************** expansion: @B (case-insensitive) = ..@.@@.1.179 1966 ****************** expansion: @F (case-insensitive) = ..@.@@.1.180 1966 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.181 1966 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.182 1966 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.183 1966 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.176 1966 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.177 1966 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.178 1966 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.179 1966 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.180 1966 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.181 1966 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.182 1966 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.183 1966 ****************** expansion: __@@_num = 184 1967 0000575D E8131D call chkeol 1968 00005760 89D0 mov ax, dx 1969 00005762 E80C01 call calcpointbit 1970 %if ((_NUM_B_BP+7)>>3) != 1 1971 00005765 84A7[0101] test byte [b_bplist.used_mask+bx], ah 1972 %else 1973 test byte [b_bplist.used_mask], ah 1974 %endif 1975 00005769 7503E98D0F jz error 1976 0000576E FFD7 call di 1977 00005770 C3 retn 1978 1979 1980 point_enable: 1981 00005771 BF[7657] mov di, .enable 1982 00005774 EBC1 jmp point_clear_enable_disable_toggle_common 1983 1984 .enable: 1985 00005776 F7D0 not ax 1986 %if ((_NUM_B_BP+7)>>3) != 1 1987 00005778 20A7[0301] and byte [b_bplist.disabled_mask+bx], ah 1988 %else 1989 and byte [b_bplist.disabled_mask], ah 1990 %endif 1991 0000577C C3 retn 1992 1993 1994 point_disable: 1995 0000577D BF[8257] mov di, .disable 1996 00005780 EBB5 jmp point_clear_enable_disable_toggle_common 1997 1998 .disable: 1999 %if ((_NUM_B_BP+7)>>3) != 1 2000 00005782 08A7[0301] or byte [b_bplist.disabled_mask+bx], ah 2001 %else 2002 or byte [b_bplist.disabled_mask], ah 2003 %endif 2004 00005786 C3 retn 2005 2006 2007 point_toggle: 2008 00005787 BF[8C57] mov di, .toggle 2009 0000578A EBAB jmp point_clear_enable_disable_toggle_common 2010 2011 .toggle: 2012 %if ((_NUM_B_BP+7)>>3) != 1 2013 0000578C 30A7[0301] xor byte [b_bplist.disabled_mask+bx], ah 2014 %else 2015 xor byte [b_bplist.disabled_mask], ah 2016 %endif 2017 00005790 C3 retn 2018 2019 2020 point_list: 2021 00005791 E8181D call skipwhite 2022 00005794 E8D11C call iseol? 2023 00005797 741D je .all 2024 00005799 E8E400 call getpointindex 2025 0000579C 730A jnc @F 2026 0000579E 7403E9580F jnz error ; "NEW" is invalid --> 2027 000057A3 E8CD1C call chkeol 2028 000057A6 EB0E jmp .all 2029 @@: 2029 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.177 2029 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.178 2029 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.179 2029 ****************** expansion: @B (case-insensitive) = ..@.@@.1.180 2029 ****************** expansion: @F (case-insensitive) = ..@.@@.1.181 2029 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.182 2029 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.183 2029 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.184 2029 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.177 2029 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.178 2029 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.179 2029 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.180 2029 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.181 2029 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.182 2029 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.183 2029 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.184 2029 ****************** expansion: __@@_num = 185 2030 000057A8 E8C81C call chkeol 2031 000057AB 89D3 mov bx, dx 2032 000057AD BF[A901] mov di, line_out 2033 000057B0 E85100 call .single 2034 000057B3 E9801D jmp putsline_crlf 2035 2036 .all: 2037 000057B6 31ED xor bp, bp ; high byte: any set points encountered yet, 2038 ; low byte: current line has any set points 2039 000057B8 31DB xor bx, bx 2040 000057BA BF[A901] mov di, line_out 2041 .loop: 2042 000057BD 57 push di 2043 000057BE B020 mov al, 32 2044 000057C0 B92800 mov cx, 40 2045 000057C3 F3AA rep stosb ; initialize field with blanks 2046 000057C5 30C0 xor al, al 2047 000057C7 AA stosb ; terminate it 2048 000057C8 5F pop di 2049 2050 000057C9 E83800 call .single ; fill buffer 2051 2052 000057CC 53 push bx 2053 000057CD F6C301 test bl, 1 ; an odd point ? 2054 000057D0 7505 jnz .odd ; yes --> 2055 000057D2 BF[D101] mov di, line_out + 40 ; write next point after the field 2056 000057D5 EB10 jmp .was_even 2057 .odd: 2058 000057D7 F7C5FF00 test bp, 00FFh ; any point set in this line ? 2059 000057DB 7407 jz .skip_putsline ; no --> 2060 000057DD E8561D call putsline_crlf ; put line with linebreak (and no excess blanks) 2061 000057E0 81E500FF and bp, ~00FFh ; clear flag for next line processing 2062 .skip_putsline: 2063 000057E4 BF[A901] mov di, line_out ; write next point at start of field 2064 .was_even: 2065 000057E7 5B pop bx 2066 000057E8 43 inc bx 2067 000057E9 83FB10 cmp bx, _NUM_B_BP 2068 000057EC 75CF jne .loop 2069 000057EE 81FF[A901] cmp di, line_out 2070 000057F2 7403 je @F 2071 000057F4 E83F1D call putsline_crlf 2072 @@: 2072 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.178 2072 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.179 2072 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.180 2072 ****************** expansion: @B (case-insensitive) = ..@.@@.1.181 2072 ****************** expansion: @F (case-insensitive) = ..@.@@.1.182 2072 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.183 2072 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.184 2072 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.185 2072 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.178 2072 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.179 2072 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.180 2072 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.181 2072 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.182 2072 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.183 2072 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.184 2072 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.185 2072 ****************** expansion: __@@_num = 186 2073 000057F7 F7C500FF test bp, 0FF00h 2074 000057FB 7506 jnz @F 2075 000057FD BA[CF3D] mov dx, msg.bpnone 2076 00005800 E86C1F call putsz 2077 @@: 2077 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.179 2077 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.180 2077 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.181 2077 ****************** expansion: @B (case-insensitive) = ..@.@@.1.182 2077 ****************** expansion: @F (case-insensitive) = ..@.@@.1.183 2077 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.184 2077 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.185 2077 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.186 2077 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.179 2077 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.180 2077 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.181 2077 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.182 2077 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.183 2077 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.184 2077 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.185 2077 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.186 2077 ****************** expansion: __@@_num = 187 2078 00005803 C3 retn 2079 2080 .single: 2081 00005804 BE[A93D] mov si, msg.bp 2082 00005807 E8C11C call showstring 2083 0000580A 53 push bx 2084 0000580B 89D8 mov ax, bx 2085 0000580D E8F51C call hexbyte ; store index of this point 2086 00005810 E85E00 call calcpointbit 2087 00005813 BE[B33D] mov si, msg.bpunused 2088 %if ((_NUM_B_BP+7)>>3) != 1 2089 00005816 84A7[0101] test byte [b_bplist.used_mask+bx], ah 2090 %else 2091 test byte [b_bplist.used_mask], ah 2092 %endif 2093 0000581A 7505 jnz @F ; if set --> 2094 0000581C E8AC1C call showstring 2095 0000581F EB4E jmp .unused 2096 2097 @@: 2097 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.180 2097 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.181 2097 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.182 2097 ****************** expansion: @B (case-insensitive) = ..@.@@.1.183 2097 ****************** expansion: @F (case-insensitive) = ..@.@@.1.184 2097 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.185 2097 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.186 2097 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.187 2097 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.180 2097 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.181 2097 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.182 2097 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.183 2097 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.184 2097 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.185 2097 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.186 2097 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.187 2097 ****************** expansion: __@@_num = 188 2098 00005821 81CD0101 or bp, 0101h ; flag that there was a point set in this line 2099 00005825 BE[B03D] mov si, msg.bpdisabled 2100 %if ((_NUM_B_BP+7)>>3) != 1 2101 00005828 84A7[0301] test byte [b_bplist.disabled_mask+bx], ah 2102 %else 2103 test byte [b_bplist.disabled_mask], ah 2104 %endif 2105 0000582C 7503 jnz .disabled ; disabled --> (D) 2106 0000582E BE[AD3D] mov si, msg.bpenabled 2107 .disabled: 2108 00005831 E8971C call showstring 2109 00005834 BE[BB3D] mov si, msg.bpaddress 2110 00005837 E8911C call showstring 2111 0000583A 58 pop ax 2112 0000583B 50 push ax 2113 0000583C 89C6 mov si, ax 2114 0000583E 01F6 add si, si 2115 00005840 01F6 add si, si 2116 %if _PM 2117 add si, ax 2118 %endif 2119 00005842 81C6[0701] add si, b_bplist.bp ; -> point 2120 00005846 AD lodsw 2121 00005847 50 push ax 2122 %if _PM 2123 lodsw 2124 call hexword 2125 %else 2126 00005848 AC lodsb 2127 00005849 E8B91C call hexbyte 2128 %endif 2129 0000584C 58 pop ax 2130 0000584D E8AE1C call hexword ; display (linear) address 2131 00005850 AC lodsb 2132 00005851 50 push ax 2133 00005852 BE[C13D] mov si, msg.bpcontent 2134 00005855 E8731C call showstring 2135 00005858 58 pop ax 2136 00005859 E8A91C call hexbyte ; display content 2137 0000585C BE[C43D] mov si, msg.bpcounter 2138 0000585F E8691C call showstring 2139 00005862 58 pop ax 2140 00005863 50 push ax 2141 00005864 89C3 mov bx, ax 2142 00005866 01DB add bx, bx 2143 00005868 8B87[4701] mov ax, word [b_bplist.counter + bx] 2144 0000586C E88F1C call hexword 2145 .unused: 2146 0000586F 5B pop bx ; restore counter (if displaying all) 2147 00005870 C3 retn 2148 2149 2150 ; INP: ax = 0-based index of point 2151 ; OUT: (bx-> byte to access. only if at least 9 points) 2152 ; ah = value to access 2153 ; CHG: al 2154 calcpointbit: 2155 %if ((_NUM_B_BP+7)>>3) != 1 2156 00005871 89C3 mov bx, ax 2157 %endif 2158 00005873 2407 and al, 7 2159 00005875 B401 mov ah, 1 2160 00005877 91 xchg ax, cx 2161 00005878 D2E5 shl ch, cl 2162 %if ((_NUM_B_BP+7)>>3) != 1 2163 0000587A B103 mov cl, 3 2164 0000587C D3EB shr bx, cl 2165 %else 2166 xor bx, bx 2167 %endif 2168 0000587E 91 xchg ax, cx 2169 0000587F C3 retn 2170 2171 2172 ; INP: si->, al= 2173 ; OUT: NC if a point is specified, 2174 ; dx = point index (0-based, below _NUM_B_BP) 2175 ; CY if a keyword is specified, 2176 ; ZR if "ALL" keyword specified 2177 ; NZ if "NEW" keyword specified 2178 getpointindex: 2179 00005880 4E dec si 2180 00005881 BA[293D] mov dx, msg.all 2181 00005884 E8AB1B call isstring? 2182 00005887 7418 je .is_all ; (ZR) 2183 00005889 BA[2D3D] mov dx, msg.new 2184 0000588C E8A31B call isstring? 2185 0000588F 740E je .is_new 2186 00005891 AC lodsb 2187 00005892 E85B1B call getword 2188 00005895 83FA10 cmp dx, _NUM_B_BP 2189 00005898 7203E95E0E jae error 2190 0000589D F8 clc ; (NC) 2191 0000589E C3 retn 2192 2193 .is_new: 2194 0000589F 85F6 test si, si ; (NZ) 2195 .is_all: 2196 000058A1 F9 stc ; (CY) 2197 000058A2 AC lodsb ; al = separator, si-> after 2198 000058A3 C3 retn 2199 %endif 2200 2201 2202 bu_breakpoint: 2203 000058A4 AC lodsb 2204 000058A5 E8CB1B call chkeol 2205 %if _DEBUG 2206 000058A8 BA[DD3F] mov dx, msg.bu 2207 000058AB E8C11E call putsz 2208 000058AE CC int3 2209 000058AF C3 retn 2210 %else 2211 mov dx, msg.notbu 2212 jmp putsz 2213 %endif 2214 2215 %if 0 2216 bs_setoption: 2217 call skipcomma 2218 call getdword 2219 call chkeol ; expect end of line here 2220 or word [ options ], dx 2221 or word [ options+2 ], bx 2222 retn 2223 2224 bc_unsetoption: 2225 call skipcomma 2226 call getdword 2227 call chkeol ; expect end of line here 2228 not dx 2229 not bx 2230 and word [ options ], dx 2231 and word [ options+2 ], bx 2232 retn 2233 2234 br_resetoption: 2235 call skipcomma 2236 call getdword 2237 call chkeol ; expect end of line here 2238 mov ax, dx 2239 and ax, word [ startoptions ] 2240 not dx 2241 and word [ options ], dx 2242 or word [ options ], ax 2243 mov ax, bx 2244 and ax, word [ startoptions+2 ] 2245 not bx 2246 and word [ options+2 ], bx 2247 or word [ options+2 ], ax 2248 retn 2249 %endif 2250 2251 uppercase: 2252 000058B0 3C61 cmp al, 'a' 2253 000058B2 7206 jb .ret 2254 000058B4 3C7A cmp al, 'z' 2255 000058B6 7702 ja .ret 2256 000058B8 24DF and al, TOUPPER 2257 .ret: 2258 000058BA C3 retn 2259 2260 2261 errorj4: 2262 000058BB E93D0E jmp error 2263 2264 2265 %if 0 2266 ; E command - edit memory. 2267 ee: 2268 call prephack 2269 mov bx, word [reg_ds] 2270 call getaddr ; get address into bx:(e)dx 2271 call skipcomm0 2272 cmp al, ';' 2273 je ee1 2274 cmp al, 13 2275 je ee1 ; if prompt mode 2276 2277 eeparsestr: 2278 push dx ; save destination offset 2279 call getstr ; get data bytes 2280 mov cx, di 2281 mov dx, line_out 2282 sub cx, dx ; length of byte string 2283 pop di 2284 mov ax, cx 2285 dec ax 2286 add ax, di 2287 jc short errorj4 ; if it wraps around 2288 call dohack 2289 mov si, dx 2290 mov es, bx 2291 %if _PM 2292 cmp byte [bAddr32], 0 2293 jz ee_2 2294 cpu 386 2295 mov dx, di ; dx was destroyed 2296 mov edi, edx 2297 movzx esi, si 2298 movzx ecx, cx 2299 a32 2300 cpu 8086 2301 ee_2: 2302 %endif 2303 rep movsb 2304 2305 ; Restore ds + es and undo the interrupt vector hack. 2306 ; This code is also used by the `m' command. 2307 ee0a: 2308 push ss ; restore ds 2309 pop ds 2310 push ss ; restore es 2311 pop es 2312 mov di, run2324 ; debuggee's int 23/24 values 2313 call prehak1 ; copy things back 2314 jmp unhack 2315 2316 2317 ee0: 2318 push ss 2319 pop ds 2320 push ss 2321 pop es 2322 mov ax, word [ savesp ] 2323 inc ax 2324 inc ax 2325 mov sp, ax ; restore stack 2326 mov bx, word [ e_addr +4 ] 2327 _386_PM_o32 2328 mov dx, word [ e_addr ] ; get back address 2329 2330 2331 ; Prompt mode. 2332 ee1: 2333 mov word [ errret ], ee0 2334 2335 ; Begin loop over lines. 2336 ee2: ; <--- next line 2337 mov word [ e_addr +4 ], bx 2338 _386_PM_o32 2339 mov word [ e_addr ], dx ; save address 2340 mov di, line_out 2341 mov ax, bx ; print out segment and offset 2342 call hexword 2343 mov al, ':' 2344 stosb 2345 _386_PM_o32 ; mov eax, edx 2346 mov ax, dx 2347 %if _PM 2348 call testattrhigh ; 32-bit segment ? 2349 jz .16 ; no --> 2350 call hexword_high 2351 .16: 2352 %endif 2353 call hexword 2354 2355 ; Begin loop over bytes. 2356 ee3: ; <--- next byte 2357 mov ax, 32<<8|32 ; print old value of byte 2358 stosw 2359 call dohack ; do the INT pointer hack 2360 call readmem ; read mem at BX:(E)DX 2361 call unhack ; undo the INT pointer hack 2362 call hexbyte 2363 mov al, '.' 2364 stosb 2365 call getline00 ; read input line 2366 cmp al, 13 2367 je .end 2368 cmp al, ';' 2369 je .end 2370 %if _PM 2371 xor bx, bx 2372 %endif 2373 mov dx, 1 2374 call ee_checkplusminus 2375 jne .notplusminus 2376 cmp al, '+' 2377 je ee3 2378 jmp short ee2 2379 2380 .notplusminus: 2381 2382 2383 2384 ; INP: al = character, si-> line 2385 ; bx:dx = increment to add/subtract if this is an add/sub request 2386 ; OUT: al, si unchanged 2387 ; NZ if no add/sub request 2388 ; ZR if add/sub request, 2389 ; [ e_addr ] offset adjusted 2390 ee_checkplusminus: 2391 cmp al, '-' 2392 jne .not 2393 cmp al, '+' 2394 jne .not 2395 push si 2396 push ax 2397 call skipwhite 2398 call iseol? 2399 pop ax 2400 pop si 2401 jne .not 2402 cmp al, '-' 2403 je .minus 2404 add word [ e_addr ], dx 2405 _386_PM adc word [ e_addr+2 ], bx 2406 jmp short .done 2407 2408 .minus: 2409 sub word [ e_addr ], dx 2410 _386_PM sbb word [ e_addr+2 ], bx 2411 .done: 2412 cmp al, al 2413 .not: 2414 retn 2415 2416 2417 2418 push bx 2419 push dx 2420 call putsline 2421 pop dx 2422 pop bx 2423 mov si, line_out+16 ; address of buffer for characters 2424 xor cx, cx ; number of characters so far 2425 2426 ee4: 2427 cmp byte [notatty], 0 2428 je ee9 ; if it's a TTY 2429 push si 2430 mov di, line_in+2 2431 mov si, word [bufnext] 2432 ee5: 2433 cmp si, word [bufend] 2434 jb ee6 ; if there's a character already 2435 call fillbuf 2436 mov al, 13 2437 jc ee8 ; if eof 2438 ee6: 2439 cmp byte [notatty], 13 2440 jne ee7 ; if no need to compress CR/LF 2441 cmp byte [si], 10 2442 jne ee7 ; if not a line feed 2443 inc si ; skip it 2444 inc byte [notatty] ; avoid repeating this 2445 jmp short ee5 ; next character 2446 2447 ee7: 2448 lodsb ; get the character 2449 mov byte [notatty], al 2450 ee8: 2451 mov word [bufnext], si 2452 pop si 2453 jmp short ee10 2454 2455 ee9: 2456 call getline00 2457 2458 2459 call getc ; character input without echo 2460 ee10: 2461 %if 1 2462 cmp al, 13 2463 je ee13 2464 cmp al, ';' 2465 je ee13 ; exit edit mode --> 2466 jmp short 2467 %else 2468 cmp al, 32 2469 je ee13 ; if done with this byte 2470 cmp al, 13 2471 je ee13 ; ditto 2472 cmp al, 8 2473 je ee11 ; if backspace 2474 cmp al, '-' 2475 je ee112 ; if '-' 2476 cmp cx,2 ; otherwise, it should be a hex character 2477 jae ee4 ; if we have a full byte already 2478 mov byte [si], al 2479 call getnyb 2480 jc ee4 ; if it's not a hex character 2481 inc cx 2482 lodsb ; get the character back 2483 jmp short ee12 2484 %endif 2485 ee112: 2486 call putc 2487 dec dx ; decrement offset part 2488 mov di, line_out 2489 jmp short ee15 2490 ee11: 2491 jcxz ee4 ; if nothing to backspace over 2492 dec cx 2493 dec si 2494 call fullbsout 2495 jmp short ee4 2496 ee12: 2497 call putc 2498 jmp short ee4 ; back for more 2499 2500 ; We have a byte (if CX != 0). 2501 ee13: 2502 jcxz ee14 ; if no change for this byte 2503 mov byte [si], al ; terminate the string 2504 sub si, cx ; point to beginning 2505 push cx 2506 push dx 2507 lodsb 2508 call getbyte ; convert byte to binary (DL) 2509 mov al,dl 2510 pop dx 2511 pop cx 2512 call dohack ; do the INT pointer hack 2513 call writemem ; write AL at BX:(E)DX 2514 mov di, run2324 ; debuggee's int 23/24 2515 call prehak1 ; copy things back 2516 call unhack ; undo the INT pointer hack 2517 2518 ; End the loop over bytes. 2519 ee14: 2520 inc dx ; increment offset 2521 mov di,line_out 2522 cmp al, 13 2523 je ee16 ; if done 2524 test dl, 7 2525 jz ee15 ; if new line 2526 not cx 2527 add cx, byte 4 ; compute 3 - cx 2528 mov al, 32 2529 rep stosb ; store that many spaces 2530 jmp ee3 ; back for more 2531 2532 ee15: 2533 mov ax, 10<<8| 13 ; terminate this line 2534 stosw 2535 jmp ee2 ; back for a new line 2536 2537 ee16: 2538 jmp putsline_crlf ; call putsline and return 2539 %else 2540 2541 ; E command - edit memory. 2542 ee: 2543 000058BE E8E20E call prephack 2544 000058C1 8B1E[6003] mov bx, word [reg_ds] 2545 000058C5 E86E10 call getaddr ; get address into bx:(e)dx 2546 000058C8 E8B41B call skipcomm0 2547 000058CB 3C3B cmp al, ';' 2548 000058CD 742D je ee1 2549 000058CF 3C0D cmp al, 13 2550 000058D1 7429 je ee1 ; if prompt mode 2551 2552 000058D3 52 push dx ; save destination offset 2553 000058D4 E87710 call getstr ; get data bytes 2554 000058D7 89F9 mov cx, di 2555 000058D9 BA[A901] mov dx, line_out 2556 000058DC 29D1 sub cx, dx ; length of byte string 2557 000058DE 5F pop di 2558 000058DF 89C8 mov ax, cx 2559 000058E1 48 dec ax 2560 000058E2 01F8 add ax, di 2561 000058E4 72D5 jc short errorj4 ; if it wraps around 2562 000058E6 E8E30E call dohack 2563 000058E9 89D6 mov si, dx 2564 000058EB 8EC3 mov es, bx 2565 %if _PM 2566 cmp byte [bAddr32], 0 2567 jz ee_2 2568 cpu 386 2569 mov dx, di ; dx was destroyed 2570 mov edi, edx 2571 movzx esi, si 2572 movzx ecx, cx 2573 a32 2574 cpu 8086 2575 ee_2: 2576 %endif 2577 000058ED F3A4 rep movsb 2578 2579 ; Restore ds + es and undo the interrupt vector hack. 2580 ; This code is also used by the `m' command. 2581 ee0a: 2582 000058EF 16 push ss ; restore ds 2583 000058F0 1F pop ds 2584 000058F1 16 push ss ; restore es 2585 000058F2 07 pop es 2586 000058F3 BF[6802] mov di, run2324 ; debuggee's int 23/24 values 2587 000058F6 E8C30E call prehak1 ; copy things back 2588 000058F9 E9E40E jmp unhack 2589 2590 2591 2592 ; Prompt mode. 2593 ee1: 2594 ; Begin loop over lines. 2595 ee2: ; <--- next line 2596 000058FC BF[A901] mov di, line_out 2597 000058FF 89D8 mov ax, bx ; print out segment and offset 2598 00005901 E8FA1B call hexword 2599 00005904 B03A mov al, ':' 2600 00005906 AA stosb 2601 _386_PM_o32 ; mov eax, edx 2602 00005907 89D0 mov ax, dx 2603 %if _PM 2604 call testattrhigh ; 32-bit segment ? 2605 jz .16 ; no --> 2606 call hexword_high 2607 .16: 2608 %endif 2609 00005909 E8F21B call hexword 2610 2611 ; Begin loop over bytes. 2612 ee3: ; <--- next byte 2613 0000590C B82020 mov ax, 32<<8|32 ; print old value of byte 2614 0000590F AB stosw 2615 00005910 E8B90E call dohack ; do the INT pointer hack 2616 00005913 E8C606 call readmem ; read mem at BX:(E)DX 2617 00005916 E8C70E call unhack ; undo the INT pointer hack 2618 00005919 E8E91B call hexbyte 2619 0000591C B02E mov al, '.' 2620 0000591E AA stosb 2621 0000591F C606[5702]00 mov byte [ linecounter ], 0 ; reset counter 2622 00005924 8026[8600]EF clropt [internalflags], promptwaiting 2622 ****************** expansion: adr = '[internalflags]' 2622 ****************** expansion: len = 15 2622 ****************** expansion: tf = '[' 2622 ****************** expansion: tb = ']' 2622 ****************** expansion: adr = 'internalflags' 2622 ****************** expansion: adr = internalflags 2623 00005929 53 push bx 2624 0000592A 52 push dx 2625 0000592B E80C1C call putsline 2626 0000592E 5A pop dx 2627 0000592F 5B pop bx 2628 00005930 BE[B901] mov si, line_out+16 ; address of buffer for characters 2629 00005933 31C9 xor cx, cx ; number of characters so far 2630 2631 ee4: 2632 00005935 803E[9502]00 cmp byte [notatty], 0 2633 0000593A 7433 je ee9 ; if it's a TTY 2634 0000593C 56 push si 2635 0000593D BF[0200] mov di, line_in+2 2636 00005940 8B36[9A02] mov si, word [bufnext] 2637 ee5: 2638 00005944 3B36[9C02] cmp si, word [bufend] 2639 00005948 7207 jb ee6 ; if there's a character already 2640 0000594A E8B620 call fillbuf 2641 0000594D B00D mov al, 13 2642 0000594F 7217 jc ee8 ; if eof 2643 ee6: 2644 00005951 803E[9502]0D cmp byte [notatty], 13 2645 00005956 750C jne ee7 ; if no need to compress CR/LF 2646 00005958 803C0A cmp byte [si], 10 2647 0000595B 7507 jne ee7 ; if not a line feed 2648 0000595D 46 inc si ; skip it 2649 0000595E FE06[9502] inc byte [notatty] ; avoid repeating this 2650 00005962 EBE0 jmp short ee5 ; next character 2651 2652 ee7: 2653 00005964 AC lodsb ; get the character 2654 00005965 A2[9502] mov byte [notatty], al 2655 ee8: 2656 00005968 8936[9A02] mov word [bufnext], si 2657 0000596C 5E pop si 2658 0000596D EB03 jmp short ee10 2659 2660 ee9: 2661 0000596F E8291E call getc ; character input without echo 2662 ee10: 2663 00005972 3C20 cmp al, 32 2664 00005974 7437 je ee13 2665 00005976 3C2E cmp al, '.' 2666 00005978 7433 je ee13 2667 0000597A 3C0D cmp al, 13 2668 0000597C 742F je ee13 ; all: if done with this byte --> 2669 0000597E 3C08 cmp al, 8 2670 00005980 741D je ee11 ; if backspace 2671 00005982 3C2D cmp al, '-' 2672 00005984 7410 je ee112 ; if '-' 2673 00005986 83F902 cmp cx, byte 2 ; otherwise, it should be a hex character 2674 00005989 73AA jae ee4 ; if we have a full byte already 2675 0000598B 8804 mov byte [si], al 2676 0000598D E8871A call getnyb 2677 00005990 72A3 jc ee4 ; if it's not a hex character 2678 00005992 41 inc cx 2679 00005993 AC lodsb ; get the character back 2680 00005994 EB12 jmp short ee12 2681 ee112: 2682 00005996 E8F11D call putc 2683 00005999 4A dec dx ; decrement offset part 2684 0000599A BF[A901] mov di, line_out 2685 0000599D EB4A jmp short ee15 2686 ee11: 2687 0000599F E394 jcxz ee4 ; if nothing to backspace over 2688 000059A1 49 dec cx 2689 000059A2 4E dec si 2690 000059A3 E84E20 call fullbsout 2691 000059A6 EB8D jmp short ee4 2692 ee12: 2693 000059A8 E8DF1D call putc 2694 000059AB EB88 jmp short ee4 ; back for more 2695 2696 ; We have a byte (if CX != 0). 2697 ee13: 2698 000059AD E31D jcxz ee14 ; if no change for this byte 2699 000059AF 8804 mov byte [si], al ; terminate the string 2700 000059B1 29CE sub si, cx ; point to beginning 2701 000059B3 51 push cx 2702 000059B4 52 push dx 2703 000059B5 AC lodsb 2704 000059B6 E8471A call getbyte ; convert byte to binary (DL) 2705 000059B9 88D0 mov al,dl 2706 000059BB 5A pop dx 2707 000059BC 59 pop cx 2708 000059BD E80C0E call dohack ; do the INT pointer hack 2709 000059C0 E8F105 call writemem ; write AL at BX:(E)DX 2710 000059C3 BF[6802] mov di, run2324 ; debuggee's int 23/24 2711 000059C6 E8F30D call prehak1 ; copy things back 2712 000059C9 E8140E call unhack ; undo the INT pointer hack 2713 2714 ; End the loop over bytes. 2715 ee14: 2716 000059CC 42 inc dx ; increment offset 2717 000059CD BF[A901] mov di,line_out 2718 000059D0 3C2E cmp al, '.' 2719 000059D2 741C je ee16 2720 000059D4 3C0D cmp al, 13 2721 000059D6 7418 je ee16 ; both: if done --> 2722 000059D8 F6C207 test dl, 7 2723 000059DB 740C jz ee15 ; if new line 2724 000059DD F7D1 not cx 2725 000059DF 83C104 add cx, byte 4 ; compute 3 - cx 2726 000059E2 B020 mov al, 32 2727 000059E4 F3AA rep stosb ; store that many spaces 2728 000059E6 E923FF jmp ee3 ; back for more 2729 2730 ee15: 2731 000059E9 B80D0A mov ax, 10<<8| 13 ; terminate this line 2732 000059EC AB stosw 2733 000059ED E90CFF jmp ee2 ; back for a new line 2734 2735 ee16: 2736 000059F0 E9431B jmp putsline_crlf ; call putsline and return 2737 %endif 2738 2739 ; F command - fill memory 2740 ff: 2741 000059F3 31C9 xor cx, cx ; get address range (no default length) 2742 000059F5 8B1E[6003] mov bx, word [reg_ds] 2743 000059F9 E8E10E call getrange ; get address range into bx:(e)dx 2744 _386_PM_o32 ; sub ecx, edx 2745 000059FC 29D1 sub cx, dx 2746 _386_PM_o32 ; inc ecx 2747 000059FE 41 inc cx ; (e)cx = number of bytes 2748 _386_PM_o32 ; push ecx 2749 000059FF 51 push cx ; save it 2750 _386_PM_o32 ; push edx 2751 00005A00 52 push dx ; save start address 2752 00005A01 E87B1A call skipcomm0 2753 00005A04 E8470F call getstr ; get string of bytes 2754 00005A07 89F9 mov cx, di 2755 00005A09 81E9[A901] sub cx, line_out 2756 _386_PM movzx ecx, cx 2757 _386_PM_o32 ; pop edi 2758 00005A0D 5F pop di 2759 _386_PM_o32 ; pop eax 2760 00005A0E 58 pop ax 2761 %if _PM 2762 cmp byte [bAddr32], 0 2763 jz ff16 2764 ff32: 2765 cpu 386 2766 mov es, bx 2767 cmp ecx, byte 1 2768 je .onebytesource 2769 xor edx, edx ; edx:eax = size 2770 div ecx 2771 test eax, eax 2772 jz .partial 2773 .loop: 2774 mov esi, line_out 2775 push ecx 2776 a32 rep movsb 2777 pop ecx 2778 dec eax 2779 jnz .loop 2780 .partial: 2781 mov ecx, edx ; get remainder (number of bytes in partial copy) 2782 jecxz ffret ; if no partial copy --> 2783 mov si, line_out 2784 a32 rep movsb 2785 jmp short ffret ; done --> 2786 .onebytesource: 2787 mov ecx, eax ; size 2788 mov al, byte [line_out] 2789 a32 rep stosb 2790 jmp short ffret 2791 cpu 8086 2792 ff16: 2793 %endif 2794 00005A0F 8EC3 mov es, bx 2795 00005A11 83F901 cmp cx, byte 1 2796 00005A14 7423 je .onebytesource ; a common optimization 2797 00005A16 31D2 xor dx, dx ; dx:ax = size 2798 00005A18 83F801 cmp ax, byte 1 2799 00005A1B 83D200 adc dx, byte 0 ; convert 0000:0000 to 0001:0000 (0 = 64 KiB) 2800 00005A1E F7F1 div cx ; compute number of whole repetitions 2801 00005A20 85C0 test ax, ax 2802 00005A22 740A jz .partial ; if less than one whole rep 2803 .loop: 2804 00005A24 BE[A901] mov si, line_out 2805 00005A27 51 push cx 2806 00005A28 F3A4 rep movsb 2807 00005A2A 59 pop cx 2808 00005A2B 48 dec ax 2809 00005A2C 75F6 jnz .loop ; if more to go 2810 .partial: 2811 00005A2E 89D1 mov cx, dx ; get remainder (number of bytes in partial copy) 2812 00005A30 E310 jcxz ffret ; if no partial copy --> 2813 00005A32 BE[A901] mov si, line_out 2814 00005A35 F3A4 rep movsb 2815 00005A37 EB09 jmp short ffret ; done --> 2816 .onebytesource: 2817 00005A39 89C1 mov cx, ax ; size 2818 00005A3B A0[A901] mov al, byte [line_out] 2819 00005A3E AA stosb ; cx=0 -> 64 kB 2820 00005A3F 49 dec cx 2821 00005A40 F3AA rep stosb 2822 ffret: 2823 00005A42 16 push ss ; restore es 2824 00005A43 07 pop es 2825 00005A44 C3 retn 2826 2827 2828 %if _EXPRESSIONS 2829 2830 ; H command - hex computation 2831 hh: 2832 00005A45 E8371A call skipcomm0 2833 00005A48 56 push si 2834 00005A49 50 push ax 2835 00005A4A 800E[5752]01 or byte [hhflag], 1 ; set flag so no operator means add 2836 00005A4F E81A00 call .compute 2837 00005A52 58 pop ax 2838 00005A53 5E pop si 2839 00005A54 F606[5752]04 test byte [hhflag], 4 ; any two-fold operation ? 2840 00005A59 740E jz .done ; no --> 2841 00005A5B 50 push ax 2842 00005A5C B82020 mov ax, 32<<8|32 2843 00005A5F AB stosw 2844 00005A60 58 pop ax 2845 00005A61 800E[5752]02 or byte [hhflag], 2 ; set flag so no operator means sub 2846 00005A66 E80300 call .compute 2847 .done: 2848 00005A69 E9CA1A jmp putsline_crlf 2849 2850 .compute: 2851 00005A6C E89E15 call getdword 2852 00005A6F E8011A call chkeol ; expect end of line here 2853 00005A72 E81900 call .store 2854 00005A75 85DB test bx, bx ; result negative ? 2855 00005A77 7914 jns .comp_ret ; no --> 2856 00005A79 B82028 mov ax, " (" 2857 00005A7C AB stosw 2858 00005A7D B02D mov al, "-" 2859 00005A7F AA stosb 2860 00005A80 F7DB neg bx 2861 00005A82 F7DA neg dx 2862 00005A84 83DB00 sbb bx, byte 0 ; neg bx:dx 2863 00005A87 E80400 call .store ; display "FFFFFFFF (-0001)" 2864 00005A8A B029 mov al, ")" 2865 00005A8C AA stosb 2866 .comp_ret: 2867 00005A8D C3 retn 2868 2869 .store: 2870 00005A8E 85DB test bx, bx 2871 00005A90 7405 jz .store_nothigh ; no need to display 32-bit value 2872 00005A92 89D8 mov ax, bx 2873 00005A94 E8671A call hexword 2874 .store_nothigh: 2875 00005A97 89D0 mov ax, dx 2876 00005A99 E9621A jmp hexword 2877 2878 %else 2879 ; H command - hex addition and subtraction. 2880 hh: 2881 call getdword 2882 push bx 2883 push dx 2884 call skipcomm0 2885 call getdword 2886 call chkeol ; expect end of line here 2887 pop cx 2888 pop ax ; first value in AX:CX, second in BX:DX 2889 mov si, ax 2890 mov bp, cx ; first value in SI:BP now 2891 mov ax, cx 2892 add ax, dx 2893 push ax 2894 mov ax, si 2895 adc ax, bx 2896 jz .nothigh1 ; no need to display 32-bit value 2897 call hexword 2898 .nothigh1: 2899 pop ax 2900 call hexword 2901 mov ax, 2020h 2902 stosw 2903 mov ax, bp 2904 sub ax, dx 2905 push ax 2906 mov ax, si 2907 sbb ax, bx 2908 jz .nothigh2 ; no need to display 32-bit value 2909 or si, bx 2910 jz .nothigh2 ; both were zero, non-zero result only by carry --> 2911 call hexword 2912 .nothigh2: 2913 pop ax 2914 call hexword 2915 call putsline_crlf 2916 retn 2917 %endif 2918 2919 2920 ; O command - output to I/O port. 2921 oo: 2922 00005A9C B44F mov ah, 'O' 2923 00005A9E BB[A45A] mov bx, .tab 2924 00005AA1 EB2E jmp short ii.common 2925 2926 2927 00005AA3 90 align 2 2928 .tab: 2929 00005AA4 [AA5A][B45A][BE5A] dw .byte, .word, .dword 2930 2931 2932 .byte: 2933 00005AAA E85319 call getbyte ; read value from command line 2934 00005AAD E8C319 call chkeol ; expect end of line here 2935 00005AB0 92 xchg ax, dx ; al = value 2936 00005AB1 5A pop dx ; recover port number 2937 00005AB2 EE out dx, al ; send 2938 00005AB3 C3 retn 2939 2940 .word: 2941 00005AB4 E83919 call getword 2942 00005AB7 E8B919 call chkeol 2943 00005ABA 92 xchg ax, dx ; ax = value 2944 00005ABB 5A pop dx 2945 00005ABC EF out dx, ax 2946 00005ABD C3 retn 2947 2948 .dword: 2949 cpu 386 2949 ****************** expansion: __CPU__ = [cpu 386] 2950 00005ABE E84C15 call getdword 2951 00005AC1 E8AF19 call chkeol ; expect end of line here 2952 00005AC4 53 push bx 2953 00005AC5 52 push dx 2954 00005AC6 6658 pop eax ; eax = value 2955 00005AC8 5A pop dx 2956 00005AC9 66EF out dx, eax 2957 00005ACB C3 retn 2958 cpu 8086 2958 ****************** expansion: __CPU__ = [cpu 8086] 2959 2960 2961 ; I command - input from I/O port. 2962 ii: 2963 00005ACC B449 mov ah, 'I' 2964 00005ACE BB[045B] mov bx, .tab 2965 2966 ; bx = jump table for byte, word, dword handler 2967 ; ah = letter of the command 2968 ; si, al etc. 2969 .common: 2970 00005AD1 50 push ax 2971 00005AD2 E8DBFD call uppercase 2972 00005AD5 3C57 cmp al, 'W' 2973 00005AD7 7507 jne .notw 2974 .incbx2: 2975 00005AD9 43 inc bx 2976 00005ADA 43 inc bx ; use word handler 2977 00005ADB E8CE19 call skipwhite ; skip the 'W' til next character 2978 00005ADE EB12 jmp short .sizeset 2979 2980 .notw: 2981 00005AE0 3C44 cmp al, 'D' 2982 00005AE2 750E jne .sizeset 2983 %if 1 2984 00005AE4 3264FE xor ah, byte [si-2] 2985 00005AE7 7405 jz .d ; "Id" or "Od" --> (uppercase command) 2986 00005AE9 80F420 xor ah, 32 2987 00005AEC 7504 jnz .sizeset ; no space is allowed between the command and 'D' --> 2988 ; "id" or "od" here (lowercase command) 2989 .d: 2990 %endif 2991 00005AEE 43 _386 inc bx 2991 ****************** expansion: entry = 23278 2991 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278 2991 ****************** expansion: entry = 23279 2992 00005AEF 43 _386 inc bx ; use dword handler 2992 ****************** expansion: entry = 23279 2992 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279 2992 ****************** expansion: entry = 23280 2993 00005AF0 EBE7 _386_jmps .incbx2 ; bx += 2 and skip the 'D' 2993 ****************** expansion: entry = 23280 2993 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280 2993 ****************** expansion: entry = 23281 2993 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281 2993 ****************** expansion: entry = 23282 2994 ; no 386 here. try with D as part of port number 2995 .sizeset: 2996 00005AF2 E8FB18 call getword ; get port 2997 00005AF5 59 pop cx ; restore letter if necessary 2998 00005AF6 80FD49 cmp ch, 'I' ; check whether I or O 2999 00005AF9 7504 jne .o ; O --> 3000 00005AFB E87519 call chkeol ; expect end of line here for I commands 3001 00005AFE A8 db __TEST_IMM8 ; (skip push) 3002 .o: 3003 00005AFF 52 push dx ; save port number for O commands 3004 00005B00 2EFF27 jmp near [cs:bx] 3005 3006 3007 00005B03 90 align 2 3008 .tab: 3009 00005B04 [0A5B][105B][175B] dw .byte, .word, .dword 3010 3011 .byte: 3012 00005B0A EC in al, dx 3013 00005B0B E8F719 call hexbyte 3014 00005B0E EB04 jmp short .done 3015 3016 .word: 3017 00005B10 ED in ax, dx 3018 .doneword: 3019 00005B11 E8EA19 call hexword 3020 .done: 3021 00005B14 E91F1A jmp putsline_crlf 3022 3023 .dword: 3024 cpu 386 3024 ****************** expansion: __CPU__ = [cpu 386] 3025 00005B17 66ED in eax, dx 3026 00005B19 E8D619 call hexword_high 3027 cpu 8086 3027 ****************** expansion: __CPU__ = [cpu 8086] 3028 00005B1C EBF3 jmp short .doneword 3029 3030 3031 00005B1E E9DA0B errorj5:jmp error 3032 3033 3034 %if _PM 3035 ; OUT: NC 3036 ; ZR if in protected mode 3037 ; NZ otherwise 3038 ; STT: - 3039 ; ([internalflags] & nodosloaded, [internalflags] & protectedmode set up) 3040 ispm: 3041 push ax 3042 %if protectedmode & ~0FF00h 3043 %error Internal flags re-ordered, adjust code here 3044 %endif 3045 mov al, byte [ss:internalflags+1] ; get flag byte 3046 and al, protectedmode>>8 ; separate PM flag 3047 xor al, protectedmode>>8 ; ZR if in PM (NC) 3048 pop ax 3049 retn 3050 %endif 3051 3052 3053 setpspdbg: 3054 00005B21 8CD3 mov bx, ss 3055 setpsp: 3056 %if _BOOTLDR 3057 00005B23 F606[8500]40 testopt [internalflags], nodosloaded 3057 ****************** expansion: adr = '[internalflags]' 3057 ****************** expansion: len = 15 3057 ****************** expansion: tf = '[' 3057 ****************** expansion: tb = ']' 3057 ****************** expansion: adr = 'internalflags' 3057 ****************** expansion: adr = internalflags 3058 00005B28 7515 jnz .ret ; no PSPs --> 3059 %endif 3060 00005B2A B450 mov ah, 50h 3061 %if _PM && (_NOEXTENDER || _USESDA) 3062 call ispm 3063 %if _NOEXTENDER 3064 jnz .rm 3065 cpu 286 3066 push cx 3067 push dx 3068 push bx 3069 push ax 3070 mov ax, 0006h 3071 int 31h 3072 pop ax 3073 shl cx, 12 3074 shr dx, 4 3075 or dx, cx 3076 mov bx, dx 3077 call _doscall.pm ; insure non-extended 3078 pop bx 3079 pop dx 3080 pop cx 3081 retn 3082 cpu 8086 3083 %else 3084 jz _int21 ; extended 3085 %endif 3086 %endif 3087 .rm: 3088 %if _USESDA 3089 00005B2C 833E[8C02]FF cmp word [pSDA+0], byte -1 3090 00005B31 7429 je _int21 3091 00005B33 1E push ds 3092 00005B34 56 push si 3093 00005B35 C536[8C02] lds si, [pSDA] 3094 00005B39 895C10 mov word [si+10h], bx 3095 00005B3C 5E pop si 3096 00005B3D 1F pop ds 3097 00005B3E C3 retn 3098 %else 3099 jmp short _int21 3100 %endif 3101 %if _BOOTLDR 3102 .ret: 3103 getpsp.ret: 3104 00005B3F C3 retn 3105 %endif 3106 3107 getpsp: 3108 %if _BOOTLDR 3109 00005B40 31DB xor bx, bx 3110 00005B42 F606[8500]40 testopt [internalflags], nodosloaded 3110 ****************** expansion: adr = '[internalflags]' 3110 ****************** expansion: len = 15 3110 ****************** expansion: tf = '[' 3110 ****************** expansion: tb = ']' 3110 ****************** expansion: adr = 'internalflags' 3110 ****************** expansion: adr = internalflags 3111 00005B47 75F6 jnz .ret ; no PSPs --> 3112 %endif 3113 00005B49 B451 mov ah, 51h 3114 %if _PM && (_NOEXTENDER || _USESDA) 3115 call ispm 3116 %if _NOEXTENDER 3117 jnz .rm 3118 call _doscall.pm ; insure non-extended 3119 mov ax, 2 3120 int 31h 3121 mov bx, ax 3122 retn 3123 %else 3124 jz _int21 ; extended 3125 %endif 3126 %endif 3127 .rm: 3128 %if _USESDA 3129 00005B4B 833E[8C02]FF cmp word [pSDA+0], byte -1 3130 00005B50 740A je _int21 3131 00005B52 1E push ds 3132 00005B53 C51E[8C02] lds bx, [pSDA] 3133 00005B57 8B5F10 mov bx, word [bx+10h] 3134 00005B5A 1F pop ds 3135 00005B5B C3 retn 3136 %else 3137 jmp short _int21 3138 %endif 3139 3140 %if _PM && _NOEXTENDER 3141 ; When we support non-extended DPMI, some calls to Int21 3142 ; are (extended) Int21 calls and some are (not extended) 3143 ; calls down to the real mode Int21. doscall is a macro 3144 ; that will always call the non-extended Int21. 3145 %macro doscall 0 3146 call _doscall 3147 %endmacro 3148 3149 ; Execute a non-extended DOS call 3150 _doscall: 3151 pushf 3152 call ispm 3153 jnz .rm 3154 cpu 286 3155 ; Execute a non-extended DOS call from PM 3156 popf 3157 .pm: 3158 push word [ss:pspdbg] 3159 push 21h 3160 call intcall 3161 retn 3162 cpu 8086 3163 .rm: 3164 popf 3165 jmp _int21 3166 %else 3167 ; When we don't support non-extended DPMI all Int21 calls 3168 ; are either in Real Mode or extended (all are real Int21 3169 ; instructions). 3170 %macro doscall 0 3171 int 21h 3172 %endmacro 3173 %endif 3174 3175 ; Execute real Int21 instruction. If this is in PM it might get extended. 3176 _int21: 3177 %if _BOOTLDR 3178 00005B5C 9C pushf 3179 00005B5D F606[8500]40 testopt [internalflags], nodosloaded 3179 ****************** expansion: adr = '[internalflags]' 3179 ****************** expansion: len = 15 3179 ****************** expansion: tf = '[' 3179 ****************** expansion: tb = ']' 3179 ****************** expansion: adr = 'internalflags' 3179 ****************** expansion: adr = internalflags 3180 00005B62 7504 jnz .reterr ; no Int21 --> (throw?) 3181 00005B64 9D popf 3182 %endif 3183 00005B65 CD21 int 21h 3184 00005B67 C3 retn 3185 %if _BOOTLDR 3186 .reterr: 3187 00005B68 9D popf 3188 00005B69 B80100 mov ax, 1 3189 00005B6C F9 stc 3190 00005B6D C3 retn 3191 %endif 3192 3193 3194 %if _PM 3195 intcall_return_es: 3196 lframe near 3197 lpar word, es_ds_value 3198 lpar_return 3199 lpar word, int_number 3200 lpar word, bp_value 3201 lvar 32h, 86m_call_struc 3202 lenter 3203 push es 3204 mov word [bp + ?86m_call_struc +00h], di ; edi 3205 mov word [bp + ?86m_call_struc +04h], si ; esi 3206 mov word [bp + ?86m_call_struc +10h], bx ; ebx 3207 mov word [bp + ?86m_call_struc +14h], dx ; edx 3208 mov word [bp + ?86m_call_struc +18h], cx ; ecx 3209 mov word [bp + ?86m_call_struc +1Ch], ax ; eax 3210 mov ax, word [bp + ?bp_value] 3211 mov word [bp + ?86m_call_struc +08h], ax ; bp 3212 mov al, 0 ; (preserve flags!) 3213 lahf 3214 xchg al, ah 3215 mov word [bp + ?86m_call_struc +20h], ax ; flags 3216 xor ax, ax 3217 mov word [bp + ?86m_call_struc +2Eh], ax ; sp 3218 mov word [bp + ?86m_call_struc +30h], ax ; ss 3219 mov ax, word [bp + ?es_ds_value] ; usually [pspdbg] 3220 mov word [bp + ?86m_call_struc +22h], ax ; es 3221 mov word [bp + ?86m_call_struc +24h], ax ; ds 3222 push ss 3223 pop es ; => stack 3224 lea di, [bp + ?86m_call_struc] ; -> 86-Mode call structure 3225 _386 movzx edi, di ; (previously checked b[dpmi32] here) 3226 mov bx, word [bp + ?int_number] ; int# 3227 xor cx, cx 3228 mov ax, 0300h 3229 int 31h 3230 mov ah, byte [bp + ?86m_call_struc +20h] ; flags 3231 sahf 3232 mov di, word [bp + ?86m_call_struc +00h] ; edi 3233 mov si, word [bp + ?86m_call_struc +04h] ; esi 3234 mov bx, word [bp + ?86m_call_struc +10h] ; ebx 3235 mov dx, word [bp + ?86m_call_struc +14h] ; edx 3236 mov cx, word [bp + ?86m_call_struc +18h] ; ecx 3237 mov ax, word [bp + ?86m_call_struc +1Ch] ; eax 3238 push word [bp + ?86m_call_struc +22h] ; return es value 3239 pop word [bp + ?es_ds_value] ; in the parameter 3240 pop es 3241 lleave 3242 lret 3243 3244 intcall: 3245 lframe near 3246 lpar word, es_ds_value 3247 lpar word, int_number 3248 lenter 3249 push word [bp + ?es_ds_value] 3250 push word [bp + ?int_number] 3251 push word [bp + ?frame_bp] 3252 call intcall_return_es 3253 ; (discard returned parameter ?es_ds_value, done by lleave) 3254 lleave , forcerestoresp 3255 lret 3256 3257 3258 ; Called in PM only, ds unknown. 3259 ; 3260 ; INP: - 3261 ; OUT: CY if no DOS extender available ("MS-DOS" on Int2F.168A) 3262 ; NC if DOS extender available 3263 ; CHG: - 3264 isextenderavailable: 3265 cpu 286 3266 push ds 3267 push es 3268 pusha 3269 push ss 3270 pop ds 3271 mov si, msg.msdos 3272 _386 movzx esi, si 3273 mov ax, 168Ah 3274 int 2Fh 3275 cmp al, 1 ; CY if al is zero 3276 cmc ; NC if al is zero, CY else 3277 popa 3278 pop es 3279 pop ds 3280 retn 3281 cpu 8086 3282 3283 nodosextinst: 3284 push ss 3285 pop ds 3286 mov dx, nodosext 3287 jmp putsz 3288 %endif 3289 3290 3291 ; L command - read a program, or disk sectors, from disk. 3292 ll: 3293 %if _BOOTLDR 3294 00005B6E F606[8500]40 testopt [internalflags], nodosloaded 3294 ****************** expansion: adr = '[internalflags]' 3294 ****************** expansion: len = 15 3294 ****************** expansion: tf = '[' 3294 ****************** expansion: tb = ']' 3294 ****************** expansion: adr = 'internalflags' 3294 ****************** expansion: adr = internalflags 3295 00005B73 7406 jz @F 3296 00005B75 BA[1836] mov dx, msg.nobootsupp 3297 00005B78 E9F41B jmp putsz 3298 @@: 3298 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.181 3298 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.182 3298 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.183 3298 ****************** expansion: @B (case-insensitive) = ..@.@@.1.184 3298 ****************** expansion: @F (case-insensitive) = ..@.@@.1.185 3298 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.186 3298 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.187 3298 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.188 3298 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.181 3298 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.182 3298 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.183 3298 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.184 3298 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.185 3298 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.186 3298 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.187 3298 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.188 3298 ****************** expansion: __@@_num = 189 3299 %endif 3300 3301 00005B7B E8CC0C call parselw ; parse L and W argument format 3302 00005B7E 7433 jz ll1 ; if request to read program 3303 %if _PM && _NOEXTENDER 3304 call ispm 3305 jnz .rm 3306 call isextenderavailable 3307 jc nodosextinst 3308 .rm: 3309 %endif 3310 00005B80 36F606[8400]06 testopt [ss:internalflags], newpacket| ntpacket 3310 ****************** expansion: adr = '[ss:internalflags]' 3310 ****************** expansion: len = 18 3310 ****************** expansion: tf = '[' 3310 ****************** expansion: tb = ']' 3310 ****************** expansion: adr = 'ss:internalflags' 3310 ****************** expansion: adr = ss:internalflags 3311 00005B86 7423 jz .oldint 3312 00005B88 88C2 mov dl, al ; zero-based drive 3313 00005B8A BE0060 mov si, 6000h ; read, assume "file data" 3314 %if _VDD 3315 00005B8D F606[8400]04 testopt [internalflags], ntpacket 3315 ****************** expansion: adr = '[internalflags]' 3315 ****************** expansion: len = 15 3315 ****************** expansion: tf = '[' 3315 ****************** expansion: tb = ']' 3315 ****************** expansion: adr = 'internalflags' 3315 ****************** expansion: adr = internalflags 3316 00005B92 750A jnz .vdd 3317 %endif 3318 00005B94 FEC2 inc dl ; one-based drive 3319 00005B96 B80573 mov ax, 7305h ; ds:(e)bx-> packet 3320 00005B99 F9 stc 3321 00005B9A CD21 int 21h ; use int 21h here, not doscall 3322 00005B9C EB0F jmp short .done 3323 %if _VDD 3324 .vdd: 3325 00005B9E A1[7002] mov ax, word [hVdd] 3326 00005BA1 B90500 mov cx, 5 3327 %if _PM 3328 add cl, byte [dpmi32] 3329 %endif 3330 00005BA4 C4C4580290 DispatchCall 3331 00005BA9 EB02 jmp short .done 3332 %endif 3333 .oldint: 3334 00005BAB CD25 int 25h 3335 .done: 3336 00005BAD BA[E344] mov dx, reading 3337 00005BB0 E92B08 jmp ww1 3338 3339 ; For .COM or .EXE files, we can only load at cs:100. Check that first. 3340 ll1: 3341 00005BB3 F606[E302]06 test byte [fileext], EXT_COM| EXT_EXE 3342 00005BB8 7417 jz ll4 ; if not .COM or .EXE file 3343 00005BBA 3B1E[6C03] cmp bx, word [reg_cs] 3344 00005BBE 7506 jne ll2 ; if segment is wrong 3345 00005BC0 81FA0001 cmp dx, 100h 3346 00005BC4 740B je ll4 ; if address is OK (or not given) 3347 ll2: 3348 00005BC6 E9320B jmp error ; can only load .COM or .EXE at cs:100 3349 3350 ; load (any) file (if not .EXE or .COM, load at BX:DX) 3351 ll3: 3352 00005BC9 803E[E302]00 cmp byte [fileext], 0 3353 00005BCE 7501 jne ll4 3354 00005BD0 C3 retn 3355 3356 ; open file and get length 3357 ll4: 3358 00005BD1 89DE mov si, bx ; save destination address, segment 3359 00005BD3 89D7 mov di, dx ; and offset 3360 00005BD5 B8003D mov ax, 3D00h ; open file for reading 3361 00005BD8 BA8000 mov dx, DTA 3362 doscall 3362 00005BDB CD21 <1> int 21h 3363 00005BDD 7303E98D01 jc ll16 ; error 3364 00005BE2 93 xchg ax, bx ; mov bx, ax 3365 00005BE3 B80242 mov ax, 4202h ; lseek 3366 00005BE6 31C9 xor cx, cx 3367 00005BE8 31D2 xor dx, dx 3368 00005BEA CD21 int 21h 3369 3370 ; Split off file types 3371 ; At this point: 3372 ; bx file handle 3373 ; dx:ax file length 3374 ; si:di load address (CS:100h for .EXE or .COM) 3375 3376 00005BEC F606[E302]06 test byte [fileext], EXT_COM | EXT_EXE 3377 00005BF1 7571 jnz ll13 ; if .COM or .EXE file 3378 3379 %if _PM 3380 ;--- dont load a file in protected mode, 3381 ;--- the read loop makes some segment register arithmetic 3382 call ispm 3383 jnz .rm 3384 mov dx, nopmsupp 3385 call putsz 3386 jmp ll12 3387 .rm: 3388 %endif 3389 3390 ; Load it ourselves. 3391 ; For non-.com/.exe files, we just do a read, and set BX:CX to the 3392 ; number of bytes read. 3393 3394 00005BF3 E85021 call ensuredebuggeeloaded ; make sure a debuggee is loaded 3395 00005BF6 8E06[6402] mov es, word [pspdbe] 3396 3397 ; Check the size against available space. 3398 00005BFA 56 push si 3399 00005BFB 53 push bx 3400 3401 00005BFC 263B360200 cmp si, word [es:ALASAP] 3402 00005C01 9C pushf 3403 00005C02 F7DE neg si 3404 00005C04 9D popf 3405 00005C05 7305 jae ll6 ; if loading past end of mem, allow through ffff 3406 00005C07 2603360200 add si, word [es:ALASAP] ; si = number of paragraphs available 3407 ll6: 3408 00005C0C B90400 mov cx, 4 3409 00005C0F 31DB xor bx, bx 3410 ll7: 3411 00005C11 D1E6 shl si, 1 3412 00005C13 D1D3 rcl bx, 1 3413 00005C15 E2FA loop ll7 3414 00005C17 29FE sub si, di 3415 00005C19 19CB sbb bx, cx ; bx:si = number of words left 3416 00005C1B 7208 jb ll9 ; if already we're out of space 3417 00005C1D 39D3 cmp bx, dx 3418 00005C1F 7502 jne ll8 3419 00005C21 39C6 cmp si, ax 3420 ll8: 3421 00005C23 730A jae ll10 ; if not out of space 3422 ll9: 3423 00005C25 5B pop bx ; out of space 3424 00005C26 5E pop si 3425 00005C27 BA[BA47] mov dx, doserr8 ; not enough memory 3426 00005C2A E8421B call putsz ; print string 3427 00005C2D EB2E jmp short ll12 3428 3429 ll10: 3430 00005C2F 5B pop bx 3431 00005C30 5E pop si 3432 3433 ; Store length in registers 3434 3435 ; seems a bit unwise to modify registers if a debuggee is running 3436 ; but MS DEBUG does it as well 3437 3438 %if 0 3439 mov cx,[reg_cs] 3440 cmp cx,[pspdbe] 3441 jnz .noregmodify 3442 cmp word [reg_eip], 100h 3443 jnz .noregmodify 3444 %endif 3445 00005C31 8916[4403] mov word [reg_ebx], dx 3446 00005C35 A3[4803] mov word [reg_ecx], ax 3447 .noregmodify: 3448 3449 ; Rewind the file 3450 00005C38 B80042 mov ax, 4200h ; lseek 3451 00005C3B 31C9 xor cx, cx 3452 00005C3D 31D2 xor dx, dx 3453 00005C3F CD21 int 21h 3454 3455 00005C41 BA0F00 mov dx, 0Fh 3456 00005C44 21FA and dx, di 3457 00005C46 B104 mov cl, 4 3458 00005C48 D3EF shr di, cl 3459 00005C4A 01FE add si, di ; si:dx is the address to read to 3460 3461 ; Begin loop over chunks to read 3462 ll11: 3463 00005C4C B43F mov ah, 3Fh ; read from file into DS:(E)DX 3464 00005C4E B900FE mov cx, 0FE00h ; read up to this many bytes 3465 00005C51 8EDE mov ds, si 3466 00005C53 CD21 int 21h 3467 3468 00005C55 81C6E00F add si,0fe0h ;wont work in protected-mode! 3469 00005C59 39C8 cmp ax,cx 3470 00005C5B 74EF je ll11 ;if end of file reached 3471 3472 ; Close the file and finish up. 3473 3474 ll12: 3475 00005C5D B43E mov ah, 3Eh ; close file 3476 00005C5F CD21 int 21h 3477 00005C61 16 push ss ; restore ds 3478 00005C62 1F pop ds 3479 00005C63 C3 retn ; done 3480 3481 ll13: 3482 ; file is .EXE or .COM 3483 ; Close the file 3484 %if 0 3485 push ax 3486 mov ah, 3Eh ; close file 3487 int 21h 3488 pop bx ; dx:bx is the file length 3489 3490 ; adjust .exe size by 200h (who knows why) 3491 ; cm: this is wrong. It needs to be adjusted by the header size, 3492 ; which is stored (as number of paragraphs) in the .EXE header. 3493 ; The header size is often 200h, but not always. 3494 test byte [fileext], EXT_EXE 3495 jz ll14 ; if not .EXE 3496 sub bx, 200h 3497 sbb dx, 0 3498 %else 3499 00005C64 52 push dx 3500 00005C65 50 push ax 3501 3502 00005C66 B80042 mov ax, 4200h ; lseek set 3503 00005C69 31C9 xor cx, cx 3504 00005C6B 31D2 xor dx, dx 3505 00005C6D CD21 int 21h 3506 00005C6F 16 push ss 3507 00005C70 1F pop ds 3508 3509 00005C71 89E5 mov bp, sp 3510 00005C73 B91C00 mov cx, EXEHEADER_size 3511 00005C76 29CC sub sp, cx 3512 00005C78 89E2 mov dx, sp 3513 00005C7A 89E6 mov si, sp 3514 00005C7C B43F mov ah, 3Fh 3515 00005C7E CD21 int 21h 3516 3517 00005C80 50 push ax 3518 00005C81 B43E mov ah, 3Eh ; close file 3519 00005C83 CD21 int 21h 3520 00005C85 58 pop ax 3521 3522 00005C86 39C8 cmp ax, cx 3523 00005C88 7524 jne .no_exe 3524 00005C8A 813C4D5A cmp word [si + exeSignature], "MZ" 3525 00005C8E 7406 je @F 3526 00005C90 813C5A4D cmp word [si + exeSignature], "ZM" 3527 00005C94 7518 jne .no_exe 3528 @@: 3528 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.182 3528 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.183 3528 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.184 3528 ****************** expansion: @B (case-insensitive) = ..@.@@.1.185 3528 ****************** expansion: @F (case-insensitive) = ..@.@@.1.186 3528 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.187 3528 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.188 3528 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.189 3528 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.182 3528 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.183 3528 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.184 3528 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.185 3528 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.186 3528 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.187 3528 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.188 3528 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.189 3528 ****************** expansion: __@@_num = 190 3529 3530 ; This possibly should honour the size of the image in pages 3531 ; as indicated by the header, instead of the file size. 3532 ; Oh well, for now we use the file size (on stack). 3533 00005C96 8B4408 mov ax, [si + exeHeaderSize] 3534 00005C99 31F6 xor si, si 3535 00005C9B B90400 mov cx, 4 3536 @@: 3536 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.183 3536 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.184 3536 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.185 3536 ****************** expansion: @B (case-insensitive) = ..@.@@.1.186 3536 ****************** expansion: @F (case-insensitive) = ..@.@@.1.187 3536 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.188 3536 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.189 3536 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.190 3536 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.183 3536 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.184 3536 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.185 3536 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.186 3536 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.187 3536 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.188 3536 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.189 3536 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.190 3536 ****************** expansion: __@@_num = 191 3537 00005C9E D1E0 shl ax, 1 3538 00005CA0 D1D6 rcl si, 1 3539 00005CA2 E2FA loop @B ; si:ax <<= 4 3540 3541 00005CA4 89EC mov sp, bp 3542 00005CA6 5B pop bx 3543 00005CA7 5A pop dx 3544 3545 00005CA8 29C3 sub bx, ax 3546 00005CAA 19F2 sbb dx, si ; file size minus header size 3547 3548 00005CAC EB04 jmp @F 3549 3550 .no_exe: 3551 00005CAE 89EC mov sp, bp 3552 00005CB0 5B pop bx 3553 00005CB1 5A pop dx ; full file size 3554 @@: 3554 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.184 3554 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.185 3554 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.186 3554 ****************** expansion: @B (case-insensitive) = ..@.@@.1.187 3554 ****************** expansion: @F (case-insensitive) = ..@.@@.1.188 3554 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.189 3554 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.190 3554 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.191 3554 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.184 3554 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.185 3554 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.186 3554 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.187 3554 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.188 3554 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.189 3554 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.190 3554 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.191 3554 ****************** expansion: __@@_num = 192 3555 %endif 3556 3557 ; Clear registers 3558 3559 ll14: 3560 00005CB2 53 push bx 3561 00005CB3 52 push dx 3562 ; mov word [reg_ebx], dx 3563 ; mov word [reg_ecx], bx 3564 3565 ;--- cancel current process (unless there is none) 3566 ;--- this will also put cpu back in real-mode!!! 3567 3568 00005CB4 E87F0A call terminate_attached_process 3569 00005CB7 7503E9B600 jz ll_attached_unterminated 3570 3571 00005CBC BF[4003] mov di, regs 3572 00005CBF B92000 mov cx, 16*2 ;(8 std, 6 seg, ip, fl) * 2 3573 00005CC2 31C0 xor ax, ax 3574 00005CC4 F3AB rep stosw 3575 3576 00005CC6 8F06[4403] pop word [reg_ebx] 3577 00005CCA 8F06[4803] pop word [reg_ecx] 3578 3579 ; Fix up interrupt vectors in PSP 3580 00005CCE BE0E00 mov si, CCIV ; address of original INT 23 and 24 (in PSP) 3581 00005CD1 BF[6802] mov di, run2324 3582 00005CD4 A5 movsw 3583 00005CD5 A5 movsw 3584 00005CD6 A5 movsw 3585 00005CD7 A5 movsw 3586 3587 ; Actual program loading. Use the DOS interrupt. 3588 00005CD8 B8014B mov ax, 4B01h ; load program 3589 00005CDB BA8000 mov dx, DTA ; offset of file to load 3590 00005CDE BB[2803] mov bx, execblk ; parameter block 3591 00005CE1 CD21 int 21h ; load it 3592 00005CE3 7303E98700 jc ll16 ; if error 3593 00005CE8 89E0 mov ax, sp 3594 00005CEA 2B062E00 sub ax, [SPSAV] 3595 00005CEE 3D8000 cmp ax, 80h 3596 00005CF1 7203 jb ll15 ; if in range 3597 00005CF3 B88000 mov ax, 80h 3598 ll15: 3599 00005CF6 A3[6202] mov word [spadjust], ax 3600 00005CF9 C436[3603] les si, [execblk+14] 3601 00005CFD 26AD es lodsw ; recover ax 3602 00005CFF A3[4003] mov word [reg_eax], ax 3603 00005D02 8936[5003] mov word [reg_esp], si 3604 00005D06 8C06[6803] mov word [reg_ss], es 3605 00005D0A C436[3A03] les si, [execblk+18] 3606 00005D0E 8936[7803] mov word [reg_eip], si 3607 00005D12 8C06[6C03] mov word [reg_cs], es 3608 00005D16 C606[E202]00 mov byte [bInit],0 3609 00005D1B 16 push ss 3610 00005D1C 07 pop es 3611 00005D1D E84A21 call set_efl_to_fl 3612 00005D20 E81DFE call getpsp 3613 00005D23 89D8 mov ax, bx 3614 00005D25 A3[6402] mov word [pspdbe], ax 3615 00005D28 8026[8600]7F clropt [internalflags], attachedterm 3615 ****************** expansion: adr = '[internalflags]' 3615 ****************** expansion: len = 15 3615 ****************** expansion: tf = '[' 3615 ****************** expansion: tb = ']' 3615 ****************** expansion: adr = 'internalflags' 3615 ****************** expansion: adr = internalflags 3616 00005D2D BF[6003] mov di, reg_ds 3617 00005D30 AB stosw 3618 00005D31 AF scasw 3619 00005D32 AB stosw ; reg_es 3620 00005D33 E8EBFD call setpspdbg 3621 3622 ; Finish up. Set termination address. 3623 00005D36 B82225 mov ax, 2522h ; set interrupt vector 22h 3624 00005D39 BA[1B4E] mov dx, int22 ; ds => lDEBUG_DATA_ENTRY 3625 00005D3C CD21 int 21h 3626 00005D3E 8E1E[6402] mov ds, word [pspdbe] 3627 00005D42 89160A00 mov word [TPIV], dx 3628 00005D46 8C160C00 mov word [TPIV+2], ss ; => lDEBUG_DATA_ENTRY 3629 00005D4A 16 push ss 3630 00005D4B 1F pop ds 3631 3632 ; Set up initial addresses for 'a', 'd', and 'u' commands. 3633 adusetup: 3634 00005D4C A1[7803] mov ax, word [reg_eip] 3635 00005D4F 8B0E[7A03] mov cx, word [reg_eip+2] 3636 00005D53 8B1E[6C03] mov bx, word [reg_cs] 3637 00005D57 BF[9E02] mov di, a_addr 3638 00005D5A AB stosw ; IP 3639 00005D5B 890D mov word [di], cx 3640 00005D5D AF scasw ; skip this word 3641 00005D5E 93 xchg ax, bx 3642 00005D5F AB stosw ; CS 3643 00005D60 93 xchg ax, bx ; d_addr 3644 00005D61 AB stosw ; IP 3645 00005D62 890D mov word [di], cx 3646 00005D64 AF scasw 3647 00005D65 93 xchg ax, bx 3648 00005D66 AB stosw ; CS 3649 00005D67 93 xchg ax, bx ; u_addr 3650 00005D68 AB stosw ; IP 3651 00005D69 890D mov word [di], cx 3652 00005D6B AF scasw 3653 00005D6C 93 xchg ax, bx 3654 00005D6D AB stosw ; CS 3655 00005D6E C3 retn 3656 3657 ; Error messages. Print and quit. 3658 ll16: 3659 00005D6F E94F07 jmp ww15 ; print error message 3660 3661 ll_attached_unterminated: 3662 00005D72 BA[083C] mov dx, msg.ll_unterm 3663 00005D75 E9F719 jmp putsz 3664 3665 ; M command - move from place to place. 3666 ; 3667 ; first check if there is more than 1 argument 3668 ; 0 or 1 arguments are handled by the 'M [cpu]' code 3669 mm: 3670 %if 0 3671 push si 3672 cmp al, ';' 3673 je mc 3674 cmp al, 13 3675 je mc ; no argument, CPU-related M command 3676 mov ah, byte [ si ] 3677 push ax 3678 and ax, ~(2020h) 3679 cmp ax, "NC" 3680 pop ax 3681 je mc 3682 call getdword 3683 cmp al, ';' 3684 je mc 3685 cmp al, 13 3686 je mc ; one argument, CPU-related 3687 cmp al, 32 3688 je .blank ; end of first argument 3689 cmp al, 9 3690 jne .nonblank ; not end of first argument 3691 .blank: 3692 %else 3693 00005D78 56 push si 3694 00005D79 3C3B cmp al, ';' 3695 00005D7B 7462 je mc 3696 00005D7D 3C0D cmp al, 13 3697 00005D7F 745E je mc ; no argument, CPU-related M command 3698 .nonblank: 3699 00005D81 AC lodsb ; is a non-space and non-CR ? 3700 00005D82 3C3B cmp al, ';' 3701 00005D84 7459 je mc 3702 00005D86 3C0D cmp al, 13 3703 00005D88 7455 je mc ; one argument, CPU-related 3704 00005D8A 3C20 cmp al, 32 3705 00005D8C 7404 je .blank ; end of first argument 3706 00005D8E 3C09 cmp al, 9 3707 00005D90 75EF jne .nonblank ; not end of first argument 3708 .blank: 3709 %endif 3710 00005D92 E81817 call skipwh0 ; skip blanks behind argument 3711 00005D95 3C3B cmp al, ';' 3712 00005D97 7446 je mc 3713 00005D99 3C0D cmp al, 13 3714 00005D9B 7442 je mc ; one argument, CPU-related 3715 00005D9D 5E pop si 3716 00005D9E 4E dec si 3717 00005D9F AC lodsb 3718 ; It is a normal M command (Move) 3719 00005DA0 E87A0A call parsecm ; parse arguments (DS:ESI, ES:EDI, ECX) 3720 00005DA3 51 push cx 3721 %if _PM 3722 call ispm 3723 jnz .rm 3724 mov ax, ds 3725 mov cx, es 3726 cmp ax, cx 3727 je .pmsimple ; same selector, simple --> 3728 3729 mov ax, 0006h 3730 mov bx, ds 3731 int 31h ; get selector's base 3732 jc error 3733 push cx 3734 push dx 3735 mov ax, 0006h 3736 mov bx, es 3737 int 31h ; get selector's base 3738 jc error ; throw 3739 cmp byte [ss:bAddr32], 0 3740 je .pm16 3741 [cpu 386] 3742 pop eax 3743 push cx 3744 push dx 3745 pop edx ; mov edx, cxdx 3746 add eax, esi ; add offset to source selector's base 3747 jc error 3748 add edx, edi ; add offset to destination selector's base 3749 jc error ; if overflow (> 4 GiB) --> 3750 cmp eax, edx ; compare linear source to linear destination 3751 jmp short m3 ; and decide whether to move up or down --> 3752 __CPU__ 3753 3754 .rm: 3755 mov ax, ds 3756 mov bx, ds 3757 mov dx, es 3758 mov cl, 12 3759 shr bx, cl 3760 shr dx, cl 3761 push dx 3762 mov dx, es 3763 mov cl, 4 3764 shl ax, cl 3765 shl dx, cl 3766 pop cx 3767 db __TEST_IMM16 ; (skip 2 pop instructions) 3768 3769 .pm16: 3770 pop ax 3771 pop bx 3772 add ax, si 3773 adc bx, byte 0 ; add offset to source selector's base 3774 jc error 3775 add dx, di 3776 adc cx, byte 0 ; add offset to destination selector's base 3777 jc error ; if overflow (> 4 GiB) --> 3778 cmp bx, cx ; compare linear source to linear destination 3779 jne m3 3780 cmp ax, dx 3781 jmp short m3 ; and decide whether to move up or down --> 3782 3783 .pmsimple: 3784 _386_o32 ; cmp esi, edi 3785 cmp si, di 3786 %else 3787 00005DA4 89FA mov dx, di 3788 00005DA6 8CC3 mov bx, es 3789 00005DA8 B104 mov cl, 4 3790 00005DAA D3EA shr dx, cl 3791 00005DAC 01DA add dx, bx ; upper 16 bits of destination 3792 00005DAE 89F0 mov ax, si 3793 00005DB0 D3E8 shr ax, cl 3794 00005DB2 8CDB mov bx, ds 3795 00005DB4 01D8 add ax, bx 3796 00005DB6 39D0 cmp ax, dx 3797 00005DB8 750B jne m3 ; if we know which is larger 3798 00005DBA 89F0 mov ax, si 3799 00005DBC 240F and al, 0Fh 3800 00005DBE 89FB mov bx, di 3801 00005DC0 80E30F and bl, 0Fh 3802 00005DC3 38D8 cmp al, bl 3803 %endif 3804 00005DC5 59 m3: pop cx 3805 00005DC6 9F lahf 3806 00005DC7 1E push ds 3807 00005DC8 06 push es 3808 00005DC9 16 push ss ; ds := cs 3809 00005DCA 1F pop ds 3810 00005DCB E8FE09 call dohack ; do the interrupt pointer hack 3811 00005DCE 07 pop es 3812 00005DCF 1F pop ds 3813 00005DD0 9E sahf 3814 00005DD1 7305 jae .forward ; if forward copy is OK 3815 _386_PM_o32 3816 00005DD3 01CE add si, cx 3817 _386_PM_o32 3818 00005DD5 01CF add di, cx ; point both behind data 3819 00005DD7 FD std 3820 .forward: 3821 _386_PM_a32 3822 00005DD8 F3A4 rep movsb ; do the move 3823 _386_PM_a32 3824 00005DDA A4 movsb ; one more byte (length of zero means 64 KiB. or 4 GiB..) 3825 .was32: 3826 00005DDB FC cld ; restore flag 3827 00005DDC E910FB jmp ee0a ; restore segments and undo the interrupt pointer hack 3828 3829 3830 ; Other M command: set machine type. 3831 mc: 3832 00005DDF 5E pop si 3833 00005DE0 4E dec si 3834 00005DE1 AC lodsb 3835 00005DE2 3C0D cmp al, 13 3836 00005DE4 7456 je m10 ; if just an 'm' (query machine type) 3837 00005DE6 3C3F cmp al, '?' 3838 00005DE8 7452 je m10 ; if '?' (also query) 3839 00005DEA 3C30 cmp al, '0' 3840 00005DEC 720D jb mc1 ; if not a digit 3841 00005DEE 3C36 cmp al, '6' 3842 00005DF0 7709 ja mc1 ; ditto 3843 00005DF2 2C30 sub al, '0' 3844 00005DF4 A2[9002] mov byte [machine], al ; set machine type 3845 00005DF7 A2[9202] mov byte [mach_87], al ; coprocessor type, too 3846 00005DFA C3 retn 3847 3848 00005DFB 0C20 mc1: or al, TOLOWER 3849 00005DFD 3C63 cmp al, 'c' 3850 00005DFF 7415 je mcc ; if coprocessor declaration 3851 00005E01 3C6E cmp al, 'n' 3852 00005E03 756A jne short errorj3 ; if something else 3853 00005E05 AC lodsb 3854 00005E06 0C20 or al, TOLOWER 3855 00005E08 3C63 cmp al, 'c' 3856 00005E0A 7563 jne short errorj3 ; if not 'c' after that 3857 00005E0C AC lodsb 3858 00005E0D E86316 call chkeol 3859 00005E10 C606[9102]00 mov byte [has_87], 0 ; clear coprocessor flag 3860 00005E15 C3 retn ; done 3861 3862 mcc: 3863 00005E16 E89316 call skipwhite ; get next nonblank character 3864 00005E19 8A26[9002] mov ah, byte [machine] 3865 00005E1D 80FC03 cmp ah, 3 3866 00005E20 750D jne mcc2 ; if not a 386 3867 00005E22 3C33 cmp al, '3' 3868 00005E24 7406 je mcc1 ; if declaring a 387 3869 00005E26 3C32 cmp al, '2' 3870 00005E28 7505 jne mcc2 ; if not '2' 3871 00005E2A B402 mov ah, 2 3872 mcc1: 3873 00005E2C E87D16 call skipwhite 3874 mcc2: 3875 00005E2F E84116 call chkeol 3876 00005E32 C606[9102]01 mov byte [has_87], 1 ; set coprocessor flag 3877 00005E37 8826[9202] mov byte [mach_87], ah ; set copr. type 3878 00005E3B C3 retn 3879 3880 ; Display machine type. 3881 m10: 3882 00005E3C BE[FB44] mov si, msg8088 3883 00005E3F A0[9002] mov al, byte [machine] 3884 00005E42 3C00 cmp al, 0 3885 00005E44 7407 je .88or86 ; if 8088 3886 00005E46 BE[0345] mov si, msgx86 3887 00005E49 0430 add al, '0' 3888 00005E4B 8804 mov byte [si], al 3889 .88or86: 3890 00005E4D E87B16 call showstring 3891 00005E50 BE[0745] mov si, no_copr 3892 00005E53 803E[9102]00 cmp byte [has_87], 0 3893 00005E58 740F je m12 ; if no coprocessor 3894 00005E5A BE[1C45] mov si, has_copr 3895 00005E5D A0[9202] mov al, byte [mach_87] 3896 00005E60 3A06[9002] cmp al, byte [machine] 3897 00005E64 7403 je m12 ; if has coprocessor same as processor 3898 00005E66 BE[2E45] mov si, has_287 3899 m12: 3900 00005E69 E85F16 call showstring ; show string 3901 00005E6C E9C716 jmp putsline_crlf ; call puts and quit 3902 3903 errorj3: 3904 00005E6F E98908 jmp error 3905 3906 3907 ; N command - change the name of the program being debugged. 3908 nn: 3909 00005E72 16 push ss 3910 00005E73 07 pop es 3911 %if _BOOTLDR 3912 00005E74 36F606[8500]40 testopt [ss:internalflags], nodosloaded 3912 ****************** expansion: adr = '[ss:internalflags]' 3912 ****************** expansion: len = 18 3912 ****************** expansion: tf = '[' 3912 ****************** expansion: tb = ']' 3912 ****************** expansion: adr = 'ss:internalflags' 3912 ****************** expansion: adr = ss:internalflags 3913 00005E7A 7406 jz @F 3914 00005E7C BA[1836] mov dx, msg.nobootsupp 3915 00005E7F E9ED18 jmp putsz 3916 @@: 3916 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.185 3916 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.186 3916 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.187 3916 ****************** expansion: @B (case-insensitive) = ..@.@@.1.188 3916 ****************** expansion: @F (case-insensitive) = ..@.@@.1.189 3916 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.190 3916 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.191 3916 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.192 3916 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.185 3916 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.186 3916 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.187 3916 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.188 3916 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.189 3916 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.190 3916 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.191 3916 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.192 3916 ****************** expansion: __@@_num = 193 3917 %endif 3918 00005E82 BF8000 mov di, DTA ; destination address 3919 3920 ; Copy and canonicalize file name. 3921 nn1: 3922 00005E85 E82E16 call ifsep ; check for separators blank, tab, comma, ;, = 3923 00005E88 740E je nn3 ; if end of file name 3924 00005E8A 363A06[9702] cmp al, byte [ss:swch1] 3925 00005E8F 7407 je nn3 ; if '/' (and '/' is the switch character) 3926 00005E91 E81CFA call uppercase 3927 00005E94 AA stosb 3928 00005E95 AC lodsb 3929 00005E96 EBED jmp short nn1 ; back for more 3930 3931 nn3: 3932 00005E98 16 push ss 3933 00005E99 1F pop ds 3934 00005E9A B000 mov al, 0 ; null terminate the file name string 3935 00005E9C AA stosb 3936 00005E9D 893E[2A03] mov word [execblk+2], di; save start of command tail 3937 3938 %if _DEBUG4 3939 00005EA1 52 push dx 3940 00005EA2 BA8000 mov dx, DTA 3941 00005EA5 E8BEA2 call disp_msg 3942 00005EA8 BA[B441] mov dx, crlf 3943 00005EAB E8B8A2 call disp_msg 3944 00005EAE 5A pop dx 3945 %endif 3946 ; Determine file extension 3947 00005EAF 81FF8100 cmp di, DTA+1 3948 00005EB3 7438 je nn3d ; if no file name at all 3949 00005EB5 81FF8500 cmp di, DTA+5 3950 00005EB9 7230 jb nn3c ; if no extension (name too short) 3951 00005EBB B008 mov al, EXT_HEX 3952 00005EBD 817DFB2E48 cmp word [di-5], ".H" 3953 00005EC2 7507 jne nn3a ; if not .HEX 3954 00005EC4 817DFD4558 cmp word [di-3], "EX" 3955 00005EC9 7422 je nn3d ; if .HEX 3956 nn3a: 3957 00005ECB B004 mov al, EXT_EXE 3958 00005ECD 817DFB2E45 cmp word [di-5], ".E" 3959 00005ED2 7507 jne nn3b ; if not .EXE 3960 00005ED4 817DFD5845 cmp word [di-3], "XE" 3961 00005ED9 7412 je nn3d ; if .EXE 3962 nn3b: 3963 00005EDB B002 mov al, EXT_COM 3964 00005EDD 817DFB2E43 cmp word [di-5], ".C" 3965 00005EE2 7507 jne nn3c ; if not .COM 3966 00005EE4 817DFD4F4D cmp word [di-3], "OM" 3967 00005EE9 7402 je nn3d ; if .COM 3968 nn3c: 3969 00005EEB B001 mov al, EXT_OTHER 3970 nn3d: 3971 00005EED A2[E302] mov byte [fileext], al 3972 3973 ; Finish the N command 3974 00005EF0 57 push di 3975 00005EF1 BF[A901] mov di, line_out 3976 00005EF4 4E dec si 3977 nn4: 3978 00005EF5 AC lodsb ; copy the remainder to line_out 3979 00005EF6 AA stosb 3980 00005EF7 3C0D cmp al, 13 3981 00005EF9 75FA jne nn4 3982 3983 ; Set up FCBs. 3984 00005EFB BE[A901] mov si, line_out 3985 00005EFE BF5C00 mov di, 5Ch 3986 00005F01 E83A00 call nn6 ; do first FCB 3987 00005F04 A2[4003] mov byte [reg_eax], al 3988 00005F07 BF6C00 mov di, 6Ch 3989 00005F0A E83100 call nn6 ; second FCB 3990 00005F0D A2[4103] mov byte [reg_eax+1], al 3991 3992 ; Copy command tail. 3993 00005F10 BE[A901] mov si, line_out 3994 00005F13 5F pop di 3995 00005F14 57 push di 3996 00005F15 47 inc di 3997 nn5: 3998 00005F16 AC lodsb 3999 00005F17 AA stosb 4000 00005F18 3C0D cmp al, 13 4001 00005F1A 75FA jne nn5 ; if not end of string 4002 00005F1C 57 push di 4003 00005F1D 89F9 mov cx, di 4004 00005F1F 81E90001 sub cx, DTA+128 4005 00005F23 F7D9 neg cx 4006 00005F25 31C0 xor ax, ax 4007 00005F27 F3AA rep stosb 4008 00005F29 5F pop di 4009 00005F2A 58 pop ax ; recover old DI 4010 00005F2B 97 xchg ax, di 4011 00005F2C 29F8 sub ax, di ; compute length of tail 4012 00005F2E 48 dec ax 4013 00005F2F 48 dec ax 4014 00005F30 AA stosb 4015 %if _DEBUG4 4016 00005F31 BA8000 mov dx, DTA 4017 00005F34 E82FA2 call disp_msg 4018 00005F37 BA[B441] mov dx, crlf 4019 00005F3A E829A2 call disp_msg 4020 %endif 4021 00005F3D C3 retn ; done 4022 4023 ; Subroutine to process an FCB. 4024 nn6: 4025 00005F3E AC lodsb 4026 00005F3F E82615 call iseol? 4027 00005F42 740B je nn7 ; if end 4028 00005F44 E86F15 call ifsep 4029 00005F47 74F5 je nn6 ; if separator 4030 00005F49 3A06[9602] cmp al, byte [switchar] 4031 00005F4D 741B je nn10 ; if switch character 4032 nn7: 4033 00005F4F 4E dec si 4034 00005F50 B80129 mov ax, 2901h ; parse filename 4035 doscall 4035 00005F53 CD21 <1> int 21h 4036 00005F55 50 push ax ; save AL 4037 nn8: 4038 00005F56 AC lodsb ; skip till separator 4039 00005F57 E85C15 call ifsep 4040 00005F5A 7406 je nn9 ; if separator character 4041 00005F5C 3A06[9702] cmp al, byte [swch1] 4042 00005F60 75F4 jne nn8 ; if not switchar (sort of) 4043 nn9: 4044 00005F62 4E dec si 4045 00005F63 58 pop ax ; recover AL 4046 00005F64 3C01 cmp al, 1 4047 00005F66 7501 jne nn9a ; if not 1 4048 00005F68 48 dec ax 4049 nn9a: 4050 00005F69 C3 retn 4051 4052 ; Handle a switch (differently). 4053 00005F6A AC nn10: lodsb 4054 00005F6B E8FA14 call iseol? 4055 00005F6E 74DF je nn7 ; if end of string 4056 00005F70 E84315 call ifsep 4057 00005F73 74F5 je nn10 ; if another separator 4058 00005F75 B000 mov al, 0 4059 00005F77 AA stosb 4060 00005F78 4E dec si 4061 00005F79 AC lodsb 4062 00005F7A 3C61 cmp al, 'a' 4063 00005F7C 7206 jb nn11 ; if not a lower case letter 4064 00005F7E 3C7A cmp al, 'z' 4065 00005F80 7702 ja nn11 4066 00005F82 24DF and al, TOUPPER ; convert to upper case 4067 00005F84 AA nn11: stosb 4068 00005F85 B82020 mov ax, 32<<8|32 4069 00005F88 AB stosw 4070 00005F89 AB stosw 4071 00005F8A AB stosw 4072 00005F8B AB stosw 4073 00005F8C AB stosw 4074 00005F8D 31C0 xor ax, ax 4075 00005F8F AB stosw 4076 00005F90 AB stosw 4077 00005F91 AB stosw 4078 00005F92 AB stosw 4079 00005F93 C3 retn ; return with al = 0 4080 4081 4082 ; Ensure segment in bx is writeable 4083 ; 4084 ; INP: bx = selector/segment 4085 ; OUT: NC if in 86M, bx unchanged 4086 ; NC if in PM and bx not a code segment, bx unchanged 4087 ; NC if in PM and was a code segment, 4088 ; bx = word [scratchsel], set up to mirror INP:bx selector 4089 ; CY if in PM and a failure occurred, segment not writeable 4090 ; CHG: bx 4091 ; STT: (if in PM) es = ss = debugger data selector 4092 %if _PM 4093 verifysegm: 4094 call ispm 4095 jnz .rm ; (NC) 4096 push ax 4097 _386_o32 ; push edi 4098 push di 4099 push bp 4100 mov bp, sp 4101 sub sp, 8 4102 mov di, sp 4103 _386 movzx edi, di 4104 mov ax, 000Bh ; get descriptor 4105 int 31h 4106 jc @F 4107 test byte [di+5], 8 ; code segment ? 4108 jz @F ; (NC) no --> 4109 and byte [di+5], 0F3h ; reset CODE+conforming attr 4110 or byte [di+5], 2 ; set writable 4111 mov bx, word [scratchsel] 4112 mov ax, 000Ch 4113 int 31h 4114 @@: 4115 mov sp, bp 4116 pop bp 4117 _386_o32 ; pop edi 4118 pop di 4119 pop ax 4120 .rm: 4121 retn 4122 4123 cpu 286 4124 setrmsegm: 4125 mov bx, word [ss:scratchsel] 4126 setrmaddr: ;<--- set selector in BX to segment address in DX 4127 mov cx, dx 4128 shl dx, 4 4129 shr cx, 12 4130 mov ax, 7 4131 int 31h 4132 retn 4133 __CPU__ 4134 %endif 4135 4136 ; Read a byte relative to cs:eip 4137 ; 4138 ; INP: reg_cs, reg_eip 4139 ; cx = (signed) eip adjustment 4140 ; OUT: al = byte at that address 4141 ; (e)bx = new offset (eip+adjustment) 4142 ; CHG: - 4143 getcseipbyte: 4144 00005F94 06 push es 4145 %if _PM 4146 mov bx, word [reg_cs] 4147 mov es, bx 4148 call testattrhigh 4149 jz .16 4150 cpu 386 4151 mov ebx, dword [reg_eip] 4152 push edx 4153 movsx edx, cx 4154 add ebx, edx 4155 mov al, byte [es:ebx] 4156 pop edx 4157 pop es 4158 retn 4159 cpu 8086 4160 .16: 4161 %else 4162 00005F95 8E06[6C03] mov es, word [reg_cs] 4163 %endif 4164 00005F99 8B1E[7803] mov bx, word [reg_eip] 4165 00005F9D 01CB add bx, cx 4166 00005F9F 268A07 mov al, byte [es:bx] 4167 00005FA2 07 pop es 4168 00005FA3 C3 retn 4169 4170 ; Write to a byte relative to cs:eip 4171 ; 4172 ; INP: reg_cs, reg_eip 4173 ; cx = (signed) eip adjustment 4174 ; OUT: al = byte at that address 4175 ; CHG: (e)bx 4176 setcseipbyte: 4177 00005FA4 06 push es 4178 %if _PM 4179 mov bx, word [reg_cs] 4180 call verifysegm 4181 jc .ret 4182 mov es, bx 4183 call testattrhigh 4184 jz .16 4185 cpu 386 4186 mov ebx, dword [reg_eip] 4187 push edx 4188 movsx edx, cx 4189 mov byte [es:ebx+edx],al 4190 pop edx 4191 pop es 4192 retn 4193 cpu 8086 4194 .16: 4195 %else 4196 00005FA5 8E06[6C03] mov es, word [reg_cs] 4197 %endif 4198 00005FA9 8B1E[7803] mov bx, word [reg_eip] 4199 00005FAD 01CB add bx, cx 4200 00005FAF 268807 mov byte [es:bx], al 4201 .ret: 4202 00005FB2 07 pop es 4203 00005FB3 C3 retn 4204 4205 ; Exchange byte with memory 4206 ; 4207 ; INP: bx:(e)dx-> destination byte 4208 ; al = source byte 4209 ; OUT: CY if failed due to segment not writable 4210 ; NC if successful, 4211 ; al = previous value of destination byte 4212 ; CHG: ah 4213 writemem: 4214 %if _DEBUG1 4215 00005FB4 52 push dx 4216 00005FB5 50 push ax 4217 4218 00005FB6 E81EC4 call getlinear.do_not_use_test 4219 00005FB9 720A jc @F ; already an error ? then return --> (CY) 4220 00005FBB 53 push bx 4221 00005FBC 51 push cx 4222 00005FBD BB[0801] mov bx, test_records_Writemem 4223 00005FC0 E816CE call handle_test_case_multiple_16 4224 ; check whether this should testcase the error 4225 ; CY to indicate error from this call 4226 00005FC3 59 pop cx 4227 00005FC4 5B pop bx 4228 @@: 4228 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.186 4228 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.187 4228 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.188 4228 ****************** expansion: @B (case-insensitive) = ..@.@@.1.189 4228 ****************** expansion: @F (case-insensitive) = ..@.@@.1.190 4228 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.191 4228 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.192 4228 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.193 4228 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.186 4228 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.187 4228 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.188 4228 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.189 4228 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.190 4228 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.191 4228 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.192 4228 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.193 4228 ****************** expansion: __@@_num = 194 4229 00005FC5 58 pop ax 4230 00005FC6 5A pop dx 4231 00005FC7 7301 jnc .do_not_use_test 4232 00005FC9 C3 retn ; return CY here 4233 4234 %endif 4235 .do_not_use_test: 4236 4237 00005FCA 88C4 mov ah, al 4238 %if _PM 4239 call ispm 4240 jnz .16 ; (NC from ispm) --> 4241 call verifysegm ; make bx a writeable segment 4242 jc .ret 4243 call testattrhigh 4244 jz .16 ; (NC from testattrhigh) --> 4245 cpu 386 4246 push ds 4247 mov ds, bx 4248 xchg al, byte [edx] 4249 cmp ah, byte [edx] 4250 pop ds 4251 cpu 8086 4252 jmp short .cmp 4253 .16: 4254 %endif 4255 00005FCC 1E push ds 4256 00005FCD 8EDB mov ds, bx 4257 00005FCF 53 push bx 4258 00005FD0 89D3 mov bx, dx 4259 00005FD2 8607 xchg al, byte [bx] 4260 00005FD4 3A27 cmp ah, byte [bx] 4261 00005FD6 5B pop bx 4262 00005FD7 1F pop ds 4263 .cmp: 4264 00005FD8 7401 je .ret ; (NC) 4265 00005FDA F9 stc ; Failed to compare (i.e. memory wasn't our byte after writing). 4266 ; This check catches ROM that will silently fail to write. 4267 .ret: 4268 00005FDB C3 retn 4269 4270 4271 ;--- read byte at BX:EDX into AL 4272 4273 readmem: 4274 %if _DEBUG1 4275 00005FDC 52 push dx 4276 00005FDD 50 push ax 4277 4278 00005FDE E8F6C3 call getlinear.do_not_use_test 4279 00005FE1 720A jc @F ; already an error ? then return --> (CY) 4280 00005FE3 53 push bx 4281 00005FE4 51 push cx 4282 00005FE5 BB[A800] mov bx, test_records_Readmem 4283 00005FE8 E8EECD call handle_test_case_multiple_16 4284 ; check whether this should testcase the error 4285 ; CY to indicate error from this call 4286 00005FEB 59 pop cx 4287 00005FEC 5B pop bx 4288 @@: 4288 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.187 4288 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.188 4288 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.189 4288 ****************** expansion: @B (case-insensitive) = ..@.@@.1.190 4288 ****************** expansion: @F (case-insensitive) = ..@.@@.1.191 4288 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.192 4288 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.193 4288 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.194 4288 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.187 4288 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.188 4288 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.189 4288 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.190 4288 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.191 4288 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.192 4288 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.193 4288 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.194 4288 ****************** expansion: __@@_num = 195 4289 00005FED 58 pop ax 4290 00005FEE 5A pop dx 4291 00005FEF 7304 jnc .do_not_use_test 4292 00005FF1 A0[2802] mov al, byte [test_readmem_value] 4293 ; return a most likely wrong value 4294 00005FF4 C3 retn 4295 4296 %endif 4297 .do_not_use_test: 4298 4299 %if _PM 4300 call testattrhigh 4301 jz .16 4302 push ds 4303 mov ds, bx 4304 mov al, byte [edx] 4305 pop ds 4306 retn 4307 .16: 4308 %endif 4309 00005FF5 1E push ds 4310 00005FF6 53 push bx 4311 00005FF7 8EDB mov ds, bx 4312 00005FF9 89D3 mov bx, dx 4313 00005FFB 8A07 mov al, byte [bx] 4314 00005FFD 5B pop bx 4315 00005FFE 1F pop ds 4316 00005FFF C3 retn 4317 4318 4319 ; Q command - quit. 4320 qq: 4321 %if _BOOTLDR 4322 ; Test whether we are in non-DOS mode, and were 4323 ; currently entered in protected mode. Since 4324 ; this will make the entire operation fail, 4325 ; it has to be checked for before modifying 4326 ; or releasing any of the resources. 4327 ; (Does this ever occur? No?) 4328 00006000 F606[8500]40 testopt [internalflags], nodosloaded 4328 ****************** expansion: adr = '[internalflags]' 4328 ****************** expansion: len = 15 4328 ****************** expansion: tf = '[' 4328 ****************** expansion: tb = ']' 4328 ****************** expansion: adr = 'internalflags' 4328 ****************** expansion: adr = internalflags 4329 00006005 7414 jz .notpmnodos 4330 %if _PM 4331 call ispm 4332 %if _TSR ; same message, reuse code 4333 jz .cannotpmquit 4334 %else 4335 jnz .notpmnodos_nodos 4336 mov dx, msg.cannotpmquit 4337 jmp putsz 4338 %endif 4339 %endif 4340 .notpmnodos_nodos: 4341 00006007 E8061D call bootgetmemorysize ; dx => behind usable memory 4342 0000600A A1[1451] mov ax, word [ boot_new_memsizekib ] 4343 0000600D B106 mov cl, 6 4344 0000600F D3E0 shl ax, cl 4345 00006011 39D0 cmp ax, dx ; same? 4346 00006013 7406 je @F 4347 00006015 BA[3D3A] mov dx, msg.cannotbootquit_memsizes 4348 00006018 E95417 jmp .putsz 4349 %if !_TSR || !_PM 4350 .putsz equ putsz 4351 %endif 4352 4353 @@: 4353 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.188 4353 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.189 4353 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.190 4353 ****************** expansion: @B (case-insensitive) = ..@.@@.1.191 4353 ****************** expansion: @F (case-insensitive) = ..@.@@.1.192 4353 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.193 4353 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.194 4353 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.195 4353 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.188 4353 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.189 4353 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.190 4353 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.191 4353 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.192 4353 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.193 4353 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.194 4353 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.195 4353 ****************** expansion: __@@_num = 196 4354 .notpmnodos: 4355 %endif 4356 %if _PM 4357 %if _TSR 4358 ; Test whether we are in TSR mode, and were 4359 ; currently entered in protected mode. Since 4360 ; this will make the entire operation fail, 4361 ; it has to be checked for before modifying 4362 ; or releasing any of the resources. 4363 testopt [internalflags], tsrmode 4364 jz .notpmtsr 4365 call ispm 4366 jnz .notpmtsr 4367 4368 ; This isn't yet implemented. Broken down: 4369 ; * Uses terminate_attached_process which returns in real mode. 4370 ; * Exception vectors are implicitly restored/discarded by that. 4371 ; * (RM) Interrupt vectors are currently restored in real mode. Unnecessary. 4372 ; * The VDD is un-registered in real mode. Necessary? 4373 ; * Normal 21.4C is used to return to the real parent. 4374 ; * We have to discard our DOS process resources. Any DPMI TSR resources? 4375 ; * We must again gain control in debuggee's mode after discarding them. 4376 ; * We must return to the debuggee and seemlessly discard our memory. The 4377 ; stack trick possibly/probably does not work in protected mode. 4378 4379 .cannotpmquit: 4380 mov dx, msg.cannotpmquit 4381 .putsz: 4382 jmp putsz 4383 4384 .notpmtsr: 4385 %endif 4386 4387 %if (nohook2F)&~0FF00h 4388 %fatal Internal flags re-ordered, adjust code here 4389 %endif 4390 mov ax, [internalflags] 4391 mov al, __TEST_IMM8 4392 xchg al, [dpmidisable] ; disable DPMI hook 4393 ; (SMC in section lDEBUG_DATA_ENTRY) 4394 push ax 4395 setopt [internalflags], nohook2F ; avoid a new hook while terminating 4396 %endif 4397 %if _BOOTLDR 4398 0000601B F606[8500]40 testopt [internalflags], nodosloaded 4398 ****************** expansion: adr = '[internalflags]' 4398 ****************** expansion: len = 15 4398 ****************** expansion: tf = '[' 4398 ****************** expansion: tb = ']' 4398 ****************** expansion: adr = 'internalflags' 4398 ****************** expansion: adr = internalflags 4399 00006020 750F jnz .restoreints 4400 %endif 4401 4402 ; Cancel child's process if any. 4403 ; This will drop to real mode if debuggee is in protected mode. 4404 %if _TSR 4405 00006022 F606[8600]40 testopt [internalflags], tsrmode 4405 ****************** expansion: adr = '[internalflags]' 4405 ****************** expansion: len = 15 4405 ****************** expansion: tf = '[' 4405 ****************** expansion: tb = ']' 4405 ****************** expansion: adr = 'internalflags' 4405 ****************** expansion: adr = internalflags 4406 00006027 7508 jnz .restoreints 4407 %endif 4408 4409 00006029 E80A07 call terminate_attached_process 4410 0000602C 7503E9BF00 jz qq_attached_unterminated 4411 4412 .restoreints: 4413 00006031 58 pop ax ; (discard) 4414 ; Restore interrupt vectors. 4415 00006032 E81A1C call serial_clean_up ; unhook interrupt 4416 00006035 8026[ED02]FE clropt [serial_flags], sf_init_done ; clear (in case return to cmd3) 4416 ****************** expansion: adr = '[serial_flags]' 4416 ****************** expansion: len = 14 4416 ****************** expansion: tf = '[' 4416 ****************** expansion: tb = ']' 4416 ****************** expansion: adr = 'serial_flags' 4416 ****************** expansion: adr = serial_flags 4417 4418 0000603A BF[0C03] mov di, intsave 4419 0000603D BE[F402] mov si, inttab 4420 00006040 B90700 mov cx, inttab_number 4421 .nextint: 4422 00006043 AC lodsb 4423 %if _BOOTLDR 4424 00006044 31DB xor bx, bx 4425 %endif 4426 00006046 88C3 mov bl, al 4427 00006048 46 inc si 4428 00006049 46 inc si 4429 0000604A 87F7 xchg si, di 4430 0000604C AD lodsw 4431 0000604D 89C2 mov dx, ax 4432 0000604F AD lodsw 4433 00006050 87F7 xchg si, di 4434 ; cmp dx, byte -1 4435 ; je .norestore 4436 00006052 1E push ds 4437 %if _BOOTLDR 4438 00006053 F606[8500]40 testopt [internalflags], nodosloaded 4438 ****************** expansion: adr = '[internalflags]' 4438 ****************** expansion: len = 15 4438 ****************** expansion: tf = '[' 4438 ****************** expansion: tb = ']' 4438 ****************** expansion: adr = 'internalflags' 4438 ****************** expansion: adr = internalflags 4439 00006058 7411 jz .int21_25 4440 0000605A 50 push ax 4441 0000605B 52 push dx 4442 0000605C 31C0 xor ax, ax 4443 0000605E 8ED8 mov ds, ax 4444 00006060 01DB add bx, bx 4445 00006062 01DB add bx, bx 4446 00006064 8F07 pop word [ bx ] 4447 00006066 8F4702 pop word [ bx+2 ] 4448 00006069 EB08 jmp short .popds 4449 .int21_25: 4450 %endif 4451 0000606B 8ED8 mov ds, ax 4452 0000606D 88D8 mov al, bl 4453 0000606F B425 mov ah, 25h 4454 00006071 CD21 int 21h 4455 .popds: 4456 00006073 1F pop ds 4457 .norestore: 4458 00006074 E2CD loop .nextint 4459 4460 %if _PM 4461 testopt [internalflags], hooked2F 4462 jz .noint2F 4463 push ds 4464 %if _BOOTLDR 4465 testopt [internalflags], nodosloaded 4466 jz .int21_25_2f 4467 push word [oldi2F+2] 4468 push word [oldi2F] 4469 xor ax, ax 4470 mov ds, ax 4471 pop word [2Fh*4] 4472 pop word [2Fh*4+2] 4473 jmp short .popds2f 4474 .int21_25_2f: 4475 %endif 4476 mov ax, 252Fh 4477 lds dx, [oldi2F] 4478 int 21h 4479 .popds2f: 4480 pop ds 4481 .noint2F: 4482 %endif 4483 4484 ; Release the registered VDD. 4485 %if _VDD 4486 00006076 F606[8400]04 testopt [internalflags], ntpacket 4486 ****************** expansion: adr = '[internalflags]' 4486 ****************** expansion: len = 15 4486 ****************** expansion: tf = '[' 4486 ****************** expansion: tb = ']' 4486 ****************** expansion: adr = 'internalflags' 4486 ****************** expansion: adr = internalflags 4487 0000607B 7408 jz .novdd 4488 0000607D A1[7002] mov ax, word [hVdd] 4489 00006080 C4C4580190 UnRegisterModule 4490 .novdd: 4491 %endif 4492 4493 ; Restore termination address. 4494 %if _BOOTLDR 4495 00006085 F606[8500]40 testopt [internalflags], nodosloaded 4495 ****************** expansion: adr = '[internalflags]' 4495 ****************** expansion: len = 15 4495 ****************** expansion: tf = '[' 4495 ****************** expansion: tb = ']' 4495 ****************** expansion: adr = 'internalflags' 4495 ****************** expansion: adr = internalflags 4496 0000608A 7403E97E00 jnz .bootterminate ; terminate --> 4497 %endif 4498 %if _TSR 4499 0000608F F606[8600]40 testopt [internalflags], tsrmode 4499 ****************** expansion: adr = '[internalflags]' 4499 ****************** expansion: len = 15 4499 ****************** expansion: tf = '[' 4499 ****************** expansion: tb = ']' 4499 ****************** expansion: adr = 'internalflags' 4499 ****************** expansion: adr = internalflags 4500 00006094 7449 jz .nontsrterminate 4501 00006096 31F6 xor si, si 4502 00006098 8E06[2C02] mov es, word [auxbuff_segorsel] 4503 0000609C 31FF xor di, di 4504 0000609E 31C0 xor ax, ax 4505 000060A0 B90800 mov cx, 8 4506 000060A3 F3AB rep stosw ; 10h MCB bytes 4507 000060A5 B94000 mov cx, 40h 4508 000060A8 F3A5 rep movsw ; 80h PSP bytes 4509 000060AA 8CC0 mov ax, es 4510 000060AC 40 inc ax 4511 000060AD 26A30100 mov word [es:1], ax ; fake MCB 4512 000060B1 1E push ds 4513 000060B2 8ED8 mov ds, ax 4514 000060B4 C70634001800 mov word [34h], 18h 4515 000060BA A33600 mov word [36h], ax ; insure default PHT and fix segment 4516 000060BD C70632000100 mov word [32h], 1 ; only one PHT entry (zero might crash) 4517 000060C3 C6061800FF mov byte [18h], -1 ; PHT entry is closed 4518 000060C8 C7062C000000 mov word [2Ch], 0 ; PSP clear 4519 000060CE E82E00 call .setparent ; make it self-owned, just in case 4520 000060D1 8CD3 mov bx, ss 4521 000060D3 4B dec bx 4522 000060D4 8EDB mov ds, bx ; => our (real) MCB 4523 000060D6 A30100 mov word [1], ax ; parent = fake PSP 4524 000060D9 1F pop ds 4525 000060DA E82200 call .setparent ; make the fake PSP our parent 4526 000060DD EB0C jmp short terminate ; see ya 4527 4528 .nontsrterminate: 4529 %endif 4530 000060DF BE[8002] mov si, psp22 ; restore termination address 4531 000060E2 BF0A00 mov di, TPIV 4532 000060E5 A5 movsw 4533 000060E6 A5 movsw 4534 000060E7 BF1600 mov di, 16h ; restore PSP of parent 4535 000060EA A5 movsw 4536 ; Really done. 4537 terminate: ; re-used by terminate_attached_process 4538 000060EB B8004C mov ax, 4C00h ; quit 4539 000060EE CD21 int 21h 4540 4541 4542 qq_attached_unterminated: 4543 ; Restore state: 4544 %if _PM 4545 %if (nohook2F)&~0FF00h 4546 %fatal Internal flags re-ordered, adjust code here 4547 %endif 4548 pop ax 4549 mov [dpmidisable], al ; (SMC in section lDEBUG_DATA_ENTRY) 4550 and ah, nohook2F>>8 4551 clropt [internalflags], nohook2F 4552 or [internalflags+1], ah 4553 %endif 4554 000060F0 BA[463C] mov dx, msg.qq_unterm 4555 000060F3 E97916 jmp putsz 4556 4557 4558 usesection lDEBUG_DATA_ENTRY 4558 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 4559 4560 %if _TSR 4561 qq.proceedtsrtermination: 4562 00005124 FA cli 4563 00005125 FC cld 4564 00005126 8CC8 mov ax, cs 4565 00005128 8ED8 mov ds, ax 4566 0000512A 8ED0 mov ss, ax 4567 0000512C BC[C005] mov sp, stack_end 4568 0000512F FB sti 4569 00005130 832E[5003]10 sub word [reg_esp], 2+4+((qq.tsrfreecode_size+1)&~1) 4570 00005135 8B3E[5003] mov di, word [reg_esp] ; -> stack frame 4571 00005139 8E06[6803] mov es, word [reg_ss] 4572 0000513D A1[6003] mov ax, word [reg_ds] 4573 00005140 AB stosw ; debuggee's ds 4574 00005141 A1[7803] mov ax, word [reg_eip] 4575 00005144 AB stosw 4576 00005145 A1[6C03] mov ax, word [reg_cs] 4577 00005148 AB stosw ; debuggee's cs:ip 4578 00005149 06 push es 4579 0000514A 57 push di 4580 0000514B BE[6651] mov si, qq.tsrfreecode 4581 0000514E B90500 mov cx, ((qq.tsrfreecode_size+1)>>1) 4582 00005151 F3A5 rep movsw ; code on stack 4583 00005153 8CC8 mov ax, cs 4584 00005155 48 dec ax 4585 00005156 A3[6003] mov word [reg_ds], ax ; = our MCB 4586 00005159 8F06[7803] pop word [reg_eip] 4587 0000515D 8F06[6C03] pop word [reg_cs] ; -> code on stack 4588 4589 00005161 E82BF9[F660] call entry_to_code_seg, .proceedtsrcode 4590 4591 4592 usesection lDEBUG_CODE 4592 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 4593 4594 code_insure_low_byte_not_0CCh 4595 .proceedtsrcode: 4596 %if _DEBUG 4597 ; avoid hooking interrupts again: 4598 000060F6 2EC606[D72B]EB mov byte [cs:..@patch_tsr_quit_run], __JMP_REL8 4599 ; (SMC in section lDEBUG_CODE) 4600 %endif 4601 000060FC E9C5CA jmp run ; run this 4602 4603 4604 usesection lDEBUG_DATA_ENTRY 4604 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 4605 4606 align 2 4607 ; Note that since we are in control of debuggee's TF and 4608 ; reset it every time the debugger is entered, this code 4609 ; will not be entered with TF set. It might be entered 4610 ; with IF set and an interrupt might occur; the only harm 4611 ; done then is that the interrupt handler has less stack 4612 ; available. All flags must be preserved by this code. 4613 qq.tsrfreecode: 4614 00005166 C70601000000 mov word [1], 0 ; free the MCB 4615 0000516C 1F pop ds ; restore debuggee's ds 4616 0000516D CA0A00 retf ((qq.tsrfreecode_size+1)&~1) ; jump 4617 qq.tsrfreecode_size: equ $-qq.tsrfreecode 4618 4619 4620 usesection lDEBUG_CODE 4620 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 4621 4622 qq.setparent: 4623 000060FF A31600 mov word [16h], ax 4624 00006102 C7060A00[2451] mov word [0Ah], qq.proceedtsrtermination 4625 00006108 8C160C00 mov word [0Ah+2], ss 4626 0000610C C3 retn 4627 %endif 4628 4629 %if _BOOTLDR 4630 qq.bootterminate: 4631 0000610D 812E[5003]AA00 sub word [reg_esp], 2*8+4+((qq.bootfreecode_size+1)&~1) 4632 00006113 8B3E[5003] mov di, word [reg_esp] ; -> stack frame 4633 00006117 8E06[6803] mov es, word [reg_ss] 4634 0000611B A1[6003] mov ax, word [reg_ds] 4635 0000611E AB stosw 4636 0000611F A1[6403] mov ax, word [reg_es] 4637 00006122 AB stosw 4638 00006123 A1[5803] mov ax, word [reg_esi] 4639 00006126 AB stosw 4640 00006127 A1[5C03] mov ax, word [reg_edi] 4641 0000612A AB stosw 4642 0000612B A1[4003] mov ax, word [reg_eax] 4643 0000612E AB stosw 4644 0000612F A1[4803] mov ax, word [reg_ecx] 4645 00006132 AB stosw 4646 00006133 A1[4403] mov ax, word [reg_ebx] 4647 00006136 AB stosw 4648 00006137 A1[4C03] mov ax, word [reg_edx] 4649 0000613A AB stosw 4650 0000613B A1[7803] mov ax, word [reg_eip] 4651 0000613E AB stosw 4652 0000613F A1[6C03] mov ax, word [reg_cs] 4653 00006142 AB stosw ; debuggee's cs:ip 4654 00006143 06 push es 4655 00006144 57 push di 4656 00006145 1E push ds 4657 00006146 0E push cs 4658 00006147 1F pop ds ; => lDEBUG_CODE 4659 00006148 BE[AA61] mov si, qq.bootfreecode 4660 0000614B B94B00 mov cx, ((qq.bootfreecode_size+1)>>1) 4661 0000614E F3A5 rep movsw ; code on stack 4662 00006150 1F pop ds 4663 4664 00006151 16 push ss 4665 00006152 07 pop es 4666 4667 00006153 A1[1451] mov ax, word [ boot_new_memsizekib ] 4668 00006156 B106 mov cl, 6 4669 00006158 D3E0 shl ax, cl ; ax => source of EBDA (new position) 4670 0000615A 8B16[1651] mov dx, word [ boot_old_memsizekib ] 4671 0000615E D3E2 shl dx, cl ; dx => destination of EBDA (old position) 4672 00006160 31C9 xor cx, cx ; size of EBDA to move (if none) 4673 00006162 1E push ds 4674 00006163 8ED9 mov ds, cx 4675 00006165 8B1E0E04 mov bx, word [40Eh] ; new ref in word [0:40Eh] (if none) 4676 00006169 1F pop ds 4677 0000616A 803E[1851]00 cmp byte [ boot_ebdaflag ], 0 ; any EBDA ? 4678 0000616F 7412 jz .noebda 4679 4680 00006171 1E push ds 4681 00006172 8ED8 mov ds, ax ; => EBDA 4682 00006174 31DB xor bx, bx 4683 00006176 8A1E0000 mov bl, byte [ 0 ] ; EBDA size in KiB 4684 0000617A B106 mov cl, 6 4685 0000617C D3E3 shl bx, cl ; *64, to paragraphs 4686 0000617E 89D9 mov cx, bx ; = size of EBDA to move (in paragraphs) 4687 00006180 89D3 mov bx, dx ; = new EBDA reference to put in word [0:40Eh] 4688 00006182 1F pop ds 4689 4690 .noebda: 4691 00006183 A3[4003] mov word [reg_eax], ax ; => relocated (new) EBDA position 4692 ; (in front of debugger image) 4693 00006186 891E[4403] mov word [reg_ebx], bx ; = what to put in word [0:40Eh], 4694 ; unchanged content of that word if no EBDA 4695 0000618A 890E[4803] mov word [reg_ecx], cx ; = EBDA size, 0 if no EBDA 4696 0000618E 8916[4C03] mov word [reg_edx], dx ; = original (old) EBDA position 4697 ; = original mem size (in paras) 4698 ; (behind/in debugger image) 4699 00006192 C706[6003]0000 mov word [reg_ds], 0 4700 4701 00006198 8F06[7803] pop word [reg_eip] 4702 0000619C 8F06[6C03] pop word [reg_cs] ; -> code on stack 4703 ; call dumpregs 4704 %if _DEBUG 4705 ; avoid hooking interrupts again: 4706 000061A0 2EC606[D72B]EB mov byte [cs:..@patch_tsr_quit_run], __JMP_REL8 4707 ; (SMC in section lDEBUG_CODE) 4708 %endif 4709 ; jmp cmd3 4710 000061A6 E91BCA jmp run ; run this 4711 4712 4713 000061A9 90 align 2 4714 qq.bootfreecode: 4715 000061AA 9C pushf 4716 000061AB E81800 call movp ; move EBDA back (if any) 4717 000061AE 891E0E04 mov word [40Eh], bx ; back relocate EBDA (if any) 4718 000061B2 B106 mov cl, 6 4719 000061B4 D3EA shr dx, cl ; = to KiB 4720 000061B6 89161304 mov word [413h], dx ; back relocate mem size 4721 000061BA 9D popf 4722 000061BB 1F pop ds 4723 000061BC 07 pop es 4724 000061BD 5E pop si 4725 000061BE 5F pop di 4726 000061BF 58 pop ax 4727 000061C0 59 pop cx 4728 000061C1 5B pop bx 4729 000061C2 5A pop dx 4730 000061C3 CA9600 retf ((qq.bootfreecode_size+1)&~1) 4731 4732 4733 ; Move paragraphs 4734 ; 4735 ; INP: ax:0-> source 4736 ; dx:0-> destination 4737 ; cx = number of paragraphs 4738 ; CHG: - 4739 ; Note: Doesn't work correctly on HMA; doesn't always wrap to LMA either. 4740 ; Do not provide a wrapped/HMA source or destination! 4741 movp: 4742 000061C6 51 push cx 4743 000061C7 1E push ds 4744 000061C8 56 push si 4745 000061C9 06 push es 4746 000061CA 57 push di 4747 4748 000061CB 39D0 cmp ax, dx ; source below destination ? 4749 000061CD 7232 jb .down ; yes, move from top down --> 4750 000061CF 7469 je .return ; same, no need to move --> 4751 4752 000061D1 50 push ax 4753 000061D2 52 push dx 4754 .uploop: 4755 000061D3 8ED8 mov ds, ax 4756 000061D5 8EC2 mov es, dx 4757 000061D7 31FF xor di, di 4758 000061D9 31F6 xor si, si ; -> start of segment 4759 000061DB 81E90010 sub cx, 1000h ; 64 KiB left ? 4760 000061DF 7610 jbe .uplast ; no --> 4761 000061E1 51 push cx 4762 000061E2 B90080 mov cx, 10000h /2 4763 000061E5 F3A5 rep movsw ; move 64 KiB 4764 000061E7 59 pop cx 4765 000061E8 050010 add ax, 1000h 4766 000061EB 81C20010 add dx, 1000h ; -> next segment 4767 000061EF EBE2 jmp short .uploop ; proceed for more --> 4768 .uplast: 4769 000061F1 81C10010 add cx, 1000h ; restore counter 4770 000061F5 D1E1 shl cx, 1 4771 000061F7 D1E1 shl cx, 1 4772 000061F9 D1E1 shl cx, 1 ; *8, paragraphs to words 4773 000061FB F3A5 rep movsw ; move last part 4774 000061FD 5A pop dx 4775 000061FE 58 pop ax 4776 000061FF EB39 jmp short .return 4777 4778 .down: 4779 00006201 FD std 4780 .dnloop: 4781 00006202 81E90010 sub cx, 1000h ; 64 KiB left ? 4782 00006206 761A jbe .dnlast ; no --> 4783 00006208 50 push ax 4784 00006209 52 push dx 4785 0000620A 01C8 add ax, cx 4786 0000620C 01CA add dx, cx 4787 0000620E 8ED8 mov ds, ax ; -> 64 KiB not yet moved 4788 00006210 8EC2 mov es, dx 4789 00006212 5A pop dx 4790 00006213 58 pop ax 4791 00006214 BFFEFF mov di, -2 4792 00006217 89FE mov si, di ; moved from last word down 4793 00006219 51 push cx 4794 0000621A B90080 mov cx, 10000h /2 4795 0000621D F3A5 rep movsw ; move 64 KiB 4796 0000621F 59 pop cx 4797 00006220 EBE0 jmp short .dnloop ; proceed for more --> 4798 .dnlast: 4799 00006222 81C10010 add cx, 1000h ; restore counter 4800 00006226 D1E1 shl cx, 1 4801 00006228 D1E1 shl cx, 1 4802 0000622A D1E1 shl cx, 1 ; *8, paragraphs to words 4803 0000622C 89CF mov di, cx 4804 0000622E 4F dec di 4805 0000622F D1E7 shl di, 1 ; words to offset, -> last word 4806 00006231 89FE mov si, di 4807 00006233 8ED8 mov ds, ax 4808 00006235 8EC2 mov es, dx ; first segment correct 4809 00006237 F3A5 rep movsw ; move first part 4810 00006239 FC cld 4811 .return: 4812 0000623A 5F pop di 4813 0000623B 07 pop es 4814 0000623C 5E pop si 4815 0000623D 1F pop ds 4816 0000623E 59 pop cx 4817 0000623F C3 retn 4818 qq.bootfreecode_size: equ $-qq.bootfreecode 4819 %endif 4820 4821 4822 ; S command - search for a string of bytes. 4823 sss: 4824 00006240 8B1E[6003] mov bx, word [reg_ds] ; get search range 4825 _386_PM_o32 ; xor ecx, ecx 4826 00006244 31C9 xor cx, cx 4827 _386_PM_o32 4828 00006246 890E[D402] mov word [sscounter], cx; mov dword [sscounter], ecx 4829 0000624A E89006 call getrangeX ; get address range into BX:(E)DX..BX:(E)CX 4830 0000624D E82F12 call skipcomm0 4831 _386_PM_o32 ; push edx 4832 00006250 52 push dx 4833 _386_PM_o32 ; push ecx 4834 00006251 51 push cx 4835 00006252 53 push bx 4836 00006253 50 push ax 4837 00006254 56 push si 4838 00006255 FF36[5C02] push word [throwret] 4839 00006259 FF36[5E02] push word [throwsp] 4840 0000625D C706[5C02][8462] mov word [throwret], .catch 4841 00006263 8926[5E02] mov word [throwsp], sp 4842 00006267 8B1E[6003] mov bx, word [reg_ds] ; get search range 4843 0000626B 31C9 xor cx, cx 4844 0000626D E86D06 call getrangeX ; try to get second range 4845 00006270 E80012 call chkeol ; and insure end-of-line 4846 ; successful if it returned 4847 00006273 8F06[5E02] pop word [throwsp] 4848 00006277 8F06[5C02] pop word [throwret] ; restore throw destination 4849 0000627B 83C404 add sp, byte 4 ; discard ax/si 4850 _386_PM_o32 ; mov esi, edx 4851 0000627E 89D6 mov si, dx ; bx:esi-> source string 4852 _386_PM_o32 ; sub ecx, edx 4853 00006280 29D1 sub cx, dx ; ecx = count - 1 4854 00006282 EB29 jmp short .setesedi 4855 4856 .catch: ; second getrangeX failed 4857 00006284 8B26[5E02] mov sp, word [throwsp] ; restore stack 4858 00006288 8F06[5E02] pop word [throwsp] 4859 0000628C 8F06[5C02] pop word [throwret] ; restore throw destination 4860 00006290 5E pop si 4861 00006291 58 pop ax ; restore line 4862 00006292 E8B906 call getstr ; get string of bytes 4863 00006295 81EF[A901] sub di, line_out ; di = number of bytes to look for 4864 00006299 89F9 mov cx, di 4865 0000629B 4F dec di ; minus one 4866 0000629C BE[A901] mov si, line_out 4867 0000629F 57 push di 4868 000062A0 8E06[2C02] mov es, word [auxbuff_segorsel] 4869 000062A4 31FF xor di, di 4870 000062A6 F3A4 rep movsb ; move to auxbuff 4871 _386_PM_o32 ; xor esi, esi 4872 000062A8 31F6 xor si, si 4873 000062AA 8CC3 mov bx, es ; bx:esi -> auxbuff 4874 000062AC 59 pop cx 4875 _386_PM movzx ecx, cx ; ecx = count - 1 4876 .setesedi: 4877 000062AD E8F304 call prephack ; set up for the interrupt vector hack 4878 000062B0 E81905 call dohack 4879 000062B3 8EDB mov ds, bx 4880 000062B5 07 pop es 4881 _386_PM_jmpn .386init ; 386 --> 4882 .init: 4883 000062B6 5B pop bx 4884 000062B7 5A pop dx 4885 .init_popped: 4886 000062B8 29D3 sub bx, dx ; bx = number of bytes in search range minus one 4887 000062BA 29CB sub bx, cx ; = number of possible positions of string minus 1 4888 000062BC 7303E93A04 jb error 4889 000062C1 89D7 mov di, dx 4890 000062C3 89CA mov dx, cx 4891 000062C5 89D9 mov cx, bx 4892 4893 ; ds:si-> search string, length (dx+1) 4894 ; es:di-> data to search in, (cx+1) bytes 4895 .loop: 4896 000062C7 0C01 or al, 1 ; NZ (iff cx==0, repne scasb doesn't change ZF) 4897 000062C9 56 push si 4898 000062CA AC lodsb ; first character in al 4899 000062CB F2AE repne scasb ; look for first byte 4900 000062CD 7403 je .foundbyte 4901 000062CF AE scasb ; count in cx was cnt-1 4902 000062D0 750F jne .done 4903 .foundbyte: 4904 000062D2 51 push cx 4905 000062D3 57 push di 4906 000062D4 89D1 mov cx, dx 4907 000062D6 F3A6 repe cmpsb ; compare string behind first byte 4908 000062D8 5F pop di 4909 000062D9 741E je .display ; if equal 4910 .next: 4911 000062DB 59 pop cx 4912 000062DC 5E pop si 4913 000062DD 41 inc cx ; increase first because loop decreases it 4914 000062DE E2E7 loop .loop ; go back for more 4915 000062E0 A8 db __TEST_IMM8 ; (skip pop) 4916 .done: 4917 000062E1 5E pop si ; discard 4918 .commondone: 4919 000062E2 16 push ss 4920 000062E3 1F pop ds 4921 000062E4 E8F904 call unhack 4922 000062E7 BF[A901] mov di, line_out 4923 %if _PM 4924 mov ax, word [sscounter+2] 4925 test ax, ax 4926 jnz .nohighcounter 4927 call hexword 4928 .nohighcounter: 4929 %endif 4930 000062EA A1[D402] mov ax, word [sscounter] 4931 000062ED E80E12 call hexword 4932 000062F0 E84712 call putsline 4933 000062F3 BA[144A] mov dx, msg.matches 4934 000062F6 E97614 jmp putsz 4935 4936 .display: 4937 000062F9 8CC3 mov bx, es 4938 000062FB 57 push di 4939 000062FC 1E push ds 4940 000062FD 06 push es 4941 000062FE 16 push ss 4942 000062FF 1F pop ds 4943 00006300 E8DD04 call unhack ; undo the interrupt vector hack and restore es 4944 00006303 FF06[D402] inc word [sscounter] 4945 00006307 57 push di 4946 00006308 89D8 mov ax, bx 4947 0000630A BF[A901] mov di, line_out 4948 0000630D E8EE11 call hexword ; 4 (segment) 4949 00006310 B03A mov al, ':' 4950 00006312 AA stosb ; +1=5 4951 00006313 58 pop ax 4952 00006314 48 dec ax 4953 00006315 E8E611 call hexword 4954 %if _SDUMP 4955 00006318 F9 stc 4956 00006319 11D0 adc ax, dx ; -> behind result 4957 0000631B 7635 jbe .noresult ; end of segment 4958 0000631D 89C6 mov si, ax 4959 0000631F B82020 mov ax, 32<<8|32 4960 00006322 AB stosw 4961 00006323 8D5D30 lea bx, [di+3*16] 4962 00006326 89F1 mov cx, si 4963 00006328 F7D9 neg cx 4964 0000632A 83F910 cmp cx, byte 16 4965 0000632D 7603 jbe .cxdone 4966 0000632F B91000 mov cx, 16 4967 .cxdone: 4968 00006332 1F pop ds 4969 00006333 1E push ds ; restore search's segment 4970 00006334 51 push cx 4971 .disploop: 4972 00006335 AC lodsb 4973 00006336 E80AAD call dd_store 4974 00006339 E2FA loop .disploop 4975 0000633B 59 pop cx 4976 0000633C 16 push ss 4977 0000633D 1F pop ds 4978 0000633E F7D9 neg cx 4979 00006340 83C110 add cx, byte 16 4980 00006343 7407 jz .noblanks 4981 .loopblanks: 4982 00006345 B82020 mov ax, 32<<8|32 4983 00006348 AB stosw 4984 00006349 AA stosb 4985 0000634A E2F9 loop .loopblanks 4986 .noblanks: 4987 0000634C C645E72D mov byte [di-(1+(8*3))], '-' 4988 00006350 89DF mov di, bx 4989 .noresult: 4990 %endif ; _SDUMP 4991 00006352 52 push dx 4992 00006353 E8E011 call putsline_crlf 4993 00006356 E87304 call dohack 4994 00006359 5A pop dx 4995 0000635A 07 pop es 4996 0000635B 1F pop ds 4997 0000635C 5F pop di 4998 0000635D E97BFF jmp .next 4999 5000 %if _PM 5001 .386init: 5002 cpu 386 5003 pop ebx 5004 pop edx 5005 call ispm 5006 jnz .init_popped ; not PM --> 5007 sub ebx, edx ; ebx = number of bytes in search range minus one 5008 sub ebx, ecx ; = number of possible positions of string minus 1 5009 jb error 5010 mov edi, edx 5011 mov edx, ecx 5012 mov ecx, ebx 5013 5014 ; ds:esi-> search string, length (edx+1) 5015 ; es:edi-> data to search in, (ecx+1) bytes 5016 ; Although 386+ RM still uses 64 KiB segments, it allows 5017 ; us to use the 32-bit addressing variant of the string 5018 ; instructions as long as we never access any byte above 5019 ; the 64 KiB limit. (Even if the index register contains 5020 ; 00010000h after an instruction executed.) 5021 .386loop: 5022 or al, 1 ; NZ (iff cx==0, repne scasb doesn't change ZF) 5023 push esi 5024 a32 lodsb ; first character in al 5025 a32 repne scasb ; look for first byte 5026 je .386foundbyte 5027 a32 scasb ; count in ecx was cnt-1 5028 jne .386done 5029 .386foundbyte: 5030 push ecx 5031 push edi 5032 mov ecx, edx 5033 a32 repe cmpsb ; compare string behind first byte 5034 pop edi 5035 je .386display ; if equal 5036 .386next: 5037 pop ecx 5038 pop esi 5039 inc ecx ; increase first because loop decreases it 5040 loop .386loop, ecx ; go back for more 5041 db __TEST_IMM16 ; (skip pop) 5042 .386done: 5043 pop esi ; discard 5044 jmp .commondone 5045 5046 .386display: 5047 mov bx, es 5048 push edi 5049 push ds 5050 push es 5051 call unhack ; undo the interrupt vector hack and restore es 5052 inc dword [sscounter] 5053 push edi 5054 mov ax, bx 5055 mov di, line_out 5056 call hexword ; 4 (segment) 5057 mov al, ':' 5058 stosb ; +1=5 5059 pop eax 5060 dec eax 5061 call testattrhigh 5062 jz .noa32 5063 call hexword_high 5064 .noa32: 5065 call hexword 5066 %if _SDUMP 5067 stc 5068 adc eax, edx ; -> behind result 5069 jbe .386noresult ; end of segment 5070 mov esi, eax 5071 mov ax, 32<<8|32 5072 stosw 5073 lea bx, [di+3*16] 5074 mov ecx, esi 5075 neg ecx 5076 cmp ecx, byte 16 5077 jbe .386cxdone 5078 mov cx, 16 5079 .386cxdone: 5080 pop ds 5081 push ds ; restore search's segment 5082 push cx 5083 .386disploop: 5084 a32 lodsb 5085 call dd_store 5086 loop .386disploop 5087 pop cx 5088 push ss 5089 pop ds 5090 neg cx 5091 add cx, byte 16 5092 jz .386noblanks 5093 .386loopblanks: 5094 mov ax, 32<<8|32 5095 stosw 5096 stosb 5097 loop .386loopblanks 5098 .386noblanks: 5099 mov byte [di-(1+(8*3))], '-' 5100 mov di, bx 5101 .386noresult: 5102 %endif ; _SDUMP 5103 push dx 5104 call putsline_crlf 5105 call dohack 5106 pop dx 5107 pop es 5108 pop ds 5109 pop edi 5110 jmp .386next 5111 cpu 8086 5112 %endif ; _PM 5113 5114 5115 %if 0 5116 getdebuggeebyte: 5117 push bp 5118 mov bp, sp 5119 sub sp, byte 4 5120 push bx 5121 push cx 5122 %define _dedata -4 5123 %define _bp 0 5124 %define _ip 2 5125 %define _adroffset 4 5126 %define _adrsegment 8 5127 test byte [], memorydump 5128 jz .realmemory 5129 5130 jmp short .return 5131 .realmemory32: 5132 .realmemory: 5133 mov ax, word [ bp + _adrsegment ] 5134 mov bx, word [ bp + _adroffset ] 5135 push ds 5136 mov ds, ax 5137 push word [ bx ] 5138 pop word [ bp + _dedata ] 5139 push word [ bx +2 ] 5140 pop word [ bp + _dedata +2 ] 5141 pop ds 5142 ; test ax, ax 5143 ; jnz .return 5144 mov dx, ax 5145 mov cl, 4 5146 shl ax, cl 5147 mov cl, 12 5148 shr dx, cl 5149 add ax, bx 5150 adc dx, byte 0 5151 jnz .return 5152 sub ax, 23h*4 5153 jb .return 5154 cmp ax, 2*4 5155 jae .return 5156 5157 push ds 5158 xor bx, bx 5159 mov ds, bx 5160 push si 5161 push di 5162 mov si, 22h*4 5163 mov di, hackints.dummy22 5164 movsw 5165 movsw 5166 mov bl, 8 5167 add si, bx 5168 add di, bx 5169 movsw 5170 movsw 5171 5172 mov cl, byte [ bx - 4 + hackints2324 ] 5173 mov byte [ bp + _dedata ], cl 5174 .return: 5175 pop cx 5176 pop bx 5177 pop ax 5178 pop dx 5179 pop bp 5180 retn 6 5181 5182 5183 ; Interrupt hack table 5184 ; 5185 ; This contains the Int23 and Int24 handler we want to show 5186 ; the user. As we'll retrieve a dword per access, 5187 hackints: 5188 .dummy22: dd 0 5189 .23: dd 0 5190 .24: dd 0 5191 .dummy25: dd 0 5192 %endif 5193 5194 5195 lockdrive: 5196 00006360 50 push ax 5197 00006361 53 push bx 5198 00006362 51 push cx 5199 00006363 52 push dx 5200 00006364 88C3 mov bl, al 5201 00006366 FEC3 inc bl 5202 00006368 B700 mov bh, 0 5203 0000636A B94A08 mov cx, 084Ah 5204 0000636D BA0100 mov dx, 0001h 5205 00006370 B80D44 mov ax, 440Dh 5206 00006373 CD21 int 21h 5207 00006375 5A pop dx 5208 00006376 59 pop cx 5209 00006377 5B pop bx 5210 00006378 58 pop ax 5211 00006379 C3 retn 5212 5213 unlockdrive: 5214 0000637A 50 push ax 5215 0000637B 53 push bx 5216 0000637C 51 push cx 5217 0000637D 52 push dx 5218 0000637E 88C3 mov bl, al 5219 00006380 FEC3 inc bl 5220 00006382 B700 mov bh, 0 5221 00006384 B96A08 mov cx, 086Ah 5222 00006387 BA0100 mov dx, 0001h 5223 0000638A B80D44 mov ax, 440Dh 5224 0000638D CD21 int 21h 5225 0000638F 5A pop dx 5226 00006390 59 pop cx 5227 00006391 5B pop bx 5228 00006392 58 pop ax 5229 00006393 C3 retn 5230 5231 5232 ; W command - write a program, or disk sectors, to disk. 5233 ww: 5234 %if _BOOTLDR 5235 00006394 F606[8500]40 testopt [internalflags], nodosloaded 5235 ****************** expansion: adr = '[internalflags]' 5235 ****************** expansion: len = 15 5235 ****************** expansion: tf = '[' 5235 ****************** expansion: tb = ']' 5235 ****************** expansion: adr = 'internalflags' 5235 ****************** expansion: adr = internalflags 5236 00006399 7406 jz @F 5237 0000639B BA[1836] mov dx, msg.nobootsupp 5238 0000639E E9CE13 jmp putsz 5239 @@: 5239 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.189 5239 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.190 5239 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.191 5239 ****************** expansion: @B (case-insensitive) = ..@.@@.1.192 5239 ****************** expansion: @F (case-insensitive) = ..@.@@.1.193 5239 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.194 5239 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.195 5239 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.196 5239 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.189 5239 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.190 5239 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.191 5239 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.192 5239 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.193 5239 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.194 5239 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.195 5239 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.196 5239 ****************** expansion: __@@_num = 197 5240 %endif 5241 5242 000063A1 E8A604 call parselw ; parse L and W argument format 5243 000063A4 746A jz ww4 ; if request to write program 5244 %if _PM && _NOEXTENDER 5245 call ispm 5246 jnz .rm 5247 call isextenderavailable 5248 jc nodosextinst 5249 .rm: 5250 %endif 5251 000063A6 36F606[8400]06 testopt [ss:internalflags], newpacket| ntpacket 5251 ****************** expansion: adr = '[ss:internalflags]' 5251 ****************** expansion: len = 18 5251 ****************** expansion: tf = '[' 5251 ****************** expansion: tb = ']' 5251 ****************** expansion: adr = 'ss:internalflags' 5251 ****************** expansion: adr = ss:internalflags 5252 000063AC 742B jz .oldint 5253 000063AE 88C2 mov dl, al ; A: = 0, ... 5254 000063B0 BE0160 mov si, 6001h ; write, assume "file data" 5255 %if _VDD 5256 000063B3 F606[8400]04 testopt [internalflags], ntpacket 5256 ****************** expansion: adr = '[internalflags]' 5256 ****************** expansion: len = 15 5256 ****************** expansion: tf = '[' 5256 ****************** expansion: tb = ']' 5256 ****************** expansion: adr = 'internalflags' 5256 ****************** expansion: adr = internalflags 5257 000063B8 7512 jnz .vdd 5258 %endif 5259 000063BA FEC2 inc dl ; A: = 1, ... 5260 000063BC E8A1FF call lockdrive 5261 000063BF B80573 mov ax, 7305h ; ds:(e)bx-> packet 5262 000063C2 F9 stc 5263 000063C3 CD21 int 21h ; use int 21h here, not doscall 5264 000063C5 9C pushf 5265 000063C6 E8B1FF call unlockdrive 5266 000063C9 9D popf 5267 000063CA EB0F jmp short .done 5268 %if _VDD 5269 .vdd: 5270 000063CC A1[7002] mov ax, word [hVdd] 5271 000063CF B90500 mov cx, 5 5272 %if _PM 5273 add cl, byte [dpmi32] 5274 %endif 5275 000063D2 C4C4580290 DispatchCall 5276 000063D7 EB02 jmp short .done 5277 %endif 5278 .oldint: 5279 000063D9 CD26 int 26h 5280 .done: 5281 000063DB BA[E944] mov dx, writing 5282 ww1: 5283 000063DE 8CD3 mov bx, ss ; restore segment registers 5284 000063E0 8EDB mov ds, bx 5285 000063E2 8B26[5802] mov sp, word [savesp] 5286 000063E6 8EC3 mov es, bx 5287 000063E8 7323 jnc ww3 ; if no error 5288 000063EA 3C0C cmp al, 0Ch 5289 000063EC 7602 jbe ww2 ; if in range 5290 000063EE B00C mov al, 0Ch 5291 ww2: 5292 000063F0 98 cbw ; ah = 0 5293 000063F1 BB[1A44] mov bx, dskerrs ; -> byte table 5294 000063F4 D7 xlatb ; get offset from dskerrs 5295 000063F5 01D8 add ax, bx ; -> message 5296 000063F7 BF[A901] mov di, line_out 5297 000063FA 89C6 mov si, ax 5298 000063FC E8CC10 call showstring 5299 000063FF 89D6 mov si, dx 5300 00006401 E8C710 call showstring 5301 00006404 BE[EF44] mov si, drive 5302 00006407 E8C110 call showstring 5303 0000640A E82911 call putsline_crlf 5304 ww3: 5305 0000640D E9D39D jmp cmd3 ; can't return because Int26 leaves stack wrong 5306 5307 ; Write to file. First check the file extension. 5308 ; size of file is in client's BX:CX, 5309 ; default start address is DS:100h 5310 5311 ww4: 5312 00006410 A0[E302] mov al, byte [fileext] ; get flags of file extension 5313 00006413 A80C test al, EXT_EXE + EXT_HEX 5314 00006415 7405 jz ww5 ; if not EXE or HEX 5315 00006417 BA[0747] mov dx, nowhexe 5316 0000641A EB07 jmp short ww6 5317 5318 ww5: 5319 0000641C 3C00 cmp al, 0 5320 0000641E 7506 jnz ww7 ; if extension exists 5321 00006420 BA[2D47] mov dx, nownull 5322 ww6: 5323 00006423 E9C400 jmp ww16 5324 5325 ; File extension is OK; write it. First, create the file. 5326 ww7: 5327 %if _PM 5328 call ispm 5329 jnz ww7_1 5330 mov dx, nopmsupp 5331 jmp putsz 5332 ww7_1: 5333 %endif 5334 00006426 BD[A901] mov bp, line_out 5335 00006429 80FEFE cmp dh, 0FEh 5336 0000642C 7207 jb ww8 ; if (dx < 0xFE00) 5337 0000642E 80EEFE sub dh, 0FEh ; dx -= 0xFE00; 5338 00006431 81C3E00F add bx, 0FE0h 5339 ww8: 5340 00006435 89560A mov word [bp+10], dx ; save lower part of address in line_out+10 5341 00006438 89DE mov si, bx ; upper part goes into si 5342 0000643A B43C mov ah, 3Ch ; create file 5343 0000643C 31C9 xor cx, cx ; no attributes 5344 0000643E BA8000 mov dx, DTA 5345 doscall 5345 00006441 CD21 <1> int 21h 5346 00006443 727C jc ww15 ; if error 5347 00006445 50 push ax ; save file handle 5348 5349 ; Print message about writing. 5350 00006446 BA[5047] mov dx, wwmsg1 5351 00006449 E82313 call putsz ; print string 5352 0000644C A1[4403] mov ax, word [reg_ebx] 5353 0000644F 83F810 cmp ax, 10h 5354 00006452 7202 jb ww9 ; if not too large 5355 00006454 31C0 xor ax, ax ; too large: zero it out 5356 ww9: 5357 00006456 894608 mov word [bp+8], ax 5358 00006459 85C0 test ax, ax 5359 0000645B 7403 jz ww10 5360 0000645D E8B010 call hexnyb 5361 ww10: 5362 00006460 A1[4803] mov ax, word [reg_ecx] 5363 00006463 894606 mov word [bp+6], ax 5364 00006466 E89510 call hexword 5365 00006469 E8CE10 call putsline ; print size 5366 0000646C BA[5947] mov dx, wwmsg2 5367 0000646F E8FD12 call putsz ; print string 5368 5369 ; Now write the file. Size remaining is in line_out+6. 5370 00006472 5B pop bx ; recover file handle 5371 00006473 8B560A mov dx, word [bp+10] ; address to write from is si:dx 5372 ww11: 5373 00006476 B800FE mov ax, 0FE00h 5374 00006479 29D0 sub ax, dx 5375 0000647B 807E0800 cmp byte [bp+8], 0 5376 0000647F 7508 jnz ww12 ; if more than 0FE00h bytes remaining 5377 00006481 3B4606 cmp ax, word [bp+6] 5378 00006484 7203 jb ww12 ; ditto 5379 00006486 8B4606 mov ax, word [bp+6] 5380 ww12: 5381 00006489 91 xchg ax, cx ; mov cx, ax 5382 0000648A 8EDE mov ds, si 5383 0000648C B440 mov ah, 40h ; write to file 5384 0000648E CD21 int 21h ; use INT, not doscall 5385 00006490 16 push ss ; restore DS 5386 00006491 1F pop ds 5387 00006492 39C8 cmp ax, cx 5388 00006494 7515 jne ww13 ; if disk full 5389 00006496 31D2 xor dx, dx ; next time write from xxxx:0 5390 00006498 81C6E00F add si, 0FE0h ; update segment pointer 5391 0000649C 294E06 sub word [bp+6], cx 5392 0000649F 9F lahf 5393 000064A0 805E0800 sbb byte [bp+8], 0 5394 000064A4 75D0 jnz ww11 ; if more to go 5395 000064A6 9E sahf 5396 000064A7 75CD jnz ww11 ; ditto 5397 000064A9 EB11 jmp short ww14 ; done 5398 5399 ww13: 5400 000064AB BA[6247] mov dx, diskful 5401 000064AE E8BE12 call putsz ; print string 5402 000064B1 E80800 call ww14 ; close file 5403 5404 000064B4 B441 mov ah, 41h ; unlink file 5405 000064B6 BA8000 mov dx, DTA 5406 doscall 5406 000064B9 CD21 <1> int 21h 5407 000064BB C3 retn 5408 5409 ; Close the file. 5410 ww14: 5411 000064BC B43E mov ah, 3Eh ; close file 5412 000064BE CD21 int 21h 5413 000064C0 C3 retn 5414 5415 ; Error opening file. This is also called by the load command. 5416 ww15: 5417 000064C1 83F802 cmp ax, byte 2 5418 000064C4 BA[8847] mov dx, doserr2 ; File not found 5419 000064C7 7421 je ww16 5420 000064C9 83F803 cmp ax, byte 3 5421 000064CC BA[9947] mov dx, doserr3 ; Path not found 5422 000064CF 7419 je ww16 5423 000064D1 83F805 cmp ax, byte 5 5424 000064D4 BA[AA47] mov dx, doserr5 ; Access denied 5425 000064D7 7411 je ww16 5426 000064D9 83F808 cmp ax, byte 8 5427 000064DC BA[BA47] mov dx, doserr8 ; Insufficient memory 5428 000064DF 7409 je ww16 5429 000064E1 BF[7447] mov di, openerr1 5430 000064E4 E81710 call hexword 5431 000064E7 BA[6E47] mov dx, openerr ; Error ____ opening file 5432 ww16: 5433 000064EA E98212 jmp putsz 5434 5435 5436 %ifn _EMS 5437 xx: equ error 5438 %else 5439 ; X commands - manipulate EMS memory. 5440 ; 5441 ; Reference: 5442 ; http://www.nondot.org/sabre/os/files/MemManagement/LIMEMS41.txt 5443 5444 000064ED 3C3F xx: cmp al, '?' 5445 000064EF 741F je xhelp ; if a call for help 5446 000064F1 0C20 or al, TOLOWER 5447 000064F3 3C61 cmp al, 'a' 5448 000064F5 7423 je xa ; if XA command 5449 000064F7 3C64 cmp al, 'd' 5450 000064F9 7446 je xd ; if XD command 5451 000064FB 3C6D cmp al, 'm' 5452 000064FD 7503E97E00 je xm ; if XM command 5453 00006502 3C72 cmp al, 'r' 5454 00006504 7459 je xr ; if XR command 5455 00006506 3C73 cmp al, 's' 5456 00006508 7503E9A900 je xs ; if XS command 5457 0000650D E9EB01 jmp error 5458 5459 00006510 AC xhelp: lodsb 5460 00006511 E85F0F call chkeol 5461 00006514 BA[A234] mov dx, msg.xhelp 5462 00006517 E95512 jmp putsz ; print string and return 5463 5464 ; XA - Allocate EMS. 5465 0000651A E86601 xa: call emschk 5466 0000651D E85E0F call skipcomma 5467 00006520 E8CD0E call getword ; get argument into DX 5468 00006523 E84D0F call chkeol ; expect end of line here 5469 00006526 89D3 mov bx, dx 5470 5471 00006528 B8005A mov ax, 5A00h ; use the EMS 4.0 version to alloc 0 pages 5472 0000652B 85DB test bx, bx 5473 0000652D 7402 jz short .nullcnt 5474 0000652F B443 mov ah, 43h ; allocate handle 5475 .nullcnt: 5476 00006531 E82001 call emscall 5477 00006534 92 xchg ax, dx ; mov ax, dx 5478 00006535 BF[CA48] mov di, xaans1 5479 00006538 E8C30F call hexword 5480 0000653B BA[B948] mov dx, xaans 5481 0000653E E92E12 jmp putsz ; print string and return 5482 5483 ; XD - Deallocate EMS handle. 5484 00006541 E83F01 xd: call emschk 5485 00006544 E8370F call skipcomma 5486 00006547 E8A60E call getword ; get argument into DX 5487 0000654A E8260F call chkeol ; expect end of line here 5488 5489 0000654D B445 mov ah, 45h ; deallocate handle 5490 0000654F E80201 call emscall 5491 00006552 92 xchg ax, dx ; mov ax,dx 5492 00006553 BF[D848] mov di, xdans1 5493 00006556 E8A50F call hexword 5494 00006559 BA[D148] mov dx, xdans 5495 0000655C E91012 jmp putsz ; print string and return 5496 5497 ; XR - Reallocate EMS handle. 5498 0000655F E82101 xr: call emschk 5499 00006562 E8190F call skipcomma 5500 00006565 E8880E call getword ; get handle argument into DX 5501 00006568 89D3 mov bx, dx 5502 0000656A E8110F call skipcomma 5503 0000656D E8800E call getword ; get count argument into DX 5504 00006570 E8000F call chkeol ; expect end of line here 5505 00006573 87DA xchg bx, dx 5506 5507 00006575 B451 mov ah, 51h ; reallocate handle 5508 00006577 E8DA00 call emscall 5509 0000657A BA[EB48] mov dx, xrans 5510 0000657D E9EF11 jmp putsz ; print string and return 5511 5512 ; XM - Map EMS memory to physical page. 5513 00006580 E80001 xm: call emschk 5514 00006583 E8F80E call skipcomma 5515 00006586 E8670E call getword ; get logical page 5516 00006589 89D3 mov bx, dx ; save it in BX 5517 0000658B E8F10E call skipcomm0 5518 0000658E E86F0E call getbyte ; get physical page (DL) 5519 00006591 52 push dx 5520 00006592 E8EA0E call skipcomm0 5521 00006595 E8580E call getword ; get handle into DX 5522 00006598 E8D80E call chkeol ; expect end of line 5523 0000659B 58 pop ax ; recover physical page into AL 5524 0000659C 50 push ax 5525 0000659D B444 mov ah, 44h ; function 5 - map memory 5526 0000659F E8B200 call emscall 5527 000065A2 BF[0D49] mov di, xmans1 5528 000065A5 93 xchg ax, bx ; mov al,bl 5529 000065A6 E85C0F call hexbyte 5530 000065A9 83C719 add di, xmans2-xmans1-2 5531 000065AC 58 pop ax 5532 000065AD E8550F call hexbyte 5533 000065B0 BA[0049] mov dx, xmans 5534 000065B3 E9B911 jmp putsz ; print string and return 5535 5536 ; XS - Print EMS status. 5537 xs: 5538 000065B6 E8CA00 call emschk 5539 000065B9 AC lodsb 5540 000065BA E8B60E call chkeol ; no arguments allowed 5541 5542 ; First print out the handles and handle sizes. This can be done either 5543 ; by trying all possible handles or getting a handle table. 5544 ; The latter is preferable, if it fits in memory. 5545 000065BD B44B mov ah, 4Bh ; function 12 - get handle count 5546 000065BF E89200 call emscall 5547 000065C2 83FB42 cmp bx, (line_out_end-line_out)/4 5548 000065C5 761A jbe short xs3 ; if we can do it by getting the table 5549 000065C7 31D2 xor dx, dx ; handle 5550 5551 xs1: 5552 000065C9 B44C mov ah, 4Ch ; function 13 - get handle pages 5553 000065CB E8B000 call emscall.witherrors 5554 000065CE 750A jnz short .err 5555 000065D0 93 xchg ax, bx ; mov ax,bx 5556 000065D1 E8DE00 call hndlshow 5557 .cont: 5558 000065D4 FEC2 inc dl ; end of loop 5559 000065D6 75F1 jnz short xs1 ; if more to be done 5560 000065D8 EB1E jmp short xs5 ; done with this part 5561 5562 .err: 5563 000065DA 80FC83 cmp ah, 83h ; no such handle? 5564 000065DD 74F5 je short .cont ; just skip --> 5565 000065DF EB78 jmp short emscall.errorhandle ; if other error --> 5566 5567 ; Get the information in tabular form. 5568 xs3: 5569 000065E1 B44D mov ah, 4Dh ; function 14 - get all handle pages 5570 000065E3 BF[A901] mov di, line_out 5571 000065E6 E86B00 call emscall 5572 000065E9 85DB test bx, bx 5573 000065EB 740B jz short xs5 5574 000065ED 89FE mov si, di 5575 xs4: 5576 000065EF AD lodsw 5577 000065F0 92 xchg ax, dx 5578 000065F1 AD lodsw 5579 000065F2 E8BD00 call hndlshow 5580 000065F5 4B dec bx 5581 000065F6 75F7 jnz short xs4 ; if more to go 5582 5583 xs5: 5584 000065F8 BA[B441] mov dx, crlf 5585 000065FB E87111 call putsz ; print string 5586 5587 ; Next print the mappable physical address array. 5588 ; The size of the array shouldn't be a problem. 5589 000065FE B80058 mov ax, 5800h ; function 25 - get mappable phys. address array 5590 00006601 BF[A901] mov di, line_out ; address to put array 5591 00006604 E84D00 call emscall 5592 00006607 BA[B049] mov dx, xsnopgs 5593 0000660A E328 jcxz xs7 ; NO mappable pages! 5594 5595 0000660C 89FE mov si, di 5596 xs6: 5597 0000660E 51 push cx 5598 0000660F AD lodsw 5599 00006610 BF[6C49] mov di, xsstr2b 5600 00006613 E8E80E call hexword 5601 00006616 AD lodsw 5602 00006617 BF[5F49] mov di, xsstr2a 5603 0000661A E8E80E call hexbyte 5604 0000661D BA[5449] mov dx, xsstr2 5605 00006620 E84C11 call putsz ; print string 5606 00006623 59 pop cx ; end of loop 5607 00006624 F6C101 test cl, 1 5608 00006627 7406 jz short xs_nonl 5609 00006629 BA[B441] mov dx, crlf ; blank line 5610 0000662C E84011 call putsz ; print string 5611 xs_nonl: 5612 0000662F E2DD loop xs6 5613 00006631 BA[B441] mov dx, crlf ; blank line 5614 xs7: 5615 00006634 E83811 call putsz ; print string 5616 5617 ; Finally, print the cumulative totals. 5618 00006637 B442 mov ah, 42h ; function 3 - get unallocated page count 5619 00006639 E81800 call emscall 5620 0000663C 89D0 mov ax, dx ; total pages available 5621 0000663E 29D8 sub ax, bx ; number of pages allocated 5622 00006640 BB[A649] mov bx, xsstrpg 5623 00006643 E88300 call sumshow ; print the line 5624 00006646 B44B mov ah, 4Bh ; function 12 - get handle count 5625 00006648 E80900 call emscall 5626 0000664B 93 xchg ax, bx ; ax = number of handles allocated 5627 0000664C BAFF00 mov dx, 0FFh ; total number of handles 5628 0000664F BB[AA49] mov bx, xsstrhd 5629 00006652 EB75 jmp sumshow ; print the line 5630 5631 ; Call EMS 5632 emscall: 5633 00006654 E82700 call .witherrors 5634 00006657 7429 jz short .ret ; return if OK 5635 .errorhandle: 5636 00006659 88E0 mov al, ah 5637 0000665B 3C8B cmp al, 8Bh 5638 0000665D 7F0D jg short .ce2 ; if out of range (signed comparison intended) 5639 0000665F 98 cbw 5640 00006660 89C3 mov bx, ax 5641 00006662 D1E3 shl bx, 1 5642 00006664 8B97[9649] mov dx, word [emserrs+100h+bx] 5643 00006668 85D2 test dx, dx 5644 0000666A 7543 jnz short .ce4 ; if there's a word there 5645 .ce2: 5646 0000666C BA[AE48] mov dx, emserrx 5647 0000666F E8FD10 call putsz 5648 00006672 BF[A901] mov di, line_out 5649 00006675 E88D0E call hexbyte 5650 00006678 E8BB0E call putsline_crlf 5651 0000667B E9659B jmp cmd3 ; quit 5652 5653 .witherrors: 5654 %if _PM 5655 call ispm 5656 jnz short .rm 5657 [cpu 286] 5658 push word [ss:pspdbg] 5659 push 67h 5660 call intcall 5661 db __TEST_IMM16 ; (skip int opcode) 5662 __CPU__ 5663 .rm: 5664 %endif 5665 0000667E CD67 int 67h 5666 00006680 84E4 test ah, ah 5667 .ret: 5668 emschk.ret: 5669 00006682 C3 retn 5670 5671 ; Check for EMS 5672 5673 emschk: 5674 %if _PM 5675 call ispm 5676 jnz short .rm 5677 mov bl, 67h 5678 mov ax, 0200h 5679 int 31h 5680 mov ax, cx 5681 mov bx, dx 5682 jmp short .check 5683 .rm: 5684 %endif 5685 00006683 06 push es 5686 %if _BOOTLDR 5687 00006684 F606[8500]40 testopt [internalflags], nodosloaded 5687 ****************** expansion: adr = '[internalflags]' 5687 ****************** expansion: len = 15 5687 ****************** expansion: tf = '[' 5687 ****************** expansion: tb = ']' 5687 ****************** expansion: adr = 'internalflags' 5687 ****************** expansion: adr = internalflags 5688 00006689 740B jz short .int21_35 5689 0000668B 31C0 xor ax, ax 5690 0000668D 8EC0 mov es, ax 5691 ; maybe should disable this? 5692 0000668F 26C41E9C01 les bx, [es:67h*4] 5693 00006694 EB05 jmp short .gotint 5694 .int21_35: 5695 %endif 5696 00006696 B86735 mov ax, 3567h ; get interrupt vector 67h 5697 00006699 CD21 int 21h 5698 .gotint: 5699 0000669B 8CC0 mov ax, es 5700 0000669D 07 pop es 5701 .check: 5702 0000669E 43 inc bx 5703 0000669F 740B jz short .failed ; was 0FFFFh --> 5704 000066A1 85C0 test ax, ax 5705 000066A3 7407 jz short .failed ; was 0000h --> 5706 000066A5 B446 mov ah, 46h 5707 000066A7 E8D4FF call emscall.witherrors ; get version 5708 000066AA 74D6 jz short .ret ; success --> 5709 .failed: 5710 000066AC BA[D047] mov dx, emsnot 5711 emscall.ce4: 5712 000066AF E9DD9C jmp prnquit ; otherwise abort with message --> 5713 5714 ; HNDLSHOW - Print XS line giving the handle and pages allocated. 5715 ; 5716 ; Entry DX Handle 5717 ; AX Number of pages 5718 ; 5719 ; Exit Line printed 5720 ; 5721 ; Uses ax,cl,di. 5722 hndlshow: 5723 000066B2 BF[3D49] mov di, xsstr1b 5724 000066B5 E8460E call hexword 5725 000066B8 89D0 mov ax, dx 5726 000066BA BF[3449] mov di, xsstr1a 5727 000066BD E83E0E call hexword 5728 000066C0 52 push dx 5729 000066C1 BA[2D49] mov dx, xsstr1 5730 000066C4 E8A810 call putsz ; print string 5731 000066C7 5A pop dx 5732 000066C8 C3 retn 5733 5734 ; SUMSHOW - Print summary line for XS command. 5735 ; 5736 ; Entry AX Number of xxxx's that have been used 5737 ; DX Total number of xxxx's 5738 ; BX Name of xxxx 5739 ; 5740 ; Exit String printed 5741 ; 5742 ; Uses AX, CX, DX, DI 5743 sumshow: 5744 000066C9 BF[7349] mov di, xsstr3 5745 000066CC 57 push di 5746 000066CD E81600 call trimhex 5747 000066D0 92 xchg ax, dx ; mov ax,dx 5748 000066D1 BF[8349] mov di, xsstr3a 5749 000066D4 E80F00 call trimhex 5750 000066D7 5A pop dx ; mov dx,xsstr3 5751 000066D8 E89410 call putsz ; print string 5752 000066DB 89DA mov dx, bx 5753 000066DD E88F10 call putsz ; print string 5754 000066E0 BA[8D49] mov dx, xsstr4 5755 000066E3 E98910 jmp putsz ; print string and return 5756 5757 ; TRIMHEX - Print word without leading zeroes. 5758 ; 5759 ; Entry AX Number to print 5760 ; DI Where to print it 5761 ; 5762 ; Uses AX, CX, DI. 5763 trimhex: 5764 000066E6 E8150E call hexword 5765 000066E9 83EF04 sub di, 4 ; back up DI to start of word 5766 000066EC B90300 mov cx, 3 5767 000066EF B030 mov al, '0' 5768 .loop: 5769 000066F1 AE scasb 5770 000066F2 7506 jne .done ; return if not a '0' 5771 000066F4 C645FF20 mov byte [di-1], ' ' 5772 000066F8 E2F7 loop .loop 5773 .done: 5774 000066FA C3 retn 5775 %endif ; _EMS 5776 5777 ; Error handlers. 5778 error: 5779 000066FB 16 push ss 5780 000066FC 07 pop es 5781 000066FD 16 push ss 5782 000066FE 1F pop ds 5783 000066FF 89F1 mov cx, si 5784 00006701 81E9[0300] sub cx, line_in+3 5785 00006705 030E[9802] add cx, word [promptlen]; number of spaces to skip 5786 00006709 81F98000 cmp cx, 128 5787 0000670D 7602 jbe .valid 5788 0000670F 31C9 xor cx, cx ; if we're really messed up 5789 .valid: 5790 00006711 FF26[5C02] jmp near [throwret] 5791 ; INP: cx = number of spaces to indent 5792 5793 ; This is the default address in throwret. 5794 ; Display the error, then jump to errret. 5795 errhandler: 5796 .: 5797 00006715 83E950 sub cx, byte 80 5798 00006718 73FB jnc . 5799 0000671A 83C150 add cx, byte 80 5800 0000671D 7407 jz err2 5801 0000671F B020 mov al, 32 5802 .loop: 5803 00006721 E86610 call putc 5804 00006724 E2FB loop .loop 5805 err2: 5806 00006726 BA[AD41] mov dx, errcarat 5807 00006729 E84310 call putsz ; print string 5808 0000672C C706[E002][1B03] mov word [lastcmd], dmycmd 5809 ; cancel command repetition 5810 00006732 FF26[5A02] jmp near [errret] ; return to the prompt (cmd3, aa01) 5811 5812 5813 ; Terminate the attached process, if any 5814 ; 5815 ; OUT: NZ if now no process attached 5816 ; ZR if still a process attached, 5817 ; ie we failed to terminate this one 5818 terminate_attached_process: 5819 00006736 F606[8600]80 testopt [internalflags], attachedterm 5819 ****************** expansion: adr = '[internalflags]' 5819 ****************** expansion: len = 15 5819 ****************** expansion: tf = '[' 5819 ****************** expansion: tb = ']' 5819 ****************** expansion: adr = 'internalflags' 5819 ****************** expansion: adr = internalflags 5820 0000673B 751C jnz @F 5821 5822 0000673D 8C0E[6C03] mov word [reg_cs], cs 5823 00006741 C706[7803][EB60] mov word [reg_eip], terminate 5824 00006747 50 push ax ; (dummy to take space for return address) 5825 00006748 8C16[6803] mov word [reg_ss], ss 5826 0000674C 8926[5003] mov word [reg_esp], sp ; save current ss:sp 5827 00006750 58 pop ax ; (discard) 5828 %if _PM 5829 xor ax, ax 5830 mov word [reg_eip+2], ax 5831 mov word [reg_esp+2], ax 5832 %endif 5833 00006751 E870C4 call run 5834 ; The dummy stack space above is to hold the return address 5835 ; of this call. The debugger stack is used by this run. 5836 5837 00006754 F606[8600]80 testopt [internalflags], attachedterm 5837 ****************** expansion: adr = '[internalflags]' 5837 ****************** expansion: len = 15 5837 ****************** expansion: tf = '[' 5837 ****************** expansion: tb = ']' 5837 ****************** expansion: adr = 'internalflags' 5837 ****************** expansion: adr = internalflags 5838 @@: 5838 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.190 5838 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.191 5838 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.192 5838 ****************** expansion: @B (case-insensitive) = ..@.@@.1.193 5838 ****************** expansion: @F (case-insensitive) = ..@.@@.1.194 5838 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.195 5838 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.196 5838 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.197 5838 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.190 5838 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.191 5838 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.192 5838 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.193 5838 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.194 5838 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.195 5838 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.196 5838 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.197 5838 ****************** expansion: __@@_num = 198 5839 00006759 C3 retn 5840 5841 5842 ;--- this is called by "run" 5843 ;--- better don't use INTs inside 5844 ;--- set debuggee's INT 23/24 5845 5846 ; Low-level functions to reset to debuggee's interrupt vectors 23h/24h 5847 ; INP: - 5848 ; OUT: - 5849 ; CHG: bx, (e)dx, cx, ax 5850 ; STT: ds = our segment 5851 ; Do not use Int21, even if not in InDOS mode 5852 setint2324: 5853 %if _BOOTLDR 5854 0000675A F606[8500]40 testopt [internalflags], nodosloaded 5854 ****************** expansion: adr = '[internalflags]' 5854 ****************** expansion: len = 15 5854 ****************** expansion: tf = '[' 5854 ****************** expansion: tb = ']' 5854 ****************** expansion: adr = 'internalflags' 5854 ****************** expansion: adr = internalflags 5855 0000675F 7514 jnz .ret ; don't touch int23/24 --> 5856 %endif 5857 %if _PM 5858 call ispm 5859 jz .pm 5860 %endif 5861 00006761 06 push es 5862 00006762 57 push di 5863 00006763 56 push si 5864 5865 00006764 31FF xor di, di 5866 00006766 8EC0 mov es, ax 5867 00006768 BF8C00 mov di, 23h *4 5868 0000676B BE[6802] mov si, run2324 5869 0000676E A5 movsw 5870 0000676F A5 movsw 5871 00006770 A5 movsw 5872 00006771 A5 movsw 5873 5874 %if _PM 5875 call hook2F 5876 %endif 5877 00006772 5E pop si 5878 00006773 5F pop di 5879 00006774 07 pop es 5880 .ret: 5881 00006775 C3 retn 5882 %if _PM 5883 .pm: 5884 push si 5885 mov si, run2324 5886 mov bx, 0223h 5887 .loop: 5888 _386_o32 ; mov edx, dword [si+0] 5889 mov dx, word [si+0] 5890 mov cx, word [si+4] 5891 mov ax, 0205h 5892 int 31h 5893 add si, 6 5894 inc bl 5895 dec bh 5896 jnz .loop 5897 pop si 5898 retn 5899 %endif 5900 5901 ; Low-level functions to save debuggee's interrupt vectors 23h/24h 5902 ; and set our interrupt vectors instead 5903 ; INP: - 5904 ; OUT: - 5905 ; CHG: - 5906 ; STT: ds = our segment 5907 ; Do not use Int21, even if not in InDOS mode 5908 getint2324: 5909 %if _BOOTLDR 5910 00006776 F606[8500]40 testopt [internalflags], nodosloaded 5910 ****************** expansion: adr = '[internalflags]' 5910 ****************** expansion: len = 15 5910 ****************** expansion: tf = '[' 5910 ****************** expansion: tb = ']' 5910 ****************** expansion: adr = 'internalflags' 5910 ****************** expansion: adr = internalflags 5911 0000677B 7525 jnz .ret ; don't touch int23/24 --> 5912 %endif 5913 %if _PM 5914 call ispm 5915 jz .pm 5916 %endif 5917 0000677D 56 push si 5918 0000677E 57 push di 5919 0000677F 06 push es 5920 5921 00006780 1E push ds 5922 00006781 07 pop es 5923 00006782 31FF xor di, di 5924 00006784 8EDF mov ds, di 5925 00006786 BF[6802] mov di, run2324 5926 00006789 BE8C00 mov si, 23h *4 5927 0000678C 56 push si 5928 0000678D A5 movsw ; save interrupt vector 23h 5929 0000678E A5 movsw 5930 0000678F A5 movsw ; save interrupt vector 24h 5931 00006790 A5 movsw 5932 00006791 5F pop di 5933 00006792 06 push es 5934 00006793 1F pop ds 5935 00006794 31F6 xor si, si 5936 00006796 8EC6 mov es, si 5937 00006798 BE0E00 mov si, CCIV 5938 0000679B A5 movsw 5939 0000679C A5 movsw 5940 0000679D A5 movsw 5941 0000679E A5 movsw 5942 5943 0000679F 07 pop es 5944 000067A0 5F pop di 5945 000067A1 5E pop si 5946 .ret: 5947 000067A2 C3 retn 5948 %if _PM 5949 cpu 286 5950 .pm: 5951 _386_o32 5952 pusha 5953 mov di, run2324 5954 mov bx, 0223h 5955 .loop: 5956 mov ax, 0204h 5957 int 31h 5958 _386_o32 ; mov dword [di+0], edx 5959 mov word [di+0], dx 5960 mov word [di+4], cx 5961 add di, byte 6 5962 inc bl 5963 dec bh 5964 jnz .loop 5965 %if _ONLYNON386 5966 db __TEST_IMM8 ; (skip pusha) 5967 %else 5968 db __TEST_IMM16 ; (skip pushad) 5969 %endif 5970 5971 restoredbgi2324: 5972 setdbgi2324: 5973 _386_o32 5974 pusha 5975 mov si, dbg2324 5976 mov bx, 0223h 5977 _386 xor edx, edx 5978 .loop: 5979 lodsw 5980 mov dx, ax 5981 mov cx, word [cssel] 5982 mov ax, 0205h 5983 int 31h 5984 inc bl 5985 dec bh 5986 jnz .loop 5987 _386_o32 5988 popa 5989 retn 5990 cpu 8086 5991 %endif 5992 5993 %if 0 5994 The next three subroutines concern the handling of Int23 and 24. 5995 These interrupt vectors are saved and restored when running the 5996 child process, but are not active when DEBUG itself is running. 5997 It is still useful for the programmer to be able to check where Int23 5998 and 24 point, so these values are copied into the interrupt table 5999 during parts of the C, D, (DX, DI,) E, M, and S commands, so that 6000 they appear to be in effect. The E command also copies these values 6001 back. 6002 6003 Between calls to dohack and unhack, there should be no calls to DOS, 6004 so that there is no possibility of these vectors being used when 6005 DEBUG itself is running. 6006 6007 ; As long as no DOS is loaded anyway, Int23 and Int24 won't be touched 6008 by us, so the whole hack is unnecessary and will be skipped. 6009 %endif 6010 6011 ; PREPHACK - Set up for interrupt vector substitution. 6012 ; Entry es = cs 6013 prephack: 6014 000067A3 803E[7C02]00 cmp byte [hakstat], 0 6015 000067A8 7509 jne .err ; if hack status error --> 6016 000067AA 57 push di 6017 000067AB BF[7402] mov di, sav2324 ; debugger's Int2324 6018 000067AE E80B00 call prehak1 6019 000067B1 5F pop di 6020 000067B2 C3 retn 6021 6022 .err: 6023 000067B3 52 push dx 6024 000067B4 BA[BA46] mov dx, ph_msg 6025 000067B7 E8B50F call putsz ; display error 6026 000067BA 5A pop dx 6027 000067BB C3 retn 6028 6029 ; INP: di-> saved interrupt vectors 6030 ; OUT: - 6031 ; CHG: - 6032 prehak1: 6033 %if _PM 6034 call ispm 6035 jz .pm ; nothing to do 6036 %endif 6037 000067BC 1E push ds 6038 000067BD 56 push si 6039 000067BE 31F6 xor si, si 6040 000067C0 8EDE mov ds, si 6041 000067C2 BE8C00 mov si, 23h *4 6042 000067C5 A5 movsw 6043 000067C6 A5 movsw 6044 000067C7 A5 movsw 6045 000067C8 A5 movsw 6046 000067C9 5E pop si 6047 000067CA 1F pop ds 6048 .pm: 6049 000067CB C3 retn 6050 6051 6052 ; DOHACK - Fake the interrupt vectors 23h and 24h to debuggee's 6053 ; UNHACK - Restore interrupt vectors 23h and 24h to our values 6054 ; It's OK to do either of these twice in a row. 6055 ; In particular, the S command may do unhack twice in a row. 6056 ; INP: ds = our segment 6057 ; OUT: es = our segment 6058 ; CHG: - 6059 ; STT: Do not use Int21 6060 dohack: 6061 000067CC 16 push ss 6062 000067CD 07 pop es 6063 %if _BOOTLDR 6064 000067CE F606[8500]40 testopt [internalflags], nodosloaded 6064 ****************** expansion: adr = '[internalflags]' 6064 ****************** expansion: len = 15 6064 ****************** expansion: tf = '[' 6064 ****************** expansion: tb = ']' 6064 ****************** expansion: adr = 'internalflags' 6064 ****************** expansion: adr = internalflags 6065 000067D3 752D jnz unhack.ret ; nothing to hack --> 6066 %endif 6067 000067D5 56 push si 6068 000067D6 C606[7C02]01 mov byte [hakstat], 1 6069 000067DB BE[6802] mov si, run2324 ; debuggee's interrupt vectors 6070 %if _PM 6071 call ispm 6072 jnz unhack.common 6073 cpu 286 6074 _386_o32 6075 pusha 6076 mov bx, 0223h 6077 .pm_loop: 6078 _386_o32 6079 mov dx, word [si+0+0] 6080 mov cx, word [si+0+4] 6081 mov ax, 205h 6082 int 31h 6083 add si, byte 6 6084 inc bl 6085 dec bh 6086 jnz .pm_loop 6087 _386_o32 6088 popa 6089 pop si 6090 retn 6091 cpu 8086 6092 %else 6093 000067DE EB12 jmp short unhack.common 6094 %endif 6095 6096 unhack: 6097 000067E0 16 push ss 6098 000067E1 07 pop es 6099 %if _BOOTLDR 6100 000067E2 F606[8500]40 testopt [internalflags], nodosloaded 6100 ****************** expansion: adr = '[internalflags]' 6100 ****************** expansion: len = 15 6100 ****************** expansion: tf = '[' 6100 ****************** expansion: tb = ']' 6100 ****************** expansion: adr = 'internalflags' 6100 ****************** expansion: adr = internalflags 6101 000067E7 7519 jnz .ret ; nothing to hack --> 6102 %endif 6103 000067E9 C606[7C02]00 mov byte [hakstat], 0 6104 %if _PM 6105 call ispm 6106 jz restoredbgi2324 6107 %endif 6108 000067EE 56 push si 6109 000067EF BE[7402] mov si, sav2324 ; debugger's interrupt vectors 6110 .common: 6111 000067F2 57 push di 6112 000067F3 06 push es 6113 000067F4 31FF xor di, di 6114 000067F6 8EC7 mov es, di 6115 000067F8 BF8C00 mov di, 23h *4 6116 000067FB A5 movsw 6117 000067FC A5 movsw 6118 000067FD A5 movsw 6119 000067FE A5 movsw 6120 000067FF 07 pop es 6121 00006800 5F pop di 6122 00006801 5E pop si 6123 .ret: 6124 00006802 C3 retn 6125 6126 6127 InDos: 6128 %if _BOOTLDR 6129 00006803 F606[8500]40 testopt [internalflags], nodosloaded 6129 ****************** expansion: adr = '[internalflags]' 6129 ****************** expansion: len = 15 6129 ****************** expansion: tf = '[' 6129 ****************** expansion: tb = ']' 6129 ****************** expansion: adr = 'internalflags' 6129 ****************** expansion: adr = internalflags 6130 00006808 7512 jnz .return ; always "in DOS" --> 6131 %endif 6132 0000680A F606[7C00]08 testopt [options], fakeindos 6132 ****************** expansion: adr = '[options]' 6132 ****************** expansion: len = 9 6132 ****************** expansion: tf = '[' 6132 ****************** expansion: tb = ']' 6132 ****************** expansion: adr = 'options' 6132 ****************** expansion: adr = options 6133 0000680F 750B jnz .return ; faking InDOS on anyway --> 6134 00006811 1E push ds 6135 00006812 56 push si 6136 00006813 C536[8802] lds si, [pInDOS] 6137 00006817 803C00 cmp byte [si], 0 6138 0000681A 5E pop si 6139 0000681B 1F pop ds 6140 .return: 6141 0000681C C3 retn 6142 6143 6144 ; PARSECM - Parse command line for C and M commands. 6145 ; Entry AL First nonwhite character of parameters 6146 ; SI Address of the character after that 6147 ; Exit DS:ESI Address from first parameter 6148 ; ES:EDI Address from second parameter 6149 ; ECX Length of address range minus one 6150 ; [bAddr32] Set if any high word non-zero 6151 6152 parsecm: 6153 0000681D E883FF call prephack 6154 00006820 8B1E[6003] mov bx, word [reg_ds] ; get source range 6155 00006824 31C9 xor cx, cx 6156 00006826 E8B400 call getrange ; get address range into bx:(e)dx bx:(e)cx 6157 00006829 53 push bx ; save segment first address 6158 0000682A E8520C call skipcomm0 6159 0000682D 8B1E[6003] mov bx, word [reg_ds] 6160 _386_PM_o32 ; sub ecx, edx 6161 00006831 29D1 sub cx, dx ; number of bytes minus one 6162 _386_PM_o32 ; push edx 6163 00006833 52 push dx 6164 _386_PM_o32 ; push ecx 6165 00006834 51 push cx 6166 %if _PM 6167 mov cl, byte [bAddr32] 6168 push cx 6169 call getaddr ; get destination address into bx:edx 6170 pop cx 6171 or byte [bAddr32], cl ; if either is 32-bit, handle both as 32-bit 6172 %else 6173 00006835 E8FE00 call getaddr ; get destination address into bx:dx 6174 %endif 6175 _386_PM_o32 6176 00006838 59 pop cx ; pop ecx 6177 _386_PM_o32 ; mov edi, edx 6178 00006839 89D7 mov di, dx 6179 _386_PM_o32 6180 0000683B 01CA add dx, cx ; add edx, ecx 6181 0000683D 7208 jc short errorj7 ; if it wrapped around 6182 0000683F E8310C call chkeol ; expect end of line 6183 00006842 8EC3 mov es, bx 6184 _386_PM_o32 ; pop esi 6185 00006844 5E pop si 6186 00006845 1F pop ds 6187 00006846 C3 retn 6188 6189 errorj7: 6190 00006847 E9B1FE jmp error 6191 6192 ; PARSELW - Parse command line for L and W commands. 6193 ; 6194 ; Entry AL First nonwhite character of parameters 6195 ; SI Address of the character after that 6196 ; 6197 ; Exit If there is at most one argument (program load/write), then the 6198 ; zero flag is set, and registers are set as follows: 6199 ; bx:(e)dx Transfer address 6200 ; 6201 ; If there are more arguments (absolute disk read/write), then the 6202 ; zero flag is clear, and registers are set as follows: 6203 ; 6204 ; DOS versions prior to 3.31: 6205 ; AL Drive number 6206 ; CX Number of sectors to read 6207 ; DX Beginning logical sector number 6208 ; DS:BX Transfer address 6209 ; 6210 ; Later DOS versions: 6211 ; AL Drive number 6212 ; BX Offset of packet 6213 ; CX 0FFFFh 6214 6215 usesection lDEBUG_DATA_ENTRY 6215 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 6216 align 4 6217 00005170 00000000 packet: dd 0 ; sector number 6218 00005174 0000 dw 0 ; number of sectors to read 6219 00005176 00000000 dd 0 ; transfer address Segm:OOOO 6220 %if _PM 6221 dw 0 ; transfer address might be Segm:OOOOOOOO! 6222 %endif 6223 6224 usesection lDEBUG_CODE 6224 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 6225 parselw: 6226 0000684A 8B1E[6C03] mov bx, word [reg_cs] ; default segment 6227 0000684E 6631D2 _386 xor edx, edx 6227 ****************** expansion: entry = 26702 6227 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702 6227 ****************** expansion: entry = 26703 6227 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703 6227 ****************** expansion: entry = 26704 6227 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704 6227 ****************** expansion: entry = 26705 6228 00006851 BA0001 mov dx, 100h ; default offset 6229 00006854 E8110C call iseol? 6230 00006857 7468 je plw2 ; if no arguments 6231 00006859 E8DA00 call getaddr ; get buffer address into bx:(e)dx 6232 0000685C E8200C call skipcomm0 6233 0000685F E8060C call iseol? 6234 00006862 745D je plw2 ; if only one argument 6235 00006864 53 push bx ; save segment 6236 00006865 52 push dx ; save offset 6237 00006866 BB8000 mov bx, 80h ; max number of sectors to read 6238 00006869 F7DA neg dx 6239 0000686B 7406 jz plw1 ; if address is zero 6240 0000686D B109 mov cl, 9 6241 0000686F D3EA shr dx, cl ; max number of sectors which can be read 6242 00006871 89D7 mov di, dx 6243 plw1: 6244 00006873 803C3A cmp byte [si], ':' ; drive letter specification ? 6245 00006876 750F jne @F ; no --> 6246 6247 00006878 50 push ax 6248 00006879 E834F0 call uppercase 6249 0000687C 2C41 sub al, 'A' 6250 0000687E 3C20 cmp al, 32 ; valid drive ? 6251 00006880 88C2 mov dl, al ; put drive number 6252 00006882 46 inc si ; -> past the colon 6253 00006883 58 pop ax 6254 00006884 7205 jb @FF ; got it --> 6255 00006886 4E dec si ; -> at colon 6256 6257 @@: 6257 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.191 6257 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.192 6257 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.193 6257 ****************** expansion: @B (case-insensitive) = ..@.@@.1.194 6257 ****************** expansion: @F (case-insensitive) = ..@.@@.1.195 6257 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.196 6257 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.197 6257 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.198 6257 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.191 6257 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.192 6257 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.193 6257 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.194 6257 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.195 6257 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.196 6257 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.197 6257 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.198 6257 ****************** expansion: __@@_num = 199 6258 00006887 E8760B call getbyte ; get drive number (DL) 6259 0000688A A8 db __TEST_IMM8 ; (skip lodsb) 6260 @@: 6260 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.192 6260 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.193 6260 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.194 6260 ****************** expansion: @B (case-insensitive) = ..@.@@.1.195 6260 ****************** expansion: @F (case-insensitive) = ..@.@@.1.196 6260 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.197 6260 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.198 6260 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.199 6260 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.192 6260 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.193 6260 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.194 6260 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.195 6260 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.196 6260 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.197 6260 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.198 6260 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.199 6260 ****************** expansion: __@@_num = 200 6261 0000688B AC lodsb 6262 0000688C E8F00B call skipcomm0 6263 0000688F 52 push dx 6264 00006890 80C241 add dl, 'A' 6265 00006893 8816[F944] mov byte [driveno], dl 6266 00006897 E87307 call getdword ; get relative sector number 6267 0000689A E8E20B call skipcomm0 6268 0000689D 53 push bx ; save sector number high 6269 0000689E 52 push dx ; save sector number low 6270 0000689F 56 push si ; in case we find an error 6271 000068A0 E84D0B call getword ; get sector count 6272 000068A3 4A dec dx 6273 000068A4 39FA cmp dx, di 6274 000068A6 739F jae errorj7 ; if too many sectors 6275 000068A8 42 inc dx 6276 000068A9 89D1 mov cx, dx 6277 000068AB E8C50B call chkeol ; expect end of line 6278 000068AE F606[8400]07 testopt [internalflags], oldpacket| newpacket| ntpacket 6278 ****************** expansion: adr = '[internalflags]' 6278 ****************** expansion: len = 15 6278 ****************** expansion: tf = '[' 6278 ****************** expansion: tb = ']' 6278 ****************** expansion: adr = 'internalflags' 6278 ****************** expansion: adr = internalflags 6279 000068B3 750D jnz plw3 ; if using a packet --> 6280 000068B5 5E pop si ; in case of error 6281 000068B6 5A pop dx ; get LoWord starting logical sector number 6282 000068B7 5B pop bx ; get HiWord 6283 000068B8 85DB test bx, bx ; just a 16-bit sector number possible 6284 000068BA 758B jnz errorj7 ; if too big 6285 000068BC 58 pop ax ; drive number 6286 000068BD 5B pop bx ; transfer buffer ofs 6287 000068BE 1F pop ds ; transfer buffer seg 6288 000068BF 85C9 test cx, cx ; NZ 6289 plw2: 6290 000068C1 C3 retn 6291 6292 ; disk I/O packet for Int25/Int26, Int21.7305, VDD 6293 plw3: 6294 000068C2 5B pop bx ; discard si 6295 000068C3 BB[7051] mov bx, packet 6296 000068C6 8F07 pop word [bx+0] ; LoWord sector number 6297 000068C8 8F4702 pop word [bx+2] ; HiWord sector number 6298 000068CB 894F04 mov word [bx+4], cx ; number of sectors 6299 000068CE 58 pop ax ; drive number 6300 000068CF 8F4706 pop word [bx+6] ; transfer address ofs 6301 000068D2 5A pop dx 6302 000068D3 31C9 xor cx, cx 6303 %if _PM 6304 call ispm 6305 jnz plw3_1 6306 cmp byte [dpmi32], 0 6307 jz plw3_1 6308 cpu 386 6309 mov word [bx+10], dx ; save segment of transfer buffer 6310 movzx ebx, bx 6311 shr edx, 16 ; get HiWord(offset) 6312 cmp byte [bAddr32], 1 6313 jz plw3_1 6314 xor dx, dx 6315 cpu 8086 6316 plw3_1: 6317 %endif 6318 000068D5 895708 mov word [bx+8], dx ; transfer address seg 6319 000068D8 49 dec cx ; NZ and make cx = -1 6320 000068D9 C3 retn 6321 6322 6323 %include "expr.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug expression evaluator 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> ;--- get a valid offset for segment in BX 21 <1> 22 <1> %if _PM 23 <1> ; INP: bx = segment 24 <1> ; b[bAddr32] = current 32-bit segment status 25 <1> ; OUT: DEBUGX: edx = offset (even if 16-bit PM/RM segment) 26 <1> ; DEBUG: dx = offset 27 <1> ; b[bAddr32] = 1 if a 32-bit segment 28 <1> ; b[bAddr32] = unchanged if a 16-bit segment 29 <1> getofsforbx: 30 <1> _386 xor edx, edx ; properly initialize high word 31 <1> call testattrhigh 32 <1> jz getword ; 16-bit segment --> 33 <1> cpu 386 34 <1> mov byte [bAddr32], 1 35 <1> push bx 36 <1> call getdword 37 <1> push bx 38 <1> push dx 39 <1> pop edx 40 <1> pop bx 41 <1> retn 42 <1> cpu 8086 43 <1> %else 44 <1> getofsforbx: equ getword 45 <1> %endif 46 <1> 47 000068DA E91EFE <1> errorj10: jmp error 48 <1> 49 <1> 50 <1> ; GETRANGE - Get address range from input line. 51 <1> ; a range consists of either start and end address 52 <1> ; or a start address, a 'L' and a length. 53 <1> ; Entry AL First character of range 54 <1> ; SI Address of next character 55 <1> ; BX Default segment to use 56 <1> ; CX Default length to use (or 0 if not allowed) 57 <1> ; Exit AL First character beyond range 58 <1> ; SI Address of the character after that 59 <1> ; BX:(E)DX First address in range 60 <1> ; BX:(E)CX Last address in range 61 <1> ; Uses AH 62 <1> 63 <1> getrangeX: 64 <1> %if _PM 65 <1> push cx 66 <1> call getaddrX 67 <1> jmp short getrange.common 68 <1> %endif 69 <1> 70 <1> getrange: 71 000068DD 51 <1> push cx ; save the default length 72 000068DE E85500 <1> call getaddr ; get address into bx:(e)dx (sets bAddr32) (returns edx) 73 <1> .common: 74 000068E1 56 <1> push si 75 000068E2 E89A0B <1> call skipcomm0 76 000068E5 3C20 <1> cmp al, 32 77 000068E7 7715 <1> ja gr2 78 000068E9 5E <1> pop si ; restore si and cx 79 <1> _386_PM xor ecx, ecx ; clear ecxh 80 000068EA 59 <1> pop cx 81 000068EB 4E <1> dec si ; restore al 82 000068EC AC <1> lodsb 83 000068ED E3EB <1> jcxz errorj10 ; if a range is mandatory 84 000068EF 30E4 <1> xor ah, ah 85 <1> gr3.addcheck: 86 <1> _386_PM cmp byte [bAddr32], 0 87 <1> _386_PM je .16 88 <1> _386_PM dec ecx 89 <1> _386_PM add ecx, edx 90 <1> _386_PM jnc gr1 ; if no wraparound 91 <1> _386_PM or ecx, byte -1 ; go to end of segment 92 <1> _386_PM jmp short .checkgr3 93 <1> .16: 94 000068F1 49 <1> dec cx 95 000068F2 01D1 <1> add cx, dx 96 000068F4 7307 <1> jnc gr1 ; if no wraparound 97 000068F6 B9FFFF <1> mov cx, -1 ; go to end of segment 98 <1> .checkgr3: 99 000068F9 84E4 <1> test ah, ah 100 000068FB 75DD <1> jnz short errorj10 ; if specified length wrapped --> 101 <1> gr1: 102 000068FD C3 <1> retn 103 <1> 104 <1> gr2: 105 000068FE 83C404 <1> add sp, byte 4 ; discard saved cx, si 106 00006901 E8ACEF <1> call uppercase 107 00006904 3C4C <1> cmp al, 'L' 108 00006906 740C <1> je gr3 ; if a range is given 109 <1> ; call skipwh0 ; get next nonblank 110 <1> _386_PM_o32 ; xchg ecx, edx 111 00006908 87CA <1> xchg cx, dx 112 0000690A E8E30A <1> call getofsforbx ; (DEBUGX: returns edx no matter what) 113 <1> _386_PM_o32 ; xchg ecx, edx 114 0000690D 87CA <1> xchg cx, dx 115 <1> _386_PM_o32 ; cmp edx, ecx 116 0000690F 39CA <1> cmp dx, cx 117 00006911 7720 <1> ja short errorj2 ; if empty range --> 118 00006913 C3 <1> retn 119 <1> 120 <1> gr3: 121 00006914 E8670B <1> call skipcomma ; discard the 'l' 122 <1> ;--- a range is entered with the L/ength argument 123 <1> ;--- get a valid length for segment in BX 124 00006917 52 <1> push dx 125 00006918 53 <1> push bx 126 <1> _386_PM call testattrhigh 127 <1> _386_PM pushf 128 00006919 E8F106 <1> call getdword 129 <1> _386_PM popf 130 <1> _386_PM jz .not16_64kib ; don't check for <= 64 KiB 131 0000691C 83FB01 <1> cmp bx, byte 1 132 0000691F 7206 <1> jb .not16_64kib ; < 64 KiB in 16-bit segment --> 133 00006921 7510 <1> jne short errorj2 ; 16-bit segment, above 64 KiB --> 134 00006923 85D2 <1> test dx, dx 135 00006925 750C <1> jnz short errorj2 ; 16-bit segment, above 64 KiB --> 136 <1> .not16_64kib: 137 <1> %if _PM 138 <1> _386 push bx ; (only push high word on 386+) 139 <1> push dx 140 <1> _386_o32 ; pop ecx ; mov ecx, bxdx 141 <1> pop cx ; mov cx, dx 142 <1> %else 143 00006927 89D1 <1> mov cx, dx 144 <1> %endif 145 00006929 09D3 <1> or bx, dx ; zero ? 146 0000692B 7406 <1> jz short errorj2 ; yes, error --> 147 0000692D 5B <1> pop bx 148 0000692E 5A <1> pop dx 149 0000692F B401 <1> mov ah, 1 150 00006931 EBBE <1> jmp short .addcheck 151 <1> 152 <1> %ifn _PM 153 <1> errorj2: 154 00006933 E9C5FD <1> jmp error 155 <1> %endif 156 <1> 157 <1> 158 <1> ; GETADDR - Get address from input line. 159 <1> ; Entry AL First character of address 160 <1> ; SI Address of next character 161 <1> ; BX Default segment to use 162 <1> ; Exit AL First character beyond address 163 <1> ; SI Address of the character after that 164 <1> ; BX:(E)DX Address found 165 <1> ; Uses AH,CX 166 <1> 167 <1> getaddr: 168 <1> %if _PM 169 <1> call getaddrX 170 <1> jmp verifysegm ; make BX a writeable segment 171 <1> 172 <1> ; getaddrX differs from getaddr in that BX is not ensured 173 <1> ; to be writeable in PM. 174 <1> ; 175 <1> ; For DEBUG without PM support, getaddr is getaddrX. Both don't return CF. 176 <1> 177 <1> getaddrX: 178 <1> mov byte [bAddr32], 0 179 <1> cmp al, '$' ; a real-mode segment? 180 <1> jne ga1_1 181 <1> lodsb 182 <1> call getword 183 <1> call ispm ; need to translate ? 184 <1> jnz .checkseg ; no --> 185 <1> mov bx, dx 186 <1> push ax 187 <1> mov ax, 0002h 188 <1> int 31h 189 <1> jc short errorj2 190 <1> mov bx, ax 191 <1> mov dx, ax 192 <1> ;pop ax 193 <1> ;push si 194 <1> .checkseg: 195 <1> call skipwh0 196 <1> cmp al, ':' ; was a segment at all? 197 <1> je ga2 ; yes --> 198 <1> errorj2: 199 <1> jmp error 200 <1> %else 201 <1> getaddrX: 202 <1> %endif 203 <1> ga1_1: 204 00006936 E8B70A <1> call getofsforbx 205 00006939 56 <1> push si 206 0000693A E8700B <1> call skipwh0 207 0000693D 3C3A <1> cmp al, ':' 208 0000693F 7404 <1> je ga2 ; if this is a segment/selector --> 209 00006941 5E <1> pop si 210 00006942 4E <1> dec si 211 00006943 AC <1> lodsb 212 00006944 C3 <1> retn 213 <1> 214 <1> ga2: 215 <1> _386_PM cmp edx, 0001_0000h ; segment/selector fits in word ? 216 <1> _386_PM jae short errorj2 ; no --> 217 00006945 58 <1> pop ax ; throw away saved si 218 00006946 89D3 <1> mov bx, dx ; mov segment into BX 219 00006948 E8610B <1> call skipwhite ; skip to next word 220 0000694B E9A20A <1> jmp getofsforbx 221 <1> 222 <1> 223 <1> ; GETSTR - Get string of bytes. Put the answer in line_out. 224 <1> ; Entry AL first character 225 <1> ; SI address of next character 226 <1> ; Exit [line_out] first byte of string 227 <1> ; DI address of last+1 byte of string 228 <1> ; Uses AX,CL,DL,SI 229 <1> 230 <1> getstr: 231 0000694E BF[A901] <1> mov di, line_out 232 00006951 E8140B <1> call iseol? 233 00006954 74DD <1> je short errorj2 ; we don't allow empty byte strings 234 <1> gs1: 235 00006956 3C27 <1> cmp al, "'" 236 00006958 740C <1> je gs2 ; if string 237 0000695A 3C22 <1> cmp al, '"' 238 0000695C 7408 <1> je gs2 ; ditto 239 0000695E E89F0A <1> call getbyte ; byte in DL 240 00006961 8815 <1> mov byte [di], dl ; store the byte 241 00006963 47 <1> inc di 242 00006964 EB13 <1> jmp short gs6 243 <1> 244 <1> gs2: 245 00006966 88C4 <1> mov ah, al ; save quote character 246 <1> gs3: 247 00006968 AC <1> lodsb 248 00006969 38E0 <1> cmp al, ah 249 0000696B 7407 <1> je gs5 ; if possible end of string 250 0000696D 3C0D <1> cmp al, 13 251 0000696F 74C2 <1> je short errorj2 ; if end of line 252 <1> gs4: 253 00006971 AA <1> stosb ; save character and continue 254 00006972 EBF4 <1> jmp short gs3 255 <1> 256 <1> gs5: 257 00006974 AC <1> lodsb 258 00006975 38E0 <1> cmp al, ah 259 00006977 74F8 <1> je gs4 ; if doubled quote character 260 <1> gs6: 261 00006979 E8030B <1> call skipcomm0 ; go back for more 262 0000697C E8E90A <1> call iseol? 263 0000697F 75D5 <1> jne gs1 ; if not done yet 264 <1> .ret: 265 00006981 C3 <1> retn 266 <1> 267 <1> isbracketorunaryoperator?: 268 00006982 E80900 <1> call isunaryoperator? 269 00006985 7406 <1> je .yes 270 <1> %if _INDIRECTION 271 00006987 3C5B <1> cmp al, '[' 272 00006989 7402 <1> je .yes 273 <1> %endif 274 0000698B 3C28 <1> cmp al, '(' 275 <1> .yes: 276 0000698D C3 <1> retn 277 <1> 278 <1> 279 <1> ; Is al one of the simple unary operators? 280 <1> ; OUT: NZ if not 281 <1> ; ZR if so, 282 <1> ; NC 283 <1> ; cx = index into unaryoperators 284 <1> isunaryoperator?: 285 0000698E 57 <1> push di 286 0000698F BF[A051] <1> mov di, unaryoperators 287 00006992 EB04 <1> jmp short isoperator?.common 288 <1> 289 <1> ; See previous description. 290 <1> isoperator?: 291 00006994 57 <1> push di 292 00006995 BF[9251] <1> mov di, operators 293 <1> .common: 294 00006998 8B0D <1> mov cx, word [di] 295 0000699A 51 <1> push cx 296 0000699B AF <1> scasw 297 0000699C F2AE <1> repne scasb 298 0000699E 5F <1> pop di 299 0000699F 7507 <1> jne .no 300 000069A1 F7D9 <1> neg cx 301 000069A3 01F9 <1> add cx, di 302 000069A5 49 <1> dec cx 303 000069A6 38C0 <1> cmp al, al ; NC, ZR 304 <1> .no: 305 000069A8 5F <1> pop di 306 000069A9 C3 <1> retn 307 <1> 308 <1> ; INP: al = character 309 <1> ; OUT: al = capitalised character 310 <1> ; ZR, NC if a separator 311 <1> ; NZ if no separator 312 <1> isseparator?: 313 000069AA E803EF <1> call uppercase 314 000069AD 51 <1> push cx 315 <1> %if _EXPRESSIONS 316 000069AE E8E3FF <1> call isoperator? ; normal operators are separators (also handles equality sign) 317 000069B1 740A <1> je .yes ; if match --> (ZR, NC) 318 <1> %endif 319 000069B3 57 <1> push di 320 000069B4 BF[4A52] <1> mov di, separators 321 000069B7 8B0D <1> mov cx, word [di] 322 000069B9 AF <1> scasw 323 000069BA F2AE <1> repne scasb ; ZR, NC on match, NZ else 324 000069BC 5F <1> pop di 325 <1> .yes: 326 000069BD 59 <1> pop cx 327 000069BE C3 <1> retn 328 <1> 329 <1> 330 <1> ; Does one of the type operators start in input? 331 <1> ; 332 <1> ; INP: al = first character 333 <1> ; si-> next character 334 <1> ; OUT: Iff NC, 335 <1> ; bx>>1 = offset into typebitmasks and typehandlers tables 336 <1> ; bx&1 = set iff signed type 337 <1> ; di-> behind the type operator 338 <1> ; CHG: bx, cx, di 339 <1> ; 340 <1> ; Note: Signed types are specified by an S prefix to 341 <1> ; the type names. Only non-address types can 342 <1> ; be signed (that is, offset, segment, and 343 <1> ; pointer cannot be signed). 344 <1> ; Types can be specified with abbreviated names, 345 <1> ; except where that would clash with numeric 346 <1> ; input or a register name or ambiguity would 347 <1> ; be caused. These cases are: 348 <1> ; SS, S (short, seg, signed, ss) 349 <1> ; B (byte, numeric 0Bh) 350 <1> ; C (char, numeric 0Ch) 351 <1> ; D (dword, numeric 0Dh) 352 <1> istype?: 353 <1> %if maxtypesize & 1 354 000069BF B90800 <1> mov cx, maxtypesize+1 ; = maximum count + 1 355 <1> %else 356 <1> mov cx, maxtypesize ; = maximum count 357 <1> %endif 358 <1> ; cx is even here! 359 000069C2 52 <1> push dx 360 000069C3 50 <1> push ax 361 000069C4 56 <1> push si 362 <1> 363 000069C5 29CC <1> sub sp, cx ; allocate name buffer 364 000069C7 89E7 <1> mov di, sp ; -> name buffer 365 000069C9 57 <1> push di 366 000069CA 31DB <1> xor bx, bx ; initialise count 367 <1> %ifn maxtypesize & 1 368 <1> inc cx ; = maximum count + 1 369 <1> %endif 370 <1> ; The +1 does not represent an off-by-one 371 <1> ; because the below loop stores to the 372 <1> ; buffer at the beginning of subsequent 373 <1> ; iterations, after checking cx. 374 <1> 375 000069CC A9 <1> db __TEST_IMM16 ; (skip stosb and lodsb) 376 <1> .storename: 377 000069CD AA <1> stosb ; store in name buffer 378 000069CE AC <1> lodsb ; get next character to check 379 000069CF E8DEEE <1> call uppercase 380 000069D2 51 <1> push cx 381 000069D3 E8ACFF <1> call isbracketorunaryoperator? ; terminator ? 382 000069D6 59 <1> pop cx 383 000069D7 7413 <1> je .endname 384 000069D9 E88C0A <1> call iseol? 385 000069DC 740E <1> je .endname 386 000069DE 3C20 <1> cmp al, 32 387 000069E0 740A <1> je .endname 388 000069E2 3C09 <1> cmp al, 9 389 000069E4 7406 <1> je .endname ; yes --> 390 <1> ; We don't check for digits here. 391 <1> ; Immediate values and variables 392 <1> ; must leave a space inbetween. 393 000069E6 43 <1> inc bx ; count characters 394 000069E7 E2E4 <1> loop .storename ; count remaining buffer space 395 <1> ; Here, the potential name was too 396 <1> ; long for a valid type name. 397 000069E9 F9 <1> stc 398 000069EA EB1F <1> jmp short .done ; --> 399 <1> 400 <1> .endname: 401 000069EC E8BE0A <1> call skipwh0 ; skip to next field 402 000069EF 4E <1> dec si ; -> behind potential name 403 000069F0 5F <1> pop di ; -> name buffer 404 000069F1 89D9 <1> mov cx, bx ; cx = length 405 000069F3 56 <1> push si ; save position in input line 406 000069F4 89FE <1> mov si, di ; si-> name buffer 407 000069F6 53 <1> push bx 408 000069F7 57 <1> push di 409 000069F8 F8 <1> clc ; indicate unsigned check 410 000069F9 E81900 <1> call isunsignedtype? ; matches an unsigned type ? 411 000069FC 5E <1> pop si 412 000069FD 59 <1> pop cx 413 000069FE 730B <1> jnc .done ; yes --> 414 <1> 415 00006A00 AC <1> lodsb ; al = first, si-> second character 416 00006A01 49 <1> dec cx ; cx = length less one 417 00006A02 3C53 <1> cmp al, 'S' ; first character an "S" ? 418 00006A04 F9 <1> stc ; (indicate signed check, or: no type) 419 00006A05 7504 <1> jne .done ; no, not signed either --> 420 00006A07 E80B00 <1> call isunsignedtype? ; matches an unsigned type now ? 421 00006A0A 43 <1> inc bx ; if NC, set to indicate signed type 422 <1> .done: 423 00006A0B 9F <1> lahf 424 00006A0C 5F <1> pop di ; if NC, -> behind matched type name 425 00006A0D 83C408 <1> add sp, (maxtypesize+1) & ~1 ; discard name buffer 426 00006A10 5E <1> pop si 427 00006A11 9E <1> sahf 428 00006A12 58 <1> pop ax 429 00006A13 5A <1> pop dx 430 00006A14 C3 <1> retn 431 <1> 432 <1> ; Does one of the unsigned type operators start in buffer? 433 <1> ; 434 <1> ; INP: si-> name buffer with capitalised potential name 435 <1> ; cx = length of potential name 436 <1> ; CY iff looking for signed type 437 <1> ; OUT: Iff NC, 438 <1> ; bx>>1 = offset into typebitmasks and typehandlers tables 439 <1> ; bx&1 = 0 440 <1> ; CHG: ax, bx, cx, dx, si, di 441 <1> isunsignedtype?: 442 00006A15 BF[504A] <1> mov di, types 443 00006A18 19D2 <1> sbb dx, dx ; 0FFFFh if signed check else 0 444 00006A1A E33C <1> jcxz .notype ; if zero characters --> 445 00006A1C E210 <1> loop .single_character_checked ; if not single character --> 446 <1> 447 00006A1E AC <1> lodsb ; get that character 448 00006A1F 3C53 <1> cmp al, 'S' ; specified "S" or "SS" ? 449 00006A21 7435 <1> je .notype ; yes, not allowed --> 450 00006A23 08D0 <1> or al, dl ; iff signed check, al |= 0FFh 451 00006A25 4E <1> dec si ; (restore) 452 00006A26 3C41 <1> cmp al, 'A' ; specified only a valid digit ? 453 00006A28 7204 <1> jb .single_character_checked 454 00006A2A 3C47 <1> cmp al, 'F'+1 455 00006A2C 722A <1> jb .notype ; yes, not allowed --> 456 <1> 457 <1> .single_character_checked: 458 00006A2E 41 <1> inc cx ; (restore) 459 00006A2F 83E2E1 <1> and dx, types.addresses-types.end ; = 0 iff unsigned check 460 00006A32 31C0 <1> xor ax, ax ; initialise ah, and ax = 0 first 461 00006A34 31DB <1> xor bx, bx 462 00006A36 87FE <1> xchg di, si 463 00006A38 81C2[8F4A] <1> add dx, types.end ; = .addresses for signed check, 464 <1> ; = .end for unsigned check 465 <1> 466 <1> ; Before each iteration, 467 <1> ; si-> byte-counted next name to check 468 <1> ; di-> potential name (in name buffer) 469 <1> ; cx = cl = length of potential name 470 <1> ; (dx-1) = maximum value for si 471 <1> ; ah = 0 472 <1> ; Before the first iteration additionally, 473 <1> ; bx&~3 = index to return for this name (if match) 474 <1> ; al = 0 475 <1> ; Before subsequent iterations additionally, 476 <1> ; (bx+2)&~3 = index to return for this name (if match) 477 <1> ; al = offset to add to si first 478 00006A3C A9 <1> db __TEST_IMM16 ; (skip two times inc bx) 479 <1> .loop: 480 00006A3D 43 <1> inc bx 481 00006A3E 43 <1> inc bx ; increase index 482 00006A3F 01C6 <1> add si, ax ; -> next table entry 483 00006A41 AC <1> lodsb ; ax = length of full name 484 00006A42 39D6 <1> cmp si, dx ; checked all allowed names? 485 00006A44 7312 <1> jae .notype ; yes, done --> 486 00006A46 39C8 <1> cmp ax, cx ; full name large enough ? 487 00006A48 72F3 <1> jb .loop ; no --> 488 00006A4A 57 <1> push di 489 00006A4B 51 <1> push cx 490 00006A4C 56 <1> push si 491 00006A4D F3A6 <1> repe cmpsb ; potential name matches ? 492 00006A4F 5E <1> pop si 493 00006A50 59 <1> pop cx 494 00006A51 5F <1> pop di 495 00006A52 75E9 <1> jne .loop ; no --> 496 <1> 497 00006A54 80E3FC <1> and bl, ~3 ; conflate alternative type names 498 00006A57 A8 <1> db __TEST_IMM8 ; (NC, skip stc) 499 <1> .notype: 500 00006A58 F9 <1> stc 501 00006A59 C3 <1> retn 502 <1> 503 <1> 504 <1> usesection lDEBUG_DATA_ENTRY 504 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 505 <1> 506 <1> ; Table of bit masks and shift counts to determine 507 <1> ; how a type modifies the bit mask of required bytes. 508 <1> ; 509 <1> ; It would be possible to always retrieve a full dword 510 <1> ; from memory to process indirection in expressions, 511 <1> ; but this could fault if accessing inexistent data. 512 <1> ; Hence the debugger should minimise memory access. 513 <1> ; For this reason, types allow the expression evaluator 514 <1> ; to keep track which of the term's bytes are actually 515 <1> ; going to be used. The bit mask of required bytes 516 <1> ; indicates which bytes are not discarded by any of a 517 <1> ; term's type operators. 518 <1> ; 519 <1> ; The second byte of each entry (applied to ch by the 520 <1> ; reader, ie high byte of cx) indicates a mask to 521 <1> ; apply to the bit mask of required bytes. Note that 522 <1> ; this mask is applied first, before the shift that's 523 <1> ; described next. 524 <1> ; The first byte of each entry (loaded into cl by the 525 <1> ; reader, ie low byte of cx) indicates a shift left 526 <1> ; count to apply to the bit mask of required bytes. 527 <1> ; (Only the segment type doesn't have 0 currently.) 528 <1> ; 529 <1> ; Note that types are parsed forwards through the input 530 <1> ; (ie the specified command) but are actually applied 531 <1> ; to the numeric value they refer to backwards, that 532 <1> ; is, a type that is closer to the term in the input 533 <1> ; is applied to the term's result before a type that's 534 <1> ; farther from the term. 535 <1> ; Misleadingly, this reversal isn't very apparent in 536 <1> ; most processing of the type and unary operators. 537 <1> ; The segment type's shifting and masking reflects the 538 <1> ; reversal: while the actual operation is to shift 539 <1> ; right then restrict to the low word, the entry in 540 <1> ; this table indicates to restrict the bit mask to 541 <1> ; the low word then shift left. 542 <1> typebitmasks: 543 0000517A 0001 <1> db 0, 1b ; byte 544 0000517C 0003 <1> db 0, 11b ; word 545 0000517E 000F <1> db 0, 1111b ; dword 546 00005180 000F <1> db 0, 1111b ; pointer 547 00005182 0003 <1> db 0, 11b ; offset 548 00005184 0203 <1> db 2, 11b ; segment 549 <1> 550 <1> 551 <1> ; Dispatch table for type conversion functions. 552 <1> ; 553 <1> ; INP: bx:dx = dword input 554 <1> ; CF = signedness of type conversion 555 <1> ; ah from lahf with the same CF as current 556 <1> ; OUT: bx:dx = new value 557 <1> ; ah = non-zero if to use as far pointer 558 <1> ; ZF = whether ah zero 559 <1> ; CHG: - 560 <1> ; 561 <1> ; This needs to: enter type in ah, 562 <1> ; and return type in ah. 563 <1> ; Type format: &0Fh = type (1 byte, 2 word, 4 dword), 564 <1> ; &80h = signed (test ah,ah; js ...) 565 <1> ; &40h = reserved for ptr type 566 <1> typehandlers: 567 00005186 [5E6A] <1> dw handlebyte 568 00005188 [696A] <1> dw handleword 569 0000518A [736A] <1> dw handledword 570 0000518C [766A] <1> dw handlepointer 571 0000518E [696A] <1> dw handleoffset 572 00005190 [5A6A] <1> dw handlesegment 573 <1> 574 <1> 575 <1> usesection lDEBUG_CODE 575 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 576 <1> 577 <1> handlesegment: 578 00006A5A 89DA <1> mov dx, bx 579 00006A5C EB0B <1> jmp short handleword 580 <1> handleoffset equ handleword 581 <1> 582 <1> handlebyte: 583 00006A5E B600 <1> mov dh, 0 584 00006A60 7307 <1> jnc .zero ; (iff unsigned type -->) 585 00006A62 08D2 <1> or dl, dl ; signed ? 586 00006A64 7902 <1> jns .zero_f ; no --> 587 00006A66 FECE <1> dec dh 588 <1> .zero_f: 589 00006A68 9E <1> sahf ; restore CF 590 <1> .zero: 591 <1> handleword: 592 00006A69 BB0000 <1> mov bx, 0 593 00006A6C 7305 <1> jnc .zero ; (iff unsigned type -->) 594 00006A6E 85D2 <1> test dx, dx ; signed ? 595 00006A70 7901 <1> jns .zero_f ; no --> 596 00006A72 4B <1> dec bx 597 <1> .zero_f: 598 <1> ; sahf ; restore CF 599 <1> ; (commented because the below doesn't use CF) 600 <1> .zero: 601 <1> handledword: 602 00006A73 30E4 <1> xor ah, ah 603 00006A75 C3 <1> retn 604 <1> 605 <1> handlepointer: 606 00006A76 80CC01 <1> or ah, 1 607 00006A79 C3 <1> retn 608 <1> 609 <1> 610 <1> usesection lDEBUG_DATA_ENTRY 610 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 611 <1> 612 <1> ; List of binary and unary operators. 613 <1> ; The order has to match that in the respective 614 <1> ; operator handler dispatch table below. 615 00005192 0C002B2D2A2F253C3E- <1> operators: countedw "+-*/%<>=!|&^" 615 ****************** <1> expansion: len = 0 615 ****************** <1> expansion: addlen = 12 615 ****************** <1> expansion: len = 12 615 0000519B 3D217C265E <1> 616 000051A0 05002B2D7E213F <1> unaryoperators: countedw "+-~!?" 616 ****************** <1> expansion: len = 0 616 ****************** <1> expansion: addlen = 5 616 ****************** <1> expansion: len = 5 617 <1> 618 <1> 619 <1> ; Dispatch table for unary operators, 620 <1> ; used by getexpression. 621 <1> ; Functions in this table are called with: 622 <1> ; 623 <1> ; INP: bx:dx = number 624 <1> ; OUT: bx:dx = result 625 <1> ; CHG: - 626 <1> ; Note: Type info is not yet implemented. 627 <1> unaryoperatorhandlers: 628 000051A7 [866A] <1> dw uoh_plus ; + 629 000051A9 [7F6A] <1> dw uoh_minus ; - 630 000051AB [876A] <1> dw uoh_not_bitwise ; ~ 631 000051AD [8C6A] <1> dw uoh_not_boolean ; ! 632 000051AF [7A6A] <1> dw uoh_abs ; ? 633 <1> 634 <1> 635 <1> usesection lDEBUG_CODE 635 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 636 <1> 637 <1> uoh_abs: 638 00006A7A F6C780 <1> test bh, 80h ; negative ? 639 00006A7D 7407 <1> jz uoh_plus ; no --> 640 <1> uoh_minus: 641 00006A7F F7DB <1> neg bx 642 00006A81 F7DA <1> neg dx 643 00006A83 83DB00 <1> sbb bx, byte 0 ; neg bx:dx 644 <1> uoh_plus: ; (nop) 645 00006A86 C3 <1> retn 646 <1> 647 <1> uoh_not_bitwise: 648 00006A87 F7D3 <1> not bx 649 00006A89 F7D2 <1> not dx 650 00006A8B C3 <1> retn 651 <1> 652 <1> uoh_not_boolean: 653 00006A8C E8A302 <1> call toboolean 654 00006A8F 80F201 <1> xor dl, 1 ; toggle only bit 0 655 00006A92 C3 <1> retn 656 <1> 657 <1> 658 <1> usesection lDEBUG_DATA_ENTRY 658 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 659 <1> 660 <1> ; Word table operatordispatchers: order as in string operators 661 <1> ; Pointed functions dispatch depending on operator characters 662 <1> ; Return: operator index, 0 = invalid 663 <1> 664 <1> ; Operator index (byte): 665 <1> ; 0 = invalid, no operator found 666 <1> ; 1.. = 1-based index in byte table operatorprecedences 667 <1> ; = 1-based index in word table operatorfunctions 668 <1> 669 <1> 670 <1> ; Dispatch table for (binary) expression operators, 671 <1> ; used by getexpression. 672 <1> ; Functions in this table are called with: 673 <1> ; INP: al = operator character (which is also implicit) 674 <1> ; si-> remaining line (directly) behind operator character 675 <1> ; OUT: bl != 0 if a valid operator, 676 <1> ; bl = operator index 677 <1> ; si-> behind the last character belonging to the operator 678 <1> ; bl = 0 if no valid operator 679 <1> ; CHG: al, bh 680 <1> 681 <1> struc opprecs 681 ****************** <1> expansion: strucname = opprecs 682 00000000 <1> OPPREC_INVALID: resb 1 683 00000001 <1> OPPREC_BOOL_OR: resb 1 684 00000002 <1> OPPREC_BOOL_XOR:resb 1 685 00000003 <1> OPPREC_BOOL_AND:resb 1 686 00000004 <1> OPPREC_COMPARE: resb 1 687 00000005 <1> OPPREC_BIT_OR: resb 1 688 00000006 <1> OPPREC_BIT_XOR: resb 1 689 00000007 <1> OPPREC_BIT_AND: resb 1 690 00000008 <1> OPPREC_SHIFT: resb 1 691 00000009 <1> OPPREC_ADDSUB: resb 1 692 0000000A <1> OPPREC_MULDIV: resb 1 693 0000000B <1> OPPREC_POWER: resb 1 694 <1> OPPREC_RIGHTOP: ; (to process it first in getexpression) 695 <1> endstruc 696 <1> ; The number of precedence levels indicates how many 697 <1> ; intermediate results getexpression might have to save 698 <1> ; on its stack. With eleven levels of precedence, up to 699 <1> ; ten intermediate results are pushed by getexpression. 700 <1> ; (With 6 bytes each, that gives a moderate 60 bytes.) 701 <1> ; Key to this is that, in case of a low enough operator 702 <1> ; behind the one that triggered the pushing, the pushed 703 <1> ; value will be popped before proceeding. This way more 704 <1> ; intermediate results may be pushed later but the stack 705 <1> ; never holds intermediate results that don't need to be 706 <1> ; on the stack. 707 <1> 708 <1> OPPREC_BIT_ADJUST_BOOL equ OPPREC_BOOL_OR-OPPREC_BIT_OR 709 <1> OPPREC_COMPARE_ADJUST_SHIFT equ OPPREC_SHIFT-OPPREC_COMPARE 710 <1> 711 <1> ; This is the definition of operator index values. The tables 712 <1> ; operatorprecedences and operatorfunctions are ordered by this. 713 <1> ; The operator dispatchers return one of these. 714 <1> struc ops 714 ****************** <1> expansion: strucname = ops 715 00000000 <1> OPERATOR_INVALID: resb 1 ; 0 - invalid 716 00000001 <1> OPERATOR_PLUS: resb 1 ; + 717 00000002 <1> OPERATOR_MINUS: resb 1 ; - 718 00000003 <1> OPERATOR_MULTIPLY: resb 1 ; * 719 00000004 <1> OPERATOR_DIVIDE: resb 1 ; / 720 00000005 <1> OPERATOR_MODULO: resb 1 ; % 721 00000006 <1> OPERATOR_POWER: resb 1 ; ** 722 00000007 <1> OPERATOR_CMP_BELOW: resb 1 ; < 723 00000008 <1> OPERATOR_CMP_BELOW_EQUAL: resb 1 ; <= 724 00000009 <1> OPERATOR_CMP_ABOVE: resb 1 ; > 725 0000000A <1> OPERATOR_CMP_ABOVE_EQUAL: resb 1 ; >= 726 0000000B <1> OPERATOR_CMP_EQUAL: resb 1 ; == 727 0000000C <1> OPERATOR_CMP_NOT_EQUAL: resb 1 ; != 728 0000000D <1> OPERATOR_SHIFT_LEFT: resb 1 ; << 729 0000000E <1> OPERATOR_SHIFT_RIGHT: resb 1 ; >> 730 0000000F <1> OPERATOR_SHIFT_RIGHT_SIGNED: resb 1 ; >>> 731 00000010 <1> OPERATOR_BIT_MIRROR: resb 1 ; >< 732 00000011 <1> OPERATOR_BIT_OR: resb 1 ; | 733 00000012 <1> OPERATOR_BIT_XOR: resb 1 ; ^ 734 00000013 <1> OPERATOR_BIT_AND: resb 1 ; & 735 00000014 <1> OPERATOR_BOOL_OR: resb 1 ; || 736 00000015 <1> OPERATOR_BOOL_XOR: resb 1 ; ^^ 737 00000016 <1> OPERATOR_BOOL_AND: resb 1 ; && 738 <1> OPERATOR_RIGHTOP: ; (dummy right-operand operator) 739 <1> endstruc 740 <1> ; Order of BIT_* needs to be the same as that of BOOL_*. 741 <1> ; BOOL_* have to follow directly behind BIT_*. 742 <1> ; "r cf op= expr" depends on that. 743 <1> 744 <1> operatordispatchers: 745 000051B1 [966A] <1> dw od_plus ; + 746 000051B3 [936A] <1> dw od_minus ; - 747 000051B5 [996A] <1> dw od_multiply ; * ** 748 000051B7 [A36A] <1> dw od_divide ; / 749 000051B9 [A66A] <1> dw od_modulo ; % 750 000051BB [CE6A] <1> dw od_below ; < <> <= << 751 000051BD [A96A] <1> dw od_above ; > >< >= >> >>> 752 000051BF [EB6A] <1> dw od_equal ; == =< => 753 000051C1 [FD6A] <1> dw od_not ; != 754 000051C3 [056B] <1> dw od_or ; | || 755 000051C5 [106B] <1> dw od_and ; & && 756 000051C7 [1B6B] <1> dw od_xor ; ^ ^^ 757 <1> 758 <1> operatorprecedences: 759 000051C9 00 <1> db OPPREC_INVALID ; need this for some checks 760 000051CA 09 <1> db OPPREC_ADDSUB ; + 761 000051CB 09 <1> db OPPREC_ADDSUB ; - 762 000051CC 0A <1> db OPPREC_MULDIV ; * 763 000051CD 0A <1> db OPPREC_MULDIV ; / 764 000051CE 0A <1> db OPPREC_MULDIV ; % 765 000051CF 0B <1> db OPPREC_POWER ; ** 766 000051D0 04 <1> db OPPREC_COMPARE ; < 767 000051D1 04 <1> db OPPREC_COMPARE ; <= 768 000051D2 04 <1> db OPPREC_COMPARE ; > 769 000051D3 04 <1> db OPPREC_COMPARE ; >= 770 000051D4 04 <1> db OPPREC_COMPARE ; == 771 000051D5 04 <1> db OPPREC_COMPARE ; != 772 000051D6 08 <1> db OPPREC_SHIFT ; << 773 000051D7 08 <1> db OPPREC_SHIFT ; >> 774 000051D8 08 <1> db OPPREC_SHIFT ; >>> 775 000051D9 08 <1> db OPPREC_SHIFT ; >< 776 000051DA 05 <1> db OPPREC_BIT_OR ; | 777 000051DB 06 <1> db OPPREC_BIT_XOR ; ^ 778 000051DC 07 <1> db OPPREC_BIT_AND ; & 779 000051DD 01 <1> db OPPREC_BOOL_OR ; || 780 000051DE 02 <1> db OPPREC_BOOL_XOR ; ^^ 781 000051DF 03 <1> db OPPREC_BOOL_AND ; && 782 000051E0 0C <1> db OPPREC_RIGHTOP ; getexpression: no number yet 783 <1> 784 <1> operatorfunctions: 785 000051E1 [FB66] <1> dw error ; should not be called 786 000051E3 [496B] <1> dw of_plus ; + 787 000051E5 [466B] <1> dw of_minus ; - 788 000051E7 [526B] <1> dw of_multiply ; * 789 000051E9 [756B] <1> dw of_divide ; / 790 000051EB [266B] <1> dw of_modulo ; % 791 000051ED [E76B] <1> dw of_power ; ** 792 000051EF [3B6C] <1> dw of_compare_below ; < 793 000051F1 [346C] <1> dw of_compare_below_equal ; <= 794 000051F3 [576C] <1> dw of_compare_above ; > 795 000051F5 [506C] <1> dw of_compare_above_equal ; >= 796 000051F7 [496C] <1> dw of_compare_equal ; == 797 000051F9 [426C] <1> dw of_compare_not_equal ; != 798 000051FB [826C] <1> dw of_shift_left ; << 799 000051FD [6E6C] <1> dw of_shift_right ; >> 800 000051FF [786C] <1> dw of_shift_right_signed ; >>> 801 00005201 [A76C] <1> dw of_bit_mirror ; >< 802 00005203 [F06C] <1> dw of_or_bitwise ; | 803 00005205 [106D] <1> dw of_xor_bitwise ; ^ 804 00005207 [006D] <1> dw of_and_bitwise ; & 805 00005209 [F96C] <1> dw of_or_boolean ; || 806 0000520B [196D] <1> dw of_xor_boolean ; ^^ 807 0000520D [096D] <1> dw of_and_boolean ; && 808 0000520F [3C6D] <1> dw of_rightop ; set to right operand 809 <1> 810 <1> 811 <1> usesection lDEBUG_CODE 811 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 812 <1> 813 <1> od_minus: 814 00006A93 B302 <1> mov bl, OPERATOR_MINUS 815 00006A95 C3 <1> retn 816 <1> 817 <1> od_plus: 818 00006A96 B301 <1> mov bl, OPERATOR_PLUS 819 00006A98 C3 <1> retn 820 <1> 821 <1> od_multiply: 822 00006A99 B303 <1> mov bl, OPERATOR_MULTIPLY 823 00006A9B 3804 <1> cmp byte [si], al 824 00006A9D 7503 <1> jne .ret 825 00006A9F 46 <1> inc si 826 00006AA0 B306 <1> mov bl, OPERATOR_POWER 827 <1> .ret: 828 00006AA2 C3 <1> retn 829 <1> 830 <1> od_divide: 831 00006AA3 B304 <1> mov bl, OPERATOR_DIVIDE 832 00006AA5 C3 <1> retn 833 <1> 834 <1> od_modulo: 835 00006AA6 B305 <1> mov bl, OPERATOR_MODULO 836 00006AA8 C3 <1> retn 837 <1> 838 <1> od_above: 839 00006AA9 3804 <1> cmp byte [si], al 840 00006AAB 7411 <1> je .shr 841 00006AAD 803C3C <1> cmp byte [si], '<' 842 00006AB0 7418 <1> je .mirror 843 00006AB2 803C3D <1> cmp byte [si], '=' 844 00006AB5 7403 <1> je .cmp_ae 845 00006AB7 B309 <1> mov bl, OPERATOR_CMP_ABOVE 846 00006AB9 C3 <1> retn 847 <1> .cmp_ae: 848 00006ABA 46 <1> inc si 849 00006ABB B30A <1> mov bl, OPERATOR_CMP_ABOVE_EQUAL 850 00006ABD C3 <1> retn 851 <1> .shr: 852 00006ABE 46 <1> inc si 853 00006ABF 3804 <1> cmp byte [si], al 854 00006AC1 7403 <1> je .sar 855 00006AC3 B30E <1> mov bl, OPERATOR_SHIFT_RIGHT 856 00006AC5 C3 <1> retn 857 <1> .sar: 858 00006AC6 46 <1> inc si 859 00006AC7 B30F <1> mov bl, OPERATOR_SHIFT_RIGHT_SIGNED 860 00006AC9 C3 <1> retn 861 <1> .mirror: 862 00006ACA 46 <1> inc si 863 00006ACB B310 <1> mov bl, OPERATOR_BIT_MIRROR 864 00006ACD C3 <1> retn 865 <1> 866 <1> od_below: 867 00006ACE 3804 <1> cmp byte [si], al 868 00006AD0 7411 <1> je .shl 869 00006AD2 803C3E <1> cmp byte [si], '>' 870 00006AD5 7410 <1> je .ncmp 871 00006AD7 803C3D <1> cmp byte [si], '=' 872 00006ADA 7403 <1> je .cmp_be 873 00006ADC B307 <1> mov bl, OPERATOR_CMP_BELOW 874 00006ADE C3 <1> retn 875 <1> .cmp_be: 876 00006ADF 46 <1> inc si 877 00006AE0 B308 <1> mov bl, OPERATOR_CMP_BELOW_EQUAL 878 00006AE2 C3 <1> retn 879 <1> .shl: 880 00006AE3 46 <1> inc si 881 00006AE4 B30D <1> mov bl, OPERATOR_SHIFT_LEFT 882 00006AE6 C3 <1> retn 883 <1> .ncmp: 884 <1> od_not.ncmp: 885 00006AE7 46 <1> inc si 886 00006AE8 B30C <1> mov bl, OPERATOR_CMP_NOT_EQUAL 887 00006AEA C3 <1> retn 888 <1> 889 <1> od_equal: 890 00006AEB 803C3E <1> cmp byte [si], '>' 891 00006AEE 74CA <1> je od_above.cmp_ae 892 00006AF0 803C3C <1> cmp byte [si], '<' 893 00006AF3 74EA <1> je od_below.cmp_be 894 00006AF5 3804 <1> cmp byte [si], al 895 00006AF7 7509 <1> jne .invalid ; no valid operator --> 896 <1> .cmp: 897 00006AF9 46 <1> inc si 898 00006AFA B30B <1> mov bl, OPERATOR_CMP_EQUAL 899 00006AFC C3 <1> retn 900 <1> 901 <1> od_not: 902 00006AFD 803C3D <1> cmp byte [si], '=' 903 00006B00 74E5 <1> je .ncmp 904 <1> od_equal.invalid: 905 00006B02 B300 <1> mov bl, OPERATOR_INVALID 906 00006B04 C3 <1> retn 907 <1> 908 <1> od_or: 909 00006B05 3804 <1> cmp byte [si], al 910 00006B07 7403 <1> je .boolean 911 00006B09 B311 <1> mov bl, OPERATOR_BIT_OR 912 00006B0B C3 <1> retn 913 <1> .boolean: 914 00006B0C 46 <1> inc si 915 00006B0D B314 <1> mov bl, OPERATOR_BOOL_OR 916 00006B0F C3 <1> retn 917 <1> od_and: 918 00006B10 3804 <1> cmp byte [si], al 919 00006B12 7403 <1> je .boolean 920 00006B14 B313 <1> mov bl, OPERATOR_BIT_AND 921 00006B16 C3 <1> retn 922 <1> .boolean: 923 00006B17 46 <1> inc si 924 00006B18 B316 <1> mov bl, OPERATOR_BOOL_AND 925 00006B1A C3 <1> retn 926 <1> 927 <1> od_xor: 928 00006B1B 3804 <1> cmp byte [si], al 929 00006B1D 7403 <1> je .boolean 930 00006B1F B312 <1> mov bl, OPERATOR_BIT_XOR 931 00006B21 C3 <1> retn 932 <1> .boolean: 933 00006B22 46 <1> inc si 934 00006B23 B315 <1> mov bl, OPERATOR_BOOL_XOR 935 00006B25 C3 <1> retn 936 <1> 937 <1> 938 <1> ; (Binary) Expression operator functions, 939 <1> ; used by getexpression. 940 <1> ; These functions are called with: 941 <1> ; INP: d[hhvar] = previous number (left-hand operand) 942 <1> ; bx:dx = following number (right-hand operand) 943 <1> ; OUT: bx:dx = result 944 <1> ; CHG: ax, cx 945 <1> ; Note: Type info is not yet implemented. 946 <1> ; Errors (divisor zero) are currently simply handled 947 <1> ; by jumping to "error". 948 <1> ; getexpression mustn't be called after until hhvar is 949 <1> ; no longer used, as the call might overwrite hhvar. 950 <1> ; 951 <1> ; Type info (in ah and b[hhtype]) appears to be correctly 952 <1> ; passed to here already. However, how should that be used? 953 <1> ; 954 <1> ; Quite simply, doing any arithmetic on two unsigned numbers 955 <1> ; could return the smallest possible unsigned type (so that 956 <1> ; if the result is <= 255 then the type is 1, if <= 65536 957 <1> ; then the type is 2, else the type is 4). 958 <1> ; 959 <1> ; Handling two signed numbers here might be equally simple: 960 <1> ; if the result is >= -128 && <= 127 then the type is 81h, 961 <1> ; if the result is >= -32768 && <= 32767 then the type is 962 <1> ; 82h, otherwise the type is 84h. Have to look into this. 963 <1> ; (How does this interact with the unsignedness of the 964 <1> ; actual computations?) 965 <1> ; 966 <1> ; It gets hairy when one operand is signed and the other 967 <1> ; isn't; generally, two sub-cases of this exist: first, the 968 <1> ; signed operand is positive, second, the signed operand is 969 <1> ; negative. (Whether this distinction actually makes sense 970 <1> ; for the implementation is still to be determined.) 971 <1> ; Possible models: 972 <1> ; * Result is always signed. 973 <1> ; * Result is always unsigned(?!). 974 <1> ; * Result is treated as signed, but if it's positive its 975 <1> ; type is changed to unsigned. 976 <1> ; 977 <1> ; It is also possible that operators could be handled 978 <1> ; differently, for example, (some) bit and boolean 979 <1> ; operators could imply unsigned operands in any case. 980 <1> ; (>>> obviously implies a signed left operand already.) 981 <1> ; 982 <1> ; Note that (signed) negative bit shifting counts could 983 <1> ; imply reversing the operation; << becomes >> and such. 984 <1> ; 985 <1> ; Note that for the addition of, for example, bit rotation, 986 <1> ; it would be useful to retain the originally used type 987 <1> ; inside getdword. At the end of getdword, the current bit 988 <1> ; counting could be changed to use the "signed" bit of the 989 <1> ; types and then determine which signed or unsigned type is 990 <1> ; large enough to hold the value. (It might already work 991 <1> ; mostly like that.) (Is this specifically about binary 992 <1> ; operators? - No. In fact, binary operators are the most 993 <1> ; likely to be (one of) the syntactic element(s) which 994 <1> ; should change (and possible 'optimize') types. - Then 995 <1> ; this might still apply to unary operators, and brackets 996 <1> ; and parentheses. In particular, the later should call 997 <1> ; a different entry or instruct getdword not to optimize 998 <1> ; the type at the end so as to retain it. - Although in 999 <1> ; cases where that matters, the parentheses are arguably 1000 <1> ; unnecessary, aren't they?) 1001 <1> ; 1002 <1> ; It has to be decided whether there should be implicit 1003 <1> ; dispatching based on the operands' types' signedness. 1004 <1> ; For example, currently (with all operands being implied 1005 <1> ; to be unsigned) there exist >> and >>>, and there could 1006 <1> ; exist > and S>. With implicit signedness dispatching, the 1007 <1> ; behaviour of >> would change: it would expose the current 1008 <1> ; >>'s behaviour with an unsigned (left) operand, and the 1009 <1> ; current >>>'s behaviour with a signed (left) operand. 1010 <1> ; (Either U(nsigned)>> and S(igned)>> operators could then 1011 <1> ; exist, which would imply an unsigned or signed left 1012 <1> ; operand respectively, or the affected operands' signedness 1013 <1> ; could be changed with the currently available prefix or 1014 <1> ; possible new postfix unary operators. 1015 <1> of_modulo: 1016 00006B26 FF36[5A52] <1> push word [hhvar+2] 1017 00006B2A FF36[5852] <1> push word [hhvar] 1018 00006B2E 53 <1> push bx 1019 00006B2F 52 <1> push dx 1020 00006B30 E84200 <1> call of_divide ; bx:dx := prev / foll 1021 00006B33 8F06[5852] <1> pop word [hhvar] 1022 00006B37 8F06[5A52] <1> pop word [hhvar+2] 1023 00006B3B E81400 <1> call of_multiply ; bx:dx := (prev / foll) * foll 1024 00006B3E 8F06[5852] <1> pop word [hhvar] 1025 00006B42 8F06[5A52] <1> pop word [hhvar+2] 1026 <1> ; jmp short of_minus ; bx:dx := prev - ((prev / foll) * foll) 1027 <1> 1028 <1> of_minus: 1029 00006B46 E836FF <1> call uoh_minus 1030 <1> of_plus: 1031 00006B49 0316[5852] <1> add dx, word [hhvar] 1032 00006B4D 131E[5A52] <1> adc bx, word [hhvar+2] 1033 00006B51 C3 <1> retn 1034 <1> 1035 <1> of_multiply: ; bx:dx := var * bx:dx 1036 00006B52 56 <1> push si 1037 00006B53 57 <1> push di ; si:di is used as temporary storage 1038 00006B54 89D0 <1> mov ax, dx 1039 00006B56 50 <1> push ax 1040 00006B57 F726[5852] <1> mul word [hhvar] 1041 00006B5B 89C7 <1> mov di, ax 1042 00006B5D 89D6 <1> mov si, dx 1043 00006B5F 58 <1> pop ax 1044 00006B60 F726[5A52] <1> mul word [hhvar+2] 1045 00006B64 01C6 <1> add si, ax 1046 00006B66 89D8 <1> mov ax, bx 1047 00006B68 F726[5852] <1> mul word [hhvar] 1048 00006B6C 01C6 <1> add si, ax 1049 <1> ; bx*[hhvar+2] not required, completely overflows 1050 00006B6E 89FA <1> mov dx, di 1051 00006B70 89F3 <1> mov bx, si 1052 00006B72 5F <1> pop di 1053 00006B73 5E <1> pop si ; restore those 1054 00006B74 C3 <1> retn 1055 <1> 1056 <1> of_divide: ; bx:dx := var / bx:dx 1057 00006B75 53 <1> push bx 1058 00006B76 09D3 <1> or bx, dx ; divisor zero ? 1059 00006B78 5B <1> pop bx 1060 00006B79 7503E97DFB <1> jz error ; divisor zero ! 1061 00006B7E EB48 <1> _386_jmps .32 ; 386, use 32-bit code --> 1061 ****************** <1> expansion: entry = 27518 1061 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518 1061 ****************** <1> expansion: entry = 27519 1061 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519 1061 ****************** <1> expansion: entry = 27520 1062 00006B80 85DB <1> test bx, bx ; need only 16-bit divisor ? 1063 00006B82 7513 <1> jnz .difficultdiv16 ; nope --> 1064 00006B84 89D1 <1> mov cx, dx 1065 00006B86 31D2 <1> xor dx, dx 1066 00006B88 A1[5A52] <1> mov ax, word [hhvar+2] ; dx:ax = high word of previous number 1067 00006B8B F7F1 <1> div cx 1068 00006B8D 89C3 <1> mov bx, ax 1069 00006B8F A1[5852] <1> mov ax, word [hhvar] ; ax = low word of previous number, dx = remainder 1070 00006B92 F7F1 <1> div cx 1071 00006B94 89C2 <1> mov dx, ax ; bx:dx = result 1072 00006B96 C3 <1> retn 1073 <1> 1074 <1> .difficultdiv16: ; code adapted from Art of Assembly chapter 9 1075 <1> ; refer to http://www.plantation-productions.com/Webster/www.artofasm.com/DOS/ch09/CH09-4.html#HEADING4-99 1076 00006B97 B92000 <1> mov cx, 32 1077 00006B9A 55 <1> push bp 1078 00006B9B 56 <1> push si 1079 00006B9C 57 <1> push di 1080 00006B9D A1[5852] <1> mov ax, word [hhvar] 1081 00006BA0 8B2E[5A52] <1> mov bp, word [hhvar+2] ; bp:ax = previous number 1082 00006BA4 31FF <1> xor di, di 1083 00006BA6 31F6 <1> xor si, si ; clear variable si:di 1084 00006BA8 92 <1> xchg ax, dx 1085 00006BA9 87EB <1> xchg bp, bx ; bx:dx = previous number, bp:ax = divisor 1086 <1> .bitloop: 1087 00006BAB D1E2 <1> shl dx, 1 1088 00006BAD D1D3 <1> rcl bx, 1 1089 00006BAF D1D7 <1> rcl di, 1 1090 00006BB1 D1D6 <1> rcl si, 1 ; si:di:bx:dx << 1 1091 00006BB3 39EE <1> cmp si, bp ; does the divisor fit into si:di here ? 1092 00006BB5 7706 <1> ja .goesinto 1093 00006BB7 7209 <1> jb .trynext 1094 00006BB9 39C7 <1> cmp di, ax 1095 00006BBB 7205 <1> jb .trynext ; no --> 1096 <1> .goesinto: 1097 00006BBD 29C7 <1> sub di, ax 1098 00006BBF 19EE <1> sbb si, bp ; subtract divisor 1099 00006BC1 42 <1> inc dx ; set a bit of the result (bit was zero before, never carries) 1100 <1> .trynext: 1101 00006BC2 E2E7 <1> loop .bitloop ; loop for 32 bits 1102 00006BC4 5F <1> pop di 1103 00006BC5 5E <1> pop si 1104 00006BC6 5D <1> pop bp 1105 00006BC7 C3 <1> retn 1106 <1> 1107 <1> .32: 1108 <1> cpu 386 1108 ****************** <1> expansion: __CPU__ = [cpu 386] 1109 00006BC8 6650 <1> push eax 1110 00006BCA 6653 <1> push ebx 1111 00006BCC 6652 <1> push edx ; to preserve the high words 1112 00006BCE 53 <1> push bx 1113 00006BCF 52 <1> push dx 1114 00006BD0 665B <1> pop ebx ; ebx = following number 1115 00006BD2 6631D2 <1> xor edx, edx 1116 00006BD5 66A1[5852] <1> mov eax, dword [hhvar] ; edx:eax = previous number 1117 00006BD9 66F7F3 <1> div ebx 1118 00006BDC 665A <1> pop edx 1119 00006BDE 665B <1> pop ebx ; restore high words 1120 00006BE0 6650 <1> push eax 1121 00006BE2 5A <1> pop dx 1122 00006BE3 5B <1> pop bx ; bx:dx = result 1123 00006BE4 6658 <1> pop eax ; restore high word of eax 1124 <1> cpu 8086 1124 ****************** <1> expansion: __CPU__ = [cpu 8086] 1125 00006BE6 C3 <1> retn 1126 <1> 1127 <1> of_power: 1128 00006BE7 89D9 <1> mov cx, bx 1129 00006BE9 89D0 <1> mov ax, dx ; get exponent 1130 00006BEB 09D3 <1> or bx, dx ; exponent zero ? 1131 00006BED BB0000 <1> mov bx, 0 1132 00006BF0 BA0100 <1> mov dx, 1 1133 00006BF3 743E <1> jz .ret ; yes, return with result as 1 --> 1134 00006BF5 3916[5852] <1> cmp word [hhvar], dx ; optimization: 1135 00006BF9 7506 <1> jne .notone 1136 00006BFB 391E[5A52] <1> cmp word [hhvar+2], bx 1137 00006BFF 7432 <1> je .ret ; if base is one (and exponent not zero), result is 1 --> 1138 <1> .notone: 1139 00006C01 55 <1> push bp 1140 <1> 1141 <1> .loop: ; cx:ax non-zero here 1142 00006C02 D1E9 <1> shr cx, 1 1143 00006C04 D1D8 <1> rcr ax, 1 ; exponent /= 2 1144 00006C06 50 <1> push ax 1145 00006C07 51 <1> push cx 1146 00006C08 7303 <1> jnc .even ; if exponent was even --> 1147 00006C0A E845FF <1> call of_multiply ; var *= base 1148 <1> .even: 1149 <1> ; In the last iteration, cx:ax might be zero here 1150 <1> ; making the next call unnecessary. Oh well. 1151 00006C0D 53 <1> push bx 1152 00006C0E 52 <1> push dx 1153 00006C0F 8B1E[5A52] <1> mov bx, word [hhvar+2] 1154 00006C13 8B16[5852] <1> mov dx, word [hhvar] ; base 1155 00006C17 E838FF <1> call of_multiply ; * base = base squared 1156 00006C1A 891E[5A52] <1> mov word [hhvar+2], bx 1157 00006C1E 8916[5852] <1> mov word [hhvar], dx ; store as new base 1158 00006C22 5A <1> pop dx 1159 00006C23 5B <1> pop bx 1160 00006C24 59 <1> pop cx 1161 00006C25 58 <1> pop ax 1162 <1> 1163 00006C26 89DD <1> mov bp, bx ; optimization: 1164 00006C28 09D5 <1> or bp, dx ; register now zero ? 1165 00006C2A 7406 <1> jz .ret_bp ; if so, return now --> (multiplying zero always results in zero) 1166 00006C2C 89CD <1> mov bp, cx 1167 00006C2E 09C5 <1> or bp, ax ; exponent now zero ? 1168 00006C30 75D0 <1> jnz .loop ; no, loop --> 1169 <1> 1170 <1> .ret_bp: 1171 00006C32 5D <1> pop bp 1172 <1> .ret: 1173 00006C33 C3 <1> retn 1174 <1> 1175 <1> of_compare_below_equal: 1176 00006C34 E82700 <1> call of_helper_compare 1177 00006C37 7701 <1> ja .ret 1178 00006C39 42 <1> inc dx 1179 <1> .ret: 1180 00006C3A C3 <1> retn 1181 <1> 1182 <1> of_compare_below: 1183 00006C3B E82000 <1> call of_helper_compare 1184 00006C3E 7301 <1> jae .ret 1185 00006C40 42 <1> inc dx 1186 <1> .ret: 1187 00006C41 C3 <1> retn 1188 <1> 1189 <1> of_compare_not_equal: 1190 00006C42 E81900 <1> call of_helper_compare 1191 00006C45 7401 <1> je .ret 1192 00006C47 42 <1> inc dx 1193 <1> .ret: 1194 00006C48 C3 <1> retn 1195 <1> 1196 <1> of_compare_equal: 1197 00006C49 E81200 <1> call of_helper_compare 1198 00006C4C 7501 <1> jne .ret 1199 00006C4E 42 <1> inc dx 1200 <1> .ret: 1201 00006C4F C3 <1> retn 1202 <1> 1203 <1> of_compare_above_equal: 1204 00006C50 E80B00 <1> call of_helper_compare 1205 00006C53 7201 <1> jb .ret 1206 00006C55 42 <1> inc dx 1207 <1> .ret: 1208 00006C56 C3 <1> retn 1209 <1> 1210 <1> of_compare_above: 1211 00006C57 E80400 <1> call of_helper_compare 1212 00006C5A 7601 <1> jbe .ret 1213 00006C5C 42 <1> inc dx 1214 <1> .ret: 1215 00006C5D C3 <1> retn 1216 <1> 1217 <1> ; Called by operator functions to compare operands 1218 <1> ; 1219 <1> ; INP: d[hhvar] 1220 <1> ; bx:dx 1221 <1> ; OUT: Flags as for "cmp d[hhvar], bxdx" 1222 <1> ; bx:dx = 0 1223 <1> of_helper_compare: 1224 00006C5E 391E[5A52] <1> cmp word [hhvar+2], bx 1225 00006C62 7504 <1> jne .ret 1226 00006C64 3916[5852] <1> cmp word [hhvar], dx 1227 <1> .ret: 1228 00006C68 BB0000 <1> mov bx, 0 1229 00006C6B 89DA <1> mov dx, bx ; set both to zero (without affecting flags) 1230 00006C6D C3 <1> retn 1231 <1> 1232 <1> of_shift_right: 1233 00006C6E E81B00 <1> call of_helper_getshiftdata 1234 <1> .loop: 1235 00006C71 D1EB <1> shr bx, 1 1236 00006C73 D1DA <1> rcr dx, 1 1237 00006C75 E2FA <1> loop .loop 1238 00006C77 C3 <1> retn 1239 <1> 1240 <1> of_shift_right_signed: 1241 00006C78 E81100 <1> call of_helper_getshiftdata 1242 <1> .loop: 1243 00006C7B D1FB <1> sar bx, 1 1244 00006C7D D1DA <1> rcr dx, 1 1245 00006C7F E2FA <1> loop .loop 1246 00006C81 C3 <1> retn 1247 <1> 1248 <1> of_shift_left: 1249 00006C82 E80700 <1> call of_helper_getshiftdata 1250 <1> .loop: 1251 00006C85 D1E2 <1> shl dx, 1 1252 00006C87 D1D3 <1> rcl bx, 1 1253 00006C89 E2FA <1> loop .loop 1254 00006C8B C3 <1> retn 1255 <1> 1256 <1> ; Called by operator functions to get shift data 1257 <1> ; 1258 <1> ; This returns to the next caller with the unchanged input 1259 <1> ; operand if the shift count is zero. Otherwise, large shift 1260 <1> ; counts are normalized so the returned value in cx is not 1261 <1> ; zero and not higher than 32. This normalization is not just 1262 <1> ; an optimization, it's required for shift counts that don't 1263 <1> ; fit into a 16-bit counter. 1264 <1> ; 1265 <1> ; INP: bx:dx = shift count 1266 <1> ; OUT: bx:dx = input operand 1267 <1> ; If shift count is >= 1 and <= 32, 1268 <1> ; cx = shift count 1269 <1> ; If shift count is > 32, 1270 <1> ; cx = 32 1271 <1> ; If shift count is zero, 1272 <1> ; discards one near return address before returning 1273 <1> ; CHG: cx 1274 <1> of_helper_getshiftdata: 1275 00006C8C 89D1 <1> mov cx, dx 1276 00006C8E 85DB <1> test bx, bx 1277 00006C90 7505 <1> jnz .largeshift 1278 00006C92 83FA20 <1> cmp dx, byte 32 1279 00006C95 7203 <1> jb .normalshift 1280 <1> .largeshift: 1281 00006C97 B92000 <1> mov cx, 32 ; fix at maximal shift count 1282 <1> .normalshift: 1283 00006C9A 8B16[5852] <1> mov dx, word [hhvar] 1284 00006C9E 8B1E[5A52] <1> mov bx, word [hhvar+2] 1285 00006CA2 E301 <1> jcxz .break ; shift count zero, return input --> 1286 00006CA4 C3 <1> retn 1287 <1> 1288 <1> .break: 1289 00006CA5 59 <1> pop cx ; discard near return address 1290 00006CA6 C3 <1> retn 1291 <1> 1292 <1> of_bit_mirror: 1293 00006CA7 89D1 <1> mov cx, dx 1294 00006CA9 85DB <1> test bx, bx 1295 00006CAB 7505 <1> jnz .large 1296 00006CAD 83FA40 <1> cmp dx, byte 64 1297 00006CB0 7205 <1> jb .normal 1298 <1> .large: 1299 00006CB2 31DB <1> xor bx, bx ; mirror count 64 or higher: 1300 00006CB4 31D2 <1> xor dx, dx ; all 32 bits mirrored with (nonexistent) zero bits 1301 00006CB6 C3 <1> retn 1302 <1> .normal: 1303 00006CB7 8B16[5852] <1> mov dx, word [hhvar] 1304 00006CBB 8B1E[5A52] <1> mov bx, word [hhvar+2] 1305 00006CBF 80F901 <1> cmp cl, 1 1306 00006CC2 762B <1> jbe .ret ; mirror count one or zero, return input --> 1307 00006CC4 56 <1> push si 1308 00006CC5 57 <1> push di 1309 <1> 1310 00006CC6 51 <1> push cx 1311 00006CC7 BFFFFF <1> mov di, -1 1312 00006CCA 89FE <1> mov si, di 1313 <1> .loopmask: 1314 00006CCC D1E7 <1> shl di, 1 1315 00006CCE D1D6 <1> rcl si, 1 1316 00006CD0 E2FA <1> loop .loopmask ; create mask of bits not involved in mirroring 1317 00006CD2 21DE <1> and si, bx 1318 00006CD4 21D7 <1> and di, dx ; get the uninvolved bits 1319 00006CD6 59 <1> pop cx 1320 <1> 1321 00006CD7 56 <1> push si 1322 00006CD8 57 <1> push di ; save them 1323 00006CD9 31F6 <1> xor si, si 1324 00006CDB 31FF <1> xor di, di ; initialize mirrored register 1325 <1> .loop: 1326 00006CDD D1EB <1> shr bx, 1 1327 00006CDF D1DA <1> rcr dx, 1 ; shift out of original register's current LSB 1328 00006CE1 D1D7 <1> rcl di, 1 1329 00006CE3 D1D6 <1> rcl si, 1 ; into other register's current LSB 1330 00006CE5 E2F6 <1> loop .loop 1331 00006CE7 5A <1> pop dx 1332 00006CE8 5B <1> pop bx ; restore uninvolved bits 1333 00006CE9 09F3 <1> or bx, si 1334 00006CEB 09FA <1> or dx, di ; combine with mirrored bits 1335 <1> 1336 00006CED 5F <1> pop di 1337 00006CEE 5E <1> pop si 1338 <1> .ret: 1339 00006CEF C3 <1> retn 1340 <1> 1341 <1> of_or_bitwise: 1342 00006CF0 0B16[5852] <1> or dx, word [hhvar] 1343 00006CF4 0B1E[5A52] <1> or bx, word [hhvar+2] ; bitwise or 1344 00006CF8 C3 <1> retn 1345 <1> 1346 <1> of_or_boolean: 1347 00006CF9 E82500 <1> call of_helper_getbool 1348 00006CFC 09DA <1> or dx, bx ; boolean or 1349 00006CFE EB1E <1> jmp short of_helper_retbool 1350 <1> 1351 <1> of_and_bitwise: 1352 00006D00 2316[5852] <1> and dx, word [hhvar] 1353 00006D04 231E[5A52] <1> and bx, word [hhvar+2] ; bitwise and 1354 00006D08 C3 <1> retn 1355 <1> 1356 <1> of_and_boolean: 1357 00006D09 E81500 <1> call of_helper_getbool 1358 00006D0C 21DA <1> and dx, bx ; boolean and 1359 00006D0E EB0E <1> jmp short of_helper_retbool 1360 <1> 1361 <1> of_xor_bitwise: 1362 00006D10 3316[5852] <1> xor dx, word [hhvar] 1363 00006D14 331E[5A52] <1> xor bx, word [hhvar+2] ; bitwise xor 1364 00006D18 C3 <1> retn 1365 <1> 1366 <1> of_xor_boolean: 1367 00006D19 E80500 <1> call of_helper_getbool 1368 00006D1C 31DA <1> xor dx, bx ; boolean xor 1369 <1> of_helper_retbool: 1370 00006D1E 31DB <1> xor bx, bx ; high word always zero 1371 00006D20 C3 <1> retn 1372 <1> 1373 <1> ; Called by operator functions to convert operands to boolean 1374 <1> ; 1375 <1> ; INP: bx:dx = next number 1376 <1> ; [hhvar] = previous number 1377 <1> ; OUT: bx = next number's boolean value 1378 <1> ; dx = previous number's boolean value 1379 <1> of_helper_getbool: 1380 00006D21 E80E00 <1> call toboolean 1381 00006D24 52 <1> push dx 1382 00006D25 8B16[5852] <1> mov dx, word [hhvar] 1383 00006D29 8B1E[5A52] <1> mov bx, word [hhvar+2] 1384 00006D2D E80200 <1> call toboolean 1385 00006D30 5B <1> pop bx 1386 00006D31 C3 <1> retn 1387 <1> 1388 <1> ; Called by operator functions to convert a number to boolean 1389 <1> ; 1390 <1> ; INP: bx:dx 1391 <1> ; OUT: dx = 0 or 1 1392 <1> ; bx = 0 1393 <1> ; ZF 1394 <1> toboolean: 1395 00006D32 09D3 <1> or bx, dx ; = 0 iff it was 0000_0000h 1396 00006D34 83FB01 <1> cmp bx, byte 1 ; CY iff it was 0000_0000h, else NC 1397 00006D37 19D2 <1> sbb dx, dx ; -1 iff it was 0000_0000h, else 0 1398 00006D39 31DB <1> xor bx, bx 1399 00006D3B 42 <1> inc dx ; bx:dx = 0 iff it was 0000_0000h, else 1 1400 <1> 1401 <1> ; Dummy operator computation function, 1402 <1> ; used when setting a register without operator (rr) 1403 <1> ; and to initialize the first getexpression loop iteration 1404 <1> ; INP: d[hhvar] = previous number (left-hand operand) 1405 <1> ; bx:dx = following number (right-hand operand) 1406 <1> ; OUT: bx:dx = result (right-hand operand) 1407 <1> ; CHG: ax, cx 1408 <1> of_rightop: 1409 00006D3C C3 <1> retn 1410 <1> 1411 <1> ; INP: al = first character 1412 <1> ; si-> next character 1413 <1> ; OUT: CY if no variable 1414 <1> ; NC if variable, 1415 <1> ; bx-> low word 1416 <1> ; dx-> high word 1417 <1> ; (if cl <= 2 then dx-> some word in our memory) 1418 <1> ; (dx != bx+2 if compound register) 1419 <1> ; cl = size of variable (1, 2, 3, 4 bytes) 1420 <1> ; ch = size of variable's name (2..6 bytes) 1421 <1> ; ah = 0 if a writeable variable (ie simply memory) 1422 <1> ; 1 if a read-only variable (ie simply memory) 1423 <1> ; 2..33 if an MMX register, see note below 1424 <1> ; al = next character behind variable 1425 <1> ; si-> behind next character 1426 <1> ; CHG: ah, bx, dx, cx 1427 <1> ; STT: ss = ds = es, UP 1428 <1> ; 1429 <1> ; Note: For read access to (half of) an MMX register, no 1430 <1> ; special handling is necessary at all, because cl, 1431 <1> ; bx, and dx are set up to access a buffer that 1432 <1> ; contains the current value. (The value should be 1433 <1> ; read at once though, as the buffer may be shared 1434 <1> ; or become outdated otherwise.) 1435 <1> ; Write access to an MMX register must be handled 1436 <1> ; specifically, however. The returned field type 1437 <1> ; in ah indicates the register number (0..7) in the 1438 <1> ; lowest three bits. The two bits above those specify 1439 <1> ; the access type, which also specifies what was read 1440 <1> ; but need not be examined by readers. The access 1441 <1> ; type must be adhered to by writers. These are the 1442 <1> ; access types: 1443 <1> ; 0 zero extension from 32 bits to write all 64 bits 1444 <1> ; 1 sign extension from 32 bits to write all 64 bits 1445 <1> ; 2 writes only low 32 bits 1446 <1> ; 3 writes only high 32 bits 1447 <1> ; (Access type 3 is the only one for which the read 1448 <1> ; buffer is initialised with the high 32 bits.) 1449 <1> ; 1450 <1> ; As dx points to 'some word in our memory' if it 1451 <1> ; doesn't serve any purpose, it is still valid to 1452 <1> ; read the word that it points to. Particularly dx 1453 <1> ; mustn't contain 0FFFFh then, but with the current 1454 <1> ; implementation, it can also be assumed that we do 1455 <1> ; actually 'own' the word (even with a PM segment 1456 <1> ; shorter than 64 KiB the read would be allowed). 1457 <1> isvariable?: 1458 00006D3D 57 <1> push di 1459 00006D3E 4E <1> dec si 1460 00006D3F 31C0 <1> xor ax, ax 1461 00006D41 8A4406 <1> mov al, byte [si+6] 1462 <1> lframe 1462 ****************** <1> expansion: bits = 16 1462 ****************** <1> expansion: base_size = 2 1462 ****************** <1> expansion: near_offset = 2 1462 ****************** <1> expansion: far_offset = 4 1462 ****************** <1> expansion: int_offset = 6 1462 ****************** <1> expansion: inner = 0 1462 ****************** <1> expansion: nested = 0 1462 ****************** <1> expansion: autoret = 1462 ****************** <1> expansion: pars_size = 0 1462 ****************** <1> expansion: pars_return_size = 0 1462 ****************** <1> expansion: parlist = 1462 ****************** <1> expansion: labellist = empty,empty,empty 1462 ****************** <1> expansion: ofs = 0 1462 ****************** <1> expansion: enter = 0 1462 ****************** <1> expansion: req = 0 1462 ****************** <1> expansion: usereq = 0 1462 ****************** <1> expansion: emit = 1 1462 ****************** <1> expansion: restore_frame_ofs = 0 1462 ****************** <1> expansion: pars_inner_size = 0 1463 00006D44 5589E5 <1> lenter 1463 ****************** <1> expansion: wasearly = 0 1463 ****************** <1> expansion: early = 0 1463 ****************** <1> expansion: lsizevariables = 0 1463 ****************** <1> expansion: req = 1 1463 ****************** <1> expansion: enter_emitted = 0 1463 ****************** <1> expansion: enter = 1 1463 ****************** <1> expansion: 186 = 0 1463 ****************** <1> expansion: newlabel = frame_bp 1463 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 1463 ****************** <1> expansion: ?frame_bp = 0 1463 ****************** <1> expansion: lsizeparameters = 0 1464 <1> lvar 8, namebuffer 1464 ****************** <1> expansion: varsize = 8 1464 ****************** <1> expansion: ofs = -8 1464 ****************** <1> expansion: newlabel = namebuffer 1464 ****************** <1> expansion: labellist = namebuffer,undefined,,frame_bp,undefined,,empty,empty,empty 1464 ****************** <1> expansion: ?namebuffer = -8 1464 ****************** <1> expansion: req = 1 1464 ****************** <1> expansion: hadvar = 1 1465 00006D47 50 <1> push ax ; ah = 0 so that accidentally reading past 1466 <1> ; the actual buffer wouldn't match 1467 00006D48 FF7404 <1> push word [si+4] 1468 00006D4B FF7402 <1> push word [si+2] 1469 00006D4E FF34 <1> push word [si] 1470 00006D50 89E7 <1> mov di, sp ; -> name buffer 1471 <1> 1472 <1> lvar 1, fieldtype 1472 ****************** <1> expansion: varsize = 1 1472 ****************** <1> expansion: ofs = -9 1472 ****************** <1> expansion: newlabel = fieldtype 1472 ****************** <1> expansion: labellist = fieldtype,undefined,,namebuffer,undefined,,frame_bp,undefined,,empty,empty,empty 1472 ****************** <1> expansion: ?fieldtype = -9 1472 ****************** <1> expansion: req = 1 1472 ****************** <1> expansion: hadvar = 1 1473 00006D52 50 <1> push ax ; field type initialised to 0 (RW) 1474 00006D53 31DB <1> _386 xor bx, bx ; (a flag for the 32-bit register name check) 1474 ****************** <1> expansion: entry = 27987 1474 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987 1474 ****************** <1> expansion: entry = 27988 1474 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988 1474 ****************** <1> expansion: entry = 27989 1475 00006D55 56 <1> push si 1476 00006D56 89FE <1> mov si, di 1477 00006D58 57 <1> push di 1478 <1> 1479 00006D59 B90800 <1> mov cx, 8 1480 <1> .store: 1481 00006D5C AC <1> lodsb 1482 <1> ; call uppercase ; (isseparator? calls uppercase) 1483 00006D5D E84AFC <1> call isseparator? 1484 00006D60 F8 <1> clc 1485 00006D61 7501 <1> jne short .not_separator 1486 00006D63 F9 <1> stc 1487 <1> .not_separator: 1488 00006D64 D0DA <1> rcr dl, 1 ; dl = flags indicating separators 1489 00006D66 AA <1> stosb 1490 00006D67 E2F3 <1> loop .store 1491 <1> 1492 00006D69 5E <1> pop si 1493 <1> 1494 00006D6A F6C214 <1> test dl, 1<<2|1<<4 1495 00006D6D AD <1> lodsw 1496 00006D6E 7434 <1> jz short .notreg16 1497 <1> 1498 00006D70 E81B00 <1> call .reg16names_match ; (iff no match, --> .notreg16) 1499 <1> ; bx-> regs entry of (first) match 1500 00006D73 F6C204 <1> test dl, 1<<2 1501 00006D76 AD <1> lodsw 1502 00006D77 7567 <1> jnz short .reg16 ; iff single match --> 1503 <1> 1504 <1> ; Check for a second 16-bit register name 1505 <1> ; (ie check for a compound register name) 1506 00006D79 E81200 <1> call .reg16names_match ; (iff no match, --> .notreg16) 1507 <1> ; bx-> regs entry of second match 1508 00006D7C 92 <1> xchg dx, ax ; dx-> regs entry of first match 1509 00006D7D B90404 <1> mov cx, 4<<8|4 1510 <1> .return_success: ; cx, bx, dx, ?fieldtype set 1511 00006D80 31C0 <1> xor ax, ax 1512 00006D82 88E8 <1> mov al, ch ; ax = length 1513 00006D84 5E <1> pop si 1514 00006D85 01C6 <1> add si, ax ; -> behind name (should NC) 1515 <1> .return_ax_frame_di_lodsb: 1516 00006D87 58 <1> pop ax 1517 00006D88 89EC5D <1> lleave code 1517 ****************** <1> expansion: 186 = 0 1517 ****************** <1> expansion: __lframe__autoret = 1518 00006D8B 5F <1> pop di 1519 00006D8C AC <1> lodsb 1520 <1> .retn: 1521 00006D8D C3 <1> retn 1522 <1> 1523 <1> 1524 <1> ; INP: ax = capitalised candidate register name 1525 <1> ; ch = 0 1526 <1> ; dx, si, bx, etc set up for later checks 1527 <1> ; OUT: Iff match, 1528 <1> ; bx-> associated regs entry (dword-aligned) 1529 <1> ; ax = INP:bx 1530 <1> ; Else, 1531 <1> ; returns to .notreg16 1532 <1> ; bx left unchanged on 386 systems 1533 <1> ; CHG: cl, di, bx, ax 1534 <1> ; 1535 <1> ; Note: The 32-bit register name check depends on the 1536 <1> ; fact that the low two bits of bx are set to 1537 <1> ; zero on a match, which is true because regs 1538 <1> ; is dword-aligned. 1539 <1> ; It also depends on bx being left unchanged on 1540 <1> ; a mismatch, which is the case unless the 1541 <1> ; non-386 additional FS,GS filtering occurs. 1542 <1> .reg16names_match: 1543 00006D8E BF[304A] <1> mov di, reg16names 1544 00006D91 B110 <1> mov cl, 16 1545 00006D93 F2AF <1> repne scasw 1546 00006D95 750C <1> jne short .notreg16_pop ; no match --> 1547 00006D97 01FF <1> add di, di 1548 00006D99 93 <1> xchg ax, bx ; (returned for compound register name match) 1549 00006D9A 8D9D[DC6C] <1> lea bx, [di -2*(reg16names+DATASECTIONFIXUP+2) +regs] 1550 <1> ; -> regs entry 1551 00006D9E C3 <1> _386 retn 1551 ****************** <1> expansion: entry = 28062 1551 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062 1551 ****************** <1> expansion: entry = 28063 1552 <1> ; cx = number of remaining reg16names 1553 00006D9F D1E9 <1> _no386 shr cx, 1 ; cx = number of remaining reg16names pairs 1553 ****************** <1> expansion: entry = 28063 1553 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105,28063 1553 ****************** <1> expansion: entry = 28064 1553 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105,28063,28064 1553 ****************** <1> expansion: entry = 28065 1554 <1> ; = 1 iff exactly the IP,FL pair remaining 1555 <1> ; (ie matched one of FS,GS) 1556 00006DA1 E2EA <1> _no386 loop .retn ; iff cx != 1, return the match --> 1556 ****************** <1> expansion: entry = 28065 1556 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105,28063,28064,28065 1556 ****************** <1> expansion: entry = 28066 1556 ****************** <1> expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105,28063,28064,28065,28066 1556 ****************** <1> expansion: entry = 28067 1557 <1> ; on non-386 systems, FS,GS matches fall through here 1558 <1> .notreg16_pop: 1559 00006DA3 58 <1> pop ax ; (discard near return address) 1560 <1> .notreg16: 1561 <1> ; Check for a 32-bit register name 1562 00006DA4 F6C208 <1> _386 test dl, 1<<3 1562 ****************** <1> expansion: entry = 28068 1562 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068 1562 ****************** <1> expansion: entry = 28069 1562 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069 1562 ****************** <1> expansion: entry = 28070 1562 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070 1562 ****************** <1> expansion: entry = 28071 1563 00006DA7 7419 <1> _386 jz short .notreg32 1563 ****************** <1> expansion: entry = 28071 1563 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071 1563 ****************** <1> expansion: entry = 28072 1563 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072 1563 ****************** <1> expansion: entry = 28073 1564 <1> 1565 00006DA9 8D76F8 <1> _386 lea si, [bp+?namebuffer] 1565 ****************** <1> expansion: entry = 28073 1565 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073 1565 ****************** <1> expansion: entry = 28074 1565 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074 1565 ****************** <1> expansion: entry = 28075 1565 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075 1565 ****************** <1> expansion: entry = 28076 1566 00006DAC AC <1> _386 lodsb 1566 ****************** <1> expansion: entry = 28076 1566 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076 1566 ****************** <1> expansion: entry = 28077 1567 00006DAD D0EB <1> _386 shr bl, 1 ; CY iff second entry during same call 1567 ****************** <1> expansion: entry = 28077 1567 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077 1567 ****************** <1> expansion: entry = 28078 1567 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078 1567 ****************** <1> expansion: entry = 28079 1568 <1> ; (in that case, al contains 'E') 1569 00006DAF 1C45 <1> _386 sbb al, 'E' ; possibly an 'E' register ? (on first entry) 1569 ****************** <1> expansion: entry = 28079 1569 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079 1569 ****************** <1> expansion: entry = 28080 1569 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080 1569 ****************** <1> expansion: entry = 28081 1570 00006DB1 AD <1> _386 lodsw 1570 ****************** <1> expansion: entry = 28081 1570 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081 1570 ****************** <1> expansion: entry = 28082 1571 00006DB2 750E <1> _386 jne short .notreg32 ; no --> (or after second entry) 1571 ****************** <1> expansion: entry = 28082 1571 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082 1571 ****************** <1> expansion: entry = 28083 1571 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083 1571 ****************** <1> expansion: entry = 28084 1572 00006DB4 43 <1> _386 inc bx ; prepare flag for second entry 1572 ****************** <1> expansion: entry = 28084 1572 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084 1572 ****************** <1> expansion: entry = 28085 1573 <1> ; (this requires regs to be dword-aligned!) 1574 00006DB5 80FC53 <1> _386 cmp ah, 'S' ; candidate segment register ? 1574 ****************** <1> expansion: entry = 28085 1574 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085 1574 ****************** <1> expansion: entry = 28086 1574 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086 1574 ****************** <1> expansion: entry = 28087 1574 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087 1574 ****************** <1> expansion: entry = 28088 1575 00006DB8 7408 <1> _386 je short .notreg32 ; yes, skip check (disallow match) --> 1575 ****************** <1> expansion: entry = 28088 1575 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088 1575 ****************** <1> expansion: entry = 28089 1575 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089 1575 ****************** <1> expansion: entry = 28090 1576 <1> 1577 00006DBA E8D1FF <1> _386 call .reg16names_match ; (iff no match, --> .notreg16 (second entry)) 1577 ****************** <1> expansion: entry = 28090 1577 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090 1577 ****************** <1> expansion: entry = 28091 1577 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091 1577 ****************** <1> expansion: entry = 28092 1577 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092 1577 ****************** <1> expansion: entry = 28093 1578 <1> ; bx-> regs entry of match 1579 00006DBD B90403 <1> _386 mov cx, 3<<8|4 1579 ****************** <1> expansion: entry = 28093 1579 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093 1579 ****************** <1> expansion: entry = 28094 1579 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094 1579 ****************** <1> expansion: entry = 28095 1579 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095 1579 ****************** <1> expansion: entry = 28096 1580 00006DC0 EB22 <1> _386 jmp short .return_success_var32_set_dx 1580 ****************** <1> expansion: entry = 28096 1580 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096 1580 ****************** <1> expansion: entry = 28097 1580 ****************** <1> expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097 1580 ****************** <1> expansion: entry = 28098 1581 <1> 1582 <1> .notreg32: 1583 <1> ; Check for an 8-bit register name 1584 00006DC2 F6C204 <1> test dl, 1<<2 1585 00006DC5 7422 <1> jz short .notreg8 1586 <1> 1587 00006DC7 8D76F8 <1> lea si, [bp+?namebuffer] 1588 00006DCA AD <1> lodsw 1589 00006DCB BF[204A] <1> mov di, reg8names 1590 00006DCE B108 <1> mov cl, 8 1591 00006DD0 F2AF <1> repne scasw 1592 00006DD2 7515 <1> jne short .notreg8 1593 <1> ; cx = cl = number of remaining reg8names 1594 00006DD4 80E101 <1> and cl, 1 ; cx = cl = 1 iff an xL register, else 0 1595 00006DD7 8D9D1DB9 <1> lea bx, [di-reg8names-2+regs-1] 1596 <1> ; bx-> reg_eax-1 if AL, reg_eax+1 if AH, etc 1597 00006DDB 01CB <1> add bx, cx ; bx-> reg_eax if AL, reg_eax+1 if AH, etc 1598 00006DDD B101 <1> mov cl, 1 1599 <1> 1600 00006DDF A9 <1> db __TEST_IMM16 ; (NC, skip mov) 1601 <1> .reg16: 1602 00006DE0 B102 <1> mov cl, 2 1603 <1> .got2bytename: 1604 <1> .got2bytename_var32_set_dx: 1605 00006DE2 B502 <1> mov ch, 2 1606 <1> .return_success_var32_set_dx: 1607 00006DE4 8D5702 <1> lea dx, [bx+2] ; (irrelevant to 8-/16-bit register return) 1608 <1> 1609 <1> %define .return_success_j .return_success_j1 1609 ****************** <1> expansion: .return_success_j = .return_success_j1 1610 <1> %[.return_success_j]: 1611 00006DE7 EB97 <1> jmp short .return_success 1612 <1> 1613 <1> .notreg8: 1614 <1> %if _OPTIONS 1615 00006DE9 F6C208 <1> test dl, 1<<3 1616 00006DEC 7430 <1> jz short .notopt 1617 <1> 1618 00006DEE 8D76F8 <1> lea si, [bp+?namebuffer] 1619 00006DF1 AC <1> lodsb 1620 00006DF2 3C44 <1> cmp al, 'D' 1621 00006DF4 7528 <1> jne short .notopt 1622 00006DF6 AD <1> lodsw 1623 00006DF7 B109 <1> mov cl, N_OPTS 1624 00006DF9 BF[1252] <1> mov di, opts 1625 00006DFC F2AF <1> repne scasw 1626 00006DFE 751E <1> jne short .notopt 1627 <1> %if _PM 1628 <1> and word [seldbg], byte 0 1629 <1> call ispm 1630 <1> jnz short .opt_rm 1631 <1> mov word [seldbg], ds 1632 <1> .opt_rm: 1633 <1> %endif 1634 00006E00 B90403 <1> mov cx, 3<<8|4 1635 00006E03 8B5D10 <1> mov bx, word [di-opts+optadr-2] 1636 00006E06 81FF[1F52] <1> cmp di, opts.word+1 ; NC iff > opts.word 1637 00006E0A 19C0 <1> sbb ax, ax ; 0 iff > opts.word, else -1 1638 00006E0C 40 <1> inc ax ; 1 iff > opts.word, else 0 1639 00006E0D 01C0 <1> add ax, ax ; 2 iff > opts.word, else 0 1640 00006E0F 28C1 <1> sub cl, al ; 2 iff > opts.word, else 4 1641 <1> 1642 00006E11 8A46FA <1> mov al, [bp+?namebuffer+2] 1643 00006E14 2C4F <1> sub al, 'O' 1644 00006E16 3C01 <1> cmp al, 1 ; CY iff DAO or DCO 1645 00006E18 805EF7FF <1> sbb byte [bp+?fieldtype], -1 ; 0 (RW) iff DAO or DCO, else 1 (RO) 1646 <1> 1647 00006E1C EBC6 <1> jmp short .return_success_var32_set_dx 1648 <1> 1649 <1> .notopt: 1650 <1> %endif 1651 <1> 1652 00006E1E F6C208 <1> test dl, 1<<3 ; separator at 4th character ? 1653 00006E21 7428 <1> jz .not_serial ; no --> 1654 00006E23 8D76F8 <1> lea si, [bp + ?namebuffer] 1655 00006E26 AD <1> lodsw 1656 00006E27 3D4453 <1> cmp ax, "DS" ; Debugger Serial ? 1657 00006E2A 751F <1> jne .not_serial ; no --> 1658 00006E2C AC <1> lodsb 1659 00006E2D 3C52 <1> cmp al, 'R' ; Rows ? 1660 00006E2F 7508 <1> jne .not_serial_rows ; no --> 1661 00006E31 BB[EA02] <1> mov bx, serial_rows ; -> variable, 8 bit 1662 <1> .serial_var8_len3: 1663 00006E34 B90103 <1> mov cx, 3 << 8 | 1 ; ch = length of name (3), cl = variable size 1664 00006E37 EBAB <1> jmp .return_success_var32_set_dx 1665 <1> ; set dx (must point into valid memory) 1666 <1> .not_serial_rows: 1667 00006E39 3C54 <1> cmp al, 'T' ; keep Timeout ? 1668 00006E3B 7505 <1> jne .not_serial_timeout 1669 00006E3D BB[EB02] <1> mov bx, serial_keep_timeout 1670 00006E40 EBF2 <1> jmp .serial_var8_len3 1671 <1> 1672 <1> .not_serial_timeout: 1673 <1> %if _USE_TX_FIFO 1674 00006E42 3C46 <1> cmp al, 'F' ; FIFO size ? 1675 00006E44 7505 <1> jne .not_serial_fifo_size 1676 00006E46 BB[EC02] <1> mov bx, serial_fifo_size 1677 00006E49 EBE9 <1> jmp .serial_var8_len3 1678 <1> 1679 <1> .not_serial_fifo_size: 1680 <1> %endif 1681 <1> .not_serial: 1682 <1> 1683 <1> %if _DEBUG1 1684 00006E4B F6C218 <1> test dl, 1 << 4 | 1 << 3 1685 <1> ; separator at 5th or 4th character ? 1686 00006E4E 7462 <1> jz .not_test_record ; no --> 1687 00006E50 8D76F8 <1> lea si, [bp + ?namebuffer] 1688 00006E53 AC <1> lodsb 1689 00006E54 3C54 <1> cmp al, 'T' ; starts with T ? 1690 00006E56 755A <1> jne .not_test_record 1691 00006E58 AD <1> lodsw 1692 00006E59 80FC43 <1> cmp ah, 'C' ; TxC test counter ? 1693 00006E5C 7405 <1> je @F 1694 00006E5E 80FC41 <1> cmp ah, 'A' ; TxA test address ? 1695 00006E61 754F <1> jne .not_test_record ; neither --> 1696 <1> @@: 1696 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.193 1696 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.194 1696 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.195 1696 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.196 1696 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.197 1696 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.198 1696 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.199 1696 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.200 1696 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.193 1696 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.194 1696 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.195 1696 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.196 1696 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.197 1696 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.198 1696 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.199 1696 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.200 1696 ****************** <1> expansion: __@@_num = 201 1697 <1> 1698 00006E63 BB[A800] <1> mov bx, test_records_Readmem 1699 00006E66 3C52 <1> cmp al, 'R' ; TRx test readmem ? 1700 00006E68 7415 <1> je @F 1701 00006E6A BB[0801] <1> mov bx, test_records_Writemem 1702 00006E6D 3C57 <1> cmp al, 'W' ; TWx test writemem ? 1703 00006E6F 740E <1> je @F 1704 00006E71 BB[6801] <1> mov bx, test_records_getLinear 1705 00006E74 3C4C <1> cmp al, 'L' ; TLx test getlinear ? 1706 00006E76 7407 <1> je @F 1707 00006E78 BB[C801] <1> mov bx, test_records_getSegmented 1708 00006E7B 3C53 <1> cmp al, 'S' ; TSx test getsegmented ? 1709 00006E7D 7533 <1> jne .not_test_record ; none of the above --> 1710 <1> @@: 1710 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.194 1710 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.195 1710 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.196 1710 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.197 1710 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.198 1710 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.199 1710 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.200 1710 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.201 1710 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.194 1710 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.195 1710 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.196 1710 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.197 1710 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.198 1710 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.199 1710 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.200 1710 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.201 1710 ****************** <1> expansion: __@@_num = 202 1711 <1> 1712 00006E7F B90403 <1> mov cx, 3 << 8 | 4 ; ch = length of name (3), cl = variable size 1713 00006E82 80FC41 <1> cmp ah, 'A' ; is it address ? 1714 00006E85 7405 <1> je @F ; yes --> 1715 00006E87 B102 <1> mov cl, 2 ; cl = variable size (counter is a word) 1716 00006E89 83C304 <1> add bx, 4 ; -> first test record's counter 1717 <1> @@: 1717 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.195 1717 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.196 1717 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.197 1717 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.198 1717 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.199 1717 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.200 1717 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.201 1717 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.202 1717 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.195 1717 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.196 1717 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.197 1717 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.198 1717 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.199 1717 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.200 1717 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.201 1717 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.202 1717 ****************** <1> expansion: __@@_num = 203 1718 <1> 1719 00006E8C F6C208 <1> test dl, 1 << 3 ; no digit given, should use first record ? 1720 00006E8F 751E <1> jnz @F ; yes --> 1721 <1> 1722 00006E91 B504 <1> mov ch, 4 ; change length to 4 1723 <1> 1724 00006E93 AC <1> lodsb 1725 00006E94 51 <1> push cx 1726 00006E95 E80D05 <1> call getexpression.lit_ishexdigit? 1727 <1> ; is it a hex digit character ? 1728 00006E98 59 <1> pop cx 1729 00006E99 7217 <1> jc .not_test_record ; no --> 1730 <1> ; call uppercase 1731 00006E9B 2C30 <1> sub al, '0' 1732 00006E9D 3C09 <1> cmp al, 9 ; was decimal digit ? 1733 00006E9F 7602 <1> jbe .lithex_decimaldigit; yes --> 1734 00006EA1 2C07 <1> sub al, 'A'-('9'+1) ; else adjust for hexadecimal digit 1735 <1> .lithex_decimaldigit: 1736 00006EA3 B400 <1> mov ah, 0 1737 00006EA5 01C0 <1> add ax, ax ; *2 1738 00006EA7 89C2 <1> mov dx, ax ; *2 1739 00006EA9 01C0 <1> add ax, ax ; *4 1740 00006EAB 01D0 <1> add ax, dx ; *4 + *2 = *6 1741 00006EAD 01C3 <1> add bx, ax ; -> specific test record (counter or address) 1742 <1> 1743 <1> @@: 1743 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.196 1743 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.197 1743 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.198 1743 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.199 1743 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.200 1743 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.201 1743 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.202 1743 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.203 1743 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.196 1743 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.197 1743 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.198 1743 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.199 1743 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.200 1743 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.201 1743 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.202 1743 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.203 1743 ****************** <1> expansion: __@@_num = 204 1744 00006EAF E932FF <1> jmp .return_success_var32_set_dx 1745 <1> 1746 <1> .not_test_record: 1747 <1> 1748 <1> 1749 00006EB2 F6C208 <1> test dl, 1 << 3 ; separator at 4rd character ? 1750 00006EB5 7416 <1> jz .not_test_readmem_value 1751 <1> 1752 00006EB7 8D76F8 <1> lea si, [bp + ?namebuffer] 1753 00006EBA AD <1> lodsw 1754 00006EBB 3D5452 <1> cmp ax, "TR" ; Test Readmem Value ? 1755 00006EBE 750D <1> jne .not_test_readmem_value 1756 00006EC0 AC <1> lodsb 1757 00006EC1 3C56 <1> cmp al, "V" 1758 00006EC3 7508 <1> jne .not_test_readmem_value 1759 <1> ; no --> 1760 <1> 1761 00006EC5 BB[2802] <1> mov bx, test_readmem_value 1762 00006EC8 B90103 <1> mov cx, 3 << 8 | 1 ; ch = length of name (3), cl = var size (1) 1763 00006ECB EBE2 <1> jmp @B 1764 <1> 1765 <1> .not_test_readmem_value: 1766 <1> %endif 1767 <1> 1768 <1> %if _VARIABLES 1769 00006ECD F6C204 <1> test dl, 1<<2 1770 00006ED0 741E <1> jz short .notvar 1771 <1> 1772 00006ED2 8D76F8 <1> lea si, [bp+?namebuffer] 1773 00006ED5 AC <1> lodsb 1774 00006ED6 3C56 <1> cmp al, 'V' 1775 00006ED8 7516 <1> jne short .notvar 1776 00006EDA AC <1> lodsb 1777 00006EDB E83905 <1> call getnyb 1778 00006EDE 98 <1> cbw 1779 00006EDF 720F <1> jc short .notvar 1780 00006EE1 89C3 <1> mov bx, ax 1781 00006EE3 B104 <1> mov cl, 4 1782 00006EE5 01DB <1> add bx, bx 1783 00006EE7 01DB <1> add bx, bx 1784 00006EE9 81C3[8003] <1> add bx, vregs ; (NC) 1785 00006EED E9F2FE <1> jmp .got2bytename_var32_set_dx 1786 <1> .notvar: 1787 <1> %endif 1788 <1> %if _PSPVARIABLES 1789 00006EF0 8D76F8 <1> lea si, [bp+?namebuffer] 1790 00006EF3 F6C208 <1> test dl, 1<<3 1791 00006EF6 AC <1> lodsb 1792 00006EF7 7411 <1> jz short .notpspvar 1793 <1> 1794 00006EF9 3C50 <1> cmp al, 'P' 1795 00006EFB AD <1> lodsw 1796 00006EFC 750C <1> jne short .notpspvar 1797 00006EFE B103 <1> mov cl, N_PSPVARS 1798 00006F00 BF[3852] <1> mov di, pspvars 1799 00006F03 F2AF <1> repne scasw 1800 00006F05 7503E98800 <1> je .pspvar ; (near if _MMXSUPP) 1801 <1> .notpspvar: 1802 <1> %endif 1803 <1> %if _MMXSUPP 1804 <1> ;MMx MMxf MM(x) MM(x)f 1805 00006F0A F6C278 <1> test dl, 1<<3|1<<4| 1<<5| 1<<6 1806 00006F0D 746A <1> jz short .notmmx 1807 <1> 1808 00006F0F 8D76F8 <1> lea si, [bp+?namebuffer] 1809 00006F12 803E[9302]00 <1> cmp byte [has_mmx], 0 ; MMX supported ? 1810 00006F17 7460 <1> je short .notmmx ; no --> 1811 <1> cpu 586 1811 ****************** <1> expansion: __CPU__ = [cpu 586] 1812 00006F19 AD <1> lodsw 1813 00006F1A 3D4D4D <1> cmp ax, "MM" ; possibly an MMX register ? 1814 00006F1D 755A <1> jne short .notmmx ; no --> 1815 00006F1F AC <1> lodsb 1816 00006F20 E8BF00 <1> call getstmmxdigit 1817 00006F23 7254 <1> jc short .notmmx 1818 00006F25 88DC <1> mov ah, bl 1819 00006F27 C0E303 <1> shl bl, 3 ; shift into reg field 1820 00006F2A 8D4C08 <1> lea cx, [si-?namebuffer] 1821 00006F2D 80CB06 <1> or bl, 06h ; code to get our ModR/M byte (r/m = [ofs]) 1822 00006F30 29E9 <1> sub cx, bp ; length of name (if with suffix) 1823 00006F32 881E[646F] <1> mov byte [.getmmxlow_modrm], bl 1824 00006F36 43 <1> inc bx ; adjust the ModR/M byte (r/m = [bx]) 1825 00006F37 AC <1> lodsb 1826 00006F38 881E[886F] <1> mov byte [.getmmxhigh_modrm], bl 1827 00006F3C 4E <1> dec si 1828 00006F3D 4E <1> dec si 1829 <1> 1830 00006F3E E869FA <1> call isseparator? ; a separator after potential suffix ? 1831 00006F41 AC <1> lodsb 1832 00006F42 B700 <1> mov bh, 0 1833 00006F44 7516 <1> jne short .check_mmx_no_suffix ; no --> 1834 <1> 1835 00006F46 3C5A <1> cmp al, 'Z' 1836 00006F48 7418 <1> je short .getmmxlow ; 0 = ZX --> 1837 00006F4A B710 <1> mov bh, 2<<3 ; = 10h = low 1838 00006F4C 3C4C <1> cmp al, 'L' 1839 00006F4E 7412 <1> je short .getmmxlow 1840 00006F50 B708 <1> mov bh, 1<<3 ; = 8h = SX 1841 00006F52 3C53 <1> cmp al, 'S' 1842 00006F54 740C <1> je short .getmmxlow 1843 00006F56 3C48 <1> cmp al, 'H' 1844 00006F58 7424 <1> je short .getmmxhigh 1845 00006F5A B700 <1> mov bh, 0 ; 0 = ZX 1846 <1> .check_mmx_no_suffix: 1847 00006F5C 49 <1> dec cx ; length of name (if no suffix follows) 1848 00006F5D E84AFA <1> call isseparator? ; immediately a separator (but no suffix) ? 1849 00006F60 7517 <1> jne short .notmmx ; no --> 1850 <1> ; yes, (default to) zero-extending full reg 1851 <1> .getmmxlow: 1852 <1> .getmmxlow_modrm: equ $+2 ; (opcode adjusted for the right MMX reg) 1853 00006F62 0F7E06[E402] <1> movd dword [mmxbuff], mm0 1854 00006F67 08FC <1> or ah, bh 1855 <1> 1856 <1> .mmxcommon: 1857 00006F69 80C402 <1> add ah, 2 1858 00006F6C B504 <1> mov ch, 4 1859 00006F6E 86CD <1> xchg cl, ch 1860 00006F70 BB[E402] <1> mov bx, mmxbuff 1861 00006F73 8866F7 <1> mov byte [bp+?fieldtype], ah 1862 <1> .return_success_var32_set_dx_j: 1863 00006F76 E96BFE <1> jmp .return_success_var32_set_dx 1864 <1> cpu 8086 1864 ****************** <1> expansion: __CPU__ = [cpu 8086] 1865 <1> 1866 <1> .notmmx: 1867 <1> %endif 1868 <1> 1869 <1> .return_failure: 1870 00006F79 5E <1> pop si 1871 00006F7A F9 <1> stc 1872 00006F7B E909FE <1> jmp .return_ax_frame_di_lodsb 1873 <1> 1874 <1> 1875 <1> %if _MMXSUPP 1876 <1> cpu 586 1876 ****************** <1> expansion: __CPU__ = [cpu 586] 1877 <1> .getmmxhigh: 1878 00006F7E 83EC08 <1> sub sp, byte 8 1879 00006F81 80CC18 <1> or ah, 3<<3 ; = 18h = high 1880 00006F84 89E3 <1> mov bx, sp ; (ss = ds) 1881 <1> .getmmxhigh_modrm: equ $+2 ; (opcode adjusted for the right MMX reg) 1882 00006F86 0F7F07 <1> movq qword [bx], mm0 1883 00006F89 5B <1> pop bx 1884 00006F8A 5B <1> pop bx ; discard low dword 1885 00006F8B 668F06[E402] <1> pop dword [mmxbuff] ; save high dword here 1886 00006F90 EBD7 <1> jmp short .mmxcommon 1887 <1> cpu 8086 1887 ****************** <1> expansion: __CPU__ = [cpu 8086] 1888 <1> %endif 1889 <1> 1890 <1> %if _PSPVARIABLES 1891 <1> .pspvar: 1892 00006F92 31C0 <1> xor ax, ax 1893 00006F94 06 <1> push es 1894 00006F95 A3[4652] <1> mov word [psp_pra], ax 1895 00006F98 A3[4852] <1> mov word [psp_pra+2], ax 1896 00006F9B A3[4452] <1> mov word [psp_parent], ax ; initialise those (if no valid process) 1897 00006F9E A1[6402] <1> mov ax, word [pspdbe] 1898 00006FA1 40 <1> inc ax ; FFFFh ? 1899 00006FA2 7423 <1> jz short .pspvar_psp_invalid ; yes, invalid --> 1900 00006FA4 48 <1> dec ax ; 0 ? 1901 00006FA5 7420 <1> jz short .pspvar_psp_invalid ; yes, invalid --> 1902 <1> %if _PM 1903 <1> call ispm 1904 <1> jnz short .pspvar_rm 1905 <1> _386_o32 ; push edx 1906 <1> push dx 1907 <1> xor dx, dx 1908 <1> mov cl, 4 1909 <1> .pspvar_shift: 1910 <1> shl ax, 1 1911 <1> rcl dx, 1 1912 <1> loop .pspvar_shift ; dx:ax = PSP segment << 4 1913 <1> call getsegmented 1914 <1> ; getsegmented is assumed not to switch modes (see below). 1915 <1> jc short .pspvar_error ; (shouldn't happen) 1916 <1> _386_o32 1917 <1> test dx, dx ; test edx, edx 1918 <1> jnz short .pspvar_error ; (assumed not to happen) 1919 <1> _386_o32 1920 <1> pop dx ; pop edx 1921 <1> mov ax, bx ; get segment/selector 1922 <1> .pspvar_rm: 1923 <1> %endif 1924 00006FA7 8EC0 <1> mov es, ax 1925 00006FA9 26813E0000CD20 <1> cmp word [es:0], 20CDh ; int 20h opcode ? 1926 00006FB0 7515 <1> jne short .pspvar_psp_invalid ; no, invalid --> 1927 00006FB2 26A10A00 <1> mov ax, word [es:TPIV] 1928 00006FB6 A3[4652] <1> mov word [psp_pra], ax 1929 00006FB9 26A10C00 <1> mov ax, word [es:TPIV+2] 1930 00006FBD A3[4852] <1> mov word [psp_pra+2], ax ; retrieve Int22 address 1931 00006FC0 26A11600 <1> mov ax, word [es:16h] 1932 00006FC4 A3[4452] <1> mov word [psp_parent], ax ; retrieve parent process 1933 <1> %if _PM && 0 ; It is assumed that we do not switch modes from PM 1934 <1> ; Why check this flag here? Simple: pusha and popa 1935 <1> ; are 186+ opcodes. So we'll make sure to only use 1936 <1> ; those if we really switched modes (which means that 1937 <1> ; PM is available, which requires at least a 286). 1938 <1> testopt [internalflags], modeswitched ; switched mode previously ? 1939 <1> jnz short .pspvar_notreset 1940 <1> cpu 286 1941 <1> _386_o32 ; pushad 1942 <1> pusha 1943 <1> _386 push fs 1944 <1> _386 push gs 1945 <1> call getsegmented_resetmode ; reset mode if we switched 1946 <1> _386 pop gs 1947 <1> _386 pop fs 1948 <1> _386_o32 ; popad 1949 <1> popa 1950 <1> cpu 8086 1951 <1> .pspvar_notreset: 1952 <1> %endif 1953 <1> .pspvar_psp_invalid: 1954 00006FC7 8B5D04 <1> mov bx, word [di-pspvars+pspvaradr-2] 1955 00006FCA 07 <1> pop es 1956 <1> 1957 <1> [warning -number-overflow] ; Because psp_pra is > 8000h NASM would 1958 <1> ; emit this warning. The computation 1959 <1> ; however does work as intended. 1960 00006FCB 8D87BAAC <1> lea ax, [bx-(psp_pra+DATASECTIONFIXUP)] 1961 <1> [warning *number-overflow] 1962 00006FCF B90003 <1> mov cx, 3<<8 1963 00006FD2 83F801 <1> cmp ax, 1 ; CY iff it is the PRA 1964 00006FD5 10C9 <1> adc cl, cl ; 1 iff it is the PRA, else 0 1965 00006FD7 41 <1> inc cx ; cl = 2 iff it is the PRA, else 1 1966 00006FD8 00C9 <1> add cl, cl ; 4 iff it is the PRA, else 2 1967 00006FDA FE46F7 <1> inc byte [bp+?fieldtype]; = 1 (RO) 1968 <1> 1969 <1> %if !_MMXSUPP 1970 <1> jmp .return_success_var32_set_dx 1971 <1> %elif ($+2 - .return_success_var32_set_dx_j) > 128 1972 <1> jmp .return_success_var32_set_dx 1973 <1> %else 1974 00006FDD EB97 <1> jmp short .return_success_var32_set_dx_j 1975 <1> %endif 1976 <1> 1977 <1> .pspvar_error: 1978 00006FDF E919F7 <1> jmp error 1979 <1> %endif 1980 <1> 1981 <1> lleave ctx 1981 ****************** <1> expansion: __lframe__autoret = 1982 <1> 1983 <1> 1984 <1> ; INP: al, si-> string 1985 <1> ; OUT: CY if no valid digit 0..7 1986 <1> ; NC if valid digit, 1987 <1> ; bl = 0..7 1988 <1> ; al, si-> behind digit specification 1989 <1> ; CHG: bl 1990 <1> getstmmxdigit: 1991 00006FE2 3C28 <1> cmp al, '(' 1992 00006FE4 7407 <1> je .paropen 1993 00006FE6 E81A00 <1> call .isdigit? 1994 00006FE9 7201 <1> jc .ret 1995 <1> .retlodsb: 1996 00006FEB AC <1> lodsb 1997 <1> .ret: 1998 00006FEC C3 <1> retn 1999 <1> 2000 <1> .paropen: 2001 00006FED 50 <1> push ax 2002 00006FEE 56 <1> push si 2003 00006FEF AC <1> lodsb 2004 00006FF0 E81000 <1> call .isdigit? 2005 00006FF3 720B <1> jc .retpop 2006 00006FF5 AC <1> lodsb 2007 00006FF6 3C29 <1> cmp al, ')' ; closing parenthesis ? 2008 00006FF8 F9 <1> stc 2009 00006FF9 7505 <1> jne .retpop ; no --> (CY) 2010 00006FFB 83C404 <1> add sp, byte 4 ; discard saved registers (NC) 2011 00006FFE EBEB <1> jmp short .retlodsb 2012 <1> 2013 <1> .retpop: 2014 00007000 5E <1> pop si 2015 00007001 58 <1> pop ax 2016 00007002 C3 <1> retn 2017 <1> 2018 <1> .isdigit?: 2019 00007003 88C3 <1> mov bl, al 2020 00007005 80EB30 <1> sub bl, '0' 2021 00007008 80FB08 <1> cmp bl, 8 ; valid digit 0..7 ? (CY if so) 2022 0000700B F5 <1> cmc ; NC if so 2023 0000700C C3 <1> retn 2024 <1> 2025 <1> 2026 <1> usesection lDEBUG_DATA_ENTRY 2026 ****************** <1> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 2027 <1> 2028 00005211 90 <1> align 2 2029 <1> %if _OPTIONS 2030 <1> opts: 2031 00005212 434F43534946414F41- <1> dw "CO", "CS", "IF", "AO", "AS", "PI" 2031 0000521B 535049 <1> 2032 <1> .word: 2033 0000521E 505250505053 <1> dw "PR", "PP", "PS" 2034 <1> N_OPTS equ ($-opts)/2 2035 <1> 2036 <1> optadr: 2037 00005224 [7C00][8000][8400] <1> dw options, startoptions, internalflags 2038 0000522A [8C00][9000][8002] <1> dw asm_options, asm_startoptions, psp22 2039 00005230 [6602][8402][3652] <1> dw pspdbg, parent, seldbg 2040 <1> 2041 00005236 0000 <1> seldbg: dw 0 2042 <1> %endif 2043 <1> 2044 <1> %if _PSPVARIABLES 2045 <1> pspvars: 2046 00005238 535050525049 <1> dw "SP", "PR", "PI" 2047 <1> N_PSPVARS equ ($-pspvars)/2 2048 <1> 2049 <1> pspvaradr: 2050 0000523E [6402] <1> dw pspdbe 2051 00005240 [4452] <1> dw psp_parent 2052 00005242 [4652] <1> dw psp_pra 2053 <1> 2054 00005244 0000 <1> psp_parent: dw 0 2055 00005246 00000000 <1> psp_pra: dd 0 2056 <1> 2057 <1> %endif 2058 <1> 2059 <1> %if _EXPRESSIONS 2060 0000524A 0B0020090D2C4C3B5D- <1> separators: countedw 32,9,13,",L;]:).",0 2060 ****************** <1> expansion: len = 0 2060 ****************** <1> expansion: len = 1 2060 ****************** <1> expansion: len = 2 2060 ****************** <1> expansion: len = 3 2060 ****************** <1> expansion: addlen = 7 2060 ****************** <1> expansion: len = 10 2060 ****************** <1> expansion: len = 11 2060 00005253 3A292E00 <1> 2061 <1> %else 2062 <1> separators: countedw 32,9,13,",L;]:.",0 2063 <1> %endif 2064 <1> 2065 <1> %ifn _EXPRESSIONS 2066 <1> %error Building without the expression evaluator is not possible right now 2067 <1> %endif 2068 <1> 2069 <1> %if _EXPRESSIONS 2070 00005257 00 <1> hhflag: db 0 ; &2: getdword called from hh, default to sub (precedence over 1) 2071 <1> ; &1: getdword called from hh, default to add 2072 <1> ; &4: getdword defaulted to add/sub for hh 2073 <1> ; (Note that during recursive getdword calls (bracket handling), 2074 <1> ; these flags are cleared. This means inside brackets the hh 2075 <1> ; defaulting is not in effect.) 2076 00005258 00000000 <1> hhvar: dd 0 ; left-hand operand for operator functions 2077 0000525C 00 <1> hhtype: db 0 ; type info on left-hand operand for operator functions 2078 <1> %endif 2079 <1> 2080 <1> 2081 <1> usesection lDEBUG_CODE 2081 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 2082 <1> 2083 <1> ; Get a numerical value from input line 2084 <1> ; INP: al = first character 2085 <1> ; si-> next character 2086 <1> ; OUT: bx:dx = numerical value 2087 <1> ; ah&80h = whether a pointer 2088 <1> ; ah&40h = whether a signed type 2089 <1> ; ah&20h = whether a positive value but signed type 2090 <1> ; ah&1Fh = number of significant bits 2091 <1> ; one-based position of highest one bit if unsigned or signed but positive 2092 <1> ; one-based position of lowest one bit from the top if negative signed 2093 <1> getdword: 2094 <1> getexpression: 2095 0000700D E86F04 <1> call skipcomm0 2096 00007010 51 <1> push cx 2097 00007011 57 <1> push di 2098 <1> lframe 2098 ****************** <1> expansion: bits = 16 2098 ****************** <1> expansion: base_size = 2 2098 ****************** <1> expansion: near_offset = 2 2098 ****************** <1> expansion: far_offset = 4 2098 ****************** <1> expansion: int_offset = 6 2098 ****************** <1> expansion: inner = 0 2098 ****************** <1> expansion: nested = 0 2098 ****************** <1> expansion: autoret = 2098 ****************** <1> expansion: pars_size = 0 2098 ****************** <1> expansion: pars_return_size = 0 2098 ****************** <1> expansion: parlist = 2098 ****************** <1> expansion: labellist = empty,empty,empty 2098 ****************** <1> expansion: ofs = 0 2098 ****************** <1> expansion: enter = 0 2098 ****************** <1> expansion: req = 0 2098 ****************** <1> expansion: usereq = 0 2098 ****************** <1> expansion: emit = 1 2098 ****************** <1> expansion: restore_frame_ofs = 0 2098 ****************** <1> expansion: pars_inner_size = 0 2099 00007012 5589E5 <1> lenter 2099 ****************** <1> expansion: wasearly = 0 2099 ****************** <1> expansion: early = 0 2099 ****************** <1> expansion: lsizevariables = 0 2099 ****************** <1> expansion: req = 1 2099 ****************** <1> expansion: enter_emitted = 0 2099 ****************** <1> expansion: enter = 1 2099 ****************** <1> expansion: 186 = 0 2099 ****************** <1> expansion: newlabel = frame_bp 2099 ****************** <1> expansion: labellist = frame_bp,undefined,,empty,empty,empty 2099 ****************** <1> expansion: ?frame_bp = 0 2099 ****************** <1> expansion: lsizeparameters = 0 2100 <1> 2101 00007015 31C9 <1> xor cx, cx 2102 00007017 51 <1> push cx 2103 <1> lvar word, ??Count 2103 ****************** <1> expansion: varsize = 2 2103 ****************** <1> expansion: ofs = -2 2103 ****************** <1> expansion: newlabel = ??Count 2103 ****************** <1> expansion: labellist = ??Count,undefined,,frame_bp,undefined,,empty,empty,empty 2103 ****************** <1> expansion: ???Count = -2 2103 ****************** <1> expansion: req = 1 2103 ****************** <1> expansion: hadvar = 1 2104 <1> %define lCount ???Count 2104 ****************** <1> expansion: lCount = ???Count 2105 <1> 2106 <1> ; The first number field's operator is initialized to 2107 <1> ; the dummy right-operand operator, which is set up with 2108 <1> ; the highest precedence. This means it'll be processed 2109 <1> ; immediately in the first iteration below. 2110 00007018 B117 <1> mov cl, OPERATOR_RIGHTOP 2111 0000701A 51 <1> push cx ; initialize dummy first number operator 2112 0000701B 83EC0A <1> sub sp, byte 6+4 2113 <1> lvar 6, ??A 2113 ****************** <1> expansion: varsize = 6 2113 ****************** <1> expansion: ofs = -8 2113 ****************** <1> expansion: newlabel = ??A 2113 ****************** <1> expansion: labellist = ??A,undefined,,??Count,undefined,,frame_bp,undefined,,empty,empty,empty 2113 ****************** <1> expansion: ???A = -8 2113 ****************** <1> expansion: req = 1 2113 ****************** <1> expansion: hadvar = 1 2114 <1> %define lA ???A 2114 ****************** <1> expansion: lA = ???A 2115 <1> lvar 6, ??B 2115 ****************** <1> expansion: varsize = 6 2115 ****************** <1> expansion: ofs = -14 2115 ****************** <1> expansion: newlabel = ??B 2115 ****************** <1> expansion: labellist = ??B,undefined,,??A,undefined,,??Count,undefined,,frame_bp,undefined,,empty,empty,empty 2115 ****************** <1> expansion: ???B = -14 2115 ****************** <1> expansion: req = 1 2115 ****************** <1> expansion: hadvar = 1 2116 <1> %define lB ???B 2116 ****************** <1> expansion: lB = ???B 2117 <1> 2118 <1> .loop: 2119 <1> ; Get next term of an expression. A term is one variable, 2120 <1> ; one immediate number, one expression contained within 2121 <1> ; round brackets or one expression used to access memory. 2122 <1> ; This code also parses any number of unary operators 2123 <1> ; (including type conversions) in front of the term. 2124 <1> ; 2125 <1> ; INP: (si-1)-> first character 2126 <1> ; OUT: (see label .operator) 2127 <1> ; bx:dx = numerical value of term 2128 <1> ; ah&80h = whether a pointer 2129 <1> ; ah&40h = whether a signed type 2130 <1> ; ah&20h = whether a positive value but signed type 2131 <1> ; al = first character behind term 2132 <1> ; si-> line 2133 <1> ; CHG: di, cx 2134 <1> ; 2135 <1> ; This part might be simplified by directly modifying 6byte[bp+lB] 2136 <1> ; instead of setting bx:dx and ah. (The current interface is one of 2137 <1> ; the holdovers of getexpressionterm as a separate function.) In 2138 <1> ; that case, bx:dx and ah presumably will then be simply added to 2139 <1> ; the CHG specification. 2140 <1> .term: 2141 0000701E 4E <1> dec si 2142 0000701F 56 <1> push si ; -> term 2143 <1> 2144 <1> ; count unary operators and type specifiers, 2145 <1> ; get the bit mask of required bytes 2146 <1> ; and skip past the operators and specifiers 2147 00007020 E89F03 <1> call count_unary_operators 2148 <1> 2149 <1> %if _INDIRECTION 2150 00007023 3C5B <1> cmp al, '[' 2151 00007025 7503E9E800 <1> je .indirection ; handle indirected value --> 2152 <1> %endif 2153 0000702A 3C28 <1> cmp al, '(' 2154 0000702C 7503E92801 <1> je .parens ; handle term with precedence --> 2155 <1> 2156 00007031 52 <1> push dx ; remember the count+1 2157 <1> ; (only if no indirection or bracket) 2158 <1> 2159 00007032 E808FD <1> call isvariable? ; is it a variable ? 2160 00007035 7226 <1> jc .literal ; no, must be an immediate value --> 2161 <1> 2162 <1> .variable: 2163 00007037 87DA <1> xchg bx, dx ; bx-> high word 2164 00007039 88CC <1> mov ah, cl 2165 0000703B 31C9 <1> xor cx, cx 2166 0000703D 80FC02 <1> cmp ah, 2 2167 00007040 7609 <1> jbe .variable_nohigh 2168 00007042 8B0F <1> mov cx, word [bx] ; get high word 2169 00007044 80FC03 <1> cmp ah, 3 2170 00007047 7702 <1> ja @F 2171 00007049 B500 <1> mov ch, 0 2172 <1> @@: 2172 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.197 2172 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.198 2172 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.199 2172 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.200 2172 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.201 2172 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.202 2172 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.203 2172 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.204 2172 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.197 2172 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.198 2172 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.199 2172 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.200 2172 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.201 2172 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.202 2172 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.203 2172 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.204 2172 ****************** <1> expansion: __@@_num = 205 2173 <1> .variable_nohigh: 2174 0000704B 87DA <1> xchg bx, dx ; bx-> low word 2175 0000704D 8B17 <1> mov dx, word [bx] ; get low word 2176 0000704F 89CB <1> mov bx, cx ; high word/zero 2177 00007051 80FC01 <1> cmp ah, 1 2178 00007054 7702 <1> ja .variable_notbyte 2179 00007056 B600 <1> mov dh, 0 ; limit to byte 2180 <1> .variable_notbyte: 2181 00007058 B400 <1> mov ah, 0 2182 0000705A E91A01 <1> jmp .term_end 2183 <1> 2184 <1> 2185 <1> .literal: 2186 0000705D B400 <1> mov ah, 0 2187 0000705F 31DB <1> xor bx, bx ; (in case of decimal base shortcut: 2188 00007061 BA0A00 <1> mov dx, 10 ; set base: decimal) 2189 00007064 3C23 <1> cmp al, '#' ; shortcut change to decimal base? 2190 00007066 7440 <1> je .lit_base ; yes --> 2191 <1> 2192 <1> .lithex_common: 2193 00007068 E83A03 <1> call .lit_ishexdigit? ; the first character must be a digit then 2194 0000706B 7303E99F00 <1> jc .err2 2195 00007070 30D2 <1> xor dl, dl ; initialize value 2196 <1> .lithex_loopdigit: 2197 00007072 3C5F <1> cmp al, '_' 2198 00007074 7423 <1> je .lithex_skip 2199 00007076 E82C03 <1> call .lit_ishexdigit? ; was last character ? 2200 00007079 7221 <1> jc .lit_end ; yes --> 2201 0000707B F6C7F0 <1> test bh, 0F0h ; would shift bits out ? 2202 0000707E 7403E98C00 <1> jnz .err2 2203 00007083 E82AE8 <1> call uppercase 2204 00007086 2C30 <1> sub al, '0' 2205 00007088 3C09 <1> cmp al, 9 ; was decimal digit ? 2206 0000708A 7602 <1> jbe .lithex_decimaldigit; yes --> 2207 0000708C 2C07 <1> sub al, 'A'-('9'+1) ; else adjust for hexadecimal digit 2208 <1> .lithex_decimaldigit: 2209 0000708E B90400 <1> mov cx, 4 2210 <1> .lithex_loopshift: 2211 00007091 D1E2 <1> shl dx, 1 2212 00007093 D1D3 <1> rcl bx, 1 2213 00007095 E2FA <1> loop .lithex_loopshift ; *16 2214 00007097 08C2 <1> or dl, al ; add in the new digit 2215 <1> .lithex_skip: 2216 00007099 AC <1> lodsb 2217 0000709A EBD6 <1> jmp short .lithex_loopdigit 2218 <1> 2219 <1> .lit_end: 2220 0000709C 3C23 <1> cmp al, '#' ; base change specification? 2221 0000709E 7408 <1> je .lit_base ; yes --> 2222 000070A0 E807F9 <1> call isseparator? ; after the number, there must be a separator 2223 000070A3 756A <1> jne .err2 ; none here --> 2224 000070A5 E9CF00 <1> jmp .term_end ; okay --> 2225 <1> .lit_base: 2226 000070A8 85DB <1> test bx, bx ; insure base <= 36 2227 000070AA 7563 <1> jnz .err2 2228 000070AC 83FA24 <1> cmp dx, byte 36 2229 000070AF 775E <1> ja .err2 2230 000070B1 83FA02 <1> cmp dx, byte 2 ; and >= 2 2231 000070B4 7259 <1> jb .err2 ; otherwise error --> 2232 <1> 2233 000070B6 AC <1> lodsb 2234 000070B7 B400 <1> mov ah, 0 ; (not sure why this) 2235 000070B9 80FA10 <1> cmp dl, 16 ; hexadecimal ? 2236 000070BC 74AA <1> je .lithex_common ; yes, use specific handling --> 2237 <1> 2238 000070BE 89D7 <1> mov di, dx ; di = base 2239 000070C0 88D1 <1> mov cl, dl 2240 000070C2 80C12F <1> add cl, '0'-1 2241 000070C5 80F939 <1> cmp cl, '9' 2242 000070C8 7602 <1> jbe .lit_basebelow11 2243 000070CA B139 <1> mov cl, '9' 2244 <1> .lit_basebelow11: ; cl = highest decimal digit for base ('1'..'9') 2245 000070CC 88D5 <1> mov ch, dl 2246 000070CE 80C536 <1> add ch, 'A'-10-1 ; ch = highest letter for base ('A'-x..'Z') 2247 <1> 2248 000070D1 E8D402 <1> call .lit_isdigit? ; first character must be a digit 2249 000070D4 7239 <1> jc .err2 2250 000070D6 31D2 <1> xor dx, dx ; initialize value 2251 <1> .lit_loopdigit: 2252 000070D8 3C5F <1> cmp al, '_' 2253 000070DA 7430 <1> je .lit_skip 2254 000070DC E8C902 <1> call .lit_isdigit? ; was last character ? 2255 000070DF 72BB <1> jc .lit_end ; yes --> 2256 000070E1 E8CCE7 <1> call uppercase 2257 000070E4 2C30 <1> sub al, '0' 2258 000070E6 3C09 <1> cmp al, 9 ; was decimal digit ? 2259 000070E8 7602 <1> jbe .lit_decimaldigit ; yes --> 2260 000070EA 2C07 <1> sub al, 'A'-('9'+1) ; else adjust for hexadecimal digit 2261 <1> .lit_decimaldigit: 2262 000070EC 50 <1> push ax 2263 000070ED 89D0 <1> mov ax, dx 2264 000070EF 53 <1> push bx 2265 000070F0 F7E7 <1> mul di ; multiply low word with base 2266 000070F2 89D3 <1> mov bx, dx 2267 000070F4 89C2 <1> mov dx, ax 2268 000070F6 58 <1> pop ax 2269 000070F7 52 <1> push dx 2270 000070F8 F7E7 <1> mul di ; multiply high word with base 2271 000070FA 85D2 <1> test dx, dx 2272 000070FC 5A <1> pop dx 2273 000070FD 7510 <1> jnz .err2 ; overflow --> 2274 000070FF 01C3 <1> add bx, ax ; add them 2275 00007101 58 <1> pop ax 2276 00007102 720B <1> jc .err2 ; overflow --> 2277 00007104 00C2 <1> add dl, al ; add in the new digit 2278 00007106 80D600 <1> adc dh, 0 2279 00007109 83D300 <1> adc bx, byte 0 2280 <1> .lit_skip: 2281 0000710C AC <1> lodsb 2282 0000710D EBC9 <1> jmp short .lit_loopdigit 2283 <1> 2284 <1> .err2: 2285 0000710F E9E9F5 <1> jmp error 2286 <1> 2287 <1> 2288 <1> %if _INDIRECTION 2289 <1> .indirection: 2290 00007112 81FC[4004] <1> cmp sp, stack + _EXPRESSION_INDIRECTION_STACK_CHECK 2291 00007116 72F7 <1> jb short .err2 ; deep recursion --> 2292 <1> 2293 <1> _386_PM push edx 2294 <1> _386_PM pop dx 2295 <1> 2296 00007118 B100 <1> mov cl, 0 ; clear hhflag for recursive calls 2297 0000711A 860E[5752] <1> xchg cl, byte [hhflag] ; cl = previous hhflag 2298 0000711E E85D03 <1> call skipcomma ; also skips the '[' in al 2299 00007121 8B1E[6003] <1> mov bx, word [reg_ds] ; default segment/selector 2300 00007125 51 <1> push cx ; save previous hhflag (cl) and bit mask (ch) 2301 00007126 E80DF8 <1> call getaddrX ; (recursively calls getexpression:) 2302 00007129 59 <1> pop cx 2303 0000712A 860E[5752] <1> xchg byte [hhflag], cl ; restore hhflag, and cl = 0 2304 0000712E 3C5D <1> cmp al, ']' ; verify this is the closing bracket 2305 00007130 75DD <1> jne short .err2 ; if not --> 2306 00007132 AC <1> lodsb ; get next character 2307 <1> ; bx:(e)dx-> data 2308 <1> ; ch = bit mask of required bytes 2309 <1> 2310 00007133 50 <1> push ax 2311 00007134 55 <1> push bp 2312 00007135 31ED <1> xor bp, bp 2313 00007137 55 <1> push bp 2314 00007138 55 <1> push bp 2315 00007139 89E5 <1> mov bp, sp ; -> buffer 2316 <1> 2317 0000713B E865F6 <1> call prephack 2318 0000713E E88BF6 <1> call dohack 2319 <1> ; Regarding how this loop handles cx, 2320 <1> ; remember that ch holds the flags for 2321 <1> ; the required bytes. From restoring 2322 <1> ; hhflag, cl is initialised to 0. In 2323 <1> ; each iteration, cl is incremented. 2324 <1> ; The loop instruction then decrements 2325 <1> ; cl again, but the entire cx is only 2326 <1> ; zero if no more bytes are required. 2327 <1> ; (This hack saves a single byte over 2328 <1> ; the "test ch, ch \ jnz" alternative 2329 <1> ; but it isn't very pretty because it 2330 <1> ; depends on the zero in hhflag. It 2331 <1> ; also probably slows down a bit.) 2332 <1> .indirection_loop: 2333 00007141 D0ED <1> shr ch, 1 ; need to read this byte ? 2334 00007143 7306 <1> jnc .indirection_skip ; no --> 2335 00007145 E894EE <1> call readmem ; else read byte 2336 00007148 884600 <1> mov byte [bp+0], al ; store byte 2337 <1> .indirection_skip: 2338 0000714B 41 <1> inc cx ; = 1 if no more to read 2339 0000714C 45 <1> inc bp ; increase buffer pointer 2340 <1> _386_PM_o32 ; inc edx 2341 0000714D 42 <1> inc dx ; increase offset 2342 0000714E E2F1 <1> loop .indirection_loop ; read next byte if any --> 2343 00007150 E88DF6 <1> call unhack 2344 <1> 2345 00007153 5A <1> pop dx 2346 00007154 5B <1> pop bx 2347 00007155 5D <1> pop bp 2348 00007156 58 <1> pop ax 2349 <1> 2350 <1> _386_PM push dx 2351 <1> _386_PM pop edx 2352 00007157 EB1D <1> jmp short .term_end_recount 2353 <1> %endif 2354 <1> 2355 <1> 2356 <1> .parens: 2357 00007159 81FC[4004] <1> cmp sp, stack + _EXPRESSION_PARENS_STACK_CHECK 2358 0000715D 72B0 <1> jb short .err2 ; recursion too deep --> 2359 <1> 2360 0000715F AC <1> lodsb 2361 00007160 FF36[5752] <1> push word [hhflag] 2362 00007164 C606[5752]00 <1> mov byte [hhflag], 0 ; clear those for recursive calls 2363 00007169 E8A1FE <1> call getexpression ; (recursive) 2364 0000716C 59 <1> pop cx 2365 0000716D 880E[5752] <1> mov byte [hhflag], cl ; restore 2366 00007171 3C29 <1> cmp al, ')' ; closing parens ? 2367 00007173 759A <1> jne short .err2 ; no --> 2368 00007175 AC <1> lodsb 2369 <1> 2370 <1> .term_end_recount: 2371 00007176 A9 <1> db __TEST_IMM16 ; skip pop, stc; NC 2372 <1> .term_end: 2373 00007177 59 <1> pop cx ; get count+1 of unary operators and type specifiers 2374 00007178 F9 <1> stc 2375 00007179 5F <1> pop di ; -> term 2376 0000717A 87F7 <1> xchg si, di 2377 0000717C 57 <1> push di ; save -> behind 2378 <1> ; si-> unary operators and types 2379 0000717D 720B <1> jc .unary_processnext ; if we preserved the count --> 2380 <1> 2381 0000717F 53 <1> push bx 2382 00007180 52 <1> push dx 2383 00007181 56 <1> push si 2384 00007182 E83D02 <1> call count_unary_operators 2385 00007185 89D1 <1> mov cx, dx ; get count+1 again 2386 00007187 5E <1> pop si 2387 00007188 5A <1> pop dx 2388 00007189 5B <1> pop bx 2389 <1> 2390 <1> .unary_processnext: 2391 0000718A E205 <1> loop .unary_doprocess 2392 0000718C 5E <1> pop si ; -> behind term 2393 0000718D 4E <1> dec si 2394 0000718E AC <1> lodsb ; restore al 2395 0000718F EB31 <1> jmp short .term_done 2396 <1> 2397 <1> .unary_doprocess: 2398 00007191 56 <1> push si 2399 00007192 51 <1> push cx 2400 00007193 53 <1> push bx 2401 00007194 52 <1> push dx 2402 <1> 2403 00007195 89CF <1> mov di, cx ; count+1 of operators to skip 2404 00007197 E82A02 <1> call count_unary_operators_restrict ; skip them 2405 0000719A 7523 <1> jnz .err ; if not enough --> (?!) 2406 <1> 2407 0000719C E820F8 <1> call istype? ; get type info if it's a type 2408 0000719F 720F <1> jc .unary_processnotype ; isn't a type --> 2409 000071A1 D1EB <1> shr bx, 1 ; CF = signedness 2410 000071A3 9F <1> lahf ; with CF = signedness 2411 000071A4 8B8F[8651] <1> mov cx, word [ typehandlers + bx ] ; function 2412 <1> .unary_processcall: 2413 000071A8 5A <1> pop dx 2414 000071A9 5B <1> pop bx 2415 000071AA FFD1 <1> call cx ; call type or unary operator handler 2416 000071AC 59 <1> pop cx ; restore processing counter 2417 000071AD 5E <1> pop si ; restore ->term 2418 000071AE EBDA <1> jmp short .unary_processnext 2419 <1> 2420 <1> .unary_processnotype: 2421 000071B0 E8DBF7 <1> call isunaryoperator? ; get unary operator index 2422 000071B3 750A <1> jne .err ; if no unary operator --> (?!) 2423 000071B5 89CB <1> mov bx, cx 2424 000071B7 D1E3 <1> shl bx, 1 2425 000071B9 8B8F[A751] <1> mov cx, word [ unaryoperatorhandlers + bx ] 2426 000071BD EBE9 <1> jmp short .unary_processcall 2427 <1> 2428 <1> .err: 2429 000071BF E939F5 <1> jmp error 2430 <1> 2431 <1> .term_done: 2432 <1> ; get the operator following this number 2433 000071C2 E8BA02 <1> call skipcomm0 2434 000071C5 8956F2 <1> mov word [bp+lB+0], dx 2435 000071C8 895EF4 <1> mov word [bp+lB+2], bx ; store numeric value 2436 000071CB E8C6F7 <1> call isoperator? ; cl = operator index (if any) 2437 000071CE 741D <1> je .operator_apparently_valid 2438 000071D0 E89502 <1> call iseol? ; end of line follows ? 2439 000071D3 7428 <1> je .operator_invalid 2440 <1> .hh_twofold_check: 2441 000071D5 F606[5752]03 <1> test byte [hhflag], 1|2 ; special H operation requested ? 2442 000071DA 7421 <1> jz .operator_invalid ; no --> 2443 000071DC B302 <1> mov bl, OPERATOR_MINUS ; assume it's sub 2444 000071DE F606[5752]02 <1> test byte [hhflag], 2 ; sub requested by H ? 2445 000071E3 7501 <1> jnz .hh_twofold_found ; yes --> 2446 000071E5 4B <1> dec bx ; else it must be add 2447 <1> %if (OPERATOR_MINUS - 1) != OPERATOR_PLUS 2448 <1> %error Remove optimization 2449 <1> %endif 2450 <1> .hh_twofold_found: 2451 000071E6 800E[5752]04 <1> or byte [hhflag], 4 ; set flag for H twofold operation 2452 000071EB EB12 <1> jmp short .operator_done ; return this --> 2453 <1> 2454 <1> .operator_apparently_valid: 2455 000071ED 89CB <1> mov bx, cx 2456 000071EF 01DB <1> add bx, bx ; (bh = 0!) 2457 000071F1 FF97[B151] <1> call [operatordispatchers+bx] 2458 000071F5 85DB <1> test bx, bx ; valid ? 2459 000071F7 74DC <1> jz .hh_twofold_check ; no, check for H twofold operation --> 2460 000071F9 E88202 <1> call skipcomma 2461 000071FC A9 <1> db __TEST_IMM16 2462 <1> .operator_invalid: 2463 000071FD 31DB <1> xor bx, bx ; bl = 0 (no operator) 2464 <1> .operator_done: 2465 000071FF 88E7 <1> mov bh, ah ; bh = type info 2466 00007201 895EF6 <1> mov word [bp+lB+4], bx ; store type and following operator 2467 <1> 2468 00007204 8A4EFC <1> mov cl, byte [bp+lA+4] 2469 00007207 E88901 <1> call .compare_operators ; (cmp bl, cl = cmp Boprtr, Aoprtr) 2470 0000720A 7703E99B00 <1> jbe .high_precedence_A ; compute the first operand first --> 2471 <1> ; (jump taken for invalid Boprtr too) 2472 <1> 2473 0000720F FF46FE <1> inc word [bp+lCount] ; increase loop count 2474 00007212 FF76F8 <1> push word [bp+lA+0] 2475 00007215 FF76FA <1> push word [bp+lA+2] 2476 00007218 FF76FC <1> push word [bp+lA+4] ; push A and its operator 2477 <1> 2478 0000721B FF76F6 <1> push word [bp+lB+4] 2479 0000721E FF76F4 <1> push word [bp+lB+2] 2480 00007221 FF76F2 <1> push word [bp+lB+0] 2481 00007224 8F46F8 <1> pop word [bp+lA+0] 2482 00007227 8F46FA <1> pop word [bp+lA+2] 2483 0000722A 8F46FC <1> pop word [bp+lA+4] ; set A to B, including operator 2484 <1> 2485 0000722D 81FC[4004] <1> cmp sp, stack + _EXPRESSION_PRECEDENCE_STACK_CHECK 2486 00007231 7703E9C5F4 <1> jbe error ; recursion too deep --> 2487 <1> 2488 00007236 E8658E <1> d4 call d4message 2489 00007239 676574657870726573- <1> d4 asciz "getexpression: Entering loop/recursion",13,10 2489 00007242 73696F6E3A20456E74- <1> 2489 0000724B 6572696E67206C6F6F- <1> 2489 00007254 702F72656375727369- <1> 2489 0000725D 6F6E0D0A00 <1> 2490 <1> 2491 <1> .loop_j: 2492 00007262 E9B9FD <1> jmp .loop ; start again (former B as first term) --> 2493 <1> 2494 <1> .cont: 2495 <1> 2496 00007265 E8368E <1> d4 call d4message 2497 00007268 676574657870726573- <1> d4 asciz "getexpression: End of loop/recursion",13,10 2497 00007271 73696F6E3A20456E64- <1> 2497 0000727A 206F66206C6F6F702F- <1> 2497 00007283 726563757273696F6E- <1> 2497 0000728C 0D0A00 <1> 2498 <1> 2499 0000728F FF76FC <1> push word [bp+lA+4] 2500 00007292 FF76FA <1> push word [bp+lA+2] 2501 00007295 FF76F8 <1> push word [bp+lA+0] 2502 00007298 8F46F2 <1> pop word [bp+lB+0] 2503 0000729B 8F46F4 <1> pop word [bp+lB+2] 2504 0000729E 8F46F6 <1> pop word [bp+lB+4] ; set B to A, including operator 2505 <1> 2506 000072A1 8F46FC <1> pop word [bp+lA+4] 2507 000072A4 8F46FA <1> pop word [bp+lA+2] 2508 000072A7 8F46F8 <1> pop word [bp+lA+0] ; pop A and its operator 2509 <1> 2510 <1> .high_precedence_A: 2511 000072AA 8B4EFC <1> mov cx, word [bp+lA+4] ; retrieve A's type info and operator 2512 000072AD FF76FA <1> push word [bp+lA+2] 2513 000072B0 FF76F8 <1> push word [bp+lA+0] 2514 000072B3 8B46F6 <1> mov ax, word [bp+lB+4] ; retrieve B's type info and operator 2515 000072B6 882E[5C52] <1> mov byte [hhtype], ch ; set type info 2516 000072BA 8F06[5852] <1> pop word [hhvar] 2517 000072BE B500 <1> mov ch, 0 ; cx = A's 1-based operator index 2518 000072C0 8F06[5A52] <1> pop word [hhvar+2] ; retrieve A's number 2519 000072C4 8B56F2 <1> mov dx, word [bp+lB+0] 2520 000072C7 89CF <1> mov di, cx 2521 000072C9 8B5EF4 <1> mov bx, word [bp+lB+2] ; retrieve B's number 2522 000072CC 01FF <1> add di, di ; = offset into dispatch table 2523 000072CE 50 <1> push ax ; preserve B's operator 2524 000072CF FF95[E151] <1> call near [operatorfunctions+di]; compute: (A) operatorA (B) 2525 000072D3 59 <1> pop cx ; cl = B's operator 2526 <1> 2527 000072D4 8956F8 <1> mov word [bp+lA+0], dx 2528 000072D7 88C8 <1> mov al, cl ; B's operator 2529 000072D9 895EFA <1> mov word [bp+lA+2], bx 2530 000072DC 8946FC <1> mov word [bp+lA+4], ax ; store result in A, with B's operator 2531 <1> 2532 <1> %if OPERATOR_INVALID != 0 2533 <1> %error Remove optimisation 2534 <1> %endif 2535 000072DF 84C0 <1> test al, al ; (previous B's) operator valid ? 2536 000072E1 7458 <1> jz .end ; no, end of sequence --> 2537 <1> 2538 000072E3 837EFE00 <1> cmp word [bp+lCount], byte 0 ; in recursion ? 2539 000072E7 7503E976FF <1> je .loop_j ; no, loop --> 2540 <1> 2541 000072EC 5B <1> pop bx 2542 000072ED 53 <1> push bx ; retrieve saved ('@') operator 2543 <1> 2544 000072EE E8A200 <1> call .compare_operators ; (cmp bl, cl = cmp @oprtr, Aoprtr) 2545 000072F1 7303E96CFF <1> jb .loop_j ; A's operator's precedence higher --> 2546 <1> 2547 000072F6 E8A58D <1> d4 call d4message 2548 000072F9 676574657870726573- <1> d4 asciz "getexpression: Loop/recursion found to be not necessary anymore",13,10 2548 00007302 73696F6E3A204C6F6F- <1> 2548 0000730B 702F72656375727369- <1> 2548 00007314 6F6E20666F756E6420- <1> 2548 0000731D 746F206265206E6F74- <1> 2548 00007326 206E65636573736172- <1> 2548 0000732F 7920616E796D6F7265- <1> 2548 00007338 0D0A00 <1> 2549 <1> 2550 <1> ; dec word [bp+lCount] 2551 <1> ; jmp .cont ; return to previous level --> 2552 <1> 2553 <1> .end: 2554 0000733B FF4EFE <1> dec word [bp+lCount] ; decrease loop count 2555 0000733E 7803E922FF <1> jns .cont ; process next operand from stack --> 2556 <1> 2557 00007343 8B56F8 <1> mov dx, word [bp+lA+0] 2558 00007346 8B5EFA <1> mov bx, word [bp+lA+2] ; retrieve A 2559 00007349 8B46FC <1> mov ax, word [bp+lA+4] ; (discard (invalid) operator) 2560 <1> 2561 0000734C 89EC5D <1> lleave ; remove the stack frame 2561 ****************** <1> expansion: 186 = 0 2561 ****************** <1> expansion: __lframe__autoret = 2562 <1> 2563 0000734F 5F <1> pop di 2564 <1> ; pop cx ; restore registers 2565 <1> 2566 <1> .return: 2567 00007350 4E <1> dec si 2568 00007351 80E4C0 <1> and ah, 0C0h 2569 <1> ; push cx 2570 00007354 52 <1> push dx 2571 00007355 53 <1> push bx 2572 00007356 AC <1> lodsb ; (restore al) 2573 00007357 B90100 <1> mov cx, 1 2574 0000735A 53 <1> push bx 2575 0000735B F6C440 <1> test ah, 40h ; signed type ? 2576 0000735E 7416 <1> jz .unsigned ; no --> 2577 00007360 F6C780 <1> test bh, 80h ; negative value ? 2578 00007363 7411 <1> jz .unsigned ; no --> 2579 <1> .signed: 2580 00007365 21D3 <1> and bx, dx 2581 00007367 43 <1> inc bx ; = 0 if -1 (all bits set) 2582 00007368 5B <1> pop bx 2583 00007369 7422 <1> jz .done ; is -1, 1 significant bit --> 2584 0000736B B122 <1> mov cl, 32+1+1 ; number of significant bits is 1 + 1-based index of highest clear bit 2585 <1> .signedloop: 2586 0000736D D1E2 <1> shl dx, 1 2587 0000736F D1D3 <1> rcl bx, 1 ; shift up the number 2588 00007371 49 <1> dec cx ; maintain index 2589 00007372 72F9 <1> jc .signedloop ; still a set bit --> 2590 00007374 EB17 <1> jmp short .done 2591 <1> .unsigned: 2592 00007376 09D3 <1> or bx, dx ; = 0 if 0 (all bits cleared) 2593 00007378 5B <1> pop bx 2594 00007379 7412 <1> jz .done ; is 0, 1 significant bit --> 2595 0000737B B121 <1> mov cl, 32+1 ; number of significant bits is 1-based index of highest set bit 2596 <1> .unsignedloop: 2597 0000737D D1E2 <1> shl dx, 1 2598 0000737F D1D3 <1> rcl bx, 1 2599 00007381 49 <1> dec cx 2600 00007382 73F9 <1> jnc .unsignedloop 2601 00007384 F6C440 <1> test ah, 40h ; positive signed value ? 2602 00007387 7404 <1> jz .done ; no --> 2603 00007389 41 <1> inc cx ; then the following zero bit is required too 2604 0000738A 80CC20 <1> or ah, 20h 2605 <1> .done: 2606 0000738D 08CC <1> or ah, cl 2607 0000738F 5B <1> pop bx 2608 00007390 5A <1> pop dx 2609 00007391 59 <1> pop cx 2610 00007392 C3 <1> retn 2611 <1> 2612 <1> ; INP: bl = operator index 1 2613 <1> ; cl = operator index 2 2614 <1> ; OUT: flags as for "cmp precedence1, precedence2" 2615 <1> ; CHG: bx, cx 2616 <1> .compare_operators: 2617 00007393 E80600 <1> call .getprecedence 2618 00007396 E80300 <1> call .getprecedence 2619 00007399 39CB <1> cmp bx, cx 2620 0000739B C3 <1> retn 2621 <1> 2622 <1> .getprecedence: 2623 0000739C 30FF <1> xor bh, bh 2624 0000739E 8A9F[C951] <1> mov bl, byte [operatorprecedences+bx] 2625 000073A2 87D9 <1> xchg bx, cx 2626 000073A4 C3 <1> retn 2627 <1> 2628 <1> getexpression.lit_ishexdigit?: 2629 000073A5 B93946 <1> mov cx, "9F" 2630 <1> getexpression.lit_isdigit?: 2631 000073A8 3C30 <1> cmp al, '0' 2632 000073AA 7214 <1> jb .no 2633 000073AC 38C8 <1> cmp al, cl 2634 000073AE 760D <1> jbe .yes 2635 000073B0 50 <1> push ax 2636 000073B1 E8FCE4 <1> call uppercase 2637 000073B4 38E8 <1> cmp al, ch 2638 000073B6 7707 <1> ja .no_p 2639 000073B8 3C41 <1> cmp al, 'A' 2640 000073BA 7203 <1> jb .no_p 2641 000073BC 58 <1> pop ax 2642 <1> .yes: 2643 000073BD F8 <1> clc 2644 000073BE C3 <1> retn 2645 <1> 2646 <1> .no_p: 2647 000073BF 58 <1> pop ax 2648 <1> .no: 2649 000073C0 F9 <1> stc 2650 000073C1 C3 <1> retn 2651 <1> 2652 <1> ; INP: si-> possible unary operators 2653 <1> ; OUT: dx = 1 + count of unary operators 2654 <1> ; al, si-> behind identified unary operators 2655 <1> ; ch = bit mask of required bytes, 2656 <1> ; bits 0..3 represent one byte of a dword each 2657 <1> ; bits 4..7 are clear 2658 <1> ; CHG: bx, ch, di 2659 <1> ; 2660 <1> ; Type specifications are parsed as unary operators 2661 <1> ; here. (Elsewhere, "unary operators" refers only to 2662 <1> ; the unary operators specified as one of "+-~!?".) 2663 <1> count_unary_operators: 2664 000073C2 31FF <1> xor di, di 2665 <1> ; INP: si-> possible unary operators 2666 <1> ; di = maximum count+1 of unary operators to process, 2667 <1> ; zero means unlimited 2668 <1> ; OUT: dx = 1 + count of unary operators, 2669 <1> ; at most di 2670 <1> ; al, si-> behind identified unary operators 2671 <1> ; ch = bit mask of required bytes, 2672 <1> ; bits 0..3 represent one byte of a dword each 2673 <1> ; bits 4..7 are clear 2674 <1> ; ZR if maximum reached 2675 <1> ; NZ if maximum not reached 2676 <1> ; CHG: bx, ch 2677 <1> count_unary_operators_restrict: 2678 000073C4 B50F <1> mov ch, 1111b ; default to access a full dword 2679 000073C6 31D2 <1> xor dx, dx ; initialize counter to zero 2680 000073C8 A8 <1> db __TEST_IMM8 ; skip pop 2681 <1> .loop: 2682 000073C9 5F <1> pop di ; get maximum count 2683 000073CA 42 <1> inc dx ; count unary operators and type specifiers 2684 000073CB 57 <1> push di ; save maximum count again 2685 000073CC E8AF00 <1> call skipcomma ; load next character and skip blanks, comma 2686 000073CF 39FA <1> cmp dx, di ; reached maximum ? 2687 000073D1 741B <1> je .end ; yes --> (ZR) 2688 000073D3 51 <1> push cx 2689 000073D4 E8E8F5 <1> call istype? ; check for type and if so retrieve info 2690 000073D7 720F <1> jc .notype ; not a type --> 2691 000073D9 59 <1> pop cx 2692 <1> 2693 000073DA D1EB <1> shr bx, 1 ; discard signedness bit 2694 000073DC 89FE <1> mov si, di ; -> behind the type specifier 2695 000073DE B11F <1> mov cl, 01Fh ; prepare shift count register 2696 000073E0 238F[7A51] <1> and cx,[typebitmasks+bx]; apply mask and get shift count register 2697 000073E4 D2E5 <1> shl ch, cl ; apply shift 2698 000073E6 EBE1 <1> jmp short .loop ; check for more --> 2699 <1> 2700 <1> .notype: 2701 000073E8 E8A3F5 <1> call isunaryoperator? ; is it a unary operator? 2702 000073EB 59 <1> pop cx 2703 000073EC 74DB <1> je .loop ; yes, check for more --> 2704 <1> ; (NZ) 2705 <1> .end: 2706 000073EE 5F <1> pop di ; discard 2707 000073EF C3 <1> retn 2708 <1> 2709 <1> 2710 <1> getword: 2711 000073F0 53 <1> push bx 2712 000073F1 E819FC <1> call getexpression 2713 000073F4 5B <1> pop bx 2714 000073F5 50 <1> push ax 2715 000073F6 80E41F <1> and ah, 1Fh 2716 000073F9 80FC10 <1> cmp ah, 16 2717 000073FC 58 <1> pop ax 2718 000073FD 7715 <1> ja short errorj6 ; if error 2719 000073FF C3 <1> retn 2720 <1> 2721 <1> getbyte: 2722 00007400 53 <1> push bx 2723 00007401 52 <1> push dx 2724 00007402 E808FC <1> call getexpression 2725 00007405 5B <1> pop bx 2726 00007406 88FE <1> mov dh, bh 2727 00007408 5B <1> pop bx 2728 00007409 50 <1> push ax 2729 0000740A 80E41F <1> and ah, 1Fh 2730 0000740D 80FC08 <1> cmp ah, 8 2731 00007410 58 <1> pop ax 2732 00007411 7701 <1> ja short errorj6 ; if error 2733 00007413 C3 <1> retn 2734 <1> 2735 <1> errorj6: 2736 00007414 E9E4F2 <1> jmp error 2737 <1> 2738 <1> 2739 <1> ; GETNYB - Convert the hex character in AL into a nybble. Return 2740 <1> ; carry set in case of error. 2741 <1> 2742 <1> getnyb: 2743 00007417 50 <1> push ax 2744 00007418 2C30 <1> sub al, '0' 2745 0000741A 3C09 <1> cmp al, 9 2746 0000741C 760D <1> jbe .return ; if normal digit 2747 0000741E 58 <1> pop ax 2748 0000741F 50 <1> push ax 2749 00007420 E88DE4 <1> call uppercase 2750 00007423 2C41 <1> sub al, 'A' 2751 00007425 3C05 <1> cmp al, 'F'-'A' 2752 00007427 7706 <1> ja .error ; if not A..F 2753 00007429 040A <1> add al, 10 2754 <1> .return: 2755 0000742B 44 <1> inc sp ; normal return (first pop old AX) 2756 0000742C 44 <1> inc sp 2757 0000742D F8 <1> clc 2758 0000742E C3 <1> retn 2759 <1> .error: 2760 0000742F 58 <1> pop ax ; error return 2761 00007430 F9 <1> stc 2762 00007431 C3 <1> retn 6324 6325 6326 %include "lineio.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug line input and output 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection lDEBUG_CODE 18 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 19 <1> 20 <1> ; Check for given string (cap-insensitive) 21 <1> ; 22 <1> ; INP: si-> input string to check (either cap), 23 <1> ; terminated by CR (13), semicolon, space, tab, comma 24 <1> ; dx-> ASCIZ string to check (all-caps) 25 <1> ; OUT: Iff string matches, 26 <1> ; ZR 27 <1> ; si-> at separator that terminates the keyword 28 <1> ; else, 29 <1> ; NZ 30 <1> ; si = input si 31 <1> ; STT: ds = es = ss 32 <1> ; CHG: dx, ax 33 <1> isstring?: 34 00007432 56 <1> push si 35 00007433 87D7 <1> xchg dx, di 36 <1> .loop: 37 00007435 AC <1> lodsb 38 00007436 E877E4 <1> call uppercase 39 00007439 AE <1> scasb 40 0000743A 7506 <1> jne .mismatch 41 0000743C 84C0 <1> test al, al 42 0000743E 75F5 <1> jne .loop 43 00007440 EB20 <1> jmp .matched_zr 44 <1> 45 <1> .mismatch: 46 00007442 E82300 <1> call iseol? 47 00007445 7414 <1> je .checkend 48 00007447 3C20 <1> cmp al, 32 49 00007449 7410 <1> je .checkend 50 0000744B 3C09 <1> cmp al, 9 51 0000744D 740C <1> je .checkend 52 0000744F 3C2C <1> cmp al, ',' 53 00007451 7408 <1> je .checkend 54 00007453 3C3D <1> cmp al, '=' 55 00007455 7404 <1> je .checkend 56 <1> .ret_nz: 57 <1> ; NZ 58 00007457 5E <1> pop si 59 <1> .ret: 60 00007458 87D7 <1> xchg dx, di 61 0000745A C3 <1> retn 62 <1> 63 <1> .checkend: 64 0000745B 26807DFF00 <1> cmp byte [es:di - 1], 0 65 00007460 75F5 <1> jne .ret_nz 66 <1> .matched_zr: ; ZR 67 00007462 58 <1> pop ax ; (discard) 68 00007463 8D74FF <1> lea si, [si - 1] ; -> separator 69 00007466 EBF0 <1> jmp .ret 70 <1> 71 <1> 72 <1> iseol?: 73 00007468 3C0D <1> cmp al, 13 74 0000746A 7406 <1> je .ret 75 0000746C 3C3B <1> cmp al, ';' 76 0000746E 7402 <1> je .ret 77 00007470 3C00 <1> cmp al, 0 78 <1> .ret: 79 00007472 C3 <1> retn 80 <1> 81 <1> ; Check for end of line 82 <1> ; 83 <1> ; INP: al = first character 84 <1> ; ds:si-> next character 85 <1> ; OUT: ZR 86 <1> ; al = 13 or al = ';' or al = 0 87 <1> ; (does not return if anything on line beside blanks) 88 <1> chkeol: 89 00007473 E83700 <1> call skipwh0 90 00007476 E8EFFF <1> call iseol? 91 00007479 74F7 <1> je iseol?.ret ; if EOL --> 92 <1> 93 <1> errorj8: 94 0000747B E97DF2 <1> jmp error 95 <1> 96 <1> ; SKIPCOMMA - Skip white space, then an optional comma, and more white 97 <1> ; space. 98 <1> ; SKIPCOMM0 - Same as above, but we already have the character in AL. 99 <1> ; STK: 3 word 100 <1> skipcomma: 101 0000747E AC <1> lodsb 102 <1> skipcomm0: 103 0000747F E82B00 <1> call skipwh0 104 00007482 3C2C <1> cmp al, ',' 105 00007484 750F <1> jne .return ; if no comma 106 00007486 56 <1> push si 107 00007487 E82200 <1> call skipwhite 108 0000748A 3C0D <1> cmp al, 13 109 0000748C 7504 <1> jne .noteol ; if not end of line 110 0000748E 5E <1> pop si 111 0000748F B02C <1> mov al, ',' 112 00007491 C3 <1> retn 113 <1> .noteol: 114 00007492 83C402 <1> add sp, byte 2 ; pop si into nowhere 115 <1> .return: 116 00007495 C3 <1> retn 117 <1> 118 <1> 119 <1> skipequals: 120 00007496 AC <1> lodsb 121 <1> skipequ0: 122 00007497 E81300 <1> call skipwh0 123 0000749A 3C3D <1> cmp al, '=' 124 0000749C 7503 <1> jne .return 125 0000749E E80B00 <1> call skipwhite 126 <1> .return: 127 000074A1 C3 <1> retn 128 <1> 129 <1> 130 <1> ; Skip alphabetic characters, and then white space 131 <1> ; 132 <1> ; INP: ds:si-> first character 133 <1> ; OUT: al = first non-blank character behind alphabetic characters 134 <1> ; ds:si-> character behind the first non-blank behind alpha. 135 <1> skipalpha: 136 <1> .: 137 000074A2 AC <1> lodsb 138 000074A3 24DF <1> and al, TOUPPER 139 000074A5 2C41 <1> sub al, 'A' 140 000074A7 3C19 <1> cmp al, 'Z'-'A' 141 000074A9 76F7 <1> jbe . 142 000074AB 4E <1> dec si 143 <1> 144 <1> ; Skip blanks and tabs 145 <1> ; 146 <1> ; INP: ds:si-> first character 147 <1> ; OUT: al = first non-blank character 148 <1> ; ds:si-> character behind the first non-blank 149 <1> ; CHG: - 150 <1> ; STK: 1 word 151 <1> skipwhite: 152 000074AC AC <1> lodsb 153 <1> 154 <1> ; Same as above, but first character in al 155 <1> ; 156 <1> ; INP: al = first character 157 <1> ; ds:si-> next character 158 <1> ; OUT: al = first non-blank character 159 <1> ; ds:si-> character behind the first non-blank 160 <1> ; CHG: - 161 <1> ; STK: 1 word 162 <1> skipwh0: 163 000074AD 3C20 <1> cmp al, 32 164 000074AF 74FB <1> je skipwhite 165 000074B1 3C09 <1> cmp al, 9 166 000074B3 74F7 <1> je skipwhite 167 000074B5 C3 <1> retn 168 <1> 169 <1> ; Compare character with separators 170 <1> ; 171 <1> ; INP: al = character 172 <1> ; OUT: ZR if al is blank, tab, comma, semicolon or equal sign 173 <1> ; NZ else 174 <1> ifsep: 175 000074B6 E8AFFF <1> call iseol? 176 000074B9 740E <1> je .return 177 000074BB 3C20 <1> cmp al, 32 178 000074BD 740A <1> je .return 179 000074BF 3C09 <1> cmp al, 9 180 000074C1 7406 <1> je .return 181 000074C3 3C2C <1> cmp al, ',' 182 000074C5 7402 <1> je .return 183 000074C7 3C3D <1> cmp al, '=' 184 <1> .return: 185 000074C9 C3 <1> retn 186 <1> 187 <1> ; SHOWSTRING - Print ASCIZ string. 188 <1> showstring.next: 189 000074CA AA <1> stosb 190 <1> showstring: 191 000074CB AC <1> lodsb 192 000074CC 84C0 <1> test al, al 193 000074CE 75FA <1> jnz .next 194 000074D0 C3 <1> retn 195 <1> 196 <1> 197 <1> ; Dump byte as decimal number string 198 <1> ; 199 <1> ; INP: al = byte 200 <1> ; di-> where to store 201 <1> ; OUT: - 202 <1> ; CHG: di-> behind variable-length string 203 <1> decbyte: 204 000074D1 50 <1> push ax 205 000074D2 51 <1> push cx 206 000074D3 B96400 <1> mov cx, 100 207 000074D6 E80B00 <1> call .div 208 000074D9 B10A <1> mov cl, 10 209 000074DB E80600 <1> call .div 210 000074DE 0430 <1> add al, '0' 211 000074E0 AA <1> stosb 212 000074E1 59 <1> pop cx 213 000074E2 58 <1> pop ax 214 000074E3 C3 <1> retn 215 <1> 216 <1> .div: 217 000074E4 30E4 <1> xor ah, ah 218 000074E6 F6F1 <1> div cl 219 000074E8 08C5 <1> or ch, al 220 000074EA 7403 <1> jz .leadingzero 221 000074EC 0430 <1> add al, '0' 222 000074EE AA <1> stosb 223 <1> .leadingzero: 224 000074EF 86C4 <1> xchg al, ah 225 000074F1 C3 <1> retn 226 <1> 227 <1> 228 <1> 229 <1> ; dump high word of eax - assumes 386 230 <1> hexword_high: 231 <1> cpu 386 231 ****************** <1> expansion: __CPU__ = [cpu 386] 232 000074F2 66C1C010 <1> rol eax, 16 233 000074F6 E80500 <1> call hexword 234 000074F9 66C1C010 <1> rol eax, 16 235 <1> cpu 8086 235 ****************** <1> expansion: __CPU__ = [cpu 8086] 236 000074FD C3 <1> retn 237 <1> 238 <1> 239 <1> ; hexdword - dump dword (in eax) to hex ASCII - assumes 386 240 <1> ; HEXWORD - Print hex word (in AX). 241 <1> ; HEXBYTE - Print hex byte (in AL). 242 <1> ; HEXNYB - Print hex digit. 243 <1> ; Uses none. 244 <1> %if 0 ; currently disabled because only one call made to here (ID command) 245 <1> hexdword: 246 <1> call hexword_high 247 <1> %endif 248 <1> hexword: 249 000074FE 86C4 <1> xchg al, ah 250 00007500 E80200 <1> call hexbyte 251 00007503 86C4 <1> xchg al, ah 252 <1> 253 <1> hexbyte: 254 00007505 51 <1> push cx 255 00007506 B104 <1> mov cl, 4 256 00007508 D2C0 <1> rol al, cl 257 0000750A E80300 <1> call hexnyb 258 0000750D D2C0 <1> rol al, cl 259 0000750F 59 <1> pop cx 260 <1> 261 <1> hexnyb: 262 00007510 50 <1> push ax 263 00007511 240F <1> and al, 0Fh 264 00007513 0490 <1> add al, 90h 265 00007515 27 <1> daa 266 00007516 1440 <1> adc al, 40h 267 00007518 27 <1> daa ; these four instructions change to ASCII hex 268 00007519 AA <1> stosb 269 0000751A 58 <1> pop ax 270 0000751B C3 <1> retn 271 <1> 272 <1> ; TAB_TO - Space fill until reaching the column indicated by AX. 273 <1> ; (Print a new line if necessary.) 274 <1> 275 <1> tab_to: 276 0000751C 50 <1> push ax 277 0000751D 29F8 <1> sub ax, di 278 0000751F 7706 <1> ja tabto1 ; if there's room on this line 279 00007521 E80B00 <1> call trimputs 280 00007524 BF[A901] <1> mov di, line_out 281 <1> tabto1: 282 00007527 59 <1> pop cx 283 00007528 29F9 <1> sub cx, di 284 0000752A B020 <1> mov al, 32 285 0000752C F3AA <1> rep stosb ; space fill to the right end 286 0000752E C3 <1> retn 287 <1> 288 <1> ; Trim excess blanks, append linebreak and display line_out. 289 <1> ; 290 <1> ; INP: di-> behind last character to display, or blank 291 <1> ; 292 <1> ; Note: May overflow if line_out only contains blanks. The byte at 293 <1> ; trim_overflow is used to avoid overflows. 294 <1> trimputs: 295 0000752F 4F <1> dec di 296 00007530 803D20 <1> cmp byte [di], 32 297 00007533 74FA <1> je trimputs 298 00007535 47 <1> inc di 299 <1> 300 <1> ; Append linebreak and display line_out 301 <1> ; 302 <1> ; INP: di-> behind last character to display 303 <1> ; STT: all segment registers same 304 <1> ; CHG: ax, bx, cx, dx 305 <1> putsline_crlf: 306 00007536 B80D0A <1> mov ax, 10<<8| 13 307 00007539 AB <1> stosw 308 <1> 309 <1> ; Display line_out 310 <1> ; 311 <1> ; INP: di-> behind last character to display 312 <1> ; STT: all segment registers same 313 <1> ; CHG: ax, bx, cx, dx 314 <1> putsline: 315 0000753A 89F9 <1> mov cx, di 316 0000753C BA[A901] <1> mov dx, line_out 317 0000753F 29D1 <1> sub cx, dx 318 <1> 319 <1> ; Display message 320 <1> ; 321 <1> ; INP: dx-> message to display 322 <1> ; cx = length of message 323 <1> ; STT: all segment registers same 324 <1> ; CHG: ax, bx, cx, dx 325 <1> puts: 326 00007541 F606[8700]20 <1> testopt [internalflags], tt_silence 326 ****************** <1> expansion: adr = '[internalflags]' 326 ****************** <1> expansion: len = 15 326 ****************** <1> expansion: tf = '[' 326 ****************** <1> expansion: tb = ']' 326 ****************** <1> expansion: adr = 'internalflags' 326 ****************** <1> expansion: adr = internalflags 327 00007546 7403E93101 <1> jnz puts_silence 328 <1> 329 <1> ; The following code contains most of the paging support. 330 <1> ; Based on the number of LF characters in the string it 331 <1> ; displays only parts of the string, then interrupts it by 332 <1> ; the "[more]" prompt which waits for any key before 333 <1> ; proceeding. This is ensured to work proper in InDOS mode. 334 <1> ; 335 <1> ; Paging is deactivated if the command's output mustn't be 336 <1> ; paged (clears pagedcommand, which is set by cmd3). It is 337 <1> ; also not used when we output to a file. 338 0000754B F606[7C00]10 <1> testopt [options], nonpagingdevice 338 ****************** <1> expansion: adr = '[options]' 338 ****************** <1> expansion: len = 9 338 ****************** <1> expansion: tf = '[' 338 ****************** <1> expansion: tb = ']' 338 ****************** <1> expansion: adr = 'options' 338 ****************** <1> expansion: adr = options 339 00007550 7403E9BE00 <1> jnz .display ; deactivated by user --> 340 00007555 F606[7D00]40 <1> testopt [options], enable_serial ; I/O done using serial port ? 340 ****************** <1> expansion: adr = '[options]' 340 ****************** <1> expansion: len = 9 340 ****************** <1> expansion: tf = '[' 340 ****************** <1> expansion: tb = ']' 340 ****************** <1> expansion: adr = 'options' 340 ****************** <1> expansion: adr = options 341 0000755A 7520 <1> jnz .dontcheckredirection ; yes, is paged --> 342 0000755C E8A4F2 <1> call InDos ; InDOS mode ? 343 0000755F 751B <1> jnz .dontcheckredirection ; yes, then we display with Int10 anyway --> 344 00007561 F606[8400]80 <1> testopt [internalflags], outputfile 344 ****************** <1> expansion: adr = '[internalflags]' 344 ****************** <1> expansion: len = 15 344 ****************** <1> expansion: tf = '[' 344 ****************** <1> expansion: tb = ']' 344 ****************** <1> expansion: adr = 'internalflags' 344 ****************** <1> expansion: adr = internalflags 345 00007566 7403E9A800 <1> jnz .display ; output redirected to file. never page --> 346 0000756B F606[7D00]01 <1> testopt [options], nondospaging 346 ****************** <1> expansion: adr = '[options]' 346 ****************** <1> expansion: len = 9 346 ****************** <1> expansion: tf = '[' 346 ****************** <1> expansion: tb = ']' 346 ****************** <1> expansion: adr = 'options' 346 ****************** <1> expansion: adr = options 347 00007570 750A <1> jnz .dontcheckredirection 348 00007572 F606[8400]20 <1> testopt [internalflags], inputfile 348 ****************** <1> expansion: adr = '[internalflags]' 348 ****************** <1> expansion: len = 15 348 ****************** <1> expansion: tf = '[' 348 ****************** <1> expansion: tb = ']' 348 ****************** <1> expansion: adr = 'internalflags' 348 ****************** <1> expansion: adr = internalflags 349 00007577 7403E99700 <1> jnz .display ; input redirected from a file. never page --> 350 <1> .dontcheckredirection: 351 0000757C 57 <1> push di 352 0000757D 51 <1> push cx ; used as variable: remaining (not yet displayed) line length 353 0000757E 89D7 <1> mov di, dx ; es:di-> string, cx = length 354 <1> .looplf: 355 00007580 85C9 <1> test cx, cx 356 00007582 7503E98A00 <1> jz .display_pop ; end of string (or ended in LF) --> 357 <1> ; Important: We only ever jump back to .looplf when cx 358 <1> ; zero means it's okay to ignore the waiting prompt as 359 <1> ; flagged below. This is (A) at the start of a string, 360 <1> ; where cx is the whole string's length, (B) after 361 <1> ; determining that prompting is not yet necessary, in 362 <1> ; which case the flag was checked earlier already, (C) 363 <1> ; after the flag has been set and a substring was already 364 <1> ; displayed (so cx is again the whole substring's length) 365 <1> ; or (D) just after the prompt was displayed, in which 366 <1> ; case the flag cannot be set. 367 <1> ; In case A and C, when the (sub)string is empty (ie. cx 368 <1> ; is zero) it's crucial to ignore the waiting prompt as 369 <1> ; this is the exact behaviour we want: If nothing is 370 <1> ; displayed anymore before the getline code prompts 371 <1> ; anyway, do not display our prompt. 372 00007587 F606[8600]10 <1> testopt [internalflags], promptwaiting ; do we have a prompt to display ? 372 ****************** <1> expansion: adr = '[internalflags]' 372 ****************** <1> expansion: len = 15 372 ****************** <1> expansion: tf = '[' 372 ****************** <1> expansion: tb = ']' 372 ****************** <1> expansion: adr = 'internalflags' 372 ****************** <1> expansion: adr = internalflags 373 0000758C 7543 <1> jnz .promptnow ; yes, display it before the string --> 374 <1> 375 0000758E F606[7D00]40 <1> testopt [options], enable_serial ; serial ? 375 ****************** <1> expansion: adr = '[options]' 375 ****************** <1> expansion: len = 9 375 ****************** <1> expansion: tf = '[' 375 ****************** <1> expansion: tb = ']' 375 ****************** <1> expansion: adr = 'options' 375 ****************** <1> expansion: adr = options 376 00007593 740B <1> jz @F ; no --> 377 00007595 31C0 <1> xor ax, ax 378 00007597 0A06[EA02] <1> or al, byte [serial_rows] ; ax = number of rows if serial 379 0000759B 7474 <1> jz .display_pop ; if zero, do not page --> 380 0000759D 48 <1> dec ax 381 0000759E EB0B <1> jmp @FF 382 <1> @@: 382 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.198 382 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.199 382 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.200 382 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.201 382 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.202 382 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.203 382 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.204 382 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.205 382 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.198 382 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.199 382 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.200 382 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.201 382 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.202 382 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.203 382 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.204 382 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.205 382 ****************** <1> expansion: __@@_num = 206 383 000075A0 06 <1> push es 384 000075A1 B84000 <1> mov ax, 40h ; 0040h is a bimodal segment/selector 385 000075A4 8EC0 <1> mov es, ax 386 000075A6 26A08400 <1> mov al, byte [ es:84h ] ; rows on screen 387 000075AA 07 <1> pop es 388 <1> @@: 388 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.199 388 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.200 388 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.201 388 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.202 388 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.203 388 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.204 388 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.205 388 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.206 388 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.199 388 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.200 388 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.201 388 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.202 388 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.203 388 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.204 388 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.205 388 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.206 388 ****************** <1> expansion: __@@_num = 207 389 000075AB 3806[5702] <1> cmp byte [ linecounter ], al 390 000075AF 7253 <1> jb .notyet ; not yet reached --> 391 000075B1 F606[8400]08 <1> testopt [internalflags], pagedcommand ; active ? 391 ****************** <1> expansion: adr = '[internalflags]' 391 ****************** <1> expansion: len = 15 391 ****************** <1> expansion: tf = '[' 391 ****************** <1> expansion: tb = ']' 391 ****************** <1> expansion: adr = 'internalflags' 391 ****************** <1> expansion: adr = internalflags 392 000075B6 7506 <1> jnz .prompt ; yes, prompt --> 393 000075B8 FE0E[5702] <1> dec byte [ linecounter ] ; keep count, but don't prompt til next LF 394 000075BC EB46 <1> jmp short .notyet 395 <1> 396 <1> .prompt: 397 000075BE 58 <1> pop ax ; ax = length of string, cx = length of string remaining 398 000075BF 29C8 <1> sub ax, cx ; ax = length of string til LF 399 000075C1 91 <1> xchg ax, cx ; cx = til LF incl., ax = behind LF 400 000075C2 50 <1> push ax ; new count 401 <1> ; cx = length til LF 402 <1> ; ds:dx-> start of part til LF 403 000075C3 E84D00 <1> call .display ; display part of message which fits on screen 404 000075C6 59 <1> pop cx 405 000075C7 51 <1> push cx ; update cx from variable 406 000075C8 89FA <1> mov dx, di ; dx-> start of next part 407 000075CA 800E[8600]10 <1> setopt [internalflags], promptwaiting ; mark as prompting necessary 407 ****************** <1> expansion: adr = '[internalflags]' 407 ****************** <1> expansion: len = 15 407 ****************** <1> expansion: tf = '[' 407 ****************** <1> expansion: tb = ']' 407 ****************** <1> expansion: adr = 'internalflags' 407 ****************** <1> expansion: adr = internalflags 408 000075CF EBAF <1> jmp short .looplf ; now check whether anything follows at all 409 <1> ; This is the magic to suppress unnecessary prompts as 410 <1> ; were displayed previously. Now, we'll set this flag 411 <1> ; which effectively displays the prompt before (!) any 412 <1> ; other output is done. Previously, the prompt would be 413 <1> ; displayed right here. The only case where behaviour 414 <1> ; changed is when no more output occurs until the flag 415 <1> ; is reset elsewhere - ie. if getline prompts anyway. 416 <1> 417 <1> .promptnow: 418 000075D1 52 <1> push dx 419 000075D2 51 <1> push cx 420 000075D3 C606[5702]00 <1> mov byte [ linecounter ], 0 ; prompting, so reset the line counter 421 000075D8 8026[8600]EF <1> clropt [internalflags], promptwaiting 421 ****************** <1> expansion: adr = '[internalflags]' 421 ****************** <1> expansion: len = 15 421 ****************** <1> expansion: tf = '[' 421 ****************** <1> expansion: tb = ']' 421 ****************** <1> expansion: adr = 'internalflags' 421 ****************** <1> expansion: adr = internalflags 422 000075DD BA[6C34] <1> mov dx, msg.more 423 000075E0 B90600 <1> mov cx, msg.more_size 424 000075E3 E82D00 <1> call .display ; print string (avoiding a recursion) 425 <1> 426 <1> ; This option is a hack for the sole use of 427 <1> ; demo scripts that only want the user to press 428 <1> ; a key for paging. 429 000075E6 F606[7D00]01 <1> testopt [options], nondospaging 429 ****************** <1> expansion: adr = '[options]' 429 ****************** <1> expansion: len = 9 429 ****************** <1> expansion: tf = '[' 429 ****************** <1> expansion: tb = ']' 429 ****************** <1> expansion: adr = 'options' 429 ****************** <1> expansion: adr = options 430 000075EB 7405 <1> jz .getc 431 000075ED E8B701 <1> call getc.rawnext ; get a character from BIOS 432 000075F0 EB03 <1> jmp short .dispover 433 <1> .getc: 434 000075F2 E8A601 <1> call getc ; get a character 435 <1> .dispover: 436 000075F5 3C03 <1> cmp al, 3 ; is it Ctrl+C ? 437 000075F7 742E <1> je .ctrlc ; yes, handle that --> 438 000075F9 BA[7234] <1> mov dx, msg.more_over 439 000075FC B90800 <1> mov cx, msg.more_over_size 440 000075FF E81100 <1> call .display ; overwrite the prompt (avoiding a recursion) 441 00007602 59 <1> pop cx 442 00007603 5A <1> pop dx 443 <1> 444 <1> .notyet: 445 00007604 B00A <1> mov al, 10 446 00007606 F2AE <1> repne scasb ; search LF 447 00007608 7507 <1> jne .display_pop ; none --> 448 <1> 449 0000760A FE06[5702] <1> inc byte [ linecounter ] ; record how many LFs will be displayed 450 0000760E E96FFF <1> jmp .looplf ; search for next LF --> 451 <1> 452 <1> .display_pop: 453 00007611 59 <1> pop cx 454 00007612 5F <1> pop di 455 <1> .display: 456 <1> ; Non-paged output code follows. 457 00007613 F606[7D00]40 <1> testopt [options], enable_serial 457 ****************** <1> expansion: adr = '[options]' 457 ****************** <1> expansion: len = 9 457 ****************** <1> expansion: tf = '[' 457 ****************** <1> expansion: tb = ']' 457 ****************** <1> expansion: adr = 'options' 457 ****************** <1> expansion: adr = options 458 00007618 7519 <1> jnz .notdos 459 0000761A E8E6F1 <1> call InDos 460 0000761D 7514 <1> jnz .notdos 461 0000761F BB0100 <1> mov bx, 1 ; standard output 462 00007622 B440 <1> mov ah, 40h ; write to file 463 <1> doscall 463 00007624 CD21 <2> int 21h 464 00007626 C3 <1> retn 465 <1> 466 <1> .ctrlc: 467 00007627 BA[7A34] <1> mov dx, msg.ctrlc 468 0000762A B90400 <1> mov cx, msg.ctrlc_size 469 0000762D E8E3FF <1> call .display ; visually acknowledge Ctrl+C and start a new line 470 00007630 E9B08B <1> jmp cmd3 ; abort currently running command --> 471 <1> ; If handled by DOS, Ctrl+C causes our process to be terminated. 472 <1> ; Because we are self-owned, we re-enter our code at debug22 then. 473 <1> ; debug22 only does some re-initialization of registers before 474 <1> ; entering cmd3. Therefore, instead of aborting we can directly jump 475 <1> ; to cmd3 here. This has the additional benefit of not requiring DOS 476 <1> ; at all, so that no workarounds for InDOS mode and boot loader 477 <1> ; operation are necessary. 478 <1> 479 <1> ; No command should fail spectacularly when being aborted this way, 480 <1> ; because in fact every command calling puts can already be aborted by 481 <1> ; DOS's Ctrl+C checking if DOS is used. This check is really only an 482 <1> ; _additional_ way the commands can be aborted. 483 <1> 484 <1> ; Note that a more complete way to support command abortion would be 485 <1> ; to hook Int1B, and to keep a flag of whether Ctrl+C or Ctrl+Break 486 <1> ; were requested, and to additionally check before or after every I/O 487 <1> ; operation whether Ctrl+C was pressed using non-destructive reads. 488 <1> ; In short, exactly what DOS does. 489 <1> 490 <1> .notdos: 491 00007633 56 <1> push si 492 00007634 F606[8600]01 <1> testopt [internalflags], usecharcounter 492 ****************** <1> expansion: adr = '[internalflags]' 492 ****************** <1> expansion: len = 15 492 ****************** <1> expansion: tf = '[' 492 ****************** <1> expansion: tb = ']' 492 ****************** <1> expansion: adr = 'internalflags' 492 ****************** <1> expansion: adr = internalflags 493 00007639 7505 <1> jnz .dontresetcharcounter 494 0000763B C606[5602]01 <1> mov byte [ charcounter ], 1 495 <1> ; This assumes we always start at the beginning of a line. 496 <1> ; Therefore any call to puts must display at the beginning 497 <1> ; of a line or tab parsing will not work. Only calls to puts 498 <1> ; not containing tab characters may display partial lines. 499 <1> ; (Calls to puts with partial lines and tab characters have 500 <1> ; to set the flag usecharcounter in internalflags.) 501 <1> .dontresetcharcounter: 502 00007640 E338 <1> jcxz .return 503 00007642 89D6 <1> mov si, dx 504 <1> .loop: 505 00007644 AC <1> lodsb 506 00007645 3C09 <1> cmp al, 9 507 00007647 750B <1> jne .nottab ; is no tab --> 508 00007649 A0[5602] <1> mov al, byte [ charcounter ] 509 0000764C 2407 <1> and al, 7 ; at 8 character boundary ? 510 0000764E B020 <1> mov al, 32 ; (always replaced by blank) 511 00007650 7402 <1> jz .nottab ; yes, don't use hack --> 512 00007652 41 <1> inc cx 513 00007653 4E <1> dec si ; find tab again next lodsb 514 <1> .nottab: 515 00007654 3C0D <1> cmp al, 13 516 00007656 7505 <1> jne .notcr 517 00007658 C606[5602]00 <1> mov byte [ charcounter ], 0 ; increased to one before displaying 518 <1> .notcr: 519 <1> %if 0 ; currently we never receive BS here 520 <1> cmp al, 8 521 <1> jne .notbs 522 <1> mov ah, 0Fh 523 <1> int 10h ; get page 524 <1> mov bl, al ; save number of characters per column 525 <1> push cx 526 <1> mov ah, 03h 527 <1> int 10h ; get cursor position dx 528 <1> pop cx 529 <1> dec byte [ charcounter ] ; assume not at start of line 530 <1> mov al, 8 ; changed by Int10 531 <1> or dl, dl 532 <1> jnz .dontcount ; not first column, so display normal --> 533 <1> mov byte [ charcounter ], 1 ; assume at start of screen 534 <1> or dh, dh 535 <1> jz .next ; at start of screen, don't display --> 536 <1> dec dh ; previous line 537 <1> mov dl, bl 538 <1> mov byte [ charcounter ], dl ; really at end of line (one-based counter) 539 <1> dec dl ; last column 540 <1> mov ah, 02h 541 <1> int 10h ; set new cursor position 542 <1> jmp short .next 543 <1> .notbs: 544 <1> %endif 545 0000765D 3C0A <1> cmp al, 10 546 0000765F 7404 <1> je .dontcount ; must not count line feeds! 547 00007661 FE06[5602] <1> inc byte [ charcounter ] 548 <1> .dontcount: 549 00007665 F606[7D00]40 <1> testopt [options], enable_serial 549 ****************** <1> expansion: adr = '[options]' 549 ****************** <1> expansion: len = 9 549 ****************** <1> expansion: tf = '[' 549 ****************** <1> expansion: tb = ']' 549 ****************** <1> expansion: adr = 'options' 549 ****************** <1> expansion: adr = options 550 0000766A 7405 <1> jz @F 551 <1> 552 0000766C E82E06 <1> call serial_send_char 553 <1> 554 0000766F EB07 <1> jmp .next 555 <1> @@: 555 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.200 555 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.201 555 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.202 555 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.203 555 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.204 555 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.205 555 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.206 555 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.207 555 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.200 555 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.201 555 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.202 555 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.203 555 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.204 555 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.205 555 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.206 555 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.207 555 ****************** <1> expansion: __@@_num = 208 556 00007671 BB0700 <1> mov bx, 0007 557 00007674 B40E <1> mov ah, 0Eh 558 00007676 CD10 <1> int 10h 559 <1> .next: 560 00007678 E2CA <1> loop .loop 561 <1> .return: 562 0000767A 5E <1> pop si 563 0000767B C3 <1> retn 564 <1> 565 <1> 566 <1> ; INP: dx-> message to display 567 <1> ; cx = length of message 568 <1> ; STT: all segment registers same 569 <1> ; CHG: ax, bx, cx, dx 570 <1> puts_silence: 571 0000767C 56 <1> push si 572 0000767D 57 <1> push di 573 <1> 574 <1> .try_again: 575 0000767E 89D6 <1> mov si, dx ; ds:si -> message 576 00007680 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 577 00007684 8B3E[3002] <1> mov di, word [auxbuff_behind_last_silent] 578 <1> ; es:di -> next buffer (if it fits) 579 00007688 B80F20 <1> mov ax, _AUXBUFFSIZE - 1 580 0000768B 29F8 <1> sub ax, di ; number of bytes left free 581 <1> ; (+ 1 byte terminator) 582 0000768D 7204 <1> jc .delete 583 0000768F 39C8 <1> cmp ax, cx ; fits ? 584 00007691 7305 <1> jae .simple ; yes --> 585 <1> 586 <1> .delete: 587 00007693 E80D00 <1> call silence_delete_one_string 588 00007696 EBE6 <1> jmp .try_again 589 <1> 590 <1> .simple: 591 00007698 F3A4 <1> rep movsb ; copy over 592 0000769A 893E[3002] <1> mov word [auxbuff_behind_last_silent], di 593 <1> ; update pointer 594 0000769E 16 <1> push ss 595 0000769F 07 <1> pop es 596 000076A0 5F <1> pop di 597 000076A1 5E <1> pop si 598 000076A2 C3 <1> retn 599 <1> 600 <1> 601 <1> ; INP: es => auxbuff 602 <1> ; ds = ss 603 <1> ; [auxbuff_behind_last_silent] -> behind last silent 604 <1> ; [auxbuff_behind_while_condition] 605 <1> ; OUT: [auxbuff_behind_last_silent] updated 606 <1> ; auxbuff updated (deleted one of the dump strings, 607 <1> ; moved forwards in the buffer the remainder) 608 <1> ; CHG: ax, di, si 609 <1> silence_delete_one_string: 610 000076A3 51 <1> push cx 611 000076A4 8B0E[3002] <1> mov cx, [auxbuff_behind_last_silent] 612 <1> ; -> next buffer position 613 000076A8 8B3E[2E02] <1> mov di, word [auxbuff_behind_while_condition] 614 000076AC 29F9 <1> sub cx, di 615 000076AE B000 <1> mov al, 0 616 000076B0 F2AE <1> repne scasb 617 000076B2 7518 <1> jne .error ; error, no NUL found in data 618 <1> ; es:di -> behind first NUL 619 <1> 620 000076B4 89FE <1> mov si, di ; es:si -> next message 621 000076B6 8B3E[2E02] <1> mov di, word [auxbuff_behind_while_condition] 622 000076BA 8B0E[3002] <1> mov cx, word [auxbuff_behind_last_silent] 623 000076BE 06 <1> push es 624 000076BF 1F <1> pop ds ; ds:si -> next message 625 000076C0 29F1 <1> sub cx, si ; remaining buffer 626 000076C2 F3A4 <1> rep movsb ; move to start of silent buffer 627 000076C4 16 <1> push ss 628 000076C5 1F <1> pop ds 629 000076C6 893E[3002] <1> mov word [auxbuff_behind_last_silent], di 630 000076CA 59 <1> pop cx 631 000076CB C3 <1> retn 632 <1> 633 <1> .error: 634 000076CC 16 <1> push ss 635 000076CD 1F <1> pop ds 636 000076CE 16 <1> push ss 637 000076CF 07 <1> pop es 638 000076D0 8026[8700]DF <1> clropt [internalflags], tt_silence 638 ****************** <1> expansion: adr = '[internalflags]' 638 ****************** <1> expansion: len = 15 638 ****************** <1> expansion: tf = '[' 638 ****************** <1> expansion: tb = ']' 638 ****************** <1> expansion: adr = 'internalflags' 638 ****************** <1> expansion: adr = internalflags 639 000076D5 BA[6E3A] <1> mov dx, msg.silent_error 640 000076D8 E89400 <1> call putsz 641 000076DB E9058B <1> jmp cmd3 642 <1> 643 <1> 644 <1> ; After having used puts_silence, this dumps all data 645 <1> ; remaining in the silent buffer in auxbuff. 646 <1> ; If word [tt_silent_mode_number] is set, only that many 647 <1> ; data strings (zero-terminated) are dumped, from the end 648 <1> ; of the buffer. 649 <1> ; 650 <1> ; CHG: ax, bx, cx, dx, si, di, es 651 <1> ; STT: ds = ss = debugger data selector 652 <1> ; sets es to ss 653 <1> silence_dump: 654 000076DE F606[8700]10 <1> testopt [internalflags], tt_silent_mode ; is in use ? 654 ****************** <1> expansion: adr = '[internalflags]' 654 ****************** <1> expansion: len = 15 654 ****************** <1> expansion: tf = '[' 654 ****************** <1> expansion: tb = ']' 654 ****************** <1> expansion: adr = 'internalflags' 654 ****************** <1> expansion: adr = internalflags 655 000076E3 7501 <1> jnz @F ; yes --> 656 000076E5 C3 <1> retn ; no. simple 657 <1> 658 <1> @@: 658 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.201 658 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.202 658 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.203 658 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.204 658 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.205 658 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.206 658 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.207 658 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.208 658 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.201 658 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.202 658 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.203 658 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.204 658 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.205 658 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.206 658 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.207 658 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.208 658 ****************** <1> expansion: __@@_num = 209 659 000076E6 8026[8700]CF <1> clropt [internalflags], tt_silent_mode | tt_silence 659 ****************** <1> expansion: adr = '[internalflags]' 659 ****************** <1> expansion: len = 15 659 ****************** <1> expansion: tf = '[' 659 ****************** <1> expansion: tb = ']' 659 ****************** <1> expansion: adr = 'internalflags' 659 ****************** <1> expansion: adr = internalflags 660 <1> 661 000076EB 8B16[3202] <1> mov dx, word [tt_silent_mode_number] 662 000076EF 85D2 <1> test dx, dx 663 000076F1 7428 <1> jz .no_number_given 664 <1> 665 000076F3 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 666 000076F7 8B3E[2E02] <1> mov di, word [auxbuff_behind_while_condition] 667 000076FB 8B0E[3002] <1> mov cx, word [auxbuff_behind_last_silent] 668 000076FF 29F9 <1> sub cx, di 669 00007701 7418 <1> jz .no_number_given 670 <1> 671 00007703 31DB <1> xor bx, bx ; counter of zeros 672 <1> @@: 672 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.202 672 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.203 672 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.204 672 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.205 672 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.206 672 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.207 672 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.208 672 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.209 672 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.202 672 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.203 672 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.204 672 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.205 672 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.206 672 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.207 672 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.208 672 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.209 672 ****************** <1> expansion: __@@_num = 210 673 00007705 B000 <1> mov al, 0 674 00007707 E307 <1> jcxz @F ; no more data --> 675 00007709 F2AE <1> repne scasb ; another zero ? 676 0000770B 7503 <1> jne @F ; no, done --> 677 0000770D 43 <1> inc bx ; count zeros 678 0000770E EBF5 <1> jmp @B ; search for next --> 679 <1> 680 <1> @@: 680 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.203 680 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.204 680 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.205 680 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.206 680 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.207 680 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.208 680 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.209 680 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.210 680 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.203 680 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.204 680 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.205 680 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.206 680 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.207 680 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.208 680 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.209 680 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.210 680 ****************** <1> expansion: __@@_num = 211 681 00007710 29D3 <1> sub bx, dx ; number of dumps - requested number 682 <1> ; = excess number of dumps 683 00007712 7607 <1> jbe .no_number_given 684 <1> 685 00007714 89D9 <1> mov cx, bx ; use excess number as loop counter 686 <1> @@: 686 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.204 686 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.205 686 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.206 686 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.207 686 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.208 686 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.209 686 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.210 686 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.211 686 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.204 686 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.205 686 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.206 686 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.207 686 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.208 686 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.209 686 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.210 686 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.211 686 ****************** <1> expansion: __@@_num = 212 687 00007716 E88AFF <1> call silence_delete_one_string 688 <1> ; delete one string 689 00007719 E2FB <1> loop @B ; loop for however many to delete --> 690 <1> 691 <1> .no_number_given: 692 0000771B 8B3E[2E02] <1> mov di, word [auxbuff_behind_while_condition] 693 <1> ; es:di -> silent buffer 694 <1> .loop_line: 695 0000771F 8E06[2C02] <1> mov es, word [auxbuff_segorsel] 696 00007723 8B0E[3002] <1> mov cx, word [auxbuff_behind_last_silent] 697 00007727 29F9 <1> sub cx, di ; any more data ? 698 00007729 7439 <1> jz .return ; no, return --> 699 0000772B B000 <1> mov al, 0 700 0000772D 49 <1> dec cx ; (in case of branching for next conditional) 701 0000772E AE <1> scasb ; starts with a NUL byte ? 702 0000772F 7402 <1> je @F ; yes, skipped --> 703 00007731 41 <1> inc cx ; (restore cx to original value) 704 00007732 4F <1> dec di ; no, decrement 705 <1> @@: 705 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.205 705 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.206 705 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.207 705 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.208 705 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.209 705 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.210 705 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.211 705 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.212 705 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.205 705 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.206 705 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.207 705 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.208 705 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.209 705 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.210 705 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.211 705 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.212 705 ****************** <1> expansion: __@@_num = 213 706 00007733 89FE <1> mov si, di ; es:si -> start of string 707 <1> 708 00007735 81F90001 <1> cmp cx, 256 ; cx > 256 ? 709 00007739 7603 <1> jbe @F ; no --> 710 0000773B B90001 <1> mov cx, 256 ; limit to 256 bytes per string 711 <1> ; (line_out is 264 bytes) 712 <1> @@: 712 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.206 712 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.207 712 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.208 712 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.209 712 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.210 712 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.211 712 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.212 712 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.213 712 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.206 712 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.207 712 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.208 712 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.209 712 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.210 712 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.211 712 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.212 712 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.213 712 ****************** <1> expansion: __@@_num = 214 713 0000773E E324 <1> jcxz .return ; (if single byte that was NUL remaining -->) 714 00007740 89CB <1> mov bx, cx ; search string length 715 00007742 B000 <1> mov al, 0 716 00007744 F2AE <1> repne scasb ; scan for NUL bytes 717 00007746 7501 <1> jne @F ; (if none found: cx = 0) 718 <1> ; (if any found: cx = remaining length) 719 00007748 41 <1> inc cx ; cx = remaining length + 1 (do not output NUL) 720 <1> @@: 720 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.207 720 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.208 720 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.209 720 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.210 720 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.211 720 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.212 720 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.213 720 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.214 720 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.207 720 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.208 720 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.209 720 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.210 720 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.211 720 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.212 720 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.213 720 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.214 720 ****************** <1> expansion: __@@_num = 215 721 00007749 29CB <1> sub bx, cx ; search length - remaining = found length 722 0000774B 89D9 <1> mov cx, bx ; how much to show 723 0000774D 06 <1> push es 724 0000774E 1F <1> pop ds ; ds => auxbuff (ds:si -> start of string) 725 0000774F 16 <1> push ss 726 00007750 07 <1> pop es ; es => line_out 727 00007751 BF[A901] <1> mov di, line_out ; es:di -> line_out 728 00007754 51 <1> push cx 729 00007755 F3A4 <1> rep movsb ; copy over to line_out 730 00007757 59 <1> pop cx ; cx = message length 731 <1> 732 00007758 16 <1> push ss 733 00007759 1F <1> pop ds ; reset seg regs to ss 734 0000775A BA[A901] <1> mov dx, line_out ; dx -> message, cx = length 735 0000775D 56 <1> push si 736 0000775E E8E0FD <1> call puts ; print out 737 00007761 5F <1> pop di ; -> next silent message 738 00007762 EBBB <1> jmp .loop_line 739 <1> 740 <1> .return: 741 00007764 16 <1> push ss 742 00007765 07 <1> pop es 743 00007766 FF36[2E02] <1> push word [auxbuff_behind_while_condition] 744 0000776A 8F06[3002] <1> pop word [auxbuff_behind_last_silent] 745 0000776E C3 <1> retn 746 <1> 747 <1> 748 <1> ; Display ASCIZ message 749 <1> ; 750 <1> ; INP: dx-> ASCIZ message to display 751 <1> ; CHG: - 752 <1> ; STT: ds = es = ss 753 <1> putsz: 754 0000776F 50 <1> push ax 755 00007770 53 <1> push bx 756 00007771 51 <1> push cx 757 00007772 52 <1> push dx 758 00007773 57 <1> push di 759 00007774 89D7 <1> mov di, dx ; es:di-> string 760 00007776 30C0 <1> xor al, al 761 00007778 B9FFFF <1> mov cx, -1 762 0000777B F2AE <1> repne scasb ; search zero 763 0000777D F7D9 <1> neg cx 764 0000777F 49 <1> dec cx 765 00007780 49 <1> dec cx ; cx = length of message 766 00007781 5F <1> pop di 767 00007782 E8BCFD <1> call puts 768 00007785 5A <1> pop dx 769 00007786 59 <1> pop cx 770 00007787 5B <1> pop bx 771 00007788 58 <1> pop ax 772 00007789 C3 <1> retn 773 <1> 774 <1> ; Display character 775 <1> ; 776 <1> ; INP: al = character to display 777 <1> ; CHG: - 778 <1> ; STT: ds = es = ss 779 <1> putc: 780 0000778A 53 <1> push bx 781 0000778B 51 <1> push cx 782 0000778C 52 <1> push dx 783 0000778D 50 <1> push ax 784 0000778E B90100 <1> mov cx, 1 ; one character 785 00007791 89E2 <1> mov dx, sp ; ds:dx-> ax on stack 786 00007793 E8ABFD <1> call puts 787 00007796 58 <1> pop ax 788 00007797 5A <1> pop dx 789 00007798 59 <1> pop cx 790 00007799 5B <1> pop bx 791 0000779A C3 <1> retn 792 <1> 793 <1> 794 <1> ; Get character/key 795 <1> ; 796 <1> ; OUT: al = character (if zero, look for ah) 797 <1> ; ah = scan code or zero 798 <1> ; CHG: ax 799 <1> ; STT: ds = ss = debugger segment/selector 800 <1> ; 801 <1> ; Idles system when in InDOS mode. When not in InDOS mode, Int21.08 802 <1> ; is used which is assumed to idle the system itself. 803 <1> getc: 804 0000779B F606[7D00]40 <1> testopt [options], enable_serial 804 ****************** <1> expansion: adr = '[options]' 804 ****************** <1> expansion: len = 9 804 ****************** <1> expansion: tf = '[' 804 ****************** <1> expansion: tb = ']' 804 ****************** <1> expansion: adr = 'options' 804 ****************** <1> expansion: adr = options 805 000077A0 7505 <1> jnz @F 806 000077A2 E85EF0 <1> call InDos 807 000077A5 7421 <1> jz getc_dos 808 <1> @@: 808 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.208 808 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.209 808 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.210 808 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.211 808 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.212 808 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.213 808 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.214 808 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.215 808 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.208 808 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.209 808 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.210 808 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.211 808 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.212 808 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.213 808 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.214 808 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.215 808 ****************** <1> expansion: __@@_num = 216 809 <1> .rawnext: 810 000077A7 FF16[F202] <1> call near word [getline_timer_func] 811 <1> 812 000077AB F606[7D00]40 <1> testopt [options], enable_serial 812 ****************** <1> expansion: adr = '[options]' 812 ****************** <1> expansion: len = 9 812 ****************** <1> expansion: tf = '[' 812 ****************** <1> expansion: tb = ']' 812 ****************** <1> expansion: adr = 'options' 812 ****************** <1> expansion: adr = options 813 000077B0 7507 <1> jnz @F 814 000077B2 F606[7D00]04 <1> testopt [options], biosidles 814 ****************** <1> expansion: adr = '[options]' 814 ****************** <1> expansion: len = 9 814 ****************** <1> expansion: tf = '[' 814 ****************** <1> expansion: tb = ']' 814 ****************** <1> expansion: adr = 'options' 814 ****************** <1> expansion: adr = options 815 <1> ; idling disabled? 816 000077B7 750A <1> jnz .rawkey ; yes, just request a key --> 817 <1> 818 <1> @@: 818 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.209 818 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.210 818 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.211 818 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.212 818 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.213 818 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.214 818 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.215 818 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.216 818 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.209 818 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.210 818 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.211 818 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.212 818 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.213 818 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.214 818 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.215 818 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.216 818 ****************** <1> expansion: __@@_num = 217 819 000077B9 E87F00 <1> call getc_if_any ; got a key ? 820 000077BC 7509 <1> jnz .return ; yes --> 821 <1> .idle: ; common idling for BIOS keyboard and serial 822 000077BE E8D000 <1> call idle 823 000077C1 EBE4 <1> jmp .rawnext ; check again --> 824 <1> 825 <1> .rawkey: 826 000077C3 31C0 <1> xor ax, ax 827 000077C5 CD16 <1> int 16h ; get the key and scancode 828 <1> .return: 829 000077C7 C3 <1> retn 830 <1> 831 <1> 832 <1> getc_dos: ; DOS character devices handle one-byte characters. Therefore 833 <1> ; non-ASCII keys cannot be returned with scancode in the high 834 <1> ; byte of the same call. A non-ASCII key will be split into 835 <1> ; two characters by CON: one NUL byte followed by the scancode. 836 <1> %if _INPUT_FILE_HANDLES 837 <1> .: 838 000077C8 F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 838 ****************** <1> expansion: adr = '[internalflags2]' 838 ****************** <1> expansion: len = 16 838 ****************** <1> expansion: tf = '[' 838 ****************** <1> expansion: tb = ']' 838 ****************** <1> expansion: adr = 'internalflags2' 838 ****************** <1> expansion: adr = internalflags2 839 000077CD 7427 <1> jz .file_not 840 000077CF 52 <1> push dx 841 000077D0 51 <1> push cx 842 000077D1 53 <1> push bx 843 000077D2 57 <1> push di 844 000077D3 31C0 <1> xor ax, ax ; initialise ah to zero 845 000077D5 50 <1> push ax 846 000077D6 89E2 <1> mov dx, sp ; ds:dx -> al byte on stack 847 000077D8 B43F <1> mov ah, 3Fh 848 000077DA E85300 <1> call yy_get_handle 849 000077DD B90100 <1> mov cx, 1 850 <1> doscall ; (depends on ds = ss) 850 000077E0 CD21 <2> int 21h 851 000077E2 85C0 <1> test ax, ax 852 000077E4 750A <1> jnz .file_got 853 <1> 854 000077E6 E82000 <1> call yy_close_file 855 000077E9 58 <1> pop ax 856 000077EA 5F <1> pop di 857 000077EB 5B <1> pop bx 858 000077EC 59 <1> pop cx 859 000077ED 5A <1> pop dx 860 000077EE EBD8 <1> jmp . 861 <1> 862 <1> 863 <1> .file_got: 864 000077F0 58 <1> pop ax ; ah = 0, al = character read 865 000077F1 5F <1> pop di 866 000077F2 5B <1> pop bx 867 000077F3 59 <1> pop cx 868 000077F4 5A <1> pop dx 869 000077F5 C3 <1> retn 870 <1> 871 <1> .file_not: 872 <1> %endif 873 000077F6 B408 <1> mov ah, 8 874 <1> doscall ; wait for a key 874 000077F8 CD21 <2> int 21h 875 000077FA B400 <1> mov ah, 0 ; assume it is ASCII 876 000077FC 08C0 <1> or al, al 877 000077FE 7508 <1> jne .return ; ASCII, return with ah zero --> 878 00007800 B408 <1> mov ah, 8 879 <1> doscall ; scancode of non-ASCII key to al 879 00007802 CD21 <2> int 21h 880 00007804 86C4 <1> xchg al, ah ; to ah 881 00007806 B000 <1> mov al, 0 ; return zero for non-ASCII key 882 <1> .return: 883 00007808 C3 <1> retn 884 <1> 885 <1> 886 <1> %if _INPUT_FILE_HANDLES 887 <1> ; INP: [input_file_handles], dif2_input_file 888 <1> ; OUT: most recent file closed, flag cleared if no longer file 889 <1> ; CHG: di, bx, ax 890 <1> yy_close_file: 891 00007809 8B3E[5402] <1> mov di, word [input_file_handles.active] 892 0000780D D1E7 <1> shl di, 1 893 0000780F BBFFFF <1> mov bx, -1 894 00007812 879D[3402] <1> xchg bx, word [input_file_handles + di] 895 00007816 B43E <1> mov ah, 3Eh 896 <1> doscall 896 00007818 CD21 <2> int 21h 897 0000781A D1EF <1> shr di, 1 898 0000781C 4F <1> dec di 899 0000781D 790C <1> jns .next 900 0000781F 8026[8A00]EF <1> clropt [internalflags2], dif2_input_file 900 ****************** <1> expansion: adr = '[internalflags2]' 900 ****************** <1> expansion: len = 16 900 ****************** <1> expansion: tf = '[' 900 ****************** <1> expansion: tb = ']' 900 ****************** <1> expansion: adr = 'internalflags2' 900 ****************** <1> expansion: adr = internalflags2 901 00007824 800E[8A00]20 <1> setopt [internalflags2], dif2_closed_input_file 901 ****************** <1> expansion: adr = '[internalflags2]' 901 ****************** <1> expansion: len = 16 901 ****************** <1> expansion: tf = '[' 901 ****************** <1> expansion: tb = ']' 901 ****************** <1> expansion: adr = 'internalflags2' 901 ****************** <1> expansion: adr = internalflags2 902 00007829 EB04 <1> jmp .done 903 <1> .next: 904 0000782B 893E[5402] <1> mov word [input_file_handles.active], di 905 <1> .done: 906 0000782F C3 <1> retn 907 <1> 908 <1> 909 <1> ; INP: - 910 <1> ; OUT: di = active handle offset 911 <1> ; bx = active handle 912 <1> ; CHG: - 913 <1> yy_get_handle: 914 00007830 8B3E[5402] <1> mov di, word [input_file_handles.active] 915 00007834 D1E7 <1> shl di, 1 916 00007836 8B9D[3402] <1> mov bx, word [input_file_handles + di] 917 0000783A C3 <1> retn 918 <1> %endif 919 <1> 920 <1> 921 <1> ; INP: - 922 <1> ; OUT: NZ if received any, 923 <1> ; al = character 924 <1> ; ah = scan code or zero 925 <1> ; ZR if none received 926 <1> ; CHG: ax 927 <1> ; STT: ds = ss = debugger segment/selector 928 <1> getc_if_any: 929 0000783B F606[7D00]40 <1> testopt [options], enable_serial 929 ****************** <1> expansion: adr = '[options]' 929 ****************** <1> expansion: len = 9 929 ****************** <1> expansion: tf = '[' 929 ****************** <1> expansion: tb = ']' 929 ****************** <1> expansion: adr = 'options' 929 ****************** <1> expansion: adr = options 930 00007840 7408 <1> jz @F ; do BIOS keyboard or DOS getc --> 931 <1> 932 00007842 E85003 <1> call serial_receive_char ; do serial getc (check rx buffer) 933 00007845 7449 <1> jz .return ; no data, go and idle --> 934 00007847 B400 <1> mov ah, 0 935 00007849 C3 <1> retn 936 <1> 937 <1> @@: 937 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.210 937 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.211 937 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.212 937 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.213 937 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.214 937 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.215 937 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.216 937 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.217 937 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.210 937 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.211 937 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.212 937 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.213 937 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.214 937 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.215 937 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.216 937 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.217 937 ****************** <1> expansion: __@@_num = 218 938 0000784A E8B6EF <1> call InDos 939 0000784D 7533 <1> jnz .bios 940 <1> 941 <1> %if _INPUT_FILE_HANDLES 942 0000784F F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 942 ****************** <1> expansion: adr = '[internalflags2]' 942 ****************** <1> expansion: len = 16 942 ****************** <1> expansion: tf = '[' 942 ****************** <1> expansion: tb = ']' 942 ****************** <1> expansion: adr = 'internalflags2' 942 ****************** <1> expansion: adr = internalflags2 943 00007854 741B <1> jz .file_not 944 <1> 945 00007856 57 <1> push di 946 00007857 53 <1> push bx 947 00007858 51 <1> push cx 948 00007859 52 <1> push dx 949 0000785A 31C0 <1> xor ax, ax 950 0000785C 50 <1> push ax 951 <1> 952 0000785D 89E2 <1> mov dx, sp ; ds:dx -> al byte on stack 953 0000785F B43F <1> mov ah, 3Fh 954 00007861 E8CCFF <1> call yy_get_handle 955 00007864 B90100 <1> mov cx, 1 ; buffer length = 1 956 <1> doscall ; DOS read file (depends on ds = ss) 956 00007867 CD21 <2> int 21h 957 00007869 85C0 <1> test ax, ax 958 0000786B 58 <1> pop ax 959 0000786C 5A <1> pop dx 960 0000786D 59 <1> pop cx 961 0000786E 5B <1> pop bx 962 0000786F 5F <1> pop di 963 00007870 C3 <1> retn ; ZR if no character read 964 <1> 965 <1> .file_not: 966 <1> %endif 967 00007871 52 <1> push dx 968 00007872 B406 <1> mov ah, 06h 969 00007874 B2FF <1> mov dl, -1 970 <1> doscall 970 00007876 CD21 <2> int 21h 971 00007878 7406 <1> jz .return_dx ; none available 972 0000787A E84BFF <1> call getc_dos 973 0000787D 5A <1> pop dx 974 0000787E EB0C <1> jmp .return_NZ 975 <1> .return_dx: 976 00007880 5A <1> pop dx 977 00007881 C3 <1> retn 978 <1> 979 <1> .bios: 980 00007882 B401 <1> mov ah, 01h 981 00007884 CD16 <1> int 16h ; key available ? 982 00007886 7408 <1> jz .return 983 00007888 31C0 <1> xor ax, ax 984 0000788A CD16 <1> int 16h 985 <1> .return_NZ: 986 0000788C 50 <1> push ax 987 0000788D 0C01 <1> or al, 1 ; (NZ) 988 0000788F 58 <1> pop ax 989 <1> .return: 990 00007890 C3 <1> retn 991 <1> 992 <1> 993 <1> ; INP: - 994 <1> ; OUT: - 995 <1> ; CHG: ax 996 <1> ; STT: ds = ss = debugger segment/selector 997 <1> ; 998 <1> ; Idle system, using 2F.1680 (in given mode), or 2F.1680 999 <1> ; (calling down to 86 Mode), or sti \ hlt. 1000 <1> idle: 1001 <1> %if _BOOTLDR 1002 00007891 F606[8500]40 <1> testopt [internalflags], nodosloaded 1002 ****************** <1> expansion: adr = '[internalflags]' 1002 ****************** <1> expansion: len = 15 1002 ****************** <1> expansion: tf = '[' 1002 ****************** <1> expansion: tb = ']' 1002 ****************** <1> expansion: adr = 'internalflags' 1002 ****************** <1> expansion: adr = internalflags 1003 00007896 7509 <1> jnz .hlt ; can't call 2F --> 1004 <1> %endif 1005 00007898 B88016 <1> mov ax, 1680h 1006 0000789B CD2F <1> int 2Fh ; release timeslice in multitasker 1007 0000789D 84C0 <1> test al, al 1008 0000789F 740A <1> jz .return ; done idling --> 1009 <1> %if _PM 1010 <1> call ispm 1011 <1> jnz .hlt 1012 <1> 1013 <1> push bx 1014 <1> push cx 1015 <1> push es 1016 <1> _386_PM_o32 ; push edi 1017 <1> push di 1018 <1> _386 xor edi, edi ; clear EDIH 1019 <1> xor cx, cx ; (copy no words from stack) 1020 <1> 1021 <1> [cpu 286] 1022 <1> push cx ; ss 1023 <1> push cx ; sp (0:0 = host should allocate a stack) 1024 <1> sub sp, byte 12 ; cs:ip (ignored), segments (uninitialized) 1025 <1> pushf 1026 <1> push cx ; EAXH (uninitialized) 1027 <1> push 1680h ; AX 1028 <1> sub sp, byte 12 ; ecx, edx, ebx (uninitialized) 1029 <1> push cx 1030 <1> push cx ; reserved (zero) 1031 <1> sub sp, byte 12 ; ebp, esi, edi (uninitialized) 1032 <1> push ss 1033 <1> pop es 1034 <1> mov di, sp ; es:(e)di -> 86 Mode call structure 1035 <1> mov ax, 0300h 1036 <1> mov bx, 2Fh ; bl = interrupt, bh = reserved (zero) 1037 <1> int 31h ; call real mode 2F.1680 1038 <1> __CPU__ 1039 <1> 1040 <1> add sp, byte 28 ; discard RM call structure 1041 <1> pop ax ; get AX 1042 <1> add sp, byte 20 ; discard RM call structure 1043 <1> 1044 <1> _386_PM_o32 ; pop edi 1045 <1> pop di 1046 <1> pop es 1047 <1> pop cx 1048 <1> pop bx 1049 <1> 1050 <1> test al, al 1051 <1> jz .return ; done idling --> 1052 <1> %endif 1053 <1> .hlt: 1054 000078A1 F606[7D00]02 <1> testopt [options], nohlt 1054 ****************** <1> expansion: adr = '[options]' 1054 ****************** <1> expansion: len = 9 1054 ****************** <1> expansion: tf = '[' 1054 ****************** <1> expansion: tb = ']' 1054 ****************** <1> expansion: adr = 'options' 1054 ****************** <1> expansion: adr = options 1055 000078A6 7503 <1> jnz .return 1056 <1> %if _PM 1057 <1> %if (protectedmode|dpminohlt)&~0FF00h 1058 <1> %error Option bits re-ordered, adjust code here 1059 <1> %endif 1060 <1> mov al, byte [internalflags+1] 1061 <1> and al, (protectedmode|dpminohlt)>>8 1062 <1> xor al, (protectedmode|dpminohlt)>>8 1063 <1> jz .return ; DPMI host throws GPF when we execute hlt --> 1064 <1> %endif 1065 000078A8 FB <1> sti 1066 000078A9 F4 <1> hlt ; else idle by hlt 1067 000078AA 90 <1> nop 1068 <1> .return: 1069 000078AB C3 <1> retn 1070 <1> 1071 <1> 1072 <1> ; GETLINE - Print a prompt (address in DX, length in CX) and read a line 1073 <1> ; of input. 1074 <1> ; GETLINE0 - Same as above, but use the output line (so far), plus two 1075 <1> ; spaces and a colon, as a prompt. 1076 <1> ; GETLINE00 - Same as above, but use the output line (so far) as a prompt. 1077 <1> ; Entry CX Length of prompt (getline only) 1078 <1> ; DX Address of prompt string (getline only) 1079 <1> ; 1080 <1> ; DI Address + 1 of last character in prompt (getline0 and 1081 <1> ; getline00 only) 1082 <1> ; 1083 <1> ; Exit AL First nonwhite character in input line 1084 <1> ; SI Address of the next character after that 1085 <1> ; Uses AH,BX,CX,DX,DI 1086 <1> 1087 <1> getline0: 1088 000078AC B82020 <1> mov ax, 32<<8|32 ; add two spaces and a colon 1089 000078AF AB <1> stosw 1090 000078B0 B03A <1> mov al, ':' 1091 000078B2 AA <1> stosb 1092 <1> getline00: 1093 000078B3 BA[A901] <1> mov dx, line_out 1094 000078B6 89F9 <1> mov cx, di 1095 000078B8 29D1 <1> sub cx, dx 1096 <1> 1097 <1> getline: ; note: this entry is no longer used 1098 000078BA 890E[9802] <1> mov word [promptlen], cx ; save length of prompt 1099 000078BE C606[5702]00 <1> mov byte [linecounter], 0 ; reset counter 1100 000078C3 8026[8600]EF <1> clropt [internalflags], promptwaiting 1100 ****************** <1> expansion: adr = '[internalflags]' 1100 ****************** <1> expansion: len = 15 1100 ****************** <1> expansion: tf = '[' 1100 ****************** <1> expansion: tb = ']' 1100 ****************** <1> expansion: adr = 'internalflags' 1100 ****************** <1> expansion: adr = internalflags 1101 <1> 1102 000078C8 F606[7D00]40 <1> testopt [options], enable_serial 1102 ****************** <1> expansion: adr = '[options]' 1102 ****************** <1> expansion: len = 9 1102 ****************** <1> expansion: tf = '[' 1102 ****************** <1> expansion: tb = ']' 1102 ****************** <1> expansion: adr = 'options' 1102 ****************** <1> expansion: adr = options 1103 000078CD 7403E9B400 <1> jnz getline_nofile 1104 000078D2 E82EEF <1> call InDos 1105 000078D5 7403E9AC00 <1> jnz getline_nofile ; InDOS, not reading from a file --> 1106 <1> %if _INPUT_FILE_HANDLES 1107 000078DA F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1107 ****************** <1> expansion: adr = '[internalflags2]' 1107 ****************** <1> expansion: len = 16 1107 ****************** <1> expansion: tf = '[' 1107 ****************** <1> expansion: tb = ']' 1107 ****************** <1> expansion: adr = 'internalflags2' 1107 ****************** <1> expansion: adr = internalflags2 1108 000078DF 750A <1> jnz @F 1109 <1> %endif 1110 000078E1 803E[9502]00 <1> cmp byte [notatty], 0 ; check this weird flag 1111 000078E6 7503E99B00 <1> je getline_nofile ; not reading from a file --> 1112 <1> 1113 <1> @@: 1113 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.211 1113 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.212 1113 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.213 1113 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.214 1113 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.215 1113 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.216 1113 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.217 1113 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.218 1113 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.211 1113 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.212 1113 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.213 1113 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.214 1113 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.215 1113 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.216 1113 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.217 1113 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.218 1113 ****************** <1> expansion: __@@_num = 219 1114 000078EB 800E[8A00]40 <1> setopt [internalflags2], dif2_did_getline_file 1114 ****************** <1> expansion: adr = '[internalflags2]' 1114 ****************** <1> expansion: len = 16 1114 ****************** <1> expansion: tf = '[' 1114 ****************** <1> expansion: tb = ']' 1114 ****************** <1> expansion: adr = 'internalflags2' 1114 ****************** <1> expansion: adr = internalflags2 1115 <1> numdef NEWFULLHANDLING, 1 1115 ****************** <1> expansion: _NEWFULLHANDLING = 1 1116 <1> 1117 <1> ; This part reads the input line from a file (in the case of 1118 <1> ; `debug < file'). It is necessary to do this by hand because DOS 1119 <1> ; function 0Ah does not handle EOF correctly otherwise. This is 1120 <1> ; especially important for DEBUG because it traps Control-C. 1121 000078F0 C706[E002][1B03] <1> mov word [lastcmd], dmycmd ; disable auto-repeat while reading from a file 1122 <1> 1123 <1> %if _NEWFULLHANDLING 1124 000078F6 BF[0300] <1> mov di, line_in+3 ; read max 1125 <1> %else 1126 <1> mov di, line_in+2 1127 <1> %endif 1128 000078F9 8B36[9A02] <1> mov si, word [bufnext] 1129 000078FD 3B36[9C02] <1> cmp si, word [bufend] 1130 00007901 721E <1> jb .char_buffered ; if there's a character already 1131 00007903 E8FD00 <1> call fillbuf 1132 <1> %if _INPUT_FILE_HANDLES 1133 00007906 7319 <1> jnc @F 1134 <1> ; EOF reached. if not input file, quit. else, close input file. 1135 00007908 F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1135 ****************** <1> expansion: adr = '[internalflags2]' 1135 ****************** <1> expansion: len = 16 1135 ****************** <1> expansion: tf = '[' 1135 ****************** <1> expansion: tb = ']' 1135 ****************** <1> expansion: adr = 'internalflags2' 1135 ****************** <1> expansion: adr = internalflags2 1136 0000790D 7503E9EEE6 <1> jz qq ; if EOF, quit --> 1137 <1> 1138 <1> ; si = di 1139 00007912 57 <1> push di 1140 00007913 E8F3FE <1> call yy_close_file ; close file 1141 00007916 5F <1> pop di 1142 00007917 B80D0A <1> mov ax, 13 | 10 << 8 ; pretend we read a CR LF sequence 1143 0000791A AB <1> stosw 1144 0000791B 893E[9C02] <1> mov word [bufend], di 1145 0000791F 4F <1> dec di 1146 00007920 4F <1> dec di 1147 <1> %else 1148 <1> jc qq ; if EOF, quit --> 1149 <1> %endif 1150 <1> 1151 <1> @@: 1151 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.212 1151 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.213 1151 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.214 1151 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.215 1151 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.216 1151 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.217 1151 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.218 1151 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.219 1151 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.212 1151 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.213 1151 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.214 1151 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.215 1151 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.216 1151 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.217 1151 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.218 1151 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.219 1151 ****************** <1> expansion: __@@_num = 220 1152 <1> .char_buffered: 1153 <1> %if _NEWFULLHANDLING 1154 00007921 4F <1> dec di 1155 <1> %endif 1156 <1> 1157 <1> ; Discard an LF if the last character read was CR. 1158 00007922 803E[9502]0D <1> cmp byte [notatty], 13 ; last parsed character was CR ? 1159 00007927 750A <1> jne .no_lf_skip ; no, nothing more to do --> 1160 00007929 803C0A <1> cmp byte [si], 10 ; first read character is LF ? 1161 0000792C 7505 <1> jne .no_lf_skip ; no --> 1162 0000792E 46 <1> inc si ; skip the LF 1163 0000792F FE06[9502] <1> inc byte [notatty] ; avoid repeating this 1164 <1> .no_lf_skip: 1165 00007933 E80BFC <1> call puts ; display prompt (having checked it wasn't EOF) 1166 <1> 1167 <1> ; si-> next character in buffer 1168 <1> ; w[bufend]-> behind last valid character of buffer 1169 <1> gl1: 1170 00007936 8B0E[9C02] <1> mov cx, word [bufend] 1171 0000793A 29F1 <1> sub cx, si ; cx = number of valid characters in buffer 1172 0000793C 740C <1> jz gl3 ; if none --> 1173 <1> gl2: 1174 0000793E AC <1> lodsb 1175 0000793F 3C0D <1> cmp al, 13 1176 00007941 7410 <1> je gl4 1177 00007943 3C0A <1> cmp al, 10 1178 00007945 740C <1> je gl4 ; if EOL --> 1179 00007947 AA <1> stosb 1180 00007948 E2F4 <1> loop gl2 ; if more valid characters --> 1181 <1> 1182 <1> ; The buffer is empty. Fill it again. 1183 <1> gl3: 1184 <1> %if _NEWFULLHANDLING 1185 0000794A 47 <1> inc di 1186 <1> %endif 1187 0000794B E8B500 <1> call fillbuf 1188 <1> %if _NEWFULLHANDLING 1189 0000794E 4F <1> dec di 1190 <1> %endif 1191 0000794F 73E5 <1> jnc gl1 ; if we have more characters --> 1192 00007951 B00A <1> mov al, 10 1193 <1> %ifn _NEWFULLHANDLING ; should now always have at least one byte free 1194 <1> cmp di, line_in+LINE_IN_LEN 1195 <1> jb gl4 1196 <1> dec si 1197 <1> dec di 1198 <1> %endif 1199 <1> gl4: 1200 00007953 8936[9A02] <1> mov word [bufnext], si 1201 00007957 A2[9502] <1> mov byte [notatty], al ; store 10 or 13 (depending on the kind of EOL) 1202 <1> 1203 <1> %if _INPUT_FILE_HANDLES 1204 0000795A F606[8A00]20 <1> testopt [internalflags2], dif2_closed_input_file 1204 ****************** <1> expansion: adr = '[internalflags2]' 1204 ****************** <1> expansion: len = 16 1204 ****************** <1> expansion: tf = '[' 1204 ****************** <1> expansion: tb = ']' 1204 ****************** <1> expansion: adr = 'internalflags2' 1204 ****************** <1> expansion: adr = internalflags2 1205 0000795F 7411 <1> jz @F 1206 00007961 8026[8A00]DF <1> clropt [internalflags2], dif2_closed_input_file 1206 ****************** <1> expansion: adr = '[internalflags2]' 1206 ****************** <1> expansion: len = 16 1206 ****************** <1> expansion: tf = '[' 1206 ****************** <1> expansion: tb = ']' 1206 ****************** <1> expansion: adr = 'internalflags2' 1206 ****************** <1> expansion: adr = internalflags2 1207 00007966 F606[8400]30 <1> testopt [internalflags], inputfile | notstdinput 1207 ****************** <1> expansion: adr = '[internalflags]' 1207 ****************** <1> expansion: len = 15 1207 ****************** <1> expansion: tf = '[' 1207 ****************** <1> expansion: tb = ']' 1207 ****************** <1> expansion: adr = 'internalflags' 1207 ****************** <1> expansion: adr = internalflags 1208 0000796B 7505 <1> jnz @F 1209 0000796D C606[9502]00 <1> mov byte [notatty], 0 ; it _is_ a tty 1210 <1> @@: 1210 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.213 1210 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.214 1210 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.215 1210 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.216 1210 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.217 1210 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.218 1210 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.219 1210 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.220 1210 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.213 1210 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.214 1210 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.215 1210 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.216 1210 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.217 1210 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.218 1210 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.219 1210 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.220 1210 ****************** <1> expansion: __@@_num = 221 1211 <1> %endif 1212 <1> 1213 00007972 B00D <1> mov al, 13 1214 00007974 AA <1> stosb ; terminate line for our usage 1215 00007975 89F9 <1> mov cx, di 1216 00007977 BA[0200] <1> mov dx, line_in + 2 1217 0000797A 29D1 <1> sub cx, dx 1218 0000797C E8C2FB <1> call puts ; print out the received line 1219 0000797F 49 <1> dec cx 1220 00007980 880E[0100] <1> mov byte [line_in+1], cl 1221 00007984 EB19 <1> jmp short getline_eol ; done 1222 <1> 1223 <1> getline_nofile: 1224 00007986 E8C801 <1> call yy_reset_buf 1225 00007989 E8B5FB <1> call puts ; display prompt 1226 0000798C BA[0000] <1> mov dx, line_in 1227 0000798F F606[7D00]40 <1> testopt [options], enable_serial 1227 ****************** <1> expansion: adr = '[options]' 1227 ****************** <1> expansion: len = 9 1227 ****************** <1> expansion: tf = '[' 1227 ****************** <1> expansion: tb = ']' 1227 ****************** <1> expansion: adr = 'options' 1227 ****************** <1> expansion: adr = options 1228 00007994 7519 <1> jnz rawinput 1229 00007996 E86AEE <1> call InDos 1230 00007999 7514 <1> jnz rawinput 1231 0000799B B40A <1> mov ah, 0Ah ; buffered keyboard input 1232 <1> doscall 1232 0000799D CD21 <2> int 21h 1233 <1> getline_eol: 1234 0000799F B00D <1> mov al, 13 1235 000079A1 E8E6FD <1> call putc ; fix ZDOS Int21.0A display bug 1236 000079A4 B00A <1> mov al, 10 1237 000079A6 E8E1FD <1> call putc 1238 000079A9 BE[0200] <1> mov si, line_in+2 1239 000079AC E9FDFA <1> jmp skipwhite 1240 <1> 1241 <1> rawinput: 1242 000079AF 57 <1> push di 1243 000079B0 1E <1> push ds 1244 000079B1 07 <1> pop es 1245 000079B2 BF[0200] <1> mov di, line_in+2 1246 <1> .next: 1247 000079B5 E8A6AF <1> call handle_serial_flags_ctrl_c 1248 000079B8 E8ECFD <1> call getc.rawnext 1249 000079BB 84C0 <1> test al, al ; waste? 1250 000079BD 74F6 <1> je .next 1251 000079BF 3CE0 <1> cmp al, 0E0h 1252 000079C1 74F2 <1> je .next ; waste --> 1253 000079C3 3C08 <1> cmp al, 08h 1254 000079C5 7421 <1> je .del 1255 000079C7 3C7F <1> cmp al, 7Fh 1256 000079C9 741D <1> je .del ; backspace --> 1257 000079CB 3C0D <1> cmp al, 13 1258 000079CD 740F <1> je .done 1259 000079CF 81FF[0001] <1> cmp di, line_in+LINE_IN_LEN-1 ; buffer filled? 1260 000079D3 7203 <1> jb .store ; no, store --> 1261 000079D5 B007 <1> mov al, 7 1262 000079D7 A8 <1> db __TEST_IMM8 ; skip to .put; beep! 1263 <1> .store: 1264 000079D8 AA <1> stosb ; store character 1265 <1> .put: 1266 000079D9 E8AEFD <1> call putc 1267 000079DC EBD7 <1> jmp short .next 1268 <1> 1269 <1> .done: 1270 000079DE AA <1> stosb ; store the CR (there always is room) 1271 000079DF 97 <1> xchg ax, di ; -> behind CR 1274 000079E0 2C83 <1> sub al, ((-section.DATASTACK.vstart+100h+ldebug_data_entry_size +asmtable1_size+asmtable2_size+ldebug_code_size) +line_in+3) & 0FFh ; length of string, excluding CR 1275 <1> ; (This instruction disregards the unnecessary higher byte.) 1276 000079E2 5F <1> pop di ; restore di 1277 000079E3 A2[0100] <1> mov byte [line_in+1], al ; store the length byte 1278 000079E6 EBB7 <1> jmp short getline_eol 1279 <1> 1280 <1> .del: 1281 000079E8 81FF[0200] <1> cmp di, line_in+2 1282 000079EC 74C7 <1> jz .next 1283 000079EE 4F <1> dec di 1284 000079EF E80200 <1> call fullbsout 1285 000079F2 EBC1 <1> jmp short .next 1286 <1> 1287 <1> fullbsout: 1288 000079F4 B008 <1> mov al, 8 1289 000079F6 E891FD <1> call putc 1290 000079F9 B020 <1> mov al, 32 1291 000079FB E88CFD <1> call putc 1292 000079FE B008 <1> mov al, 8 1293 00007A00 E987FD <1> jmp putc 1294 <1> 1295 <1> ; Fill input buffer from file. 1296 <1> ; 1297 <1> ; INP: di-> first available byte in input buffer 1298 <1> ; OUT: CY if DOS returned an error or EOF occured 1299 <1> ; NC if no error 1300 <1> ; si = di 1301 <1> ; CHG: - 1302 <1> fillbuf: 1303 00007A03 E858AF <1> call handle_serial_flags_ctrl_c 1304 00007A06 50 <1> push ax 1305 00007A07 53 <1> push bx 1306 00007A08 51 <1> push cx 1307 00007A09 52 <1> push dx 1308 00007A0A 89FE <1> mov si, di ; we know this already 1309 00007A0C B43F <1> mov ah, 3Fh ; read from file 1310 00007A0E 31DB <1> xor bx, bx ; bx = handle (0 is STDIN) 1311 <1> %if _INPUT_FILE_HANDLES 1312 00007A10 F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1312 ****************** <1> expansion: adr = '[internalflags2]' 1312 ****************** <1> expansion: len = 16 1312 ****************** <1> expansion: tf = '[' 1312 ****************** <1> expansion: tb = ']' 1312 ****************** <1> expansion: adr = 'internalflags2' 1312 ****************** <1> expansion: adr = internalflags2 1313 00007A15 7405 <1> jz @F ; if not input file --> 1314 00007A17 57 <1> push di 1315 00007A18 E815FE <1> call yy_get_handle ; bx = handle 1316 00007A1B 5F <1> pop di 1317 <1> @@: 1317 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.214 1317 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.215 1317 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.216 1317 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.217 1317 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.218 1317 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.219 1317 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.220 1317 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.221 1317 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.214 1317 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.215 1317 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.216 1317 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.217 1317 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.218 1317 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.219 1317 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.220 1317 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.221 1317 ****************** <1> expansion: __@@_num = 222 1318 <1> %endif 1319 00007A1C B9[0101] <1> mov cx, line_in+LINE_IN_LEN 1320 00007A1F 89FA <1> mov dx, di 1321 00007A21 29F9 <1> sub cx, di 1322 00007A23 760B <1> jbe .ret_cy ; if no more room --> 1323 <1> doscall 1323 00007A25 CD21 <2> int 21h 1324 00007A27 7207 <1> jc .ret_cy ; if error --> 1325 00007A29 85C0 <1> test ax, ax 1326 00007A2B 7403 <1> jz .ret_cy ; if EOF --> 1327 00007A2D 01C2 <1> add dx, ax ; -> behind last valid byte 1328 00007A2F A8 <1> db __TEST_IMM8 ; (NC) 1329 <1> .ret_cy: 1330 00007A30 F9 <1> stc 1331 00007A31 8916[9C02] <1> mov word [bufend], dx ; -> behind last valid byte 1332 00007A35 5A <1> pop dx 1333 00007A36 59 <1> pop cx 1334 00007A37 5B <1> pop bx 1335 00007A38 58 <1> pop ax 1336 00007A39 C3 <1> retn 1337 <1> 1338 <1> 1339 <1> %ifn _INPUT_FILE_HANDLES 1340 <1> yy equ error 1341 <1> %else 1342 <1> yy: 1343 00007A3A 4E <1> dec si 1344 00007A3B 89F3 <1> mov bx, si ; -> start of name 1345 00007A3D 89F7 <1> mov di, si ; -> start of name 1346 00007A3F AC <1> lodsb ; load character 1347 00007A40 E825FA <1> call iseol? 1348 00007A43 7509 <1> jne @F 1349 00007A45 BA[783C] <1> mov dx, msg.yy_requires_filename 1350 <1> .disp_error_1: 1351 00007A48 E824FD <1> call putsz 1352 00007A4B E99587 <1> jmp cmd3 1353 <1> 1354 <1> @@: 1354 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.215 1354 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.216 1354 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.217 1354 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.218 1354 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.219 1354 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.220 1354 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.221 1354 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.222 1354 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.215 1354 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.216 1354 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.217 1354 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.218 1354 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.219 1354 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.220 1354 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.221 1354 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.222 1354 ****************** <1> expansion: __@@_num = 223 1355 <1> .unquoted_loop: 1356 00007A4E 3C20 <1> cmp al, 32 ; blank or EOL outside quoted part ? 1357 00007A50 742B <1> je .blank 1358 00007A52 3C09 <1> cmp al, 9 1359 00007A54 7427 <1> je .blank 1360 00007A56 E80FFA <1> call iseol? ; (includes semicolon in lDebug) 1361 00007A59 7422 <1> je .blank ; yes --> 1362 00007A5B 3C22 <1> cmp al, '"' ; starting quote mark ? 1363 00007A5D 7411 <1> je .quoted ; yes --> 1364 00007A5F AA <1> stosb ; store character 1365 <1> .unquote: 1366 00007A60 AC <1> lodsb ; load character 1367 00007A61 EBEB <1> jmp .unquoted_loop ; continue in not-quoted loop --> 1368 <1> 1369 <1> .quoted_loop: 1370 00007A63 3C0D <1> cmp al, 13 ; EOL inside quoted part ? 1371 00007A65 7411 <1> je .quoted_eol 1372 00007A67 3C00 <1> cmp al, 0 1373 00007A69 740D <1> je .quoted_eol ; if yes, error --> 1374 00007A6B 3C22 <1> cmp al, '"' ; ending quote mark ? 1375 00007A6D 74F1 <1> je .unquote ; yes --> 1376 00007A6F AA <1> stosb ; store character 1377 <1> .quoted: 1378 00007A70 AC <1> lodsb ; load character 1379 00007A71 EBF0 <1> jmp .quoted_loop ; continue in quoted loop --> 1380 <1> 1381 <1> .empty: 1382 00007A73 BA[C43C] <1> mov dx, msg.yy_filename_empty 1383 00007A76 EBD0 <1> jmp .disp_error_1 1384 <1> 1385 <1> .quoted_eol: 1386 00007A78 BA[993C] <1> mov dx, msg.yy_filename_missing_unquote 1387 00007A7B EBCB <1> jmp .disp_error_1 1388 <1> 1389 <1> .blank: 1390 <1> ; mov byte [si - 1], 0 ; terminate (shouldn't be needed) 1391 00007A7D C60500 <1> mov byte [di], 0 ; terminate 1392 00007A80 39FB <1> cmp bx, di ; empty ? 1393 00007A82 74EF <1> je .empty ; yes --> 1394 <1> ; done 1395 00007A84 E8ECF9 <1> call chkeol 1396 <1> 1397 00007A87 F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1397 ****************** <1> expansion: adr = '[internalflags2]' 1397 ****************** <1> expansion: len = 16 1397 ****************** <1> expansion: tf = '[' 1397 ****************** <1> expansion: tb = ']' 1397 ****************** <1> expansion: adr = 'internalflags2' 1397 ****************** <1> expansion: adr = internalflags2 1398 00007A8C 740C <1> jz @F 1399 00007A8E 833E[5402]0F <1> cmp word [input_file_handles.active], _INPUT_FILE_HANDLES - 1 1400 00007A93 7205 <1> jb @F 1401 <1> 1402 00007A95 BA[E33C] <1> mov dx, msg.yy_too_many_handles 1403 00007A98 EBAE <1> jmp .disp_error_1 1404 <1> 1405 <1> @@: 1405 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.216 1405 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.217 1405 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.218 1405 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.219 1405 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.220 1405 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.221 1405 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.222 1405 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.223 1405 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.216 1405 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.217 1405 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.218 1405 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.219 1405 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.220 1405 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.221 1405 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.222 1405 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.223 1405 ****************** <1> expansion: __@@_num = 224 1406 00007A9A 89DF <1> mov di, bx 1407 <1> 1408 <1> ; INP: ds:di -> filename 1409 <1> ; OUT: File opened, 1410 <1> ; bx = file handle 1411 <1> ; STT: ds = es = ss = debugger data selector/segment 1412 <1> yy_open_file: 1413 00007A9C E88500 <1> call .setup_opencreate ; ds:si -> pathname 1414 00007A9F B86C71 <1> mov ax, 716Ch ; LFN open-create 1415 00007AA2 57 <1> push di 1416 00007AA3 31FF <1> xor di, di ; alias hint 1417 00007AA5 F9 <1> stc 1418 <1> doscall 1418 00007AA6 CD21 <2> int 21h 1419 00007AA8 5F <1> pop di 1420 00007AA9 7203E98100 <1> jnc .got ; LFN call succeeded --> 1421 <1> 1422 <1> ; Early case for no-LFN-interface available. 1423 <1> ; cmp ax, 1 1424 <1> ; je .try_sfn 1425 00007AAE 3D0071 <1> cmp ax, 7100h 1426 00007AB1 744B <1> je .try_sfn 1427 <1> 1428 <1> ; Only now, we check whether the used drive supports LFNs. 1429 <1> ; If it does, then we treat the error received as an 1430 <1> ; actual error and cancel here. If not, the SFN function 1431 <1> ; is called next as a fallback. 1432 <1> ; 1433 <1> ; We cannot rely on specific error returns like the 1434 <1> ; expected 7100h CY (or 7100h CF-unchanged) or the similar 1435 <1> ; 0001h CY (Invalid function) because no one agrees on what 1436 <1> ; error code to use. 1437 <1> ; 1438 <1> ; dosemu returns 0003h (Path not found) on FATFS and 1439 <1> ; redirected-non-dosemu drives. But may be changed so as to 1440 <1> ; return 0059h (Function not supported on network). 1441 <1> ; MSWindows 98SE returns 0002h (File not found) on 1442 <1> ; DOS-redirected drives. 1443 <1> ; DOSLFN with Fallback mode enabled supports the call (albeit 1444 <1> ; limited to SFNs). 1445 <1> ; 1446 <1> ; To suss out what the error means, check LFN availability. 1447 <1> ; 1448 <1> ; Refer to https://github.com/stsp/dosemu2/issues/770 1449 00007AB3 1E <1> push ds 1450 00007AB4 06 <1> push es 1451 00007AB5 57 <1> push di 1452 00007AB6 50 <1> push ax 1453 <1> lframe 1453 ****************** <1> expansion: bits = 16 1453 ****************** <1> expansion: base_size = 2 1453 ****************** <1> expansion: near_offset = 2 1453 ****************** <1> expansion: far_offset = 4 1453 ****************** <1> expansion: int_offset = 6 1453 ****************** <1> expansion: inner = 0 1453 ****************** <1> expansion: nested = 0 1453 ****************** <1> expansion: autoret = 1453 ****************** <1> expansion: pars_size = 0 1453 ****************** <1> expansion: pars_return_size = 0 1453 ****************** <1> expansion: parlist = 1453 ****************** <1> expansion: labellist = empty,empty,empty 1453 ****************** <1> expansion: ofs = 0 1453 ****************** <1> expansion: enter = 0 1453 ****************** <1> expansion: req = 0 1453 ****************** <1> expansion: usereq = 0 1453 ****************** <1> expansion: emit = 1 1453 ****************** <1> expansion: restore_frame_ofs = 0 1453 ****************** <1> expansion: pars_inner_size = 0 1454 <1> lvar 34, fstype_buffer 1454 ****************** <1> expansion: varsize = 34 1454 ****************** <1> expansion: ofs = -34 1454 ****************** <1> expansion: newlabel = fstype_buffer 1454 ****************** <1> expansion: labellist = fstype_buffer,undefined,,empty,empty,empty 1454 ****************** <1> expansion: ?fstype_buffer = -34 1454 ****************** <1> expansion: req = 1 1454 ****************** <1> expansion: hadvar = 1 1455 <1> lvar 4, pathname_buffer 1455 ****************** <1> expansion: varsize = 4 1455 ****************** <1> expansion: ofs = -38 1455 ****************** <1> expansion: newlabel = pathname_buffer 1455 ****************** <1> expansion: labellist = pathname_buffer,undefined,,fstype_buffer,undefined,,empty,empty,empty 1455 ****************** <1> expansion: ?pathname_buffer = -38 1455 ****************** <1> expansion: req = 1 1455 ****************** <1> expansion: hadvar = 1 1456 00007AB7 5589E58D66DA <1> lenter 1456 ****************** <1> expansion: wasearly = 0 1456 ****************** <1> expansion: early = 0 1456 ****************** <1> expansion: lsizevariables = 38 1456 ****************** <1> expansion: req = 1 1456 ****************** <1> expansion: enter_emitted = 0 1456 ****************** <1> expansion: enter = 1 1456 ****************** <1> expansion: 186 = 0 1456 ****************** <1> expansion: newlabel = frame_bp 1456 ****************** <1> expansion: labellist = frame_bp,undefined,,pathname_buffer,undefined,,fstype_buffer,undefined,,empty,empty,empty 1456 ****************** <1> expansion: ?frame_bp = 0 1456 ****************** <1> expansion: lsizeparameters = 0 1457 <1> 1458 00007ABD 16 <1> push ss 1459 00007ABE 1F <1> pop ds 1460 00007ABF 89E2 <1> mov dx, sp ; ds:dx -> ?pathname_buffer 1461 00007AC1 16 <1> push ss 1462 00007AC2 07 <1> pop es 1463 00007AC3 89E7 <1> mov di, sp ; es:di -> ?pathname_buffer 1464 <1> 1465 00007AC5 AD <1> lodsw ; load first two bytes of pathname 1466 00007AC6 80FC3A <1> cmp ah, ':' ; starts with drive specifier ? 1467 00007AC9 7408 <1> je @F ; yes --> 1468 <1> 1469 00007ACB B419 <1> mov ah, 19h 1470 <1> doscall ; get current default drive 1470 00007ACD CD21 <2> int 21h 1471 00007ACF 0441 <1> add al, 'A' ; A: = 0, convert to drive letter 1472 00007AD1 B43A <1> mov ah, ':' ; drive specifier 1473 <1> @@: 1473 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.217 1473 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.218 1473 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.219 1473 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.220 1473 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.221 1473 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.222 1473 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.223 1473 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.224 1473 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.217 1473 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.218 1473 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.219 1473 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.220 1473 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.221 1473 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.222 1473 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.223 1473 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.224 1473 ****************** <1> expansion: __@@_num = 225 1474 00007AD3 AB <1> stosw 1475 00007AD4 B85C00 <1> mov ax, '\' ; backslash and zero terminator 1476 00007AD7 AB <1> stosw ; es:di -> ?fstype_buffer 1477 <1> 1478 00007AD8 31C0 <1> xor ax, ax 1479 00007ADA B91100 <1> mov cx, 34 >> 1 1480 00007ADD 57 <1> push di 1481 00007ADE F3AB <1> rep stosw ; initialise ?fstype_buffer to all zeros 1482 00007AE0 5F <1> pop di ; -> ?fstype_buffer 1483 <1> 1484 00007AE1 B92000 <1> mov cx, 32 ; size of ?fstype_buffer 1485 00007AE4 31DB <1> xor bx, bx ; harden, initialise this 1486 00007AE6 B8A071 <1> mov ax, 71A0h ; get volume information 1487 00007AE9 F9 <1> stc 1488 <1> doscall ; (depends on ds = es = ss) 1488 00007AEA CD21 <2> int 21h 1489 <1> 1490 00007AEC 7207 <1> jc @F ; if call not supported --> 1491 <1> ; bx = FS flags 1492 00007AEE F6C740 <1> test bh, 0100_0000b ; LFN interface available ? 1493 00007AF1 F9 <1> stc ; if no 1494 00007AF2 7401 <1> jz @F ; no --> 1495 <1> 1496 00007AF4 F8 <1> clc ; is available 1497 <1> @@: 1497 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.218 1497 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.219 1497 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.220 1497 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.221 1497 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.222 1497 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.223 1497 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.224 1497 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.225 1497 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.218 1497 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.219 1497 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.220 1497 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.221 1497 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.222 1497 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.223 1497 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.224 1497 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.225 1497 ****************** <1> expansion: __@@_num = 226 1498 <1> 1499 00007AF5 89EC5D <1> lleave 1499 ****************** <1> expansion: 186 = 0 1499 ****************** <1> expansion: __lframe__autoret = 1500 00007AF8 58 <1> pop ax ; (restore error code) 1501 00007AF9 5F <1> pop di 1502 00007AFA 07 <1> pop es 1503 00007AFB 1F <1> pop ds 1504 00007AFC 7320 <1> jnc .error ; if LFN interface is available, actual error 1505 <1> ; if LFN interface is not available, try SFN 1506 <1> 1507 <1> .try_sfn: 1508 00007AFE E82300 <1> call .setup_opencreate 1509 00007B01 B8006C <1> mov ax, 6C00h ; Open-create 1510 00007B04 F9 <1> stc 1511 <1> doscall 1511 00007B05 CD21 <2> int 21h 1512 00007B07 7326 <1> jnc .got 1513 <1> 1514 00007B09 83F801 <1> cmp ax, 1 1515 00007B0C 7405 <1> je .try_old_open 1516 00007B0E 3D006C <1> cmp ax, 6C00h 1517 00007B11 750B <1> jne .error 1518 <1> 1519 <1> .try_old_open: 1520 00007B13 88D8 <1> mov al, bl ; access and sharing modes 1521 00007B15 B43D <1> mov ah, 3Dh ; Open 1522 00007B17 89F2 <1> mov dx, si ; -> filename 1523 00007B19 F9 <1> stc 1524 <1> doscall 1524 00007B1A CD21 <2> int 21h 1525 00007B1C 7311 <1> jnc .got 1526 <1> 1527 <1> .error: 1528 00007B1E BA[083D] <1> mov dx, msg.yy_error_file_open 1529 00007B21 E924FF <1> jmp yy.disp_error_1 1530 <1> 1531 <1> .setup_opencreate: 1532 00007B24 89FE <1> mov si, di ; -> filename 1533 00007B26 BB2060 <1> mov bx, 0110_0000_0010_0000b ; Auto-commit, no int 24h 1534 <1> ; DENY WRITE, Read-only 1535 00007B29 31C9 <1> xor cx, cx ; create attribute 1536 00007B2B BA0100 <1> mov dx, 0000_0000_0000_0001b ; no create / open, no truncate 1537 00007B2E C3 <1> retn 1538 <1> 1539 <1> .got: 1540 <1> ; ax = file handle 1541 00007B2F E81F00 <1> call yy_reset_buf 1542 <1> 1543 00007B32 F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1543 ****************** <1> expansion: adr = '[internalflags2]' 1543 ****************** <1> expansion: len = 16 1543 ****************** <1> expansion: tf = '[' 1543 ****************** <1> expansion: tb = ']' 1543 ****************** <1> expansion: adr = 'internalflags2' 1543 ****************** <1> expansion: adr = internalflags2 1544 00007B37 7509 <1> jnz @F 1545 00007B39 800E[8A00]10 <1> setopt [internalflags2], dif2_input_file 1545 ****************** <1> expansion: adr = '[internalflags2]' 1545 ****************** <1> expansion: len = 16 1545 ****************** <1> expansion: tf = '[' 1545 ****************** <1> expansion: tb = ']' 1545 ****************** <1> expansion: adr = 'internalflags2' 1545 ****************** <1> expansion: adr = internalflags2 1546 00007B3E A3[3402] <1> mov word [input_file_handles + 0], ax 1547 00007B41 C3 <1> retn 1548 <1> 1549 <1> @@: 1549 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.219 1549 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.220 1549 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.221 1549 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.222 1549 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.223 1549 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.224 1549 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.225 1549 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.226 1549 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.219 1549 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.220 1549 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.221 1549 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.222 1549 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.223 1549 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.224 1549 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.225 1549 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.226 1549 ****************** <1> expansion: __@@_num = 227 1550 00007B42 FF06[5402] <1> inc word [input_file_handles.active] 1551 00007B46 8B1E[5402] <1> mov bx, word [input_file_handles.active] 1552 00007B4A D1E3 <1> shl bx, 1 1553 00007B4C 8987[3402] <1> mov word [input_file_handles + bx], ax 1554 00007B50 C3 <1> retn 1555 <1> %endif 1556 <1> 1557 <1> 1558 <1> ; INP: word [bufnext], word [bufend] 1559 <1> ; CHG: - 1560 <1> ; 1561 <1> ; Note: When reading from a file, we buffer some of the input 1562 <1> ; in line_in. When switching to a non-file, or starting 1563 <1> ; to read from another file, we have to reset the seek 1564 <1> ; position of the (prior) file to avoid losing the data. 1565 <1> ; This cropped up during yy development, but actually 1566 <1> ; affects serial and InDOS input, too. Therefore, 1567 <1> ; this function is not below the conditional for yy. 1568 <1> yy_reset_buf: 1569 00007B51 51 <1> push cx 1570 00007B52 B9[0200] <1> mov cx, line_in + 2 1571 00007B55 870E[9A02] <1> xchg cx, word [bufnext] 1572 00007B59 F7D9 <1> neg cx 1573 00007B5B 030E[9C02] <1> add cx, word [bufend] ; cx = how much remaining in buffer 1574 00007B5F C706[9C02][0200] <1> mov word [bufend], line_in + 2 1575 <1> 1576 00007B65 F606[8A00]40 <1> testopt [internalflags2], dif2_did_getline_file 1576 ****************** <1> expansion: adr = '[internalflags2]' 1576 ****************** <1> expansion: len = 16 1576 ****************** <1> expansion: tf = '[' 1576 ****************** <1> expansion: tb = ']' 1576 ****************** <1> expansion: adr = 'internalflags2' 1576 ****************** <1> expansion: adr = internalflags2 1577 00007B6A 7427 <1> jz .not_used 1578 <1> 1579 00007B6C 50 <1> push ax 1580 00007B6D 52 <1> push dx 1581 00007B6E 53 <1> push bx 1582 00007B6F 89CA <1> mov dx, cx 1583 00007B71 31C9 <1> xor cx, cx 1584 00007B73 F7DA <1> neg dx ; dx = minus how much remaining 1585 00007B75 7401 <1> jz @F 1586 00007B77 49 <1> dec cx ; sign extension into cx:dx 1587 <1> @@: 1587 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.220 1587 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.221 1587 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.222 1587 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.223 1587 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.224 1587 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.225 1587 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.226 1587 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.227 1587 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.220 1587 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.221 1587 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.222 1587 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.223 1587 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.224 1587 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.225 1587 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.226 1587 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.227 1587 ****************** <1> expansion: __@@_num = 228 1588 <1> 1589 00007B78 31DB <1> xor bx, bx ; bx = handle (0 is STDIN) 1590 <1> %if _INPUT_FILE_HANDLES 1591 00007B7A F606[8A00]10 <1> testopt [internalflags2], dif2_input_file 1591 ****************** <1> expansion: adr = '[internalflags2]' 1591 ****************** <1> expansion: len = 16 1591 ****************** <1> expansion: tf = '[' 1591 ****************** <1> expansion: tb = ']' 1591 ****************** <1> expansion: adr = 'internalflags2' 1591 ****************** <1> expansion: adr = internalflags2 1592 00007B7F 7405 <1> jz @F ; if not input file --> 1593 00007B81 57 <1> push di 1594 00007B82 E8ABFC <1> call yy_get_handle ; bx = handle 1595 00007B85 5F <1> pop di 1596 <1> @@: 1596 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.221 1596 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.222 1596 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.223 1596 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.224 1596 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.225 1596 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.226 1596 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.227 1596 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.228 1596 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.221 1596 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.222 1596 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.223 1596 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.224 1596 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.225 1596 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.226 1596 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.227 1596 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.228 1596 ****************** <1> expansion: __@@_num = 229 1597 <1> %endif 1598 00007B86 B80142 <1> mov ax, 4201h ; lseek, from current file position 1599 <1> doscall ; call DOS 1599 00007B89 CD21 <2> int 21h 1600 00007B8B 5B <1> pop bx 1601 00007B8C 5A <1> pop dx 1602 00007B8D 58 <1> pop ax 1603 <1> 1604 00007B8E 8026[8A00]BF <1> clropt [internalflags2], dif2_did_getline_file 1604 ****************** <1> expansion: adr = '[internalflags2]' 1604 ****************** <1> expansion: len = 16 1604 ****************** <1> expansion: tf = '[' 1604 ****************** <1> expansion: tb = ']' 1604 ****************** <1> expansion: adr = 'internalflags2' 1604 ****************** <1> expansion: adr = internalflags2 1605 <1> 1606 <1> .not_used: 1607 00007B93 59 <1> pop cx 1608 00007B94 C3 <1> retn 1609 <1> 1610 <1> 1611 <1> %include "serialp.asm" 1 <2> 2 <2> %if 0 3 <2> 4 <2> Serial port handling code 5 <2> 6 <2> 2019 by C. Masloch 7 <2> based on http://www.sci.muni.cz/docs/pc/serport.txt The Serial Port rel. 14 8 <2> 9 <2> Usage of the works is permitted provided that this 10 <2> instrument is retained with the works, so that any entity 11 <2> that uses the works is notified of this instrument. 12 <2> 13 <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <2> 15 <2> %endif 16 <2> 17 <2> 18 <2> usesection lDEBUG_DATA_ENTRY 18 ****************** <2> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 19 <2> 20 0000525D CB <2> iisphwreset serial_interrupt_handler 21 <2> 22 <2> align 2 23 0000525E EB10000000004B4280- <2> iispentry serial_interrupt_handler, 80h, serial_interrupt_handler 23 00005267 EBF400 <2> 24 00005270 50 <2> push ax 25 00005271 51 <2> push cx 26 00005272 52 <2> push dx ; first save the regs we need to change 27 00005273 1E <2> push ds 28 00005274 56 <2> push si 29 00005275 B020 <2> mov al,20h ; acknowledge interrupt 30 00005277 E620 <2> out 20h,al 31 <2> 32 00005279 0E <2> push cs 33 0000527A 1F <2> pop ds 34 0000527B FC <2> cld 35 <2> ih_continue: 36 0000527C 8B16[BA02] <2> mov dx, [baseport] 37 00005280 42 <2> inc dx 38 00005281 42 <2> inc dx ; (base + 2) read IIR 39 00005282 31C0 <2> xor ax,ax 40 00005284 EC <2> in al,dx ; get interrupt cause 41 00005285 A801 <2> test al,1 ; did the UART generate the int? 42 00005287 750C <2> jne ih_sep ; no, then it's somebody else's problem 43 00005289 2406 <2> and al,6 ; mask bits not needed 44 0000528B 89C6 <2> mov si,ax ; make a pointer out of it 45 0000528D 4A <2> dec dx 46 0000528E 4A <2> dec dx ; = base 47 0000528F FF94[9C52] <2> call near word [serial_interrupt_table + si] ; serve this int 48 00005293 EBE7 <2> jmp ih_continue ; and look for more things to be done 49 <2> ih_sep: 50 00005295 5E <2> pop si 51 00005296 1F <2> pop ds 52 00005297 5A <2> pop dx ; restore regs 53 00005298 59 <2> pop cx 54 00005299 58 <2> pop ax 55 0000529A CF <2> iret 56 <2> 57 0000529B 90 <2> align 2 58 0000529C [A452][A952][F152]- <2> serial_interrupt_table: dw int_modem,int_tx,int_rx,int_status 58 000052A2 [4453] <2> 59 <2> 60 <2> 61 <2> int_modem: 62 <2> ; just clear modem status, we are not interested in it 63 000052A4 83C206 <2> add dx, 6 64 000052A7 EC <2> in al, dx ; read MSR 65 000052A8 C3 <2> retn 66 <2> 67 <2> 68 <2> int_tx: 69 000052A9 8B16[BA02] <2> mov dx, [baseport] 70 000052AD 8B36[B802] <2> mov si, word [txtail] 71 <2> 72 000052B1 52 <2> push dx 73 000052B2 83C205 <2> add dx, 5 74 000052B5 EC <2> in al, dx ; (base + 5) read LSR 75 000052B6 5A <2> pop dx 76 000052B7 A820 <2> test al, 20h ; Transmitter Holding Register Empty ? 77 000052B9 7421 <2> jz itx_setup_int ; no, it was a spurious interrupt --> 78 <2> ; This conditional detects the condition specified in 79 <2> ; the section "Known problems with several chips": 80 <2> ; When a 1 is written to the bit 1 (Tx int enab) in the 81 <2> ; IER, a Tx interrupt is generated. This is an erroneous 82 <2> ; interrupt if the THRE bit is not set. [So don't set 83 <2> ; this bit as long as the THRE bit isn't set. CB] 84 <2> 85 <2> ; check if there's something to be sent 86 <2> %if _USE_TX_FIFO 87 000052BB B90100 <2> mov cx, 1 88 000052BE F606[ED02]08 <2> test byte [serial_flags], sf_built_in_fifo 89 000052C3 7404 <2> jz @F 90 000052C5 8A0E[EC02] <2> mov cl, byte [serial_fifo_size] 91 <2> @@: 91 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.222 91 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.223 91 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.224 91 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.225 91 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.226 91 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.227 91 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.228 91 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.229 91 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.222 91 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.223 91 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.224 91 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.225 91 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.226 91 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.227 91 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.228 91 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.229 91 ****************** <2> expansion: __@@_num = 230 92 <2> %endif 93 <2> itx_more: 94 000052C9 3B36[B602] <2> cmp si, word [txhead] 95 000052CD 7419 <2> je itx_nothing 96 000052CF AC <2> lodsb 97 000052D0 EE <2> out dx, al ; write it to the THR 98 <2> ; check for wrap-around in our fifo 99 <2> tx_checkwrap 99 000052D1 81FE[C003] <3> cmp si, txfifo+_TXFIFOSIZE 99 000052D5 7203 <3> jb %%tx_nowrap 99 000052D7 BE[4003] <3> mov si, txfifo 99 <3> %%tx_nowrap: 100 <2> %if _USE_TX_FIFO 101 <2> ; send as much bytes as the chip can take when available 102 000052DA E2ED <2> loop itx_more 103 <2> %endif 104 <2> itx_setup_int: 105 000052DC 3B36[B602] <2> cmp si, word [txhead] 106 000052E0 7406 <2> je itx_nothing 107 000052E2 42 <2> inc dx 108 000052E3 B003 <2> mov al, 0000_0011b 109 000052E5 EE <2> out dx, al ; write to IER 110 000052E6 EB04 <2> jmp itx_dontstop 111 <2> itx_nothing: 112 <2> ; no more data in the fifo, so inhibit TX interrupts 113 000052E8 42 <2> inc dx 114 000052E9 B001 <2> mov al, 0000_0001b 115 000052EB EE <2> out dx, al ; write to IER 116 <2> itx_dontstop: 117 000052EC 8936[B802] <2> mov word [txtail], si 118 000052F0 C3 <2> retn 119 <2> 120 <2> 121 <2> int_rx: 122 000052F1 8B36[B202] <2> mov si, word [rxhead] 123 <2> irx_more: 124 000052F5 8B16[BA02] <2> mov dx, [baseport] 125 000052F9 EC <2> in al, dx ; read from RBR 126 000052FA 3C03 <2> cmp al, 3 127 000052FC 7511 <2> jne @FF 128 000052FE F606[ED02]02 <2> testopt [serial_flags], sf_ctrl_c 128 ****************** <2> expansion: adr = '[serial_flags]' 128 ****************** <2> expansion: len = 14 128 ****************** <2> expansion: tf = '[' 128 ****************** <2> expansion: tb = ']' 128 ****************** <2> expansion: adr = 'serial_flags' 128 ****************** <2> expansion: adr = serial_flags 129 00005303 7405 <2> jz @F 130 00005305 800E[ED02]04 <2> setopt [serial_flags], sf_double_ctrl_c 130 ****************** <2> expansion: adr = '[serial_flags]' 130 ****************** <2> expansion: len = 14 130 ****************** <2> expansion: tf = '[' 130 ****************** <2> expansion: tb = ']' 130 ****************** <2> expansion: adr = 'serial_flags' 130 ****************** <2> expansion: adr = serial_flags 131 <2> @@: 131 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.223 131 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.224 131 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.225 131 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.226 131 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.227 131 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.228 131 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.229 131 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.230 131 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.223 131 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.224 131 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.225 131 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.226 131 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.227 131 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.228 131 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.229 131 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.230 131 ****************** <2> expansion: __@@_num = 231 132 0000530A 800E[ED02]02 <2> setopt [serial_flags], sf_ctrl_c 132 ****************** <2> expansion: adr = '[serial_flags]' 132 ****************** <2> expansion: len = 14 132 ****************** <2> expansion: tf = '[' 132 ****************** <2> expansion: tb = ']' 132 ****************** <2> expansion: adr = 'serial_flags' 132 ****************** <2> expansion: adr = serial_flags 133 <2> @@: 133 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.224 133 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.225 133 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.226 133 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.227 133 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.228 133 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.229 133 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.230 133 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.231 133 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.224 133 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.225 133 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.226 133 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.227 133 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.228 133 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.229 133 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.230 133 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.231 133 ****************** <2> expansion: __@@_num = 232 134 0000530F 8804 <2> mov byte [si], al 135 00005311 89F0 <2> mov ax, si 136 00005313 46 <2> inc si 137 <2> ; check for wrap-around 138 <2> rx_checkwrap 138 00005314 81FE[4003] <3> cmp si, rxfifo+_RXFIFOSIZE 138 00005318 7203 <3> jb %%rx_nowrap 138 0000531A BE[C002] <3> mov si, rxfifo 138 <3> %%rx_nowrap: 139 0000531D 3936[B402] <2> cmp word [rxtail], si 140 00005321 7415 <2> je @FF 141 <2> ; see if there are more bytes to be read 142 00005323 83C205 <2> add dx, 5 143 00005326 EC <2> in al, dx ; read LSR 144 00005327 A801 <2> test al, 1 ; Data Available ? 145 00005329 75CA <2> jnz irx_more 146 <2> .end: 147 0000532B 8936[B202] <2> mov word [rxhead], si 148 <2> ; test al, 20h ; Transmitter Holding Register Empty ? 149 <2> ; jnz int_tx ; yes, do transmit next --> 150 <2> ; Sometimes when sending and receiving at the 151 <2> ; same time, TX ints get lost. This is a cure. 152 <2> ; retn 153 0000532F E977FF <2> jmp int_tx ; (this checks for THRE) 154 <2> 155 <2> @@: 155 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.225 155 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.226 155 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.227 155 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.228 155 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.229 155 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.230 155 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.231 155 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.232 155 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.225 155 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.226 155 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.227 155 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.228 155 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.229 155 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.230 155 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.231 155 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.232 155 ****************** <2> expansion: __@@_num = 233 156 00005332 8B16[BA02] <2> mov dx, [baseport] 157 00005336 EC <2> in al, dx ; read RBR (discard) 158 00005337 A9 <2> db __TEST_IMM16 ; (skip mov) 159 <2> @@: 159 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.226 159 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.227 159 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.228 159 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.229 159 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.230 159 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.231 159 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.232 159 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.233 159 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.226 159 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.227 159 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.228 159 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.229 159 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.230 159 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.231 159 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.232 159 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.233 159 ****************** <2> expansion: __@@_num = 234 160 00005338 89C6 <2> mov si, ax 161 0000533A 83C205 <2> add dx, 5 162 0000533D EC <2> in al, dx ; read LSR 163 0000533E A801 <2> test al, 1 ; Data Available ? 164 00005340 75F0 <2> jnz @BB 165 00005342 EBE7 <2> jmp .end 166 <2> 167 <2> 168 <2> int_status: 169 <2> ; just clear the status ("this trivial task is left as an exercise 170 <2> ; to the student") 171 00005344 83C205 <2> add dx, 5 172 00005347 EC <2> in al, dx ; read LSR 173 00005348 C3 <2> retn 174 <2> 175 <2> 176 <2> usesection lDEBUG_CODE 176 ****************** <2> expansion: __SECT__ = [section lDEBUG_CODE] 177 <2> 178 <2> ; OUT: ZR if no new character in buffer 179 <2> ; NZ if new character read, 180 <2> ; al = character 181 <2> ; STT: ds = debugger segment 182 <2> serial_receive_char: 183 00007B95 56 <2> push si 184 <2> ; see if there are bytes to be read from the fifo 185 00007B96 8B36[B402] <2> mov si, word [rxtail] 186 <2> 187 00007B9A 3B36[B202] <2> cmp si, word [rxhead] 188 00007B9E 7412 <2> je .nodata 189 00007BA0 AC <2> lodsb 190 <2> %if _ECHO_RX_TO_TX 191 <2> %if _RX_TO_TX_ADD_LF 192 <2> call serial_send_char_add_lf 193 <2> %else 194 <2> call serial_send_char 195 <2> %endif 196 <2> %endif 197 <2> ; check for wrap-around 198 <2> rx_checkwrap 198 00007BA1 81FE[4003] <3> cmp si, rxfifo+_RXFIFOSIZE 198 00007BA5 7203 <3> jb %%rx_nowrap 198 00007BA7 BE[C002] <3> mov si, rxfifo 198 <3> %%rx_nowrap: 199 00007BAA 8936[B402] <2> mov word [rxtail], si 200 00007BAE 85F6 <2> test si, si ; (NZ) 201 00007BB0 EB02 <2> jmp .return 202 <2> 203 <2> .nodata: 204 00007BB2 31C0 <2> xor ax, ax ; (ZR) 205 <2> .return: 206 00007BB4 5E <2> pop si 207 00007BB5 C3 <2> retn 208 <2> 209 <2> 210 <2> serial_install_interrupt_handler: 211 <2> %if _PM 212 <2> call ispm 213 <2> jnz .rm 214 <2> 215 <2> mov ax, 0200h 216 <2> mov bl, _INTNUM 217 <2> int 31h ; cx:dx = int vector 218 <2> mov word [serial_interrupt_handler.next], dx 219 <2> mov word [serial_interrupt_handler.next + 2], cx 220 <2> 221 <2> mov ax, 0201h 222 <2> mov bl, _INTNUM 223 <2> mov cx, word [pspdbg] ; cx => lDEBUG_DATA_ENTRY 224 <2> mov dx, serial_interrupt_handler 225 <2> int 31h 226 <2> retn 227 <2> 228 <2> .rm: 229 <2> %endif 230 <2> %if _BOOTLDR 231 00007BB6 F606[8500]40 <2> testopt [internalflags], nodosloaded 231 ****************** <2> expansion: adr = '[internalflags]' 231 ****************** <2> expansion: len = 15 231 ****************** <2> expansion: tf = '[' 231 ****************** <2> expansion: tb = ']' 231 ****************** <2> expansion: adr = 'internalflags' 231 ****************** <2> expansion: adr = internalflags 232 00007BBB 741F <2> jz .notboot 233 <2> 234 00007BBD 06 <2> push es 235 00007BBE 1E <2> push ds 236 00007BBF 31C0 <2> xor ax, ax 237 00007BC1 8ED8 <2> mov ds, ax 238 00007BC3 BE2C00 <2> mov si, _INTNUM * 4 239 00007BC6 C41C <2> les bx, [si] 240 00007BC8 36891E[6052] <2> mov word [ss:serial_interrupt_handler.next], bx 241 00007BCD 368C06[6252] <2> mov word [ss:serial_interrupt_handler.next+2], es 242 00007BD2 C704[5E52] <2> mov word [si], serial_interrupt_handler 243 00007BD6 8C5402 <2> mov word [si + 2], ss ; ss => lDEBUG_DATA_ENTRY 244 00007BD9 1F <2> pop ds 245 00007BDA 07 <2> pop es 246 00007BDB C3 <2> retn 247 <2> 248 <2> .notboot: 249 <2> %endif 250 <2> ; install interrupt handler first 251 00007BDC 06 <2> push es 252 00007BDD B80B35 <2> mov ax,3500h+_INTNUM 253 00007BE0 CD21 <2> int 21h 254 00007BE2 891E[6052] <2> mov word [serial_interrupt_handler.next], bx 255 00007BE6 8C06[6252] <2> mov word [serial_interrupt_handler.next+2], es 256 00007BEA 07 <2> pop es 257 00007BEB B80B25 <2> mov ax,2500h+_INTNUM 258 00007BEE BA[5E52] <2> mov dx, serial_interrupt_handler ; ds => lDEBUG_DATA_ENTRY 259 00007BF1 CD21 <2> int 21h 260 00007BF3 C3 <2> retn 261 <2> 262 <2> serial_clear_fifos: 263 <2> ; clear fifos (not those in the 16550A, but ours) 264 00007BF4 B8[C002] <2> mov ax, rxfifo 265 00007BF7 A3[B202] <2> mov word [rxhead], ax 266 00007BFA A3[B402] <2> mov word [rxtail], ax 267 00007BFD B8[4003] <2> mov ax, txfifo 268 00007C00 A3[B602] <2> mov word [txhead], ax 269 00007C03 A3[B802] <2> mov word [txtail], ax 270 00007C06 C3 <2> retn 271 <2> 272 <2> serial_init_UART: 273 <2> ; initialize the UART 274 00007C07 8B16[BA02] <2> mov dx, [baseport] 275 00007C0B 83C203 <2> add dx, 3 ; (base + 3) write LCR 276 00007C0E B080 <2> mov al, 80h ; DLAB = 1 277 00007C10 EE <2> out dx, al ; make DL register accessible 278 00007C11 52 <2> push dx 279 00007C12 8B16[BA02] <2> mov dx, [baseport] ; (base) 280 00007C16 B80C00 <2> mov ax, _UART_RATE 281 00007C19 EF <2> out dx, ax ; write bps rate divisor (DL) 282 00007C1A 5A <2> pop dx ; (base + 3) write LCR 283 00007C1B B003 <2> mov al, _UART_PARAMS ; DLAB = 0 and control parameters 284 00007C1D EE <2> out dx, al ; write parameters 285 <2> 286 <2> ; is it a 16550A? 287 00007C1E 4A <2> dec dx ; (base + 2) write FCR, read IIR 288 <2> %if _USE_TX_FIFO 289 00007C1F B007 <2> mov al, 0000_0111b | _UART_FIFO 290 00007C21 EE <2> out dx, al ; (write FCR) try to clear and enable FIFOs 291 00007C22 90 <2> nop 292 00007C23 EC <2> in al, dx ; read IIR 293 00007C24 800E[ED02]08 <2> or byte [serial_flags], sf_built_in_fifo 294 <2> ; in case of built-in tx FIFO 295 00007C29 24C0 <2> and al, 1100_0000b ; mask of FIFO functional bits 296 00007C2B 3CC0 <2> cmp al, 1100_0000b ; both bits set ? 297 00007C2D 7408 <2> je @F ; yes --> 298 00007C2F 8026[ED02]F7 <2> and byte [serial_flags], ~ sf_built_in_fifo 299 <2> ; no built-in tx FIFO 300 <2> %endif 301 00007C34 31C0 <2> xor ax, ax 302 00007C36 EE <2> out dx, al ; (write FCR) disable the FIFOs 303 <2> @@: 303 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.227 303 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.228 303 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.229 303 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.230 303 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.231 303 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.232 303 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.233 303 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.234 303 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.227 303 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.228 303 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.229 303 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.230 303 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.231 303 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.232 303 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.233 303 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.234 303 ****************** <2> expansion: __@@_num = 235 304 00007C37 4A <2> dec dx ; (base + 1) 305 00007C38 B001 <2> mov al, 0000_0001b ; allow RX interrupts 306 00007C3A EE <2> out dx, al ; write to IER 307 00007C3B 4A <2> dec dx ; (base + 0) read RBR 308 00007C3C EC <2> in al, dx ; clear receiver 309 00007C3D 83C205 <2> add dx, 5 ; (base + 5) read LSR 310 00007C40 EC <2> in al, dx ; clear line status 311 00007C41 42 <2> inc dx ; (base + 6) read MSR 312 00007C42 EC <2> in al, dx ; clear modem status 313 <2> ; free interrupt in the ICU 314 00007C43 E421 <2> in al, 21h 315 00007C45 24F7 <2> and al, _ONMASK 316 00007C47 E621 <2> out 21h, al 317 <2> ; and enable ints from the UART 318 00007C49 4A <2> dec dx 319 00007C4A 4A <2> dec dx ; (base + 4) 320 00007C4B B008 <2> mov al, 0000_1000b 321 00007C4D EE <2> out dx, al ; write MCR 322 00007C4E C3 <2> retn 323 <2> 324 <2> serial_clean_up: 325 <2> ; lock int in the ICU 326 00007C4F E421 <2> in al, 21h 327 00007C51 0C08 <2> or al, _OFFMASK 328 00007C53 E621 <2> out 21h, al 329 00007C55 31C0 <2> xor ax, ax 330 00007C57 8B16[BA02] <2> mov dx, [baseport] 331 00007C5B 83C204 <2> add dx, 4 ; (base + 4) 332 <2> ; disconnect the UART from the int line 333 00007C5E EE <2> out dx, al ; write MCR 334 00007C5F 4A <2> dec dx 335 00007C60 4A <2> dec dx 336 00007C61 4A <2> dec dx ; (base + 1) disable UART ints 337 00007C62 EE <2> out dx, al ; write IER 338 00007C63 42 <2> inc dx ; (base + 2) 339 <2> ; disable the FIFOs (old software relies on it) 340 00007C64 EE <2> out dx, al ; write FCR 341 <2> 342 <2> %if _PM 343 <2> call ispm 344 <2> jnz .rm 345 <2> 346 <2> mov ax, 0201h 347 <2> mov bl, _INTNUM 348 <2> mov cx, [serial_interrupt_handler.next + 2] 349 <2> mov dx, [serial_interrupt_handler.next] 350 <2> int 31h 351 <2> retn 352 <2> 353 <2> .rm: 354 <2> %endif 355 <2> %if _BOOTLDR 356 00007C65 F606[8500]40 <2> testopt [internalflags], nodosloaded 356 ****************** <2> expansion: adr = '[internalflags]' 356 ****************** <2> expansion: len = 15 356 ****************** <2> expansion: tf = '[' 356 ****************** <2> expansion: tb = ']' 356 ****************** <2> expansion: adr = 'internalflags' 356 ****************** <2> expansion: adr = internalflags 357 00007C6A 7419 <2> jz .notboot 358 <2> 359 00007C6C 1E <2> push ds 360 00007C6D 31C0 <2> xor ax, ax 361 00007C6F 8ED8 <2> mov ds, ax 362 00007C71 BE2C00 <2> mov si, _INTNUM * 4 363 00007C74 36FF36[6252] <2> push word [ss:serial_interrupt_handler.next+2] 364 00007C79 36FF36[6052] <2> push word [ss:serial_interrupt_handler.next] 365 00007C7E 8F04 <2> pop word [si] 366 00007C80 8F4402 <2> pop word [si + 2] 367 00007C83 1F <2> pop ds 368 00007C84 C3 <2> retn 369 <2> 370 <2> .notboot: 371 <2> %endif 372 <2> ; restore int vector 373 00007C85 1E <2> push ds 374 00007C86 C516[6052] <2> lds dx, [serial_interrupt_handler.next] 375 00007C8A B80B25 <2> mov ax,2500h+_INTNUM 376 00007C8D CD21 <2> int 21h 377 00007C8F 1F <2> pop ds 378 00007C90 C3 <2> retn 379 <2> 380 <2> serial_send_char_add_lf: 381 00007C91 50 <2> push ax 382 <2> .loop: 383 00007C92 E80800 <2> call serial_send_char 384 00007C95 3C0D <2> cmp al, 13 ; add LF after CR; change it if you don't like it 385 00007C97 B00A <2> mov al, 10 386 00007C99 74F7 <2> je .loop 387 00007C9B 58 <2> pop ax 388 00007C9C C3 <2> retn 389 <2> 390 <2> serial_send_char: 391 00007C9D 56 <2> push si 392 00007C9E 51 <2> push cx 393 00007C9F 52 <2> push dx 394 00007CA0 06 <2> push es 395 <2> 396 00007CA1 8B36[B602] <2> mov si, word [txhead] 397 00007CA5 8804 <2> mov byte [si],al 398 00007CA7 46 <2> inc si 399 <2> ; check for wrap-around 400 <2> tx_checkwrap 400 00007CA8 81FE[C003] <3> cmp si, txfifo+_TXFIFOSIZE 400 00007CAC 7203 <3> jb %%tx_nowrap 400 00007CAE BE[4003] <3> mov si, txfifo 400 <3> %%tx_nowrap: 401 <2> 402 00007CB1 50 <2> push ax 403 00007CB2 9C <2> pushf 404 00007CB3 3936[B802] <2> cmp word [txtail], si 405 00007CB7 7537 <2> jne .no_wait 406 <2> 407 <2> ; Because we enable the tx empty interrupt 408 <2> ; when putting data into the buffer, it 409 <2> ; should still be enabled here when the 410 <2> ; buffer is currently full. So we only 411 <2> ; need to wait for the interrupt to 412 <2> ; occur and be processed by our handler. 413 <2> 414 00007CB9 31C9 <2> xor cx, cx 415 00007CBB BA4000 <2> mov dx, 40h 416 00007CBE 8EC2 <2> mov es, dx 417 00007CC0 268B166C00 <2> mov dx, word [es:6Ch] 418 <2> 419 <2> .wait: 420 00007CC5 E8C9FB <2> call idle 421 00007CC8 9D <2> popf 422 00007CC9 9C <2> pushf 423 <2> 424 00007CCA 3B36[B802] <2> cmp si, word [txtail] 425 00007CCE 7520 <2> jne .no_wait 426 <2> 427 00007CD0 263B166C00 <2> cmp dx, word [es:6Ch] 428 00007CD5 74EE <2> je .wait 429 00007CD7 268B166C00 <2> mov dx, word [es:6Ch] 430 00007CDC 41 <2> inc cx 431 00007CDD 83F95A <2> cmp cx, 5 * 18 432 00007CE0 72E3 <2> jb .wait 433 <2> 434 00007CE2 8026[7D00]BF <2> clropt [options], enable_serial 434 ****************** <2> expansion: adr = '[options]' 434 ****************** <2> expansion: len = 9 434 ****************** <2> expansion: tf = '[' 434 ****************** <2> expansion: tb = ']' 434 ****************** <2> expansion: adr = 'options' 434 ****************** <2> expansion: adr = options 435 00007CE7 BA[EE3A] <2> mov dx, msg.no_progress 436 00007CEA E882FA <2> call putsz 437 00007CED E9F384 <2> jmp cmd3 438 <2> 439 <2> .no_wait: 440 00007CF0 8936[B602] <2> mov word [txhead], si 441 00007CF4 FA <2> cli ; try to avoid interrupt while emptying buffer 442 <2> ; test if we can send a byte right away 443 <2> %if 0 ; int_tx checks for THRE ...- 444 <2> mov dx, [baseport] 445 <2> add dx, 5 ; (base + 5) 446 <2> in al, dx ; read LSR 447 <2> test al, 20h ; Transmitter Holding Register Empty ? 448 <2> jz .crank ; no, just enable the interrupt --> 449 <2> %endif 450 <2> 451 <2> ; call int_tx ; send bytes, enables or disables the tx interrupt 452 00007CF5 0E <2> push cs 453 00007CF6 E80700 <2> call code_to_int_tx 454 <2> 455 <2> %if 0 ; -... and sets up the interrupt accordingly 456 <2> jmp .dontcrank 457 <2> .crank: 458 <2> ; crank it up 459 <2> ; note that this might not work with some very old 8250s 460 <2> add dx, 1 - 5 ; (base + 1) write IER 461 <2> mov al, 0000_0011b 462 <2> out dx, al ; enable tx empty interrupt 463 <2> .dontcrank: 464 <2> %endif 465 00007CF9 9D <2> popf 466 00007CFA 58 <2> pop ax 467 00007CFB 07 <2> pop es 468 00007CFC 5A <2> pop dx 469 00007CFD 59 <2> pop cx 470 00007CFE 5E <2> pop si 471 00007CFF C3 <2> retn 472 <2> 473 <2> 474 <2> code_to_int_tx: 475 00007D00 2EFF36[0E7D] <2> push word [cs:.entry_retf_word] 476 <2> %if _PM 477 <2> ; near return address 478 <2> call ispm 479 <2> jnz .rm 480 <2> 481 <2> push word [cssel] 482 <2> jmp @F 483 <2> 484 <2> %endif 485 <2> .rm: 486 00007D05 16 <2> push ss 487 <2> @@: 487 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.228 487 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.229 487 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.230 487 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.231 487 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.232 487 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.233 487 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.234 487 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.235 487 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.228 487 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.229 487 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.230 487 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.231 487 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.232 487 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.233 487 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.234 487 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.235 487 ****************** <2> expansion: __@@_num = 236 488 00007D06 2EFF36[0C7D] <2> push word [cs:.int_tx_word] 489 00007D0B CB <2> retf ; jump to lDEBUG_DATA_ENTRY:int_tx 490 <2> 491 <2> align 2 492 <2> .int_tx_word: 493 00007D0C [A952] <2> dw int_tx 494 <2> .entry_retf_word: 495 00007D0E [4953] <2> dw entry_retf 496 <2> 497 <2> 498 <2> usesection lDEBUG_DATA_ENTRY 498 ****************** <2> expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 499 <2> 500 <2> entry_retf: 501 00005349 CB <2> retf 6327 6328 6329 usesection lDEBUG_CODE 6329 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 6330 6331 %if _BOOTLDR 6332 ; Determine the amount of actual memory 6333 ; 6334 ; This is important to call at the time we need the size, 6335 ; not just save the size initially. Loading other pre-boot 6336 ; installers or RPLs will change the size. 6337 ; 6338 ; INP: - 6339 ; OUT: dx = segment behind usable memory (taking EBDAs & RPLs into account) 6340 ; ds = ss 6341 ; CHG: ax, cx, di, si, ds 6342 bootgetmemorysize: 6343 00007D10 06 push es 6344 00007D11 31C0 xor ax, ax 6345 00007D13 8ED8 mov ds, ax 6346 00007D15 CD12 int 12h ; get memory size in KiB 6347 00007D17 B106 mov cl, 6 6348 00007D19 D3E0 shl ax, cl ; *64, convert to paragraphs 6349 00007D1B 50 push ax 6350 00007D1C C536BC00 lds si, [ 2Fh *4 ] ; get current Int2F 6351 00007D20 46 inc si ; pointer valid (not 0FFFFh) ? (left increased!) 6352 00007D21 741B jz .norpl ; no --> 6353 00007D23 8CD8 mov ax, ds 6354 00007D25 85C0 test ax, ax ; segment valid (not zero) ? 6355 00007D27 7415 jz .norpl ; no --> 6356 00007D29 46 times 2 inc si ; +3 with above inc 6357 00007D2B 0E push cs 6358 00007D2C 07 pop es 6359 00007D2D BF[437D] mov di, .rpl 6360 00007D30 B90300 mov cx, .rpl_size 6361 00007D33 F3A6 repe cmpsb ; "RPL" signature ? 6362 00007D35 7507 jne .norpl ; no --> 6363 00007D37 5A pop dx 6364 00007D38 B8064A mov ax, 4A06h 6365 00007D3B CD2F int 2Fh ; adjust usable memory size for RPL 6366 00007D3D A8 db __TEST_IMM8 ; (skip pop) 6367 .norpl: 6368 00007D3E 5A pop dx 6369 ; dx = segment behind last available memory 6370 00007D3F 16 push ss 6371 00007D40 1F pop ds 6372 00007D41 07 pop es 6373 00007D42 C3 retn 6374 6375 00007D43 52504C .rpl: db "RPL" 6376 endarea .rpl 6377 %endif 6378 6379 6380 ;--- ensure a debuggee is loaded 6381 ;--- set SI:DI to CS:IP, preserve AX, BX, DX 6382 6383 ensuredebuggeeloaded: 6384 00007D46 50 push ax 6385 00007D47 F606[8600]80 testopt [internalflags], attachedterm 6385 ****************** expansion: adr = '[internalflags]' 6385 ****************** expansion: len = 15 6385 ****************** expansion: tf = '[' 6385 ****************** expansion: tb = ']' 6385 ****************** expansion: adr = 'internalflags' 6385 ****************** expansion: adr = internalflags 6386 00007D4C 7502 jnz @F ; not loaded, create --> 6387 00007D4E 58 pop ax 6388 00007D4F C3 retn ; done 6389 6390 @@: 6390 ****************** expansion: @BBBB (case-insensitive) = ..@.@@.1.229 6390 ****************** expansion: @BBB (case-insensitive) = ..@.@@.1.230 6390 ****************** expansion: @BB (case-insensitive) = ..@.@@.1.231 6390 ****************** expansion: @B (case-insensitive) = ..@.@@.1.232 6390 ****************** expansion: @F (case-insensitive) = ..@.@@.1.233 6390 ****************** expansion: @FF (case-insensitive) = ..@.@@.1.234 6390 ****************** expansion: @FFF (case-insensitive) = ..@.@@.1.235 6390 ****************** expansion: @FFFF (case-insensitive) = ..@.@@.1.236 6390 ****************** expansion: @B4 (case-insensitive) = ..@.@@.1.229 6390 ****************** expansion: @B3 (case-insensitive) = ..@.@@.1.230 6390 ****************** expansion: @B2 (case-insensitive) = ..@.@@.1.231 6390 ****************** expansion: @B1 (case-insensitive) = ..@.@@.1.232 6390 ****************** expansion: @F1 (case-insensitive) = ..@.@@.1.233 6390 ****************** expansion: @F2 (case-insensitive) = ..@.@@.1.234 6390 ****************** expansion: @F3 (case-insensitive) = ..@.@@.1.235 6390 ****************** expansion: @F4 (case-insensitive) = ..@.@@.1.236 6390 ****************** expansion: __@@_num = 237 6391 00007D50 53 push bx 6392 00007D51 52 push dx 6393 6394 00007D52 E81501 call set_efl_to_fl ; initialize EFL, and ax = 0 6395 00007D55 BF[4003] mov di, regs 6396 00007D58 B91E00 mov cx, 15*2 ; (8 standard + 6 seg + eip) * 2 6397 00007D5B F3AB rep stosw ; initialize all regs 6398 %if _BOOTLDR 6399 00007D5D F606[8500]40 testopt [internalflags], nodosloaded 6399 ****************** expansion: adr = '[internalflags]' 6399 ****************** expansion: len = 15 6399 ****************** expansion: tf = '[' 6399 ****************** expansion: tb = ']' 6399 ****************** expansion: adr = 'internalflags' 6399 ****************** expansion: adr = internalflags 6400 00007D62 7448 jz .dos 6401 00007D64 B86000 mov ax, 60h 6402 00007D67 50 push ax 6403 00007D68 BF[6003] mov di, reg_ds 6404 00007D6B AB stosw 6405 00007D6C AF scasw ; (skip dummy high word) 6406 00007D6D AB stosw 6407 00007D6E AF scasw 6408 00007D6F AB stosw 6409 00007D70 AF scasw 6410 00007D71 AB stosw 6411 00007D72 E8D7DF call adusetup 6412 00007D75 E898FF call bootgetmemorysize 6413 00007D78 83EA60 sub dx, 60h 6414 00007D7B 81FA0010 cmp dx, 1000h 6415 00007D7F 7602 jbe .bootbelow64kib ; if memory left <= 64 KiB 6416 00007D81 31D2 xor dx, dx ; dx = 1000h (same thing, after shifting) 6417 .bootbelow64kib: 6418 00007D83 B104 mov cl, 4 6419 00007D85 D3E2 shl dx, cl 6420 00007D87 4A dec dx 6421 00007D88 4A dec dx 6422 00007D89 8916[5003] mov word [reg_esp], dx 6423 00007D8D 07 pop es 6424 00007D8E 87D7 xchg dx, di ; es:di = child stack pointer 6425 00007D90 31C0 xor ax, ax 6426 00007D92 AB stosw ; push 0 on client's stack 6427 6428 00007D93 803E[E202]00 cmp byte [bInit], 0 6429 00007D98 750B jnz .bootnomemtouch 6430 00007D9A FE06[E202] inc byte [bInit] 6431 00007D9E 26C7060000CD19 mov word [es:0], 019CDh ; place opcode for int 19h at cs:ip 6432 .bootnomemtouch: 6433 00007DA5 8C06[6402] mov word [pspdbe], es 6434 00007DA9 E9AB00 jmp .return 6435 6436 .dos: 6437 %endif 6438 00007DAC C606[7903]01 mov byte [reg_eip+1], 100h>>8 6439 00007DB1 B448 mov ah, 48h ; get size of largest free block 6440 00007DB3 BBFFFF mov bx, -1 6441 00007DB6 CD21 int 21h 6442 00007DB8 83FB11 cmp bx, 11h ; enough for PSP + one paragraph for code/stack ? 6443 00007DBB 7303E99700 jb .return ; no --> 6444 00007DC0 B448 mov ah, 48h ; allocate it 6445 00007DC2 CD21 int 21h 6446 00007DC4 7303E98E00 jc .return ; (memory taken between the calls) 6447 6448 00007DC9 53 push bx 6449 00007DCA BF[6003] mov di, reg_ds ; fill segment registers ds,es,ss,cs 6450 00007DCD AB stosw 6451 00007DCE AF scasw ; (skip dummy high word) 6452 00007DCF AB stosw 6453 00007DD0 AF scasw 6454 00007DD1 AB stosw 6455 00007DD2 AF scasw 6456 00007DD3 AB stosw 6457 00007DD4 E875DF call adusetup 6458 00007DD7 8B1E[6C03] mov bx, word [reg_cs] ; bx:dx = where to load program 6459 00007DDB 8EC3 mov es, bx 6460 00007DDD 58 pop ax ; get size of memory block 6461 00007DDE 89C2 mov dx, ax 6462 00007DE0 01DA add dx, bx 6463 00007DE2 2689160200 mov word [es:ALASAP], dx 6464 00007DE7 3D0010 cmp ax, 1000h 6465 00007DEA 7602 jbe .below64kib ; if memory left <= 64 KiB 6466 00007DEC 31C0 xor ax, ax ; ax = 1000h (same thing, after shifting) 6467 .below64kib: 6468 00007DEE B104 mov cl, 4 6469 00007DF0 D3E0 shl ax, cl 6470 00007DF2 48 dec ax 6471 00007DF3 48 dec ax 6472 00007DF4 A3[5003] mov word [reg_esp], ax 6473 00007DF7 97 xchg ax, di ; es:di = child stack pointer 6474 00007DF8 31C0 xor ax, ax 6475 00007DFA AB stosw ; push 0 on client's stack 6476 6477 ; Create a PSP 6478 00007DFB B455 mov ah, 55h ; create child PSP 6479 00007DFD 8CC2 mov dx, es 6480 00007DFF 268B360200 mov si, word [es:ALASAP] 6481 00007E04 F8 clc ; works around OS/2 bug 6482 00007E05 CD21 int 21h 6483 00007E07 E817DD call setpspdbg ; reset PSP to ours 6484 6485 ; Finish up. Set termination address. 6486 00007E0A B82225 mov ax, 2522h ; set interrupt vector 22h 6487 00007E0D BA[1B4E] mov dx, int22 6488 00007E10 CD21 int 21h 6489 00007E12 2689160A00 mov word [es:TPIV], dx 6490 00007E17 268C1E0C00 mov word [es:TPIV+2], ds 6491 6492 00007E1C 803E[E202]00 cmp byte [bInit], 0 6493 00007E21 750A jnz .nomemtouch 6494 00007E23 FE06[E202] inc byte [bInit] 6495 00007E27 26C6060001C3 mov byte [es:100h], 0C3h ; place opcode for retn at cs:ip 6496 .nomemtouch: 6497 6498 00007E2D 8C06[6402] mov word [pspdbe], es 6499 00007E31 8CC0 mov ax, es 6500 00007E33 48 dec ax 6501 00007E34 8EC0 mov es, ax 6502 00007E36 40 inc ax 6503 00007E37 26C70608004445 mov word [es:8+0], "DE" 6504 00007E3E 26C7060A004255 mov word [es:8+2], "BU" 6505 00007E45 26C7060C004747 mov word [es:8+4], "GG" 6506 00007E4C 26C7060E004545 mov word [es:8+6], "EE" ; set MCB name 6507 00007E53 26A30100 mov word [es:1], ax ; set MCB owner 6508 .return: 6509 00007E57 8026[8600]7F clropt [internalflags], attachedterm 6509 ****************** expansion: adr = '[internalflags]' 6509 ****************** expansion: len = 15 6509 ****************** expansion: tf = '[' 6509 ****************** expansion: tb = ']' 6509 ****************** expansion: adr = 'internalflags' 6509 ****************** expansion: adr = internalflags 6510 00007E5C 16 push ss 6511 00007E5D 07 pop es 6512 6513 00007E5E 8B36[6C03] mov si, word [reg_cs] 6514 00007E62 8B3E[7803] mov di, word [reg_eip] 6515 00007E66 5A pop dx 6516 00007E67 5B pop bx 6517 00007E68 58 pop ax 6518 00007E69 C3 retn 6519 6520 6521 set_efl_to_fl: 6522 00007E6A 31C0 xor ax, ax ; initialize ax = 0 and FL = ZR NC etc 6523 00007E6C 50 _no386 push ax ; dummy high word 6523 ****************** expansion: entry = 32364 6523 ****************** expansion: PATCH_386_TABLE = "",10269,10270,13099,13100,13101,13102,13103,13104,13105,28063,28064,28065,28066,32364 6523 ****************** expansion: entry = 32365 6524 00007E6D 66 _386_o32 ; pushfd 6524 ****************** expansion: entry = 32365 6524 ****************** expansion: PATCH_NO386_TABLE = "",5103,5104,5105,5106,5597,5598,5599,5600,5601,5602,5603,5604,5605,5606,5607,5608,5609,5610,5611,5612,6026,6047,6071,6099,6101,6104,6112,6115,6116,6117,6118,6119,6308,11295,11296,11362,11367,11372,11395,11396,11397,11398,11399,11400,11410,11411,15517,15518,15519,15520,15521,15522,15523,15524,15525,15526,15527,15548,15549,15550,15551,15552,15553,15554,15555,15556,15557,15558,23278,23279,23280,23281,26702,26703,26704,27518,27519,27987,27988,28062,28068,28069,28070,28071,28072,28073,28074,28075,28076,28077,28078,28079,28080,28081,28082,28083,28084,28085,28086,28087,28088,28089,28090,28091,28092,28093,28094,28095,28096,28097,32365 6524 ****************** expansion: entry = 32366 6525 00007E6E 9C pushf 6526 00007E6F 8F06[7C03] pop word [reg_efl] ; set to FL 6527 00007E73 8F06[7E03] pop word [reg_efl+2] ; set to high word of EFL, or zero 6528 00007E77 C3 retn 6529 6530 6531 %if _PM 6532 ; Hook Int2F if a DPMI host is found. However for Win9x and DosEmu 6533 ; Int2F.1687 is not hooked because it doesn't work. Debugging in 6534 ; protected mode may still work, but the initial switch must be 6535 ; single-stepped. 6536 ; 6537 ; CHG: ax, bx, cx, dx, di 6538 ; STT: V86/RM 6539 hook2F: 6540 testopt [internalflags], hooked2F|(!_BOOTLDR-1&nodosloaded) 6541 jnz .return ; don't hook now --> 6542 @@: 6543 mov ax, 1687h ; DPMI host installed? 6544 int 2Fh 6545 test ax, ax 6546 jnz .return 6547 mov word [dpmientry+0], di ; true host DPMI entry 6548 mov word [dpmientry+2], es 6549 mov word [dpmiwatch+0], di 6550 mov word [dpmiwatch+2], es 6551 testopt [internalflags], nohook2F 6552 jnz .return ; can't hook Int2F --> 6553 mov word [dpmiwatch+0], mydpmientry 6554 mov word [dpmiwatch+2], ds ; => lDEBUG_DATA_ENTRY 6555 mov ax, 352Fh 6556 int 21h 6557 mov word [oldi2F+0], bx 6558 mov word [oldi2F+2], es 6559 mov dx, debug2F ; ds => lDEBUG_DATA_ENTRY 6560 mov ax, 252Fh 6561 int 21h 6562 6563 ; Test whether we can hook the DPMI entrypoint call. 6564 mov ax, 1687h 6565 int 2Fh 6566 test ax, ax 6567 jnz .nohost 6568 cmp di, mydpmientry ; our entrypoint returned ? 6569 jne .nohook 6570 mov ax, es 6571 mov bx, ds ; bx => lDEBUG_DATA_ENTRY 6572 cmp ax, bx 6573 jne .nohook ; no --> 6574 6575 setopt [internalflags], hooked2F 6576 %if _DISPHOOK 6577 mov ax, ds ; ax => lDEBUG_DATA_ENTRY 6578 push ds 6579 pop es 6580 mov di, dpmihookcs 6581 call hexword 6582 mov dx, dpmihook 6583 call putsz 6584 %endif 6585 .return: 6586 push ds 6587 pop es 6588 retn 6589 6590 .nohost: 6591 .nohook: 6592 lds dx, [oldi2F] 6593 mov ax, 252Fh 6594 int 21h ; unhook 6595 push ss 6596 pop ds 6597 push ss 6598 pop es ; restore segregs 6599 setopt [internalflags], nohook2F 6600 ; note that we cannot hook 6601 mov dx, msg.dpmi_no_hook 6602 call putsz ; display message about it 6603 jmp @B 6604 %endif 6605 6606 6607 usesection lDEBUG_DATA_ENTRY 6607 ****************** expansion: __SECT__ = [section lDEBUG_DATA_ENTRY] 6608 0000534A 90 align 16 6609 ldebug_data_entry_size equ $-section.lDEBUG_DATA_ENTRY.vstart 6610 endarea ldebug_data_entry, 1 6611 6612 usesection ASMTABLE1 6612 ****************** expansion: __SECT__ = [section ASMTABLE1] 6613 000015A9 90 align 16 6614 asmtable1_size equ $-section.ASMTABLE1.vstart 6615 endarea asmtable1, 1 6616 6617 usesection ASMTABLE2 6617 ****************** expansion: __SECT__ = [section ASMTABLE2] 6618 000007D2 90 align 16 6619 asmtable2_size equ $-section.ASMTABLE2.vstart 6620 endarea asmtable2, 1 6621 6622 6623 numdef SHOWASMTABLESIZE, 0 6623 ****************** expansion: _SHOWASMTABLESIZE = 1 6624 %if _SHOWASMTABLESIZE 6625 %assign ASMTABLESIZE asmtable1_size + asmtable2_size 6625 ****************** expansion: ASMTABLESIZE = 7568 6626 %warning asmtables hold ASMTABLESIZE bytes 6626 ****************** warning: asmtables hold 7568 bytes [-w+user] 6627 %endif 6628 6629 6630 usesection DATASTACK 6630 ****************** expansion: __SECT__ = [section DATASTACK] 6632 %define SECTIONFIXUP -$$+100h+ldebug_data_entry_size +asmtable1_size+asmtable2_size 6632 ****************** expansion: SECTIONFIXUP = -$$+100h+ldebug_data_entry_size +asmtable1_size+asmtable2_size 6633 6634 ; I/O buffers 6635 00000000 line_in: resb 1 ; maximal length of input line 6636 00000001 resb 1 ; actual length (must be one less than previous byte) 6637 00000002 resb 255 ; buffer for 13-terminated input line 6638 .end: 6639 ; b_bplist and g_bplist are expected in that order by initcont 6640 %if _BREAKPOINTS 6641 b_bplist: 6642 00000101 .used_mask: resb (_NUM_B_BP+7)>>3 ; bitmask of used points 6643 00000103 .disabled_mask: resb (_NUM_B_BP+7)>>3 ; bitmask of disabled points 6644 00000105 .sticky_mask: resb (_NUM_B_BP+7)>>3 ; bitmask of sticky points 6645 ; desc: stay around during DEBUG's operation unless 6646 ; explicitly removed/un-stickified. This allows 6647 ; to keep breakpoints around while changing from PM. 6648 ; Hits while in DEBUG are ignored though, use DDEBUG. 6649 ; Disabling won't remove them, just ignores hits. 6650 00000107 .bp: resb _NUM_B_BP*BPSIZE 6651 00000147 .counter: resw _NUM_B_BP 6652 %endif 6653 %if _NUM_G_BP 6654 g_bplist: 6655 00000167 .used_count: resb 1 ; for the byte counter of saved breakpoints 6656 00000168 .bp: resb _NUM_G_BP*BPSIZE 6657 .end: 6658 %endif 6659 000001A8 trim_overflow: resb 1 ; actually part of line_out to avoid overflow of trimputs loop 6660 000001A9 line_out: resb 263 6661 000002B0 resb 1 ; reserved for terminating zero 6662 line_out_end: 6663 6664 000002B1 alignb 2 6665 000002B2 rxhead: resw 1 6666 000002B4 rxtail: resw 1 6667 000002B6 txhead: resw 1 6668 000002B8 txtail: resw 1 6669 000002BA baseport: resw 1 6670 000002BC alignb 16 6671 000002C0 rxfifo: resb _RXFIFOSIZE 6672 alignb 16 6673 00000340 txfifo: resb _TXFIFOSIZE 6674 6675 alignb 16 ; stack might be re-used as GDT, so align it on a paragraph 6676 000003C0 stack: resb _STACKSIZE 6677 alignb 2 ; ensure stack aligned 6678 stack_end: 6679 6680 datastack_size equ $-section.DATASTACK.vstart 6681 endarea datastack, 1 6682 6683 6684 usesection INIT 6684 ****************** expansion: __SECT__ = [section INIT] 6685 initstart: 6686 6687 %include "init.asm" 1 <1> 2 <1> %if 0 3 <1> 4 <1> lDebug initialisation 5 <1> 6 <1> Copyright (C) 1995-2003 Paul Vojta 7 <1> Copyright (C) 2008-2012 C. Masloch 8 <1> 9 <1> Usage of the works is permitted provided that this 10 <1> instrument is retained with the works, so that any entity 11 <1> that uses the works is notified of this instrument. 12 <1> 13 <1> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 14 <1> 15 <1> %endif 16 <1> 17 <1> 18 <1> usesection INIT 18 ****************** <1> expansion: __SECT__ = [section INIT] 19 <1> 20 <1> initcode: 21 <1> %if ($ - $$) != 0 22 <1> %fatal initcode expected at start of section 23 <1> %endif 24 <1> 25 00000000 8CD0 <1> mov ax, ss 26 00000002 8CDA <1> mov dx, ds 27 00000004 29D0 <1> sub ax, dx 28 00000006 31D2 <1> xor dx, dx 29 00000008 B90400 <1> mov cx, 4 30 <1> @@: 30 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.230 30 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.231 30 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.232 30 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.233 30 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.234 30 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.235 30 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.236 30 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.237 30 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.230 30 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.231 30 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.232 30 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.233 30 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.234 30 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.235 30 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.236 30 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.237 30 ****************** <1> expansion: __@@_num = 238 31 0000000B D1E0 <1> shl ax, 1 32 0000000D D1D2 <1> rcl dx, 1 33 0000000F E2FA <1> loop @B 34 <1> 35 00000011 50 <1> push ax ; (if sp was zero) 36 <1> 37 00000012 01E0 <1> add ax, sp 38 00000014 83D200 <1> adc dx, 0 39 00000017 83C00F <1> add ax, 15 40 0000001A 83D200 <1> adc dx, 0 41 <1> 42 0000001D 24F0 <1> and al, ~15 43 <1> 44 0000001F 83FA01 <1> cmp dx, NONBOOTINITSTACK_END >> 16 45 00000022 771B <1> ja .stackdownfirst 46 00000024 7205 <1> jb .memupfirst 47 00000026 3DA04A <1> cmp ax, NONBOOTINITSTACK_END & 0FFFFh 48 00000029 7314 <1> jae .stackdownfirst 49 <1> .memupfirst: 50 0000002B BBAA14 <1> mov bx, paras(NONBOOTINITSTACK_END) 51 0000002E B44A <1> mov ah, 4Ah 52 00000030 CD21 <1> int 21h 53 00000032 730B <1> jnc @F 54 <1> .memfail: 55 00000034 BA[5D08] <1> mov dx, imsg.early_mem_fail 56 <1> .earlyfail: 57 00000037 E8210C <1> call init_putsz_cs 58 0000003A B8FF4C <1> mov ax, 4CFFh 59 0000003D CD21 <1> int 21h 60 <1> 61 <1> @@: 61 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.231 61 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.232 61 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.233 61 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.234 61 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.235 61 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.236 61 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.237 61 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.238 61 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.231 61 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.232 61 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.233 61 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.234 61 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.235 61 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.236 61 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.237 61 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.238 61 ****************** <1> expansion: __@@_num = 239 62 <1> .stackdownfirst: 63 0000003F 8CD8 <1> mov ax, ds 64 00000041 058A14 <1> add ax, paras(NONBOOTINITSTACK_START) 65 00000044 FA <1> cli 66 00000045 8ED0 <1> mov ss, ax 67 00000047 BC0002 <1> mov sp, NONBOOTINITSTACK_SIZE 68 0000004A FB <1> sti 69 <1> 70 <1> ; if jumped to .stackdownfirst: now, shrink our memory block 71 <1> ; else: no-op (already grew or shrunk block) 72 0000004B BBAA14 <1> mov bx, paras(NONBOOTINITSTACK_END) 73 0000004E B44A <1> mov ah, 4Ah 74 00000050 CD21 <1> int 21h 75 00000052 72E0 <1> jc .memfail 76 <1> 77 <1> 78 00000054 8CD8 <1> mov ax, ds 79 00000056 05080F <1> add ax, paras(INITSECTIONOFFSET) 80 00000059 8CDA <1> mov dx, ds 81 0000005B 81C26613 <1> add dx, paras(NONBOOTINITTARGET) 82 0000005F B92401 <1> mov cx, init_size_p 83 00000062 E8770B <1> call init_movp 84 <1> 85 00000065 52 <1> push dx 86 00000066 E87100 <1> call init_retf 87 <1> 88 00000069 8CDB <1> mov bx, ds 89 0000006B 89DA <1> mov dx, bx 90 0000006D 81C3640F <1> add bx, paras(AUXTARGET1) 91 00000071 81C27A07 <1> add dx, paras(CODETARGET1) 92 00000075 89D1 <1> mov cx, dx 93 00000077 E86100 <1> call init_check_auxbuff 94 0000007A 742A <1> jz @F 95 <1> 96 0000007C 8CDB <1> mov bx, ds 97 0000007E 89DA <1> mov dx, bx 98 00000080 81C37A07 <1> add bx, paras(AUXTARGET2) 99 00000084 81C27B09 <1> add dx, paras(CODETARGET2) 100 00000088 E85000 <1> call init_check_auxbuff 101 0000008B 7419 <1> jz @F 102 <1> 103 <1> ; If both prior attempts failed, we allocate 104 <1> ; an additional 8 KiB and move the buffer to 105 <1> ; that. This should always succeed. 106 0000008D 2EC706[5008]6613 <1> mov word [cs:memsize], paras(AUXTARGET3+auxbuff_size) 107 <1> ; enlarge the final memory block size 108 <1> 109 00000094 8CDB <1> mov bx, ds 110 00000096 81C36511 <1> add bx, paras(AUXTARGET3) 111 0000009A 89CA <1> mov dx, cx 112 0000009C E83C00 <1> call init_check_auxbuff 113 0000009F 7405 <1> jz @F 114 <1> 115 <1> ; Because this shouldn't happen, this is 116 <1> ; considered an internal error. 117 000000A1 BA[8B08] <1> mov dx, imsg.early_reloc_fail 118 000000A4 EB91 <1> jmp .earlyfail 119 <1> 120 <1> @@: 120 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.232 120 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.233 120 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.234 120 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.235 120 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.236 120 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.237 120 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.238 120 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.239 120 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.232 120 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.233 120 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.234 120 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.235 120 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.236 120 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.237 120 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.238 120 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.239 120 ****************** <1> expansion: __@@_num = 240 121 000000A6 8CD8 <1> mov ax, ds 122 000000A8 051E07 <1> add ax, paras(CODESECTIONOFFSET) 123 000000AB B9EA07 <1> mov cx, ldebug_code_size_p 124 000000AE E82B0B <1> call init_movp 125 <1> 126 000000B1 8916[2A02] <1> mov word [code_seg], dx ; initialise code segment reference 127 <1> 128 000000B5 89D8 <1> mov ax, bx 129 <1> 130 000000B7 A3[2C02] <1> mov word [auxbuff_segorsel], ax 131 <1> %if _PM 132 <1> mov word [auxbuff_segment], ax ; initialise auxbuff references 133 <1> %endif 134 000000BA 8EC0 <1> mov es, ax 135 000000BC 31FF <1> xor di, di 136 000000BE B90810 <1> mov cx, _AUXBUFFSIZE >> 1 137 000000C1 31C0 <1> xor ax, ax 138 000000C3 F3AB <1> rep stosw ; initialise auxbuff 139 <1> 140 000000C5 FA <1> cli 141 000000C6 8CD8 <1> mov ax, ds 142 000000C8 8EC0 <1> mov es, ax 143 000000CA 8ED0 <1> mov ss, ax 144 000000CC BC[C005] <1> mov sp, stack_end 145 000000CF FB <1> sti 146 <1> 147 000000D0 B44A <1> mov ah, 4Ah 148 000000D2 BB8A14 <1> mov bx, paras(NONBOOTINITSTACK_START) 149 000000D5 CD21 <1> int 21h ; shrink to drop init stack 150 <1> 151 000000D7 E9210C <1> jmp old_initcode 152 <1> 153 <1> 154 <1> init_retf: 155 000000DA CB <1> retf 156 <1> 157 <1> 158 <1> ; INP: bx => destination for auxbuff 159 <1> ; (The following are not actually used by this function, 160 <1> ; they're just what is passed in and preserved to 161 <1> ; be used by the caller after returning.) 162 <1> ; dx => destination for code image 163 <1> ; (if boot-loaded:) cx => destination for pseudo-PSP 164 <1> ; (implies cx+10h => destination for data_entry) 165 <1> ; OUT: ZR if this destination for auxbuff doesn't cross 166 <1> ; a 64 KiB boundary 167 <1> ; NZ else 168 <1> ; CHG: si, di 169 <1> init_check_auxbuff: 170 000000DB 89DE <1> mov si, bx ; => auxbuff 171 <1> %if _AUXBUFFSIZE < 8192 172 <1> %error Expected full sector length auxbuff 173 <1> %endif 174 000000DD 8DBC0002 <1> lea di, [si + (8192 >> 4)]; => behind auxbuff (at additional paragraph) 175 000000E1 81E600F0 <1> and si, 0F000h ; => 64 KiB chunk of first paragraph of auxbuff 176 000000E5 81E700F0 <1> and di, 0F000h ; => 64 KiB chunk of additional paragraph 177 000000E9 39F7 <1> cmp di, si ; same ? 178 <1> ; ZR if they are the same 179 000000EB C3 <1> retn 180 <1> 181 <1> 182 <1> %if _BOOTLDR 183 <1> ; Our loader transfers control to us with these registers: 184 <1> ; INP: ss:bp -> BPB 185 <1> ; ss:bp - 16 -> loadstackvars 186 <1> ; ss:bp - 32 -> loaddata 187 <1> ; cs:0 -> loaded payload 188 <1> ; cs:32 -> entry point 189 <1> ; STT: EI, UP 190 <1> ; all interrupts left from BIOS 191 <1> boot_initcode: 192 000000EC FC <1> cld 193 <1> 194 000000ED E8B705 <1> d4 call init_d4message 195 000000F0 496E20626F6F745F69- <1> d4 asciz "In boot_initcode",13,10 195 000000F9 6E6974636F64650D0A- <1> 195 00000102 00 <1> 196 <1> 197 00000103 8B56E0 <1> mov dx, word [bp + ldMemoryTop] 198 00000106 8CDB <1> mov bx, ds 199 00000108 8EC3 <1> mov es, bx 200 0000010A BF[D04F] <1> mov di, loaddata_loadedfrom 201 0000010D 16 <1> push ss 202 0000010E 1F <1> pop ds 203 0000010F 8D76E0 <1> lea si, [bp + LOADDATA] 204 00000112 B97A00 <1> mov cx, (-LOADDATA + bsBPB + ebpbNew + BPBN_size) 205 00000115 F3A4 <1> rep movsb 206 <1> 207 00000117 89D0 <1> mov ax, dx 208 00000119 2D8013 <1> sub ax, paras(BOOTDELTA) 209 0000011C 7303E94F01 <1> jc .error_out_of_memory 210 <1> ; We exaggerate the target size (BOOTDELTA) for the 211 <1> ; worst case, thus we do not need to check for narrower 212 <1> ; fits later on. BOOTDELTA includes the pseudo-PSP size, 213 <1> ; data_entry size, asmtable1_size, asmtable2_size, 214 <1> ; datastack_size, code_size, 2 times auxbuff_size, 215 <1> ; plus 16 bytes for the image ident prefix paragraph, 216 <1> ; and all of that rounded to a kibibyte boundary. 217 <1> 218 00000121 8CC9 <1> mov cx, cs 219 00000123 81C14401 <1> add cx, paras(init_size + BOOTINITSTACK_SIZE) 220 00000127 7303E94401 <1> jc .error_out_of_memory 221 0000012C 39D1 <1> cmp cx, dx 222 0000012E 7603E93D01 <1> ja .error_out_of_memory 223 <1> 224 00000133 8CCF <1> mov di, cs 225 00000135 FA <1> cli 226 00000136 8ED7 <1> mov ss, di 227 00000138 BC4014 <1> mov sp, init_size + BOOTINITSTACK_SIZE 228 0000013B FB <1> sti 229 <1> 230 0000013C E86805 <1> d4 call init_d4message 231 0000013F 537769746368656420- <1> d4 asciz "Switched to init stack",13,10 231 00000148 746F20696E69742073- <1> 231 00000151 7461636B0D0A00 <1> 232 <1> 233 <1> lframe near 233 ****************** <1> expansion: bits = 16 233 ****************** <1> expansion: base_size = 2 233 ****************** <1> expansion: near_offset = 2 233 ****************** <1> expansion: far_offset = 4 233 ****************** <1> expansion: int_offset = 6 233 ****************** <1> expansion: inner = 0 233 ****************** <1> expansion: nested = 0 233 ****************** <1> expansion: autoret = 233 ****************** <1> expansion: autoret = near 233 ****************** <1> expansion: parofs = 2 233 ****************** <1> expansion: pars_size = 0 233 ****************** <1> expansion: pars_return_size = 0 233 ****************** <1> expansion: parlist = 233 ****************** <1> expansion: labellist = empty,empty,empty 233 ****************** <1> expansion: ofs = 0 233 ****************** <1> expansion: enter = 0 233 ****************** <1> expansion: req = 0 233 ****************** <1> expansion: usereq = 0 233 ****************** <1> expansion: emit = 1 233 ****************** <1> expansion: restore_frame_ofs = 0 233 ****************** <1> expansion: pars_inner_size = 0 234 <1> lvar word, relocatedparas 234 ****************** <1> expansion: varsize = 2 234 ****************** <1> expansion: ofs = -2 234 ****************** <1> expansion: newlabel = relocatedparas 234 ****************** <1> expansion: labellist = relocatedparas,undefined,,empty,empty,empty 234 ****************** <1> expansion: ?relocatedparas = -2 234 ****************** <1> expansion: req = 1 234 ****************** <1> expansion: hadvar = 1 235 <1> lvar word, target 235 ****************** <1> expansion: varsize = 2 235 ****************** <1> expansion: ofs = -4 235 ****************** <1> expansion: newlabel = target 235 ****************** <1> expansion: labellist = target,undefined,,relocatedparas,undefined,,empty,empty,empty 235 ****************** <1> expansion: ?target = -4 235 ****************** <1> expansion: req = 1 235 ****************** <1> expansion: hadvar = 1 236 00000158 5589E55050 <1> lenter 236 ****************** <1> expansion: wasearly = 0 236 ****************** <1> expansion: early = 0 236 ****************** <1> expansion: lsizevariables = 4 236 ****************** <1> expansion: req = 1 236 ****************** <1> expansion: enter_emitted = 0 236 ****************** <1> expansion: enter = 1 236 ****************** <1> expansion: 186 = 0 236 ****************** <1> expansion: newlabel = frame_bp 236 ****************** <1> expansion: labellist = frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 236 ****************** <1> expansion: ?frame_bp = 0 236 ****************** <1> expansion: newlabel = frame_ip 236 ****************** <1> expansion: labellist = frame_ip,undefined,,frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 236 ****************** <1> expansion: ?frame_ip = 2 236 ****************** <1> expansion: lsizeparameters = 0 237 <1> lvar word, targetstart 237 ****************** <1> expansion: varsize = 2 237 ****************** <1> expansion: ofs = -6 237 ****************** <1> expansion: newlabel = targetstart 237 ****************** <1> expansion: labellist = targetstart,undefined,,frame_ip,undefined,,frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 237 ****************** <1> expansion: ?targetstart = -6 237 ****************** <1> expansion: req = 1 237 ****************** <1> expansion: hadvar = 1 238 0000015D 50 <1> push ax 239 <1> lvar word, memtop 239 ****************** <1> expansion: varsize = 2 239 ****************** <1> expansion: ofs = -8 239 ****************** <1> expansion: newlabel = memtop 239 ****************** <1> expansion: labellist = memtop,undefined,,targetstart,undefined,,frame_ip,undefined,,frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 239 ****************** <1> expansion: ?memtop = -8 239 ****************** <1> expansion: req = 1 239 ****************** <1> expansion: hadvar = 1 240 0000015E 52 <1> push dx 241 0000015F 8D7F10 <1> lea di, [bx + 10h] 242 <1> lvar word, data 242 ****************** <1> expansion: varsize = 2 242 ****************** <1> expansion: ofs = -10 242 ****************** <1> expansion: newlabel = data 242 ****************** <1> expansion: labellist = data,undefined,,memtop,undefined,,targetstart,undefined,,frame_ip,undefined,,frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 242 ****************** <1> expansion: ?data = -10 242 ****************** <1> expansion: req = 1 242 ****************** <1> expansion: hadvar = 1 243 00000162 57 <1> push di 244 00000163 8DBF1E07 <1> lea di, [bx + paras(CODESECTIONOFFSET)] 245 <1> lvar word, code 245 ****************** <1> expansion: varsize = 2 245 ****************** <1> expansion: ofs = -12 245 ****************** <1> expansion: newlabel = code 245 ****************** <1> expansion: labellist = code,undefined,,data,undefined,,memtop,undefined,,targetstart,undefined,,frame_ip,undefined,,frame_bp,undefined,,target,undefined,,relocatedparas,undefined,,empty,empty,empty 245 ****************** <1> expansion: ?code = -12 245 ****************** <1> expansion: req = 1 245 ****************** <1> expansion: hadvar = 1 246 00000167 57 <1> push di 247 <1> 248 00000168 39C1 <1> cmp cx, ax ; does init end below-or-equal target ? 249 0000016A 7703E90A01 <1> jbe .no_relocation ; yes, no relocation needed --> 250 <1> 251 0000016F E83505 <1> d4 call init_d4message 252 00000172 4E656564732072656C- <1> d4 asciz "Needs relocation of init segment",13,10 252 0000017B 6F636174696F6E206F- <1> 252 00000184 6620696E6974207365- <1> 252 0000018D 676D656E740D0A00 <1> 253 <1> 254 00000195 8B46F6 <1> mov ax, word [bp + ?data] 255 00000198 2D4401 <1> sub ax, paras(init_size + BOOTINITSTACK_SIZE) 256 0000019B 7303E9D000 <1> jc .error_out_of_memory ; already at start of memory --> 257 000001A0 83F860 <1> cmp ax, 60h 258 000001A3 7303E9C800 <1> jb .error_out_of_memory ; already at start of memory --> 259 <1> 260 000001A8 0E <1> push cs 261 000001A9 1F <1> pop ds 262 000001AA 31F6 <1> xor si, si ; -> init source 263 000001AC 8EC0 <1> mov es, ax 264 000001AE 31FF <1> xor di, di ; -> init destination 265 000001B0 B9200A <1> mov cx, words(init_size + BOOTINITSTACK_SIZE) 266 000001B3 F3A5 <1> rep movsw ; relocate only init 267 <1> ; Must not modify the data already on the stack here, 268 <1> ; until after .done_relocation (which relocates ss). 269 <1> 270 000001B5 50 <1> push ax 271 000001B6 E821FF <1> call init_retf ; jump to new init 272 <1> 273 000001B9 8B4EF4 <1> mov cx, word [bp + ?code] 274 000001BC 81C1EA07 <1> add cx, paras(ldebug_code_size) 275 000001C0 3B4EFA <1> cmp cx, word [bp + ?targetstart] 276 <1> ; does code end below-or-equal target ? 277 000001C3 7703E9B100 <1> jbe .done_relocation ; yes, relocated enough --> 278 <1> 279 000001C8 E8DC04 <1> d4 call init_d4message 280 000001CB 4E656564732072656C- <1> d4 asciz "Needs relocation of entire load image",13,10 280 000001D4 6F636174696F6E206F- <1> 280 000001DD 6620656E7469726520- <1> 280 000001E6 6C6F616420696D6167- <1> 280 000001EF 650D0A00 <1> 281 <1> 282 000001F3 BA6000 <1> mov dx, 60h 283 000001F6 8EC2 <1> mov es, dx 284 000001F8 8CC8 <1> mov ax, cs 285 000001FA 39C2 <1> cmp dx, ax ; already at start of memory ? 286 000001FC 7372 <1> jae .error_out_of_memory ; then error --> 287 <1> 288 000001FE 42 <1> inc dx 289 <1> ; cmp dx, ax 290 <1> ; ja .error_out_of_memory 291 000001FF 52 <1> push dx 292 00000200 2EFF36[2A02] <1> push word [cs:.word_relocated] ; on stack: far address of .relocated 293 <1> 294 00000205 89C1 <1> mov cx, ax ; source 295 00000207 29D1 <1> sub cx, dx ; source - target = how far to relocate 296 00000209 894EFE <1> mov word [bp + ?relocatedparas], cx 297 <1> ; save away this value 298 <1> 299 0000020C 31FF <1> xor di, di ; es:di -> where to put relocator 300 0000020E 06 <1> push es 301 0000020F 57 <1> push di ; on stack: relocator destination 302 00000210 0E <1> push cs 303 00000211 1F <1> pop ds 304 00000212 BE[2C02] <1> mov si, .relocator ; -> relocator source 305 00000215 B90800 <1> mov cx, 8 306 00000218 F3A5 <1> rep movsw ; put relocator stub 307 <1> 308 0000021A 8EC2 <1> mov es, dx 309 0000021C 31FF <1> xor di, di ; -> where to relocate to 310 0000021E 31F6 <1> xor si, si ; -> relocate start 311 <1> 314 <1> BOOTRELOC1 equ paras( init_size + BOOTINITSTACK_SIZE + ldebug_data_entry_size + asmtable1_size + asmtable2_size + ldebug_code_size) 315 <1> 316 <1> %if 0 317 <1> mov cx, BOOTRELOC1 ; how much to relocate 318 <1> mov bx, 1000h 319 <1> mov ax, cx 320 <1> cmp ax, bx ; > 64 KiB? 321 <1> jbe @F 322 <1> mov cx, bx ; first relocate the first 64 KiB 323 <1> @@: 324 <1> sub ax, cx ; how much to relocate later 325 <1> shl cx, 1 326 <1> shl cx, 1 327 <1> shl cx, 1 ; how much to relocate first, 328 <1> ; << 3 == convert paragraphs to words 329 <1> %else 330 00000220 BB0010 <1> mov bx, 1000h 331 <1> %if BOOTRELOC1 > 1000h 332 00000223 B90080 <1> mov cx, 8000h 333 00000226 B83C00 <1> mov ax, BOOTRELOC1 - 1000h 334 <1> %else 335 <1> mov cx, BOOTRELOC1 << 3 336 <1> xor ax, ax 337 <1> %endif 338 <1> %endif 339 00000229 CB <1> retf ; jump to relocator 340 <1> 341 <1> align 2 342 <1> .word_relocated: 343 0000022A [2F02] <1> dw .relocated 344 <1> 345 <1> ; ds:si -> first chunk of to be relocated data 346 <1> ; es:di -> first chunk of relocation destination 347 <1> ; cx = number of words in first chunk 348 <1> .relocator: 349 0000022C F3A5 <1> rep movsw 350 0000022E CB <1> retf ; jump to relocated cs : .relocated 351 <1> 352 <1> .relocated: 353 <1> @@: 353 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.233 353 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.234 353 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.235 353 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.236 353 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.237 353 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.238 353 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.239 353 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.240 353 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.233 353 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.234 353 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.235 353 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.236 353 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.237 353 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.238 353 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.239 353 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.240 353 ****************** <1> expansion: __@@_num = 241 354 0000022F 8CC2 <1> mov dx, es 355 00000231 01DA <1> add dx, bx 356 00000233 8EC2 <1> mov es, dx ; next segment 357 <1> 358 00000235 8CDA <1> mov dx, ds 359 00000237 01DA <1> add dx, bx 360 00000239 8EDA <1> mov ds, dx ; next segment 361 <1> 362 0000023B 29D8 <1> sub ax, bx ; = how much to relocate after this round 363 0000023D B90080 <1> mov cx, 1000h << 3 ; in case another full 64 KiB to relocate 364 00000240 730B <1> jae @F ; another full 64 KiB to relocate --> 365 00000242 01D8 <1> add ax, bx ; restore 366 00000244 D1E0 <1> shl ax, 1 367 00000246 D1E0 <1> shl ax, 1 368 00000248 D1E0 <1> shl ax, 1 ; convert paragraphs to words 369 0000024A 91 <1> xchg cx, ax ; cx = that many words 370 0000024B 31C0 <1> xor ax, ax ; no more to relocate after this round 371 <1> 372 <1> @@: 372 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.234 372 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.235 372 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.236 372 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.237 372 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.238 372 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.239 372 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.240 372 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.241 372 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.234 372 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.235 372 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.236 372 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.237 372 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.238 372 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.239 372 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.240 372 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.241 372 ****************** <1> expansion: __@@_num = 242 373 0000024D 31F6 <1> xor si, si 374 0000024F 31FF <1> xor di, di 375 00000251 F3A5 <1> rep movsw ; relocate next chunk 376 00000253 85C0 <1> test ax, ax ; another round needed? 377 00000255 75D8 <1> jnz @BB ; yes --> 378 <1> 379 00000257 8CC8 <1> mov ax, cs 380 00000259 8ED0 <1> mov ss, ax ; relocate the stack 381 <1> ; The stack frame variables have been relocated here 382 <1> ; along with the INIT segment data. 383 <1> 384 0000025B 8B46FE <1> mov ax, word [bp + ?relocatedparas] 385 0000025E 2946F6 <1> sub word [bp + ?data], ax 386 00000261 2946F4 <1> sub word [bp + ?code], ax 387 <1> 388 00000264 8B4EF4 <1> mov cx, word [bp + ?code] 389 00000267 81C1EA07 <1> add cx, paras(ldebug_code_size) 390 0000026B 3B4EFA <1> cmp cx, word [bp + ?targetstart] 391 <1> ; does code end below-or-equal target ? 392 0000026E 7609 <1> jbe .done_relocation ; yes --> 393 <1> 394 <1> .error_out_of_memory: 395 00000270 BA[6A0A] <1> mov dx, imsg.boot_error_out_of_memory 396 <1> .putsz_error: 397 00000273 E8080A <1> call init_putsz_cs_bootldr 398 00000276 E93603 <1> jmp init_booterror.soft 399 <1> 400 <1> 401 <1> .done_relocation: 402 <1> .no_relocation: 403 00000279 8CC8 <1> mov ax, cs 404 0000027B 8ED0 <1> mov ss, ax ; relocate the stack 405 <1> ; The stack frame variables have been relocated here 406 <1> ; along with the INIT segment data. 407 <1> 408 0000027D 2EC606[B705]A8 <1> mov byte [cs:init_booterror.patch_switch_stack], __TEST_IMM8 409 <1> ; SMC in section INIT 410 <1> 411 00000283 E82104 <1> d4 call init_d4message 412 00000286 52656C6F6361746564- <1> d4 asciz "Relocated enough",13,10 412 0000028F 20656E6F7567680D0A- <1> 412 00000298 00 <1> 413 <1> 414 <1> 415 00000299 CD12 <1> int 12h 416 0000029B B106 <1> mov cl, 6 417 0000029D D3E0 <1> shl ax, cl 418 <1> 419 0000029F 50 <1> push ax 420 000002A0 1E <1> push ds 421 000002A1 31F6 <1> xor si, si 422 000002A3 92 <1> xchg dx, ax 423 000002A4 8EDE <1> mov ds, si 424 000002A6 C536BC00 <1> lds si, [4 * 2Fh] 425 000002AA 83C603 <1> add si, 3 426 000002AD AC <1> lodsb 427 000002AE 3C52 <1> cmp al, 'R' 428 000002B0 750F <1> jne .no_rpl 429 000002B2 AC <1> lodsb 430 000002B3 3C50 <1> cmp al, 'P' 431 000002B5 750A <1> jne .no_rpl 432 000002B7 AC <1> lodsb 433 000002B8 3C4C <1> cmp al, 'L' 434 000002BA 7505 <1> jne .no_rpl 435 000002BC B8064A <1> mov ax, 4A06h 436 000002BF CD2F <1> int 2Fh 437 <1> .no_rpl: 438 000002C1 92 <1> xchg ax, dx 439 000002C2 1F <1> pop ds 440 000002C3 5A <1> pop dx 441 <1> 442 000002C4 39D0 <1> cmp ax, dx 443 000002C6 7405 <1> je .no_error_rpl 444 <1> ; in case RPL is present, error out (for now) 445 <1> 446 <1> ; notes for +RPL installation: 447 <1> ; 1. Allocate enough memory for our MCB + an PSP + our image + the last and the RPL MCB 448 <1> ; 2. Create the RPL's MCB + a last MCB 449 <1> ; 3. Relocate, initialise PSP 450 <1> ; 4. Hook Int2F as RPLOADER to report DOS our new size 451 <1> 452 000002C8 BA[F009] <1> mov dx, imsg.rpl_detected 453 000002CB EBA6 <1> jmp .putsz_error 454 <1> 455 <1> .no_error_rpl: 456 000002CD E8D703 <1> d4 call init_d4message 457 000002D0 4C6F61646572207061- <1> d4 asciz "Loader past RPL detection",13,10 457 000002D9 73742052504C206465- <1> 457 000002E2 74656374696F6E0D0A- <1> 457 000002EB 00 <1> 458 <1> 459 000002EC 8B5EF8 <1> mov bx, word [bp + ?memtop] 460 000002EF 39C3 <1> cmp bx, ax 461 000002F1 7406 <1> je @F 462 <1> 463 000002F3 BA[170A] <1> mov dx, imsg.mismatch_detected 464 000002F6 E97AFF <1> jmp .putsz_error 465 <1> 466 <1> @@: ; bx => behind usable memory 466 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.235 466 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.236 466 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.237 466 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.238 466 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.239 466 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.240 466 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.241 466 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.242 466 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.235 466 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.236 466 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.237 466 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.238 466 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.239 466 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.240 466 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.241 466 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.242 466 ****************** <1> expansion: __@@_num = 243 467 <1> %if 0 468 <1> mov ah, 0C1h 469 <1> stc 470 <1> int 15h ; BIOS, do you have an EBDA? 471 <1> mov ax, es 472 <1> jnc .ebda ; segment in ax --> 473 <1> ; I don't believe you, let's check 474 <1> %endif ; Enabling this would enable the BIOS to return an EBDA even if it isn't 475 <1> ; noted at 40h:0Eh, which would be useless because we have to relocate it. 476 <1> 477 000002F9 31D2 <1> xor dx, dx ; initialise dx to zero if no EBDA 478 000002FB B84000 <1> mov ax, 40h 479 000002FE 8EC0 <1> mov es, ax 480 00000300 26A10E00 <1> mov ax, word [ es:0Eh ] ; EBDA segment (unless zero) or LPT4 base I/O address (200h..3FCh) 481 00000304 3D0004 <1> cmp ax, 400h 482 00000307 7239 <1> jb .noebda ; --> 483 <1> .ebda: 484 00000309 E89B03 <1> d4 call init_d4message 485 0000030C 454244412064657465- <1> d4 asciz "EBDA detected",13,10 485 00000315 637465640D0A00 <1> 486 <1> 487 0000031C 2EFE06[5C08] <1> inc byte [cs:init_boot_ebdaflag] 488 00000321 39D8 <1> cmp ax, bx 489 <1> ;jb init_booterror.soft ; uhh, the EBDA is inside our memory? 490 <1> ;ja init_booterror.soft ; EBDA higher than top of memory. This is just as unexpected. 491 00000323 7406 <1> je @F 492 00000325 BA[4B0A] <1> mov dx, imsg.boot_ebda_unexpected 493 00000328 E948FF <1> jmp .putsz_error 494 <1> 495 <1> @@: 495 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.236 495 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.237 495 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.238 495 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.239 495 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.240 495 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.241 495 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.242 495 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.243 495 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.236 495 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.237 495 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.238 495 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.239 495 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.240 495 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.241 495 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.242 495 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.243 495 ****************** <1> expansion: __@@_num = 244 496 0000032B 8ED8 <1> mov ds, ax 497 0000032D 31D2 <1> xor dx, dx 498 0000032F 8A160000 <1> mov dl, byte [ 0 ] ; EBDA size in KiB 499 00000333 B106 <1> mov cl, 6 500 00000335 D3E2 <1> shl dx, cl ; *64, to paragraphs 501 00000337 2E8916[5608] <1> mov word [cs:init_boot_ebdasize], dx 502 0000033C 2EA3[5808] <1> mov word [cs:init_boot_ebdasource], ax 503 00000340 EB16 <1> d4 jmp @F 504 <1> .noebda: 505 00000342 E86203 <1> d4 call init_d4message 506 00000345 4E6F20454244412064- <1> d4 asciz "No EBDA detected",13,10 506 0000034E 657465637465640D0A- <1> 506 00000357 00 <1> 507 <1> @@: 507 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.237 507 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.238 507 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.239 507 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.240 507 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.241 507 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.242 507 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.243 507 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.244 507 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.237 507 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.238 507 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.239 507 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.240 507 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.241 507 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.242 507 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.243 507 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.244 507 ****************** <1> expansion: __@@_num = 245 508 <1> 509 <1> 510 00000358 8B4EF8 <1> mov cx, word [bp + ?memtop] 511 0000035B 2E030E[5608] <1> add cx, [cs:init_boot_ebdasize] 512 00000360 81E96511 <1> sub cx, paras(INITSECTIONOFFSET + datastack_size + auxbuff_size) 513 <1> ; cx = paragraph of pseudo-PSP if here 514 00000364 49 <1> dec cx ; => paragraph of image ident 515 00000365 83E1C0 <1> and cx, ~ (paras(1024) - 1) ; round down to kibibyte boundary 516 00000368 41 <1> inc cx ; => paragraph of pseudo-PSP if here 517 <1> 518 00000369 89CB <1> mov bx, cx 519 0000036B 89DA <1> mov dx, bx 520 0000036D 81C3640F <1> add bx, paras(AUXTARGET1) ; => auxbuff target if here 521 00000371 81C27A07 <1> add dx, paras(CODETARGET1) ; => code target if here 522 00000375 E863FD <1> call init_check_auxbuff 523 00000378 7470 <1> jz @F 524 <1> 525 0000037A E82A03 <1> d4 call init_d4message 526 0000037D 4669727374206C6179- <1> d4 asciz "First layout rejected",13,10 526 00000386 6F75742072656A6563- <1> 526 0000038F 7465640D0A00 <1> 527 <1> 528 00000395 89CB <1> mov bx, cx ; attempt same target again 529 00000397 89DA <1> mov dx, bx 530 00000399 81C37A07 <1> add bx, paras(AUXTARGET2) ; => auxbuff target if here 531 0000039D 81C27B09 <1> add dx, paras(CODETARGET2) ; => code target if here 532 000003A1 E837FD <1> call init_check_auxbuff 533 000003A4 7444 <1> jz @F 534 <1> 535 000003A6 E8FE02 <1> d4 call init_d4message 536 000003A9 5365636F6E64206C61- <1> d4 asciz "Second layout rejected",13,10 536 000003B2 796F75742072656A65- <1> 536 000003BB 637465640D0A00 <1> 537 <1> 538 <1> ; If both prior attempts failed, we allocate 539 <1> ; an additional 8 KiB and move the buffer to 540 <1> ; that. This should always succeed. 541 000003C2 8B4EF8 <1> mov cx, word [bp + ?memtop] 542 000003C5 2E030E[5608] <1> add cx, [cs:init_boot_ebdasize] 543 000003CA 81E96613 <1> sub cx, paras(INITSECTIONOFFSET + datastack_size + auxbuff_size*2) 544 <1> ; cx = paragraph of pseudo-PSP if here 545 000003CE 49 <1> dec cx ; => paragraph of image ident 546 000003CF 83E1C0 <1> and cx, ~ (paras(1024) - 1) ; round down to kibibyte boundary 547 000003D2 41 <1> inc cx ; => paragraph of pseudo-PSP if here 548 <1> 549 000003D3 89CB <1> mov bx, cx 550 000003D5 89DA <1> mov dx, bx 551 000003D7 81C3640F <1> add bx, paras(AUXTARGET1) ; => auxbuff target if here 552 <1> ; Note that we use AUXTARGET1 here, not AUXTARGET3, because 553 <1> ; we move where the debugger starts rather than where it ends. 554 000003DB 81C27A07 <1> add dx, paras(CODETARGET1) ; => code target if here 555 000003DF E8F9FC <1> call init_check_auxbuff 556 000003E2 7406 <1> jz @F 557 <1> 558 <1> ; Because this shouldn't happen, this is 559 <1> ; considered an internal error. 560 000003E4 BA[8B08] <1> mov dx, imsg.early_reloc_fail 561 000003E7 E9C501 <1> jmp init_booterror.soft 562 <1> 563 <1> @@: 563 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.238 563 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.239 563 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.240 563 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.241 563 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.242 563 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.243 563 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.244 563 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.245 563 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.238 563 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.239 563 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.240 563 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.241 563 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.242 563 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.243 563 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.244 563 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.245 563 ****************** <1> expansion: __@@_num = 246 564 000003EA E8BA02 <1> d4 call init_d4message 565 000003ED 4C61796F757420666F- <1> d4 asciz "Layout found" 565 000003F6 756E6400 <1> 566 000003FA E80C02 <1> d4 call init_d4dumpregs 567 000003FD E8A702 <1> d4 call init_d4message 568 00000400 0D0A00 <1> d4 asciz 13,10 569 <1> 570 00000403 894EFC <1> mov word [bp + ?target], cx 571 00000406 52 <1> push dx 572 00000407 2E803E[5C08]00 <1> cmp byte [cs:init_boot_ebdaflag], 0 573 0000040D 7444 <1> jz .reloc_memtop_no_ebda 574 0000040F 50 <1> push ax 575 00000410 49 <1> dec cx 576 00000411 2E2B0E[5608] <1> sub cx, word [cs:init_boot_ebdasize] 577 00000416 2EA1[5808] <1> mov ax, word [cs:init_boot_ebdasource] 578 0000041A 89CA <1> mov dx, cx 579 0000041C 2E890E[5A08] <1> mov word [cs:init_boot_ebdadest], cx 580 00000421 2E8B0E[5608] <1> mov cx, word [cs:init_boot_ebdasize] 581 00000426 E8B307 <1> call init_movp 582 00000429 014EF8 <1> add word [bp + ?memtop], cx 583 0000042C 2E800E[5C08]02 <1> or byte [cs:init_boot_ebdaflag], 2 584 00000432 B84000 <1> mov ax, 40h 585 00000435 8EC0 <1> mov es, ax 586 00000437 2689160E00 <1> mov word [es:0Eh], dx ; relocate EBDA 587 0000043C 58 <1> pop ax 588 <1> 589 0000043D E86702 <1> d4 call init_d4message 590 00000440 454244412072656C6F- <1> d4 asciz "EBDA relocated",13,10 590 00000449 63617465640D0A00 <1> 591 <1> 592 00000451 EB02 <1> jmp @F 593 <1> 594 <1> .reloc_memtop_no_ebda: 595 00000453 89CA <1> mov dx, cx 596 <1> @@: 596 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.239 596 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.240 596 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.241 596 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.242 596 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.243 596 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.244 596 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.245 596 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.246 596 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.239 596 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.240 596 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.241 596 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.242 596 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.243 596 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.244 596 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.245 596 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.246 596 ****************** <1> expansion: __@@_num = 247 597 00000455 B106 <1> mov cl, 6 598 00000457 D3EA <1> shr dx, cl 599 00000459 B84000 <1> mov ax, 40h 600 0000045C 8EC0 <1> mov es, ax 601 0000045E 2E8916[5208] <1> mov word [ cs:init_boot_new_memsizekib ], dx 602 00000463 2687161300 <1> xchg word [es:13h], dx 603 00000468 2E8916[5408] <1> mov word [ cs:init_boot_old_memsizekib ], dx 604 0000046D 5A <1> pop dx 605 0000046E E83602 <1> d4 call init_d4message 606 00000471 4D656D6F727920746F- <1> d4 asciz "Memory top relocated",13,10 606 0000047A 702072656C6F636174- <1> 606 00000483 65640D0A00 <1> 607 <1> 608 00000488 8B4EFC <1> mov cx, word [bp + ?target] 609 0000048B 8ED9 <1> mov ds, cx 610 0000048D 8B7EF8 <1> mov di, word [bp + ?memtop] ; => memory top 611 00000490 81EF4002 <1> sub di, paras(1024+8192) 612 00000494 8EC7 <1> mov es, di 613 00000496 39CF <1> cmp di, cx ; max padding starts below target PSP ? 614 00000498 7209 <1> jb @F ; yes, do not initialise padding 615 0000049A 31FF <1> xor di, di ; -> padding 616 0000049C B90012 <1> mov cx, words(1024+8192) 617 0000049F 31C0 <1> xor ax, ax 618 000004A1 F3AB <1> rep stosw ; initialise padding 619 <1> @@: 619 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.240 619 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.241 619 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.242 619 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.243 619 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.244 619 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.245 619 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.246 619 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.247 619 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.240 619 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.241 619 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.242 619 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.243 619 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.244 619 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.245 619 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.246 619 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.247 619 ****************** <1> expansion: __@@_num = 248 620 <1> 621 000004A3 8B46F4 <1> mov ax, word [bp + ?code] ; => code source 622 <1> ; dx => code target 623 000004A6 B9EA07 <1> mov cx, ldebug_code_size_p ; = size 624 000004A9 E83007 <1> call init_movp ; relocate code to target 625 000004AC E8F801 <1> d4 call init_d4message 626 000004AF 436F6465207365676D- <1> d4 asciz "Code segment relocated",13,10 626 000004B8 656E742072656C6F63- <1> 626 000004C1 617465640D0A00 <1> 627 <1> 628 000004C8 52 <1> push dx ; (code segment) 629 000004C9 8B46F6 <1> mov ax, word [bp + ?data] ; => data_entry source 630 000004CC 8CDA <1> mov dx, ds 631 000004CE 83C210 <1> add dx, paras(100h) ; => data_entry target 632 000004D1 B90E07 <1> mov cx, paras(ldebug_data_entry_size + asmtable1_size + asmtable2_size) 633 000004D4 E80507 <1> call init_movp ; relocate data_entry to target 634 000004D7 8F06[2A02] <1> pop word [code_seg] ; initialise code reference 635 000004DB E8C901 <1> d4 call init_d4message 636 000004DE 44617461207365676D- <1> d4 asciz "Data segment relocated",13,10 636 000004E7 656E742072656C6F63- <1> 636 000004F0 617465640D0A00 <1> 637 <1> 638 000004F7 89D8 <1> mov ax, bx 639 000004F9 A3[2C02] <1> mov word [auxbuff_segorsel], ax 640 <1> %if _PM 641 <1> mov word [auxbuff_segment], ax ; initialise auxbuff references 642 <1> %endif 643 000004FC 8EC0 <1> mov es, ax 644 000004FE 31FF <1> xor di, di 645 00000500 B90810 <1> mov cx, _AUXBUFFSIZE >> 1 646 00000503 31C0 <1> xor ax, ax 647 00000505 F3AB <1> rep stosw ; initialise auxbuff 648 00000507 E89D01 <1> d4 call init_d4message 649 0000050A 617578627566662069- <1> d4 asciz "auxbuff initialised",13,10 649 00000513 6E697469616C697365- <1> 649 0000051C 640D0A00 <1> 650 <1> 651 00000520 1E <1> push ds 652 00000521 07 <1> pop es 653 00000522 31FF <1> xor di, di 654 00000524 B98000 <1> mov cx, words(100h) 655 00000527 F3AB <1> rep stosw ; initialise pseudo-PSP 656 <1> 657 <1> init_boot_imageident: 658 00000529 8CD8 <1> mov ax, ds 659 0000052B 48 <1> dec ax 660 0000052C 8EC0 <1> mov es, ax ; => paragraph for imageident 661 0000052E 31FF <1> xor di, di ; -> imageident target 662 00000530 8B5EF8 <1> mov bx, word [bp + ?memtop] 663 00000533 29C3 <1> sub bx, ax ; = how many paragraphs do we use ? 664 <1> 665 00000535 0E <1> push cs 666 00000536 1F <1> pop ds 667 00000537 891E[4808] <1> mov word [imageident.size], bx ; set image ident size 668 <1> 669 0000053B BE[4008] <1> mov si, imageident 670 0000053E 56 <1> push si 671 0000053F B90800 <1> mov cx, 8 672 00000542 31D2 <1> xor dx, dx 673 <1> .loop: 674 00000544 AD <1> lodsw 675 00000545 01C2 <1> add dx, ax 676 00000547 E2FB <1> loop .loop 677 00000549 5E <1> pop si 678 <1> 679 0000054A F7DA <1> neg dx 680 0000054C 8916[4608] <1> mov word [imageident.check], dx ; set image ident checksum 681 <1> 682 00000550 B108 <1> mov cl, 8 683 00000552 F3A5 <1> rep movsw ; write image ident paragraph 684 <1> 685 00000554 8B46FC <1> mov ax, word [bp + ?target] 686 <1> 687 <1> lleave ctx ; dropping this frame for stack switch 687 ****************** <1> expansion: lsizeparameters = 0 687 ****************** <1> expansion: __lframe__autoret = near 688 <1> 689 00000557 FA <1> cli 690 00000558 8ED8 <1> mov ds, ax 691 0000055A 8ED0 <1> mov ss, ax 692 0000055C BC[C005] <1> mov sp, stack_end ; switch stacks 693 0000055F FB <1> sti 694 <1> 695 00000560 2EFF36[5408] <1> push word [cs:init_boot_old_memsizekib] 696 00000565 8F06[1651] <1> pop word [boot_old_memsizekib] 697 00000569 2EFF36[5208] <1> push word [cs:init_boot_new_memsizekib] 698 0000056E 8F06[1451] <1> pop word [boot_new_memsizekib] 699 00000572 2EA0[5C08] <1> mov al, byte [cs:init_boot_ebdaflag] 700 00000576 2401 <1> and al, 1 701 00000578 A2[1851] <1> mov byte [boot_ebdaflag], al 702 <1> 703 0000057B 800E[8500]40 <1> setopt [internalflags], nodosloaded 703 ****************** <1> expansion: adr = '[internalflags]' 703 ****************** <1> expansion: len = 15 703 ****************** <1> expansion: tf = '[' 703 ****************** <1> expansion: tb = ']' 703 ****************** <1> expansion: adr = 'internalflags' 703 ****************** <1> expansion: adr = internalflags 704 00000580 8026[8400]0F <1> clropt [internalflags], notstdinput|inputfile|notstdoutput|outputfile 704 ****************** <1> expansion: adr = '[internalflags]' 704 ****************** <1> expansion: len = 15 704 ****************** <1> expansion: tf = '[' 704 ****************** <1> expansion: tb = ']' 704 ****************** <1> expansion: adr = 'internalflags' 704 ****************** <1> expansion: adr = internalflags 705 00000585 C606[9502]00 <1> mov byte [notatty], 0 ; it _is_ a tty 706 <1> 707 0000058A BA[8808] <1> mov dx, imsg.crlf 708 0000058D E8CB06 <1> call init_putsz_cs 709 <1> 710 00000590 E81401 <1> d4 call init_d4message 711 00000593 4E657720626F6F745F- <1> d4 asciz "New boot_initcode done",13,10 711 0000059C 696E6974636F646520- <1> 711 000005A5 646F6E650D0A00 <1> 712 <1> 713 000005AC E91507 <1> jmp boot_old_initcode 714 <1> 715 <1> 716 <1> init_booterror: 717 <1> .soft: 718 000005AF 31C0 <1> xor ax, ax 719 000005B1 A9 <1> db __TEST_IMM16 ; (skip mov) 720 <1> .hard: 721 000005B2 B001 <1> mov al, 1 722 <1> 723 <1> ;d4 call init_d4pocketdosmemdump 724 000005B4 E85200 <1> d4 call init_d4dumpregs 725 <1> 726 <1> .patch_switch_stack: 727 000005B7 EB09 <1> jmp .no_switch_stack 728 <1> 729 000005B9 8CCB <1> mov bx, cs 730 000005BB FA <1> cli 731 000005BC 8ED3 <1> mov ss, bx 732 000005BE BC4014 <1> mov sp, init_size + BOOTINITSTACK_SIZE 733 000005C1 FB <1> sti 734 <1> 735 <1> .no_switch_stack: 736 000005C2 50 <1> push ax 737 <1> 738 000005C3 B84000 <1> mov ax, 40h 739 000005C6 8EC0 <1> mov es, ax 740 <1> 741 000005C8 2EF606[5C08]02 <1> test byte [cs:init_boot_ebdaflag], 2 742 000005CE 7416 <1> jz @F 743 <1> 744 000005D0 2E8B16[5808] <1> mov dx, [cs:init_boot_ebdasource] 745 000005D5 2EA1[5A08] <1> mov ax, [cs:init_boot_ebdadest] 746 000005D9 2E8B0E[5608] <1> mov cx, [cs:init_boot_ebdasize] 747 000005DE E8FB05 <1> call init_movp 748 <1> 749 000005E1 2689160E00 <1> mov word [es:0Eh], dx 750 <1> @@: 750 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.241 750 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.242 750 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.243 750 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.244 750 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.245 750 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.246 750 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.247 750 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.248 750 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.241 750 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.242 750 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.243 750 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.244 750 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.245 750 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.246 750 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.247 750 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.248 750 ****************** <1> expansion: __@@_num = 249 751 <1> 752 000005E6 2E8B16[5408] <1> mov dx, [cs:init_boot_old_memsizekib] 753 000005EB 85D2 <1> test dx, dx 754 000005ED 7405 <1> jz @F 755 000005EF 2689161300 <1> mov word [es:13h], dx 756 <1> @@: 756 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.242 756 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.243 756 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.244 756 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.245 756 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.246 756 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.247 756 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.248 756 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.249 756 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.242 756 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.243 756 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.244 756 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.245 756 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.246 756 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.247 756 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.248 756 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.249 756 ****************** <1> expansion: __@@_num = 250 757 <1> 758 000005F4 BA[7B0A] <1> mov dx, imsg.booterror 759 000005F7 E88406 <1> call init_putsz_cs_bootldr 760 000005FA E85906 <1> call init_getc_bootldr 761 000005FD 58 <1> pop ax 762 000005FE 85C0 <1> test ax, ax 763 00000600 7502 <1> jnz @F 764 00000602 CD19 <1> int 19h 765 <1> @@: 765 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.243 765 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.244 765 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.245 765 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.246 765 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.247 765 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.248 765 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.249 765 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.250 765 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.243 765 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.244 765 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.245 765 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.246 765 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.247 765 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.248 765 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.249 765 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.250 765 ****************** <1> expansion: __@@_num = 251 766 00000604 EA0000FFFF <1> jmp 0FFFFh:0 767 <1> %endif ; _BOOTLDR 768 <1> 769 <1> 770 <1> %if _DEBUG4 || _DEBUG5 771 <1> %define _DEB_ASM_PREFIX init_ 771 ****************** <1> expansion: _DEB_ASM_PREFIX = init_ 772 <1> %include "deb.asm" 1 <2> 2 <2> %if 0 3 <2> 4 <2> Debugging output functions independent of DOS 5 <2> Public Domain, 2008-2012 by C. Masloch 6 <2> 7 <2> Usage of the works is permitted provided that this 8 <2> instrument is retained with the works, so that any entity 9 <2> that uses the works is notified of this instrument. 10 <2> 11 <2> DISCLAIMER: THE WORKS ARE WITHOUT WARRANTY. 12 <2> 13 <2> %endif 14 <2> 15 <2> %if 0 16 <2> 17 <2> Only the registers noted here are changed or returned, including flags. 18 <2> 19 <2> d4dumpregs displays numeric value of all 16-bit registers. 20 <2> d4message displays ASCIZ message behind the call. (Returns behind message.) 21 <2> d5dumpregs displays numeric value of all 16-bit registers. 22 <2> d5message displays ASCIZ message behind the call. (Returns behind message.) 23 <2> disp_al displays character in al. 24 <2> disp_al_dec displays al as decimal number, without leading zeros. 25 <2> disp_al_hex displays al as hexadecimal number, with two digits. 26 <2> disp_ax_hex displays ax as hexadecimal number, with four digits. 27 <2> d4uppercase uppercases character in al. 28 <2> disp_stack_hex displays the word on the stack as hexadecimal number (and pops it). 29 <2> disp_msg displays ASCIZ string pointed to by ds:si. 30 <2> d4getc returns ASCII character in al, scancode in ah. (al might be zero.) 31 <2> d4pauseforkey waits until a key is pressed. (The key-press is discarded.) 32 <2> 33 <2> This was all thrown together really quick without more thought to it. 34 <2> 35 <2> %endif 36 <2> 37 <2> numdef DEBUG_TO_SERIAL, 1 38 <2> %ifidni _DEB_ASM_PREFIX, init_ 39 <2> overridedef DEBUG_TO_SERIAL, 0 39 ****************** <2> expansion: defined = 1 39 ****************** <2> expansion: prior = 1 39 ****************** <2> expansion: defaulted = __DEFAULTED_DEBUG_TO_SERIAL 39 ****************** <2> expansion: name = DEBUG_TO_SERIAL 39 ****************** <2> expansion: _DEBUG_TO_SERIAL = 0 39 ****************** <2> expansion: __DEFAULTED_DEBUG_TO_SERIAL = 0 40 <2> %endif 41 <2> 42 <2> 43 <2> %[_DEB_ASM_PREFIX]d5dumpregs: 44 <2> %[_DEB_ASM_PREFIX]d4dumpregs: 45 00000609 9C <2> pushf 46 0000060A 50 <2> push ax 47 0000060B 53 <2> push bx 48 0000060C 51 <2> push cx 49 0000060D 52 <2> push dx 50 0000060E 56 <2> push si 51 0000060F 57 <2> push di 52 00000610 55 <2> push bp 53 00000611 89E0 <2> mov ax, sp 54 00000613 83C012 <2> add ax, byte 18 55 00000616 50 <2> push ax 56 00000617 0E <2> push cs 57 00000618 16 <2> push ss 58 00000619 1E <2> push ds 59 0000061A 06 <2> push es 60 <2> 61 0000061B 89E3 <2> mov bx, sp 62 0000061D B80701 <2> mov ax, 1<<8|7 63 00000620 50 <2> push ax 64 00000621 B80E00 <2> mov ax, 14 65 00000624 0E <2> push cs 66 00000625 1F <2> pop ds 67 00000626 BA[5B06] <2> mov dx, .regnames 68 <2> 69 00000629 89E5 <2> mov bp, sp 70 <2> %assign _columns 0 70 ****************** <2> expansion: _columns = 0 71 <2> %assign _blanks 1 71 ****************** <2> expansion: _blanks = 1 72 <2> 73 0000062B 31C9 <2> xor cx, cx 74 <2> 75 <2> .looprows: 76 0000062D 50 <2> push ax 77 0000062E B00D <2> mov al, 13 78 00000630 E8D800 <2> call %[_DEB_ASM_PREFIX]disp_al 79 00000633 B00A <2> mov al, 10 80 00000635 E8D300 <2> call %[_DEB_ASM_PREFIX]disp_al 81 <2> %if 0 82 <2> push cx 83 <2> push dx 84 <2> xor cx, cx 85 <2> mov cl, byte [ _blanks + bp ] 86 <2> jcxz .doneblanks 87 <2> mov al, 32 88 <2> .loopblanks: 89 <2> call %[_DEB_ASM_PREFIX]disp_al 90 <2> loop .loopblanks 91 <2> .doneblanks: 92 <2> pop dx 93 <2> pop cx 94 <2> %endif 95 00000638 58 <2> pop ax 96 <2> 97 00000639 8A4E00 <2> mov cl, byte [ _columns + bp ] 98 <2> .loopcolumns: 99 0000063C E83800 <2> call %[_DEB_ASM_PREFIX]disp_reg 100 0000063F 83C202 <2> add dx, byte 2 101 00000642 83C302 <2> add bx, byte 2 102 00000645 48 <2> dec ax 103 00000646 7404 <2> jz .done 104 00000648 E2F2 <2> loop .loopcolumns 105 0000064A EBE1 <2> jmp short .looprows 106 <2> 107 <2> .done: 108 0000064C 58 <2> pop ax 109 <2> 110 0000064D 07 <2> pop es 111 0000064E 1F <2> pop ds 112 0000064F 58 <2> pop ax 113 00000650 58 <2> pop ax 114 00000651 58 <2> pop ax 115 00000652 5D <2> pop bp 116 00000653 5F <2> pop di 117 00000654 5E <2> pop si 118 00000655 5A <2> pop dx 119 00000656 59 <2> pop cx 120 00000657 5B <2> pop bx 121 00000658 58 <2> pop ax 122 00000659 9D <2> popf 123 0000065A C3 <2> retn 124 <2> 125 <2> .regnames: 126 0000065B 657364737373637373- <2> db "esdssscsspbpdisidxcxbxaxflip" 126 00000664 706270646973696478- <2> 126 0000066D 637862786178666C69- <2> 126 00000676 70 <2> 127 <2> 128 <2> 129 <2> ; ss:bx-> word value 130 <2> ; ds:dx-> 2-byte message 131 <2> %[_DEB_ASM_PREFIX]disp_reg: 132 00000677 50 <2> push ax 133 00000678 87DA <2> xchg bx, dx 134 0000067A 8B07 <2> mov ax, [ bx ] ; get 2 bytes at [ ds:dx ] 135 0000067C 87DA <2> xchg bx, dx 136 0000067E E88A00 <2> call %[_DEB_ASM_PREFIX]disp_al 137 00000681 86C4 <2> xchg al, ah 138 00000683 E88500 <2> call %[_DEB_ASM_PREFIX]disp_al 139 <2> 140 00000686 B03D <2> mov al, '=' 141 00000688 E88000 <2> call %[_DEB_ASM_PREFIX]disp_al 142 <2> 143 0000068B 368B07 <2> mov ax, [ ss:bx ] 144 0000068E E8B800 <2> call %[_DEB_ASM_PREFIX]disp_ax_hex 145 <2> 146 00000691 B020 <2> mov al, 32 147 00000693 E87500 <2> call %[_DEB_ASM_PREFIX]disp_al 148 00000696 58 <2> pop ax 149 00000697 C3 <2> retn 150 <2> 151 <2> 152 <2> %if 0 153 <2> %[_DEB_ASM_PREFIX]d4pocketdosmemdump: 154 <2> pushf 155 <2> push es 156 <2> push ds 157 <2> push si 158 <2> push di 159 <2> push bx 160 <2> push ax 161 <2> push cx 162 <2> 163 <2> cld 164 <2> push cs 165 <2> pop es 166 <2> mov di, .pocketdosmemfnfull 167 <2> mov cx, -1 168 <2> mov al, ':' 169 <2> .colonloop: 170 <2> repne scasb 171 <2> cmp di, .dummycolon+1 172 <2> je .colondone 173 <2> cmp byte [es:di], '\' 174 <2> je .colonloop 175 <2> mov byte [es:di-1], '.' 176 <2> jmp short .colonloop 177 <2> .colondone: 178 <2> 179 <2> ; A simple check whether we're running in PocketDOS. 180 <2> xor ax, ax 181 <2> mov ds, ax 182 <2> mov ax, word [ 0F8h*4 ] 183 <2> inc ax ; 0FFFFh ? 184 <2> jz .notfound ; not PocketDOS --> 185 <2> dec ax ; 0 ? 186 <2> jz .notfound ; not PocketDOS --> 187 <2> 188 <2> push cs 189 <2> pop es 190 <2> mov bx, .pocketdosmemdll ; es:bx-> ASCIZ DLL file name 191 <2> xor ax, ax 192 <2> int 0F8h ; IntF8.00 initialize 193 <2> 194 <2> test al, al 195 <2> jz .notfound ; --> 00h, not found 196 <2> cmp al, -1 197 <2> je .notfound ; --> FFh, too many DLLs loaded 198 <2> 199 <2> push cs 200 <2> pop ds 201 <2> mov si, .pocketdosmemfnfull ; ds:si-> FN 202 <2> xor bx, bx ; bx = number of paragraphs, 0 = 10000h 203 <2> mov es, bx ; es:0-> start of dump 204 <2> mov ah, 02h 205 <2> push ax 206 <2> int 0F8h ; IntF8.02 call DLL 207 <2> pop ax ; preserve handle in al 208 <2> 209 <2> mov si, .pocketdosmemfninit0 ; ds:si-> FN 210 <2> mov bx, resimagepsp_size_p 211 <2> push cs 212 <2> pop es ; es:0-> start of dump 213 <2> mov ah, 02h 214 <2> push ax 215 <2> int 0F8h ; IntF8.02 call DLL 216 <2> pop ax ; preserve handle in al 217 <2> 218 <2> mov ah, 01h 219 <2> int 0F8h ; IntF8.01 close 220 <2> 221 <2> call %[_DEB_ASM_PREFIX]d4message 222 <2> asciz 13,10,"Memory dumps created." 223 <2> 224 <2> .notfound: 225 <2> pop cx 226 <2> pop ax 227 <2> pop bx 228 <2> pop di 229 <2> pop si 230 <2> pop ds 231 <2> pop es 232 <2> popf 233 <2> retn 234 <2> 235 <2> .pocketdosmemdll: asciz "PDOSMEM.DLL" 236 <2> .pocketdosmemfnfull: asciz "D:\LITEST\init-",__DATE__,"T",__TIME__,"-full.bin" 237 <2> .pocketdosmemfninit0: asciz "D:\LITEST\init-",__DATE__,"T",__TIME__,"-ldebug.bin" 238 <2> .dummycolon: db ":" 239 <2> %endif 240 <2> 241 <2> 242 <2> %[_DEB_ASM_PREFIX]disp_stack_hex: 243 00000698 50 <2> push ax 244 00000699 55 <2> push bp 245 0000069A 89E5 <2> mov bp, sp 246 0000069C 8B4606 <2> mov ax, [bp+6] 247 0000069F 5D <2> pop bp 248 000006A0 E8A600 <2> call %[_DEB_ASM_PREFIX]disp_ax_hex 249 000006A3 58 <2> pop ax 250 000006A4 C20200 <2> retn 2 251 <2> 252 <2> %[_DEB_ASM_PREFIX]d5message: 253 <2> %[_DEB_ASM_PREFIX]d4message: 254 000006A7 50 <2> push ax 255 000006A8 53 <2> push bx 256 000006A9 56 <2> push si 257 000006AA 55 <2> push bp 258 000006AB 89E5 <2> mov bp, sp 259 000006AD 8B7608 <2> mov si, [bp+8] 260 000006B0 9C <2> pushf 261 000006B1 2E803CCC <2> cmp byte [cs:si], 0CCh 262 000006B5 7512 <2> jne @FF 263 000006B7 CC <2> int3 264 000006B8 2E803CCC <2> cmp byte [cs:si], 0CCh 265 000006BC 750B <2> jne @FF 266 000006BE BE[D506] <2> mov si, .msg_error 267 000006C1 E8D100 <2> call %[_DEB_ASM_PREFIX]init0display 268 <2> @@: 268 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.244 268 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.245 268 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.246 268 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.247 268 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.248 268 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.249 268 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.250 268 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.251 268 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.244 268 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.245 268 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.246 268 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.247 268 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.248 268 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.249 268 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.250 268 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.251 268 ****************** <2> expansion: __@@_num = 252 269 000006C4 FB <2> sti 270 000006C5 F4 <2> hlt 271 000006C6 CC <2> int3 272 000006C7 EBFB <2> jmp @B 273 <2> 274 <2> @@: 274 ****************** <2> expansion: @BBBB (case-insensitive) = ..@.@@.1.245 274 ****************** <2> expansion: @BBB (case-insensitive) = ..@.@@.1.246 274 ****************** <2> expansion: @BB (case-insensitive) = ..@.@@.1.247 274 ****************** <2> expansion: @B (case-insensitive) = ..@.@@.1.248 274 ****************** <2> expansion: @F (case-insensitive) = ..@.@@.1.249 274 ****************** <2> expansion: @FF (case-insensitive) = ..@.@@.1.250 274 ****************** <2> expansion: @FFF (case-insensitive) = ..@.@@.1.251 274 ****************** <2> expansion: @FFFF (case-insensitive) = ..@.@@.1.252 274 ****************** <2> expansion: @B4 (case-insensitive) = ..@.@@.1.245 274 ****************** <2> expansion: @B3 (case-insensitive) = ..@.@@.1.246 274 ****************** <2> expansion: @B2 (case-insensitive) = ..@.@@.1.247 274 ****************** <2> expansion: @B1 (case-insensitive) = ..@.@@.1.248 274 ****************** <2> expansion: @F1 (case-insensitive) = ..@.@@.1.249 274 ****************** <2> expansion: @F2 (case-insensitive) = ..@.@@.1.250 274 ****************** <2> expansion: @F3 (case-insensitive) = ..@.@@.1.251 274 ****************** <2> expansion: @F4 (case-insensitive) = ..@.@@.1.252 274 ****************** <2> expansion: __@@_num = 253 275 000006C9 E8C900 <2> call %[_DEB_ASM_PREFIX]init0display 276 000006CC 9D <2> popf 277 000006CD 897608 <2> mov word [bp+8], si 278 000006D0 5D <2> pop bp 279 000006D1 5E <2> pop si 280 000006D2 5B <2> pop bx 281 000006D3 58 <2> pop ax 282 000006D4 C3 <2> retn 283 <2> 284 <2> .msg_error: 285 000006D5 4572726F7220696E20- <2> asciz "Error in d4message, detected breakpoint in message.",13,10 285 000006DE 64346D657373616765- <2> 285 000006E7 2C2064657465637465- <2> 285 000006F0 6420627265616B706F- <2> 285 000006F9 696E7420696E206D65- <2> 285 00000702 73736167652E0D0A00 <2> 286 <2> 287 <2> 288 <2> %[_DEB_ASM_PREFIX]disp_al: 289 0000070B 50 <2> push ax 290 0000070C 53 <2> push bx 291 0000070D 9C <2> pushf 292 0000070E E87200 <2> call %[_DEB_ASM_PREFIX]init0int10tty 293 00000711 9D <2> popf 294 00000712 5B <2> pop bx 295 00000713 58 <2> pop ax 296 00000714 C3 <2> retn 297 <2> 298 <2> 299 <2> %[_DEB_ASM_PREFIX]disp_al_dec: 300 00000715 9C <2> pushf 301 00000716 50 <2> push ax 302 00000717 51 <2> push cx 303 00000718 B96400 <2> mov cx, 100 304 0000071B E80E00 <2> call .div 305 0000071E B10A <2> mov cl, 10 306 00000720 E80900 <2> call .div 307 00000723 0430 <2> add al, '0' 308 00000725 E8E3FF <2> call %[_DEB_ASM_PREFIX]disp_al 309 00000728 59 <2> pop cx 310 00000729 58 <2> pop ax 311 0000072A 9D <2> popf 312 0000072B C3 <2> retn 313 <2> 314 <2> .div: 315 0000072C 30E4 <2> xor ah, ah 316 0000072E F6F1 <2> div cl 317 00000730 08C5 <2> or ch, al 318 00000732 7405 <2> jz .leadingzero 319 00000734 0430 <2> add al, '0' 320 00000736 E8D2FF <2> call %[_DEB_ASM_PREFIX]disp_al 321 <2> .leadingzero: 322 00000739 86C4 <2> xchg al, ah 323 0000073B C3 <2> retn 324 <2> 325 <2> 326 <2> %[_DEB_ASM_PREFIX]d4uppercase: 327 0000073C 9C <2> pushf 328 0000073D 3C61 <2> cmp al, 'a' 329 0000073F 7206 <2> jb .return 330 00000741 3C7A <2> cmp al, 'z' 331 00000743 7702 <2> ja .return 332 00000745 24DF <2> and al, ~ 20h 333 <2> .return: 334 00000747 9D <2> popf 335 00000748 C3 <2> retn 336 <2> 337 <2> 338 <2> %[_DEB_ASM_PREFIX]disp_ax_hex: ; ax 339 00000749 86C4 <2> xchg al,ah 340 0000074B E80200 <2> call %[_DEB_ASM_PREFIX]disp_al_hex ; display former ah 341 0000074E 86C4 <2> xchg al,ah ; and fall trough for al 342 <2> %[_DEB_ASM_PREFIX]disp_al_hex: ; al 343 00000750 51 <2> push cx 344 00000751 9C <2> pushf 345 00000752 B104 <2> mov cl,4 346 00000754 D2C8 <2> ror al,cl 347 00000756 E80400 <2> call %[_DEB_ASM_PREFIX]disp_al_lownibble_hex ; display former high-nibble 348 00000759 D2C0 <2> rol al,cl 349 0000075B 9D <2> popf 350 0000075C 59 <2> pop cx 351 <2> ; and fall trough for low-nibble 352 <2> %[_DEB_ASM_PREFIX]disp_al_lownibble_hex: 353 0000075D 9C <2> pushf 354 0000075E 50 <2> push ax ; save ax for call return 355 0000075F 240F <2> and al, 00001111b ; high nibble must be zero 356 00000761 0430 <2> add al, '0' ; if number is 0-9, now it's the correct character 357 00000763 3C39 <2> cmp al, '9' 358 00000765 7602 <2> jna .decimalnum ; if we get decimal number with this, ok --> 359 00000767 0407 <2> add al, 7 ; otherwise, add 7 and we are inside our alphabet 360 <2> .decimalnum: 361 00000769 E89FFF <2> call %[_DEB_ASM_PREFIX]disp_al 362 0000076C 58 <2> pop ax 363 0000076D 9D <2> popf 364 0000076E C3 <2> retn 365 <2> 366 <2> 367 <2> %[_DEB_ASM_PREFIX]disp_msg: 368 0000076F 9C <2> pushf 369 00000770 56 <2> push si 370 00000771 50 <2> push ax 371 00000772 89D6 <2> mov si, dx 372 00000774 FC <2> cld 373 <2> .loop: 374 00000775 AC <2> lodsb 375 00000776 08C0 <2> or al, al 376 00000778 7405 <2> jz .return 377 0000077A E88EFF <2> call %[_DEB_ASM_PREFIX]disp_al 378 0000077D EBF6 <2> jmp short .loop 379 <2> 380 <2> .return: 381 0000077F 58 <2> pop ax 382 00000780 5E <2> pop si 383 00000781 9D <2> popf 384 00000782 C3 <2> retn 385 <2> 386 <2> 387 <2> ; Display character with Int10 388 <2> ; 389 <2> ; INP: al = character 390 <2> ; OUT: - 391 <2> ; CHG: ax, bx 392 <2> ; STT: - 393 <2> %[_DEB_ASM_PREFIX]init0int10tty: 394 <2> %if _DEBUG_TO_SERIAL 395 <2> testopt [ss:options], enable_serial 396 <2> jz @F 397 <2> push ds 398 <2> push es 399 <2> push ss 400 <2> pop ds 401 <2> push ss 402 <2> pop es 403 <2> call serial_send_char 404 <2> pop es 405 <2> pop ds 406 <2> retn 407 <2> 408 <2> @@: 409 <2> %endif 410 00000783 50 <2> push ax 411 00000784 B40F <2> mov ah, 0Fh 412 00000786 CD10 <2> int 10h ; get video mode and active page 413 00000788 58 <2> pop ax 414 00000789 B40E <2> mov ah, 0Eh 415 0000078B B307 <2> mov bl, 07h 416 0000078D 55 <2> push bp 417 0000078E CD10 <2> int 10h ; write character 418 00000790 5D <2> pop bp 419 00000791 C3 <2> retn 420 <2> 421 <2> ; Display message with Int10 422 <2> ; 423 <2> ; INP: cs:si-> ASCIZ message 424 <2> ; OUT: - 425 <2> ; CHG: ax, si, bx 426 <2> ; STT: UP 427 <2> %[_DEB_ASM_PREFIX]init0display.display: 428 00000792 E8EEFF <2> call %[_DEB_ASM_PREFIX]init0int10tty 429 <2> %[_DEB_ASM_PREFIX]init0display: 430 00000795 FC <2> cld 431 00000796 2EAC <2> cs lodsb ; get character 432 00000798 84C0 <2> test al, al ; zero ? 433 0000079A 75F6 <2> jnz .display ; no, display and get next character --> 434 <2> %[_DEB_ASM_PREFIX]init0flush.retn: 435 0000079C C3 <2> retn 436 <2> 437 <2> 438 <2> %[_DEB_ASM_PREFIX]d4getc: 439 0000079D 9C <2> pushf 440 <2> %if _DEBUG_TO_SERIAL 441 <2> push ds 442 <2> push es 443 <2> push ss 444 <2> pop ds 445 <2> push ss 446 <2> pop es 447 <2> call getc.rawnext 448 <2> pop es 449 <2> pop ds 450 <2> %else 451 0000079E 31C0 <2> xor ax, ax 452 000007A0 CD16 <2> int 16h 453 <2> %endif 454 000007A2 9D <2> popf 455 000007A3 C3 <2> retn 456 <2> 457 <2> %[_DEB_ASM_PREFIX]d4pauseforkey: 458 000007A4 50 <2> push ax 459 000007A5 E8F5FF <2> call %[_DEB_ASM_PREFIX]d4getc 460 000007A8 E8FCFE <2> d4 call %[_DEB_ASM_PREFIX]d4message 461 000007AB 64347061757365666F- <2> d4 asciz "d4pauseforkey received ax=" 461 000007B4 726B65792072656365- <2> 461 000007BD 697665642061783D00 <2> 462 000007C6 E880FF <2> d4 call %[_DEB_ASM_PREFIX]disp_ax_hex 463 000007C9 E8DBFE <2> d4 call %[_DEB_ASM_PREFIX]d4message 464 000007CC 0D0A00 <2> d4 asciz 13,10 465 000007CF 58 <2> pop ax 466 000007D0 C3 <2> retn 467 <2> 468 <2> 469 <2> %ifidni _DEB_ASM_PREFIX, init_ 470 <2> resetdef DEBUG_TO_SERIAL 470 ****************** <2> expansion: _DEBUG_TO_SERIAL = 1 470 ****************** <2> expansion: __DEFAULTED_DEBUG_TO_SERIAL = 0 471 <2> %endif 773 <1> %endif 774 <1> 775 <1> 776 <1> %macro __writepatchtable2 0-*.nolist 777 <1> %if %0 & 1 778 <1> %fatal Expected even number of arguments 779 <1> %endif 780 <1> %rep %0 >> 1 781 <1> %1 %2 782 <1> %rotate 2 783 <1> %endrep 784 <1> %endmacro 785 <1> 786 <1> %macro __patchtable2_entry 0.nolist 787 <1> ; only if this isn't the first (pseudo-)entry 788 <1> %if %$lastcount != 0 789 <1> ; if the offset from %$previous is less than 255 790 <1> %if (%$last-%$previous) < 255 791 <1> %assign %$$method2tablesize %$$method2tablesize+1 792 <1> ; then write a single byte (number of bytes not to patch between) 793 <1> %xdefine %$$method2list %$$method2list,db,%$last-%$previous 794 <1> %else 795 <1> ; otherwise write a 255 ("reposition") and write the 16-bit address afterwards 796 <1> %assign %$$method2tablesize %$$method2tablesize+3 797 <1> %xdefine %$$method2list %$$method2list,db,255,dw,%$last 798 <1> %endif 799 <1> %if %$lastcount == 1 800 <1> %assign %$onecount %[%$onecount]+1 801 <1> %endif 802 <1> %assign %$$method2tablesize %$$method2tablesize+1 803 <1> ; and write the number of bytes to be patched 804 <1> %xdefine %$$method2list %$$method2list,db,%$lastcount 805 <1> ; define %$previous for the next entry: it points to the next non-patched byte 806 <1> %define %$previous (%[%$last]+%[%$lastcount]) 807 <1> %endif 808 <1> %endmacro 809 <1> 810 <1> %macro writepatchtable 2-*.nolist 811 <1> 812 <1> %push 813 <1> ; Determine length of simple table: 814 <1> %assign %$method1tablesize (%0 - 2)*2 815 <1> ; Determine length of complicated table: 816 <1> %assign %$method2tablesize 0 817 <1> %define %$method2list db,"" 818 <1> %push 819 <1> %if _WPT_LABELS 820 <1> %define %$previous code_start ; if list contains labels 821 <1> %else 822 <1> %define %$previous 0 823 <1> %endif 824 <1> %define %$last %[%$previous] 825 <1> %assign %$lastcount 0 826 <1> %assign %$onecount 0 827 <1> %rotate 1 828 <1> %rep %0 - 2 829 <1> %rotate 1 830 <1> ;if it continues the previous patch and not too long and this isn't the first 831 <1> %if ((%$last+%$lastcount) == %1) && (%$lastcount < 255) && (%$lastcount != 0) 832 <1> ; then do not write an entry, just increase the patch's size 833 <1> %assign %$lastcount %[%$lastcount]+1 834 <1> %else 835 <1> ; otherwise write the last entry 836 <1> __patchtable2_entry 837 <1> ; define new %$last to this parameter, %$lastcount to one 838 <1> %define %$last %1 839 <1> %assign %$lastcount 1 840 <1> %endif 841 <1> %endrep 842 <1> __patchtable2_entry 843 <1> 844 <1> ; at the end, there's a patch with offset 0, size 0 845 <1> %assign %$$method2tablesize %$$method2tablesize+2 846 <1> %xdefine %$$method2list %$$method2list,db,0,db,0 847 <1> 848 <1> %assign %$$onecount %$onecount 849 <1> %pop 850 <1> %rotate 1 851 <1> 852 <1> %if %$method1tablesize > (%$method2tablesize+20) 853 <1> %define __%{1}_method 2 854 <1> %else 855 <1> %define __%{1}_method 1 856 <1> %endif 857 <1> 858 <1> 859 <1> %1: 860 <1> %if __%{1}_method == 2 861 <1> __writepatchtable2 %$method2list 862 <1> endarea %1 863 <1> %assign %$size %1_size 864 <1> %warning %1: %$size bytes 865 <1> %warning (Method 2, %$onecount one-byte patches) 866 <1> %else 867 <1> %rotate 1 868 <1> %rep %0 - 2 869 <1> %rotate 1 870 <1> dw %1 871 <1> %endrep 872 <1> %rotate 1 873 <1> endarea %1 874 <1> %assign %$size %1_size 875 <1> %warning %1: %$size bytes 876 <1> %warning (Method 1) 877 <1> %endif 878 <1> %pop 879 <1> %endmacro 880 <1> 881 000007D1 90 <1> align 2 ; align on word boundary 882 <1> ; Table of patches that are to be set NOP if not running on a 386. 883 000007D2 FFEF1304FFDD1510FF- <1> writepatchtable patch_no386_table, PATCH_NO386_TABLE 883 ****************** <1> expansion: method1tablesize = 222 883 ****************** <1> expansion: method2tablesize = 0 883 ****************** <1> expansion: method2list = db,"" 883 ****************** <1> expansion: previous = 0 883 ****************** <1> expansion: last = 0 883 ****************** <1> expansion: lastcount = 0 883 ****************** <1> expansion: onecount = 0 883 ****************** <1> expansion: last = 5103 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: method2tablesize = 3 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103 883 ****************** <1> expansion: method2tablesize = 4 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4 883 ****************** <1> expansion: previous = (5103+4) 883 ****************** <1> expansion: last = 5597 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: lastcount = 6 883 ****************** <1> expansion: lastcount = 7 883 ****************** <1> expansion: lastcount = 8 883 ****************** <1> expansion: lastcount = 9 883 ****************** <1> expansion: lastcount = 10 883 ****************** <1> expansion: lastcount = 11 883 ****************** <1> expansion: lastcount = 12 883 ****************** <1> expansion: lastcount = 13 883 ****************** <1> expansion: lastcount = 14 883 ****************** <1> expansion: lastcount = 15 883 ****************** <1> expansion: lastcount = 16 883 ****************** <1> expansion: method2tablesize = 7 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597 883 ****************** <1> expansion: method2tablesize = 8 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16 883 ****************** <1> expansion: previous = (5597+16) 883 ****************** <1> expansion: last = 6026 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 11 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026 883 ****************** <1> expansion: onecount = 1 883 ****************** <1> expansion: method2tablesize = 12 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1 883 ****************** <1> expansion: previous = (6026+1) 883 ****************** <1> expansion: last = 6047 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 13 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1) 883 ****************** <1> expansion: onecount = 2 883 ****************** <1> expansion: method2tablesize = 14 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1 883 ****************** <1> expansion: previous = (6047+1) 883 ****************** <1> expansion: last = 6071 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 15 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1) 883 ****************** <1> expansion: onecount = 3 883 ****************** <1> expansion: method2tablesize = 16 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1 883 ****************** <1> expansion: previous = (6071+1) 883 ****************** <1> expansion: last = 6099 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 17 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1) 883 ****************** <1> expansion: onecount = 4 883 ****************** <1> expansion: method2tablesize = 18 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1 883 ****************** <1> expansion: previous = (6099+1) 883 ****************** <1> expansion: last = 6101 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 19 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1) 883 ****************** <1> expansion: onecount = 5 883 ****************** <1> expansion: method2tablesize = 20 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1 883 ****************** <1> expansion: previous = (6101+1) 883 ****************** <1> expansion: last = 6104 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 21 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1) 883 ****************** <1> expansion: onecount = 6 883 ****************** <1> expansion: method2tablesize = 22 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1 883 ****************** <1> expansion: previous = (6104+1) 883 ****************** <1> expansion: last = 6112 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 23 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1) 883 ****************** <1> expansion: onecount = 7 883 ****************** <1> expansion: method2tablesize = 24 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1 883 ****************** <1> expansion: previous = (6112+1) 883 ****************** <1> expansion: last = 6115 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: method2tablesize = 25 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1) 883 ****************** <1> expansion: method2tablesize = 26 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5 883 ****************** <1> expansion: previous = (6115+5) 883 ****************** <1> expansion: last = 6308 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 27 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5) 883 ****************** <1> expansion: onecount = 8 883 ****************** <1> expansion: method2tablesize = 28 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1 883 ****************** <1> expansion: previous = (6308+1) 883 ****************** <1> expansion: last = 11295 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: method2tablesize = 31 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295 883 ****************** <1> expansion: method2tablesize = 32 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2 883 ****************** <1> expansion: previous = (11295+2) 883 ****************** <1> expansion: last = 11362 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 33 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2) 883 ****************** <1> expansion: onecount = 9 883 ****************** <1> expansion: method2tablesize = 34 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1 883 ****************** <1> expansion: previous = (11362+1) 883 ****************** <1> expansion: last = 11367 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 35 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1) 883 ****************** <1> expansion: onecount = 10 883 ****************** <1> expansion: method2tablesize = 36 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1 883 ****************** <1> expansion: previous = (11367+1) 883 ****************** <1> expansion: last = 11372 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 37 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1) 883 ****************** <1> expansion: onecount = 11 883 ****************** <1> expansion: method2tablesize = 38 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1 883 ****************** <1> expansion: previous = (11372+1) 883 ****************** <1> expansion: last = 11395 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: lastcount = 6 883 ****************** <1> expansion: method2tablesize = 39 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1) 883 ****************** <1> expansion: method2tablesize = 40 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6 883 ****************** <1> expansion: previous = (11395+6) 883 ****************** <1> expansion: last = 11410 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: method2tablesize = 41 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6) 883 ****************** <1> expansion: method2tablesize = 42 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2 883 ****************** <1> expansion: previous = (11410+2) 883 ****************** <1> expansion: last = 15517 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: lastcount = 6 883 ****************** <1> expansion: lastcount = 7 883 ****************** <1> expansion: lastcount = 8 883 ****************** <1> expansion: lastcount = 9 883 ****************** <1> expansion: lastcount = 10 883 ****************** <1> expansion: lastcount = 11 883 ****************** <1> expansion: method2tablesize = 45 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517 883 ****************** <1> expansion: method2tablesize = 46 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11 883 ****************** <1> expansion: previous = (15517+11) 883 ****************** <1> expansion: last = 15548 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: lastcount = 6 883 ****************** <1> expansion: lastcount = 7 883 ****************** <1> expansion: lastcount = 8 883 ****************** <1> expansion: lastcount = 9 883 ****************** <1> expansion: lastcount = 10 883 ****************** <1> expansion: lastcount = 11 883 ****************** <1> expansion: method2tablesize = 47 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11) 883 ****************** <1> expansion: method2tablesize = 48 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11 883 ****************** <1> expansion: previous = (15548+11) 883 ****************** <1> expansion: last = 23278 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: method2tablesize = 51 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278 883 ****************** <1> expansion: method2tablesize = 52 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4 883 ****************** <1> expansion: previous = (23278+4) 883 ****************** <1> expansion: last = 26702 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: method2tablesize = 55 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702 883 ****************** <1> expansion: method2tablesize = 56 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3 883 ****************** <1> expansion: previous = (26702+3) 883 ****************** <1> expansion: last = 27518 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: method2tablesize = 59 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518 883 ****************** <1> expansion: method2tablesize = 60 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2 883 ****************** <1> expansion: previous = (27518+2) 883 ****************** <1> expansion: last = 27987 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: method2tablesize = 63 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987 883 ****************** <1> expansion: method2tablesize = 64 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2 883 ****************** <1> expansion: previous = (27987+2) 883 ****************** <1> expansion: last = 28062 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 65 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2) 883 ****************** <1> expansion: onecount = 12 883 ****************** <1> expansion: method2tablesize = 66 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1 883 ****************** <1> expansion: previous = (28062+1) 883 ****************** <1> expansion: last = 28068 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: lastcount = 2 883 ****************** <1> expansion: lastcount = 3 883 ****************** <1> expansion: lastcount = 4 883 ****************** <1> expansion: lastcount = 5 883 ****************** <1> expansion: lastcount = 6 883 ****************** <1> expansion: lastcount = 7 883 ****************** <1> expansion: lastcount = 8 883 ****************** <1> expansion: lastcount = 9 883 ****************** <1> expansion: lastcount = 10 883 ****************** <1> expansion: lastcount = 11 883 ****************** <1> expansion: lastcount = 12 883 ****************** <1> expansion: lastcount = 13 883 ****************** <1> expansion: lastcount = 14 883 ****************** <1> expansion: lastcount = 15 883 ****************** <1> expansion: lastcount = 16 883 ****************** <1> expansion: lastcount = 17 883 ****************** <1> expansion: lastcount = 18 883 ****************** <1> expansion: lastcount = 19 883 ****************** <1> expansion: lastcount = 20 883 ****************** <1> expansion: lastcount = 21 883 ****************** <1> expansion: lastcount = 22 883 ****************** <1> expansion: lastcount = 23 883 ****************** <1> expansion: lastcount = 24 883 ****************** <1> expansion: lastcount = 25 883 ****************** <1> expansion: lastcount = 26 883 ****************** <1> expansion: lastcount = 27 883 ****************** <1> expansion: lastcount = 28 883 ****************** <1> expansion: lastcount = 29 883 ****************** <1> expansion: lastcount = 30 883 ****************** <1> expansion: method2tablesize = 67 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1,db,28068-(28062+1) 883 ****************** <1> expansion: method2tablesize = 68 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1,db,28068-(28062+1),db,30 883 ****************** <1> expansion: previous = (28068+30) 883 ****************** <1> expansion: last = 32365 883 ****************** <1> expansion: lastcount = 1 883 ****************** <1> expansion: method2tablesize = 71 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1,db,28068-(28062+1),db,30,db,255,dw,32365 883 ****************** <1> expansion: onecount = 13 883 ****************** <1> expansion: method2tablesize = 72 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1,db,28068-(28062+1),db,30,db,255,dw,32365,db,1 883 ****************** <1> expansion: previous = (32365+1) 883 ****************** <1> expansion: method2tablesize = 74 883 ****************** <1> expansion: method2list = db,"",db,255,dw,5103,db,4,db,255,dw,5597,db,16,db,255,dw,6026,db,1,db,6047-(6026+1),db,1,db,6071-(6047+1),db,1,db,6099-(6071+1),db,1,db,6101-(6099+1),db,1,db,6104-(6101+1),db,1,db,6112-(6104+1),db,1,db,6115-(6112+1),db,5,db,6308-(6115+5),db,1,db,255,dw,11295,db,2,db,11362-(11295+2),db,1,db,11367-(11362+1),db,1,db,11372-(11367+1),db,1,db,11395-(11372+1),db,6,db,11410-(11395+6),db,2,db,255,dw,15517,db,11,db,15548-(15517+11),db,11,db,255,dw,23278,db,4,db,255,dw,26702,db,3,db,255,dw,27518,db,2,db,255,dw,27987,db,2,db,28062-(27987+2),db,1,db,28068-(28062+1),db,30,db,255,dw,32365,db,1,db,0,db,0 883 ****************** <1> expansion: onecount = 13 883 ****************** <1> expansion: __patch_no386_table_method = 2 883 000007DB 8A1701140117011B01- <1> 883 000007E4 0101020107010205BC- <1> 883 000007ED 01FF1F2C0241010401- <1> 883 000007F6 040116060902FF9D3C- <1> 883 000007FF 0B140BFFEE5A04FF4E- <1> 883 00000808 6803FF7E6B02FF536D- <1> 883 00000811 024901051EFF6D7E01- <1> 883 0000081A 0000 <1> 883 ****************** <1> expansion: size = 74 883 ****************** <1> warning: (writepatchtable:54) patch_no386_table: 74 bytes [-w+user] 883 ****************** <1> warning: (writepatchtable:55) (Method 2, 13 one-byte patches) [-w+user] 884 <1> %undef PATCH_NO386_TABLE 885 <1> 886 <1> align 2 887 <1> ; Table of patches that are to be set NOP if running on a 386. 888 0000081C 1D281E282B332C332D- <1> writepatchtable patch_386_table, PATCH_386_TABLE 888 ****************** <1> expansion: method1tablesize = 28 888 ****************** <1> expansion: method2tablesize = 0 888 ****************** <1> expansion: method2list = db,"" 888 ****************** <1> expansion: previous = 0 888 ****************** <1> expansion: last = 0 888 ****************** <1> expansion: lastcount = 0 888 ****************** <1> expansion: onecount = 0 888 ****************** <1> expansion: last = 10269 888 ****************** <1> expansion: lastcount = 1 888 ****************** <1> expansion: lastcount = 2 888 ****************** <1> expansion: method2tablesize = 3 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269 888 ****************** <1> expansion: method2tablesize = 4 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2 888 ****************** <1> expansion: previous = (10269+2) 888 ****************** <1> expansion: last = 13099 888 ****************** <1> expansion: lastcount = 1 888 ****************** <1> expansion: lastcount = 2 888 ****************** <1> expansion: lastcount = 3 888 ****************** <1> expansion: lastcount = 4 888 ****************** <1> expansion: lastcount = 5 888 ****************** <1> expansion: lastcount = 6 888 ****************** <1> expansion: lastcount = 7 888 ****************** <1> expansion: method2tablesize = 7 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099 888 ****************** <1> expansion: method2tablesize = 8 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7 888 ****************** <1> expansion: previous = (13099+7) 888 ****************** <1> expansion: last = 28063 888 ****************** <1> expansion: lastcount = 1 888 ****************** <1> expansion: lastcount = 2 888 ****************** <1> expansion: lastcount = 3 888 ****************** <1> expansion: lastcount = 4 888 ****************** <1> expansion: method2tablesize = 11 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7,db,255,dw,28063 888 ****************** <1> expansion: method2tablesize = 12 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7,db,255,dw,28063,db,4 888 ****************** <1> expansion: previous = (28063+4) 888 ****************** <1> expansion: last = 32364 888 ****************** <1> expansion: lastcount = 1 888 ****************** <1> expansion: method2tablesize = 15 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7,db,255,dw,28063,db,4,db,255,dw,32364 888 ****************** <1> expansion: onecount = 1 888 ****************** <1> expansion: method2tablesize = 16 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7,db,255,dw,28063,db,4,db,255,dw,32364,db,1 888 ****************** <1> expansion: previous = (32364+1) 888 ****************** <1> expansion: method2tablesize = 18 888 ****************** <1> expansion: method2list = db,"",db,255,dw,10269,db,2,db,255,dw,13099,db,7,db,255,dw,28063,db,4,db,255,dw,32364,db,1,db,0,db,0 888 ****************** <1> expansion: onecount = 1 888 ****************** <1> expansion: __patch_386_table_method = 1 888 00000825 332E332F3330333133- <1> 888 0000082E 9F6DA06DA16DA26D6C- <1> 888 00000837 7E <1> 888 ****************** <1> expansion: size = 28 888 ****************** <1> warning: (writepatchtable:65) patch_386_table: 28 bytes [-w+user] 888 ****************** <1> warning: (writepatchtable:66) (Method 1) [-w+user] 889 <1> %undef PATCH_386_TABLE 890 <1> 891 <1> %unmacro __writepatchtable2 0-*.nolist 892 <1> %unmacro __patchtable2_entry 0.nolist 893 <1> %unmacro writepatchtable 2-*.nolist 894 <1> 895 <1> 896 <1> %if _BOOTLDR 897 00000838 90 <1> align 16 898 <1> ; Image identification 899 <1> ; First dword: signature 900 <1> ; Next word: version, two ASCII digits 901 <1> ; Next word: checksum. adding up all words of the paragraph gives zero 902 <1> ; Next word: size of image (including this paragraph) 903 <1> ; Three words reserved, zero. 904 <1> imageident: 905 00000840 4E4445423030 <1> db "NDEB00" 906 00000846 0000 <1> .check: dw 0 907 00000848 0000 <1> .size: dw 0 908 0000084A 0000 <1> times 3 dw 0 909 <1> %endif 910 <1> align 2 911 00000850 6511 <1> memsize: dw paras(CODETARGET2+ldebug_code_size) 912 <1> ; same as paras(AUXTARGET1+auxbuff_size) 913 <1> 914 <1> %if _BOOTLDR 915 00000852 0000 <1> init_boot_new_memsizekib: dw 0 916 00000854 0000 <1> init_boot_old_memsizekib: dw 0 917 <1> 918 00000856 0000 <1> init_boot_ebdasize: dw 0 919 00000858 0000 <1> init_boot_ebdasource: dw 0 920 0000085A 0000 <1> init_boot_ebdadest: dw 0 921 0000085C 00 <1> init_boot_ebdaflag: db 0 922 <1> %endif 923 <1> 924 <1> 925 <1> imsg: 926 <1> .early_mem_fail: 927 0000085D 446562756767656420- <1> db _PROGNAME,": Failed to allocate memory!" 927 00000866 6C44656275673A2046- <1> 927 0000086F 61696C656420746F20- <1> 927 00000878 616C6C6F6361746520- <1> 927 00000881 6D656D6F727921 <1> 928 <1> .crlf: 929 00000888 0D0A00 <1> asciz 13,10 930 <1> .early_reloc_fail: 931 0000088B 446562756767656420- <1> asciz _PROGNAME,": Failed to relocate, internal error!",13,10 931 00000894 6C44656275673A2046- <1> 931 0000089D 61696C656420746F20- <1> 931 000008A6 72656C6F636174652C- <1> 931 000008AF 20696E7465726E616C- <1> 931 000008B8 206572726F72210D0A- <1> 931 000008C1 00 <1> 932 000008C2 446562756767656420- <1> .help: db _PROGNAME,_VERSION,", debugger.",13,10 932 000008CB 6C4465627567202832- <1> 932 000008D4 3031392D30362D3039- <1> 932 000008DD 292C20646562756767- <1> 932 000008E6 65722E0D0A <1> 933 000008EB 0D0A <1> db 13,10 934 000008ED 55736167653A204444- <1> db "Usage: ",_FILENAME,"[.COM] [[drive:][path]progname.ext [parameters]]",13,10 934 000008F6 454255475B2E434F4D- <1> 934 000008FF 5D205B5B6472697665- <1> 934 00000908 3A5D5B706174685D70- <1> 934 00000911 726F676E616D652E65- <1> 934 0000091A 7874205B706172616D- <1> 934 00000923 65746572735D5D0D0A <1> 935 0000092C 0D0A <1> db 13,10 936 0000092E 202070726F676E616D- <1> db " progname.ext",9,9,"(executable) file to debug or examine",13,10 936 00000937 652E65787409092865- <1> 936 00000940 786563757461626C65- <1> 936 00000949 292066696C6520746F- <1> 936 00000952 206465627567206F72- <1> 936 0000095B 206578616D696E650D- <1> 936 00000964 0A <1> 937 00000965 2020706172616D6574- <1> db " parameters",9,9, "parameters given to program",13,10 937 0000096E 657273090970617261- <1> 937 00000977 6D6574657273206769- <1> 937 00000980 76656E20746F207072- <1> 937 00000989 6F6772616D0D0A <1> 938 00000990 0D0A <1> db 13,10 939 00000992 466F722061206C6973- <1> db "For a list of debugging commands, run ",_FILENAME," and type ? at the prompt.",13,10 939 0000099B 74206F662064656275- <1> 939 000009A4 6767696E6720636F6D- <1> 939 000009AD 6D616E64732C207275- <1> 939 000009B6 6E2044444542554720- <1> 939 000009BF 616E64207479706520- <1> 939 000009C8 3F2061742074686520- <1> 939 000009D1 70726F6D70742E0D0A <1> 940 000009DA 00 <1> asciz 941 <1> %if _ONLY386 942 <1> .no386: ascizline "Error: This ",_PROGNAME," build requires a 386 CPU or higher." 943 <1> %elif _ONLYNON386 944 <1> .386: asciiline "Warning: This ",_PROGNAME," build is ignorant of 386 CPU specifics." 945 <1> ascizline 9," It does not allow access to the available 386-specific registers!" 946 <1> %endif 947 <1> 948 <1> .invalidswitch: 949 000009DB 496E76616C69642073- <1> db "Invalid switch - " 949 000009E4 7769746368202D20 <1> 950 <1> .invalidswitch_a: 951 000009EC 780D0A00 <1> asciz "x",13,10 952 <1> %if _BOOTLDR 953 <1> .rpl_detected: 954 000009F0 52504C206465746563- <1> asciz "RPL detected! Currently unsupported.",13,10 954 000009F9 746564212043757272- <1> 954 00000A02 656E746C7920756E73- <1> 954 00000A0B 7570706F727465642E- <1> 954 00000A14 0D0A00 <1> 955 <1> .mismatch_detected: 956 00000A17 4D69736D6174636820- <1> asciz "Mismatch in memory size detected! Internal error!",13,10 956 00000A20 696E206D656D6F7279- <1> 956 00000A29 2073697A6520646574- <1> 956 00000A32 65637465642120496E- <1> 956 00000A3B 7465726E616C206572- <1> 956 00000A44 726F72210D0A00 <1> 957 <1> .boot_ebda_unexpected: 958 00000A4B 454244412061742075- <1> asciz "EBDA at unexpected position.",13,10 958 00000A54 6E6578706563746564- <1> 958 00000A5D 20706F736974696F6E- <1> 958 00000A66 2E0D0A00 <1> 959 <1> .boot_error_out_of_memory: 960 00000A6A 4F7574206F66206D65- <1> asciz "Out of memory!",13,10 960 00000A73 6D6F7279210D0A00 <1> 961 <1> .booterror: 962 00000A7B 0D0A44656275676765- <1> asciz 13,10,_PROGNAME," boot error. Press any key to reboot.",13,10 962 00000A84 64206C446562756720- <1> 962 00000A8D 626F6F74206572726F- <1> 962 00000A96 722E20507265737320- <1> 962 00000A9F 616E79206B65792074- <1> 962 00000AA8 6F207265626F6F742E- <1> 962 00000AB1 0D0A00 <1> 963 <1> %endif 964 <1> %if _DOSEMU 965 00000AB4 30322F32352F3933 <1> .dosemudate: db "02/25/93" 966 <1> %endif 967 <1> ..@tempstack: 968 <1> %if _VDD 969 00000ABC 44454258585644442E- <1> .vdd: asciz "DEBXXVDD.DLL" 969 00000AC5 444C4C00 <1> 970 00000AC9 446973706174636800 <1> .dispatch: asciz "Dispatch" 971 00000AD2 496E697400 <1> .init: asciz "Init" 972 00000AD7 4D4F555345202020 <1> .mouse: db "MOUSE",32,32,32 ; Looks like a device name 973 00000ADF 416E64792057617473- <1> .andy: db "Andy Watson" ; I don't know him and why he's inside the NTVDM mouse driver 973 00000AE8 6F6E <1> 974 <1> endarea .andy 975 00000AEA 57696E646F7773204E- <1> .ntdos: db "Windows NT MS-DOS subsystem Mouse Driver" ; Int33.004D mouse driver copyright string (not ASCIZ) 975 00000AF3 54204D532D444F5320- <1> 975 00000AFC 73756273797374656D- <1> 975 00000B05 204D6F757365204472- <1> 975 00000B0E 69766572 <1> 976 <1> endarea .ntdos 977 <1> 978 <1> ; INP: - 979 <1> ; OUT: CY if not NTVDM 980 <1> ; NC if NTVDM 981 <1> ; ds = es = cs 982 <1> ; CHG: ax, bx, cx, dx, di, si, bp, es, ds 983 <1> isnt: 984 00000B12 B80258 <1> mov ax, 5802h ; Get UMB link state 985 00000B15 CD21 <1> int 21h 986 00000B17 30E4 <1> xor ah, ah 987 00000B19 50 <1> push ax ; Save UMB link state 988 00000B1A B80358 <1> mov ax, 5803h ; Set UMB link state: 989 00000B1D BB0100 <1> mov bx, 1 ; Add UMBs to memory chain 990 00000B20 CD21 <1> int 21h 991 00000B22 B452 <1> mov ah, 52h 992 00000B24 BBFFFF <1> mov bx, -1 993 00000B27 CD21 <1> int 21h ; Get list of lists 994 00000B29 43 <1> inc bx ; 0FFFFh ? 995 00000B2A 7503E98600 <1> jz .notnt ; invalid --> 996 00000B2F 268B47FD <1> mov ax, word [es:bx-3] ; First MCB 997 00000B33 0E <1> push cs 998 00000B34 07 <1> pop es ; reset es 999 <1> .loop: 1000 00000B35 8ED8 <1> mov ds, ax ; ds = MCB 1001 00000B37 40 <1> inc ax ; Now segment of memory block itself 1002 00000B38 31D2 <1> xor dx, dx 1003 00000B3A 31DB <1> xor bx, bx 1004 00000B3C 803F5A <1> cmp byte [bx], 'Z' ; End of MCB chain? 1005 00000B3F 7503 <1> jne .notlast 1006 00000B41 42 <1> inc dx 1007 00000B42 EB05 <1> jmp short .notchain 1008 <1> .notlast: 1009 00000B44 803F4D <1> cmp byte [bx], 'M' ; Valid MCB chain? 1010 00000B47 756C <1> jne .error 1011 <1> .notchain: 1012 00000B49 8B4F03 <1> mov cx, [bx+3] ; MCB size in paragraphs 1013 <1> ; ax = current memory block 1014 <1> ; cx = size of current memory block in paragraphs 1015 <1> ; dx = flag whether this is the last MCB 1016 <1> ; ds = current MCB (before memory block) 1017 00000B4C 837F0108 <1> cmp word [bx+1], 8 ; MCB owner DOS? 1018 00000B50 755D <1> jne .notfound_1 1019 00000B52 817F085344 <1> cmp word [bx+8], "SD" ; MCB name "SD"? 1020 00000B57 7556 <1> jne .notfound_1 1021 <1> .loopsub: 1022 00000B59 8ED8 <1> mov ds, ax ; SD sub-segment inside memory block 1023 00000B5B 40 <1> inc ax 1024 00000B5C 49 <1> dec cx 1025 00000B5D 8B6F03 <1> mov bp, word [bx+3] ; Paragraphs 'til end of SD sub-segment 1026 <1> ; ax = current SD sub-segment 1027 <1> ; cx = paragraphs from SD sub-segment start (ax) to current memory block end 1028 <1> ; ds = current SD sub-MCB (like MCB, but for SD sub-segment) 1029 <1> ; bp = current SD sub-segment size in paragraphs 1030 00000B60 39E9 <1> cmp cx, bp 1031 00000B62 724B <1> jb .notfound_1 ; Goes beyond memory block, invalid --> 1032 00000B64 803F51 <1> cmp byte [bx], 'Q' ; NTVDM type 51h sub-segment ? 1033 00000B67 753C <1> jne .notfound_2 ; no --> 1034 00000B69 BE0800 <1> mov si, 8 ; Offset of device name (if SD device driver sub-segment) 1035 00000B6C BF[D70A] <1> mov di, imsg.mouse 1036 00000B6F 51 <1> push cx 1037 00000B70 89F1 <1> mov cx, si ; length of name 1038 00000B72 F3A6 <1> repe cmpsb ; blank-padded device name "MOUSE" ? 1039 00000B74 59 <1> pop cx 1040 00000B75 752E <1> jne .notfound_2 ; Device name doesn't match, try next SD sub-segment 1041 00000B77 8CD8 <1> mov ax, ds 1042 00000B79 40 <1> inc ax 1043 00000B7A 8ED8 <1> mov ds, ax ; Segment of SD sub-segment 1044 <1> ; ds = current SD sub-segment 1045 00000B7C 89E8 <1> mov ax, bp ; Leave paragraph value in bp 1046 00000B7E A900F0 <1> test ax, 0F000h ; Would *16 cause an overflow? 1047 00000B81 7520 <1> jnz .notfound_3 ; Then too large --> 1048 00000B83 51 <1> push cx 1049 00000B84 B104 <1> mov cl, 4 1050 00000B86 D3E0 <1> shl ax, cl ; *16 1051 00000B88 59 <1> pop cx 1052 <1> ; ax = current SD sub-segment size in byte 1053 <1> .andy: 1054 00000B89 BF[DF0A] <1> mov di, imsg.andy 1055 00000B8C 51 <1> push cx 1056 00000B8D B90B00 <1> mov cx, imsg.andy_size 1057 00000B90 E82E00 <1> call findstring ; String "Andy Watson"? 1058 00000B93 59 <1> pop cx 1059 00000B94 720D <1> jc .notfound_3 1060 <1> .ntdos: 1061 00000B96 BF[EA0A] <1> mov di, imsg.ntdos 1062 00000B99 51 <1> push cx 1063 00000B9A B92800 <1> mov cx, imsg.ntdos_size 1064 00000B9D E82100 <1> call findstring ; String "Windows NT MS-DOS subsystem Mouse Driver"? 1065 00000BA0 59 <1> pop cx 1066 00000BA1 7313 <1> jnc .found ; (NC) 1067 <1> .notfound_3: 1068 00000BA3 8CD8 <1> mov ax, ds 1069 <1> .notfound_2: 1070 00000BA5 39E9 <1> cmp cx, bp 1071 00000BA7 7406 <1> je .notfound_1 ; End of SD memory block, get next MCB 1072 00000BA9 01E8 <1> add ax, bp ; Address next SD sub-MCB 1073 00000BAB 29E9 <1> sub cx, bp 1074 00000BAD EBAA <1> jmp short .loopsub ; Try next SD sub-segment 1075 <1> .notfound_1: 1076 00000BAF 01C8 <1> add ax, cx ; Address next MCB 1077 00000BB1 85D2 <1> test dx, dx ; Non-zero if 'Z' MCB 1078 00000BB3 7480 <1> jz .loop ; If not at end of MCB chain, try next 1079 <1> ; jmp short .notnt ; Otherwise, not found 1080 <1> .error: 1081 <1> .notnt: 1082 00000BB5 F9 <1> stc 1083 <1> .found: 1084 00000BB6 0E <1> push cs 1085 00000BB7 1F <1> pop ds ; restore ds 1086 <1> 1087 00000BB8 5B <1> pop bx ; saved UMB link state 1088 00000BB9 B80358 <1> mov ax, 5803h 1089 00000BBC 9C <1> pushf 1090 00000BBD CD21 <1> int 21h ; Set UMB link state 1091 00000BBF 9D <1> popf 1092 00000BC0 C3 <1> retn 1093 <1> 1094 <1> findstring: 1095 00000BC1 31F6 <1> xor si, si 1096 <1> .loop: 1097 00000BC3 56 <1> push si 1098 00000BC4 01CE <1> add si, cx 1099 00000BC6 7203 <1> jc .notfound_c 1100 00000BC8 4E <1> dec si ; The largest offset we need for this compare 1101 00000BC9 39F0 <1> cmp ax, si 1102 <1> .notfound_c: 1103 00000BCB 5E <1> pop si 1104 00000BCC 720D <1> jb .return ; Not found if at top of memory block --> 1105 00000BCE 57 <1> push di 1106 00000BCF 56 <1> push si 1107 00000BD0 51 <1> push cx 1108 00000BD1 F3A6 <1> repe cmpsb ; String somewhere inside program? 1109 00000BD3 59 <1> pop cx 1110 00000BD4 5E <1> pop si 1111 00000BD5 5F <1> pop di 1112 00000BD6 7403 <1> je .return ; Yes, proceed --> (if ZR, NC) 1113 00000BD8 46 <1> inc si ; Increase pointer by one 1114 00000BD9 EBE8 <1> jmp short .loop ; Try next address 1115 <1> .return: 1116 00000BDB C3 <1> retn 1117 <1> %endif 1118 <1> 1119 <1> 1120 <1> ; Move paragraphs 1121 <1> ; 1122 <1> ; INP: ax:0-> source 1123 <1> ; dx:0-> destination 1124 <1> ; cx = number of paragraphs 1125 <1> ; CHG: - 1126 <1> ; Note: Doesn't work correctly on HMA; doesn't always wrap to LMA either. 1127 <1> ; Do not provide a wrapped/HMA source or destination! 1128 <1> init_movp: 1129 00000BDC 51 <1> push cx 1130 00000BDD 1E <1> push ds 1131 00000BDE 56 <1> push si 1132 00000BDF 06 <1> push es 1133 00000BE0 57 <1> push di 1134 <1> 1135 00000BE1 39D0 <1> cmp ax, dx ; source below destination ? 1136 00000BE3 7232 <1> jb .down ; yes, move from top down --> 1137 00000BE5 7469 <1> je .return ; same, no need to move --> 1138 <1> 1139 00000BE7 50 <1> push ax 1140 00000BE8 52 <1> push dx 1141 <1> .uploop: 1142 00000BE9 8ED8 <1> mov ds, ax 1143 00000BEB 8EC2 <1> mov es, dx 1144 00000BED 31FF <1> xor di, di 1145 00000BEF 31F6 <1> xor si, si ; -> start of segment 1146 00000BF1 81E90010 <1> sub cx, 1000h ; 64 KiB left ? 1147 00000BF5 7610 <1> jbe .uplast ; no --> 1148 00000BF7 51 <1> push cx 1149 00000BF8 B90080 <1> mov cx, 10000h /2 1150 00000BFB F3A5 <1> rep movsw ; move 64 KiB 1151 00000BFD 59 <1> pop cx 1152 00000BFE 050010 <1> add ax, 1000h 1153 00000C01 81C20010 <1> add dx, 1000h ; -> next segment 1154 00000C05 EBE2 <1> jmp short .uploop ; proceed for more --> 1155 <1> .uplast: 1156 00000C07 81C10010 <1> add cx, 1000h ; restore counter 1157 00000C0B D1E1 <1> shl cx, 1 1158 00000C0D D1E1 <1> shl cx, 1 1159 00000C0F D1E1 <1> shl cx, 1 ; *8, paragraphs to words 1160 00000C11 F3A5 <1> rep movsw ; move last part 1161 00000C13 5A <1> pop dx 1162 00000C14 58 <1> pop ax 1163 00000C15 EB39 <1> jmp short .return 1164 <1> 1165 <1> .down: 1166 00000C17 FD <1> std 1167 <1> .dnloop: 1168 00000C18 81E90010 <1> sub cx, 1000h ; 64 KiB left ? 1169 00000C1C 761A <1> jbe .dnlast ; no --> 1170 00000C1E 50 <1> push ax 1171 00000C1F 52 <1> push dx 1172 00000C20 01C8 <1> add ax, cx 1173 00000C22 01CA <1> add dx, cx 1174 00000C24 8ED8 <1> mov ds, ax ; -> 64 KiB not yet moved 1175 00000C26 8EC2 <1> mov es, dx 1176 00000C28 5A <1> pop dx 1177 00000C29 58 <1> pop ax 1178 00000C2A BFFEFF <1> mov di, -2 1179 00000C2D 89FE <1> mov si, di ; moved from last word down 1180 00000C2F 51 <1> push cx 1181 00000C30 B90080 <1> mov cx, 10000h /2 1182 00000C33 F3A5 <1> rep movsw ; move 64 KiB 1183 00000C35 59 <1> pop cx 1184 00000C36 EBE0 <1> jmp short .dnloop ; proceed for more --> 1185 <1> .dnlast: 1186 00000C38 81C10010 <1> add cx, 1000h ; restore counter 1187 00000C3C D1E1 <1> shl cx, 1 1188 00000C3E D1E1 <1> shl cx, 1 1189 00000C40 D1E1 <1> shl cx, 1 ; *8, paragraphs to words 1190 00000C42 89CF <1> mov di, cx 1191 00000C44 4F <1> dec di 1192 00000C45 D1E7 <1> shl di, 1 ; words to offset, -> last word 1193 00000C47 89FE <1> mov si, di 1194 00000C49 8ED8 <1> mov ds, ax 1195 00000C4B 8EC2 <1> mov es, dx ; first segment correct 1196 00000C4D F3A5 <1> rep movsw ; move first part 1197 00000C4F FC <1> cld 1198 <1> .return: 1199 00000C50 5F <1> pop di 1200 00000C51 07 <1> pop es 1201 00000C52 5E <1> pop si 1202 00000C53 1F <1> pop ds 1203 00000C54 59 <1> pop cx 1204 00000C55 C3 <1> retn 1205 <1> 1206 <1> 1207 <1> %if _BOOTLDR 1208 <1> ; only called for boot-loaded mode 1209 <1> init_getc_bootldr: 1210 00000C56 31C0 <1> xor ax, ax 1211 00000C58 CD16 <1> int 16h 1212 00000C5A C3 <1> retn 1213 <1> %endif 1214 <1> 1215 <1> init_putsz_cs: 1216 00000C5B 50 <1> push ax 1217 00000C5C 53 <1> push bx 1218 00000C5D 51 <1> push cx 1219 00000C5E 52 <1> push dx 1220 00000C5F 1E <1> push ds 1221 00000C60 06 <1> push es 1222 00000C61 57 <1> push di 1223 00000C62 0E <1> push cs 1224 00000C63 07 <1> pop es 1225 00000C64 0E <1> push cs 1226 00000C65 1F <1> pop ds 1227 00000C66 89D7 <1> mov di, dx ; es:di-> string 1228 00000C68 30C0 <1> xor al, al 1229 00000C6A B9FFFF <1> mov cx, -1 1230 00000C6D F2AE <1> repne scasb ; search zero 1231 00000C6F F7D9 <1> neg cx 1232 00000C71 49 <1> dec cx 1233 00000C72 49 <1> dec cx ; cx = length of message 1234 00000C73 5F <1> pop di 1235 00000C74 E82A00 <1> call init_puts_ds 1236 00000C77 07 <1> pop es 1237 00000C78 1F <1> pop ds 1238 00000C79 5A <1> pop dx 1239 00000C7A 59 <1> pop cx 1240 00000C7B 5B <1> pop bx 1241 00000C7C 58 <1> pop ax 1242 00000C7D C3 <1> retn 1243 <1> 1244 <1> %if _BOOTLDR 1245 <1> init_putsz_cs_bootldr: 1246 00000C7E 50 <1> push ax 1247 00000C7F 53 <1> push bx 1248 00000C80 51 <1> push cx 1249 00000C81 52 <1> push dx 1250 00000C82 1E <1> push ds 1251 00000C83 06 <1> push es 1252 00000C84 57 <1> push di 1253 00000C85 0E <1> push cs 1254 00000C86 07 <1> pop es 1255 00000C87 0E <1> push cs 1256 00000C88 1F <1> pop ds 1257 00000C89 89D7 <1> mov di, dx ; es:di-> string 1258 00000C8B 30C0 <1> xor al, al 1259 00000C8D B9FFFF <1> mov cx, -1 1260 00000C90 F2AE <1> repne scasb ; search zero 1261 00000C92 F7D9 <1> neg cx 1262 00000C94 49 <1> dec cx 1263 00000C95 49 <1> dec cx ; cx = length of message 1264 00000C96 5F <1> pop di 1265 00000C97 E80F00 <1> call init_puts_ds_bootldr 1266 00000C9A 07 <1> pop es 1267 00000C9B 1F <1> pop ds 1268 00000C9C 5A <1> pop dx 1269 00000C9D 59 <1> pop cx 1270 00000C9E 5B <1> pop bx 1271 00000C9F 58 <1> pop ax 1272 00000CA0 C3 <1> retn 1273 <1> %endif 1274 <1> 1275 <1> init_puts_ds: 1276 <1> %if _BOOTLDR 1277 00000CA1 36F606[8500]40 <1> testopt [ss:internalflags], nodosloaded 1277 ****************** <1> expansion: adr = '[ss:internalflags]' 1277 ****************** <1> expansion: len = 18 1277 ****************** <1> expansion: tf = '[' 1277 ****************** <1> expansion: tb = ']' 1277 ****************** <1> expansion: adr = 'ss:internalflags' 1277 ****************** <1> expansion: adr = ss:internalflags 1278 00000CA7 7413 <1> jz @F 1279 <1> 1280 <1> init_puts_ds_bootldr: 1281 00000CA9 56 <1> push si 1282 00000CAA 55 <1> push bp 1283 00000CAB 89D6 <1> mov si, dx 1284 00000CAD E30A <1> jcxz .return 1285 <1> .loop: 1286 00000CAF AC <1> lodsb 1287 00000CB0 BB0700 <1> mov bx, 0007 1288 00000CB3 B40E <1> mov ah, 0Eh 1289 00000CB5 CD10 <1> int 10h 1290 00000CB7 E2F6 <1> loop .loop 1291 <1> .return: 1292 00000CB9 5D <1> pop bp 1293 00000CBA 5E <1> pop si 1294 00000CBB C3 <1> retn 1295 <1> 1296 <1> @@: 1296 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.246 1296 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.247 1296 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.248 1296 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.249 1296 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.250 1296 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.251 1296 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.252 1296 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.253 1296 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.246 1296 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.247 1296 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.248 1296 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.249 1296 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.250 1296 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.251 1296 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.252 1296 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.253 1296 ****************** <1> expansion: __@@_num = 254 1297 <1> %endif 1298 00000CBC BB0100 <1> mov bx, 1 ; standard output 1299 00000CBF B440 <1> mov ah, 40h ; write to file 1300 00000CC1 CD21 <1> int 21h 1301 00000CC3 C3 <1> retn 1302 <1> 1303 <1> 1304 <1> 1305 <1> %if _BOOTLDR 1306 <1> ; Initial entry when boot loading. 1307 <1> 1308 <1> ; ds = ss = debugger data segment 1309 <1> ; (ds - 1) = image ident prefix paragraph 1310 <1> boot_old_initcode: 1311 00000CC4 FC <1> cld 1312 <1> 1313 00000CC5 E8DFF9 <1> d4 call init_d4message 1314 00000CC8 496E20626F6F74206C- <1> d4 asciz "In boot loader; press any key",13,10 1314 00000CD1 6F616465723B207072- <1> 1314 00000CDA 65737320616E79206B- <1> 1314 00000CE3 65790D0A00 <1> 1315 00000CE8 E8B9FA <1> d4 call init_d4pauseforkey 1316 <1> 1317 00000CEB C706[2A03]8000 <1> mov word [execblk+2], 80h 1318 00000CF1 C60681000D <1> mov byte [81h], 0Dh 1319 00000CF6 C606[E302]01 <1> mov byte [fileext], EXT_OTHER ; empty file name and command line as per N 1320 <1> %endif ; _BOOTLDR 1321 <1> 1322 <1> old_initcode: 1323 00000CFB FC <1> cld 1324 <1> d2bp 1325 00000CFC 8CD8 <1> mov ax, ds 1326 00000CFE A3[2C03] <1> mov word [ execblk+4 ], ax 1327 00000D01 A3[3003] <1> mov word [ execblk+8 ], ax 1328 00000D04 A3[3403] <1> mov word [ execblk+12 ], ax ; set up parameter block for exec command 1329 00000D07 A3[6602] <1> mov word [ pspdbg ], ax 1330 <1> %if _BOOTLDR 1331 00000D0A F606[8500]40 <1> testopt [internalflags], nodosloaded 1331 ****************** <1> expansion: adr = '[internalflags]' 1331 ****************** <1> expansion: len = 15 1331 ****************** <1> expansion: tf = '[' 1331 ****************** <1> expansion: tb = ']' 1331 ****************** <1> expansion: adr = 'internalflags' 1331 ****************** <1> expansion: adr = internalflags 1332 00000D0F 743E <1> jz .checkio 1333 00000D11 E893F9 <1> d4 call init_d4message 1334 00000D14 436F6D6D6F6E20696E- <1> d4 asciz "Common initialisation, determining processor type now",13,10 1334 00000D1D 697469616C69736174- <1> 1334 00000D26 696F6E2C2064657465- <1> 1334 00000D2F 726D696E696E672070- <1> 1334 00000D38 726F636573736F7220- <1> 1334 00000D41 74797065206E6F770D- <1> 1334 00000D4A 0A00 <1> 1335 00000D4C E9A700 <1> jmp .determineprocessor 1336 <1> .checkio: 1337 <1> %endif 1338 <1> ; Check for console input vs. input from a file or other device. 1339 <1> ; This has to be done early because MS-DOS seems to switch CON 1340 <1> ; to cooked I/O mode only then. 1341 00000D4F B80044 <1> mov ax, 4400h ; IOCTL get device information 1342 00000D52 31DB <1> xor bx, bx ; StdIn 1343 00000D54 B283 <1> mov dl, 83h ; default if 21.4400 fails 1344 00000D56 CD21 <1> int 21h 1345 00000D58 F6C280 <1> test dl, 80h 1346 00000D5B 7414 <1> jz .inputfile 1347 00000D5D 8026[8400]DF <1> clropt [internalflags], inputfile 1347 ****************** <1> expansion: adr = '[internalflags]' 1347 ****************** <1> expansion: len = 15 1347 ****************** <1> expansion: tf = '[' 1347 ****************** <1> expansion: tb = ']' 1347 ****************** <1> expansion: adr = 'internalflags' 1347 ****************** <1> expansion: adr = internalflags 1348 00000D62 F6C203 <1> test dl, 3 1349 00000D65 740A <1> jz .inputdevice ; if not the console input 1350 00000D67 8026[8400]EF <1> clropt [internalflags], notstdinput 1350 ****************** <1> expansion: adr = '[internalflags]' 1350 ****************** <1> expansion: len = 15 1350 ****************** <1> expansion: tf = '[' 1350 ****************** <1> expansion: tb = ']' 1350 ****************** <1> expansion: adr = 'internalflags' 1350 ****************** <1> expansion: adr = internalflags 1351 00000D6C C606[9502]00 <1> mov byte [notatty], 0 ; it _is_ a tty 1352 <1> .inputdevice: 1353 <1> .inputfile: 1354 00000D71 B80044 <1> mov ax, 4400h ; IOCTL get device information 1355 00000D74 43 <1> inc bx ; StdOut 1356 00000D75 B283 <1> mov dl, 83h ; default if 21.4400 fails 1357 00000D77 CD21 <1> int 21h 1358 00000D79 F6C280 <1> test dl, 80h 1359 00000D7C 740F <1> jz .outputfile 1360 00000D7E 8026[8400]7F <1> clropt [internalflags], outputfile 1360 ****************** <1> expansion: adr = '[internalflags]' 1360 ****************** <1> expansion: len = 15 1360 ****************** <1> expansion: tf = '[' 1360 ****************** <1> expansion: tb = ']' 1360 ****************** <1> expansion: adr = 'internalflags' 1360 ****************** <1> expansion: adr = internalflags 1361 00000D83 F6C203 <1> test dl, 3 1362 00000D86 7405 <1> jz .outputdevice ; if not the console output 1363 00000D88 8026[8400]BF <1> clropt [internalflags], notstdoutput 1363 ****************** <1> expansion: adr = '[internalflags]' 1363 ****************** <1> expansion: len = 15 1363 ****************** <1> expansion: tf = '[' 1363 ****************** <1> expansion: tb = ']' 1363 ****************** <1> expansion: adr = 'internalflags' 1363 ****************** <1> expansion: adr = internalflags 1364 <1> .outputdevice: 1365 <1> .outputfile: 1366 <1> 1367 <1> ; Check DOS version 1368 <1> %if _VDD 1369 00000D8D 1E <1> push ds 1370 00000D8E 0E <1> push cs 1371 00000D8F 1F <1> pop ds 1372 00000D90 0E <1> push cs 1373 00000D91 07 <1> pop es 1374 00000D92 E87DFD <1> call isnt ; NTVDM ? 1375 00000D95 1F <1> pop ds 1376 00000D96 7205 <1> jc .isnotnt ; no --> 1377 00000D98 800E[8600]02 <1> setopt [internalflags], runningnt 1377 ****************** <1> expansion: adr = '[internalflags]' 1377 ****************** <1> expansion: len = 15 1377 ****************** <1> expansion: tf = '[' 1377 ****************** <1> expansion: tb = ']' 1377 ****************** <1> expansion: adr = 'internalflags' 1377 ****************** <1> expansion: adr = internalflags 1378 <1> .isnotnt: 1379 <1> %endif 1380 <1> 1381 00000D9D B80030 <1> mov ax, 3000h ; check DOS version 1382 00000DA0 CD21 <1> int 21h 1383 00000DA2 86C4 <1> xchg al, ah 1384 00000DA4 3D1F03 <1> cmp ax, ver(3,31) ; MS-DOS version > 3.30 ? 1385 00000DA7 7205 <1> jb .notoldpacket ; no --> 1386 00000DA9 800E[8400]01 <1> setopt [internalflags], oldpacket ; assume Int25/Int26 packet method available 1386 ****************** <1> expansion: adr = '[internalflags]' 1386 ****************** <1> expansion: len = 15 1386 ****************** <1> expansion: tf = '[' 1386 ****************** <1> expansion: tb = ']' 1386 ****************** <1> expansion: adr = 'internalflags' 1386 ****************** <1> expansion: adr = internalflags 1387 <1> .notoldpacket: 1388 00000DAE 50 <1> push ax 1389 00000DAF 31DB <1> xor bx, bx ; preset to invalid value 1390 00000DB1 B80633 <1> mov ax, 3306h 1391 00000DB4 CD21 <1> int 21h 1392 00000DB6 08C0 <1> or al, al ; invalid, DOS 1.x error --> 1393 00000DB8 7402 <1> jz .213306invalid 1394 00000DBA 3CFF <1> cmp al, -1 ; invalid 1395 <1> .213306invalid: 1396 00000DBC 58 <1> pop ax 1397 00000DBD 7407 <1> je .useoldver 1398 00000DBF 85DB <1> test bx, bx ; 0.0 ? 1399 00000DC1 7403 <1> jz .useoldver ; assume invalid --> 1400 00000DC3 93 <1> xchg ax, bx ; get version to ax 1401 00000DC4 86C4 <1> xchg al, ah ; strange Microsoft version format 1402 <1> .useoldver: 1403 00000DC6 3D0107 <1> cmp ax, ver(7,01) ; MS-DOS version > 7.00 ? 1404 00000DC9 7205 <1> jb .notnewpacket ; no --> 1405 00000DCB 800E[8400]03 <1> setopt [internalflags], newpacket| oldpacket ; assume both packet methods available 1405 ****************** <1> expansion: adr = '[internalflags]' 1405 ****************** <1> expansion: len = 15 1405 ****************** <1> expansion: tf = '[' 1405 ****************** <1> expansion: tb = ']' 1405 ****************** <1> expansion: adr = 'internalflags' 1405 ****************** <1> expansion: adr = internalflags 1406 <1> .notnewpacket: 1407 <1> %if _VDD 1408 00000DD0 F606[8600]02 <1> testopt [internalflags], runningnt 1408 ****************** <1> expansion: adr = '[internalflags]' 1408 ****************** <1> expansion: len = 15 1408 ****************** <1> expansion: tf = '[' 1408 ****************** <1> expansion: tb = ']' 1408 ****************** <1> expansion: adr = 'internalflags' 1408 ****************** <1> expansion: adr = internalflags 1409 00000DD5 741F <1> jz .novdd 1410 00000DD7 1E <1> push ds 1411 00000DD8 0E <1> push cs 1412 00000DD9 1F <1> pop ds 1413 00000DDA 0E <1> push cs 1414 00000DDB 07 <1> pop es 1415 00000DDC BE[BC0A] <1> mov si, imsg.vdd ; ds:si-> ASCIZ VDD filename 1416 00000DDF BB[C90A] <1> mov bx, imsg.dispatch ; ds:bx-> ASCIZ dispatching entry 1417 00000DE2 BF[D20A] <1> mov di, imsg.init ; es:di-> ASCIZ init entry 1418 00000DE5 F8 <1> clc ; ! 1419 00000DE6 C4C4580090 <1> RegisterModule ; register VDD 1420 00000DEB 1F <1> pop ds 1421 00000DEC 7208 <1> jc .novdd ; error ? --> 1422 00000DEE A3[7002] <1> mov word [hVdd], ax 1423 00000DF1 800E[8400]05 <1> setopt [internalflags], ntpacket| oldpacket ; assume old packet method also available 1423 ****************** <1> expansion: adr = '[internalflags]' 1423 ****************** <1> expansion: len = 15 1423 ****************** <1> expansion: tf = '[' 1423 ****************** <1> expansion: tb = ']' 1423 ****************** <1> expansion: adr = 'internalflags' 1423 ****************** <1> expansion: adr = internalflags 1424 <1> .novdd: 1425 <1> %endif 1426 <1> .determineprocessor: 1427 00000DF6 E8AEF8 <1> d4 call init_d4message 1428 00000DF9 44657465726D696E69- <1> d4 asciz "Determining processor type",13,10 1428 00000E02 6E672070726F636573- <1> 1428 00000E0B 736F7220747970650D- <1> 1428 00000E14 0A00 <1> 1429 <1> 1430 00000E16 B92101 <1> mov cx, 0121h 1431 00000E19 D2E5 <1> shl ch, cl 1432 00000E1B 7503E99001 <1> jz .cpudone ; only 8086 uses higher bits of shift count --> 1433 <1> 1434 00000E20 E884F8 <1> d4 call init_d4message 1435 00000E23 466F756E6420313836- <1> d4 asciz "Found 186+ processor",13,10 1435 00000E2C 2B2070726F63657373- <1> 1435 00000E35 6F720D0A00 <1> 1436 00000E3A FE06[9002] <1> inc byte [ machine ] ; 1 1437 00000E3E 54 <1> push sp 1438 00000E3F 58 <1> pop ax 1439 00000E40 39E0 <1> cmp ax, sp 1440 00000E42 7403E96901 <1> jne .cpudone ; 80186 pushes the adjusted value of sp --> 1441 <1> 1442 00000E47 E85DF8 <1> d4 call init_d4message 1443 00000E4A 466F756E6420323836- <1> d4 asciz "Found 286+ processor",13,10 1443 00000E53 2B2070726F63657373- <1> 1443 00000E5C 6F720D0A00 <1> 1444 <1> ; Determine the processor type. This is adapted from code in the 1445 <1> ; Pentium Family User's Manual, Volume 3: Architecture and 1446 <1> ; Programming Manual, Intel Corp., 1994, Chapter 5. That code contains 1447 <1> ; the following comment: 1448 <1> ; 1449 <1> ; This program has been developed by Intel Corporation. 1450 <1> ; Software developers have Intel's permission to incorporate 1451 <1> ; this source code into your software royalty free. 1452 <1> ; 1453 <1> ; Intel 286 CPU check. 1454 <1> ; Bits 12-15 of the flags register are always clear on the 1455 <1> ; 286 processor in real-address mode. 1456 <1> ; Bits 12-15 of the FLAGS register are always set on the 1457 <1> ; 8086 and 186 processor. 1458 00000E61 FE06[9002] <1> inc byte [ machine ] ; 2 1459 00000E65 9C <1> pushf ; save IF 1460 00000E66 9C <1> pushf ; get original flags into ax 1461 00000E67 58 <1> pop ax 1462 00000E68 0D00F0 <1> or ax, 0F000h ; try to set bits 12-15 1463 00000E6B 25FFFD <1> and ax, ~0200h ; clear IF 1464 00000E6E 50 <1> push ax ; save new flags value on stack 1465 00000E6F 9D <1> popf ; replace current flags value; DI 1466 00000E70 9C <1> pushf ; get new flags 1467 00000E71 58 <1> pop ax ; store new flags in ax 1468 00000E72 9D <1> popf ; restore IF 1469 00000E73 A900F0 <1> test ax, 0F000h ; if bits 12-15 clear, CPU = 80286 1470 00000E76 7503E93501 <1> jz .cpudone ; if 80286 --> 1471 <1> 1472 00000E7B E829F8 <1> d4 call init_d4message 1473 00000E7E 466F756E6420333836- <1> d4 asciz "Found 386+ processor",13,10 1473 00000E87 2B2070726F63657373- <1> 1473 00000E90 6F720D0A00 <1> 1474 <1> ; Intel 386 CPU check. 1475 <1> ; The AC bit, bit #18, is a new bit introduced in the EFLAGS 1476 <1> ; register on the Intel486 DX cpu to generate alignment faults. 1477 <1> ; This bit cannot be set on the Intel386 CPU. 1478 <1> ; 1479 <1> ; It is now safe to use 32-bit opcode/operands. 1480 <1> cpu 386 1480 ****************** <1> expansion: __CPU__ = [cpu 386] 1481 00000E95 800E[8500]80 <1> setopt [internalflags], has386 1481 ****************** <1> expansion: adr = '[internalflags]' 1481 ****************** <1> expansion: len = 15 1481 ****************** <1> expansion: tf = '[' 1481 ****************** <1> expansion: tb = ']' 1481 ****************** <1> expansion: adr = 'internalflags' 1481 ****************** <1> expansion: adr = internalflags 1482 00000E9A FE06[9002] <1> inc byte [ machine ] ; 3 1483 <1> 1484 00000E9E 89E3 <1> mov bx, sp ; save current stack pointer to align 1485 00000EA0 83E4FC <1> and sp, ~3 ; align stack to avoid AC fault 1486 00000EA3 669C <1> pushfd ; push original EFLAGS 1487 00000EA5 6658 <1> pop eax ; get original EFLAGS 1488 00000EA7 6689C1 <1> mov ecx, eax ; save original EFLAGS in ECX 1489 <1> 1490 00000EAA 663500000400 <1> xor eax, 40000h ; flip AC bit in EFLAGS 1491 00000EB0 25FFFD <1> and ax, ~0200h ; clear IF 1492 00000EB3 6650 <1> push eax ; put new EFLAGS value on stack 1493 00000EB5 669D <1> popfd ; replace EFLAGS value; DI 1494 00000EB7 669C <1> pushfd ; get new EFLAGS 1495 00000EB9 6658 <1> pop eax ; store new EFLAGS value in EAX 1496 00000EBB 89C8 <1> mov ax, cx ; ignore low bits (including IF) 1497 00000EBD 6639C8 <1> cmp eax, ecx 1498 00000EC0 7434 <1> je .cpudone_stack_eax_equals_ecx ; if 80386 --> 1499 <1> 1500 00000EC2 E8E2F7 <1> d4 call init_d4message 1501 00000EC5 466F756E6420343836- <1> d4 asciz "Found 486+ processor",13,10 1501 00000ECE 2B2070726F63657373- <1> 1501 00000ED7 6F720D0A00 <1> 1502 <1> ; Intel486 DX CPU, Intel487 SX NDP, and Intel486 SX CPU check. 1503 <1> ; Checking for ability to set/clear ID flag (bit 21) in EFLAGS 1504 <1> ; which indicates the presence of a processor with the ability 1505 <1> ; to use the CPUID instruction. 1506 00000EDC FE06[9002] <1> inc byte [ machine ] ; 4 1507 00000EE0 6689C8 <1> mov eax, ecx ; get original EFLAGS 1508 00000EE3 663500002000 <1> xor eax, 200000h ; flip ID bit in EFLAGS 1509 00000EE9 25FFFD <1> and ax, ~0200h ; clear IF 1510 00000EEC 6650 <1> push eax ; save new EFLAGS value on stack 1511 00000EEE 669D <1> popfd ; replace current EFLAGS value; DI 1512 00000EF0 669C <1> pushfd ; get new EFLAGS 1513 00000EF2 6658 <1> pop eax ; store new EFLAGS in EAX 1514 00000EF4 89C8 <1> mov ax, cx ; ignore low bits (including IF) 1515 <1> 1516 <1> .cpudone_stack_eax_equals_ecx: 1517 00000EF6 6651 <1> push ecx 1518 00000EF8 669D <1> popfd ; restore AC,ID bits in EFLAGS 1519 00000EFA 89DC <1> mov sp, bx ; restore sp 1520 <1> 1521 00000EFC 6639C8 <1> cmp eax, ecx ; check if it's changed 1522 00000EFF 0F84AD00 <1> je .cpudone ; if it's a 486 (can't toggle ID bit) --> 1523 <1> 1524 00000F03 E8A1F7 <1> d4 call init_d4message 1525 00000F06 466F756E642070726F- <1> d4 asciz "Found processor with CPUID support",13,10 1525 00000F0F 636573736F72207769- <1> 1525 00000F18 746820435055494420- <1> 1525 00000F21 737570706F72740D0A- <1> 1525 00000F2A 00 <1> 1526 <1> ; Execute CPUID instruction. 1527 <1> cpu 486 ; NASM (at least 2.10rc1) handles cpuid itself as a 1527 ****************** <1> expansion: __CPU__ = [cpu 486] 1528 <1> ; 586+ instruction, but we know better. So this 1529 <1> ; part is declared for 486 compatibility, and only 1530 <1> ; the cpuid instructions are emitted with 586 1531 <1> ; compatibility to appease NASM. 1532 <1> %if 0 1533 <1> d4 call init_d4message 1534 <1> d4 asciz "CPUID will NOT be executed, to work around official DOSBox releases",13,10 1535 <1> d4 jmp .cpudone 1536 <1> %endif 1537 00000F2B 6631C0 <1> xor eax, eax ; set up input for CPUID instruction 1538 00000F2E E876F7 <1> d4 call init_d4message 1539 00000F31 457865637574696E67- <1> d4 asciz "Executing CPUID 0",13,10 1539 00000F3A 20435055494420300D- <1> 1539 00000F43 0A00 <1> 1540 <1> [cpu 586] 1541 00000F45 0FA2 <1> cpuid 1542 <1> __CPU__ 1543 00000F47 E85DF7 <1> d4 call init_d4message 1544 00000F4A 435055494420302065- <1> d4 asciz "CPUID 0 executed",13,10 1544 00000F53 786563757465640D0A- <1> 1544 00000F5C 00 <1> 1545 00000F5D 6683F801 <1> cmp eax, byte 1 1546 00000F61 724D <1> jb .cpudone ; if 1 is not a valid input value for CPUID 1547 00000F63 6631C0 <1> xor eax, eax ; otherwise, run CPUID with eax = 1 1548 00000F66 6640 <1> inc eax 1549 00000F68 E83CF7 <1> d4 call init_d4message 1550 00000F6B 457865637574696E67- <1> d4 asciz "Executing CPUID 1",13,10 1550 00000F74 20435055494420310D- <1> 1550 00000F7D 0A00 <1> 1551 <1> [cpu 586] 1552 00000F7F 0FA2 <1> cpuid 1553 <1> __CPU__ 1554 00000F81 E823F7 <1> d4 call init_d4message 1555 00000F84 435055494420312065- <1> d4 asciz "CPUID 1 executed",13,10 1555 00000F8D 786563757465640D0A- <1> 1555 00000F96 00 <1> 1556 <1> %if _MMXSUPP 1557 00000F97 66F7C200008000 <1> test edx, 80_0000h 1558 00000F9E 0F9506[9302] <1> setnz byte [has_mmx] 1559 <1> %endif 1560 <1> 1561 00000FA3 88E0 <1> mov al, ah 1562 00000FA5 240F <1> and al, 0Fh ; bits 8..11 are the model number 1563 00000FA7 3C06 <1> cmp al, 6 1564 00000FA9 7202 <1> jb .below686 ; if < 6 1565 00000FAB B006 <1> mov al, 6 ; if >= 6, set it to 6 1566 <1> .below686: 1567 00000FAD A2[9002] <1> mov byte [ machine ], al; save machine type (486, 586, 686+) 1568 <1> 1569 <1> .cpudone: 1570 <1> cpu 8086 1570 ****************** <1> expansion: __CPU__ = [cpu 8086] 1571 00000FB0 E8F4F6 <1> d4 call init_d4message 1572 00000FB3 44657465726D696E69- <1> d4 asciz "Determining floating-point unit",13,10 1572 00000FBC 6E6720666C6F617469- <1> 1572 00000FC5 6E672D706F696E7420- <1> 1572 00000FCE 756E69740D0A00 <1> 1573 <1> 1574 <1> ; Next determine the type of FPU in a system and set the mach_87 1575 <1> ; variable with the appropriate value. All registers are used by 1576 <1> ; this code; none are preserved. 1577 <1> ; 1578 <1> ; Coprocessor check. 1579 <1> ; The algorithm is to determine whether the floating-point 1580 <1> ; status and control words can be written to. If not, no 1581 <1> ; coprocessor exists. If the status and control words can be 1582 <1> ; written to, the correct coprocessor is then determined 1583 <1> ; depending on the processor ID. The Intel 386 CPU can 1584 <1> ; work with either an Intel 287 NDP or an Intel 387 NDP. 1585 <1> ; The infinity of the coprocessor must be checked 1586 <1> ; to determine the correct coprocessor ID. 1587 00000FD5 A0[9002] <1> mov al, byte [ machine ] 1588 00000FD8 A2[9202] <1> mov byte [ mach_87 ], al ; by default, set mach_87 to machine 1589 00000FDB FE06[9102] <1> inc byte [ has_87 ] 1590 00000FDF 3C05 <1> cmp al, 5 ; a Pentium or above always will have a FPU 1591 00000FE1 7341 <1> jae .fpudone 1592 00000FE3 FE0E[9102] <1> dec byte [ has_87 ] ; assume no FPU 1593 <1> 1594 00000FE7 DBE3 <1> fninit ; reset FPU 1595 00000FE9 B0FF <1> mov al, -1 ; initialise with a non-zero value 1596 00000FEB 50 <1> push ax 1597 00000FEC 89E3 <1> mov bx, sp 1598 00000FEE 36DD3F <1> fnstsw word [ss:bx] ; save FP status word 1599 00000FF1 58 <1> pop ax ; retrieve it 1600 00000FF2 84C0 <1> test al, al 1601 00000FF4 752E <1> jnz .fpudone ; if no FPU present 1602 <1> 1603 <1> ; al = 0 here 1604 00000FF6 50 <1> push ax 1605 00000FF7 36D93F <1> fnstcw word [ss:bx] ; save FP control word 1606 00000FFA 58 <1> pop ax ; retrieve it 1607 00000FFB 253F10 <1> and ax, 103Fh ; see if selected parts look OK 1608 00000FFE 83F83F <1> cmp ax, byte 3Fh 1609 00001001 7521 <1> jne .fpudone ; if no FPU present 1610 00001003 FE06[9102] <1> inc byte [ has_87 ] ; there's an FPU 1611 <1> 1612 <1> ; If we're using a 386, check for 287 vs. 387 by checking whether 1613 <1> ; +infinity = -infinity. 1614 00001007 803E[9002]03 <1> cmp byte [ machine ], 3 1615 0000100C 7516 <1> jne .fpudone ; if not a 386 1616 <1> cpu 386 1616 ****************** <1> expansion: __CPU__ = [cpu 386] 1617 0000100E D9E8 <1> fld1 ; must use default control from FNINIT 1618 00001010 D9EE <1> fldz ; form infinity 1619 00001012 DEF9 <1> fdivp ST1 ; 1 / 0 = infinity 1620 00001014 D9C0 <1> fld ST0 1621 00001016 D9E0 <1> fchs ; form negative infinity 1622 00001018 DED9 <1> fcompp ; see if they are the same and remove them 1623 0000101A 9BDFE0 <1> fstsw ax 1624 0000101D 9E <1> sahf ; look at status from FCOMPP 1625 0000101E 7504 <1> jne .fpudone ; if they are different, then it's a 387 1626 00001020 FE0E[9202] <1> dec byte [ mach_87 ] ; otherwise, it's a 287 1627 <1> cpu 8086 1627 ****************** <1> expansion: __CPU__ = [cpu 8086] 1628 <1> .fpudone: 1629 <1> 1630 <1> %if _ONLY386 1631 <1> testopt [internalflags], has386 1632 <1> jnz @F ; okay --> 1633 <1> %if _BOOTLDR 1634 <1> testopt [internalflags], nodosloaded 1635 <1> lahf ; remember status 1636 <1> %endif 1637 <1> mov dx, imsg.no386 1638 <1> call init_putsz_cs ; display the error 1639 <1> %if _BOOTLDR 1640 <1> sahf 1641 <1> jnz init_booterror.soft ; abort for loader --> 1642 <1> %endif 1643 <1> mov ax, 4C01h 1644 <1> int 21h ; abort our process 1645 <1> 1646 <1> @@: 1647 <1> %elif _ONLYNON386 1648 <1> testopt [internalflags], has386 1649 <1> jz @F ; okay --> 1650 <1> mov dx, imsg.386 1651 <1> call init_putsz_cs ; display the warning 1652 <1> @@: 1653 <1> %endif 1654 <1> 1655 <1> ; Determine which patch table to use, then patch 1656 <1> ; out either the 386+ or non-386 code as appropriate. 1657 00001024 8E06[2A02] <1> mov es, [code_seg] 1658 00001028 BE[1C08] <1> mov si, patch_386_table ; table of patches to set for 386+ 1659 <1> %if __patch_386_table_method == 1 1660 0000102B B90E00 <1> mov cx, patch_386_table_size_w 1661 <1> %endif 1662 0000102E F606[8500]80 <1> testopt [internalflags], has386 1662 ****************** <1> expansion: adr = '[internalflags]' 1662 ****************** <1> expansion: len = 15 1662 ****************** <1> expansion: tf = '[' 1662 ****************** <1> expansion: tb = ']' 1662 ****************** <1> expansion: adr = 'internalflags' 1662 ****************** <1> expansion: adr = internalflags 1663 <1> %if __patch_386_table_method == 1 1664 00001033 752F <1> jnz .patch1 ; set these patches (CPU is 386+) --> 1665 <1> %else 1666 <1> jnz .patch2 ; set these patches (CPU is 386+) --> 1667 <1> %endif 1668 <1> %ifn _ONLYNON386 1669 00001035 26C606[582C]3E <1> mov byte [es:..@patch_no386_ds], 3Eh ; write a ds prefix 1670 0000103B 26C606[7D2C]CF <1> mov byte [es:..@patch_no386_iret], 0CFh ; write an iret instruction 1671 <1> %endif 1672 00001041 BE[D207] <1> mov si, patch_no386_table ; table of patches to set for 16-bit CPU 1673 <1> %if __patch_no386_table_method == 1 1674 <1> mov cx, patch_no386_table_size_w 1675 <1> %if __patch_386_table_method == 2 1676 <1> jmp short .patch1 ; skip .patch2 code --> 1677 <1> %endif 1678 <1> %endif 1679 <1> 1680 <1> ; Complicated table patch code. 1681 <1> %if __patch_no386_table_method == 2 || __patch_386_table_method == 2 1682 <1> .patch2: 1683 00001044 BB[0000] <1> mov bx, code_start ; initialise offset 1684 00001047 31C0 <1> xor ax, ax ; initialise ah 1685 <1> .looppatch2: 1686 00001049 2EAC <1> cs lodsb 1687 0000104B 01C3 <1> add bx, ax ; skip number of bytes to skip 1688 0000104D 3CFF <1> cmp al, 255 ; really repositioning? 1689 0000104F 7504 <1> jne .l2patch ; no --> 1690 00001051 93 <1> xchg ax, bx ; (to preserve ah) 1691 00001052 2EAD <1> cs lodsw ; ax = new address 1692 00001054 93 <1> xchg ax, bx ; bx = new address 1693 <1> .l2patch: 1694 00001055 2EAC <1> cs lodsb 1695 00001057 89C1 <1> mov cx, ax ; cx = number of bytes to patch 1696 00001059 E315 <1> jcxz .patchesdone ; end of table --> 1697 <1> .l2patchbyte: 1698 0000105B 26C60790 <1> mov byte [es:bx], 90h ; patch 1699 0000105F 43 <1> inc bx 1700 00001060 E2F9 <1> loop .l2patchbyte ; as many bytes as specified 1701 00001062 EBE5 <1> jmp short .looppatch2 1702 <1> %endif 1703 <1> 1704 <1> ; Simple table patch code. 1705 <1> %if __patch_386_table_method == 1 || __patch_no386_table_method == 1 1706 <1> .patch1: 1707 00001064 E30A <1> jcxz .patchesdone 1708 <1> .looppatch1: 1709 00001066 2EAD <1> cs lodsw ; load address of patch 1710 00001068 89C3 <1> mov bx, ax 1711 0000106A 26C60790 <1> mov byte [es:bx], 90h ; patch 1712 0000106E E2F6 <1> loop .looppatch1 1713 <1> %endif 1714 <1> .patchesdone: 1715 <1> 1716 <1> ; Check for dosemu. This is done for the boot loaded instance 1717 <1> ; too, as we might be running as DOS inside dosemu. 1718 <1> %if _DOSEMU 1719 00001070 B800F0 <1> mov ax, 0F000h 1720 00001073 8EC0 <1> mov es, ax 1721 00001075 1E <1> push ds 1722 00001076 0E <1> push cs 1723 00001077 1F <1> pop ds ; avoid "repe cs cmpsw" (8086 bug) 1724 00001078 BFF5FF <1> mov di, 0FFF5h 1725 0000107B BE[B40A] <1> mov si, imsg.dosemudate 1726 0000107E B90400 <1> mov cx, 4 1727 00001081 F3A7 <1> repe cmpsw ; running in DosEmu? 1728 00001083 1F <1> pop ds 1729 00001084 7505 <1> jne .dosemuchecked 1730 00001086 800E[8700]01 <1> setopt [internalflags], runningdosemu 1730 ****************** <1> expansion: adr = '[internalflags]' 1730 ****************** <1> expansion: len = 15 1730 ****************** <1> expansion: tf = '[' 1730 ****************** <1> expansion: tb = ']' 1730 ****************** <1> expansion: adr = 'internalflags' 1730 ****************** <1> expansion: adr = internalflags 1731 <1> .dosemuchecked: 1732 <1> %endif 1733 <1> 1734 0000108B 1E <1> push ds 1735 0000108C 07 <1> pop es ; => lDEBUG_DATA_ENTRY 1736 <1> 1737 0000108D BF[0000] <1> mov di, line_in 1738 00001090 B0FF <1> mov al, 255 1739 00001092 AA <1> stosb 1740 00001093 B000 <1> mov al, 0 1741 00001095 AA <1> stosb 1742 00001096 B00D <1> mov al, 13 1743 00001098 AA <1> stosb ; overwrite line_in beginning 1744 <1> 1745 00001099 BC[C005] <1> mov sp, stack_end ; stack pointer (paragraph aligned) 1746 0000109C C706[5802][BE05] <1> mov word [ savesp ], stack_end-2; save new SP minus two (for the word we'll push) 1747 <1> ..@init_first equ line_in.end 1748 <1> ; ..@init_behind equ trim_overflow 1749 <1> ..@init_behind equ stack 1750 000010A2 BF[0101] <1> mov di, ..@init_first 1751 000010A5 B9BF02 <1> mov cx, ..@init_behind - ..@init_first 1752 000010A8 31C0 <1> xor ax, ax 1753 000010AA F3AA <1> rep stosb ; initialise breakpoint lists, line_out 1754 <1> %if 1 1755 <1> %if ..@init_behind != stack 1756 <1> mov di, stack 1757 <1> %endif 1758 000010AC B90002 <1> mov cx, stack_end - stack 1759 000010AF B05E <1> mov al, 5Eh 1760 000010B1 F3AA <1> rep stosb ; initialise the stack 1761 <1> %endif 1762 <1> 1763 000010B3 C606[A801]30 <1> mov byte [ trim_overflow ], '0' ; initialise line_out so the trimputs loop doesn't overflow 1764 <1> %if _NUM_G_BP 1765 000010B8 C606[6701]00 <1> mov byte [ g_bplist.used_count ], 0 1766 <1> %endif 1767 <1> 1768 <1> 1769 <1> %if _BOOTLDR 1770 000010BD F606[8500]40 <1> testopt [internalflags], nodosloaded 1770 ****************** <1> expansion: adr = '[internalflags]' 1770 ****************** <1> expansion: len = 15 1770 ****************** <1> expansion: tf = '[' 1770 ****************** <1> expansion: tb = ']' 1770 ****************** <1> expansion: adr = 'internalflags' 1770 ****************** <1> expansion: adr = internalflags 1771 000010C2 7503E9A700 <1> jz .commandline 1772 000010C7 E8DDF5 <1> d4 call init_d4message 1773 000010CA 3338362D72656C6174- <1> d4 asciz "386-related patches applied, boot initialisation proceeding",13,10 1773 000010D3 656420706174636865- <1> 1773 000010DC 73206170706C696564- <1> 1773 000010E5 2C20626F6F7420696E- <1> 1773 000010EE 697469616C69736174- <1> 1773 000010F7 696F6E2070726F6365- <1> 1773 00001100 6564696E670D0A00 <1> 1774 <1> 1775 <1> 1776 <1> ; Set up interrupt vectors. 1777 00001108 B90700 <1> mov cx, inttab_number 1778 0000110B BE[F402] <1> mov si, inttab 1779 0000110E BF[0C03] <1> mov di, intsave 1780 <1> .bootintloop: 1781 <1> 1782 <1> ; assumes ss = lDEBUG_DATA_ENTRY 1783 00001111 36AC <1> ss lodsb 1784 00001113 31DB <1> xor bx, bx 1785 00001115 8EDB <1> mov ds, bx 1786 00001117 88C3 <1> mov bl, al 1787 00001119 01DB <1> add bx, bx 1788 0000111B 01DB <1> add bx, bx 1789 0000111D FF7702 <1> push word [ bx+2 ] 1790 00001120 FF37 <1> push word [ bx ] ; get vector 1791 00001122 368F05 <1> pop word [ ss:di ] 1792 00001125 368F4502 <1> pop word [ ss:di+2 ] ; store it 1793 00001129 AF <1> scasw 1794 0000112A AF <1> scasw ; add di, 4 1795 <1> %if _DEBUG ; vectors are set only when debuggee runs 1796 0000112B AD <1> lodsw ; add si, 2 1797 <1> %else 1798 <1> ss lodsw ; get address 1799 <1> mov word [ bx+2 ], ss 1800 <1> mov word [ bx ], ax ; set interrupt vector 1801 <1> %endif 1802 0000112C E2E3 <1> loop .bootintloop 1803 <1> 1804 0000112E 16 <1> push ss 1805 0000112F 1F <1> pop ds 1806 00001130 16 <1> push ss 1807 00001131 07 <1> pop es 1808 <1> 1809 00001132 E872F5 <1> d4 call init_d4message 1810 00001135 4A756D70696E672074- <1> d4 asciz "Jumping to final boot initialisation code",13,10 1810 0000113E 6F2066696E616C2062- <1> 1810 00001147 6F6F7420696E697469- <1> 1810 00001150 616C69736174696F6E- <1> 1810 00001159 20636F64650D0A00 <1> 1811 00001161 FF36[2A02] <1> push word [code_seg] 1812 00001165 2EFF36[6C11] <1> push word [cs:.word_initcont.boot_entry] 1813 0000116A CB <1> retf 1814 <1> 1815 0000116B 90 <1> align 2 1816 <1> .word_initcont.boot_entry: 1817 0000116C [867E] <1> dw initcont.boot_entry 1818 <1> %endif 1819 <1> 1820 <1> .commandline: 1821 <1> 1822 <1> ; Interpret switches and erase them from the command line. 1823 0000116E B80037 <1> mov ax, 3700h ; get switch character 1824 00001171 B22F <1> mov dl, '/' ; preset with default value 1825 00001173 CD21 <1> int 21h 1826 00001175 8816[9602] <1> mov byte [ switchar ], dl 1827 00001179 80FA2F <1> cmp dl, '/' 1828 0000117C 7504 <1> jne .notslash 1829 0000117E 8816[9702] <1> mov byte [ swch1 ], dl 1830 <1> .notslash: 1831 00001182 BE8100 <1> mov si, DTA+1 1832 <1> .blankloop: 1833 00001185 AC <1> lodsb 1834 00001186 3C20 <1> cmp al, 32 1835 00001188 74FB <1> je .blankloop 1836 0000118A 3C09 <1> cmp al, 9 1837 0000118C 74F7 <1> je .blankloop 1838 <1> 1839 <1> ; Process the /? switch (or the [switchar]? switch). 1840 <1> ; If switchar != / and /? occurs, make sure nothing follows. 1841 0000118E 38D0 <1> cmp al, dl 1842 00001190 7424 <1> je .switch ; if switch character --> 1843 00001192 3C2F <1> cmp al, '/' 1844 00001194 7534 <1> jne .noswitches ; if not the help switch --> 1845 00001196 8A04 <1> mov al, byte [ si ] 1846 00001198 3C3F <1> cmp al, '?' 1847 0000119A 752E <1> jne .noswitches ; if not /? 1848 0000119C 8A4401 <1> mov al, byte [ si+1 ] 1849 0000119F 3C20 <1> cmp al, 32 1850 000011A1 7408 <1> je .help ; if nothing after /? 1851 000011A3 3C09 <1> cmp al, 9 1852 000011A5 7404 <1> je .help ; ditto 1853 000011A7 3C0D <1> cmp al, 13 1854 000011A9 751F <1> jne .noswitches ; if something after /? --> 1855 <1> 1856 <1> ; Print a help message 1857 <1> .help: 1858 000011AB BA[C208] <1> mov dx, imsg.help ; command-line help message 1859 000011AE E8AAFA <1> call init_putsz_cs ; print string 1860 000011B1 B8004C <1> mov ax, 4C00h 1861 000011B4 CD21 <1> int 21h ; done 1862 <1> 1863 <1> ; Do the (proper) switches. 1864 000011B6 AC <1> .switch:lodsb 1865 000011B7 3C3F <1> cmp al,'?' 1866 000011B9 74F0 <1> je .help ; if -? 1867 <1> 1868 <1> ; Other switches may go here. 1869 000011BB 2EA2[EC09] <1> mov [ cs:imsg.invalidswitch_a ], al 1870 000011BF BA[DB09] <1> mov dx, imsg.invalidswitch ; Invalid switch 1871 000011C2 E896FA <1> call init_putsz_cs ; print string 1872 000011C5 B8014C <1> mov ax, 4C01h ; Quit and return error status 1873 000011C8 CD21 <1> int 21h 1874 <1> 1875 <1> .noswitches: 1876 <1> ; Feed the remaining command line to the 'n' command. 1877 000011CA 4E <1> dec si 1878 000011CB 56 <1> push si 1879 <1> 1880 <1> ; Set up interrupt vectors. 1881 000011CC B90700 <1> mov cx, inttab_number 1882 000011CF BE[F402] <1> mov si, inttab 1883 000011D2 BF[0C03] <1> mov di, intsave 1884 <1> .intloop: 1885 000011D5 AC <1> lodsb 1886 000011D6 B435 <1> mov ah, 35h 1887 000011D8 CD21 <1> int 21h ; get vector 1888 000011DA 891D <1> mov word [ di ], bx 1889 000011DC AF <1> scasw ; add di, 2 1890 000011DD 8C05 <1> mov word [ di ], es ; store it 1891 000011DF AF <1> scasw ; add di, 2 1892 <1> %if _DEBUG ; vectors are set only when debuggee runs 1893 000011E0 AD <1> lodsw ; add si, 2 1894 <1> %else 1895 <1> xchg ax, dx 1896 <1> lodsw ; get address 1897 <1> xchg ax, dx 1898 <1> mov ah, 25h ; set interrupt vector 1899 <1> int 21h ; ds => lDEBUG_DATA_ENTRY 1900 <1> %endif 1901 000011E1 E2F2 <1> loop .intloop 1902 <1> 1903 <1> %if _MCB 1904 000011E3 B452 <1> mov ah, 52h ; get list of lists 1905 000011E5 CD21 <1> int 21h 1906 000011E7 268B47FE <1> mov ax, word [ es:bx-2 ]; start of MCBs 1907 000011EB A3[8602] <1> mov word [ wMCB ], ax 1908 <1> %endif 1909 000011EE B434 <1> mov ah, 34h 1910 000011F0 CD21 <1> int 21h 1911 000011F2 891E[8802] <1> mov word [ pInDOS+0 ], bx 1912 000011F6 8C06[8A02] <1> mov word [ pInDOS+2 ], es 1913 <1> %if _PM 1914 <1> mov word [ InDosSegm ], es 1915 <1> %endif 1916 <1> 1917 <1> ; get address of DOS swappable DATA area 1918 <1> ; to be used to get/set PSP and thus avoid DOS calls 1919 <1> ; will not work for DOS < 3 1920 <1> %if _USESDA 1921 000011FA 1E <1> push ds 1922 000011FB B8065D <1> mov ax, 5D06h 1923 000011FE CD21 <1> int 21h 1924 00001200 8CD8 <1> mov ax, ds 1925 00001202 1F <1> pop ds 1926 00001203 7207 <1> jc .noSDA 1927 00001205 8936[8C02] <1> mov word [ pSDA+0 ], si 1928 00001209 A3[8E02] <1> mov word [ pSDA+2 ], ax 1929 <1> %if _PM 1930 <1> mov word [ SDASegm ], ax 1931 <1> %endif 1932 <1> .noSDA: 1933 <1> %endif 1934 <1> 1935 <1> 1936 <1> ; Disabled this. hook2F (debug.asm) now detects this condition. 1937 <1> %if _PM && 0 1938 <1> ; Windows 9x and DosEmu are among those hosts which handle some 1939 <1> ; V86 Ints internally without first calling the interrupt chain. 1940 <1> ; This causes various sorts of troubles and incompatibilities; 1941 <1> ; in our case, hooking interrupt 2Fh would not intercept calls 1942 <1> ; made to the DPMI interface because the host sees them first. 1943 <1> %if _WIN9XSUPP 1944 <1> mov ax, 1600h ; running in a Win9x DOS box? 1945 <1> int 2Fh 1946 <1> cmp al, 4 1947 <1> jge .no2Fhook ; this is intentionally a signed comparison! 1948 <1> %endif 1949 <1> %if _DOSEMU 1950 <1> testopt [internalflags], runningdosemu 1951 <1> jnz .no2Fhook 1952 <1> %endif 1953 <1> %if _WIN9XSUPP || _DOSEMU 1954 <1> jmp short .dpmihostchecked 1955 <1> .no2Fhook: 1956 <1> setopt [internalflags], nohook2F 1957 <1> .dpmihostchecked: 1958 <1> %endif 1959 <1> %endif 1960 0000120C 1E <1> push ds 1961 0000120D 07 <1> pop es 1962 <1> 1963 <1> ; Save, then modify termination address and parent PSP. 1964 0000120E BE0A00 <1> mov si, TPIV 1965 00001211 BF[8002] <1> mov di, psp22 1966 00001214 A5 <1> movsw 1967 00001215 A5 <1> movsw ; save Int22 1968 00001216 BA[B84A] <1> mov dx, debug22 1969 00001219 8954FC <1> mov word [ si-4 ], dx 1970 0000121C 8C5CFE <1> mov word [ si-2 ], ds ; set pspInt22 (required) 1971 0000121F BE1600 <1> mov si, 16h 1972 00001222 A5 <1> movsw ; save parent 1973 00001223 8C5CFE <1> mov word [ si-2 ], ds ; set pspParent 1974 00001226 B82225 <1> mov ax, 2522h ; set Int22 1975 00001229 CD21 <1> int 21h ; (not really required) 1976 <1> 1977 <1> ; shrink to required resident size 1978 0000122B 1E <1> push ds 1979 0000122C 07 <1> pop es 1980 0000122D B44A <1> mov ah, 4Ah 1981 0000122F 2E8B1E[5008] <1> mov bx, word [cs:memsize] 1982 <1> 1983 00001234 FF36[2A02] <1> push word [code_seg] 1984 00001238 2EFF36[3E12] <1> push word [cs:.word_initcont] 1985 0000123D CB <1> retf 1986 <1> 1987 <1> align 2 1988 <1> .word_initcont: 1989 0000123E [787E] <1> dw initcont 1990 <1> 1991 <1> 1992 <1> usesection lDEBUG_CODE 1992 ****************** <1> expansion: __SECT__ = [section lDEBUG_CODE] 1993 <1> initcont: 1994 00007E78 CD21 <1> int 21h ; resize to required 1995 <1> ; jc ... ; (expected to work since it had to be larger. also we hooked ints) 1996 <1> 1997 00007E7A 1E <1> push ds 1998 00007E7B 07 <1> pop es 1999 00007E7C E8F7E8 <1> call getint2324 ; init run2324 to avoid using or displaying NUL vectors 2000 <1> 2001 00007E7F 1E <1> push ds 2002 00007E80 07 <1> pop es 2003 00007E81 5E <1> pop si 2004 00007E82 AC <1> lodsb 2005 00007E83 E8ECDF <1> call nn ; process the rest of the command line 2006 <1> 2007 <1> .boot_entry: 2008 00007E86 1E <1> push ds 2009 00007E87 07 <1> pop es ; => lDEBUG_DATA_ENTRY 2010 <1> 2011 00007E88 BE[E301] <1> mov si, cmd3 2012 <1> %if _BOOTLDR 2013 00007E8B F606[8500]40 <1> testopt [internalflags], nodosloaded 2013 ****************** <1> expansion: adr = '[internalflags]' 2013 ****************** <1> expansion: len = 15 2013 ****************** <1> expansion: tf = '[' 2013 ****************** <1> expansion: tb = ']' 2013 ****************** <1> expansion: adr = 'internalflags' 2013 ****************** <1> expansion: adr = internalflags 2014 00007E90 7402 <1> jz @F 2015 00007E92 FFE6 <1> jmp si ; directly jump to cmd3 of the installed image 2016 <1> @@: 2016 ****************** <1> expansion: @BBBB (case-insensitive) = ..@.@@.1.247 2016 ****************** <1> expansion: @BBB (case-insensitive) = ..@.@@.1.248 2016 ****************** <1> expansion: @BB (case-insensitive) = ..@.@@.1.249 2016 ****************** <1> expansion: @B (case-insensitive) = ..@.@@.1.250 2016 ****************** <1> expansion: @F (case-insensitive) = ..@.@@.1.251 2016 ****************** <1> expansion: @FF (case-insensitive) = ..@.@@.1.252 2016 ****************** <1> expansion: @FFF (case-insensitive) = ..@.@@.1.253 2016 ****************** <1> expansion: @FFFF (case-insensitive) = ..@.@@.1.254 2016 ****************** <1> expansion: @B4 (case-insensitive) = ..@.@@.1.247 2016 ****************** <1> expansion: @B3 (case-insensitive) = ..@.@@.1.248 2016 ****************** <1> expansion: @B2 (case-insensitive) = ..@.@@.1.249 2016 ****************** <1> expansion: @B1 (case-insensitive) = ..@.@@.1.250 2016 ****************** <1> expansion: @F1 (case-insensitive) = ..@.@@.1.251 2016 ****************** <1> expansion: @F2 (case-insensitive) = ..@.@@.1.252 2016 ****************** <1> expansion: @F3 (case-insensitive) = ..@.@@.1.253 2016 ****************** <1> expansion: @F4 (case-insensitive) = ..@.@@.1.254 2016 ****************** <1> expansion: __@@_num = 255 2017 <1> %endif 2018 00007E94 56 <1> push si 2019 00007E95 E931DD <1> jmp ll3 ; load a program if one has been given at the command line 6688 6689 usesection INIT 6689 ****************** expansion: __SECT__ = [section INIT] 6690 align 16 6691 init_size equ $-section.INIT.vstart 6692 endarea init, 1 6693 6694 6695 numdef SHOWINITSIZE, 0 6695 ****************** expansion: _SHOWINITSIZE = 1 6696 %if _SHOWINITSIZE 6697 %assign INITSIZE init_size 6697 ****************** expansion: INITSIZE = 4672 6698 %warning init holds INITSIZE bytes 6698 ****************** warning: init holds 4672 bytes [-w+user] 6699 %endif 6700 6701 6702 usesection lDEBUG_CODE 6702 ****************** expansion: __SECT__ = [section lDEBUG_CODE] 6703 00007E98 90 align 16 6704 ldebug_code_size equ $-section.lDEBUG_CODE.vstart 6705 endarea ldebug_code, 1 6706 6707 6708 auxbuff_size: equ (_AUXBUFFSIZE+15) & ~15 6709 endarea auxbuff, 1 6710 6713 transimagepsp_size: equ 100h+ldebug_data_entry_size +asmtable1_size+asmtable2_size +datastack_size+ldebug_code_size+init_size 6714 endarea transimagepsp, 1 ; size of PSP and image during installation 6715 6718 pspsegment_size: equ 100h+ldebug_data_entry_size +asmtable1_size+asmtable2_size +datastack_size 6719 endarea pspsegment, 1 ; size of PSP and image when installed 6720 6721 resimagepsp_size: equ pspsegment_size+ldebug_code_size+auxbuff_size 6722 endarea resimagepsp, 1 ; size of PSP and image when installed 6723 6724 6725 %if transimagepsp_size > resimagepsp_size 6726 %fatal "resimagepsp_size assumed larger" 6727 %endif 6728 6729 %assign __CHECK_RESIDENTSIZE pspsegment_size 6729 ****************** expansion: __CHECK_RESIDENTSIZE = 30624 6730 %if __CHECK_RESIDENTSIZE > (64 * 1024) 6731 %error resident size of PSP segment too large (%[__CHECK_RESIDENTSIZE]) 6732 %endif 6733 6734 %if CODE_INSURE_COUNT 6735 %warning code_insure_low_byte_not_0CCh needed CODE_INSURE_COUNT times 6736 %endif