# HG changeset patch # User Michael Pavone # Date 1707453884 28800 # Node ID 2ee25a487e2b7f65973bd097b30d8cdf673a395f # Parent 2907c3312423ccd7e315e684e0abbe94d3d337a0 Fix some Pico ADPCM behaviors diff -r 2907c3312423 -r 2ee25a487e2b pico_pcm.c --- a/pico_pcm.c Thu Feb 08 20:24:37 2024 -0800 +++ b/pico_pcm.c Thu Feb 08 20:44:44 2024 -0800 @@ -101,9 +101,23 @@ } #endif render_put_mono_sample(pcm->audio, (pcm->output >> shift) * 32); + if (pcm->ctrl & PCM_RESET) { + //Anpanman Pico: Waku Waku Pan Koujou seems to expect the BUSY/RESET flag + //to be set for a while after reset + if (pcm->counter) { + pcm->counter--; + continue; + } else { + pcm->ctrl &= ~PCM_RESET; + } + } + /* + Unclear what this bit is actually supposed to do + But some games expect ADPCM to work with it cleared + Anpanman Pico: Waku Waku Pan Koujou sets the ctrl reg to $6040 if (!(pcm->ctrl & PCM_ENABLED)) { continue; - } + }*/ if (pcm->counter) { pcm->counter--; } else if (pcm->samples) { @@ -172,9 +186,9 @@ { if (value & PCM_RESET) { pico_pcm_reset(pcm); + pcm->counter = 2; } - pcm->ctrl &= 0x8000; - pcm->ctrl |= value & ~PCM_RESET; + pcm->ctrl = value; //TODO: update low-pass filter }