summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/hcd62121/hcd62121d.h
blob: c03d10dd410dd81bda1028b61e83233d9dccd7ec (plain) (blame)
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 &params) 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