summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/m65c02.h
blob: a1e0ba553d23e7ccb0b93cb852e33512015b5df0 (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 MAME_CPU_M6502_M65C02_H
#define MAME_CPU_M6502_M65C02_H

#pragma once

#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);

	virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
	virtual void do_exec_full() override;
	virtual void do_exec_partial() override;

protected:
	m65c02_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

#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
};

DECLARE_DEVICE_TYPE(M65C02, m65c02_device)

#endif // MAME_CPU_M6502_M65C02_H