1 // license:BSD-3-Clause 2 // copyright-holders:Wilbert Pol 3 /************************************************************ 4 5 Nintendo Minx CPU disassembly 6 7 8 ************************************************************/ 9 10 #ifndef MAME_CPU_MINX_MINXDASM_H 11 #define MAME_CPU_MINX_MINXDASM_H 12 13 #pragma once 14 15 class minx_disassembler : public util::disasm_interface 16 { 17 public: 18 minx_disassembler() = default; 19 virtual ~minx_disassembler() = default; 20 21 virtual u32 opcode_alignment() const override; 22 virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; 23 24 private: 25 enum e_mnemonic { 26 zADD=0, zADDC, zAND, zBCDD, zBCDE, zBCDX, zCALL, zCALLC, zCALLG, zCALLGE, zCALLL, 27 zCALLLE, zCALLN, zCALLNC, zCALLNO, zCALLNZ, zCALLO, zCALLP, zCALLNX0, 28 zCALLNX1, zCALLNX2, zCALLNX3, zCALLX0, zCALLX1, zCALLX2, zCALLX3, zCALLZ, 29 zCMP, zCMPN, zDEC, zDIV, zEXT, zHALT, zINC, zINT, 30 zJC, zJDBNZ, zJG, zJGE, zJINT, zJL, zJLE, zJMP, 31 zJN, zJNX0, zJNX1, zJNX2, zJNX3, zJNC, zJNO, zJNZ, 32 zJO, zJP, zJX0, zJX1, zJX2, zJX3, zJZ, zMOV, 33 zMUL, zNEG, zNOP, zNOT, zOR, zPOP, zPOPA, zPOPAX, 34 zPOPX, zPUSH, zPUSHA, zPUSHAX, zPUSHX, zRET, zRETI, zRETSKIP, 35 zROL, zROLC, zROR, zRORC, zSAL, zSAR, zSHL, zSHR, zSUB, 36 zSUBC, zTEST, zXCHG, zXOR, zDB 37 }; 38 39 enum e_operand { 40 R_A=1, /* A */ 41 R_B, /* B */ 42 R_L, /* L */ 43 R_H, /* H */ 44 R_N, /* N */ 45 R_F, /* F */ 46 R_SP, /* SP */ 47 R_BA, /* BA */ 48 R_HL, /* HL */ 49 R_X, /* X */ 50 R_Y, /* Y */ 51 R_U, /* U */ 52 R_V, /* V */ 53 R_I, /* I */ 54 R_XI, /* XI */ 55 R_YI, /* YI */ 56 R_PC, /* PC */ 57 I_8, /* 8 bit immediate */ 58 I_16, /* 16 bit immediate */ 59 D_8, /* PC + 8 bit displacement (signed) */ 60 D_16, /* PC + 16 bit displacement */ 61 S_8, /* SP + 8 bit displacement (signed) */ 62 M_IHL, /* [I+HL] */ 63 M_N8, /* [I+N+ofs8] */ 64 M_I16, /* [I+ofs16] */ 65 M_X, /* [X] */ 66 M_Y, /* [Y] */ 67 M_X8, /* [X + 8 bit displacement (signed)] */ 68 M_Y8, /* [Y + 8 bit displacement (signed)] */ 69 M_XL, /* [X + L (signed)] */ 70 M_YL, /* [Y + L (signed)] */ 71 M_16, /* [16bit] */ 72 M_HL, /* [HL] */ 73 OP, OP1 74 }; 75 76 struct minxdasm { 77 uint8_t mnemonic; 78 uint8_t argument1; 79 uint8_t argument2; 80 }; 81 82 static const char *const s_mnemonic[]; 83 static const uint32_t s_flags[]; 84 static const minxdasm mnemonic[256]; 85 static const minxdasm mnemonic_ce[256]; 86 static const minxdasm mnemonic_cf[256]; 87 }; 88 89 #endif 90