sms, improve gg detection (zip, rom header)

This commit is contained in:
kub 2021-10-15 19:22:01 +02:00
parent 466fa07953
commit 14cd01be51
3 changed files with 14 additions and 2 deletions

View file

@ -243,6 +243,7 @@ zip_failed:
file->param = cso; file->param = cso;
file->size = cso->header.total_bytes; file->size = cso->header.total_bytes;
file->type = PMT_CSO; file->type = PMT_CSO;
strncpy(file->ext, ext, sizeof(file->ext) - 1);
return file; return file;
cso_failed: cso_failed:

View file

@ -259,7 +259,6 @@ enum media_type_e PicoLoadMedia(const char *filename,
} }
ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoIn.AHW & PAHW_SMS) ? 1 : 0); ret = PicoCartLoad(rom, &rom_data, &rom_size, (PicoIn.AHW & PAHW_SMS) ? 1 : 0);
pm_close(rom);
if (ret != 0) { if (ret != 0) {
if (ret == 2) lprintf("Out of memory\n"); if (ret == 2) lprintf("Out of memory\n");
else if (ret == 3) lprintf("Read failed\n"); else if (ret == 3) lprintf("Read failed\n");
@ -299,7 +298,7 @@ enum media_type_e PicoLoadMedia(const char *filename,
// simple test for GG. Do this here since m.hardware is nulled in Insert // simple test for GG. Do this here since m.hardware is nulled in Insert
if (PicoIn.AHW & PAHW_SMS) { if (PicoIn.AHW & PAHW_SMS) {
if (strstr(filename,".gg")) { if (!strcmp(rom->ext,"gg")) {
Pico.m.hardware |= 0x1; Pico.m.hardware |= 0x1;
lprintf("detected GG ROM\n"); lprintf("detected GG ROM\n");
} else } else
@ -322,6 +321,8 @@ enum media_type_e PicoLoadMedia(const char *filename,
PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN); PicoSetInputDevice(0, PICO_INPUT_PAD_6BTN);
out: out:
if (rom)
pm_close(rom);
if (rom_data) if (rom_data)
free(rom_data); free(rom_data);
return media_type; return media_type;

View file

@ -323,6 +323,7 @@ void PicoResetMS(void)
void PicoPowerMS(void) void PicoPowerMS(void)
{ {
int s, tmp; int s, tmp;
unsigned tmr;
memset(&PicoMem,0,sizeof(PicoMem)); memset(&PicoMem,0,sizeof(PicoMem));
memset(&Pico.video,0,sizeof(Pico.video)); memset(&Pico.video,0,sizeof(Pico.video));
@ -339,6 +340,15 @@ void PicoPowerMS(void)
tmp = 1 << s; tmp = 1 << s;
bank_mask = (tmp - 1) >> 14; bank_mask = (tmp - 1) >> 14;
// check if the ROM header contains more system information to detect GG
for (tmr = 0x2000; tmr < 0xbfff && tmr <= Pico.romsize; tmr *= 2) {
if (!memcmp(Pico.rom + tmr-16, "TMR SEGA", 8)) {
if (Pico.rom[tmr-1] >= 0x50 && Pico.rom[tmr-1] < 0x80)
Pico.m.hardware |= 0x1;
break;
}
}
PicoReset(); PicoReset();
} }