Fixed a regression with STAT blocking.
This commit is contained in:
parent
80c92daacd
commit
7003e31b7e
@ -535,6 +535,10 @@ static void advance_fetcher_state_machine(GB_gameboy_t *gb)
|
||||
gb->fetcher_state &= 7;
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: It seems that the STAT register's mode bits are always "late" by 4 T-cycles.
|
||||
The PPU logic can be greatly simplified if that delay is simply emulated.
|
||||
*/
|
||||
void GB_display_run(GB_gameboy_t *gb, uint8_t cycles)
|
||||
{
|
||||
GB_object_t *objects = (GB_object_t *) &gb->oam;
|
||||
@ -634,7 +638,7 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles)
|
||||
/* Mode 0 is shorter in the very first line */
|
||||
GB_SLEEP(gb, display, 5, LINE_LENGTH - gb->cycles_for_line - 8);
|
||||
|
||||
gb->mode_0_interrupt_disable = true;
|
||||
gb->mode_0_interrupt_disable = !(gb->io_registers[GB_IO_STAT] & 0x20);
|
||||
gb->current_line = 1;
|
||||
while (true) {
|
||||
/* Lines 0 - 143 */
|
||||
@ -824,7 +828,9 @@ void GB_display_run(GB_gameboy_t *gb, uint8_t cycles)
|
||||
gb->hdma_starting = true;
|
||||
}
|
||||
GB_SLEEP(gb, display, 11, LINE_LENGTH - gb->cycles_for_line);
|
||||
gb->mode_0_interrupt_disable = true;
|
||||
/* Todo: The last cycle of move 0 can't trigger an interrupt... unless OAM interrupt is requested?
|
||||
This doesn't make too much sense. */
|
||||
gb->mode_0_interrupt_disable = !(gb->io_registers[GB_IO_STAT] & 0x20);
|
||||
}
|
||||
|
||||
/* Lines 144 - 152 */
|
||||
|
Loading…
Reference in New Issue
Block a user