#include "../unzip/unzip_stream.h"\r
\r
\r
-static char *rom_exts[] = { "bin", "gen", "smd", "iso" };\r
+static const char *rom_exts[] = { "bin", "gen", "smd", "iso", "sms", "gg", "sg" };\r
\r
void (*PicoCartUnloadHook)(void) = NULL;\r
\r
if (zipentry->uncompressed_size >= 128*1024) goto found_rom_zip;\r
if (strlen(zipentry->name) < 5) continue;\r
\r
- ext = zipentry->name+strlen(zipentry->name)-3;\r
+ ext = zipentry->name + strlen(zipentry->name) - 2;\r
+ if (ext[-1] != '.') ext--;\r
+ if (ext[-1] != '.') ext--;\r
+\r
for (i = 0; i < sizeof(rom_exts)/sizeof(rom_exts[0]); i++)\r
if (strcasecmp(ext, rom_exts[i]) == 0) goto found_rom_zip;\r
}\r
return rom;\r
}\r
\r
-int PicoCartLoad(pm_file *f,unsigned char **prom,unsigned int *psize)\r
+int PicoCartLoad(pm_file *f,unsigned char **prom,unsigned int *psize,int is_sms)\r
{\r
unsigned char *rom=NULL; int size, bytes_read;\r
if (f==NULL) return 1;\r
return 3;\r
}\r
\r
- // maybe we are loading MegaCD BIOS?\r
- if (!(PicoAHW & PAHW_MCD) && size == 0x20000 && (!strncmp((char *)rom+0x124, "BOOT", 4) ||\r
- !strncmp((char *)rom+0x128, "BOOT", 4))) {\r
- PicoAHW |= PAHW_MCD;\r
- rom = cd_realloc(rom, size);\r
- }\r
+ if (!is_sms)\r
+ {\r
+ // maybe we are loading MegaCD BIOS?\r
+ if (!(PicoAHW & PAHW_MCD) && size == 0x20000 && (!strncmp((char *)rom+0x124, "BOOT", 4) ||\r
+ !strncmp((char *)rom+0x128, "BOOT", 4))) {\r
+ PicoAHW |= PAHW_MCD;\r
+ rom = cd_realloc(rom, size);\r
+ }\r
\r
- // Check for 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
+ // Check for 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
- else Byteswap(rom,size); // Just byteswap\r
\r
if (prom) *prom=rom;\r
if (psize) *psize=size;\r
PicoCartUnloadHook = NULL;\r
}\r
\r
- PicoAHW &= PAHW_MCD;\r
+ PicoAHW &= PAHW_MCD|PAHW_SMS;\r
\r
PicoMemResetHooks();\r
PicoDmaHook = NULL;\r
\r
PicoMemReset();\r
\r
- if (!(PicoAHW & PAHW_MCD))\r
+ if (!(PicoAHW & (PAHW_MCD|PAHW_SMS)))\r
PicoCartDetect();\r
\r
// setup correct memory map for loaded ROM\r
case PAHW_SVP: PicoMemSetup(); break;\r
case PAHW_MCD: PicoMemSetupCD(); break;\r
case PAHW_PICO: PicoMemSetupPico(); break;\r
+ case PAHW_SMS: PicoMemSetupMS(); break;\r
}\r
PicoMemReset();\r
\r
- PicoPower();\r
+ if (PicoAHW & PAHW_SMS)\r
+ PicoPowerMS();\r
+ else\r
+ PicoPower();\r
+\r
return 0;\r
}\r
\r
void PicoCartUnload(void)\r
{\r
+ if (PicoCartUnloadHook != NULL) {\r
+ PicoCartUnloadHook();\r
+ PicoCartUnloadHook = NULL;\r
+ }\r
+\r
if (Pico.rom != NULL) {\r
SekFinishIdleDet();\r
free(Pico.rom);\r