This happens because a VRAM DMA into OBJ RAM overflows (goes past 0x06018000) and wraps back around into the mirrored extension of BG RAM (0x06010000+). Will need to do hardware tests to see what the right behavior here is.
…d 16/32bit sram region reads, hle CpuSet.
- fixed vram dma overflow bug, thanks to [mgba](mgba-emu/mgba#743).
- hle CpuSet bios (untested, should work though).
- fixed 16/32bit sram region reads by mirroring the single. (ie, 16bit read of 0xFF will return 0xFFFF).
- fix `is_bitmap_mode()` to also include mode5
- refactor io_reads to operate on 16bit reads by default.
- minor refactor of mem.cpp, it's more readable now. io r/w is still a mess atm.
- remove `assert(gba.cpu.halted);` from scheduler. this was left over from debugging scheduler issues in the past.
- blank ppu rendering (memset the screen).
- add std::execution to mode3/mode4 rendering. seems to slightly improve fps (~10fps) but that's within margin of error, so unsure if it has any benefit. though it doesn't harm performance so i've kept it. (this forced my to remove -fno-exceptions as well).