diff options
author | 2008-11-23 00:40:10 +0000 | |
---|---|---|
committer | 2008-11-23 00:40:10 +0000 | |
commit | 6885dcc750ae0455e6c6d4ae98248d39a1b6abe9 (patch) | |
tree | 0e438328df23a54c5a05852b953e190ecadb8ec2 /src | |
parent | cf2bb4f315bb15b991e22665838f62f6792001e2 (diff) |
TMS* CPUs conversion ... almost there.
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/cpu/tms32010/tms32010.c | 12 | ||||
-rw-r--r-- | src/emu/cpu/tms32010/tms32010.h | 18 | ||||
-rw-r--r-- | src/emu/cpu/tms32025/32025dsm.c | 5 | ||||
-rw-r--r-- | src/emu/cpu/tms32025/tms32025.c | 93 | ||||
-rw-r--r-- | src/emu/cpu/tms32051/tms32051.c | 17 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/34010fld.c | 198 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/34010gfx.c | 130 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/34010ops.c | 8 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/34010ops.h | 85 | ||||
-rw-r--r-- | src/emu/cpu/tms34010/tms34010.c | 80 | ||||
-rw-r--r-- | src/emu/cpu/tms7000/7000dasm.c | 2 | ||||
-rw-r--r-- | src/emu/cpu/tms7000/tms7000.c | 87 | ||||
-rw-r--r-- | src/emu/cpu/tms9900/99xxcore.h | 140 |
13 files changed, 453 insertions, 422 deletions
diff --git a/src/emu/cpu/tms32010/tms32010.c b/src/emu/cpu/tms32010/tms32010.c index bccc0e3900a..efdc0a3c303 100644 --- a/src/emu/cpu/tms32010/tms32010.c +++ b/src/emu/cpu/tms32010/tms32010.c @@ -52,7 +52,7 @@ \**************************************************************************/ - +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "debugger.h" #include "tms32010.h" @@ -93,6 +93,11 @@ typedef struct /* Page 3-6 shows all registers */ /********************** Status data ****************************/ PAIR opcode; int INTF; /* Pending Interrupt flag */ + + const device_config *device; + const address_space *program; + const address_space *data; + const address_space *io; } tms32010_Regs; static tms32010_Regs R; @@ -726,6 +731,11 @@ static CPU_INIT( tms32010 ) state_save_register_item("tms32010", device->tag, 0, R.STACK[3]); state_save_register_item("tms32010", device->tag, 0, R.INTF); state_save_register_item("tms32010", device->tag, 0, R.opcode.d); + + 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/tms32010/tms32010.h b/src/emu/cpu/tms32010/tms32010.h index 0a282e39bc6..aaa03fa0a09 100644 --- a/src/emu/cpu/tms32010/tms32010.h +++ b/src/emu/cpu/tms32010/tms32010.h @@ -59,21 +59,21 @@ CPU_GET_INFO( tms32010 ); * Read the state of the BIO pin */ -#define TMS32010_BIO_In (io_read_word_16be(TMS32010_BIO<<1)) +#define TMS32010_BIO_In (memory_read_word_16be(R.io, TMS32010_BIO<<1)) /**************************************************************************** * Input a word from given I/O port */ -#define TMS32010_In(Port) (io_read_word_16be((Port)<<1)) +#define TMS32010_In(Port) (memory_read_word_16be(R.io, (Port)<<1)) /**************************************************************************** * Output a word to given I/O port */ -#define TMS32010_Out(Port,Value) (io_write_word_16be((Port)<<1,Value)) +#define TMS32010_Out(Port,Value) (memory_write_word_16be(R.io, (Port)<<1,Value)) @@ -81,14 +81,14 @@ CPU_GET_INFO( tms32010 ); * Read a word from given ROM memory location */ -#define TMS32010_ROM_RDMEM(A) (program_read_word_16be((A)<<1)) +#define TMS32010_ROM_RDMEM(A) (memory_read_word_16be(R.program, (A)<<1)) /**************************************************************************** * Write a word to given ROM memory location */ -#define TMS32010_ROM_WRMEM(A,V) (program_write_word_16be((A)<<1,V)) +#define TMS32010_ROM_WRMEM(A,V) (memory_write_word_16be(R.program, (A)<<1,V)) @@ -96,14 +96,14 @@ CPU_GET_INFO( tms32010 ); * Read a word from given RAM memory location */ -#define TMS32010_RAM_RDMEM(A) (data_read_word_16be((A)<<1)) +#define TMS32010_RAM_RDMEM(A) (memory_read_word_16be(R.data, (A)<<1)) /**************************************************************************** * Write a word to given RAM memory location */ -#define TMS32010_RAM_WRMEM(A,V) (data_write_word_16be((A)<<1,V)) +#define TMS32010_RAM_WRMEM(A,V) (memory_write_word_16be(R.data, (A)<<1,V)) @@ -113,7 +113,7 @@ CPU_GET_INFO( tms32010 ); * used to greatly speed up emulation */ -#define TMS32010_RDOP(A) (program_decrypted_read_word((A)<<1)) +#define TMS32010_RDOP(A) (memory_decrypted_read_word(R.program, (A)<<1)) /**************************************************************************** @@ -122,7 +122,7 @@ CPU_GET_INFO( tms32010 ); * that use different encoding mechanisms for opcodes and opcode arguments */ -#define TMS32010_RDOP_ARG(A) (program_raw_read_word((A)<<1)) +#define TMS32010_RDOP_ARG(A) (memory_raw_read_word(R.program, (A)<<1)) diff --git a/src/emu/cpu/tms32025/32025dsm.c b/src/emu/cpu/tms32025/32025dsm.c index d5c406b5a93..a93e2cd800b 100644 --- a/src/emu/cpu/tms32025/32025dsm.c +++ b/src/emu/cpu/tms32025/32025dsm.c @@ -35,11 +35,6 @@ #include "tms32025.h" #include "debugger.h" -extern UINT16 *tms32025_pgmmap[0x200]; -//#define READOP16(A) (program_decrypted_read_word((A) | (TMS32025_PGM_OFFSET << 1))) -//#define READARG16(A) (program_raw_read_word((A) | (TMS32025_PGM_OFFSET << 1))) -#define READOP16(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : program_decrypted_read_word((A)<<1)) -#define READARG16(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : program_decrypted_read_word((A)<<1)) diff --git a/src/emu/cpu/tms32025/tms32025.c b/src/emu/cpu/tms32025/tms32025.c index c772fc6795e..f33d61c0abd 100644 --- a/src/emu/cpu/tms32025/tms32025.c +++ b/src/emu/cpu/tms32025/tms32025.c @@ -117,7 +117,7 @@ Table 3-2. TMS32025/26 Memory Blocks */ - +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "debugger.h" #include "tms32025.h" @@ -135,49 +135,13 @@ static UINT16 *tms32025_datamap[0x200]; #define SET_PC(x) do { R.PC = (x); change_pc(R.PC<<1); } while (0) -INLINE UINT16 M_RDROM(offs_t addr) -{ - UINT16 *ram; - addr &= 0xffff; - ram = tms32025_pgmmap[addr >> 7]; - if (ram) return ram[addr & 0x7f]; - return program_read_word_16be(addr << 1); -} - -INLINE void M_WRTROM(offs_t addr, UINT16 data) -{ - UINT16 *ram; - addr &= 0xffff; - ram = tms32025_pgmmap[addr >> 7]; - if (ram) { ram[addr & 0x7f] = data; } - else program_write_word_16be(addr << 1, data); -} - -INLINE UINT16 M_RDRAM(offs_t addr) -{ - UINT16 *ram; - addr &= 0xffff; - ram = tms32025_datamap[addr >> 7]; - if (ram) return ram[addr & 0x7f]; - return data_read_word_16be(addr << 1); -} - -INLINE void M_WRTRAM(offs_t addr, UINT16 data) -{ - UINT16 *ram; - addr &= 0xffff; - ram = tms32025_datamap[addr >> 7]; - if (ram) { ram[addr & 0x7f] = data; } - else data_write_word_16be(addr << 1, data); -} - -#define P_IN(A) (io_read_word_16be((A)<<1)) -#define P_OUT(A,V) (io_write_word_16be(((A)<<1),(V))) -#define S_IN(A) (io_read_word_16be((A)<<1)) -#define S_OUT(A,V) (io_write_word_16be(((A)<<1),(V))) +#define P_IN(A) (memory_read_word_16be(R.io, (A)<<1)) +#define P_OUT(A,V) (memory_write_word_16be(R.io, ((A)<<1),(V))) +#define S_IN(A) (memory_read_word_16be(R.io, (A)<<1)) +#define S_OUT(A,V) (memory_write_word_16be(R.io, ((A)<<1),(V))) -#define M_RDOP(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : program_decrypted_read_word((A)<<1)) -#define M_RDOP_ARG(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : program_decrypted_read_word((A)<<1)) +#define M_RDOP(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : memory_decrypted_read_word(R.program, (A)<<1)) +#define M_RDOP_ARG(A) ((tms32025_pgmmap[(A) >> 7]) ? (tms32025_pgmmap[(A) >> 7][(A) & 0x7f]) : memory_decrypted_read_word(R.program, (A)<<1)) @@ -209,6 +173,9 @@ typedef struct /* Page 3-6 (45) shows all registers */ int tms32025_dec_cycles; cpu_irq_callback irq_callback; const device_config *device; + const address_space *program; + const address_space *data; + const address_space *io; UINT16 *datamap_save[16]; UINT16 *pgmmap_save[12]; } tms32025_Regs; @@ -300,6 +267,43 @@ INLINE void MODIFY_ARB(int data) { R.STR1 &= ~ARB_REG; R.STR1 |= ((data << 13) & static int mHackIgnoreARP; /* special handling for lst, lst1 instructions */ +INLINE UINT16 M_RDROM(offs_t addr) +{ + UINT16 *ram; + addr &= 0xffff; + ram = tms32025_pgmmap[addr >> 7]; + if (ram) return ram[addr & 0x7f]; + return memory_read_word_16be(R.program, addr << 1); +} + +INLINE void M_WRTROM(offs_t addr, UINT16 data) +{ + UINT16 *ram; + addr &= 0xffff; + ram = tms32025_pgmmap[addr >> 7]; + if (ram) { ram[addr & 0x7f] = data; } + else memory_write_word_16be(R.program, addr << 1, data); +} + +INLINE UINT16 M_RDRAM(offs_t addr) +{ + UINT16 *ram; + addr &= 0xffff; + ram = tms32025_datamap[addr >> 7]; + if (ram) return ram[addr & 0x7f]; + return memory_read_word_16be(R.data, addr << 1); +} + +INLINE void M_WRTRAM(offs_t addr, UINT16 data) +{ + UINT16 *ram; + addr &= 0xffff; + ram = tms32025_datamap[addr >> 7]; + if (ram) { ram[addr & 0x7f] = data; } + else memory_write_word_16be(R.data, addr << 1, data); +} + + static UINT16 reverse_carry_add( UINT16 arg0, UINT16 arg1 ) { UINT16 result = 0; @@ -1733,6 +1737,9 @@ static CPU_INIT( tms32025 ) R.intRAM = auto_malloc(0x800*2); R.irq_callback = irqcallback; 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); state_save_register_item("tms32025", device->tag, 0, R.PC); state_save_register_item("tms32025", device->tag, 0, R.STR0); diff --git a/src/emu/cpu/tms32051/tms32051.c b/src/emu/cpu/tms32051/tms32051.c index 117aca4a2a4..3705c3f083a 100644 --- a/src/emu/cpu/tms32051/tms32051.c +++ b/src/emu/cpu/tms32051/tms32051.c @@ -4,6 +4,7 @@ Written by Ville Linde */ +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "debugger.h" #include "cpuintrf.h" #include "tms32051.h" @@ -147,6 +148,8 @@ typedef struct { cpu_irq_callback irq_callback; const device_config *device; + const address_space *program; + const address_space *data; } TMS_REGS; static TMS_REGS tms; @@ -154,7 +157,7 @@ static int tms_icount; #define CYCLES(x) (tms_icount -= x) -#define ROPCODE() program_decrypted_read_word((tms.pc++) << 1) +#define ROPCODE() memory_decrypted_read_word(tms.program, (tms.pc++) << 1) INLINE void CHANGE_PC(UINT16 new_pc) { @@ -164,22 +167,22 @@ INLINE void CHANGE_PC(UINT16 new_pc) INLINE UINT16 PM_READ16(UINT16 address) { - return program_read_word_16le(address << 1); + return memory_read_word_16le(tms.program, address << 1); } INLINE void PM_WRITE16(UINT16 address, UINT16 data) { - program_write_word_16le(address << 1, data); + memory_write_word_16le(tms.program, address << 1, data); } INLINE UINT16 DM_READ16(UINT16 address) { - return data_read_word_16le(address << 1); + return memory_read_word_16le(tms.data, address << 1); } INLINE void DM_WRITE16(UINT16 address, UINT16 data) { - data_write_word_16le(address << 1, data); + memory_write_word_16le(tms.data, address << 1, data); } #include "32051ops.c" @@ -211,7 +214,9 @@ static void delay_slot(UINT16 startpc) static CPU_INIT( tms ) { - + tms.device = device; + tms.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM); + tms.data = memory_find_address_space(device, ADDRESS_SPACE_DATA); } static CPU_RESET( tms ) diff --git a/src/emu/cpu/tms34010/34010fld.c b/src/emu/cpu/tms34010/34010fld.c index eb9cc12a9a0..8ed7ef3e6c2 100644 --- a/src/emu/cpu/tms34010/34010fld.c +++ b/src/emu/cpu/tms34010/34010fld.c @@ -15,169 +15,169 @@ static void wfield_01(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x01,16); + WFIELDMAC(tms,0x01,16); } static void wfield_02(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x03,15); + WFIELDMAC(tms,0x03,15); } static void wfield_03(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x07,14); + WFIELDMAC(tms,0x07,14); } static void wfield_04(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x0f,13); + WFIELDMAC(tms,0x0f,13); } static void wfield_05(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x1f,12); + WFIELDMAC(tms,0x1f,12); } static void wfield_06(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x3f,11); + WFIELDMAC(tms,0x3f,11); } static void wfield_07(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x7f,10); + WFIELDMAC(tms,0x7f,10); } static void wfield_08(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_8; + WFIELDMAC_8(tms); } static void wfield_09(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x1ff,8); + WFIELDMAC(tms,0x1ff,8); } static void wfield_10(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x3ff,7); + WFIELDMAC(tms,0x3ff,7); } static void wfield_11(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x7ff,6); + WFIELDMAC(tms,0x7ff,6); } static void wfield_12(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0xfff,5); + WFIELDMAC(tms,0xfff,5); } static void wfield_13(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x1fff,4); + WFIELDMAC(tms,0x1fff,4); } static void wfield_14(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x3fff,3); + WFIELDMAC(tms,0x3fff,3); } static void wfield_15(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x7fff,2); + WFIELDMAC(tms,0x7fff,2); } static void wfield_16(tms34010_state *tms, offs_t offset, UINT32 data) { if (offset & 0x0f) { - WFIELDMAC(0xffff,1); + WFIELDMAC(tms,0xffff,1); } else { - TMS34010_WRMEM_WORD(TOBYTE(offset),data); + TMS34010_WRMEM_WORD(tms,TOBYTE(offset),data); } } static void wfield_17(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC(0x1ffff,0); + WFIELDMAC(tms,0x1ffff,0); } static void wfield_18(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x3ffff,15); + WFIELDMAC_BIG(tms,0x3ffff,15); } static void wfield_19(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x7ffff,14); + WFIELDMAC_BIG(tms,0x7ffff,14); } static void wfield_20(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0xfffff,13); + WFIELDMAC_BIG(tms,0xfffff,13); } static void wfield_21(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x1fffff,12); + WFIELDMAC_BIG(tms,0x1fffff,12); } static void wfield_22(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x3fffff,11); + WFIELDMAC_BIG(tms,0x3fffff,11); } static void wfield_23(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x7fffff,10); + WFIELDMAC_BIG(tms,0x7fffff,10); } static void wfield_24(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0xffffff,9); + WFIELDMAC_BIG(tms,0xffffff,9); } static void wfield_25(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x1ffffff,8); + WFIELDMAC_BIG(tms,0x1ffffff,8); } static void wfield_26(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x3ffffff,7); + WFIELDMAC_BIG(tms,0x3ffffff,7); } static void wfield_27(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x7ffffff,6); + WFIELDMAC_BIG(tms,0x7ffffff,6); } static void wfield_28(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0xfffffff,5); + WFIELDMAC_BIG(tms,0xfffffff,5); } static void wfield_29(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x1fffffff,4); + WFIELDMAC_BIG(tms,0x1fffffff,4); } static void wfield_30(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x3fffffff,3); + WFIELDMAC_BIG(tms,0x3fffffff,3); } static void wfield_31(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_BIG(0x7fffffff,2); + WFIELDMAC_BIG(tms,0x7fffffff,2); } static void wfield_32(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_32; + WFIELDMAC_32(tms); } @@ -200,105 +200,105 @@ void (*const tms34010_wfield_functions[32])(tms34010_state *tms, offs_t offset, static UINT32 rfield_z_01(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x01,16); + RFIELDMAC(tms,0x01,16); return ret; } static UINT32 rfield_z_02(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x03,15); + RFIELDMAC(tms,0x03,15); return ret; } static UINT32 rfield_z_03(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x07,14); + RFIELDMAC(tms,0x07,14); return ret; } static UINT32 rfield_z_04(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x0f,13); + RFIELDMAC(tms,0x0f,13); return ret; } static UINT32 rfield_z_05(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1f,12); + RFIELDMAC(tms,0x1f,12); return ret; } static UINT32 rfield_z_06(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3f,11); + RFIELDMAC(tms,0x3f,11); return ret; } static UINT32 rfield_z_07(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7f,10); + RFIELDMAC(tms,0x7f,10); return ret; } static UINT32 rfield_z_08(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_8; + RFIELDMAC_8(tms); return ret; } static UINT32 rfield_z_09(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1ff,8); + RFIELDMAC(tms,0x1ff,8); return ret; } static UINT32 rfield_z_10(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3ff,7); + RFIELDMAC(tms,0x3ff,7); return ret; } static UINT32 rfield_z_11(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7ff,6); + RFIELDMAC(tms,0x7ff,6); return ret; } static UINT32 rfield_z_12(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0xfff,5); + RFIELDMAC(tms,0xfff,5); return ret; } static UINT32 rfield_z_13(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1fff,4); + RFIELDMAC(tms,0x1fff,4); return ret; } static UINT32 rfield_z_14(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3fff,3); + RFIELDMAC(tms,0x3fff,3); return ret; } static UINT32 rfield_z_15(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7fff,2); + RFIELDMAC(tms,0x7fff,2); return ret; } @@ -307,122 +307,122 @@ static UINT32 rfield_z_16(tms34010_state *tms, offs_t offset) UINT32 ret; if (offset & 0x0f) { - RFIELDMAC(0xffff,1); + RFIELDMAC(tms,0xffff,1); } else - ret = TMS34010_RDMEM_WORD(TOBYTE(offset)); + ret = TMS34010_RDMEM_WORD(tms,TOBYTE(offset)); return ret; } static UINT32 rfield_z_17(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1ffff,0); + RFIELDMAC(tms,0x1ffff,0); return ret; } static UINT32 rfield_z_18(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3ffff,15); + RFIELDMAC_BIG(tms,0x3ffff,15); return ret; } static UINT32 rfield_z_19(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7ffff,14); + RFIELDMAC_BIG(tms,0x7ffff,14); return ret; } static UINT32 rfield_z_20(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xfffff,13); + RFIELDMAC_BIG(tms,0xfffff,13); return ret; } static UINT32 rfield_z_21(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1fffff,12); + RFIELDMAC_BIG(tms,0x1fffff,12); return ret; } static UINT32 rfield_z_22(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3fffff,11); + RFIELDMAC_BIG(tms,0x3fffff,11); return ret; } static UINT32 rfield_z_23(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7fffff,10); + RFIELDMAC_BIG(tms,0x7fffff,10); return ret; } static UINT32 rfield_z_24(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xffffff,9); + RFIELDMAC_BIG(tms,0xffffff,9); return ret; } static UINT32 rfield_z_25(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1ffffff,8); + RFIELDMAC_BIG(tms,0x1ffffff,8); return ret; } static UINT32 rfield_z_26(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3ffffff,7); + RFIELDMAC_BIG(tms,0x3ffffff,7); return ret; } static UINT32 rfield_z_27(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7ffffff,6); + RFIELDMAC_BIG(tms,0x7ffffff,6); return ret; } static UINT32 rfield_z_28(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xfffffff,5); + RFIELDMAC_BIG(tms,0xfffffff,5); return ret; } static UINT32 rfield_z_29(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1fffffff,4); + RFIELDMAC_BIG(tms,0x1fffffff,4); return ret; } static UINT32 rfield_z_30(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3fffffff,3); + RFIELDMAC_BIG(tms,0x3fffffff,3); return ret; } static UINT32 rfield_z_31(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7fffffff,2); + RFIELDMAC_BIG(tms,0x7fffffff,2); return ret; } static UINT32 rfield_32(tms34010_state *tms, offs_t offset) { - RFIELDMAC_32; + RFIELDMAC_32(tms); } @@ -433,49 +433,49 @@ static UINT32 rfield_32(tms34010_state *tms, offs_t offset) static UINT32 rfield_s_01(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x01,16); + RFIELDMAC(tms,0x01,16); return ((INT32)(ret << 31)) >> 31; } static UINT32 rfield_s_02(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x03,15); + RFIELDMAC(tms,0x03,15); return ((INT32)(ret << 30)) >> 30; } static UINT32 rfield_s_03(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x07,14); + RFIELDMAC(tms,0x07,14); return ((INT32)(ret << 29)) >> 29; } static UINT32 rfield_s_04(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x0f,13); + RFIELDMAC(tms,0x0f,13); return ((INT32)(ret << 28)) >> 28; } static UINT32 rfield_s_05(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1f,12); + RFIELDMAC(tms,0x1f,12); return ((INT32)(ret << 27)) >> 27; } static UINT32 rfield_s_06(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3f,11); + RFIELDMAC(tms,0x3f,11); return ((INT32)(ret << 26)) >> 26; } static UINT32 rfield_s_07(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7f,10); + RFIELDMAC(tms,0x7f,10); return ((INT32)(ret << 25)) >> 25; } @@ -484,60 +484,60 @@ static UINT32 rfield_s_08(tms34010_state *tms, offs_t offset) UINT32 ret; if (offset & 0x07) { - RFIELDMAC(0xff,9); + RFIELDMAC(tms,0xff,9); } else - ret = TMS34010_RDMEM(TOBYTE(offset)); + ret = TMS34010_RDMEM(tms,TOBYTE(offset)); return (INT32)(INT8)ret; } static UINT32 rfield_s_09(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1ff,8); + RFIELDMAC(tms,0x1ff,8); return ((INT32)(ret << 23)) >> 23; } static UINT32 rfield_s_10(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3ff,7); + RFIELDMAC(tms,0x3ff,7); return ((INT32)(ret << 22)) >> 22; } static UINT32 rfield_s_11(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7ff,6); + RFIELDMAC(tms,0x7ff,6); return ((INT32)(ret << 21)) >> 21; } static UINT32 rfield_s_12(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0xfff,5); + RFIELDMAC(tms,0xfff,5); return ((INT32)(ret << 20)) >> 20; } static UINT32 rfield_s_13(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1fff,4); + RFIELDMAC(tms,0x1fff,4); return ((INT32)(ret << 19)) >> 19; } static UINT32 rfield_s_14(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x3fff,3); + RFIELDMAC(tms,0x3fff,3); return ((INT32)(ret << 18)) >> 18; } static UINT32 rfield_s_15(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x7fff,2); + RFIELDMAC(tms,0x7fff,2); return ((INT32)(ret << 17)) >> 17; } @@ -546,12 +546,12 @@ static UINT32 rfield_s_16(tms34010_state *tms, offs_t offset) UINT32 ret; if (offset & 0x0f) { - RFIELDMAC(0xffff,1); + RFIELDMAC(tms,0xffff,1); } else { - ret = TMS34010_RDMEM_WORD(TOBYTE(offset)); + ret = TMS34010_RDMEM_WORD(tms,TOBYTE(offset)); } return (INT32)(INT16)ret; @@ -560,105 +560,105 @@ static UINT32 rfield_s_16(tms34010_state *tms, offs_t offset) static UINT32 rfield_s_17(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC(0x1ffff,0); + RFIELDMAC(tms,0x1ffff,0); return ((INT32)(ret << 15)) >> 15; } static UINT32 rfield_s_18(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3ffff,15); + RFIELDMAC_BIG(tms,0x3ffff,15); return ((INT32)(ret << 14)) >> 14; } static UINT32 rfield_s_19(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7ffff,14); + RFIELDMAC_BIG(tms,0x7ffff,14); return ((INT32)(ret << 13)) >> 13; } static UINT32 rfield_s_20(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xfffff,13); + RFIELDMAC_BIG(tms,0xfffff,13); return ((INT32)(ret << 12)) >> 12; } static UINT32 rfield_s_21(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1fffff,12); + RFIELDMAC_BIG(tms,0x1fffff,12); return ((INT32)(ret << 11)) >> 11; } static UINT32 rfield_s_22(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3fffff,11); + RFIELDMAC_BIG(tms,0x3fffff,11); return ((INT32)(ret << 10)) >> 10; } static UINT32 rfield_s_23(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7fffff,10); + RFIELDMAC_BIG(tms,0x7fffff,10); return ((INT32)(ret << 9)) >> 9; } static UINT32 rfield_s_24(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xffffff,9); + RFIELDMAC_BIG(tms,0xffffff,9); return ((INT32)(ret << 8)) >> 8; } static UINT32 rfield_s_25(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1ffffff,8); + RFIELDMAC_BIG(tms,0x1ffffff,8); return ((INT32)(ret << 7)) >> 7; } static UINT32 rfield_s_26(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3ffffff,7); + RFIELDMAC_BIG(tms,0x3ffffff,7); return ((INT32)(ret << 6)) >> 6; } static UINT32 rfield_s_27(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7ffffff,6); + RFIELDMAC_BIG(tms,0x7ffffff,6); return ((INT32)(ret << 5)) >> 5; } static UINT32 rfield_s_28(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0xfffffff,5); + RFIELDMAC_BIG(tms,0xfffffff,5); return ((INT32)(ret << 4)) >> 4; } static UINT32 rfield_s_29(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x1fffffff,4); + RFIELDMAC_BIG(tms,0x1fffffff,4); return ((INT32)(ret << 3)) >> 3; } static UINT32 rfield_s_30(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x3fffffff,3); + RFIELDMAC_BIG(tms,0x3fffffff,3); return ((INT32)(ret << 2)) >> 2; } static UINT32 rfield_s_31(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_BIG(0x7fffffff,2); + RFIELDMAC_BIG(tms,0x7fffffff,2); return ((INT32)(ret << 1)) >> 1; } diff --git a/src/emu/cpu/tms34010/34010gfx.c b/src/emu/cpu/tms34010/34010gfx.c index 3a451bccf37..0d7ade5ae39 100644 --- a/src/emu/cpu/tms34010/34010gfx.c +++ b/src/emu/cpu/tms34010/34010gfx.c @@ -202,18 +202,18 @@ static int compute_pixblt_b_cycles(int left_partials, int right_partials, int fu /* Shift register handling */ -static void shiftreg_w(offs_t offset,UINT16 data) +static void shiftreg_w(const address_space *space, offs_t offset,UINT16 data) { - tms34010_state *tms = Machine->activecpu->token; + tms34010_state *tms = space->cpu->token; if (tms->config->from_shiftreg) (*tms->config->from_shiftreg)((UINT32)(offset << 3) & ~15, &tms->shiftreg[0]); else logerror("From ShiftReg function not set. PC = %08X\n", tms->pc); } -static UINT16 shiftreg_r(offs_t offset) +static UINT16 shiftreg_r(const address_space *space, offs_t offset) { - tms34010_state *tms = Machine->activecpu->token; + tms34010_state *tms = space->cpu->token; if (tms->config->to_shiftreg) (*tms->config->to_shiftreg)((UINT32)(offset << 3) & ~15, &tms->shiftreg[0]); else @@ -221,9 +221,9 @@ static UINT16 shiftreg_r(offs_t offset) return tms->shiftreg[0]; } -static UINT16 dummy_shiftreg_r(offs_t offset) +static UINT16 dummy_shiftreg_r(const address_space *space, offs_t offset) { - tms34010_state *tms = Machine->activecpu->token; + tms34010_state *tms = space->cpu->token; return tms->shiftreg[0]; } @@ -1029,8 +1029,8 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds if (!P_FLAG(tms)) { int dx, dy, x, y, /*words,*/ yreverse; - void (*word_write)(offs_t address,UINT16 data); - UINT16 (*word_read)(offs_t address); + void (*word_write)(const address_space *space,offs_t address,UINT16 data); + UINT16 (*word_read)(const address_space *space,offs_t address); UINT32 readwrites = 0; UINT32 saddr, daddr; XY dstxy = { 0 }; @@ -1043,8 +1043,8 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds } else { - word_write = program_write_word_16le; - word_read = program_read_word_16le; + word_write = memory_write_word_16le; + word_read = memory_read_word_16le; } /* compute the starting addresses */ @@ -1104,13 +1104,13 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds UINT32 srcword, dstword = 0; /* fetch the initial source word */ - srcword = (*word_read)(srcwordaddr++ << 1); + srcword = (*word_read)(tms->program, srcwordaddr++ << 1); readwrites++; /* fetch the initial dest word */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY || (daddr & 0x0f) != 0) { - dstword = (*word_read)(dstwordaddr << 1); + dstword = (*word_read)(tms->program, dstwordaddr << 1); readwrites++; } @@ -1123,7 +1123,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds /* fetch more words if necessary */ if (srcbit + BITS_PER_PIXEL > 16) { - srcword |= (*word_read)(srcwordaddr++ << 1) << 16; + srcword |= (*word_read)(tms->program, srcwordaddr++ << 1) << 16; readwrites++; } @@ -1140,7 +1140,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) if (dstbit + BITS_PER_PIXEL > 16) { - dstword |= (*word_read)((dstwordaddr + 1) << 1) << 16; + dstword |= (*word_read)(tms->program, (dstwordaddr + 1) << 1) << 16; readwrites++; } @@ -1155,7 +1155,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds dstbit += BITS_PER_PIXEL; if (dstbit > 16) { - (*word_write)(dstwordaddr++ << 1, dstword); + (*word_write)(tms->program, dstwordaddr++ << 1, dstword); readwrites++; dstbit -= 16; dstword >>= 16; @@ -1168,13 +1168,13 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds /* if we're right-partial, read and mask the remaining bits */ if (dstbit != 16) { - UINT16 origdst = (*word_read)(dstwordaddr << 1); + UINT16 origdst = (*word_read)(tms->program, dstwordaddr << 1); UINT16 mask = 0xffff << dstbit; dstword = (dstword & ~mask) | (origdst & mask); readwrites++; } - (*word_write)(dstwordaddr++ << 1, dstword); + (*word_write)(tms->program, dstwordaddr++ << 1, dstword); readwrites++; } @@ -1206,14 +1206,14 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds dwordaddr = daddr >> 4; /* fetch the initial source word */ - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = PIXEL_MASK << (saddr & 15); /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1222,7 +1222,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds /* fetch another word if necessary */ if (srcmask == 0) { - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = PIXEL_MASK; } @@ -1244,7 +1244,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* loop over full words */ @@ -1252,7 +1252,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); else dstword = 0; dstmask = PIXEL_MASK; @@ -1263,7 +1263,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds /* fetch another word if necessary */ if (srcmask == 0) { - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = PIXEL_MASK; } @@ -1285,14 +1285,14 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK; /* loop over partials */ @@ -1302,7 +1302,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds if (srcmask == 0) { LOGGFX((" right fetch @ %08x\n", swordaddr)); - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = PIXEL_MASK; } @@ -1324,7 +1324,7 @@ static void FUNCTION_NAME(pixblt)(tms34010_state *tms, int src_is_linear, int ds } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } #endif @@ -1376,8 +1376,8 @@ static void FUNCTION_NAME(pixblt_r)(tms34010_state *tms, int src_is_linear, int if (!P_FLAG(tms)) { int dx, dy, x, y, words, yreverse; - void (*word_write)(offs_t address,UINT16 data); - UINT16 (*word_read)(offs_t address); + void (*word_write)(const address_space *space,offs_t address,UINT16 data); + UINT16 (*word_read)(const address_space *space,offs_t address); UINT32 saddr, daddr; XY dstxy = { 0 }; @@ -1389,8 +1389,8 @@ static void FUNCTION_NAME(pixblt_r)(tms34010_state *tms, int src_is_linear, int } else { - word_write = program_write_word_16le; - word_read = program_read_word_16le; + word_write = memory_write_word_16le; + word_read = memory_read_word_16le; } /* compute the starting addresses */ @@ -1475,14 +1475,14 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd dwordaddr = (daddr + 15) >> 4; /* fetch the initial source word */ - srcword = (*word_read)(--swordaddr << 1); + srcword = (*word_read)(tms->program, --swordaddr << 1); srcmask = PIXEL_MASK << ((saddr - BITS_PER_PIXEL) & 15); /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(--dwordaddr << 1); + dstword = (*word_read)(tms->program, --dwordaddr << 1); dstmask = PIXEL_MASK << ((daddr - BITS_PER_PIXEL) & 15); /* loop over partials */ @@ -1491,7 +1491,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd /* fetch source pixel if necessary */ if (srcmask == 0) { - srcword = (*word_read)(--swordaddr << 1); + srcword = (*word_read)(tms->program, --swordaddr << 1); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1513,7 +1513,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd } /* write the result */ - (*word_write)(dwordaddr << 1, dstword); + (*word_write)(tms->program, dwordaddr << 1, dstword); } /* loop over full words */ @@ -1522,7 +1522,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd /* fetch the destination word (if necessary) */ dwordaddr--; if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); else dstword = 0; dstmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); @@ -1533,7 +1533,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd /* fetch source pixel if necessary */ if (srcmask == 0) { - srcword = (*word_read)(--swordaddr << 1); + srcword = (*word_read)(tms->program, --swordaddr << 1); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1555,14 +1555,14 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd } /* write the result */ - (*word_write)(dwordaddr << 1, dstword); + (*word_write)(tms->program, dwordaddr << 1, dstword); } /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(--dwordaddr << 1); + dstword = (*word_read)(tms->program, --dwordaddr << 1); dstmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); /* loop over partials */ @@ -1571,7 +1571,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd /* fetch the source pixel if necessary */ if (srcmask == 0) { - srcword = (*word_read)(--swordaddr << 1); + srcword = (*word_read)(tms->program, --swordaddr << 1); srcmask = PIXEL_MASK << (16 - BITS_PER_PIXEL); } @@ -1593,7 +1593,7 @@ if ((daddr & (BITS_PER_PIXEL - 1)) != 0) mame_printf_debug("PIXBLT_R%d with odd } /* write the result */ - (*word_write)(dwordaddr << 1, dstword); + (*word_write)(tms->program, dwordaddr << 1, dstword); } /* update for next row */ @@ -1641,8 +1641,8 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) if (!P_FLAG(tms)) { int dx, dy, x, y, words, left_partials, right_partials, full_words; - void (*word_write)(offs_t address,UINT16 data); - UINT16 (*word_read)(offs_t address); + void (*word_write)(const address_space *space,offs_t address,UINT16 data); + UINT16 (*word_read)(const address_space *space,offs_t address); UINT32 saddr, daddr; XY dstxy = { 0 }; @@ -1654,8 +1654,8 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) } else { - word_write = program_write_word_16le; - word_read = program_read_word_16le; + word_write = memory_write_word_16le; + word_read = memory_read_word_16le; } /* compute the starting addresses */ @@ -1718,14 +1718,14 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) dwordaddr = daddr >> 4; /* fetch the initial source word */ - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = 1 << (saddr & 15); /* handle the left partial word */ if (left_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1742,7 +1742,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = 0x0001; } @@ -1751,7 +1751,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* loop over full words */ @@ -1759,7 +1759,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); else dstword = 0; dstmask = PIXEL_MASK; @@ -1778,7 +1778,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = 0x0001; } @@ -1787,14 +1787,14 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK; /* loop over partials */ @@ -1811,7 +1811,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) srcmask <<= 1; if (srcmask == 0) { - srcword = (*word_read)(swordaddr++ << 1); + srcword = (*word_read)(tms->program, swordaddr++ << 1); srcmask = 0x0001; } @@ -1820,7 +1820,7 @@ static void FUNCTION_NAME(pixblt_b)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* update for next row */ @@ -1855,8 +1855,8 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) if (!P_FLAG(tms)) { int dx, dy, x, y, words, left_partials, right_partials, full_words; - void (*word_write)(offs_t address,UINT16 data); - UINT16 (*word_read)(offs_t address); + void (*word_write)(const address_space *space,offs_t address,UINT16 data); + UINT16 (*word_read)(const address_space *space,offs_t address); UINT32 daddr; XY dstxy = { 0 }; @@ -1868,8 +1868,8 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) } else { - word_write = program_write_word_16le; - word_read = program_read_word_16le; + word_write = memory_write_word_16le; + word_read = memory_read_word_16le; } /* compute the bounds of the operation */ @@ -1934,7 +1934,7 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) if (left_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK << (daddr & 15); /* loop over partials */ @@ -1951,7 +1951,7 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* loop over full words */ @@ -1959,7 +1959,7 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) { /* fetch the destination word (if necessary) */ if (PIXEL_OP_REQUIRES_SOURCE || TRANSPARENCY) - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); else dstword = 0; dstmask = PIXEL_MASK; @@ -1978,14 +1978,14 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* handle the right partial word */ if (right_partials != 0) { /* fetch the destination word */ - dstword = (*word_read)(dwordaddr << 1); + dstword = (*word_read)(tms->program, dwordaddr << 1); dstmask = PIXEL_MASK; /* loop over partials */ @@ -2002,7 +2002,7 @@ static void FUNCTION_NAME(fill)(tms34010_state *tms, int dst_is_linear) } /* write the result */ - (*word_write)(dwordaddr++ << 1, dstword); + (*word_write)(tms->program, dwordaddr++ << 1, dstword); } /* update for next row */ diff --git a/src/emu/cpu/tms34010/34010ops.c b/src/emu/cpu/tms34010/34010ops.c index daca86acd09..35817e17646 100644 --- a/src/emu/cpu/tms34010/34010ops.c +++ b/src/emu/cpu/tms34010/34010ops.c @@ -78,13 +78,13 @@ static void unimpl(tms34010_state *tms, UINT16 op) { /* kludge for Super High Impact -- this doesn't seem to cause */ /* an illegal opcode exception */ - if (program_decrypted_read_word(TOBYTE(tms->pc - 0x10)) == 0x0007) + if (memory_decrypted_read_word(tms->program, TOBYTE(tms->pc - 0x10)) == 0x0007) return; /* 9 Ball Shootout calls to FFDF7468, expecting it */ /* to execute the next instruction from FFDF7470 */ /* but the instruction at FFDF7460 is an 0x0001 */ - if (program_decrypted_read_word(TOBYTE(tms->pc - 0x10)) == 0x0001) + if (memory_decrypted_read_word(tms->program, TOBYTE(tms->pc - 0x10)) == 0x0001) return; PUSH(tms, tms->pc); @@ -95,7 +95,7 @@ static void unimpl(tms34010_state *tms, UINT16 op) COUNT_UNKNOWN_CYCLES(tms,16); /* extra check to prevent bad things */ - if (tms->pc == 0 || opcode_table[program_decrypted_read_word(TOBYTE(tms->pc)) >> 4] == unimpl) + if (tms->pc == 0 || opcode_table[memory_decrypted_read_word(tms->program, TOBYTE(tms->pc)) >> 4] == unimpl) { cpu_set_input_line(tms->device, INPUT_LINE_HALT, ASSERT_LINE); debugger_break(tms->device->machine); @@ -2062,7 +2062,7 @@ static void blmove(tms34010_state *tms, UINT16 op) { while (bits >= 16 && tms->icount > 0) { - TMS34010_WRMEM_WORD(TOBYTE(dst), TMS34010_RDMEM_WORD(TOBYTE(src))); + TMS34010_WRMEM_WORD(tms, TOBYTE(dst), TMS34010_RDMEM_WORD(tms, TOBYTE(src))); src += 0x10; dst += 0x10; bits -= 0x10; diff --git a/src/emu/cpu/tms34010/34010ops.h b/src/emu/cpu/tms34010/34010ops.h index 00fa553f1a0..f4a7fc6a84d 100644 --- a/src/emu/cpu/tms34010/34010ops.h +++ b/src/emu/cpu/tms34010/34010ops.h @@ -12,6 +12,7 @@ #ifndef __34010OPS_H__ #define __34010OPS_H__ +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "cpuintrf.h" #ifndef INLINE @@ -27,20 +28,20 @@ MEMORY I/O MACROS ***************************************************************************/ -#define TMS34010_RDMEM(A) ((unsigned)program_read_byte_16le (A)) -#define TMS34010_RDMEM_WORD(A) ((unsigned)program_read_word_16le (A)) -INLINE UINT32 TMS34010_RDMEM_DWORD(offs_t A) +#define TMS34010_RDMEM(T,A) ((unsigned)memory_read_byte_16le ((T)->program, A)) +#define TMS34010_RDMEM_WORD(T,A) ((unsigned)memory_read_word_16le ((T)->program, A)) +INLINE UINT32 TMS34010_RDMEM_DWORD(tms34010_state *tms, offs_t A) { - UINT32 result = program_read_word_16le(A); - return result | (program_read_word_16le(A+2)<<16); + UINT32 result = memory_read_word_16le(tms->program, A); + return result | (memory_read_word_16le(tms->program, A+2)<<16); } -#define TMS34010_WRMEM(A,V) (program_write_byte_16le(A,V)) -#define TMS34010_WRMEM_WORD(A,V) (program_write_word_16le(A,V)) -INLINE void TMS34010_WRMEM_DWORD(offs_t A,UINT32 V) +#define TMS34010_WRMEM(T,A,V) (memory_write_byte_16le((T)->program, A,V)) +#define TMS34010_WRMEM_WORD(T,A,V) (memory_write_word_16le((T)->program, A,V)) +INLINE void TMS34010_WRMEM_DWORD(tms34010_state *tms, offs_t A,UINT32 V) { - program_write_word_16le(A,V); - program_write_word_16le(A+2,V>>16); + memory_write_word_16le(tms->program, A,V); + memory_write_word_16le(tms->program, A+2,V>>16); } @@ -176,7 +177,7 @@ enum FIELD WRITE MACROS ***************************************************************************/ -#define WFIELDMAC(MASK,MAX) \ +#define WFIELDMAC(T,MASK,MAX) \ UINT32 shift = offset & 0x0f; \ UINT32 masked_data = data & (MASK); \ UINT32 old; \ @@ -185,61 +186,61 @@ enum \ if (shift >= MAX) \ { \ - old = (UINT32)TMS34010_RDMEM_DWORD(offset) & ~((MASK) << shift); \ - TMS34010_WRMEM_DWORD(offset, (masked_data << shift) | old); \ + old = (UINT32)TMS34010_RDMEM_DWORD(T, offset) & ~((MASK) << shift); \ + TMS34010_WRMEM_DWORD(T, offset, (masked_data << shift) | old); \ } \ else \ { \ - old = (UINT32)TMS34010_RDMEM_WORD(offset) & ~((MASK) << shift); \ - TMS34010_WRMEM_WORD(offset, ((masked_data & (MASK)) << shift) | old); \ + old = (UINT32)TMS34010_RDMEM_WORD(T, offset) & ~((MASK) << shift); \ + TMS34010_WRMEM_WORD(T, offset, ((masked_data & (MASK)) << shift) | old); \ } \ -#define WFIELDMAC_BIG(MASK,MAX) \ +#define WFIELDMAC_BIG(T,MASK,MAX) \ UINT32 shift = offset & 0x0f; \ UINT32 masked_data = data & (MASK); \ UINT32 old; \ \ offset = TOBYTE(offset & 0xfffffff0); \ \ - old = (UINT32)TMS34010_RDMEM_DWORD(offset) & ~(UINT32)((MASK) << shift); \ - TMS34010_WRMEM_DWORD(offset, (UINT32)(masked_data << shift) | old); \ + old = (UINT32)TMS34010_RDMEM_DWORD(T, offset) & ~(UINT32)((MASK) << shift); \ + TMS34010_WRMEM_DWORD(T, offset, (UINT32)(masked_data << shift) | old); \ if (shift >= MAX) \ { \ shift = 32 - shift; \ - old = (UINT32)TMS34010_RDMEM_WORD(offset + 4) & ~((MASK) >> shift); \ - TMS34010_WRMEM_WORD(offset, (masked_data >> shift) | old); \ + old = (UINT32)TMS34010_RDMEM_WORD(T, offset + 4) & ~((MASK) >> shift); \ + TMS34010_WRMEM_WORD(T, offset, (masked_data >> shift) | old); \ } \ -#define WFIELDMAC_8 \ +#define WFIELDMAC_8(T) \ if (offset & 0x07) \ { \ - WFIELDMAC(0xff,9); \ + WFIELDMAC(T,0xff,9); \ } \ else \ - TMS34010_WRMEM(TOBYTE(offset), data); \ + TMS34010_WRMEM(T, TOBYTE(offset), data); \ -#define RFIELDMAC_8 \ +#define RFIELDMAC_8(T) \ if (offset & 0x07) \ { \ - RFIELDMAC(0xff,9); \ + RFIELDMAC(T,0xff,9); \ } \ else \ - return TMS34010_RDMEM(TOBYTE(offset)); \ + return TMS34010_RDMEM(T, TOBYTE(offset)); \ -#define WFIELDMAC_32 \ +#define WFIELDMAC_32(T) \ if (offset & 0x0f) \ { \ UINT32 shift = offset&0x0f; \ UINT32 old; \ UINT32 hiword; \ offset &= 0xfffffff0; \ - old = ((UINT32) TMS34010_RDMEM_DWORD (TOBYTE(offset ))&(0xffffffff>>(0x20-shift))); \ - hiword = ((UINT32) TMS34010_RDMEM_DWORD (TOBYTE(offset+0x20))&(0xffffffff<<shift)); \ - TMS34010_WRMEM_DWORD(TOBYTE(offset ),(data<< shift) |old); \ - TMS34010_WRMEM_DWORD(TOBYTE(offset+0x20),(data>>(0x20-shift))|hiword); \ + old = ((UINT32) TMS34010_RDMEM_DWORD (T, TOBYTE(offset ))&(0xffffffff>>(0x20-shift))); \ + hiword = ((UINT32) TMS34010_RDMEM_DWORD (T, TOBYTE(offset+0x20))&(0xffffffff<<shift)); \ + TMS34010_WRMEM_DWORD(T, TOBYTE(offset ),(data<< shift) |old); \ + TMS34010_WRMEM_DWORD(T, TOBYTE(offset+0x20),(data>>(0x20-shift))|hiword); \ } \ else \ - TMS34010_WRMEM_DWORD(TOBYTE(offset),data); \ + TMS34010_WRMEM_DWORD(T, TOBYTE(offset),data); \ @@ -247,34 +248,34 @@ enum FIELD READ MACROS ***************************************************************************/ -#define RFIELDMAC(MASK,MAX) \ +#define RFIELDMAC(T,MASK,MAX) \ UINT32 shift = offset & 0x0f; \ offset = TOBYTE(offset & 0xfffffff0); \ \ if (shift >= MAX) \ - ret = (TMS34010_RDMEM_DWORD(offset) >> shift) & (MASK); \ + ret = (TMS34010_RDMEM_DWORD(T, offset) >> shift) & (MASK); \ else \ - ret = (TMS34010_RDMEM_WORD(offset) >> shift) & (MASK); \ + ret = (TMS34010_RDMEM_WORD(T, offset) >> shift) & (MASK); \ -#define RFIELDMAC_BIG(MASK,MAX) \ +#define RFIELDMAC_BIG(T,MASK,MAX) \ UINT32 shift = offset & 0x0f; \ offset = TOBYTE(offset & 0xfffffff0); \ \ - ret = (UINT32)TMS34010_RDMEM_DWORD(offset) >> shift; \ + ret = (UINT32)TMS34010_RDMEM_DWORD(T, offset) >> shift; \ if (shift >= MAX) \ - ret |= (TMS34010_RDMEM_WORD(offset + 4) << (32 - shift)); \ + ret |= (TMS34010_RDMEM_WORD(T, offset + 4) << (32 - shift)); \ ret &= MASK; \ -#define RFIELDMAC_32 \ +#define RFIELDMAC_32(T) \ if (offset&0x0f) \ { \ UINT32 shift = offset&0x0f; \ offset &= 0xfffffff0; \ - return (((UINT32)TMS34010_RDMEM_DWORD (TOBYTE(offset ))>> shift) | \ - (TMS34010_RDMEM_DWORD (TOBYTE(offset+0x20))<<(0x20-shift)));\ + return (((UINT32)TMS34010_RDMEM_DWORD (T, TOBYTE(offset ))>> shift) | \ + (TMS34010_RDMEM_DWORD (T, TOBYTE(offset+0x20))<<(0x20-shift)));\ } \ else \ - return TMS34010_RDMEM_DWORD(TOBYTE(offset)); \ + return TMS34010_RDMEM_DWORD(T, TOBYTE(offset)); \ diff --git a/src/emu/cpu/tms34010/tms34010.c b/src/emu/cpu/tms34010/tms34010.c index 072362cc6b1..57d1816ad4c 100644 --- a/src/emu/cpu/tms34010/tms34010.c +++ b/src/emu/cpu/tms34010/tms34010.c @@ -7,10 +7,10 @@ ***************************************************************************/ +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "debugger.h" #include "osd_cpu.h" #include "tms34010.h" -#include "34010ops.h" /*************************************************************************** @@ -63,6 +63,7 @@ struct _tms34010_state UINT8 executing; cpu_irq_callback irq_callback; const device_config *device; + const address_space *program; const tms34010_config *config; const device_config *screen; emu_timer * scantimer; @@ -80,6 +81,7 @@ struct _tms34010_state UINT16 IOregs[64]; }; +#include "34010ops.h" /*************************************************************************** @@ -215,58 +217,58 @@ INLINE UINT32 ROPCODE(tms34010_state *tms) { UINT32 pc = TOBYTE(tms->pc); tms->pc += 2 << 3; - return program_decrypted_read_word(pc); + return memory_decrypted_read_word(tms->program, pc); } INLINE INT16 PARAM_WORD(tms34010_state *tms) { UINT32 pc = TOBYTE(tms->pc); tms->pc += 2 << 3; - return program_raw_read_word(pc); + return memory_raw_read_word(tms->program, pc); } INLINE INT32 PARAM_LONG(tms34010_state *tms) { UINT32 pc = TOBYTE(tms->pc); tms->pc += 4 << 3; - return (UINT16)program_raw_read_word(pc) | (program_raw_read_word(pc + 2) << 16); + return (UINT16)memory_raw_read_word(tms->program, pc) | (memory_raw_read_word(tms->program, pc + 2) << 16); } INLINE INT16 PARAM_WORD_NO_INC(tms34010_state *tms) { - return program_raw_read_word(TOBYTE(tms->pc)); + return memory_raw_read_word(tms->program, TOBYTE(tms->pc)); } INLINE INT32 PARAM_LONG_NO_INC(tms34010_state *tms) { UINT32 pc = TOBYTE(tms->pc); - return (UINT16)program_raw_read_word(pc) | (program_raw_read_word(pc + 2) << 16); + return (UINT16)memory_raw_read_word(tms->program, pc) | (memory_raw_read_word(tms->program, pc + 2) << 16); } /* read memory byte */ INLINE UINT32 RBYTE(tms34010_state *tms, offs_t offset) { UINT32 ret; - RFIELDMAC_8; + RFIELDMAC_8(tms); return ret; } /* write memory byte */ INLINE void WBYTE(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_8; + WFIELDMAC_8(tms); } /* read memory long */ INLINE UINT32 RLONG(tms34010_state *tms, offs_t offset) { - RFIELDMAC_32; + RFIELDMAC_32(tms); } /* write memory long */ INLINE void WLONG(tms34010_state *tms, offs_t offset, UINT32 data) { - WFIELDMAC_32; + WFIELDMAC_32(tms); } /* pushes/pops a value from the stack */ @@ -289,23 +291,23 @@ INLINE INT32 POP(tms34010_state *tms) PIXEL READS ***************************************************************************/ -#define RP(m1,m2) \ +#define RP(T,m1,m2) \ /* TODO: Plane masking */ \ - return (TMS34010_RDMEM_WORD(TOBYTE(offset & 0xfffffff0)) >> (offset & m1)) & m2; + return (TMS34010_RDMEM_WORD(T, TOBYTE(offset & 0xfffffff0)) >> (offset & m1)) & m2; -static UINT32 read_pixel_1(tms34010_state *tms, offs_t offset) { RP(0x0f,0x01) } -static UINT32 read_pixel_2(tms34010_state *tms, offs_t offset) { RP(0x0e,0x03) } -static UINT32 read_pixel_4(tms34010_state *tms, offs_t offset) { RP(0x0c,0x0f) } -static UINT32 read_pixel_8(tms34010_state *tms, offs_t offset) { RP(0x08,0xff) } +static UINT32 read_pixel_1(tms34010_state *tms, offs_t offset) { RP(tms,0x0f,0x01) } +static UINT32 read_pixel_2(tms34010_state *tms, offs_t offset) { RP(tms,0x0e,0x03) } +static UINT32 read_pixel_4(tms34010_state *tms, offs_t offset) { RP(tms,0x0c,0x0f) } +static UINT32 read_pixel_8(tms34010_state *tms, offs_t offset) { RP(tms,0x08,0xff) } static UINT32 read_pixel_16(tms34010_state *tms, offs_t offset) { /* TODO: Plane masking */ - return TMS34010_RDMEM_WORD(TOBYTE(offset & 0xfffffff0)); + return TMS34010_RDMEM_WORD(tms, TOBYTE(offset & 0xfffffff0)); } static UINT32 read_pixel_32(tms34010_state *tms, offs_t offset) { /* TODO: Plane masking */ - return TMS34010_RDMEM_DWORD(TOBYTE(offset & 0xffffffe0)); + return TMS34010_RDMEM_DWORD(tms, TOBYTE(offset & 0xffffffe0)); } /* Shift register read */ @@ -327,13 +329,13 @@ static UINT32 read_pixel_shiftreg(tms34010_state *tms, offs_t offset) /* No Raster Op + No Transparency */ #define WP(T,m1,m2) \ UINT32 a = TOBYTE(offset & 0xfffffff0); \ - UINT32 pix = TMS34010_RDMEM_WORD(a); \ + UINT32 pix = TMS34010_RDMEM_WORD(T,a); \ UINT32 shiftcount = offset & m1; \ \ /* TODO: plane masking */ \ data &= m2; \ pix = (pix & ~(m2 << shiftcount)) | (data << shiftcount); \ - TMS34010_WRMEM_WORD(a, pix); \ + TMS34010_WRMEM_WORD(T, a, pix); \ /* No Raster Op + Transparency */ #define WP_T(T,m1,m2) \ @@ -342,29 +344,29 @@ static UINT32 read_pixel_shiftreg(tms34010_state *tms, offs_t offset) if (data) \ { \ UINT32 a = TOBYTE(offset & 0xfffffff0); \ - UINT32 pix = TMS34010_RDMEM_WORD(a); \ + UINT32 pix = TMS34010_RDMEM_WORD(T,a); \ UINT32 shiftcount = offset & m1; \ \ /* TODO: plane masking */ \ pix = (pix & ~(m2 << shiftcount)) | (data << shiftcount); \ - TMS34010_WRMEM_WORD(a, pix); \ + TMS34010_WRMEM_WORD(T, a, pix); \ } \ /* Raster Op + No Transparency */ #define WP_R(T,m1,m2) \ UINT32 a = TOBYTE(offset & 0xfffffff0); \ - UINT32 pix = TMS34010_RDMEM_WORD(a); \ + UINT32 pix = TMS34010_RDMEM_WORD(T,a); \ UINT32 shiftcount = offset & m1; \ \ /* TODO: plane masking */ \ data = (*(T)->raster_op)(tms, data & m2, (pix >> shiftcount) & m2) & m2; \ pix = (pix & ~(m2 << shiftcount)) | (data << shiftcount); \ - TMS34010_WRMEM_WORD(a, pix); \ + TMS34010_WRMEM_WORD(T, a, pix); \ /* Raster Op + Transparency */ #define WP_R_T(T,m1,m2) \ UINT32 a = TOBYTE(offset & 0xfffffff0); \ - UINT32 pix = TMS34010_RDMEM_WORD(a); \ + UINT32 pix = TMS34010_RDMEM_WORD(T,a); \ UINT32 shiftcount = offset & m1; \ \ /* TODO: plane masking */ \ @@ -372,7 +374,7 @@ static UINT32 read_pixel_shiftreg(tms34010_state *tms, offs_t offset) if (data) \ { \ pix = (pix & ~(m2 << shiftcount)) | (data << shiftcount); \ - TMS34010_WRMEM_WORD(a, pix); \ + TMS34010_WRMEM_WORD(T, a, pix); \ } \ @@ -384,12 +386,12 @@ static void write_pixel_8(tms34010_state *tms, offs_t offset, UINT32 data) { WP( static void write_pixel_16(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ - TMS34010_WRMEM_WORD(TOBYTE(offset & 0xfffffff0), data); + TMS34010_WRMEM_WORD(tms, TOBYTE(offset & 0xfffffff0), data); } static void write_pixel_32(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ - TMS34010_WRMEM_WORD(TOBYTE(offset & 0xffffffe0), data); + TMS34010_WRMEM_WORD(tms, TOBYTE(offset & 0xffffffe0), data); } /* No Raster Op + Transparency */ @@ -401,13 +403,13 @@ static void write_pixel_t_16(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ if (data) - TMS34010_WRMEM_WORD(TOBYTE(offset & 0xfffffff0), data); + TMS34010_WRMEM_WORD(tms, TOBYTE(offset & 0xfffffff0), data); } static void write_pixel_t_32(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ if (data) - TMS34010_WRMEM_DWORD(TOBYTE(offset & 0xffffffe0), data); + TMS34010_WRMEM_DWORD(tms, TOBYTE(offset & 0xffffffe0), data); } /* Raster Op + No Transparency */ @@ -419,13 +421,13 @@ static void write_pixel_r_16(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ UINT32 a = TOBYTE(offset & 0xfffffff0); - TMS34010_WRMEM_WORD(a, (*tms->raster_op)(tms, data, TMS34010_RDMEM_WORD(a))); + TMS34010_WRMEM_WORD(tms, a, (*tms->raster_op)(tms, data, TMS34010_RDMEM_WORD(tms, a))); } static void write_pixel_r_32(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ UINT32 a = TOBYTE(offset & 0xffffffe0); - TMS34010_WRMEM_DWORD(a, (*tms->raster_op)(tms, data, TMS34010_RDMEM_DWORD(a))); + TMS34010_WRMEM_DWORD(tms, a, (*tms->raster_op)(tms, data, TMS34010_RDMEM_DWORD(tms, a))); } /* Raster Op + Transparency */ @@ -437,19 +439,19 @@ static void write_pixel_r_t_16(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ UINT32 a = TOBYTE(offset & 0xfffffff0); - data = (*tms->raster_op)(tms, data, TMS34010_RDMEM_WORD(a)); + data = (*tms->raster_op)(tms, data, TMS34010_RDMEM_WORD(tms, a)); if (data) - TMS34010_WRMEM_WORD(a, data); + TMS34010_WRMEM_WORD(tms, a, data); } static void write_pixel_r_t_32(tms34010_state *tms, offs_t offset, UINT32 data) { /* TODO: plane masking */ UINT32 a = TOBYTE(offset & 0xffffffe0); - data = (*tms->raster_op)(tms, data, TMS34010_RDMEM_DWORD(a)); + data = (*tms->raster_op)(tms, data, TMS34010_RDMEM_DWORD(tms, a)); if (data) - TMS34010_WRMEM_DWORD(a, data); + TMS34010_WRMEM_DWORD(tms, a, data); } /* Shift register write */ @@ -624,6 +626,7 @@ static CPU_INIT( tms34010 ) tms->config = configdata; tms->irq_callback = irqcallback; tms->device = device; + tms->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM); tms->screen = device_list_find_by_tag(device->machine->config->devicelist, VIDEO_SCREEN, configdata->screen_tag); /* allocate a scanline timer and set it to go off at the start */ @@ -665,6 +668,7 @@ static CPU_RESET( tms34010 ) tms->irq_callback = save_irqcallback; tms->scantimer = save_scantimer; tms->device = device; + tms->program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM); /* fetch the initial PC and reset the state */ tms->pc = RLONG(tms, 0xffffffe0) & 0xfffffff0; @@ -1606,7 +1610,7 @@ void tms34010_host_w(const device_config *cpu, int reg, int data) /* write to the address */ addr = (IOREG(tms, REG_HSTADRH) << 16) | IOREG(tms, REG_HSTADRL); - TMS34010_WRMEM_WORD(TOBYTE(addr & 0xfffffff0), data); + TMS34010_WRMEM_WORD(tms, TOBYTE(addr & 0xfffffff0), data); /* optional postincrement */ if (IOREG(tms, REG_HSTCTLH) & 0x0800) @@ -1668,7 +1672,7 @@ int tms34010_host_r(const device_config *cpu, int reg) /* read from the address */ addr = (IOREG(tms, REG_HSTADRH) << 16) | IOREG(tms, REG_HSTADRL); cpu_push_context(cpu); - result = TMS34010_RDMEM_WORD(TOBYTE(addr & 0xfffffff0)); + result = TMS34010_RDMEM_WORD(tms, TOBYTE(addr & 0xfffffff0)); cpu_pop_context(); /* optional postincrement (it says preincrement, but data is preloaded, so it diff --git a/src/emu/cpu/tms7000/7000dasm.c b/src/emu/cpu/tms7000/7000dasm.c index b80909a90fe..e9831ef4c26 100644 --- a/src/emu/cpu/tms7000/7000dasm.c +++ b/src/emu/cpu/tms7000/7000dasm.c @@ -431,7 +431,7 @@ CPU_DISASSEMBLE( tms7000 ) break; case TRAP: vector = 0xffff - ((0xff - opcode) * 2); - c = (UINT16)((program_decrypted_read_byte( vector-1 ) << 8) + program_decrypted_read_byte( vector )); + c = vector;//(UINT16)((memory_decrypted_read_byte( vector-1 ) << 8) + memory_decrypted_read_byte( vector )); break; } } diff --git a/src/emu/cpu/tms7000/tms7000.c b/src/emu/cpu/tms7000/tms7000.c index 2c3083d0c58..23a2fdfa4b9 100644 --- a/src/emu/cpu/tms7000/tms7000.c +++ b/src/emu/cpu/tms7000/tms7000.c @@ -28,6 +28,7 @@ // SJE: Fixed a mistake in tms70x0_pf_w where the wrong register was referenced // SJE: Implemented internal register file +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "cpuintrf.h" #include "cpuexec.h" #include "debugger.h" @@ -58,40 +59,12 @@ static int tms7000_icount; static int tms7000_div_by_16_trigger; static int tms7000_cycles_per_INT2; -#define RM(Addr) ((unsigned)program_read_byte_8be(Addr)) -#define WM(Addr,Value) (program_write_byte_8be(Addr,Value)) +#define RM(Addr) ((unsigned)memory_read_byte_8be(tms7000.program, Addr)) +#define WM(Addr,Value) (memory_write_byte_8be(tms7000.program, Addr, Value)) -INLINE UINT16 RM16( UINT32 mAddr ) /* Read memory (16-bit) */ -{ - UINT32 result = RM(mAddr) << 8; - return result | RM((mAddr+1)&0xffff); -} - -#ifdef UNUSED_FUNCTION -INLINE void WM16( UINT32 mAddr, PAIR p ) /*Write memory file (16 bit) */ -{ - WM( mAddr, p.b.h ); - WM( (mAddr+1)&0xffff, p.b.l ); -} -#endif - -INLINE UINT16 RRF16( UINT32 mAddr ) /*Read register file (16 bit) */ -{ - PAIR result; - result.b.h = RM((mAddr-1)&0xffff); - result.b.l = RM(mAddr); - return result.w.l; -} - -INLINE void WRF16( UINT32 mAddr, PAIR p ) /*Write register file (16 bit) */ -{ - WM( (mAddr-1)&0xffff, p.b.h ); - WM( mAddr, p.b.l ); -} - -#define IMMBYTE(b) b = ((unsigned)program_raw_read_byte(pPC)); pPC++ -#define SIMMBYTE(b) b = ((signed)program_raw_read_byte(pPC)); pPC++ -#define IMMWORD(w) w.b.h = (unsigned)program_raw_read_byte(pPC++); w.b.l = (unsigned)program_raw_read_byte(pPC++) +#define IMMBYTE(b) b = ((unsigned)memory_raw_read_byte(tms7000.program, pPC)); pPC++ +#define SIMMBYTE(b) b = ((signed)memory_raw_read_byte(tms7000.program, pPC)); pPC++ +#define IMMWORD(w) w.b.h = (unsigned)memory_raw_read_byte(tms7000.program, pPC++); w.b.l = (unsigned)memory_raw_read_byte(tms7000.program, pPC++) #define PUSHBYTE(b) pSP++; WM(pSP,b) #define PUSHWORD(w) pSP++; WM(pSP,w.b.h); pSP++; WM(pSP,w.b.l) @@ -108,6 +81,8 @@ typedef struct UINT8 pf[0x100]; /* Perpherial file */ cpu_irq_callback irq_callback; const device_config *device; + const address_space *program; + const address_space *io; UINT8 t1_capture_latch; /* Timer 1 capture latch */ INT8 t1_prescaler; /* Timer 1 prescaler (5 bits) */ INT16 t1_decrementer; /* Timer 1 decrementer (8 bits) */ @@ -163,6 +138,34 @@ static ADDRESS_MAP_START(tms7000_mem, ADDRESS_SPACE_PROGRAM, 8) ADDRESS_MAP_END +INLINE UINT16 RM16( UINT32 mAddr ) /* Read memory (16-bit) */ +{ + UINT32 result = RM(mAddr) << 8; + return result | RM((mAddr+1)&0xffff); +} + +#ifdef UNUSED_FUNCTION +INLINE void WM16( UINT32 mAddr, PAIR p ) /*Write memory file (16 bit) */ +{ + WM( mAddr, p.b.h ); + WM( (mAddr+1)&0xffff, p.b.l ); +} +#endif + +INLINE UINT16 RRF16( UINT32 mAddr ) /*Read register file (16 bit) */ +{ + PAIR result; + result.b.h = RM((mAddr-1)&0xffff); + result.b.l = RM(mAddr); + return result.w.l; +} + +INLINE void WRF16( UINT32 mAddr, PAIR p ) /*Write register file (16 bit) */ +{ + WM( (mAddr-1)&0xffff, p.b.h ); + WM( mAddr, p.b.l ); +} + /**************************************************************************** * Get all registers in given buffer @@ -189,6 +192,8 @@ static CPU_INIT( tms7000 ) { tms7000.irq_callback = irqcallback; tms7000.device = device; + tms7000.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM); + tms7000.io = memory_find_address_space(device, ADDRESS_SPACE_IO); memset(tms7000.pf, 0, 0x100); memset(tms7000.rf, 0, 0x80); @@ -474,7 +479,7 @@ static CPU_EXECUTE( tms7000 ) if( tms7000.idle_state == 0 ) { - op = program_decrypted_read_byte(pPC++); + op = memory_decrypted_read_byte(tms7000.program, pPC++); opfn[op](); } @@ -514,7 +519,7 @@ static CPU_EXECUTE( tms7000_exl ) if( tms7000.idle_state == 0 ) { - op = program_decrypted_read_byte(pPC++); + op = memory_decrypted_read_byte(tms7000.program, pPC++); opfn_exl[op](); } @@ -616,19 +621,19 @@ static WRITE8_HANDLER( tms70x0_pf_w ) /* Perpherial file write */ break; case 0x06: /* Port B write */ - io_write_byte_8be( TMS7000_PORTB, data ); + memory_write_byte_8be( tms7000.io, TMS7000_PORTB, data ); tms7000.pf[ 0x06 ] = data; break; case 0x08: /* Port C write */ temp1 = data & tms7000.pf[ 0x09 ]; /* Mask off input bits */ - io_write_byte_8be( TMS7000_PORTC, temp1 ); + memory_write_byte_8be( tms7000.io, TMS7000_PORTC, temp1 ); tms7000.pf[ 0x08 ] = temp1; break; case 0x0a: /* Port D write */ temp1 = data & tms7000.pf[ 0x0b ]; /* Mask off input bits */ - io_write_byte_8be( TMS7000_PORTD, temp1 ); + memory_write_byte_8be( tms7000.io, TMS7000_PORTD, temp1 ); tms7000.pf[ 0x0a ] = temp1; break; @@ -663,7 +668,7 @@ static READ8_HANDLER( tms70x0_pf_r ) /* Perpherial file read */ break; case 0x04: /* Port A read */ - result = io_read_byte_8be( TMS7000_PORTA ); + result = memory_read_byte_8be( tms7000.io, TMS7000_PORTA ); break; @@ -674,14 +679,14 @@ static READ8_HANDLER( tms70x0_pf_r ) /* Perpherial file read */ case 0x08: /* Port C read */ temp1 = tms7000.pf[ 0x08 ] & tms7000.pf[ 0x09 ]; /* Get previous output bits */ - temp2 = io_read_byte_8be( TMS7000_PORTC ); /* Read port */ + temp2 = memory_read_byte_8be( tms7000.io, TMS7000_PORTC ); /* Read port */ temp3 = temp2 & (~tms7000.pf[ 0x09 ]); /* Mask off output bits */ result = temp1 | temp3; /* OR together */ break; case 0x0a: /* Port D read */ temp1 = tms7000.pf[ 0x0a ] & tms7000.pf[ 0x0b ]; /* Get previous output bits */ - temp2 = io_read_byte_8be( TMS7000_PORTD ); /* Read port */ + temp2 = memory_read_byte_8be( tms7000.io, TMS7000_PORTD ); /* Read port */ temp3 = temp2 & (~tms7000.pf[ 0x0b ]); /* Mask off output bits */ result = temp1 | temp3; /* OR together */ break; diff --git a/src/emu/cpu/tms9900/99xxcore.h b/src/emu/cpu/tms9900/99xxcore.h index 8a794ce887b..c3383e049b9 100644 --- a/src/emu/cpu/tms9900/99xxcore.h +++ b/src/emu/cpu/tms9900/99xxcore.h @@ -85,7 +85,7 @@ Other references can be found on spies.com: */ - +#define NO_LEGACY_MEMORY_HANDLERS 1 #include "debugger.h" #include "deprecat.h" #include "tms9900.h" @@ -442,6 +442,8 @@ typedef struct retreive the value on IC0-IC3 (non-standard behaviour) */ cpu_irq_callback irq_callback; const device_config *device; + const address_space *program; + const address_space *io; UINT8 IDLE; /* nonzero if processor is IDLE - i.e waiting for interrupt while writing special data on CRU bus */ @@ -528,7 +530,7 @@ static void reset_decrementer(void); READ16_HANDLER(ti990_10_internal_r) { //return I.ROM[offset]; - return program_read_word_16be(0x1ffc00+offset); + return memory_read_word_16be(I.program, 0x1ffc00+offset); } #endif @@ -576,14 +578,14 @@ WRITE8_HANDLER(tms9995_internal2_w) { /* intercept TPCS and CPU ROM */ if (addr < 0xfc00) /* TPCS */ - return program_read_word_16be(0x1f0000+addr); + return memory_read_word_16be(I.program, 0x1f0000+addr); else /* CPU ROM */ - return program_read_word_16be(0x1f0000+addr); /* hack... */ + return memory_read_word_16be(I.program, 0x1f0000+addr); /* hack... */ } else if (! I.mapping_on) { - return program_read_word_16be(addr); + return memory_read_word_16be(I.program, addr); } else { @@ -604,13 +606,13 @@ WRITE8_HANDLER(tms9995_internal2_w) I.error_interrupt_register |= EIR_MAPERR; write_inhibit = 1; } - return program_read_word_16be(addr); + return memory_read_word_16be(I.program, addr); } if ((! (I.error_interrupt_register & EIR_MAPERR)) && ! (I.diaglat)) I.mapper_address_latch = I.map_files[map_file].bias[map_index]+addr; if ((I.latch_control[map_index]) && (! I.reset_maperr)) I.diaglat = 1; - return program_read_word_16be(I.map_files[map_file].bias[map_index]+addr); + return memory_read_word_16be(I.program, I.map_files[map_file].bias[map_index]+addr); } } @@ -621,14 +623,14 @@ WRITE8_HANDLER(tms9995_internal2_w) { /* intercept TPCS and CPU ROM */ if (addr < 0xfc00) /* TPCS */ - program_write_word_16be(0x1f0000+addr, data); + memory_write_word_16be(I.program, 0x1f0000+addr, data); else /* CPU ROM */ - program_write_word_16be(0x1f0000+addr, data); /* hack... */ + memory_write_word_16be(I.program, 0x1f0000+addr, data); /* hack... */ } else if (! I.mapping_on) { - program_write_word_16be(addr, data); + memory_write_word_16be(I.program, addr, data); } else { @@ -650,16 +652,16 @@ WRITE8_HANDLER(tms9995_internal2_w) write_inhibit = 1; } if (write_inhibit) - (void)program_read_word_16be(addr); + (void)memory_read_word_16be(I.program, addr); else - program_write_word_16be(addr, data); + memory_write_word_16be(I.program, addr, data); return; } if ((! (I.error_interrupt_register & EIR_MAPERR)) && ! (I.diaglat)) I.mapper_address_latch = I.map_files[map_file].bias[map_index]+addr; if ((I.latch_control[map_index]) && (! I.reset_maperr)) I.diaglat = 1; - program_write_word_16be(I.map_files[map_file].bias[map_index]+addr, data); + memory_write_word_16be(I.program, I.map_files[map_file].bias[map_index]+addr, data); } } @@ -670,14 +672,14 @@ WRITE8_HANDLER(tms9995_internal2_w) { /* intercept TPCS and CPU ROM */ if (addr < 0xfc00) /* TPCS */ - return program_read_byte_16be(0x1f0000+addr); + return memory_read_byte_16be(I.program, 0x1f0000+addr); else /* CPU ROM */ - return program_read_byte_16be(0x1f0000+addr); /* hack... */ + return memory_read_byte_16be(I.program, 0x1f0000+addr); /* hack... */ } else if (! I.mapping_on) { - return program_read_byte_16be(addr); + return memory_read_byte_16be(I.program, addr); } else { @@ -698,13 +700,13 @@ WRITE8_HANDLER(tms9995_internal2_w) I.error_interrupt_register |= EIR_MAPERR; write_inhibit = 1; } - return program_read_byte_16be(addr); + return memory_read_byte_16be(I.program, addr); } if ((! (I.error_interrupt_register & EIR_MAPERR)) && ! (I.diaglat)) I.mapper_address_latch = I.map_files[map_file].bias[map_index]+addr; if ((I.latch_control[map_index]) && (! I.reset_maperr)) I.diaglat = 1; - return program_read_byte_16be(I.map_files[map_file].bias[map_index]+addr); + return memory_read_byte_16be(I.program, I.map_files[map_file].bias[map_index]+addr); } } @@ -715,14 +717,14 @@ WRITE8_HANDLER(tms9995_internal2_w) { /* intercept TPCS and CPU ROM */ if (addr < 0xfc00) /* TPCS */ - program_write_byte_16be(0x1f0000+addr, data); + memory_write_byte_16be(I.program, 0x1f0000+addr, data); else /* CPU ROM */ - program_write_byte_16be(0x1f0000+addr, data); /* hack... */ + memory_write_byte_16be(I.program, 0x1f0000+addr, data); /* hack... */ } else if (! I.mapping_on) { - program_write_byte_16be(addr, data); + memory_write_byte_16be(I.program, addr, data); } else { @@ -744,16 +746,16 @@ WRITE8_HANDLER(tms9995_internal2_w) write_inhibit = 1; } if (write_inhibit) - (void)program_read_byte_16be(addr); + (void)memory_read_byte_16be(I.program, addr); else - program_write_byte_16be(addr, data); + memory_write_byte_16be(I.program, addr, data); return; } if ((! (I.error_interrupt_register & EIR_MAPERR)) && ! (I.diaglat)) I.mapper_address_latch = I.map_files[map_file].bias[map_index]+addr; if ((I.latch_control[map_index]) && (! I.reset_maperr)) I.diaglat = 1; - program_write_byte_16be(I.map_files[map_file].bias[map_index]+addr, data); + memory_write_byte_16be(I.program, I.map_files[map_file].bias[map_index]+addr, data); } } @@ -764,11 +766,11 @@ WRITE8_HANDLER(tms9995_internal2_w) remember this when writing memory handlers.*/ /*This does not apply to tms9995 and tms99xxx, but does apply to tms9980 (see below).*/ - #define readword(addr) program_read_word_16be(addr) - #define writeword(addr,data) program_write_word_16be((addr), (data)) + #define readword(addr) memory_read_word_16be(I.program, addr) + #define writeword(addr,data) memory_write_word_16be(I.program, (addr), (data)) - #define readbyte(addr) program_read_byte_16be(addr) - #define writebyte(addr,data) program_write_byte_16be((addr),(data)) + #define readbyte(addr) memory_read_byte_16be(I.program, addr) + #define writebyte(addr,data) memory_write_byte_16be(I.program, (addr),(data)) #elif (TMS99XX_MODEL == TMS9980_ID) /*8-bit data bus, 14-bit address*/ @@ -781,14 +783,14 @@ WRITE8_HANDLER(tms9995_internal2_w) int val; TMS99XX_ICOUNT -= 2; - val = program_read_byte_8be(addr); - return (val << 8) | program_read_byte_8be(addr+1); + val = memory_read_byte_8be(I.program, addr); + return (val << 8) | memory_read_byte_8be(I.program, addr+1); } - #define writeword(addr,data) { TMS99XX_ICOUNT -= 2; program_write_byte_8be((addr), (data) >> 8); program_write_byte_8be((addr) + 1, (data) & 0xff); } + #define writeword(addr,data) { TMS99XX_ICOUNT -= 2; memory_write_byte_8be(I.program, (addr), (data) >> 8); memory_write_byte_8be(I.program, (addr) + 1, (data) & 0xff); } #if 0 - #define readbyte(addr) (TMS99XX_ICOUNT -= 2, program_read_byte_8be(addr)) - #define writebyte(addr,data) { TMS99XX_ICOUNT -= 2; program_write_byte_8be((addr),(data)); } + #define readbyte(addr) (TMS99XX_ICOUNT -= 2, memory_read_byte_8be(I.program, addr)) + #define writebyte(addr,data) { TMS99XX_ICOUNT -= 2; memory_write_byte_8be(I.program, (addr),(data)); } #else /*This is how it really works*/ /*Note that every writebyte must match a readbyte (which is indeed the case)*/ @@ -799,13 +801,13 @@ WRITE8_HANDLER(tms9995_internal2_w) TMS99XX_ICOUNT -= 2; if (addr & 1) { - extra_byte = program_read_byte_8be(addr-1); - return program_read_byte_8be(addr); + extra_byte = memory_read_byte_8be(I.program, addr-1); + return memory_read_byte_8be(I.program, addr); } else { - int val = program_read_byte_8be(addr); - extra_byte = program_read_byte_8be(addr+1); + int val = memory_read_byte_8be(I.program, addr); + extra_byte = memory_read_byte_8be(I.program, addr+1); return val; } } @@ -814,13 +816,13 @@ WRITE8_HANDLER(tms9995_internal2_w) TMS99XX_ICOUNT -= 2; if (addr & 1) { - program_write_byte_8be(addr-1, extra_byte); - program_write_byte_8be(addr, data); + memory_write_byte_8be(I.program, addr-1, extra_byte); + memory_write_byte_8be(I.program, addr, data); } else { - program_write_byte_8be(addr, data); - program_write_byte_8be(addr+1, extra_byte); + memory_write_byte_8be(I.program, addr, data); + memory_write_byte_8be(I.program, addr+1, extra_byte); } } #endif @@ -840,7 +842,7 @@ WRITE8_HANDLER(tms9995_internal2_w) else { TMS99XX_ICOUNT -= 2; - return (program_read_byte_8be(addr) << 8) + program_read_byte_8be(addr + 1); + return (memory_read_byte_8be(I.program, addr) << 8) + memory_read_byte_8be(I.program, addr + 1); } } static void writeword(int addr, int data) @@ -851,8 +853,8 @@ WRITE8_HANDLER(tms9995_internal2_w) else if (!(addr < 0x2000)) { TMS99XX_ICOUNT -= 2; - program_write_byte_8be(addr, data >> 8); - program_write_byte_8be(addr + 1, data & 0xff); + memory_write_byte_8be(I.program, addr, data >> 8); + memory_write_byte_8be(I.program, addr + 1, data & 0xff); } } @@ -869,13 +871,13 @@ WRITE8_HANDLER(tms9995_internal2_w) TMS99XX_ICOUNT -= 2; if (addr & 1) { - extra_byte = program_read_byte_8be(addr-1); - return program_read_byte_8be(addr); + extra_byte = memory_read_byte_8be(I.program, addr-1); + return memory_read_byte_8be(I.program, addr); } else { - int val = program_read_byte_8be(addr); - extra_byte = program_read_byte_8be(addr+1); + int val = memory_read_byte_8be(I.program, addr); + extra_byte = memory_read_byte_8be(I.program, addr+1); return val; } } @@ -890,13 +892,13 @@ WRITE8_HANDLER(tms9995_internal2_w) TMS99XX_ICOUNT -= 2; if (addr & 1) { - program_write_byte_8be(addr-1, extra_byte); - program_write_byte_8be(addr, data); + memory_write_byte_8be(I.program, addr-1, extra_byte); + memory_write_byte_8be(I.program, addr, data); } else { - program_write_byte_8be(addr, data); - program_write_byte_8be(addr+1, extra_byte); + memory_write_byte_8be(I.program, addr, data); + memory_write_byte_8be(I.program, addr+1, extra_byte); } } } @@ -913,8 +915,8 @@ WRITE8_HANDLER(tms9995_internal2_w) { int reply; TMS99XX_ICOUNT -= I.memory_wait_states_word; - reply = program_read_byte_8be(addr); - return (reply << 8) | program_read_byte_8be(addr + 1); + reply = memory_read_byte_8be(I.program, addr); + return (reply << 8) | memory_read_byte_8be(I.program, addr + 1); } else if (addr < 0xf0fc) { @@ -924,8 +926,8 @@ WRITE8_HANDLER(tms9995_internal2_w) { int reply; TMS99XX_ICOUNT -= I.memory_wait_states_word; - reply = program_read_byte_8be(addr); - return (reply << 8) | program_read_byte_8be(addr + 1); + reply = memory_read_byte_8be(I.program, addr); + return (reply << 8) | memory_read_byte_8be(I.program, addr + 1); } else if (addr < 0xfffc) { @@ -948,8 +950,8 @@ WRITE8_HANDLER(tms9995_internal2_w) if ((addr < 0xf000) || (I.is_mp9537)) { TMS99XX_ICOUNT -= I.memory_wait_states_word; - program_write_byte_8be(addr, data >> 8); - program_write_byte_8be(addr + 1, data & 0xff); + memory_write_byte_8be(I.program, addr, data >> 8); + memory_write_byte_8be(I.program, addr + 1, data & 0xff); } else if (addr < 0xf0fc) { @@ -958,8 +960,8 @@ WRITE8_HANDLER(tms9995_internal2_w) else if (addr < 0xfffa) { TMS99XX_ICOUNT -= I.memory_wait_states_word; - program_write_byte_8be(addr, data >> 8); - program_write_byte_8be(addr + 1, data & 0xff); + memory_write_byte_8be(I.program, addr, data >> 8); + memory_write_byte_8be(I.program, addr + 1, data & 0xff); } else if (addr < 0xfffc) { @@ -978,7 +980,7 @@ WRITE8_HANDLER(tms9995_internal2_w) if ((addr < 0xf000) || (I.is_mp9537)) { TMS99XX_ICOUNT -= I.memory_wait_states_byte; - return program_read_byte_8be(addr); + return memory_read_byte_8be(I.program, addr); } else if (addr < 0xf0fc) { @@ -987,7 +989,7 @@ WRITE8_HANDLER(tms9995_internal2_w) else if (addr < 0xfffa) { TMS99XX_ICOUNT -= I.memory_wait_states_byte; - return program_read_byte_8be(addr); + return memory_read_byte_8be(I.program, addr); } else if (addr < 0xfffc) { @@ -1017,7 +1019,7 @@ WRITE8_HANDLER(tms9995_internal2_w) if ((addr < 0xf000) || (I.is_mp9537)) { TMS99XX_ICOUNT -= I.memory_wait_states_byte; - program_write_byte_8be(addr, data); + memory_write_byte_8be(I.program, addr, data); } else if (addr < 0xf0fc) { @@ -1026,7 +1028,7 @@ WRITE8_HANDLER(tms9995_internal2_w) else if (addr < 0xfffa) { TMS99XX_ICOUNT -= I.memory_wait_states_byte; - program_write_byte_8be(addr, data); + memory_write_byte_8be(I.program, addr, data); } else if (addr < 0xfffc) { @@ -1287,6 +1289,8 @@ static CPU_INIT( tms99xx ) I.irq_level = 16; I.irq_callback = irqcallback; I.device = device; + I.program = memory_find_address_space(device, ADDRESS_SPACE_PROGRAM); + I.io = memory_find_address_space(device, ADDRESS_SPACE_IO); #if (TMS99XX_MODEL == TMS9995_ID) I.timer = timer_alloc(decrementer_callback, NULL); @@ -2049,7 +2053,7 @@ typedef enum CRU_PRIVILEGE_VIOLATION = -1 } cru_error_code; -#define WRITEPORT(port, data) io_write_byte_8be(port, data) +#define WRITEPORT(port, data) memory_write_byte_8be(I.io, port, data) #if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID) /* on tms9940, we have to handle internal CRU ports */ @@ -2268,7 +2272,7 @@ static void external_instruction_notify(int ext_op_ID) read at the same address. This seems to be impossible to emulate efficiently, so, if you need to emulate this, you're in trouble. */ -#define READPORT(port) io_read_byte_8be(port) +#define READPORT(port) memory_read_byte_8be(I.io, port) #if (TMS99XX_MODEL == TMS9940_ID) || (TMS99XX_MODEL == TMS9985_ID) @@ -2479,10 +2483,10 @@ static void load_map_file(UINT16 src_addr, int src_map_file, int dst_file) for (i=0; i<3; i++) { - I.map_files[dst_file].L[i] = program_read_word_16be(I.mapper_address_latch) & 0xffe0; + I.map_files[dst_file].L[i] = memory_read_word_16be(I.program, I.mapper_address_latch) & 0xffe0; I.map_files[dst_file].limit[i] = (I.map_files[dst_file].L[i] ^ 0xffe0) | 0x001f; I.mapper_address_latch = (I.mapper_address_latch+2) & 0x1fffff; - I.map_files[dst_file].B[i] = program_read_word_16be(I.mapper_address_latch); + I.map_files[dst_file].B[i] = memory_read_word_16be(I.program, I.mapper_address_latch); I.map_files[dst_file].bias[i] = ((unsigned int) I.map_files[dst_file].B[i]) << 5; I.mapper_address_latch = (I.mapper_address_latch+2) & 0x1fffff; } |