From ec5aafb9adf03c5c4ae9d1ed1fc24bdef876536c Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 4 Mar 2025 12:19:46 -0500 Subject: [PATCH] PCE: PCM works CPU usage increases though when it's in use :< --- src/engine/platform/pce.cpp | 7 ++++--- src/engine/vgmOps.cpp | 3 ++- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 77dc22490..5dc68fd8a 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -82,8 +82,9 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) { for (int i=0; i<6; i++) { if (chan[i].pcm && chan[i].dacSample!=-1) { if (chan[i].dacRate<=0) continue; - remainTime=(rate-chan[i].dacPeriod)/chan[i].dacRate; + remainTime=(rate-chan[i].dacPeriod+chan[i].dacRate-1)/chan[i].dacRate; if (remainTimeUpdate(pos); /* for (int i=0; i<6; i++) { @@ -136,6 +136,7 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) { }*/ h+=advance; } + pce->Update(pos); for (int i=0; i<6; i++) { oscBuf[i]->end(len); @@ -261,7 +262,7 @@ void DivPlatformPCE::tick(bool sysTick) { off=parent->getCenterRate()/(double)s->centerRate; } } - chan[i].dacRate=((double)chipClock/2)/MAX(1,off*chan[i].freq); + chan[i].dacRate=(double)chipClock/(4*MAX(1,off*chan[i].freq)); if (dumpWrites) addWrite(0xffff0001+(i<<8),chan[i].dacRate); } if (chan[i].freq<1) chan[i].freq=1; diff --git a/src/engine/vgmOps.cpp b/src/engine/vgmOps.cpp index 1d21a8092..13fbd9b2c 100644 --- a/src/engine/vgmOps.cpp +++ b/src/engine/vgmOps.cpp @@ -1432,7 +1432,8 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p break; case DIV_SYSTEM_PCE: if (!hasPCE) { - hasPCE=disCont[i].dispatch->chipClock; + // the clock is halved in VGM... + hasPCE=disCont[i].dispatch->chipClock/2; CHIP_VOL(27,0.98); willExport[i]=true; writePCESamples=true;