emailler/ip65/ip65.s

75 lines
1.1 KiB
ArmAsm

; ip65 main routines
.include "../inc/common.i"
.export ip65_init
.export ip65_process
.export ip65_ctr
.export ip65_ctr_arp
.export ip65_ctr_ip
.import eth_init
.import timer_init
.import arp_init
.import ip_init
.import eth_inp
.import eth_rx
.import ip_process
.import arp_process
.importzp eth_proto_arp
.bss
ip65_ctr: .res 1 ; incremented for every incoming packet
ip65_ctr_arp: .res 1 ; incremented for every incoming arp packet
ip65_ctr_ip: .res 1 ; incremented for every incoming ip packet
.code
; initialize stack
ip65_init:
jsr eth_init ; initialize ethernet driver
bcs @fail
jsr timer_init ; initialize timer
jsr arp_init ; initialize arp
jsr ip_init ; initialize ip, icmp, udp, and tcp
clc
@fail:
rts
; maintenance routine
; polls for packets, and dispatches to listeners
ip65_process:
jsr eth_rx ; check for incoming packets
bcs @done
lda eth_inp + 12 ; type should be 08xx
cmp #8
bne @done
lda eth_inp + 13
; cmp #eth_proto_ip ; ip = 00
beq @ip
cmp #eth_proto_arp ; arp = 06
beq @arp
@done:
rts
@arp:
inc ip65_ctr_arp
jmp arp_process
@ip:
inc ip65_ctr_ip
jmp ip_process