mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-23 04:55:13 +00:00
partially bring up sample map
This commit is contained in:
parent
07871eacc3
commit
0a0ddfa661
16 changed files with 19 additions and 18 deletions
|
@ -249,7 +249,7 @@ int DivPlatformAmiga::dispatch(DivCommand c) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
chan[c.chan].useWave=false;
|
chan[c.chan].useWave=false;
|
||||||
}
|
}
|
||||||
if (c.value!=DIV_NOTE_NULL) {
|
if (c.value!=DIV_NOTE_NULL) {
|
||||||
|
@ -319,7 +319,7 @@ int DivPlatformAmiga::dispatch(DivCommand c) {
|
||||||
break;
|
break;
|
||||||
case DIV_CMD_NOTE_PORTA: {
|
case DIV_CMD_NOTE_PORTA: {
|
||||||
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value2);
|
||||||
int destFreq=round(NOTE_PERIODIC_NOROUND(c.value2));
|
int destFreq=round(NOTE_PERIODIC_NOROUND(c.value2));
|
||||||
bool return2=false;
|
bool return2=false;
|
||||||
if (destFreq>chan[c.chan].baseFreq) {
|
if (destFreq>chan[c.chan].baseFreq) {
|
||||||
|
|
|
@ -547,7 +547,7 @@ int DivPlatformGenesis::dispatch(DivCommand c) {
|
||||||
if (c.chan==5 && dacMode) {
|
if (c.chan==5 && dacMode) {
|
||||||
if (skipRegisterWrites) break;
|
if (skipRegisterWrites) break;
|
||||||
if (ins->type==DIV_INS_AMIGA) { // Furnace mode
|
if (ins->type==DIV_INS_AMIGA) { // Furnace mode
|
||||||
dacSample=ins->amiga.initSample;
|
dacSample=ins->amiga.getSample(c.value);
|
||||||
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
||||||
dacSample=-1;
|
dacSample=-1;
|
||||||
if (dumpWrites) addWrite(0xffff0002,0);
|
if (dumpWrites) addWrite(0xffff0002,0);
|
||||||
|
|
|
@ -192,7 +192,7 @@ int DivPlatformMMC5::dispatch(DivCommand c) {
|
||||||
if (c.chan==2) { // PCM
|
if (c.chan==2) { // PCM
|
||||||
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_STD);
|
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_STD);
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
dacSample=ins->amiga.initSample;
|
dacSample=ins->amiga.getSample(c.value);
|
||||||
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
||||||
dacSample=-1;
|
dacSample=-1;
|
||||||
if (dumpWrites) addWrite(0xffff0002,0);
|
if (dumpWrites) addWrite(0xffff0002,0);
|
||||||
|
|
|
@ -381,7 +381,7 @@ int DivPlatformNES::dispatch(DivCommand c) {
|
||||||
if (c.chan==4) { // PCM
|
if (c.chan==4) { // PCM
|
||||||
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_STD);
|
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_STD);
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
dacSample=ins->amiga.initSample;
|
dacSample=ins->amiga.getSample(c.value);
|
||||||
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
||||||
dacSample=-1;
|
dacSample=-1;
|
||||||
if (dumpWrites && !dpcmMode) addWrite(0xffff0002,0);
|
if (dumpWrites && !dpcmMode) addWrite(0xffff0002,0);
|
||||||
|
|
|
@ -730,7 +730,7 @@ int DivPlatformOPL::dispatch(DivCommand c) {
|
||||||
chan[c.chan].outVol=chan[c.chan].vol;
|
chan[c.chan].outVol=chan[c.chan].vol;
|
||||||
immWrite(18,chan[c.chan].outVol);
|
immWrite(18,chan[c.chan].outVol);
|
||||||
}
|
}
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
||||||
DivSample* s=parent->getSample(chan[c.chan].sample);
|
DivSample* s=parent->getSample(chan[c.chan].sample);
|
||||||
immWrite(9,(s->offB>>2)&0xff);
|
immWrite(9,(s->offB>>2)&0xff);
|
||||||
|
|
|
@ -270,7 +270,7 @@ int DivPlatformPCE::dispatch(DivCommand c) {
|
||||||
if (chan[c.chan].pcm) {
|
if (chan[c.chan].pcm) {
|
||||||
if (skipRegisterWrites) break;
|
if (skipRegisterWrites) break;
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
chan[c.chan].dacSample=ins->amiga.initSample;
|
chan[c.chan].dacSample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) {
|
if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) {
|
||||||
chan[c.chan].dacSample=-1;
|
chan[c.chan].dacSample=-1;
|
||||||
if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0);
|
if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0);
|
||||||
|
|
|
@ -390,7 +390,7 @@ int DivPlatformQSound::dispatch(DivCommand c) {
|
||||||
switch (c.cmd) {
|
switch (c.cmd) {
|
||||||
case DIV_CMD_NOTE_ON: {
|
case DIV_CMD_NOTE_ON: {
|
||||||
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (c.value!=DIV_NOTE_NULL) {
|
if (c.value!=DIV_NOTE_NULL) {
|
||||||
chan[c.chan].baseFreq=QS_NOTE_FREQUENCY(c.value);
|
chan[c.chan].baseFreq=QS_NOTE_FREQUENCY(c.value);
|
||||||
}
|
}
|
||||||
|
|
|
@ -162,7 +162,7 @@ int DivPlatformSegaPCM::dispatch(DivCommand c) {
|
||||||
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
DivInstrument* ins=parent->getIns(chan[c.chan].ins,DIV_INS_AMIGA);
|
||||||
if (skipRegisterWrites) break;
|
if (skipRegisterWrites) break;
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
chan[c.chan].pcm.sample=ins->amiga.initSample;
|
chan[c.chan].pcm.sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].pcm.sample<0 || chan[c.chan].pcm.sample>=parent->song.sampleLen) {
|
if (chan[c.chan].pcm.sample<0 || chan[c.chan].pcm.sample>=parent->song.sampleLen) {
|
||||||
chan[c.chan].pcm.sample=-1;
|
chan[c.chan].pcm.sample=-1;
|
||||||
if (dumpWrites) {
|
if (dumpWrites) {
|
||||||
|
|
|
@ -186,7 +186,8 @@ void DivPlatformSoundUnit::tick(bool sysTick) {
|
||||||
chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE);
|
chan[i].freq=parent->calcFreq(chan[i].baseFreq,chan[i].pitch,false,2,chan[i].pitch2,chipClock,CHIP_FREQBASE);
|
||||||
if (chan[i].pcm) {
|
if (chan[i].pcm) {
|
||||||
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
|
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
|
||||||
DivSample* sample=parent->getSample(ins->amiga.initSample);
|
// TODO: sample map?
|
||||||
|
DivSample* sample=parent->getSample(ins->amiga.getSample(chan[i].note));
|
||||||
if (sample!=NULL) {
|
if (sample!=NULL) {
|
||||||
double off=0.25;
|
double off=0.25;
|
||||||
if (sample->centerRate<1) {
|
if (sample->centerRate<1) {
|
||||||
|
@ -204,7 +205,7 @@ void DivPlatformSoundUnit::tick(bool sysTick) {
|
||||||
if (chan[i].keyOn) {
|
if (chan[i].keyOn) {
|
||||||
if (chan[i].pcm) {
|
if (chan[i].pcm) {
|
||||||
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
|
DivInstrument* ins=parent->getIns(chan[i].ins,DIV_INS_SU);
|
||||||
DivSample* sample=parent->getSample(ins->amiga.initSample);
|
DivSample* sample=parent->getSample(ins->amiga.getSample(chan[i].note));
|
||||||
if (sample!=NULL) {
|
if (sample!=NULL) {
|
||||||
unsigned int sampleEnd=sample->offSU+sample->samples;
|
unsigned int sampleEnd=sample->offSU+sample->samples;
|
||||||
if (sampleEnd>=getSampleMemCapacity(0)) sampleEnd=getSampleMemCapacity(0)-1;
|
if (sampleEnd>=getSampleMemCapacity(0)) sampleEnd=getSampleMemCapacity(0)-1;
|
||||||
|
|
|
@ -263,7 +263,7 @@ int DivPlatformSwan::dispatch(DivCommand c) {
|
||||||
dacPos=0;
|
dacPos=0;
|
||||||
dacPeriod=0;
|
dacPeriod=0;
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
dacSample=ins->amiga.initSample;
|
dacSample=ins->amiga.getSample(c.value);
|
||||||
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
if (dacSample<0 || dacSample>=parent->song.sampleLen) {
|
||||||
dacSample=-1;
|
dacSample=-1;
|
||||||
if (dumpWrites) addWrite(0xffff0002,0);
|
if (dumpWrites) addWrite(0xffff0002,0);
|
||||||
|
|
|
@ -260,7 +260,7 @@ int DivPlatformVERA::dispatch(DivCommand c) {
|
||||||
if (c.chan<16) {
|
if (c.chan<16) {
|
||||||
rWriteLo(c.chan,2,chan[c.chan].vol);
|
rWriteLo(c.chan,2,chan[c.chan].vol);
|
||||||
} else {
|
} else {
|
||||||
chan[16].pcm.sample=parent->getIns(chan[16].ins,DIV_INS_VERA)->amiga.initSample;
|
chan[16].pcm.sample=parent->getIns(chan[16].ins,DIV_INS_VERA)->amiga.getSample(c.value);
|
||||||
if (chan[16].pcm.sample<0 || chan[16].pcm.sample>=parent->song.sampleLen) {
|
if (chan[16].pcm.sample<0 || chan[16].pcm.sample>=parent->song.sampleLen) {
|
||||||
chan[16].pcm.sample=-1;
|
chan[16].pcm.sample=-1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -243,7 +243,7 @@ int DivPlatformVRC6::dispatch(DivCommand c) {
|
||||||
if (chan[c.chan].pcm) {
|
if (chan[c.chan].pcm) {
|
||||||
if (skipRegisterWrites) break;
|
if (skipRegisterWrites) break;
|
||||||
if (ins->type==DIV_INS_AMIGA) {
|
if (ins->type==DIV_INS_AMIGA) {
|
||||||
chan[c.chan].dacSample=ins->amiga.initSample;
|
chan[c.chan].dacSample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) {
|
if (chan[c.chan].dacSample<0 || chan[c.chan].dacSample>=parent->song.sampleLen) {
|
||||||
chan[c.chan].dacSample=-1;
|
chan[c.chan].dacSample=-1;
|
||||||
if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0);
|
if (dumpWrites) addWrite(0xffff0002+(c.chan<<8),0);
|
||||||
|
|
|
@ -559,7 +559,7 @@ int DivPlatformX1_010::dispatch(DivCommand c) {
|
||||||
if (chan[c.chan].furnacePCM) {
|
if (chan[c.chan].furnacePCM) {
|
||||||
chan[c.chan].pcm=true;
|
chan[c.chan].pcm=true;
|
||||||
chan[c.chan].macroInit(ins);
|
chan[c.chan].macroInit(ins);
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
||||||
DivSample* s=parent->getSample(chan[c.chan].sample);
|
DivSample* s=parent->getSample(chan[c.chan].sample);
|
||||||
chWrite(c.chan,4,(s->offX1_010>>12)&0xff);
|
chWrite(c.chan,4,(s->offX1_010>>12)&0xff);
|
||||||
|
|
|
@ -754,7 +754,7 @@ int DivPlatformYM2608::dispatch(DivCommand c) {
|
||||||
chan[c.chan].outVol=chan[c.chan].vol;
|
chan[c.chan].outVol=chan[c.chan].vol;
|
||||||
immWrite(0x10b,chan[c.chan].outVol);
|
immWrite(0x10b,chan[c.chan].outVol);
|
||||||
}
|
}
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
||||||
DivSample* s=parent->getSample(chan[c.chan].sample);
|
DivSample* s=parent->getSample(chan[c.chan].sample);
|
||||||
immWrite(0x102,(s->offB>>5)&0xff);
|
immWrite(0x102,(s->offB>>5)&0xff);
|
||||||
|
|
|
@ -795,7 +795,7 @@ int DivPlatformYM2610::dispatch(DivCommand c) {
|
||||||
chan[c.chan].outVol=chan[c.chan].vol;
|
chan[c.chan].outVol=chan[c.chan].vol;
|
||||||
immWrite(0x1b,chan[c.chan].outVol);
|
immWrite(0x1b,chan[c.chan].outVol);
|
||||||
}
|
}
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
||||||
DivSample* s=parent->getSample(chan[c.chan].sample);
|
DivSample* s=parent->getSample(chan[c.chan].sample);
|
||||||
immWrite(0x12,(s->offB>>8)&0xff);
|
immWrite(0x12,(s->offB>>8)&0xff);
|
||||||
|
|
|
@ -773,7 +773,7 @@ int DivPlatformYM2610B::dispatch(DivCommand c) {
|
||||||
chan[c.chan].outVol=chan[c.chan].vol;
|
chan[c.chan].outVol=chan[c.chan].vol;
|
||||||
immWrite(0x1b,chan[c.chan].outVol);
|
immWrite(0x1b,chan[c.chan].outVol);
|
||||||
}
|
}
|
||||||
chan[c.chan].sample=ins->amiga.initSample;
|
chan[c.chan].sample=ins->amiga.getSample(c.value);
|
||||||
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
if (chan[c.chan].sample>=0 && chan[c.chan].sample<parent->song.sampleLen) {
|
||||||
DivSample* s=parent->getSample(chan[c.chan].sample);
|
DivSample* s=parent->getSample(chan[c.chan].sample);
|
||||||
immWrite(0x12,(s->offB>>8)&0xff);
|
immWrite(0x12,(s->offB>>8)&0xff);
|
||||||
|
|
Loading…
Reference in a new issue