Merge branch 'master' of github.com:tildearrow/furnace
This commit is contained in:
commit
4affc48ebd
|
@ -80,7 +80,8 @@ class DivPlatformAY8910: public DivDispatch {
|
||||||
nextPSGMode(PSGMode(1)),
|
nextPSGMode(PSGMode(1)),
|
||||||
dac(DAC()),
|
dac(DAC()),
|
||||||
autoEnvNum(0),
|
autoEnvNum(0),
|
||||||
autoEnvDen(0) {}
|
autoEnvDen(0),
|
||||||
|
konCycles(0) {}
|
||||||
};
|
};
|
||||||
Channel chan[3];
|
Channel chan[3];
|
||||||
bool isMuted[3];
|
bool isMuted[3];
|
||||||
|
|
|
@ -90,7 +90,8 @@ class DivPlatformAY8930: public DivDispatch {
|
||||||
dac(DAC()),
|
dac(DAC()),
|
||||||
autoEnvNum(0),
|
autoEnvNum(0),
|
||||||
autoEnvDen(0),
|
autoEnvDen(0),
|
||||||
duty(4) {}
|
duty(4),
|
||||||
|
konCycles(0) {}
|
||||||
};
|
};
|
||||||
Channel chan[3];
|
Channel chan[3];
|
||||||
bool isMuted[3];
|
bool isMuted[3];
|
||||||
|
|
|
@ -133,6 +133,7 @@ class DivPlatformOPN: public DivPlatformFMBase {
|
||||||
freqH(0),
|
freqH(0),
|
||||||
freqL(0),
|
freqL(0),
|
||||||
portaPauseFreq(0),
|
portaPauseFreq(0),
|
||||||
|
konCycles(0),
|
||||||
mask(true) {}
|
mask(true) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -355,53 +355,6 @@ void DivPlatformMSM6258::notifyInsChange(int ins) {
|
||||||
void DivPlatformMSM6258::notifyInsDeletion(void* ins) {
|
void DivPlatformMSM6258::notifyInsDeletion(void* ins) {
|
||||||
}
|
}
|
||||||
|
|
||||||
const void* DivPlatformMSM6258::getSampleMem(int index) {
|
|
||||||
return index == 0 ? adpcmMem : NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t DivPlatformMSM6258::getSampleMemCapacity(int index) {
|
|
||||||
return index == 0 ? 262144 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t DivPlatformMSM6258::getSampleMemUsage(int index) {
|
|
||||||
return index == 0 ? adpcmMemLen : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool DivPlatformMSM6258::isSampleLoaded(int index, int sample) {
|
|
||||||
if (index!=0) return false;
|
|
||||||
if (sample<0 || sample>255) return false;
|
|
||||||
return sampleLoaded[sample];
|
|
||||||
}
|
|
||||||
|
|
||||||
void DivPlatformMSM6258::renderSamples(int sysID) {
|
|
||||||
memset(adpcmMem,0,getSampleMemCapacity(0));
|
|
||||||
memset(sampleLoaded,0,256*sizeof(bool));
|
|
||||||
|
|
||||||
// sample data
|
|
||||||
size_t memPos=0;
|
|
||||||
int sampleCount=parent->song.sampleLen;
|
|
||||||
if (sampleCount>128) sampleCount=128;
|
|
||||||
for (int i=0; i<sampleCount; i++) {
|
|
||||||
DivSample* s=parent->song.sample[i];
|
|
||||||
if (!s->renderOn[0][sysID]) continue;
|
|
||||||
|
|
||||||
int paddedLen=s->lengthVOX;
|
|
||||||
if (memPos>=getSampleMemCapacity(0)) {
|
|
||||||
logW("out of ADPCM memory for sample %d!",i);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (memPos+paddedLen>=getSampleMemCapacity(0)) {
|
|
||||||
memcpy(adpcmMem+memPos,s->dataVOX,getSampleMemCapacity(0)-memPos);
|
|
||||||
logW("out of ADPCM memory for sample %d!",i);
|
|
||||||
} else {
|
|
||||||
memcpy(adpcmMem+memPos,s->dataVOX,paddedLen);
|
|
||||||
sampleLoaded[i]=true;
|
|
||||||
}
|
|
||||||
memPos+=paddedLen;
|
|
||||||
}
|
|
||||||
adpcmMemLen=memPos+256;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DivPlatformMSM6258::setFlags(const DivConfig& flags) {
|
void DivPlatformMSM6258::setFlags(const DivConfig& flags) {
|
||||||
switch (flags.getInt("clockSel",0)) {
|
switch (flags.getInt("clockSel",0)) {
|
||||||
case 3:
|
case 3:
|
||||||
|
@ -426,8 +379,6 @@ void DivPlatformMSM6258::setFlags(const DivConfig& flags) {
|
||||||
|
|
||||||
int DivPlatformMSM6258::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {
|
int DivPlatformMSM6258::init(DivEngine* p, int channels, int sugRate, const DivConfig& flags) {
|
||||||
parent=p;
|
parent=p;
|
||||||
adpcmMem=new unsigned char[getSampleMemCapacity(0)];
|
|
||||||
adpcmMemLen=0;
|
|
||||||
dumpWrites=false;
|
dumpWrites=false;
|
||||||
skipRegisterWrites=false;
|
skipRegisterWrites=false;
|
||||||
updateOsc=0;
|
updateOsc=0;
|
||||||
|
@ -447,7 +398,6 @@ void DivPlatformMSM6258::quit() {
|
||||||
delete oscBuf[i];
|
delete oscBuf[i];
|
||||||
}
|
}
|
||||||
delete msm;
|
delete msm;
|
||||||
delete[] adpcmMem;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DivPlatformMSM6258::~DivPlatformMSM6258() {
|
DivPlatformMSM6258::~DivPlatformMSM6258() {
|
||||||
|
|
|
@ -48,9 +48,6 @@ class DivPlatformMSM6258: public DivDispatch {
|
||||||
okim6258_device* msm;
|
okim6258_device* msm;
|
||||||
unsigned char lastBusy;
|
unsigned char lastBusy;
|
||||||
|
|
||||||
unsigned char* adpcmMem;
|
|
||||||
size_t adpcmMemLen;
|
|
||||||
bool sampleLoaded[256];
|
|
||||||
unsigned char sampleBank, msmPan, msmDivider, rateSel, msmClock, clockSel;
|
unsigned char sampleBank, msmPan, msmDivider, rateSel, msmClock, clockSel;
|
||||||
signed char msmDividerCount, msmClockCount;
|
signed char msmDividerCount, msmClockCount;
|
||||||
short msmOut;
|
short msmOut;
|
||||||
|
@ -80,11 +77,6 @@ class DivPlatformMSM6258: public DivDispatch {
|
||||||
void poke(std::vector<DivRegWrite>& wlist);
|
void poke(std::vector<DivRegWrite>& wlist);
|
||||||
void setFlags(const DivConfig& flags);
|
void setFlags(const DivConfig& flags);
|
||||||
const char** getRegisterSheet();
|
const char** getRegisterSheet();
|
||||||
const void* getSampleMem(int index);
|
|
||||||
size_t getSampleMemCapacity(int index);
|
|
||||||
size_t getSampleMemUsage(int index);
|
|
||||||
bool isSampleLoaded(int index, int sample);
|
|
||||||
void renderSamples(int chipID);
|
|
||||||
|
|
||||||
int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags);
|
int init(DivEngine* parent, int channels, int sugRate, const DivConfig& flags);
|
||||||
void quit();
|
void quit();
|
||||||
|
|
|
@ -35,6 +35,7 @@ class DivPlatformQSound: public DivDispatch {
|
||||||
SharedChannel<int>(255),
|
SharedChannel<int>(255),
|
||||||
resVol(4095),
|
resVol(4095),
|
||||||
sample(-1),
|
sample(-1),
|
||||||
|
wave(-1),
|
||||||
panning(0x10),
|
panning(0x10),
|
||||||
echo(0),
|
echo(0),
|
||||||
useWave(false),
|
useWave(false),
|
||||||
|
|
|
@ -35,6 +35,7 @@ class DivPlatformRF5C68: public DivDispatch {
|
||||||
SharedChannel<int>(255),
|
SharedChannel<int>(255),
|
||||||
audPos(0),
|
audPos(0),
|
||||||
sample(-1),
|
sample(-1),
|
||||||
|
wave(-1),
|
||||||
panning(255),
|
panning(255),
|
||||||
setPos(false),
|
setPos(false),
|
||||||
macroVolMul(64) {}
|
macroVolMul(64) {}
|
||||||
|
|
|
@ -35,6 +35,7 @@ class DivPlatformYMZ280B: public DivDispatch {
|
||||||
SharedChannel<int>(255),
|
SharedChannel<int>(255),
|
||||||
audPos(0),
|
audPos(0),
|
||||||
sample(-1),
|
sample(-1),
|
||||||
|
wave(-1),
|
||||||
panning(8),
|
panning(8),
|
||||||
setPos(false),
|
setPos(false),
|
||||||
isNewYMZ(false),
|
isNewYMZ(false),
|
||||||
|
|
Loading…
Reference in New Issue