Fixed SRAM load from compressed ZST.
This commit is contained in:
@@ -58,6 +58,7 @@ extern bool romispal;
|
|||||||
void GUIDoReset();
|
void GUIDoReset();
|
||||||
void powercycle(bool);
|
void powercycle(bool);
|
||||||
void zst_sram_load(FILE *);
|
void zst_sram_load(FILE *);
|
||||||
|
void zst_sram_load_compressed(FILE *);
|
||||||
void zst_save(FILE *, bool, bool);
|
void zst_save(FILE *, bool, bool);
|
||||||
bool zst_load(FILE *, size_t);
|
bool zst_load(FILE *, size_t);
|
||||||
bool zst_compressed_loader(FILE *);
|
bool zst_compressed_loader(FILE *);
|
||||||
@@ -931,13 +932,13 @@ static bool zmv_open(char *filename)
|
|||||||
break;
|
break;
|
||||||
case zmv_sm_power:
|
case zmv_sm_power:
|
||||||
powercycle(false);
|
powercycle(false);
|
||||||
zst_sram_load(zmv_vars.fp);
|
zst_sram_load_compressed(zmv_vars.fp);
|
||||||
break;
|
break;
|
||||||
case zmv_sm_reset:
|
case zmv_sm_reset:
|
||||||
GUIReset = 1;
|
GUIReset = 1;
|
||||||
asm_call(GUIDoReset);
|
asm_call(GUIDoReset);
|
||||||
ReturnFromSPCStall = 0;
|
ReturnFromSPCStall = 0;
|
||||||
zst_sram_load(zmv_vars.fp);
|
zst_sram_load_compressed(zmv_vars.fp);
|
||||||
break;
|
break;
|
||||||
case zmv_sm_clear_all:
|
case zmv_sm_clear_all:
|
||||||
powercycle(false);
|
powercycle(false);
|
||||||
|
|||||||
@@ -719,6 +719,49 @@ void zst_sram_load(FILE *fp)
|
|||||||
if (ramsize) { fread(sram, 1, ramsize, fp); } // normal sram
|
if (ramsize) { fread(sram, 1, ramsize, fp); } // normal sram
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void zst_sram_load_compressed(FILE *fp)
|
||||||
|
{
|
||||||
|
size_t compressed_size = fread3(fp);
|
||||||
|
if (compressed_size & 0x00800000)
|
||||||
|
{
|
||||||
|
zst_sram_load(fp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
unsigned long data_size = cur_zst_size - (sizeof(zst_header_cur)-1);
|
||||||
|
unsigned char *buffer = 0;
|
||||||
|
|
||||||
|
if ((buffer = (unsigned char *)malloc(data_size)))
|
||||||
|
{
|
||||||
|
unsigned char *compressed_buffer = 0;
|
||||||
|
if ((compressed_buffer = (unsigned char *)malloc(compressed_size)))
|
||||||
|
{
|
||||||
|
fread(compressed_buffer, 1, compressed_size, fp);
|
||||||
|
if (uncompress(buffer, &data_size, compressed_buffer, compressed_size) == Z_OK)
|
||||||
|
{
|
||||||
|
unsigned char *data = buffer + PH65816regsize + 199635;
|
||||||
|
if (spcon) { data += PHspcsave + PHdspsave + sizeof(DSPMem); }
|
||||||
|
if (C4Enable) { data += 8192; }
|
||||||
|
if (SFXEnable) { data += PHnum2writesfxreg + 131072; }
|
||||||
|
if (SA1Enable)
|
||||||
|
{
|
||||||
|
data += PHnum2writesa1reg;
|
||||||
|
memcpyrinc(&data, SA1RAMArea, 131072); // SA-1 sram
|
||||||
|
data += 15;
|
||||||
|
}
|
||||||
|
if (DSP1Type) { data += 2874; }
|
||||||
|
if (SETAEnable) { memcpyrinc(&data, setaramdata, 4096); } // SETA sram
|
||||||
|
if (SPC7110Enable) { data += PHnum2writespc7110reg + 65536; }
|
||||||
|
data += 227;
|
||||||
|
if (ramsize) { memcpyrinc(&data, sram, ramsize); } // normal sram
|
||||||
|
}
|
||||||
|
free(compressed_buffer);
|
||||||
|
}
|
||||||
|
free(buffer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void stateloader (unsigned char *statename, unsigned char keycheck, unsigned char xfercheck)
|
void stateloader (unsigned char *statename, unsigned char keycheck, unsigned char xfercheck)
|
||||||
{
|
{
|
||||||
#ifdef __LINUX__
|
#ifdef __LINUX__
|
||||||
|
|||||||
Reference in New Issue
Block a user