notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
adjust bios handling again
[pcsx_rearmed.git]
/
libpcsxcore
/
r3000a.h
diff --git
a/libpcsxcore/r3000a.h
b/libpcsxcore/r3000a.h
index
a052a59
..
8d53a18
100644
(file)
--- a/
libpcsxcore/r3000a.h
+++ b/
libpcsxcore/r3000a.h
@@
-29,18
+29,25
@@
extern "C" {
#include "psxcounters.h"
#include "psxbios.h"
#include "psxcounters.h"
#include "psxbios.h"
-enum {
+enum
R3000Anote
{
R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
+ R3000ACPU_NOTIFY_BEFORE_SAVE,
+ R3000ACPU_NOTIFY_AFTER_LOAD,
+};
+
+enum blockExecCaller {
+ EXEC_CALLER_BOOT,
+ EXEC_CALLER_HLE,
};
typedef struct {
int (*Init)();
void (*Reset)();
};
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 (*Clear)(u32 Addr, u32 Size);
- void (*Notify)(
int
note, void *data);
+ void (*Notify)(
enum R3000Anote
note, void *data);
void (*ApplyConfig)();
void (*Shutdown)();
} R3000Acpu;
void (*ApplyConfig)();
void (*Shutdown)();
} R3000Acpu;
@@
-74,7
+81,7
@@
typedef union {
PAIR p[34];
} psxGPRRegs;
PAIR p[34];
} psxGPRRegs;
-typedef union {
+typedef union
psxCP0Regs_
{
struct {
u32 Index, Random, EntryLo0, EntryLo1,
Context, PageMask, Wired, Reserved0,
struct {
u32 Index, Random, EntryLo0, EntryLo1,
Context, PageMask, Wired, Reserved0,
@@
-174,6
+181,8
@@
typedef struct psxCP2Regs {
} psxCP2Regs;
typedef struct {
} 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 {
psxGPRRegs GPR; /* General Purpose Registers */
psxCP0Regs CP0; /* Coprocessor0 Registers */
union {
@@
-183,8
+192,8
@@
typedef struct {
};
psxCP2Regs CP2;
};
};
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];
u32 cycle;
u32 interrupt;
struct { u32 sCycle, cycle; } intCycle[32];
@@
-192,6
+201,8
@@
typedef struct {
u32 muldivBusyCycle;
u32 subCycle; /* interpreter cycle counting */
u32 subCycleStep;
u32 muldivBusyCycle;
u32 subCycle; /* interpreter cycle counting */
u32 subCycleStep;
+ u32 biuReg;
+ u32 reserved[3];
// 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;
@@
-202,8
+213,6
@@
extern psxRegisters psxRegs;
extern u32 event_cycles[PSXINT_COUNT];
extern u32 next_interupt;
extern u32 event_cycles[PSXINT_COUNT];
extern u32 next_interupt;
-void new_dyna_before_save(void);
-void new_dyna_after_save(void);
void new_dyna_freeze(void *f, int mode);
#define new_dyna_set_event_abs(e, abs) { \
void new_dyna_freeze(void *f, int mode);
#define new_dyna_set_event_abs(e, abs) { \
@@
-222,7
+231,7
@@
void new_dyna_freeze(void *f, int mode);
int psxInit();
void psxReset();
void psxShutdown();
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();
void psxBranchTest();
void psxExecuteBios();
void psxJumpTest();