You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: src/part2/serial-link.md
+6-2Lines changed: 6 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -39,7 +39,8 @@ Idle time is used to read received data, configure the port if needed, and load
39
39
40
40
Before we can transfer any data, we need to configure the *clock source* of both Game Boys.
41
41
To synchronise the two devices, one Game Boy must provide the clock signal that both will use.
42
-
Setting bit 0 of the **Serial Control** register (`SC`) enables the Game Boy's *internal* serial clock, and makes it the clock provider.
42
+
Setting bit 0 of the [Serial Control register](https://gbdev.io/pandocs/Serial_Data_Transfer_(Link_Cable).html#ff02--sc-serial-transfer-control) (`rSC` as it's defined in hardware.inc)
43
+
enables the Game Boy's *internal* serial clock, and makes it the clock provider.
43
44
The other Game Boy must have its clock source set to *external* (`SC` bit 0 cleared).
44
45
The externally clocked Game Boy will receive the clock signal via the link cable.
45
46
@@ -355,6 +356,9 @@ Finally, implement the checksum:
355
356
The checksum implemented here has been kept very simple for this tutorial.
356
357
It's probably worth looking into better solutions for real-world projects.
357
358
359
+
Check Ben Eater's lessons on [Reliable Data Transmission](https://www.youtube.com/watch?v=eq5YpKHXJDM),
360
+
[Error Detection: Parity Checking](https://www.youtube.com/watch?v=MgkhrBSjhag), [Checksums and Hamming Distance](https://www.youtube.com/watch?v=ppU41c15Xho),
361
+
[How Do CRCs Work?](https://www.youtube.com/watch?v=izG7qT0EpBw) to explore further this topic.
358
362
:::
359
363
360
364
@@ -424,7 +428,7 @@ Copy this code (it needs to be exact) to `main.asm`, just above the `"Header"` s
424
428
A proper and complete explanation of this is beyond the scope of this lesson.
425
429
You can continue the lesson understanding that:
426
430
- This is the serial interrupt handler. It gets called automatically after each serial transfer.
427
-
- The relevant stuff is in `SioPortEnd` but it's necessary to jump through some hoops to call it.
431
+
- The significant implementation is in `SioPortEnd` but it's necessary to jump through some hoops to call it.
428
432
429
433
A detailed and rather dense explanation is included for completeness.
0 commit comments