}
}
+bool cpuboard_forced_hardreset(void)
+{
+ if (is_blizzardppc(&currprefs)) {
+ return true;
+ }
+ return false;
+}
+
void cpuboard_reset(int hardreset)
{
#if 0
}
if (hardreset || is_keyboardreset())
a2630_io = 0;
+
flash_unlocked = 0;
cpuboard_non_byte_ea = false;
uaecptr cpuboard_get_reset_pc(uaecptr *stack);
void cpuboard_set_flash_unlocked(bool unlocked);
void cpuboard_set_cpu(struct uae_prefs *p);
+bool cpuboard_forced_hardreset(void);
bool ppc_interrupt(int new_m68k_ipl);
extern void exception2_fetch_opcode(uae_u32 opcode, int offset, int pcoffset);
extern void exception2_fetch(uae_u32 opcode, int offset, int pcoffset);
extern void m68k_reset (void);
-extern void cpureset (void);
+extern bool cpureset (void);
extern void cpu_halt (int id);
extern int cpu_sleep_millis(int ms);
extern void cpu_change(int newmodel);
}
-void cpureset (void)
+bool cpureset (void)
{
/* RESET hasn't increased PC yet, 1 word offset */
uaecptr pc;
uaecptr ksboot = 0xf80002 - 2;
uae_u16 ins;
addrbank *ab;
+ bool extreset = false;
maybe_disable_fpu();
m68k_reset_delay = currprefs.reset_delay;
set_special(SPCFLAG_CHECK);
send_internalevent(INTERNALEVENT_CPURESET);
+ if (cpuboard_forced_hardreset()) {
+ custom_reset_cpu(false, false);
+ m68k_reset();
+ return true;
+ }
if ((currprefs.cpu_compatible || currprefs.cpu_memory_cycle_exact) && currprefs.cpu_model <= 68020) {
custom_reset_cpu(false, false);
- return;
+ return false;
}
pc = m68k_getpc () + 2;
ab = &get_mem_bank (pc);
custom_reset_cpu(false, false);
// did memory disappear under us?
if (ab == &get_mem_bank (pc))
- return;
+ return false;
// it did
if ((ins & ~7) == 0x4ed0) {
int reg = ins & 7;
addr += 0xf80000;
write_log (_T("reset/jmp (ax) combination at %08x emulated -> %x\n"), pc, addr);
m68k_setpc_normal (addr - 2);
- return;
+ return false;
}
}
// the best we can do, jump directly to ROM entrypoint
write_log (_T("CPU Reset PC=%x (%s), invalid memory -> %x.\n"), pc, ab->name, ksboot + 2);
custom_reset_cpu(false, false);
m68k_setpc_normal (ksboot);
+ return false;
}