diff options
| -rw-r--r-- | src/emu/memory.c | 303 | ||||
| -rw-r--r-- | src/emu/memory.h | 45 | ||||
| -rw-r--r-- | src/emu/validity.c | 10 | ||||
| -rw-r--r-- | src/mame/drivers/crbaloon.c | 5 | ||||
| -rw-r--r-- | src/mame/drivers/ddenlovr.c | 4 | ||||
| -rw-r--r-- | src/mame/drivers/neogeo.c | 8 |
6 files changed, 59 insertions, 316 deletions
diff --git a/src/emu/memory.c b/src/emu/memory.c index 30e0c49dbd3..5ab89c3be29 100644 --- a/src/emu/memory.c +++ b/src/emu/memory.c @@ -34,20 +34,13 @@ ending with 'end' inclusive. An address hits in this bucket if the 'address' >= 'start' and 'address' <= 'end'. - AM_SPACE(match, mask) - Specifies at the bit level (closer to real hardware) how to determine - if an address matches a given bit pattern. An address hits in this - bucket if 'address' & 'mask' == 'match' - AM_MASK(mask) Specifies a mask for the addresses in the current bucket. This mask is applied after a positive hit in the bucket specified by AM_RANGE or AM_SPACE, and is computed before accessing the RAM or calling - through to the read/write handler. If you use AM_SPACE, the mask - is implicitly set equal to the logical NOT of the mask specified in - the AM_SPACE macro. If you use AM_MIRROR, below, the mask is ANDed - implicitly with the logical NOT of the mirror. The mask specified - by this macro is ANDed against any implicit masks. + through to the read/write handler. If you use AM_MIRROR, below, the + mask is ANDed implicitly with the logical NOT of the mirror. The + mask specified by this macro is ANDed against any implicit masks. AM_MIRROR(mirror) Specifies mirror addresses for the given bucket. The current bucket @@ -171,7 +164,7 @@ struct _memory_block UINT8 cpunum; /* which CPU are we associated with? */ UINT8 spacenum; /* which address space are we associated with? */ UINT8 isallocated; /* did we allocate this ourselves? */ - offs_t start, end; /* start/end or match/mask for verifying a match */ + offs_t start, end; /* start/end for verifying a match */ UINT8 * data; /* pointer to the data for this block */ }; @@ -382,12 +375,11 @@ static void init_cpudata(void); static void init_addrspace(UINT8 cpunum, UINT8 spacenum); static void preflight_memory(void); static void populate_memory(void); -static void install_mem_handler_private(addrspace_data *space, int iswrite, int databits, int ismatchmask, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name); -static void install_mem_handler(addrspace_data *space, int iswrite, int databits, int ismatchmask, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name); +static void install_mem_handler_private(addrspace_data *space, int iswrite, int databits, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name); +static void install_mem_handler(addrspace_data *space, int iswrite, int databits, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name); static genf *assign_dynamic_bank(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mirror, int isfixed, int ismasked); static UINT8 get_handler_index(handler_data *table, void *object, genf *handler, const char *handler_name, offs_t start, offs_t end, offs_t mask); static void populate_table_range(addrspace_data *space, int iswrite, offs_t start, offs_t stop, UINT8 handler); -static void populate_table_match(addrspace_data *space, int iswrite, offs_t matchval, offs_t matchmask, UINT8 handler); static UINT8 allocate_subtable(table_data *tabledata); static void reallocate_subtable(table_data *tabledata, UINT8 subentry); static int merge_subtables(table_data *tabledata); @@ -955,7 +947,7 @@ void *_memory_install_read_handler(int cpunum, int spacenum, offs_t start, offs_ addrspace_data *space = &cpudata[cpunum].space[spacenum]; if (handler >= STATIC_COUNT) fatalerror("fatal: can only use static banks with memory_install_read_handler()"); - install_mem_handler(space, 0, space->dbits, 0, start, end, mask, mirror, (genf *)(FPTR)handler, 0, Machine, handler_name); + install_mem_handler(space, 0, space->dbits, start, end, mask, mirror, (genf *)(FPTR)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -963,7 +955,7 @@ void *_memory_install_read_handler(int cpunum, int spacenum, offs_t start, offs_ UINT8 *_memory_install_read8_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 8, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 0, 8, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -971,7 +963,7 @@ UINT8 *_memory_install_read8_handler(int cpunum, int spacenum, offs_t start, off UINT16 *_memory_install_read16_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 16, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 0, 16, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -979,7 +971,7 @@ UINT16 *_memory_install_read16_handler(int cpunum, int spacenum, offs_t start, o UINT32 *_memory_install_read32_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read32_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 32, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 0, 32, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -987,7 +979,7 @@ UINT32 *_memory_install_read32_handler(int cpunum, int spacenum, offs_t start, o UINT64 *_memory_install_read64_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read64_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 64, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 0, 64, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -1003,7 +995,7 @@ void *_memory_install_write_handler(int cpunum, int spacenum, offs_t start, offs addrspace_data *space = &cpudata[cpunum].space[spacenum]; if (handler >= STATIC_COUNT) fatalerror("fatal: can only use static banks with memory_install_write_handler()"); - install_mem_handler(space, 1, space->dbits, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 1, space->dbits, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, start)); } @@ -1011,7 +1003,7 @@ void *_memory_install_write_handler(int cpunum, int spacenum, offs_t start, offs UINT8 *_memory_install_write8_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, write8_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 8, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 1, 8, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, start)); } @@ -1019,7 +1011,7 @@ UINT8 *_memory_install_write8_handler(int cpunum, int spacenum, offs_t start, of UINT16 *_memory_install_write16_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, write16_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 16, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 1, 16, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, start)); } @@ -1027,7 +1019,7 @@ UINT16 *_memory_install_write16_handler(int cpunum, int spacenum, offs_t start, UINT32 *_memory_install_write32_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, write32_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 32, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 1, 32, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, start)); } @@ -1035,7 +1027,7 @@ UINT32 *_memory_install_write32_handler(int cpunum, int spacenum, offs_t start, UINT64 *_memory_install_write64_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, write64_machine_func handler, const char *handler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 64, 0, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); + install_mem_handler(space, 1, 64, start, end, mask, mirror, (genf *)handler, 0, Machine, handler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, start)); } @@ -1051,8 +1043,8 @@ void *_memory_install_readwrite_handler(int cpunum, int spacenum, offs_t start, addrspace_data *space = &cpudata[cpunum].space[spacenum]; if (rhandler >= STATIC_COUNT || whandler >= STATIC_COUNT) fatalerror("fatal: can only use static banks with memory_install_readwrite_handler()"); - install_mem_handler(space, 0, space->dbits, 0, start, end, mask, mirror, (genf *)(FPTR)rhandler, 0, Machine, rhandler_name); - install_mem_handler(space, 1, space->dbits, 0, start, end, mask, mirror, (genf *)(FPTR)whandler, 0, Machine, whandler_name); + install_mem_handler(space, 0, space->dbits, start, end, mask, mirror, (genf *)(FPTR)rhandler, 0, Machine, rhandler_name); + install_mem_handler(space, 1, space->dbits, start, end, mask, mirror, (genf *)(FPTR)whandler, 0, Machine, whandler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -1060,8 +1052,8 @@ void *_memory_install_readwrite_handler(int cpunum, int spacenum, offs_t start, UINT8 *_memory_install_readwrite8_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read8_machine_func rhandler, write8_machine_func whandler, const char *rhandler_name, const char *whandler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 8, 0, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); - install_mem_handler(space, 1, 8, 0, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); + install_mem_handler(space, 0, 8, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); + install_mem_handler(space, 1, 8, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -1069,8 +1061,8 @@ UINT8 *_memory_install_readwrite8_handler(int cpunum, int spacenum, offs_t start UINT16 *_memory_install_readwrite16_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read16_machine_func rhandler, write16_machine_func whandler, const char *rhandler_name, const char *whandler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 16, 0, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); - install_mem_handler(space, 1, 16, 0, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); + install_mem_handler(space, 0, 16, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); + install_mem_handler(space, 1, 16, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -1078,8 +1070,8 @@ UINT16 *_memory_install_readwrite16_handler(int cpunum, int spacenum, offs_t sta UINT32 *_memory_install_readwrite32_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read32_machine_func rhandler, write32_machine_func whandler, const char *rhandler_name, const char *whandler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 32, 0, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); - install_mem_handler(space, 1, 32, 0, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); + install_mem_handler(space, 0, 32, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); + install_mem_handler(space, 1, 32, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } @@ -1087,112 +1079,14 @@ UINT32 *_memory_install_readwrite32_handler(int cpunum, int spacenum, offs_t sta UINT64 *_memory_install_readwrite64_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read64_machine_func rhandler, write64_machine_func whandler, const char *rhandler_name, const char *whandler_name) { addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 64, 0, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); - install_mem_handler(space, 1, 64, 0, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); + install_mem_handler(space, 0, 64, start, end, mask, mirror, (genf *)rhandler, 0, Machine, rhandler_name); + install_mem_handler(space, 1, 64, start, end, mask, mirror, (genf *)whandler, 0, Machine, whandler_name); mem_dump(); return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, start)); } /*------------------------------------------------- - memory_install_readX_matchmask_handler - - install dynamic match/mask read handler for - X-bit case --------------------------------------------------*/ - -void *_memory_install_read_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, FPTR handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - if (handler >= STATIC_COUNT) - fatalerror("fatal: can only use static banks with memory_install_read_matchmask_handler()"); - install_mem_handler(space, 0, space->dbits, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, matchval)); -} - -UINT8 *_memory_install_read8_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read8_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 8, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, matchval)); -} - -UINT16 *_memory_install_read16_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read16_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 16, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, matchval)); -} - -UINT32 *_memory_install_read32_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read32_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 32, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, matchval)); -} - -UINT64 *_memory_install_read64_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read64_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 0, 64, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 0, SPACE_SHIFT(space, matchval)); -} - - -/*------------------------------------------------- - memory_install_writeX_matchmask_handler - - install dynamic match/mask write handler for - X-bit case --------------------------------------------------*/ - -void *_memory_install_write_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, FPTR handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - if (handler >= STATIC_COUNT) - fatalerror("fatal: can only use static banks with memory_install_write_matchmask_handler()"); - install_mem_handler(space, 1, space->dbits, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, matchval)); -} - -UINT8 *_memory_install_write8_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write8_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 8, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, matchval)); -} - -UINT16 *_memory_install_write16_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write16_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 16, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, matchval)); -} - -UINT32 *_memory_install_write32_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write32_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 32, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, matchval)); -} - -UINT64 *_memory_install_write64_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write64_machine_func handler, const char *handler_name) -{ - addrspace_data *space = &cpudata[cpunum].space[spacenum]; - install_mem_handler(space, 1, 64, 1, matchval, maskval, mask, mirror, (genf *)handler, 0, Machine, handler_name); - mem_dump(); - return memory_find_base(cpunum, spacenum, 1, SPACE_SHIFT(space, matchval)); -} - - -/*------------------------------------------------- construct_address_map - build address map -------------------------------------------------*/ @@ -1251,7 +1145,7 @@ static void init_cpudata(void) given address space in a standard fashion -------------------------------------------------*/ -INLINE void adjust_addresses(addrspace_data *space, int ismatchmask, offs_t *start, offs_t *end, offs_t *mask, offs_t *mirror) +INLINE void adjust_addresses(addrspace_data *space, offs_t *start, offs_t *end, offs_t *mask, offs_t *mirror) { /* adjust start/end/mask values */ if (*mask == 0) @@ -1264,7 +1158,7 @@ INLINE void adjust_addresses(addrspace_data *space, int ismatchmask, offs_t *sta /* adjust to byte values */ *mask = SPACE_SHIFT(space, *mask); *start = SPACE_SHIFT(space, *start); - *end = ismatchmask ? SPACE_SHIFT(space, *end) : SPACE_SHIFT_END(space, *end); + *end = SPACE_SHIFT_END(space, *end); *mirror = SPACE_SHIFT(space, *mirror); } @@ -1336,7 +1230,7 @@ static void init_addrspace(UINT8 cpunum, UINT8 spacenum) memcpy(space->adjmap, space->map, sizeof(space->map[0]) * MAX_ADDRESS_MAP_SIZE * 2); for (map = space->adjmap; !IS_AMENTRY_END(map); map++) if (!IS_AMENTRY_EXTENDED(map)) - adjust_addresses(space, IS_AMENTRY_MATCH_MASK(map), &map->start, &map->end, &map->mask, &map->mirror); + adjust_addresses(space, &map->start, &map->end, &map->mask, &map->mirror); /* validate adjusted addresses against implicit regions */ for (map = space->adjmap; !IS_AMENTRY_END(map); map++) @@ -1504,7 +1398,6 @@ static void populate_memory(void) for (map--; map >= space->map; map--) if (!IS_AMENTRY_EXTENDED(map)) { - int ismatchmask = ((map->flags & AM_FLAGS_MATCH_MASK) != 0); int isfixed = (map->memory != NULL) || (map->share != 0); if (map->read.handler != NULL) @@ -1516,7 +1409,7 @@ static void populate_memory(void) if (object == NULL) fatalerror("Unidentified object in memory map: type=%s tag=%s\n", devtype_name(map->read_devtype), map->read_devtag); } - install_mem_handler_private(space, 0, space->dbits, ismatchmask, map->start, map->end, map->mask, map->mirror, map->read.handler, isfixed, object, map->read_name); + install_mem_handler_private(space, 0, space->dbits, map->start, map->end, map->mask, map->mirror, map->read.handler, isfixed, object, map->read_name); } if (map->write.handler != NULL) { @@ -1527,7 +1420,7 @@ static void populate_memory(void) if (object == NULL) fatalerror("Unidentified object in memory map: type=%s tag=%s\n", devtype_name(map->write_devtype), map->write_devtag); } - install_mem_handler_private(space, 1, space->dbits, ismatchmask, map->start, map->end, map->mask, map->mirror, map->write.handler, isfixed, object, map->write_name); + install_mem_handler_private(space, 1, space->dbits, map->start, map->end, map->mask, map->mirror, map->write.handler, isfixed, object, map->write_name); } } } @@ -1542,7 +1435,7 @@ static void populate_memory(void) banks to dynamically assigned banks -------------------------------------------------*/ -static void install_mem_handler_private(addrspace_data *space, int iswrite, int databits, int ismatchmask, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name) +static void install_mem_handler_private(addrspace_data *space, int iswrite, int databits, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name) { /* translate ROM to RAM/UNMAP here */ if (HANDLER_IS_ROM(handler)) @@ -1558,7 +1451,7 @@ static void install_mem_handler_private(addrspace_data *space, int iswrite, int offs_t temp_mirror = mirror; /* adjust the incoming addresses (temporarily) */ - adjust_addresses(space, ismatchmask, &temp_start, &temp_end, &temp_mask, &temp_mirror); + adjust_addresses(space, &temp_start, &temp_end, &temp_mask, &temp_mirror); /* assign a bank to the adjusted addresses */ handler = (genf *)assign_dynamic_bank(space->cpunum, space->spacenum, temp_start, temp_end, temp_mirror, isfixed, ismasked); @@ -1567,7 +1460,7 @@ static void install_mem_handler_private(addrspace_data *space, int iswrite, int } /* then do a normal installation */ - install_mem_handler(space, iswrite, databits, ismatchmask, start, end, mask, mirror, handler, isfixed, object, handler_name); + install_mem_handler(space, iswrite, databits, start, end, mask, mirror, handler, isfixed, object, handler_name); } @@ -1576,7 +1469,7 @@ static void install_mem_handler_private(addrspace_data *space, int iswrite, int memory operations -------------------------------------------------*/ -static void install_mem_handler(addrspace_data *space, int iswrite, int databits, int ismatchmask, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name) +static void install_mem_handler(addrspace_data *space, int iswrite, int databits, offs_t start, offs_t end, offs_t mask, offs_t mirror, genf *handler, int isfixed, void *object, const char *handler_name) { offs_t lmirrorbit[LEVEL2_BITS], lmirrorbits, hmirrorbit[32 - LEVEL2_BITS], hmirrorbits, lmirrorcount, hmirrorcount; table_data *tabledata = iswrite ? &space->write : &space->read; @@ -1617,7 +1510,7 @@ static void install_mem_handler(addrspace_data *space, int iswrite, int databits } /* adjust the incoming addresses */ - adjust_addresses(space, ismatchmask, &start, &end, &mask, &mirror); + adjust_addresses(space, &start, &end, &mask, &mirror); /* if this ended up a bank handler, tag it for reads or writes */ if (HANDLER_IS_BANK(handler)) @@ -1688,10 +1581,7 @@ static void install_mem_handler(addrspace_data *space, int iswrite, int databits lmirrorbase |= lmirrorbit[i]; /* populate the tables */ - if (!ismatchmask) - populate_table_range(space, iswrite, start + lmirrorbase, end + lmirrorbase, idx); - else - populate_table_match(space, iswrite, start + lmirrorbase, end + lmirrorbase, idx); + populate_table_range(space, iswrite, start + lmirrorbase, end + lmirrorbase, idx); } } @@ -1841,62 +1731,6 @@ static void populate_table_range(addrspace_data *space, int iswrite, offs_t star /*------------------------------------------------- - populate_table_match - assign a memory handler - to a range of addresses --------------------------------------------------*/ - -static void populate_table_match(addrspace_data *space, int iswrite, offs_t matchval, offs_t matchmask, UINT8 handler) -{ - table_data *tabledata = iswrite ? &space->write : &space->read; - int lowermask, lowermatch; - int uppermask, uppermatch; - int l1index, l2index; - - /* clear out any ignored bits in the matchval */ - matchval &= matchmask; - - /* compute the lower half of the match/mask pair */ - lowermask = matchmask & ((1<<LEVEL2_BITS)-1); - lowermatch = matchval & ((1<<LEVEL2_BITS)-1); - - /* compute the upper half of the match/mask pair */ - uppermask = matchmask >> LEVEL2_BITS; - uppermatch = matchval >> LEVEL2_BITS; - - /* if the lower bits of the mask are all 0, we can work exclusively at the top level */ - if (lowermask == 0) - { - /* loop over top level matches */ - for (l1index = 0; l1index <= (space->mask >> LEVEL2_BITS); l1index++) - if ((l1index & uppermatch) == uppermask) - { - /* if we have a subtable here, release it */ - if (tabledata->table[l1index] >= SUBTABLE_BASE) - release_subtable(tabledata, tabledata->table[l1index]); - tabledata->table[l1index] = handler; - } - } - - /* okay, we need to work at both levels */ - else - { - /* loop over top level matches */ - for (l1index = 0; l1index <= (space->mask >> LEVEL2_BITS); l1index++) - if ((l1index & uppermatch) == uppermask) - { - UINT8 *subtable = open_subtable(tabledata, l1index); - - /* now loop over lower level matches */ - for (l2index = 0; l2index < (1 << LEVEL2_BITS); l2index++) - if ((l2index & lowermask) == lowermatch) - subtable[l2index] = handler; - close_subtable(tabledata, l1index); - } - } -} - - -/*------------------------------------------------- allocate_subtable - allocate a fresh subtable and set its usecount to 1 -------------------------------------------------*/ @@ -2149,12 +1983,7 @@ static void allocate_memory(void) /* we do this to make sure they are found by memory_find_base first */ for (map = space->adjmap; map && !IS_AMENTRY_END(map); map++) if (!IS_AMENTRY_EXTENDED(map) && map->memory != NULL) - { - if (!IS_AMENTRY_MATCH_MASK(map)) - allocate_memory_block(cpunum, spacenum, map->start, map->end, map->memory); - else - allocate_memory_block(cpunum, spacenum, map->start, map->start + map->mask, map->memory); - } + allocate_memory_block(cpunum, spacenum, map->start, map->end, map->memory); /* loop over all blocks just allocated and assign pointers from them */ for (i = start_count; i < memory_block_count; i++) @@ -2173,10 +2002,7 @@ static void allocate_memory(void) /* work in MEMORY_BLOCK_SIZE-sized chunks */ curstart = unassigned->start / MEMORY_BLOCK_SIZE; - if (!IS_AMENTRY_MATCH_MASK(unassigned)) - curend = unassigned->end / MEMORY_BLOCK_SIZE; - else - curend = (unassigned->start + unassigned->mask) / MEMORY_BLOCK_SIZE; + curend = unassigned->end / MEMORY_BLOCK_SIZE; /* loop while we keep finding unassigned blocks in neighboring MEMORY_BLOCK_SIZE chunks */ do @@ -2191,10 +2017,7 @@ static void allocate_memory(void) /* get block start/end blocks for this block */ blockstart = map->start / MEMORY_BLOCK_SIZE; - if (!IS_AMENTRY_MATCH_MASK(map)) - blockend = map->end / MEMORY_BLOCK_SIZE; - else - blockend = (map->start + map->mask) / MEMORY_BLOCK_SIZE; + blockend = map->end / MEMORY_BLOCK_SIZE; /* if we intersect or are adjacent, adjust the start/end */ if (blockstart <= curend + 1 && blockend >= curstart - 1) @@ -2304,24 +2127,10 @@ static address_map *assign_intersecting_blocks(addrspace_data *space, offs_t sta } /* otherwise, look for a match in this block */ - else + else if (map->start >= start && map->end <= end) { - if (!IS_AMENTRY_MATCH_MASK(map)) - { - if (map->start >= start && map->end <= end) - { - map->memory = base + (map->start - start); - VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", map->start, map->end, start, end, map->memory)); - } - } - else - { - if (map->start >= start && map->start + map->mask <= end) - { - map->memory = base + (map->start - start); - VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", map->start, map->end, start, end, map->memory)); - } - } + map->memory = base + (map->start - start); + VPRINTF(("memory range %08X-%08X -> found in block from %08X-%08X [%p]\n", map->start, map->end, start, end, map->memory)); } } @@ -2381,13 +2190,8 @@ static void find_memory(void) /* assign base/size values */ if (map->base != NULL) *map->base = map->memory; - if (map->size) - { - if (!IS_AMENTRY_MATCH_MASK(map)) - *map->size = map->end - map->start + 1; - else - *map->size = map->mask + 1; - } + if (map->size != NULL) + *map->size = map->end - map->start + 1; } } @@ -2436,21 +2240,10 @@ static void *memory_find_base(int cpunum, int spacenum, int readwrite, offs_t of if (!IS_AMENTRY_EXTENDED(map)) { offs_t maskoffs = offset & map->mask; - if (!IS_AMENTRY_MATCH_MASK(map)) + if (maskoffs >= map->start && maskoffs <= map->end) { - if (maskoffs >= map->start && maskoffs <= map->end) - { - VPRINTF(("found in entry %08X-%08X [%p]\n", map->start, map->end, (UINT8 *)map->memory + (maskoffs - map->start))); - return (UINT8 *)map->memory + (maskoffs - map->start); - } - } - else - { - if ((maskoffs & map->end) == map->start) - { - VPRINTF(("found in entry %08X-%08X [%p]\n", map->start, map->end, (UINT8 *)map->memory + (maskoffs - map->start))); - return (UINT8 *)map->memory + (maskoffs - map->start); - } + VPRINTF(("found in entry %08X-%08X [%p]\n", map->start, map->end, (UINT8 *)map->memory + (maskoffs - map->start))); + return (UINT8 *)map->memory + (maskoffs - map->start); } } diff --git a/src/emu/memory.h b/src/emu/memory.h index 08ab44068f5..65fab200bb3 100644 --- a/src/emu/memory.h +++ b/src/emu/memory.h @@ -129,8 +129,7 @@ struct _data_accessors /* ----- definitions for the flags in the address maps ----- */ #define AM_FLAGS_EXTENDED 0x01 /* this is an extended entry with the below flags in the start field */ -#define AM_FLAGS_MATCH_MASK 0x02 /* this entry should have the start/end pair treated as a match/mask pair */ -#define AM_FLAGS_END 0x04 /* this is the terminating entry in the array */ +#define AM_FLAGS_END 0x02 /* this is the terminating entry in the array */ /* ----- definitions for the extended flags in the address maps ----- */ #define AMEF_SPECIFIES_SPACE 0x00000001 /* set if the address space is specified */ @@ -568,7 +567,7 @@ typedef struct _address_map address_map; struct _address_map { UINT32 flags; /* flags and additional info about this entry */ - offs_t start, end; /* start/end (or mask/match) values */ + offs_t start, end; /* start/end values */ offs_t mirror; /* mirror bits */ offs_t mask; /* mask bits */ read_handlers read; /* read handler callback */ @@ -653,12 +652,6 @@ address_map *construct_map_##_name(running_machine *machine, address_map *map) map->start = (_start); \ map->end = (_end); \ -#define AM_SPACE(_match,_mask) \ - map++; \ - map->flags = AM_FLAGS_MATCH_MASK; \ - map->start = (_match); \ - map->end = (_mask); \ - /* ----- these are optional entries after each map entry ----- */ #define AM_MASK(_mask) \ map->mask = (_mask); \ @@ -731,7 +724,6 @@ address_map *construct_map_##_name(running_machine *machine, address_map *map) /* ----- macros for identifying address map struct markers ----- */ #define IS_AMENTRY_EXTENDED(ma) (((ma)->flags & AM_FLAGS_EXTENDED) != 0) -#define IS_AMENTRY_MATCH_MASK(ma) (((ma)->flags & AM_FLAGS_MATCH_MASK) != 0) #define IS_AMENTRY_END(ma) (((ma)->flags & AM_FLAGS_END) != 0) #define AM_EXTENDED_FLAGS(ma) ((ma)->start) @@ -1001,17 +993,6 @@ UINT16 * _memory_install_readwrite16_handler(int cpunum, int spacenum, offs_t st UINT32 * _memory_install_readwrite32_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read32_machine_func rhandler, write32_machine_func whandler, const char *rhandler_name, const char *whandler_name); UINT64 * _memory_install_readwrite64_handler(int cpunum, int spacenum, offs_t start, offs_t end, offs_t mask, offs_t mirror, read64_machine_func rhandler, write64_machine_func whandler, const char *rhandler_name, const char *whandler_name); -void * _memory_install_read_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, FPTR handler, const char *handler_name); -UINT8 * _memory_install_read8_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read8_machine_func handler, const char *handler_name); -UINT16 * _memory_install_read16_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read16_machine_func handler, const char *handler_name); -UINT32 * _memory_install_read32_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read32_machine_func handler, const char *handler_name); -UINT64 * _memory_install_read64_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, read64_machine_func handler, const char *handler_name); -void * _memory_install_write_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, FPTR handler, const char *handler_name); -UINT8 * _memory_install_write8_matchmask_handler (int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write8_machine_func handler, const char *handler_name); -UINT16 * _memory_install_write16_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write16_machine_func handler, const char *handler_name); -UINT32 * _memory_install_write32_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write32_machine_func handler, const char *handler_name); -UINT64 * _memory_install_write64_matchmask_handler(int cpunum, int spacenum, offs_t matchval, offs_t maskval, offs_t mask, offs_t mirror, write64_machine_func handler, const char *handler_name); - /* ----- memory debugging ----- */ void memory_dump(FILE *file); const char *memory_get_handler_string(int read0_or_write1, int cpunum, int spacenum, offs_t offset); @@ -1089,28 +1070,6 @@ extern address_space active_address_space[]; /* address spaces */ #define memory_install_readwrite64_handler(cpu, space, start, end, mask, mirror, rhandler, whandler) \ _memory_install_readwrite64_handler(cpu, space, start, end, mask, mirror, rhandler, whandler, #rhandler, #whandler) -#define memory_install_read_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_read_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_read8_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_read8_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_read16_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_read16_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_read32_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_read32_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_read64_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_read64_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) - -#define memory_install_write_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_write_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_write8_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_write8_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_write16_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_write16_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_write32_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_write32_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) -#define memory_install_write64_matchmask_handler(cpu, space, start, end, mask, mirror, handler) \ - _memory_install_write64_matchmask_handler(cpu, space, start, end, mask, mirror, handler, #handler) - /* ----- generic memory access ----- */ INLINE UINT8 program_read_byte (offs_t offset) { return (*active_address_space[ADDRESS_SPACE_PROGRAM].accessors->read_byte)(offset); } INLINE UINT16 program_read_word (offs_t offset) { return (*active_address_space[ADDRESS_SPACE_PROGRAM].accessors->read_word)(offset); } diff --git a/src/emu/validity.c b/src/emu/validity.c index 76c1bbb7915..1bca37fc5fc 100644 --- a/src/emu/validity.c +++ b/src/emu/validity.c @@ -683,9 +683,8 @@ static int validate_cpu(int drivnum, const machine_config *config, const UINT32 for ( ; !IS_AMENTRY_END(map); map++) if (!IS_AMENTRY_EXTENDED(map)) { - int ismatchmask = ((map->flags & AM_FLAGS_MATCH_MASK) != 0); UINT32 start = SPACE_SHIFT(map->start); - UINT32 end = ismatchmask ? SPACE_SHIFT(map->end) : SPACE_SHIFT_END(map->end); + UINT32 end = SPACE_SHIFT_END(map->end); /* look for inverted start/end pairs */ if (end < start) @@ -725,13 +724,6 @@ static int validate_cpu(int drivnum, const machine_config *config, const UINT32 } } - /* If this is a match/mask, make sure the match bits are present in the mask */ - if (ismatchmask && (start & end) != start) - { - mame_printf_error("%s: %s CPU %d space %d memory map entry match %X contains bits not in mask %X for region %d\n", driver->source_file, driver->name, cpunum, spacenum, map->start, map->end, map->region); - error = TRUE; - } - /* make sure all devices exist */ if (map->read_devtype != NULL && device_list_find_by_tag(config->devicelist, map->read_devtype, map->read_devtag) == NULL) { diff --git a/src/mame/drivers/crbaloon.c b/src/mame/drivers/crbaloon.c index 959682a4a96..517eeba3c98 100644 --- a/src/mame/drivers/crbaloon.c +++ b/src/mame/drivers/crbaloon.c @@ -220,7 +220,8 @@ static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 ) ADDRESS_MAP_FLAGS( AMEF_ABITS(4) ) AM_RANGE(0x00, 0x00) AM_MIRROR(0x0c) AM_READ(port_tag_to_handler8("DSW0")) AM_RANGE(0x01, 0x01) AM_MIRROR(0x0c) AM_READ(port_tag_to_handler8("IN0")) -/* AM_SPACE(0x02, 0x03) AM_READ(pc3259_r) crashes if not at the end */ + AM_RANGE(0x02, 0x02) AM_MIRROR(0x0c) AM_MASK(0x0c) AM_READ(pc3259_r) +// AM_SPACE(0x02, 0x03) AM_READ(pc3259_r) crashes if not at the end AM_RANGE(0x03, 0x03) AM_MIRROR(0x0c) AM_READ(port_tag_to_handler8("IN1")) AM_RANGE(0x00, 0x00) AM_WRITE(MWA8_NOP) /* not connected */ @@ -232,8 +233,6 @@ static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x0c, 0x0c) AM_WRITE(MWA8_NOP) /* MSK - to PC3259 */ AM_RANGE(0x0d, 0x0d) AM_WRITE(MWA8_NOP) /* schematics has it in a box marked "NOT USE" */ AM_RANGE(0x0e, 0x0f) AM_WRITE(MWA8_NOP) - - AM_SPACE(0x02, 0x03) AM_READ(pc3259_r) ADDRESS_MAP_END diff --git a/src/mame/drivers/ddenlovr.c b/src/mame/drivers/ddenlovr.c index a945115611a..107213bafc3 100644 --- a/src/mame/drivers/ddenlovr.c +++ b/src/mame/drivers/ddenlovr.c @@ -2602,8 +2602,8 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( mjchuuka_writeport, ADDRESS_SPACE_IO, 8 ) // 16 bit I/O AM_RANGE(0x1c, 0x1c) AM_MIRROR(0xff00) AM_WRITE( hanakanz_rombank_w ) - AM_SPACE(0x20, 0xff) AM_WRITE( mjchuuka_blitter_w ) - AM_SPACE(0x21, 0xff) AM_WRITE( mjchuuka_palette_w ) + AM_RANGE(0x20, 0x20) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE( mjchuuka_blitter_w ) + AM_RANGE(0x21, 0x21) AM_MIRROR(0xff00) AM_MASK(0xff00) AM_WRITE( mjchuuka_palette_w ) AM_RANGE(0x40, 0x40) AM_MIRROR(0xff00) AM_WRITE( mjchuuka_coincounter_w ) AM_RANGE(0x41, 0x41) AM_MIRROR(0xff00) AM_WRITE( hanakanz_keyb_w ) AM_RANGE(0x80, 0x80) AM_MIRROR(0xff00) AM_WRITE( OKIM6295_data_0_w ) diff --git a/src/mame/drivers/neogeo.c b/src/mame/drivers/neogeo.c index a3e1f0d497c..35a14207c72 100644 --- a/src/mame/drivers/neogeo.c +++ b/src/mame/drivers/neogeo.c @@ -1085,10 +1085,10 @@ static ADDRESS_MAP_START( auido_io_map, ADDRESS_SPACE_IO, 8 ) AM_RANGE(0x06, 0x06) AM_MIRROR(0xff00) AM_READWRITE(YM2610_status_port_0_B_r, YM2610_control_port_0_B_w) AM_RANGE(0x07, 0x07) AM_MIRROR(0xff00) AM_WRITE(YM2610_data_port_0_B_w) AM_RANGE(0x08, 0x08) AM_MIRROR(0xff00) /* write - NMI enable / acknowledge? (the data written doesn't matter) */ - AM_SPACE(0x08, 0x0f) AM_READ(audio_cpu_bank_select_f000_f7ff_r) - AM_SPACE(0x09, 0x0f) AM_READ(audio_cpu_bank_select_e000_efff_r) - AM_SPACE(0x0a, 0x0f) AM_READ(audio_cpu_bank_select_c000_dfff_r) - AM_SPACE(0x0b, 0x0f) AM_READ(audio_cpu_bank_select_8000_bfff_r) + AM_RANGE(0x08, 0x08) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_f000_f7ff_r) + AM_RANGE(0x09, 0x09) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_e000_efff_r) + AM_RANGE(0x0a, 0x0a) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_c000_dfff_r) + AM_RANGE(0x0b, 0x0b) AM_MIRROR(0xfff0) AM_MASK(0xfff0) AM_READ(audio_cpu_bank_select_8000_bfff_r) AM_RANGE(0x0c, 0x0c) AM_MIRROR(0xff00) AM_WRITE(audio_result_w) AM_RANGE(0x18, 0x18) AM_MIRROR(0xff00) /* write - NMI disable? (the data written doesn't matter) */ ADDRESS_MAP_END |
