new chan osc, part 4
adapt dispatch code to it
This commit is contained in:
parent
c0e4552c52
commit
a16d20e190
|
@ -54,6 +54,10 @@ const char** DivPlatformArcade::getRegisterSheet() {
|
||||||
void DivPlatformArcade::acquire_nuked(short** buf, size_t len) {
|
void DivPlatformArcade::acquire_nuked(short** buf, size_t len) {
|
||||||
thread_local int o[2];
|
thread_local int o[2];
|
||||||
|
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (delay>0) delay--;
|
if (delay>0) delay--;
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
|
@ -81,7 +85,7 @@ void DivPlatformArcade::acquire_nuked(short** buf, size_t len) {
|
||||||
|
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
int chOut=(int16_t)fm.ch_out[i];
|
int chOut=(int16_t)fm.ch_out[i];
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(chOut<<1,-32768,32767);
|
oscBuf[i]->putSample(h,CLAMP(chOut<<1,-32768,32767));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (o[0]<-32768) o[0]=-32768;
|
if (o[0]<-32768) o[0]=-32768;
|
||||||
|
@ -93,6 +97,10 @@ void DivPlatformArcade::acquire_nuked(short** buf, size_t len) {
|
||||||
buf[0][h]=o[0];
|
buf[0][h]=o[0];
|
||||||
buf[1][h]=o[1];
|
buf[1][h]=o[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
||||||
|
@ -100,6 +108,10 @@ void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
||||||
|
|
||||||
ymfm::ym2151::fm_engine* fme=fm_ymfm->debug_engine();
|
ymfm::ym2151::fm_engine* fme=fm_ymfm->debug_engine();
|
||||||
|
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
os[0]=0; os[1]=0;
|
os[0]=0; os[1]=0;
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
|
@ -121,7 +133,7 @@ void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
||||||
|
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
int chOut=fme->debug_channel(i)->debug_output(0)+fme->debug_channel(i)->debug_output(1);
|
int chOut=fme->debug_channel(i)->debug_output(0)+fme->debug_channel(i)->debug_output(1);
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(chOut,-32768,32767);
|
oscBuf[i]->putSample(h,CLAMP(chOut,-32768,32767));
|
||||||
}
|
}
|
||||||
|
|
||||||
os[0]=out_ymfm.data[0];
|
os[0]=out_ymfm.data[0];
|
||||||
|
@ -135,6 +147,10 @@ void DivPlatformArcade::acquire_ymfm(short** buf, size_t len) {
|
||||||
buf[0][h]=os[0];
|
buf[0][h]=os[0];
|
||||||
buf[1][h]=os[1];
|
buf[1][h]=os[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformArcade::acquire(short** buf, size_t len) {
|
void DivPlatformArcade::acquire(short** buf, size_t len) {
|
||||||
|
@ -964,7 +980,7 @@ void DivPlatformArcade::setFlags(const DivConfig& flags) {
|
||||||
|
|
||||||
rate=chipClock/64;
|
rate=chipClock/64;
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -257,6 +257,10 @@ void DivPlatformAY8910::acquire_mame(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
if (sunsoft) {
|
if (sunsoft) {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
runDAC();
|
runDAC();
|
||||||
|
@ -267,9 +271,9 @@ void DivPlatformAY8910::acquire_mame(short** buf, size_t len) {
|
||||||
buf[0][i]=ayBuf[0][0];
|
buf[0][i]=ayBuf[0][0];
|
||||||
buf[1][i]=buf[0][i];
|
buf[1][i]=buf[0][i];
|
||||||
|
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=CLAMP(sunsoftVolTable[31-(ay->lastIndx&31)]<<3,-32768,32767);
|
oscBuf[0]->putSample(i,CLAMP(sunsoftVolTable[31-(ay->lastIndx&31)]<<3,-32768,32767));
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=CLAMP(sunsoftVolTable[31-((ay->lastIndx>>5)&31)]<<3,-32768,32767);
|
oscBuf[1]->putSample(i,CLAMP(sunsoftVolTable[31-((ay->lastIndx>>5)&31)]<<3,-32768,32767));
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=CLAMP(sunsoftVolTable[31-((ay->lastIndx>>10)&31)]<<3,-32768,32767);
|
oscBuf[2]->putSample(i,CLAMP(sunsoftVolTable[31-((ay->lastIndx>>10)&31)]<<3,-32768,32767));
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
|
@ -286,14 +290,21 @@ void DivPlatformAY8910::acquire_mame(short** buf, size_t len) {
|
||||||
buf[1][i]=buf[0][i];
|
buf[1][i]=buf[0][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=ayBuf[0][0]<<2;
|
oscBuf[0]->putSample(i,ayBuf[0][0]<<2);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=ayBuf[1][0]<<2;
|
oscBuf[1]->putSample(i,ayBuf[1][0]<<2);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=ayBuf[2][0]<<2;
|
oscBuf[2]->putSample(i,ayBuf[2][0]<<2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformAY8910::acquire_atomic(short** buf, size_t len) {
|
void DivPlatformAY8910::acquire_atomic(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
runDAC();
|
runDAC();
|
||||||
runTFX();
|
runTFX();
|
||||||
|
@ -316,9 +327,12 @@ void DivPlatformAY8910::acquire_atomic(short** buf, size_t len) {
|
||||||
buf[1][i]=buf[0][i];
|
buf[1][i]=buf[0][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=ay_atomic.o_analog[0];
|
oscBuf[0]->putSample(i,ay_atomic.o_analog[0]);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=ay_atomic.o_analog[1];
|
oscBuf[1]->putSample(i,ay_atomic.o_analog[1]);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=ay_atomic.o_analog[2];
|
oscBuf[2]->putSample(i,ay_atomic.o_analog[2]);
|
||||||
|
}
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1154,7 +1168,7 @@ void DivPlatformAY8910::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
stereo=flags.getBool("stereo",false);
|
stereo=flags.getBool("stereo",false);
|
||||||
|
|
|
@ -173,6 +173,10 @@ void DivPlatformAY8930::acquire(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
runDAC();
|
runDAC();
|
||||||
checkWrites();
|
checkWrites();
|
||||||
|
@ -186,9 +190,13 @@ void DivPlatformAY8930::acquire(short** buf, size_t len) {
|
||||||
buf[1][i]=buf[0][i];
|
buf[1][i]=buf[0][i];
|
||||||
}
|
}
|
||||||
|
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=ayBuf[0][0]<<2;
|
oscBuf[0]->putSample(i,ayBuf[0][0]<<2);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=ayBuf[1][0]<<2;
|
oscBuf[1]->putSample(i,ayBuf[1][0]<<2);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=ayBuf[2][0]<<2;
|
oscBuf[2]->putSample(i,ayBuf[2][0]<<2);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<3; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -923,7 +931,7 @@ void DivPlatformAY8930::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/4;
|
rate=chipClock/4;
|
||||||
for (int i=0; i<3; i++) {
|
for (int i=0; i<3; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
|
|
||||||
stereo=flags.getBool("stereo",false);
|
stereo=flags.getBool("stereo",false);
|
||||||
|
|
|
@ -48,6 +48,9 @@ void DivPlatformBifurcator::acquire(short** buf, size_t len) {
|
||||||
chan[i].chVolL=regPool[i*8+6];
|
chan[i].chVolL=regPool[i*8+6];
|
||||||
chan[i].chVolR=regPool[i*8+7];
|
chan[i].chVolR=regPool[i*8+7];
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
int l=0;
|
int l=0;
|
||||||
int r=0;
|
int r=0;
|
||||||
|
@ -62,13 +65,16 @@ void DivPlatformBifurcator::acquire(short** buf, size_t len) {
|
||||||
int out=chan[i].curx-32768;
|
int out=chan[i].curx-32768;
|
||||||
int outL=out*chan[i].chVolL/256;
|
int outL=out*chan[i].chVolL/256;
|
||||||
int outR=out*chan[i].chVolR/256;
|
int outR=out*chan[i].chVolR/256;
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(short)((outL+outR)/2);
|
oscBuf[i]->putSample(h,(short)((outL+outR)/2));
|
||||||
l+=outL/4;
|
l+=outL/4;
|
||||||
r+=outR/4;
|
r+=outR/4;
|
||||||
}
|
}
|
||||||
buf[0][h]=(short)l;
|
buf[0][h]=(short)l;
|
||||||
buf[1][h]=(short)r;
|
buf[1][h]=(short)r;
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
regPool[i*8]=chan[i].curx&0xff;
|
regPool[i*8]=chan[i].curx&0xff;
|
||||||
regPool[i*8+1]=chan[i].curx>>8;
|
regPool[i*8+1]=chan[i].curx>>8;
|
||||||
|
@ -347,7 +353,7 @@ void DivPlatformBifurcator::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/16;
|
rate=chipClock/16;
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,9 @@ const char** DivPlatformBubSysWSG::getRegisterSheet() {
|
||||||
|
|
||||||
void DivPlatformBubSysWSG::acquire(short** buf, size_t len) {
|
void DivPlatformBubSysWSG::acquire(short** buf, size_t len) {
|
||||||
int chanOut=0;
|
int chanOut=0;
|
||||||
|
for (int i=0; i<2; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
signed int out=0;
|
signed int out=0;
|
||||||
// K005289 part
|
// K005289 part
|
||||||
|
@ -49,13 +52,13 @@ void DivPlatformBubSysWSG::acquire(short** buf, size_t len) {
|
||||||
// Wavetable part
|
// Wavetable part
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
if (isMuted[i]) {
|
if (isMuted[i]) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=0;
|
oscBuf[i]->putSample(h,0);
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
chanOut=chan[i].waveROM[k005289.addr(i)]*(regPool[2+i]&0xf);
|
chanOut=chan[i].waveROM[k005289.addr(i)]*(regPool[2+i]&0xf);
|
||||||
out+=chanOut;
|
out+=chanOut;
|
||||||
if (writeOscBuf==0) {
|
if (writeOscBuf==0) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=chanOut<<7;
|
oscBuf[i]->putSample(h,chanOut<<7);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,6 +73,9 @@ void DivPlatformBubSysWSG::acquire(short** buf, size_t len) {
|
||||||
//printf("out: %d\n",out);
|
//printf("out: %d\n",out);
|
||||||
buf[0][h]=out;
|
buf[0][h]=out;
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<2; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformBubSysWSG::updateWave(int ch) {
|
void DivPlatformBubSysWSG::updateWave(int ch) {
|
||||||
|
@ -334,7 +340,7 @@ void DivPlatformBubSysWSG::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/coreQuality;
|
rate=chipClock/coreQuality;
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
oscBuf[i]->rate=rate/8;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,6 +68,9 @@ const char** DivPlatformC140::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformC140::acquire_219(short** buf, size_t len) {
|
void DivPlatformC140::acquire_219(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<totalChans; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
|
@ -92,15 +95,21 @@ void DivPlatformC140::acquire_219(short** buf, size_t len) {
|
||||||
|
|
||||||
for (int i=0; i<totalChans; i++) {
|
for (int i=0; i<totalChans; i++) {
|
||||||
if (c219.voice[i].inv_lout) {
|
if (c219.voice[i].inv_lout) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(c219.voice[i].lout-c219.voice[i].rout)>>10;
|
oscBuf[i]->putSample(h,(c219.voice[i].lout-c219.voice[i].rout)>>10);
|
||||||
} else {
|
} else {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(c219.voice[i].lout+c219.voice[i].rout)>>10;
|
oscBuf[i]->putSample(h,(c219.voice[i].lout+c219.voice[i].rout)>>10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<totalChans; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformC140::acquire_140(short** buf, size_t len) {
|
void DivPlatformC140::acquire_140(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<totalChans; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
|
@ -124,9 +133,12 @@ void DivPlatformC140::acquire_140(short** buf, size_t len) {
|
||||||
buf[1][h]=c140.rout;
|
buf[1][h]=c140.rout;
|
||||||
|
|
||||||
for (int i=0; i<totalChans; i++) {
|
for (int i=0; i<totalChans; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(c140.voice[i].lout+c140.voice[i].rout)>>10;
|
oscBuf[i]->putSample(h,(c140.voice[i].lout+c140.voice[i].rout)>>10);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<totalChans; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformC140::acquire(short** buf, size_t len) {
|
void DivPlatformC140::acquire(short** buf, size_t len) {
|
||||||
|
@ -752,7 +764,7 @@ void DivPlatformC140::setFlags(const DivConfig& flags) {
|
||||||
c140_bank_type(&c140,bankType);
|
c140_bank_type(&c140,bankType);
|
||||||
}
|
}
|
||||||
for (int i=0; i<totalChans; i++) {
|
for (int i=0; i<totalChans; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -139,6 +139,9 @@ void DivPlatformC64::processDAC(int sRate) {
|
||||||
|
|
||||||
void DivPlatformC64::acquire(short** buf, size_t len) {
|
void DivPlatformC64::acquire(short** buf, size_t len) {
|
||||||
int dcOff=(sidCore)?0:sid->get_dc(0);
|
int dcOff=(sidCore)?0:sid->get_dc(0);
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
// run PCM
|
// run PCM
|
||||||
pcmCycle+=lineRate;
|
pcmCycle+=lineRate;
|
||||||
|
@ -165,32 +168,35 @@ void DivPlatformC64::acquire(short** buf, size_t len) {
|
||||||
buf[0][i]=32767*CLAMP(o,-1.0,1.0);
|
buf[0][i]=32767*CLAMP(o,-1.0,1.0);
|
||||||
if (++writeOscBuf>=4) {
|
if (++writeOscBuf>=4) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=sid_d->lastOut[0];
|
oscBuf[0]->putSample(i,sid_d->lastOut[0]);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=sid_d->lastOut[1];
|
oscBuf[1]->putSample(i,sid_d->lastOut[1]);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=sid_d->lastOut[2];
|
oscBuf[2]->putSample(i,sid_d->lastOut[2]);
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=chan[3].pcmOut<<11;
|
oscBuf[3]->putSample(i,chan[3].pcmOut<<11);
|
||||||
}
|
}
|
||||||
} else if (sidCore==1) {
|
} else if (sidCore==1) {
|
||||||
sid_fp->clock(4,&buf[0][i]);
|
sid_fp->clock(4,&buf[0][i]);
|
||||||
if (++writeOscBuf>=4) {
|
if (++writeOscBuf>=4) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=runFakeFilter(0,(sid_fp->lastChanOut[0]-dcOff)>>5);
|
oscBuf[0]->putSample(i,runFakeFilter(0,(sid_fp->lastChanOut[0]-dcOff)>>5));
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=runFakeFilter(1,(sid_fp->lastChanOut[1]-dcOff)>>5);
|
oscBuf[1]->putSample(i,runFakeFilter(1,(sid_fp->lastChanOut[1]-dcOff)>>5));
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=runFakeFilter(2,(sid_fp->lastChanOut[2]-dcOff)>>5);
|
oscBuf[2]->putSample(i,runFakeFilter(2,(sid_fp->lastChanOut[2]-dcOff)>>5));
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=chan[3].pcmOut<<11;
|
oscBuf[3]->putSample(i,chan[3].pcmOut<<11);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
sid->clock();
|
sid->clock();
|
||||||
buf[0][i]=sid->output();
|
buf[0][i]=sid->output();
|
||||||
if (++writeOscBuf>=16) {
|
if (++writeOscBuf>=16) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=runFakeFilter(0,(sid->last_chan_out[0]-dcOff)>>5);
|
oscBuf[0]->putSample(i,runFakeFilter(0,(sid->last_chan_out[0]-dcOff)>>5));
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=runFakeFilter(1,(sid->last_chan_out[1]-dcOff)>>5);
|
oscBuf[1]->putSample(i,runFakeFilter(1,(sid->last_chan_out[1]-dcOff)>>5));
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=runFakeFilter(2,(sid->last_chan_out[2]-dcOff)>>5);
|
oscBuf[2]->putSample(i,runFakeFilter(2,(sid->last_chan_out[2]-dcOff)>>5));
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=chan[3].pcmOut<<11;
|
oscBuf[3]->putSample(i,chan[3].pcmOut<<11);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformC64::updateFilter() {
|
void DivPlatformC64::updateFilter() {
|
||||||
|
@ -913,7 +919,7 @@ void DivPlatformC64::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock;
|
rate=chipClock;
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
oscBuf[i]->rate=rate/16;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
if (sidCore>0) {
|
if (sidCore>0) {
|
||||||
rate/=(sidCore==2)?coreQuality:4;
|
rate/=(sidCore==2)?coreQuality:4;
|
||||||
|
@ -930,15 +936,16 @@ void DivPlatformC64::setFlags(const DivConfig& flags) {
|
||||||
|
|
||||||
// init fake filter table
|
// init fake filter table
|
||||||
// taken from dSID
|
// taken from dSID
|
||||||
double cutRatio=-2.0*3.14*(sidIs6581?(((double)oscBuf[0]->rate/44100.0)*(20000.0/256.0)):(12500.0/256.0))/(double)oscBuf[0]->rate;
|
double oscBufRate=(double)rate/16.0;
|
||||||
|
double cutRatio=-2.0*3.14*(sidIs6581?((oscBufRate/44100.0)*(20000.0/256.0)):(12500.0/256.0))/oscBufRate;
|
||||||
|
|
||||||
for (int i=0; i<2048; i++) {
|
for (int i=0; i<2048; i++) {
|
||||||
double c=(double)i/8.0+0.2;
|
double c=(double)i/8.0+0.2;
|
||||||
if (sidIs6581) {
|
if (sidIs6581) {
|
||||||
if (c<24) {
|
if (c<24) {
|
||||||
c=2.0*sin(771.78/(double)oscBuf[0]->rate);
|
c=2.0*sin(771.78/oscBufRate);
|
||||||
} else {
|
} else {
|
||||||
c=(44100.0/(double)oscBuf[0]->rate)-1.263*(44100.0/(double)oscBuf[0]->rate)*exp(c*cutRatio);
|
c=(44100.0/oscBufRate)-1.263*(44100.0/oscBufRate)*exp(c*cutRatio);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
c=1-exp(c*cutRatio);
|
c=1-exp(c*cutRatio);
|
||||||
|
|
|
@ -64,6 +64,10 @@ const char** DivPlatformDave::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformDave::acquire(short** buf, size_t len) {
|
void DivPlatformDave::acquire(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<6; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
for (int i=4; i<6; i++) {
|
for (int i=4; i<6; i++) {
|
||||||
if (chan[i].dacSample!=-1) {
|
if (chan[i].dacSample!=-1) {
|
||||||
|
@ -107,38 +111,42 @@ void DivPlatformDave::acquire(short** buf, size_t len) {
|
||||||
unsigned short nextR=next>>16;
|
unsigned short nextR=next>>16;
|
||||||
|
|
||||||
if ((regPool[7]&0x18)==0x18) {
|
if ((regPool[7]&0x18)==0x18) {
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=0;
|
oscBuf[0]->putSample(h,0);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=0;
|
oscBuf[1]->putSample(h,0);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=0;
|
oscBuf[2]->putSample(h,0);
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=0;
|
oscBuf[3]->putSample(h,0);
|
||||||
oscBuf[4]->data[oscBuf[4]->needle++]=dave->chn0_left<<9;
|
oscBuf[4]->putSample(h,dave->chn0_left<<9);
|
||||||
oscBuf[5]->data[oscBuf[5]->needle++]=dave->chn0_right<<9;
|
oscBuf[5]->putSample(h,dave->chn0_right<<9);
|
||||||
} else if (regPool[7]&0x08) {
|
} else if (regPool[7]&0x08) {
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=dave->chn0_state?(dave->chn0_right<<8):0;
|
oscBuf[0]->putSample(h,dave->chn0_state?(dave->chn0_right<<8):0);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=dave->chn1_state?(dave->chn1_right<<8):0;
|
oscBuf[1]->putSample(h,dave->chn1_state?(dave->chn1_right<<8):0);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=dave->chn2_state?(dave->chn2_right<<8):0;
|
oscBuf[2]->putSample(h,dave->chn2_state?(dave->chn2_right<<8):0);
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=dave->chn3_state?(dave->chn3_right<<8):0;
|
oscBuf[3]->putSample(h,dave->chn3_state?(dave->chn3_right<<8):0);
|
||||||
oscBuf[4]->data[oscBuf[4]->needle++]=dave->chn0_left<<9;
|
oscBuf[4]->putSample(h,dave->chn0_left<<9);
|
||||||
oscBuf[5]->data[oscBuf[5]->needle++]=0;
|
oscBuf[5]->putSample(h,0);
|
||||||
} else if (regPool[7]&0x10) {
|
} else if (regPool[7]&0x10) {
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=dave->chn0_state?(dave->chn0_left<<8):0;
|
oscBuf[0]->putSample(h,dave->chn0_state?(dave->chn0_left<<8):0);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=dave->chn1_state?(dave->chn1_left<<8):0;
|
oscBuf[1]->putSample(h,dave->chn1_state?(dave->chn1_left<<8):0);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=dave->chn2_state?(dave->chn2_left<<8):0;
|
oscBuf[2]->putSample(h,dave->chn2_state?(dave->chn2_left<<8):0);
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=dave->chn3_state?(dave->chn3_left<<8):0;
|
oscBuf[3]->putSample(h,dave->chn3_state?(dave->chn3_left<<8):0);
|
||||||
oscBuf[4]->data[oscBuf[4]->needle++]=0;
|
oscBuf[4]->putSample(h,0);
|
||||||
oscBuf[5]->data[oscBuf[5]->needle++]=dave->chn0_right<<9;
|
oscBuf[5]->putSample(h,dave->chn0_right<<9);
|
||||||
} else {
|
} else {
|
||||||
oscBuf[0]->data[oscBuf[0]->needle++]=dave->chn0_state?((dave->chn0_left+dave->chn0_right)<<8):0;
|
oscBuf[0]->putSample(h,dave->chn0_state?((dave->chn0_left+dave->chn0_right)<<8):0);
|
||||||
oscBuf[1]->data[oscBuf[1]->needle++]=dave->chn1_state?((dave->chn1_left+dave->chn1_right)<<8):0;
|
oscBuf[1]->putSample(h,dave->chn1_state?((dave->chn1_left+dave->chn1_right)<<8):0);
|
||||||
oscBuf[2]->data[oscBuf[2]->needle++]=dave->chn2_state?((dave->chn2_left+dave->chn2_right)<<8):0;
|
oscBuf[2]->putSample(h,dave->chn2_state?((dave->chn2_left+dave->chn2_right)<<8):0);
|
||||||
oscBuf[3]->data[oscBuf[3]->needle++]=dave->chn3_state?((dave->chn3_left+dave->chn3_right)<<8):0;
|
oscBuf[3]->putSample(h,dave->chn3_state?((dave->chn3_left+dave->chn3_right)<<8):0);
|
||||||
oscBuf[4]->data[oscBuf[4]->needle++]=0;
|
oscBuf[4]->putSample(h,0);
|
||||||
oscBuf[5]->data[oscBuf[5]->needle++]=0;
|
oscBuf[5]->putSample(h,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[0][h]=(short)nextL;
|
buf[0][h]=(short)nextL;
|
||||||
buf[1][h]=(short)nextR;
|
buf[1][h]=(short)nextR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<6; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformDave::tick(bool sysTick) {
|
void DivPlatformDave::tick(bool sysTick) {
|
||||||
|
@ -596,7 +604,7 @@ void DivPlatformDave::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/16;
|
rate=chipClock/16;
|
||||||
for (int i=0; i<6; i++) {
|
for (int i=0; i<6; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -26,26 +26,32 @@
|
||||||
|
|
||||||
void DivPlatformDummy::acquire(short** buf, size_t len) {
|
void DivPlatformDummy::acquire(short** buf, size_t len) {
|
||||||
int chanOut;
|
int chanOut;
|
||||||
|
for (int i=0; i<chans; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
int out=0;
|
int out=0;
|
||||||
for (unsigned char j=0; j<chans; j++) {
|
for (unsigned char j=0; j<chans; j++) {
|
||||||
if (chan[j].active) {
|
if (chan[j].active) {
|
||||||
if (!isMuted[j]) {
|
if (!isMuted[j]) {
|
||||||
chanOut=(((signed short)chan[j].pos)*chan[j].amp*chan[j].vol)>>12;
|
chanOut=(((signed short)chan[j].pos)*chan[j].amp*chan[j].vol)>>12;
|
||||||
oscBuf[j]->data[oscBuf[j]->needle++]=chanOut<<1;
|
oscBuf[j]->putSample(i,chanOut<<1);
|
||||||
out+=chanOut;
|
out+=chanOut;
|
||||||
} else {
|
} else {
|
||||||
oscBuf[j]->data[oscBuf[j]->needle++]=0;
|
oscBuf[j]->putSample(i,0);
|
||||||
}
|
}
|
||||||
chan[j].pos+=chan[j].freq;
|
chan[j].pos+=chan[j].freq;
|
||||||
} else {
|
} else {
|
||||||
oscBuf[j]->data[oscBuf[j]->needle++]=0;
|
oscBuf[j]->putSample(i,0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (out<-32768) out=-32768;
|
if (out<-32768) out=-32768;
|
||||||
if (out>32767) out=32767;
|
if (out>32767) out=32767;
|
||||||
buf[0][i]=out;
|
buf[0][i]=out;
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<chans; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformDummy::muteChannel(int ch, bool mute) {
|
void DivPlatformDummy::muteChannel(int ch, bool mute) {
|
||||||
|
@ -150,7 +156,7 @@ int DivPlatformDummy::init(DivEngine* p, int channels, int sugRate, const DivCon
|
||||||
isMuted[i]=false;
|
isMuted[i]=false;
|
||||||
if (i<channels) {
|
if (i<channels) {
|
||||||
oscBuf[i]=new DivDispatchOscBuffer;
|
oscBuf[i]=new DivDispatchOscBuffer;
|
||||||
oscBuf[i]->rate=65536;
|
oscBuf[i]->setRate(65536);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
rate=65536;
|
rate=65536;
|
||||||
|
|
|
@ -111,6 +111,9 @@ const char** DivPlatformES5506::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformES5506::acquire(short** buf, size_t len) {
|
void DivPlatformES5506::acquire(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<chanMax; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
// convert 32 bit access to 8 bit host interface
|
// convert 32 bit access to 8 bit host interface
|
||||||
while (!hostIntf32.empty()) {
|
while (!hostIntf32.empty()) {
|
||||||
|
@ -166,9 +169,12 @@ void DivPlatformES5506::acquire(short** buf, size_t len) {
|
||||||
buf[(o<<1)|1][h]=es5506.rout(o);
|
buf[(o<<1)|1][h]=es5506.rout(o);
|
||||||
}
|
}
|
||||||
for (int i=chanMax; i>=0; i--) {
|
for (int i=chanMax; i>=0; i--) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(es5506.voice_lout(i)+es5506.voice_rout(i))>>5;
|
oscBuf[i]->putSample(h,(es5506.voice_lout(i)+es5506.voice_rout(i))>>5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<chanMax; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformES5506::e_pin(bool state) {
|
void DivPlatformES5506::e_pin(bool state) {
|
||||||
|
@ -1259,7 +1265,7 @@ void DivPlatformES5506::setFlags(const DivConfig& flags) {
|
||||||
|
|
||||||
rate=chipClock/(16*(initChanMax+1)); // 2 E clock tick (16 CLKIN tick) per voice / 4
|
rate=chipClock/(16*(initChanMax+1)); // 2 E clock tick (16 CLKIN tick) per voice / 4
|
||||||
for (int i=0; i<32; i++) {
|
for (int i=0; i<32; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,6 +40,9 @@
|
||||||
|
|
||||||
void DivPlatformESFM::acquire(short** buf, size_t len) {
|
void DivPlatformESFM::acquire(short** buf, size_t len) {
|
||||||
thread_local short o[2];
|
thread_local short o[2];
|
||||||
|
for (int i=0; i<18; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
QueuedWrite& w=writes.front();
|
QueuedWrite& w=writes.front();
|
||||||
|
@ -52,12 +55,15 @@ void DivPlatformESFM::acquire(short** buf, size_t len) {
|
||||||
|
|
||||||
ESFM_generate(&chip,o);
|
ESFM_generate(&chip,o);
|
||||||
for (int c=0; c<18; c++) {
|
for (int c=0; c<18; c++) {
|
||||||
oscBuf[c]->data[oscBuf[c]->needle++]=ESFM_get_channel_output_native(&chip,c);
|
oscBuf[c]->putSample(h,ESFM_get_channel_output_native(&chip,c));
|
||||||
}
|
}
|
||||||
|
|
||||||
buf[0][h]=o[0];
|
buf[0][h]=o[0];
|
||||||
buf[1][h]=o[1];
|
buf[1][h]=o[1];
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<18; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformESFM::tick(bool sysTick) {
|
void DivPlatformESFM::tick(bool sysTick) {
|
||||||
|
@ -1068,6 +1074,9 @@ void DivPlatformESFM::poke(std::vector<DivRegWrite>& wlist) {
|
||||||
void DivPlatformESFM::setFlags(const DivConfig& flags) {
|
void DivPlatformESFM::setFlags(const DivConfig& flags) {
|
||||||
chipClock=COLOR_NTSC*4.0;
|
chipClock=COLOR_NTSC*4.0;
|
||||||
rate=chipClock/288.0;
|
rate=chipClock/288.0;
|
||||||
|
for (int i=0; i<18; i++) {
|
||||||
|
oscBuf[i]->setRate(rate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformESFM::setFast(bool fast) {
|
void DivPlatformESFM::setFast(bool fast) {
|
||||||
|
|
|
@ -56,6 +56,7 @@ const char** DivPlatformFDS::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformFDS::acquire_puNES(short* buf, size_t len) {
|
void DivPlatformFDS::acquire_puNES(short* buf, size_t len) {
|
||||||
|
oscBuf->begin(len);
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
extcl_apu_tick_FDS(fds);
|
extcl_apu_tick_FDS(fds);
|
||||||
int sample=isMuted[0]?0:fds->snd.main.output;
|
int sample=isMuted[0]?0:fds->snd.main.output;
|
||||||
|
@ -64,13 +65,15 @@ void DivPlatformFDS::acquire_puNES(short* buf, size_t len) {
|
||||||
buf[i]=sample;
|
buf[i]=sample;
|
||||||
if (++writeOscBuf>=32) {
|
if (++writeOscBuf>=32) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf->data[oscBuf->needle++]=sample*3;
|
oscBuf->putSample(i,sample*3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
oscBuf->end(len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformFDS::acquire_NSFPlay(short* buf, size_t len) {
|
void DivPlatformFDS::acquire_NSFPlay(short* buf, size_t len) {
|
||||||
int out[2];
|
int out[2];
|
||||||
|
oscBuf->begin(len);
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
fds_NP->Tick(1);
|
fds_NP->Tick(1);
|
||||||
fds_NP->Render(out);
|
fds_NP->Render(out);
|
||||||
|
@ -80,9 +83,10 @@ void DivPlatformFDS::acquire_NSFPlay(short* buf, size_t len) {
|
||||||
buf[i]=sample;
|
buf[i]=sample;
|
||||||
if (++writeOscBuf>=32) {
|
if (++writeOscBuf>=32) {
|
||||||
writeOscBuf=0;
|
writeOscBuf=0;
|
||||||
oscBuf->data[oscBuf->needle++]=sample*3;
|
oscBuf->putSample(i,sample*3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
oscBuf->end(len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformFDS::doWrite(unsigned short addr, unsigned char data) {
|
void DivPlatformFDS::doWrite(unsigned short addr, unsigned char data) {
|
||||||
|
@ -486,7 +490,7 @@ void DivPlatformFDS::setFlags(const DivConfig& flags) {
|
||||||
}
|
}
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock;
|
rate=chipClock;
|
||||||
oscBuf->rate=rate/32;
|
oscBuf->setRate(rate);
|
||||||
if (useNP) {
|
if (useNP) {
|
||||||
fds_NP->SetClock(rate);
|
fds_NP->SetClock(rate);
|
||||||
fds_NP->SetRate(rate);
|
fds_NP->SetRate(rate);
|
||||||
|
|
|
@ -63,6 +63,9 @@ const char** DivPlatformGB::getRegisterSheet() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGB::acquire(short** buf, size_t len) {
|
void DivPlatformGB::acquire(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t i=0; i<len; i++) {
|
for (size_t i=0; i<len; i++) {
|
||||||
if (!writes.empty()) {
|
if (!writes.empty()) {
|
||||||
QueuedWrite& w=writes.front();
|
QueuedWrite& w=writes.front();
|
||||||
|
@ -74,10 +77,13 @@ void DivPlatformGB::acquire(short** buf, size_t len) {
|
||||||
buf[0][i]=gb->apu_output.final_sample.left;
|
buf[0][i]=gb->apu_output.final_sample.left;
|
||||||
buf[1][i]=gb->apu_output.final_sample.right;
|
buf[1][i]=gb->apu_output.final_sample.right;
|
||||||
|
|
||||||
for (int i=0; i<4; i++) {
|
for (int j=0; j<4; j++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(gb->apu_output.current_sample[i].left+gb->apu_output.current_sample[i].right)<<6;
|
oscBuf[j]->putSample(i,(gb->apu_output.current_sample[j].left+gb->apu_output.current_sample[j].right)<<6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<4; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGB::updateWave() {
|
void DivPlatformGB::updateWave() {
|
||||||
|
@ -724,7 +730,7 @@ void DivPlatformGB::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/coreQuality;
|
rate=chipClock/coreQuality;
|
||||||
for (int i=0; i<4; i++) {
|
for (int i=0; i<4; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,9 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) {
|
||||||
// HLE for now
|
// HLE for now
|
||||||
int outL[2]={0,0};
|
int outL[2]={0,0};
|
||||||
int outR[2]={0,0};
|
int outR[2]={0,0};
|
||||||
|
for (int i=0; i<2; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
// internal mixing is always 10-bit
|
// internal mixing is always 10-bit
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
|
@ -87,7 +90,7 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) {
|
||||||
outL[i]=(chan[i].pan&2)?out:0;
|
outL[i]=(chan[i].pan&2)?out:0;
|
||||||
outR[i]=(chan[i].pan&1)?out:0;
|
outR[i]=(chan[i].pan&1)?out:0;
|
||||||
}
|
}
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=(short)((outL[i]+outR[i])<<5);
|
oscBuf[i]->putSample(h,(short)((outL[i]+outR[i])<<5));
|
||||||
}
|
}
|
||||||
int l=outL[0]+outL[1];
|
int l=outL[0]+outL[1];
|
||||||
int r=outR[0]+outR[1];
|
int r=outR[0]+outR[1];
|
||||||
|
@ -100,6 +103,9 @@ void DivPlatformGBADMA::acquire(short** buf, size_t len) {
|
||||||
buf[0][h]=(short)l;
|
buf[0][h]=(short)l;
|
||||||
buf[1][h]=(short)r;
|
buf[1][h]=(short)r;
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<2; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformGBADMA::tick(bool sysTick) {
|
void DivPlatformGBADMA::tick(bool sysTick) {
|
||||||
|
@ -493,7 +499,7 @@ void DivPlatformGBADMA::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock>>outDepth;
|
rate=chipClock>>outDepth;
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,9 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) {
|
||||||
chState[i].volL=(short)chReg[14];
|
chState[i].volL=(short)chReg[14];
|
||||||
chState[i].volR=(short)chReg[15];
|
chState[i].volR=(short)chReg[15];
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<chanMax; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (sampTimer>=sampCycles) {
|
while (sampTimer>=sampCycles) {
|
||||||
// the driver generates 4 samples at a time and can be start-offset
|
// the driver generates 4 samples at a time and can be start-offset
|
||||||
|
@ -133,10 +136,10 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) {
|
||||||
buf[0][h]=sampL;
|
buf[0][h]=sampL;
|
||||||
buf[1][h]=sampR;
|
buf[1][h]=sampR;
|
||||||
for (int i=0; i<chanMax; i++) {
|
for (int i=0; i<chanMax; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=oscOut[i][sampPos];
|
oscBuf[i]->putSample(h,oscOut[i][sampPos]);
|
||||||
}
|
}
|
||||||
for (int i=chanMax; i<16; i++) {
|
for (int i=chanMax; i<16; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=0;
|
oscBuf[i]->putSample(h,0);
|
||||||
}
|
}
|
||||||
while (updTimer>=updCycles) {
|
while (updTimer>=updCycles) {
|
||||||
// flip buffer
|
// flip buffer
|
||||||
|
@ -197,6 +200,9 @@ void DivPlatformGBAMinMod::acquire(short** buf, size_t len) {
|
||||||
updTimer+=1<<dacDepth;
|
updTimer+=1<<dacDepth;
|
||||||
sampTimer+=1<<dacDepth;
|
sampTimer+=1<<dacDepth;
|
||||||
}
|
}
|
||||||
|
for (int i=0; i<chanMax; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
// write back changed cached channel registers
|
// write back changed cached channel registers
|
||||||
for (int i=0; i<chanMax; i++) {
|
for (int i=0; i<chanMax; i++) {
|
||||||
unsigned short* chReg=®Pool[i*16];
|
unsigned short* chReg=®Pool[i*16];
|
||||||
|
@ -728,7 +734,7 @@ void DivPlatformGBAMinMod::setFlags(const DivConfig& flags) {
|
||||||
chanMax=flags.getInt("channels",16);
|
chanMax=flags.getInt("channels",16);
|
||||||
rate=16777216>>dacDepth;
|
rate=16777216>>dacDepth;
|
||||||
for (int i=0; i<16; i++) {
|
for (int i=0; i<16; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
sampCycles=16777216/flags.getInt("sampRate",21845);
|
sampCycles=16777216/flags.getInt("sampRate",21845);
|
||||||
chipClock=16777216/sampCycles;
|
chipClock=16777216/sampCycles;
|
||||||
|
|
|
@ -1840,7 +1840,7 @@ void DivPlatformGenesis::setFlags(const DivConfig& flags) {
|
||||||
rate=chipClock/36;
|
rate=chipClock/36;
|
||||||
}
|
}
|
||||||
for (int i=0; i<10; i++) {
|
for (int i=0; i<10; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,10 @@ double DivPlatformSoundUnit::NOTE_SU(int ch, int note) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSoundUnit::acquire(short** buf, size_t len) {
|
void DivPlatformSoundUnit::acquire(short** buf, size_t len) {
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->begin(len);
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t h=0; h<len; h++) {
|
for (size_t h=0; h<len; h++) {
|
||||||
while (!writes.empty()) {
|
while (!writes.empty()) {
|
||||||
QueuedWrite w=writes.front();
|
QueuedWrite w=writes.front();
|
||||||
|
@ -49,9 +53,13 @@ void DivPlatformSoundUnit::acquire(short** buf, size_t len) {
|
||||||
}
|
}
|
||||||
su->NextSample(&buf[0][h],&buf[1][h]);
|
su->NextSample(&buf[0][h],&buf[1][h]);
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=su->GetSample(i);
|
oscBuf[i]->putSample(h,su->GetSample(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i=0; i<8; i++) {
|
||||||
|
oscBuf[i]->end(len);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformSoundUnit::writeControl(int ch) {
|
void DivPlatformSoundUnit::writeControl(int ch) {
|
||||||
|
@ -646,7 +654,7 @@ void DivPlatformSoundUnit::setFlags(const DivConfig& flags) {
|
||||||
CHECK_CUSTOM_CLOCK;
|
CHECK_CUSTOM_CLOCK;
|
||||||
rate=chipClock/4;
|
rate=chipClock/4;
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
oscBuf[i]->rate=rate;
|
oscBuf[i]->setRate(rate);
|
||||||
}
|
}
|
||||||
bool echoOn=flags.getBool("echo",false);
|
bool echoOn=flags.getBool("echo",false);
|
||||||
initIlCtrl=3|(echoOn?4:0);
|
initIlCtrl=3|(echoOn?4:0);
|
||||||
|
|
|
@ -704,8 +704,10 @@ void FurnaceGUI::drawChanOsc() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
/*
|
||||||
String dStr=fmt::sprintf("DS: %d P: %d\nMAX: %d\nPHASE %f",displaySize,precision,(short)((fft->needle+displaySize)-fft->relatedBuf->needle),fft->debugPhase);
|
String dStr=fmt::sprintf("DS: %d P: %d\nMAX: %d\nPHASE %f",displaySize,precision,(short)((fft->needle+displaySize)-fft->relatedBuf->needle),fft->debugPhase);
|
||||||
dl->AddText(inRect.Min,0xffffffff,dStr.c_str());
|
dl->AddText(inRect.Min,0xffffffff,dStr.c_str());
|
||||||
|
*/
|
||||||
if (displaySize<precision) {
|
if (displaySize<precision) {
|
||||||
float y=0;
|
float y=0;
|
||||||
for (int j=-2048; j<precision; j++) {
|
for (int j=-2048; j<precision; j++) {
|
||||||
|
|
Loading…
Reference in a new issue