diff options
Diffstat (limited to 'src/devices/cpu/m6502/w65c02.h')
-rw-r--r-- | src/devices/cpu/m6502/w65c02.h | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/devices/cpu/m6502/w65c02.h b/src/devices/cpu/m6502/w65c02.h new file mode 100644 index 00000000000..552565d4203 --- /dev/null +++ b/src/devices/cpu/m6502/w65c02.h @@ -0,0 +1,77 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + w65c02.h + + WDC W65C02, CMOS variant with some additional instructions + (but not the bitwise ones) + +***************************************************************************/ +#ifndef MAME_CPU_M6502_W65C02_H +#define MAME_CPU_M6502_W65C02_H + +#pragma once + +#include "m6502.h" + +class w65c02_device : public m6502_device { +public: + w65c02_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: + w65c02_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_aba); O(asl_c_abx); O(asl_c_zpg); O(asl_c_zpx); + 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(dec_c_aba); O(dec_c_abx); O(dec_c_zpg); O(dec_c_zpx); + O(eor_zpi); + O(inc_acc); O(inc_c_aba); O(inc_c_abx); O(inc_c_zpg); O(inc_c_zpx); + O(jmp_c_ind); O(jmp_iax); + O(lda_zpi); + O(lsr_c_aba); O(lsr_c_abx); O(lsr_c_zpg); O(lsr_c_zpx); + 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_aba); O(rol_c_abx); O(rol_c_zpg); O(rol_c_zpx); + O(ror_c_aba); O(ror_c_abx); O(ror_c_zpg); O(ror_c_zpx); + 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); + O(reset_c); + +#undef O +}; + +enum { + W65C02_IRQ_LINE = m6502_device::IRQ_LINE, + W65C02_NMI_LINE = m6502_device::NMI_LINE, + W65C02_SET_OVERFLOW = m6502_device::V_LINE +}; + +DECLARE_DEVICE_TYPE(W65C02, w65c02_device) + +#endif // MAME_CPU_M6502_W65C02_H |