X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Fr3000a.h;h=8d53a181eaef2b7f5b25b0439bb99b30974b9ccd;hb=da65071fd7ceac663bb951b13da2563d7b16431d;hp=be0e336835079c36e2b7212d4d458e6f7b8fe519;hpb=980f7a58b47fefd3424bf8d55f6345128dc3774c;p=pcsx_rearmed.git diff --git a/libpcsxcore/r3000a.h b/libpcsxcore/r3000a.h index be0e3368..8d53a181 100644 --- a/libpcsxcore/r3000a.h +++ b/libpcsxcore/r3000a.h @@ -36,11 +36,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)(); @@ -76,7 +81,7 @@ typedef union { PAIR p[34]; } psxGPRRegs; -typedef union { +typedef union psxCP0Regs_ { struct { u32 Index, Random, EntryLo0, EntryLo1, Context, PageMask, Wired, Reserved0, @@ -176,6 +181,8 @@ typedef struct psxCP2Regs { } psxCP2Regs; typedef struct { + // note: some cores like lightrec don't keep their data here, + // so use R3000ACPU_NOTIFY_BEFORE_SAVE to sync psxGPRRegs GPR; /* General Purpose Registers */ psxCP0Regs CP0; /* Coprocessor0 Registers */ union { @@ -185,8 +192,8 @@ typedef struct { }; psxCP2Regs CP2; }; - u32 pc; /* Program counter */ - u32 code; /* The instruction */ + u32 pc; /* Program counter */ + u32 code; /* The instruction */ u32 cycle; u32 interrupt; struct { u32 sCycle, cycle; } intCycle[32]; @@ -224,7 +231,7 @@ void new_dyna_freeze(void *f, int mode); int psxInit(); void psxReset(); void psxShutdown(); -void psxException(u32 code, u32 bd); +void psxException(u32 code, u32 bd, psxCP0Regs *cp0); void psxBranchTest(); void psxExecuteBios(); void psxJumpTest();