shithub: pokecrystal

Download patch

ref: 0c6338836d714f464bfcaa0c8c5b8c76e6f4958d
parent: 52993d20efd5315c9d3e2e684a84456783717fc8
author: Remy Oukaour <remy.oukaour@gmail.com>
date: Fri Jan 19 09:49:43 EST 2018

Resolve #471 (although link code still needs more cleanup, like its WRAM labels)

--- a/constants/serial_constants.asm
+++ b/constants/serial_constants.asm
@@ -6,7 +6,25 @@
 	const LINK_COLOSSEUM   ; 3
 	const LINK_MOBILE      ; 4
 
-
+; hSerialReceive high nybbles
 SERIAL_TIMECAPSULE EQU $60
 SERIAL_TRADECENTER EQU $70
 SERIAL_BATTLE      EQU $80
+
+ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK EQU $01
+ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK EQU $02
+
+START_TRANSFER_EXTERNAL_CLOCK EQU $80 ; 1 << rSC_ON
+START_TRANSFER_INTERNAL_CLOCK EQU $81 ; (1 << rSC_ON) | 1
+
+; hSerialConnectionStatus
+USING_EXTERNAL_CLOCK       EQU $01
+USING_INTERNAL_CLOCK       EQU $02
+CONNECTION_NOT_ESTABLISHED EQU $ff
+
+; signals the start of an array of bytes transferred over the link cable
+SERIAL_PREAMBLE_BYTE              EQU $fd
+; this byte is used when there is no data to send
+SERIAL_NO_DATA_BYTE               EQU $fe
+; signals the end of one part of a patch list (there are two parts) for player/enemy party data
+SERIAL_PATCH_LIST_PART_TERMINATOR EQU $ff
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -26,7 +26,7 @@
 	and a
 	jr z, .not_linked
 
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $2
 	jr z, .player_2
 
@@ -97,7 +97,7 @@
 	ld a, [wLinkMode]
 	and a
 	jr z, .not_linked_2
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $2
 	jr nz, .not_linked_2
 	xor a
@@ -251,7 +251,7 @@
 ; 3c1d6
 
 HandleBetweenTurnEffects: ; 3c1d6
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .CheckEnemyFirst
 	call CheckFaint_PlayerThenEnemy
@@ -350,7 +350,7 @@
 ; 3c27c
 
 HandleBerserkGene: ; 3c27c
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .reverse
 
@@ -458,7 +458,7 @@
 	ld a, [wPlayerAction]
 	cp $2
 	jr nz, .switch
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $2
 	jr z, .player_2
 
@@ -515,7 +515,7 @@
 	jp .enemy_first
 
 .both_have_quick_claw
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $2
 	jr z, .player_2b
 	call BattleRandom
@@ -545,7 +545,7 @@
 	jp .enemy_first
 
 .speed_tie
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $2
 	jr z, .player_2c
 	call BattleRandom
@@ -709,7 +709,7 @@
 ; 3c4df
 
 HandleEncore: ; 3c4df
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player_1
 	call .do_player
@@ -1161,7 +1161,7 @@
 ; 3c801
 
 HandlePerishSong: ; 3c801
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .EnemyFirst
 	call SetPlayerTurn
@@ -1230,7 +1230,7 @@
 ; 3c874
 
 HandleWrap: ; 3c874
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .EnemyFirst
 	call SetPlayerTurn
@@ -1302,7 +1302,7 @@
 ; 3c8eb
 
 HandleLeftovers: ; 3c8eb
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .DoEnemyFirst
 	call SetPlayerTurn
@@ -1352,7 +1352,7 @@
 ; 3c93c
 
 HandleMysteryberry: ; 3c93c
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .DoEnemyFirst
 	call SetPlayerTurn
@@ -1491,7 +1491,7 @@
 ; 3ca26
 
 HandleFutureSight: ; 3ca26
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .enemy_first
 	call SetPlayerTurn
@@ -1550,7 +1550,7 @@
 ; 3ca8f
 
 HanleDefrost: ; 3ca8f
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .enemy_first
 	call .do_player_turn
@@ -1610,7 +1610,7 @@
 ; 3cafb
 
 HandleSafeguard: ; 3cafb
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player1
 	call .CheckPlayer
@@ -1647,7 +1647,7 @@
 	jp StdBattleTextBox
 
 HandleScreens: ; 3cb36
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp 1
 	jr z, .Both
 	call .CheckPlayer
@@ -1731,7 +1731,7 @@
 	cp WEATHER_SANDSTORM
 	ret nz
 
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp 1
 	jr z, .enemy_first
 
@@ -2115,7 +2115,7 @@
 ; 3cdca
 
 DoubleSwitch: ; 3cdca
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player_1
 	call ClearSprites
@@ -4350,7 +4350,7 @@
 ; 3dcf9
 
 HandleHealingItems: ; 3dcf9
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player_1
 	call SetPlayerTurn
@@ -4595,7 +4595,7 @@
 
 HandleStatBoostingHeldItems: ; 3de97
 ; The effects handled here are not used in-game.
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player_1
 	call .DoPlayer
@@ -5374,7 +5374,7 @@
 	ret
 
 .dont_run
