even more fixes

This commit is contained in:
tildearrow 2022-08-23 02:31:39 -05:00
parent 226f43fea3
commit e158591ccb
4 changed files with 8 additions and 10 deletions

View file

@ -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;
} }
} }

View file

@ -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;
} }
} }

View file

@ -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) {

View file

@ -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;