summaryrefslogtreecommitdiff
path: root/home/serial.asm
diff options
context:
space:
mode:
Diffstat (limited to 'home/serial.asm')
-rw-r--r--home/serial.asm263
1 files changed, 117 insertions, 146 deletions
diff --git a/home/serial.asm b/home/serial.asm
index ad7d9610..02474ed7 100644
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -1,43 +1,29 @@
-Serial:: ; 6ef
-; The serial interrupt.
-
+Serial:: ; 6aa (0:06aa)
push af
push bc
push de
push hl
- ld a, [hMobileReceive]
- and a
- jr nz, .mobile
-
- ld a, [wc2d4]
+ ld a, [wPrinterConnectionOpen]
bit 0, a
jr nz, .printer
ld a, [hLinkPlayerNumber]
- inc a ; is it equal to -1?
+ inc a
jr z, .init_player_number
-
ld a, [rSB]
ld [hSerialReceive], a
-
ld a, [hSerialSend]
ld [rSB], a
-
ld a, [hLinkPlayerNumber]
cp $2
jr z, .player2
-
- ld a, 0 << rSC_ON
+ ld a, $0
ld [rSC], a
- ld a, 1 << rSC_ON
+ ld a, $80
ld [rSC], a
jr .player2
-.mobile
- call MobileReceive
- jr .end
-
.printer
call PrinterReceive
jr .end
@@ -65,6 +51,7 @@ Serial:: ; 6ef
bit 7, a
jr nz, .wait_bit_7
+ ; cycle the serial controller
ld a, 0 << rSC_ON
ld [rSC], a
ld a, 1 << rSC_ON
@@ -74,11 +61,10 @@ Serial:: ; 6ef
._player2
xor a
ld [rSB], a
-
.player2
ld a, $1
- ld [hFFCA], a
- ld a, -2
+ ld [hFFCC], a
+ ld a, SERIAL_NO_DATA_BYTE
ld [hSerialSend], a
.end
@@ -87,15 +73,14 @@ Serial:: ; 6ef
pop bc
pop af
reti
-; 75f
-Function75f:: ; 75f
+Function710:: ; 710
ld a, $1
- ld [hFFCC], a
+ ld [hFFCE], a
.loop
ld a, [hl]
ld [hSerialSend], a
- call Function78a
+ call Function73b
push bc
ld b, a
inc hl
@@ -103,16 +88,16 @@ Function75f:: ; 75f
.wait
dec a
jr nz, .wait
- ld a, [hFFCC]
+ ld a, [hFFCE]
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 [hFFCE], a
jr .loop
.load
@@ -123,95 +108,96 @@ Function75f:: ; 75f
or c
jr nz, .loop
ret
-; 78a
-Function78a:: ; 78a
+Function73b:: ; 73b (0:073b)
+.loop
xor a
- ld [hFFCA], a
+ ld [hFFCC], a
ld a, [hLinkPlayerNumber]
cp $2
- jr nz, .asm_79b
- ld a, $1
+ jr nz, .loop2
+ ld a, (1 << rSC_CLOCK) | (0 << rSC_ON)
ld [rSC], a
- ld a, $81
+ ld a, (1 << rSC_CLOCK) | (1 << rSC_ON)
ld [rSC], a
-
-.asm_79b
- ld a, [hFFCA]
+.loop2
+ ld a, [hFFCC]
and a
- jr nz, .asm_7e5
+ jr nz, .reset_ffcc
ld a, [hLinkPlayerNumber]
cp $1
- jr nz, .asm_7c0
- call Function82b
- jr z, .asm_7c0
- call .asm_825
+ jr nz, .not_player_1_or_wLinkTimeoutFrames_zero
+ call CheckLinkTimeout
+ jr z, .not_player_1_or_wLinkTimeoutFrames_zero
+ call Serial15CycleDelay
push hl
- ld hl, wcf5c
+ ld hl, wLinkTimeoutFrames + 1
inc [hl]
- jr nz, .asm_7b7
+ jr nz, .no_rollover_up
dec hl
inc [hl]
-.asm_7b7
+.no_rollover_up
pop hl
- call Function82b
- jr nz, .asm_79b
- jp Function833
+ call CheckLinkTimeout
+ jr nz, .loop2
+ jp SerialDisconnected
-.asm_7c0
+.not_player_1_or_wLinkTimeoutFrames_zero
ld a, [rIE]
and $f
cp $8
- jr nz, .asm_79b
- ld a, [wcf5d]
+ jr nz, .loop2
+ ld a, [wce5d]
dec a
- ld [wcf5d], a
- jr nz, .asm_79b
- ld a, [wcf5d + 1]
+ ld [wce5d], a
+ jr nz, .loop2
+ ld a, [wce5d + 1]
dec a
- ld [wcf5d + 1], a
- jr nz, .asm_79b
+ ld [wce5d + 1], a
+ jr nz, .loop2
ld a, [hLinkPlayerNumber]
cp $1
- jr z, .asm_7e5
+ jr z, .reset_ffcc
+
ld a, $ff
-.asm_7e2
+.delay_255_cycles
dec a
- jr nz, .asm_7e2
+ jr nz, .delay_255_cycles
-.asm_7e5
+.reset_ffcc
xor a
- ld [hFFCA], a
+ ld [hFFCC], a
ld a, [rIE]
and $f
sub $8
- jr nz, .asm_7f8
- ld [wcf5d], a
+ jr nz, .rIE_not_equal_8
+
+ ld [wce5d], a
ld a, $50
- ld [wcf5d + 1], a
+ ld [wce5d + 1], a
-.asm_7f8
+.rIE_not_equal_8
ld a, [hSerialReceive]
- cp $fe
+ cp SERIAL_NO_DATA_BYTE
ret nz
- call Function82b
- jr z, .asm_813
+ call CheckLinkTimeout
+ jr z, .link_timed_out
push hl
- ld hl, wcf5c
+ ld hl, wLinkTimeoutFrames + 1
ld a, [hl]
dec a
ld [hld], a
inc a
- jr nz, .asm_80d
+ jr nz, .no_rollover
dec [hl]
-.asm_80d
+.no_rollover
pop hl
- call Function82b
- jr z, Function833
+ call CheckLinkTimeout
+ jr z, SerialDisconnected
-.asm_813
+.link_timed_out
ld a, [rIE]
and $f
cp $8
@@ -220,84 +206,77 @@ Function78a:: ; 78a
ld a, [hl]
ld [hSerialSend], a
call DelayFrame
- jp Function78a
+ jp .loop
-.asm_825
+Serial15CycleDelay:: ; 7d6 (0:07d6)
ld a, $f
-.asm_827
+.loop
dec a
- jr nz, .asm_827
+ jr nz, .loop
ret
-; 82b
-Function82b:: ; 82b
+CheckLinkTimeout:: ; 7dc (0:07dc)
push hl
- ld hl, wcf5b
+ ld hl, wLinkTimeoutFrames
ld a, [hli]
or [hl]
pop hl
ret
-; 833
-Function833:: ; 833
+SerialDisconnected:: ; 7e4 (0:07e4)
dec a
- ld [wcf5b], a
- ld [wcf5c], a
+ ld [wLinkTimeoutFrames], a
+ ld [wLinkTimeoutFrames + 1], a
ret
-; 83b
-Function83b:: ; 83b
- ld hl, wPlayerLinkAction
- ld de, wOtherPlayerLinkMode
+Function7ec:: ; 7ec
+ ld hl, wce56
+ ld de, wce51
ld c, $2
ld a, $1
- ld [hFFCC], a
-.asm_847
+ ld [hFFCE], a
+.asm_7f8
call DelayFrame
ld a, [hl]
ld [hSerialSend], a
- call Function78a
+ call Function73b
ld b, a
inc hl
- ld a, [hFFCC]
+ ld a, [hFFCE]
and a
ld a, $0
- ld [hFFCC], a
- jr nz, .asm_847
+ ld [hFFCE], a
+ jr nz, .asm_7f8
ld a, b
ld [de], a
inc de
dec c
- jr nz, .asm_847
+ jr nz, .asm_7f8
ret
-; 862
-Function862:: ; 862
- call LoadTileMapToTempTileMap
+Function813:: ; 813
+ call BackUpTilesToBuffer
callab PlaceWaitingText
- call Function87d
- jp Call_LoadTempTileMapToTileMap
-; 871
-
+ call WaitLinkTransfer
+ jp ReloadTilesFromBuffer
-Function871:: ; 871
- call LoadTileMapToTempTileMap
+Function822:: ; 822
+ call BackUpTilesToBuffer
callab PlaceWaitingText
- jp Function87d
-; 87d
+ jp WaitLinkTransfer
; One "giant" leap for machinekind
-Function87d:: ; 87d
+WaitLinkTransfer:: ; 82e (0:082e)
ld a, $ff
- ld [wOtherPlayerLinkAction], a
+ ld [wce52], a
.loop
call LinkTransfer
call DelayFrame
- call Function82b
+ call CheckLinkTimeout
jr z, .check
push hl
- ld hl, wcf5c
+ ld hl, wLinkTimeoutFrames + 1
dec [hl]
jr nz, .skip
dec hl
@@ -305,13 +284,13 @@ Function87d:: ; 87d
jr nz, .skip
pop hl
xor a
- jp Function833
+ jp SerialDisconnected
.skip
pop hl
.check
- ld a, [wOtherPlayerLinkAction]
+ ld a, [wce52]
inc a
jr z, .loop
@@ -329,59 +308,53 @@ Function87d:: ; 87d
dec b
jr nz, .acknowledge
- ld a, [wOtherPlayerLinkAction]
- ld [wOtherPlayerLinkMode], a
+ ld a, [wce52]
+ ld [wce51], a
ret
-; 8c1
-LinkTransfer:: ; 8c1
+LinkTransfer:: ; 872 (0:0872)
push bc
- ld b, SERIAL_TIMECAPSULE
+ ld b, $60
ld a, [wLinkMode]
- cp LINK_TIMECAPSULE
- jr z, .got_high_nybble
- ld b, SERIAL_TIMECAPSULE
- jr c, .got_high_nybble
- cp LINK_TRADECENTER
- ld b, SERIAL_TRADECENTER
- jr z, .got_high_nybble
- ld b, SERIAL_BATTLE
-
-.got_high_nybble
- call .Receive
- ld a, [wPlayerLinkAction]
+ cp $1
+ jr z, .asm_888
+ ld b, $60
+ jr c, .asm_888
+ cp $2
+ ld b, $70
+ jr z, .asm_888
+ ld b, $80
+.asm_888
+ call LinkTransferReceive
+ ld a, [wce56]
add b
ld [hSerialSend], a
ld a, [hLinkPlayerNumber]
cp $2
- jr nz, .player_1
+ jr nz, .asm_89f
ld a, $1
ld [rSC], a
ld a, $81
ld [rSC], a
-
-.player_1
- call .Receive
+.asm_89f
+ call LinkTransferReceive
pop bc
ret
-; 8f3
-.Receive ; 8f3
+LinkTransferReceive:: ; 8a4 (0:08a4)
ld a, [hSerialReceive]
- ld [wOtherPlayerLinkMode], a
+ ld [wce51], a
and $f0
cp b
ret nz
xor a
ld [hSerialReceive], a
- ld a, [wOtherPlayerLinkMode]
+ ld a, [wce51]
and $f
- ld [wOtherPlayerLinkAction], a
+ ld [wce52], a
ret
-; 908
-LinkDataReceived:: ; 908
-; Let the other system know that the data has been received.
+LinkDataReceived:: ; 8b9 (0:08b9)
xor a
ld [hSerialSend], a
ld a, [hLinkPlayerNumber]
@@ -392,9 +365,8 @@ LinkDataReceived:: ; 908
ld a, $81
ld [rSC], a
ret
-; 919
-Function919:: ; 919
+Function8ca:: ; 8ca
ld a, [wLinkMode]
and a
ret nz
@@ -407,4 +379,3 @@ Function919:: ; 919
ld a, $80
ld [rSC], a
ret
-; 92e