-	ld a, [hLinkPlayerNumber]
+	ld a, [hSerialConnectionStatus]
 	cp $1
 	jr z, .player_1
 	call BattleMonEntrance
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -28,9 +28,9 @@
 	call SetTradeRoomBGPals
 	call WaitBGMap2
 	ld hl, wcf5d
-	xor a
+	xor a ; LOW($5000)
 	ld [hli], a
-	ld [hl], $50
+	ld [hl], HIGH($5000)
 	ld a, [wLinkMode]
 	cp LINK_TIMECAPSULE
 	jp nz, Gen2ToGen2LinkComms
@@ -42,29 +42,31 @@
 	xor a
 	ld [wPlayerLinkAction], a
 	call WaitLinkTransfer
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr nz, .player_1
+
 	ld c, 3
 	call DelayFrames
 	xor a
 	ld [hSerialSend], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
+
 	call DelayFrame
 	xor a
 	ld [hSerialSend], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 
 .player_1
 	ld de, MUSIC_NONE
 	call PlayMusic
-	ld c, $3
+	ld c, 3
 	call DelayFrames
 	xor a
 	ld [rIF], a
@@ -73,19 +75,19 @@
 	ld hl, wd1f3
 	ld de, EnemyMonSpecies
 	ld bc, $11
-	call Function75f
-	ld a, $fe
+	call Serial_ExchangeBytes
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 	ld hl, wLinkData
 	ld de, OTPlayerName
 	ld bc, $1a8
-	call Function75f
-	ld a, $fe
+	call Serial_ExchangeBytes
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 	ld hl, wMisc
 	ld de, wPlayerTrademonSpecies
 	ld bc, wPlayerTrademonSpecies - wMisc
-	call Function75f
+	call Serial_ExchangeBytes
 	xor a
 	ld [rIF], a
 	ld a, $1d
@@ -107,25 +109,25 @@
 	call Link_CopyOTData
 	ld de, wPlayerTrademonSpecies
 	ld hl, wTimeCapsulePartyMon1Species
-	ld c, $2
+	ld c, 2
 .loop
 	ld a, [de]
 	inc de
 	and a
 	jr z, .loop
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .loop
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop
-	cp $ff
+	cp SERIAL_PATCH_LIST_PART_TERMINATOR
 	jr z, .next
 	push hl
 	push bc
-	ld b, $0
+	ld b, 0
 	dec a
 	ld c, a
 	add hl, bc
-	ld a, $fe
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [hl], a
 	pop bc
 	pop hl
@@ -168,8 +170,8 @@
 	ld [wUnusedD102 + 1], a
 	ld de, MUSIC_NONE
 	call PlayMusic
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	ld c, 66
 	call z, DelayFrames
 	ld de, MUSIC_ROUTE_30
@@ -185,23 +187,25 @@
 	ld a, [ScriptVar]
 	and a
 	jp z, LinkTimeout
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr nz, .Player1
+
 	ld c, 3
 	call DelayFrames
 	xor a
 	ld [hSerialSend], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
+
 	call DelayFrame
 	xor a
 	ld [hSerialSend], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 
 .Player1:
@@ -216,19 +220,19 @@
 	ld hl, wd1f3
 	ld de, EnemyMonSpecies
 	ld bc, $11
-	call Function75f
-	ld a, $fe
+	call Serial_ExchangeBytes
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 	ld hl, wLinkData
 	ld de, OTPlayerName
 	ld bc, $1c2
-	call Function75f
-	ld a, $fe
+	call Serial_ExchangeBytes
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [de], a
 	ld hl, wMisc
 	ld de, wPlayerTrademonSpecies
 	ld bc, $c8
-	call Function75f
+	call Serial_ExchangeBytes
 	ld a, [wLinkMode]
 	cp LINK_TRADECENTER
 	jr nz, .not_trading
@@ -235,7 +239,7 @@
 	ld hl, wc9f4
 	ld de, wcb84
 	ld bc, $186
-	call Function283f2
+	call ExchangeBytes
 
 .not_trading
 	xor a
@@ -252,25 +256,25 @@
 	call Link_CopyOTData
 	ld de, wPlayerTrademonSpecies
 	ld hl, wLinkPlayerPartyMon1Species
-	ld c, $2
+	ld c, 2
 .loop1
 	ld a, [de]
 	inc de
 	and a
 	jr z, .loop1
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .loop1
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop1
-	cp $ff
+	cp SERIAL_PATCH_LIST_PART_TERMINATOR
 	jr z, .next1
 	push hl
 	push bc
-	ld b, $0
+	ld b, 0
 	dec a
 	ld c, a
 	add hl, bc
-	ld a, $fe
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [hl], a
 	pop bc
 	pop hl
@@ -286,13 +290,13 @@
 	ld hl, wcb84
 .loop2
 	ld a, [hli]
-	cp $20
+	cp MAIL_MSG_LENGTH
 	jr nz, .loop2
 .loop3
 	ld a, [hli]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop3
-	cp $20
+	cp MAIL_MSG_LENGTH
 	jr z, .loop3
 	dec hl
 	ld de, wcb84
@@ -302,9 +306,9 @@
 	ld bc, $c6 ; 198
 .loop4
 	ld a, [hl]
-	cp $21
+	cp MAIL_MSG_LENGTH + 1
 	jr nz, .okay1
-	ld [hl], $fe
+	ld [hl], SERIAL_NO_DATA_BYTE
 .okay1
 	inc hl
 	dec bc
