diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index 3f773fe5..cb3056f3 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -2406,7 +2406,7 @@ void DivEngine::walkSong(int& loopOrder, int& loopRow, int& loopEnd) { } } -SafeWriter* DivEngine::saveVGM() { +SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop) { stop(); setOrder(0); isBusy.lock(); @@ -2509,6 +2509,9 @@ SafeWriter* DivEngine::saveVGM() { for (int i=0; igetRegisterWrites().clear(); + } + break; + } // stop all streams for (int i=0; iwriteC(0x94); @@ -3019,11 +3028,13 @@ SafeWriter* DivEngine::saveVGM() { w->seek(0x14,SEEK_SET); w->writeI(gd3Off-0x14); w->writeI(tickCount); - // loop not handled for now - printf("writing loop pos: %d\n",loopPos-0x1c); - printf("writing tick count: %d\n",(int)(tickCount-loopTick)); - w->writeI(loopPos-0x1c); - w->writeI(tickCount-loopTick-1); + if (loop) { + w->writeI(loopPos-0x1c); + w->writeI(tickCount-loopTick-1); + } else { + w->writeI(0); + w->writeI(0); + } remainingLoops=-1; playing=false; diff --git a/src/engine/engine.h b/src/engine/engine.h index 8f8eb84b..0bc35aeb 100644 --- a/src/engine/engine.h +++ b/src/engine/engine.h @@ -222,8 +222,8 @@ class DivEngine { // build a ROM file (TODO). // specify system to build ROM for. SafeWriter* buildROM(int sys); - // dump to VGM (TODO). - SafeWriter* saveVGM(); + // dump to VGM. + SafeWriter* saveVGM(bool* sysToExport=NULL, bool loop=true); // export to an audio file bool saveAudio(const char* path, int loops, DivAudioExportModes mode); // wait for audio export to finish diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 0f0fa301..d19c6747 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4628,7 +4628,7 @@ bool FurnaceGUI::loop() { modified=true; break; case GUI_FILE_EXPORT_VGM: { - SafeWriter* w=e->saveVGM(); + SafeWriter* w=e->saveVGM(willExport,vgmExportLoop); if (w!=NULL) { FILE* f=fopen(copyOfName.c_str(),"wb"); if (f!=NULL) {