PCE: PCM works

CPU usage increases though when it's in use :<
This commit is contained in:
tildearrow 2025-03-04 12:19:46 -05:00
parent 5d3a22a502
commit ec5aafb9ad
2 changed files with 6 additions and 4 deletions

View file

@ -82,8 +82,9 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) {
for (int i=0; i<6; i++) { for (int i=0; i<6; i++) {
if (chan[i].pcm && chan[i].dacSample!=-1) { if (chan[i].pcm && chan[i].dacSample!=-1) {
if (chan[i].dacRate<=0) continue; 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 (remainTime<advance) advance=remainTime; if (remainTime<advance) advance=remainTime;
if (remainTime<1) advance=1;
} }
} }
@ -128,7 +129,6 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) {
regPool[w.addr&0x0f]=w.val; regPool[w.addr&0x0f]=w.val;
writes.pop(); writes.pop();
} }
pce->Update(pos);
/* /*
for (int i=0; i<6; i++) { 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; h+=advance;
} }
pce->Update(pos);
for (int i=0; i<6; i++) { for (int i=0; i<6; i++) {
oscBuf[i]->end(len); oscBuf[i]->end(len);
@ -261,7 +262,7 @@ void DivPlatformPCE::tick(bool sysTick) {
off=parent->getCenterRate()/(double)s->centerRate; 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 (dumpWrites) addWrite(0xffff0001+(i<<8),chan[i].dacRate);
} }
if (chan[i].freq<1) chan[i].freq=1; if (chan[i].freq<1) chan[i].freq=1;

View file

@ -1432,7 +1432,8 @@ SafeWriter* DivEngine::saveVGM(bool* sysToExport, bool loop, int version, bool p
break; break;
case DIV_SYSTEM_PCE: case DIV_SYSTEM_PCE:
if (!hasPCE) { if (!hasPCE) {
hasPCE=disCont[i].dispatch->chipClock; // the clock is halved in VGM...
hasPCE=disCont[i].dispatch->chipClock/2;
CHIP_VOL(27,0.98); CHIP_VOL(27,0.98);
willExport[i]=true; willExport[i]=true;
writePCESamples=true; writePCESamples=true;