#include "psxcounters.h"
#include "psxbios.h"
-#ifdef ICACHE_EMULATION
enum {
R3000ACPU_NOTIFY_CACHE_ISOLATED = 0,
R3000ACPU_NOTIFY_CACHE_UNISOLATED = 1,
R3000ACPU_NOTIFY_DMA3_EXE_LOAD = 2
};
-extern uint32_t *Read_ICache(uint32_t pc);
-#endif
typedef struct {
int (*Init)();
void (*Execute)(); /* executes up to a break */
void (*ExecuteBlock)(); /* executes up to a jump */
void (*Clear)(u32 Addr, u32 Size);
-#ifdef ICACHE_EMULATION
void (*Notify)(int note, void *data);
-#endif
+ void (*ApplyConfig)();
void (*Shutdown)();
} R3000Acpu;
extern R3000Acpu *psxCpu;
extern R3000Acpu psxInt;
extern R3000Acpu psxRec;
-#define PSXREC
typedef union {
-#if defined(__BIGENDIAN__)
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
struct { u8 h3, h2, h, l; } b;
struct { s8 h3, h2, h, l; } sb;
struct { u16 h, l; } w;
u32 cycle;
u32 interrupt;
struct { u32 sCycle, cycle; } intCycle[32];
+ u32 gteBusyCycle;
+ u32 muldivBusyCycle;
+ // warning: changing anything in psxRegisters requires update of all
+ // asm in libpcsxcore/new_dynarec/, but this member can be replaced
+ u32 reserved[2];
} psxRegisters;
extern boolean writeok;
extern u32 event_cycles[PSXINT_COUNT];
extern u32 next_interupt;
+void lightrec_plugin_prepare_save_state(void);
+void lightrec_plugin_prepare_load_state(void);
+
void new_dyna_before_save(void);
void new_dyna_after_save(void);
void new_dyna_freeze(void *f, int mode);
} \
}
-#if defined(__BIGENDIAN__)
+#if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
#define _i32(x) *(s32 *)&x
#define _u32(x) x