sanic cd now loads up to a "backup ram broken" screen

This commit is contained in:
goyuken 2013-12-16 20:02:12 +00:00
parent 85be43dfb8
commit a36982ebc6
4 changed files with 23 additions and 4 deletions

View File

@ -134,14 +134,33 @@ typedef struct
void (*cdd_readcallback)(int lba, void *dest); void (*cdd_readcallback)(int lba, void *dest);
} frontendcd_t; } frontendcd_t;
int cdd_load(void) int cdd_load(char *header)
{ {
frontendcd_t fecd; frontendcd_t fecd;
char data[2048];
int startoffs;
int bytes = sizeof(frontendcd_t); int bytes = sizeof(frontendcd_t);
if (load_archive("PRIMARY_CD", (unsigned char *)&fecd, bytes, NULL) != bytes) if (load_archive("PRIMARY_CD", (unsigned char *)&fecd, bytes, NULL) != bytes)
return 0; return 0;
// look for valid header
fecd.cdd_readcallback(0, data);
if (memcmp("SEGADISCSYSTEM", data, 14) == 0)
startoffs = 0;
else if (memcmp("SEGADISCSYSTEM", data + 16, 14) == 0)
startoffs = 16;
else
return 0;
// copy security block
memcpy(header, data + startoffs, 0x210);
// copy disk information
cdd_readcallback = fecd.cdd_readcallback; cdd_readcallback = fecd.cdd_readcallback;
memcpy(&cdd.toc, &fecd.toc, sizeof(toc_t)); memcpy(&cdd.toc, &fecd.toc, sizeof(toc_t));
cdd.loaded = 1;
return 1; return 1;
} }

View File

@ -96,7 +96,7 @@ extern void cdd_init(blip_t* left, blip_t* right);
extern void cdd_reset(void); extern void cdd_reset(void);
extern int cdd_context_save(uint8 *state); extern int cdd_context_save(uint8 *state);
extern int cdd_context_load(uint8 *state); extern int cdd_context_load(uint8 *state);
extern int cdd_load(void); extern int cdd_load(char *header);
extern void cdd_unload(void); extern void cdd_unload(void);
extern void cdd_read_data(uint8 *dst); extern void cdd_read_data(uint8 *dst);
extern void cdd_read_audio(unsigned int samples); extern void cdd_read_audio(unsigned int samples);

View File

@ -541,7 +541,7 @@ int load_rom(char *filename)
} }
/* auto-detect CD image files */ /* auto-detect CD image files */
size = cdd_load(); size = cdd_load((char *)(cart.rom));
if (size < 0) if (size < 0)
{ {
/* error opening file */ /* error opening file */
@ -730,7 +730,7 @@ int load_rom(char *filename)
/* automatically load associated .iso image */ /* automatically load associated .iso image */
strncpy(&filename[strlen(filename) - 4], ".iso", 4); strncpy(&filename[strlen(filename) - 4], ".iso", 4);
cdd_load(); // should this be checked for failure? cdd_load((char *)cdc.ram); // should this be checked for failure?
} }
else else
{ {

Binary file not shown.