diff --git a/src/engine/cmdStream.cpp b/src/engine/cmdStream.cpp index 9f6b75a37..475761608 100644 --- a/src/engine/cmdStream.cpp +++ b/src/engine/cmdStream.cpp @@ -169,7 +169,7 @@ bool DivCSPlayer::tick() { chan[i].volSpeedTarget=-1; break; case 0xc9: // porta - chan[i].portaTarget=(signed char)stream.readC(); + chan[i].portaTarget=(int)((unsigned char)stream.readC())-60; chan[i].portaSpeed=(unsigned char)stream.readC(); break; case 0xca: { // legato diff --git a/src/engine/cmdStreamOps.cpp b/src/engine/cmdStreamOps.cpp index c07315421..3c1439b15 100644 --- a/src/engine/cmdStreamOps.cpp +++ b/src/engine/cmdStreamOps.cpp @@ -378,10 +378,15 @@ void writeCommandValues(SafeWriter* w, const DivCommand& c, bool bigEndian) { w->writeC(c.value); break; case DIV_CMD_HINT_PANNING: - case DIV_CMD_HINT_PORTA: w->writeC(c.value); w->writeC(c.value2); break; + case DIV_CMD_HINT_PORTA: { + unsigned char val=CLAMP(c.value+60,0,255); + w->writeC(val); + w->writeC(c.value2); + break; + } case DIV_CMD_PRE_PORTA: w->writeC((c.value?0x80:0)|(c.value2?0x40:0)); break;