// also clear the internal registers+addr line\r
ym2612_regs = YM2612GetRegs();\r
memset(ym2612_regs, 0, 0x200+4);\r
- // setting these to 0 might confuse timing code,\r
- // so better set to something like this instead\r
- z80startCycle = z80stopCycle = 0x01000000;\r
+ z80startCycle = z80stopCycle = 0;\r
\r
sound_rerate(0);\r
}\r
// 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
\r
// CD: CDDA audio\r
- if ((PicoMCD & 1) && (PicoOpt & 0x800))\r
+ // CD mode, cdda enabled, not data track, CDC is reading\r
+ if ((PicoMCD & 1) && (PicoOpt & 0x800) && !(Pico_mcd->s68k_regs[0x36] & 1) && (Pico_mcd->scd.Status_CDC & 1))\r
mp3_update(buf32, length, stereo);\r
\r
// convert + limit to normal 16bit output\r
#endif\r
}\r
\r
-#if defined(__DEBUG_PRINT) || defined(__GP2X__)\r
+#if defined(__DEBUG_PRINT) || defined(__GP2X__) || defined(__GIZ__)\r
PICO_INTERNAL void z80_debug(char *dstr)\r
{\r
#if defined(_USE_DRZ80)\r