#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,
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)();
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;