From cb6bb0590ed9be96e366de850b8686e776ab7dd8 Mon Sep 17 00:00:00 2001 From: Lior Halphon Date: Fri, 9 Mar 2018 21:11:35 +0200 Subject: [PATCH] Starting to fix CGB timing quirks --- Core/display.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/Core/display.c b/Core/display.c index e7b15da..057ab3a 100755 --- a/Core/display.c +++ b/Core/display.c @@ -596,9 +596,9 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->vram_read_blocked = false; gb->oam_write_blocked = false; gb->vram_write_blocked = false; - gb->cycles_for_line = MODE2_LENGTH - 4; + gb->cycles_for_line = MODE2_LENGTH - 2; GB_STAT_update(gb); - GB_SLEEP(gb, display, 2, MODE2_LENGTH - 4); + GB_SLEEP(gb, display, 2, MODE2_LENGTH - 2); gb->io_registers[GB_IO_STAT] &= ~3; gb->io_registers[GB_IO_STAT] |= 3; @@ -607,8 +607,8 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->oam_write_blocked = true; gb->vram_write_blocked = true; GB_STAT_update(gb); - gb->cycles_for_line += MODE3_LENGTH + (gb->io_registers[GB_IO_SCX] & 7) + 2; - GB_SLEEP(gb, display, 3, MODE3_LENGTH + (gb->io_registers[GB_IO_SCX] & 7) + 2); + gb->cycles_for_line += MODE3_LENGTH + (gb->io_registers[GB_IO_SCX] & 7); + GB_SLEEP(gb, display, 3, MODE3_LENGTH + (gb->io_registers[GB_IO_SCX] & 7)); gb->io_registers[GB_IO_STAT] &= ~3; gb->oam_read_blocked = false; @@ -668,8 +668,14 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles) gb->position_in_line = - (gb->io_registers[GB_IO_SCX] & 7) - 8; gb->fetcher_x = ((gb->io_registers[GB_IO_SCX]) / 8) & 0x1f; - gb->cycles_for_line += 5; - GB_SLEEP(gb, display, 10, 5); + { + uint8_t rendering_delay = 5; + if (gb->is_cgb) { + rendering_delay = gb->current_line == 0? 2 : 6; + } + gb->cycles_for_line += rendering_delay; + GB_SLEEP(gb, display, 10, rendering_delay); + } /* The actual rendering cycle */ gb->fetcher_divisor = false;