diff options
Diffstat (limited to 'src/emu/cpu/m6502/m6502.c')
-rw-r--r-- | src/emu/cpu/m6502/m6502.c | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/src/emu/cpu/m6502/m6502.c b/src/emu/cpu/m6502/m6502.c index c1a84b2fd9c..01b2b8f0f98 100644 --- a/src/emu/cpu/m6502/m6502.c +++ b/src/emu/cpu/m6502/m6502.c @@ -17,7 +17,8 @@ const device_type M6502 = &device_creator<m6502_device>; m6502_device::m6502_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : cpu_device(mconfig, M6502, "M6502", tag, owner, clock, "m6502", __FILE__), sync_w(*this), - program_config("program", ENDIANNESS_LITTLE, 8, 16) + program_config("program", ENDIANNESS_LITTLE, 8, 16), + sprogram_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16) { direct_disabled = false; } @@ -25,7 +26,8 @@ m6502_device::m6502_device(const machine_config &mconfig, const char *tag, devic m6502_device::m6502_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source) : cpu_device(mconfig, type, name, tag, owner, clock, shortname, source), sync_w(*this), - program_config("program", ENDIANNESS_LITTLE, 8, 16) + program_config("program", ENDIANNESS_LITTLE, 8, 16), + sprogram_config("decrypted_opcodes", ENDIANNESS_LITTLE, 8, 16) { direct_disabled = false; } @@ -42,8 +44,11 @@ void m6502_device::device_start() void m6502_device::init() { - mintf->program = &space(AS_PROGRAM); - mintf->direct = &mintf->program->direct(); + mintf->program = &space(AS_PROGRAM); + mintf->sprogram = has_space(AS_DECRYPTED_OPCODES) ? &space(AS_DECRYPTED_OPCODES) : mintf->program; + + mintf->direct = &mintf->program->direct(); + mintf->sdirect = &mintf->sprogram->direct(); sync_w.resolve_safe(); @@ -402,7 +407,12 @@ void m6502_device::execute_set_input(int inputnum, int state) const address_space_config *m6502_device::memory_space_config(address_spacenum spacenum) const { - return (spacenum == AS_PROGRAM) ? &program_config : NULL; + switch(spacenum) + { + case AS_PROGRAM: return &program_config; + case AS_DECRYPTED_OPCODES: return has_configured_map(AS_DECRYPTED_OPCODES) ? &sprogram_config : NULL; + default: return NULL; + } } @@ -621,7 +631,7 @@ void m6502_device::prefetch() sync = true; sync_w(ASSERT_LINE); NPC = PC; - IR = mintf->read_decrypted(PC); + IR = mintf->read_sync(PC); sync = false; sync_w(CLEAR_LINE); @@ -637,7 +647,7 @@ void m6502_device::prefetch_noirq() sync = true; sync_w(ASSERT_LINE); NPC = PC; - IR = mintf->read_decrypted(PC); + IR = mintf->read_sync(PC); sync = false; sync_w(CLEAR_LINE); PC++; @@ -674,31 +684,33 @@ UINT8 m6502_device::mi_default_normal::read(UINT16 adr) return program->read_byte(adr); } -UINT8 m6502_device::mi_default_normal::read_direct(UINT16 adr) +UINT8 m6502_device::mi_default_normal::read_sync(UINT16 adr) { - return direct->read_raw_byte(adr); + return sdirect->read_byte(adr); } -UINT8 m6502_device::mi_default_normal::read_decrypted(UINT16 adr) +UINT8 m6502_device::mi_default_normal::read_arg(UINT16 adr) { - return direct->read_decrypted_byte(adr); + return direct->read_byte(adr); } + void m6502_device::mi_default_normal::write(UINT16 adr, UINT8 val) { program->write_byte(adr, val); } -UINT8 m6502_device::mi_default_nd::read_direct(UINT16 adr) +UINT8 m6502_device::mi_default_nd::read_sync(UINT16 adr) { - return read(adr); + return sprogram->read_byte(adr); } -UINT8 m6502_device::mi_default_nd::read_decrypted(UINT16 adr) +UINT8 m6502_device::mi_default_nd::read_arg(UINT16 adr) { - return read(adr); + return program->read_byte(adr); } + WRITE_LINE_MEMBER( m6502_device::irq_line ) { set_input_line( M6502_IRQ_LINE, state ); |