Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Clarify that setting SC bit 7 is mandatory on slave to accept a Serial Data Transfer #556

Merged
merged 2 commits into from
Jul 2, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 6 additions & 9 deletions src/Serial_Data_Transfer_(Link_Cable).md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,8 @@
Communication between two Game Boy systems happens one byte at a time. One
Game Boy generates a clock signal internally and thus controls when the
exchange happens. In SPI terms, the Game Boy generating the clock is
called the "master." The other one uses an external clock (receiving
it from the other Game Boy) and has no control over when the
transfer happens. If it hasn't gotten around to loading up the next
called the "master" while the other one (the "slave" Game Boy) receives it.
If it hasn't gotten around to loading up the next
data byte at the time the transfer begins, the last one will go out
again. Alternately, if it's ready to send the next byte but the last
one hasn't gone out yet, it has no choice but to wait.
Expand Down Expand Up @@ -46,12 +45,10 @@ that the transfer is complete in two ways: SC's Bit 7 will be cleared
(that is, SC will be set up \$01), and also a [Serial interrupt](<#INT $58 — Serial interrupt>)
will be requested.

The other Game Boy will load up a data byte and can optionally set SC's
Bit 7 (that is, SC=\$80). Regardless of whether or not it has done this, if
and when the master wants to conduct a transfer, it will happen
(pulling whatever happens to be in SB at that time). The externally clocked
The other Game Boy will load up a data byte and has to set SC's
Bit 7 (that is, SC=\$80) to enable the serial port. The externally clocked
Game Boy will have a [serial interrupt](<#INT $58 — Serial interrupt>) requested at the end of the
transfer, and if it bothered to set SC's Bit 7, it will be cleared.
transfer, and SC's Bit 7 will be cleared.

### Internal Clock

Expand Down Expand Up @@ -108,7 +105,7 @@ two Game Boy systems could switch between internal and external clock for each
transferred byte to ensure synchronization.

Transfer is initiated when the master Game Boy sets its Transfer
Start Flag, regardless of the value of this flag on the other device.
Start Flag.
This bit is automatically set to 0 (on both) at the end of transfer.
Reading this bit can be used to determine if the transfer is still
active.
Loading