]>
Commit | Line | Data |
---|---|---|
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" |