ETH_STATUS EQU $FF68 ETH_DATA EQU $FF69 PUTC: MACRO ld a, \1 call putc ENDM PUTS: MACRO ld hl, \1 call puts ENDM PUTSI: MACRO push hl call putsi db \1, 0 pop hl ENDM PUTSIL: MACRO push hl call putsi db \1, 13, 10, 0 pop hl ENDM PUTHEX: MACRO ld a, \1 call puthex ENDM SECTION "config", HOME[$0] myMAC: db $12, $34, $56, $78, $9A, $00 myIP: db $0A, $00, $00, $02 myMask: db $FF, $00, $00, $00 myGW: db $0A, $00, $00, $01 SECTION "boot", HOME[$100] jr start nop nop db $CE,$ED,$66,$66,$CC,$0D,$00,$0B,$03,$73,$00,$83 ;<<< no $00,$c3,$50,$01 db $00,$0C,$00,$0D,$00,$08,$11,$1F,$88,$89,$00,$0E,$DC,$CC,$6E,$E6 db $DD,$DD,$D9,$99,$BB,$BB,$67,$63,$6E,$0E,$EC,$CC,$DD,$DC,$99,$9F db $BB,$B9,$33,$3E ; Standard Nintendo DO NOT CHANGE... db "GB Ethernet " ; Cart name 16bytes db $00,$00,$00 ; Not used db $00 ; Cart type ROM Only db $00 ; ROM Size 32k db $00 ; RAM Size 0k db $cf,$08 ; Maker ID Matthew Johnson db $01 ; Version =1 db $87 ; Complement check (Important) db $ff,$ff ; Cheksum, fix this if you are going to start: ld sp, $D800 PUTSIL "Ethernet test ROM" .lp: xor a ; Rest state machines ld [ETH_STATUS], a ld a, [ETH_STATUS] ; New shit? ld [$FF51], a and $02 ; New packet? call nz, getpacket jr .lp getpacket: ld a, [ETH_DATA] ld b, a ld a, [ETH_DATA] ld c, a push bc ld hl, $D000 .cplp: ld a, b or c jr z, .done dec bc ld a, [ETH_DATA] ld [hli], a jr .cplp .done: pop bc PUTSI "getpacket: Got " PUTHEX b PUTHEX c PUTSIL " byte packet from hardware." ld hl, $D000 call ether_input ret ether_input: push hl PUTSI "ether_input: Packet to " PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTSI " from " PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTC $3A PUTHEX [hli] PUTSI " protocol " PUTHEX [hli] PUTHEX [hli] PUTSIL "." pop hl ; Verify the destination MAC. push hl ld de, myMAC ld c, $06 .maclp: ld a, [de] cp [hl] jr nz, .notus inc de inc hl dec c jr nz, .maclp PUTSIL "ether_input: It's to us!" pop hl ret .notus: PUTSIL "ether_input: Not to us..." pop hl ret ; SERIAL ROUTINES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; putc: push af .waitport: ld a,[$FF53] and $01 jr nz,.waitport pop af ld [$FF52],a ret puts: ld a, [hli] cp $00 ret z call putc jr puts EX_SP_HL: MACRO push de di add sp, 2 pop de push hl ld l, e ld h, d add sp, -2 ei pop de ENDM putsi: pop hl push af push bc push de .lp: ld a, [hli] or a jr z, .done call putc jr .lp .done: pop de pop bc pop af push hl ret puthex: ; Put two hex nibbles to the serial console. push bc push hl push af swap a and $0F ld hl,hex ld b,0 ld c,a add hl,bc ld a, [hl] call putc pop af and $0F ld hl,hex ld c,a add hl,bc ld a, [hl] call putc pop hl pop bc ret hex: db "0123456789ABCDEF"