summaryrefslogtreecommitdiff
path: root/home/serial.asm
diff options
context:
space:
mode:
authoryenatch <yenatch@gmail.com>2018-01-22 01:06:48 -0500
committerGitHub <noreply@github.com>2018-01-22 01:06:48 -0500
commitc60f1331fef22b886adf3472d2b4f348832cfaf7 (patch)
tree5a471fad61e406f5b3ca1aba67ced0186de01c52 /home/serial.asm
parentf27f79488a460f0a89670f3611e1e9e175baf5d6 (diff)
parent7fba864883732ccecb1221ae7ff97492d112362a (diff)
Merge pull request #456 from Rangi42/master
OAM data documentation; move more content into data/; move palettes into gfx/; more code+script constants; consistent map naming
Diffstat (limited to 'home/serial.asm')
-rw-r--r--home/serial.asm133
1 files changed, 67 insertions, 66 deletions
diff --git a/home/serial.asm b/home/serial.asm
index b0151eae2..7fdf1fc03 100644
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -14,9 +14,9 @@ Serial:: ; 6ef
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 @@ Serial:: ; 6ef
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 @@ Serial:: ; 6ef
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 @@ Serial:: ; 6ef
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 @@ Serial:: ; 6ef
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 @@ Function75f:: ; 75f
.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 @@ Function75f:: ; 75f
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 @@ Function78a:: ; 78a
.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 @@ Function78a:: ; 78a
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 @@ Function78a:: ; 78a
.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 @@ Function78a:: ; 78a
.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 @@ CheckwLinkTimeoutFramesNonzero:: ; 82b
; 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,15 +278,14 @@ Function83b:: ; 83b
ret
; 862
-Function862:: ; 862
+Serial_PrintWaitingTextAndSyncAndExchangeNybble:: ; 862
call LoadTileMapToTempTileMap
callfar PlaceWaitingText
call WaitLinkTransfer
jp Call_LoadTempTileMapToTileMap
; 871
-
-Function871:: ; 871
+Serial_SyncAndExchangeNybble:: ; 871
call LoadTileMapToTempTileMap
callfar PlaceWaitingText
jp WaitLinkTransfer
@@ -356,12 +358,12 @@ LinkTransfer:: ; 8c1
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,28 +390,27 @@ LinkDataReceived:: ; 908
; 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
-Function919:: ; 919
-; XXX
+Unreferenced_Function919:: ; 919
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