In memory of Ben “bushing” Byer, who passed away on Monday, February 8th, 2016.

Hardware/Espresso Registers

From WiiUBrew
< Hardware
Revision as of 12:05, 25 January 2018 by QuarkTheAwesome (talk | contribs) (Start reworking page with new GX2 research)
Jump to navigation Jump to search

Some of the Wii U's hardware components are available to and primarily used by the Espresso; including the GX2, DSP and AX. These devices are mapped and available in Cafe OS userspace, used without the IOSU's involvement.

GX2 Registers

GX2 Registers
Access
EspressoFull
StarbuckFull
Registers
Base0x0c200000
Length0x30000
Access size32 bits
Byte orderBig Endian
IRQs
Espresso??
Latte??
This box: view  talk  edit

See Also: GX2

The GX2 consists of an R7xx family Radeon. While documentation perfectly matching the card is yet to be found, several documents can be brought together to form a reasonable picture of the register layout.

Reverse-engineering has revealed that the GX2's MMIO registers (referred to as GpuF0MMReg in AMD's docs) are at 0x0c200000. The other MMIO locations (GpuF0Pcie, VGA_IO) are not known at this point.

Register guide for a similar, but not identical, card. Covers 2D graphics, CRTCs, the memory controller, etc. Does not cover 3D. Addresses for registers starting with D1 are known to match the GX2 - this reference has been successfully used to set up a framebuffer without Cafe OS running. There's evidence of another display not mentioned in this document - see the Cafe OS section below.
3D register guide. Applies to the whole R7xx family, so there should be no differences for the GX2.[check] Has not been tried on hardware at time of writing.
Conceptual document explaining how to actually use the 3D engine, shader pipelines, caches, etc. Names registers, but does not give addresses (readers should cross-reference the 3D Register Reference Guide)

Cafe OS

Cafe OS applies various APIs on top of the GX2's raw hardware registers - gx2.rpl and OSScreen. OSScreen is the easier of the two to reverse-engineer, and reveals some unknowns in the hardware. For example, it uses the registers at GpuF0MMReg:0x6100 to set up one framebuffer - which matches the D1GRPH registers according to the RV630 Register Reference Guide (see chapter 2.7.1 - Primary Display Graphics Control Registers). However, the API also uses registers at GpuF0MMReg:0x7100 identically; suggesting the existence of another display controller at that location. The Register Reference Guide does not list any registers at that address, suggesting some major differences between the GX2 and the RV630.