From dd9d220f330a1673c4eded5b1879381a058c38ff Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 28 Jan 2025 04:24:10 -0500 Subject: [PATCH] use state instead of accessing ins for block --- src/engine/dispatch.h | 2 +- src/engine/platform/esfm.cpp | 4 ++-- src/engine/platform/fmshared_OPN.h | 4 ++-- src/engine/platform/genesis.cpp | 10 +++++----- src/engine/platform/genesisext.cpp | 10 +++++----- src/engine/platform/opl.cpp | 4 ++-- src/engine/platform/opll.cpp | 4 ++-- src/engine/platform/ym2203.cpp | 12 ++++++------ src/engine/platform/ym2203ext.cpp | 10 +++++----- src/engine/platform/ym2608.cpp | 10 +++++----- src/engine/platform/ym2608ext.cpp | 10 +++++----- src/engine/platform/ym2610.cpp | 8 ++++---- src/engine/platform/ym2610b.cpp | 8 ++++---- src/engine/platform/ym2610bext.cpp | 10 +++++----- src/engine/platform/ym2610ext.cpp | 10 +++++----- src/engine/platform/ym2610shared.h | 2 +- 16 files changed, 59 insertions(+), 59 deletions(-) diff --git a/src/engine/dispatch.h b/src/engine/dispatch.h index 47fb7b45d..fe1ac421a 100644 --- a/src/engine/dispatch.h +++ b/src/engine/dispatch.h @@ -948,7 +948,7 @@ class DivDispatch { #define NOTE_FREQUENCY(x) parent->calcBaseFreq(chipClock,CHIP_FREQBASE,x,false) // this is a special case definition. only use it for f-num/block-based chips. -#define NOTE_FNUM_BLOCK(x,bits,ins) parent->calcBaseFreqFNumBlock(chipClock,CHIP_FREQBASE,x,bits,parent->getIns(ins)->fm.block) +#define NOTE_FNUM_BLOCK(x,bits,blk) parent->calcBaseFreqFNumBlock(chipClock,CHIP_FREQBASE,x,bits,blk) // this is for volume scaling calculation. #define VOL_SCALE_LINEAR(x,y,range) ((parent->song.ceilVolumeScaling)?((((x)*(y))+(range-1))/(range)):(((x)*(y))/(range))) diff --git a/src/engine/platform/esfm.cpp b/src/engine/platform/esfm.cpp index bcdb4df55..8b3d48b75 100644 --- a/src/engine/platform/esfm.cpp +++ b/src/engine/platform/esfm.cpp @@ -293,7 +293,7 @@ void DivPlatformESFM::tick(bool sysTick) { for (int i=0; i<18; i++) { if (chan[i].freqChanged) { int mul=2; - int fixedBlock=parent->getIns(chan[i].ins)->fm.block; + int fixedBlock=chan[i].state.fm.block; if (parent->song.linearPitch!=2) { mul=octave(chan[i].baseFreq,fixedBlock)*2; } @@ -527,7 +527,7 @@ int DivPlatformESFM::dispatch(DivCommand c) { int mul=1; int fixedBlock=0; if (parent->song.linearPitch!=2) { - fixedBlock=parent->getIns(chan[c.chan].ins)->fm.block; + fixedBlock=chan[c.chan].state.fm.block; mul=octave(chan[c.chan].baseFreq,fixedBlock); } if (destFreq>chan[c.chan].baseFreq) { diff --git a/src/engine/platform/fmshared_OPN.h b/src/engine/platform/fmshared_OPN.h index 64d121003..7f4a21c01 100644 --- a/src/engine/platform/fmshared_OPN.h +++ b/src/engine/platform/fmshared_OPN.h @@ -24,10 +24,10 @@ #include "../../../extern/opn/ym3438.h" #include "sound/ymfm/ymfm_opn.h" -#define PLEASE_HELP_ME(_targetChan) \ +#define PLEASE_HELP_ME(_targetChan,blk) \ int boundaryBottom=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,0,false); \ int boundaryTop=parent->calcBaseFreq(chipClock,CHIP_FREQBASE,12,false); \ - int destFreq=NOTE_FNUM_BLOCK(c.value2,11,_targetChan.ins); \ + int destFreq=NOTE_FNUM_BLOCK(c.value2,11,blk); \ int newFreq; \ bool return2=false; \ if (_targetChan.portaPause) { \ diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index ee246f50c..836cbea0c 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -657,7 +657,7 @@ void DivPlatformGenesis::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { - chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].ins); + chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].state.block); } chan[i].freqChanged=true; } @@ -838,7 +838,7 @@ void DivPlatformGenesis::tick(bool sysTick) { if (i==2 && extMode) continue; if (chan[i].freqChanged) { if (parent->song.linearPitch==2) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[i].state.block); } else { int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE,11); int block=(chan[i].baseFreq&0xf800)>>11; @@ -1084,7 +1084,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].portaPause=false; chan[c.chan].note=c.value; chan[c.chan].freqChanged=true; @@ -1235,7 +1235,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(chan[c.chan]); + PLEASE_HELP_ME(chan[c.chan],chan[c.chan].state.block); break; } case DIV_CMD_SAMPLE_MODE: { @@ -1274,7 +1274,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) { commitState(c.chan,ins); chan[c.chan].insChanged=false; } - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); } chan[c.chan].note=c.value; chan[c.chan].freqChanged=true; diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index fb63620e9..b8b5ac666 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -96,7 +96,7 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.alg); opChan[ch].portaPause=false; opChan[ch].note=c.value; opChan[ch].freqChanged=true; @@ -191,7 +191,7 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(opChan[ch]); + PLEASE_HELP_ME(opChan[ch],chan[extChanOffs].state.block); break; } case DIV_CMD_SAMPLE_MODE: { @@ -216,7 +216,7 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { commitStateExt(ch,ins); opChan[ch].insChanged=false; } - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.alg); opChan[ch].freqChanged=true; break; } @@ -517,7 +517,7 @@ void DivPlatformGenesisExt::tick(bool sysTick) { if (opChan[i].std.arp.had) { if (!opChan[i].inPorta) { - opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,opChan[i].ins); + opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,chan[extChanOffs].state.alg); } opChan[i].freqChanged=true; } @@ -638,7 +638,7 @@ void DivPlatformGenesisExt::tick(bool sysTick) { if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { - opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,2,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,2,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[extChanOffs].state.block); } else { int fNum=parent->calcFreq(opChan[i].baseFreq&0x7ff,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,2,opChan[i].pitch2); int block=(opChan[i].baseFreq&0xf800)>>11; diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index 56ae1f897..5894ee98c 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -1434,7 +1434,7 @@ void DivPlatformOPL::tick(bool sysTick) { } else { if (chan[i].freqChanged) { int mul=2; - int fixedBlock=parent->getIns(chan[i].ins)->fm.block; + int fixedBlock=chan[i].state.block; if (parent->song.linearPitch!=2) { mul=octave(chan[i].baseFreq,fixedBlock)*2; } @@ -2038,7 +2038,7 @@ int DivPlatformOPL::dispatch(DivCommand c) { int mul=1; int fixedBlock=0; if (parent->song.linearPitch!=2) { - fixedBlock=parent->getIns(chan[c.chan].ins)->fm.block; + fixedBlock=chan[c.chan].state.block; mul=octave(chan[c.chan].baseFreq,fixedBlock); } if (destFreq>chan[c.chan].baseFreq) { diff --git a/src/engine/platform/opll.cpp b/src/engine/platform/opll.cpp index b5dbce83a..179103916 100644 --- a/src/engine/platform/opll.cpp +++ b/src/engine/platform/opll.cpp @@ -296,7 +296,7 @@ void DivPlatformOPLL::tick(bool sysTick) { for (int i=0; i<11; i++) { if (chan[i].freqChanged) { int mul=2; - int fixedBlock=parent->getIns(chan[i].ins)->fm.block; + int fixedBlock=chan[i].state.block; if (parent->song.linearPitch!=2) { mul=octave(chan[i].baseFreq,fixedBlock)*2; } @@ -640,7 +640,7 @@ int DivPlatformOPLL::dispatch(DivCommand c) { int mul=1; int fixedBlock=0; if (parent->song.linearPitch!=2) { - fixedBlock=parent->getIns(chan[c.chan].ins)->fm.block; + fixedBlock=chan[c.chan].state.block; mul=octave(chan[c.chan].baseFreq,fixedBlock); } if (destFreq>chan[c.chan].baseFreq) { diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index fafbe036f..6ddfbfdf5 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -503,7 +503,7 @@ void DivPlatformYM2203::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { - chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].ins); + chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].state.block); } chan[i].freqChanged=true; } @@ -638,7 +638,7 @@ void DivPlatformYM2203::tick(bool sysTick) { if (i==2 && extMode) continue; if (chan[i].freqChanged) { if (parent->song.linearPitch==2) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[i].state.block); } else { int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2); int block=(chan[i].baseFreq&0xf800)>>11; @@ -760,7 +760,7 @@ int DivPlatformYM2203::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].portaPause=false; chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -844,7 +844,7 @@ int DivPlatformYM2203::dispatch(DivCommand c) { break; } if (c.chan>(psgChanOffs-1) || parent->song.linearPitch==2) { // PSG - int destFreq=NOTE_FNUM_BLOCK(c.value2,11,chan[c.chan].ins); + int destFreq=NOTE_FNUM_BLOCK(c.value2,11,chan[c.chan].state.block); bool return2=false; if (destFreq>chan[c.chan].baseFreq) { chan[c.chan].baseFreq+=c.value; @@ -866,7 +866,7 @@ int DivPlatformYM2203::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(chan[c.chan]); + PLEASE_HELP_ME(chan[c.chan],chan[c.chan].state.block); break; } case DIV_CMD_LEGATO: { @@ -878,7 +878,7 @@ int DivPlatformYM2203::dispatch(DivCommand c) { commitState(c.chan,ins); chan[c.chan].insChanged=false; } - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].freqChanged=true; break; } diff --git a/src/engine/platform/ym2203ext.cpp b/src/engine/platform/ym2203ext.cpp index c954c93e5..c4b392880 100644 --- a/src/engine/platform/ym2203ext.cpp +++ b/src/engine/platform/ym2203ext.cpp @@ -89,7 +89,7 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].portaPause=false; opChan[ch].note=c.value; opChan[ch].freqChanged=true; @@ -168,7 +168,7 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(opChan[ch]); + PLEASE_HELP_ME(opChan[ch],chan[extChanOffs].state.block); break; } case DIV_CMD_LEGATO: { @@ -177,7 +177,7 @@ int DivPlatformYM2203Ext::dispatch(DivCommand c) { commitStateExt(ch,ins); opChan[ch].insChanged=false; } - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].freqChanged=true; break; } @@ -444,7 +444,7 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { if (opChan[i].std.arp.had) { if (!opChan[i].inPorta) { - opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,opChan[i].ins); + opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,chan[extChanOffs].state.block); } opChan[i].freqChanged=true; } @@ -543,7 +543,7 @@ void DivPlatformYM2203Ext::tick(bool sysTick) { if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { - opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[extChanOffs].state.block); } else { int fNum=parent->calcFreq(opChan[i].baseFreq&0x7ff,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2); int block=(opChan[i].baseFreq&0xf800)>>11; diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index fb8ff1a73..784bc7fb3 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -284,7 +284,7 @@ double DivPlatformYM2608::NOTE_OPNB(int ch, int note) { return NOTE_PERIODIC(note); } // FM - return NOTE_FNUM_BLOCK(note,11,chan[ch].ins); + return NOTE_FNUM_BLOCK(note,11,chan[ch].state.block); } double DivPlatformYM2608::NOTE_ADPCMB(int note) { @@ -719,7 +719,7 @@ void DivPlatformYM2608::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { - chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].ins); + chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].state.block); } chan[i].freqChanged=true; } @@ -871,7 +871,7 @@ void DivPlatformYM2608::tick(bool sysTick) { if (i==2 && extMode) continue; if (chan[i].freqChanged) { if (parent->song.linearPitch==2) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[i].state.block); } else { int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2); int block=(chan[i].baseFreq&0xf800)>>11; @@ -1233,7 +1233,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].portaPause=false; chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -1372,7 +1372,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(chan[c.chan]); + PLEASE_HELP_ME(chan[c.chan],chan[c.chan].state.block); break; } case DIV_CMD_SAMPLE_BANK: diff --git a/src/engine/platform/ym2608ext.cpp b/src/engine/platform/ym2608ext.cpp index 28fe75cdd..8a8784af8 100644 --- a/src/engine/platform/ym2608ext.cpp +++ b/src/engine/platform/ym2608ext.cpp @@ -93,7 +93,7 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].portaPause=false; opChan[ch].note=c.value; opChan[ch].freqChanged=true; @@ -188,7 +188,7 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(opChan[ch]); + PLEASE_HELP_ME(opChan[ch],chan[extChanOffs].state.block); break; } case DIV_CMD_LEGATO: { @@ -197,7 +197,7 @@ int DivPlatformYM2608Ext::dispatch(DivCommand c) { commitStateExt(ch,ins); opChan[ch].insChanged=false; } - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].freqChanged=true; break; } @@ -472,7 +472,7 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { if (opChan[i].std.arp.had) { if (!opChan[i].inPorta) { - opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,opChan[i].ins); + opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,chan[extChanOffs].state.block); } opChan[i].freqChanged=true; } @@ -594,7 +594,7 @@ void DivPlatformYM2608Ext::tick(bool sysTick) { if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { - opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[extChanOffs].state.block); } else { int fNum=parent->calcFreq(opChan[i].baseFreq&0x7ff,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2); int block=(opChan[i].baseFreq&0xf800)>>11; diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 1533eb995..3c1d39700 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -647,7 +647,7 @@ void DivPlatformYM2610::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { - chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].ins); + chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].state.block); } chan[i].freqChanged=true; } @@ -799,7 +799,7 @@ void DivPlatformYM2610::tick(bool sysTick) { if (i==1 && extMode) continue; if (chan[i].freqChanged) { if (parent->song.linearPitch==2) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[i].state.block); } else { int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11); int block=(chan[i].baseFreq&0xf800)>>11; @@ -1200,7 +1200,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].portaPause=false; chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -1339,7 +1339,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(chan[c.chan]); + PLEASE_HELP_ME(chan[c.chan],chan[c.chan].state.block); break; } case DIV_CMD_SAMPLE_BANK: diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index 20a4f973d..026ad1f3f 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -715,7 +715,7 @@ void DivPlatformYM2610B::tick(bool sysTick) { chan[i].handleArp(); } else if (chan[i].std.arp.had) { if (!chan[i].inPorta) { - chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].ins); + chan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(chan[i].note,chan[i].std.arp.val),11,chan[i].state.block); } chan[i].freqChanged=true; } @@ -867,7 +867,7 @@ void DivPlatformYM2610B::tick(bool sysTick) { if (i==2 && extMode) continue; if (chan[i].freqChanged) { if (parent->song.linearPitch==2) { - chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[i].state.block); } else { int fNum=parent->calcFreq(chan[i].baseFreq&0x7ff,chan[i].pitch,chan[i].fixedArp?chan[i].baseNoteOverride:chan[i].arpOff,chan[i].fixedArp,false,4,chan[i].pitch2); int block=(chan[i].baseFreq&0xf800)>>11; @@ -1268,7 +1268,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { chan[c.chan].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].ins); + chan[c.chan].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[c.chan].state.block); chan[c.chan].portaPause=false; chan[c.chan].freqChanged=true; chan[c.chan].note=c.value; @@ -1407,7 +1407,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(chan[c.chan]); + PLEASE_HELP_ME(chan[c.chan],chan[c.chan].state.block); break; } case DIV_CMD_SAMPLE_BANK: diff --git a/src/engine/platform/ym2610bext.cpp b/src/engine/platform/ym2610bext.cpp index 8f35fe183..4988e1b6c 100644 --- a/src/engine/platform/ym2610bext.cpp +++ b/src/engine/platform/ym2610bext.cpp @@ -89,7 +89,7 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].portaPause=false; opChan[ch].note=c.value; opChan[ch].freqChanged=true; @@ -184,7 +184,7 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(opChan[ch]); + PLEASE_HELP_ME(opChan[ch],chan[extChanOffs].state.block); break; } case DIV_CMD_LEGATO: { @@ -193,7 +193,7 @@ int DivPlatformYM2610BExt::dispatch(DivCommand c) { commitStateExt(ch,ins); opChan[ch].insChanged=false; } - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].freqChanged=true; break; } @@ -465,7 +465,7 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { if (opChan[i].std.arp.had) { if (!opChan[i].inPorta) { - opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,opChan[i].ins); + opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,chan[extChanOffs].state.block); } opChan[i].freqChanged=true; } @@ -586,7 +586,7 @@ void DivPlatformYM2610BExt::tick(bool sysTick) { if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { - opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[extChanOffs].state.block); } else { int fNum=parent->calcFreq(opChan[i].baseFreq&0x7ff,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2); int block=(opChan[i].baseFreq&0xf800)>>11; diff --git a/src/engine/platform/ym2610ext.cpp b/src/engine/platform/ym2610ext.cpp index df329738f..a3b2455bc 100644 --- a/src/engine/platform/ym2610ext.cpp +++ b/src/engine/platform/ym2610ext.cpp @@ -89,7 +89,7 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { opChan[ch].insChanged=false; if (c.value!=DIV_NOTE_NULL) { - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].portaPause=false; opChan[ch].note=c.value; opChan[ch].freqChanged=true; @@ -184,7 +184,7 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { } break; } - PLEASE_HELP_ME(opChan[ch]); + PLEASE_HELP_ME(opChan[ch],chan[extChanOffs].state.block); break; } case DIV_CMD_LEGATO: { @@ -193,7 +193,7 @@ int DivPlatformYM2610Ext::dispatch(DivCommand c) { commitStateExt(ch,ins); opChan[ch].insChanged=false; } - opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,opChan[ch].ins); + opChan[ch].baseFreq=NOTE_FNUM_BLOCK(c.value,11,chan[extChanOffs].state.block); opChan[ch].freqChanged=true; break; } @@ -465,7 +465,7 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { if (opChan[i].std.arp.had) { if (!opChan[i].inPorta) { - opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,opChan[i].ins); + opChan[i].baseFreq=NOTE_FNUM_BLOCK(parent->calcArp(opChan[i].note,opChan[i].std.arp.val),11,chan[extChanOffs].state.block); } opChan[i].freqChanged=true; } @@ -586,7 +586,7 @@ void DivPlatformYM2610Ext::tick(bool sysTick) { if (extMode) for (int i=0; i<4; i++) { if (opChan[i].freqChanged) { if (parent->song.linearPitch==2) { - opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,parent->getIns(chan[i].ins)->fm.block); + opChan[i].freq=parent->calcFreq(opChan[i].baseFreq,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2,chipClock,CHIP_FREQBASE,11,chan[extChanOffs].state.block); } else { int fNum=parent->calcFreq(opChan[i].baseFreq&0x7ff,opChan[i].pitch,opChan[i].fixedArp?opChan[i].baseNoteOverride:opChan[i].arpOff,opChan[i].fixedArp,false,4,opChan[i].pitch2); int block=(opChan[i].baseFreq&0xf800)>>11; diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 03caf68f4..d5e12df10 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -97,7 +97,7 @@ class DivPlatformYM2610Base: public DivPlatformOPN { return NOTE_PERIODIC(note); } // FM - return NOTE_FNUM_BLOCK(note,11,chan[ch].ins); + return NOTE_FNUM_BLOCK(note,11,chan[ch].state.block); } double NOTE_ADPCMB(int note) { if (chan[adpcmBChanOffs].sample>=0 && chan[adpcmBChanOffs].samplesong.sampleLen) {