notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
32x: implement standard/ssf2 mapper
[picodrive.git]
/
pico
/
cart.c
diff --git
a/pico/cart.c
b/pico/cart.c
index
f17ce5e
..
9fcb01a
100644
(file)
--- a/
pico/cart.c
+++ b/
pico/cart.c
@@
-391,8
+391,8
@@
int pm_seek(pm_file *stream, long offset, int whence)
offset = pos;
\r
}
\r
\r
offset = pos;
\r
}
\r
\r
- if (PicoMessage != NULL && offset > 4 * 1024 * 1024)
\r
- PicoMessage("Decompressing data...");
\r
+ if (Pico
In.osd
Message != NULL && offset > 4 * 1024 * 1024)
\r
+ Pico
In.osd
Message("Decompressing data...");
\r
\r
while (offset > 0) {
\r
char buf[16 * 1024];
\r
\r
while (offset > 0) {
\r
char buf[16 * 1024];
\r
@@
-576,9
+576,9
@@
int PicoCartLoad(pm_file *f,unsigned char **prom,unsigned int *psize,int is_sms)
if (!is_sms)
\r
{
\r
// maybe we are loading MegaCD BIOS?
\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
+ if (!(Pico
In.
AHW & PAHW_MCD) && size == 0x20000 && (!strncmp((char *)rom+0x124, "BOOT", 4) ||
\r
!strncmp((char *)rom+0x128, "BOOT", 4))) {
\r
!strncmp((char *)rom+0x128, "BOOT", 4))) {
\r
- PicoAHW |= PAHW_MCD;
\r
+ Pico
In.
AHW |= PAHW_MCD;
\r
}
\r
\r
// Check for SMD:
\r
}
\r
\r
// Check for SMD:
\r
@@
-628,7
+628,7
@@
int PicoCartInsert(unsigned char *rom, unsigned int romsize, const char *carthw_
}
\r
pdb_cleanup();
\r
\r
}
\r
pdb_cleanup();
\r
\r
- PicoAHW &= PAHW_MCD|PAHW_SMS;
\r
+ Pico
In.
AHW &= PAHW_MCD|PAHW_SMS;
\r
\r
PicoCartMemSetup = NULL;
\r
PicoDmaHook = NULL;
\r
\r
PicoCartMemSetup = NULL;
\r
PicoDmaHook = NULL;
\r
@@
-637,13
+637,13
@@
int PicoCartInsert(unsigned char *rom, unsigned int romsize, const char *carthw_
PicoLoadStateHook = NULL;
\r
carthw_chunks = NULL;
\r
\r
PicoLoadStateHook = NULL;
\r
carthw_chunks = NULL;
\r
\r
- if (!(PicoAHW & (PAHW_MCD|PAHW_SMS)))
\r
+ if (!(Pico
In.
AHW & (PAHW_MCD|PAHW_SMS)))
\r
PicoCartDetect(carthw_cfg);
\r
\r
// setup correct memory map for loaded ROM
\r
PicoCartDetect(carthw_cfg);
\r
\r
// setup correct memory map for loaded ROM
\r
- switch (PicoAHW) {
\r
+ switch (Pico
In.
AHW) {
\r
default:
\r
default:
\r
- elprintf(EL_STATUS|EL_ANOMALY, "starting in unknown hw configuration: %x", PicoAHW);
\r
+ elprintf(EL_STATUS|EL_ANOMALY, "starting in unknown hw configuration: %x", Pico
In.
AHW);
\r
case 0:
\r
case PAHW_SVP: PicoMemSetup(); break;
\r
case PAHW_MCD: PicoMemSetupCD(); break;
\r
case 0:
\r
case PAHW_SVP: PicoMemSetup(); break;
\r
case PAHW_MCD: PicoMemSetupCD(); break;
\r
@@
-654,7
+654,7
@@
int PicoCartInsert(unsigned char *rom, unsigned int romsize, const char *carthw_
if (PicoCartMemSetup != NULL)
\r
PicoCartMemSetup();
\r
\r
if (PicoCartMemSetup != NULL)
\r
PicoCartMemSetup();
\r
\r
- if (PicoAHW & PAHW_SMS)
\r
+ if (Pico
In.
AHW & PAHW_SMS)
\r
PicoPowerMS();
\r
else
\r
PicoPower();
\r
PicoPowerMS();
\r
else
\r
PicoPower();
\r
@@
-681,7
+681,7
@@
void PicoCartUnload(void)
PicoCartUnloadHook = NULL;
\r
}
\r
\r
PicoCartUnloadHook = NULL;
\r
}
\r
\r
- if (PicoAHW & PAHW_32X)
\r
+ if (Pico
In.
AHW & PAHW_32X)
\r
PicoUnload32x();
\r
\r
if (Pico.rom != NULL) {
\r
PicoUnload32x();
\r
\r
if (Pico.rom != NULL) {
\r
@@
-778,7
+778,8
@@
static int is_expr(const char *expr, char **pr)
\r
#include "carthw_cfg.c"
\r
\r
\r
#include "carthw_cfg.c"
\r
\r
-static void parse_carthw(const char *carthw_cfg, int *fill_sram)
\r
+static void parse_carthw(const char *carthw_cfg, int *fill_sram,
\r
+ int *hw_detected)
\r
{
\r
int line = 0, any_checks_passed = 0, skip_sect = 0;
\r
const char *s, *builtin = builtin_carthw_cfg;
\r
{
\r
int line = 0, any_checks_passed = 0, skip_sect = 0;
\r
const char *s, *builtin = builtin_carthw_cfg;
\r
@@
-902,6
+903,7
@@
static void parse_carthw(const char *carthw_cfg, int *fill_sram)
if (is_expr("hw", &p)) {
\r
if (!any_checks_passed)
\r
goto no_checks;
\r
if (is_expr("hw", &p)) {
\r
if (!any_checks_passed)
\r
goto no_checks;
\r
+ *hw_detected = 1;
\r
rstrip(p);
\r
\r
if (strcmp(p, "svp") == 0)
\r
rstrip(p);
\r
\r
if (strcmp(p, "svp") == 0)
\r
@@
-925,6
+927,7
@@
static void parse_carthw(const char *carthw_cfg, int *fill_sram)
else {
\r
elprintf(EL_STATUS, "carthw:%d: unsupported mapper: %s", line, p);
\r
skip_sect = 1;
\r
else {
\r
elprintf(EL_STATUS, "carthw:%d: unsupported mapper: %s", line, p);
\r
skip_sect = 1;
\r
+ *hw_detected = 0;
\r
}
\r
continue;
\r
}
\r
}
\r
continue;
\r
}
\r
@@
-965,7
+968,7
@@
static void parse_carthw(const char *carthw_cfg, int *fill_sram)
else if (strcmp(p, "filled_sram") == 0)
\r
*fill_sram = 1;
\r
else if (strcmp(p, "force_6btn") == 0)
\r
else if (strcmp(p, "filled_sram") == 0)
\r
*fill_sram = 1;
\r
else if (strcmp(p, "force_6btn") == 0)
\r
- Pico
Q
uirks |= PQUIRK_FORCE_6BTN;
\r
+ Pico
In.q
uirks |= PQUIRK_FORCE_6BTN;
\r
else {
\r
elprintf(EL_STATUS, "carthw:%d: unsupported prop: %s", line, p);
\r
goto bad_nomsg;
\r
else {
\r
elprintf(EL_STATUS, "carthw:%d: unsupported prop: %s", line, p);
\r
goto bad_nomsg;
\r
@@
-1038,6
+1041,7
@@
no_checks:
*/
\r
static void PicoCartDetect(const char *carthw_cfg)
\r
{
\r
*/
\r
static void PicoCartDetect(const char *carthw_cfg)
\r
{
\r
+ int carthw_detected = 0;
\r
int fill_sram = 0;
\r
\r
memset(&Pico.sv, 0, sizeof(Pico.sv));
\r
int fill_sram = 0;
\r
\r
memset(&Pico.sv, 0, sizeof(Pico.sv));
\r
@@
-1067,7
+1071,11
@@
static void PicoCartDetect(const char *carthw_cfg)
Pico.sv.eeprom_bit_out= 0;
\r
\r
if (carthw_cfg != NULL)
\r
Pico.sv.eeprom_bit_out= 0;
\r
\r
if (carthw_cfg != NULL)
\r
- parse_carthw(carthw_cfg, &fill_sram);
\r
+ parse_carthw(carthw_cfg, &fill_sram, &carthw_detected);
\r
+
\r
+ // assume the standard mapper for large roms
\r
+ if (!carthw_detected && Pico.romsize > 0x400000)
\r
+ carthw_ssf2_startup();
\r
\r
if (Pico.sv.flags & SRF_ENABLED)
\r
{
\r
\r
if (Pico.sv.flags & SRF_ENABLED)
\r
{
\r