cdrom: change pause timing again
[pcsx_rearmed.git] / libpcsxcore / r3000a.h
index 6682314..03aeee1 100644 (file)
@@ -25,9 +25,6 @@ extern "C" {
 #endif
 
 #include "psxcommon.h"
 #endif
 
 #include "psxcommon.h"
-#include "psxmem.h"
-#include "psxcounters.h"
-#include "psxbios.h"
 
 enum R3000Aexception {
        R3000E_Int = 0,      // Interrupt
 
 enum R3000Aexception {
        R3000E_Int = 0,      // Interrupt
@@ -45,7 +42,7 @@ enum R3000Aexception {
 enum R3000Anote {
        R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
        R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
 enum R3000Anote {
        R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
        R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
-       R3000ACPU_NOTIFY_BEFORE_SAVE,
+       R3000ACPU_NOTIFY_BEFORE_SAVE,  // data arg - hle if non-null
        R3000ACPU_NOTIFY_AFTER_LOAD,
 };
 
        R3000ACPU_NOTIFY_AFTER_LOAD,
 };
 
@@ -88,7 +85,7 @@ typedef union {
                u32   r0, at, v0, v1, a0, a1, a2, a3,
                                                t0, t1, t2, t3, t4, t5, t6, t7,
                                                s0, s1, s2, s3, s4, s5, s6, s7,
                u32   r0, at, v0, v1, a0, a1, a2, a3,
                                                t0, t1, t2, t3, t4, t5, t6, t7,
                                                s0, s1, s2, s3, s4, s5, s6, s7,
-                                               t8, t9, k0, k1, gp, sp, s8, ra, lo, hi;
+                                               t8, t9, k0, k1, gp, sp, fp, ra, lo, hi;
        } n;
        u32 r[34]; /* Lo, Hi in r[32] and r[33] */
        PAIR p[34];
        } n;
        u32 r[34]; /* Lo, Hi in r[32] and r[33] */
        PAIR p[34];
@@ -166,25 +163,6 @@ typedef union {
        PAIR p[32];
 } psxCP2Ctrl;
 
        PAIR p[32];
 } psxCP2Ctrl;
 
-enum {
-       PSXINT_SIO = 0,
-       PSXINT_CDR,
-       PSXINT_CDREAD,
-       PSXINT_GPUDMA,
-       PSXINT_MDECOUTDMA,
-       PSXINT_SPUDMA,
-       PSXINT_GPUBUSY,
-       PSXINT_MDECINDMA,
-       PSXINT_GPUOTCDMA,
-       PSXINT_CDRDMA,
-       PSXINT_NEWDRC_CHECK,
-       PSXINT_RCNT,
-       PSXINT_CDRLID,
-       PSXINT_CDRPLAY_OLD,     /* unused */
-       PSXINT_SPU_UPDATE,
-       PSXINT_COUNT
-};
-
 enum R3000Abdt {
        // corresponds to bits 31,30 of Cause reg
        R3000A_BRANCH_TAKEN = 3,
 enum R3000Abdt {
        // corresponds to bits 31,30 of Cause reg
        R3000A_BRANCH_TAKEN = 3,
@@ -224,6 +202,10 @@ typedef struct {
        u8  dloadSel;       /* interp. delay load state */
        u8  dloadReg[2];
        u32 dloadVal[2];
        u8  dloadSel;       /* interp. delay load state */
        u8  dloadReg[2];
        u32 dloadVal[2];
+       u32 biosBranchCheck;
+       u32 cpuInRecursion;
+       u32 gpuIdleAfter;
+       u32 reserved[1];
        // warning: changing anything in psxRegisters requires update of all
        // asm in libpcsxcore/new_dynarec/
 } psxRegisters;
        // warning: changing anything in psxRegisters requires update of all
        // asm in libpcsxcore/new_dynarec/
 } psxRegisters;
@@ -231,24 +213,8 @@ typedef struct {
 extern psxRegisters psxRegs;
 
 /* new_dynarec stuff */
 extern psxRegisters psxRegs;
 
 /* new_dynarec stuff */
-extern u32 event_cycles[PSXINT_COUNT];
-extern u32 next_interupt;
-
 void new_dyna_freeze(void *f, int mode);
 
 void new_dyna_freeze(void *f, int mode);
 
-#define new_dyna_set_event_abs(e, abs) { \
-       u32 abs_ = abs; \
-       s32 di_ = next_interupt - abs_; \
-       event_cycles[e] = abs_; \
-       if (di_ > 0) { \
-               /*printf("%u: next_interupt %u -> %u\n", psxRegs.cycle, next_interupt, abs_);*/ \
-               next_interupt = abs_; \
-       } \
-}
-
-#define new_dyna_set_event(e, c) \
-       new_dyna_set_event_abs(e, psxRegs.cycle + (c))
-
 int  psxInit();
 void psxReset();
 void psxShutdown();
 int  psxInit();
 void psxReset();
 void psxShutdown();
@@ -257,6 +223,9 @@ void psxBranchTest();
 void psxExecuteBios();
 void psxJumpTest();
 
 void psxExecuteBios();
 void psxJumpTest();
 
+void irq10Interrupt();
+void psxScheduleIrq10(int irq_count, int x_cycles, int y);
+
 #ifdef __cplusplus
 }
 #endif
 #ifdef __cplusplus
 }
 #endif