Add debugger option to enable 8086-style mnemonics (to minimize brain-hurting)
This commit is contained in:
parent
e936815bb6
commit
1e32efccc6
2 changed files with 498 additions and 476 deletions
|
|
@ -87,6 +87,8 @@ function Debugger(parmsDbg)
|
|||
|
||||
Component.call(this, "Debugger", parmsDbg, Debugger);
|
||||
|
||||
this.style = Debugger.STYLE_8086;
|
||||
|
||||
/*
|
||||
* These keep track of instruction activity, but only when tracing or when Debugger checks
|
||||
* have been enabled (eg, one or more breakpoints have been set).
|
||||
|
|
@ -98,14 +100,6 @@ function Debugger(parmsDbg)
|
|||
this.nCycles = 0;
|
||||
this.cOpcodes = this.cOpcodesStart = 0;
|
||||
|
||||
/*
|
||||
* Default number of hex chars in a register and a linear address (ie, for real-mode);
|
||||
* updated by initBus().
|
||||
*/
|
||||
this.cchReg = 2;
|
||||
this.cchAddr = 4;
|
||||
this.maskAddr = 0xffff;
|
||||
|
||||
/*
|
||||
* Most commands that require an address call parseAddr(), which defaults to dbgAddrNextCode
|
||||
* or dbgAddrNextData when no address has been given. doDump() and doUnassemble(), in turn,
|
||||
|
|
@ -256,21 +250,18 @@ if (DEBUGGER) {
|
|||
'print': "print expression",
|
||||
'r': "dump/set registers",
|
||||
'reset': "reset machine",
|
||||
's': "set options",
|
||||
't [#]': "trace", // other variations: tr (trace and dump registers)
|
||||
'u [#]': "unassemble",
|
||||
'x': "execution options",
|
||||
'v': "print version",
|
||||
'var': "assign variable"
|
||||
};
|
||||
|
||||
Debugger.STYLE_8080 = 8080;
|
||||
Debugger.STYLE_8086 = 8086;
|
||||
|
||||
/*
|
||||
* CPU instruction ordinals
|
||||
*
|
||||
* Note that individual instructions end with ordinal 162 and instruction groups begin with ordinal 163;
|
||||
* the disassembler knows it's dealing with a group whenever the ordinal is not a valid index into INS_NAMES.
|
||||
*
|
||||
* NOTE: While this list started alphabetical, there are a few wrinkles; eg, POPA/POPF/PUSHF/PUSHA are
|
||||
* sequential to make it easier to detect instructions that require a D suffix when the operand size is 32 bits.
|
||||
*/
|
||||
Debugger.INS = {
|
||||
NONE: 0, ACI: 1, ADC: 2, ADD: 3, ADI: 4, ANA: 5, ANI: 6, CALL: 7,
|
||||
|
|
@ -287,6 +278,9 @@ if (DEBUGGER) {
|
|||
|
||||
/*
|
||||
* CPU instruction names (mnemonics), indexed by CPU instruction ordinal (above)
|
||||
*
|
||||
* If you change the default style, using the "s" command (eg, "s 8086"), then the 8086 table
|
||||
* will be used instead. TODO: Add a "s z80" command for Z80-style mnemonics.
|
||||
*/
|
||||
Debugger.INS_NAMES = [
|
||||
"NONE", "ACI", "ADC", "ADD", "ADI", "ANA", "ANI", "CALL",
|
||||
|
|
@ -301,8 +295,18 @@ if (DEBUGGER) {
|
|||
"STC", "SUB", "SUI", "XCHG", "XRA", "XRI", "XTHL"
|
||||
];
|
||||
|
||||
Debugger.CPU_8080 = 0;
|
||||
Debugger.CPUS = [8080];
|
||||
Debugger.INS_NAMES_8086 = [
|
||||
"NONE", "ADC", "ADC", "ADD", "ADD", "AND", "AND", "CALL",
|
||||
"CALLC", "CALLS", "CALLNC", "CALLNZ", "CALLNS", "CALLP", "CALLNP", "CALLZ",
|
||||
"NOT", "CMC", "CMP", "CMP", "DAA", "ADD", "DEC", "DEC",
|
||||
"CLI", "STI", "HLT", "IN", "INC", "INC", "JMP", "JC",
|
||||
"JS", "JNC", "JNZ", "JNS", "JP", "JNP", "JZ", "LDA",
|
||||
"MOV", "MOV", "MOV", "MOV", "MOV", "NOP", "OR", "OR",
|
||||
"OUT", "JMP", "POP", "PUSH", "RCL", "RCR", "RET", "RETC",
|
||||
"RETS", "RETNC", "RETNZ", "RETNS", "RETP", "RETNP", "RETZ", "ROL",
|
||||
"ROR", "RST", "SBB", "SBB", "MOV", "MOV", "MOV", "MOV",
|
||||
"STC", "SUB", "SUB", "XCHG", "XOR", "XOR", "XCHG"
|
||||
];
|
||||
|
||||
Debugger.REG_B = 0x00;
|
||||
Debugger.REG_C = 0x01;
|
||||
|
|
@ -312,16 +316,15 @@ if (DEBUGGER) {
|
|||
Debugger.REG_L = 0x05;
|
||||
Debugger.REG_M = 0x06;
|
||||
Debugger.REG_A = 0x07;
|
||||
Debugger.REG_F = 0x08; // the flags register ("F")
|
||||
Debugger.REG_BC = 0x09;
|
||||
Debugger.REG_DE = 0x0A;
|
||||
Debugger.REG_HL = 0x0B;
|
||||
Debugger.REG_PS = 0x0C; // aka PSW, which could also be called "AF", since A is the high byte and F is the low byte
|
||||
Debugger.REG_SP = 0x0D;
|
||||
Debugger.REG_PC = 0x0E;
|
||||
Debugger.REG_BC = 0x08;
|
||||
Debugger.REG_DE = 0x09;
|
||||
Debugger.REG_HL = 0x0A;
|
||||
Debugger.REG_SP = 0x0B;
|
||||
Debugger.REG_PC = 0x0C;
|
||||
Debugger.REG_PS = 0x0D; // aka PSW (aka AF if Z80-style)
|
||||
|
||||
Debugger.REGS = [
|
||||
"B", "C", "D", "E", "H", "L", "M", "A", "F", "BC", "DE", "HL", "PSW", "SP", "PC"
|
||||
"B", "C", "D", "E", "H", "L", "M", "A", "BC", "DE", "HL", "SP", "PC", "PSW"
|
||||
];
|
||||
|
||||
/*
|
||||
|
|
@ -345,27 +348,29 @@ if (DEBUGGER) {
|
|||
*/
|
||||
Debugger.TYPE_REG = 0x0010; // register
|
||||
Debugger.TYPE_IMM = 0x0020; // immediate data
|
||||
Debugger.TYPE_ADDR = 0x0033; // immediate (word) address
|
||||
Debugger.TYPE_MEM = 0x0040; // memory reference
|
||||
Debugger.TYPE_INT = 0x0080; // interrupt level encoded in instruction (bits 3-5)
|
||||
|
||||
/*
|
||||
* TYPE_IREG values, based on the REG_* constants.
|
||||
*
|
||||
* NOte that TYPE_M isn't really a register, just an alternative form of TYPE_HL | TYPE_MEM.
|
||||
*/
|
||||
Debugger.TYPE_A = (Debugger.REG_A << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_B = (Debugger.REG_B << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_C = (Debugger.REG_C << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_D = (Debugger.REG_D << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_E = (Debugger.REG_E << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_H = (Debugger.REG_H << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_L = (Debugger.REG_L << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_M = (Debugger.REG_M << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE | Debugger.TYPE_MEM);
|
||||
Debugger.TYPE_BC = (Debugger.REG_BC << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_DE = (Debugger.REG_DE << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_HL = (Debugger.REG_HL << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_PS = (Debugger.REG_PS << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_SP = (Debugger.REG_SP << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_PC = (Debugger.REG_PC << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_A = (Debugger.REG_A << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_B = (Debugger.REG_B << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_C = (Debugger.REG_C << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_D = (Debugger.REG_D << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_E = (Debugger.REG_E << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_H = (Debugger.REG_H << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_L = (Debugger.REG_L << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE);
|
||||
Debugger.TYPE_M = (Debugger.REG_M << 8 | Debugger.TYPE_REG | Debugger.TYPE_BYTE | Debugger.TYPE_MEM);
|
||||
Debugger.TYPE_BC = (Debugger.REG_BC << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_DE = (Debugger.REG_DE << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_HL = (Debugger.REG_HL << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_SP = (Debugger.REG_SP << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_PC = (Debugger.REG_PC << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
Debugger.TYPE_PS = (Debugger.REG_PS << 8 | Debugger.TYPE_REG | Debugger.TYPE_WORD);
|
||||
|
||||
/*
|
||||
* TYPE_OTHER bit definitions
|
||||
|
|
@ -373,6 +378,7 @@ if (DEBUGGER) {
|
|||
Debugger.TYPE_IN = 0x1000; // operand is input
|
||||
Debugger.TYPE_OUT = 0x2000; // operand is output
|
||||
Debugger.TYPE_BOTH = (Debugger.TYPE_IN | Debugger.TYPE_OUT);
|
||||
Debugger.TYPE_OPT = 0x4000; // optional operand (ie, normally omitted in 8080 assembly language)
|
||||
Debugger.TYPE_UNDOC = 0x8000; // opcode is an undocumented alternative encoding
|
||||
|
||||
/*
|
||||
|
|
@ -396,261 +402,261 @@ if (DEBUGGER) {
|
|||
*/
|
||||
Debugger.aaOpDescs = [
|
||||
/* 0x00 */ [Debugger.INS.NOP],
|
||||
/* 0x01 */ [Debugger.INS.LXI, Debugger.TYPE_BC, Debugger.TYPE_IMM],
|
||||
/* 0x02 */ [Debugger.INS.STAX, Debugger.TYPE_BC | Debugger.TYPE_MEM],
|
||||
/* 0x01 */ [Debugger.INS.LXI, Debugger.TYPE_BC, Debugger.TYPE_IMM],
|
||||
/* 0x02 */ [Debugger.INS.STAX, Debugger.TYPE_BC | Debugger.TYPE_MEM, Debugger.TYPE_A | Debugger.TYPE_OPT],
|
||||
/* 0x03 */ [Debugger.INS.INX, Debugger.TYPE_BC],
|
||||
/* 0x04 */ [Debugger.INS.INR, Debugger.TYPE_B],
|
||||
/* 0x05 */ [Debugger.INS.DCR, Debugger.TYPE_B],
|
||||
/* 0x06 */ [Debugger.INS.MVI, Debugger.TYPE_B, Debugger.TYPE_IMM],
|
||||
/* 0x06 */ [Debugger.INS.MVI, Debugger.TYPE_B, Debugger.TYPE_IMM],
|
||||
/* 0x07 */ [Debugger.INS.RLC],
|
||||
/* 0x08 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x09 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_BC | Debugger.TYPE_IN], // let's be more explicit about the operands
|
||||
/* 0x0A */ [Debugger.INS.LDAX, Debugger.TYPE_BC | Debugger.TYPE_MEM],
|
||||
/* 0x09 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_BC], // let's be more explicit about the operands
|
||||
/* 0x0A */ [Debugger.INS.LDAX, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_BC | Debugger.TYPE_MEM],
|
||||
/* 0x0B */ [Debugger.INS.DCX, Debugger.TYPE_BC],
|
||||
/* 0x0C */ [Debugger.INS.INR, Debugger.TYPE_C],
|
||||
/* 0x0D */ [Debugger.INS.DCR, Debugger.TYPE_C],
|
||||
/* 0x0E */ [Debugger.INS.MVI, Debugger.TYPE_C, Debugger.TYPE_IMM],
|
||||
/* 0x0E */ [Debugger.INS.MVI, Debugger.TYPE_C, Debugger.TYPE_IMM],
|
||||
/* 0x0F */ [Debugger.INS.RRC],
|
||||
/* 0x10 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x11 */ [Debugger.INS.LXI, Debugger.TYPE_DE, Debugger.TYPE_IMM],
|
||||
/* 0x12 */ [Debugger.INS.STAX, Debugger.TYPE_DE | Debugger.TYPE_MEM],
|
||||
/* 0x11 */ [Debugger.INS.LXI, Debugger.TYPE_DE, Debugger.TYPE_IMM],
|
||||
/* 0x12 */ [Debugger.INS.STAX, Debugger.TYPE_DE | Debugger.TYPE_MEM, Debugger.TYPE_A | Debugger.TYPE_OPT],
|
||||
/* 0x13 */ [Debugger.INS.INX, Debugger.TYPE_DE],
|
||||
/* 0x14 */ [Debugger.INS.INR, Debugger.TYPE_D],
|
||||
/* 0x15 */ [Debugger.INS.DCR, Debugger.TYPE_D],
|
||||
/* 0x16 */ [Debugger.INS.MVI, Debugger.TYPE_D, Debugger.TYPE_IMM],
|
||||
/* 0x16 */ [Debugger.INS.MVI, Debugger.TYPE_D, Debugger.TYPE_IMM],
|
||||
/* 0x17 */ [Debugger.INS.RAL],
|
||||
/* 0x18 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x19 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_DE | Debugger.TYPE_IN], // let's be more explicit about the operands
|
||||
/* 0x1A */ [Debugger.INS.LDAX, Debugger.TYPE_DE | Debugger.TYPE_MEM],
|
||||
/* 0x19 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_DE], // let's be more explicit about the operands
|
||||
/* 0x1A */ [Debugger.INS.LDAX, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_DE | Debugger.TYPE_MEM],
|
||||
/* 0x1B */ [Debugger.INS.DCX, Debugger.TYPE_DE],
|
||||
/* 0x1C */ [Debugger.INS.INR, Debugger.TYPE_E],
|
||||
/* 0x1D */ [Debugger.INS.DCR, Debugger.TYPE_E],
|
||||
/* 0x1E */ [Debugger.INS.MVI, Debugger.TYPE_E, Debugger.TYPE_IMM],
|
||||
/* 0x1E */ [Debugger.INS.MVI, Debugger.TYPE_E, Debugger.TYPE_IMM],
|
||||
/* 0x1F */ [Debugger.INS.RAR],
|
||||
/* 0x20 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x21 */ [Debugger.INS.LXI, Debugger.TYPE_HL, Debugger.TYPE_IMM],
|
||||
/* 0x22 */ [Debugger.INS.SHLD, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_MEM],
|
||||
/* 0x21 */ [Debugger.INS.LXI, Debugger.TYPE_HL, Debugger.TYPE_IMM],
|
||||
/* 0x22 */ [Debugger.INS.SHLD, Debugger.TYPE_ADDR | Debugger.TYPE_MEM, Debugger.TYPE_HL | Debugger.TYPE_OPT],
|
||||
/* 0x23 */ [Debugger.INS.INX, Debugger.TYPE_HL],
|
||||
/* 0x24 */ [Debugger.INS.INR, Debugger.TYPE_H],
|
||||
/* 0x25 */ [Debugger.INS.DCR, Debugger.TYPE_H],
|
||||
/* 0x26 */ [Debugger.INS.MVI, Debugger.TYPE_H, Debugger.TYPE_IMM],
|
||||
/* 0x26 */ [Debugger.INS.MVI, Debugger.TYPE_H, Debugger.TYPE_IMM],
|
||||
/* 0x27 */ [Debugger.INS.DAA],
|
||||
/* 0x28 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x29 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_HL | Debugger.TYPE_IN], // let's be more explicit about the operands
|
||||
/* 0x2A */ [Debugger.INS.LHLD, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_MEM],
|
||||
/* 0x29 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_HL], // let's be more explicit about the operands
|
||||
/* 0x2A */ [Debugger.INS.LHLD, Debugger.TYPE_HL | Debugger.TYPE_OPT, Debugger.TYPE_ADDR | Debugger.TYPE_MEM],
|
||||
/* 0x2B */ [Debugger.INS.DCX, Debugger.TYPE_HL],
|
||||
/* 0x2C */ [Debugger.INS.INR, Debugger.TYPE_L],
|
||||
/* 0x2D */ [Debugger.INS.DCR, Debugger.TYPE_L],
|
||||
/* 0x2E */ [Debugger.INS.MVI, Debugger.TYPE_L, Debugger.TYPE_IMM],
|
||||
/* 0x2F */ [Debugger.INS.CMA],
|
||||
/* 0x2E */ [Debugger.INS.MVI, Debugger.TYPE_L, Debugger.TYPE_IMM],
|
||||
/* 0x2F */ [Debugger.INS.CMA, Debugger.TYPE_A | Debugger.TYPE_OPT],
|
||||
/* 0x30 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x31 */ [Debugger.INS.LXI, Debugger.TYPE_SP, Debugger.TYPE_IMM],
|
||||
/* 0x32 */ [Debugger.INS.STA, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_MEM],
|
||||
/* 0x31 */ [Debugger.INS.LXI, Debugger.TYPE_SP, Debugger.TYPE_IMM],
|
||||
/* 0x32 */ [Debugger.INS.STA, Debugger.TYPE_ADDR | Debugger.TYPE_MEM, Debugger.TYPE_A | Debugger.TYPE_OPT],
|
||||
/* 0x33 */ [Debugger.INS.INX, Debugger.TYPE_SP],
|
||||
/* 0x34 */ [Debugger.INS.INR, Debugger.TYPE_M],
|
||||
/* 0x35 */ [Debugger.INS.DCR, Debugger.TYPE_M],
|
||||
/* 0x36 */ [Debugger.INS.MVI, Debugger.TYPE_M, Debugger.TYPE_IMM],
|
||||
/* 0x36 */ [Debugger.INS.MVI, Debugger.TYPE_M, Debugger.TYPE_IMM],
|
||||
/* 0x37 */ [Debugger.INS.STC],
|
||||
/* 0x38 */ [Debugger.INS.NOP, Debugger.TYPE_UNDOC],
|
||||
/* 0x39 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_SP | Debugger.TYPE_IN], // let's be more explicit about the operands
|
||||
/* 0x3A */ [Debugger.INS.LDA, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_MEM],
|
||||
/* 0x39 */ [Debugger.INS.DAD, Debugger.TYPE_HL, Debugger.TYPE_SP], // let's be more explicit about the operands
|
||||
/* 0x3A */ [Debugger.INS.LDA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_ADDR | Debugger.TYPE_MEM],
|
||||
/* 0x3B */ [Debugger.INS.DCX, Debugger.TYPE_SP],
|
||||
/* 0x3C */ [Debugger.INS.INR, Debugger.TYPE_A],
|
||||
/* 0x3D */ [Debugger.INS.DCR, Debugger.TYPE_A],
|
||||
/* 0x3E */ [Debugger.INS.MVI, Debugger.TYPE_A, Debugger.TYPE_IMM],
|
||||
/* 0x3E */ [Debugger.INS.MVI, Debugger.TYPE_A, Debugger.TYPE_IMM],
|
||||
/* 0x3F */ [Debugger.INS.CMC],
|
||||
/* 0x40 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_B],
|
||||
/* 0x41 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_C],
|
||||
/* 0x42 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_D],
|
||||
/* 0x43 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_E],
|
||||
/* 0x44 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_H],
|
||||
/* 0x45 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_L],
|
||||
/* 0x46 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_M],
|
||||
/* 0x47 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_A],
|
||||
/* 0x48 */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_B],
|
||||
/* 0x49 */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_C],
|
||||
/* 0x4A */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_D],
|
||||
/* 0x4B */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_E],
|
||||
/* 0x4C */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_H],
|
||||
/* 0x4D */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_L],
|
||||
/* 0x4E */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_M],
|
||||
/* 0x4F */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_A],
|
||||
/* 0x50 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_B],
|
||||
/* 0x51 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_C],
|
||||
/* 0x52 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_D],
|
||||
/* 0x53 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_E],
|
||||
/* 0x54 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_H],
|
||||
/* 0x55 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_L],
|
||||
/* 0x56 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_M],
|
||||
/* 0x57 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_A],
|
||||
/* 0x58 */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_B],
|
||||
/* 0x59 */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_C],
|
||||
/* 0x5A */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_D],
|
||||
/* 0x5B */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_E],
|
||||
/* 0x5C */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_H],
|
||||
/* 0x5D */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_L],
|
||||
/* 0x5E */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_M],
|
||||
/* 0x5F */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_A],
|
||||
/* 0x60 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_B],
|
||||
/* 0x61 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_C],
|
||||
/* 0x62 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_D],
|
||||
/* 0x63 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_E],
|
||||
/* 0x64 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_H],
|
||||
/* 0x65 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_L],
|
||||
/* 0x66 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_M],
|
||||
/* 0x67 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_A],
|
||||
/* 0x68 */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_B],
|
||||
/* 0x69 */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_C],
|
||||
/* 0x6A */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_D],
|
||||
/* 0x6B */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_E],
|
||||
/* 0x6C */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_H],
|
||||
/* 0x6D */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_L],
|
||||
/* 0x6E */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_M],
|
||||
/* 0x6F */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_A],
|
||||
/* 0x70 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_B],
|
||||
/* 0x71 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_C],
|
||||
/* 0x72 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_D],
|
||||
/* 0x73 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_E],
|
||||
/* 0x74 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_H],
|
||||
/* 0x75 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_L],
|
||||
/* 0x76 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_M],
|
||||
/* 0x77 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_A],
|
||||
/* 0x78 */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_B],
|
||||
/* 0x79 */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_C],
|
||||
/* 0x7A */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_D],
|
||||
/* 0x7B */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_E],
|
||||
/* 0x7C */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_H],
|
||||
/* 0x7D */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_L],
|
||||
/* 0x7E */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_M],
|
||||
/* 0x7F */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_A],
|
||||
/* 0x80 */ [Debugger.INS.ADD, Debugger.TYPE_B],
|
||||
/* 0x81 */ [Debugger.INS.ADD, Debugger.TYPE_C],
|
||||
/* 0x82 */ [Debugger.INS.ADD, Debugger.TYPE_D],
|
||||
/* 0x83 */ [Debugger.INS.ADD, Debugger.TYPE_E],
|
||||
/* 0x84 */ [Debugger.INS.ADD, Debugger.TYPE_H],
|
||||
/* 0x85 */ [Debugger.INS.ADD, Debugger.TYPE_L],
|
||||
/* 0x86 */ [Debugger.INS.ADD, Debugger.TYPE_M],
|
||||
/* 0x87 */ [Debugger.INS.ADD, Debugger.TYPE_A],
|
||||
/* 0x88 */ [Debugger.INS.ADC, Debugger.TYPE_B],
|
||||
/* 0x89 */ [Debugger.INS.ADC, Debugger.TYPE_C],
|
||||
/* 0x8A */ [Debugger.INS.ADC, Debugger.TYPE_D],
|
||||
/* 0x8B */ [Debugger.INS.ADC, Debugger.TYPE_E],
|
||||
/* 0x8C */ [Debugger.INS.ADC, Debugger.TYPE_H],
|
||||
/* 0x8D */ [Debugger.INS.ADC, Debugger.TYPE_L],
|
||||
/* 0x8E */ [Debugger.INS.ADC, Debugger.TYPE_M],
|
||||
/* 0x8F */ [Debugger.INS.ADC, Debugger.TYPE_A],
|
||||
/* 0x90 */ [Debugger.INS.SUB, Debugger.TYPE_B],
|
||||
/* 0x91 */ [Debugger.INS.SUB, Debugger.TYPE_C],
|
||||
/* 0x92 */ [Debugger.INS.SUB, Debugger.TYPE_D],
|
||||
/* 0x93 */ [Debugger.INS.SUB, Debugger.TYPE_E],
|
||||
/* 0x94 */ [Debugger.INS.SUB, Debugger.TYPE_H],
|
||||
/* 0x95 */ [Debugger.INS.SUB, Debugger.TYPE_L],
|
||||
/* 0x96 */ [Debugger.INS.SUB, Debugger.TYPE_M],
|
||||
/* 0x97 */ [Debugger.INS.SUB, Debugger.TYPE_A],
|
||||
/* 0x98 */ [Debugger.INS.SBB, Debugger.TYPE_B],
|
||||
/* 0x99 */ [Debugger.INS.SBB, Debugger.TYPE_C],
|
||||
/* 0x9A */ [Debugger.INS.SBB, Debugger.TYPE_D],
|
||||
/* 0x9B */ [Debugger.INS.SBB, Debugger.TYPE_E],
|
||||
/* 0x9C */ [Debugger.INS.SBB, Debugger.TYPE_H],
|
||||
/* 0x9D */ [Debugger.INS.SBB, Debugger.TYPE_L],
|
||||
/* 0x9E */ [Debugger.INS.SBB, Debugger.TYPE_M],
|
||||
/* 0x9F */ [Debugger.INS.SBB, Debugger.TYPE_A],
|
||||
/* 0xA0 */ [Debugger.INS.ANA, Debugger.TYPE_B],
|
||||
/* 0xA1 */ [Debugger.INS.ANA, Debugger.TYPE_C],
|
||||
/* 0xA2 */ [Debugger.INS.ANA, Debugger.TYPE_D],
|
||||
/* 0xA3 */ [Debugger.INS.ANA, Debugger.TYPE_E],
|
||||
/* 0xA4 */ [Debugger.INS.ANA, Debugger.TYPE_H],
|
||||
/* 0xA5 */ [Debugger.INS.ANA, Debugger.TYPE_L],
|
||||
/* 0xA6 */ [Debugger.INS.ANA, Debugger.TYPE_M],
|
||||
/* 0xA7 */ [Debugger.INS.ANA, Debugger.TYPE_A],
|
||||
/* 0xA8 */ [Debugger.INS.XRA, Debugger.TYPE_B],
|
||||
/* 0xA9 */ [Debugger.INS.XRA, Debugger.TYPE_C],
|
||||
/* 0xAA */ [Debugger.INS.XRA, Debugger.TYPE_D],
|
||||
/* 0xAB */ [Debugger.INS.XRA, Debugger.TYPE_E],
|
||||
/* 0xAC */ [Debugger.INS.XRA, Debugger.TYPE_H],
|
||||
/* 0xAD */ [Debugger.INS.XRA, Debugger.TYPE_L],
|
||||
/* 0xAE */ [Debugger.INS.XRA, Debugger.TYPE_M],
|
||||
/* 0xAF */ [Debugger.INS.XRA, Debugger.TYPE_A],
|
||||
/* 0xB0 */ [Debugger.INS.ORA, Debugger.TYPE_B],
|
||||
/* 0xB1 */ [Debugger.INS.ORA, Debugger.TYPE_C],
|
||||
/* 0xB2 */ [Debugger.INS.ORA, Debugger.TYPE_D],
|
||||
/* 0xB3 */ [Debugger.INS.ORA, Debugger.TYPE_E],
|
||||
/* 0xB4 */ [Debugger.INS.ORA, Debugger.TYPE_H],
|
||||
/* 0xB5 */ [Debugger.INS.ORA, Debugger.TYPE_L],
|
||||
/* 0xB6 */ [Debugger.INS.ORA, Debugger.TYPE_M],
|
||||
/* 0xB7 */ [Debugger.INS.ORA, Debugger.TYPE_A],
|
||||
/* 0xB8 */ [Debugger.INS.CMP, Debugger.TYPE_B],
|
||||
/* 0xB9 */ [Debugger.INS.CMP, Debugger.TYPE_C],
|
||||
/* 0xBA */ [Debugger.INS.CMP, Debugger.TYPE_D],
|
||||
/* 0xBB */ [Debugger.INS.CMP, Debugger.TYPE_E],
|
||||
/* 0xBC */ [Debugger.INS.CMP, Debugger.TYPE_H],
|
||||
/* 0xBD */ [Debugger.INS.CMP, Debugger.TYPE_L],
|
||||
/* 0xBE */ [Debugger.INS.CMP, Debugger.TYPE_M],
|
||||
/* 0xBF */ [Debugger.INS.CMP, Debugger.TYPE_A],
|
||||
/* 0x40 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_B],
|
||||
/* 0x41 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_C],
|
||||
/* 0x42 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_D],
|
||||
/* 0x43 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_E],
|
||||
/* 0x44 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_H],
|
||||
/* 0x45 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_L],
|
||||
/* 0x46 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_M],
|
||||
/* 0x47 */ [Debugger.INS.MOV, Debugger.TYPE_B, Debugger.TYPE_A],
|
||||
/* 0x48 */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_B],
|
||||
/* 0x49 */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_C],
|
||||
/* 0x4A */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_D],
|
||||
/* 0x4B */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_E],
|
||||
/* 0x4C */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_H],
|
||||
/* 0x4D */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_L],
|
||||
/* 0x4E */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_M],
|
||||
/* 0x4F */ [Debugger.INS.MOV, Debugger.TYPE_C, Debugger.TYPE_A],
|
||||
/* 0x50 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_B],
|
||||
/* 0x51 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_C],
|
||||
/* 0x52 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_D],
|
||||
/* 0x53 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_E],
|
||||
/* 0x54 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_H],
|
||||
/* 0x55 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_L],
|
||||
/* 0x56 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_M],
|
||||
/* 0x57 */ [Debugger.INS.MOV, Debugger.TYPE_D, Debugger.TYPE_A],
|
||||
/* 0x58 */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_B],
|
||||
/* 0x59 */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_C],
|
||||
/* 0x5A */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_D],
|
||||
/* 0x5B */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_E],
|
||||
/* 0x5C */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_H],
|
||||
/* 0x5D */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_L],
|
||||
/* 0x5E */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_M],
|
||||
/* 0x5F */ [Debugger.INS.MOV, Debugger.TYPE_E, Debugger.TYPE_A],
|
||||
/* 0x60 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_B],
|
||||
/* 0x61 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_C],
|
||||
/* 0x62 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_D],
|
||||
/* 0x63 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_E],
|
||||
/* 0x64 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_H],
|
||||
/* 0x65 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_L],
|
||||
/* 0x66 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_M],
|
||||
/* 0x67 */ [Debugger.INS.MOV, Debugger.TYPE_H, Debugger.TYPE_A],
|
||||
/* 0x68 */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_B],
|
||||
/* 0x69 */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_C],
|
||||
/* 0x6A */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_D],
|
||||
/* 0x6B */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_E],
|
||||
/* 0x6C */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_H],
|
||||
/* 0x6D */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_L],
|
||||
/* 0x6E */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_M],
|
||||
/* 0x6F */ [Debugger.INS.MOV, Debugger.TYPE_L, Debugger.TYPE_A],
|
||||
/* 0x70 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_B],
|
||||
/* 0x71 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_C],
|
||||
/* 0x72 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_D],
|
||||
/* 0x73 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_E],
|
||||
/* 0x74 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_H],
|
||||
/* 0x75 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_L],
|
||||
/* 0x76 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_M],
|
||||
/* 0x77 */ [Debugger.INS.MOV, Debugger.TYPE_M, Debugger.TYPE_A],
|
||||
/* 0x78 */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_B],
|
||||
/* 0x79 */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_C],
|
||||
/* 0x7A */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_D],
|
||||
/* 0x7B */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_E],
|
||||
/* 0x7C */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_H],
|
||||
/* 0x7D */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_L],
|
||||
/* 0x7E */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_M],
|
||||
/* 0x7F */ [Debugger.INS.MOV, Debugger.TYPE_A, Debugger.TYPE_A],
|
||||
/* 0x80 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0x81 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0x82 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0x83 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0x84 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0x85 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0x86 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0x87 */ [Debugger.INS.ADD, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0x88 */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0x89 */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0x8A */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0x8B */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0x8C */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0x8D */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0x8E */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0x8F */ [Debugger.INS.ADC, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0x90 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0x91 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0x92 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0x93 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0x94 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0x95 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0x96 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0x97 */ [Debugger.INS.SUB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0x98 */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0x99 */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0x9A */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0x9B */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0x9C */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0x9D */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0x9E */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0x9F */ [Debugger.INS.SBB, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0xA0 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0xA1 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0xA2 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0xA3 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0xA4 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0xA5 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0xA6 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0xA7 */ [Debugger.INS.ANA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0xA8 */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0xA9 */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0xAA */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0xAB */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0xAC */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0xAD */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0xAE */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0xAF */ [Debugger.INS.XRA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0xB0 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0xB1 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0xB2 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0xB3 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0xB4 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0xB5 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0xB6 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0xB7 */ [Debugger.INS.ORA, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0xB8 */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_B],
|
||||
/* 0xB9 */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_C],
|
||||
/* 0xBA */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_D],
|
||||
/* 0xBB */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_E],
|
||||
/* 0xBC */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_H],
|
||||
/* 0xBD */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_L],
|
||||
/* 0xBE */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_M],
|
||||
/* 0xBF */ [Debugger.INS.CMP, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_A],
|
||||
/* 0xC0 */ [Debugger.INS.RNZ],
|
||||
/* 0xC1 */ [Debugger.INS.POP, Debugger.TYPE_BC],
|
||||
/* 0xC2 */ [Debugger.INS.JNZ, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xC3 */ [Debugger.INS.JMP, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xC4 */ [Debugger.INS.CNZ, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xC2 */ [Debugger.INS.JNZ, Debugger.TYPE_ADDR],
|
||||
/* 0xC3 */ [Debugger.INS.JMP, Debugger.TYPE_ADDR],
|
||||
/* 0xC4 */ [Debugger.INS.CNZ, Debugger.TYPE_ADDR],
|
||||
/* 0xC5 */ [Debugger.INS.PUSH, Debugger.TYPE_BC],
|
||||
/* 0xC6 */ [Debugger.INS.ADI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xC7 */ [Debugger.INS.RST],
|
||||
/* 0xC6 */ [Debugger.INS.ADI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xC7 */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xC8 */ [Debugger.INS.RZ],
|
||||
/* 0xC9 */ [Debugger.INS.RET],
|
||||
/* 0xCA */ [Debugger.INS.JZ, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xCB */ [Debugger.INS.JMP, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_UNDOC],
|
||||
/* 0xCC */ [Debugger.INS.CZ, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xCD */ [Debugger.INS.CALL, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xCE */ [Debugger.INS.ACI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xCF */ [Debugger.INS.RST],
|
||||
/* 0xCA */ [Debugger.INS.JZ, Debugger.TYPE_ADDR],
|
||||
/* 0xCB */ [Debugger.INS.JMP, Debugger.TYPE_ADDR | Debugger.TYPE_UNDOC],
|
||||
/* 0xCC */ [Debugger.INS.CZ, Debugger.TYPE_ADDR],
|
||||
/* 0xCD */ [Debugger.INS.CALL, Debugger.TYPE_ADDR],
|
||||
/* 0xCE */ [Debugger.INS.ACI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xCF */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xD0 */ [Debugger.INS.RNC],
|
||||
/* 0xD1 */ [Debugger.INS.POP, Debugger.TYPE_DE],
|
||||
/* 0xD2 */ [Debugger.INS.JNC, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xD3 */ [Debugger.INS.OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xD4 */ [Debugger.INS.CNC, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xD2 */ [Debugger.INS.JNC, Debugger.TYPE_ADDR],
|
||||
/* 0xD3 */ [Debugger.INS.OUT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE, Debugger.TYPE_A | Debugger.TYPE_OPT],
|
||||
/* 0xD4 */ [Debugger.INS.CNC, Debugger.TYPE_ADDR],
|
||||
/* 0xD5 */ [Debugger.INS.PUSH, Debugger.TYPE_DE],
|
||||
/* 0xD6 */ [Debugger.INS.SUI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xD7 */ [Debugger.INS.RST],
|
||||
/* 0xD6 */ [Debugger.INS.SUI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xD7 */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xD8 */ [Debugger.INS.RC],
|
||||
/* 0xD9 */ [Debugger.INS.RET, Debugger.TYPE_UNDOC],
|
||||
/* 0xDA */ [Debugger.INS.JC, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xDB */ [Debugger.INS.IN, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xDC */ [Debugger.INS.CC, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xDD */ [Debugger.INS.CALL, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_UNDOC],
|
||||
/* 0xDE */ [Debugger.INS.SBI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xDF */ [Debugger.INS.RST],
|
||||
/* 0xDA */ [Debugger.INS.JC, Debugger.TYPE_ADDR],
|
||||
/* 0xDB */ [Debugger.INS.IN, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xDC */ [Debugger.INS.CC, Debugger.TYPE_ADDR],
|
||||
/* 0xDD */ [Debugger.INS.CALL, Debugger.TYPE_ADDR | Debugger.TYPE_UNDOC],
|
||||
/* 0xDE */ [Debugger.INS.SBI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xDF */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xE0 */ [Debugger.INS.RPO],
|
||||
/* 0xE1 */ [Debugger.INS.POP, Debugger.TYPE_HL],
|
||||
/* 0xE2 */ [Debugger.INS.JPO, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xE3 */ [Debugger.INS.XTHL, Debugger.TYPE_SP | Debugger.TYPE_MEM, Debugger.TYPE_HL], // let's be more explicit about the operands
|
||||
/* 0xE4 */ [Debugger.INS.CPO, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xE2 */ [Debugger.INS.JPO, Debugger.TYPE_ADDR],
|
||||
/* 0xE3 */ [Debugger.INS.XTHL, Debugger.TYPE_SP | Debugger.TYPE_MEM, Debugger.TYPE_HL],// let's be more explicit about the operands
|
||||
/* 0xE4 */ [Debugger.INS.CPO, Debugger.TYPE_ADDR],
|
||||
/* 0xE5 */ [Debugger.INS.PUSH, Debugger.TYPE_HL],
|
||||
/* 0xE6 */ [Debugger.INS.ANI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xE7 */ [Debugger.INS.RST],
|
||||
/* 0xE6 */ [Debugger.INS.ANI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xE7 */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xE8 */ [Debugger.INS.RPE],
|
||||
/* 0xE9 */ [Debugger.INS.PCHL, Debugger.TYPE_PC, Debugger.TYPE_HL], // let's be more explicit about the operands
|
||||
/* 0xEA */ [Debugger.INS.JPE, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xEB */ [Debugger.INS.XCHG, Debugger.TYPE_HL, Debugger.TYPE_DE], // let's be more explicit about the operands
|
||||
/* 0xEC */ [Debugger.INS.CPE, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xED */ [Debugger.INS.CALL, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_UNDOC],
|
||||
/* 0xEE */ [Debugger.INS.XRI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xEF */ [Debugger.INS.RST],
|
||||
/* 0xE9 */ [Debugger.INS.PCHL, Debugger.TYPE_HL],
|
||||
/* 0xEA */ [Debugger.INS.JPE, Debugger.TYPE_ADDR],
|
||||
/* 0xEB */ [Debugger.INS.XCHG, Debugger.TYPE_HL, Debugger.TYPE_DE], // let's be more explicit about the operands
|
||||
/* 0xEC */ [Debugger.INS.CPE, Debugger.TYPE_ADDR],
|
||||
/* 0xED */ [Debugger.INS.CALL, Debugger.TYPE_ADDR | Debugger.TYPE_UNDOC],
|
||||
/* 0xEE */ [Debugger.INS.XRI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xEF */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xF0 */ [Debugger.INS.RP],
|
||||
/* 0xF1 */ [Debugger.INS.POP, Debugger.TYPE_PS],
|
||||
/* 0xF2 */ [Debugger.INS.JP, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xF2 */ [Debugger.INS.JP, Debugger.TYPE_ADDR],
|
||||
/* 0xF3 */ [Debugger.INS.DI],
|
||||
/* 0xF4 */ [Debugger.INS.CP, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xF4 */ [Debugger.INS.CP, Debugger.TYPE_ADDR],
|
||||
/* 0xF5 */ [Debugger.INS.PUSH, Debugger.TYPE_PS],
|
||||
/* 0xF6 */ [Debugger.INS.ORI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xF7 */ [Debugger.INS.RST],
|
||||
/* 0xF6 */ [Debugger.INS.ORI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xF7 */ [Debugger.INS.RST, Debugger.TYPE_INT],
|
||||
/* 0xF8 */ [Debugger.INS.RM],
|
||||
/* 0xF9 */ [Debugger.INS.SPHL, Debugger.TYPE_SP, Debugger.TYPE_HL], // let's be more explicit about the operands
|
||||
/* 0xFA */ [Debugger.INS.JM, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xF9 */ [Debugger.INS.SPHL, Debugger.TYPE_SP, Debugger.TYPE_HL], // let's be more explicit about the operands
|
||||
/* 0xFA */ [Debugger.INS.JM, Debugger.TYPE_ADDR],
|
||||
/* 0xFB */ [Debugger.INS.EI],
|
||||
/* 0xFC */ [Debugger.INS.CM, Debugger.TYPE_IMM | Debugger.TYPE_WORD],
|
||||
/* 0xFD */ [Debugger.INS.CALL, Debugger.TYPE_IMM | Debugger.TYPE_WORD | Debugger.TYPE_UNDOC],
|
||||
/* 0xFE */ [Debugger.INS.CPI, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xFF */ [Debugger.INS.RST]
|
||||
/* 0xFC */ [Debugger.INS.CM, Debugger.TYPE_ADDR],
|
||||
/* 0xFD */ [Debugger.INS.CALL, Debugger.TYPE_ADDR | Debugger.TYPE_UNDOC],
|
||||
/* 0xFE */ [Debugger.INS.CPI, Debugger.TYPE_A | Debugger.TYPE_OPT, Debugger.TYPE_IMM | Debugger.TYPE_BYTE],
|
||||
/* 0xFF */ [Debugger.INS.RST, Debugger.TYPE_INT]
|
||||
];
|
||||
|
||||
/*
|
||||
|
|
@ -713,9 +719,6 @@ if (DEBUGGER) {
|
|||
var sMessages = cmp.getMachineParm('messages');
|
||||
if (sMessages) this.messageInit(sMessages);
|
||||
|
||||
this.cchAddr = bus.getWidth() >> 2;
|
||||
this.maskAddr = bus.nBusLimit;
|
||||
|
||||
this.aaOpDescs = Debugger.aaOpDescs;
|
||||
|
||||
this.messageDump(Messages.BUS, function onDumpBus(asArgs) { dbg.dumpBus(asArgs); });
|
||||
|
|
@ -1385,15 +1388,14 @@ if (DEBUGGER) {
|
|||
case Debugger.REG_H:
|
||||
case Debugger.REG_L:
|
||||
case Debugger.REG_M:
|
||||
case Debugger.REG_F:
|
||||
cch = 2;
|
||||
break;
|
||||
case Debugger.REG_BC:
|
||||
case Debugger.REG_DE:
|
||||
case Debugger.REG_HL:
|
||||
case Debugger.REG_PS:
|
||||
case Debugger.REG_SP:
|
||||
case Debugger.REG_PC:
|
||||
case Debugger.REG_PS:
|
||||
cch = 4;
|
||||
break;
|
||||
}
|
||||
|
|
@ -1417,9 +1419,6 @@ if (DEBUGGER) {
|
|||
case Debugger.REG_A:
|
||||
n = cpu.regA;
|
||||
break;
|
||||
case Debugger.REG_F:
|
||||
n = cpu.getPS();
|
||||
break;
|
||||
case Debugger.REG_B:
|
||||
n = cpu.regB;
|
||||
break;
|
||||
|
|
@ -1450,15 +1449,15 @@ if (DEBUGGER) {
|
|||
case Debugger.REG_M:
|
||||
n = cpu.getByte(cpu.getHL());
|
||||
break;
|
||||
case Debugger.REG_PS:
|
||||
n = (cpu.regA << 8) | (cpu.getPS() & 0xff);
|
||||
break;
|
||||
case Debugger.REG_SP:
|
||||
n = cpu.getSP();
|
||||
break;
|
||||
case Debugger.REG_PC:
|
||||
n = cpu.getPC();
|
||||
break;
|
||||
case Debugger.REG_PS:
|
||||
n = (cpu.regA << 8) | (cpu.getPS() & 0xff);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
@ -2429,7 +2428,7 @@ if (DEBUGGER) {
|
|||
|
||||
var bOpcode = this.getByte(dbgAddr, 1);
|
||||
|
||||
var asOpcodes = Debugger.INS_NAMES;
|
||||
var asOpcodes = this.style != Debugger.STYLE_8086? Debugger.INS_NAMES : Debugger.INS_NAMES_8086;
|
||||
var aOpDesc = this.aaOpDescs[bOpcode];
|
||||
var iIns = aOpDesc[0];
|
||||
|
||||
|
|
@ -2445,6 +2444,10 @@ if (DEBUGGER) {
|
|||
|
||||
type = aOpDesc[iOperand];
|
||||
if (type === undefined) continue;
|
||||
if ((type & Debugger.TYPE_OPT) && this.style == Debugger.STYLE_8080) continue;
|
||||
|
||||
var typeMode = type & Debugger.TYPE_MODE;
|
||||
if (!typeMode) continue;
|
||||
|
||||
var typeSize = type & Debugger.TYPE_SIZE;
|
||||
if (!typeSize) {
|
||||
|
|
@ -2458,13 +2461,15 @@ if (DEBUGGER) {
|
|||
type |= (iOperand == 1? Debugger.TYPE_OUT : Debugger.TYPE_IN);
|
||||
}
|
||||
|
||||
var typeMode = type & Debugger.TYPE_MODE;
|
||||
if (typeMode & Debugger.TYPE_IMM) {
|
||||
sOperand = this.getImmOperand(type, dbgAddr);
|
||||
}
|
||||
else if (typeMode & Debugger.TYPE_REG) {
|
||||
sOperand = this.getRegOperand((type & Debugger.TYPE_IREG) >> 8, type, dbgAddr);
|
||||
}
|
||||
else if (typeMode & Debugger.TYPE_INT) {
|
||||
sOperand = ((bOpcode >> 3) & 0x7).toString();
|
||||
}
|
||||
|
||||
if (!sOperand || !sOperand.length) {
|
||||
sOperands = "INVALID";
|
||||
|
|
@ -2524,11 +2529,12 @@ if (DEBUGGER) {
|
|||
sOperand = str.toHex(this.getShort(dbgAddr, 2), 4);
|
||||
break;
|
||||
default:
|
||||
sOperand = "imm(" + str.toHexWord(type) + ')';
|
||||
break;
|
||||
return "imm(" + str.toHexWord(type) + ')';
|
||||
}
|
||||
if (type & Debugger.TYPE_MEM) {
|
||||
if (this.style == Debugger.STYLE_8086 && (type & Debugger.TYPE_MEM)) {
|
||||
sOperand = '[' + sOperand + ']';
|
||||
} else if (!(type & Debugger.TYPE_REG)) {
|
||||
sOperand = (this.style == Debugger.STYLE_8080? '$' : "0x") + sOperand;
|
||||
}
|
||||
return sOperand;
|
||||
};
|
||||
|
|
@ -2545,11 +2551,18 @@ if (DEBUGGER) {
|
|||
Debugger.prototype.getRegOperand = function(iReg, type, dbgAddr)
|
||||
{
|
||||
/*
|
||||
* Although this breaks with assembler conventions, I'm going to experiment with some different
|
||||
* Although this breaks with 8080 assembler conventions, I'm going to experiment with some different
|
||||
* mnemonics; specifically, "[HL]" instead of "M". This is also more in keeping with how getImmOperand()
|
||||
* displays memory references (ie, by enclosing them in brackets).
|
||||
*/
|
||||
return iReg == Debugger.REG_M? "[HL]" : Debugger.REGS[iReg];
|
||||
var sOperand = Debugger.REGS[iReg];
|
||||
if (this.style == Debugger.STYLE_8086 && (type & Debugger.TYPE_MEM)) {
|
||||
if (iReg == Debugger.REG_M) {
|
||||
sOperand = "HL";
|
||||
}
|
||||
sOperand = '[' + sOperand + ']';
|
||||
}
|
||||
return sOperand;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -2624,8 +2637,8 @@ if (DEBUGGER) {
|
|||
*
|
||||
* Sample 8080 register dump:
|
||||
*
|
||||
* A=00 B=00 C=00 D=00 E=00 H=00 L=00 SP=0000 PS=00 I0 S0 Z0 A0 P0 C0
|
||||
* FFF0 C300F0 JMP F000
|
||||
* A=00 BC=0000 DE=0000 HL=0000 SP=0000 PSW=0002 I0 S0 Z0 A0 P0 C0
|
||||
* 0000 00 NOP
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @return {string}
|
||||
|
|
@ -2634,14 +2647,11 @@ if (DEBUGGER) {
|
|||
{
|
||||
var s;
|
||||
s = this.getRegOutput(Debugger.REG_A) +
|
||||
this.getRegOutput(Debugger.REG_F) +
|
||||
this.getRegOutput(Debugger.REG_B) +
|
||||
this.getRegOutput(Debugger.REG_C) +
|
||||
this.getRegOutput(Debugger.REG_D) +
|
||||
this.getRegOutput(Debugger.REG_E) +
|
||||
this.getRegOutput(Debugger.REG_H) +
|
||||
this.getRegOutput(Debugger.REG_L) +
|
||||
this.getRegOutput(Debugger.REG_BC) +
|
||||
this.getRegOutput(Debugger.REG_DE) +
|
||||
this.getRegOutput(Debugger.REG_HL) +
|
||||
this.getRegOutput(Debugger.REG_SP) +
|
||||
this.getRegOutput(Debugger.REG_PS) +
|
||||
this.getFlagOutput('I') + this.getFlagOutput('S') + this.getFlagOutput('Z') +
|
||||
this.getFlagOutput('A') + this.getFlagOutput('P') + this.getFlagOutput('C');
|
||||
return s;
|
||||
|
|
@ -3669,11 +3679,12 @@ if (DEBUGGER) {
|
|||
aaSortedOpcodeCounts.sort(function(p, q) {
|
||||
return q[1] - p[1];
|
||||
});
|
||||
var asOpcodes = this.style != Debugger.STYLE_8086? Debugger.INS_NAMES : Debugger.INS_NAMES_8086;
|
||||
for (i = 0; i < aaSortedOpcodeCounts.length; i++) {
|
||||
var bOpcode = aaSortedOpcodeCounts[i][0];
|
||||
var cFreq = aaSortedOpcodeCounts[i][1];
|
||||
if (cFreq) {
|
||||
this.println((Debugger.INS_NAMES[this.aaOpDescs[bOpcode][0]] + " ").substr(0, 5) + " (" + str.toHexByte(bOpcode) + "): " + cFreq + " times");
|
||||
this.println((asOpcodes[this.aaOpDescs[bOpcode][0]] + " ").substr(0, 5) + " (" + str.toHexByte(bOpcode) + "): " + cFreq + " times");
|
||||
cData++;
|
||||
}
|
||||
}
|
||||
|
|
@ -3833,12 +3844,7 @@ if (DEBUGGER) {
|
|||
|
||||
var dbgAddr = this.parseAddr(sAddr, true);
|
||||
if (dbgAddr) {
|
||||
|
||||
var addr = this.getAddr(dbgAddr);
|
||||
if (MAXDEBUG && fPrint) {
|
||||
this.println(this.toHexAddr(dbgAddr) + " (%" + str.toHex(addr, this.cchAddr) + ')');
|
||||
}
|
||||
|
||||
var aSymbol = this.findSymbol(dbgAddr, true);
|
||||
if (aSymbol.length) {
|
||||
var nDelta, sDelta, s;
|
||||
|
|
@ -3951,22 +3957,22 @@ if (DEBUGGER) {
|
|||
};
|
||||
|
||||
/**
|
||||
* doExecOptions(asArgs)
|
||||
* doOptions(asArgs)
|
||||
*
|
||||
* @this {Debugger}
|
||||
* @param {Array.<string>} asArgs
|
||||
*/
|
||||
Debugger.prototype.doExecOptions = function(asArgs)
|
||||
Debugger.prototype.doOptions = function(asArgs)
|
||||
{
|
||||
if (!asArgs[1] || asArgs[1] == '?') {
|
||||
this.println("execution options:");
|
||||
this.println("\tcs int #\tset checksum cycle interval to #");
|
||||
this.println("\tcs start #\tset checksum cycle start count to #");
|
||||
this.println("\tcs stop #\tset checksum cycle stop count to #");
|
||||
this.println("\tsp #\t\tset speed multiplier to #");
|
||||
return;
|
||||
}
|
||||
switch (asArgs[1]) {
|
||||
case "8080":
|
||||
this.style = Debugger.STYLE_8080;
|
||||
break;
|
||||
|
||||
case "8086":
|
||||
this.style = Debugger.STYLE_8086;
|
||||
break;
|
||||
|
||||
case "cs":
|
||||
var nCycles;
|
||||
if (asArgs[3] !== undefined) nCycles = +asArgs[3]; // warning: decimal instead of hex conversion
|
||||
|
|
@ -3988,7 +3994,8 @@ if (DEBUGGER) {
|
|||
this.cpu.resetChecksum();
|
||||
}
|
||||
this.println("checksums " + (this.cpu.flags.fChecksum? "enabled" : "disabled"));
|
||||
break;
|
||||
return;
|
||||
|
||||
case "sp":
|
||||
if (asArgs[2] !== undefined) {
|
||||
if (!this.cpu.setSpeed(+asArgs[2])) {
|
||||
|
|
@ -3996,11 +4003,26 @@ if (DEBUGGER) {
|
|||
}
|
||||
}
|
||||
this.println("target speed: " + this.cpu.getSpeedTarget() + " (" + this.cpu.getSpeed() + "x)");
|
||||
return;
|
||||
|
||||
case "?":
|
||||
this.println("debugger options:");
|
||||
this.println("\t8080\t\tselect 8080-style mnemonics");
|
||||
this.println("\t8086\t\tselect 8086-style mnemonics");
|
||||
this.println("\tcs int #\tset checksum cycle interval to #");
|
||||
this.println("\tcs start #\tset checksum cycle start count to #");
|
||||
this.println("\tcs stop #\tset checksum cycle stop count to #");
|
||||
this.println("\tsp #\t\tset speed multiplier to #");
|
||||
break;
|
||||
|
||||
default:
|
||||
this.println("unknown option: " + asArgs[1]);
|
||||
if (asArgs[1]) {
|
||||
this.println("unknown option: " + asArgs[1]);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
this.println(this.style + "-style mnemonics enabled");
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -4077,9 +4099,6 @@ if (DEBUGGER) {
|
|||
if (w !== undefined) {
|
||||
fValid = true;
|
||||
var sRegMatch = sReg.toUpperCase();
|
||||
if (sRegMatch.charAt(0) == 'E' && this.cchReg <= 4) {
|
||||
sRegMatch = null;
|
||||
}
|
||||
switch (sRegMatch) {
|
||||
case "A":
|
||||
cpu.regA = w & 0xff;
|
||||
|
|
@ -4676,6 +4695,9 @@ if (DEBUGGER) {
|
|||
}
|
||||
this.doRegisters(asArgs);
|
||||
break;
|
||||
case 's':
|
||||
this.doOptions(asArgs);
|
||||
break;
|
||||
case 't':
|
||||
this.doTrace(asArgs[0], asArgs[1]);
|
||||
break;
|
||||
|
|
@ -4692,9 +4714,6 @@ if (DEBUGGER) {
|
|||
this.println((APPNAME || "PC8080") + " version " + (XMLVERSION || APPVERSION) + " (" + this.cpu.model + (COMPILED? ",RELEASE" : (DEBUG? ",DEBUG" : ",NODEBUG")) + (TYPEDARRAYS? ",TYPEDARRAYS" : (BYTEARRAYS? ",BYTEARRAYS" : ",LONGARRAYS")) + ')');
|
||||
this.println(web.getUserAgent());
|
||||
break;
|
||||
case 'x':
|
||||
this.doExecOptions(asArgs);
|
||||
break;
|
||||
case '?':
|
||||
if (asArgs[1]) {
|
||||
this.doPrint(sCmd.substr(1));
|
||||
|
|
|
|||
Loading…
Reference in a new issue