summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-11-23 00:40:10 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-11-23 00:40:10 +0000
commit6885dcc750ae0455e6c6d4ae98248d39a1b6abe9 (patch)
tree0e438328df23a54c5a05852b953e190ecadb8ec2 /src
parentcf2bb4f315bb15b991e22665838f62f6792001e2 (diff)
TMS* CPUs conversion ... almost there.
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/tms32010/tms32010.c12
-rw-r--r--src/emu/cpu/tms32010/tms32010.h18
-rw-r--r--src/emu/cpu/tms32025/32025dsm.c5
-rw-r--r--src/emu/cpu/tms32025/tms32025.c93
-rw-r--r--src/emu/cpu/tms32051/tms32051.c17
-rw-r--r--src/emu/cpu/tms34010/34010fld.c198
-rw-r--r--src/emu/cpu/tms34010/34010gfx.c130
-rw-r--r--src/emu/cpu/tms34010/34010ops.c8
-rw-r--r--src/emu/cpu/tms34010/34010ops.h85
-rw-r--r--src/emu/cpu/tms34010/tms34010.c80
-rw-r--r--src/emu/cpu/tms7000/7000dasm.c2
-rw-r--r--src/emu/cpu/tms7000/tms7000.c87
-rw-r--r--src/emu/cpu/tms9900/99xxcore.h140
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;
}