@@ -315,7 +319,7 @@
 .loop5
 	ld a, [de]
 	inc de
-	cp $ff
+	cp SERIAL_PATCH_LIST_PART_TERMINATOR
 	jr z, .start_copying_mail
 	ld hl, wcc4a
 	dec a
@@ -322,7 +326,7 @@
 	ld b, $0
 	ld c, a
 	add hl, bc
-	ld [hl], $fe
+	ld [hl], SERIAL_NO_DATA_BYTE
 	jr .loop5
 
 .start_copying_mail
@@ -395,7 +399,7 @@
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	ld de, OTPartyCount
-	ld bc, 8
+	ld bc, 1 + PARTY_LENGTH + 1
 	call CopyBytes
 	ld de, OTPlayerID
 	ld bc, 2
@@ -409,8 +413,8 @@
 	ld [wUnusedD102 + 1], a
 	ld de, MUSIC_NONE
 	call PlayMusic
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	ld c, 66
 	call z, DelayFrames
 	ld a, [wLinkMode]
@@ -423,8 +427,8 @@
 	ld hl, Options
 	ld a, [hl]
 	push af
-	and $20
-	or $3
+	and 1 << STEREO
+	or TEXT_DELAY_MED
 	ld [hl], a
 	ld hl, OTPlayerName
 	ld de, OTClassName
@@ -510,21 +514,21 @@
 	db "@"
 ; 0x283f2
 
-Function283f2: ; 283f2
-	ld a, $1
-	ld [hFFCC], a
+ExchangeBytes: ; 283f2
+	ld a, TRUE
+	ld [hSerialIgnoringInitialData], a
 .loop
 	ld a, [hl]
 	ld [hSerialSend], a
-	call Function78a
+	call Serial_ExchangeByte
 	push bc
 	ld b, a
 	inc hl
-	ld a, $30
+	ld a, 48
 .delay_cycles
 	dec a
 	jr nz, .delay_cycles
-	ld a, [hFFCC]
+	ld a, [hSerialIgnoringInitialData]
 	and a
 	ld a, b
 	pop bc
@@ -531,7 +535,7 @@
 	jr z, .load
 	dec hl
 	xor a
-	ld [hFFCC], a
+	ld [hSerialIgnoringInitialData], a
 	jr .loop
 
 .load
@@ -563,7 +567,7 @@
 
 FixDataForLinkTransfer: ; 28434
 	ld hl, wd1f3
-	ld a, $fd
+	ld a, SERIAL_PREAMBLE_BYTE
 	ld b, LinkBattleRNs - wd1f3
 .loop1
 	ld [hli], a
@@ -572,13 +576,13 @@
 	ld b, TempEnemyMonSpecies - LinkBattleRNs
 .loop2
 	call Random
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr nc, .loop2
 	ld [hli], a
 	dec b
 	jr nz, .loop2
 	ld hl, wMisc
-	ld a, $fd
+	ld a, SERIAL_PREAMBLE_BYTE
 	ld [hli], a
 	ld [hli], a
 	ld [hli], a
@@ -594,7 +598,7 @@
 .loop4
 	inc c
 	ld a, c
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .next1
 	ld a, b
 	dec a
@@ -613,16 +617,16 @@
 .next2
 	inc hl
 	ld a, [hl]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr nz, .loop4
 	ld a, c
 	ld [de], a
 	inc de
-	ld [hl], $ff
+	ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
 	jr .loop4
 
 .next1
-	ld a, $ff
+	ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
 	ld [de], a
 	inc de
 	lb bc, 1, 0
@@ -629,7 +633,7 @@
 	jr .loop4
 
 .done
-	ld a, $ff
+	ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
 	ld [de], a
 	ret
 ; 28499
@@ -636,8 +640,8 @@
 
 Link_PrepPartyData_Gen1: ; 28499
 	ld de, wLinkData
-	ld a, $fd
-	ld b, 6
+	ld a, SERIAL_PREAMBLE_BYTE
+	ld b, PARTY_LENGTH
 .loop1
 	ld [de], a
 	inc de
@@ -804,8 +808,8 @@
 
 Link_PrepPartyData_Gen2: ; 28595
 	ld de, wLinkData
-	ld a, $fd
-	ld b, 6
+	ld a, SERIAL_PREAMBLE_BYTE
+	ld b, PARTY_LENGTH
 .loop1
 	ld [de], a
 	inc de
@@ -907,7 +911,7 @@
 	ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail)
 .loop5
 	ld a, [hl]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr nz, .skip2
 	ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail
 
@@ -924,9 +928,9 @@
 .loop6
 	inc c
 	ld a, [hl]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr nz, .skip3
-	ld [hl], $ff
+	ld [hl], SERIAL_PATCH_LIST_PART_TERMINATOR
 	ld a, c
 	ld [de], a
 	inc de
@@ -935,13 +939,13 @@
 	inc hl
 	dec b
 	jr nz, .loop6
-	ld a, $ff
+	ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
 	ld [de], a
 	ret
 ; 28682
 
 Function28682: ; 28682
-	ld c, $5
+	ld c, 5
 .loop
 	ld [de], a
 	inc de
@@ -1129,7 +1133,7 @@
 Link_CopyOTData: ; 2879e
 .loop
 	ld a, [hli]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop
 	ld [de], a
 	inc de
