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
8f12b97
..
a3eb776
100644
(file)
--- a/
libpcsxcore/lightrec/plugin.c
+++ b/
libpcsxcore/lightrec/plugin.c
@@
-54,7
+54,6
@@
static char *name = "retroarch.exe";
static bool use_lightrec_interpreter;
static bool use_pcsx_interpreter;
static bool booting;
static bool use_lightrec_interpreter;
static bool use_pcsx_interpreter;
static bool booting;
-static u32 lightrec_begin_cycles;
enum my_cp2_opcodes {
OP_CP2_RTPS = 0x01,
enum my_cp2_opcodes {
OP_CP2_RTPS = 0x01,
@@
-345,7
+344,7
@@
static bool lightrec_can_hw_direct(u32 kaddr, bool is_write, u8 size)
case 0x1f801074:
return !is_write;
default:
case 0x1f801074:
return !is_write;
default:
- return
is_write ||
kaddr < 0x1f801c00 || kaddr >= 0x1f801e00;
+ return kaddr < 0x1f801c00 || kaddr >= 0x1f801e00;
}
default:
switch (kaddr) {
}
default:
switch (kaddr) {
@@
-403,9
+402,6
@@
static int lightrec_plugin_init(void)
}
use_lightrec_interpreter = !!getenv("LIGHTREC_INTERPRETER");
}
use_lightrec_interpreter = !!getenv("LIGHTREC_INTERPRETER");
- if (getenv("LIGHTREC_BEGIN_CYCLES"))
- lightrec_begin_cycles = (unsigned int) strtol(
- getenv("LIGHTREC_BEGIN_CYCLES"), NULL, 0);
lightrec_state = lightrec_init(name,
lightrec_map, ARRAY_SIZE(lightrec_map),
lightrec_state = lightrec_init(name,
lightrec_map, ARRAY_SIZE(lightrec_map),
@@
-447,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) {
@@
-486,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) &&
@@
-503,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)
@@
-556,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;
@@
-572,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;