#include "../../PicoInt.h"
+#include "compiler.h"
+#ifdef __GP2X__
+#include <sys/mman.h>
+#endif
svp_t *svp = NULL;
int PicoSVPCycles = 1000; // cycles/line
memcpy(svp->iram_rom + 0x800, Pico.rom + 0x800, 0x20000 - 0x800);
ssp1601_reset(&svp->ssp1601);
+ if (!(PicoOpt&0x20000))
+ ssp1601_dyn_reset(&svp->ssp1601);
}
static void PicoSVPLine(int count)
{
+ static int inited = 0;
+ if (!(svp->ssp1601.gr[SSP_PM0].h & 2) && !inited) return;
+ inited = 1;
+
// ???
- ssp1601_run(PicoSVPCycles * count);
+ if (PicoOpt&0x20000)
+ ssp1601_run(PicoSVPCycles * count);
+ else
+ ssp1601_dyn_run(PicoSVPCycles * count);
// test mode
//if (Pico.m.frame_count == 13) PicoPad[0] |= 0xff;
void PicoSVPInit(void)
+{
+#ifdef __GP2X__
+ int ret;
+ ret = munmap(tcache, TCACHE_SIZE);
+ printf("munmap tcache: %i\n", ret);
+#endif
+}
+
+
+static void PicoSVPShutdown(void)
+{
+#ifdef __GP2X__
+ // also unmap tcache
+ PicoSVPInit();
+#endif
+}
+
+
+void PicoSVPStartup(void)
{
void *tmp;
svp = (void *) ((char *)tmp + 0x200000);
memset(svp, 0, sizeof(*svp));
+#ifdef __GP2X__
+ tmp = mmap(tcache, TCACHE_SIZE, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_SHARED|MAP_ANONYMOUS, -1, 0);
+ printf("mmap tcache: %p, asked %p\n", tmp, tcache);
+#endif
+
+ // init SVP compiler
+ if (!(PicoOpt&0x20000)) {
+ if (ssp1601_dyn_startup()) return;
+ }
+
// init ok, setup hooks..
PicoRead16Hook = PicoSVPRead16;
PicoWrite8Hook = PicoSVPWrite8;
PicoDmaHook = PicoSVPDma;
PicoResetHook = PicoSVPReset;
PicoLineHook = PicoSVPLine;
+ PicoCartUnloadHook = PicoSVPShutdown;
// save state stuff
svp_states[0].ptr = svp->iram_rom;
carthw_chunks = svp_states;
}
+