fix crash issue with the ym2151 savestates when the current samplerate is different from samplerate when the state was made. a compromise was added to prevent breakage of all old savestate files

This commit is contained in:
dinkc64 2016-03-26 00:19:18 +00:00
parent 93cd9aa1ff
commit 16d13e6f63
1 changed files with 23 additions and 15 deletions

View File

@ -234,21 +234,29 @@ void BurnYM2151Scan(INT32 nAction)
return;
}
SCAN_VAR(nBurnCurrentYM2151Register);
SCAN_VAR(BurnYM2151Registers);
SCAN_VAR(YM2151Volumes);
SCAN_VAR(YM2151RouteDirs);
SCAN_VAR(nBurnYM2151SoundRate);
SCAN_VAR(nBurnPosition);
SCAN_VAR(nSampleSize);
SCAN_VAR(nFractionalPosition);
SCAN_VAR(nSamplesRendered);
{
// A long time ago these variables were mistakenly scanned for the savestates.
// Recently it was found that this causes crash situations if the samplerate or
// sample size had changed between machines loading the states.
// These dummy variables are to prevent the breaking all states for games that use the 2151.
double dummyYM2151Volumes[2];
INT32 dummyYM2151RouteDirs[2];
INT32 dummynBurnYM2151SoundRate;
INT32 dummynBurnPosition;
UINT32 dummynSampleSize;
UINT32 dummynFractionalPosition;
UINT32 dummynSamplesRendered;
BurnYM2151Scan_int(nAction); // Properly scan the YM2151's internal registers
SCAN_VAR(nBurnCurrentYM2151Register);
SCAN_VAR(BurnYM2151Registers);
SCAN_VAR(dummyYM2151Volumes);
SCAN_VAR(dummyYM2151RouteDirs);
SCAN_VAR(dummynBurnYM2151SoundRate);
SCAN_VAR(dummynBurnPosition);
SCAN_VAR(dummynSampleSize);
SCAN_VAR(dummynFractionalPosition);
SCAN_VAR(dummynSamplesRendered);
}
/*if (nAction & ACB_WRITE) { // Restore the operator connections, see burn_ym2151.h BurnYM2151WriteRegister() for more info.
for (INT32 i = 0; i < 0x0100; i++) {
YM2151WriteReg(0, i, BurnYM2151Registers[i]);
}
}*/
BurnYM2151Scan_int(nAction); // Scan the YM2151's internal registers
}