X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2Fsound%2Fsound.c;h=68106bc3ba17a30aaedf309606300c3fe9d3e413;hb=b5e5172d049a83251874fb33e65a53c9654dc0bc;hp=5f9836b87203cfb44748395f5f4e1cac7ac22bc5;hpb=9d917eea21607c7c239d4b0cd850d660c0c8e4c5;p=picodrive.git diff --git a/Pico/sound/sound.c b/Pico/sound/sound.c index 5f9836b..68106bc 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; + } } @@ -448,7 +454,8 @@ PICO_INTERNAL void z80_pack(unsigned char *data) memcpy(data+4, &drZ80, 0x54); #elif defined(_USE_CZ80) *(int *)data = 0x00007a43; // "Cz" - memcpy(data+4, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80); + *(int *)(data+4) = Cz80_Get_Reg(&CZ80, CZ80_PC); + memcpy(data+8, &CZ80, (INT32)&CZ80.BasePC - (INT32)&CZ80); #endif } @@ -476,9 +483,10 @@ PICO_INTERNAL void z80_unpack(unsigned char *data) z80_int(); // try to goto int handler, maybe we won't execute trash there? } #elif defined(_USE_CZ80) - if (*(int *)data == 0x00007a43) // "Cz" save? - memcpy(&CZ80, data+4, (INT32)&CZ80.BasePC - (INT32)&CZ80); - else { + if (*(int *)data == 0x00007a43) { // "Cz" save? + memcpy(&CZ80, data+8, (INT32)&CZ80.BasePC - (INT32)&CZ80); + Cz80_Set_Reg(&CZ80, CZ80_PC, *(int *)(data+4)); + } else { z80_reset(); z80_int(); }