From e6c52e34d1a70cee8f71f1767b70bffdedbc1b53 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 29 Aug 2023 03:19:26 -0500 Subject: [PATCH] C219: finish C219 sample format --- src/engine/platform/c140.cpp | 2 +- src/engine/sample.cpp | 22 +++++++++++++--------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/engine/platform/c140.cpp b/src/engine/platform/c140.cpp index 3718ad65c..873825648 100644 --- a/src/engine/platform/c140.cpp +++ b/src/engine/platform/c140.cpp @@ -209,7 +209,7 @@ void DivPlatformC140::tick(bool sysTick) { if (chan[i].freq<0) chan[i].freq=0; if (chan[i].freq>65535) chan[i].freq=65535; if (is219) { - ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x10:0)|((s->depth==DIV_SAMPLE_DEPTH_MULAW)?1:0)|(chan[i].invert?0x40:0)|(chan[i].surround?8:0)|(chan[i].noise?4:0); + ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x10:0)|((s->depth==DIV_SAMPLE_DEPTH_C219)?1:0)|(chan[i].invert?0x40:0)|(chan[i].surround?8:0)|(chan[i].noise?4:0); } else { ctrl|=(chan[i].active?0x80:0)|((s->isLoopable())?0x10:0)|((s->depth==DIV_SAMPLE_DEPTH_MULAW)?0x08:0); } diff --git a/src/engine/sample.cpp b/src/engine/sample.cpp index b3b9345ae..6764ac2c7 100644 --- a/src/engine/sample.cpp +++ b/src/engine/sample.cpp @@ -1328,16 +1328,20 @@ void DivSample::render(unsigned int formatMask) { for (unsigned int i=0; i0) { - if (s>17152) { // 100+ - x=((s-17152)>>9)+100; - } else { - int b=bsr(s)&15; - x=(s>>c219ShiftToVal[b])+c219HighBitPos[b]; - } - } else if (s<0) { + bool negate=s&0x8000; + if (negate) { + s^=0xffff; } - dataC219[i]=x; + if (s==0) { + x=0; + } else if (s>17152) { // 100+ + x=((s-17152)>>9)+100; + } else { + int b=bsr(s)-1; + x=((s-(c219Table[c219HighBitPos[b]]))>>c219ShiftToVal[b])+c219HighBitPos[b]; + } + if (x>127) x=127; + dataC219[i]=x|(negate?0x80:0); } } }