cdrom: get rid of cdrPlayInterrupt
[pcsx_rearmed.git] / libpcsxcore / r3000a.c
index 3288f5c..8eb2618 100644 (file)
 #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
 
@@ -52,8 +54,8 @@ int psxInit() {
 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
@@ -74,27 +76,16 @@ void psxReset() {
 }
 
 void psxShutdown() {
-       psxMemShutdown();
        psxBiosShutdown();
 
        psxCpu->Shutdown();
+
+       psxMemShutdown();
 }
 
 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
@@ -112,7 +103,6 @@ void psxException(u32 code, u32 bd) {
 #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
@@ -150,7 +140,7 @@ void psxBranchTest() {
                if (psxRegs.interrupt & (1 << PSXINT_CDREAD)) { // cdr read
                        if ((psxRegs.cycle - psxRegs.intCycle[PSXINT_CDREAD].sCycle) >= psxRegs.intCycle[PSXINT_CDREAD].cycle) {
                                psxRegs.interrupt &= ~(1 << PSXINT_CDREAD);
-                               cdrReadInterrupt();
+                               cdrPlaySeekReadInterrupt();
                        }
                }
                if (psxRegs.interrupt & (1 << PSXINT_GPUDMA)) { // gpu dma
@@ -189,12 +179,6 @@ void psxBranchTest() {
                                cdrDmaInterrupt();
                        }
                }
-               if (psxRegs.interrupt & (1 << PSXINT_CDRPLAY)) { // cdr play timing
-                       if ((psxRegs.cycle - psxRegs.intCycle[PSXINT_CDRPLAY].sCycle) >= psxRegs.intCycle[PSXINT_CDRPLAY].cycle) {
-                               psxRegs.interrupt &= ~(1 << PSXINT_CDRPLAY);
-                               cdrPlayInterrupt();
-                       }
-               }
                if (psxRegs.interrupt & (1 << PSXINT_CDRLID)) { // cdr lid states
                        if ((psxRegs.cycle - psxRegs.intCycle[PSXINT_CDRLID].sCycle) >= psxRegs.intCycle[PSXINT_CDRLID].cycle) {
                                psxRegs.interrupt &= ~(1 << PSXINT_CDRLID);