diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 834f502e8..63e3db25e 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -313,6 +313,16 @@ void DivPlatformYM2203::acquire_lle(short** buf, size_t len) { fmOut[i]=0; } + // AY -> OPN + ay->runDAC(); + ay->runTFX(rate); + ay->flushWrites(); + for (DivRegWrite& i: ay->getRegisterWrites()) { + if (i.addr>15) continue; + immWrite(i.addr&15,i.val); + } + ay->getRegisterWrites().clear(); + while (true) { bool canWeWrite=fm_lle.prescaler_latch[1]&1; diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 825c3b5ac..29cf262ea 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -325,6 +325,7 @@ void DivPlatformYM2608::acquire_combo(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; @@ -440,6 +441,7 @@ void DivPlatformYM2608::acquire_ymfm(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; @@ -680,6 +682,10 @@ void DivPlatformYM2608::acquire_lle(short** buf, size_t len) { } } +void DivPlatformYM2608::fillStream(std::vector& stream, int sRate, size_t len) { + ay->fillStream(stream,sRate,len); +} + void DivPlatformYM2608::tick(bool sysTick) { // FM for (int i=0; i<6; i++) { diff --git a/src/engine/platform/ym2608.h b/src/engine/platform/ym2608.h index 2b92ae5e0..c4114e3d7 100644 --- a/src/engine/platform/ym2608.h +++ b/src/engine/platform/ym2608.h @@ -93,6 +93,7 @@ class DivPlatformYM2608: public DivPlatformOPN { public: void acquire(short** buf, size_t len); + void fillStream(std::vector& stream, int sRate, size_t len); int dispatch(DivCommand c); void* getChanState(int chan); DivMacroInt* getChanMacroInt(int ch); diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index d64b49569..ff1a7af46 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -260,6 +260,7 @@ void DivPlatformYM2610::acquire_combo(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; @@ -373,6 +374,7 @@ void DivPlatformYM2610::acquire_ymfm(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; diff --git a/src/engine/platform/ym2610b.cpp b/src/engine/platform/ym2610b.cpp index b5f555f58..51e0de088 100644 --- a/src/engine/platform/ym2610b.cpp +++ b/src/engine/platform/ym2610b.cpp @@ -324,6 +324,7 @@ void DivPlatformYM2610B::acquire_combo(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; @@ -439,6 +440,7 @@ void DivPlatformYM2610B::acquire_ymfm(short** buf, size_t len) { for (size_t h=0; h OPN ay->runDAC(); + ay->runTFX(rate); ay->flushWrites(); for (DivRegWrite& i: ay->getRegisterWrites()) { if (i.addr>15) continue; diff --git a/src/engine/platform/ym2610shared.h b/src/engine/platform/ym2610shared.h index 056639cda..08977d0d1 100644 --- a/src/engine/platform/ym2610shared.h +++ b/src/engine/platform/ym2610shared.h @@ -108,6 +108,10 @@ class DivPlatformYM2610Base: public DivPlatformOPN { } public: + void fillStream(std::vector& stream, int sRate, size_t len) { + ay->fillStream(stream,sRate,len); + } + void reset() { writeADPCMAOff=0; writeADPCMAOn=0;