All SIO2 register data is also mirrored to a struct in mem. This is used for patching certain parameters.

  • SIO2 transfer queue register struct: 0xbe07e4 - 0xbe0824

pCtrl0 struct: 0xbe07c4 - 0xbe07d4 pCtrl1 struct: 0xbe07d4 - 0xbe07e4

pCtrl0_2 and pCtrl0_3 have their PCTRL0_ATT_MIN_HIGH_PER patched to 0x60 regardless of what value is set.

pCtrl1_2 and pCtrl1_3 have their PCTRL1_INTER_BYTE_PER patched to 0x2 if it’s greater than 0x4 AND the active baud div is 0x2. This might be to compensate for the longer inter byte delay in the SIO2 silicon on DECKARD models. (~370ns 75K+ vs ~160ns fats)

When reading from SIO2 registers all data will be read from the registers directly EXCEPT for pCtrl0_2, pCtrl0_3, pCtrl1_2, and pCtrl1_3. These will be read from memory.

Writing 0x0 or 0x1 to the baud div register directly from the PPC side does not stick…It will always default to 0x2