emailler/ip65/udp_c.s
Oliver Schmidt 6680772b04 Introduced C interface to IP65.
The IP5 usage of ld65 segments and zeropage variables was made compatible with cc65 C programs already a while ago. This commit is the next logical step which is to introduce the actual C interface to IP65.

IP65 for C programs shares the the ip65.lib / ip65_tcp.lib with IP65 for assembler programs. However the various libraries from the 'drivers' are not reused. Instead there's exactly one library for every target named ip65_<target>.lib. Those libraries contain only functions used by ip65.lib / ip65_tcp.lib.

TODOs:

- Introduce c64_timer.s and atr_timer.s.
- Add a C interface to the rest of the IP65 functionality (especially TCP).
2017-11-05 14:28:49 +01:00

84 lines
1.2 KiB
ArmAsm

.include "../inc/common.i"
.export _udp_add_listener
.export _udp_remove_listener
.export _udp_recv_buf
.export _udp_recv_len
.export _udp_recv_src
.export _udp_recv_src_port
.export _udp_send
.import udp_add_listener
.import udp_remove_listener
.import ip_inp
.import udp_inp
.import udp_send
.import udp_callback
.importzp ip_src
.importzp udp_src_port
.importzp udp_len
.importzp udp_data
.import udp_send_len
.import udp_send_dest
.import udp_send_dest_port
.import udp_send_src_port
.import popax, popeax
.importzp sreg
_udp_add_listener:
stax udp_callback
jsr popax
jsr udp_add_listener
ldx #$00
txa
rol
rts
_udp_remove_listener:
jsr udp_remove_listener
ldx #$00
txa
rol
rts
_udp_recv_buf := udp_inp+udp_data
_udp_recv_len:
lda udp_inp+udp_len+1
ldx udp_inp+udp_len
sec
sbc #udp_data
bcs :+
dex
: rts
_udp_recv_src:
ldax ip_inp+ip_src+2
stax sreg
ldax ip_inp+ip_src
rts
_udp_recv_src_port:
lda udp_inp+udp_src_port+1
ldx udp_inp+udp_src_port
rts
_udp_send:
stax udp_send_src_port
jsr popax
stax udp_send_dest_port
jsr popeax
stax udp_send_dest
ldax sreg
stax udp_send_dest+2
jsr popax
stax udp_send_len
jsr popax
jsr udp_send
ldx #$00
txa
rol
rts