From 286022c60242c0129141390d3c471c07e7dca16e Mon Sep 17 00:00:00 2001 From: dinkc64 <12570148+dinkc64@users.noreply.github.com> Date: Sat, 21 Jun 2014 20:14:18 +0000 Subject: [PATCH] YM2151 savestates re-re-revisited. --- src/burn/snd/burn_ym2151.cpp | 10 +++++---- src/burn/snd/burn_ym2151.h | 5 ++++- src/burn/snd/ym2151.c | 42 +++++++++++++++++++++++++++++++++++- 3 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/burn/snd/burn_ym2151.cpp b/src/burn/snd/burn_ym2151.cpp index 28c997c2c..a3e221b9d 100644 --- a/src/burn/snd/burn_ym2151.cpp +++ b/src/burn/snd/burn_ym2151.cpp @@ -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]); } - }*/ + } } diff --git a/src/burn/snd/burn_ym2151.h b/src/burn/snd/burn_ym2151.h index 691d8bbb6..a2f16fe4e 100644 --- a/src/burn/snd/burn_ym2151.h +++ b/src/burn/snd/burn_ym2151.h @@ -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); } diff --git a/src/burn/snd/ym2151.c b/src/burn/snd/ym2151.c index 68e6194a6..c772f17b9 100644 --- a/src/burn/snd/ym2151.c +++ b/src/burn/snd/ym2151.c @@ -5,6 +5,7 @@ ******************************************************************************/ #include +#include #include #include #include @@ -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