even more fixes
This commit is contained in:
parent
226f43fea3
commit
e158591ccb
|
@ -145,7 +145,9 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
||||||
ds.loopModality=0;
|
ds.loopModality=0;
|
||||||
ds.properNoiseLayout=false;
|
ds.properNoiseLayout=false;
|
||||||
ds.waveDutyIsVol=false;
|
ds.waveDutyIsVol=false;
|
||||||
ds.resetMacroOnPorta=true;
|
// TODO: WHAT?! geodude.dmf fails when this is true
|
||||||
|
// but isn't that how Defle behaves???
|
||||||
|
ds.resetMacroOnPorta=false;
|
||||||
ds.legacyVolumeSlides=true;
|
ds.legacyVolumeSlides=true;
|
||||||
ds.compatibleArpeggio=true;
|
ds.compatibleArpeggio=true;
|
||||||
ds.noteOffResetsSlides=true;
|
ds.noteOffResetsSlides=true;
|
||||||
|
@ -512,7 +514,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) {
|
||||||
for (int j=0; j<ins->std.arpMacro.len; j++) {
|
for (int j=0; j<ins->std.arpMacro.len; j++) {
|
||||||
ins->std.arpMacro.val[j]^=0x40000000;
|
ins->std.arpMacro.val[j]^=0x40000000;
|
||||||
}
|
}
|
||||||
if (ins->std.arpMacro.loop>=ins->std.arpMacro.len && ins->std.arpMacro.len<255) {
|
if (ins->std.arpMacro.loop==255 && ins->std.arpMacro.len<255) {
|
||||||
ins->std.arpMacro.val[ins->std.arpMacro.len++]=0;
|
ins->std.arpMacro.val[ins->std.arpMacro.len++]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1349,7 +1349,7 @@ DivDataErrors DivInstrument::readInsData(SafeReader& reader, short version) {
|
||||||
for (int i=0; i<std.arpMacro.len; i++) {
|
for (int i=0; i<std.arpMacro.len; i++) {
|
||||||
std.arpMacro.val[i]^=0x40000000;
|
std.arpMacro.val[i]^=0x40000000;
|
||||||
}
|
}
|
||||||
if ((std.arpMacro.loop>=std.arpMacro.len || std.arpMacro.rel>std.arpMacro.loop) && std.arpMacro.len<255) {
|
if ((std.arpMacro.loop>=std.arpMacro.len || (std.arpMacro.rel>std.arpMacro.loop && std.arpMacro.rel<std.arpMacro.len)) && std.arpMacro.len<255) {
|
||||||
std.arpMacro.val[std.arpMacro.len++]=0;
|
std.arpMacro.val[std.arpMacro.len++]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,12 +219,8 @@ void DivPlatformSMS::tick(bool sysTick) {
|
||||||
} else { // 3 fixed values
|
} else { // 3 fixed values
|
||||||
unsigned char value;
|
unsigned char value;
|
||||||
if (chan[3].std.arp.had) {
|
if (chan[3].std.arp.had) {
|
||||||
if (chan[3].std.arp.mode) {
|
value=parent->calcArp(chan[3].note,chan[3].std.arp.val)%12;
|
||||||
value=chan[3].std.arp.val%12;
|
} else { // pardon?
|
||||||
} else {
|
|
||||||
value=(chan[3].note+chan[3].std.arp.val)%12;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
value=chan[3].note%12;
|
value=chan[3].note%12;
|
||||||
}
|
}
|
||||||
if (value<3) {
|
if (value<3) {
|
||||||
|
|
|
@ -92,7 +92,7 @@ void DivPlatformTIA::tick(bool sysTick) {
|
||||||
if (!chan[i].inPorta) {
|
if (!chan[i].inPorta) {
|
||||||
if (chan[i].std.arp.val<0 && (!(chan[i].std.arp.val&0x40000000))) {
|
if (chan[i].std.arp.val<0 && (!(chan[i].std.arp.val&0x40000000))) {
|
||||||
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val|0x40000000);
|
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val|0x40000000);
|
||||||
} else if (chan[i].std.arp.val&0x40000000) {
|
} else if (chan[i].std.arp.val>=0 && chan[i].std.arp.val&0x40000000) {
|
||||||
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val&(~0x40000000));
|
chan[i].baseFreq=0x80000000|(chan[i].std.arp.val&(~0x40000000));
|
||||||
} else {
|
} else {
|
||||||
chan[i].baseFreq=(chan[i].note+chan[i].std.arp.val)<<8;
|
chan[i].baseFreq=(chan[i].note+chan[i].std.arp.val)<<8;
|
||||||
|
|
Loading…
Reference in a new issue