diff --git a/src/engine/platform/gb.cpp b/src/engine/platform/gb.cpp index 942032e32..ea6ad7719 100644 --- a/src/engine/platform/gb.cpp +++ b/src/engine/platform/gb.cpp @@ -97,8 +97,12 @@ void DivPlatformGB::updateWave() { if (wt->max<1 || wt->len<1) { rWrite(0x30+i,0); } else { - unsigned char nibble1=15-((wt->data[(i*2)*wt->len/32]*15)/wt->max); - unsigned char nibble2=15-((wt->data[(1+i*2)*wt->len/32]*15)/wt->max); + int nibble1=15-((wt->data[(i*2)*wt->len/32]*15)/wt->max); + int nibble2=15-((wt->data[(1+i*2)*wt->len/32]*15)/wt->max); + if (nibble1<0) nibble1=0; + if (nibble1>15) nibble1=15; + if (nibble2<0) nibble2=0; + if (nibble2>15) nibble2=15; rWrite(0x30+i,(nibble1<<4)|nibble2); } } diff --git a/src/engine/platform/pce.cpp b/src/engine/platform/pce.cpp index 296eafc41..1af1741c5 100644 --- a/src/engine/platform/pce.cpp +++ b/src/engine/platform/pce.cpp @@ -138,7 +138,10 @@ void DivPlatformPCE::updateWave(int ch) { if (wt->max<1 || wt->len<1) { chWrite(ch,0x06,0); } else { - chWrite(ch,0x06,wt->data[i*wt->len/32]*31/wt->max); + int data=wt->data[i*wt->len/32]*31/wt->max; + if (data<0) data=0; + if (data>31) data=31; + chWrite(ch,0x06,data); } } if (chan[ch].active) { diff --git a/src/engine/platform/swan.cpp b/src/engine/platform/swan.cpp index 219871804..de6236478 100644 --- a/src/engine/platform/swan.cpp +++ b/src/engine/platform/swan.cpp @@ -119,8 +119,12 @@ void DivPlatformSwan::updateWave(int ch) { } } else { for (int i=0; i<16; i++) { - unsigned char nibble1=(wt->data[(i*2)*wt->len/32]*15)/wt->max; - unsigned char nibble2=(wt->data[(1+i*2)*wt->len/32]*15)/wt->max; + int nibble1=(wt->data[(i*2)*wt->len/32]*15)/wt->max; + int nibble2=(wt->data[(1+i*2)*wt->len/32]*15)/wt->max; + if (nibble1<0) nibble1=0; + if (nibble1>15) nibble1=15; + if (nibble2<0) nibble2=0; + if (nibble2>15) nibble2=15; rWrite(addr+i,nibble1|(nibble2<<4)); } } diff --git a/src/engine/platform/x1_010.cpp b/src/engine/platform/x1_010.cpp index 42853855a..1782deb9d 100644 --- a/src/engine/platform/x1_010.cpp +++ b/src/engine/platform/x1_010.cpp @@ -282,7 +282,10 @@ void DivPlatformX1_010::updateWave(int ch) { if (wt->max<1 || wt->len<1) { waveWrite(ch,i,0); } else { - waveWrite(ch,i,wt->data[i*wt->len/128]*255/wt->max); + int data=wt->data[i*wt->len/128]*255/wt->max; + if (data<0) data=0; + if (data>255) data=255; + waveWrite(ch,i,data); } } if (!chan[ch].pcm) {