Ethernet ROM start
[fpgaboy.git] / ethernet.asm
1 ETH_STATUS EQU $FF68
2 ETH_DATA EQU $FF69
3
4 PUTC: MACRO
5         ld a, \1
6         call putc
7         ENDM
8
9 PUTS: MACRO
10         ld hl, \1
11         call puts
12         ENDM
13
14 PUTSI: MACRO
15         push hl
16         call putsi
17         db \1, 0
18         pop hl
19         ENDM
20
21 PUTSIL: MACRO
22         push hl
23         call putsi
24         db \1, 13, 10, 0
25         pop hl
26         ENDM
27
28 PUTHEX: MACRO
29         ld a, \1
30         call puthex
31         ENDM
32         
33         SECTION "config", HOME[$0]
34 myMAC:  db $12, $34, $56, $78, $9A, $00
35 myIP:   db $0A, $00, $00, $02
36 myMask: db $FF, $00, $00, $00
37 myGW:   db $0A, $00, $00, $01
38
39         SECTION "boot", HOME[$100]
40         jr start
41         nop
42         nop
43         
44         db $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83       ;<<< no $00,$c3,$50,$01
45         db $00,$0C,$00,$0D,$00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6
46         db $DD,$DD,$D9,$99,$BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F
47         db $BB,$B9,$33,$3E     ; Standard Nintendo DO NOT CHANGE...
48
49         db "GB Ethernet     "  ; Cart name   16bytes
50         db $00,$00,$00         ; Not used
51         db $00                 ; Cart type   ROM Only
52         db $00                 ; ROM Size    32k
53         db $00                 ; RAM Size     0k
54         db $cf,$08             ; Maker ID Matthew Johnson
55         db $01                 ; Version     =1
56         db $87                 ; Complement check (Important)
57         db $ff,$ff             ; Cheksum, fix this if you are going to
58
59 start:
60         ld sp, $D800
61         PUTSIL "Ethernet test ROM"
62 .lp:    xor a                   ; Rest state machines
63         ld [ETH_STATUS], a
64         ld a, [ETH_STATUS]      ; New shit?
65         ld [$FF51], a
66         and $02         ; New packet?
67         call nz, getpacket
68         jr .lp
69
70 getpacket:
71         ld a, [ETH_DATA]
72         ld b, a
73         ld a, [ETH_DATA]
74         ld c, a
75         push bc
76         ld hl, $D000
77 .cplp:  ld a, b
78         or c
79         jr z, .done
80         dec bc
81         ld a, [ETH_DATA]
82         ld [hli], a
83         jr .cplp
84 .done:  pop bc
85         PUTSI "getpacket: Got "
86         PUTHEX b
87         PUTHEX c
88         PUTSIL " byte packet from hardware."
89         ld hl, $D000
90         call ether_input
91         ret
92
93 ether_input:
94         push hl
95         PUTSI "ether_input: Packet to "
96         PUTHEX [hli]
97         PUTC $3A
98         PUTHEX [hli]
99         PUTC $3A
100         PUTHEX [hli]
101         PUTC $3A
102         PUTHEX [hli]
103         PUTC $3A
104         PUTHEX [hli]
105         PUTC $3A
106         PUTHEX [hli]
107         PUTSI " from "
108         PUTHEX [hli]
109         PUTC $3A
110         PUTHEX [hli]
111         PUTC $3A
112         PUTHEX [hli]
113         PUTC $3A
114         PUTHEX [hli]
115         PUTC $3A
116         PUTHEX [hli]
117         PUTC $3A
118         PUTHEX [hli]
119         PUTSI " protocol "
120         PUTHEX [hli]
121         PUTHEX [hli]
122         PUTSIL "."
123         pop hl
124         
125         ; Verify the destination MAC.
126         push hl
127         ld de, myMAC
128         ld c, $06
129 .maclp: ld a, [de]
130         cp [hl]
131         jr nz, .notus
132         inc de
133         inc hl
134         dec c
135         jr nz, .maclp
136         PUTSIL "ether_input: It's to us!"
137         pop hl
138         
139         ret
140 .notus: PUTSIL "ether_input: Not to us..."
141         pop hl
142         ret
143
144 ; SERIAL ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
145
146 putc:
147         push af
148 .waitport:
149         ld a,[$FF53]
150         and $01
151         jr nz,.waitport
152         pop af
153         ld [$FF52],a
154         ret
155
156 puts:
157         ld a, [hli]
158         cp $00
159         ret z
160         call putc
161         jr puts
162
163 EX_SP_HL: MACRO
164         push de
165         di
166         add sp, 2
167         pop de
168         push hl
169         ld l, e
170         ld h, d
171         add sp, -2
172         ei
173         pop de
174         ENDM
175
176 putsi:
177         pop hl
178         push af
179         push bc
180         push de
181 .lp:    ld a, [hli]
182         or a
183         jr z, .done
184         call putc
185         jr .lp
186 .done:  pop de
187         pop bc
188         pop af
189         push hl
190         ret
191
192 puthex:                         ; Put two hex nibbles to the serial console.
193         push bc
194         push hl
195         push af
196         swap a
197         and $0F
198         ld hl,hex
199         ld b,0
200         ld c,a
201         add hl,bc
202         ld a, [hl]
203         call putc
204         pop af
205         and $0F
206         ld hl,hex
207         ld c,a
208         add hl,bc
209         ld a, [hl]
210         call putc
211         pop hl
212         pop bc
213         ret
214 hex:    db "0123456789ABCDEF"
This page took 0.028845 seconds and 4 git commands to generate.