this might fix it
This commit is contained in:
parent
6493a0481c
commit
0e3dbdc1b2
|
@ -130,6 +130,9 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) {
|
||||||
int destFreq=NOTE_FNUM_BLOCK(c.value2,11);
|
int destFreq=NOTE_FNUM_BLOCK(c.value2,11);
|
||||||
int newFreq;
|
int newFreq;
|
||||||
bool return2=false;
|
bool return2=false;
|
||||||
|
if (opChan[ch].portaPause) {
|
||||||
|
opChan[ch].baseFreq=opChan[ch].portaPauseFreq;
|
||||||
|
}
|
||||||
if (destFreq>opChan[ch].baseFreq) {
|
if (destFreq>opChan[ch].baseFreq) {
|
||||||
newFreq=opChan[ch].baseFreq+c.value;
|
newFreq=opChan[ch].baseFreq+c.value;
|
||||||
if (newFreq>=destFreq) {
|
if (newFreq>=destFreq) {
|
||||||
|
@ -144,23 +147,20 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// what the heck!
|
// what the heck!
|
||||||
// TODO: rework!
|
|
||||||
if (!opChan[ch].portaPause) {
|
if (!opChan[ch].portaPause) {
|
||||||
if ((newFreq&0x7ff)>1288) {
|
if ((newFreq&0x7ff)>1288) {
|
||||||
newFreq=(644)|((newFreq+0x800)&0xf800);
|
opChan[ch].portaPauseFreq=(644)|((newFreq+0x800)&0xf800);
|
||||||
opChan[ch].portaPause=true;
|
opChan[ch].portaPause=true;
|
||||||
return2=false;
|
break;
|
||||||
} else if ((newFreq&0x7ff)<644) {
|
}
|
||||||
newFreq=(1287)|((newFreq-0x800)&0xf800);
|
if ((newFreq&0x7ff)<644) {
|
||||||
opChan[ch].portaPause=true;
|
opChan[ch].portaPauseFreq=newFreq=(1287)|((newFreq-0x800)&0xf800);
|
||||||
return2=false;
|
opChan[ch].portaPause=true;
|
||||||
} else {
|
break;
|
||||||
opChan[ch].freqChanged=true;
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
opChan[ch].portaPause=false;
|
|
||||||
opChan[ch].freqChanged=true;
|
|
||||||
}
|
}
|
||||||
|
opChan[ch].portaPause=false;
|
||||||
|
opChan[ch].freqChanged=true;
|
||||||
opChan[ch].baseFreq=newFreq;
|
opChan[ch].baseFreq=newFreq;
|
||||||
if (return2) return 2;
|
if (return2) return 2;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -25,13 +25,28 @@ class DivPlatformGenesisExt: public DivPlatformGenesis {
|
||||||
struct OpChannel {
|
struct OpChannel {
|
||||||
DivMacroInt std;
|
DivMacroInt std;
|
||||||
unsigned char freqH, freqL;
|
unsigned char freqH, freqL;
|
||||||
int freq, baseFreq, pitch;
|
int freq, baseFreq, pitch, portaPauseFreq;
|
||||||
unsigned char ins;
|
unsigned char ins;
|
||||||
signed char konCycles;
|
signed char konCycles;
|
||||||
bool active, insChanged, freqChanged, keyOn, keyOff, portaPause;
|
bool active, insChanged, freqChanged, keyOn, keyOff, portaPause;
|
||||||
int vol;
|
int vol;
|
||||||
unsigned char pan;
|
unsigned char pan;
|
||||||
OpChannel(): freqH(0), freqL(0), freq(0), baseFreq(0), pitch(0), ins(-1), active(false), insChanged(true), freqChanged(false), keyOn(false), keyOff(false), portaPause(false), vol(0), pan(3) {}
|
OpChannel():
|
||||||
|
freqH(0),
|
||||||
|
freqL(0),
|
||||||
|
freq(0),
|
||||||
|
baseFreq(0),
|
||||||
|
pitch(0),
|
||||||
|
portaPauseFreq(0),
|
||||||
|
ins(-1),
|
||||||
|
active(false),
|
||||||
|
insChanged(true),
|
||||||
|
freqChanged(false),
|
||||||
|
keyOn(false),
|
||||||
|
keyOff(false),
|
||||||
|
portaPause(false),
|
||||||
|
vol(0),
|
||||||
|
pan(3) {}
|
||||||
};
|
};
|
||||||
OpChannel opChan[4];
|
OpChannel opChan[4];
|
||||||
bool isOpMuted[4];
|
bool isOpMuted[4];
|
||||||
|
|
Loading…
Reference in a new issue