all repos — mgba @ 91dd493f954ea2c109e18fc0eb647f5cd7d9217f

mGBA Game Boy Advance Emulator

GB Memory: Fix OAM DMA from top 8 kB
Vicki Pfau vi@endrift.com
Tue, 16 Jun 2020 23:06:32 -0700
commit

91dd493f954ea2c109e18fc0eb647f5cd7d9217f

parent

673f4aa1492ac9a01b081b083af0c2ba1bca008c

M CHANGESCHANGES

@@ -6,6 +6,7 @@ Emulation fixes:

- ARM: Fix ALU reading PC after shifting - ARM: Fix STR storing PC after address calculation - GB: Partially fix timing for skipped BIOS + - GB Memory: Fix OAM DMA from top 8 kB - GB MBC: Fix MBC1 mode changing behavior - GB MBC: Fix MBC1 RAM enable bit selection - GB MBC: Fix MBC2 bit selection
M src/gb/io.csrc/gb/io.c

@@ -193,7 +193,7 @@ }

GBIOWrite(gb, REG_SCY, 0x00); GBIOWrite(gb, REG_SCX, 0x00); GBIOWrite(gb, REG_LYC, 0x00); - GBIOWrite(gb, REG_DMA, 0xFF); + gb->memory.io[REG_DMA] = 0xFF; GBIOWrite(gb, REG_BGP, 0xFC); if (gb->model < GB_MODEL_CGB) { GBIOWrite(gb, REG_OBP0, 0xFF);
M src/gb/memory.csrc/gb/memory.c

@@ -519,8 +519,8 @@ }

} void GBMemoryDMA(struct GB* gb, uint16_t base) { - if (base > 0xF100) { - return; + if (base >= 0xE000) { + base &= 0xDFFF; } mTimingDeschedule(&gb->timing, &gb->memory.dmaEvent); mTimingSchedule(&gb->timing, &gb->memory.dmaEvent, 8);