.include "../inc/common.inc" .include "../inc/commonprint.inc" .include "../inc/net.inc" .export start .import exit_to_basic .import ascii_to_native .import parse_dotted_quad .import dotted_quad_value .import tcp_listen .import tcp_callback .import ip65_random_word .import ip65_error .import tcp_connect .import tcp_connect_ip .import tcp_inbound_data_ptr .import tcp_inbound_data_length .import tcp_send .import tcp_send_data_len .importzp acc32 .importzp op32 .importzp acc16 .import add_32_32 .import add_16_32 .import cmp_32_32 .import cmp_16_16 .import mul_8_16 .import sub_16_16 ; keep LD65 happy .segment "INIT" .segment "ONCE" .segment "STARTUP" ; switch to lower case charset lda #14 jsr print_a start: jsr print_cr ldax #$1234 stax acc16 ldax #$1235 jsr test_sub_16_16 ldax #$180 stax acc16 ldax #$28 jsr test_sub_16_16 ldax #$ff34 stax acc16 ldax #$1235 jsr test_sub_16_16 ldax #$100 stax acc16 ldax #$ffff jsr test_sub_16_16 ldax #$ffff stax acc16 ldax #$100 jsr test_sub_16_16 ldax #number1 stax acc32 stax op32 jsr test_cmp_32_32 ldax #number1 stax acc32 ldax #number13 stax op32 jsr test_cmp_32_32 ldax #number1 stax acc32 ldax #number2 stax op32 jsr test_cmp_32_32 ldax #$12 stax acc16 jsr test_cmp_16_16 ldax #$1234 stax acc16 jsr test_cmp_16_16 ldax #$1234 stax acc16 ldax #$1235 jsr test_cmp_16_16 ldax #$1234 stax acc16 ldax #$2234 jsr test_cmp_16_16 ldax #$0000 stax acc16 jsr test_cmp_16_16 ldax #$FFFF stax acc16 jsr test_cmp_16_16 ldax #number1 stax acc32 ldax #number2 stax op32 jsr test_add_32_32 ldax #number3 stax acc32 ldax #number4 stax op32 jsr test_add_32_32 ldax #number5 stax acc32 ldax #number6 stax op32 jsr test_add_32_32 ldax #number7 stax acc32 ldax #number8 stax op32 jsr test_add_32_32 ldax #number9 stax acc32 ldax #number10 stax op32 jsr test_add_32_32 ldax #number11 stax acc32 ldax #number12 stax op32 jsr test_add_32_32 ldax #number13 stax acc32 ldax #$1234 jsr test_add_16_32 ldax #number14 stax acc32 ldax #$1234 jsr test_add_16_32 ldax #number15 stax acc32 ldax #$1234 jsr test_add_16_32 ldax #number16 stax acc32 ldax #$1234 jsr test_add_16_32 ldax #number17 stax acc32 ldax #$158 jsr test_add_16_32 jsr print_cr init_ip_via_dhcp jsr print_ip_config jsr print_cr jsr print_random_number ; connect to port 81 - should be rejected ldax #tcp_callback_routine stax tcp_callback ldax tcp_dest_ip stax tcp_connect_ip ldax tcp_dest_ip+2 stax tcp_connect_ip+2 ldax #81 jsr tcp_connect jsr check_for_error ldax #http_get_length stax tcp_send_data_len ldax #http_get_msg jsr tcp_send jsr check_for_error ; now try to connect to port 80 - should be accepted ldax #tcp_callback_routine stax tcp_callback ldax tcp_dest_ip stax tcp_connect_ip ldax tcp_dest_ip+2 stax tcp_connect_ip+2 ldax #80 jsr tcp_connect jsr check_for_error lda #0 sta cxn_closed ldax #http_get_length stax tcp_send_data_len ldax #http_get_msg jsr tcp_send jsr check_for_error @loop_till_end: jsr ip65_process lda #1 cmp cxn_closed beq @loop_till_end jmp exit_to_basic ldax #tcp_callback_routine stax tcp_callback ldax tcp_dest_ip stax tcp_connect_ip ldax tcp_dest_ip+2 stax tcp_connect_ip+2 ldax #80 jsr tcp_connect jsr check_for_error ldax #4 stax tcp_send_data_len ldax #http_get_msg jsr tcp_send jsr check_for_error ldax #http_get_length-4 stax tcp_send_data_len ldax #http_get_msg+4 jsr tcp_send jsr check_for_error ldax #looping jsr print @loop_forever: jsr ip65_process jmp @loop_forever tcp_callback_routine: lda tcp_inbound_data_length cmp #$ff bne @not_end_of_file lda #1 sta cxn_closed rts @not_end_of_file: lda #14 jsr print_a ; switch to lower case ldax tcp_inbound_data_ptr stax get_next_byte+1 lda #0 sta byte_counter sta byte_counter+1 @print_one_byte: jsr get_next_byte jsr ascii_to_native jsr print_a inc get_next_byte+1 bne :+ inc get_next_byte+2 : inc byte_counter bne :+ inc byte_counter+1 : ldax byte_counter stax acc16 ldax tcp_inbound_data_length jsr cmp_16_16 bne @print_one_byte rts check_for_error: lda ip65_error beq @exit ldax #error_code jsr print lda ip65_error jsr print_hex jsr print_cr lda #0 sta ip65_error @exit: rts print_random_number: jsr ip65_random_word stx temp_ax jsr print_hex lda temp_ax jsr print_hex jsr print_cr rts ; assumes acc32 & op32 already set test_add_32_32: ldy #3 : lda (acc32),y jsr print_hex dey bpl :- lda #'+' jsr print_a ldy #3 : lda (op32),y jsr print_hex dey bpl :- lda #'=' jsr print_a jsr add_32_32 ldy #3 : lda (acc32),y jsr print_hex dey bpl :- jsr print_cr rts ; assumes acc32 & op32 already set test_cmp_32_32: ldy #3 : lda (acc32),y jsr print_hex dey bpl :- lda #'=' jsr print_a ldy #3 : lda (op32),y jsr print_hex dey bpl :- lda #':' jsr print_a jsr cmp_32_32 bne @not_equal lda #'T' jmp @char_set @not_equal: lda #'F' @char_set: jsr print_a jsr print_cr rts ; assumes acc16& AX already set test_cmp_16_16: stax temp_ax lda acc16+1 jsr print_hex lda acc16 jsr print_hex lda #'=' jsr print_a lda temp_ax+1 jsr print_hex lda temp_ax jsr print_hex lda #':' jsr print_a ldax temp_ax jsr cmp_16_16 bne @not_equal lda #'T' jmp @char_set @not_equal: lda #'F' @char_set: jsr print_a jsr print_cr rts ; assumes acc32 & AX already set test_add_16_32: stax temp_ax ldy #3 : lda (acc32),y jsr print_hex dey bpl :- lda #'+' jsr print_a lda temp_ax+1 jsr print_hex lda temp_ax jsr print_hex lda #'=' jsr print_a ldax temp_ax jsr add_16_32 ldy #3 : lda (acc32),y jsr print_hex dey bpl :- jsr print_cr rts ; assumes acc16& A already set test_mul_8_16: sta temp_ax lda acc16+1 jsr print_hex lda acc16 jsr print_hex lda #'*' jsr print_a lda temp_ax jsr print_hex lda #'=' jsr print_a lda temp_ax jsr mul_8_16 lda acc16+1 jsr print_hex lda acc16 jsr print_hex jsr print_cr rts ; assumes acc16 & AX already set test_sub_16_16: stax temp_ax lda acc16+1 jsr print_hex lda acc16 jsr print_hex lda #'-' jsr print_a lda temp_ax+1 jsr print_hex lda temp_ax jsr print_hex lda #'=' jsr print_a ldax temp_ax jsr sub_16_16 lda acc16+1 jsr print_hex lda acc16 jsr print_hex jsr print_cr rts @error: ldax #failed_msg jsr print jsr print_cr rts .bss temp_ax: .res 2 cxn_closed: .res 1 byte_counter: .res 1 .data number1: .byte $1,$2,$3,$f number2: .byte $10,$20,$30,$f0 number3: .byte $ff,$ff,$ff,$ff number4: .byte $1,$0,$0,$0 number5: .byte $ff,$ff,$ff,$ff number6: .byte $0,$0,$0,$0 number7: .byte $ff,$ff,$ff,$fe number8: .byte $1,$0,$0,$0 number9: .byte $ff,$ff,$ff,$fe number10: .byte $5,$0,$0,$0 number11: .byte $ff,$0,$0,$e number12: .byte $5,$0,$0,$0 number13: .byte $1,$2,$3,$4 number14: .byte $ff,$ff,$ff,$ff number15: .byte $ff,$ff,$00,$00 number16: .byte $00,$00,$00,$00 number17: .byte $5b,$bc,$08,$a9 tcp_dest_ip: ; .byte 10,5,1,1 .byte 74,207,242,229 looping: .asciiz "LOOPING..." http_get_msg: .byte "GET /blogx/ HTTP/1.0",13,10,13,10 http_get_msg_end: http_get_length = http_get_msg_end-http_get_msg get_next_byte: lda $ffff rts ; -- LICENSE FOR math.s -- ; The contents of this file are subject to the Mozilla Public License ; Version 1.1 (the "License"); you may not use this file except in ; compliance with the License. You may obtain a copy of the License at ; http://www.mozilla.org/MPL/ ; ; Software distributed under the License is distributed on an "AS IS" ; basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the ; License for the specific language governing rights and limitations ; under the License. ; ; The Original Code is ip65. ; ; The Initial Developer of the Original Code is Jonno Downes, ; jonno@jamtronix.com. ; Portions created by the Initial Developer are Copyright (C) 2009 ; Jonno Downes. All Rights Reserved. ; -- LICENSE END --