@@ -1141,8 +1145,8 @@
 ; 287ab
 
 Link_CopyRandomNumbers: ; 287ab
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	ret z
 	ld hl, EnemyMonSpecies
 	call Link_FindFirstNonControlCharacter_AllowZero
@@ -1150,9 +1154,9 @@
 	ld c, 10
 .loop
 	ld a, [hli]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .loop
 	ld [de], a
 	inc de
@@ -1166,9 +1170,9 @@
 	ld a, [hli]
 	and a
 	jr z, .loop
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .loop
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop
 	dec hl
 	ret
@@ -1177,9 +1181,9 @@
 Link_FindFirstNonControlCharacter_AllowZero: ; 287d8
 .loop
 	ld a, [hli]
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr z, .loop
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	jr z, .loop
 	dec hl
 	ret
@@ -1219,7 +1223,7 @@
 	ld [wMenuCursorX], a
 	ln a, 1, 0
 	ld [w2DMenuCursorOffsets], a
-	ld a, $20
+	ld a, MENU_UNUSED_3
 	ld [w2DMenuFlags1], a
 	xor a
 	ld [w2DMenuFlags2], a
@@ -1231,7 +1235,7 @@
 	jp z, LinkTradePartiesMenuMasterLoop
 	bit A_BUTTON_F, a
 	jr z, .not_a_button
-	ld a, $1
+	ld a, INIT_ENEMYOT_LIST
 	ld [wInitListType], a
 	callfar InitList
 	ld hl, OTPartyMon1Species
@@ -1284,7 +1288,7 @@
 	ld [wMenuCursorX], a
 	ln a, 1, 0
 	ld [w2DMenuCursorOffsets], a
-	ld a, $20
+	ld a, MENU_UNUSED_3
 	ld [w2DMenuFlags1], a
 	xor a
 	ld [w2DMenuFlags2], a
@@ -1424,7 +1428,7 @@
 .show_stats
 	pop af
 	ld [wMenuCursorY], a
-	ld a, $4
+	ld a, INIT_PLAYEROT_LIST
 	ld [wInitListType], a
 	callfar InitList
 	farcall LinkMonStatsScreen
@@ -1478,7 +1482,7 @@
 	ld a, [wd003]
 	ld hl, OTPartySpecies
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld a, [hl]
 	ld [wd265], a
@@ -1583,9 +1587,9 @@
 	xor a
 	ld [rSB], a
 	ld [hSerialSend], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 	ret
 ; 28b42
@@ -1639,14 +1643,14 @@
 	ld [wcf57], a
 	ld [wOtherPlayerLinkAction], a
 	hlcoord 0, 12
-	ld b, $4
-	ld c, $12
+	ld b, 4
+	ld c, 18
 	call LinkTextboxAtHL
 	farcall Link_WaitBGMap
 	ld a, [wd002]
 	ld hl, PartySpecies
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld a, [hl]
 	ld [wd265], a
@@ -1658,7 +1662,7 @@
 	ld a, [wd003]
 	ld hl, OTPartySpecies
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld a, [hl]
 	ld [wd265], a
@@ -1749,7 +1753,7 @@
 .asm_28c96
 	inc c
 	ld a, c
-	cp $6
+	cp PARTY_LENGTH
 	jr z, .asm_28ca6
 	push bc
 	ld bc, MAIL_STRUCT_LENGTH
@@ -1778,7 +1782,7 @@
 	call CopyBytes
 	ld a, [wd002]
 	ld hl, PartySpecies
-	ld b, $0
+	ld b, 0
 	ld c, a
 	add hl, bc
 	ld a, [hl]
@@ -1818,7 +1822,7 @@
 	call CopyBytes
 	ld a, [wd003]
 	ld hl, OTPartySpecies
-	ld b, $0
+	ld b, 0
 	ld c, a
 	add hl, bc
 	ld a, [hl]
@@ -1854,7 +1858,7 @@
 	ld a, [wd002]
 	ld [CurPartyMon], a
 	ld hl, PartySpecies
-	ld b, $0
+	ld b, 0
 	ld c, a
 	add hl, bc
 	ld a, [hl]
@@ -1865,12 +1869,12 @@
 	ld a, [PartyCount]
 	dec a
 	ld [CurPartyMon], a
-	ld a, $1
+	ld a, TRUE
 	ld [wForceEvolution], a
 	ld a, [wd003]
 	push af
 	ld hl, OTPartySpecies
-	ld b, $0
+	ld b, 0
 	ld c, a
 	add hl, bc
 	ld a, [hl]
@@ -1881,8 +1885,8 @@
 	call LoadFontsBattleExtra
 	ld b, SCGB_DIPLOMA
 	call GetSGBLayout
-	ld a, [hLinkPlayerNumber]
-	cp $1
+	ld a, [hSerialConnectionStatus]
+	cp USING_EXTERNAL_CLOCK
 	jr z, .player_2
 	predef TradeAnimation
 	jr .done_animation
@@ -1895,7 +1899,7 @@
 	ld c, a
 	ld [CurPartyMon], a
 	ld hl, OTPartySpecies
-	ld d, $0
+	ld d, 0
 	ld e, a
 	add hl, de
 	ld a, [hl]
