summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/memory.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2008-06-28 07:21:54 +0000
committer Aaron Giles <aaron@aarongiles.com>2008-06-28 07:21:54 +0000
commit75d18b3a334c459f480d722167850b2c60ab2431 (patch)
tree989c43d26c2ca3b93adb55a8738b85251d15c7e3 /src/emu/memory.c
parent10879d56b4efaacbb291b6d6feb5f8f153311776 (diff)
Changed how watchpoints work so that supporting them adds 0 overhead
unless some are actually live. Changed a few call sites from using memory_set_context() to cpuintrf_push_context().
Diffstat (limited to 'src/emu/memory.c')
-rw-r--r--src/emu/memory.c1161
1 files changed, 626 insertions, 535 deletions
diff --git a/src/emu/memory.c b/src/emu/memory.c
index e30a2d3a3e5..994f9e11670 100644
--- a/src/emu/memory.c
+++ b/src/emu/memory.c
@@ -193,9 +193,6 @@ typedef enum _read_or_write read_or_write;
#define SUBTABLE_PTR(tabledata, entry) (&(tabledata)->table[(1 << LEVEL1_BITS) + (((entry) - SUBTABLE_BASE) << LEVEL2_BITS)])
-#define DEBUG_HOOK_READ(spacenum,address,mem_mask) if (debug_hook_read) (*debug_hook_read)(spacenum,address,mem_mask)
-#define DEBUG_HOOK_WRITE(spacenum,address,data,mem_mask) if (debug_hook_write) (*debug_hook_write)(spacenum,address,data,mem_mask)
-
/***************************************************************************
@@ -319,8 +316,7 @@ static UINT8 log_unmap[ADDRESS_SPACES]; /* log unmapped memory accesses */
static cpu_data cpudata[MAX_CPU]; /* data gathered for each CPU */
static bank_info bankdata[STATIC_COUNT]; /* data gathered for each bank */
-static debug_hook_read_func debug_hook_read; /* pointer to debugger callback for memory reads */
-static debug_hook_write_func debug_hook_write; /* pointer to debugger callback for memory writes */
+static UINT8 * wptable; /* watchpoint-fill table */
#define ACCESSOR_GROUP(type, width) \
{ \
@@ -378,7 +374,7 @@ const char *const address_space_names[ADDRESS_SPACES] = { "program", "data", "I/
static void address_map_detokenize(address_map *map, const addrmap_token *tokens);
-static void memory_init_cpudata(const machine_config *config);
+static void memory_init_cpudata(running_machine *machine);
static void memory_init_preflight(const machine_config *config);
static void memory_init_populate(running_machine *machine);
static void space_map_range_private(addrspace_data *space, read_or_write readorwrite, int handlerbits, int handlerunitmask, offs_t addrstart, offs_t addrend, offs_t addrmask, offs_t addrmirror, genf *handler, void *object, const char *handler_name);
@@ -447,6 +443,263 @@ INLINE void adjust_addresses(addrspace_data *space, offs_t *start, offs_t *end,
}
+/*-------------------------------------------------
+ read_byte_generic - read a byte from an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE UINT8 read_byte_generic(UINT8 spacenum, offs_t address)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+ UINT8 result;
+
+ profiler_mark(PROFILER_MEMREAD);
+
+ address &= space->bytemask;
+ entry = space->readlookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->readlookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->readhandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ result = bank_ptr[entry][offset];
+ else
+ result = (*handler->handler.read.mhandler8)(handler->object, offset);
+
+ profiler_mark(PROFILER_END);
+ return result;
+}
+
+
+/*-------------------------------------------------
+ write_byte_generic - write a byte to an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE void write_byte_generic(UINT8 spacenum, offs_t address, UINT8 data)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+
+ profiler_mark(PROFILER_MEMWRITE);
+
+ address &= space->bytemask;
+ entry = space->writelookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->writelookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->writehandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ bank_ptr[entry][offset] = data;
+ else
+ (*handler->handler.write.mhandler8)(handler->object, offset, data);
+
+ profiler_mark(PROFILER_END);
+}
+
+
+/*-------------------------------------------------
+ read_word_generic - read a word from an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE UINT16 read_word_generic(UINT8 spacenum, offs_t address, UINT16 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+ UINT16 result;
+
+ profiler_mark(PROFILER_MEMREAD);
+
+ address &= space->bytemask;
+ entry = space->readlookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->readlookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->readhandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ result = *(UINT16 *)&bank_ptr[entry][offset & ~1];
+ else
+ result = (*handler->handler.read.mhandler16)(handler->object, offset >> 1, mem_mask);
+
+ profiler_mark(PROFILER_END);
+ return result;
+}
+
+
+/*-------------------------------------------------
+ write_word_generic - write a word to an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE void write_word_generic(UINT8 spacenum, offs_t address, UINT16 data, UINT16 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+
+ profiler_mark(PROFILER_MEMWRITE);
+
+ address &= space->bytemask;
+ entry = space->writelookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->writelookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->writehandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ {
+ UINT16 *dest = (UINT16 *)&bank_ptr[entry][offset & ~1];
+ *dest = (*dest & ~mem_mask) | (data & mem_mask);
+ }
+ else
+ (*handler->handler.write.mhandler16)(handler->object, offset >> 1, data, mem_mask);
+
+ profiler_mark(PROFILER_END);
+}
+
+
+/*-------------------------------------------------
+ read_dword_generic - read a dword from an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE UINT32 read_dword_generic(UINT8 spacenum, offs_t address, UINT32 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+ UINT32 result;
+
+ profiler_mark(PROFILER_MEMREAD);
+
+ address &= space->bytemask;
+ entry = space->readlookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->readlookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->readhandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ result = *(UINT32 *)&bank_ptr[entry][offset & ~3];
+ else
+ result = (*handler->handler.read.mhandler32)(handler->object, offset >> 2, mem_mask);
+
+ profiler_mark(PROFILER_END);
+ return result;
+}
+
+
+/*-------------------------------------------------
+ write_dword_generic - write a dword to an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE void write_dword_generic(UINT8 spacenum, offs_t address, UINT32 data, UINT32 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+
+ profiler_mark(PROFILER_MEMWRITE);
+
+ address &= space->bytemask;
+ entry = space->writelookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->writelookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->writehandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ {
+ UINT32 *dest = (UINT32 *)&bank_ptr[entry][offset & ~3];
+ *dest = (*dest & ~mem_mask) | (data & mem_mask);
+ }
+ else
+ (*handler->handler.write.mhandler32)(handler->object, offset >> 2, data, mem_mask);
+
+ profiler_mark(PROFILER_END);
+}
+
+
+/*-------------------------------------------------
+ read_qword_generic - read a qword from an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE UINT64 read_qword_generic(UINT8 spacenum, offs_t address, UINT64 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+ UINT64 result;
+
+ profiler_mark(PROFILER_MEMREAD);
+
+ address &= space->bytemask;
+ entry = space->readlookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->readlookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->readhandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ result = *(UINT64 *)&bank_ptr[entry][offset & ~7];
+ else
+ result = (*handler->handler.read.mhandler64)(handler->object, offset >> 3, mem_mask);
+
+ profiler_mark(PROFILER_END);
+ return result;
+}
+
+
+/*-------------------------------------------------
+ write_qword_generic - write a qword to an
+ arbitrary address space
+-------------------------------------------------*/
+
+INLINE void write_qword_generic(UINT8 spacenum, offs_t address, UINT64 data, UINT64 mem_mask)
+{
+ const address_space *space = &active_address_space[spacenum];
+ const handler_data *handler;
+ offs_t offset;
+ UINT32 entry;
+
+ profiler_mark(PROFILER_MEMWRITE);
+
+ address &= space->bytemask;
+ entry = space->writelookup[LEVEL1_INDEX(address)];
+ if (entry >= SUBTABLE_BASE)
+ entry = space->writelookup[LEVEL2_INDEX(entry, address)];
+ handler = &space->writehandlers[entry];
+
+ offset = (address - handler->bytestart) & handler->bytemask;
+ if (entry < STATIC_RAM)
+ {
+ UINT64 *dest = (UINT64 *)&bank_ptr[entry][offset & ~7];
+ *dest = (*dest & ~mem_mask) | (data & mem_mask);
+ }
+ else
+ (*handler->handler.write.mhandler64)(handler->object, offset >> 3, data, mem_mask);
+
+ profiler_mark(PROFILER_END);
+}
+
+
/***************************************************************************
CORE SYSTEM OPERATIONS
@@ -473,7 +726,7 @@ void memory_init(running_machine *machine)
memset(bankd_ptr, 0, sizeof(bankd_ptr));
/* build up the cpudata array with info about all CPUs and address spaces */
- memory_init_cpudata(machine->config);
+ memory_init_cpudata(machine);
/* preflight the memory handlers and check banks */
memory_init_preflight(machine->config);
@@ -520,6 +773,10 @@ static void memory_exit(running_machine *machine)
if (space->write.table != NULL)
free(space->write.table);
}
+
+ /* free the global watchpoint table */
+ if (wptable != NULL)
+ free(wptable);
}
@@ -529,53 +786,49 @@ static void memory_exit(running_machine *machine)
void memory_set_context(int activecpu)
{
+ addrspace_data *space;
+
/* remember dynamic RAM/ROM */
- if (cur_context != -1)
- {
+ if (activecpu == -1)
+ activecpu = cur_context;
+ else if (cur_context != -1)
cpudata[cur_context].opbase = opbase;
- }
cur_context = activecpu;
opbase = cpudata[activecpu].opbase;
+ opbase_handler = cpudata[activecpu].opbase_handler;
/* program address space */
- active_address_space[ADDRESS_SPACE_PROGRAM].bytemask = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].bytemask;
- active_address_space[ADDRESS_SPACE_PROGRAM].readlookup = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].read.table;
- active_address_space[ADDRESS_SPACE_PROGRAM].writelookup = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].write.table;
- active_address_space[ADDRESS_SPACE_PROGRAM].readhandlers = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].read.handlers;
- active_address_space[ADDRESS_SPACE_PROGRAM].writehandlers = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].write.handlers;
- active_address_space[ADDRESS_SPACE_PROGRAM].accessors = cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM].accessors;
+ space = &cpudata[activecpu].space[ADDRESS_SPACE_PROGRAM];
+ active_address_space[ADDRESS_SPACE_PROGRAM].bytemask = space->bytemask;
+ active_address_space[ADDRESS_SPACE_PROGRAM].readlookup = ((Machine->debug_flags & DEBUG_FLAG_WPR_PROGRAM) != 0) ? wptable : space->read.table;
+ active_address_space[ADDRESS_SPACE_PROGRAM].writelookup = ((Machine->debug_flags & DEBUG_FLAG_WPW_PROGRAM) != 0) ? wptable : space->write.table;
+ active_address_space[ADDRESS_SPACE_PROGRAM].readhandlers = space->read.handlers;
+ active_address_space[ADDRESS_SPACE_PROGRAM].writehandlers = space->write.handlers;
+ active_address_space[ADDRESS_SPACE_PROGRAM].accessors = space->accessors;
/* data address space */
if (cpudata[activecpu].spacemask & (1 << ADDRESS_SPACE_DATA))
{
- active_address_space[ADDRESS_SPACE_DATA].bytemask = cpudata[activecpu].space[ADDRESS_SPACE_DATA].bytemask;
- active_address_space[ADDRESS_SPACE_DATA].readlookup = cpudata[activecpu].space[ADDRESS_SPACE_DATA].read.table;
- active_address_space[ADDRESS_SPACE_DATA].writelookup = cpudata[activecpu].space[ADDRESS_SPACE_DATA].write.table;
- active_address_space[ADDRESS_SPACE_DATA].readhandlers = cpudata[activecpu].space[ADDRESS_SPACE_DATA].read.handlers;
- active_address_space[ADDRESS_SPACE_DATA].writehandlers = cpudata[activecpu].space[ADDRESS_SPACE_DATA].write.handlers;
- active_address_space[ADDRESS_SPACE_DATA].accessors = cpudata[activecpu].space[ADDRESS_SPACE_DATA].accessors;
+ space = &cpudata[activecpu].space[ADDRESS_SPACE_DATA];
+ active_address_space[ADDRESS_SPACE_DATA].bytemask = space->bytemask;
+ active_address_space[ADDRESS_SPACE_DATA].readlookup = ((Machine->debug_flags & DEBUG_FLAG_WPR_DATA) != 0) ? wptable : space->read.table;
+ active_address_space[ADDRESS_SPACE_DATA].writelookup = ((Machine->debug_flags & DEBUG_FLAG_WPW_DATA) != 0) ? wptable : space->write.table;
+ active_address_space[ADDRESS_SPACE_DATA].readhandlers = space->read.handlers;
+ active_address_space[ADDRESS_SPACE_DATA].writehandlers = space->write.handlers;
+ active_address_space[ADDRESS_SPACE_DATA].accessors = space->accessors;
}
/* I/O address space */
if (cpudata[activecpu].spacemask & (1 << ADDRESS_SPACE_IO))
{
- active_address_space[ADDRESS_SPACE_IO].bytemask = cpudata[activecpu].space[ADDRESS_SPACE_IO].bytemask;
- active_address_space[ADDRESS_SPACE_IO].readlookup = cpudata[activecpu].space[ADDRESS_SPACE_IO].read.table;
- active_address_space[ADDRESS_SPACE_IO].writelookup = cpudata[activecpu].space[ADDRESS_SPACE_IO].write.table;
- active_address_space[ADDRESS_SPACE_IO].readhandlers = cpudata[activecpu].space[ADDRESS_SPACE_IO].read.handlers;
- active_address_space[ADDRESS_SPACE_IO].writehandlers = cpudata[activecpu].space[ADDRESS_SPACE_IO].write.handlers;
- active_address_space[ADDRESS_SPACE_IO].accessors = cpudata[activecpu].space[ADDRESS_SPACE_IO].accessors;
- }
-
- opbase_handler = cpudata[activecpu].opbase_handler;
-
- if (activecpu != -1 && (Machine->debug_flags & DEBUG_FLAG_ENABLED) != 0)
- debug_cpu_get_memory_hooks(activecpu, &debug_hook_read, &debug_hook_write);
- else
- {
- debug_hook_read = NULL;
- debug_hook_write = NULL;
+ space = &cpudata[activecpu].space[ADDRESS_SPACE_IO];
+ active_address_space[ADDRESS_SPACE_IO].bytemask = space->bytemask;
+ active_address_space[ADDRESS_SPACE_IO].readlookup = ((Machine->debug_flags & DEBUG_FLAG_WPR_DATA) != 0) ? wptable : space->read.table;
+ active_address_space[ADDRESS_SPACE_IO].writelookup = ((Machine->debug_flags & DEBUG_FLAG_WPW_DATA) != 0) ? wptable : space->write.table;
+ active_address_space[ADDRESS_SPACE_IO].readhandlers = space->read.handlers;
+ active_address_space[ADDRESS_SPACE_IO].writehandlers = space->write.handlers;
+ active_address_space[ADDRESS_SPACE_IO].accessors = space->accessors;
}
}
@@ -1343,13 +1596,18 @@ UINT64 *_memory_install_device_handler64(const device_config *device, int cpunum
structure for each CPU
-------------------------------------------------*/
-static void memory_init_cpudata(const machine_config *config)
+static void memory_init_cpudata(running_machine *machine)
{
+ const machine_config *config = machine->config;
int cpunum, spacenum;
/* zap the cpudata structure */
memset(&cpudata, 0, sizeof(cpudata));
+ /* create a global watchpoint-filled table */
+ wptable = malloc_or_die(1 << LEVEL1_BITS);
+ memset(wptable, STATIC_WATCHPOINT, 1 << LEVEL1_BITS);
+
/* loop over CPUs */
for (cpunum = 0; cpunum < ARRAY_LENGTH(cpudata); cpunum++)
{
@@ -1392,9 +1650,11 @@ static void memory_init_cpudata(const machine_config *config)
space->write.handlers[entrynum].handler.generic = get_static_handler(space->dbits, 1, spacenum, entrynum);
}
- /* make sure we fix up the mask for the unmap handler */
+ /* make sure we fix up the mask for the unmap and watchpoint handlers */
space->read.handlers[STATIC_UNMAP].bytemask = ~0;
space->write.handlers[STATIC_UNMAP].bytemask = ~0;
+ space->read.handlers[STATIC_WATCHPOINT].bytemask = ~0;
+ space->write.handlers[STATIC_WATCHPOINT].bytemask = ~0;
/* allocate memory */
space->read.table = malloc_or_die(1 << LEVEL1_BITS);
@@ -2712,6 +2972,113 @@ static WRITE64_HANDLER( mwh64_nop ) { }
/*-------------------------------------------------
+ watchpoint memory handlers
+-------------------------------------------------*/
+
+INLINE UINT8 watchpoint_read8(int spacenum, offs_t address)
+{
+ UINT8 result;
+ debug_cpu_memory_read_hook(Machine, cur_context, spacenum, address, 0xff);
+ active_address_space[spacenum].readlookup = cpudata[cur_context].space[spacenum].read.table;
+ result = read_byte_generic(spacenum, address);
+ active_address_space[spacenum].readlookup = wptable;
+ return result;
+}
+
+INLINE UINT16 watchpoint_read16(int spacenum, offs_t address, UINT16 mem_mask)
+{
+ UINT16 result;
+ debug_cpu_memory_read_hook(Machine, cur_context, spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = cpudata[cur_context].space[spacenum].read.table;
+ result = read_word_generic(spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = wptable;
+ return result;
+}
+
+INLINE UINT32 watchpoint_read32(int spacenum, offs_t address, UINT32 mem_mask)
+{
+ UINT32 result;
+ debug_cpu_memory_read_hook(Machine, cur_context, spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = cpudata[cur_context].space[spacenum].read.table;
+ result = read_dword_generic(spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = wptable;
+ return result;
+}
+
+INLINE UINT64 watchpoint_read64(int spacenum, offs_t address, UINT64 mem_mask)
+{
+ UINT64 result;
+ debug_cpu_memory_read_hook(Machine, cur_context, spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = cpudata[cur_context].space[spacenum].read.table;
+ result = read_qword_generic(spacenum, address, mem_mask);
+ active_address_space[spacenum].readlookup = wptable;
+ return result;
+}
+
+INLINE void watchpoint_write8(int spacenum, offs_t address, UINT8 data)
+{
+ debug_cpu_memory_write_hook(Machine, cur_context, spacenum, address, data, 0xff);
+ active_address_space[spacenum].writelookup = cpudata[cur_context].space[spacenum].write.table;
+ write_byte_generic(spacenum, address, data);
+ active_address_space[spacenum].writelookup = wptable;
+}
+
+INLINE void watchpoint_write16(int spacenum, offs_t address, UINT16 data, UINT16 mem_mask)
+{
+ debug_cpu_memory_write_hook(Machine, cur_context, spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = cpudata[cur_context].space[spacenum].write.table;
+ write_word_generic(spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = wptable;
+}
+
+INLINE void watchpoint_write32(int spacenum, offs_t address, UINT32 data, UINT32 mem_mask)
+{
+ debug_cpu_memory_write_hook(Machine, cur_context, spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = cpudata[cur_context].space[spacenum].write.table;
+ write_dword_generic(spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = wptable;
+}
+
+INLINE void watchpoint_write64(int spacenum, offs_t address, UINT64 data, UINT64 mem_mask)
+{
+ debug_cpu_memory_write_hook(Machine, cur_context, spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = cpudata[cur_context].space[spacenum].write.table;
+ write_qword_generic(spacenum, address, data, mem_mask);
+ active_address_space[spacenum].writelookup = wptable;
+}
+
+static READ8_HANDLER( mrh8_watchpoint_program ) { return watchpoint_read8 (ADDRESS_SPACE_PROGRAM, offset); }
+static READ16_HANDLER( mrh16_watchpoint_program ) { return watchpoint_read16(ADDRESS_SPACE_PROGRAM, offset, mem_mask); }
+static READ32_HANDLER( mrh32_watchpoint_program ) { return watchpoint_read32(ADDRESS_SPACE_PROGRAM, offset, mem_mask); }
+static READ64_HANDLER( mrh64_watchpoint_program ) { return watchpoint_read64(ADDRESS_SPACE_PROGRAM, offset, mem_mask); }
+
+static WRITE8_HANDLER( mwh8_watchpoint_program ) { watchpoint_write8 (ADDRESS_SPACE_PROGRAM, offset, data); }
+static WRITE16_HANDLER( mwh16_watchpoint_program ) { watchpoint_write16(ADDRESS_SPACE_PROGRAM, offset, data, mem_mask); }
+static WRITE32_HANDLER( mwh32_watchpoint_program ) { watchpoint_write32(ADDRESS_SPACE_PROGRAM, offset, data, mem_mask); }
+static WRITE64_HANDLER( mwh64_watchpoint_program ) { watchpoint_write64(ADDRESS_SPACE_PROGRAM, offset, data, mem_mask); }
+
+static READ8_HANDLER( mrh8_watchpoint_data ) { return watchpoint_read8 (ADDRESS_SPACE_DATA, offset); }
+static READ16_HANDLER( mrh16_watchpoint_data ) { return watchpoint_read16(ADDRESS_SPACE_DATA, offset, mem_mask); }
+static READ32_HANDLER( mrh32_watchpoint_data ) { return watchpoint_read32(ADDRESS_SPACE_DATA, offset, mem_mask); }
+static READ64_HANDLER( mrh64_watchpoint_data ) { return watchpoint_read64(ADDRESS_SPACE_DATA, offset, mem_mask); }
+
+static WRITE8_HANDLER( mwh8_watchpoint_data ) { watchpoint_write8 (ADDRESS_SPACE_DATA, offset, data); }
+static WRITE16_HANDLER( mwh16_watchpoint_data ) { watchpoint_write16(ADDRESS_SPACE_DATA, offset, data, mem_mask); }
+static WRITE32_HANDLER( mwh32_watchpoint_data ) { watchpoint_write32(ADDRESS_SPACE_DATA, offset, data, mem_mask); }
+static WRITE64_HANDLER( mwh64_watchpoint_data ) { watchpoint_write64(ADDRESS_SPACE_DATA, offset, data, mem_mask); }
+
+static READ8_HANDLER( mrh8_watchpoint_io ) { return watchpoint_read8 (ADDRESS_SPACE_IO, offset); }
+static READ16_HANDLER( mrh16_watchpoint_io ) { return watchpoint_read16(ADDRESS_SPACE_IO, offset, mem_mask); }
+static READ32_HANDLER( mrh32_watchpoint_io ) { return watchpoint_read32(ADDRESS_SPACE_IO, offset, mem_mask); }
+static READ64_HANDLER( mrh64_watchpoint_io ) { return watchpoint_read64(ADDRESS_SPACE_IO, offset, mem_mask); }
+
+static WRITE8_HANDLER( mwh8_watchpoint_io ) { watchpoint_write8 (ADDRESS_SPACE_IO, offset, data); }
+static WRITE16_HANDLER( mwh16_watchpoint_io ) { watchpoint_write16(ADDRESS_SPACE_IO, offset, data, mem_mask); }
+static WRITE32_HANDLER( mwh32_watchpoint_io ) { watchpoint_write32(ADDRESS_SPACE_IO, offset, data, mem_mask); }
+static WRITE64_HANDLER( mwh64_watchpoint_io ) { watchpoint_write64(ADDRESS_SPACE_IO, offset, data, mem_mask); }
+
+
+/*-------------------------------------------------
get_static_handler - returns points to static
memory handlers
-------------------------------------------------*/
@@ -2727,33 +3094,45 @@ static genf *get_static_handler(int handlerbits, int readorwrite, int spacenum,
genf * write;
} static_handler_list[] =
{
- { 8, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh8_unmap_program, (genf *)mwh8_unmap_program },
- { 8, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh8_unmap_data, (genf *)mwh8_unmap_data },
- { 8, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh8_unmap_io, (genf *)mwh8_unmap_io },
- { 8, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh8_nop_program, (genf *)mwh8_nop },
- { 8, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh8_nop_data, (genf *)mwh8_nop },
- { 8, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh8_nop_io, (genf *)mwh8_nop },
-
- { 16, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh16_unmap_program,(genf *)mwh16_unmap_program },
- { 16, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh16_unmap_data, (genf *)mwh16_unmap_data },
- { 16, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh16_unmap_io, (genf *)mwh16_unmap_io },
- { 16, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh16_nop_program, (genf *)mwh16_nop },
- { 16, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh16_nop_data, (genf *)mwh16_nop },
- { 16, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh16_nop_io, (genf *)mwh16_nop },
-
- { 32, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh32_unmap_program,(genf *)mwh32_unmap_program },
- { 32, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh32_unmap_data, (genf *)mwh32_unmap_data },
- { 32, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh32_unmap_io, (genf *)mwh32_unmap_io },
- { 32, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh32_nop_program, (genf *)mwh32_nop },
- { 32, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh32_nop_data, (genf *)mwh32_nop },
- { 32, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh32_nop_io, (genf *)mwh32_nop },
-
- { 64, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh64_unmap_program,(genf *)mwh64_unmap_program },
- { 64, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh64_unmap_data, (genf *)mwh64_unmap_data },
- { 64, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh64_unmap_io, (genf *)mwh64_unmap_io },
- { 64, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh64_nop_program, (genf *)mwh64_nop },
- { 64, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh64_nop_data, (genf *)mwh64_nop },
- { 64, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh64_nop_io, (genf *)mwh64_nop },
+ { 8, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh8_unmap_program, (genf *)mwh8_unmap_program },
+ { 8, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh8_unmap_data, (genf *)mwh8_unmap_data },
+ { 8, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh8_unmap_io, (genf *)mwh8_unmap_io },
+ { 8, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh8_nop_program, (genf *)mwh8_nop },
+ { 8, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh8_nop_data, (genf *)mwh8_nop },
+ { 8, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh8_nop_io, (genf *)mwh8_nop },
+ { 8, STATIC_WATCHPOINT, ADDRESS_SPACE_PROGRAM, (genf *)mrh8_watchpoint_program, (genf *)mwh8_watchpoint_program },
+ { 8, STATIC_WATCHPOINT, ADDRESS_SPACE_DATA, (genf *)mrh8_watchpoint_data, (genf *)mwh8_watchpoint_data },
+ { 8, STATIC_WATCHPOINT, ADDRESS_SPACE_IO, (genf *)mrh8_watchpoint_io, (genf *)mwh8_watchpoint_io },
+
+ { 16, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh16_unmap_program, (genf *)mwh16_unmap_program },
+ { 16, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh16_unmap_data, (genf *)mwh16_unmap_data },
+ { 16, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh16_unmap_io, (genf *)mwh16_unmap_io },
+ { 16, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh16_nop_program, (genf *)mwh16_nop },
+ { 16, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh16_nop_data, (genf *)mwh16_nop },
+ { 16, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh16_nop_io, (genf *)mwh16_nop },
+ { 16, STATIC_WATCHPOINT, ADDRESS_SPACE_PROGRAM, (genf *)mrh16_watchpoint_program, (genf *)mwh16_watchpoint_program },
+ { 16, STATIC_WATCHPOINT, ADDRESS_SPACE_DATA, (genf *)mrh16_watchpoint_data, (genf *)mwh16_watchpoint_data },
+ { 16, STATIC_WATCHPOINT, ADDRESS_SPACE_IO, (genf *)mrh16_watchpoint_io, (genf *)mwh16_watchpoint_io },
+
+ { 32, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh32_unmap_program, (genf *)mwh32_unmap_program },
+ { 32, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh32_unmap_data, (genf *)mwh32_unmap_data },
+ { 32, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh32_unmap_io, (genf *)mwh32_unmap_io },
+ { 32, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh32_nop_program, (genf *)mwh32_nop },
+ { 32, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh32_nop_data, (genf *)mwh32_nop },
+ { 32, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh32_nop_io, (genf *)mwh32_nop },
+ { 32, STATIC_WATCHPOINT, ADDRESS_SPACE_PROGRAM, (genf *)mrh32_watchpoint_program, (genf *)mwh32_watchpoint_program },
+ { 32, STATIC_WATCHPOINT, ADDRESS_SPACE_DATA, (genf *)mrh32_watchpoint_data, (genf *)mwh32_watchpoint_data },
+ { 32, STATIC_WATCHPOINT, ADDRESS_SPACE_IO, (genf *)mrh32_watchpoint_io, (genf *)mwh32_watchpoint_io },
+
+ { 64, STATIC_UNMAP, ADDRESS_SPACE_PROGRAM, (genf *)mrh64_unmap_program, (genf *)mwh64_unmap_program },
+ { 64, STATIC_UNMAP, ADDRESS_SPACE_DATA, (genf *)mrh64_unmap_data, (genf *)mwh64_unmap_data },
+ { 64, STATIC_UNMAP, ADDRESS_SPACE_IO, (genf *)mrh64_unmap_io, (genf *)mwh64_unmap_io },
+ { 64, STATIC_NOP, ADDRESS_SPACE_PROGRAM, (genf *)mrh64_nop_program, (genf *)mwh64_nop },
+ { 64, STATIC_NOP, ADDRESS_SPACE_DATA, (genf *)mrh64_nop_data, (genf *)mwh64_nop },
+ { 64, STATIC_NOP, ADDRESS_SPACE_IO, (genf *)mrh64_nop_io, (genf *)mwh64_nop },
+ { 64, STATIC_WATCHPOINT, ADDRESS_SPACE_PROGRAM, (genf *)mrh64_watchpoint_program, (genf *)mwh64_watchpoint_program },
+ { 64, STATIC_WATCHPOINT, ADDRESS_SPACE_DATA, (genf *)mrh64_watchpoint_data, (genf *)mwh64_watchpoint_data },
+ { 64, STATIC_WATCHPOINT, ADDRESS_SPACE_IO, (genf *)mrh64_watchpoint_io, (genf *)mwh64_watchpoint_io }
};
int tablenum;
@@ -3331,70 +3710,10 @@ static memory_handler get_stub_handler(read_or_write readorwrite, int spacedbits
/***************************************************************************
- MEMORY HANDLER LOOKUP HELPERS
-***************************************************************************/
-
-/*-------------------------------------------------
- Program memory handlers
--------------------------------------------------*/
-
-INLINE UINT32 lookup_read_entry(const address_space *space, offs_t address)
-{
- UINT32 entry = space->readlookup[LEVEL1_INDEX(address)];
- if (entry >= SUBTABLE_BASE)
- entry = space->readlookup[LEVEL2_INDEX(entry, address)];
- return entry;
-}
-
-
-INLINE UINT32 lookup_write_entry(const address_space *space, offs_t address)
-{
- UINT32 entry = space->writelookup[LEVEL1_INDEX(address)];
- if (entry >= SUBTABLE_BASE)
- entry = space->writelookup[LEVEL2_INDEX(entry, address)];
- return entry;
-}
-
-
-
-/***************************************************************************
8-BIT READ HANDLERS
***************************************************************************/
/*-------------------------------------------------
- read_byte_generic - read a byte from an
- arbitrary address space
--------------------------------------------------*/
-
-INLINE UINT8 read_byte_generic(UINT8 spacenum, offs_t address)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
- UINT8 result;
-
- profiler_mark(PROFILER_MEMREAD);
-
- address &= space->bytemask;
- entry = lookup_read_entry(space, address);
- handler = &space->readhandlers[entry];
-
- DEBUG_HOOK_READ(spacenum, address, 0xff);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- result = bank_ptr[entry][offset];
- else
- result = (*handler->handler.read.mhandler8)(handler->object, offset);
-
- profiler_mark(PROFILER_END);
-
- return result;
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
@@ -3697,36 +4016,6 @@ UINT64 io_read_qword_masked_8be(offs_t address, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- stub_write_byte_generic - write a byte to an
- arbitrary address space
--------------------------------------------------*/
-
-INLINE void write_byte_generic(UINT8 spacenum, offs_t address, UINT8 data)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
-
- profiler_mark(PROFILER_MEMWRITE);
-
- address &= space->bytemask;
- entry = lookup_write_entry(space, address);
- handler = &space->writehandlers[entry];
-
- DEBUG_HOOK_WRITE(spacenum, address, data, 0xff);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- bank_ptr[entry][offset] = data;
- else
- (*handler->handler.write.mhandler8)(handler->object, offset, data);
-
- profiler_mark(PROFILER_END);
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
@@ -3993,72 +4282,39 @@ void io_write_qword_masked_8be(offs_t address, UINT64 data, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- read_word_masked_generic - read a word from
- an arbitrary address space
--------------------------------------------------*/
-
-INLINE UINT16 read_word_masked_generic(UINT8 spacenum, offs_t address, UINT16 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
- UINT16 result;
-
- profiler_mark(PROFILER_MEMREAD);
-
- address &= space->bytemask;
- entry = lookup_read_entry(space, address);
- handler = &space->readhandlers[entry];
-
- DEBUG_HOOK_READ(spacenum, address & ~1, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- result = *(UINT16 *)&bank_ptr[entry][offset & ~1];
- else
- result = (*handler->handler.read.mhandler16)(handler->object, offset >> 1, mem_mask);
-
- profiler_mark(PROFILER_END);
-
- return result;
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
UINT8 program_read_byte_16le(offs_t address)
{
UINT32 shift = (address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
}
UINT8 program_read_byte_16be(offs_t address)
{
UINT32 shift = (~address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
}
UINT16 program_read_word_16le(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff);
}
UINT16 program_read_word_masked_16le(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
UINT16 program_read_word_16be(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff);
}
UINT16 program_read_word_masked_16be(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_word_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
UINT32 program_read_dword_16le(offs_t address)
@@ -4125,33 +4381,33 @@ UINT64 program_read_qword_masked_16be(offs_t address, UINT64 mask)
UINT8 data_read_byte_16le(offs_t address)
{
UINT32 shift = (address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
}
UINT8 data_read_byte_16be(offs_t address)
{
UINT32 shift = (~address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
}
UINT16 data_read_word_16le(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_DATA, address, 0xffff);
}
UINT16 data_read_word_masked_16le(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_word_generic(ADDRESS_SPACE_DATA, address, mask);
}
UINT16 data_read_word_16be(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_DATA, address, 0xffff);
}
UINT16 data_read_word_masked_16be(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_word_generic(ADDRESS_SPACE_DATA, address, mask);
}
UINT32 data_read_dword_16le(offs_t address)
@@ -4218,33 +4474,33 @@ UINT64 data_read_qword_masked_16be(offs_t address, UINT64 mask)
UINT8 io_read_byte_16le(offs_t address)
{
UINT32 shift = (address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
}
UINT8 io_read_byte_16be(offs_t address)
{
UINT32 shift = (~address & 1) * 8;
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
+ return read_word_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
}
UINT16 io_read_word_16le(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_IO, address, 0xffff);
}
UINT16 io_read_word_masked_16le(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_word_generic(ADDRESS_SPACE_IO, address, mask);
}
UINT16 io_read_word_16be(offs_t address)
{
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, 0xffff);
+ return read_word_generic(ADDRESS_SPACE_IO, address, 0xffff);
}
UINT16 io_read_word_masked_16be(offs_t address, UINT16 mask)
{
- return read_word_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_word_generic(ADDRESS_SPACE_IO, address, mask);
}
UINT32 io_read_dword_16le(offs_t address)
@@ -4310,72 +4566,39 @@ UINT64 io_read_qword_masked_16be(offs_t address, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- write_word_masked_generic - write a masked
- word to an arbitrary address space
--------------------------------------------------*/
-
-INLINE void write_word_masked_generic(UINT8 spacenum, offs_t address, UINT16 data, UINT16 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
-
- profiler_mark(PROFILER_MEMWRITE);
-
- address &= space->bytemask;
- entry = lookup_write_entry(space, address);
- handler = &space->writehandlers[entry];
-
- DEBUG_HOOK_WRITE(spacenum, address & ~1, data, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- {
- UINT16 *dest = (UINT16 *)&bank_ptr[entry][offset & ~1];
- *dest = (*dest & ~mem_mask) | (data & mem_mask);
- }
- else
- (*handler->handler.write.mhandler16)(handler->object, offset >> 1, data, mem_mask);
-
- profiler_mark(PROFILER_END);
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
void program_write_byte_16le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
}
void program_write_byte_16be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
}
void program_write_word_16le(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffff);
}
void program_write_word_masked_16le(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
void program_write_word_16be(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffff);
}
void program_write_word_masked_16be(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
void program_write_dword_16le(offs_t address, UINT32 data)
@@ -4434,33 +4657,33 @@ void program_write_qword_masked_16be(offs_t address, UINT64 data, UINT64 mask)
void data_write_byte_16le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
}
void data_write_byte_16be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
}
void data_write_word_16le(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data, 0xffff);
}
void data_write_word_masked_16le(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
void data_write_word_16be(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data, 0xffff);
}
void data_write_word_masked_16be(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
void data_write_dword_16le(offs_t address, UINT32 data)
@@ -4519,33 +4742,33 @@ void data_write_qword_masked_16be(offs_t address, UINT64 data, UINT64 mask)
void io_write_byte_16le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
}
void io_write_byte_16be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 1) * 8;
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
+ write_word_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
}
void io_write_word_16le(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_IO, address, data, 0xffff);
}
void io_write_word_masked_16le(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_IO, address, data, mask);
}
void io_write_word_16be(offs_t address, UINT16 data)
{
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data, 0xffff);
+ write_word_generic(ADDRESS_SPACE_IO, address, data, 0xffff);
}
void io_write_word_masked_16be(offs_t address, UINT16 data, UINT16 mask)
{
- write_word_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_word_generic(ADDRESS_SPACE_IO, address, data, mask);
}
void io_write_dword_16le(offs_t address, UINT32 data)
@@ -4603,96 +4826,63 @@ void io_write_qword_masked_16be(offs_t address, UINT64 data, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- read_dword_masked_generic - read a dword from
- an arbitrary address space
--------------------------------------------------*/
-
-INLINE UINT32 read_dword_masked_generic(UINT8 spacenum, offs_t address, UINT32 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
- UINT32 result;
-
- profiler_mark(PROFILER_MEMREAD);
-
- address &= space->bytemask;
- entry = lookup_read_entry(space, address);
- handler = &space->readhandlers[entry];
-
- DEBUG_HOOK_READ(spacenum, address & ~3, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- result = *(UINT32 *)&bank_ptr[entry][offset & ~3];
- else
- result = (*handler->handler.read.mhandler32)(handler->object, offset >> 2, mem_mask);
-
- profiler_mark(PROFILER_END);
-
- return result;
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
UINT8 program_read_byte_32le(offs_t address)
{
UINT32 shift = (address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
}
UINT8 program_read_byte_32be(offs_t address)
{
UINT32 shift = (~address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xff << shift) >> shift;
}
UINT16 program_read_word_32le(offs_t address)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff << shift) >> shift;
}
UINT16 program_read_word_masked_32le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, mask << shift) >> shift;
}
UINT16 program_read_word_32be(offs_t address)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xffff << shift) >> shift;
}
UINT16 program_read_word_masked_32be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, mask << shift) >> shift;
}
UINT32 program_read_dword_32le(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xffffffff);
}
UINT32 program_read_dword_masked_32le(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
UINT32 program_read_dword_32be(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, 0xffffffff);
}
UINT32 program_read_dword_masked_32be(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
UINT64 program_read_qword_32le(offs_t address)
@@ -4731,57 +4921,57 @@ UINT64 program_read_qword_masked_32be(offs_t address, UINT64 mask)
UINT8 data_read_byte_32le(offs_t address)
{
UINT32 shift = (address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
}
UINT8 data_read_byte_32be(offs_t address)
{
UINT32 shift = (~address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xff << shift) >> shift;
}
UINT16 data_read_word_32le(offs_t address)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xffff << shift) >> shift;
}
UINT16 data_read_word_masked_32le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, mask << shift) >> shift;
}
UINT16 data_read_word_32be(offs_t address)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xffff << shift) >> shift;
}
UINT16 data_read_word_masked_32be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, mask << shift) >> shift;
}
UINT32 data_read_dword_32le(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xffffffff);
}
UINT32 data_read_dword_masked_32le(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, mask);
}
UINT32 data_read_dword_32be(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, 0xffffffff);
}
UINT32 data_read_dword_masked_32be(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_DATA, address, mask);
}
UINT64 data_read_qword_32le(offs_t address)
@@ -4820,57 +5010,57 @@ UINT64 data_read_qword_masked_32be(offs_t address, UINT64 mask)
UINT8 io_read_byte_32le(offs_t address)
{
UINT32 shift = (address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
}
UINT8 io_read_byte_32be(offs_t address)
{
UINT32 shift = (~address & 3) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xff << shift) >> shift;
}
UINT16 io_read_word_32le(offs_t address)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xffff << shift) >> shift;
}
UINT16 io_read_word_masked_32le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, mask << shift) >> shift;
}
UINT16 io_read_word_32be(offs_t address)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xffff << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xffff << shift) >> shift;
}
UINT16 io_read_word_masked_32be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, mask << shift) >> shift;
+ return read_dword_generic(ADDRESS_SPACE_IO, address, mask << shift) >> shift;
}
UINT32 io_read_dword_32le(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xffffffff);
}
UINT32 io_read_dword_masked_32le(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_IO, address, mask);
}
UINT32 io_read_dword_32be(offs_t address)
{
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, 0xffffffff);
+ return read_dword_generic(ADDRESS_SPACE_IO, address, 0xffffffff);
}
UINT32 io_read_dword_masked_32be(offs_t address, UINT32 mask)
{
- return read_dword_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_dword_generic(ADDRESS_SPACE_IO, address, mask);
}
UINT64 io_read_qword_32le(offs_t address)
@@ -4908,96 +5098,63 @@ UINT64 io_read_qword_masked_32be(offs_t address, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- write_dword_masked_generic - write a masked
- dword to an arbitrary address space
--------------------------------------------------*/
-
-INLINE void write_dword_masked_generic(UINT8 spacenum, offs_t address, UINT32 data, UINT32 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
-
- profiler_mark(PROFILER_MEMWRITE);
-
- address &= space->bytemask;
- entry = lookup_write_entry(space, address);
- handler = &space->writehandlers[entry];
-
- DEBUG_HOOK_WRITE(spacenum, address & ~3, data, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- {
- UINT32 *dest = (UINT32 *)&bank_ptr[entry][offset & ~3];
- *dest = (*dest & ~mem_mask) | (data & mem_mask);
- }
- else
- (*handler->handler.write.mhandler32)(handler->object, offset >> 2, data, mem_mask);
-
- profiler_mark(PROFILER_END);
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
void program_write_byte_32le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
}
void program_write_byte_32be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xff << shift);
}
void program_write_word_32le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xffff << shift);
}
void program_write_word_masked_32le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, mask << shift);
}
void program_write_word_32be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, 0xffff << shift);
}
void program_write_word_masked_32be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data << shift, mask << shift);
}
void program_write_dword_32le(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffffffff);
}
void program_write_dword_masked_32le(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
void program_write_dword_32be(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data, 0xffffffff);
}
void program_write_dword_masked_32be(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
void program_write_qword_32le(offs_t address, UINT64 data)
@@ -5032,57 +5189,57 @@ void program_write_qword_masked_32be(offs_t address, UINT64 data, UINT64 mask)
void data_write_byte_32le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
}
void data_write_byte_32be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xff << shift);
}
void data_write_word_32le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xffff << shift);
}
void data_write_word_masked_32le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, mask << shift);
}
void data_write_word_32be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, 0xffff << shift);
}
void data_write_word_masked_32be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data << shift, mask << shift);
}
void data_write_dword_32le(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data, 0xffffffff);
}
void data_write_dword_masked_32le(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
void data_write_dword_32be(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data, 0xffffffff);
}
void data_write_dword_masked_32be(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
void data_write_qword_32le(offs_t address, UINT64 data)
@@ -5117,57 +5274,57 @@ void data_write_qword_masked_32be(offs_t address, UINT64 data, UINT64 mask)
void io_write_byte_32le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
}
void io_write_byte_32be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 3) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, 0xff << shift);
}
void io_write_word_32le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, 0xffff << shift);
}
void io_write_word_masked_32le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, mask << shift);
}
void io_write_word_32be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, 0xffff << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, 0xffff << shift);
}
void io_write_word_masked_32be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 2) * 8;
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data << shift, mask << shift);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data << shift, mask << shift);
}
void io_write_dword_32le(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data, 0xffffffff);
}
void io_write_dword_masked_32le(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data, mask);
}
void io_write_dword_32be(offs_t address, UINT32 data)
{
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data, 0xffffffff);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data, 0xffffffff);
}
void io_write_dword_masked_32be(offs_t address, UINT32 data, UINT32 mask)
{
- write_dword_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_dword_generic(ADDRESS_SPACE_IO, address, data, mask);
}
void io_write_qword_32le(offs_t address, UINT64 data)
@@ -5201,120 +5358,87 @@ void io_write_qword_masked_32be(offs_t address, UINT64 data, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- read_qword_masked_generic - read a qword from
- an arbitrary address space
--------------------------------------------------*/
-
-INLINE UINT64 read_qword_masked_generic(UINT8 spacenum, offs_t address, UINT64 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
- UINT64 result;
-
- profiler_mark(PROFILER_MEMREAD);
-
- address &= space->bytemask;
- entry = lookup_read_entry(space, address);
- handler = &space->readhandlers[entry];
-
- DEBUG_HOOK_READ(spacenum, address & ~7, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- result = *(UINT64 *)&bank_ptr[entry][offset & ~7];
- else
- result = (*handler->handler.read.mhandler64)(handler->object, offset >> 3, mem_mask);
-
- profiler_mark(PROFILER_END);
-
- return result;
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
UINT8 program_read_byte_64le(offs_t address)
{
UINT32 shift = (address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xff << shift) >> shift;
}
UINT8 program_read_byte_64be(offs_t address)
{
UINT32 shift = (~address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xff << shift) >> shift;
}
UINT16 program_read_word_64le(offs_t address)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 program_read_word_masked_64le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
}
UINT16 program_read_word_64be(offs_t address)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 program_read_word_masked_64be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
}
UINT32 program_read_dword_64le(offs_t address)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 program_read_dword_masked_64le(offs_t address, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
}
UINT32 program_read_dword_64be(offs_t address)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 program_read_dword_masked_64be(offs_t address, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)mask << shift) >> shift;
}
UINT64 program_read_qword_64le(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, U64(0xffffffffffffffff));
}
UINT64 program_read_qword_masked_64le(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
UINT64 program_read_qword_64be(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, U64(0xffffffffffffffff));
}
UINT64 program_read_qword_masked_64be(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_PROGRAM, address, mask);
}
@@ -5325,81 +5449,81 @@ UINT64 program_read_qword_masked_64be(offs_t address, UINT64 mask)
UINT8 data_read_byte_64le(offs_t address)
{
UINT32 shift = (address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xff << shift) >> shift;
}
UINT8 data_read_byte_64be(offs_t address)
{
UINT32 shift = (~address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xff << shift) >> shift;
}
UINT16 data_read_word_64le(offs_t address)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 data_read_word_masked_64le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
}
UINT16 data_read_word_64be(offs_t address)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 data_read_word_masked_64be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
}
UINT32 data_read_dword_64le(offs_t address)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 data_read_dword_masked_64le(offs_t address, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
}
UINT32 data_read_dword_64be(offs_t address)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 data_read_dword_masked_64be(offs_t address, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)mask << shift) >> shift;
}
UINT64 data_read_qword_64le(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, U64(0xffffffffffffffff));
}
UINT64 data_read_qword_masked_64le(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, mask);
}
UINT64 data_read_qword_64be(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, U64(0xffffffffffffffff));
}
UINT64 data_read_qword_masked_64be(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_DATA, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_DATA, address, mask);
}
@@ -5410,81 +5534,81 @@ UINT64 data_read_qword_masked_64be(offs_t address, UINT64 mask)
UINT8 io_read_byte_64le(offs_t address)
{
UINT32 shift = (address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xff << shift) >> shift;
}
UINT8 io_read_byte_64be(offs_t address)
{
UINT32 shift = (~address & 7) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xff << shift) >> shift;
}
UINT16 io_read_word_64le(offs_t address)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 io_read_word_masked_64le(offs_t address, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
}
UINT16 io_read_word_64be(offs_t address)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffff << shift) >> shift;
}
UINT16 io_read_word_masked_64be(offs_t address, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
}
UINT32 io_read_dword_64le(offs_t address)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 io_read_dword_masked_64le(offs_t address, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
}
UINT32 io_read_dword_64be(offs_t address)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffffffff << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)0xffffffff << shift) >> shift;
}
UINT32 io_read_dword_masked_64be(offs_t address, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
+ return read_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)mask << shift) >> shift;
}
UINT64 io_read_qword_64le(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_IO, address, U64(0xffffffffffffffff));
}
UINT64 io_read_qword_masked_64le(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_IO, address, mask);
}
UINT64 io_read_qword_64be(offs_t address)
{
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, U64(0xffffffffffffffff));
+ return read_qword_generic(ADDRESS_SPACE_IO, address, U64(0xffffffffffffffff));
}
UINT64 io_read_qword_masked_64be(offs_t address, UINT64 mask)
{
- return read_qword_masked_generic(ADDRESS_SPACE_IO, address, mask);
+ return read_qword_generic(ADDRESS_SPACE_IO, address, mask);
}
@@ -5494,120 +5618,87 @@ UINT64 io_read_qword_masked_64be(offs_t address, UINT64 mask)
***************************************************************************/
/*-------------------------------------------------
- write_qword_masked_generic - write a masked
- dword to an arbitrary address space
--------------------------------------------------*/
-
-INLINE void write_qword_masked_generic(UINT8 spacenum, offs_t address, UINT64 data, UINT64 mem_mask)
-{
- const address_space *space = &active_address_space[spacenum];
- const handler_data *handler;
- offs_t offset;
- UINT32 entry;
-
- profiler_mark(PROFILER_MEMWRITE);
-
- address &= space->bytemask;
- entry = lookup_write_entry(space, address);
- handler = &space->writehandlers[entry];
-
- DEBUG_HOOK_WRITE(spacenum, address & ~7, data, mem_mask);
-
- offset = (address - handler->bytestart) & handler->bytemask;
- if (entry < STATIC_RAM)
- {
- UINT64 *dest = (UINT64 *)&bank_ptr[entry][offset & ~7];
- *dest = (*dest & ~mem_mask) | (data & mem_mask);
- }
- else
- (*handler->handler.write.mhandler64)(handler->object, offset >> 3, data, mem_mask);
-
- profiler_mark(PROFILER_END);
-}
-
-
-/*-------------------------------------------------
ADDRESS_SPACE_PROGRAM
-------------------------------------------------*/
void program_write_byte_64le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void program_write_byte_64be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void program_write_word_64le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void program_write_word_masked_64le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void program_write_word_64be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void program_write_word_masked_64be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void program_write_dword_64le(offs_t address, UINT32 data)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void program_write_dword_masked_64le(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void program_write_dword_64be(offs_t address, UINT32 data)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void program_write_dword_masked_64be(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void program_write_qword_64le(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, data, U64(0xffffffffffffffff));
}
void program_write_qword_masked_64le(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
void program_write_qword_64be(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, data, U64(0xffffffffffffffff));
}
void program_write_qword_masked_64be(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_PROGRAM, address, data, mask);
}
@@ -5618,81 +5709,81 @@ void program_write_qword_masked_64be(offs_t address, UINT64 data, UINT64 mask)
void data_write_byte_64le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void data_write_byte_64be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void data_write_word_64le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void data_write_word_masked_64le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void data_write_word_64be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void data_write_word_masked_64be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void data_write_dword_64le(offs_t address, UINT32 data)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void data_write_dword_masked_64le(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void data_write_dword_64be(offs_t address, UINT32 data)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void data_write_dword_masked_64be(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void data_write_qword_64le(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_DATA, address, data, U64(0xffffffffffffffff));
}
void data_write_qword_masked_64le(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
void data_write_qword_64be(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_DATA, address, data, U64(0xffffffffffffffff));
}
void data_write_qword_masked_64be(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_DATA, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_DATA, address, data, mask);
}
@@ -5703,79 +5794,79 @@ void data_write_qword_masked_64be(offs_t address, UINT64 data, UINT64 mask)
void io_write_byte_64le(offs_t address, UINT8 data)
{
UINT32 shift = (address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void io_write_byte_64be(offs_t address, UINT8 data)
{
UINT32 shift = (~address & 7) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xff << shift);
}
void io_write_word_64le(offs_t address, UINT16 data)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void io_write_word_masked_64le(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void io_write_word_64be(offs_t address, UINT16 data)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffff << shift);
}
void io_write_word_masked_64be(offs_t address, UINT16 data, UINT16 mask)
{
UINT32 shift = (~address & 6) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void io_write_dword_64le(offs_t address, UINT32 data)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void io_write_dword_masked_64le(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void io_write_dword_64be(offs_t address, UINT32 data)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)0xffffffff << shift);
}
void io_write_dword_masked_64be(offs_t address, UINT32 data, UINT32 mask)
{
UINT32 shift = (~address & 4) * 8;
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
+ write_qword_generic(ADDRESS_SPACE_IO, address, (UINT64)data << shift, (UINT64)mask << shift);
}
void io_write_qword_64le(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_IO, address, data, U64(0xffffffffffffffff));
}
void io_write_qword_masked_64le(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_IO, address, data, mask);
}
void io_write_qword_64be(offs_t address, UINT64 data)
{
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, data, U64(0xffffffffffffffff));
+ write_qword_generic(ADDRESS_SPACE_IO, address, data, U64(0xffffffffffffffff));
}
void io_write_qword_masked_64be(offs_t address, UINT64 data, UINT64 mask)
{
- write_qword_masked_generic(ADDRESS_SPACE_IO, address, data, mask);
+ write_qword_generic(ADDRESS_SPACE_IO, address, data, mask);
}