diff --git a/src/engine/fileOps.cpp b/src/engine/fileOps.cpp index aac777f3..d7605269 100644 --- a/src/engine/fileOps.cpp +++ b/src/engine/fileOps.cpp @@ -869,7 +869,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { sample->depth=DIV_SAMPLE_DEPTH_YMZ_ADPCM; } } - if (ds.version>=0x1a) { + if (ds.version>=0x1b) { // what the hell man... cutStart=reader.readI(); cutEnd=reader.readI(); @@ -903,7 +903,7 @@ bool DivEngine::loadDMF(unsigned char* file, size_t len) { reader.read(data,length*2); } - if (ds.version>0x1a) { + if (ds.version>0x1b) { if (cutStart!=0 || cutEnd!=length) { // cut data short* newData=new short[cutEnd-cutStart]; diff --git a/src/engine/platform/sound/su.cpp b/src/engine/platform/sound/su.cpp index 9033a0d7..d74377cd 100644 --- a/src/engine/platform/sound/su.cpp +++ b/src/engine/platform/sound/su.cpp @@ -39,13 +39,13 @@ void SoundUnit::NextSample(short* l, short* r) { // run channels for (int i=0; i<8; i++) { - if (chan[i].vol==0 && !chan[i].flags1.swvol) { + if (chan[i].vol==0 && !(chan[i].flags1&32)) { fns[i]=0; continue; } - if (chan[i].flags0.pcm) { + if (chan[i].flags0&8) { ns[i]=pcm[chan[i].pcmpos]; - } else switch (chan[i].flags0.shape) { + } else switch (chan[i].flags0&7) { case 0: ns[i]=(((cycle[i]>>15)&127)>chan[i].duty)*127; break; @@ -69,11 +69,13 @@ void SoundUnit::NextSample(short* l, short* r) { break; } - if (chan[i].flags0.ring) { + // ring mod + if (chan[i].flags0&16) { ns[i]=(ns[i]*ns[(i+1)&7])>>7; } - if (chan[i].flags0.pcm) { + // PCM + if (chan[i].flags0&8) { if (chan[i].freq>0x8000) { pcmdec[i]+=0x8000; } else { @@ -84,18 +86,18 @@ void SoundUnit::NextSample(short* l, short* r) { if (chan[i].pcmpos>4)&3) { case 0: cycle[i]+=chan[i].freq*1-(chan[i].freq>>3); @@ -114,7 +116,7 @@ void SoundUnit::NextSample(short* l, short* r) { cycle[i]+=chan[i].freq; } if ((cycle[i]&0xf80000)!=(ocycle[i]&0xf80000)) { - if (chan[i].flags0.shape==4) { + if ((chan[i].flags0&7)==4) { lfsr[i]=(lfsr[i]>>1|(((lfsr[i]) ^ (lfsr[i] >> 2) ^ (lfsr[i] >> 3) ^ (lfsr[i] >> 5) ) & 1)<<31); } else { switch ((chan[i].duty>>4)&3) { @@ -136,7 +138,7 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - if (chan[i].flags1.restim) { + if (chan[i].flags1&8) { if (--rcycle[i]<=0) { cycle[i]=0; rcycle[i]=chan[i].restimer; @@ -144,18 +146,18 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - fns[i]=ns[i]*chan[i].vol*(chan[i].flags0.pcm?4:2); - if (chan[i].flags0.fmode!=0) { + fns[i]=ns[i]*chan[i].vol*((chan[i].flags0&8)?4:2); + if ((chan[i].flags0&0xe0)!=0) { int ff=chan[i].cutoff; nslow[i]=nslow[i]+(((ff)*nsband[i])>>16); nshigh[i]=fns[i]-nslow[i]-(((256-chan[i].reson)*nsband[i])>>8); nsband[i]=(((ff)*nshigh[i])>>16)+nsband[i]; - fns[i]=(((chan[i].flags0.fmode&1)?(nslow[i]):(0))+((chan[i].flags0.fmode&2)?(nshigh[i]):(0))+((chan[i].flags0.fmode&4)?(nsband[i]):(0))); + fns[i]=(((chan[i].flags0&32)?(nslow[i]):(0))+((chan[i].flags0&64)?(nshigh[i]):(0))+((chan[i].flags0&128)?(nsband[i]):(0))); } nsL[i]=(fns[i]*SCpantabL[(unsigned char)chan[i].pan])>>8; nsR[i]=(fns[i]*SCpantabR[(unsigned char)chan[i].pan])>>8; oldfreq[i]=chan[i].freq; - if (chan[i].flags1.swvol) { + if (chan[i].flags1&32) { if (--swvolt[i]<=0) { swvolt[i]=chan[i].swvol.speed; if (chan[i].swvol.dir) { @@ -195,7 +197,7 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - if (chan[i].flags1.swfreq) { + if (chan[i].flags1&16) { if (--swfreqt[i]<=0) { swfreqt[i]=chan[i].swfreq.speed; if (chan[i].swfreq.dir) { @@ -219,7 +221,7 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - if (chan[i].flags1.swcut) { + if (chan[i].flags1&64) { if (--swcutt[i]<=0) { swcutt[i]=chan[i].swcut.speed; if (chan[i].swcut.dir) { @@ -243,11 +245,11 @@ void SoundUnit::NextSample(short* l, short* r) { } } } - if (chan[i].flags1.resosc) { + if (chan[i].flags1&1) { cycle[i]=0; rcycle[i]=chan[i].restimer; ocycle[i]=0; - chan[i].flags1.resosc=0; + chan[i].flags1&=~1; } if (muted[i]) { nsL[i]=0; diff --git a/src/engine/platform/sound/su.h b/src/engine/platform/sound/su.h index d8e0f270..502aabac 100644 --- a/src/engine/platform/sound/su.h +++ b/src/engine/platform/sound/su.h @@ -62,28 +62,8 @@ class SoundUnit { unsigned short freq; signed char vol; signed char pan; - union { - unsigned char val; - struct { - unsigned char shape: 3; - unsigned char pcm: 1; - unsigned char ring: 1; - unsigned char fmode: 3; - }; - } flags0; - union { - unsigned char val; - struct { - unsigned char resosc: 1; - unsigned char resfilt: 1; - unsigned char pcmloop: 1; - unsigned char restim: 1; - unsigned char swfreq: 1; - unsigned char swvol: 1; - unsigned char swcut: 1; - unsigned char padding: 1; - }; - } flags1; + unsigned char flags0; + unsigned char flags1; unsigned short cutoff; unsigned char duty; unsigned char reson;