// to be called after changing sound rate or chips\r
void sound_rerate(int preserve_state)\r
{\r
- unsigned int state[28];\r
+ void *state = NULL;\r
int target_fps = Pico.m.pal ? 50 : 60;\r
\r
// not all rates are supported in MCD mode due to mp3 decoder limitations\r
}\r
\r
if (preserve_state) {\r
+ state = malloc(0x200);\r
+ if (state == NULL) return;\r
+ memcpy(state, YM2612GetRegs(), 0x200);\r
if ((PicoMCD & 1) && Pico_mcd->m.audio_track)\r
Pico_mcd->m.audio_offset = mp3_get_offset();\r
}\r
YM2612Init(Pico.m.pal ? OSC_PAL/7 : OSC_NTSC/7, PsndRate);\r
if (preserve_state) {\r
// feed it back it's own registers, just like after loading state\r
+ memcpy(YM2612GetRegs(), state, 0x200);\r
YM2612PicoStateLoad();\r
if ((PicoMCD & 1) && Pico_mcd->m.audio_track)\r
mp3_start_play(Pico_mcd->TOC.Tracks[Pico_mcd->m.audio_track].F, Pico_mcd->m.audio_offset);\r
SN76496_init(Pico.m.pal ? OSC_PAL/15 : OSC_NTSC/15, PsndRate);\r
if (preserve_state) memcpy(sn76496_regs, state, 28*4); // restore old state\r
\r
+ if (state)\r
+ free(state);\r
+\r
// calculate PsndLen\r
PsndLen=PsndRate / target_fps;\r
PsndLen_exc_add=((PsndRate - PsndLen*target_fps)<<16) / target_fps;\r
\r
static unsigned char DrZ80_in(unsigned short p)\r
{\r
+ elprintf(EL_ANOMALY, "Z80 port %04x read", p);\r
return 0xff;\r
}\r
\r
static void DrZ80_out(unsigned short p,unsigned char d)\r
{\r
+ elprintf(EL_ANOMALY, "Z80 port %04x write %02x", p, d);\r
}\r
\r
static void DrZ80_irq_callback()\r