YM2151 savestates re-re-revisited.

This commit is contained in:
dinkc64 2014-06-21 20:14:18 +00:00
parent 48284e63f4
commit 286022c602
3 changed files with 51 additions and 6 deletions

View File

@ -233,6 +233,7 @@ void BurnYM2151Scan(INT32 nAction)
if ((nAction & ACB_DRIVER_DATA) == 0) {
return;
}
SCAN_VAR(nBurnCurrentYM2151Register);
SCAN_VAR(BurnYM2151Registers);
SCAN_VAR(YM2151Volumes);
@ -243,11 +244,12 @@ void BurnYM2151Scan(INT32 nAction)
SCAN_VAR(nFractionalPosition);
SCAN_VAR(nSamplesRendered);
BurnYM2151Scan_int(nAction); // Proper scan of YM2151's internal registers
/* if (nAction & ACB_WRITE) {
BurnYM2151Scan_int(nAction); // Scan the YM2151's internal registers
// BurnYM2151Scan_int() only links up the default connections -
// therefore the following is necessary to link up user(game)-defined operator connections:
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]);
}
}*/
}
}

View File

@ -31,7 +31,10 @@ static inline void BurnYM2151WriteRegister(const UINT8 nValue)
extern UINT32 nBurnCurrentYM2151Register;
extern UINT8 BurnYM2151Registers[0x0100];
BurnYM2151Registers[nBurnCurrentYM2151Register] = nValue;
if (nBurnCurrentYM2151Register >= 0x20 &&
nBurnCurrentYM2151Register <= 0x3F) { // only(!) remember oper connections
BurnYM2151Registers[nBurnCurrentYM2151Register] = nValue;
}
YM2151WriteReg(0, nBurnCurrentYM2151Register, nValue);
}

View File

@ -5,6 +5,7 @@
******************************************************************************/
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
@ -508,6 +509,30 @@ static FILE *sample[9];
#endif
#define PI 3.14159265358979323846
/* // save for later debugging
void dinklogerror(char* szFormat, ...)
{
static char szLogMessage[1024];
va_list vaFormat;
va_start(vaFormat, szFormat);
_vsnprintf(szLogMessage, 1024, szFormat, vaFormat);
va_end(vaFormat);
//bprintf(PRINT_ERROR, _T("[%hs]!!!"), szLogMessage);
{
FILE *fp;
fp = fopen("damage.txt", "a");
if (fp) {
fputs(szLogMessage, fp);
fclose(fp);
}
}
return;
} */
static void init_tables(void)
@ -1488,7 +1513,7 @@ void BurnYM2151Scan_int(INT32 nAction)
}
for (i=0; i<YMNumChips; i++)
{
{
/* save all 32 operators of chip #i */
for (j=0; j<32; j++)
{
@ -1576,7 +1601,22 @@ void BurnYM2151Scan_int(INT32 nAction)
SCAN_VAR(YMPSG[i].timer_B_index_old);
SCAN_VAR(YMPSG[i].connect);
SCAN_VAR(YMPSG[i].tim_A);
SCAN_VAR(YMPSG[i].tim_B);
SCAN_VAR(YMPSG[i].tim_A_val);
SCAN_VAR(YMPSG[i].tim_B_val);
SCAN_VAR(YMPSG[i].tim_A_tab);
SCAN_VAR(YMPSG[i].tim_B_tab);
SCAN_VAR(YMPSG[i].freq);
SCAN_VAR(YMPSG[i].dt1_freq);
SCAN_VAR(YMPSG[i].noise_tab);
}
SCAN_VAR(chanout);
SCAN_VAR(m2);
SCAN_VAR(c1);
SCAN_VAR(c2); /* Phase Modulation input for operators 2,3,4 */
SCAN_VAR(mem); /* one sample delay memory */
if (nAction & ACB_WRITE) {
// state_save_register_func_postload(ym2151_postload_refresh);
ym2151_postload_refresh();