Factored parseAddrReference()
This commit is contained in:
parent
5f622303b4
commit
375ddc12f3
4 changed files with 671 additions and 590 deletions
|
|
@ -839,13 +839,13 @@ if (DEBUGGER) {
|
|||
/* 0x8F */ [DebuggerX86.INS.POP, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT],
|
||||
|
||||
/* 0x90 */ [DebuggerX86.INS.NOP],
|
||||
/* 0x91 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x92 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x93 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_BX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x94 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_SP | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x95 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_BP | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x96 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_SI | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x97 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_DI | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x91 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x92 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x93 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_BX | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x94 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_SP | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x95 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_BP | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x96 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_SI | DebuggerX86.TYPE_BOTH],
|
||||
/* 0x97 */ [DebuggerX86.INS.XCHG, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_DI | DebuggerX86.TYPE_BOTH],
|
||||
|
||||
/* 0x98 */ [DebuggerX86.INS.CBW],
|
||||
/* 0x99 */ [DebuggerX86.INS.CWD],
|
||||
|
|
@ -874,34 +874,34 @@ if (DEBUGGER) {
|
|||
/* 0xAE */ [DebuggerX86.INS.SCASB, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_ESDI | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xAF */ [DebuggerX86.INS.SCASW, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_ESDI | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xB0 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB1 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB2 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB3 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB4 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB5 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB6 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB7 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB0 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB1 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB2 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB3 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB4 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB5 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB6 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xB7 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BH | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xB8 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xB9 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBA */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBB */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBC */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_SP | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBD */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BP | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBE */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_SI | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBF */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DI | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xB8 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xB9 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_CX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBA */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBB */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBC */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_SP | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBD */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_BP | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBE */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_SI | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xBF */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_DI | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xC0 */ [DebuggerX86.INS.GRP2B, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_BOTH | DebuggerX86.TYPE_80186, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC1 */ [DebuggerX86.INS.GRP2W, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_BOTH | DebuggerX86.TYPE_80186, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC2 */ [DebuggerX86.INS.RET, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xC3 */ [DebuggerX86.INS.RET],
|
||||
/* 0xC4 */ [DebuggerX86.INS.LES, DebuggerX86.TYPE_REG | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_MODMEM | DebuggerX86.TYPE_SEGP | DebuggerX86.TYPE_IN],
|
||||
/* 0xC5 */ [DebuggerX86.INS.LDS, DebuggerX86.TYPE_REG | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_MODMEM | DebuggerX86.TYPE_SEGP | DebuggerX86.TYPE_IN],
|
||||
/* 0xC6 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC7 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xC4 */ [DebuggerX86.INS.LES, DebuggerX86.TYPE_REG | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_MODMEM | DebuggerX86.TYPE_SEGP | DebuggerX86.TYPE_IN],
|
||||
/* 0xC5 */ [DebuggerX86.INS.LDS, DebuggerX86.TYPE_REG | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_MODMEM | DebuggerX86.TYPE_SEGP | DebuggerX86.TYPE_IN],
|
||||
/* 0xC6 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC7 */ [DebuggerX86.INS.MOV, DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xC8 */ [DebuggerX86.INS.ENTER, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN | DebuggerX86.TYPE_80286, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC8 */ [DebuggerX86.INS.ENTER, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN | DebuggerX86.TYPE_80286, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xC9 */ [DebuggerX86.INS.LEAVE, DebuggerX86.TYPE_NONE | DebuggerX86.TYPE_80286],
|
||||
/* 0xCA */ [DebuggerX86.INS.RETF, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xCB */ [DebuggerX86.INS.RETF],
|
||||
|
|
@ -910,10 +910,10 @@ if (DEBUGGER) {
|
|||
/* 0xCE */ [DebuggerX86.INS.INTO],
|
||||
/* 0xCF */ [DebuggerX86.INS.IRET],
|
||||
|
||||
/* 0xD0 */ [DebuggerX86.INS.GRP2B1,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_ONE | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xD1 */ [DebuggerX86.INS.GRP2W1,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_ONE | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xD2 */ [DebuggerX86.INS.GRP2BC,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_IN],
|
||||
/* 0xD3 */ [DebuggerX86.INS.GRP2WC,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_IN],
|
||||
/* 0xD0 */ [DebuggerX86.INS.GRP2B1,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_ONE | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xD1 */ [DebuggerX86.INS.GRP2W1,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_ONE | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xD2 */ [DebuggerX86.INS.GRP2BC,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_IN],
|
||||
/* 0xD3 */ [DebuggerX86.INS.GRP2WC,DebuggerX86.TYPE_MODRM | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_BOTH, DebuggerX86.TYPE_CL | DebuggerX86.TYPE_IN],
|
||||
/* 0xD4 */ [DebuggerX86.INS.AAM, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE],
|
||||
/* 0xD5 */ [DebuggerX86.INS.AAD, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE],
|
||||
/* 0xD6 */ [DebuggerX86.INS.SALC],
|
||||
|
|
@ -932,19 +932,19 @@ if (DEBUGGER) {
|
|||
/* 0xE1 */ [DebuggerX86.INS.LOOPZ, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE2 */ [DebuggerX86.INS.LOOP, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE3 */ [DebuggerX86.INS.JCXZ, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE4 */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE5 */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE6 */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_IN],
|
||||
/* 0xE7 */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_IN],
|
||||
/* 0xE4 */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE5 */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xE6 */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_IN],
|
||||
/* 0xE7 */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xE8 */ [DebuggerX86.INS.CALL, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xE9 */ [DebuggerX86.INS.JMP, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_WORD | DebuggerX86.TYPE_IN],
|
||||
/* 0xEA */ [DebuggerX86.INS.JMP, DebuggerX86.TYPE_IMM | DebuggerX86.TYPE_FARP | DebuggerX86.TYPE_IN],
|
||||
/* 0xEB */ [DebuggerX86.INS.JMP, DebuggerX86.TYPE_IMMREL | DebuggerX86.TYPE_BYTE | DebuggerX86.TYPE_IN],
|
||||
/* 0xEC */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xED */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xEE */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_IN],
|
||||
/* 0xEF */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_IN],
|
||||
/* 0xEC */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xED */ [DebuggerX86.INS.IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN],
|
||||
/* 0xEE */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AL | DebuggerX86.TYPE_IN],
|
||||
/* 0xEF */ [DebuggerX86.INS.OUT, DebuggerX86.TYPE_DX | DebuggerX86.TYPE_SHORT | DebuggerX86.TYPE_IN, DebuggerX86.TYPE_AX | DebuggerX86.TYPE_IN],
|
||||
|
||||
/* 0xF0 */ [DebuggerX86.INS.LOCK, DebuggerX86.TYPE_PREFIX],
|
||||
/* 0xF1 */ [DebuggerX86.INS.NONE],
|
||||
|
|
@ -2588,6 +2588,22 @@ if (DEBUGGER) {
|
|||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* parseAddrReference(s, sAddr)
|
||||
*
|
||||
* Returns the given string with the given address references replaced with the contents of the address.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {string} s
|
||||
* @param {string} sAddr
|
||||
* @return {string}
|
||||
*/
|
||||
DebuggerX86.prototype.parseAddrReference = function(s, sAddr)
|
||||
{
|
||||
var dbgAddr = this.parseAddr(sAddr);
|
||||
return s.replace('[' + sAddr + ']', dbgAddr? str.toHex(this.getWord(dbgAddr), dbgAddr.fData32? 8 : 4) : "undefined");
|
||||
};
|
||||
|
||||
/**
|
||||
* incAddr(dbgAddr, inc)
|
||||
*
|
||||
|
|
@ -3375,7 +3391,7 @@ if (DEBUGGER) {
|
|||
{
|
||||
var cch = 0;
|
||||
var n = this.getRegValue(iReg);
|
||||
if (n !== undefined) {
|
||||
if (n != null) {
|
||||
switch(iReg) {
|
||||
case DebuggerX86.REG_AL:
|
||||
case DebuggerX86.REG_CL:
|
||||
|
|
|
|||
|
|
@ -38,6 +38,25 @@ if (DEBUGGER) {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Debugger Address Object
|
||||
*
|
||||
* This is the basic structure; other debuggers may extend it.
|
||||
*
|
||||
* addr address
|
||||
* fTemporary true if this is a temporary breakpoint address
|
||||
* sCmd set for breakpoint addresses if there's an associated command string
|
||||
* aCmds preprocessed commands (from sCmd)
|
||||
*
|
||||
* @typedef {{
|
||||
* addr:(number|undefined),
|
||||
* fTemporary:(boolean|undefined),
|
||||
* sCmd:(string|undefined),
|
||||
* aCmds:(Array.<string>|undefined)
|
||||
* }} DbgAddr
|
||||
*/
|
||||
var DbgAddr;
|
||||
|
||||
/**
|
||||
* Debugger(parmsDbg)
|
||||
*
|
||||
|
|
@ -85,11 +104,11 @@ function Debugger(parmsDbg)
|
|||
* digits, or underscores) and the property value is the variable's numeric value. See doVar()
|
||||
* and setVariable() for details.
|
||||
*
|
||||
* Note that parseValue(), through its reliance on str.parseInt(), assumes a default base of 16
|
||||
* if no base is explicitly indicated (eg, a trailing decimal period), and if you define variable
|
||||
* names containing exclusively hex alpha characters (a-f), those variables will take precedence
|
||||
* over the corresponding hex values. In other words, if you define variables "a" and "b", you
|
||||
* will no longer be able to simply type "a" or "b" to specify the decimal values 10 or 11.
|
||||
* Note that parseValue() parses variables before numbers, so any variable that looks like a
|
||||
* unprefixed hex value (eg, "a5" as opposed to "0xa5") will trump the numeric value. Unprefixed
|
||||
* hex values are a convenience of parseValue(), which always calls str.parseInt() with a default
|
||||
* base of 16; however, that default be overridden with a variety of explicit prefixes or suffixes
|
||||
* (eg, a trailing period to indicate a decimal number).
|
||||
*/
|
||||
this.aVariables = {};
|
||||
|
||||
|
|
@ -220,21 +239,6 @@ if (DEBUGGER) {
|
|||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
* getPrevCommand()
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @return {string|null}
|
||||
*/
|
||||
Debugger.prototype.getPrevCommand = function()
|
||||
{
|
||||
var sCmd = null;
|
||||
if (this.iPrevCmd < this.aPrevCmds.length - 1) {
|
||||
sCmd = this.aPrevCmds[++this.iPrevCmd];
|
||||
}
|
||||
return sCmd;
|
||||
};
|
||||
|
||||
/**
|
||||
* getNextCommand()
|
||||
*
|
||||
|
|
@ -253,6 +257,50 @@ if (DEBUGGER) {
|
|||
return sCmd;
|
||||
};
|
||||
|
||||
/**
|
||||
* getPrevCommand()
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @return {string|null}
|
||||
*/
|
||||
Debugger.prototype.getPrevCommand = function()
|
||||
{
|
||||
var sCmd = null;
|
||||
if (this.iPrevCmd < this.aPrevCmds.length - 1) {
|
||||
sCmd = this.aPrevCmds[++this.iPrevCmd];
|
||||
}
|
||||
return sCmd;
|
||||
};
|
||||
|
||||
/**
|
||||
* getRegIndex(sReg, off)
|
||||
*
|
||||
* NOTE: This must be implemented by the individual debuggers.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {string} sReg
|
||||
* @param {number} [off] optional offset into sReg
|
||||
* @return {number} register index, or -1 if not found
|
||||
*/
|
||||
Debugger.prototype.getRegIndex = function(sReg, off)
|
||||
{
|
||||
return -1;
|
||||
};
|
||||
|
||||
/**
|
||||
* getRegValue(iReg)
|
||||
*
|
||||
* NOTE: This must be implemented by the individual debuggers.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {number} iReg
|
||||
* @return {number|undefined}
|
||||
*/
|
||||
Debugger.prototype.getRegValue = function(iReg)
|
||||
{
|
||||
return undefined;
|
||||
};
|
||||
|
||||
/**
|
||||
* parseCommand(sCmd, fSave, chSep)
|
||||
*
|
||||
|
|
@ -425,6 +473,23 @@ if (DEBUGGER) {
|
|||
return value;
|
||||
};
|
||||
|
||||
/**
|
||||
* parseAddrReference(s, sAddr)
|
||||
*
|
||||
* Returns the given string with the given address references replaced with the contents of the address.
|
||||
*
|
||||
* NOTE: This must be implemented by the individual debuggers.
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {string} s
|
||||
* @param {string} sAddr
|
||||
* @return {string}
|
||||
*/
|
||||
Debugger.prototype.parseAddrReference = function(s, sAddr)
|
||||
{
|
||||
return s.replace('[' + sAddr + ']', "unimplemented");
|
||||
};
|
||||
|
||||
/**
|
||||
* parseReference(s)
|
||||
*
|
||||
|
|
@ -447,8 +512,7 @@ if (DEBUGGER) {
|
|||
}
|
||||
while (a = s.match(/\[(.*?)]/)) {
|
||||
if (a[1].indexOf('[') >= 0) break; // unsupported nested bracket(s)
|
||||
var dbgAddr = this.parseAddr(a[1]);
|
||||
s = s.replace('[' + a[1] + ']', dbgAddr? str.toHex(this.getWord(dbgAddr), dbgAddr.fData32? 8 : 4) : "undefined");
|
||||
s = this.parseAddrReference(s, a[1]);
|
||||
}
|
||||
return this.parseSysVars(s);
|
||||
};
|
||||
|
|
@ -492,15 +556,15 @@ if (DEBUGGER) {
|
|||
Debugger.prototype.parseValue = function(sValue, sName, fQuiet)
|
||||
{
|
||||
var value;
|
||||
if (sValue !== undefined) {
|
||||
if (sValue != null) {
|
||||
var iReg = this.getRegIndex(sValue);
|
||||
if (iReg >= 0) {
|
||||
value = this.getRegValue(iReg);
|
||||
} else {
|
||||
value = this.getVariable(sValue);
|
||||
if (value === undefined) value = str.parseInt(sValue, 16);
|
||||
if (value == null) value = str.parseInt(sValue, 16);
|
||||
}
|
||||
if (value === undefined && !fQuiet) this.println("invalid " + (sName? sName : "value") + ": " + sValue);
|
||||
if (value == null && !fQuiet) this.println("invalid " + (sName? sName : "value") + ": " + sValue);
|
||||
} else {
|
||||
if (!fQuiet) this.println("missing " + (sName || "value"));
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue