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