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
fix a mistake in big endian conversion
[pcsx_rearmed.git]
/
libpcsxcore
/
lightrec
/
plugin.c
diff --git
a/libpcsxcore/lightrec/plugin.c
b/libpcsxcore/lightrec/plugin.c
index
d3e4b33
..
703726e
100644
(file)
--- a/
libpcsxcore/lightrec/plugin.c
+++ b/
libpcsxcore/lightrec/plugin.c
@@
-20,7
+20,7
@@
#include "../r3000a.h"
#include "../psxinterpreter.h"
#include "../psxhle.h"
#include "../r3000a.h"
#include "../psxinterpreter.h"
#include "../psxhle.h"
-#include "../
new_dynarec/
events.h"
+#include "../
psx
events.h"
#include "../frontend/main.h"
#include "../frontend/main.h"
@@
-470,8
+470,6
@@
static int lightrec_plugin_init(void)
lightrec_map, ARRAY_SIZE(lightrec_map),
&lightrec_ops);
lightrec_map, ARRAY_SIZE(lightrec_map),
&lightrec_ops);
- lightrec_set_unsafe_opt_flags(lightrec_state, lightrec_hacks);
-
// fprintf(stderr, "M=0x%lx, P=0x%lx, R=0x%lx, H=0x%lx\n",
// (uintptr_t) psxM,
// (uintptr_t) psxP,
// fprintf(stderr, "M=0x%lx, P=0x%lx, R=0x%lx, H=0x%lx\n",
// (uintptr_t) psxM,
// (uintptr_t) psxP,
@@
-494,6
+492,9
@@
static void lightrec_plugin_execute_internal(bool block_only)
regs = lightrec_get_registers(lightrec_state);
gen_interupt((psxCP0Regs *)regs->cp0);
regs = lightrec_get_registers(lightrec_state);
gen_interupt((psxCP0Regs *)regs->cp0);
+ if (!block_only && stop)
+ return;
+
cycles_pcsx = next_interupt - psxRegs.cycle;
assert((s32)cycles_pcsx > 0);
cycles_pcsx = next_interupt - psxRegs.cycle;
assert((s32)cycles_pcsx > 0);
@@
-527,6
+528,8
@@
static void lightrec_plugin_execute_internal(bool block_only)
if (flags & LIGHTREC_EXIT_SYSCALL)
psxException(R3000E_Syscall << 2, 0, (psxCP0Regs *)regs->cp0);
if (flags & LIGHTREC_EXIT_SYSCALL)
psxException(R3000E_Syscall << 2, 0, (psxCP0Regs *)regs->cp0);
+ if (flags & LIGHTREC_EXIT_BREAK)
+ psxException(R3000E_Bp << 2, 0, (psxCP0Regs *)regs->cp0);
else if (flags & LIGHTREC_EXIT_UNKNOWN_OP) {
u32 op = intFakeFetch(psxRegs.pc);
u32 hlec = op & 0x03ffffff;
else if (flags & LIGHTREC_EXIT_UNKNOWN_OP) {
u32 op = intFakeFetch(psxRegs.pc);
u32 hlec = op & 0x03ffffff;
@@
-549,8
+552,6
@@
static void lightrec_plugin_execute_internal(bool block_only)
static void lightrec_plugin_execute(void)
{
static void lightrec_plugin_execute(void)
{
- extern int stop;
-
while (!stop)
lightrec_plugin_execute_internal(false);
}
while (!stop)
lightrec_plugin_execute_internal(false);
}
@@
-625,6
+626,8
@@
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
+
+ lightrec_set_unsafe_opt_flags(lightrec_state, lightrec_hacks);
}
static void lightrec_plugin_sync_regs_from_pcsx(bool need_cp2)
}
static void lightrec_plugin_sync_regs_from_pcsx(bool need_cp2)