diff --git a/source/cd_hw/cd_cart.c b/source/cd_hw/cd_cart.c index 828cb1f..068dfea 100644 --- a/source/cd_hw/cd_cart.c +++ b/source/cd_hw/cd_cart.c @@ -249,10 +249,10 @@ void cd_cart_init(void) m68k.memory_map[i].base = scd.cartridge.area + ((i & 0x3f) << 16); m68k.memory_map[i].read8 = NULL; m68k.memory_map[i].read16 = NULL; - m68k.memory_map[i].write8 = NULL; - m68k.memory_map[i].write16 = NULL; + m68k.memory_map[i].write8 = m68k_unused_8_w; + m68k.memory_map[i].write16 = m68k_unused_16_w; zbank_memory_map[i].read = NULL; - zbank_memory_map[i].write = NULL; + zbank_memory_map[i].write = zbank_unused_w; } } } diff --git a/source/cd_hw/cdd.c b/source/cd_hw/cdd.c index a9c02c3..8e61ca9 100644 --- a/source/cd_hw/cdd.c +++ b/source/cd_hw/cdd.c @@ -147,9 +147,10 @@ void cdd_load(char *filename, int type_bin) if (strstr(rominfo.product,"T-95035") != NULL) { /* Snatcher */ + cdd.toc.tracks[0].start = cdd.toc.last = cdd.toc.end = 0; do { - cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end + 2*75; + cdd.toc.tracks[cdd.toc.last].start = cdd.toc.end; cdd.toc.tracks[cdd.toc.last].end = cdd.toc.tracks[cdd.toc.last].start + toc_snatcher[cdd.toc.last]; cdd.toc.end = cdd.toc.tracks[cdd.toc.last].end; cdd.toc.last++; diff --git a/source/cd_hw/pcm.c b/source/cd_hw/pcm.c index c58db5e..47c71ba 100644 --- a/source/cd_hw/pcm.c +++ b/source/cd_hw/pcm.c @@ -96,18 +96,23 @@ void pcm_update(short *buffer, int length) /* check if channel is enabled */ if (pcm.status & (1 << j)) { - /* read current WAVE RAM address */ + /* read from current WAVE RAM address */ short data = pcm.ram[(pcm.chan[j].addr >> 11) & 0xffff]; - /* STOP data ? */ + /* loop data ? */ if (data == 0xff) { - /* reset WAVE RAM address with loop address */ + /* reset WAVE RAM address */ pcm.chan[j].addr = pcm.chan[j].ls.w << 11; - /* read WAVE RAM address again */ + /* read again from WAVE RAM address */ data = pcm.ram[pcm.chan[j].ls.w]; } + else + { + /* increment WAVE RAM address */ + pcm.chan[j].addr += pcm.chan[j].fd.w; + } /* infinite loop should not output any data */ if (data != 0xff) @@ -122,9 +127,6 @@ void pcm_update(short *buffer, int length) /* multiply PCM data with ENV & stereo PAN data then add to outputs (13.6 fixed point) */ l += ((data * pcm.chan[j].env * (pcm.chan[j].pan & 0x0F)) >> 6); r += ((data * pcm.chan[j].env * (pcm.chan[j].pan >> 4)) >> 6); - - /* increment WAVE RAM address */ - pcm.chan[j].addr += pcm.chan[j].fd.w; } } } diff --git a/source/gx/gui/menu.c b/source/gx/gui/menu.c index f8388b0..011b61d 100644 --- a/source/gx/gui/menu.c +++ b/source/gx/gui/menu.c @@ -1233,6 +1233,9 @@ static void systemmenu () } } + /* reinitialize audio streams */ + audio_init(snd.sample_rate, snd.frame_rate); + /* force hard reset */ system_init(); system_reset();