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
lightrec: fix pcsx interpreter -> lightrec switch too
[pcsx_rearmed.git]
/
libpcsxcore
/
lightrec
/
plugin.c
diff --git
a/libpcsxcore/lightrec/plugin.c
b/libpcsxcore/lightrec/plugin.c
index
bd3ee22
..
a3eb776
100644
(file)
--- a/
libpcsxcore/lightrec/plugin.c
+++ b/
libpcsxcore/lightrec/plugin.c
@@
-443,15
+443,15
@@
static void lightrec_restore_regs(struct lightrec_state *state)
extern void intExecuteBlock();
extern void gen_interupt();
extern void intExecuteBlock();
extern void gen_interupt();
-static void lightrec_plugin_execute_
block(void
)
+static void lightrec_plugin_execute_
internal(bool block_only
)
{
{
- u32 old_pc = psxRegs.pc;
u32 flags;
gen_interupt();
// step during early boot so that 0x80030000 fastboot hack works
u32 flags;
gen_interupt();
// step during early boot so that 0x80030000 fastboot hack works
- if (booting)
+ booting = block_only;
+ if (block_only)
next_interupt = psxRegs.cycle;
if (use_pcsx_interpreter) {
next_interupt = psxRegs.cycle;
if (use_pcsx_interpreter) {
@@
-482,9
+482,6
@@
static void lightrec_plugin_execute_block(void)
if (flags & LIGHTREC_EXIT_SYSCALL)
psxException(0x20, 0);
if (flags & LIGHTREC_EXIT_SYSCALL)
psxException(0x20, 0);
-
- if (booting && (psxRegs.pc & 0xff800000) == 0x80000000)
- booting = false;
}
if ((psxRegs.CP0.n.Cause & psxRegs.CP0.n.Status & 0x300) &&
}
if ((psxRegs.CP0.n.Cause & psxRegs.CP0.n.Status & 0x300) &&
@@
-499,8
+496,18
@@
static void lightrec_plugin_execute(void)
{
extern int stop;
{
extern int stop;
+ if (!booting)
+ lightrec_plugin_sync_regs_from_pcsx();
+
while (!stop)
while (!stop)
- lightrec_plugin_execute_block();
+ lightrec_plugin_execute_internal(false);
+
+ lightrec_plugin_sync_regs_to_pcsx();
+}
+
+static void lightrec_plugin_execute_block(void)
+{
+ lightrec_plugin_execute_internal(true);
}
static void lightrec_plugin_clear(u32 addr, u32 size)
}
static void lightrec_plugin_clear(u32 addr, u32 size)
@@
-552,11
+559,9
@@
static void lightrec_plugin_reset(void)
regs->cp0[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1
regs->cp0[15] = 0x00000002; // PRevID = Revision ID, same as R3000A
regs->cp0[12] = 0x10900000; // COP0 enabled | BEV = 1 | TS = 1
regs->cp0[15] = 0x00000002; // PRevID = Revision ID, same as R3000A
-
- booting = true;
}
}
-void lightrec_plugin_
prepare_load_state
(void)
+void lightrec_plugin_
sync_regs_from_pcsx
(void)
{
struct lightrec_registers *regs;
{
struct lightrec_registers *regs;
@@
-568,7
+573,7
@@
void lightrec_plugin_prepare_load_state(void)
lightrec_invalidate_all(lightrec_state);
}
lightrec_invalidate_all(lightrec_state);
}
-void lightrec_plugin_
prepare_save_state
(void)
+void lightrec_plugin_
sync_regs_to_pcsx
(void)
{
struct lightrec_registers *regs;
{
struct lightrec_registers *regs;