From 8ff8ee89e9ecdf0fa2607b3054b5576fd41de718 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Fri, 8 Mar 2024 20:52:51 -0500 Subject: [PATCH] command stream player now loops --- src/engine/cmdStream.cpp | 10 +++++++--- src/gui/csPlayer.cpp | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 329f9a798..351aaecb9 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -79,6 +79,7 @@ bool DivCSPlayer::tick() { } unsigned char next=stream.readC(); unsigned char command=0; + bool mustTell=true; if (next<0xb3) { // note e->dispatchCmd(DivCommand(DIV_CMD_NOTE_ON,i,(int)next-60)); @@ -143,9 +144,11 @@ bool DivCSPlayer::tick() { break; } chan[i].readPos=chan[i].callStack[--chan[i].callStackPos]; + mustTell=false; break; case 0xfa: chan[i].readPos=stream.readI(); + mustTell=false; break; case 0xfb: logE("TODO: RATE"); @@ -161,8 +164,9 @@ bool DivCSPlayer::tick() { chan[i].waitTicks=1; break; case 0xff: - chan[i].readPos=0; - logI("%d: stop",i); + chan[i].readPos=chan[i].startPos; + mustTell=false; + logI("%d: stop go back to %x",i,chan[i].readPos); break; default: logE("%d: illegal instruction $%.2x! $%.x",i,next,chan[i].readPos); @@ -337,7 +341,7 @@ bool DivCSPlayer::tick() { } } - chan[i].readPos=stream.tell(); + if (mustTell) chan[i].readPos=stream.tell(); } if (sendVolume || chan[i].volSpeed!=0) { diff --git a/src/gui/csPlayer.cpp b/src/gui/csPlayer.cpp index cec9ec2c0..07d7d28d1 100644 --- a/src/gui/csPlayer.cpp +++ b/src/gui/csPlayer.cpp @@ -141,7 +141,7 @@ void FurnaceGUI::drawCSPlayer() { ImGui::TableNextColumn(); if (pos>=(int)bufSize) continue; if (pos==nextHighlight) { - ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_Header)); + ImGui::TableSetBgColor(ImGuiTableBgTarget_CellBg,ImGui::GetColorU32(ImGuiCol_HeaderActive)); highlightPos++; if (highlightPos>=(int)highlights.size()) { nextHighlight=-1;