serial/trade/misc

This commit is contained in:
YamaArashi 2015-02-07 02:43:08 -08:00
parent 9de54645c8
commit 3fdb8a0d89
74 changed files with 1934 additions and 1648 deletions

View file

@ -26,7 +26,7 @@ rLCDC_DEFAULT EQU %11100011
ld [$ff43], a
ld [$ff42], a
ld [rSB], a
ld [$ff02], a
ld [rSC], a
ld [$ff4b], a
ld [$ff4a], a
ld [$ff06], a
@ -67,8 +67,8 @@ rLCDC_DEFAULT EQU %11100011
xor a
ld [hTilesetType], a
ld [$ff41], a
ld [$ffae], a
ld [$ffaf], a
ld [hSCX], a
ld [hSCY], a
ld [$ff0f], a
ld a, 1 << VBLANK + 1 << TIMER + 1 << SERIAL
ld [rIE], a
@ -79,8 +79,8 @@ rLCDC_DEFAULT EQU %11100011
ld a, 7
ld [rWX], a
ld a, $ff
ld [$ffaa], a
ld a, CONNECTION_NOT_ESTABLISHED
ld [hSerialConnectionStatus], a
ld h, vBGMap0 / $100
call ClearBgMap

View file

@ -1609,12 +1609,12 @@ AdvancePlayerSprite:: ; 0d27 (0:0d27)
ld c,a
sla b
sla c
ld a,[$ffaf]
ld a,[hSCY]
add b
ld [$ffaf],a ; update background scroll Y
ld a,[$ffae]
ld [hSCY],a ; update background scroll Y
ld a,[hSCX]
add c
ld [$ffae],a ; update background scroll X
ld [hSCX],a ; update background scroll X
; shift all the sprites in the direction opposite of the player's motion
; so that the player appears to move relative to them
ld hl,wSpriteStateData1 + $14
@ -2310,8 +2310,8 @@ LoadMapData:: ; 1241 (0:1241)
ld [wMapViewVRAMPointer + 1],a
xor a
ld [wMapViewVRAMPointer],a
ld [$ffaf],a
ld [$ffae],a
ld [hSCY],a
ld [hSCX],a
ld [wWalkCounter],a
ld [wd119],a
ld [wWalkBikeSurfStateCopy],a

View file

