diff options
author | 2015-09-13 08:41:44 +0200 | |
---|---|---|
committer | 2015-09-13 08:41:44 +0200 | |
commit | f88cefad27a1737c76e09d99c9fb43e173506081 (patch) | |
tree | 2d8167d03579c46e226471747eb4407bd00ed6fa /src/devices/cpu/m6502/m6509.h | |
parent | e92ac9e0fa8e99869894bea00589bbb526be30aa (diff) |
Move all devices into separate part of src tree (nw)
Diffstat (limited to 'src/devices/cpu/m6502/m6509.h')
-rw-r--r-- | src/devices/cpu/m6502/m6509.h | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/src/devices/cpu/m6502/m6509.h b/src/devices/cpu/m6502/m6509.h new file mode 100644 index 00000000000..2bfee01981a --- /dev/null +++ b/src/devices/cpu/m6502/m6509.h @@ -0,0 +1,87 @@ +// license:BSD-3-Clause +// copyright-holders:Olivier Galibert +/*************************************************************************** + + m6509.h + + 6502 with banking and extended address bus + +***************************************************************************/ + +#ifndef __M6509_H__ +#define __M6509_H__ + +#include "m6502.h" + +class m6509_device : public m6502_device { +public: + m6509_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + static const disasm_entry disasm_entries[0x100]; + + virtual offs_t disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options); + virtual void do_exec_full(); + virtual void do_exec_partial(); + +protected: + class mi_6509_normal : public memory_interface { + public: + m6509_device *base; + + mi_6509_normal(m6509_device *base); + virtual ~mi_6509_normal() {} + virtual UINT8 read(UINT16 adr); + virtual UINT8 read_9(UINT16 adr); + virtual UINT8 read_sync(UINT16 adr); + virtual UINT8 read_arg(UINT16 adr); + virtual void write(UINT16 adr, UINT8 val); + virtual void write_9(UINT16 adr, UINT8 val); + }; + + class mi_6509_nd : public mi_6509_normal { + public: + mi_6509_nd(m6509_device *base); + virtual ~mi_6509_nd() {} + virtual UINT8 read_sync(UINT16 adr); + virtual UINT8 read_arg(UINT16 adr); + }; + + virtual void device_start(); + virtual void device_reset(); + virtual void state_export(const device_state_entry &entry); + + UINT32 XPC; + + UINT8 bank_i, bank_y; + + UINT8 bank_i_r() { return bank_i; } + UINT8 bank_y_r() { return bank_y; } + void bank_i_w(UINT8 data) { bank_i = data; } + void bank_y_w(UINT8 data) { bank_y = data; } + + UINT32 adr_in_bank_i(UINT16 adr) { return adr | ((bank_i & 0xf) << 16); } + UINT32 adr_in_bank_y(UINT16 adr) { return adr | ((bank_y & 0xf) << 16); } + +#define O(o) void o ## _full(); void o ## _partial() + + // 6509 opcodes + O(lda_9_idy); + O(sta_9_idy); + +#undef O +}; + +enum { + M6509_IRQ_LINE = m6502_device::IRQ_LINE, + M6509_NMI_LINE = m6502_device::NMI_LINE, + M6509_SET_OVERFLOW = m6502_device::V_LINE +}; + +enum { + M6509_BI = M6502_IR+1, + M6509_BY +}; + +extern const device_type M6509; + +#endif |