notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
clarify PicoDrive's license
[picodrive.git]
/
pico
/
32x
/
32x.c
diff --git
a/pico/32x/32x.c
b/pico/32x/32x.c
index
f9ac533
..
a452f83
100644
(file)
--- a/
pico/32x/32x.c
+++ b/
pico/32x/32x.c
@@
-1,3
+1,10
@@
+/*
+ * PicoDrive
+ * (C) notaz, 2009,2010
+ *
+ * This work is licensed under the terms of MAME license.
+ * See COPYING file in the top-level directory.
+ */
#include "../pico_int.h"
#include "../sound/ym2612.h"
#include "../pico_int.h"
#include "../sound/ym2612.h"
@@
-19,7
+26,7
@@
static int REGPARM(2) sh2_irq_cb(SH2 *sh2, int level)
}
}
}
}
-void p32x_update_irls(
void
)
+void p32x_update_irls(
int nested_call
)
{
int irqs, mlvl = 0, slvl = 0;
{
int irqs, mlvl = 0, slvl = 0;
@@
-36,8
+43,8
@@
void p32x_update_irls(void)
slvl *= 2;
elprintf(EL_32X, "update_irls: m %d, s %d", mlvl, slvl);
slvl *= 2;
elprintf(EL_32X, "update_irls: m %d, s %d", mlvl, slvl);
- sh2_irl_irq(&msh2, mlvl);
- sh2_irl_irq(&ssh2, slvl);
+ sh2_irl_irq(&msh2, mlvl
, nested_call
);
+ sh2_irl_irq(&ssh2, slvl
, nested_call
);
mlvl = mlvl ? 1 : 0;
slvl = slvl ? 1 : 0;
p32x_poll_event(mlvl | (slvl << 1), 0);
mlvl = mlvl ? 1 : 0;
slvl = slvl ? 1 : 0;
p32x_poll_event(mlvl | (slvl << 1), 0);
@@
-141,7
+148,7
@@
void PicoReset32x(void)
{
if (PicoAHW & PAHW_32X) {
Pico32x.sh2irqs |= P32XI_VRES;
{
if (PicoAHW & PAHW_32X) {
Pico32x.sh2irqs |= P32XI_VRES;
- p32x_update_irls();
+ p32x_update_irls(
0
);
p32x_poll_event(3, 0);
}
}
p32x_poll_event(3, 0);
}
}
@@
-186,7
+193,7
@@
static void p32x_start_blank(void)
}
Pico32x.sh2irqs |= P32XI_VINT;
}
Pico32x.sh2irqs |= P32XI_VINT;
- p32x_update_irls();
+ p32x_update_irls(
0
);
p32x_poll_event(3, 1);
}
p32x_poll_event(3, 1);
}
@@
-194,6
+201,7
@@
static __inline void run_m68k(int cyc)
{
pprof_start(m68k);
{
pprof_start(m68k);
+p32x_poll_event(3, 0);
#if defined(EMU_C68K)
PicoCpuCM68k.cycles = cyc;
CycloneRun(&PicoCpuCM68k);
#if defined(EMU_C68K)
PicoCpuCM68k.cycles = cyc;
CycloneRun(&PicoCpuCM68k);
@@
-210,7
+218,8
@@
static __inline void run_m68k(int cyc)
// ~1463.8, but due to cache misses and slow mem
// it's much lower than that
//#define SH2_LINE_CYCLES 735
// ~1463.8, but due to cache misses and slow mem
// it's much lower than that
//#define SH2_LINE_CYCLES 735
-#define CYCLES_M68K2SH2(x) ((x) * 6 / 4)
+#define CYCLES_M68K2MSH2(x) (((x) * p32x_msh2_multiplier) >> 10)
+#define CYCLES_M68K2SSH2(x) (((x) * p32x_ssh2_multiplier) >> 10)
#define PICO_32X
#define CPUS_RUN_SIMPLE(m68k_cycles,s68k_cycles) \
#define PICO_32X
#define CPUS_RUN_SIMPLE(m68k_cycles,s68k_cycles) \
@@
-227,12
+236,12
@@
static __inline void run_m68k(int cyc)
elprintf(EL_32X, "slice %d", slice); \
if (!(Pico32x.emu_flags & (P32XF_SSH2POLL|P32XF_SSH2VPOLL))) { \
pprof_start(ssh2); \
elprintf(EL_32X, "slice %d", slice); \
if (!(Pico32x.emu_flags & (P32XF_SSH2POLL|P32XF_SSH2VPOLL))) { \
pprof_start(ssh2); \
- sh2_execute(&ssh2, CYCLES_M68K2SH2(slice)); \
+ sh2_execute(&ssh2, CYCLES_M68K2S
S
H2(slice)); \
pprof_end(ssh2); \
} \
if (!(Pico32x.emu_flags & (P32XF_MSH2POLL|P32XF_MSH2VPOLL))) { \
pprof_start(msh2); \
pprof_end(ssh2); \
} \
if (!(Pico32x.emu_flags & (P32XF_MSH2POLL|P32XF_MSH2VPOLL))) { \
pprof_start(msh2); \
- sh2_execute(&msh2, CYCLES_M68K2SH2(slice)); \
+ sh2_execute(&msh2, CYCLES_M68K2
M
SH2(slice)); \
pprof_end(msh2); \
} \
pprof_start(dummy); \
pprof_end(msh2); \
} \
pprof_start(dummy); \