summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/cpu/m6502/m6502.c
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2015-06-04 21:42:58 +0200
committer Olivier Galibert <galibert@pobox.com>2015-06-24 08:43:34 +0200
commit88949a5b47798b3c82851c31b6f801e4fb8ca06f (patch)
tree7929d5f4beb47f8f6b61fe2a2b89f2302f3df19c /src/emu/cpu/m6502/m6502.c
parentd1583b9850d9fb45470648a515eb734e05fd926f (diff)
memory: Remove support for decrypted bases, use an address space instead [O. Galibert]
Diffstat (limited to 'src/emu/cpu/m6502/m6502.c')
-rw-r--r--src/emu/cpu/m6502/m6502.c42
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 );