--- mon/src/mon_z80.cpp 2007/01/14 14:01:09 1.7 +++ mon/src/mon_z80.cpp 2007/01/21 17:32:05 1.8 @@ -27,7 +27,7 @@ // Addressing modes -enum { +enum AddrMode { A_IMPL, A_IMM8, // xx A_IMM16, // xxxx @@ -58,7 +58,7 @@ enum { }; // Mnemonics -enum { +enum Mnemonic { M_ADC, M_ADD, M_AND, M_BIT, M_CALL, M_CCF, M_CP, M_CPD, M_CPDR, M_CPI, M_CPIR, M_CPL, M_DAA, M_DEC, M_DI, M_DJNZ, M_EI, M_EX, M_EXX, M_HALT, M_IM0, M_IM1, M_IM2, M_IN, M_INC, M_IND, M_INDR, M_INI, M_INIR, M_JP, @@ -79,7 +79,7 @@ static const char mnem_3[] = "cddtlf ddi static const char mnem_4[] = " l r r z t012 r r r r rr di h in a a "; // Mnemonic for each opcode -static const char mnemonic[256] = { +static const Mnemonic mnemonic[256] = { M_NOP , M_LD , M_LD , M_INC , M_INC , M_DEC , M_LD , M_RLCA, // 00 M_EX , M_ADD, M_LD , M_DEC , M_INC , M_DEC , M_LD , M_RRCA, M_DJNZ, M_LD , M_LD , M_INC , M_INC , M_DEC , M_LD , M_RLA , // 10 @@ -117,7 +117,7 @@ static const char mnemonic[256] = { // Source/destination addressing modes for each opcode #define A(d,s) (((A_ ## d) << 8) | (A_ ## s)) -static const short adr_mode[256] = { +static const int adr_mode[256] = { A(IMPL,IMPL) , A(REG3,IMM16) , A(BC_IND,A) , A(REG3,IMPL) , A(REG2,IMPL) , A(REG2,IMPL) , A(REG2,IMM8) , A(IMPL,IMPL) , // 00 A(AF_AF,IMPL) , A(HL,REG3) , A(A,BC_IND) , A(REG3,IMPL) , A(REG2,IMPL) , A(REG2,IMPL) , A(REG2,IMM8) , A(IMPL,IMPL) , A(REL,IMPL) , A(REG3,IMM16) , A(DE_IND,A) , A(REG3,IMPL) , A(REG2,IMPL) , A(REG2,IMPL) , A(REG2,IMM8) , A(IMPL,IMPL) , // 10 @@ -333,7 +333,7 @@ static void operand(SFILE *f, char mode, } } -static int print_instr(SFILE *f, char mnem, char dst_mode, char src_mode, uint32 adr, uint8 op, bool ix, bool iy) +static int print_instr(SFILE *f, Mnemonic mnem, AddrMode dst_mode, AddrMode src_mode, uint32 adr, uint8 op, bool ix, bool iy) { uint32 orig_adr = adr; @@ -366,7 +366,9 @@ static int disass_cb(SFILE *f, uint32 ad } // Decode mnemonic and addressing modes - char mnem = M_ILLEGAL, dst_mode = A_IMPL, src_mode = A_IMPL; + Mnemonic mnem = M_ILLEGAL; + AddrMode dst_mode = A_IMPL, src_mode = A_IMPL; + switch (op & 0xc0) { case 0x00: dst_mode = A_REG1X; @@ -423,7 +425,9 @@ static int disass_ed(SFILE *f, uint32 ad uint8 op = mon_read_byte(adr); // Decode mnemonic and addressing modes - char mnem, dst_mode = A_IMPL, src_mode = A_IMPL; + Mnemonic mnem; + AddrMode dst_mode = A_IMPL, src_mode = A_IMPL; + switch (op) { case 0x40: case 0x48: @@ -564,7 +568,7 @@ static int disass(SFILE *f, uint32 adr, if (op == 0xcb) return disass_cb(f, adr + 1, ix, iy) + 1; else - return print_instr(f, mnemonic[op], adr_mode[op] >> 8, adr_mode[op] & 0xff, adr + 1, op, ix, iy) + 1; + return print_instr(f, mnemonic[op], AddrMode(adr_mode[op] >> 8), AddrMode(adr_mode[op] & 0xff), adr + 1, op, ix, iy) + 1; } int disass_z80(FILE *f, uint32 adr)