@ -1,304 +1,313 @@
Serial:: ; 2125 (0:2125)
push af
push bc
push de
push hl
ld a, [$ffaa]
inc a
jr z, .asm_2142
ld a, [$ff01]
ld [$ffad], a
ld a, [$ffac]
ld [$ff01], a
ld a, [$ffaa]
cp $2
jr z, .asm_2162
ld a, $80
ld [$ff02], a
jr .asm_2162
.asm_2142
ld a, [$ff01]
ld [$ffad], a
ld [$ffaa], a
cp $2
jr z, .asm_215f
xor a
ld [$ff01], a
ld a, $3
ld [rDIV], a ; $ff04
.asm_2153
ld a, [rDIV] ; $ff04
bit 7, a
jr nz, .asm_2153
ld a, $80
ld [$ff02], a
jr .asm_2162
.asm_215f
xor a
ld [$ff01], a
.asm_2162
ld a, $1
ld [$ffa9], a
ld a, $fe
ld [$ffac], a
pop hl
pop de
pop bc
pop af
reti
Func_216f:: ; 216f (0:216f)
ld a, $1
ld [$ffab], a
.asm_2173
ld a, [hl]
ld [$ffac], a
call Func_219a
push bc
ld b, a
inc hl
ld a, $30
.asm_217e
dec a
jr nz, .asm_217e
ld a, [$ffab]
and a
ld a, b
pop bc
jr z, .asm_2192
dec hl
cp $fd
jr nz, .asm_2173
xor a
ld [$ffab], a
jr .asm_2173
.asm_2192
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .asm_2173
ret
Func_219a:: ; 219a (0:219a)
xor a
ld [$ffa9], a
ld a, [$ffaa]
cp $2
jr nz, .asm_21a7
ld a, $81
ld [$ff02], a
.asm_21a7
ld a, [$ffa9]
and a
jr nz, .asm_21f1
ld a, [$ffaa]
cp $1
jr nz, .asm_21cc
call Func_2237
jr z, .asm_21cc
call Func_2231
push hl
ld hl, wcc48
inc [hl]
jr nz, .asm_21c3
dec hl
inc [hl]
.asm_21c3
pop hl
call Func_2237
jr nz, .asm_21a7
jp Func_223f
.asm_21cc
ld a, [rIE] ; $ffff
and $f
cp $8
jr nz, .asm_21a7
ld a, [W_NUMHITS] ; wd074
dec a
ld [W_NUMHITS], a ; wd074
jr nz, .asm_21a7
ld a, [wd075]
dec a
ld [wd075], a
jr nz, .asm_21a7
ld a, [$ffaa]
cp $1
jr z, .asm_21f1
ld a, $ff
.asm_21ee
dec a
jr nz, .asm_21ee
.asm_21f1
xor a
ld [$ffa9], a
ld a, [rIE] ; $ffff
and $f
sub $8
jr nz, .asm_2204
ld [W_NUMHITS], a ; wd074
ld a, $50
ld [wd075], a
.asm_2204
ld a, [$ffad]
cp $fe
ret nz
call Func_2237
jr z, .asm_221f
push hl
ld hl, wcc48
ld a, [hl]
dec a
ld [hld], a
inc a
jr nz, .asm_2219
dec [hl]
.asm_2219
pop hl
call Func_2237
jr z, Func_223f
.asm_221f
ld a, [rIE] ; $ffff
and $f
cp $8
ld a, $fe
ret z
ld a, [hl]
ld [$ffac], a
call DelayFrame
jp Func_219a
Func_2231:: ; 2231 (0:2231)
ld a, $f
.asm_2233
dec a
jr nz, .asm_2233
ret
Func_2237:: ; 2237 (0:2237)
push hl
ld hl, wcc47
ld a, [hli]
or [hl]
pop hl
ret
Func_223f:: ; 223f (0:223f)
dec a
ld [wcc47], a
ld [wcc48], a
ret
Func_2247:: ; 2247 (0:2247)
ld hl, wcc42
ld de, wcc3d
ld c, $2
ld a, $1
ld [$ffab], a
.asm_2253
call DelayFrame
ld a, [hl]
ld [$ffac], a
call Func_219a
ld b, a
inc hl
ld a, [$ffab]
and a
ld a, $0
ld [$ffab], a
jr nz, .asm_2253
ld a, b
ld [de], a
inc de
dec c
jr nz, .asm_2253
ret
Func_226e:: ; 226e (0:226e)
call SaveScreenTilesToBuffer1
callab PrintWaitingText
call Func_227f
jp LoadScreenTilesFromBuffer1
Func_227f:: ; 227f (0:227f)
ld a, $ff
ld [wcc3e], a
.asm_2284
call Func_22c3
call DelayFrame
call Func_2237
jr z, .asm_22a0
push hl
ld hl, wcc48
dec [hl]
jr nz, .asm_229f
dec hl
dec [hl]
jr nz, .asm_229f
pop hl
xor a
jp Func_223f
.asm_229f
pop hl
.asm_22a0
ld a, [wcc3e]
inc a
jr z, .asm_2284
ld b, $a
.asm_22a8
call DelayFrame
call Func_22c3
dec b
jr nz, .asm_22a8
ld b, $a
.asm_22b3
call DelayFrame
call Func_22ed
dec b
jr nz, .asm_22b3
ld a, [wcc3e]
ld [wcc3d], a
ret
Func_22c3:: ; 22c3 (0:22c3)
call asm_22d7
ld a, [wcc42]
add $60
ld [$ffac], a
ld a, [$ffaa]
cp $2
jr nz, asm_22d7
ld a, $81
ld [$ff02], a
asm_22d7:: ; 22d7 (0:22d7)
ld a, [$ffad]
ld [wcc3d], a
and $f0
cp $60
ret nz
xor a
ld [$ffad], a
ld a, [wcc3d]
and $f
ld [wcc3e], a
ret
Func_22ed:: ; 22ed (0:22ed)
xor a
ld [$ffac], a
ld a, [$ffaa]
cp $2
ret nz
ld a, $81
ld [$ff02], a
ret
Func_22fa:: ; 22fa (0:22fa)
ld a, $2
ld [$ff01], a
xor a
ld [$ffad], a
ld a, $80
ld [$ff02], a
ret
Serial:: ; 2125 (0:2125)
push af
push bc
push de
push hl
ld a, [hSerialConnectionStatus]
inc a
jr z, .connectionNotYetEstablished
ld a, [rSB]
ld [hSerialReceiveData], a
ld a, [hSerialSendData]
ld [rSB], a
ld a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .done
; using external clock
ld a, START_TRANSFER_EXTERNAL_CLOCK
ld [rSC], a
jr .done
.connectionNotYetEstablished
ld a, [rSB]
ld [hSerialReceiveData], a
ld [hSerialConnectionStatus], a
cp USING_INTERNAL_CLOCK
jr z, .usingInternalClock
; using external clock
xor a
ld [rSB], a
ld a, $3
ld [rDIV], a
.waitLoop
ld a, [rDIV]
bit 7, a
jr nz, .waitLoop
ld a, START_TRANSFER_EXTERNAL_CLOCK
ld [rSC], a
jr .done
.usingInternalClock
xor a
ld [rSB], a
.done
ld a, $1
ld [hSerialReceivedNewData], a
ld a, SERIAL_NO_DATA_BYTE
ld [hSerialSendData], a
pop hl
pop de
pop bc
pop af
reti
; hl = send data
; de = receive data
; bc = length of data
Serial_ExchangeBytes:: ; 216f (0:216f)
ld a, 1
ld [hSerialIgnoringInitialData], a
.loop
ld a, [hl]
ld [hSerialSendData], a
call Serial_ExchangeByte
push bc
ld b, a
inc hl
ld a, 48
.waitLoop
dec a
jr nz, .waitLoop
ld a, [hSerialIgnoringInitialData]
and a
ld a, b
pop bc
jr z, .storeReceivedByte
dec hl
cp SERIAL_PREAMBLE_BYTE
jr nz, .loop
xor a
ld [hSerialIgnoringInitialData], a
jr .loop
.storeReceivedByte
ld [de], a
inc de
dec bc
ld a, b
or c
jr nz, .loop
ret
Serial_ExchangeByte:: ; 219a (0:219a)
xor a
ld [hSerialReceivedNewData], a
ld a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .asm_21a7
ld a, START_TRANSFER_INTERNAL_CLOCK
ld [rSC], a
.asm_21a7
ld a, [hSerialReceivedNewData]
and a
jr nz, .asm_21f1
ld a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
jr nz, .asm_21cc
call IsUnknownCounterZero
jr z, .asm_21cc
call WaitLoop_15Iterations
push hl
ld hl, wUnknownSerialCounter + 1
inc [hl]
jr nz, .asm_21c3
dec hl
inc [hl]
.asm_21c3
pop hl
call IsUnknownCounterZero
jr nz, .asm_21a7
jp SetUnknownCounterToFFFF
.asm_21cc
ld a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
cp (1 << SERIAL)
jr nz, .asm_21a7
ld a, [wUnknownSerialCounter2]
dec a
ld [wUnknownSerialCounter2], a
jr nz, .asm_21a7
ld a, [wUnknownSerialCounter2 + 1]
dec a
ld [wUnknownSerialCounter2 + 1], a
jr nz, .asm_21a7
ld a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
jr z, .asm_21f1
ld a, 255
.waitLoop
dec a
jr nz, .waitLoop
.asm_21f1
xor a
ld [hSerialReceivedNewData], a
ld a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
sub (1 << SERIAL)
jr nz, .asm_2204
ld [wUnknownSerialCounter2], a
ld a, $50
ld [wUnknownSerialCounter2 + 1], a
.asm_2204
ld a, [hSerialReceiveData]
cp SERIAL_NO_DATA_BYTE
ret nz
call IsUnknownCounterZero
jr z, .asm_221f
push hl
ld hl, wUnknownSerialCounter + 1
ld a, [hl]
dec a
ld [hld], a
inc a
jr nz, .asm_2219
dec [hl]
.asm_2219
pop hl
call IsUnknownCounterZero
jr z, SetUnknownCounterToFFFF
.asm_221f
ld a, [rIE]
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 [hSerialSendData], a
call DelayFrame
jp Serial_ExchangeByte
WaitLoop_15Iterations:: ; 2231 (0:2231)
ld a, 15
.waitLoop
dec a
jr nz, .waitLoop
ret
IsUnknownCounterZero:: ; 2237 (0:2237)
push hl
ld hl, wUnknownSerialCounter
ld a, [hli]
or [hl]
pop hl
ret
; a is always 0 when this is called
SetUnknownCounterToFFFF:: ; 223f (0:223f)
dec a
ld [wUnknownSerialCounter], a
ld [wUnknownSerialCounter + 1], a
ret
; 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:: ; 2247 (0:2247)
ld hl, wLinkMenuSelectionSendBuffer
ld de, wLinkMenuSelectionReceiveBuffer
ld c, 2 ; number of bytes to save
ld a, 1
ld [hSerialIgnoringInitialData], a
.loop
call DelayFrame
ld a, [hl]
ld [hSerialSendData], a
call Serial_ExchangeByte
ld b, a
inc hl
ld a, [hSerialIgnoringInitialData]
and a
ld a, 0
ld [hSerialIgnoringInitialData], a
jr nz, .loop
ld a, b
ld [de], a
inc de
dec c
jr nz, .loop
ret
Serial_PrintWaitingTextAndSyncAndExchangeByte:: ; 226e (0:226e)
call SaveScreenTilesToBuffer1
callab PrintWaitingText
call Serial_SyncAndExchangeNybble
jp LoadScreenTilesFromBuffer1
Serial_SyncAndExchangeNybble:: ; 227f (0:227f)
ld a, $ff
ld [wSerialExchangeNybbleReceiveData], a
.loop1
call Serial_ExchangeNybble
call DelayFrame
call IsUnknownCounterZero
jr z, .next1
push hl
ld hl, wUnknownSerialCounter + 1
dec [hl]
jr nz, .next2
dec hl
dec [hl]
jr nz, .next2
pop hl
xor a
jp SetUnknownCounterToFFFF
.next2
pop hl
.next1
ld a, [wSerialExchangeNybbleReceiveData]
inc a
jr z, .loop1
ld b, 10
.loop2
call DelayFrame
call Serial_ExchangeNybble
dec b
jr nz, .loop2
ld b, 10
.loop3
call DelayFrame
call Serial_SendZeroByte
dec b
jr nz, .loop3
ld a, [wSerialExchangeNybbleReceiveData]
ld [wSerialSyncAndExchangeNybbleReceiveData], a
ret
; exchange one byte with value of $f or less
Serial_ExchangeNybble:: ; 22c3 (0:22c3)
call .doExchange
ld a, [wSerialExchangeNybbleSendData]
add $60
ld [hSerialSendData], a
ld a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .doExchange
ld a, START_TRANSFER_INTERNAL_CLOCK
ld [rSC], a
.doExchange
ld a, [hSerialReceiveData]
ld [wSerialExchangeNybbleTempReceiveData], a
and $f0
cp $60
ret nz
xor a
ld [hSerialReceiveData], a
ld a, [wSerialExchangeNybbleTempReceiveData]
and $f
ld [wSerialExchangeNybbleReceiveData], a
ret
Serial_SendZeroByte:: ; 22ed (0:22ed)
xor a
ld [hSerialSendData], a
ld a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ret nz
ld a, START_TRANSFER_INTERNAL_CLOCK
ld [rSC], a
ret
Serial_TryEstablishingExternallyClockedConnection:: ; 22fa (0:22fa)
ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
ld [rSB], a
xor a
ld [hSerialReceiveData], a
ld a, START_TRANSFER_EXTERNAL_CLOCK
ld [rSC], a
ret

View file

@ -265,8 +265,8 @@ Char5F:: ; 1a91 (0:1a91)
ret
Char58:: ; 1a95 (0:1a95)
ld a,[W_ISLINKBATTLE]
cp 4
ld a,[wLinkState]
cp LINK_STATE_BATTLING
jp z,Next1AA2
ld a,$EE
Coorda 18, 16
@ -506,8 +506,8 @@ TextCommand05:: ; 1bc5 (0:1bc5)
; 06
; (no arguments)
TextCommand06:: ; 1bcc (0:1bcc)
ld a,[W_ISLINKBATTLE]
cp a,$04
ld a,[wLinkState]
cp a,LINK_STATE_BATTLING
jp z,TextCommand0D
ld a,$ee ; down arrow
Coorda 18, 16 ; place down arrow in lower right corner of dialogue text box