summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m6502/m6502.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m6502/m6502.h')
-rw-r--r--src/devices/cpu/m6502/m6502.h33
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); }