Wiki

Clone wiki

lpcmod_OS / xblast_lite_manual / Developers_documentation

<s>#5</s>. Developers documentation

#<s>#5</s>.1 XBlast Lite register map

People who want to develop Xbox homebrew software that interface with the XBlast Lite are very welcome. XBlast Lite communicates exclusively on the LPC port of the Xbox. As the LPC port is mapped in memory, you can access it using CPU IO input/output functions(_inp/_outp in XDK) and supply the correct address that will trigger the XBlast Lite to listen and in the appropriate case, reply to a software command. XBlast Lite will only work with specific "register" addresses. Every 8 bits "register" supported by XBlast Lite as well as their usage and function are described in the table below:

Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0x00FE Read XODUS_ID 0 0 SW2 0 1 0 1 0
Chameleon ID (0xAA), only if external switches SW1 and SW2 are not grounded.
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF701 Read SYSCON_REG 0 0 0 1 0 1 0 1
SmartXX OPX spoof(low nibble) + Xblast mod variant(high nibble).
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF701 Read SYSCON_REG 0 0 0 1 0 1 0 1
SmartXX OPX spoof(low nibble) + Xblast mod variant(high nibble).
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF701 Write LCD_BL LCD-BL5 LCD-BL4 LCD-BL3 LCD-BL2 LCD-BL1 LCD-BL0
LCD backlight register. LSB is ignored..
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF703 Write LCD_CT LCD-CT5 LCD-CT4 LCD-CT3 LCD-CT2 LCD-CT1 LCD-CT0
LCD backlight register. LSB is ignored..
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF700 Write LCD_DATA LCD-D7 LCD-D6 LCD-D5 LCD-D4 LCD-E LCD-RS
LCD data register
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF70D Write XBLAST_IO GPO-3 GPO-2 GPO-1 GPO-0 Enable 5V
GPO=General Purpose Output, GPO-2&3 only accessed when SW1-2 = "11" & D0_control = '1' &A19ctrl = '0'
Enable 5V = Set to '1' to enable 5V rail to LCD.
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF70D Read XBLAST_IO GPO-3 GPO-2 GPO-1 GPO-0 GPI-1 GPI-0 A19_ctrl Enable 5V
GPO=General Purpose Output, GPO-2&3 only accessed when SW1-2 = "11" & D0_control = '1' &A19ctrl = '0'
A19_ctrl = Read state of A19_ctrl. Is '1' when TSOP is split.
Enable 5V = Read state of Enable 5V. Is '1' when enabled.
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF70D Read XBLAST_IO GPO-3 GPO-2 GPO-1 GPO-0 GPI-1 GPI-0 A19_ctrl Enable 5V
GPO=General Purpose Output, GPO-2&3 only accessed when SW1-2 = "11" & D0_control = '1' &A19ctrl = '0'
A19_ctrl = Read state of A19_ctrl. Is '1' when TSOP is split.
Enable 5V = Read state of Enable 5V. Is '1' when enabled.
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0x00FF WRITE XODUS_CONTROL iSW2 A19_ctrl iSW1 #A19_ctrl D0_control/#A19_ctrl A15 iSW1
iSW = internal state of SW. iSW can be disconnected from SW when OS seize control of it.
A19_ctrl = State of TSOP split feature. '1' when TSOP split is enabled.
#A19ctrl = inverted value of A19_ctrl(For Evolution-X support)
D0_control/#A19_ctrl = This bit is set to '1' whenever D0_control = '1' OR A19_ctrl = '0'(For Evolution-X support)
A15 = State of A15. '1' when is grounded.
Address R/W Name in OS bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
0xF70F WRITE XBLAST_CONTROL OS Bank ctrl Kill mod A19_ctrl A19 D0_control iSW1 iSW2
OS Bank ctrl = Seize control of iSW1 and iSW2 when set to '1'. Needs a complete power cycle to return to '0'.
Kill mod completely mutes modchip until a power cycle.
A19_ctrl enables TSOP split. Bank is selected by ltch_A19 and/or A19
D0_control/#A19_ctrl = This bit is set to '1' whenever D0_control = '1' OR A19_ctrl = '0'(For Evolution-X support)
D0_control = D0 signal is put to ground when set to '1'.
iSW = Internal state of SW. Is used by OS to select banks on Xblast.

|Bank switches truth table | |iSW1 |iSW2 |Bank | |0 |0 |BNK512 | |0 |1 |BNK512 | |1 |0 |BNK256 | |1 |1 |BNKOS |

|TSOP split control signals truth table | |A19_ctrl |A19 |TSOP Bank | |0 |0 |Full TSOP | |0 |1 |Full TSOP | |1 |0 |Split bank0 | |1 |1 |Split bank1 |

For more information and examples on how to interface the registers. Please check XBlast OS' source code.

#<s>#5</s>.2 Debug SPI adapter

To help XBlast OS development and debugging, it is possible to output text strings to a computer's serial console.

To do so, you will need a Xblast Modchip and an Arduino Uno compatible development board. Most Arduino-compatible boards will do. Texts prints are sent via SPI so your Arduino development board must be able to handle SPI. Arduino Uno, Pro or Nano are all good candidates and possibly the cheapest to buy.

##<s>#5</s>.2.1 Arduino<->XBlast Mod wiring 3 wires must be connected between both devices. Using SPI terminology, here's the mapping of the logic signals on the XBlast Lite modchip's GPO pads:

  1. OUT0 ---> MOSI

  2. OUT1 ---> SCK

The third connection is a common ground between Xblast Lite and the Arduino.

You need to connect OUT0 to Arduino's MOSI pin, OUT1 to Arduino's SCK pin and one of the Ground pad available on XBlast Modchip to one of your Arduino's ground pin.

Please refer to your Arduino board's specific pinout scheme to link these 3 signals together. Here's some wiring representations for the most common Arduino boards available. [pics of Arduino-XBlast wiring for Arduino Uno,Pro and nano v3]

##<s>#5</s>.2.2 Programming and interfacing the Arduino SPI debugger Arduino Sketch is included with XBlast OS source code (in the "Arduino_debugger" folder). You will need to open that sketch and program your Arduino board with it. Arduino communicates at 250000 bps with your computer.

Note: Program your Arduino board before connecting it to your XBlast Modchip. To avoid any potential harm to the XBlast modchip or Arduino board, you should connect both devices together only when Xbox is powered down and Arduino is already powered ON.

##<s>#5</s>.2.3 Using debug text print XBlast OS contains code that needs to be enabled to output text prints transmitted via bit-banged SPI on XBlast Mod General Purpose output pads. To enable the debug SPI prints, you must make sure the line "#define SPITRACE" is not commented before compiling XBlast OS. This will activate usage of the C function "debugSPIPrint" throughout the source code of XBlast OS.

Note: When "SPITRACE" isn't defined, every piece of code related to "debugSPIPrint", including function calls throughout the code, will be ignored by the compiler. They will not be compiled in and therefor will not take up space in executable.

Here's an example of what information can be displayed when enabling debug SPI prints: [pic of terminal session booting XBlast OS]

"debugSPIPrint" function works exactly like the common and universal "printf" C function.

"debugSPIPrint" function is limited to sending a maximum of 200 characters per call. The name of the function "debugSPIPrint" was called from does count in this 200 characters limitation. Function name is automatically inserted at start of the outgoing string and doesn't need to be specified in "debugSPIPrint" function call.

Please note that usage of debug SPI prints slows considerably execution of XBlast OS when outputing text. Time-critical code might be negatively impacted when enabling it.

Note: By default, debug SPI prints are not enabled. Developer must compile his own version with it enabled.

Updated