diff --git a/src/devices/cpu/mips/mips3.c b/src/devices/cpu/mips/mips3.c index 907adfb2926..ab210440d9d 100644 --- a/src/devices/cpu/mips/mips3.c +++ b/src/devices/cpu/mips/mips3.c @@ -2701,6 +2701,11 @@ void mips3_device::handle_special(UINT32 op) } } +void mips3_device::burn_cycles(INT32 cycles) +{ + execute_burn(cycles); +} + void mips3_device::execute_run() { if (m_isdrc) diff --git a/src/devices/cpu/mips/mips3.h b/src/devices/cpu/mips/mips3.h index 87462f79d5b..9cbf28aa8ed 100644 --- a/src/devices/cpu/mips/mips3.h +++ b/src/devices/cpu/mips/mips3.h @@ -300,7 +300,8 @@ public: void clear_fastram(UINT32 select_start); void mips3drc_set_options(UINT32 options); void mips3drc_add_hotspot(offs_t pc, UINT32 opcode, UINT32 cycles); - + void burn_cycles(INT32 cycles); + protected: // device-level overrides virtual void device_start(); @@ -313,6 +314,7 @@ protected: virtual UINT32 execute_input_lines() const { return 6; } virtual void execute_run(); virtual void execute_set_input(int inputnum, int state); + virtual void execute_burn(INT32 cycles) { m_totalcycles += cycles; } // device_memory_interface overrides virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const { return (spacenum == AS_PROGRAM) ? &m_program_config : NULL; } diff --git a/src/mame/machine/n64.c b/src/mame/machine/n64.c index fda94a7fde8..a57db69e0b6 100644 --- a/src/mame/machine/n64.c +++ b/src/mame/machine/n64.c @@ -1667,6 +1667,20 @@ WRITE32_MEMBER( n64_periphs::pi_reg_w ) READ32_MEMBER( n64_periphs::ri_reg_r ) { + if(offset == 0x0C/4) // RI_SELECT + { + /* This is to 'simulate' the time that RDRAM initialization + would take if the RI registers were not set to skip the RDRAM + testing during device reset. Proper simulation would require + emulating the RDRAM modules and bus stalls for the mips cpu. + The cycle amount chosen represents 1/2 second, which is not + necessarily the time for RDRAM initialization, but rather the + time recommended for letting the SI devices settle after startup. + This allows the initialization routines for the SI to see that a + proper amount of time has passed since system startup. */ + machine().device("maincpu")->burn_cycles(93750000/2); + } + if(offset > 0x1c/4) { logerror("ri_reg_r: %08X, %08X at %08X\n", offset, mem_mask, maincpu->safe_pc());