summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/m65c02.h
blob: ff1dbc0c780b129bfb4d0f602ff8f51512b99724 (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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// license:BSD-3-Clause
// copyright-holders:Olivier Galibert
/***************************************************************************

    m65c02.h

    Mostek 6502, CMOS variant with some additional instructions (but
    not the bitwise ones)

***************************************************************************/

#ifndef __M65C02_H__
#define __M65C02_H__

#include "m6502.h"

class m65c02_device : public m6502_device {
public:
	m65c02_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
	m65c02_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source);

	static const disasm_entry disasm_entries[0x100];

	virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options) override;
	virtual void do_exec_full() override;
	virtual void do_exec_partial() override;

protected:
#define O(o) void o ## _full(); void o ## _partial()

	// 65c02 opcodes
	O(adc_c_aba); O(adc_c_abx); O(adc_c_aby); O(adc_c_idx); O(adc_c_idy); O(adc_c_imm); O(adc_c_zpg); O(adc_c_zpi); O(adc_c_zpx);
	O(and_zpi);
	O(asl_c_abx);
	O(bbr_zpb);
	O(bbs_zpb);
	O(bit_abx); O(bit_imm); O(bit_zpx);
	O(bra_rel);
	O(brk_c_imp);
	O(cmp_zpi);
	O(dec_acc);
	O(eor_zpi);
	O(inc_acc);
	O(jmp_c_ind); O(jmp_iax);
	O(lda_zpi);
	O(lsr_c_abx);
	O(nop_c_aba); O(nop_c_abx); O(nop_c_imp);
	O(ora_zpi);
	O(phx_imp);
	O(phy_imp);
	O(plx_imp);
	O(ply_imp);
	O(rmb_bzp);
	O(rol_c_abx);
	O(ror_c_abx);
	O(sbc_c_aba); O(sbc_c_abx); O(sbc_c_aby); O(sbc_c_idx); O(sbc_c_idy); O(sbc_c_imm); O(sbc_c_zpg); O(sbc_c_zpi); O(sbc_c_zpx);
	O(smb_bzp);
	O(stp_imp);
	O(sta_zpi);
	O(stz_aba); O(stz_abx); O(stz_zpg); O(stz_zpx);
	O(trb_aba); O(trb_zpg);
	O(tsb_aba); O(tsb_zpg);
	O(wai_imp);

#undef O
};

enum {
	M65C02_IRQ_LINE = m6502_device::IRQ_LINE,
	M65C02_NMI_LINE = m6502_device::NMI_LINE,
	M65C02_SET_OVERFLOW = m6502_device::V_LINE
};

extern const device_type M65C02;

#endif