This commit is contained in:
dborth 2010-12-27 05:41:49 +00:00
parent d7e85f0dc7
commit 32f8662987

View File

@ -1255,6 +1255,7 @@ bool8 S9xUnfreezeGame (const char *filename)
void S9xFreezeToStream (STREAM stream) void S9xFreezeToStream (STREAM stream)
{ {
char buffer[1024]; char buffer[1024];
uint8 *soundsnapshot = new uint8[SPC_SAVE_STATE_BLOCK_SIZE];
S9xSetSoundMute(TRUE); S9xSetSoundMute(TRUE);
@ -1288,7 +1289,6 @@ void S9xFreezeToStream (STREAM stream)
FreezeBlock (stream, "FIL", Memory.FillRAM, 0x8000); FreezeBlock (stream, "FIL", Memory.FillRAM, 0x8000);
uint8 soundsnapshot[SPC_SAVE_STATE_BLOCK_SIZE];
S9xAPUSaveState(soundsnapshot); S9xAPUSaveState(soundsnapshot);
FreezeBlock (stream, "SND", soundsnapshot, SPC_SAVE_STATE_BLOCK_SIZE); FreezeBlock (stream, "SND", soundsnapshot, SPC_SAVE_STATE_BLOCK_SIZE);
@ -1411,6 +1411,8 @@ void S9xFreezeToStream (STREAM stream)
#endif #endif
S9xSetSoundMute(FALSE); S9xSetSoundMute(FALSE);
delete [] soundsnapshot;
} }
int S9xUnfreezeFromStream (STREAM stream) int S9xUnfreezeFromStream (STREAM stream)
@ -1881,7 +1883,7 @@ static void FreezeStruct (STREAM stream, const char *name, void *base, FreezeDat
uint8 *addr; uint8 *addr;
uint16 word; uint16 word;
uint32 dword; uint32 dword;
int64 qword; int64 qaword;
int relativeAddr; int relativeAddr;
for (i = 0; i < num_fields; i++) for (i = 0; i < num_fields; i++)
@ -1930,15 +1932,15 @@ static void FreezeStruct (STREAM stream, const char *name, void *base, FreezeDat
break; break;
case 8: case 8:
qword = *((int64 *) (addr)); qaword = *((int64 *) (addr));
*ptr++ = (uint8) (qword >> 56); *ptr++ = (uint8) (qaword >> 56);
*ptr++ = (uint8) (qword >> 48); *ptr++ = (uint8) (qaword >> 48);
*ptr++ = (uint8) (qword >> 40); *ptr++ = (uint8) (qaword >> 40);
*ptr++ = (uint8) (qword >> 32); *ptr++ = (uint8) (qaword >> 32);
*ptr++ = (uint8) (qword >> 24); *ptr++ = (uint8) (qaword >> 24);
*ptr++ = (uint8) (qword >> 16); *ptr++ = (uint8) (qaword >> 16);
*ptr++ = (uint8) (qword >> 8); *ptr++ = (uint8) (qaword >> 8);
*ptr++ = (uint8) qword; *ptr++ = (uint8) qaword;
break; break;
} }
@ -2117,7 +2119,7 @@ static void UnfreezeStructFromCopy (void *sbase, FreezeData *fields, int num_fie
uint8 *ptr = block; uint8 *ptr = block;
uint16 word; uint16 word;
uint32 dword; uint32 dword;
int64 qword; int64 qaword;
uint8 *addr; uint8 *addr;
void *base; void *base;
int relativeAddr; int relativeAddr;
@ -2183,15 +2185,15 @@ static void UnfreezeStructFromCopy (void *sbase, FreezeData *fields, int num_fie
break; break;
} }
qword = (int64) *ptr++ << 56; qaword = (int64) *ptr++ << 56;
qword |= (int64) *ptr++ << 48; qaword |= (int64) *ptr++ << 48;
qword |= (int64) *ptr++ << 40; qaword |= (int64) *ptr++ << 40;
qword |= (int64) *ptr++ << 32; qaword |= (int64) *ptr++ << 32;
qword |= (int64) *ptr++ << 24; qaword |= (int64) *ptr++ << 24;
qword |= (int64) *ptr++ << 16; qaword |= (int64) *ptr++ << 16;
qword |= (int64) *ptr++ << 8; qaword |= (int64) *ptr++ << 8;
qword |= (int64) *ptr++; qaword |= (int64) *ptr++;
*((int64 *) (addr)) = qword; *((int64 *) (addr)) = qaword;
break; break;
default: default:
@ -2278,3 +2280,4 @@ bool8 S9xSPCDump (const char *filename)
return (TRUE); return (TRUE);
} }