A DMA takes control of the internal video bus, preventing access from CPU or PPU to the OAM memory.
While it is not advisable from developers, it is technically possible to write a DMA request with a source address above 0xDFXX (way past the RAM memory mapping !).
While this triggers access to memory addresses where registers should be, DMA uses an address decoding scheme that interprets all accesses in the 0xA000-0xFFFF range as external RAM transfers.
This results in access done in the cartridge to unexpected addresses.
It is for example possible to trigger a memory access of the address 0xFF00 from the cartridge, despite it normally be in the register memory area (JOYP)
Emulating this behaviour would mean having some kind of bus API to detect conflicts
A DMA takes control of the internal video bus, preventing access from CPU or PPU to the OAM memory.
While it is not advisable from developers, it is technically possible to write a DMA request with a source address above 0xDFXX (way past the RAM memory mapping !).
While this triggers access to memory addresses where registers should be, DMA uses an address decoding scheme that interprets all accesses in the 0xA000-0xFFFF range as external RAM transfers.
This results in access done in the cartridge to unexpected addresses.
It is for example possible to trigger a memory access of the address 0xFF00 from the cartridge, despite it normally be in the register memory area (JOYP)
Emulating this behaviour would mean having some kind of bus API to detect conflicts