diff --git a/src/engine/platform/ym2203.cpp b/src/engine/platform/ym2203.cpp index 562043820..1602c4485 100644 --- a/src/engine/platform/ym2203.cpp +++ b/src/engine/platform/ym2203.cpp @@ -279,7 +279,7 @@ void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) { ay->getRegisterWrites().clear(); os=0; - if (!writes.empty()) { + while (!writes.empty()) { if (--delay<1) { QueuedWrite& w=writes.front(); if (w.addr==0xfffffffe) { @@ -288,10 +288,11 @@ void DivPlatformYM2203::acquire_ymfm(short** buf, size_t len) { fm->write(0x0,w.addr); fm->write(0x1,w.val); regPool[w.addr&0xff]=w.val; - delay=6; + if (w.addr>15) delay=6; } writes.pop_front(); } + if (delay>0) break; } fm->generate(&fmout); diff --git a/src/engine/platform/ym2608.cpp b/src/engine/platform/ym2608.cpp index 87f2a604c..7a2d9b290 100644 --- a/src/engine/platform/ym2608.cpp +++ b/src/engine/platform/ym2608.cpp @@ -463,7 +463,7 @@ void DivPlatformYM2608::acquire_ymfm(short** buf, size_t len) { ay->getRegisterWrites().clear(); os[0]=0; os[1]=0; - if (!writes.empty()) { + while (!writes.empty()) { if (--delay<1) { QueuedWrite& w=writes.front(); if (w.addr==0xfffffffe) { @@ -472,10 +472,11 @@ void DivPlatformYM2608::acquire_ymfm(short** buf, size_t len) { fm->write(0x0+((w.addr>>8)<<1),w.addr); fm->write(0x1+((w.addr>>8)<<1),w.val); regPool[w.addr&0x1ff]=w.val; - delay=4; + if (w.addr>15) delay=4; } writes.pop_front(); } + if (delay>0) break; } fm->generate(&fmout);