The Serial Interface is used to talk to the 4 GameCube controllers ("joypads"), as well as to other devices (such as the GameBoy Advance Link Cable) under supported software.
Registers
Serial Interface Registers
|
Address
|
Bits
|
Name
|
Description
|
0x0d006400
|
32
|
SIC0OUTBUF
|
SI Channel 0 Output Buffer
|
0x0d006404
|
32
|
SIC0INBUFH
|
SI Channel 0 Input Buffer (High)
|
0x0d006408
|
32
|
SIC0INBUFL
|
SI Channel 0 Input Buffer (Low)
|
0x0d00640c
|
32
|
SIC1OUTBUF
|
SI Channel 1 Output Buffer
|
0x0d006410
|
32
|
SIC1INBUFH
|
SI Channel 1 Input Buffer (High)
|
0x0d006414
|
32
|
SIC1INBUFL
|
SI Channel 1 Input Buffer (Low)
|
0x0d006418
|
32
|
SIC2OUTBUF
|
SI Channel 2 Output Buffer
|
0x0d00641c
|
32
|
SIC2INBUFH
|
SI Channel 2 Input Buffer (High)
|
0x0d006420
|
32
|
SIC2INBUFL
|
SI Channel 2 Input Buffer (Low)
|
0x0d006424
|
32
|
SIC3OUTBUF
|
SI Channel 3 Output Buffer
|
0x0d006428
|
32
|
SIC3INBUFH
|
SI Channel 3 Input Buffer (High)
|
0x0d00642c
|
32
|
SIC3INBUFL
|
SI Channel 3 Input Buffer (Low)
|
0x0d006430
|
32
|
SIPOLL
|
SI Poll Registers
|
0x0d006434
|
32
|
SICOMCSR
|
SI Communication Control Status Register
|
0x0d006438
|
32
|
SISR
|
SI Status Register (channel select & status2)
|
0x0d00643c
|
32
|
SIEXILK
|
SI EXI Clock Lock
|
SIC0OUTBUF (0x0D006400)
|
|
31
|
30
|
29
|
28
|
27
|
26
|
25
|
24
|
23
|
22
|
21
|
20
|
19
|
18
|
17
|
16
|
Access
|
U
|
R/W
|
Field
|
|
CMD
|
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0
|
Access
|
R/W
|
R/W
|
Field
|
OUTPUT0
|
OUTPUT1
|
SIC1OUTBUF (0x0D00640c)
|
|
31
|
30
|
29
|
28
|
27
|
26
|
25
|
24
|
23
|
22
|
21
|
20
|
19
|
18
|
17
|
16
|
Access
|
U
|
R/W
|
Field
|
|
CMD
|
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0
|
Access
|
R/W
|
R/W
|
Field
|
OUTPUT0
|
OUTPUT1
|
SIC2OUTBUF (0x0D006418)
|
|
31
|
30
|
29
|
28
|
27
|
26
|
25
|
24
|
23
|
22
|
21
|
20
|
19
|
18
|
17
|
16
|
Access
|
U
|
R/W
|
Field
|
|
CMD
|
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0
|
Access
|
R/W
|
R/W
|
Field
|
OUTPUT0
|
OUTPUT1
|
SIC3OUTBUF (0x0D006424)
|
|
31
|
30
|
29
|
28
|
27
|
26
|
25
|
24
|
23
|
22
|
21
|
20
|
19
|
18
|
17
|
16
|
Access
|
U
|
R/W
|
Field
|
|
CMD
|
|
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0
|
Access
|
R/W
|
R/W
|
Field
|
OUTPUT0
|
OUTPUT1
|
These registers are double buffered, so main processor writes to the SICxOUTBUF will not interfere with the serial interface output transfer. Internally, a second buffer is used to hold the output data to be transferred across the serial interface. To check if SICxOUTBUF has been transferred to the second buffer, main processor polls the SISR[WRST0] register. When SICxOUTBUF is transferred, SISR[WRST0] is cleared.
Field
|
Description
|
CMD
|
This byte is the opcode for the command sent to the controller during each command/response packet. This is the first data byte sent from the SI I/F to the game controller in the command/response packet.
|
OUTPUT0
|
This is the first data byte of the command packet. It is the second data byte sent from the SI I/F to the game controller in the command/response packet.
|
OUTPUT1
|
This is the second data byte of the command packet. It is the third data byte sent from the SI I/F to the game controller in the command/response packet.
|