#include "cdrom.h"
#include "mdec.h"
#include "gte.h"
+#include "psxinterpreter.h"
R3000Acpu *psxCpu = NULL;
-#ifndef NEW_DYNAREC
+#ifdef DRC_DISABLE
psxRegisters psxRegs;
#endif
int psxInit() {
SysPrintf(_("Running PCSX Version %s (%s).\n"), PCSX_VERSION, __DATE__);
-#if defined(NEW_DYNAREC) || defined(LIGHTREC)
+#ifndef DRC_DISABLE
if (Config.Cpu == CPU_INTERPRETER) {
psxCpu = &psxInt;
} else psxCpu = &psxRec;
#else
+ Config.Cpu = CPU_INTERPRETER;
psxCpu = &psxInt;
#endif
void psxReset() {
psxMemReset();
- memset(&psxRegs, 0x00, sizeof(psxRegs));
- writeok = TRUE;
+ memset(&psxRegs, 0, sizeof(psxRegs));
+
psxRegs.pc = 0xbfc00000; // Start in bootstrap
psxRegs.CP0.r[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1
}
void psxException(u32 code, u32 bd) {
- #ifdef ICACHE_EMULATION
- /* Without the CPU_INTERPRETER condition, this will make Lightrec crash.
- * Hopefully a better solution than this mess is found. - Gameblabla
- */
- if (Config.icache_emulation && Config.Cpu == CPU_INTERPRETER)
- {
- psxRegs.code = SWAPu32(*Read_ICache(psxRegs.pc));
- }
- else
- #endif
- {
- psxRegs.code = PSXMu32(psxRegs.pc);
- }
-
+ psxRegs.code = fetch(psxRegs.pc);
+
if (!Config.HLE && ((((psxRegs.code) >> 24) & 0xfe) == 0x4a)) {
// "hokuto no ken" / "Crash Bandicot 2" ...
// BIOS does not allow to return to GTE instructions
#ifdef PSXCPU_LOG
PSXCPU_LOG("bd set!!!\n");
#endif
- SysPrintf("bd set!!!\n");
psxRegs.CP0.n.Cause |= 0x80000000;
psxRegs.CP0.n.EPC = (psxRegs.pc - 4);
} else