emailler/ip65/tftp_c.s

110 lines
1.6 KiB
ArmAsm

.include "../inc/common.inc"
.export _tftp_download
.export _tftp_download_to_memory
.export _tftp_upload
.export _tftp_upload_from_memory
.import tftp_download
.import tftp_upload
.import tftp_upload_from_memory
.import tftp_set_callback_vector
.import tftp_clear_callbacks
.import tftp_ip
.import tftp_load_address
.import tftp_data_block_length
.import tftp_current_memloc
.import tftp_filename
.import tftp_filesize
.import pushax, popax, popeax
.importzp sreg
.data
callback:
clc
adc #02 ; skip the 2 byte length at start of buffer
bcc :+
inx
: jsr pushax
ldax tftp_data_block_length
jmpvector:
jmp $ffff
.code
_tftp_download:
stax jmpvector+1
ldax #callback
jsr tftp_set_callback_vector
jsr popax
stax tftp_filename
jsr popeax
stax tftp_ip
ldax sreg
stax tftp_ip+2
jsr tftp_download
ldx #$00
txa
rol
rts
_tftp_download_to_memory:
stax tftp_load_address
jsr tftp_clear_callbacks
jsr popax
stax tftp_filename
jsr popeax
stax tftp_ip
ldax sreg
stax tftp_ip+2
jsr tftp_download
bcs error
sec
lda tftp_current_memloc
sbc tftp_load_address
tay
lda tftp_current_memloc+1
sbc tftp_load_address+1
tax
tya
rts
error:
ldx #$00
txa
rts
_tftp_upload:
jsr tftp_set_callback_vector
jsr popax
stax tftp_filename
jsr popeax
stax tftp_ip
ldax sreg
stax tftp_ip+2
jsr tftp_upload
ldx #$00
txa
rol
rts
_tftp_upload_from_memory:
stax tftp_filesize
jsr popax
stax tftp_load_address
jsr popax
stax tftp_filename
jsr popeax
stax tftp_ip
ldax sreg
stax tftp_ip+2
jsr tftp_upload_from_memory
ldx #$00
txa
rol
rts