From f274cbc2ec638a4e488c8411fe93fd1d446be30f Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Tue, 13 Sep 2016 17:40:10 +0300 Subject: [PATCH] Read wave form while playing --- Core/apu.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Core/apu.c b/Core/apu.c index ae15c56..a359853 100755 --- a/Core/apu.c +++ b/Core/apu.c @@ -239,7 +239,6 @@ void GB_apu_init(GB_gameboy_t *gb) uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg) { - /* Todo: what happens when reading from the wave from while it's playing? */ GB_apu_run_internal(gb); if (reg == GB_IO_NR52) { @@ -271,7 +270,11 @@ uint8_t GB_apu_read(GB_gameboy_t *gb, uint8_t reg) }; if (reg >= GB_IO_WAV_START && reg <= GB_IO_WAV_END && gb->apu.wave_channels[2].is_playing) { - return (uint8_t)((gb->display_cycles * 22695477 * reg) >> 8); // Semi-random but deterministic + if (gb->apu.wave_channels[2].wave_length == 0) { + return gb->apu.wave_form[0]; + } + gb->apu.wave_channels[2].phase %= gb->apu.wave_channels[2].wave_length; + return gb->apu.wave_form[(int)(gb->apu.wave_channels[2].phase * 32 / gb->apu.wave_channels[2].wave_length)]; } return gb->io_registers[reg] | read_mask[reg - GB_IO_NR10];