Starting to fix CGB timing quirks
This commit is contained in:
parent
9083e883fe
commit
cb6bb0590e
@ -596,9 +596,9 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles)
|
|||||||
gb->vram_read_blocked = false;
|
gb->vram_read_blocked = false;
|
||||||
gb->oam_write_blocked = false;
|
gb->oam_write_blocked = false;
|
||||||
gb->vram_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_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;
|
||||||
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->oam_write_blocked = true;
|
||||||
gb->vram_write_blocked = true;
|
gb->vram_write_blocked = true;
|
||||||
GB_STAT_update(gb);
|
GB_STAT_update(gb);
|
||||||
gb->cycles_for_line += 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) + 2);
|
GB_SLEEP(gb, display, 3, MODE3_LENGTH + (gb->io_registers[GB_IO_SCX] & 7));
|
||||||
|
|
||||||
gb->io_registers[GB_IO_STAT] &= ~3;
|
gb->io_registers[GB_IO_STAT] &= ~3;
|
||||||
gb->oam_read_blocked = false;
|
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->position_in_line = - (gb->io_registers[GB_IO_SCX] & 7) - 8;
|
||||||
gb->fetcher_x = ((gb->io_registers[GB_IO_SCX]) / 8) & 0x1f;
|
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 */
|
/* The actual rendering cycle */
|
||||||
gb->fetcher_divisor = false;
|
gb->fetcher_divisor = false;
|
||||||
|
Loading…
Reference in New Issue
Block a user