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
|
// license:BSD-3-Clause
// copyright-holders:Wilbert Pol
#ifndef MAME_CPU_HCD62121_HCD62121D_H
#define MAME_CPU_HCD62121_HCD62121D_H
#pragma once
class hcd62121_disassembler : public util::disasm_interface
{
public:
hcd62121_disassembler() = default;
virtual ~hcd62121_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:
struct dasm
{
const char *str;
u8 arg1;
u8 arg2;
};
enum
{
ARG_NONE=0, /* no argument or unknown */
ARG_REG, /* register */
ARG_REGREG, /* register1, register2, or register2, register1 or register1, imm byte */
ARG_IRG, /* register indirect */
ARG_IRGREG, /* 2 register indirect */
ARG_A16, /* 16bit address */
ARG_A24, /* seg:address */
ARG_F, /* flag register */
ARG_CS, /* cs register */
ARG_DS, /* ds register */
ARG_SS, /* ss register */
ARG_PC, /* program counter */
ARG_SP, /* stack pointer */
ARG_I8, /* immediate 8 bit value */
ARG_I16, /* immediate 16 bit value */
ARG_I64, /* immediate 64 bit value */
ARG_I80, /* immediate 80 bit value */
ARG_ILR, /* indirect last address register access */
ARG_LAR, /* last address register */
ARG_DSZ, /* dsize register? */
ARG_OPT, /* OPTx (output) pins */
ARG_PORT, /* PORTx (output) pins */
ARG_TIM, /* timing related register? */
ARG_KLO, /* KO1 - KO8 output lines */
ARG_KHI, /* KO9 - KO14(?) output lines */
ARG_KI, /* K input lines */
ARG_S1, /* shift by 1 */
ARG_S4, /* shift by 4 */
ARG_S8, /* shift by 8 */
};
static const dasm ops[256];
};
#endif
|