From 233431c2ccd12096a53972b7e9fa17448cd9780c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sat, 29 Jul 2023 14:17:04 -0500 Subject: [PATCH] YM2612: implement 30xx on ExtCh --- src/engine/platform/genesisext.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index d4ac2760..1a90adf9 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -19,6 +19,7 @@ #include "genesisext.h" #include "../engine.h" +#include "../../ta-log.h" #include #define CHIP_FREQBASE fmFreqBase @@ -576,6 +577,7 @@ void DivPlatformGenesisExt::tick(bool sysTick) { bool writeNoteOn=false; unsigned char writeMask=2; + unsigned char hardResetMask=0; if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { @@ -603,8 +605,13 @@ void DivPlatformGenesisExt::tick(bool sysTick) { writeNoteOn=true; if (opChan[i].mask) { writeMask|=1<<(4+i); + if (opChan[i].hardReset) { + hardResetMask|=1<<(4+i); + } + } + if (!opChan[i].hardReset) { + opChan[i].keyOn=false; } - opChan[i].keyOn=false; } } @@ -638,7 +645,9 @@ void DivPlatformGenesisExt::tick(bool sysTick) { (writeMask&0x40)?'3':'-', (writeMask&0x80)?'4':'-' );*/ + writeMask^=hardResetMask; immWrite(0x28,writeMask); + writeMask^=hardResetMask; // hard reset handling if (mustHardReset) { @@ -648,9 +657,11 @@ void DivPlatformGenesisExt::tick(bool sysTick) { for (int i=0; i<4; i++) { if (opChan[i].keyOn && opChan[i].hardReset) { // restore SL/RR + logV("eco: %d",extChanOffs); unsigned short baseAddr=chanOffs[extChanOffs]|opOffs[i]; DivInstrumentFM::Operator& op=chan[extChanOffs].state.op[i]; immWrite(baseAddr+ADDR_SL_RR,(op.rr&15)|(op.sl<<4)); + opChan[i].keyOn=false; } } immWrite(0x28,writeMask);