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++) {
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 (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;
writes.pop();
}
pce->Update(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;

View file

@ -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;