GB Memory: Fix OAM DMA from top 8 kB

This commit is contained in:
Vicki Pfau 2020-06-16 23:06:32 -07:00
parent 673f4aa149
commit 91dd493f95
5 changed files with 4 additions and 5 deletions

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 528 B

View File

@ -1,2 +0,0 @@
[testinfo]
fail=1

View File

@ -193,7 +193,7 @@ void GBIOReset(struct GB* gb) {
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);

View File

@ -519,8 +519,8 @@ uint8_t GBView8(struct SM83Core* cpu, uint16_t address, int segment) {
}
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);