diff options
Diffstat (limited to 'src/devices/cpu/m6502/m6502.h')
-rw-r--r-- | src/devices/cpu/m6502/m6502.h | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/devices/cpu/m6502/m6502.h b/src/devices/cpu/m6502/m6502.h index 077de2920ac..a94448eddc1 100644 --- a/src/devices/cpu/m6502/m6502.h +++ b/src/devices/cpu/m6502/m6502.h @@ -20,17 +20,6 @@ public: V_LINE = INPUT_LINE_IRQ0 + 16 }; - m6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - bool get_sync() const { return sync; } - - auto sync_cb() { return sync_w.bind(); } - - devcb_write_line sync_w; - -protected: - m6502_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - class memory_interface { public: memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache cprogram, csprogram; @@ -46,6 +35,27 @@ protected: virtual void write_9(uint16_t adr, uint8_t val); }; + m6502_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + void set_address_width(int width, bool custom_interface) { + program_config.m_addr_width = width; + sprogram_config.m_addr_width = width; + uses_custom_memory_interface = custom_interface; + } + + void set_custom_memory_interface(std::unique_ptr<memory_interface> interface) { + mintf = std::move(interface); + } + + bool get_sync() const { return sync; } + + auto sync_cb() { return sync_w.bind(); } + + devcb_write_line sync_w; + +protected: + m6502_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + class mi_default : public memory_interface { public: virtual ~mi_default() = default; @@ -123,6 +133,7 @@ protected: int icount, bcount, count_before_instruction_step; bool nmi_state, irq_state, apu_irq_state, v_state; bool nmi_pending, irq_taken, sync, inhibit_interrupts; + bool uses_custom_memory_interface; uint8_t read(uint16_t adr) { return mintf->read(adr); } uint8_t read_9(uint16_t adr) { return mintf->read_9(adr); } |