@@ -1936,7 +1940,7 @@
 	ld a, b
 	ld [wPlayerLinkAction], a
 	push bc
-	call Function862
+	call Serial_PrintWaitingTextAndSyncAndExchangeNybble
 	pop bc
 	ld a, [wLinkMode]
 	cp LINK_TIMECAPSULE
@@ -2113,7 +2117,7 @@
 	sub b
 	ld c, a
 	inc c
-	ld b, $0
+	ld b, 0
 	ld hl, PartyCount
 	add hl, bc
 	ld a, [hl]
@@ -2140,13 +2144,13 @@
 	ld c, 3
 	call DelayFrames
 	ld a, -1
-	ld [hLinkPlayerNumber], a
+	ld [hSerialConnectionStatus], a
 	xor a
 	ld [rSB], a
 	ld [hSerialReceive], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 	ld c, 3
 	call DelayFrames
@@ -2153,11 +2157,11 @@
 	xor a
 	ld [rSB], a
 	ld [hSerialReceive], a
-	ld a, $0
+	ld a, (0 << rSC_ON) | 0
 	ld [rSC], a
-	ld a, $80
+	ld a, (1 << rSC_ON) | 0
 	ld [rSC], a
-	ld c, $3
+	ld c, 3
 	call DelayFrames
 	xor a
 	ld [rSB], a
@@ -2166,7 +2170,7 @@
 	ld c, 3
 	call DelayFrames
 	ld a, -1
-	ld [hLinkPlayerNumber], a
+	ld [hSerialConnectionStatus], a
 	ld a, [rIF]
 	push af
 	xor a
@@ -2203,9 +2207,9 @@
 	ld [rSB], a
 	xor a
 	ld [hSerialReceive], a
-	ld a, $0
+	ld a, (0 << rSC_ON) | 0
 	ld [rSC], a
-	ld a, $80
+	ld a, (1 << rSC_ON) | 0
 	ld [rSC], a
 	xor a ; LINK_TIMECAPSULE - 1
 	ld [wPlayerLinkAction], a
@@ -2221,9 +2225,9 @@
 	ld [rSB], a
 	xor a
 	ld [hSerialReceive], a
-	ld a, $0
+	ld a, (0 << rSC_ON) | 0
 	ld [rSC], a
-	ld a, $80
+	ld a, (1 << rSC_ON) | 0
 	ld [rSC], a
 	call DelayFrame
 	call DelayFrame
@@ -2235,20 +2239,20 @@
 	ld a, $ff
 	ld [wLinkTimeoutFrames], a
 .loop
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr z, .connected
-	cp $1
+	cp USING_EXTERNAL_CLOCK
 	jr z, .connected
-	ld a, -1
-	ld [hLinkPlayerNumber], a
+	ld a, CONNECTION_NOT_ESTABLISHED
+	ld [hSerialConnectionStatus], a
 	ld a, $2
 	ld [rSB], a
 	xor a
 	ld [hSerialReceive], a
-	ld a, $0
+	ld a, (0 << rSC_ON) | 0
 	ld [rSC], a
-	ld a, $80
+	ld a, (1 << rSC_ON) | 0
 	ld [rSC], a
 	ld a, [wLinkTimeoutFrames]
 	dec a
@@ -2262,9 +2266,9 @@
 .not_done
 	ld a, $1
 	ld [rSB], a
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 	call DelayFrame
 	jr .loop
@@ -2357,7 +2361,7 @@
 
 Link_CheckCommunicationError: ; 29e0c
 	xor a
-	ld [hFFCA], a
+	ld [hSerialReceivedNewData], a
 	ld a, [wLinkTimeoutFrames]
 	ld h, a
 	ld a, [wLinkTimeoutFrames + 1]
@@ -2409,7 +2413,7 @@
 
 .ConvertDW: ; 29e53
 	; [wLinkTimeoutFrames] = ((hl - $100) / 4) + $100
-	;         = (hl / 4) + $c0
+	;                      = (hl / 4) + $c0
 	dec h
 	srl h
 	rr l
@@ -2427,9 +2431,9 @@
 	ld a, [wd265]
 	push af
 	farcall Link_SaveGame
-	ld a, $1
+	ld a, TRUE
 	jr nc, .return_result
-	xor a
+	xor a ; FALSE
 .return_result
 	ld [ScriptVar], a
 	ld c, 30
@@ -2456,12 +2460,12 @@
 	ld [wLinkMode], a
 	xor a
 	ld [hVBlank], a
-	ld a, $1
+	ld a, TRUE
 	ld [ScriptVar], a
 	ret
 
 .fail
-	xor a
+	xor a ; FALSE
 	ld [ScriptVar], a
 	ret
 ; 29eaf
@@ -2517,8 +2521,8 @@
 Link_ResetSerialRegistersAfterLinkClosure: ; 29f04
 	ld c, 3
 	call DelayFrames
-	ld a, -1
-	ld [hLinkPlayerNumber], a
+	ld a, CONNECTION_NOT_ESTABLISHED
+	ld [hSerialConnectionStatus], a
 	ld a, $2
 	ld [rSB], a
 	xor a
@@ -2536,7 +2540,7 @@
 	call DelayFrame
 	call DelayFrame
 .receive_loop
-	call Function83b
+	call Serial_ExchangeLinkMenuSelection
 	ld a, [wOtherPlayerLinkMode]
 	ld b, a
 	and $f0
