diff options
| author | 2008-11-23 00:05:00 +0000 | |
|---|---|---|
| committer | 2008-11-23 00:05:00 +0000 | |
| commit | cf2bb4f315bb15b991e22665838f62f6792001e2 (patch) | |
| tree | 41589dc7872cee72972878990691ab4507e4111a /src | |
| parent | 2d5bd758dee8247a5b0ce096963962d32738fa11 (diff) | |
More memory conversions.
Diffstat (limited to 'src')
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); |
