diff --git a/src/engine/instrument.cpp b/src/engine/instrument.cpp index bdf02890..b22fdced 100644 --- a/src/engine/instrument.cpp +++ b/src/engine/instrument.cpp @@ -39,7 +39,7 @@ void DivInstrument::putInsData(SafeWriter* w) { w->writeC(fm.fb); w->writeC(fm.fms); w->writeC(fm.ams); - w->writeC(4); // operator count; always 4 + w->writeC(fm.ops); w->writeC(fm.opllPreset); w->writeC(0); // reserved w->writeC(0); diff --git a/src/engine/platform/opl.cpp b/src/engine/platform/opl.cpp index ec8f03b3..2c005ee9 100644 --- a/src/engine/platform/opl.cpp +++ b/src/engine/platform/opl.cpp @@ -25,7 +25,7 @@ #define rWrite(a,v) if (!skipRegisterWrites) {pendingWrites[a]=v;} #define immWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } -#define CHIP_FREQBASE 4720272 +#define CHIP_FREQBASE 9440540 // N = invalid #define N 255 @@ -193,7 +193,7 @@ void DivPlatformOPL::acquire_nuked(short* bufL, short* bufR, size_t start, size_ for (size_t h=start; hcalcFreq(chan[i].baseFreq,chan[i].pitch,false,octave(chan[i].baseFreq)); - if (chan[i].freq>262143) chan[i].freq=262143; + if (chan[i].freq>131071) chan[i].freq=131071; int freqt=toFreq(chan[i].freq); chan[i].freqH=freqt>>8; chan[i].freqL=freqt&0xff; @@ -851,10 +851,10 @@ void DivPlatformOPL::setFlags(unsigned int flags) { if (oplType==3) { chipClock=COLOR_NTSC*4.0; - rate=chipClock/36; + rate=chipClock/288; } else { chipClock=COLOR_NTSC; - rate=chipClock/9; + rate=chipClock/72; } }