summaryrefslogtreecommitdiff
path: root/home/serial.asm
blob: b474e5d30d89c2a59c83ddf3e00d645772f5c696 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
SECTION "Serial handler", ROM0[$602]

Serial::
    push af
    push bc
    push de
    push hl
    ldh a, [hLinkPlayerNumber]
    inc a
    jr z, .init_player_number

    ld a, [rSB]
    ldh [hSerialRecieve], a
    ldh a, [hSerialSend]
    ld [rSB], a
    ldh a, [hLinkPlayerNumber]
    cp 2
    jr z, .done
    ld a, 1 << rSC_ON
    ld [rSC], a
    jr .done

.init_player_number
    ld a, [rSB]
    ldh [hSerialRecieve], a
    ldh [hLinkPlayerNumber], a
    cp 2
    jr z, .master
    xor a
    ld [rSB], a
    ld a, 3
    ld [rDIV], a
.wait
    ld a, [rDIV]
    bit 7, a
    jr nz, .wait
    ld a, 1 << rSC_ON
    ld [rSC], a
    jr .done
.master
    xor a
    ld [rSC], a

.done
    ld a, 1
    ldh [hSerialRecieved], a
    ld a, SERIAL_NO_DATA_BYTE
    ldh [hSerialSend], a
    pop hl
    pop de
    pop bc
    pop af
    reti