From 64832e0e9ea2933ee14f74f1a9258062c8f0c923 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Sat, 18 Jun 2016 16:51:25 +0300 Subject: [PATCH] HDMA accuracy improvement --- Core/memory.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Core/memory.c b/Core/memory.c index 57d0568..1619642 100644 --- a/Core/memory.c +++ b/Core/memory.c @@ -461,6 +461,10 @@ static void write_high_memory(GB_gameboy_t *gb, unsigned short addr, unsigned ch gb->hdma_current_src = (gb->io_registers[GB_IO_HDMA1] << 8) | (gb->io_registers[GB_IO_HDMA2] & 0xF0); gb->hdma_current_dest = (gb->io_registers[GB_IO_HDMA3] << 8) | (gb->io_registers[GB_IO_HDMA4] & 0xF0); gb->hdma_steps_left = (gb->io_registers[GB_IO_HDMA5] & 0x7F) + 1; + /* Todo: Verify this. Gambatte's DMA tests require this. */ + if (gb->hdma_current_dest + (gb->hdma_steps_left << 4) > 0xFFFF) { + gb->hdma_steps_left = (0x10000 - gb->hdma_current_dest) >> 4; + } gb->hdma_cycles = 0; return;