mirror of
https://github.com/holub/mame
synced 2025-04-26 02:07:14 +03:00
WIP check-in. Things work now, but I'm still working on the code.
Converted address maps to tokens. Changed the address_map structure to house global map-wide information and hung a list of entries off of it corresponding to each address range. Introduced new functions address_map_alloc() and address_map_free() to build/destroy these structures. Updated all code as necessary. Fixed several instances of porttagtohandler*() in the address maps. Drivers should use AM_READ_PORT() macros instead. ADDRESS_MAP_EXTERN() now is required to specify the number of databits, just like ADDRESS_MAP_START. Removed ADDRESS_MAP_FLAGS() grossness. There are now three new macros which replace its former usage. ADDRESS_MAP_GLOBAL_MASK(mask) specifies a global address-space-wide mask on all addresses. Useful for cases where one or more address lines simply are not used at all. And ADDRESS_MAP_UNMAP_LOW/HIGH specifies the behavior of unmapped reads (do they come back as 0 or ~0). Changed internal memory mapping behavior to keep only a single address map and store the byte-adjusted values next in the address map entries rather than maintaining two separate maps. Many other small internal changes/cleanups.
This commit is contained in:
parent
ac9778cdb0
commit
ddfc0c3259
@ -410,7 +410,7 @@ struct SearchRegion
|
||||
UINT8 flags;
|
||||
|
||||
UINT8 * cachedPointer;
|
||||
const address_map
|
||||
const address_map_entry
|
||||
* writeHandler;
|
||||
|
||||
UINT8 * first;
|
||||
@ -8922,7 +8922,7 @@ static void RestoreRegionBackup(SearchRegion * region)
|
||||
|
||||
static UINT8 DefaultEnableRegion(running_machine *machine, SearchRegion * region, SearchInfo * info)
|
||||
{
|
||||
write8_machine_func handler = region->writeHandler->write.handler8;
|
||||
write8_machine_func handler = region->writeHandler->write.mhandler8;
|
||||
FPTR handlerAddress = (FPTR)handler;
|
||||
|
||||
switch(info->searchSpeed)
|
||||
@ -8939,7 +8939,7 @@ static UINT8 DefaultEnableRegion(running_machine *machine, SearchRegion * region
|
||||
}
|
||||
#endif
|
||||
|
||||
if( (handler == MWA8_RAM) && (!region->writeHandler->base))
|
||||
if( (handler == MWA8_RAM) && (!region->writeHandler->baseptr))
|
||||
return 1;
|
||||
|
||||
#ifndef MESS
|
||||
@ -8981,7 +8981,7 @@ static UINT8 DefaultEnableRegion(running_machine *machine, SearchRegion * region
|
||||
if( (handler == MWA8_NOP) || (handler == MWA8_ROM))
|
||||
return 0;
|
||||
|
||||
if( (handlerAddress > STATIC_COUNT) && (!region->writeHandler->base))
|
||||
if( (handlerAddress > STATIC_COUNT) && (!region->writeHandler->baseptr))
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
@ -9155,37 +9155,31 @@ static void BuildSearchRegions(running_machine *machine, SearchInfo * info)
|
||||
if(info->targetIdx < cpu_gettotalcpu())
|
||||
{
|
||||
const address_map * map = NULL;
|
||||
const address_map_entry * entry;
|
||||
SearchRegion * traverse;
|
||||
int count = 0;
|
||||
|
||||
map = memory_get_map(info->targetIdx, ADDRESS_SPACE_PROGRAM);
|
||||
|
||||
while(!IS_AMENTRY_END(map))
|
||||
{
|
||||
if(!IS_AMENTRY_EXTENDED(map) && map->write.handler)
|
||||
for (entry = map->entrylist; entry != NULL; entry = entry->next)
|
||||
if (entry->write.handler)
|
||||
count++;
|
||||
|
||||
map++;
|
||||
}
|
||||
|
||||
info->regionList = calloc(sizeof(SearchRegion), count);
|
||||
info->regionListLength = count;
|
||||
traverse = info->regionList;
|
||||
|
||||
map = memory_get_map(info->targetIdx, ADDRESS_SPACE_PROGRAM);
|
||||
|
||||
while(!IS_AMENTRY_END(map))
|
||||
for (entry = map->entrylist; entry != NULL; entry = entry->next)
|
||||
{
|
||||
if(!IS_AMENTRY_EXTENDED(map) && map->write.handler)
|
||||
if (entry->write.handler)
|
||||
{
|
||||
UINT32 length = (map->end - map->start) + 1;
|
||||
UINT32 length = (entry->end - entry->start) + 1;
|
||||
|
||||
traverse->address = map->start;
|
||||
traverse->address = entry->start;
|
||||
traverse->length = length;
|
||||
|
||||
traverse->targetIdx = info->targetIdx;
|
||||
traverse->targetType = info->targetType;
|
||||
traverse->writeHandler = map;
|
||||
traverse->writeHandler = entry;
|
||||
|
||||
traverse->first = NULL;
|
||||
traverse->last = NULL;
|
||||
@ -9200,8 +9194,6 @@ static void BuildSearchRegions(running_machine *machine, SearchInfo * info)
|
||||
|
||||
traverse++;
|
||||
}
|
||||
|
||||
map++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -10475,23 +10467,17 @@ static void DoSearch(SearchInfo * search)
|
||||
static UINT8 ** LookupHandlerMemory(UINT8 cpu, UINT32 address, UINT32 * outRelativeAddress)
|
||||
{
|
||||
const address_map * map = memory_get_map(cpu, ADDRESS_SPACE_PROGRAM);
|
||||
|
||||
while(!IS_AMENTRY_END(map))
|
||||
{
|
||||
if(!IS_AMENTRY_EXTENDED(map) && map->write.handler)
|
||||
const address_map_entry *entry;
|
||||
|
||||
for (entry = map->entrylist; entry != NULL; entry = entry->next)
|
||||
if (entry->write.handler != NULL && (address >= entry->start) && (address <= entry->end))
|
||||
{
|
||||
if((address >= map->start) && (address <= map->end))
|
||||
{
|
||||
if(outRelativeAddress)
|
||||
*outRelativeAddress = address - map->start;
|
||||
if(outRelativeAddress)
|
||||
*outRelativeAddress = address - entry->start;
|
||||
|
||||
return (UINT8 **)map->base;
|
||||
}
|
||||
return (UINT8 **)entry->baseptr;
|
||||
}
|
||||
|
||||
map++;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -356,7 +356,7 @@ void cop410_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cop410_ICount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA:
|
||||
info->internal_map = construct_map_cop410_RAM; break;
|
||||
info->internal_map8 = address_map_cop410_RAM; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "COP410"); break;
|
||||
|
@ -385,7 +385,7 @@ void cop420_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &cop420_ICount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA:
|
||||
info->internal_map = construct_map_cop420_RAM; break;
|
||||
info->internal_map8 = address_map_cop420_RAM; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "COP420"); break;
|
||||
|
@ -1242,11 +1242,11 @@ void dsp56k_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &dsp56k_icount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA:
|
||||
info->internal_map = construct_map_dsp56156_x_data_memory; break;
|
||||
info->internal_map16 = address_map_dsp56156_x_data_memory; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM:
|
||||
info->internal_map = construct_map_dsp56156_program_memory; break;
|
||||
info->internal_map16 = address_map_dsp56156_program_memory; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO:
|
||||
info->internal_map = 0; break;
|
||||
info->internal_map16 = 0; break;
|
||||
|
||||
|
||||
// --- the following bits of info are returned as NULL-terminated strings ---
|
||||
|
@ -5090,8 +5090,8 @@ static void hyperstone_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &hyperstone_ICount; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map16 = NULL; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_CORE_FAMILY: strcpy(info->s, "Hyperstone CPU"); break;
|
||||
@ -5245,7 +5245,7 @@ void e116t_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_4k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_4k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e116t_init; break;
|
||||
@ -5268,7 +5268,7 @@ void e116xt_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_8k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_8k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e116xt_init; break;
|
||||
@ -5291,7 +5291,7 @@ void e116xs_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_16k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_16k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e116xs_init; break;
|
||||
@ -5314,7 +5314,7 @@ void e116xsr_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_16k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_16k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e116xsr_init; break;
|
||||
@ -5337,7 +5337,7 @@ void e132n_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_4k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_4k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132n_init; break;
|
||||
@ -5360,7 +5360,7 @@ void e132t_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_4k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_4k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132t_init; break;
|
||||
@ -5383,7 +5383,7 @@ void e132xn_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_8k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_8k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132xn_init; break;
|
||||
@ -5406,7 +5406,7 @@ void e132xt_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_8k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_8k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132xt_init; break;
|
||||
@ -5429,7 +5429,7 @@ void e132xs_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_16k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_16k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132xs_init; break;
|
||||
@ -5452,7 +5452,7 @@ void e132xsr_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_16k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_16k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = e132xsr_init; break;
|
||||
@ -5475,7 +5475,7 @@ void gms30c2116_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_4k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_4k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = gms30c2116_init; break;
|
||||
@ -5498,7 +5498,7 @@ void gms30c2132_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_4k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_4k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = gms30c2132_init; break;
|
||||
@ -5521,7 +5521,7 @@ void gms30c2216_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 16; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 16; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e116_8k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_e116_8k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = gms30c2216_init; break;
|
||||
@ -5544,7 +5544,7 @@ void gms30c2232_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 32; break;
|
||||
case CPUINFO_INT_DATABUS_WIDTH + ADDRESS_SPACE_IO: info->i = 32; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_e132_8k_iram_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_e132_8k_iram_map; break;
|
||||
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_INIT: info->init = gms30c2232_init; break;
|
||||
|
@ -4101,9 +4101,9 @@ void h8_3002_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
|
||||
|
||||
// Internal maps
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_h8_3002_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_h8_3002_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map16 = NULL; break;
|
||||
|
||||
// CPU misc parameters
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "H8/3002"); break;
|
||||
@ -4150,7 +4150,7 @@ void h8_3044_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_h8_3044_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_h8_3044_internal_map; break;
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "H8/3044"); break;
|
||||
default:
|
||||
h8_3002_get_info(state,info);
|
||||
@ -4161,7 +4161,7 @@ void h8_3007_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
switch (state)
|
||||
{
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_h8_3007_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_h8_3007_internal_map; break;
|
||||
case CPUINFO_PTR_INIT: info->init = h8_3007_init; break;
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "H8/3007"); break;
|
||||
default:
|
||||
|
@ -2484,9 +2484,9 @@ void i8051_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &i8051_icount; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map8 = NULL; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "I8051"); break;
|
||||
|
@ -2142,9 +2142,9 @@ void i960_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_LOGADDR_WIDTH + ADDRESS_SPACE_IO: info->i = 0; break;
|
||||
|
||||
// Internal maps
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map32 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map32 = NULL; break;
|
||||
|
||||
// CPU misc parameters
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "i960KB"); break;
|
||||
|
@ -1229,9 +1229,9 @@ void m37710_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m37710_ICount; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_m37710_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_m37710_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map8 = NULL; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "M37710"); break;
|
||||
|
@ -498,7 +498,7 @@ void m4510_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m4510_dasm; break;
|
||||
#endif
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m4510_ICount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map = construct_map_m4510_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map8 = address_map_m4510_mem; break;
|
||||
case CPUINFO_PTR_TRANSLATE: info->translate = m4510_translate; break;
|
||||
case CPUINFO_PTR_M6502_READINDEXED_CALLBACK: info->f = (genf *) m4510.rdmem_id; break;
|
||||
case CPUINFO_PTR_M6502_WRITEINDEXED_CALLBACK: info->f = (genf *) m4510.wrmem_id; break;
|
||||
|
@ -834,7 +834,7 @@ void m6510_get_info(UINT32 state, cpuinfo *info)
|
||||
#ifdef ENABLE_DEBUGGER
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m6510_dasm; break;
|
||||
#endif
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map = construct_map_m6510_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map8 = address_map_m6510_mem; break;
|
||||
case CPUINFO_PTR_M6510_PORTREAD: info->f = (genf *) m6502.port_read; break;
|
||||
case CPUINFO_PTR_M6510_PORTWRITE: info->f = (genf *) m6502.port_write; break;
|
||||
|
||||
|
@ -376,7 +376,7 @@ void m6509_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m6502_dasm; break;
|
||||
#endif
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &m6502_ICount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map = construct_map_m6509_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map8 = address_map_m6509_mem; break;
|
||||
case CPUINFO_PTR_M6502_READINDEXED_CALLBACK: info->f = (genf *) m6509.rdmem_id; break;
|
||||
case CPUINFO_PTR_M6502_WRITEINDEXED_CALLBACK: info->f = (genf *) m6509.wrmem_id; break;
|
||||
|
||||
|
@ -2766,7 +2766,7 @@ void m6803_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = m6803_dasm; break;
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_m6803_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = address_map_m6803_mem; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "M6803"); break;
|
||||
|
@ -47,7 +47,7 @@ static void program_write_qword_masked_32le(offs_t offset, UINT64 data, UINT64 m
|
||||
PRIVATE GLOBAL VARIABLES
|
||||
***************************************************************************/
|
||||
|
||||
static const memory_handlers be_memory =
|
||||
static const memory_accessors be_memory =
|
||||
{
|
||||
program_read_byte_32be,
|
||||
program_read_word_32be,
|
||||
@ -64,7 +64,7 @@ static const memory_handlers be_memory =
|
||||
program_write_qword_masked_32be
|
||||
};
|
||||
|
||||
static const memory_handlers le_memory =
|
||||
static const memory_accessors le_memory =
|
||||
{
|
||||
program_read_byte_32le,
|
||||
program_read_word_32le,
|
||||
|
@ -145,8 +145,8 @@ typedef enum _mips3_flavor mips3_flavor;
|
||||
***************************************************************************/
|
||||
|
||||
/* memory access function table */
|
||||
typedef struct _memory_handlers memory_handlers;
|
||||
struct _memory_handlers
|
||||
typedef struct _memory_accessors memory_accessors;
|
||||
struct _memory_accessors
|
||||
{
|
||||
UINT8 (*readbyte)(offs_t);
|
||||
UINT16 (*readhalf)(offs_t);
|
||||
@ -197,7 +197,7 @@ struct _mips3_state
|
||||
|
||||
/* memory accesses */
|
||||
UINT8 bigendian;
|
||||
memory_handlers memory;
|
||||
memory_accessors memory;
|
||||
|
||||
/* cache memory */
|
||||
UINT32 * icache;
|
||||
|
@ -119,12 +119,12 @@
|
||||
typedef struct
|
||||
{
|
||||
UINT8 (*readbyte)(offs_t);
|
||||
UINT16 (*readword)(offs_t);
|
||||
UINT32 (*readlong)(offs_t);
|
||||
UINT16 (*readword)(offs_t);
|
||||
UINT32 (*readlong)(offs_t);
|
||||
void (*writebyte)(offs_t, UINT8);
|
||||
void (*writeword)(offs_t, UINT16);
|
||||
void (*writelong)(offs_t, UINT32);
|
||||
} memory_handlers;
|
||||
} memory_accessors;
|
||||
|
||||
/* R3000 Registers */
|
||||
typedef struct
|
||||
@ -156,9 +156,9 @@ typedef struct
|
||||
|
||||
/* memory accesses */
|
||||
UINT8 bigendian;
|
||||
memory_handlers cur;
|
||||
const memory_handlers *memory_hand;
|
||||
const memory_handlers *cache_hand;
|
||||
memory_accessors cur;
|
||||
const memory_accessors *memory_hand;
|
||||
const memory_accessors *cache_hand;
|
||||
|
||||
/* cache memory */
|
||||
UINT32 * cache;
|
||||
@ -215,25 +215,25 @@ static int r3000_icount;
|
||||
static r3000_regs r3000;
|
||||
|
||||
|
||||
static const memory_handlers be_memory =
|
||||
static const memory_accessors be_memory =
|
||||
{
|
||||
program_read_byte_32be, program_read_word_32be, program_read_dword_32be,
|
||||
program_write_byte_32be, program_write_word_32be, program_write_dword_32be
|
||||
};
|
||||
|
||||
static const memory_handlers le_memory =
|
||||
static const memory_accessors le_memory =
|
||||
{
|
||||
program_read_byte_32le, program_read_word_32le, program_read_dword_32le,
|
||||
program_write_byte_32le, program_write_word_32le, program_write_dword_32le
|
||||
};
|
||||
|
||||
static const memory_handlers be_cache =
|
||||
static const memory_accessors be_cache =
|
||||
{
|
||||
readcache_be, readcache_be_word, readcache_be_dword,
|
||||
writecache_be, writecache_be_word, writecache_be_dword
|
||||
};
|
||||
|
||||
static const memory_handlers le_cache =
|
||||
static const memory_accessors le_cache =
|
||||
{
|
||||
readcache_le, readcache_le_word, readcache_le_dword,
|
||||
writecache_le, writecache_le_word, writecache_le_dword
|
||||
|
@ -1102,8 +1102,8 @@ void pic16C54_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = pic16C54_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_pic16c54_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_pic16c54_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_pic16c54_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = address_map_pic16c54_ram; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "PIC16C54"); break;
|
||||
@ -1154,8 +1154,8 @@ void pic16C55_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = pic16C55_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_pic16c55_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_pic16c55_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_pic16c55_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = address_map_pic16c55_ram; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "PIC16C55"); break;
|
||||
@ -1206,8 +1206,8 @@ void pic16C56_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = pic16C56_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_pic16c56_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_pic16c56_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_pic16c56_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = address_map_pic16c56_ram; break;
|
||||
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 10; break;
|
||||
|
||||
@ -1263,8 +1263,8 @@ void pic16C57_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = pic16C57_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_pic16c57_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_pic16c57_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_pic16c57_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = address_map_pic16c57_ram; break;
|
||||
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 11; break;
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 7; break;
|
||||
@ -1321,8 +1321,8 @@ void pic16C58_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = pic16C58_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_pic16c58_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_pic16c58_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_pic16c58_rom; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map8 = address_map_pic16c58_ram; break;
|
||||
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_PROGRAM: info->i = 11; break;
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_DATA: info->i = 7; break;
|
||||
|
@ -5096,7 +5096,7 @@ void sh4_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_INT_ADDRBUS_WIDTH + ADDRESS_SPACE_IO: info->i = 8; break;
|
||||
case CPUINFO_INT_ADDRBUS_SHIFT + ADDRESS_SPACE_IO: info->i = 0; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_sh4_internal_map; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map64 = address_map_sh4_internal_map; break;
|
||||
|
||||
case CPUINFO_INT_INPUT_STATE + SH4_IRL0: info->i = sh4.irq_line_state[SH4_IRL0]; break;
|
||||
case CPUINFO_INT_INPUT_STATE + SH4_IRL1: info->i = sh4.irq_line_state[SH4_IRL1]; break;
|
||||
|
@ -1102,7 +1102,7 @@ static void sharc_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &sharc_icount; break;
|
||||
case CPUINFO_PTR_READ: info->read = sharc_debug_read; break;
|
||||
case CPUINFO_PTR_READOP: info->readop = sharc_debug_readop; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_internal_pgm; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map64 = address_map_internal_pgm; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_CORE_FAMILY: strcpy(info->s, "SHARC"); break;
|
||||
|
@ -823,8 +823,8 @@ void ssp1610_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &ssp1610_ICount; break;
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map = 0; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = NULL; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_IO: info->internal_map16 = NULL; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_CORE_FAMILY: strcpy(info->s, "SSP1610 CPU"); break;
|
||||
|
@ -2788,7 +2788,7 @@ void tmp90840_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = t90_dasm; break;
|
||||
#endif
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &t90_ICount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_tmp90840_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = address_map_tmp90840_mem; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
|
||||
@ -2834,7 +2834,7 @@ void tmp90841_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_tmp90841_mem; return;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = address_map_tmp90841_mem; return;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
|
||||
@ -2850,7 +2850,7 @@ void tmp91640_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_tmp91640_mem; return;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = address_map_tmp91640_mem; return;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
|
||||
@ -2866,7 +2866,7 @@ void tmp91641_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as 64-bit signed integers --- */
|
||||
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_tmp91641_mem; return;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map8 = address_map_tmp91641_mem; return;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
|
||||
|
@ -934,7 +934,7 @@ void tms32010_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = tms32010_dasm; break;
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &tms32010_icount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_tms32010_ram; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = address_map_tms32010_ram; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "TMS32010"); break;
|
||||
|
@ -818,7 +818,7 @@ void tms32031_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = tms32031_dasm; break;
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &tms32031_icount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_internal_32031; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_internal_32031; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "TMS32031"); break;
|
||||
@ -889,7 +889,7 @@ void tms32032_get_info(UINT32 state, cpuinfo *info)
|
||||
{
|
||||
/* --- the following bits of info are returned as pointers to data or functions --- */
|
||||
case CPUINFO_PTR_RESET: info->reset = tms32032_reset; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_internal_32032; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map32 = address_map_internal_32032; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s, "TMS32032"); break;
|
||||
|
@ -633,8 +633,8 @@ static void tms_get_info(UINT32 state, cpuinfo *info)
|
||||
#endif /* ENABLE_DEBUGGER */
|
||||
case CPUINFO_PTR_READ: info->read = tms_debug_read; break;
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &tms_icount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map = construct_map_internal_pgm; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map = construct_map_internal_data; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_PROGRAM: info->internal_map16 = address_map_internal_pgm; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACE_DATA: info->internal_map16 = address_map_internal_data; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_CORE_FAMILY: strcpy(info->s, "TMS3205x"); break;
|
||||
|
@ -337,7 +337,7 @@ void tms7000_get_info(UINT32 state, cpuinfo *info)
|
||||
case CPUINFO_PTR_DISASSEMBLE: info->disassemble = tms7000_dasm; break;
|
||||
#endif
|
||||
case CPUINFO_PTR_INSTRUCTION_COUNTER: info->icount = &tms7000_icount; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map = construct_map_tms7000_mem; break;
|
||||
case CPUINFO_PTR_INTERNAL_MEMORY_MAP: info->internal_map8 = address_map_tms7000_mem; break;
|
||||
|
||||
/* --- the following bits of info are returned as NULL-terminated strings --- */
|
||||
case CPUINFO_STR_NAME: strcpy(info->s = cpuintrf_temp_str(), "TMS7000"); break;
|
||||
|
@ -258,7 +258,7 @@ struct _cpu_config
|
||||
cpu_type type; /* index for the CPU type */
|
||||
int flags; /* flags; see #defines below */
|
||||
int clock; /* in Hertz */
|
||||
construct_map_t construct_map[ADDRESS_SPACES][2]; /* 2 memory maps per address space */
|
||||
const addrmap_token *address_map[ADDRESS_SPACES][2]; /* 2 memory maps per address space */
|
||||
void (*vblank_interrupt)(running_machine *machine, int cpunum); /* for interrupts tied to VBLANK */
|
||||
int vblank_interrupts_per_frame;/* usually 1 */
|
||||
const char * vblank_interrupt_screen; /* the screen that causes the VBLANK interrupt */
|
||||
|
@ -130,7 +130,7 @@ enum
|
||||
CPUINFO_PTR_READOP, /* R/O: int (*readop)(UINT32 offset, int size, UINT64 *value) */
|
||||
CPUINFO_PTR_DEBUG_SETUP_COMMANDS, /* R/O: void (*setup_commands)(void) */
|
||||
CPUINFO_PTR_INSTRUCTION_COUNTER, /* R/O: int *icount */
|
||||
CPUINFO_PTR_INTERNAL_MEMORY_MAP, /* R/O: construct_map_t map */
|
||||
CPUINFO_PTR_INTERNAL_MEMORY_MAP, /* R/O: const addrmap_token *map */
|
||||
CPUINFO_PTR_INTERNAL_MEMORY_MAP_LAST = CPUINFO_PTR_INTERNAL_MEMORY_MAP + ADDRESS_SPACES - 1,
|
||||
CPUINFO_PTR_DEBUG_REGISTER_LIST, /* R/O: int *list: list of registers for the debugger */
|
||||
|
||||
@ -238,7 +238,10 @@ union _cpuinfo
|
||||
cpu_readop_func readop; /* CPUINFO_PTR_READOP */
|
||||
cpu_setup_commands_func setup_commands; /* CPUINFO_PTR_DEBUG_SETUP_COMMANDS */
|
||||
int * icount; /* CPUINFO_PTR_INSTRUCTION_COUNTER */
|
||||
construct_map_t internal_map; /* CPUINFO_PTR_INTERNAL_MEMORY_MAP */
|
||||
const addrmap8_token * internal_map8; /* CPUINFO_PTR_INTERNAL_MEMORY_MAP */
|
||||
const addrmap16_token * internal_map16; /* CPUINFO_PTR_INTERNAL_MEMORY_MAP */
|
||||
const addrmap32_token * internal_map32; /* CPUINFO_PTR_INTERNAL_MEMORY_MAP */
|
||||
const addrmap64_token * internal_map64; /* CPUINFO_PTR_INTERNAL_MEMORY_MAP */
|
||||
};
|
||||
|
||||
|
||||
|
@ -2253,7 +2253,7 @@ static void input_port_detokenize(input_port_init_params *param, const input_por
|
||||
#endif /* MESS */
|
||||
|
||||
default:
|
||||
fatalerror("unknown port entry type");
|
||||
fatalerror("Invalid token %d in input ports\n", entrytype);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -349,20 +349,20 @@ static void machine_config_detokenize(machine_config *config, const machine_conf
|
||||
|
||||
case MCONFIG_TOKEN_CPU_PROGRAM_MAP:
|
||||
assert(cpu != NULL);
|
||||
cpu->construct_map[ADDRESS_SPACE_PROGRAM][0] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->construct_map[ADDRESS_SPACE_PROGRAM][1] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->address_map[ADDRESS_SPACE_PROGRAM][0] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
cpu->address_map[ADDRESS_SPACE_PROGRAM][1] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
break;
|
||||
|
||||
case MCONFIG_TOKEN_CPU_DATA_MAP:
|
||||
assert(cpu != NULL);
|
||||
cpu->construct_map[ADDRESS_SPACE_DATA][0] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->construct_map[ADDRESS_SPACE_DATA][1] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->address_map[ADDRESS_SPACE_DATA][0] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
cpu->address_map[ADDRESS_SPACE_DATA][1] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
break;
|
||||
|
||||
case MCONFIG_TOKEN_CPU_IO_MAP:
|
||||
assert(cpu != NULL);
|
||||
cpu->construct_map[ADDRESS_SPACE_IO][0] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->construct_map[ADDRESS_SPACE_IO][1] = (construct_map_t)TOKEN_GET_PTR(tokens, voidptr);
|
||||
cpu->address_map[ADDRESS_SPACE_IO][0] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
cpu->address_map[ADDRESS_SPACE_IO][1] = TOKEN_GET_PTR(tokens, addrmap);
|
||||
break;
|
||||
|
||||
case MCONFIG_TOKEN_CPU_VBLANK_INT:
|
||||
@ -522,6 +522,10 @@ static void machine_config_detokenize(machine_config *config, const machine_conf
|
||||
sound->route[sound->routes].target = TOKEN_GET_STRING(tokens);
|
||||
sound->routes++;
|
||||
break;
|
||||
|
||||
default:
|
||||
fatalerror("Invalid token %d in machine config\n", entrytype);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -162,6 +162,7 @@ union _machine_config_token
|
||||
TOKEN_COMMON_FIELDS
|
||||
const machine_config_token *tokenptr;
|
||||
const gfx_decode_entry *gfxdecode;
|
||||
const addrmap_token *addrmap;
|
||||
device_type devtype;
|
||||
void (*interrupt)(running_machine *machine, int cpunum);
|
||||
driver_init_func driver_init;
|
||||
@ -272,18 +273,18 @@ union _machine_config_token
|
||||
|
||||
#define MDRV_CPU_PROGRAM_MAP(_map1, _map2) \
|
||||
TOKEN_UINT32_PACK1(MCONFIG_TOKEN_CPU_PROGRAM_MAP, 8), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map2), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map2), \
|
||||
|
||||
#define MDRV_CPU_DATA_MAP(_map1, _map2) \
|
||||
TOKEN_UINT32_PACK1(MCONFIG_TOKEN_CPU_DATA_MAP, 8), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map2), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map2), \
|
||||
|
||||
#define MDRV_CPU_IO_MAP(_map1, _map2) \
|
||||
TOKEN_UINT32_PACK1(MCONFIG_TOKEN_CPU_IO_MAP, 8), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, construct_map_##_map2), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map1), \
|
||||
TOKEN_PTR(voidptr, address_map_##_map2), \
|
||||
|
||||
#define MDRV_CPU_VBLANK_INT(_tag, _func) \
|
||||
TOKEN_UINT32_PACK1(MCONFIG_TOKEN_CPU_VBLANK_INT, 8), \
|
||||
|
654
src/emu/memory.c
654
src/emu/memory.c
File diff suppressed because it is too large
Load Diff
368
src/emu/memory.h
368
src/emu/memory.h
@ -16,6 +16,7 @@
|
||||
|
||||
#include "mamecore.h"
|
||||
#include "devintrf.h"
|
||||
#include "tokenize.h"
|
||||
|
||||
|
||||
|
||||
@ -127,10 +128,6 @@ struct _data_accessors
|
||||
declared within each driver.
|
||||
***************************************************************************/
|
||||
|
||||
/* ----- 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_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 */
|
||||
#define AMEF_SPECIFIES_ABITS 0x00000002 /* set if the number of address space bits is specified */
|
||||
@ -545,10 +542,14 @@ typedef union _read_handlers read_handlers;
|
||||
union _read_handlers
|
||||
{
|
||||
genf * handler;
|
||||
read8_machine_func handler8;
|
||||
read16_machine_func handler16;
|
||||
read32_machine_func handler32;
|
||||
read64_machine_func handler64;
|
||||
read8_machine_func mhandler8;
|
||||
read16_machine_func mhandler16;
|
||||
read32_machine_func mhandler32;
|
||||
read64_machine_func mhandler64;
|
||||
read8_device_func dhandler8;
|
||||
read16_device_func dhandler16;
|
||||
read32_device_func dhandler32;
|
||||
read64_device_func dhandler64;
|
||||
};
|
||||
|
||||
/* ----- a union of all the different write handler types ----- */
|
||||
@ -556,17 +557,29 @@ typedef union _write_handlers write_handlers;
|
||||
union _write_handlers
|
||||
{
|
||||
genf * handler;
|
||||
write8_machine_func handler8;
|
||||
write16_machine_func handler16;
|
||||
write32_machine_func handler32;
|
||||
write64_machine_func handler64;
|
||||
write8_machine_func mhandler8;
|
||||
write16_machine_func mhandler16;
|
||||
write32_machine_func mhandler32;
|
||||
write64_machine_func mhandler64;
|
||||
write8_device_func dhandler8;
|
||||
write16_device_func dhandler16;
|
||||
write32_device_func dhandler32;
|
||||
write64_device_func dhandler64;
|
||||
};
|
||||
|
||||
typedef union _memory_handlers memory_handlers;
|
||||
union _memory_handlers
|
||||
{
|
||||
read_handlers read;
|
||||
write_handlers write;
|
||||
};
|
||||
|
||||
/* ----- a generic address map type ----- */
|
||||
typedef struct _address_map address_map;
|
||||
struct _address_map
|
||||
typedef struct _address_map_entry address_map_entry;
|
||||
struct _address_map_entry
|
||||
{
|
||||
UINT32 flags; /* flags and additional info about this entry */
|
||||
address_map_entry * next; /* pointer to the next entry */
|
||||
|
||||
offs_t start, end; /* start/end values */
|
||||
offs_t mirror; /* mirror bits */
|
||||
offs_t mask; /* mask bits */
|
||||
@ -578,12 +591,28 @@ struct _address_map
|
||||
const char * write_name; /* write handler callback name */
|
||||
device_type write_devtype; /* read device type for device references */
|
||||
const char * write_devtag; /* read tag for the relevant device */
|
||||
void * memory; /* pointer to memory backing this entry */
|
||||
UINT32 share; /* index of a shared memory block */
|
||||
void ** base; /* receives pointer to memory (optional) */
|
||||
size_t * size; /* receives size of area in bytes (optional) */
|
||||
void ** baseptr; /* receives pointer to memory (optional) */
|
||||
size_t * sizeptr; /* receives size of area in bytes (optional) */
|
||||
UINT32 baseptroffs_plus1; /* offset of base pointer within driver_data struct, plus 1 */
|
||||
UINT32 sizeptroffs_plus1; /* offset of size pointer within driver_data struct, plus 1 */
|
||||
UINT32 region; /* region containing the memory backing this entry */
|
||||
offs_t region_offs; /* offset within the region */
|
||||
|
||||
void * memory; /* pointer to memory backing this entry */
|
||||
offs_t bytestart, byteend; /* byte-adjusted start/end values */
|
||||
offs_t bytemirror; /* byte-adjusted mirror bits */
|
||||
offs_t bytemask; /* byte-adjusted mask bits */
|
||||
};
|
||||
|
||||
typedef struct _address_map address_map;
|
||||
struct _address_map
|
||||
{
|
||||
UINT8 spacenum; /* space number of the map */
|
||||
UINT8 databits; /* data bits represented by the map */
|
||||
UINT8 unmapval; /* unmapped memory value */
|
||||
offs_t globalmask; /* global mask */
|
||||
address_map_entry * entrylist; /* list of entries */
|
||||
};
|
||||
|
||||
/* ----- structs to contain internal data ----- */
|
||||
@ -599,134 +628,234 @@ struct _address_space
|
||||
};
|
||||
|
||||
|
||||
typedef union _addrmap_token addrmap_token;
|
||||
union _addrmap_token
|
||||
{
|
||||
TOKEN_COMMON_FIELDS
|
||||
const addrmap_token * tokenptr;
|
||||
read_handlers read; /* generic read handlers */
|
||||
write_handlers write; /* generic write handlers */
|
||||
device_type devtype; /* device type */
|
||||
UINT8 ** memptr; /* memory pointer */
|
||||
size_t * sizeptr; /* size pointer */
|
||||
};
|
||||
|
||||
|
||||
typedef union _addrmap8_token addrmap8_token;
|
||||
union _addrmap8_token
|
||||
{
|
||||
TOKEN_COMMON_FIELDS
|
||||
const addrmap_token * tokenptr;
|
||||
read8_machine_func mread; /* pointer to native machine read handler */
|
||||
write8_machine_func mwrite; /* pointer to native machine write handler */
|
||||
read8_device_func dread; /* pointer to native device read handler */
|
||||
write8_device_func dwrite; /* pointer to native device write handler */
|
||||
read_handlers read; /* generic read handlers */
|
||||
write_handlers write; /* generic write handlers */
|
||||
device_type devtype; /* device type */
|
||||
UINT8 ** memptr; /* memory pointer */
|
||||
size_t * sizeptr; /* size pointer */
|
||||
};
|
||||
|
||||
|
||||
typedef union _addrmap16_token addrmap16_token;
|
||||
union _addrmap16_token
|
||||
{
|
||||
TOKEN_COMMON_FIELDS
|
||||
const addrmap_token * tokenptr;
|
||||
read16_machine_func mread; /* pointer to native read handler */
|
||||
write16_machine_func mwrite; /* pointer to native write handler */
|
||||
read16_device_func dread; /* pointer to native device read handler */
|
||||
write16_device_func dwrite; /* pointer to native device write handler */
|
||||
read8_machine_func mread8; /* pointer to 8-bit machine read handler */
|
||||
write8_machine_func mwrite8; /* pointer to 8-bit machine write handler */
|
||||
read_handlers read; /* generic read handlers */
|
||||
write_handlers write; /* generic write handlers */
|
||||
device_type devtype; /* device type */
|
||||
UINT16 ** memptr; /* memory pointer */
|
||||
size_t * sizeptr; /* size pointer */
|
||||
};
|
||||
|
||||
|
||||
typedef union _addrmap32_token addrmap32_token;
|
||||
union _addrmap32_token
|
||||
{
|
||||
TOKEN_COMMON_FIELDS
|
||||
const addrmap_token * tokenptr;
|
||||
read32_machine_func mread; /* pointer to native read handler */
|
||||
write32_machine_func mwrite; /* pointer to native write handler */
|
||||
read32_device_func dread; /* pointer to native device read handler */
|
||||
write32_device_func dwrite; /* pointer to native device write handler */
|
||||
read8_machine_func mread8; /* pointer to 8-bit machine read handler */
|
||||
write8_machine_func mwrite8; /* pointer to 8-bit machine write handler */
|
||||
read16_machine_func mread16; /* pointer to 16-bit machine read handler */
|
||||
write16_machine_func mwrite16; /* pointer to 16-bit machine write handler */
|
||||
read_handlers read; /* generic read handlers */
|
||||
write_handlers write; /* generic write handlers */
|
||||
device_type devtype; /* device type */
|
||||
UINT32 ** memptr; /* memory pointer */
|
||||
size_t * sizeptr; /* size pointer */
|
||||
};
|
||||
|
||||
|
||||
typedef union _addrmap64_token addrmap64_token;
|
||||
union _addrmap64_token
|
||||
{
|
||||
TOKEN_COMMON_FIELDS
|
||||
const addrmap_token * tokenptr;
|
||||
read64_machine_func mread; /* pointer to native read handler */
|
||||
write64_machine_func mwrite; /* pointer to native write handler */
|
||||
read64_device_func dread; /* pointer to native device read handler */
|
||||
write64_device_func dwrite; /* pointer to native device write handler */
|
||||
read8_machine_func mread8; /* pointer to 8-bit machine read handler */
|
||||
write8_machine_func mwrite8; /* pointer to 8-bit machine write handler */
|
||||
read16_machine_func mread16; /* pointer to 16-bit machine read handler */
|
||||
write16_machine_func mwrite16; /* pointer to 16-bit machine write handler */
|
||||
read32_machine_func mread32; /* pointer to 32-bit machine read handler */
|
||||
write32_machine_func mwrite32; /* pointer to 32-bit machine write handler */
|
||||
read_handlers read; /* generic read handlers */
|
||||
write_handlers write; /* generic write handlers */
|
||||
device_type devtype; /* device type */
|
||||
UINT64 ** memptr; /* memory pointer */
|
||||
size_t * sizeptr; /* size pointer */
|
||||
};
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
ADDRESS MAP ARRAY CONSTRUCTORS
|
||||
***************************************************************************/
|
||||
|
||||
void construct_address_map(address_map *map, const machine_config *drv, int cpunum, int spacenum);
|
||||
#define address_map_0 NULL
|
||||
|
||||
/* ----- a typedef for pointers to these functions ----- */
|
||||
typedef address_map *(*construct_map_t)(running_machine *machine, address_map *map);
|
||||
enum
|
||||
{
|
||||
ADDRMAP_TOKEN_INVALID,
|
||||
|
||||
/* use this to declare external references to a machine driver */
|
||||
#define ADDRESS_MAP_EXTERN(_name) \
|
||||
address_map *construct_map_##_name(running_machine *machine, address_map *map) \
|
||||
ADDRMAP_TOKEN_START,
|
||||
ADDRMAP_TOKEN_END,
|
||||
ADDRMAP_TOKEN_INCLUDE,
|
||||
|
||||
ADDRMAP_TOKEN_GLOBAL_MASK,
|
||||
ADDRMAP_TOKEN_UNMAP_VALUE,
|
||||
|
||||
/* ----- macros for starting, ending, and setting map flags ----- */
|
||||
#define ADDRESS_MAP_START(_name,_space,_bits) \
|
||||
address_map *construct_map_##_name(running_machine *machine, address_map *map) \
|
||||
{ \
|
||||
extern read##_bits##_machine_func port_tag_to_handler##_bits(const char *); \
|
||||
typedef read##_bits##_machine_func _rmf_t; \
|
||||
typedef write##_bits##_machine_func _wmf_t; \
|
||||
typedef read##_bits##_device_func _rdf_t; \
|
||||
typedef write##_bits##_device_func _wdf_t; \
|
||||
_rmf_t readm; \
|
||||
_wmf_t writem; \
|
||||
_rdf_t readd; \
|
||||
_wdf_t writed; \
|
||||
_rmf_t (*port_tag_to_handler)(const char *) = port_tag_to_handler##_bits; \
|
||||
UINT##_bits **base; \
|
||||
\
|
||||
(void)readm; (void)writem; (void)readd; (void)writed; (void)base; \
|
||||
(void)port_tag_to_handler; \
|
||||
map->flags = AM_FLAGS_EXTENDED; \
|
||||
map->start = AMEF_DBITS(_bits) | AMEF_SPACE(_space); \
|
||||
ADDRMAP_TOKEN_RANGE,
|
||||
ADDRMAP_TOKEN_MASK,
|
||||
ADDRMAP_TOKEN_MIRROR,
|
||||
ADDRMAP_TOKEN_READ,
|
||||
ADDRMAP_TOKEN_WRITE,
|
||||
ADDRMAP_TOKEN_DEVICE_READ,
|
||||
ADDRMAP_TOKEN_DEVICE_WRITE,
|
||||
ADDRMAP_TOKEN_READ_PORT,
|
||||
ADDRMAP_TOKEN_REGION,
|
||||
ADDRMAP_TOKEN_SHARE,
|
||||
ADDRMAP_TOKEN_BASEPTR,
|
||||
ADDRMAP_TOKEN_BASE_MEMBER,
|
||||
ADDRMAP_TOKEN_SIZEPTR,
|
||||
ADDRMAP_TOKEN_SIZE_MEMBER
|
||||
};
|
||||
|
||||
#define ADDRESS_MAP_FLAGS(_flags) \
|
||||
map++; \
|
||||
map->flags = AM_FLAGS_EXTENDED; \
|
||||
map->start = (_flags); \
|
||||
|
||||
#define ADDRESS_MAP_END \
|
||||
map++; \
|
||||
map->flags = AM_FLAGS_END; \
|
||||
return map; \
|
||||
} \
|
||||
/* start/end tags for the address map */
|
||||
#define ADDRESS_MAP_START(_name, _space, _bits) \
|
||||
const addrmap##_bits##_token address_map_##_name[] = { \
|
||||
TOKEN_UINT32_PACK3(ADDRMAP_TOKEN_START, 8, _space, 8, _bits, 8),
|
||||
|
||||
/* ----- each map entry begins with one of these ----- */
|
||||
#define AM_RANGE(_start,_end) \
|
||||
map++; \
|
||||
map->flags = 0; \
|
||||
map->start = (_start); \
|
||||
map->end = (_end); \
|
||||
#define ADDRESS_MAP_END \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_END, 8) };
|
||||
|
||||
/* ----- these are optional entries after each map entry ----- */
|
||||
#define AM_MASK(_mask) \
|
||||
map->mask = (_mask); \
|
||||
/* use this to declare external references to an address map */
|
||||
#define ADDRESS_MAP_EXTERN(_name, _bits) \
|
||||
extern const addrmap##_bits##_token address_map_##_name[]
|
||||
|
||||
#define AM_MIRROR(_mirror) \
|
||||
map->mirror = (_mirror); \
|
||||
|
||||
#define AM_READ(_handler) \
|
||||
map->read.handler = (genf *)(readm = _handler); \
|
||||
map->read_name = #_handler; \
|
||||
/* global controls */
|
||||
#define ADDRESS_MAP_GLOBAL_MASK(_mask) \
|
||||
TOKEN_UINT64_PACK2(ADDRMAP_TOKEN_GLOBAL_MASK, 8, _mask, 32),
|
||||
|
||||
#define AM_READ_PORT(_tag) \
|
||||
AM_READ((*port_tag_to_handler)(_tag)) \
|
||||
#define ADDRESS_MAP_UNMAP_LOW \
|
||||
TOKEN_UINT32_PACK2(ADDRMAP_TOKEN_UNMAP_VALUE, 8, 0, 1),
|
||||
|
||||
#define AM_DEVREAD(_type, _tag, _handler) \
|
||||
map->read.handler = (genf *)(readd = _handler); \
|
||||
map->read_name = #_handler; \
|
||||
map->read_devtype = _type; \
|
||||
map->read_devtag = _tag; \
|
||||
#define ADDRESS_MAP_UNMAP_HIGH \
|
||||
TOKEN_UINT32_PACK2(ADDRMAP_TOKEN_UNMAP_VALUE, 8, 1, 1),
|
||||
|
||||
#define AM_WRITE(_handler) \
|
||||
map->write.handler = (genf *)(writem = _handler); \
|
||||
map->write_name = #_handler; \
|
||||
|
||||
#define AM_DEVWRITE(_type, _tag, _handler) \
|
||||
map->write.handler = (genf *)(writed = _handler); \
|
||||
map->write_name = #_handler; \
|
||||
map->write_devtype = _type; \
|
||||
map->write_devtag = _tag; \
|
||||
/* importing data from other address maps */
|
||||
#define AM_IMPORT_FROM(_name) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_INCLUDE, 8), \
|
||||
TOKEN_PTR(tokenptr, address_map_##_name),
|
||||
|
||||
#define AM_REGION(_region, _offs) \
|
||||
map->region = (_region); \
|
||||
map->region_offs = (_offs); \
|
||||
|
||||
#define AM_SHARE(_index) \
|
||||
map->share = _index; \
|
||||
/* address ranges */
|
||||
#define AM_RANGE(_start, _end) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_RANGE, 8), \
|
||||
TOKEN_UINT64_PACK2(_start, 32, _end, 32),
|
||||
|
||||
#define AM_BASE(_base) \
|
||||
map->base = (void **)(base = _base); \
|
||||
#define AM_MASK(_mask) \
|
||||
TOKEN_UINT64_PACK2(ADDRMAP_TOKEN_MASK, 8, _mask, 32),
|
||||
|
||||
#define AM_BASE_MEMBER(_struct, _member) \
|
||||
if (machine != NULL && machine->driver_data != NULL) \
|
||||
map->base = (void **)(base = &((_struct *)machine->driver_data)->_member);\
|
||||
#define AM_MIRROR(_mirror) \
|
||||
TOKEN_UINT64_PACK2(ADDRMAP_TOKEN_MIRROR, 8, _mirror, 32),
|
||||
|
||||
#define AM_SIZE(_size) \
|
||||
map->size = _size; \
|
||||
#define AM_READ(_handler) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_READ, 8), \
|
||||
TOKEN_PTR(mread, _handler), \
|
||||
TOKEN_STRING(#_handler),
|
||||
|
||||
#define AM_SIZE_MEMBER(_struct, _member) \
|
||||
if (machine != NULL && machine->driver_data != NULL) \
|
||||
map->size = &((_struct *)machine->driver_data)->_member; \
|
||||
#define AM_WRITE(_handler) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_WRITE, 8), \
|
||||
TOKEN_PTR(mwrite, _handler), \
|
||||
TOKEN_STRING(#_handler),
|
||||
|
||||
#define AM_DEVREAD(_type, _tag, _handler) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_DEVICE_READ, 8), \
|
||||
TOKEN_PTR(dread, _handler), \
|
||||
TOKEN_STRING(#_handler), \
|
||||
TOKEN_PTR(devtype, _type), \
|
||||
TOKEN_STRING(_tag),
|
||||
|
||||
#define AM_DEVWRITE(_type, _tag, _handler) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_DEVICE_WRITE, 8), \
|
||||
TOKEN_PTR(dwrite, _handler), \
|
||||
TOKEN_STRING(#_handler), \
|
||||
TOKEN_PTR(devtype, _type), \
|
||||
TOKEN_STRING(_tag),
|
||||
|
||||
#define AM_READ_PORT(_tag) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_READ_PORT, 8), \
|
||||
TOKEN_STRING(_tag),
|
||||
|
||||
#define AM_REGION(_region, _offs) \
|
||||
TOKEN_UINT64_PACK3(ADDRMAP_TOKEN_REGION, 8, _region, 24, _offs, 32),
|
||||
|
||||
#define AM_SHARE(_index) \
|
||||
TOKEN_UINT32_PACK2(ADDRMAP_TOKEN_SHARE, 8, _index, 24),
|
||||
|
||||
#define AM_BASE(_base) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_BASEPTR, 8), \
|
||||
TOKEN_PTR(memptr, _base),
|
||||
|
||||
#define AM_BASE_MEMBER(_struct, _member) \
|
||||
TOKEN_UINT32_PACK2(ADDRMAP_TOKEN_BASE_MEMBER, 8, offsetof(_struct, _member), 24),
|
||||
|
||||
#define AM_SIZE(_size) \
|
||||
TOKEN_UINT32_PACK1(ADDRMAP_TOKEN_SIZEPTR, 8), \
|
||||
TOKEN_PTR(sizeptr, _size),
|
||||
|
||||
#define AM_SIZE_MEMBER(_struct, _member) \
|
||||
TOKEN_UINT32_PACK2(ADDRMAP_TOKEN_SIZE_MEMBER, 8, offsetof(_struct, _member), 24),
|
||||
|
||||
/* ----- common shortcuts ----- */
|
||||
#define AM_READWRITE(_read,_write) AM_READ(_read) AM_WRITE(_write)
|
||||
#define AM_DEVREADWRITE(_type,_tag,_read,_write) AM_DEVREAD(_type,_tag,_read) AM_DEVWRITE(_type,_tag,_write)
|
||||
#define AM_ROM AM_READ((_rmf_t)STATIC_ROM)
|
||||
#define AM_RAM AM_READWRITE((_rmf_t)STATIC_RAM, (_wmf_t)STATIC_RAM)
|
||||
#define AM_WRITEONLY AM_WRITE((_wmf_t)STATIC_RAM)
|
||||
#define AM_UNMAP AM_READWRITE((_rmf_t)STATIC_UNMAP, (_wmf_t)STATIC_UNMAP)
|
||||
#define AM_ROMBANK(_bank) AM_READ((_rmf_t)(STATIC_BANK1 + (_bank) - 1))
|
||||
#define AM_RAMBANK(_bank) AM_READWRITE((_rmf_t)(STATIC_BANK1 + (_bank) - 1), (_wmf_t)(STATIC_BANK1 + (_bank) - 1))
|
||||
#define AM_NOP AM_READWRITE((_rmf_t)STATIC_NOP, (_wmf_t)STATIC_NOP)
|
||||
#define AM_READNOP AM_READ((_rmf_t)STATIC_NOP)
|
||||
#define AM_WRITENOP AM_WRITE((_wmf_t)STATIC_NOP)
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
ADDRESS MAP ARRAY HELPER MACROS
|
||||
***************************************************************************/
|
||||
|
||||
/* ----- macros for identifying address map struct markers ----- */
|
||||
#define IS_AMENTRY_EXTENDED(ma) (((ma)->flags & AM_FLAGS_EXTENDED) != 0)
|
||||
#define IS_AMENTRY_END(ma) (((ma)->flags & AM_FLAGS_END) != 0)
|
||||
|
||||
#define AM_EXTENDED_FLAGS(ma) ((ma)->start)
|
||||
#define AM_ROM AM_READ((void *)STATIC_ROM)
|
||||
#define AM_RAM AM_READWRITE((void *)STATIC_RAM, (void *)STATIC_RAM)
|
||||
#define AM_WRITEONLY AM_WRITE((void *)STATIC_RAM)
|
||||
#define AM_UNMAP AM_READWRITE((void *)STATIC_UNMAP, (void *)STATIC_UNMAP)
|
||||
#define AM_ROMBANK(_bank) AM_READ((void *)(STATIC_BANK1 + (_bank) - 1))
|
||||
#define AM_RAMBANK(_bank) AM_READWRITE((void *)(STATIC_BANK1 + (_bank) - 1), (void *)(STATIC_BANK1 + (_bank) - 1))
|
||||
#define AM_NOP AM_READWRITE((void *)STATIC_NOP, (void *)STATIC_NOP)
|
||||
#define AM_READNOP AM_READ((void *)STATIC_NOP)
|
||||
#define AM_WRITENOP AM_WRITE((void *)STATIC_NOP)
|
||||
|
||||
|
||||
|
||||
@ -756,7 +885,6 @@ extern const char *const address_space_names[ADDRESS_SPACES];
|
||||
#define LEVEL2_BITS (32 - LEVEL1_BITS) /* number of address bits in the level 2 table */
|
||||
|
||||
/* ----- other address map constants ----- */
|
||||
#define MAX_ADDRESS_MAP_SIZE 256 /* maximum entries in an address map */
|
||||
#define MAX_MEMORY_BLOCKS 1024 /* maximum memory blocks we can track */
|
||||
#define MAX_SHARED_POINTERS 256 /* maximum number of shared pointers in memory maps */
|
||||
#define MEMORY_BLOCK_SIZE 65536 /* size of allocated memory blocks */
|
||||
@ -950,6 +1078,8 @@ void memory_init(running_machine *machine);
|
||||
void memory_set_context(int activecpu);
|
||||
|
||||
/* ----- address map functions ----- */
|
||||
address_map *address_map_alloc(const machine_config *drv, int cpunum, int spacenum);
|
||||
void address_map_free(address_map *map);
|
||||
const address_map *memory_get_map(int cpunum, int spacenum);
|
||||
|
||||
/* ----- opcode base control ---- */
|
||||
|
@ -644,123 +644,100 @@ static int validate_cpu(int drivnum, const machine_config *config, const UINT32
|
||||
{
|
||||
#define SPACE_SHIFT(a) ((addr_shift < 0) ? ((a) << -addr_shift) : ((a) >> addr_shift))
|
||||
#define SPACE_SHIFT_END(a) ((addr_shift < 0) ? (((a) << -addr_shift) | ((1 << -addr_shift) - 1)) : ((a) >> addr_shift))
|
||||
static const char *const spacename[] = { "program", "data", "I/O" };
|
||||
int databus_width = cputype_databus_width(cpu->type, spacenum);
|
||||
int addr_shift = cputype_addrbus_shift(cpu->type, spacenum);
|
||||
int alignunit = databus_width/8;
|
||||
address_map addrmap[MAX_ADDRESS_MAP_SIZE*2];
|
||||
address_map_entry *entry;
|
||||
address_map *map;
|
||||
UINT32 flags;
|
||||
|
||||
/* check to see that the same map is not used twice */
|
||||
if (cpu->construct_map[spacenum][0] && cpu->construct_map[spacenum][0] == cpu->construct_map[spacenum][1])
|
||||
if (cpu->address_map[spacenum][0] != NULL && cpu->address_map[spacenum][0] == cpu->address_map[spacenum][1])
|
||||
{
|
||||
mame_printf_error("%s: %s uses identical memory maps for CPU #%d spacenum %d\n", driver->source_file, driver->name, cpunum, spacenum);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* reset the address map, resetting the base address to a non-NULL value */
|
||||
/* because the AM_REGION macro will query non-existant memory regions and */
|
||||
/* product valid NULL results */
|
||||
memset(addrmap, 0, sizeof(addrmap));
|
||||
|
||||
/* construct the maps */
|
||||
map = addrmap;
|
||||
construct_address_map(map, config, cpunum, spacenum);
|
||||
map = address_map_alloc(config, cpunum, spacenum);
|
||||
|
||||
/* if this is an empty map, just skip it */
|
||||
if (IS_AMENTRY_END(map))
|
||||
continue;
|
||||
|
||||
/* make sure we start with a proper entry */
|
||||
if (!IS_AMENTRY_EXTENDED(map))
|
||||
if (map->entrylist == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s wrong MEMORY_READ_START for %s space\n", driver->source_file, driver->name, spacename[spacenum]);
|
||||
address_map_free(map);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* validate the global map parameters */
|
||||
if (map->spacenum != spacenum)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU #%d space %d has address space %d handlers!", driver->source_file, driver->name, cpunum, spacenum, map->spacenum);
|
||||
error = TRUE;
|
||||
}
|
||||
if (map->databits != databus_width)
|
||||
{
|
||||
mame_printf_error("%s: %s cpu #%d uses wrong memory handlers for %s space! (width = %d, memory = %08x)\n", driver->source_file, driver->name, cpunum, address_space_names[spacenum], databus_width, map->databits);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* loop over entries and look for errors */
|
||||
for ( ; !IS_AMENTRY_END(map); map++)
|
||||
if (!IS_AMENTRY_EXTENDED(map))
|
||||
for (entry = map->entrylist; entry != NULL; entry = entry->next)
|
||||
{
|
||||
UINT32 start = SPACE_SHIFT(entry->start);
|
||||
UINT32 end = SPACE_SHIFT_END(entry->end);
|
||||
|
||||
/* look for inverted start/end pairs */
|
||||
if (end < start)
|
||||
{
|
||||
UINT32 start = SPACE_SHIFT(map->start);
|
||||
UINT32 end = SPACE_SHIFT_END(map->end);
|
||||
mame_printf_error("%s: %s wrong %s memory read handler start = %08x > end = %08x\n", driver->source_file, driver->name, address_space_names[spacenum], entry->start, entry->end);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* look for inverted start/end pairs */
|
||||
if (end < start)
|
||||
/* look for misaligned entries */
|
||||
if ((start & (alignunit-1)) != 0 || (end & (alignunit-1)) != (alignunit-1))
|
||||
{
|
||||
mame_printf_error("%s: %s wrong %s memory read handler start = %08x, end = %08x ALIGN = %d\n", driver->source_file, driver->name, address_space_names[spacenum], entry->start, entry->end, alignunit);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* if this is a program space, auto-assign implicit ROM entries */
|
||||
if ((FPTR)entry->read.handler == STATIC_ROM && !entry->region)
|
||||
{
|
||||
entry->region = REGION_CPU1 + cpunum;
|
||||
entry->region_offs = entry->start;
|
||||
}
|
||||
|
||||
/* if this entry references a memory region, validate it */
|
||||
if (entry->region && entry->share == 0)
|
||||
{
|
||||
offs_t length = region_length[entry->region];
|
||||
|
||||
if (length == 0)
|
||||
{
|
||||
mame_printf_error("%s: %s wrong %s memory read handler start = %08x > end = %08x\n", driver->source_file, driver->name, spacename[spacenum], map->start, map->end);
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry %X-%X references non-existant region %d\n", driver->source_file, driver->name, cpunum, spacenum, entry->start, entry->end, entry->region);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* look for misaligned entries */
|
||||
if ((start & (alignunit-1)) != 0 || (end & (alignunit-1)) != (alignunit-1))
|
||||
else if (entry->region_offs + (end - start + 1) > length)
|
||||
{
|
||||
mame_printf_error("%s: %s wrong %s memory read handler start = %08x, end = %08x ALIGN = %d\n", driver->source_file, driver->name, spacename[spacenum], map->start, map->end, alignunit);
|
||||
error = TRUE;
|
||||
}
|
||||
|
||||
/* if this is a program space, auto-assign implicit ROM entries */
|
||||
if ((FPTR)map->read.handler == STATIC_ROM && !map->region)
|
||||
{
|
||||
map->region = REGION_CPU1 + cpunum;
|
||||
map->region_offs = map->start;
|
||||
}
|
||||
|
||||
/* if this entry references a memory region, validate it */
|
||||
if (map->region && map->share == 0)
|
||||
{
|
||||
offs_t length = region_length[map->region];
|
||||
|
||||
if (length == 0)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry %X-%X references non-existant region %d\n", driver->source_file, driver->name, cpunum, spacenum, map->start, map->end, map->region);
|
||||
error = TRUE;
|
||||
}
|
||||
else if (map->region_offs + (end - start + 1) > length)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry %X-%X extends beyond region %d size (%X)\n", driver->source_file, driver->name, cpunum, spacenum, map->start, map->end, map->region, length);
|
||||
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)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry references nonexistant device type %s, tag %s\n", driver->source_file, driver->name, cpunum, spacenum, devtype_name(map->read_devtype), map->read_devtag);
|
||||
error = TRUE;
|
||||
}
|
||||
if (map->write_devtype != NULL && device_list_find_by_tag(config->devicelist, map->write_devtype, map->write_devtag) == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry references nonexistant device type %s, tag %s\n", driver->source_file, driver->name, cpunum, spacenum, devtype_name(map->write_devtype), map->write_devtag);
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry %X-%X extends beyond region %d size (%X)\n", driver->source_file, driver->name, cpunum, spacenum, entry->start, entry->end, entry->region, length);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flags = AM_EXTENDED_FLAGS(map);
|
||||
if (flags & AMEF_SPECIFIES_SPACE)
|
||||
{
|
||||
int val = (flags & AMEF_SPACE_MASK) >> AMEF_SPACE_SHIFT;
|
||||
if (val != spacenum)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU #%d space %d has address space %d handlers!", driver->source_file, driver->name, cpunum, spacenum, val);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* verify the type of memory handlers */
|
||||
if (flags & AMEF_SPECIFIES_DBITS)
|
||||
{
|
||||
int val = (flags & AMEF_DBITS_MASK) >> AMEF_DBITS_SHIFT;
|
||||
val = (val + 1) * 8;
|
||||
if (val != databus_width)
|
||||
{
|
||||
mame_printf_error("%s: %s cpu #%d uses wrong memory handlers for %s space! (width = %d, memory = %08x)\n", driver->source_file, driver->name, cpunum, spacename[spacenum], databus_width, val);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
/* make sure all devices exist */
|
||||
if (entry->read_devtype != NULL && device_list_find_by_tag(config->devicelist, entry->read_devtype, entry->read_devtag) == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry references nonexistant device type %s, tag %s\n", driver->source_file, driver->name, cpunum, spacenum, devtype_name(entry->read_devtype), entry->read_devtag);
|
||||
error = TRUE;
|
||||
}
|
||||
if (entry->write_devtype != NULL && device_list_find_by_tag(config->devicelist, entry->write_devtype, entry->write_devtag) == NULL)
|
||||
{
|
||||
mame_printf_error("%s: %s CPU %d space %d memory map entry references nonexistant device type %s, tag %s\n", driver->source_file, driver->name, cpunum, spacenum, devtype_name(entry->write_devtype), entry->write_devtag);
|
||||
error = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* release the address map */
|
||||
address_map_free(map);
|
||||
|
||||
/* validate the interrupts */
|
||||
if (cpu->vblank_interrupt != NULL)
|
||||
|
@ -1495,7 +1495,10 @@ void video_frame_update(running_machine *machine, int debug)
|
||||
{
|
||||
/* reset partial updates if we're paused or if the debugger is active */
|
||||
if (video_screen_exists(0) && (mame_is_paused(machine) || debug || mame_debug_is_active()))
|
||||
scanline0_callback(machine, machine->screen[0].private_data, 0);
|
||||
{
|
||||
void *param = (void *)machine->primary_screen;
|
||||
scanline0_callback(machine, param, 0);
|
||||
}
|
||||
|
||||
/* otherwise, call the video EOF callback */
|
||||
else if (machine->config->video_eof != NULL)
|
||||
|
@ -1538,7 +1538,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( demon_sound_ports, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x03) AM_WRITE(z80ctc_0_w)
|
||||
AM_RANGE(0x1c, 0x1f) AM_WRITE(z80ctc_0_w)
|
||||
ADDRESS_MAP_END
|
||||
|
@ -478,18 +478,18 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( dcs2_2115_program_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_BASE(&dcs_internal_program_ram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dcs2_2104_program_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM AM_BASE(&dcs_internal_program_ram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( dcs2_2115_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0400, 0x0400) AM_READWRITE(input_latch_r, input_latch_ack_w)
|
||||
AM_RANGE(0x0401, 0x0401) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x0402, 0x0402) AM_READWRITE(output_control_r, output_control_w)
|
||||
@ -501,7 +501,7 @@ static ADDRESS_MAP_START( dcs2_2115_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( dcs2_2104_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0400, 0x0400) AM_READWRITE(input_latch_r, input_latch_ack_w)
|
||||
AM_RANGE(0x0401, 0x0401) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x0402, 0x0402) AM_READWRITE(output_control_r, output_control_w)
|
||||
@ -521,13 +521,13 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( dsio_program_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x3fff) AM_RAM AM_BASE(&dcs_internal_program_ram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( dsio_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAMBANK(20)
|
||||
AM_RANGE(0x0400, 0x3fdf) AM_RAM
|
||||
AM_RANGE(0x3fe0, 0x3fff) AM_READWRITE(adsp_control_r, adsp_control_w)
|
||||
@ -535,7 +535,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( dsio_io_map, ADDRESS_SPACE_IO, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0400, 0x0400) AM_READWRITE(input_latch_r, input_latch_ack_w)
|
||||
AM_RANGE(0x0401, 0x0401) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x0402, 0x0402) AM_READWRITE(output_control_r, output_control_w)
|
||||
@ -553,13 +553,13 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( denver_program_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x3fff) AM_RAM AM_BASE(&dcs_internal_program_ram)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( denver_data_map, ADDRESS_SPACE_DATA, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x07ff) AM_RAMBANK(20)
|
||||
AM_RANGE(0x0800, 0x3fdf) AM_RAM
|
||||
AM_RANGE(0x3fe0, 0x3fff) AM_READWRITE(adsp_control_r, adsp_control_w)
|
||||
@ -567,7 +567,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( denver_io_map, ADDRESS_SPACE_IO, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0400, 0x0400) AM_READWRITE(input_latch_r, input_latch_ack_w)
|
||||
AM_RANGE(0x0401, 0x0401) AM_WRITE(output_latch_w)
|
||||
AM_RANGE(0x0402, 0x0402) AM_READWRITE(output_control_r, output_control_w)
|
||||
|
@ -821,7 +821,7 @@ static const struct CustomSound_interface venture_custom_interface =
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( venture_audio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x007f) AM_MIRROR(0x0780) AM_RAM
|
||||
AM_RANGE(0x0800, 0x087f) AM_MIRROR(0x0780) AM_READWRITE(exidy_shriot_r, exidy_shriot_w)
|
||||
AM_RANGE(0x1000, 0x1003) AM_MIRROR(0x07fc) AM_READWRITE(pia_1_r, pia_1_w)
|
||||
@ -882,13 +882,13 @@ static READ8_HANDLER( mtrap_voiceio_r )
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( cvsd_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( cvsd_iomap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0xff) AM_READWRITE(mtrap_voiceio_r, mtrap_voiceio_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -227,7 +227,7 @@ static const struct MSM5205interface irem_msm5205_interface_2 =
|
||||
/* complete address map verified from Moon Patrol/10 Yard Fight schematics */
|
||||
/* large map uses 8k ROMs, small map uses 4k ROMs; this is selected via a jumper */
|
||||
static ADDRESS_MAP_START( m52_small_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x0fff) AM_WRITE(m52_adpcm_w)
|
||||
AM_RANGE(0x1000, 0x1fff) AM_WRITE(sound_irq_ack_w)
|
||||
AM_RANGE(0x2000, 0x7fff) AM_ROM
|
||||
|
@ -465,7 +465,7 @@ static const struct AY8910interface ssio_ay8910_interface_2 =
|
||||
|
||||
/* address map verified from schematics */
|
||||
static ADDRESS_MAP_START( ssio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x3fff) AM_ROM
|
||||
AM_RANGE(0x8000, 0x83ff) AM_MIRROR(0x0c00) AM_RAM
|
||||
AM_RANGE(0x9000, 0x9003) AM_MIRROR(0x0ffc) AM_READ(ssio_data_r)
|
||||
@ -585,7 +585,8 @@ void csdeluxe_reset_w(int state)
|
||||
|
||||
/* address map determined by PAL; not verified */
|
||||
static ADDRESS_MAP_START( csdeluxe_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) | AMEF_ABITS(17) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x1ffff)
|
||||
AM_RANGE(0x000000, 0x007fff) AM_ROM
|
||||
AM_RANGE(0x018000, 0x018007) AM_READWRITE(csdeluxe_pia_r, csdeluxe_pia_w)
|
||||
AM_RANGE(0x01c000, 0x01cfff) AM_RAM
|
||||
@ -688,7 +689,8 @@ void soundsgood_reset_w(int state)
|
||||
|
||||
/* address map determined by PAL; not verified */
|
||||
static ADDRESS_MAP_START( soundsgood_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) | AMEF_ABITS(19) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ffff)
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_ROM
|
||||
AM_RANGE(0x060000, 0x060007) AM_READWRITE(pia_1_msb_alt_r, pia_1_msb_alt_w)
|
||||
AM_RANGE(0x070000, 0x070fff) AM_RAM
|
||||
@ -780,7 +782,7 @@ void turbocs_reset_w(int state)
|
||||
|
||||
/* address map verified from schematics */
|
||||
static ADDRESS_MAP_START( turbocs_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x07ff) AM_MIRROR(0x3800) AM_RAM
|
||||
AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x3ffc) AM_READWRITE(pia_0_alt_r, pia_0_alt_w)
|
||||
AM_RANGE(0x8000, 0xffff) AM_ROM
|
||||
@ -906,7 +908,7 @@ void squawkntalk_reset_w(int state)
|
||||
/* note that jumpers control the ROM sizes; if these are changed, use the alternate */
|
||||
/* address map below */
|
||||
static ADDRESS_MAP_START( squawkntalk_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
|
||||
AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x4f6c) AM_READWRITE(pia_0_r, pia_0_w)
|
||||
AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x4f6c) AM_READWRITE(pia_1_r, pia_1_w)
|
||||
@ -918,7 +920,7 @@ ADDRESS_MAP_END
|
||||
/* ROM size of 2k */
|
||||
#ifdef UNUSED_FUNCTION
|
||||
ADDRESS_MAP_START( squawkntalk_alt_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x0000, 0x007f) AM_RAM /* internal RAM */
|
||||
AM_RANGE(0x0080, 0x0083) AM_MIRROR(0x676c) AM_READWRITE(pia_0_r, pia_0_w)
|
||||
AM_RANGE(0x0090, 0x0093) AM_MIRROR(0x676c) AM_READWRITE(pia_1_r, pia_1_w)
|
||||
|
@ -517,7 +517,7 @@ static MACHINE_RESET( helifire_sound )
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( n8080_sound_cpu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(10) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3ff)
|
||||
AM_RANGE(0x0000, 0x03ff) AM_ROM
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -5,9 +5,9 @@
|
||||
|
||||
#define CPUTAG_54XX "54XX"
|
||||
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_program );
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_data );
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_io );
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_program, 8 );
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_data, 8 );
|
||||
ADDRESS_MAP_EXTERN( namco_54xx_map_io, 8 );
|
||||
|
||||
void namco_54xx_write(UINT8 data);
|
||||
|
||||
|
@ -13,9 +13,9 @@
|
||||
#include "sound/c352.h"
|
||||
#include "cpu/m37710/m37710.h"
|
||||
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_map);
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_share_map);
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_io);
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_map, 16);
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_share_map, 16);
|
||||
ADDRESS_MAP_EXTERN(namcoc7x_mcu_io, 8);
|
||||
|
||||
INTERRUPT_GEN( namcoc7x_interrupt );
|
||||
|
||||
|
@ -134,7 +134,7 @@ static const struct AY8910interface redalert_ay8910_interface =
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( redalert_audio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x0c00) AM_RAM
|
||||
AM_RANGE(0x1000, 0x1000) AM_MIRROR(0x0ffe) AM_READWRITE(MRA8_NOP, redalert_AY8910_w)
|
||||
AM_RANGE(0x1001, 0x1001) AM_MIRROR(0x0ffe) AM_READWRITE(redalert_ay8910_latch_1_r, redalert_ay8910_latch_2_w)
|
||||
@ -303,7 +303,7 @@ static WRITE8_HANDLER( demoneye_ay8910_data_w )
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( demoneye_audio_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x007f) AM_RAM
|
||||
AM_RANGE(0x0500, 0x0503) AM_READWRITE(pia_0_r, pia_0_w)
|
||||
AM_RANGE(0x2000, 0x3fff) AM_ROM
|
||||
|
@ -391,7 +391,7 @@ static ADDRESS_MAP_START( ad2083_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ad2083_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(ad2083_tms5110_ctrl_w)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x20, 0x20) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
|
||||
|
@ -29,10 +29,10 @@
|
||||
#include "sound/okim6295.h"
|
||||
#include "sound/custom.h"
|
||||
|
||||
ADDRESS_MAP_EXTERN(seibu_sound_map);
|
||||
ADDRESS_MAP_EXTERN(seibu2_sound_map);
|
||||
ADDRESS_MAP_EXTERN(seibu3_sound_map);
|
||||
ADDRESS_MAP_EXTERN(seibu3_adpcm_sound_map);
|
||||
ADDRESS_MAP_EXTERN(seibu_sound_map, 8);
|
||||
ADDRESS_MAP_EXTERN(seibu2_sound_map, 8);
|
||||
ADDRESS_MAP_EXTERN(seibu3_sound_map, 8);
|
||||
ADDRESS_MAP_EXTERN(seibu3_adpcm_sound_map, 8);
|
||||
|
||||
READ16_HANDLER( seibu_main_word_r );
|
||||
READ8_HANDLER( seibu_main_v30_r );
|
||||
|
@ -277,7 +277,7 @@ ADDRESS_MAP_END
|
||||
// 40 W external ROM banking? (the only 0 bit enables a ROM)
|
||||
// 50 W test mode status flags (bit 0 = ROM test fail, bit 1 = RAM test fail, bit 2 = YM2151 IRQ not received)
|
||||
ADDRESS_MAP_START( t5182_io, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(YM2151_status_port_0_r, YM2151_data_port_0_w)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(t5182_sharedram_semaphore_snd_acquire_w)
|
||||
|
@ -1,8 +1,8 @@
|
||||
#define CPUTAG_T5182 "T5182"
|
||||
#define T5182COINPORT "T5182_COIN"
|
||||
|
||||
ADDRESS_MAP_EXTERN( t5182_map );
|
||||
ADDRESS_MAP_EXTERN( t5182_io );
|
||||
ADDRESS_MAP_EXTERN( t5182_map, 8 );
|
||||
ADDRESS_MAP_EXTERN( t5182_io, 8 );
|
||||
|
||||
WRITE8_HANDLER( t5182_sound_irq_w );
|
||||
READ8_HANDLER(t5182_sharedram_semaphore_snd_r);
|
||||
|
@ -23,6 +23,6 @@ void taito_f3_soundsystem_reset(void);
|
||||
MDRV_SOUND_ROUTE(0, "left", 1.0) \
|
||||
MDRV_SOUND_ROUTE(1, "right", 1.0) \
|
||||
|
||||
ADDRESS_MAP_EXTERN(f3_sound_map);
|
||||
ADDRESS_MAP_EXTERN(f3_sound_map, 16);
|
||||
|
||||
extern const struct ES5505interface es5505_interface;
|
||||
|
@ -217,7 +217,7 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( 20pacgal_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x3f) AM_NOP /* Z180 internal registers */
|
||||
AM_RANGE(0x40, 0x7f) AM_NOP /* Z180 internal registers */
|
||||
AM_RANGE(0x80, 0x80) AM_READ(input_port_0_r)
|
||||
|
@ -801,7 +801,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READWRITE(buggychl_68705_portA_r, buggychl_68705_portA_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_READWRITE(buggychl_68705_portB_r, buggychl_68705_portB_w)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READWRITE(buggychl_68705_portC_r, buggychl_68705_portC_w)
|
||||
|
@ -85,7 +85,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(input_port_1_r)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(input_port_2_r)
|
||||
|
@ -274,7 +274,7 @@ static ADDRESS_MAP_START( acefruit_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( acefruit_io, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS(AMEF_ABITS(8))
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_NOP /* ? */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -225,7 +225,7 @@ static ADDRESS_MAP_START( pspikesc_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( karatblz_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(20) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0x080000, 0x081fff) AM_READWRITE(MRA16_RAM, aerofgt_bg1videoram_w) AM_BASE(&aerofgt_bg1videoram)
|
||||
AM_RANGE(0x082000, 0x083fff) AM_READWRITE(MRA16_RAM, aerofgt_bg2videoram_w) AM_BASE(&aerofgt_bg2videoram)
|
||||
@ -260,7 +260,7 @@ static ADDRESS_MAP_START( spinlbrk_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( turbofrc_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(20) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xfffff)
|
||||
AM_RANGE(0x000000, 0x0bffff) AM_ROM
|
||||
AM_RANGE(0x0c0000, 0x0cffff) AM_RAM /* work RAM */
|
||||
AM_RANGE(0x0d0000, 0x0d1fff) AM_READWRITE(MRA16_RAM, aerofgt_bg1videoram_w) AM_BASE(&aerofgt_bg1videoram)
|
||||
@ -375,7 +375,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( turbofrc_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(aerofgt_sh_bankswitch_w)
|
||||
AM_RANGE(0x14, 0x14) AM_READWRITE(soundlatch_r, pending_command_clear_w)
|
||||
AM_RANGE(0x18, 0x18) AM_READWRITE(YM2610_status_port_0_A_r, YM2610_control_port_0_A_w)
|
||||
@ -385,7 +385,7 @@ static ADDRESS_MAP_START( turbofrc_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( aerofgt_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(YM2610_status_port_0_A_r, YM2610_control_port_0_A_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2610_data_port_0_A_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(YM2610_status_port_0_B_r, YM2610_control_port_0_B_w)
|
||||
|
@ -375,7 +375,7 @@ static ADDRESS_MAP_START( master_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( master_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(master_bankswitch_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITENOP // ???
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(master_nmi_trigger_w)
|
||||
@ -395,7 +395,7 @@ static ADDRESS_MAP_START( slave_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( slave_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(slave_bankswitch_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(soundcommand2_r, soundcommand_w)
|
||||
AM_RANGE(0x04, 0x0c) AM_WRITE(airbustr_scrollregs_w)
|
||||
@ -414,7 +414,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(sound_bankswitch_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
|
||||
AM_RANGE(0x03, 0x03) AM_READWRITE(YM2203_read_port_0_r, YM2203_write_port_0_w)
|
||||
|
@ -325,7 +325,7 @@ static void alg_cia_1_porta_w(UINT8 data)
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map_r1, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram) AM_SIZE(&amiga_chip_ram_size)
|
||||
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w)
|
||||
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_BASE(&amiga_custom_regs)
|
||||
@ -338,7 +338,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_map_r2, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram) AM_SIZE(&amiga_chip_ram_size)
|
||||
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w)
|
||||
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_BASE(&amiga_custom_regs)
|
||||
@ -351,7 +351,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( main_map_picmatic, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram) AM_SIZE(&amiga_chip_ram_size)
|
||||
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w)
|
||||
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_BASE(&amiga_custom_regs)
|
||||
|
@ -828,7 +828,7 @@ static ADDRESS_MAP_START( tnexspce_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(soundlatch_r, soundlatch_clear_w)
|
||||
AM_RANGE(0x08, 0x08) AM_WRITE(DAC_0_signed_data_w)
|
||||
AM_RANGE(0x0a, 0x0a) AM_WRITE(YM2413_register_port_0_w)
|
||||
@ -839,7 +839,7 @@ static ADDRESS_MAP_START( sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( kyros_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(YM2203_control_port_0_w)
|
||||
AM_RANGE(0x11, 0x11) AM_WRITE(YM2203_write_port_0_w)
|
||||
AM_RANGE(0x80, 0x80) AM_WRITE(YM2203_write_port_1_w)
|
||||
@ -849,7 +849,7 @@ static ADDRESS_MAP_START( kyros_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( jongbou_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(soundlatch_clear_w)
|
||||
@ -857,7 +857,7 @@ static ADDRESS_MAP_START( jongbou_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( tnexspce_sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(YM3812_status_port_0_r, YM3812_control_port_0_w)
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(YM3812_write_port_0_w)
|
||||
AM_RANGE(0x3b, 0x3b) AM_READNOP // unknown read port
|
||||
|
@ -73,7 +73,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(AY8910_read_port_0_r, AY8910_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(AY8910_write_port_0_w)
|
||||
AM_RANGE(0x80, 0x80) AM_READWRITE(AY8910_read_port_1_r, AY8910_control_port_1_w)
|
||||
|
@ -123,13 +123,13 @@ static ADDRESS_MAP_START( amidar_sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( amidar_sound_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x20, 0x20) AM_READ(AY8910_read_port_0_r)
|
||||
AM_RANGE(0x80, 0x80) AM_READ(AY8910_read_port_1_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( amidar_sound_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x20, 0x20) AM_WRITE(AY8910_write_port_0_w)
|
||||
AM_RANGE(0x40, 0x40) AM_WRITE(AY8910_control_port_1_w)
|
||||
|
@ -513,7 +513,7 @@ static ADDRESS_MAP_START( ampoker2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( ampoker2_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x08, 0x0f) AM_WRITENOP /* inexistent in the real hardware */
|
||||
AM_RANGE(0x10, 0x10) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x11, 0x11) AM_READ(input_port_1_r)
|
||||
|
@ -232,7 +232,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(MWA8_NOP) // 00 on start-up, not again
|
||||
AM_RANGE(0x42, 0x42) AM_WRITE(angelkds_cpu_bank_write)
|
||||
AM_RANGE(0x43, 0x43) AM_WRITE(MWA8_NOP) // 9a on start-up, not again
|
||||
@ -256,7 +256,7 @@ static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sub_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2203_write_port_0_w)
|
||||
AM_RANGE(0x40, 0x40) AM_READWRITE(YM2203_status_port_1_r, YM2203_control_port_1_w)
|
||||
|
@ -103,7 +103,7 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( main_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(input_port_0_r, SN76496_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(input_port_1_r, SN76496_1_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(SN76496_2_w)
|
||||
|
@ -182,14 +182,14 @@ static ADDRESS_MAP_START( snd_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( snd_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(YM2151_status_port_0_r)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(aquarium_oki_r)
|
||||
AM_RANGE(0x04, 0x04) AM_READ(soundlatch_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( snd_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2151_register_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2151_data_port_0_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(aquarium_oki_w)
|
||||
|
@ -188,7 +188,7 @@ static void arcadia_reset_coins(void)
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( amiga_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_RAMBANK(1) AM_BASE(&amiga_chip_ram) AM_SIZE(&amiga_chip_ram_size)
|
||||
AM_RANGE(0xbfd000, 0xbfefff) AM_READWRITE(amiga_cia_r, amiga_cia_w)
|
||||
AM_RANGE(0xc00000, 0xdfffff) AM_READWRITE(amiga_custom_r, amiga_custom_w) AM_BASE(&amiga_custom_regs)
|
||||
|
@ -455,19 +455,19 @@ static ADDRESS_MAP_START( sound_writemem_c, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_readport_1, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(YM2203_status_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(YM2203_read_port_0_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_writeport_1, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2203_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2203_write_port_0_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_readport_2, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(YM2203_status_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(YM2203_read_port_0_r)
|
||||
AM_RANGE(0x80, 0x80) AM_READ(YM2203_status_port_1_r)
|
||||
@ -475,7 +475,7 @@ static ADDRESS_MAP_START( sound_readport_2, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_writeport_2, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2203_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2203_write_port_0_w)
|
||||
AM_RANGE(0x80, 0x80) AM_WRITE(YM2203_control_port_1_w)
|
||||
|
@ -511,7 +511,7 @@ static ADDRESS_MAP_START( bootleg_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READWRITE(arkanoid_68705_portA_r, arkanoid_68705_portA_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_READ(arkanoid_input_2_r)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READWRITE(arkanoid_68705_portC_r, arkanoid_68705_portC_w)
|
||||
|
@ -451,13 +451,13 @@ static READ8_HANDLER( soundlatch_clear_r )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x4, 0x4) AM_READ(soundlatch_clear_r)
|
||||
AM_RANGE(0x6, 0x6) AM_READ(soundlatch_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x0, 0x0) AM_WRITE(YM3812_control_port_0_w)
|
||||
AM_RANGE(0x1, 0x1) AM_WRITE(YM3812_write_port_0_w)
|
||||
AM_RANGE(0x2, 0x2) AM_WRITE(DAC_0_signed_data_w)
|
||||
|
@ -163,7 +163,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(YM2203_status_port_0_r, YM2203_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(YM2203_read_port_0_r, YM2203_write_port_0_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(adpcm_data_w)
|
||||
|
@ -216,7 +216,7 @@ static WRITE8_HANDLER( llander_led_w )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( asteroid_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x02ff) AM_RAM AM_RAMBANK(1) AM_BASE(&asteroid_ram1)
|
||||
AM_RANGE(0x0300, 0x03ff) AM_RAM AM_RAMBANK(2) AM_BASE(&asteroid_ram2)
|
||||
@ -237,7 +237,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( astdelux_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x02ff) AM_RAM AM_RAMBANK(1) AM_BASE(&asteroid_ram1)
|
||||
AM_RANGE(0x0300, 0x03ff) AM_RAM AM_RAMBANK(2) AM_BASE(&asteroid_ram2)
|
||||
@ -263,7 +263,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( llander_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x00ff) AM_RAM AM_MIRROR(0x1f00)
|
||||
AM_RANGE(0x2000, 0x2000) AM_READ(llander_IN0_r) /* IN0 */
|
||||
AM_RANGE(0x2400, 0x2407) AM_READ(asteroid_IN1_r) /* IN1 */
|
||||
|
@ -315,7 +315,7 @@ static WRITE8_HANDLER( spaceint_sound2_w )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( kamikaze_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x1bff) AM_ROM
|
||||
AM_RANGE(0x1c00, 0x1fff) AM_RAM
|
||||
AM_RANGE(0x2000, 0x3fff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
|
||||
@ -330,13 +330,13 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( kamikaze_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0xff) AM_READWRITE(kamikaze_ppi_r, kamikaze_ppi_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( spaceint_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(input_port_1_r)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(spaceint_sound1_w)
|
||||
|
@ -708,7 +708,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( tenpin_sub_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x90, 0x93) AM_READWRITE(z80ctc_0_r, z80ctc_0_w)
|
||||
AM_RANGE(0x97, 0x97) AM_READ(soundlatch_r)
|
||||
AM_RANGE(0x98, 0x98) AM_WRITE(AY8910_control_port_0_w)
|
||||
|
@ -516,8 +516,8 @@ static ADDRESS_MAP_START( astrof_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8005, 0x8005) AM_MIRROR(0x1ff8) AM_READWRITE(MRA8_NOP, astrof_video_control_2_w)
|
||||
AM_RANGE(0x8006, 0x8006) AM_MIRROR(0x1ff8) AM_READWRITE(MRA8_NOP, astrof_audio_1_w)
|
||||
AM_RANGE(0x8007, 0x8007) AM_MIRROR(0x1ff8) AM_READWRITE(MRA8_NOP, astrof_audio_2_w)
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1ff8) AM_READWRITE(port_tag_to_handler("IN"), MWA8_NOP)
|
||||
AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x1ff8) AM_READWRITE(port_tag_to_handler("DSW"), MWA8_NOP)
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1ff8) AM_READ_PORT("IN") AM_WRITENOP
|
||||
AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x1ff8) AM_READ_PORT("DSW") AM_WRITENOP
|
||||
AM_RANGE(0xa002, 0xa002) AM_MIRROR(0x1ff8) AM_READWRITE(irq_ack_r, MWA8_NOP)
|
||||
AM_RANGE(0xa003, 0xa007) AM_MIRROR(0x1ff8) AM_NOP
|
||||
AM_RANGE(0xc000, 0xffff) AM_ROM
|
||||
@ -535,8 +535,8 @@ static ADDRESS_MAP_START( spfghmk2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
AM_RANGE(0x8005, 0x8005) AM_MIRROR(0x1ff8) AM_READWRITE(MRA8_NOP, spfghmk2_video_control_2_w)
|
||||
AM_RANGE(0x8006, 0x8006) AM_MIRROR(0x1ff8) AM_READWRITE(MRA8_NOP, spfghmk2_audio_w)
|
||||
AM_RANGE(0x8007, 0x8007) AM_MIRROR(0x1ff8) AM_NOP
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1ff8) AM_READWRITE(port_tag_to_handler("IN"), MWA8_NOP)
|
||||
AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x1ff8) AM_READWRITE(port_tag_to_handler("DSW"), MWA8_NOP)
|
||||
AM_RANGE(0xa000, 0xa000) AM_MIRROR(0x1ff8) AM_READ_PORT("IN") AM_WRITENOP
|
||||
AM_RANGE(0xa001, 0xa001) AM_MIRROR(0x1ff8) AM_READ_PORT("DSW") AM_WRITENOP
|
||||
AM_RANGE(0xa002, 0xa002) AM_MIRROR(0x1ff8) AM_READWRITE(irq_ack_r, MWA8_NOP)
|
||||
AM_RANGE(0xa003, 0xa007) AM_MIRROR(0x1ff8) AM_NOP
|
||||
AM_RANGE(0xc000, 0xffff) AM_ROM
|
||||
|
@ -149,7 +149,7 @@ static PALETTE_INIT( atarifb )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( atarifb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||
@ -170,7 +170,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( atarifb4_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||
@ -192,7 +192,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( abaseb_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||
@ -213,7 +213,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( soccer_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x025f) AM_READWRITE(MRA8_RAM, atarifb_alpha1_videoram_w) AM_BASE(&atarifb_alphap1_videoram)
|
||||
AM_RANGE(0x0260, 0x039f) AM_RAM
|
||||
|
@ -1182,7 +1182,7 @@ static READ32_HANDLER( inputs_01_r )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 32 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x07ffff) AM_ROM
|
||||
AM_RANGE(0xc80000, 0xc80fff) AM_RAM
|
||||
AM_RANGE(0xca0000, 0xca0fff) AM_READWRITE(atarigx2_protection_r, atarigx2_protection_w) AM_BASE(&protection_base)
|
||||
|
@ -55,7 +55,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( master_map_io, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x04, 0x04) AM_READ(leland_80186_response_r)
|
||||
AM_RANGE(0x05, 0x05) AM_WRITE(leland_80186_command_hi_w)
|
||||
AM_RANGE(0x06, 0x06) AM_WRITE(leland_80186_command_lo_w)
|
||||
@ -86,7 +86,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( slave_map_io, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x60, 0x7f) AM_READWRITE(ataxx_svram_port_r, ataxx_svram_port_w)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -83,7 +83,7 @@ static WRITE8_HANDLER(attckufo_io_w)
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( cpu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x0fff) AM_RAM AM_BASE(&mainram)
|
||||
AM_RANGE(0x1000, 0x100f) AM_READWRITE(attckufo_port_r, attckufo_port_w)
|
||||
AM_RANGE(0x1400, 0x1403) AM_READWRITE(attckufo_io_r, attckufo_io_w)
|
||||
|
@ -129,7 +129,7 @@ static WRITE8_HANDLER( avalance_start_lamp_w )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_BASE(&videoram) AM_SIZE(&videoram_size)
|
||||
AM_RANGE(0x2000, 0x2000) AM_MIRROR(0x0ffc) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x2001, 0x2001) AM_MIRROR(0x0ffc) AM_READ(input_port_1_r)
|
||||
|
@ -257,12 +257,12 @@ static ADDRESS_MAP_START( pickin_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x0c, 0x0c) AM_READ(AY8910_read_port_0_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x08, 0x08) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x09, 0x09) AM_WRITE(AY8910_write_port_0_w)
|
||||
//AM_RANGE(0x56, 0x56) AM_WRITE(MWA8_NOP)
|
||||
|
@ -270,7 +270,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( cpu2_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x03) AM_READWRITE(balsente_counter_8253_r, balsente_counter_8253_w)
|
||||
AM_RANGE(0x08, 0x0f) AM_READ(balsente_counter_state_r)
|
||||
AM_RANGE(0x08, 0x09) AM_WRITE(balsente_counter_control_w)
|
||||
|
@ -125,7 +125,7 @@ static ADDRESS_MAP_START( bankp_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bankp_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(input_port_0_r, SN76496_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(input_port_1_r, SN76496_1_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(input_port_2_r, SN76496_2_w)
|
||||
|
@ -118,7 +118,8 @@ static WRITE16_HANDLER( latch_w )
|
||||
/* addresses in the 1xxxxx region map to /WAIT */
|
||||
/* addresses in the 2xxxxx region map to /WAIT2 */
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) | AMEF_ABITS(22) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fffff)
|
||||
AM_RANGE(0x000000, 0x0bffff) AM_ROM
|
||||
AM_RANGE(0x100000, 0x10ffff) AM_MIRROR(0x010000) AM_RAM
|
||||
AM_RANGE(0x120000, 0x120fff) AM_MIRROR(0x01f000) AM_READWRITE(atarigen_eeprom_r, atarigen_eeprom_w) AM_BASE(&atarigen_eeprom) AM_SIZE(&atarigen_eeprom_size)
|
||||
|
@ -75,7 +75,7 @@ static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(input_port_1_r)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(input_port_2_r)
|
||||
@ -84,7 +84,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(battlex_flipscreen_w)
|
||||
/* verify all of these */
|
||||
AM_RANGE(0x22, 0x22) AM_WRITE(AY8910_write_port_0_w)
|
||||
|
@ -372,13 +372,13 @@ static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(YM2610_status_port_0_A_r)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(YM2610_status_port_0_B_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2610_control_port_0_A_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2610_data_port_0_A_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(YM2610_control_port_0_B_w)
|
||||
@ -387,13 +387,13 @@ static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sounda_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(YM2608_status_port_0_A_r)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(YM2608_status_port_0_B_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( sounda_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(YM2608_control_port_0_A_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(YM2608_data_port_0_A_w)
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(YM2608_control_port_0_B_w)
|
||||
|
@ -222,7 +222,7 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(controller_select_w) /* to be confirmed */
|
||||
ADDRESS_MAP_END
|
||||
|
||||
|
@ -583,7 +583,7 @@ ADDRESS_MAP_END
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( berzerk_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x3f) AM_NOP
|
||||
AM_RANGE(0x40, 0x47) AM_READWRITE(berzerk_audio_r, berzerk_audio_w)
|
||||
AM_RANGE(0x48, 0x48) AM_READWRITE(input_port_0_r, MWA8_NOP)
|
||||
|
@ -1090,7 +1090,7 @@ static ADDRESS_MAP_START( z80_prog_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( z80_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x23) AM_READWRITE(chipset_r, chipset_w)
|
||||
AM_RANGE(0x24, 0x24) AM_WRITE(acia6850_0_ctrl_w)
|
||||
AM_RANGE(0x25, 0x25) AM_WRITE(acia6850_0_data_w)
|
||||
|
@ -324,7 +324,7 @@ static ADDRESS_MAP_START( writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bigevglf_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(MWA8_NOP) /* video ram enable ???*/
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(bigevglf_gfxcontrol_w) /* plane select */
|
||||
AM_RANGE(0x02, 0x02) AM_WRITE(beg_banking_w)
|
||||
@ -334,7 +334,7 @@ static ADDRESS_MAP_START( bigevglf_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bigevglf_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x06, 0x06) AM_READ(beg_status_r)
|
||||
ADDRESS_MAP_END
|
||||
|
||||
@ -356,7 +356,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( bigevglf_sub_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x08, 0x08) AM_WRITE(MWA8_NOP) /*coinlockout_w ???? watchdog ???? */
|
||||
AM_RANGE(0x0c, 0x0c) AM_WRITE(bigevglf_mcu_w)
|
||||
AM_RANGE(0x0e, 0x0e) AM_WRITE(MWA8_NOP) /* 0-enable MCU, 1-keep reset line ASSERTED; D0 goes to the input of ls74 and the /Q of this ls74 goes to reset line on 68705 */
|
||||
@ -381,7 +381,7 @@ static READ8_HANDLER( sub_cpu_mcu_coin_port_r )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( bigevglf_sub_readport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(input_port_0_r)
|
||||
AM_RANGE(0x01, 0x01) AM_READ(MRA8_NOP)
|
||||
AM_RANGE(0x02, 0x02) AM_READ(input_port_4_r)
|
||||
@ -426,7 +426,7 @@ ADDRESS_MAP_END
|
||||
/* MCU */
|
||||
|
||||
static ADDRESS_MAP_START( m68705_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READ(bigevglf_68705_portA_r)
|
||||
AM_RANGE(0x0001, 0x0001) AM_READ(bigevglf_68705_portB_r)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READ(bigevglf_68705_portC_r)
|
||||
@ -435,7 +435,7 @@ static ADDRESS_MAP_START( m68705_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( m68705_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_WRITE(bigevglf_68705_portA_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_WRITE(bigevglf_68705_portB_w)
|
||||
AM_RANGE(0x0002, 0x0002) AM_WRITE(bigevglf_68705_portC_w)
|
||||
|
@ -362,7 +362,7 @@ static READ8_HANDLER( soundlatch_clear_r )
|
||||
}
|
||||
|
||||
static ADDRESS_MAP_START( soundport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x0, 0x0) AM_WRITE(YM3812_control_port_0_w)
|
||||
AM_RANGE(0x1, 0x1) AM_WRITE(YM3812_write_port_0_w)
|
||||
AM_RANGE(0x2, 0x2) AM_WRITE(DAC_0_signed_data_w)
|
||||
|
@ -257,7 +257,7 @@ static WRITE16_HANDLER( bishjan_coin_w )
|
||||
*/
|
||||
|
||||
static ADDRESS_MAP_START( bishjan_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(24) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xffffff)
|
||||
|
||||
AM_RANGE( 0x000000, 0x07ffff ) AM_ROM AM_REGION(REGION_CPU1, 0)
|
||||
AM_RANGE( 0x080000, 0x0fffff ) AM_ROM AM_REGION(REGION_CPU1, 0)
|
||||
|
@ -124,7 +124,7 @@ static ADDRESS_MAP_START( bking_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bking_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(input_port_0_r, bking_xld1_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(input_port_1_r, bking_yld1_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(input_port_2_r, bking_xld2_w)
|
||||
@ -143,7 +143,7 @@ static ADDRESS_MAP_START( bking_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( bking3_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READWRITE(input_port_0_r, bking_xld1_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(input_port_1_r, bking_yld1_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READWRITE(input_port_2_r, bking_xld2_w)
|
||||
@ -246,7 +246,7 @@ static READ8_HANDLER( bking3_68705_portC_r )
|
||||
}
|
||||
#endif
|
||||
static ADDRESS_MAP_START( m68705_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READWRITE(buggychl_68705_portA_r, buggychl_68705_portA_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_READWRITE(buggychl_68705_portB_r, buggychl_68705_portB_w)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READWRITE(buggychl_68705_portC_r, buggychl_68705_portC_w)
|
||||
|
@ -74,7 +74,7 @@ static ADDRESS_MAP_START( mem_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( port_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ_PORT("IN0") AM_WRITE(soundlatch_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_WRITE(blktiger_bankswitch_w)
|
||||
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2")
|
||||
|
@ -83,7 +83,7 @@ static READ16_HANDLER( inputs_r )
|
||||
|
||||
/* full map verified from schematics */
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 16 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_UNMAP(1) )
|
||||
ADDRESS_MAP_UNMAP_HIGH
|
||||
AM_RANGE(0x000000, 0x03ffff) AM_MIRROR(0x7c0000) AM_ROM
|
||||
AM_RANGE(0xff8000, 0xff8001) AM_MIRROR(0x7f81fe) AM_WRITE(watchdog_reset16_w)
|
||||
AM_RANGE(0xff8200, 0xff8201) AM_MIRROR(0x7f81fe) AM_WRITE(atarigen_scanline_int_ack_w)
|
||||
|
@ -176,7 +176,7 @@ ADDRESS_MAP_END
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( bombjack_sound_writeport, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(AY8910_write_port_0_w)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(AY8910_control_port_1_w)
|
||||
|
@ -178,7 +178,7 @@ static WRITE8_HANDLER( boxer_led_w )
|
||||
|
||||
|
||||
static ADDRESS_MAP_START( boxer_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM
|
||||
AM_RANGE(0x0200, 0x03ff) AM_RAM AM_BASE(&boxer_tile_ram)
|
||||
AM_RANGE(0x0800, 0x08ff) AM_READ(boxer_input_r)
|
||||
|
@ -72,7 +72,7 @@ static PALETTE_INIT( bsktball )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x01ff) AM_RAM /* Zero Page RAM */
|
||||
AM_RANGE(0x0800, 0x0800) AM_READ(bsktball_in0_r)
|
||||
AM_RANGE(0x0802, 0x0802) AM_READ(input_port_5_r)
|
||||
|
@ -377,7 +377,7 @@ ADDRESS_MAP_END
|
||||
|
||||
// The 68705 is from a bootleg, the original MCU is a 6801U4
|
||||
static ADDRESS_MAP_START( bootlegmcu_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x000, 0x000) AM_READWRITE(bublbobl_68705_portA_r, bublbobl_68705_portA_w)
|
||||
AM_RANGE(0x001, 0x001) AM_READWRITE(bublbobl_68705_portB_r, bublbobl_68705_portB_w)
|
||||
AM_RANGE(0x002, 0x002) AM_READ(input_port_0_r) // COIN
|
||||
|
@ -232,7 +232,7 @@ static ADDRESS_MAP_START( sound_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mcu_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_READ(buggychl_68705_portA_r)
|
||||
AM_RANGE(0x0001, 0x0001) AM_READ(buggychl_68705_portB_r)
|
||||
AM_RANGE(0x0002, 0x0002) AM_READ(buggychl_68705_portC_r)
|
||||
@ -241,7 +241,7 @@ static ADDRESS_MAP_START( mcu_readmem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( mcu_writemem, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(11) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7ff)
|
||||
AM_RANGE(0x0000, 0x0000) AM_WRITE(buggychl_68705_portA_w)
|
||||
AM_RANGE(0x0001, 0x0001) AM_WRITE(buggychl_68705_portB_w)
|
||||
AM_RANGE(0x0002, 0x0002) AM_WRITE(buggychl_68705_portC_w)
|
||||
|
@ -311,7 +311,7 @@ static READ8_HANDLER( redbaron_joy_r )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( bzone_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM
|
||||
AM_RANGE(0x0800, 0x0800) AM_READ(bzone_IN0_r) /* IN0 */
|
||||
AM_RANGE(0x0a00, 0x0a00) AM_READ(input_port_1_r) /* DSW1 */
|
||||
@ -331,7 +331,7 @@ static ADDRESS_MAP_START( bzone_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( redbaron_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(15) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x7fff)
|
||||
AM_RANGE(0x0000, 0x03ff) AM_RAM
|
||||
AM_RANGE(0x0800, 0x0800) AM_READ(bzone_IN0_r) /* IN0 */
|
||||
AM_RANGE(0x0a00, 0x0a00) AM_READ(input_port_1_r) /* DSW1 */
|
||||
|
@ -275,7 +275,7 @@ static ADDRESS_MAP_START( cabalbl_talk1_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( cabalbl_talk1_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(soundlatch3_r)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_adpcm_0_w)
|
||||
ADDRESS_MAP_END
|
||||
@ -285,7 +285,7 @@ static ADDRESS_MAP_START( cabalbl_talk2_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( cabalbl_talk2_portmap, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_READ(soundlatch4_r)
|
||||
AM_RANGE(0x01, 0x01) AM_WRITE(cabalbl_adpcm_1_w)
|
||||
ADDRESS_MAP_END
|
||||
|
@ -224,7 +224,7 @@ static ADDRESS_MAP_START( calorie_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_END
|
||||
|
||||
static ADDRESS_MAP_START( calorie_sound_io_map, ADDRESS_SPACE_IO, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(8) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0xff)
|
||||
AM_RANGE(0x00, 0x00) AM_WRITE(AY8910_control_port_0_w)
|
||||
AM_RANGE(0x01, 0x01) AM_READWRITE(AY8910_read_port_0_r, AY8910_write_port_0_w)
|
||||
AM_RANGE(0x10, 0x10) AM_WRITE(AY8910_control_port_1_w)
|
||||
|
@ -106,7 +106,7 @@ static WRITE8_HANDLER( canyon_led_w )
|
||||
*************************************/
|
||||
|
||||
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
|
||||
ADDRESS_MAP_FLAGS( AMEF_ABITS(14) )
|
||||
ADDRESS_MAP_GLOBAL_MASK(0x3fff)
|
||||
AM_RANGE(0x0000, 0x00ff) AM_MIRROR(0x100) AM_RAM
|
||||
AM_RANGE(0x0400, 0x0401) AM_WRITE(canyon_motor_w)
|
||||
AM_RANGE(0x0500, 0x0500) AM_WRITE(canyon_explode_w)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user