}\r
\r
// Check for SMD:\r
- if ((size&0x3fff)==0x200) { DecodeSmd(rom,size); size-=0x200; } // Decode and byteswap SMD\r
+ if (size >= 0x4200 && (size&0x3fff)==0x200 &&\r
+ ((rom[0x2280] == 'S' && rom[0x280] == 'E') || (rom[0x280] == 'S' && rom[0x2281] == 'E'))) {\r
+ DecodeSmd(rom,size); size-=0x200; // Decode and byteswap SMD\r
+ }\r
else Byteswap(rom,size); // Just byteswap\r
\r
if (prom) *prom=rom;\r
PicoCartUnloadHook = NULL;\r
}\r
\r
- PicoAHW &= ~PAHW_SVP;\r
+ PicoAHW &= PAHW_MCD;\r
\r
PicoMemResetHooks();\r
PicoDmaHook = NULL;\r
\r
// setup correct memory map for loaded ROM\r
// call PicoMemReset again due to possible memmap change\r
- if (PicoAHW & PAHW_MCD)\r
- PicoMemSetupCD();\r
- else PicoMemSetup();\r
+ switch (PicoAHW) {\r
+ default:\r
+ elprintf(EL_STATUS|EL_ANOMALY, "starting in unknown hw configuration: %x", PicoAHW);\r
+ case 0:\r
+ case PAHW_SVP: PicoMemSetup(); break;\r
+ case PAHW_MCD: PicoMemSetupCD(); break;\r
+ case PAHW_PICO: PicoMemSetupPico(); break;\r
+ }\r
PicoMemReset();\r
\r
PicoPower();\r
return 0;\r
}\r
\r
-int PicoCartUnload(void)\r
+void PicoCartUnload(void)\r
{\r
if (Pico.rom != NULL) {\r
+ SekFinishIdleDet();\r
free(Pico.rom);\r
Pico.rom=NULL;\r
}\r
- return 0;\r
}\r
\r
static int rom_strcmp(int rom_offset, const char *s1)\r
PicoSVPStartup();\r
}\r
\r
+ // Pico\r
+ else if (rom_strcmp(0x100, "SEGA PICO") == 0 ||\r
+ rom_strcmp(0x100, "IMA IKUNOUJYUKU") == 0) // what is that supposed to mean?\r
+ {\r
+ PicoInitPico();\r
+ }\r
+\r
// Detect 12-in-1 mapper\r
else if ((name_cmp("ROBOCOP 3") == 0 && Pico.romsize == 0x200000) ||\r
(rom_strcmp(0x160, "FLICKY") == 0 && Pico.romsize >= 0x200000) ||\r
carthw_realtec_startup();\r
}\r
\r
+ // Radica mapper\r
+ else if (name_cmp("KID CHAMELEON") == 0 && Pico.romsize > 0x100000)\r
+ {\r
+ carthw_radica_startup();\r
+ }\r
+\r
// Some games malfunction if SRAM is not filled with 0xff\r
if (name_cmp("DINO DINI'S SOCCER") == 0 ||\r
name_cmp("MICRO MACHINES II") == 0)\r
}\r
\r
// Unusual region 'code'\r
- if (rom_strcmp(0x1f0, "EUROPE") == 0)\r
+ if (rom_strcmp(0x1f0, "EUROPE") == 0 || rom_strcmp(0x1f0, "Europe") == 0)\r
*(int *) (Pico.rom+0x1f0) = 0x20204520;\r
}\r
\r