Permalink
Browse files

GB Memory: Fix HDMA count starting in mode 0 (fixes #855)

  • Loading branch information...
endrift committed Aug 12, 2017
1 parent f252436 commit 546688f9fb9ea87589d786cdf7a909a34be0c904
Showing with 7 additions and 2 deletions.
  1. +1 −0 CHANGES
  2. +5 −2 src/gb/memory.c
  3. +1 −0 src/gb/video.c
View
@@ -31,6 +31,7 @@ Bugfixes:
- Qt: Fix sprite export pausing game indefinitely (fixes mgba.io/i/841)
- ARM: Fix MSR when T bit is set
- GB Video: Fix potential hang when ending mode 0
+ - GB Memory: Fix HDMA count starting in mode 0 (fixes mgba.io/i/855)
Misc:
- GBA Timer: Use global cycles for timers
- GBA: Extend oddly-sized ROMs to full address space (fixes mgba.io/i/722)
View
@@ -469,10 +469,13 @@ void GBMemoryWriteHDMA5(struct GB* gb, uint8_t value) {
bool wasHdma = gb->memory.isHdma;
gb->memory.isHdma = value & 0x80;
if ((!wasHdma && !gb->memory.isHdma) || gb->video.mode == 0) {
- gb->memory.hdmaRemaining = ((value & 0x7F) + 1) * 0x10;
+ if (gb->memory.isHdma) {
+ gb->memory.hdmaRemaining = 0x10;
+ } else {
+ gb->memory.hdmaRemaining = ((value & 0x7F) + 1) * 0x10;
+ }
gb->cpuBlocked = true;
mTimingSchedule(&gb->timing, &gb->memory.hdmaEvent, 0);
- gb->cpu->nextEvent = gb->cpu->cycles;
}
}
View
@@ -304,6 +304,7 @@ void _endMode3(struct mTiming* timing, void* context, uint32_t cyclesLate) {
GBVideoProcessDots(video);
if (video->ly < GB_VIDEO_VERTICAL_PIXELS && video->p->memory.isHdma && video->p->memory.io[REG_HDMA5] != 0xFF) {
video->p->memory.hdmaRemaining = 0x10;
+ video->p->cpuBlocked = true;
mTimingDeschedule(timing, &video->p->memory.hdmaEvent);
mTimingSchedule(timing, &video->p->memory.hdmaEvent, 0);
}

0 comments on commit 546688f

Please sign in to comment.