2010-07-30 13:51:38 +00:00
|
|
|
|
|
|
|
.include "../inc/common.i"
|
|
|
|
.include "../inc/commonprint.i"
|
|
|
|
|
|
|
|
VARTAB=$2D ;BASIC variable table storage
|
|
|
|
ARYTAB=$2F ;BASIC array table storage
|
|
|
|
FREETOP=$33 ;bottom of string text storage area
|
|
|
|
MEMSIZ=$37 ;highest address used by BASIC
|
|
|
|
CLEAR=$A65E ;clears BASIC variables
|
|
|
|
|
|
|
|
|
|
|
|
.import copymem
|
|
|
|
.importzp copy_dest
|
|
|
|
.import dhcp_init
|
|
|
|
.import ip65_init
|
|
|
|
.import cfg_get_configuration_ptr
|
2010-07-30 14:54:34 +00:00
|
|
|
.import tcp_listen
|
|
|
|
.import tcp_callback
|
|
|
|
.import tcp_connect_ip
|
|
|
|
.import tcp_send
|
|
|
|
.import tcp_send_data_len
|
2010-07-30 13:51:38 +00:00
|
|
|
.zeropage
|
|
|
|
temp_buff: .res 2
|
|
|
|
|
|
|
|
.segment "STARTUP" ;this is what gets put at the start of the file on the C64
|
|
|
|
.word jump_table ; load address
|
|
|
|
jump_table:
|
2010-07-30 14:54:34 +00:00
|
|
|
jmp init ; this should be at $4000 ie SYS 16384
|
|
|
|
jmp listen_on_port ; this should be at $4003 ie SYS 16387
|
|
|
|
jmp send_data ; this should be at $4006 ie SYS 16390
|
2010-07-30 13:51:38 +00:00
|
|
|
.code
|
|
|
|
|
|
|
|
init:
|
|
|
|
|
|
|
|
|
|
|
|
;set up the transfer variables IO$,IO% and ER%
|
|
|
|
|
|
|
|
;first make room
|
|
|
|
clc
|
|
|
|
lda VARTAB
|
|
|
|
adc #basic_vartable_entries_length/7
|
|
|
|
sta ARYTAB
|
|
|
|
lda VARTAB+1
|
|
|
|
adc #0
|
|
|
|
sta ARYTAB+1
|
|
|
|
|
|
|
|
ldax #basic_vartable_entries
|
|
|
|
stax copy_src
|
|
|
|
ldax VARTAB
|
|
|
|
stax copy_dest
|
|
|
|
ldax #basic_vartable_entries_length
|
|
|
|
jsr copymem
|
|
|
|
|
|
|
|
lda #14
|
|
|
|
jsr print_a ;switch to lower case
|
|
|
|
|
|
|
|
ldax #init_msg+1
|
|
|
|
jsr print_ascii_as_native
|
|
|
|
|
2010-07-30 14:54:34 +00:00
|
|
|
jsr ip65_init
|
2010-07-30 13:51:38 +00:00
|
|
|
bcs @init_failed
|
2010-07-30 14:54:34 +00:00
|
|
|
jsr dhcp_init
|
|
|
|
bcc @init_ok
|
|
|
|
jsr ip65_init ;if DHCP failed, then reinit the IP stack (which will reset IP address etc that DHCP messed with to cartridge default values)
|
|
|
|
bcc @init_ok
|
2010-07-30 13:51:38 +00:00
|
|
|
@init_failed:
|
2010-07-30 14:54:34 +00:00
|
|
|
print_failed
|
|
|
|
jsr print_errorcode
|
|
|
|
jmp set_error_var
|
2010-07-30 13:51:38 +00:00
|
|
|
@init_ok:
|
|
|
|
jsr print_ip_config
|
|
|
|
|
|
|
|
exit_to_basic:
|
2010-07-30 14:54:34 +00:00
|
|
|
rts
|
2010-07-30 13:51:38 +00:00
|
|
|
|
2010-07-30 14:54:34 +00:00
|
|
|
|
|
|
|
listen_on_port:
|
|
|
|
ldax #tcp_data_arrived
|
|
|
|
stax tcp_callback
|
|
|
|
lda #0
|
|
|
|
sta ip65_error
|
|
|
|
|
|
|
|
jsr get_io_var
|
|
|
|
jsr tcp_listen
|
|
|
|
bcs @error
|
|
|
|
ldax #connected
|
|
|
|
jsr print_ascii_as_native
|
|
|
|
ldax #tcp_connect_ip
|
|
|
|
jsr print_dotted_quad
|
|
|
|
jsr print_cr
|
|
|
|
@error:
|
|
|
|
jmp set_error_var
|
|
|
|
|
|
|
|
send_data:
|
|
|
|
jsr get_io_string_ptr
|
|
|
|
sty tcp_send_data_len
|
|
|
|
ldy #0
|
|
|
|
sty tcp_send_data_len+1
|
|
|
|
|
|
|
|
jsr tcp_send
|
|
|
|
bcs @error
|
|
|
|
lda #0
|
|
|
|
sta ip65_error
|
|
|
|
@error:
|
|
|
|
jmp set_error_var
|
|
|
|
|
|
|
|
|
2010-07-30 13:51:38 +00:00
|
|
|
set_error_var:
|
|
|
|
ldy #16 ;we want to set 3rd & 4th byte of 3rd entry in variable table entry
|
|
|
|
ldx #0
|
|
|
|
lda ip65_error
|
|
|
|
jmp set_var
|
|
|
|
|
|
|
|
set_io_var:
|
|
|
|
ldy #9 ;we want to set 3rd & 4th byte of 2nd entry in variable table entry
|
|
|
|
set_var:
|
|
|
|
pha
|
|
|
|
txa
|
|
|
|
sta (VARTAB),y ; set high byte
|
|
|
|
iny
|
|
|
|
pla
|
|
|
|
sta (VARTAB),y ; set low byte
|
|
|
|
rts
|
|
|
|
|
2010-07-30 14:54:34 +00:00
|
|
|
get_io_var:
|
|
|
|
ldy #9 ;we want to read 3rd & 4th byte of 2nd entry in variable table entry
|
|
|
|
lda (VARTAB),y ; set high byte
|
|
|
|
tax
|
|
|
|
iny
|
|
|
|
lda (VARTAB),y ; set low byte
|
|
|
|
rts
|
|
|
|
|
|
|
|
get_io_string_ptr:
|
|
|
|
ldy #4 ;we want to read 1st entry in variable table entry
|
|
|
|
lda (VARTAB),y ; ptr high byte
|
|
|
|
tax
|
|
|
|
dey
|
|
|
|
lda (VARTAB),y ; ptr low byte
|
|
|
|
pha
|
|
|
|
dey
|
|
|
|
|
|
|
|
lda (VARTAB),y ; length
|
|
|
|
tay
|
|
|
|
pla
|
|
|
|
rts
|
2010-07-30 13:51:38 +00:00
|
|
|
|
|
|
|
set_io_string:
|
|
|
|
stax copy_src
|
|
|
|
ldax #transfer_buffer
|
|
|
|
stax copy_dest
|
|
|
|
ldy #0
|
|
|
|
@loop:
|
|
|
|
lda (copy_src),y
|
|
|
|
beq @done
|
|
|
|
sta (copy_dest),y
|
|
|
|
iny
|
|
|
|
bne @loop
|
|
|
|
@done:
|
|
|
|
tya ;length of string copied
|
|
|
|
ldy #2 ;length is 2nd byte of variable table entry
|
|
|
|
sta (VARTAB),y
|
|
|
|
iny
|
|
|
|
lda #<transfer_buffer
|
|
|
|
sta (VARTAB),y
|
|
|
|
iny
|
|
|
|
lda #>transfer_buffer
|
|
|
|
sta (VARTAB),y
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
2010-07-30 14:54:34 +00:00
|
|
|
tcp_data_arrived:
|
|
|
|
|
|
|
|
rts
|
|
|
|
|
2010-07-30 13:51:38 +00:00
|
|
|
.data
|
|
|
|
|
|
|
|
basic_vartable_entries:
|
|
|
|
.byte $49,$CF ; IO$
|
|
|
|
.byte 0 ;length 0
|
|
|
|
.word 0; pointer
|
|
|
|
.word 0 ;2 dummy bytes
|
|
|
|
.byte $C9,$CF ; IO%
|
|
|
|
.byte 0 ;initial value HI
|
|
|
|
.byte 0 ;initial value = LO
|
|
|
|
.byte 0,0,0 ;3 dummy bytes
|
|
|
|
|
|
|
|
.byte $C5,$D2 ; ER%
|
|
|
|
.byte 0 ;initial value HI
|
|
|
|
.byte 0 ;initial value = LO
|
|
|
|
.byte 0,0,0 ;3 dummy bytes
|
|
|
|
|
|
|
|
basic_vartable_entries_length=*-basic_vartable_entries
|
2010-07-30 14:54:34 +00:00
|
|
|
connected:
|
|
|
|
.byte "connected - ",0
|
2010-07-30 13:51:38 +00:00
|
|
|
.bss
|
|
|
|
transfer_buffer: .res $100
|
|
|
|
|