@@ -2557,11 +2561,11 @@
 ; 29f47
 
 Special_CableClubCheckWhichChris: ; 29f47
-	ld a, [hLinkPlayerNumber]
-	cp $1
-	ld a, $1
+	ld a, [hSerialConnectionStatus]
+	cp USING_EXTERNAL_CLOCK
+	ld a, TRUE
 	jr z, .yes
-	dec a
+	dec a ; FALSE
 
 .yes
 	ld [ScriptVar], a
@@ -2575,7 +2579,7 @@
 Unreferenced_Function29fe4:
 	ld a, BANK(sPartyMail)
 	call GetSRAMBank
-	ld d, $0
+	ld d, FALSE
 	ld b, CHECK_FLAG
 	predef SmallFarFlagAction
 	call CloseSRAM
--- a/engine/link_2.asm
+++ b/engine/link_2.asm
@@ -56,7 +56,7 @@
 
 .PlaceBorder: ; 4d37e
 	push hl
-	ld a, $76
+	ld a, "ぁ" ; $76
 	ld [hli], a
 	inc a
 	call .PlaceRow
--- a/engine/link_trade.asm
+++ b/engine/link_trade.asm
@@ -139,7 +139,7 @@
 
 LinkComms_LoadPleaseWaitTextboxBorderGFX: ; 16d69a
 	ld de, LinkCommsBorderGFX + $30 tiles
-	ld hl, vTiles2 tile $76
+	ld hl, vTiles2 tile "ぁ"
 	lb bc, BANK(LinkCommsBorderGFX), 8
 	call Get2bpp
 	ret
--- a/home/init.asm
+++ b/home/init.asm
@@ -32,7 +32,7 @@
 .load
 	ld [hCGB], a
 	ld a, $1
-	ld [hFFEA], a
+	ld [hSystemBooted], a
 ; 17d
 
 
@@ -84,7 +84,7 @@
 ; Clear HRAM
 	ld a, [hCGB]
 	push af
-	ld a, [hFFEA]
+	ld a, [hSystemBooted]
 	push af
 	xor a
 	ld hl, HRAM_Begin
@@ -91,7 +91,7 @@
 	ld bc, HRAM_End - HRAM_Begin
 	call ByteFill
 	pop af
-	ld [hFFEA], a
+	ld [hSystemBooted], a
 	pop af
 	ld [hCGB], a
 
@@ -137,7 +137,7 @@
 	ld [rLCDC], a
 
 	ld a, -1
-	ld [hLinkPlayerNumber], a
+	ld [hSerialConnectionStatus], a
 
 	farcall InitCGBPals
 
--- a/home/map.asm
+++ b/home/map.asm
@@ -1352,7 +1352,7 @@
 	dec c
 	jr nz, .loop
 	ld a, SCREEN_WIDTH
-	ld [hFFDC], a
+	ld [hBGMapTileCount], a
 	ret
 ; 27f8
 
@@ -1379,7 +1379,7 @@
 	dec c
 	jr nz, .loop
 	ld a, SCREEN_HEIGHT
-	ld [hFFDC], a
+	ld [hBGMapTileCount], a
 	ret
 ; 2816
 
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -14,9 +14,9 @@
 	bit 0, a
 	jr nz, .printer
 
-	ld a, [hLinkPlayerNumber]
-	inc a ; is it equal to -1?
-	jr z, .init_player_number
+	ld a, [hSerialConnectionStatus]
+	inc a ; is it equal to CONNECTION_NOT_ESTABLISHED?
+	jr z, .establish_connection
 
 	ld a, [rSB]
 	ld [hSerialReceive], a
@@ -24,8 +24,8 @@
 	ld a, [hSerialSend]
 	ld [rSB], a
 
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr z, .player2
 
 	ld a, 0 << rSC_ON
@@ -42,22 +42,22 @@
 	call PrinterReceive
 	jr .end
 
-.init_player_number
+.establish_connection
 	ld a, [rSB]
-	cp $1
+	cp USING_EXTERNAL_CLOCK
 	jr z, .player1
-	cp $2
+	cp USING_INTERNAL_CLOCK
 	jr nz, .player2
 
 .player1
 	ld [hSerialReceive], a
-	ld [hLinkPlayerNumber], a
-	cp $2
+	ld [hSerialConnectionStatus], a
+	cp USING_INTERNAL_CLOCK
 	jr z, ._player2
 
 	xor a
 	ld [rSB], a
-	ld a, $3
+	ld a, 3
 	ld [rDIV], a
 
 .wait_bit_7
@@ -76,9 +76,9 @@
 	ld [rSB], a
 
 .player2
-	ld a, $1
-	ld [hFFCA], a
-	ld a, $fe
+	ld a, TRUE
+	ld [hSerialReceivedNewData], a
+	ld a, SERIAL_NO_DATA_BYTE
 	ld [hSerialSend], a
 
 .end
@@ -89,13 +89,13 @@
 	reti
 ; 75f
 
-Function75f:: ; 75f
+Serial_ExchangeBytes:: ; 75f
 	ld a, $1
-	ld [hFFCC], a
+	ld [hSerialIgnoringInitialData], a
 .loop
 	ld a, [hl]
 	ld [hSerialSend], a
