summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-11-23 00:05:00 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-11-23 00:05:00 +0000
commitcf2bb4f315bb15b991e22665838f62f6792001e2 (patch)
tree41589dc7872cee72972878990691ab4507e4111a /src
parent2d5bd758dee8247a5b0ce096963962d32738fa11 (diff)
More memory conversions.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/pdp1/pdp1.c1
-rw-r--r--src/emu/cpu/pdp1/tx0.c7
-rw-r--r--src/emu/cpu/pdp1/tx0.h4
-rw-r--r--src/emu/cpu/pic16c5x/pic16c5x.c11
-rw-r--r--src/emu/cpu/pic16c5x/pic16c5x.h14
-rw-r--r--src/emu/cpu/powerpc/ppc.c151
-rw-r--r--src/emu/cpu/powerpc/ppc403.c28
-rw-r--r--src/emu/cpu/powerpc/ppc602.c2
-rw-r--r--src/emu/cpu/powerpc/ppc603.c2
-rw-r--r--src/emu/cpu/powerpc/ppc_mem.c100
-rw-r--r--src/emu/cpu/powerpc/ppccom.c16
-rw-r--r--src/emu/cpu/powerpc/ppccom.h1
-rw-r--r--src/emu/cpu/rsp/rsp.c49
-rw-r--r--src/emu/cpu/s2650/s2650.c33
-rw-r--r--src/emu/cpu/saturn/satops.c8
-rw-r--r--src/emu/cpu/saturn/saturn.c3
-rw-r--r--src/emu/cpu/sc61860/sc61860.c6
-rw-r--r--src/emu/cpu/sc61860/scops.c12
-rw-r--r--src/emu/cpu/se3208/se3208.c109
-rw-r--r--src/emu/cpu/sh2/sh2.c41
-rw-r--r--src/emu/cpu/sh2/sh2comn.c38
-rw-r--r--src/emu/cpu/sh2/sh2comn.h1
-rw-r--r--src/emu/cpu/sh2/sh2drc.c13
-rw-r--r--src/emu/cpu/sh4/sh4.c36
-rw-r--r--src/emu/cpu/sh4/sh4comn.c41
-rw-r--r--src/emu/cpu/sh4/sh4comn.h2
-rw-r--r--src/emu/cpu/sm8500/sm8500.c7
-rw-r--r--src/emu/cpu/spc700/spc700.c3
-rw-r--r--src/emu/cpu/spc700/spc700.h12
-rw-r--r--src/emu/cpu/ssp1601/ssp1601.c19
-rw-r--r--src/emu/cpu/t11/t11.c5
-rw-r--r--src/emu/cpu/t11/t11.h8
-rw-r--r--src/emu/cpu/tlcs90/tlcs90.c17
33 files changed, 443 insertions, 357 deletions
diff --git a/src/emu/cpu/pdp1/pdp1.c b/src/emu/cpu/pdp1/pdp1.c
index fc3f52e60a0..79c66b632c7 100644
--- a/src/emu/cpu/pdp1/pdp1.c
+++ b/src/emu/cpu/pdp1/pdp1.c
@@ -335,6 +335,7 @@
*/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "pdp1.h"
diff --git a/src/emu/cpu/pdp1/tx0.c b/src/emu/cpu/pdp1/tx0.c
index 1dc743b6780..950c9366503 100644
--- a/src/emu/cpu/pdp1/tx0.c
+++ b/src/emu/cpu/pdp1/tx0.c
@@ -8,6 +8,7 @@
Raphael Nabet 2004
*/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "cpuintrf.h"
#include "debugger.h"
#include "tx0.h"
@@ -73,6 +74,9 @@ typedef struct
void (*sel_handler)(void);
/* called when reset line is pulsed: IO devices should reset */
void (*io_reset_callback)(void);
+
+ const device_config *device;
+ const address_space *program;
}
tx0_Regs;
@@ -142,6 +146,9 @@ static void tx0_init_common(int is_64kw, const device_config *device, int index,
tx0.address_mask = is_64kw ? ADDRESS_MASK_64KW : ADDRESS_MASK_8KW;
tx0.ir_mask = is_64kw ? 03 : 037;
+
+ tx0.device = device;
+ tx0.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
}
static CPU_INIT( tx0_64kw )
diff --git a/src/emu/cpu/pdp1/tx0.h b/src/emu/cpu/pdp1/tx0.h
index dd90fd6690b..e3e698d49b2 100644
--- a/src/emu/cpu/pdp1/tx0.h
+++ b/src/emu/cpu/pdp1/tx0.h
@@ -47,8 +47,8 @@ struct _tx0_reset_param_t
CPU_GET_INFO( tx0_64kw );
CPU_GET_INFO( tx0_8kw );
-#define READ_TX0_18BIT(A) ((signed)program_read_dword_32be((A)<<2))
-#define WRITE_TX0_18BIT(A,V) (program_write_dword_32be((A)<<2,(V)))
+#define READ_TX0_18BIT(A) ((signed)memory_read_dword_32be(tx0.program, (A)<<2))
+#define WRITE_TX0_18BIT(A,V) (memory_write_dword_32be(tx0.program, (A)<<2,(V)))
CPU_DISASSEMBLE( tx0_64kw );
CPU_DISASSEMBLE( tx0_8kw );
diff --git a/src/emu/cpu/pic16c5x/pic16c5x.c b/src/emu/cpu/pic16c5x/pic16c5x.c
index 3569a5f6315..5622dceed2a 100644
--- a/src/emu/cpu/pic16c5x/pic16c5x.c
+++ b/src/emu/cpu/pic16c5x/pic16c5x.c
@@ -51,7 +51,7 @@
* *
\**************************************************************************/
-
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "pic16c5x.h"
@@ -94,6 +94,10 @@ typedef struct
UINT16 prescaler; /* Note: this is really an 8-bit register */
PAIR opcode;
UINT8 internalram[8];
+ const device_config *device;
+ const address_space *program;
+ const address_space *data;
+ const address_space *io;
} pic16C5x_Regs;
static pic16C5x_Regs R;
@@ -718,6 +722,11 @@ static CPU_INIT( pic16C5x )
state_save_register_item("pic16C5x", device->tag, 0, delay_timer);
state_save_register_item("pic16C5x", device->tag, 0, picmodel);
state_save_register_item("pic16C5x", device->tag, 0, pic16C5x_reset_vector);
+
+ R.device = device;
+ R.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ R.data = memory_find_address_space(device, ADDRESS_SPACE_DATA);
+ R.io = memory_find_address_space(device, ADDRESS_SPACE_IO);
}
diff --git a/src/emu/cpu/pic16c5x/pic16c5x.h b/src/emu/cpu/pic16c5x/pic16c5x.h
index f1835412350..15e9f3eeb31 100644
--- a/src/emu/cpu/pic16c5x/pic16c5x.h
+++ b/src/emu/cpu/pic16c5x/pic16c5x.h
@@ -50,21 +50,21 @@ void pic16c5x_config(int data);
*/
#define PIC16C5x_T0 0x10
-#define PIC16C5x_T0_In (io_read_byte_8le(PIC16C5x_T0))
+#define PIC16C5x_T0_In (memory_read_byte_8le(R.io, PIC16C5x_T0))
/****************************************************************************
* Input a word from given I/O port
*/
-#define PIC16C5x_In(Port) ((UINT8)io_read_byte_8le((Port)))
+#define PIC16C5x_In(Port) ((UINT8)memory_read_byte_8le(R.io, (Port)))
/****************************************************************************
* Output a word to given I/O port
*/
-#define PIC16C5x_Out(Port,Value) (io_write_byte_8le((Port),Value))
+#define PIC16C5x_Out(Port,Value) (memory_write_byte_8le(R.io, (Port),Value))
@@ -72,14 +72,14 @@ void pic16c5x_config(int data);
* Read a word from given RAM memory location
*/
-#define PIC16C5x_RAM_RDMEM(A) ((UINT8)data_read_byte_8le(A))
+#define PIC16C5x_RAM_RDMEM(A) ((UINT8)memory_read_byte_8le(R.data, A))
/****************************************************************************
* Write a word to given RAM memory location
*/
-#define PIC16C5x_RAM_WRMEM(A,V) (data_write_byte_8le(A,V))
+#define PIC16C5x_RAM_WRMEM(A,V) (memory_write_byte_8le(R.data, A,V))
@@ -89,7 +89,7 @@ void pic16c5x_config(int data);
* can be used to greatly speed up emulation
*/
-#define PIC16C5x_RDOP(A) (program_decrypted_read_word((A)<<1))
+#define PIC16C5x_RDOP(A) (memory_decrypted_read_word(R.program, (A)<<1))
/****************************************************************************
@@ -98,7 +98,7 @@ void pic16c5x_config(int data);
* that use different encoding mechanisms for opcodes and opcode arguments
*/
-#define PIC16C5x_RDOP_ARG(A) (program_raw_read_word((A)<<1))
+#define PIC16C5x_RDOP_ARG(A) (program_raw_read_word(R.program, (A)<<1))
diff --git a/src/emu/cpu/powerpc/ppc.c b/src/emu/cpu/powerpc/ppc.c
index e1ede5e4806..9538bdad872 100644
--- a/src/emu/cpu/powerpc/ppc.c
+++ b/src/emu/cpu/powerpc/ppc.c
@@ -314,6 +314,7 @@ typedef struct {
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
// STUFF added for the 6xx series
UINT32 dec, dec_frac;
@@ -340,20 +341,20 @@ typedef struct {
/* PowerPC function pointers for memory accesses/exceptions */
jmp_buf exception_jmpbuf;
- UINT8 (*read8)(offs_t address);
- UINT16 (*read16)(offs_t address);
- UINT32 (*read32)(offs_t address);
- UINT64 (*read64)(offs_t address);
- void (*write8)(offs_t address, UINT8 data);
- void (*write16)(offs_t address, UINT16 data);
- void (*write32)(offs_t address, UINT32 data);
- void (*write64)(offs_t address, UINT64 data);
- UINT16 (*read16_unaligned)(offs_t address);
- UINT32 (*read32_unaligned)(offs_t address);
- UINT64 (*read64_unaligned)(offs_t address);
- void (*write16_unaligned)(offs_t address, UINT16 data);
- void (*write32_unaligned)(offs_t address, UINT32 data);
- void (*write64_unaligned)(offs_t address, UINT64 data);
+ UINT8 (*read8)(const address_space *space, offs_t address);
+ UINT16 (*read16)(const address_space *space, offs_t address);
+ UINT32 (*read32)(const address_space *space, offs_t address);
+ UINT64 (*read64)(const address_space *space, offs_t address);
+ void (*write8)(const address_space *space, offs_t address, UINT8 data);
+ void (*write16)(const address_space *space, offs_t address, UINT16 data);
+ void (*write32)(const address_space *space, offs_t address, UINT32 data);
+ void (*write64)(const address_space *space, offs_t address, UINT64 data);
+ UINT16 (*read16_unaligned)(const address_space *space, offs_t address);
+ UINT32 (*read32_unaligned)(const address_space *space, offs_t address);
+ UINT64 (*read64_unaligned)(const address_space *space, offs_t address);
+ void (*write16_unaligned)(const address_space *space, offs_t address, UINT16 data);
+ void (*write32_unaligned)(const address_space *space, offs_t address, UINT32 data);
+ void (*write64_unaligned)(const address_space *space, offs_t address, UINT64 data);
void (* optable19[1024])(UINT32);
void (* optable31[1024])(UINT32);
@@ -380,8 +381,8 @@ static int bus_freq_multiplier = 1;
static PPC_REGS ppc;
static UINT32 ppc_rotate_mask[32][32];
-#define ROPCODE(pc) program_decrypted_read_dword(pc)
-#define ROPCODE64(pc) program_decrypted_read_qword(DWORD_XOR_BE(pc))
+#define ROPCODE(pc) memory_decrypted_read_dword(ppc.program, pc)
+#define ROPCODE64(pc) memory_decrypted_read_qword(ppc.program, DWORD_XOR_BE(pc))
/*********************************************************************/
@@ -824,14 +825,14 @@ INLINE UINT32 ppc_get_spr(int spr)
return 0;
}
-static UINT8 ppc_read8_translated(offs_t address);
-static UINT16 ppc_read16_translated(offs_t address);
-static UINT32 ppc_read32_translated(offs_t address);
-static UINT64 ppc_read64_translated(offs_t address);
-static void ppc_write8_translated(offs_t address, UINT8 data);
-static void ppc_write16_translated(offs_t address, UINT16 data);
-static void ppc_write32_translated(offs_t address, UINT32 data);
-static void ppc_write64_translated(offs_t address, UINT64 data);
+static UINT8 ppc_read8_translated(const address_space *space, offs_t address);
+static UINT16 ppc_read16_translated(const address_space *space, offs_t address);
+static UINT32 ppc_read32_translated(const address_space *space, offs_t address);
+static UINT64 ppc_read64_translated(const address_space *space, offs_t address);
+static void ppc_write8_translated(const address_space *space, offs_t address, UINT8 data);
+static void ppc_write16_translated(const address_space *space, offs_t address, UINT16 data);
+static void ppc_write32_translated(const address_space *space, offs_t address, UINT32 data);
+static void ppc_write64_translated(const address_space *space, offs_t address, UINT64 data);
INLINE void ppc_set_msr(UINT32 value)
{
@@ -844,14 +845,14 @@ INLINE void ppc_set_msr(UINT32 value)
{
if (!(MSR & MSR_DR))
{
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
}
else
{
@@ -1010,6 +1011,7 @@ static CPU_INIT( ppc403 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
}
@@ -1120,14 +1122,14 @@ static CPU_INIT( ppc603 )
ppc.is603 = 1;
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
ppc.read16_unaligned = ppc_read16_unaligned;
ppc.read32_unaligned = ppc_read32_unaligned;
ppc.read64_unaligned = ppc_read64_unaligned;
@@ -1137,6 +1139,7 @@ static CPU_INIT( ppc603 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
@@ -1269,14 +1272,14 @@ static CPU_INIT( ppc602 )
ppc.is602 = 1;
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
ppc.read16_unaligned = ppc_read16_unaligned;
ppc.read32_unaligned = ppc_read32_unaligned;
ppc.read64_unaligned = ppc_read64_unaligned;
@@ -1286,6 +1289,7 @@ static CPU_INIT( ppc602 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
@@ -1412,14 +1416,14 @@ static CPU_INIT( mpc8240 )
ppc.is603 = 1;
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
ppc.read16_unaligned = ppc_read16_unaligned;
ppc.read32_unaligned = ppc_read32_unaligned;
ppc.read64_unaligned = ppc_read64_unaligned;
@@ -1429,6 +1433,7 @@ static CPU_INIT( mpc8240 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
@@ -1540,14 +1545,14 @@ static CPU_INIT( ppc601 )
ppc.is603 = 1;
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
ppc.read16_unaligned = ppc_read16_unaligned;
ppc.read32_unaligned = ppc_read32_unaligned;
ppc.read64_unaligned = ppc_read64_unaligned;
@@ -1557,6 +1562,7 @@ static CPU_INIT( ppc601 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
@@ -1671,14 +1677,14 @@ static CPU_INIT( ppc604 )
ppc.is603 = 1;
- ppc.read8 = program_read_byte_64be;
- ppc.read16 = program_read_word_64be;
- ppc.read32 = program_read_dword_64be;
- ppc.read64 = program_read_qword_64be;
- ppc.write8 = program_write_byte_64be;
- ppc.write16 = program_write_word_64be;
- ppc.write32 = program_write_dword_64be;
- ppc.write64 = program_write_qword_64be;
+ ppc.read8 = memory_read_byte_64be;
+ ppc.read16 = memory_read_word_64be;
+ ppc.read32 = memory_read_dword_64be;
+ ppc.read64 = memory_read_qword_64be;
+ ppc.write8 = memory_write_byte_64be;
+ ppc.write16 = memory_write_word_64be;
+ ppc.write32 = memory_write_dword_64be;
+ ppc.write64 = memory_write_qword_64be;
ppc.read16_unaligned = ppc_read16_unaligned;
ppc.read32_unaligned = ppc_read32_unaligned;
ppc.read64_unaligned = ppc_read64_unaligned;
@@ -1688,6 +1694,7 @@ static CPU_INIT( ppc604 )
ppc.irq_callback = irqcallback;
ppc.device = device;
+ ppc.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc.pvr = configdata->pvr;
diff --git a/src/emu/cpu/powerpc/ppc403.c b/src/emu/cpu/powerpc/ppc403.c
index 7e34cde9b97..cde39856730 100644
--- a/src/emu/cpu/powerpc/ppc403.c
+++ b/src/emu/cpu/powerpc/ppc403.c
@@ -645,7 +645,7 @@ static void ppc403_spu_w(UINT32 a, UINT8 d)
for (i=0; i < length; i++)
{
- program_write_byte_32be(ppc.dma[ch].da++, spu_rx_dma_ptr[i]);
+ memory_write_byte_32be(ppc.program, ppc.dma[ch].da++, spu_rx_dma_ptr[i]);
}
}
@@ -820,7 +820,7 @@ static void ppc403_dma_exec(int ch)
int length = ppc.dma[ch].ct;
for( i=0; i < length; i++ ) {
- spu_tx_dma_ptr[i] = program_read_byte_32be(ppc.dma[ch].da++);
+ spu_tx_dma_ptr[i] = memory_read_byte_32be(ppc.program, ppc.dma[ch].da++);
}
spu_tx_dma_handler(length);
}
@@ -917,47 +917,47 @@ static void ppc403_dma_exec(int ch)
/*********************************************************************************/
-static UINT8 ppc403_read8(UINT32 a)
+static UINT8 ppc403_read8(const address_space *space, UINT32 a)
{
if(a >= 0x40000000 && a <= 0x4000000f) /* Serial Port */
return ppc403_spu_r(a);
- return program_read_byte_32be(a);
+ return memory_read_byte_32be(space, a);
}
-#define ppc403_read16 program_read_word_32be
-#define ppc403_read32 program_read_dword_32be
+#define ppc403_read16 memory_read_word_32be
+#define ppc403_read32 memory_read_dword_32be
-static void ppc403_write8(UINT32 a, UINT8 d)
+static void ppc403_write8(const address_space *space, UINT32 a, UINT8 d)
{
if( a >= 0x40000000 && a <= 0x4000000f ) /* Serial Port */
{
ppc403_spu_w(a, d);
return;
}
- program_write_byte_32be(a, d);
+ memory_write_byte_32be(space, a, d);
}
-#define ppc403_write16 program_write_word_32be
-#define ppc403_write32 program_write_dword_32be
+#define ppc403_write16 memory_write_word_32be
+#define ppc403_write32 memory_write_dword_32be
-static UINT16 ppc403_read16_unaligned(UINT32 a)
+static UINT16 ppc403_read16_unaligned(const address_space *space, UINT32 a)
{
fatalerror("ppc: Unaligned read16 %08X at %08X", a, ppc.pc);
return 0;
}
-static UINT32 ppc403_read32_unaligned(UINT32 a)
+static UINT32 ppc403_read32_unaligned(const address_space *space, UINT32 a)
{
fatalerror("ppc: Unaligned read32 %08X at %08X", a, ppc.pc);
return 0;
}
-static void ppc403_write16_unaligned(UINT32 a, UINT16 d)
+static void ppc403_write16_unaligned(const address_space *space, UINT32 a, UINT16 d)
{
fatalerror("ppc: Unaligned write16 %08X, %04X at %08X", a, d, ppc.pc);
}
-static void ppc403_write32_unaligned(UINT32 a, UINT32 d)
+static void ppc403_write32_unaligned(const address_space *space, UINT32 a, UINT32 d)
{
fatalerror("ppc: Unaligned write32 %08X, %08X at %08X", a, d, ppc.pc);
}
diff --git a/src/emu/cpu/powerpc/ppc602.c b/src/emu/cpu/powerpc/ppc602.c
index ea6da56ae5c..3db73e848eb 100644
--- a/src/emu/cpu/powerpc/ppc602.c
+++ b/src/emu/cpu/powerpc/ppc602.c
@@ -255,7 +255,7 @@ static CPU_EXECUTE( ppc602 )
debugger_instruction_hook(device, ppc.pc);
if (MSR & MSR_IR)
- opcode = ppc_readop_translated(ppc.pc);
+ opcode = ppc_readop_translated(ppc.program, ppc.pc);
else
opcode = ROPCODE64(ppc.pc);
diff --git a/src/emu/cpu/powerpc/ppc603.c b/src/emu/cpu/powerpc/ppc603.c
index 56d117b4504..ae19612cbeb 100644
--- a/src/emu/cpu/powerpc/ppc603.c
+++ b/src/emu/cpu/powerpc/ppc603.c
@@ -263,7 +263,7 @@ static CPU_EXECUTE( ppc603 )
debugger_instruction_hook(device, ppc.pc);
if (MSR & MSR_IR)
- opcode = ppc_readop_translated(ppc.pc);
+ opcode = ppc_readop_translated(ppc.program, ppc.pc);
else
opcode = ROPCODE64(ppc.pc);
diff --git a/src/emu/cpu/powerpc/ppc_mem.c b/src/emu/cpu/powerpc/ppc_mem.c
index 6991cc4189a..006c2f8ed33 100644
--- a/src/emu/cpu/powerpc/ppc_mem.c
+++ b/src/emu/cpu/powerpc/ppc_mem.c
@@ -2,44 +2,44 @@
INLINE UINT8 READ8(UINT32 a)
{
- return ppc.read8(a);
+ return ppc.read8(ppc.program, a);
}
INLINE UINT16 READ16(UINT32 a)
{
if( a & 0x1 )
- return ppc.read16_unaligned(a);
+ return ppc.read16_unaligned(ppc.program, a);
else
- return ppc.read16(a);
+ return ppc.read16(ppc.program, a);
}
INLINE UINT32 READ32(UINT32 a)
{
if( a & 0x3 )
- return ppc.read32_unaligned(a);
+ return ppc.read32_unaligned(ppc.program, a);
else
- return ppc.read32(a);
+ return ppc.read32(ppc.program, a);
}
INLINE UINT64 READ64(UINT32 a)
{
if( a & 0x7 )
- return ppc.read64_unaligned(a);
+ return ppc.read64_unaligned(ppc.program, a);
else
- return ppc.read64(a);
+ return ppc.read64(ppc.program, a);
}
INLINE void WRITE8(UINT32 a, UINT8 d)
{
- ppc.write8(a, d);
+ ppc.write8(ppc.program, a, d);
}
INLINE void WRITE16(UINT32 a, UINT16 d)
{
if( a & 0x1 )
- ppc.write16_unaligned(a, d);
+ ppc.write16_unaligned(ppc.program, a, d);
else
- ppc.write16(a, d);
+ ppc.write16(ppc.program, a, d);
}
INLINE void WRITE32(UINT32 a, UINT32 d)
@@ -51,56 +51,56 @@ INLINE void WRITE32(UINT32 a, UINT32 d)
}
if( a & 0x3 )
- ppc.write32_unaligned(a, d);
+ ppc.write32_unaligned(ppc.program, a, d);
else
- ppc.write32(a, d);
+ ppc.write32(ppc.program, a, d);
}
INLINE void WRITE64(UINT32 a, UINT64 d)
{
if( a & 0x7 )
- ppc.write64_unaligned(a, d);
+ ppc.write64_unaligned(ppc.program, a, d);
else
- ppc.write64(a, d);
+ ppc.write64(ppc.program, a, d);
}
/***********************************************************************/
#if (HAS_PPC601||HAS_PPC602||HAS_PPC603||HAS_PPC604||HAS_MPC8240)
-static UINT16 ppc_read16_unaligned(UINT32 a)
+static UINT16 ppc_read16_unaligned(const address_space *space, UINT32 a)
{
- return ((UINT16)ppc.read8(a+0) << 8) | ((UINT16)ppc.read8(a+1) << 0);
+ return ((UINT16)ppc.read8(space, a+0) << 8) | ((UINT16)ppc.read8(space, a+1) << 0);
}
-static UINT32 ppc_read32_unaligned(UINT32 a)
+static UINT32 ppc_read32_unaligned(const address_space *space, UINT32 a)
{
- return ((UINT32)ppc.read8(a+0) << 24) | ((UINT32)ppc.read8(a+1) << 16) |
- ((UINT32)ppc.read8(a+2) << 8) | ((UINT32)ppc.read8(a+3) << 0);
+ return ((UINT32)ppc.read8(space, a+0) << 24) | ((UINT32)ppc.read8(space, a+1) << 16) |
+ ((UINT32)ppc.read8(space, a+2) << 8) | ((UINT32)ppc.read8(space, a+3) << 0);
}
-static UINT64 ppc_read64_unaligned(UINT32 a)
+static UINT64 ppc_read64_unaligned(const address_space *space, UINT32 a)
{
- return ((UINT64)READ32(a+0) << 32) | (UINT64)(READ32(a+4));
+ return ((UINT64)READ32(space, a+0) << 32) | (UINT64)(READ32(space, a+4));
}
-static void ppc_write16_unaligned(UINT32 a, UINT16 d)
+static void ppc_write16_unaligned(const address_space *space, UINT32 a, UINT16 d)
{
- ppc.write8(a+0, (UINT8)(d >> 8));
- ppc.write8(a+1, (UINT8)(d));
+ ppc.write8(space, a+0, (UINT8)(d >> 8));
+ ppc.write8(space, a+1, (UINT8)(d));
}
-static void ppc_write32_unaligned(UINT32 a, UINT32 d)
+static void ppc_write32_unaligned(const address_space *space, UINT32 a, UINT32 d)
{
- ppc.write8(a+0, (UINT8)(d >> 24));
- ppc.write8(a+1, (UINT8)(d >> 16));
- ppc.write8(a+2, (UINT8)(d >> 8));
- ppc.write8(a+3, (UINT8)(d >> 0));
+ ppc.write8(space, a+0, (UINT8)(d >> 24));
+ ppc.write8(space, a+1, (UINT8)(d >> 16));
+ ppc.write8(space, a+2, (UINT8)(d >> 8));
+ ppc.write8(space, a+3, (UINT8)(d >> 0));
}
-static void ppc_write64_unaligned(UINT32 a, UINT64 d)
+static void ppc_write64_unaligned(const address_space *space, UINT32 a, UINT64 d)
{
- ppc.write32(a+0, (UINT32)(d >> 32));
- ppc.write32(a+4, (UINT32)(d));
+ ppc.write32(space, a+0, (UINT32)(d >> 32));
+ ppc.write32(space, a+4, (UINT32)(d));
}
#endif
@@ -310,60 +310,60 @@ static int ppc_translate_address_cb(int space, offs_t *addr)
}
#endif
-static UINT8 ppc_read8_translated(offs_t address)
+static UINT8 ppc_read8_translated(const address_space *space, offs_t address)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_READ);
- return program_read_byte_64be(address);
+ return memory_read_byte_64be(space, address);
}
-static UINT16 ppc_read16_translated(offs_t address)
+static UINT16 ppc_read16_translated(const address_space *space, offs_t address)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_READ);
- return program_read_word_64be(address);
+ return memory_read_word_64be(space, address);
}
-static UINT32 ppc_read32_translated(offs_t address)
+static UINT32 ppc_read32_translated(const address_space *space, offs_t address)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_READ);
- return program_read_dword_64be(address);
+ return memory_read_dword_64be(space, address);
}
-static UINT64 ppc_read64_translated(offs_t address)
+static UINT64 ppc_read64_translated(const address_space *space, offs_t address)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_READ);
- return program_read_qword_64be(address);
+ return memory_read_qword_64be(space, address);
}
-static void ppc_write8_translated(offs_t address, UINT8 data)
+static void ppc_write8_translated(const address_space *space, offs_t address, UINT8 data)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_WRITE);
- program_write_byte_64be(address, data);
+ memory_write_byte_64be(space, address, data);
}
-static void ppc_write16_translated(offs_t address, UINT16 data)
+static void ppc_write16_translated(const address_space *space, offs_t address, UINT16 data)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_WRITE);
- program_write_word_64be(address, data);
+ memory_write_word_64be(space, address, data);
}
-static void ppc_write32_translated(offs_t address, UINT32 data)
+static void ppc_write32_translated(const address_space *space, offs_t address, UINT32 data)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_WRITE);
- program_write_dword_64be(address, data);
+ memory_write_dword_64be(space, address, data);
}
-static void ppc_write64_translated(offs_t address, UINT64 data)
+static void ppc_write64_translated(const address_space *space, offs_t address, UINT64 data)
{
ppc_translate_address(&address, PPC_TRANSLATE_DATA | PPC_TRANSLATE_WRITE);
- program_write_qword_64be(address, data);
+ memory_write_qword_64be(space, address, data);
}
#ifndef PPC_DRC
#if (HAS_PPC601||HAS_PPC602||HAS_PPC603||HAS_MPC8240)
-static UINT32 ppc_readop_translated(offs_t address)
+static UINT32 ppc_readop_translated(const address_space *space, offs_t address)
{
ppc_translate_address(&address, PPC_TRANSLATE_CODE | PPC_TRANSLATE_READ);
- return program_read_dword_64be(address);
+ return memory_read_dword_64be(space, address);
}
#endif
#endif
diff --git a/src/emu/cpu/powerpc/ppccom.c b/src/emu/cpu/powerpc/ppccom.c
index 76d645bbc5e..e4e414960af 100644
--- a/src/emu/cpu/powerpc/ppccom.c
+++ b/src/emu/cpu/powerpc/ppccom.c
@@ -6,6 +6,7 @@
***************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "ppccom.h"
#include "cpuexec.h"
#include "mame.h"
@@ -199,6 +200,7 @@ void ppccom_init(powerpc_state *ppc, powerpc_flavor flavor, UINT8 cap, int tb_di
ppc->cpu_clock = clock;
ppc->irq_callback = irqcallback;
ppc->device = device;
+ ppc->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
ppc->system_clock = (config != NULL) ? config->bus_frequency : clock;
ppc->tb_divisor = (ppc->tb_divisor * clock + ppc->system_clock / 2 - 1) / ppc->system_clock;
@@ -1377,7 +1379,7 @@ static int ppc4xx_dma_fetch_transmit_byte(powerpc_state *ppc, int dmachan, UINT8
/* fetch the data */
cpu_push_context(Machine->cpu[ppc->cpunum]);
- *byte = program_read_byte(dmaregs[DCR4XX_DMADA0]++);
+ *byte = memory_read_byte(ppc->program, dmaregs[DCR4XX_DMADA0]++);
ppc4xx_dma_decrement_count(ppc, dmachan);
cpu_pop_context();
return TRUE;
@@ -1403,7 +1405,7 @@ static int ppc4xx_dma_handle_receive_byte(powerpc_state *ppc, int dmachan, UINT8
/* store the data */
cpu_push_context(Machine->cpu[ppc->cpunum]);
- program_write_byte(dmaregs[DCR4XX_DMADA0]++, byte);
+ memory_write_byte(ppc->program, dmaregs[DCR4XX_DMADA0]++, byte);
ppc4xx_dma_decrement_count(ppc, dmachan);
cpu_pop_context();
return TRUE;
@@ -1457,7 +1459,7 @@ static void ppc4xx_dma_exec(powerpc_state *ppc, int dmachan)
case 1:
do
{
- program_write_byte(dmaregs[DCR4XX_DMADA0], program_read_byte(dmaregs[DCR4XX_DMASA0]));
+ memory_write_byte(ppc->program, dmaregs[DCR4XX_DMADA0], memory_read_byte(ppc->program, dmaregs[DCR4XX_DMASA0]));
dmaregs[DCR4XX_DMASA0] += srcinc;
dmaregs[DCR4XX_DMADA0] += destinc;
} while (!ppc4xx_dma_decrement_count(ppc, dmachan));
@@ -1467,7 +1469,7 @@ static void ppc4xx_dma_exec(powerpc_state *ppc, int dmachan)
case 2:
do
{
- program_write_word(dmaregs[DCR4XX_DMADA0], program_read_word(dmaregs[DCR4XX_DMASA0]));
+ memory_write_word(ppc->program, dmaregs[DCR4XX_DMADA0], memory_read_word(ppc->program, dmaregs[DCR4XX_DMASA0]));
dmaregs[DCR4XX_DMASA0] += srcinc;
dmaregs[DCR4XX_DMADA0] += destinc;
} while (!ppc4xx_dma_decrement_count(ppc, dmachan));
@@ -1477,7 +1479,7 @@ static void ppc4xx_dma_exec(powerpc_state *ppc, int dmachan)
case 4:
do
{
- program_write_dword(dmaregs[DCR4XX_DMADA0], program_read_dword(dmaregs[DCR4XX_DMASA0]));
+ memory_write_dword(ppc->program, dmaregs[DCR4XX_DMADA0], memory_read_dword(ppc->program, dmaregs[DCR4XX_DMASA0]));
dmaregs[DCR4XX_DMASA0] += srcinc;
dmaregs[DCR4XX_DMADA0] += destinc;
} while (!ppc4xx_dma_decrement_count(ppc, dmachan));
@@ -1487,8 +1489,8 @@ static void ppc4xx_dma_exec(powerpc_state *ppc, int dmachan)
case 16:
do
{
- program_write_qword(dmaregs[DCR4XX_DMADA0], program_read_qword(dmaregs[DCR4XX_DMASA0]));
- program_write_qword(dmaregs[DCR4XX_DMADA0] + 8, program_read_qword(dmaregs[DCR4XX_DMASA0] + 8));
+ memory_write_qword(ppc->program, dmaregs[DCR4XX_DMADA0], memory_read_qword(ppc->program, dmaregs[DCR4XX_DMASA0]));
+ memory_write_qword(ppc->program, dmaregs[DCR4XX_DMADA0] + 8, memory_read_qword(ppc->program, dmaregs[DCR4XX_DMASA0] + 8));
dmaregs[DCR4XX_DMASA0] += srcinc;
dmaregs[DCR4XX_DMADA0] += destinc;
} while (!ppc4xx_dma_decrement_count(ppc, dmachan));
diff --git a/src/emu/cpu/powerpc/ppccom.h b/src/emu/cpu/powerpc/ppccom.h
index 48298654197..4a55cb957b6 100644
--- a/src/emu/cpu/powerpc/ppccom.h
+++ b/src/emu/cpu/powerpc/ppccom.h
@@ -555,6 +555,7 @@ struct _powerpc_state
int cpunum;
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
UINT32 irq_pending;
UINT32 system_clock;
UINT32 cpu_clock;
diff --git a/src/emu/cpu/rsp/rsp.c b/src/emu/cpu/rsp/rsp.c
index ec5cea9b182..5a71835c4ad 100644
--- a/src/emu/cpu/rsp/rsp.c
+++ b/src/emu/cpu/rsp/rsp.c
@@ -4,6 +4,7 @@
Written by Ville Linde
*/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "cpuintrf.h"
#include "debugger.h"
#include "deprecat.h"
@@ -60,6 +61,7 @@ typedef struct
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
} RSP_REGS;
@@ -150,12 +152,12 @@ typedef struct
static RSP_REGS rsp;
static int rsp_icount;
-#define ROPCODE(pc) program_decrypted_read_dword(pc)
+#define ROPCODE(pc) memory_decrypted_read_dword(rsp.program, pc)
INLINE UINT8 READ8(UINT32 address)
{
address = 0x04000000 | (address & 0xfff);
- return program_read_byte_32be(address);
+ return memory_read_byte_32be(rsp.program, address);
}
INLINE UINT16 READ16(UINT32 address)
@@ -165,10 +167,10 @@ INLINE UINT16 READ16(UINT32 address)
if (address & 1)
{
//osd_die("RSP: READ16: unaligned %08X at %08X\n", address, rsp.ppc);
- return ((program_read_byte_32be(address+0) & 0xff) << 8) | (program_read_byte_32be(address+1) & 0xff);
+ return ((memory_read_byte_32be(rsp.program, address+0) & 0xff) << 8) | (memory_read_byte_32be(rsp.program, address+1) & 0xff);
}
- return program_read_word_32be(address);
+ return memory_read_word_32be(rsp.program, address);
}
INLINE UINT32 READ32(UINT32 address)
@@ -178,19 +180,19 @@ INLINE UINT32 READ32(UINT32 address)
if (address & 3)
{
//osd_die("RSP: READ32: unaligned %08X at %08X\n", address, rsp.ppc);
- return ((program_read_byte_32be(address + 0) & 0xff) << 24) |
- ((program_read_byte_32be(address + 1) & 0xff) << 16) |
- ((program_read_byte_32be(address + 2) & 0xff) << 8) |
- ((program_read_byte_32be(address + 3) & 0xff) << 0);
+ return ((memory_read_byte_32be(rsp.program, address + 0) & 0xff) << 24) |
+ ((memory_read_byte_32be(rsp.program, address + 1) & 0xff) << 16) |
+ ((memory_read_byte_32be(rsp.program, address + 2) & 0xff) << 8) |
+ ((memory_read_byte_32be(rsp.program, address + 3) & 0xff) << 0);
}
- return program_read_dword_32be(address);
+ return memory_read_dword_32be(rsp.program, address);
}
INLINE void WRITE8(UINT32 address, UINT8 data)
{
address = 0x04000000 | (address & 0xfff);
- program_write_byte_32be(address, data);
+ memory_write_byte_32be(rsp.program, address, data);
}
INLINE void WRITE16(UINT32 address, UINT16 data)
@@ -200,12 +202,12 @@ INLINE void WRITE16(UINT32 address, UINT16 data)
if (address & 1)
{
//fatalerror("RSP: WRITE16: unaligned %08X, %04X at %08X\n", address, data, rsp.ppc);
- program_write_byte_32be(address + 0, (data >> 8) & 0xff);
- program_write_byte_32be(address + 1, (data >> 0) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 0, (data >> 8) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 1, (data >> 0) & 0xff);
return;
}
- program_write_word_32be(address, data);
+ memory_write_word_32be(rsp.program, address, data);
}
INLINE void WRITE32(UINT32 address, UINT32 data)
@@ -215,28 +217,27 @@ INLINE void WRITE32(UINT32 address, UINT32 data)
if (address & 3)
{
//osd_die("RSP: WRITE32: unaligned %08X, %08X at %08X\n", address, data, rsp.ppc);
- program_write_byte_32be(address + 0, (data >> 24) & 0xff);
- program_write_byte_32be(address + 1, (data >> 16) & 0xff);
- program_write_byte_32be(address + 2, (data >> 8) & 0xff);
- program_write_byte_32be(address + 3, (data >> 0) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 0, (data >> 24) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 1, (data >> 16) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 2, (data >> 8) & 0xff);
+ memory_write_byte_32be(rsp.program, address + 3, (data >> 0) & 0xff);
return;
}
- program_write_dword_32be(address, data);
+ memory_write_dword_32be(rsp.program, address, data);
}
/*****************************************************************************/
static UINT32 get_cop0_reg(int reg)
{
- const address_space *space = cpu_get_address_space(rsp.device, ADDRESS_SPACE_PROGRAM);
if (reg >= 0 && reg < 8)
{
- return (configdata->sp_reg_r)(space, reg, 0x00000000);
+ return (configdata->sp_reg_r)(rsp.program, reg, 0x00000000);
}
else if (reg >= 8 && reg < 16)
{
- return (configdata->dp_reg_r)(space, reg - 8, 0x00000000);
+ return (configdata->dp_reg_r)(rsp.program, reg - 8, 0x00000000);
}
else
{
@@ -246,14 +247,13 @@ static UINT32 get_cop0_reg(int reg)
static void set_cop0_reg(int reg, UINT32 data)
{
- const address_space *space = cpu_get_address_space(rsp.device, ADDRESS_SPACE_PROGRAM);
if (reg >= 0 && reg < 8)
{
- (configdata->sp_reg_w)(space, reg, data, 0x00000000);
+ (configdata->sp_reg_w)(rsp.program, reg, data, 0x00000000);
}
else if (reg >= 8 && reg < 16)
{
- (configdata->dp_reg_w)(space, reg - 8, data, 0x00000000);
+ (configdata->dp_reg_w)(rsp.program, reg - 8, data, 0x00000000);
}
else
{
@@ -356,6 +356,7 @@ static CPU_INIT( rsp )
rsp.irq_callback = irqcallback;
rsp.device = device;
+ rsp.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
#if 1
// Inaccurate. RSP registers power on to a random state...
diff --git a/src/emu/cpu/s2650/s2650.c b/src/emu/cpu/s2650/s2650.c
index bc26b78fdf8..314f125d945 100644
--- a/src/emu/cpu/s2650/s2650.c
+++ b/src/emu/cpu/s2650/s2650.c
@@ -12,6 +12,7 @@
*
*************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "s2650.h"
#include "s2650cpu.h"
@@ -41,6 +42,8 @@ typedef struct {
UINT8 irq_state;
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
+ const address_space *io;
} s2650_Regs;
static s2650_Regs S;
@@ -171,7 +174,7 @@ static void s2650_set_sense(int state);
***************************************************************/
INLINE UINT8 ROP(void)
{
- UINT8 result = program_decrypted_read_byte(S.page + S.iar);
+ UINT8 result = memory_decrypted_read_byte(S.program, S.page + S.iar);
S.iar = (S.iar + 1) & PMSK;
return result;
}
@@ -182,7 +185,7 @@ INLINE UINT8 ROP(void)
***************************************************************/
INLINE UINT8 ARG(void)
{
- UINT8 result = program_raw_read_byte(S.page + S.iar);
+ UINT8 result = memory_raw_read_byte(S.program, S.page + S.iar);
S.iar = (S.iar + 1) & PMSK;
return result;
}
@@ -191,7 +194,7 @@ INLINE UINT8 ARG(void)
* RDMEM
* read memory byte from addr
***************************************************************/
-#define RDMEM(addr) program_read_byte_8le(addr)
+#define RDMEM(addr) memory_read_byte_8le(S.program, addr)
/***************************************************************
* handy table to build PC relative offsets
@@ -508,7 +511,7 @@ static const int S2650_relative[0x100] =
* Store source register to memory addr (CC unchanged)
***************************************************************/
#define M_STR(address,source) \
- program_write_byte_8le(address, source)
+ memory_write_byte_8le(S.program, address, source)
/***************************************************************
* M_AND
@@ -653,7 +656,7 @@ static const int S2650_relative[0x100] =
***************************************************************/
#define M_SPSU() \
{ \
- R0 = ((S.psu & ~PSU34) | (io_read_byte_8le(S2650_SENSE_PORT) & SI)); \
+ R0 = ((S.psu & ~PSU34) | (memory_read_byte_8le(S.io, S2650_SENSE_PORT) & SI)); \
SET_CC(R0); \
}
@@ -723,7 +726,7 @@ static const int S2650_relative[0x100] =
#define M_TPSU() \
{ \
UINT8 tpsu = ARG(); \
- UINT8 rpsu = (S.psu | (io_read_byte_8le(S2650_SENSE_PORT) & SI)); \
+ UINT8 rpsu = (S.psu | (memory_read_byte_8le(S.io, S2650_SENSE_PORT) & SI)); \
S.psl &= ~CC; \
if( (rpsu & tpsu) != tpsu ) \
S.psl |= 0x80; \
@@ -770,6 +773,8 @@ static CPU_INIT( s2650 )
{
S.irq_callback = irqcallback;
S.device = device;
+ S.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ S.io = memory_find_address_space(device, ADDRESS_SPACE_IO);
state_save_register_item("s2650", device->tag, 0, S.ppc);
state_save_register_item("s2650", device->tag, 0, S.page);
@@ -791,6 +796,8 @@ static CPU_RESET( s2650 )
memset(&S, 0, sizeof(S));
S.irq_callback = save_irqcallback;
S.device = device;
+ S.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ S.io = memory_find_address_space(device, ADDRESS_SPACE_IO);
S.psl = COM | WC;
S.psu = 0;
}
@@ -857,7 +864,7 @@ static int s2650_get_sense(void)
{
/* OR'd with Input to allow for external connections */
- return (((S.psu & SI) ? 1 : 0) | ((io_read_byte_8le(S2650_SENSE_PORT) & SI) ? 1 : 0));
+ return (((S.psu & SI) ? 1 : 0) | ((memory_read_byte_8le(S.io, S2650_SENSE_PORT) & SI) ? 1 : 0));
}
static CPU_EXECUTE( s2650 )
@@ -991,7 +998,7 @@ static CPU_EXECUTE( s2650 )
case 0x32: /* REDC,2 */
case 0x33: /* REDC,3 */
s2650_ICount -= 6;
- S.reg[S.r] = io_read_byte_8le(S2650_CTRL_PORT);
+ S.reg[S.r] = memory_read_byte_8le(S.io, S2650_CTRL_PORT);
SET_CC( S.reg[S.r] );
break;
@@ -1081,7 +1088,7 @@ static CPU_EXECUTE( s2650 )
case 0x56: /* REDE,2 v */
case 0x57: /* REDE,3 v */
s2650_ICount -= 9;
- S.reg[S.r] = io_read_byte_8le( ARG() );
+ S.reg[S.r] = memory_read_byte_8le( S.io, ARG() );
SET_CC(S.reg[S.r]);
break;
@@ -1140,7 +1147,7 @@ static CPU_EXECUTE( s2650 )
case 0x72: /* REDD,2 */
case 0x73: /* REDD,3 */
s2650_ICount -= 6;
- S.reg[S.r] = io_read_byte_8le(S2650_DATA_PORT);
+ S.reg[S.r] = memory_read_byte_8le(S.io, S2650_DATA_PORT);
SET_CC(S.reg[S.r]);
break;
@@ -1296,7 +1303,7 @@ static CPU_EXECUTE( s2650 )
case 0xb2: /* WRTC,2 */
case 0xb3: /* WRTC,3 */
s2650_ICount -= 6;
- io_write_byte_8le(S2650_CTRL_PORT,S.reg[S.r]);
+ memory_write_byte_8le(S.io, S2650_CTRL_PORT,S.reg[S.r]);
break;
case 0xb4: /* TPSU */
@@ -1382,7 +1389,7 @@ static CPU_EXECUTE( s2650 )
case 0xd6: /* WRTE,2 v */
case 0xd7: /* WRTE,3 v */
s2650_ICount -= 9;
- io_write_byte_8le( ARG(), S.reg[S.r] );
+ memory_write_byte_8le( S.io, ARG(), S.reg[S.r] );
break;
case 0xd8: /* BIRR,0 (*)a */
@@ -1440,7 +1447,7 @@ static CPU_EXECUTE( s2650 )
case 0xf2: /* WRTD,2 */
case 0xf3: /* WRTD,3 */
s2650_ICount -= 6;
- io_write_byte_8le(S2650_DATA_PORT, S.reg[S.r]);
+ memory_write_byte_8le(S.io, S2650_DATA_PORT, S.reg[S.r]);
break;
case 0xf4: /* TMI,0 v */
diff --git a/src/emu/cpu/saturn/satops.c b/src/emu/cpu/saturn/satops.c
index 655fa99eccb..afa4f776235 100644
--- a/src/emu/cpu/saturn/satops.c
+++ b/src/emu/cpu/saturn/satops.c
@@ -7,7 +7,7 @@ INLINE int READ_OP(void)
{
UINT8 data;
saturn_ICount-=3;
- data=program_decrypted_read_byte(saturn.pc);
+ data=memory_decrypted_read_byte(saturn.program, saturn.pc);
saturn_assert(data<0x10);
saturn.pc=(saturn.pc+1)&0xfffff;
return data;
@@ -17,7 +17,7 @@ INLINE int READ_OP_ARG(void)
{
UINT8 data;
saturn_ICount-=3;
- data=program_raw_read_byte(saturn.pc);
+ data=memory_raw_read_byte(saturn.program, saturn.pc);
saturn_assert(data<0x10);
saturn.pc=(saturn.pc+1)&0xfffff;
return data;
@@ -78,7 +78,7 @@ INLINE int READ_NIBBLE(SaturnAdr adr)
{
UINT8 data;
saturn_ICount-=3;
- data=program_read_byte(adr&0xfffff);
+ data=memory_read_byte(saturn.program, adr&0xfffff);
saturn_assert(data<0x10);
if (saturn.config&&saturn.config->crc) saturn.config->crc(Machine, adr&0xfffff, data);
return data;
@@ -108,7 +108,7 @@ INLINE void WRITE_NIBBLE(SaturnAdr adr, SaturnNib nib)
{
saturn_ICount-=3;
saturn_assert(nib<0x10);
- program_write_byte(adr&0xfffff,nib);
+ memory_write_byte(saturn.program, adr&0xfffff,nib);
}
#define BEGIN_B 0
diff --git a/src/emu/cpu/saturn/saturn.c b/src/emu/cpu/saturn/saturn.c
index 85f8fc89db2..65fbcc419a2 100644
--- a/src/emu/cpu/saturn/saturn.c
+++ b/src/emu/cpu/saturn/saturn.c
@@ -21,6 +21,7 @@
* - This entire notice must remain in the source code.
*
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
@@ -79,6 +80,7 @@ typedef struct
UINT8 sleeping; /* low-consumption state */
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
} Saturn_Regs;
static int saturn_ICount = 0;
@@ -103,6 +105,7 @@ static CPU_INIT( saturn )
saturn.config = (saturn_cpu_core *) device->static_config;
saturn.irq_callback = irqcallback;
saturn.device = device;
+ saturn.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
state_save_register_item_array("saturn",device->tag, 0,saturn.reg[R0]);
state_save_register_item_array("saturn",device->tag, 0,saturn.reg[R1]);
diff --git a/src/emu/cpu/sc61860/sc61860.c b/src/emu/cpu/sc61860/sc61860.c
index 3404f8613bd..96debffb782 100644
--- a/src/emu/cpu/sc61860/sc61860.c
+++ b/src/emu/cpu/sc61860/sc61860.c
@@ -27,6 +27,7 @@
* Extended execute procudure with HLT-mode of CPU.
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "sc61860.h"
@@ -52,6 +53,9 @@ typedef struct
int carry, zero;
struct { int t2ms, t512ms; int count;} timer;
+
+ const device_config *device;
+ const address_space *program;
} SC61860_Regs;
static int sc61860_ICount = 0;
@@ -89,6 +93,8 @@ static CPU_INIT( sc61860 )
{
sc61860.config = (sc61860_cpu_core *) device->static_config;
timer_pulse(ATTOTIME_IN_HZ(500), NULL, 0, sc61860_2ms_tick);
+ sc61860.device = device;
+ sc61860.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
}
static CPU_GET_CONTEXT( sc61860 )
diff --git a/src/emu/cpu/sc61860/scops.c b/src/emu/cpu/sc61860/scops.c
index 9c0670b23cc..a4ce85bb040 100644
--- a/src/emu/cpu/sc61860/scops.c
+++ b/src/emu/cpu/sc61860/scops.c
@@ -28,29 +28,29 @@
INLINE UINT8 READ_OP(void)
{
- return program_decrypted_read_byte(sc61860.pc++);
+ return memory_decrypted_read_byte(sc61860.program, sc61860.pc++);
}
INLINE UINT8 READ_OP_ARG(void)
{
- return program_raw_read_byte(sc61860.pc++);
+ return memory_raw_read_byte(sc61860.program, sc61860.pc++);
}
INLINE UINT16 READ_OP_ARG_WORD(void)
{
- UINT16 t=program_decrypted_read_byte(sc61860.pc++)<<8;
- t|=program_decrypted_read_byte(sc61860.pc++);
+ UINT16 t=memory_decrypted_read_byte(sc61860.program, sc61860.pc++)<<8;
+ t|=memory_decrypted_read_byte(sc61860.program, sc61860.pc++);
return t;
}
INLINE UINT8 READ_BYTE(UINT16 adr)
{
- return program_read_byte(adr);
+ return memory_read_byte(sc61860.program, adr);
}
INLINE void WRITE_BYTE(UINT16 a,UINT8 v)
{
- program_write_byte(a,v);
+ memory_write_byte(sc61860.program, a,v);
}
#define PUSH(v) sc61860.ram[--sc61860.r]=v
diff --git a/src/emu/cpu/se3208/se3208.c b/src/emu/cpu/se3208/se3208.c
index 841882441c0..13f155bb99c 100644
--- a/src/emu/cpu/se3208/se3208.c
+++ b/src/emu/cpu/se3208/se3208.c
@@ -1,3 +1,5 @@
+#define NO_LEGACY_MEMORY_HANDLERS 1
+
#include "debugger.h"
#include "se3208.h"
@@ -23,6 +25,7 @@ struct _se3208_state_t
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
UINT8 IRQ;
UINT8 NMI;
@@ -56,79 +59,79 @@ typedef void (*_OP)(se3208_state_t *se3208_state, UINT16 Opcode);
#define INST(a) static void a(se3208_state_t *se3208_state, UINT16 Opcode)
static _OP *OpTable=NULL;
-INLINE UINT32 read_dword_unaligned(UINT32 address)
+INLINE UINT32 read_dword_unaligned(const address_space *space, UINT32 address)
{
if (address & 3)
- return program_read_byte_32le(address) | program_read_byte_32le(address+1)<<8 | program_read_byte_32le(address+2)<<16 | program_read_byte_32le(address+3)<<24;
+ return memory_read_byte_32le(space,address) | memory_read_byte_32le(space,address+1)<<8 | memory_read_byte_32le(space,address+2)<<16 | memory_read_byte_32le(space,address+3)<<24;
else
- return program_read_dword_32le(address);
+ return memory_read_dword_32le(space,address);
}
-INLINE UINT16 read_word_unaligned(UINT32 address)
+INLINE UINT16 read_word_unaligned(const address_space *space, UINT32 address)
{
if (address & 1)
- return program_read_byte_32le(address) | program_read_byte_32le(address+1)<<8;
+ return memory_read_byte_32le(space,address) | memory_read_byte_32le(space,address+1)<<8;
else
- return program_read_word_32le(address);
+ return memory_read_word_32le(space,address);
}
-INLINE void write_dword_unaligned(UINT32 address, UINT32 data)
+INLINE void write_dword_unaligned(const address_space *space, UINT32 address, UINT32 data)
{
if (address & 3)
{
- program_write_byte_32le(address, data & 0xff);
- program_write_byte_32le(address+1, (data>>8)&0xff);
- program_write_byte_32le(address+2, (data>>16)&0xff);
- program_write_byte_32le(address+3, (data>>24)&0xff);
+ memory_write_byte_32le(space, address, data & 0xff);
+ memory_write_byte_32le(space, address+1, (data>>8)&0xff);
+ memory_write_byte_32le(space, address+2, (data>>16)&0xff);
+ memory_write_byte_32le(space, address+3, (data>>24)&0xff);
}
else
{
- program_write_dword_32le(address, data);
+ memory_write_dword_32le(space, address, data);
}
}
-INLINE void write_word_unaligned(UINT32 address, UINT16 data)
+INLINE void write_word_unaligned(const address_space *space, UINT32 address, UINT16 data)
{
if (address & 1)
{
- program_write_byte_32le(address, data & 0xff);
- program_write_byte_32le(address+1, (data>>8)&0xff);
+ memory_write_byte_32le(space, address, data & 0xff);
+ memory_write_byte_32le(space, address+1, (data>>8)&0xff);
}
else
{
- program_write_word_32le(address, data);
+ memory_write_word_32le(space, address, data);
}
}
-INLINE UINT8 SE3208_Read8(UINT32 addr)
+INLINE UINT8 SE3208_Read8(se3208_state_t *se3208_state, UINT32 addr)
{
- return program_read_byte_32le(addr);
+ return memory_read_byte_32le(se3208_state->program,addr);
}
-INLINE UINT16 SE3208_Read16(UINT32 addr)
+INLINE UINT16 SE3208_Read16(se3208_state_t *se3208_state, UINT32 addr)
{
- return read_word_unaligned(addr);
+ return read_word_unaligned(se3208_state->program,addr);
}
-INLINE UINT32 SE3208_Read32(UINT32 addr)
+INLINE UINT32 SE3208_Read32(se3208_state_t *se3208_state, UINT32 addr)
{
- return read_dword_unaligned(addr);
+ return read_dword_unaligned(se3208_state->program,addr);
}
-INLINE void SE3208_Write8(UINT32 addr,UINT8 val)
+INLINE void SE3208_Write8(se3208_state_t *se3208_state, UINT32 addr,UINT8 val)
{
- program_write_byte_32le(addr,val);
+ memory_write_byte_32le(se3208_state->program,addr,val);
}
-INLINE void SE3208_Write16(UINT32 addr,UINT16 val)
+INLINE void SE3208_Write16(se3208_state_t *se3208_state, UINT32 addr,UINT16 val)
{
- write_word_unaligned(addr,val);
+ write_word_unaligned(se3208_state->program,addr,val);
}
-INLINE void SE3208_Write32(UINT32 addr,UINT32 val)
+INLINE void SE3208_Write32(se3208_state_t *se3208_state, UINT32 addr,UINT32 val)
{
- write_dword_unaligned(addr,val);
+ write_dword_unaligned(se3208_state->program,addr,val);
}
@@ -273,7 +276,7 @@ INST(LDB)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read8(Index+Offset);
+ Val=SE3208_Read8(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=SEX8(Val);
CLRFLAG(FLAG_E);
@@ -293,7 +296,7 @@ INST(STB)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write8(Index+Offset,ZEX8(se3208_state->R[SrcDst]));
+ SE3208_Write8(se3208_state, Index+Offset,ZEX8(se3208_state->R[SrcDst]));
CLRFLAG(FLAG_E);
}
@@ -315,7 +318,7 @@ INST(LDS)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read16(Index+Offset);
+ Val=SE3208_Read16(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=SEX16(Val);
CLRFLAG(FLAG_E);
@@ -337,7 +340,7 @@ INST(STS)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write16(Index+Offset,ZEX16(se3208_state->R[SrcDst]));
+ SE3208_Write16(se3208_state, Index+Offset,ZEX16(se3208_state->R[SrcDst]));
CLRFLAG(FLAG_E);
}
@@ -358,7 +361,7 @@ INST(LD)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- se3208_state->R[SrcDst]=SE3208_Read32(Index+Offset);
+ se3208_state->R[SrcDst]=SE3208_Read32(se3208_state, Index+Offset);
CLRFLAG(FLAG_E);
}
@@ -379,7 +382,7 @@ INST(ST)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write32(Index+Offset,se3208_state->R[SrcDst]);
+ SE3208_Write32(se3208_state, Index+Offset,se3208_state->R[SrcDst]);
CLRFLAG(FLAG_E);
}
@@ -399,7 +402,7 @@ INST(LDBU)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read8(Index+Offset);
+ Val=SE3208_Read8(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=ZEX8(Val);
CLRFLAG(FLAG_E);
@@ -422,7 +425,7 @@ INST(LDSU)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read16(Index+Offset);
+ Val=SE3208_Read16(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=ZEX16(Val);
CLRFLAG(FLAG_E);
@@ -452,7 +455,7 @@ INST(LDSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- se3208_state->R[SrcDst]=SE3208_Read32(Index+Offset);
+ se3208_state->R[SrcDst]=SE3208_Read32(se3208_state, Index+Offset);
CLRFLAG(FLAG_E);
}
@@ -468,7 +471,7 @@ INST(STSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write32(Index+Offset,se3208_state->R[SrcDst]);
+ SE3208_Write32(se3208_state, Index+Offset,se3208_state->R[SrcDst]);
CLRFLAG(FLAG_E);
}
@@ -476,12 +479,12 @@ INST(STSP)
static void PushVal(se3208_state_t *se3208_state, UINT32 Val)
{
se3208_state->SP-=4;
- SE3208_Write32(se3208_state->SP,Val);
+ SE3208_Write32(se3208_state, se3208_state->SP,Val);
}
static UINT32 PopVal(se3208_state_t *se3208_state)
{
- UINT32 Val=SE3208_Read32(se3208_state->SP);
+ UINT32 Val=SE3208_Read32(se3208_state, se3208_state->SP);
se3208_state->SP+=4;
return Val;
}
@@ -627,7 +630,7 @@ INST(LDBSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read8(Index+Offset);
+ Val=SE3208_Read8(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=SEX8(Val);
CLRFLAG(FLAG_E);
@@ -642,7 +645,7 @@ INST(STBSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write8(Index+Offset,ZEX8(se3208_state->R[SrcDst]));
+ SE3208_Write8(se3208_state, Index+Offset,ZEX8(se3208_state->R[SrcDst]));
CLRFLAG(FLAG_E);
}
@@ -659,7 +662,7 @@ INST(LDSSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read16(Index+Offset);
+ Val=SE3208_Read16(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=SEX16(Val);
CLRFLAG(FLAG_E);
@@ -676,7 +679,7 @@ INST(STSSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- SE3208_Write16(Index+Offset,ZEX16(se3208_state->R[SrcDst]));
+ SE3208_Write16(se3208_state, Index+Offset,ZEX16(se3208_state->R[SrcDst]));
CLRFLAG(FLAG_E);
}
@@ -691,7 +694,7 @@ INST(LDBUSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read8(Index+Offset);
+ Val=SE3208_Read8(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=ZEX8(Val);
CLRFLAG(FLAG_E);
@@ -709,7 +712,7 @@ INST(LDSUSP)
if(TESTFLAG(FLAG_E))
Offset=(EXTRACT(se3208_state->ER,0,27)<<4)|(Offset&0xf);
- Val=SE3208_Read16(Index+Offset);
+ Val=SE3208_Read16(se3208_state, Index+Offset);
se3208_state->R[SrcDst]=ZEX16(Val);
CLRFLAG(FLAG_E);
@@ -1427,7 +1430,7 @@ INST(SWI)
CLRFLAG(FLAG_ENI|FLAG_E|FLAG_M);
- se3208_state->PC=SE3208_Read32(4*Imm+0x40)-2;
+ se3208_state->PC=SE3208_Read32(se3208_state, 4*Imm+0x40)-2;
change_pc(se3208_state->PC+2);
}
@@ -1729,7 +1732,8 @@ static CPU_RESET( SE3208 )
memset(se3208_state,0,sizeof(se3208_state_t));
se3208_state->irq_callback = save_irqcallback;
se3208_state->device = device;
- se3208_state->PC=SE3208_Read32(0);
+ se3208_state->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ se3208_state->PC=SE3208_Read32(se3208_state, 0);
se3208_state->SR=0;
se3208_state->IRQ=CLEAR_LINE;
se3208_state->NMI=CLEAR_LINE;
@@ -1743,7 +1747,7 @@ static void SE3208_NMI(se3208_state_t *se3208_state)
CLRFLAG(FLAG_NMI|FLAG_ENI|FLAG_E|FLAG_M);
- se3208_state->PC=SE3208_Read32(4);
+ se3208_state->PC=SE3208_Read32(se3208_state, 4);
change_pc(se3208_state->PC+2);
}
@@ -1759,9 +1763,9 @@ static void SE3208_Interrupt(se3208_state_t *se3208_state)
if(!(TESTFLAG(FLAG_AUT)))
- se3208_state->PC=SE3208_Read32(8);
+ se3208_state->PC=SE3208_Read32(se3208_state, 8);
else
- se3208_state->PC=SE3208_Read32(4*se3208_state->irq_callback(se3208_state->device, 0));
+ se3208_state->PC=SE3208_Read32(se3208_state, 4*se3208_state->irq_callback(se3208_state->device, 0));
change_pc(se3208_state->PC+2);
}
@@ -1773,7 +1777,7 @@ static CPU_EXECUTE( SE3208 )
se3208_state->SE3208_ICount=cycles;
do
{
- UINT16 Opcode=program_decrypted_read_word(WORD_XOR_LE(se3208_state->PC));
+ UINT16 Opcode=memory_decrypted_read_word(se3208_state->program, WORD_XOR_LE(se3208_state->PC));
debugger_instruction_hook(device, se3208_state->PC);
@@ -1804,6 +1808,7 @@ static CPU_INIT( SE3208 )
se3208_state->irq_callback = irqcallback;
se3208_state->device = device;
+ se3208_state->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
}
static CPU_EXIT( SE3208 )
diff --git a/src/emu/cpu/sh2/sh2.c b/src/emu/cpu/sh2/sh2.c
index b713df9b757..3ad2d4cd37b 100644
--- a/src/emu/cpu/sh2/sh2.c
+++ b/src/emu/cpu/sh2/sh2.c
@@ -100,6 +100,7 @@
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "sh2.h"
@@ -120,43 +121,43 @@ SH2 *sh2;
INLINE UINT8 RB(offs_t A)
{
if (A >= 0xe0000000)
- return sh2_internal_r(Machine, (A & 0x1fc)>>2, 0xff << (((~A) & 3)*8)) >> (((~A) & 3)*8);
+ return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xff << (((~A) & 3)*8)) >> (((~A) & 3)*8);
if (A >= 0xc0000000)
- return program_read_byte_32be(A);
+ return memory_read_byte_32be(sh2->program, A);
if (A >= 0x40000000)
return 0xa5;
- return program_read_byte_32be(A & AM);
+ return memory_read_byte_32be(sh2->program, A & AM);
}
INLINE UINT16 RW(offs_t A)
{
if (A >= 0xe0000000)
- return sh2_internal_r(Machine, (A & 0x1fc)>>2, 0xffff << (((~A) & 2)*8)) >> (((~A) & 2)*8);
+ return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xffff << (((~A) & 2)*8)) >> (((~A) & 2)*8);
if (A >= 0xc0000000)
- return program_read_word_32be(A);
+ return memory_read_word_32be(sh2->program, A);
if (A >= 0x40000000)
return 0xa5a5;
- return program_read_word_32be(A & AM);
+ return memory_read_word_32be(sh2->program, A & AM);
}
INLINE UINT32 RL(offs_t A)
{
if (A >= 0xe0000000)
- return sh2_internal_r(Machine, (A & 0x1fc)>>2, 0xffffffff);
+ return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xffffffff);
if (A >= 0xc0000000)
- return program_read_dword_32be(A);
+ return memory_read_dword_32be(sh2->program, A);
if (A >= 0x40000000)
return 0xa5a5a5a5;
- return program_read_dword_32be(A & AM);
+ return memory_read_dword_32be(sh2->program, A & AM);
}
INLINE void WB(offs_t A, UINT8 V)
@@ -164,60 +165,60 @@ INLINE void WB(offs_t A, UINT8 V)
if (A >= 0xe0000000)
{
- sh2_internal_w(Machine, (A & 0x1fc)>>2, V << (((~A) & 3)*8), 0xff << (((~A) & 3)*8));
+ sh2_internal_w(sh2->internal, (A & 0x1fc)>>2, V << (((~A) & 3)*8), 0xff << (((~A) & 3)*8));
return;
}
if (A >= 0xc0000000)
{
- program_write_byte_32be(A,V);
+ memory_write_byte_32be(sh2->program, A,V);
return;
}
if (A >= 0x40000000)
return;
- program_write_byte_32be(A & AM,V);
+ memory_write_byte_32be(sh2->program, A & AM,V);
}
INLINE void WW(offs_t A, UINT16 V)
{
if (A >= 0xe0000000)
{
- sh2_internal_w(Machine, (A & 0x1fc)>>2, V << (((~A) & 2)*8), 0xffff << (((~A) & 2)*8));
+ sh2_internal_w(sh2->internal, (A & 0x1fc)>>2, V << (((~A) & 2)*8), 0xffff << (((~A) & 2)*8));
return;
}
if (A >= 0xc0000000)
{
- program_write_word_32be(A,V);
+ memory_write_word_32be(sh2->program, A,V);
return;
}
if (A >= 0x40000000)
return;
- program_write_word_32be(A & AM,V);
+ memory_write_word_32be(sh2->program, A & AM,V);
}
INLINE void WL(offs_t A, UINT32 V)
{
if (A >= 0xe0000000)
{
- sh2_internal_w(Machine, (A & 0x1fc)>>2, V, 0xffffffff);
+ sh2_internal_w(sh2->internal, (A & 0x1fc)>>2, V, 0xffffffff);
return;
}
if (A >= 0xc0000000)
{
- program_write_dword_32be(A,V);
+ memory_write_dword_32be(sh2->program, A,V);
return;
}
if (A >= 0x40000000)
return;
- program_write_dword_32be(A & AM,V);
+ memory_write_dword_32be(sh2->program, A & AM,V);
}
/* code cycles t-bit
@@ -2205,12 +2206,12 @@ static CPU_EXECUTE( sh2 )
if (sh2->delay)
{
- opcode = program_decrypted_read_word(WORD_XOR_BE((UINT32)(sh2->delay & AM)));
+ opcode = memory_decrypted_read_word(sh2->program, WORD_XOR_BE((UINT32)(sh2->delay & AM)));
change_pc(sh2->pc & AM);
sh2->pc -= 2;
}
else
- opcode = program_decrypted_read_word(WORD_XOR_BE((UINT32)(sh2->pc & AM)));
+ opcode = memory_decrypted_read_word(sh2->program, WORD_XOR_BE((UINT32)(sh2->pc & AM)));
debugger_instruction_hook(device, sh2->pc);
diff --git a/src/emu/cpu/sh2/sh2comn.c b/src/emu/cpu/sh2/sh2comn.c
index 7d6d23e7a2e..d181f6fbf83 100644
--- a/src/emu/cpu/sh2/sh2comn.c
+++ b/src/emu/cpu/sh2/sh2comn.c
@@ -6,6 +6,7 @@
*
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "cpuexec.h"
@@ -29,12 +30,12 @@ INLINE UINT32 RL(SH2 *sh2, offs_t A)
return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xffffffff);
if (A >= 0xc0000000)
- return program_read_dword_32be(A);
+ return memory_read_dword_32be(sh2->program, A);
if (A >= 0x40000000)
return 0xa5a5a5a5;
- return program_read_dword_32be(A & AM);
+ return memory_read_dword_32be(sh2->program, A & AM);
}
INLINE void WL(SH2 *sh2, offs_t A, UINT32 V)
@@ -47,14 +48,14 @@ INLINE void WL(SH2 *sh2, offs_t A, UINT32 V)
if (A >= 0xc0000000)
{
- program_write_dword_32be(A,V);
+ memory_write_dword_32be(sh2->program, A,V);
return;
}
if (A >= 0x40000000)
return;
- program_write_dword_32be(A & AM,V);
+ memory_write_dword_32be(sh2->program, A & AM,V);
}
static void sh2_timer_resync(void)
@@ -189,9 +190,9 @@ static void sh2_dmac_check(int dma)
if(incd == 2)
dst --;
- dmadata = program_read_byte_32be(src);
+ dmadata = memory_read_byte_32be(sh2->program, src);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_byte_32be(dst, dmadata);
+ memory_write_byte_32be(sh2->program, dst, dmadata);
if(incs == 1)
src ++;
@@ -211,9 +212,9 @@ static void sh2_dmac_check(int dma)
dst -= 2;
// check: should this really be using read_word_32 / write_word_32?
- dmadata = program_read_word_32be(src);
+ dmadata = memory_read_word_32be(sh2->program, src);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_word_32be(dst, dmadata);
+ memory_write_word_32be(sh2->program, dst, dmadata);
if(incs == 1)
src += 2;
@@ -231,9 +232,9 @@ static void sh2_dmac_check(int dma)
if(incd == 2)
dst -= 4;
- dmadata = program_read_dword_32be(src);
+ dmadata = memory_read_dword_32be(sh2->program, src);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_dword_32be(dst, dmadata);
+ memory_write_dword_32be(sh2->program, dst, dmadata);
if(incs == 1)
src += 4;
@@ -251,21 +252,21 @@ static void sh2_dmac_check(int dma)
if(incd == 2)
dst -= 16;
- dmadata = program_read_dword_32be(src);
+ dmadata = memory_read_dword_32be(sh2->program, src);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_dword_32be(dst, dmadata);
+ memory_write_dword_32be(sh2->program, dst, dmadata);
- dmadata = program_read_dword_32be(src+4);
+ dmadata = memory_read_dword_32be(sh2->program, src+4);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_dword_32be(dst+4, dmadata);
+ memory_write_dword_32be(sh2->program, dst+4, dmadata);
- dmadata = program_read_dword_32be(src+8);
+ dmadata = memory_read_dword_32be(sh2->program, src+8);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_dword_32be(dst+8, dmadata);
+ memory_write_dword_32be(sh2->program, dst+8, dmadata);
- dmadata = program_read_dword_32be(src+12);
+ dmadata = memory_read_dword_32be(sh2->program, src+12);
if (sh2->dma_callback_kludge) dmadata = sh2->dma_callback_kludge(src, dst, dmadata, size);
- program_write_dword_32be(dst+12, dmadata);
+ memory_write_dword_32be(sh2->program, dst+12, dmadata);
src += 16;
if(incd == 1)
@@ -734,6 +735,7 @@ void sh2_common_init(int alloc, const device_config *device, int index, int cloc
sh2->cpu_number = index;
sh2->irq_callback = irqcallback;
sh2->device = device;
+ sh2->program = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
sh2->internal = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
state_save_register_item("sh2", device->tag, 0, sh2->pc);
diff --git a/src/emu/cpu/sh2/sh2comn.h b/src/emu/cpu/sh2/sh2comn.h
index ca75b64202e..20850253d79 100644
--- a/src/emu/cpu/sh2/sh2comn.h
+++ b/src/emu/cpu/sh2/sh2comn.h
@@ -115,6 +115,7 @@ typedef struct
INT8 irq_line_state[17];
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
const address_space *internal;
UINT32 *m;
INT8 nmi_line_state;
diff --git a/src/emu/cpu/sh2/sh2drc.c b/src/emu/cpu/sh2/sh2drc.c
index de664812203..0ce6a5d4732 100644
--- a/src/emu/cpu/sh2/sh2drc.c
+++ b/src/emu/cpu/sh2/sh2drc.c
@@ -15,6 +15,7 @@
***************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "sh2.h"
@@ -147,9 +148,9 @@ INLINE UINT16 RW(offs_t A)
return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xffff << (((~A) & 2)*8)) >> (((~A) & 2)*8);
if (A >= 0xc0000000)
- return program_read_word_32be(A);
+ return memory_read_word_32be(sh2->program, A);
- return program_read_word_32be(A & AM);
+ return memory_read_word_32be(sh2->program, A & AM);
}
INLINE UINT32 RL(offs_t A)
@@ -158,9 +159,9 @@ INLINE UINT32 RL(offs_t A)
return sh2_internal_r(sh2->internal, (A & 0x1fc)>>2, 0xffffffff);
if (A >= 0xc0000000)
- return program_read_dword_32be(A);
+ return memory_read_dword_32be(sh2->program, A);
- return program_read_dword_32be(A & AM);
+ return memory_read_dword_32be(sh2->program, A & AM);
}
/*-------------------------------------------------
@@ -818,8 +819,8 @@ static CPU_RESET( sh2 )
sh2->m = m;
memset(sh2->m, 0, 0x200);
- sh2->pc = program_read_dword_32be(0);
- sh2->r[15] = program_read_dword_32be(4);
+ sh2->pc = memory_read_dword_32be(sh2->program, 0);
+ sh2->r[15] = memory_read_dword_32be(sh2->program, 4);
sh2->sr = I;
change_pc(sh2->pc & AM);
diff --git a/src/emu/cpu/sh4/sh4.c b/src/emu/cpu/sh4/sh4.c
index b5b2140e6d1..6de5b71b582 100644
--- a/src/emu/cpu/sh4/sh4.c
+++ b/src/emu/cpu/sh4/sh4.c
@@ -22,6 +22,7 @@
*
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "sh4.h"
#include "sh4regs.h"
@@ -117,9 +118,9 @@ INLINE UINT8 RB(offs_t A)
return sh4_internal_r(sh4.internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xff << ((A & 3)*8)) >> ((A & 3)*8);
if (A >= 0xe0000000)
- return program_read_byte_64le(A);
+ return memory_read_byte_64le(sh4.program, A);
- return program_read_byte_64le(A & AM);
+ return memory_read_byte_64le(sh4.program, A & AM);
}
INLINE UINT16 RW(offs_t A)
@@ -128,9 +129,9 @@ INLINE UINT16 RW(offs_t A)
return sh4_internal_r(sh4.internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xffff << ((A & 2)*8)) >> ((A & 2)*8);
if (A >= 0xe0000000)
- return program_read_word_64le(A);
+ return memory_read_word_64le(sh4.program, A);
- return program_read_word_64le(A & AM);
+ return memory_read_word_64le(sh4.program, A & AM);
}
INLINE UINT32 RL(offs_t A)
@@ -139,9 +140,9 @@ INLINE UINT32 RL(offs_t A)
return sh4_internal_r(sh4.internal, ((A & 0x0fc) >> 2) | ((A & 0x1fe0000) >> 11), 0xffffffff);
if (A >= 0xe0000000)
- return program_read_dword_64le(A);
+ return memory_read_dword_64le(sh4.program, A);
- return program_read_dword_64le(A & AM);
+ return memory_read_dword_64le(sh4.program, A & AM);
}
INLINE void WB(offs_t A, UINT8 V)
@@ -155,11 +156,11 @@ INLINE void WB(offs_t A, UINT8 V)
if (A >= 0xe0000000)
{
- program_write_byte_64le(A,V);
+ memory_write_byte_64le(sh4.program, A,V);
return;
}
- program_write_byte_64le(A & AM,V);
+ memory_write_byte_64le(sh4.program, A & AM,V);
}
INLINE void WW(offs_t A, UINT16 V)
@@ -172,11 +173,11 @@ INLINE void WW(offs_t A, UINT16 V)
if (A >= 0xe0000000)
{
- program_write_word_64le(A,V);
+ memory_write_word_64le(sh4.program, A,V);
return;
}
- program_write_word_64le(A & AM,V);
+ memory_write_word_64le(sh4.program, A & AM,V);
}
INLINE void WL(offs_t A, UINT32 V)
@@ -189,14 +190,14 @@ INLINE void WL(offs_t A, UINT32 V)
if (A >= 0xe0000000)
{
- program_write_dword_64le(A,V);
+ memory_write_dword_64le(sh4.program, A,V);
return;
}
/* if (A >= 0x40000000)
return;*/
- program_write_dword_64le(A & AM,V);
+ memory_write_dword_64le(sh4.program, A & AM,V);
}
/* code cycles t-bit
@@ -2083,7 +2084,7 @@ UINT32 addr,dest,sq;
addr = addr & 0xFFFFFFE0;
for (a = 0;a < 4;a++)
{
- program_write_qword_64le(dest, program_read_qword_64le(addr));
+ memory_write_qword_64le(sh4.program, dest, memory_read_qword_64le(sh4.program, addr));
addr += 8;
dest += 8;
}
@@ -3275,6 +3276,9 @@ static CPU_RESET( sh4 )
sh4.ftcsr_read_callback = f;
sh4.irq_callback = save_irqcallback;
sh4.device = device;
+ sh4.internal = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
+ sh4.program = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
+ sh4.io = cpu_get_address_space(device, ADDRESS_SPACE_IO);
sh4.dma_timer[0] = tsaved[0];
sh4.dma_timer[1] = tsaved[1];
@@ -3328,12 +3332,12 @@ static CPU_EXECUTE( sh4 )
if (sh4.delay)
{
- opcode = program_decrypted_read_word(WORD2_XOR_LE((UINT32)(sh4.delay & AM)));
+ opcode = memory_decrypted_read_word(sh4.program, WORD2_XOR_LE((UINT32)(sh4.delay & AM)));
change_pc(sh4.pc & AM);
sh4.pc -= 2;
}
else
- opcode = program_decrypted_read_word(WORD2_XOR_LE((UINT32)(sh4.pc & AM)));
+ opcode = memory_decrypted_read_word(sh4.program, WORD2_XOR_LE((UINT32)(sh4.pc & AM)));
debugger_instruction_hook(device, sh4.pc & AM);
@@ -3402,6 +3406,8 @@ static CPU_INIT( sh4 )
sh4.irq_callback = irqcallback;
sh4.device = device;
sh4.internal = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
+ sh4.program = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
+ sh4.io = cpu_get_address_space(device, ADDRESS_SPACE_IO);
sh4_default_exception_priorities();
sh4.irln = 15;
sh4.test_irq = 0;
diff --git a/src/emu/cpu/sh4/sh4comn.c b/src/emu/cpu/sh4/sh4comn.c
index b55e760ff76..1395d222bee 100644
--- a/src/emu/cpu/sh4/sh4comn.c
+++ b/src/emu/cpu/sh4/sh4comn.c
@@ -6,6 +6,7 @@
*
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "cpuexec.h"
@@ -483,7 +484,7 @@ static int sh4_dma_transfer(int channel, int timermode, UINT32 chcr, UINT32 *sar
src --;
if(incd == 2)
dst --;
- program_write_byte_64le(dst, program_read_byte_64le(src));
+ memory_write_byte_64le(sh4.program, dst, memory_read_byte_64le(sh4.program, src));
if(incs == 1)
src ++;
if(incd == 1)
@@ -499,7 +500,7 @@ static int sh4_dma_transfer(int channel, int timermode, UINT32 chcr, UINT32 *sar
src -= 2;
if(incd == 2)
dst -= 2;
- program_write_word_64le(dst, program_read_word_64le(src));
+ memory_write_word_64le(sh4.program, dst, memory_read_word_64le(sh4.program, src));
if(incs == 1)
src += 2;
if(incd == 1)
@@ -515,7 +516,7 @@ static int sh4_dma_transfer(int channel, int timermode, UINT32 chcr, UINT32 *sar
src -= 8;
if(incd == 2)
dst -= 8;
- program_write_qword_64le(dst, program_read_qword_64le(src));
+ memory_write_qword_64le(sh4.program, dst, memory_read_qword_64le(sh4.program, src));
if(incs == 1)
src += 8;
if(incd == 1)
@@ -532,7 +533,7 @@ static int sh4_dma_transfer(int channel, int timermode, UINT32 chcr, UINT32 *sar
src -= 4;
if(incd == 2)
dst -= 4;
- program_write_dword_64le(dst, program_read_dword_64le(src));
+ memory_write_dword_64le(sh4.program, dst, memory_read_dword_64le(sh4.program, src));
if(incs == 1)
src += 4;
if(incd == 1)
@@ -549,10 +550,10 @@ static int sh4_dma_transfer(int channel, int timermode, UINT32 chcr, UINT32 *sar
src -= 32;
if(incd == 2)
dst -= 32;
- program_write_qword_64le(dst, program_read_qword_64le(src));
- program_write_qword_64le(dst+8, program_read_qword_64le(src+8));
- program_write_qword_64le(dst+16, program_read_qword_64le(src+16));
- program_write_qword_64le(dst+24, program_read_qword_64le(src+24));
+ memory_write_qword_64le(sh4.program, dst, memory_read_qword_64le(sh4.program, src));
+ memory_write_qword_64le(sh4.program, dst+8, memory_read_qword_64le(sh4.program, src+8));
+ memory_write_qword_64le(sh4.program, dst+16, memory_read_qword_64le(sh4.program, src+16));
+ memory_write_qword_64le(sh4.program, dst+24, memory_read_qword_64le(sh4.program, src+24));
if(incs == 1)
src += 32;
if(incd == 1)
@@ -886,11 +887,11 @@ WRITE32_HANDLER( sh4_internal_w )
sh4.ioport16_direction &= 0xffff;
sh4.ioport16_pullup = (sh4.ioport16_pullup | sh4.ioport16_direction) ^ 0xffff;
if (sh4.m[BCR2] & 1)
- io_write_dword_64le(SH4_IOPORT_16, (UINT64)(sh4.m[PDTRA] & sh4.ioport16_direction) | ((UINT64)sh4.m[PCTRA] << 16));
+ memory_write_dword_64le(sh4.io, SH4_IOPORT_16, (UINT64)(sh4.m[PDTRA] & sh4.ioport16_direction) | ((UINT64)sh4.m[PCTRA] << 16));
break;
case PDTRA:
if (sh4.m[BCR2] & 1)
- io_write_dword_64le(SH4_IOPORT_16, (UINT64)(sh4.m[PDTRA] & sh4.ioport16_direction) | ((UINT64)sh4.m[PCTRA] << 16));
+ memory_write_dword_64le(sh4.io, SH4_IOPORT_16, (UINT64)(sh4.m[PDTRA] & sh4.ioport16_direction) | ((UINT64)sh4.m[PCTRA] << 16));
break;
case PCTRB:
sh4.ioport4_pullup = 0;
@@ -902,11 +903,11 @@ WRITE32_HANDLER( sh4_internal_w )
sh4.ioport4_direction &= 0xf;
sh4.ioport4_pullup = (sh4.ioport4_pullup | sh4.ioport4_direction) ^ 0xf;
if (sh4.m[BCR2] & 1)
- io_write_dword_64le(SH4_IOPORT_4, (sh4.m[PDTRB] & sh4.ioport4_direction) | (sh4.m[PCTRB] << 16));
+ memory_write_dword_64le(sh4.io, SH4_IOPORT_4, (sh4.m[PDTRB] & sh4.ioport4_direction) | (sh4.m[PCTRB] << 16));
break;
case PDTRB:
if (sh4.m[BCR2] & 1)
- io_write_dword_64le(SH4_IOPORT_4, (sh4.m[PDTRB] & sh4.ioport4_direction) | (sh4.m[PCTRB] << 16));
+ memory_write_dword_64le(sh4.io, SH4_IOPORT_4, (sh4.m[PDTRB] & sh4.ioport4_direction) | (sh4.m[PCTRB] << 16));
break;
case SCBRR2:
@@ -956,11 +957,11 @@ READ32_HANDLER( sh4_internal_r )
// I/O ports
case PDTRA:
if (sh4.m[BCR2] & 1)
- return (io_read_dword_64le(SH4_IOPORT_16) & ~sh4.ioport16_direction) | (sh4.m[PDTRA] & sh4.ioport16_direction);
+ return (memory_read_dword_64le(sh4.io, SH4_IOPORT_16) & ~sh4.ioport16_direction) | (sh4.m[PDTRA] & sh4.ioport16_direction);
break;
case PDTRB:
if (sh4.m[BCR2] & 1)
- return (io_read_dword_64le(SH4_IOPORT_4) & ~sh4.ioport4_direction) | (sh4.m[PDTRB] & sh4.ioport4_direction);
+ return (memory_read_dword_64le(sh4.io, SH4_IOPORT_4) & ~sh4.ioport4_direction) | (sh4.m[PDTRB] & sh4.ioport4_direction);
break;
}
return sh4.m[offset];
@@ -1248,7 +1249,7 @@ UINT32 pos,len,siz;
len = s->length;
p32bits = (UINT32 *)(s->buffer);
for (pos = 0;pos < len;pos++) {
- *p32bits = program_read_dword_64le(s->source);
+ *p32bits = memory_read_dword_64le(sh4.program, s->source);
p32bits++;
s->source = s->source + 4;
}
@@ -1256,7 +1257,7 @@ UINT32 pos,len,siz;
len = s->length;
p32bits = (UINT32 *)(s->buffer);
for (pos = 0;pos < len;pos++) {
- program_write_dword_64le(s->destination, *p32bits);
+ memory_write_dword_64le(sh4.program, s->destination, *p32bits);
p32bits++;
s->destination = s->destination + 4;
}
@@ -1268,9 +1269,9 @@ UINT32 pos,len,siz;
p32bytes = (UINT64 *)(s->buffer);
for (pos = 0;pos < len;pos++) {
#ifdef LSB_FIRST
- *p32bytes = program_read_qword_64le(s->source);
+ *p32bytes = memory_read_qword_64le(sh4.program, s->source);
#else
- *p32bytes = program_read_qword_64be(s->source);
+ *p32bytes = memory_read_qword_64be(sh4.program, s->source);
#endif
p32bytes++;
s->destination = s->destination + 8;
@@ -1280,9 +1281,9 @@ UINT32 pos,len,siz;
p32bytes = (UINT64 *)(s->buffer);
for (pos = 0;pos < len;pos++) {
#ifdef LSB_FIRST
- program_write_qword_64le(s->destination, *p32bytes);
+ memory_write_qword_64le(sh4.program, s->destination, *p32bytes);
#else
- program_write_qword_64be(s->destination, *p32bytes);
+ memory_write_qword_64be(sh4.program, s->destination, *p32bytes);
#endif
p32bytes++;
s->destination = s->destination + 8;
diff --git a/src/emu/cpu/sh4/sh4comn.h b/src/emu/cpu/sh4/sh4comn.h
index 00548c3e43c..d54264aefb3 100644
--- a/src/emu/cpu/sh4/sh4comn.h
+++ b/src/emu/cpu/sh4/sh4comn.h
@@ -63,6 +63,8 @@ typedef struct
cpu_irq_callback irq_callback;
const device_config *device;
const address_space *internal;
+ const address_space *program;
+ const address_space *io;
UINT32 *m;
INT8 nmi_line_state;
diff --git a/src/emu/cpu/sm8500/sm8500.c b/src/emu/cpu/sm8500/sm8500.c
index 76c559bf501..56bb5fe6c1e 100644
--- a/src/emu/cpu/sm8500/sm8500.c
+++ b/src/emu/cpu/sm8500/sm8500.c
@@ -9,6 +9,7 @@
Code by Wilbert Pol
*/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "sm8500.h"
@@ -48,6 +49,7 @@ typedef struct {
int halted;
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
UINT8 internal_ram[0x500];
} sm8500_regs;
@@ -61,14 +63,14 @@ static const UINT8 sm8500_b2w[8] = {
};
UINT8 sm85cpu_mem_readbyte( UINT32 offset ) {
- return ( offset < 0x10 ) ? regs.register_base[offset] : program_read_byte_8be( offset );
+ return ( offset < 0x10 ) ? regs.register_base[offset] : memory_read_byte_8be( regs.program, offset );
}
void sm85cpu_mem_writebyte( UINT32 offset, UINT8 data ) {
if ( offset < 0x10 ) {
regs.register_base[offset] = data;
} else {
- program_write_byte_8be( offset, data );
+ memory_write_byte_8be( regs.program, offset, data );
}
}
@@ -80,6 +82,7 @@ UINT8* sm8500_internal_ram( void )
static CPU_INIT( sm8500 ) {
regs.irq_callback = irqcallback;
regs.device = device;
+ regs.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
if ( device->static_config != NULL ) {
regs.config.handle_dma = ((SM8500_CONFIG *)device->static_config)->handle_dma;
regs.config.handle_timers = ((SM8500_CONFIG *)device->static_config)->handle_timers;
diff --git a/src/emu/cpu/spc700/spc700.c b/src/emu/cpu/spc700/spc700.c
index 4c0da1478e7..daf592f0cb0 100644
--- a/src/emu/cpu/spc700/spc700.c
+++ b/src/emu/cpu/spc700/spc700.c
@@ -60,6 +60,7 @@ Address Function Register R/W When Reset Remarks
/* ================================ INCLUDES ============================== */
/* ======================================================================== */
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include <limits.h>
#include "debugger.h"
#include "spc700.h"
@@ -123,6 +124,7 @@ typedef struct
uint ir; /* Instruction Register */
cpu_irq_callback int_ack;
const device_config *device;
+ const address_space *program;
uint stopped; /* stopped status */
} spc700i_cpu_struct;
@@ -1260,6 +1262,7 @@ CPU_INIT( spc700 )
{
INT_ACK = irqcallback;
spc700i_cpu.device = device;
+ spc700i_cpu.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
}
diff --git a/src/emu/cpu/spc700/spc700.h b/src/emu/cpu/spc700/spc700.h
index 177d84ae726..a8aedd448ef 100644
--- a/src/emu/cpu/spc700/spc700.h
+++ b/src/emu/cpu/spc700/spc700.h
@@ -132,15 +132,15 @@ void spc700_branching(unsigned int new_pc);
extern CPU_GET_INFO( spc700 );
-#define spc700_read_8(addr) program_read_byte_8le(addr)
-#define spc700_write_8(addr,data) program_write_byte_8le(addr,data)
+#define spc700_read_8(addr) memory_read_byte_8le(spc700i_cpu.program,addr)
+#define spc700_write_8(addr,data) memory_write_byte_8le(spc700i_cpu.program,addr,data)
#define spc700_read_8_direct(A) spc700_read_8(A)
#define spc700_write_8_direct(A, V) spc700_write_8(A, V)
-//#define spc700_read_instruction(A) program_decrypted_read_byte(A)
-//#define spc700_read_8_immediate(A) program_raw_read_byte(A)
-#define spc700_read_instruction(A) program_read_byte_8le(A)
-#define spc700_read_8_immediate(A) program_read_byte_8le(A)
+//#define spc700_read_instruction(A) memory_decrypted_read_byte(spc700i_cpu.program,A)
+//#define spc700_read_8_immediate(A) memory_raw_read_byte(spc700i_cpu.program,A)
+#define spc700_read_instruction(A) memory_read_byte_8le(spc700i_cpu.program,A)
+#define spc700_read_8_immediate(A) memory_read_byte_8le(spc700i_cpu.program,A)
#define spc700_jumping(A) change_pc(A)
#define spc700_branching(A) change_pc(A)
diff --git a/src/emu/cpu/ssp1601/ssp1601.c b/src/emu/cpu/ssp1601/ssp1601.c
index 9864fadbf64..f072335fc5d 100644
--- a/src/emu/cpu/ssp1601/ssp1601.c
+++ b/src/emu/cpu/ssp1601/ssp1601.c
@@ -17,6 +17,7 @@
* ops not used by VR are not implemented
*/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "ssp1601.h"
@@ -49,6 +50,10 @@ struct _ssp1601_state_t
PAIR ppc;
int g_cycles;
+
+ const device_config *device;
+ const address_space *program;
+ const address_space *io;
};
@@ -71,8 +76,8 @@ struct _ssp1601_state_t
#define PPC ssp1601_state->ppc.w.h
-#define FETCH() program_decrypted_read_word(rPC++ << 1)
-#define PROGRAM_WORD(a) program_read_word((a) << 1)
+#define FETCH() memory_decrypted_read_word(ssp1601_state->program, rPC++ << 1)
+#define PROGRAM_WORD(a) memory_read_word(ssp1601_state->program, (a) << 1)
#define GET_PPC_OFFS() PPC
#define CHANGEPC() change_pc(rPC << 1)
@@ -244,13 +249,13 @@ static void write_unknown(ssp1601_state_t *ssp1601_state, int reg, UINT32 d)
static UINT32 read_ext(ssp1601_state_t *ssp1601_state, int reg)
{
reg &= 7;
- return io_read_word_16be((reg << 1));
+ return memory_read_word_16be(ssp1601_state->io, (reg << 1));
}
static void write_ext(ssp1601_state_t *ssp1601_state, int reg, UINT32 d)
{
reg &= 7;
- io_write_word_16be((reg << 1), d);
+ memory_write_word_16be(ssp1601_state->io, (reg << 1), d);
}
// 4
@@ -501,7 +506,7 @@ static UINT32 ptr2_read(ssp1601_state_t *ssp1601_state, int op)
static CPU_INIT( ssp1601 )
{
ssp1601_state_t *ssp1601_state = device->token;
-
+
state_save_register_item(CHIP_NAME, device->tag, 0, rX);
state_save_register_item(CHIP_NAME, device->tag, 0, rY);
state_save_register_item(CHIP_NAME, device->tag, 0, rA32);
@@ -517,6 +522,10 @@ static CPU_INIT( ssp1601 )
/* clear the state */
memset(ssp1601_state, 0, sizeof(ssp1601_state_t));
ssp1601_state->gr[0].w.h = 0xffff; // constant reg
+ ssp1601_state->device = device;
+ ssp1601_state->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ ssp1601_state->io = memory_find_address_space(device, ADDRESS_SPACE_IO);
+
}
static CPU_EXIT( ssp1601 )
diff --git a/src/emu/cpu/t11/t11.c b/src/emu/cpu/t11/t11.c
index da4366abc82..e316a8482b8 100644
--- a/src/emu/cpu/t11/t11.c
+++ b/src/emu/cpu/t11/t11.c
@@ -11,6 +11,7 @@
*****************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "t11.h"
@@ -33,6 +34,7 @@ typedef struct
INT32 interrupt_cycles;
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
} t11_Regs;
static t11_Regs t11;
@@ -77,7 +79,7 @@ static int t11_ICount;
INLINE int ROPCODE(void)
{
- int val = program_decrypted_read_word(PC);
+ int val = memory_decrypted_read_word(t11.program, PC);
PC += 2;
return val;
}
@@ -296,6 +298,7 @@ static CPU_INIT( t11 )
t11.initial_pc = initial_pc[setup->mode >> 13];
t11.irq_callback = irqcallback;
t11.device = device;
+ t11.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
state_save_register_item("t11", device->tag, 0, t11.ppc.w.l);
state_save_register_item("t11", device->tag, 0, t11.reg[0].w.l);
diff --git a/src/emu/cpu/t11/t11.h b/src/emu/cpu/t11/t11.h
index dbb8dcb1810..06204b4d08d 100644
--- a/src/emu/cpu/t11/t11.h
+++ b/src/emu/cpu/t11/t11.h
@@ -38,14 +38,14 @@ extern CPU_GET_INFO( t11 );
/****************************************************************************/
/* Read a byte from given memory location */
/****************************************************************************/
-#define T11_RDMEM(A) ((unsigned)program_read_byte_16le(A))
-#define T11_RDMEM_WORD(A) ((unsigned)program_read_word_16le(A))
+#define T11_RDMEM(A) ((unsigned)memory_read_byte_16le(t11.program, A))
+#define T11_RDMEM_WORD(A) ((unsigned)memory_read_word_16le(t11.program, A))
/****************************************************************************/
/* Write a byte to given memory location */
/****************************************************************************/
-#define T11_WRMEM(A,V) (program_write_byte_16le(A,V))
-#define T11_WRMEM_WORD(A,V) (program_write_word_16le(A,V))
+#define T11_WRMEM(A,V) (memory_write_byte_16le(t11.program, A,V))
+#define T11_WRMEM_WORD(A,V) (memory_write_word_16le(t11.program, A,V))
CPU_DISASSEMBLE( t11 );
diff --git a/src/emu/cpu/tlcs90/tlcs90.c b/src/emu/cpu/tlcs90/tlcs90.c
index e5359746edd..0e199671935 100644
--- a/src/emu/cpu/tlcs90/tlcs90.c
+++ b/src/emu/cpu/tlcs90/tlcs90.c
@@ -6,6 +6,7 @@
*************************************************************************************************************/
+#define NO_LEGACY_MEMORY_HANDLERS 1
#include "debugger.h"
#include "deprecat.h"
#include "cpuexec.h"
@@ -19,6 +20,8 @@ typedef struct
UINT16 irq_state, irq_mask;
cpu_irq_callback irq_callback;
const device_config *device;
+ const address_space *program;
+ const address_space *io;
int extra_cycles; // extra cycles for interrupts
UINT8 internal_registers[48];
UINT32 ixbase,iybase;
@@ -161,16 +164,16 @@ static UINT32 addr;
#define R16D8( N,R,I ) mode##N = MODE_R16D8; r##N = R; r##N##b = I;
#define R16R8( N,R,g ) mode##N = MODE_R16R8; r##N = R; r##N##b = g;
-INLINE UINT8 RM8 (UINT32 a) { return program_read_byte_8le( a ); }
+INLINE UINT8 RM8 (UINT32 a) { return memory_read_byte_8le( T90.program, a ); }
INLINE UINT16 RM16(UINT32 a) { return RM8(a) | (RM8( (a+1) & 0xffff ) << 8); }
-INLINE void WM8 (UINT32 a, UINT8 v) { program_write_byte_8le( a, v ); }
+INLINE void WM8 (UINT32 a, UINT8 v) { memory_write_byte_8le( T90.program, a, v ); }
INLINE void WM16(UINT32 a, UINT16 v) { WM8(a,v); WM8( (a+1) & 0xffff, v >> 8); }
-INLINE UINT8 RX8 (UINT32 a, UINT32 base) { return program_read_byte_8le( base | a ); }
+INLINE UINT8 RX8 (UINT32 a, UINT32 base) { return memory_read_byte_8le( T90.program, base | a ); }
INLINE UINT16 RX16(UINT32 a, UINT32 base) { return RX8(a,base) | (RX8( (a+1) & 0xffff, base ) << 8); }
-INLINE void WX8 (UINT32 a, UINT8 v, UINT32 base) { program_write_byte_8le( base | a, v ); }
+INLINE void WX8 (UINT32 a, UINT8 v, UINT32 base) { memory_write_byte_8le( T90.program, base | a, v ); }
INLINE void WX16(UINT32 a, UINT16 v, UINT32 base) { WX8(a,v,base); WX8( (a+1) & 0xffff, v >> 8, base); }
INLINE UINT8 READ8(void) { UINT8 b0 = RM8( addr++ ); addr &= 0xffff; return b0; }
@@ -2278,7 +2281,7 @@ FFED BX R/W Reset Description
static READ8_HANDLER( t90_internal_registers_r )
{
- #define RIO io_read_byte_8le( T90_IOBASE+offset )
+ #define RIO memory_read_byte_8le( T90.io, T90_IOBASE+offset )
UINT8 data = T90.internal_registers[offset];
switch ( T90_IOBASE + offset )
@@ -2486,7 +2489,7 @@ static TIMER_CALLBACK( t90_timer4_callback )
static WRITE8_HANDLER( t90_internal_registers_w )
{
- #define WIO io_write_byte_8le( T90_IOBASE+offset, data )
+ #define WIO memory_write_byte_8le( T90.io, T90_IOBASE+offset, data )
UINT8 out_mask;
UINT8 old = T90.internal_registers[offset];
@@ -2655,6 +2658,8 @@ static CPU_INIT( t90 )
memset(&T90, 0, sizeof(T90));
T90.irq_callback = irqcallback;
T90.device = device;
+ T90.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM);
+ T90.io = memory_find_address_space(device, ADDRESS_SPACE_IO);
T90.timer_period = attotime_mul(ATTOTIME_IN_HZ(cpu_get_clock(device->machine->activecpu)), 8);