Step 2.x DMA Device

Findings related to the Model 3 Step 2.x DMA device will be posted here.
The Real3D DMA device is a bit more complicated than I recall. I didn't have much time to look at it tonight but I started by logging all 32-bit writes. It appears to be capable of accessing the Real3D register space directly, without having to do a DMA copy:
I never realized before but Step 1.x games map the Real3D status registers to PowerPC memory at 0x84000000-0x84000020. On Step 2.x, they are only accessed through the DMA device and using the codes above. I will eventually simplify Real3D.cpp to handle these commands as status register reads. I also need to check and see if any games actually do anything with the values returned (other than checking the single status flag that we know about).
Games also write commands with the form 0x200000xx but no data seems to follow. Most of these do not correspond to the definitions in pro_constants.hh, by the way, so I think they are something entirely different. We know that in one case, Virtual On 2 expects a PCI ID code back and there is no mention of anything like this in pro_io_struct.hh. As far as I can tell, those data structures do not correspond to what Model 3 uses internally.
The Real3D DMA device is a bit more complicated than I recall. I didn't have much time to look at it tonight but I started by logging all 32-bit writes. It appears to be capable of accessing the Real3D register space directly, without having to do a DMA copy:
- Code: Select all
Real3D: WriteDMARegister32: reg=10, data=80000000
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000004
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000008
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=8000000C
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000010
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000014
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000018
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=8000001C
Real3D: ReadDMARegister32: reg=14
Real3D: WriteDMARegister32: reg=10, data=80000020
Real3D: ReadDMARegister32: reg=14
I never realized before but Step 1.x games map the Real3D status registers to PowerPC memory at 0x84000000-0x84000020. On Step 2.x, they are only accessed through the DMA device and using the codes above. I will eventually simplify Real3D.cpp to handle these commands as status register reads. I also need to check and see if any games actually do anything with the values returned (other than checking the single status flag that we know about).
Games also write commands with the form 0x200000xx but no data seems to follow. Most of these do not correspond to the definitions in pro_constants.hh, by the way, so I think they are something entirely different. We know that in one case, Virtual On 2 expects a PCI ID code back and there is no mention of anything like this in pro_io_struct.hh. As far as I can tell, those data structures do not correspond to what Model 3 uses internally.