PCE: PCM might work again
This commit is contained in:
parent
f0a3e3f590
commit
5d3a22a502
|
@ -66,12 +66,31 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) {
|
||||||
pce->bb[1]=bb[1];
|
pce->bb[1]=bb[1];
|
||||||
|
|
||||||
size_t pos=off;
|
size_t pos=off;
|
||||||
for (size_t h=0; h<len; h++) {
|
pce->ResetTS(pos);
|
||||||
// PCM part
|
|
||||||
/*
|
while (!writes.empty()) {
|
||||||
|
QueuedWrite w=writes.front();
|
||||||
|
pce->Write(pos,w.addr,w.val);
|
||||||
|
regPool[w.addr&0x0f]=w.val;
|
||||||
|
writes.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t h=0; h<len;) {
|
||||||
|
int advance=len-h;
|
||||||
|
// heuristic
|
||||||
|
int remainTime=9;
|
||||||
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) {
|
||||||
chan[i].dacPeriod+=chan[i].dacRate;
|
if (chan[i].dacRate<=0) continue;
|
||||||
|
remainTime=(rate-chan[i].dacPeriod)/chan[i].dacRate;
|
||||||
|
if (remainTime<advance) advance=remainTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// PCM part
|
||||||
|
for (int i=0; i<6; i++) {
|
||||||
|
if (chan[i].pcm && chan[i].dacSample!=-1) {
|
||||||
|
chan[i].dacPeriod+=chan[i].dacRate*advance;
|
||||||
if (chan[i].dacPeriod>rate) {
|
if (chan[i].dacPeriod>rate) {
|
||||||
DivSample* s=parent->getSample(chan[i].dacSample);
|
DivSample* s=parent->getSample(chan[i].dacSample);
|
||||||
if (s->samples<=0 || chan[i].dacPos>=s->samples) {
|
if (s->samples<=0 || chan[i].dacPos>=s->samples) {
|
||||||
|
@ -97,25 +116,25 @@ void DivPlatformPCE::acquireDirect(blip_buffer_t** bb, size_t off, size_t len) {
|
||||||
chan[i].dacPeriod-=rate;
|
chan[i].dacPeriod-=rate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}*/
|
}
|
||||||
|
|
||||||
// PCE part
|
// PCE part
|
||||||
// WHAT?????????
|
// WHAT?????????
|
||||||
pce->ResetTS(pos);
|
pos+=advance;
|
||||||
|
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
pce->Write(pos,w.addr,w.val);
|
pce->Write(pos,w.addr,w.val);
|
||||||
regPool[w.addr&0x0f]=w.val;
|
regPool[w.addr&0x0f]=w.val;
|
||||||
writes.pop();
|
writes.pop();
|
||||||
}
|
}
|
||||||
pce->Update(len+pos);
|
pce->Update(pos);
|
||||||
break;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
oscBuf[i]->putSample(h,CLAMP(pce->channel[i].blip_prev_samp[0]+pce->channel[i].blip_prev_samp[1],-32768,32767));
|
oscBuf[i]->putSample(h,CLAMP(pce->channel[i].blip_prev_samp[0]+pce->channel[i].blip_prev_samp[1],-32768,32767));
|
||||||
}*/
|
}*/
|
||||||
pos++;
|
h+=advance;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
|
|
Loading…
Reference in a new issue