diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index b2bfdf7c9..b6d5fc197 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -1934,6 +1934,7 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write switch (sys) { case DIV_SYSTEM_GENESIS: case DIV_SYSTEM_GENESIS_EXT: + case DIV_SYSTEM_YM2612: switch (write.addr>>8) { case 0: // port 0 w->writeC(0x52); @@ -1951,6 +1952,56 @@ void DivEngine::performVGMWrite(SafeWriter* w, DivSystem sys, DivRegWrite& write break; } break; + case DIV_SYSTEM_SMS: + w->writeC(0x50); + w->writeC(write.val); + break; + case DIV_SYSTEM_GB: + w->writeC(0xb3); + w->writeC((write.addr-16)&0xff); + w->writeC(write.val); + break; + case DIV_SYSTEM_PCE: + w->writeC(0xb9); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + case DIV_SYSTEM_NES: + w->writeC(0xb4); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + case DIV_SYSTEM_ARCADE: + case DIV_SYSTEM_YM2151: + w->writeC(0x54); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + case DIV_SYSTEM_YM2610: + switch (write.addr>>8) { + case 0: // port 0 + w->writeC(0x58); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + case 1: // port 1 + w->writeC(0x59); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + } + break; + case DIV_SYSTEM_AY8910: + case DIV_SYSTEM_AY8930: + w->writeC(0xa0); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; + case DIV_SYSTEM_SAA1099: + w->writeC(0xbd); + w->writeC(write.addr&0xff); + w->writeC(write.val); + break; default: logW("write not handled!\n"); break; @@ -1962,7 +2013,6 @@ SafeWriter* DivEngine::saveVGM() { setOrder(0); isBusy.lock(); // play the song ourselves - playSub(false); bool done=false; int hasSN=0; @@ -2232,12 +2282,13 @@ SafeWriter* DivEngine::saveVGM() { streamID++; break; default: - logE("what? trying to play sample on unsupported system\n"); + logW("what? trying to play sample on unsupported system\n"); break; } } // write song data + playSub(false); size_t tickCount=0; while (!done) { if (nextTick()) done=true; diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index e642a524e..04beb3c1f 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -3,6 +3,7 @@ #include #define rWrite(a,v) if (!skipRegisterWrites) {GB_apu_write(gb,a,v); if (dumpWrites) {addWrite(a,v);} } +#define immWrite(a,v) {GB_apu_write(gb,a,v); if (dumpWrites) {addWrite(a,v);} } #define FREQ_BASE 8015.85f @@ -296,7 +297,7 @@ void DivPlatformGB::forceIns() { for (int i=0; i<4; i++) { chan[i].insChanged=true; } - GB_apu_write(gb,0x25,procMute()); + immWrite(0x25,procMute()); updateWave(); } @@ -309,9 +310,11 @@ void DivPlatformGB::reset() { GB_apu_init(gb); GB_set_sample_rate(gb,rate); // enable all channels - GB_apu_write(gb,0x26,0x80); + immWrite(0x10,0); + immWrite(0x26,0x8f); lastPan=0xff; - GB_apu_write(gb,0x25,procMute()); + immWrite(0x25,procMute()); + immWrite(0x24,0x77); } bool DivPlatformGB::isStereo() {