psxinterpreter: rework load delays
[pcsx_rearmed.git] / libpcsxcore / r3000a.h
index 229b14a..778bd8d 100644 (file)
@@ -29,6 +29,19 @@ extern "C" {
 #include "psxcounters.h"
 #include "psxbios.h"
 
+enum R3000Aexception {
+       R3000E_Int = 0,      // Interrupt
+       R3000E_AdEL = 4,     // Address error (on load/I-fetch)
+       R3000E_AdES = 5,     // Address error (on store)
+       R3000E_IBE = 6,      // Bus error (instruction fetch)
+       R3000E_DBE = 7,      // Bus error (data load)
+       R3000E_Syscall = 8,  // syscall instruction
+       R3000E_Bp = 9,       // Breakpoint - a break instruction
+       R3000E_RI = 10,      // reserved instruction
+       R3000E_CpU = 11,     // Co-Processor unusable
+       R3000E_Ov = 12       // arithmetic overflow
+};
+
 enum R3000Anote {
        R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
        R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
@@ -36,11 +49,16 @@ enum R3000Anote {
        R3000ACPU_NOTIFY_AFTER_LOAD,
 };
 
+enum blockExecCaller {
+       EXEC_CALLER_BOOT,
+       EXEC_CALLER_HLE,
+};
+
 typedef struct {
        int  (*Init)();
        void (*Reset)();
-       void (*Execute)();              /* executes up to a break */
-       void (*ExecuteBlock)(); /* executes up to a jump */
+       void (*Execute)();
+       void (*ExecuteBlock)(enum blockExecCaller caller); /* executes up to a jump */
        void (*Clear)(u32 Addr, u32 Size);
        void (*Notify)(enum R3000Anote note, void *data);
        void (*ApplyConfig)();
@@ -197,7 +215,10 @@ typedef struct {
        u32 subCycle;           /* interpreter cycle counting */
        u32 subCycleStep;
        u32 biuReg;
-       u32 reserved[3];
+       u8  reserved;
+       u8  dloadSel;
+       u8  dloadReg[2];
+       u32 dloadVal[2];
        // warning: changing anything in psxRegisters requires update of all
        // asm in libpcsxcore/new_dynarec/
 } psxRegisters;