-	call Function78a
+	call Serial_ExchangeByte
 	push bc
 	ld b, a
 	inc hl
@@ -103,16 +103,16 @@
 .wait
 	dec a
 	jr nz, .wait
-	ld a, [hFFCC]
+	ld a, [hSerialIgnoringInitialData]
 	and a
 	ld a, b
 	pop bc
 	jr z, .load
 	dec hl
-	cp $fd
+	cp SERIAL_PREAMBLE_BYTE
 	jr nz, .loop
 	xor a
-	ld [hFFCC], a
+	ld [hSerialIgnoringInitialData], a
 	jr .loop
 
 .load
@@ -125,24 +125,24 @@
 	ret
 ; 78a
 
-Function78a:: ; 78a
+Serial_ExchangeByte:: ; 78a
 .loop
 	xor a
-	ld [hFFCA], a
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld [hSerialReceivedNewData], a
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr nz, .not_player_2
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 .not_player_2
 .loop2
-	ld a, [hFFCA]
+	ld a, [hSerialReceivedNewData]
 	and a
 	jr nz, .reset_ffca
-	ld a, [hLinkPlayerNumber]
-	cp $1
+	ld a, [hSerialConnectionStatus]
+	cp USING_EXTERNAL_CLOCK
 	jr nz, .not_player_1_or_wLinkTimeoutFrames_zero
 	call CheckwLinkTimeoutFramesNonzero
 	jr z, .not_player_1_or_wLinkTimeoutFrames_zero
@@ -162,8 +162,8 @@
 
 .not_player_1_or_wLinkTimeoutFrames_zero
 	ld a, [rIE]
-	and $f
-	cp $8
+	and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+	cp 1 << SERIAL
 	jr nz, .loop2
 	ld a, [wcf5d]
 	dec a
@@ -173,8 +173,8 @@
 	dec a
 	ld [wcf5d + 1], a
 	jr nz, .loop2
-	ld a, [hLinkPlayerNumber]
-	cp $1
+	ld a, [hSerialConnectionStatus]
+	cp USING_EXTERNAL_CLOCK
 	jr z, .reset_ffca
 
 	ld a, 255
@@ -184,19 +184,20 @@
 
 .reset_ffca
 	xor a
-	ld [hFFCA], a
+	ld [hSerialReceivedNewData], a
 	ld a, [rIE]
-	and $f
-	sub $8
+	and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+	sub 1 << SERIAL
 	jr nz, .rIE_not_equal_8
 
+	; LOW($5000)
 	ld [wcf5d], a
-	ld a, $50
+	ld a, HIGH($5000)
 	ld [wcf5d + 1], a
 
 .rIE_not_equal_8
 	ld a, [hSerialReceive]
-	cp $fe
+	cp SERIAL_NO_DATA_BYTE
 	ret nz
 	call CheckwLinkTimeoutFramesNonzero
 	jr z, .wLinkTimeoutFrames_zero
@@ -216,9 +217,9 @@
 
 .wLinkTimeoutFrames_zero
 	ld a, [rIE]
-	and $f
-	cp $8
-	ld a, $fe
+	and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
+	cp 1 << SERIAL
+	ld a, SERIAL_NO_DATA_BYTE
 	ret z
 	ld a, [hl]
 	ld [hSerialSend], a
@@ -243,29 +244,31 @@
 ; 833
 
 SerialDisconnected:: ; 833
-	dec a
+	dec a ; a is always 0 when this is called
 	ld [wLinkTimeoutFrames], a
 	ld [wLinkTimeoutFrames + 1], a
 	ret
 ; 83b
 
-Function83b:: ; 83b
+; This is used to exchange the button press and selected menu item on the link menu.
+; The data is sent thrice and read twice to increase reliability.
+Serial_ExchangeLinkMenuSelection:: ; 83b
 	ld hl, wPlayerLinkAction
 	ld de, wOtherPlayerLinkMode
-	ld c, $2
-	ld a, $1
-	ld [hFFCC], a
+	ld c, 2
+	ld a, TRUE
+	ld [hSerialIgnoringInitialData], a
 .asm_847
 	call DelayFrame
 	ld a, [hl]
 	ld [hSerialSend], a
-	call Function78a
+	call Serial_ExchangeByte
 	ld b, a
 	inc hl
-	ld a, [hFFCC]
+	ld a, [hSerialIgnoringInitialData]
 	and a
-	ld a, $0
-	ld [hFFCC], a
+	ld a, FALSE
+	ld [hSerialIgnoringInitialData], a
 	jr nz, .asm_847
 	ld a, b
 	ld [de], a
@@ -275,7 +278,7 @@
 	ret
 ; 862
 
-Function862:: ; 862
+Serial_PrintWaitingTextAndSyncAndExchangeNybble:: ; 862
 	call LoadTileMapToTempTileMap
 	callfar PlaceWaitingText
 	call WaitLinkTransfer
@@ -282,8 +285,7 @@
 	jp Call_LoadTempTileMapToTileMap
 ; 871
 
-
-Function871:: ; 871
+Serial_SyncAndExchangeNybble:: ; 871
 	call LoadTileMapToTempTileMap
 	callfar PlaceWaitingText
 	jp WaitLinkTransfer
