pureikyubu/Docs/HW/si.htm
ogamespec c21147ccff Cumulative changes all around project, regarding Stage 1
Docs: New TODO moved to EMU, old renamed to old_todo
Docs: Old coding style is deprecated (old_style.txt)
Docs: Removed mention about CubeDocumented and fixed old emails
RE: boot.s, proved first asm line (lis instruction parameter)
RE: Added PAL and NTSC Boot and IPL IDA files
RE: Some work on NTSC IPL (identified many lib calls, including OS, GX)
RE: Added EXI Bootrom descrambler by segher
RE: GXInit
RE: Internal GX lib structures (GXPrivate.h)
RE: More details on lomem (OS versions)
RE: OSInit and OS.c
RE: OSAlloc (heap allocator)
RE: Very first code of Metrowerk runtime (__start.c)
Docs: Added copy of http://gcdev.narod.ru
Source\Utils: Command processor (Cmd.c)
Source\Utils: File wrapper
Source\Utils: Gekko disasm cleaned up and ported to plain C
Source\Utils: Double-linked lists
Source\Utils: Ported old Profiler code
Source\Utils: String utils
2015-09-04 19:45:10 +03:00

592 lines
No EOL
33 KiB
HTML

<html>
<head>
<style>pre { font-family: Courier; font-size: 8pt;}</style>
</head>
<body>
<center><u><h2>Serial Interface</h2></u></center>
The base address of interface registers is <b><font face=Verdana color=PURPLE size=2pt>CC006400</font></b>.
All registers are 32-bit.
<br><br>
<b>SI Channel 0 Output Buffer</b>
<b><font face=Verdana color=PURPLE size=2pt>CC006400</font></b><br>
<PRE>SIC0OUTBUF :
Bits Mnemonic Type Reset Description
31:24 R 0 Reserved
23:16 CMD RW 0 Command: 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.
15:8 OUTPUT0 RW 0 Output Byte 0: 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.
7:0 OUTPUT1 RW 0 Output Byte 1: This is the second databyte 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.
</PRE>
This register is double buffered, so main processor writes to the
SIC0OUTBUF 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 SIC0OUTBUF
has been transferred to the second buffer, main processor polls the
SISR[WRST0] register. When SICOOUTBUF is transferred, SISR[WRST0] is cleared. <br><br>
<b>SI Channel 0 Input Buffer High</b>
<b><font face=Verdana color=PURPLE size=2pt>CC006404</font></b><br>
<PRE>SIC0INBUFH:
Bits Mnemonic Type Reset Description
31 ERRSTAT R 0 Error Status: This bit represents the current error status
for the last SI polling transfer on channel 0. This
register is updated after each polling transfer on this channel.
0 = No error on last transfer
1 = Error on last transfer
30 ERRLATCH R 0 Error Latch: This bit is an error status summary of the
SISR error bits for this channel. If an error has
occurred on a past SI transfer on channel 0 (polling or
Com transfer), this bit will be set. To determine the
exact error, read the SISR register. This bit is actually
an `or` of the latched error status bits for channel 0 in
the SISR. The bit is cleared by clearing the appropriate
error status bits latched in the SISR. The no response
error indicates that a controller is not present on this channel.
0 = No errors latched
1 = Error latched. Check SISR.
29:24 INPUT0 R Input Byte 0: This is the first data byte of the response
packet sent from the game controller to the SI I/F for
channel 0. The top two bits of the byte returning from
the controller are assumed to be `0`, so they are not
included.
23:16 INPUT1 R Input Byte 1: This is the second data byte of the
response packet sent from the game controller to the SI
I/F for channel 0.
15:8 INPUT2 R Input Byte 2: This is the third data byte of the response
packet sent from the game controllers to the SI I/F for
channel 0.
7:0 INPUT3 R Input Byte 3: This is the fourth data byte of the
response packet sent from the game controller to the SI
I/F for channel 0.
</PRE>
SIC0INBUFH and SIC0INBUFL are double buffered to prevent
inconsistent data reads due to main processor conflicting with incoming
<B><I>serial</I></B> interface data. To insure data read from SIC0INBUFH and
SIC0INFUBL are consistent, a locking mechanism prevents the double buffer from
copying new data to these registers. Once SIC0INBUFH is read, both SIC0INBUFH
and SIC0INBUFL are `locked` until SIC0INBUFL is read. While the buffers are
`locked`, new data is not copied into the buffers. When SIC0INBUFL is read, the
buffers become unlocked again. <BR><BR>SIC0INBUF SI Channel 0 Input Buffer Low
<BR><BR>Mnemonic: SIC0INBUFL <BR><BR>Offset: 0x08 <BR><BR>Size 32 bits <PRE> SIC0INBUFL
Bits Mnemonic Type Reset Description
31:24 INPUT4 R 0 .times. 0 Input Byte 4: See Description of
SIC1INBUFH[INPUT1].
23:16 INPUT5 R 0 .times. 0 Input Byte 5: See Description of
SIC1INBUFH[INPUT1].
15:8 INPUT6 R 0 .times. 0 Input Byte 6: See Description of
SIC1INBUFH[INPUT1].
7:0 INPUT7 R 0 .times. 0 Input Byte 7: See Description of
SIC1INBUFH[INPUT1].
</PRE><BR><BR>SIC1OUTBUF SI Channel 1 Output Buffer <BR><BR>Mnemonic: SIC 1
OUTBUF <BR><BR>Offset: 0x0C <BR><BR>Size 32 bits <PRE> SIC1OUTBUF
Bits Mnemonic Type Reset Description
31:24 R 0 .times. 0 Reserved
23:16 CMD RW 0 .times. 0 Command: For SI channel 1. See
SIC0OUTBUFF[CMD]
description.
15:8 OUTPUT0 RW 0 .times. 0 Output Byte 0: For SI channel 1. See
SIC0OUTBUFF[OUTPUT0
description.
7:0 OUTPUT1 RW 0 .times. 0 Output Byte 1: For SI channel 1. See
SIC0OUTBUFF[OUTPUT1]
description.
</PRE><BR><BR>SIC1INBUF SI Channel 1 Input Buffer High <BR><BR>Mnemonic:
SIC1INBUFH <BR><BR>Offset: 0x10 <BR><BR>Size 32 bits <PRE> SIC1INBUFH
Bits Mnemonic Type Reset Description
31 ERRSTAT R 0 .times. 0 Error Status: See Description of
SIC0INBUFH[ERRSTAT].
30 ERRLATCH R 0 .times. 0 Error Latch: See Description of
SIC0INBUFH[ERRLATCH].
29:24 INPUT0 R 0 .times. 0 Input Byte 0: See Description of
SIC0INBUFH[INPUT0].
23:16 INPUT1 R 0 .times. 0 Input Byte 1: See Description of
SIC0INBUFH[INPUT1].
15:8 INPUT2 R 0 .times. 0 Input Byte 2: See Description of
SIC0INBUFH[INPUT1].
7:0 INPUT3 R 0 .times. 0 Input Byte 3: See Description of
SIC0INBUFH[INPUT1].
</PRE><BR><BR>SIC1INBUF SI Channel 1 Input Buffer Low <BR><BR>Mnemonic:
SIC1INBUFL <BR><BR>Offset: 0x14 <BR><BR>Size 32 bits <PRE> SIC1INBUFL
Bits Mnemonic Type Reset Description
31:24 INPUT4 R 0 .times. 0 Input Byte 4: See Description of
SIC0INBUFH[INPUT1].
23:16 INPUT5 R 0 .times. 0 Input Byte 5: See Description of
SIC0INBUFH[INPUT1].
15:8 INPUT6 R 0 .times. 0 Input Byte 6: See Description of
SIC0INBUFH[INPUT1].
7:0 INPUT7 R 0 .times. 0 Input Byte 7: See Description of
SIC0INBUFH[INPUT1].
</PRE><BR><BR>SIC2OUTBUF SI Channel 2 Output Buffer <BR><BR>Mnemonic: SIC2OBUF
<BR><BR>Offset: 0x18 <BR><BR>Size 32 bits <PRE> SIC2OUTBUF
Bits Mnemonic Type Reset Description
31:24 R 0 .times. 0 Reserved
23:16 CMD RW 0 .times. 0 Command: For SI Channel 2. See
SIC0OUTBUFF[CMD]
description
15:8 OUTPUT0 RW 0 .times. 0 Output Byte 0: For SI channel 2. See
SIC0OUTBUFF[OUTPUT0]
description.
7:0 OUTPUT1 RW 0 .times. 0 Output Byte 1: For SI channel 2. See
SIC0OUTBUFF[OUTPUT1]
description.
</PRE><BR><BR>SIC2INBUF SI Channel 2 Input Buffer High <BR><BR>Mnemonic:
SIC2INBUFH <BR><BR>Offset: 0x1C <BR><BR>Size 32 bits <PRE> SIC2INBUFH
Bits Mnemonic Type Reset Description
31 ERRSTAT R 0 .times. 0 Error Status: See Description of
SIC0INBUFH[ERRSTAT].
30 ERRLATCH R 0 .times. 0 Error Latch: See Description of
SIC0INBUFH[ERRLATCH].
29:24 INPUT0 R 0 .times. 0 Input Byte O: See Description of
SIC0INBUFH[INPUT1].
23:16 INPUT1 R 0 .times. 0 Input Byte 1: See Description of
SIC0INBUFH[INPUT0].
15:8 INPUT2 R 0 .times. 0 Input Byte 2: See Description of
SIC0INBUFH[INPUT1].
7:0 INPUT3 R 0 .times. 0 Input Byte 3: See Description of
SIC0INBUFH[INPUT1].
</PRE><BR><BR>SIC2INBUF SI Channel 2 Input Buffer Low <BR><BR>Mnemonic:
SIC2INBUFL <BR><BR>Offset: 0x20 <BR><BR>Size 32 bits <PRE> SIC2INBUFL
Bits Mnemonic Type Reset Description
31:24 INPUT4 R 0 .times. 0 Input Byte 4: See Description of
SIC0INBUFH[INPUT0].
23:16 INPUT5 R 0 .times. 0 Input Byte 5: See Description of
SIC0INBUFH[INPUT0].
15:8 INPUT6 R 0 .times. 0 Input Byte 6: See Description of
SIC0INBUFH[INPUT0].
7:0 INPUT7 R 0 .times. 0 Input Byte 7: See Description of
SIC0INBUFH[INPUT0].
</PRE><BR><BR>SIC30UTBUF SI Channel 3 Output Buffer <BR><BR>Mnemonic: SIC3OBUF
<BR><BR>Offset: 0x24 <BR><BR>Size 32 bits <PRE> SIC3OUTBUF
Bits Mnemonic Type Reset Description
31:24 R 0 .times. 0 Reserved
23:16 CMD RW 0 .times. 0 Command: For SI channel 3. See
SIC0OUTBUFF[CMD0]
description
15:8 OUTPUT0 RW 0 .times. 0 Output Byte 0: For SI channel 3. See
SIC0OUTBUFF[OUTPUT0]
description
7:0 OUTPUT1 RW 0 .times. 0 Output Byte 1: For SI channel 3. See
SIC0OUTBUFF[OUTPUT1]
description
</PRE><BR><BR>SIC3INBUF SI Channel 3 Input Buffer High <BR><BR>Mnemonic:
SIC3INBUFH <BR><BR>Offset: 0x28 <BR><BR>Size 32 bits <PRE> SIC3INBUFH
Bits Mnemonic Type Reset Description
31 ERRSTAT R 0 .times. 0 Error Status: See Description of
SIC0INBUFH[ERRSTAT].
30 ERRLATCH R 0 .times. 0 Error Latch: See Description of
SIC0INBUFH[ERRLATCH].
29:24 INPUT0 R 0 .times. 0 Input Byte 0: See Description of
SIC0INBUFH[INPUT0].
23:16 INPUT1 R 0 .times. 0 Input Byte 1: See Description of
SIC0INBUFH[INPUT1].
15:8 INPUT2 R 0 .times. 0 Input Byte 2: See Description of
SIC0INBUFH[INPUT1]
7:0 INPUT3 R 0 .times. 0 Input Byte 3: See Description of
SIC0INBUFH[INPUT1].
</PRE><BR><BR>SIC3INBUF SI Channel 3 Input Buffer Low <BR><BR>Mnemonic:
SIC3INBUFL <BR><BR>Offset: 0x2C <BR><BR>Size 32 bits <PRE> SIC4INBUFL
Bits Mnemonic Type Reset Description
31:24 INPUT4 R 0 .times. 0 Input Byte 4: See Description of
SIC0INBUFH[INPUT1].
23:16 INPUT5 R 0 .times. 0 Input Byte 5: See Description of
SIC0INBUFH[INPUT1].
15:8 INPUT6 R 0 .times. 0 Input Byte 6: See Description of
SIC0INBUFH[INPUT1].
7:0 INPUT7 R 0 .times. 0 Input Byte 7: See Description of
SIC0INBUFH[INPUT1].
</PRE><BR><BR>SIPOLL SI Poll Register <BR><BR>Mnemonic: SIPOLL <BR><BR>Offset:
0x30 <BR><BR>Size 32 bits <PRE> SIPOLL
Bits Mnemonic Type Reset Description
31:26 R 0 .times. 0 Reserved
25:16 X RW 0 .times. 07 X lines register: determines the
number of horizontal
video lines between polling (the polling
interval).
The polling begins at vsync. 0 .times. 07
is the minimum
setting (determined by the time required to
complete
a single polling of the controller). The
maximum
setting depends on the current video mode
(number of
lines per vsync) and the SIPOLL[Y]
register. This
register takes affect after vsync.
15:8 Y RW 0 .times. 0 Y times register: This register
determines the number
of times the SI controllers are polled in a
single
frame. This register takes affect after
vsync.
7 EN0 RW 0 .times. 0 Enable channel 0: Enable polling of
channel 0.
When the channel is enabled, polling begins
at the
next vblank. When the channel is disabled,
polling is
stopped immediately after the current
transaction.
The status of this bit does not affect
communication
RAM transfers on this channel.
1 = Polling of channel 0 is enabled
0 = Polling of channel 0 is disabled
6 EN1 RW 0 .times. 0 Enable channel 1: See description for
SIPOLL[EN0].
5 EN2 RW 0 .times. 0 Enable channel 2: See Description for
SIPOLL[EN0].
4 EN3 RW 0 .times. 0 Enable channel 3: See Description for
SIPOLL[EN0].
3 VBCPY0 RW 0 .times. 0 Vblank copy output channel 0: Normally
main
processor writes to the SIC0OUTBUF register
are
copied immediately to the channel 0 output
buffer if a
transfer is not currently in progress. When
this bit is
asserted, main processor writes to channel
0's
SIC0OUTBUF will only be copied to the
outbuffer
on vblank. This is used to control the
timing of
commands to 3D LCD shutter glasses
connected to
the VI.
1 = Copy SIC0OUTBUF to output buffer only
on
vblank.
0 = Copy SIC0OUTBUF to output buffer after
writing.
2 VBCPY1 RW 0 .times. 0 Vblank copy output channel 1: See
Description for
SIPOLL[VBCPY0].
1 VBCPY2 RW 0 .times. 0 Vblank copy output channel 2: See
Description for
SIPOLL[VBCPY0].
0 VBCPY3 RW 0 .times. 0 Vblank copy output channel 3: See
Description for
SIPOLL[VBCPY0].
</PRE><BR><BR>SICOMCSR SI Communication Control Status Register
<BR><BR>Mnemonic: SICOMCSR <BR><BR>Offset: 0x34 <BR><BR>Size 32 bits <PRE> SICOMCSR
Bits Mnemonic Type Reset Description
31 TCINT RWC 0 .times. 0 Transfer Complete Interrupt Status
and clear. On
read this bit indicates the current
status of the
communication transfer complete
interrupt. When a
`1` is written to this register, the
interrupt is cleared.
Write:
0 = No effect
1 = Transfer Complete Interrupt
Read:
0 = Transfer Complete Interrupt not
requested
1 = Transfer Complete Interrupt has been
requested
30 TCINTMSK RW 0 .times. 0 Transfer Complete Interrupt Mask:
Interrupt masking
prevents the interrupt from being sent to
the main
processor, but does not affect the
assertion of
SICOMCSR[TCINT]
0 = Interrupt masked
1 = Interrupt enabled
29 COMERR R 0 .times. 0 Communication Error: This indicates
whether the
last SI communication transfer had an
error. See SiSr
for the cause of the error.
0 = No
1 = Error on transfer
28 RDSTINT R 0 .times. 0 Read Status Interrupt Status and
clear. On read this
bit indicates the current status of the
Read Status
interrupt. The interrupt is set whenever
SISR[RDSTn] bits are set. The interrupt
is cleared
when all of the RdSt bits in the SISR are
cleared by
reading from the Si Channel Input
Buffers. This
interrupt can be used to indicate that a
polling transfer
has completed and new data is captured in
the input
registers
Read:
0 = Transfer Complete Interrupt not
requested
1 = Transfer Complete Interrupt has been
requested
27 RDSTINTMSK RW 0 .times. 0 Read Status interrupt Mask:
Interrupt masking
prevents the interrupt from being sent to
the main
processor, but does not affect the
assertion of
SICOMCSR[RDSTINT]
0 = Interrupt masked
1 = Interrupt enabled
26:23 R 0 .times. 0 Reserved
22:16 OUTLNGTH RW 0 .times. 0 Communication Channel Output Length
in bytes.
Minimum transfer is 1 byte. A value of 0
.times. 00 will
transfer 128 bytes. These bits should not
be modified
while SICOM transfer is in progress.
15 R 0 .times. 0 Reserved
14:8 INLNGTH RW 0 .times. 0 Communication Channel Output Length
in bytes.
Minimum transfer is 1 byte. A value of 0
.times. 00 will
transfer 128 bytes. These bits should not
be modified
while SICOM transfer is in progress.
2:1 CHANNEL RW 0 .times. 0 Channel: determines which SI
channel will be used
the communication interface.
00 = Channel 1
01 = Channel 2
10 = Channel 3
11 = Channel 4
These bits should not be modified while
SICOM
transfer is in progress.
0 TSTART RW 0 .times. 0 Transfer Start: When a `1` is
written to this register,
the current communication transfer is
executed. The
transfer begins immediately after the
current
transaction on this channel has
completed. When
read this bit represents the current
transfer status.
Once a communication transfer has been
executed,
polling will resume at the next vblank if
the channel's
SIPOLL[ENn] bit is set.
Write:
0 = Do not start command
1 = Start command
Read:
0 = Command Complete
1 = Command Pending
</PRE><BR><BR>When programming the SICOMCSR after a SICOM transfers has already
started (e.g., SICOMCSR[TSTART] is set), the example software reads the current
value first, then and/or in the proper data and then write the new data back.
The software should not modify any of the transfer parameters (OUTLNGTH,
INLNGTH, CHANNEL) until the current transfer is complete. This is done to
prevent a SICOM transfer already in progress from being disturbed. When writing
the data back, the software should not set the TSTART bit again unless the
current transfer is complete and another transfer is required. <BR><BR>SISI SI
Status Register <BR><BR>Mnemonic: SISR <BR><BR>Offset: 0x38 <BR><BR>Size 32 bits
<PRE> SISR
Bits Mnemonic Type Reset Description
31 WR RW 0 .times. 0 Write SICnOUTBUF Register: This
register controls
and indicates whether the SICnOUTBUFs have
been
copied to the double buffered output buffers.
This bit
is cleared after the buffers have been
copied.
Write
1 = Copy all buffers
0 = No effect
Read
1 = Buffer not copied
0 = Buffer copied
30 R 0 .times. 0 Reserved
29 RDST0 R 0 .times. 0 Read Status SIC0OINBUF Register: This
register
indicates whether the SIC0INBUFs have been
captured new data and whether the data has
already
been read by the main processor (read
indicated by
main processor read of SIC01NBUF[ERRSTAT,
ERRLATCH, INPUT0, INPUT1)]
1 = New data available, not read by main
processor
0 = No new data available, already read by
main
processor
28 WRST0 R 0 .times. 0 Write Status SIC0OUTBUF Register: This
register
indicates whether the SIC0OUTBUFs have been
copied to the double buffered output buffers.
This bit
is cleared after the buffers have been
copied.
1 = Buffer not copied
0 = Buffer copied
27 NOREP0 RWC 0 .times. 0 No Response Error Channel 0: This
register indicates
that a previous transfer resulted in no
response from
the controller. This can also be used to
detect
whether a controller is connected. If no
controller is
connected, this bit will be set. Once set
this bit
remains set until it is cleared by the main
processor.
To clear this bit write `1` to this register.
Write:
0 = No effect
1 = Clear No Response Error
Read:
0 = No Response Error not asserted
1 = No Response Error asserted
26 COLL0 RWC 0 .times. 0 Collision Error Channel 0: This
register indicates
data collision between controller and main
unit.
Once set this bit remains set until it is
cleared by the
main processor. To clear this bit write `1`
to this
register.
Write:
0 = No effect
1 = Clear Collision Error
Read:
0 = Collision Error not asserted
1 = Collision Error asserted
25 OVRUN0 RWC 0 .times. 0 Over Run Error Channel 0: This register
indicates
that the main unit has received more data
than
expected. Once set this bit remains set until
it is
cleared by the main processor. To clear this
bit write
`1' to this register.
Write:
0 = No effect
1 = Clear Over Run Error
Read:
0 = Over Run Error not asserted
1 = Over Run Error asserted
24 UNRUN RWC 0 .times. 0 Under Run Error Channel 0: This
register indicates
that the main unit has received less data
than
expected. Once set this bit remain set until
it is.
cleared by the main processor. To clear this
bit write
`1` to this register.
Write:
0 = No effect
1 = Clear Under Run Error
Read:
0 = Under Run not asserted
1 = Under Run asserted
23:22 R 0 .times. 0 Reserved
21 RDST1 R 0 .times. 0 Read Status SIC1OINBUF Register: See
SISR[RDST0].
20 WRST1 R 0 .times. 0 Write Status SIC0OUTBUF Register: See
SISR[WRST0].
19 NOREP1 RWC 0 .times. 0 No Response Error Channel 1: See
SISR[NOREP0].
18 COLL1 RWC 0 .times. 0 Collision Error Channel 1: See
SISR[COLL0].
17 OVRUN1 RWC 0 .times. 0 Over Run Error Channel 1: See
SISR[OVRUN0].
16 UNRUN1 RWC 0 .times. 0 Under Run Error Channel 1: See
SISR[UNRUN0].
15:14 R 0 .times. 0 Reserved
13 RDST2 R 0 .times. 0 Read Status SIC1OINBUF Register: See
SISR[RDST2].
12 WRST2 R 0 .times. 0 Write Status SIC0OUTBUF Register: See
SISR[WRST2].
11 NOREP2 RWC 0 .times. 0 No Response Error Channel 2: See
SISR[NOREP0].
10 COLL2 RWC 0 .times. 0 Collision Error Channel 2: See
SISR[COLL0].
9 OVRUN2 RWC 0 .times. 0 Over Run Error Channel 2: See
SISR[OVRUN0].
8 UNRUN2 RWC 0 .times. 0 Under Run Error Channel 2: See
SISR[UNRUN0].
7:6 R 0 .times. 0 Reserved
5 RDST3 R 0 .times. 0 Read Status SIC1OINBUF Register: See
SISR[RDST2].
4 WRST3 R 0 .times. 0 Write Status SIC0OUTBUF Register: See
SISR[WRST2].
3 NOREP3 RWC 0 .times. 0 No Response Error Channel 3: See
SISR[NOREP0].
2 COLL3 RWC 0 .times. 0 Collision Error Channel 3: See
SISR[COLL0].
1 OVRUN3 RWC 0 .times. 0 Over Run Error Channel 3: See
SISR[OVRUN0].
0 UNRUN3 RWC 0 .times. 0 Under Run Error Channel 3: See
SISR[UNRUN0].
</PRE><BR><BR>SIEXILK SI EXI Clock Lock <BR><BR>Mnemonic: SIEXILK
<BR><BR>Offset: Ox3C <BR><BR>Size 32 bits <PRE> SIEXILK
Bits Mnemonic Type Reset Description
31 LOCK RW 0 .times. 1 Lock: This bit prevents the main
processor from setting the EXI clock
frequencies to 32 MHz.
0 = EXI Clocks Unlocked, 32 MHz
EXICLK setting permitted.
1 = EXI Clock Locked, 32 MHz
EXICLK setting not permitted.
30:0 R 0 .times. 0 Reserved
</PRE><BR><BR>FIG. 8D is an even more detailed overall view of
<B><I>serial</I></B> interface 1000 showing the details of <B><I>serial</I></B>
interface communication circuitry and registers 1012. Controllers 52a and 52b
(and 52c and 52d, if present) are connected to game console 54 via connector
ports 1002. Modem 1404 modulates and demodulates data transferred between the
controllers and the console. In the example system, communication between the
console and the controllers uses duty-cycle (pulse-width) modulation and the
data is communicated over one line. The communication is half-duplex. The byte
transfer order is "big-endian" in which within a given multi-byte numeric
representation, the most significant byte has the lowest address (i.e., the data
is transferred "big-end" first). Controller input/output buffer 1016 is used for
normal data transfers involving controllers 52a-52d. As shown in FIG. 8D,
input/output buffer 1016 is arranged as a double buffer. Communication RAM 1014
is provided for use in variable-size data transfers to and from controllers
52a-52d. In the example system, the maximum data size of these variable-size
data transfers is 32 words. Of course, the present invention is not limited in
this respect. Channel selector circuit 1408 controls selectors 1412a-1412d to
selectively connect modem 1404 to either communication RAM 1014 or input/output
buffer 1016. An HV counter latch circuit 1406 latches the screen position of a
flash signal when a trigger input is received from a light gun unit. In the
example system shown in FIG. 8, triggers inputs to the HV counter latch circuit
1406 are provided for connectors 1 and 2 only. It will be apparent that trigger
inputs may be provided for the other connectors if desired. HV counter latch
circuit 1406 may also be used with light pens connected to connectors 1 and/or
2. <BR><BR>Additional details of the <B><I>serial</I></B> interface may be found
in application Ser. No. 09/722,664 filed Nov. 28, 2000 of Shimuzu et al.
entitled "Controller Interface for a Graphics System", the contents of which are
incorporated herein. <BR>
<br><hr>
<br><i>
Cut from USPTO #6609977<br>
<a href="mailto:ogamespec@gmail.com">org - ogamespec@gmail.com</a></i>
</body>
</html>