-// The SVP chip emulator
-
-// (c) Copyright 2008, Grazvydas "notaz" Ignotas
-// Free for non-commercial use.
-
-// For commercial use, separate licencing terms must be obtained.
-
-
-#include "../../pico_int.h"
+/*
+ * The SVP chip emulator
+ *
+ * Copyright (c) GraÅžvydas "notaz" Ignotas, 2008
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the organization nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <pico/pico_int.h>
+#include <cpu/drc/cmn.h>
#include "compiler.h"
-#ifdef __linux__
-#include <sys/mman.h>
-#endif
svp_t *svp = NULL;
int PicoSVPCycles = 850; // cycles/line, just a guess
memcpy(svp->iram_rom + 0x800, Pico.rom + 0x800, 0x20000 - 0x800);
ssp1601_reset(&svp->ssp1601);
-#ifndef PSP
- if ((PicoOpt&POPT_EN_SVP_DRC) && svp_dyn_ready)
+#ifdef _SVP_DRC
+ if ((PicoOpt & POPT_EN_DRC) && svp_dyn_ready)
ssp1601_dyn_reset(&svp->ssp1601);
#endif
}
static void PicoSVPLine(void)
{
int count = 1;
-#if defined(ARM) || defined(PSP)
+#if defined(__arm__) || defined(PSP)
// performance hack
static int delay_lines = 0;
delay_lines++;
delay_lines = 0;
#endif
-#ifndef PSP
- if ((PicoOpt&POPT_EN_SVP_DRC) && svp_dyn_ready)
+#ifdef _SVP_DRC
+ if ((PicoOpt & POPT_EN_DRC) && svp_dyn_ready)
ssp1601_dyn_run(PicoSVPCycles * count);
else
#endif
void PicoSVPInit(void)
{
-#ifdef __linux__
- int ret;
- ret = munmap(tcache, SSP_DRC_SIZE);
- printf("munmap tcache: %i\n", ret);
+#ifdef _SVP_DRC
+ // this is to unmap tcache and make
+ // mem available for large ROMs, MCD, etc.
+ drc_cmn_cleanup();
#endif
}
-
-static void PicoSVPShutdown(void)
+static void PicoSVPExit(void)
{
-#ifdef __linux__
- // also unmap tcache
- PicoSVPInit();
+#ifdef _SVP_DRC
+ ssp1601_dyn_exit();
#endif
}
void PicoSVPStartup(void)
{
- void *tmp;
+ int ret;
- elprintf(EL_SVP, "SVP init");
+ elprintf(EL_STATUS, "SVP startup");
- tmp = realloc(Pico.rom, 0x200000 + sizeof(*svp));
- if (tmp == NULL)
- {
+ ret = PicoCartResize(Pico.romsize + sizeof(*svp));
+ if (ret != 0) {
elprintf(EL_STATUS|EL_SVP, "OOM for SVP data");
return;
}
- //PicoOpt &= ~0x20000;
- Pico.rom = tmp;
- svp = (void *) ((char *)tmp + 0x200000);
+ svp = (void *) ((char *)Pico.rom + Pico.romsize);
memset(svp, 0, sizeof(*svp));
-#ifdef __linux__
- tmp = mmap(tcache, SSP_DRC_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
svp_dyn_ready = 0;
-#ifndef PSP
- if (PicoOpt&POPT_EN_SVP_DRC) {
- if (ssp1601_dyn_startup()) return;
+#ifdef _SVP_DRC
+ if (PicoOpt & POPT_EN_DRC) {
+ if (ssp1601_dyn_startup())
+ return;
svp_dyn_ready = 1;
}
#endif
// init ok, setup hooks..
- PicoRead16Hook = PicoSVPRead16;
- PicoWrite8Hook = PicoSVPWrite8;
- PicoWrite16Hook = PicoSVPWrite16;
+ PicoCartMemSetup = PicoSVPMemSetup;
PicoDmaHook = PicoSVPDma;
PicoResetHook = PicoSVPReset;
PicoLineHook = PicoSVPLine;
- PicoCartUnloadHook = PicoSVPShutdown;
+ PicoCartUnloadHook = PicoSVPExit;
// save state stuff
svp_states[0].ptr = svp->iram_rom;
PicoAHW |= PAHW_SVP;
}
-