@@ -356,12 +358,12 @@
 	ld a, [wPlayerLinkAction]
 	add b
 	ld [hSerialSend], a
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	jr nz, .player_1
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 
 .player_1
@@ -388,12 +390,12 @@
 ; Let the other system know that the data has been received.
 	xor a
 	ld [hSerialSend], a
-	ld a, [hLinkPlayerNumber]
-	cp $2
+	ld a, [hSerialConnectionStatus]
+	cp USING_INTERNAL_CLOCK
 	ret nz
-	ld a, $1
+	ld a, (0 << rSC_ON) | 1
 	ld [rSC], a
-	ld a, $81
+	ld a, (1 << rSC_ON) | 1
 	ld [rSC], a
 	ret
 ; 919
@@ -402,13 +404,13 @@
 	ld a, [wLinkMode]
 	and a
 	ret nz
-	ld a, $2
+	ld a, USING_INTERNAL_CLOCK
 	ld [rSB], a
 	xor a
 	ld [hSerialReceive], a
-	ld a, $0
+	ld a, 0 << rSC_ON
 	ld [rSC], a
-	ld a, $80
+	ld a, 1 << rSC_ON
 	ld [rSC], a
 	ret
 ; 92e
--- a/home/video.asm
+++ b/home/video.asm
@@ -20,10 +20,10 @@
 
 
 UpdateBGMapBuffer:: ; 15e3
-; Copy [hFFDC] 16x8 tiles from BGMapBuffer
+; Copy [hBGMapTileCount] 16x8 tiles from BGMapBuffer
 ; to bg map addresses in BGMapBufferPtrs.
 
-; [hFFDC] must be even since this is done in pairs.
+; [hBGMapTileCount] must be even since this is done in pairs.
 
 ; Return carry on success.
 
@@ -76,10 +76,10 @@
 endr
 
 ; We've done 2 16x8 blocks
-	ld a, [hFFDC]
+	ld a, [hBGMapTileCount]
 	dec a
 	dec a
-	ld [hFFDC], a
+	ld [hBGMapTileCount], a
 
 	jr nz, .next
 
--- a/hram.asm
+++ b/hram.asm
@@ -39,7 +39,8 @@
 hPrinter           EQU $ffac
 hGraphicStartTile  EQU $ffad
 hMoveMon           EQU $ffae
-hMapObjectIndexBuffer EQU $ffaf
+
+hMapObjectIndexBuffer    EQU $ffaf
 hObjectStructIndexBuffer EQU $ffb0
 
 hConnectionStripLength EQU $ffaf
@@ -88,13 +89,14 @@
 hLCDCPointer       EQU $ffc6
 hLYOverrideStart   EQU $ffc7
 hLYOverrideEnd     EQU $ffc8
-hMobileReceive     EQU $ffc9
-hFFCA              EQU $ffca
-hLinkPlayerNumber  EQU $ffcb
-hFFCC              EQU $ffcc
-hSerialSend        EQU $ffcd
-hSerialReceive     EQU $ffce
 
+hMobileReceive             EQU $ffc9
+hSerialReceivedNewData     EQU $ffca
+hSerialConnectionStatus    EQU $ffcb
+hSerialIgnoringInitialData EQU $ffcc
+hSerialSend                EQU $ffcd
+hSerialReceive             EQU $ffce
+
 hSCX               EQU $ffcf
 hSCY               EQU $ffd0
 hWX                EQU $ffd1
@@ -108,7 +110,7 @@
 hSPBuffer          EQU $ffd9
 
 hBGMapUpdate       EQU $ffdb
-hFFDC              EQU $ffdc
+hBGMapTileCount    EQU $ffdc
 
 hMapAnims          EQU $ffde
 hTileAnimFrame     EQU $ffdf
@@ -125,5 +127,5 @@
 hSGB               EQU $ffe7
 hDMATransfer       EQU $ffe8
 hMobile            EQU $ffe9
-hFFEA              EQU $ffea
+hSystemBooted      EQU $ffea
 hClockResetTrigger EQU $ffeb
--- a/mobile/mobile_40.asm
+++ b/mobile/mobile_40.asm
@@ -4056,7 +4056,7 @@
 	jr z, .got_link_player_number
 	ld a, 1
 .got_link_player_number
-	ld [hLinkPlayerNumber], a
+	ld [hSerialConnectionStatus], a
 	ret
 ; 101a21
 
@@ -4076,7 +4076,7 @@
 	xor a
 	ld [wDisableTextAcceleration], a
 	ld a, $ff
-	ld [hLinkPlayerNumber], a
+	ld [hSerialConnectionStatus], a
 	pop af
 	ld [Options], a
 	ret
--- a/mobile/mobile_5b.asm
+++ b/mobile/mobile_5b.asm
@@ -4,7 +4,7 @@
 	and a
 	ret z
 	; Only do this once per boot cycle
-	ld a, [hFFEA]
+	ld a, [hSystemBooted]
 	and a
 	ret z
 	; Set some flag, preserving the old state
@@ -19,9 +19,9 @@
 	call .RunJumptable
 	farcall DisableMobile
 	; Prevent this routine from running again
-	; until the next time the syatem is turned on
+	; until the next time the system is turned on
 	xor a
-	ld [hFFEA], a
+	ld [hSystemBooted], a
 	; Restore the flag state
 	pop af
 	ld [wcfbe], a