From 196256de6141bb07449957d87b5524e75b8f2ba0 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Wed, 9 Apr 2025 02:52:11 -0500 Subject: [PATCH] it plays again now how am I gonna optimize this... --- src/engine/cmdStreamOps.cpp | 43 ++++++++++++++++++++++++++++--------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index 94a01e7ba..fcc35c558 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -1077,9 +1077,9 @@ SafeWriter* DivEngine::saveCommand(DivCSProgress* progress, unsigned int disable // song beginning marker for (int i=0; iwriteC(0xf0); - chanStream[i]->writeC(0x00); - chanStream[i]->writeC(0x00); chanStream[i]->writeC(i); + chanStream[i]->writeC(0x00); + chanStream[i]->writeC(0x00); // padding chanStream[i]->writeC(0x00); chanStream[i]->writeC(0x00); @@ -1098,9 +1098,9 @@ SafeWriter* DivEngine::saveCommand(DivCSProgress* progress, unsigned int disable // loop marker for (int i=0; iwriteC(0xf0); - chanStream[i]->writeC(0x01); - chanStream[i]->writeC(0x00); chanStream[i]->writeC(i); + chanStream[i]->writeC(0x00); + chanStream[i]->writeC(0x01); // padding chanStream[i]->writeC(0x00); chanStream[i]->writeC(0x00); @@ -1347,9 +1347,9 @@ SafeWriter* DivEngine::saveCommand(DivCSProgress* progress, unsigned int disable // PASS 4: put all channels together for (int i=0; itell(); + chanStreamOff[i]=globalStream->tell(); logI("- %d: off %x size %ld",i,chanStreamOff[i],chanStream[i]->size()); - reloc8(chanStream[i]->getFinalBuf(),chanStream[i]->size(),0,w->tell()); + reloc8(chanStream[i]->getFinalBuf(),chanStream[i]->size(),0,globalStream->tell()); globalStream->write(chanStream[i]->getFinalBuf(),chanStream[i]->size()); chanStream[i]->finish(); delete chanStream[i]; @@ -1422,11 +1422,11 @@ SafeWriter* DivEngine::saveCommand(DivCSProgress* progress, unsigned int disable if (addr>8)&0xff; - //buf[j+3]=(addr>>16)&0xff; - //buf[j+4]=(addr>>24)&0xff; + buf[j+3]=(addr>>16)&0xff; + buf[j+4]=(addr>>24)&0xff; } else { logE("requested symbol %d is out of bounds!",addr); } @@ -1444,8 +1444,31 @@ SafeWriter* DivEngine::saveCommand(DivCSProgress* progress, unsigned int disable // PASS 7: pack stream globalStream=packStream(globalStream,sortedCmd); + // PASS 8: find new offsets + { + unsigned char* buf=globalStream->getFinalBuf(); + for (size_t i=0; isize();) { + int insLen=getInsLength(buf[i],_EXT(buf,i,globalStream->size()),sortedCmd); + if (insLen<1) { + logE("INS %x NOT IMPLEMENTED...",buf[i]); + break; + } + + if (buf[i]==0xf0) { + if (buf[i+3]==0) { + int ch=buf[i+1]; + if (ch>=0 && chtell(); + } + } + } + + i+=insLen; + } + } + // write results - // TODO: FUCK THIS + reloc(globalStream->getFinalBuf(),globalStream->size(),0,w->tell(),sortedCmd); w->write(globalStream->getFinalBuf(),globalStream->size()); w->seek(8,SEEK_SET);