Cycle accurate PPU

Description

The current PPU implementation represents a simplification of the "real deal".

One of the most important aspects of implementing a timed PPU is to change the time on OAM execution depending on the number of objects being processed.

This Reddit post gives some insights on what can be done to ensure accuracy in PPU execution - https://www.reddit.com/r/EmuDev/comments/pnruwk/gbgbc_passing_all_cputiming_tests.

This Rust emulator feo-boy implements cycle-accurate PPU, I can take some inspiration from it. An example of the required changes is in the read_byte() method.

Inspiration

Screenshot_2022-07-10_at_12.48.51

https://gbdev.io/pandocs/STAT.html#lcd-status-register

References

Edited by João Magalhães