X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2Fsound%2Fsound.c;h=aa2acb2e4c75e761d3a32a1bbc26a408ed0edb6d;hb=88b3d7c16ae976d332b8462de839b86f856a7180;hp=f43252ffd7757117a5c3ac02611f854ce4d124b2;hpb=d0ae0cb4bb73e6e2fc10e7b19a5a72a012db6d6a;p=picodrive.git diff --git a/Pico/sound/sound.c b/Pico/sound/sound.c index f43252f..aa2acb2 100644 --- a/Pico/sound/sound.c +++ b/Pico/sound/sound.c @@ -220,8 +220,14 @@ PICO_INTERNAL void PsndClear(void) { int len = PsndLen; if (PsndLen_exc_add) len++; - if (PicoOpt & 8) memset32((int *) PsndOut, 0, len); // clear both channels at once - else memset(PsndOut, 0, len<<1); + if (PicoOpt & 8) + memset32((int *) PsndOut, 0, len); // assume PsndOut to be aligned + else { + short *out = PsndOut; + if ((int)out & 2) { *out++ = 0; len--; } + memset32((int *) out, 0, len/2); + if (len & 1) out[len-1] = 0; + } } @@ -248,9 +254,9 @@ PICO_INTERNAL int PsndRender(int offset, int length) SN76496Update(PsndOut+offset, length, stereo); // Add in the stereo FM buffer - if (PicoOpt & 1) { + if (PicoOpt & 1) buf32_updated = YM2612UpdateOne(buf32, length, stereo, 1); - } else + else memset32(buf32, 0, length<