mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-10-03 04:54:28 +00:00
332 lines
4.2 KiB
ArmAsm
332 lines
4.2 KiB
ArmAsm
.include "../inc/common.i"
|
|
.include "../inc/petscii.i"
|
|
|
|
|
|
.import eth_init
|
|
.import eth_init
|
|
.import eth_rx
|
|
.import eth_tx
|
|
.import eth_inp
|
|
.import eth_inp_len
|
|
|
|
.import arp_init
|
|
.import arp_lookup
|
|
.import arp_process
|
|
|
|
.import ip_init
|
|
.import ip_process
|
|
.import ip_create_packet
|
|
.import ip_send
|
|
|
|
.import ip_calc_cksum
|
|
.import ip_inp
|
|
.import ip_outp
|
|
.importzp ip_cksum_ptr
|
|
.importzp ip_header_cksum
|
|
.importzp ip_src
|
|
.importzp ip_dest
|
|
.importzp ip_data
|
|
.importzp ip_len
|
|
.importzp ip_id
|
|
.importzp ip_proto
|
|
|
|
.import icmp_inp
|
|
.import icmp_outp
|
|
.importzp icmp_type
|
|
.importzp icmp_code
|
|
.importzp icmp_cksum
|
|
.importzp icmp_data
|
|
|
|
|
|
.zeropage
|
|
|
|
printptr: .res 2
|
|
pptr: .res 2
|
|
|
|
|
|
.bss
|
|
|
|
pbtemp: .res 1
|
|
cnt: .res 2
|
|
|
|
|
|
.segment "STARTUP"
|
|
|
|
.word basicstub ; load address
|
|
|
|
basicstub:
|
|
.word @nextline
|
|
.word 2003
|
|
.byte $9e
|
|
.byte <(((init / 1000) .mod 10) + $30)
|
|
.byte <(((init / 100 ) .mod 10) + $30)
|
|
.byte <(((init / 10 ) .mod 10) + $30)
|
|
.byte <(((init ) .mod 10) + $30)
|
|
.byte 0
|
|
@nextline:
|
|
.word 0
|
|
|
|
|
|
.code
|
|
|
|
init:
|
|
lda #0
|
|
sta $d021
|
|
|
|
jsr eth_init ; initialize ethernet driver
|
|
ldx #0
|
|
bcc :+
|
|
|
|
ldax #failmsg
|
|
jmp print
|
|
|
|
: ldax #startmsg
|
|
jsr print
|
|
|
|
jsr arp_init ; initialize arp
|
|
|
|
jsr ip_init ; initialize ip and icmp
|
|
|
|
@waitpacket:
|
|
; call ip_create_packet
|
|
; set length
|
|
; set ID
|
|
; set protocol
|
|
; set destination address
|
|
; send ping
|
|
jsr ip_create_packet ; create packet template
|
|
lda #0
|
|
sta ip_outp + ip_len ; set length
|
|
lda #64
|
|
sta ip_outp + ip_len + 1
|
|
lda #$12
|
|
sta ip_outp + ip_id ; set id
|
|
lda #$34
|
|
sta ip_outp + ip_id + 1
|
|
lda #$01
|
|
sta ip_outp + ip_proto ; set protocol
|
|
ldx #3
|
|
: lda pingdest,x ; set destination
|
|
sta ip_outp + ip_dest,x
|
|
dex
|
|
bpl :-
|
|
inc cnt ; increment ping counter
|
|
bne :+
|
|
inc cnt + 1
|
|
:
|
|
lda #8
|
|
sta icmp_outp + icmp_type
|
|
lda #0
|
|
sta icmp_outp + icmp_code
|
|
sta icmp_outp + icmp_cksum
|
|
sta icmp_outp + icmp_cksum + 1
|
|
lda #$12
|
|
sta icmp_outp + icmp_data
|
|
lda #$34
|
|
sta icmp_outp + icmp_data + 1
|
|
lda cnt + 1
|
|
sta icmp_outp + icmp_data + 2
|
|
lda cnt
|
|
sta icmp_outp + icmp_data + 3
|
|
ldx #35
|
|
: txa
|
|
ora #$20
|
|
sta icmp_outp + icmp_data + 4,x
|
|
dex
|
|
bpl :-
|
|
|
|
ldax #icmp_outp
|
|
stax ip_cksum_ptr
|
|
ldax #44
|
|
jsr ip_calc_cksum
|
|
stax icmp_outp + icmp_cksum
|
|
|
|
jsr ip_send
|
|
bcc @wait
|
|
inc $d020
|
|
@wait:
|
|
jsr eth_rx
|
|
bcs @wait
|
|
|
|
lda eth_inp + 12
|
|
cmp #8
|
|
beq :+
|
|
jmp @waitpacket
|
|
:
|
|
lda eth_inp + 13
|
|
beq @ip ; ip
|
|
cmp #6 ; arp
|
|
beq @arp
|
|
jmp @waitpacket
|
|
|
|
@arp:
|
|
ldax #arpmsg
|
|
jsr print
|
|
ldax eth_inp_len
|
|
jsr printint
|
|
ldax #bytesmsg
|
|
jsr print
|
|
|
|
jsr arp_process ; process arp packet
|
|
|
|
jmp @dontprint
|
|
|
|
ldax #eth_inp
|
|
stax pptr
|
|
|
|
ldy #petscii_ltred ; dest addr
|
|
lda #6
|
|
jsr printbytes
|
|
|
|
ldy #petscii_ltgreen ; src addr
|
|
lda #6
|
|
jsr printbytes
|
|
|
|
ldy #petscii_ltgray ; type
|
|
lda #2
|
|
jsr printbytes
|
|
|
|
lda #13
|
|
jsr $ffd2
|
|
|
|
ldy #petscii_yellow ; hw, proto, hwlen, protolen, op
|
|
lda #8
|
|
jsr printbytes
|
|
lda #13
|
|
jsr $ffd2
|
|
|
|
ldy #petscii_cyan
|
|
lda #10
|
|
jsr printbytes
|
|
lda #13
|
|
jsr $ffd2
|
|
|
|
ldy #petscii_white
|
|
lda #10
|
|
jsr printbytes
|
|
lda #13
|
|
jsr $ffd2
|
|
@dontprint:
|
|
lda #petscii_ltblue
|
|
jsr $ffd2
|
|
|
|
@wp:
|
|
jmp @waitpacket
|
|
|
|
@ip:
|
|
lda ip_inp + ip_proto
|
|
cmp #1
|
|
bne @wp
|
|
|
|
ldax #ipmsg
|
|
jsr print
|
|
ldax eth_inp_len
|
|
jsr printint
|
|
ldax #bytesmsg
|
|
jsr print
|
|
|
|
lda #petscii_white
|
|
jsr $ffd2
|
|
lda ip_inp + ip_proto
|
|
jsr printhex
|
|
|
|
ldax #ip_inp + ip_src
|
|
stax pptr
|
|
ldy #petscii_ltgreen
|
|
lda #4
|
|
jsr printbytes
|
|
|
|
ldax #ip_inp + ip_dest
|
|
stax pptr
|
|
ldy #petscii_ltred
|
|
lda #4
|
|
jsr printbytes
|
|
|
|
lda #petscii_ltblue
|
|
jsr $ffd2
|
|
lda #13
|
|
jsr $ffd2
|
|
; jsr $ffd2
|
|
|
|
jsr ip_process ; handle packet
|
|
|
|
jmp @waitpacket
|
|
|
|
|
|
printbytes:
|
|
sta pbtemp
|
|
tya
|
|
jsr $ffd2
|
|
ldy #0
|
|
: lda (pptr),y
|
|
jsr printhex
|
|
iny
|
|
cpy pbtemp
|
|
bne :-
|
|
|
|
lda pbtemp
|
|
clc
|
|
adc pptr
|
|
sta pptr
|
|
bcc :+
|
|
inc pptr+1
|
|
: rts
|
|
|
|
|
|
print:
|
|
sta printptr
|
|
stx printptr + 1
|
|
ldy #0
|
|
: lda (printptr),y
|
|
beq :+
|
|
jsr $ffd2
|
|
iny
|
|
bne :-
|
|
: rts
|
|
|
|
|
|
printint:
|
|
pha
|
|
txa
|
|
jsr printhex
|
|
pla
|
|
printhex:
|
|
pha
|
|
lsr
|
|
lsr
|
|
lsr
|
|
lsr
|
|
tax
|
|
lda hexdigit,x
|
|
jsr $ffd2
|
|
pla
|
|
and #$0f
|
|
tax
|
|
lda hexdigit,x
|
|
jsr $ffd2
|
|
rts
|
|
|
|
|
|
.data
|
|
|
|
hexdigit:
|
|
.byte "0123456789ABCDEF"
|
|
|
|
startmsg:
|
|
.byte 14, "rr-nET INITIALIZED", 13, 0
|
|
|
|
failmsg:
|
|
.byte 14, "rr-nET INIT FAILED", 13, 0
|
|
|
|
arpmsg:
|
|
.byte "arp PACKET RECEIVED: ",0
|
|
|
|
ipmsg:
|
|
.byte "ip PACKET RECEIVED: ",0
|
|
|
|
bytesmsg:
|
|
.byte " BYTES", 13, 0
|
|
|
|
pingdest:
|
|
.byte 192, 168, 0, 2
|