More accurate HDMA during halt
This commit is contained in:
parent
967fdadd7c
commit
76b881c2e1
@ -1773,7 +1773,7 @@ skip_slow_mode_3:
|
|||||||
GB_SLEEP(gb, display, 33, 2);
|
GB_SLEEP(gb, display, 33, 2);
|
||||||
gb->cgb_palettes_blocked = !gb->cgb_double_speed;
|
gb->cgb_palettes_blocked = !gb->cgb_double_speed;
|
||||||
|
|
||||||
if (gb->hdma_on_hblank) {
|
if (gb->hdma_on_hblank && !gb->halted && !gb->stopped) {
|
||||||
gb->hdma_on = true;
|
gb->hdma_on = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1617,6 +1617,9 @@ void GB_cpu_run(GB_gameboy_t *gb)
|
|||||||
/* Wake up from HALT mode without calling interrupt code. */
|
/* Wake up from HALT mode without calling interrupt code. */
|
||||||
if (gb->halted && !effective_ime && interrupt_queue) {
|
if (gb->halted && !effective_ime && interrupt_queue) {
|
||||||
gb->halted = false;
|
gb->halted = false;
|
||||||
|
if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0) {
|
||||||
|
gb->hdma_on = true;
|
||||||
|
}
|
||||||
gb->dma_cycles = 4;
|
gb->dma_cycles = 4;
|
||||||
GB_dma_run(gb);
|
GB_dma_run(gb);
|
||||||
gb->speed_switch_halt_countdown = 0;
|
gb->speed_switch_halt_countdown = 0;
|
||||||
@ -1625,6 +1628,9 @@ void GB_cpu_run(GB_gameboy_t *gb)
|
|||||||
/* Call interrupt */
|
/* Call interrupt */
|
||||||
else if (effective_ime && interrupt_queue) {
|
else if (effective_ime && interrupt_queue) {
|
||||||
gb->halted = false;
|
gb->halted = false;
|
||||||
|
if (gb->hdma_on_hblank && (gb->io_registers[GB_IO_STAT] & 3) == 0) {
|
||||||
|
gb->hdma_on = true;
|
||||||
|
}
|
||||||
// TODO: verify the timing!
|
// TODO: verify the timing!
|
||||||
gb->dma_cycles = 4;
|
gb->dma_cycles = 4;
|
||||||
GB_dma_run(gb);
|
GB_dma_run(gb);
|
||||||
|
Loading…
Reference in New Issue
Block a user