diff --git a/src/engine/platform/genesis.cpp b/src/engine/platform/genesis.cpp index 80dac1d46..615747dc4 100644 --- a/src/engine/platform/genesis.cpp +++ b/src/engine/platform/genesis.cpp @@ -632,21 +632,26 @@ int DivPlatformGenesis::dispatch(DivCommand c) { } } // check for octave boundary + // what the heck! if (!chan[c.chan].portaPause) { + chan[c.chan].freqChanged=true; if ((newFreq&0x7ff)>1288) { - newFreq=((newFreq&0x7ff)>>1)|((newFreq+0x800)&0xf800); - /*chan[c.chan].portaPause=true; - break;*/ + newFreq=(644)|((newFreq+0x800)&0xf800); + chan[c.chan].portaPause=true; + chan[c.chan].freqChanged=false; + return2=false; } if ((newFreq&0x7ff)<644) { - newFreq=(newFreq&0x7ff)<<1|((newFreq-0x800)&0xf800); - /*chan[c.chan].portaPause=true; - break;*/ + newFreq=(1287)|((newFreq-0x800)&0xf800); + chan[c.chan].portaPause=true; + chan[c.chan].freqChanged=false; + return2=false; } + } else { + chan[c.chan].portaPause=false; + chan[c.chan].freqChanged=true; } chan[c.chan].baseFreq=newFreq; - chan[c.chan].portaPause=false; - chan[c.chan].freqChanged=true; if (return2) { chan[c.chan].inPorta=false; return 2; diff --git a/src/engine/platform/genesisext.cpp b/src/engine/platform/genesisext.cpp index db51f5ead..2f8fba8c1 100644 --- a/src/engine/platform/genesisext.cpp +++ b/src/engine/platform/genesisext.cpp @@ -143,29 +143,25 @@ int DivPlatformGenesisExt::dispatch(DivCommand c) { return2=true; } } + // what the heck! if (!opChan[ch].portaPause) { opChan[ch].freqChanged=true; if ((newFreq&0x7ff)>1288) { - newFreq=((newFreq&0x7ff)>>1)|((newFreq+0x800)&0xf800); + newFreq=(644)|((newFreq+0x800)&0xf800); opChan[ch].portaPause=true; opChan[ch].freqChanged=false; return2=false; - if (ch==3) printf("%d: upper bound\n",ch); - //break; } if ((newFreq&0x7ff)<644) { - newFreq=(newFreq&0x7ff)<<1|((newFreq-0x800)&0xf800); + newFreq=(1287)|((newFreq-0x800)&0xf800); opChan[ch].portaPause=true; opChan[ch].freqChanged=false; return2=false; - if (ch==3) printf("%d: lower bound\n",ch); - //break; } } else { opChan[ch].portaPause=false; opChan[ch].freqChanged=true; } - if (ch==3) printf("%d: writing %.4x to freq\n",ch,newFreq); opChan[ch].baseFreq=newFreq; if (return2) return 2; break;