summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2009-03-07 08:54:03 +0000
committer Aaron Giles <aaron@aarongiles.com>2009-03-07 08:54:03 +0000
commit75f0ff10d115ba6634dd6fa51f2bd1ba84fd6b84 (patch)
treea79cf5cf5432da3995b64a79454a55fd0723ae32
parent2f9ee68652a09ad7bcea621c46cff2c6cdbeea76 (diff)
Added function calls to replace the MIPS3 DRC's various CPU_SET_INFO
bits. Fixed DCS2 speedup handler so it doesn't get lost during a memory remap.
-rw-r--r--src/emu/cpu/mips/mips3.h5
-rw-r--r--src/emu/cpu/mips/mips3drc.c69
-rw-r--r--src/mame/audio/dcs.c20
-rw-r--r--src/mame/drivers/aleck64.c8
-rw-r--r--src/mame/drivers/hng64.c33
-rw-r--r--src/mame/drivers/kinst.c22
-rw-r--r--src/mame/drivers/seattle.c82
-rw-r--r--src/mame/drivers/vegas.c54
-rw-r--r--src/mame/includes/n64.h3
-rw-r--r--src/mame/machine/n64.c19
10 files changed, 146 insertions, 169 deletions
diff --git a/src/emu/cpu/mips/mips3.h b/src/emu/cpu/mips/mips3.h
index c7ca7c50b51..b8929b06d9a 100644
--- a/src/emu/cpu/mips/mips3.h
+++ b/src/emu/cpu/mips/mips3.h
@@ -225,6 +225,11 @@ struct _mips3_config
PUBLIC FUNCTIONS
***************************************************************************/
+void mips3drc_set_options(const device_config *device, UINT32 options);
+void mips3drc_add_fastram(const device_config *device, offs_t start, offs_t end, UINT8 readonly, void *base);
+void mips3drc_add_hotspot(const device_config *device, offs_t pc, UINT32 opcode, UINT32 cycles);
+
+
#if (HAS_R4600)
CPU_GET_INFO( r4600be );
#define CPU_R4600BE CPU_GET_INFO_NAME( r4600be )
diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c
index 1b82e803c4c..3a741a3bd1b 100644
--- a/src/emu/cpu/mips/mips3drc.c
+++ b/src/emu/cpu/mips/mips3drc.c
@@ -565,27 +565,9 @@ static CPU_DISASSEMBLE( mips3 )
static CPU_SET_INFO( mips3 )
{
mips3_state *mips3 = *(mips3_state **)device->token;
- switch (state)
- {
- /* --- the following bits of info are set as 64-bit signed integers --- */
- case CPUINFO_INT_MIPS3_DRC_OPTIONS: mips3->impstate->drcoptions = info->i; break;
-
- case CPUINFO_INT_MIPS3_FASTRAM_SELECT: if (info->i >= 0 && info->i < MIPS3_MAX_FASTRAM) mips3->impstate->fastram_select = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_FASTRAM_START: mips3->impstate->fastram[mips3->impstate->fastram_select].start = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_FASTRAM_END: mips3->impstate->fastram[mips3->impstate->fastram_select].end = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_FASTRAM_READONLY: mips3->impstate->fastram[mips3->impstate->fastram_select].readonly = info->i; mips3->impstate->cache_dirty = TRUE; break;
-
- case CPUINFO_INT_MIPS3_HOTSPOT_SELECT: if (info->i >= 0 && info->i < MIPS3_MAX_HOTSPOTS) mips3->impstate->hotspot_select = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_HOTSPOT_PC: mips3->impstate->hotspot[mips3->impstate->hotspot_select].pc = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_HOTSPOT_OPCODE: mips3->impstate->hotspot[mips3->impstate->hotspot_select].opcode = info->i; mips3->impstate->cache_dirty = TRUE; break;
- case CPUINFO_INT_MIPS3_HOTSPOT_CYCLES: mips3->impstate->hotspot[mips3->impstate->hotspot_select].cycles = info->i; mips3->impstate->cache_dirty = TRUE; break;
-
- /* --- the following bits of info are set as pointers to data or functions --- */
- case CPUINFO_PTR_MIPS3_FASTRAM_BASE: mips3->impstate->fastram[mips3->impstate->fastram_select].base = info->p; break;
- /* --- everything else is handled generically --- */
- default: mips3com_set_info(mips3, state, info); break;
- }
+ /* --- everything is handled generically --- */
+ mips3com_set_info(mips3, state, info);
}
@@ -621,6 +603,53 @@ static CPU_GET_INFO( mips3 )
}
+/*-------------------------------------------------
+ mips3drc_set_options - configure DRC options
+-------------------------------------------------*/
+
+void mips3drc_set_options(const device_config *device, UINT32 options)
+{
+ mips3_state *mips3 = *(mips3_state **)device->token;
+ mips3->impstate->drcoptions = options;
+}
+
+
+/*-------------------------------------------------
+ mips3drc_add_fastram - add a new fastram
+ region
+-------------------------------------------------*/
+
+void mips3drc_add_fastram(const device_config *device, offs_t start, offs_t end, UINT8 readonly, void *base)
+{
+ mips3_state *mips3 = *(mips3_state **)device->token;
+ if (mips3->impstate->fastram_select < ARRAY_LENGTH(mips3->impstate->fastram))
+ {
+ mips3->impstate->fastram[mips3->impstate->fastram_select].start = start;
+ mips3->impstate->fastram[mips3->impstate->fastram_select].end = end;
+ mips3->impstate->fastram[mips3->impstate->fastram_select].readonly = readonly;
+ mips3->impstate->fastram[mips3->impstate->fastram_select].base = base;
+ mips3->impstate->fastram_select++;
+ }
+}
+
+
+/*-------------------------------------------------
+ mips3drc_add_hotspot - add a new hotspot
+-------------------------------------------------*/
+
+void mips3drc_add_hotspot(const device_config *device, offs_t pc, UINT32 opcode, UINT32 cycles)
+{
+ mips3_state *mips3 = *(mips3_state **)device->token;
+ if (mips3->impstate->hotspot_select < ARRAY_LENGTH(mips3->impstate->hotspot))
+ {
+ mips3->impstate->hotspot[mips3->impstate->hotspot_select].pc = pc;
+ mips3->impstate->hotspot[mips3->impstate->hotspot_select].opcode = opcode;
+ mips3->impstate->hotspot[mips3->impstate->hotspot_select].cycles = cycles;
+ mips3->impstate->hotspot_select++;
+ }
+}
+
+
/***************************************************************************
CACHE MANAGEMENT
diff --git a/src/mame/audio/dcs.c b/src/mame/audio/dcs.c
index cfa6c4a383f..906ab27146d 100644
--- a/src/mame/audio/dcs.c
+++ b/src/mame/audio/dcs.c
@@ -288,6 +288,8 @@ struct _dcs_state
const address_space *program;
const address_space *data;
UINT8 rev;
+ offs_t polling_offset;
+ UINT32 polling_count;
/* sound output */
UINT8 channels;
@@ -415,6 +417,7 @@ static void recompute_sample_rate(running_machine *machine);
static void sound_tx_callback(const device_config *device, int port, INT32 data);
static READ16_HANDLER( dcs_polling_r );
+static WRITE16_HANDLER( dcs_polling_w );
static TIMER_CALLBACK( transfer_watchdog_callback );
static int preprocess_write(running_machine *machine, UINT16 data);
@@ -1018,8 +1021,9 @@ void dcs2_init(running_machine *machine, int dram_in_mb, offs_t polling_offset)
dcs.auto_ack = FALSE;
/* install the speedup handler */
+ dcs.polling_offset = polling_offset;
if (polling_offset)
- dcs_polling_base = memory_install_read16_handler(cpu_get_address_space(dcs.cpu, ADDRESS_SPACE_DATA), polling_offset, polling_offset, 0, 0, dcs_polling_r);
+ dcs_polling_base = memory_install_readwrite16_handler(cpu_get_address_space(dcs.cpu, ADDRESS_SPACE_DATA), polling_offset, polling_offset, 0, 0, dcs_polling_r, dcs_polling_w);
/* allocate a watchdog timer for HLE transfers */
transfer.hle_enabled = (ENABLE_HLE_TRANSFERS && dram_in_mb != 0);
@@ -1161,6 +1165,10 @@ static void sdrc_remap_memory(running_machine *machine)
/* update the bank pointers */
sdrc_update_bank_pointers(machine);
+
+ /* reinstall the polling hotspot */
+ if (dcs.polling_offset)
+ dcs_polling_base = memory_install_readwrite16_handler(cpu_get_address_space(dcs.cpu, ADDRESS_SPACE_DATA), dcs.polling_offset, dcs.polling_offset, 0, 0, dcs_polling_r, dcs_polling_w);
}
@@ -2058,11 +2066,19 @@ static void sound_tx_callback(const device_config *device, int port, INT32 data)
static READ16_HANDLER( dcs_polling_r )
{
- cpu_eat_cycles(space->cpu, 1000);
+ if (dcs.polling_count++ > 5)
+ cpu_eat_cycles(space->cpu, 10000);
return *dcs_polling_base;
}
+static WRITE16_HANDLER( dcs_polling_w )
+{
+ dcs.polling_count = 0;
+ COMBINE_DATA(dcs_polling_base);
+}
+
+
/***************************************************************************
DATA TRANSFER HLE MECHANISM
diff --git a/src/mame/drivers/aleck64.c b/src/mame/drivers/aleck64.c
index 07e634323c4..01512fbdd55 100644
--- a/src/mame/drivers/aleck64.c
+++ b/src/mame/drivers/aleck64.c
@@ -421,11 +421,6 @@ static INTERRUPT_GEN( n64_vblank )
signal_rcp_interrupt(device->machine, VI_INTERRUPT);
}
-static MACHINE_RESET( aleck64 )
-{
- n64_machine_reset(machine);
-}
-
static MACHINE_DRIVER_START( aleck64 )
/* basic machine hardware */
MDRV_CPU_ADD("maincpu", R4600BE, 93750000)
@@ -437,7 +432,8 @@ static MACHINE_DRIVER_START( aleck64 )
MDRV_CPU_CONFIG(n64_rsp_config)
MDRV_CPU_PROGRAM_MAP(rsp_map, 0)
- MDRV_MACHINE_RESET( aleck64 )
+ MDRV_MACHINE_START( n64 )
+ MDRV_MACHINE_RESET( n64 )
MDRV_SCREEN_ADD("screen", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
diff --git a/src/mame/drivers/hng64.c b/src/mame/drivers/hng64.c
index ae666e5a51b..b6b9afbc07d 100644
--- a/src/mame/drivers/hng64.c
+++ b/src/mame/drivers/hng64.c
@@ -1451,6 +1451,16 @@ static INTERRUPT_GEN( irq_start )
}
+static MACHINE_START(hyperneo)
+{
+ /* set the fastest DRC options */
+ mips3drc_set_options(machine->cpu[0], MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
+
+ /* configure fast RAM regions for DRC */
+ mips3drc_add_fastram(machine->cpu[0], 0x00000000, 0x00ffffff, FALSE, hng_mainram);
+ mips3drc_add_fastram(machine->cpu[0], 0x04000000, 0x05ffffff, TRUE, hng_cart);
+ mips3drc_add_fastram(machine->cpu[0], 0x1fc00000, 0x1fc7ffff, TRUE, rombase);
+}
static MACHINE_RESET(hyperneo)
@@ -1487,28 +1497,6 @@ static MACHINE_RESET(hyperneo)
// "Display List" init - ugly
activeBuffer = 0 ;
-
- /* set the fastest DRC options */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_DRC_OPTIONS, MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
-
- /* configure fast RAM regions for DRC */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 0);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x00000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x00ffffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, hng_mainram);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 1);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x04000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x05ffffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, hng_cart);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 1);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 2);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x1fc00000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x1fc7ffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rombase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 1);
}
@@ -1527,6 +1515,7 @@ static MACHINE_DRIVER_START( hng64 )
MDRV_CPU_IO_MAP(hng_comm_io_map, 0)
MDRV_GFXDECODE(hng64)
+ MDRV_MACHINE_START(hyperneo)
MDRV_MACHINE_RESET(hyperneo)
MDRV_SCREEN_ADD("screen", RASTER)
diff --git a/src/mame/drivers/kinst.c b/src/mame/drivers/kinst.c
index aa2ae481db7..58ca9d1ab7d 100644
--- a/src/mame/drivers/kinst.c
+++ b/src/mame/drivers/kinst.c
@@ -190,26 +190,12 @@ static MACHINE_START( kinst )
}
/* set the fastest DRC options */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_DRC_OPTIONS, MIPS3DRC_FASTEST_OPTIONS);
+ mips3drc_set_options(machine->cpu[0], MIPS3DRC_FASTEST_OPTIONS);
/* configure fast RAM regions for DRC */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 0);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x08000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x087fffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rambase2);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 1);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x00000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x0007ffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rambase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 2);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x1fc00000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x1fc7ffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rombase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 1);
+ mips3drc_add_fastram(machine->cpu[0], 0x08000000, 0x087fffff, FALSE, rambase2);
+ mips3drc_add_fastram(machine->cpu[0], 0x00000000, 0x0007ffff, FALSE, rambase);
+ mips3drc_add_fastram(machine->cpu[0], 0x1fc00000, 0x1fc7ffff, TRUE, rombase);
}
diff --git a/src/mame/drivers/seattle.c b/src/mame/drivers/seattle.c
index b8de9507f19..231f54ac98d 100644
--- a/src/mame/drivers/seattle.c
+++ b/src/mame/drivers/seattle.c
@@ -456,8 +456,6 @@ static UINT32 *asic_reset;
static UINT8 pending_analog_read;
static UINT8 status_leds;
-static int speedup_index;
-
static UINT32 cmos_write_enabled;
@@ -511,20 +509,11 @@ static MACHINE_START( seattle )
galileo.timer[3].timer = timer_alloc(machine, galileo_timer_callback, NULL);
/* set the fastest DRC options, but strict verification */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_DRC_OPTIONS, MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
+ mips3drc_set_options(machine->cpu[0], MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
/* configure fast RAM regions for DRC */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 0);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x00000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x007fffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rambase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 1);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x1fc00000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x1fc7ffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rombase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 1);
+ mips3drc_add_fastram(machine->cpu[0], 0x00000000, 0x007fffff, FALSE, rambase);
+ mips3drc_add_fastram(machine->cpu[0], 0x1fc00000, 0x1fc7ffff, TRUE, rombase);
/* register for save states */
state_save_register_global_array(machine, galileo.reg);
@@ -2806,17 +2795,6 @@ static void init_common(running_machine *machine, int ioasic, int serialnum, int
memory_install_readwrite32_device_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), device, 0x16c00000, 0x16c0003f, 0, 0, ethernet_r, ethernet_w);
break;
}
-
- /* reset speedups */
- speedup_index = 0;
-}
-
-static void add_speedup(running_machine *machine, offs_t pc, UINT32 op)
-{
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_SELECT, speedup_index++);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_PC, pc);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_OPCODE, op);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_CYCLES, 250);
}
@@ -2826,9 +2804,9 @@ static DRIVER_INIT( wg3dh )
init_common(machine, MIDWAY_IOASIC_STANDARD, 310/* others? */, 80, PHOENIX_CONFIG);
/* speedups */
- add_speedup(machine, 0x8004413C, 0x0C0054B4); /* confirmed */
- add_speedup(machine, 0x80094930, 0x00A2102B); /* confirmed */
- add_speedup(machine, 0x80092984, 0x3C028011); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8004413C, 0x0C0054B4, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80094930, 0x00A2102B, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80092984, 0x3C028011, 250); /* confirmed */
}
@@ -2838,7 +2816,7 @@ static DRIVER_INIT( mace )
init_common(machine, MIDWAY_IOASIC_MACE, 319/* others? */, 80, SEATTLE_CONFIG);
/* speedups */
- add_speedup(machine, 0x800108F8, 0x8C420000); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800108F8, 0x8C420000, 250); /* confirmed */
}
@@ -2848,9 +2826,9 @@ static DRIVER_INIT( sfrush )
init_common(machine, MIDWAY_IOASIC_STANDARD, 315/* no alternates */, 100, FLAGSTAFF_CONFIG);
/* speedups */
- add_speedup(machine, 0x80059F34, 0x3C028012); /* confirmed */
- add_speedup(machine, 0x800A5AF4, 0x8E300010); /* confirmed */
- add_speedup(machine, 0x8004C260, 0x3C028012); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80059F34, 0x3C028012, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800A5AF4, 0x8E300010, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8004C260, 0x3C028012, 250); /* confirmed */
}
@@ -2860,10 +2838,10 @@ static DRIVER_INIT( sfrushrk )
init_common(machine, MIDWAY_IOASIC_SFRUSHRK, 331/* unknown */, 100, FLAGSTAFF_CONFIG);
/* speedups */
- add_speedup(machine, 0x800343E8, 0x3C028012); /* confirmed */
- add_speedup(machine, 0x8008F4F0, 0x3C028012); /* confirmed */
- add_speedup(machine, 0x800A365C, 0x8E300014); /* confirmed */
- add_speedup(machine, 0x80051DAC, 0x3C028012); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800343E8, 0x3C028012, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8008F4F0, 0x3C028012, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800A365C, 0x8E300014, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80051DAC, 0x3C028012, 250); /* confirmed */
}
@@ -2874,8 +2852,8 @@ static DRIVER_INIT( calspeed )
midway_ioasic_set_auto_ack(1);
/* speedups */
- add_speedup(machine, 0x80032534, 0x02221024); /* confirmed */
- add_speedup(machine, 0x800B1BE4, 0x8E110014); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80032534, 0x02221024, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800B1BE4, 0x8E110014, 250); /* confirmed */
}
@@ -2885,9 +2863,9 @@ static DRIVER_INIT( vaportrx )
init_common(machine, MIDWAY_IOASIC_VAPORTRX, 324/* 334? unknown */, 100, SEATTLE_WIDGET_CONFIG);
/* speedups */
- add_speedup(machine, 0x80049F14, 0x3C028020); /* confirmed */
- add_speedup(machine, 0x8004859C, 0x3C028020); /* confirmed */
- add_speedup(machine, 0x8005922C, 0x8E020014); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80049F14, 0x3C028020, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8004859C, 0x3C028020, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8005922C, 0x8E020014, 250); /* confirmed */
}
@@ -2909,8 +2887,8 @@ static DRIVER_INIT( blitz )
rombase[0x934/4] += 4;
/* main CPU speedups */
- add_speedup(machine, 0x80135510, 0x3C028024); /* confirmed */
- add_speedup(machine, 0x800087DC, 0x8E820010); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80135510, 0x3C028024, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800087DC, 0x8E820010, 250); /* confirmed */
}
@@ -2920,8 +2898,8 @@ static DRIVER_INIT( blitz99 )
init_common(machine, MIDWAY_IOASIC_BLITZ99, 481/* or 484 or 520 */, 80, SEATTLE_CONFIG);
/* speedups */
- add_speedup(machine, 0x8014E41C, 0x3C038025); /* confirmed */
- add_speedup(machine, 0x80011F10, 0x8E020018); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8014E41C, 0x3C038025, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80011F10, 0x8E020018, 250); /* confirmed */
}
@@ -2931,8 +2909,8 @@ static DRIVER_INIT( blitz2k )
init_common(machine, MIDWAY_IOASIC_BLITZ99, 494/* or 498 */, 80, SEATTLE_CONFIG);
/* speedups */
- add_speedup(machine, 0x8015773C, 0x3C038025); /* confirmed */
- add_speedup(machine, 0x80012CA8, 0x8E020018); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8015773C, 0x3C038025, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80012CA8, 0x8E020018, 250); /* confirmed */
}
@@ -2945,8 +2923,8 @@ static DRIVER_INIT( carnevil )
memory_install_readwrite32_handler(cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM), 0x16800000, 0x1680001f, 0, 0, carnevil_gun_r, carnevil_gun_w);
/* speedups */
- add_speedup(machine, 0x8015176C, 0x3C03801A); /* confirmed */
- add_speedup(machine, 0x80011FBC, 0x8E020018); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8015176C, 0x3C03801A, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80011FBC, 0x8E020018, 250); /* confirmed */
}
@@ -2956,9 +2934,9 @@ static DRIVER_INIT( hyprdriv )
init_common(machine, MIDWAY_IOASIC_HYPRDRIV, 469/* unknown */, 80, SEATTLE_WIDGET_CONFIG);
/* speedups */
- add_speedup(machine, 0x801643BC, 0x3C03801B); /* confirmed */
- add_speedup(machine, 0x80011FB8, 0x8E020018); /* confirmed */
- //add_speedup(machine, 0x80136A80, 0x3C02801D); /* potential */
+ mips3drc_add_hotspot(machine->cpu[0], 0x801643BC, 0x3C03801B, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80011FB8, 0x8E020018, 250); /* confirmed */
+ //mips3drc_add_hotspot(machine->cpu[0], 0x80136A80, 0x3C02801D, 250); /* potential */
}
diff --git a/src/mame/drivers/vegas.c b/src/mame/drivers/vegas.c
index 727d65e8e16..4ca34c15c35 100644
--- a/src/mame/drivers/vegas.c
+++ b/src/mame/drivers/vegas.c
@@ -448,8 +448,6 @@
static UINT32 *rambase, *rombase;
static size_t ramsize;
-static int speedup_index;
-
static UINT32 *nile_regs;
static UINT16 nile_irq_state;
static UINT16 ide_irq_state;
@@ -545,20 +543,11 @@ static MACHINE_START( vegas )
dcs_idma_cs = 0;
/* set the fastest DRC options, but strict verification */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_DRC_OPTIONS, MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY + MIPS3DRC_FLUSH_PC);
+ mips3drc_set_options(machine->cpu[0], MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY + MIPS3DRC_FLUSH_PC);
/* configure fast RAM regions for DRC */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 0);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x00000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, ramsize - 1);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rambase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 1);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x1fc00000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x1fc7ffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rombase);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 1);
+ mips3drc_add_fastram(machine->cpu[0], 0x00000000, ramsize - 1, FALSE, rambase);
+ mips3drc_add_fastram(machine->cpu[0], 0x1fc00000, 0x1fc7ffff, TRUE, rombase);
/* register for save states */
state_save_register_global(machine, nile_irq_state);
@@ -2481,17 +2470,6 @@ static void init_common(running_machine *machine, int ioasic, int serialnum)
/* allocate RAM for the timekeeper */
timekeeper_nvram_size = 0x8000;
timekeeper_nvram = auto_malloc(timekeeper_nvram_size);
-
- /* reset speedups */
- speedup_index = 0;
-}
-
-static void add_speedup(running_machine *machine, offs_t pc, UINT32 op)
-{
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_SELECT, speedup_index++);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_PC, pc);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_OPCODE, op);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_HOTSPOT_CYCLES, 250);
}
@@ -2501,10 +2479,10 @@ static DRIVER_INIT( gauntleg )
init_common(machine, MIDWAY_IOASIC_CALSPEED, 340/* 340=39", 322=27", others? */);
/* speedups */
- add_speedup(machine, 0x80015430, 0x8CC38060); /* confirmed */
- add_speedup(machine, 0x80015464, 0x3C09801E); /* confirmed */
- add_speedup(machine, 0x800C8918, 0x8FA2004C); /* confirmed */
- add_speedup(machine, 0x800C8890, 0x8FA20024); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80015430, 0x8CC38060, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80015464, 0x3C09801E, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800C8918, 0x8FA2004C, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800C8890, 0x8FA20024, 250); /* confirmed */
}
@@ -2514,10 +2492,10 @@ static DRIVER_INIT( gauntdl )
init_common(machine, MIDWAY_IOASIC_GAUNTDL, 346/* 347, others? */);
/* speedups */
- add_speedup(machine, 0x800158B8, 0x8CC3CC40); /* confirmed */
- add_speedup(machine, 0x800158EC, 0x3C0C8022); /* confirmed */
- add_speedup(machine, 0x800D40C0, 0x8FA2004C); /* confirmed */
- add_speedup(machine, 0x800D4038, 0x8FA20024); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800158B8, 0x8CC3CC40, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800158EC, 0x3C0C8022, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800D40C0, 0x8FA2004C, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x800D4038, 0x8FA20024, 250); /* confirmed */
}
@@ -2527,7 +2505,7 @@ static DRIVER_INIT( warfa )
init_common(machine, MIDWAY_IOASIC_MACE, 337/* others? */);
/* speedups */
- add_speedup(machine, 0x8009436C, 0x0C031663); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8009436C, 0x0C031663, 250); /* confirmed */
}
@@ -2537,10 +2515,10 @@ static DRIVER_INIT( tenthdeg )
init_common(machine, MIDWAY_IOASIC_GAUNTDL, 330/* others? */);
/* speedups */
- add_speedup(machine, 0x80051CD8, 0x0C023C15); /* confirmed */
- add_speedup(machine, 0x8005E674, 0x3C028017); /* confirmed */
- add_speedup(machine, 0x8002DBCC, 0x8FA2002C); /* confirmed */
- add_speedup(machine, 0x80015930, 0x8FC20244); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80051CD8, 0x0C023C15, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8005E674, 0x3C028017, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x8002DBCC, 0x8FA2002C, 250); /* confirmed */
+ mips3drc_add_hotspot(machine->cpu[0], 0x80015930, 0x8FC20244, 250); /* confirmed */
}
diff --git a/src/mame/includes/n64.h b/src/mame/includes/n64.h
index ab7bcc1445e..48759fb6e4d 100644
--- a/src/mame/includes/n64.h
+++ b/src/mame/includes/n64.h
@@ -84,6 +84,7 @@ extern WRITE32_HANDLER( n64_si_reg_w );
extern READ32_HANDLER( n64_pif_ram_r );
extern WRITE32_HANDLER( n64_pif_ram_w );
-void n64_machine_reset(running_machine *machine);
+MACHINE_START( n64 );
+MACHINE_RESET( n64 );
#endif
diff --git a/src/mame/machine/n64.c b/src/mame/machine/n64.c
index 0add6a4fa0c..4bda1d90cf3 100644
--- a/src/mame/machine/n64.c
+++ b/src/mame/machine/n64.c
@@ -1567,7 +1567,15 @@ WRITE32_HANDLER( n64_pif_ram_w )
//static UINT16 crc_seed = 0x3f;
-void n64_machine_reset(running_machine *machine)
+MACHINE_START( n64 )
+{
+ mips3drc_set_options(machine->cpu[0], MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
+
+ /* configure fast RAM regions for DRC */
+ mips3drc_add_fastram(machine->cpu[0], 0x00000000, 0x007fffff, FALSE, rdram);
+}
+
+MACHINE_RESET( n64 )
{
int i;
//UINT32 *pif_rom = (UINT32*)memory_region(machine, "user1");
@@ -1623,15 +1631,6 @@ void n64_machine_reset(running_machine *machine)
cic_status = 0;
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_DRC_OPTIONS, MIPS3DRC_FASTEST_OPTIONS + MIPS3DRC_STRICT_VERIFY);
-
- /* configure fast RAM regions for DRC */
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_SELECT, 0);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_START, 0x00000000);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_END, 0x007fffff);
- device_set_info_ptr(machine->cpu[0], CPUINFO_PTR_MIPS3_FASTRAM_BASE, rdram);
- device_set_info_int(machine->cpu[0], CPUINFO_INT_MIPS3_FASTRAM_READONLY, 0);
-
audio_timer = timer_alloc(machine, audio_timer_callback, NULL);
timer_adjust_oneshot(audio_timer, attotime_never, 0);