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 &params) 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