.include "../inc/common.inc"

.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
