From 940d66fa0d7069d397bca6da1e7a653cca2b5e57 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Sat, 6 Nov 2010 21:11:27 +0000 Subject: [PATCH] git-svn-id: http://svn.code.sf.net/p/netboot65/code@287 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/Makefile | 4 +- client/basic/bails.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.s | 85 +++++++-- client/basic/welcome_banner.txt | 2 +- client/inc/version.i | 2 +- client/v1541/v1541.cfg | 4 +- client/v1541/v1541.prg | Bin 7288 -> 7473 bytes client/v1541/v1541.s | 311 ++++++++++++++++++++------------ dist/version_number.txt | 2 +- doc/CHANGES.txt | 2 +- 11 files changed, 274 insertions(+), 138 deletions(-) diff --git a/client/basic/Makefile b/client/basic/Makefile index 1fd8224..6e6ddab 100644 --- a/client/basic/Makefile +++ b/client/basic/Makefile @@ -17,8 +17,10 @@ IP65LIB=../ip65/ip65_tcp.lib C64PROGLIB=../drivers/c64prog.lib -all: kipperbas.d64 bails.d64 +all: ip65 kipperbas.d64 bails.d64 +ip65: + make -C ../ip65 all %.o: %.s $(INCFILES) $(AS) $(AFLAGS) $< diff --git a/client/basic/bails.d64 b/client/basic/bails.d64 index a3e391cbaa3a7e1cb96626c01e0fb6a0744ae4b1..5996533807749911c3a55b7203bfc6b48da8d15e 100644 GIT binary patch delta 34 hcmZp;#?=5sTNstoI2mAIyL=ks6~VR&#$^>u#sH{m2>bv5 delta 27 hcmZp;#?=5sTNstowi~1|UJ#rpz}r^AxU7Q77yy;}39bMD diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index c1730265a3cbbba7d30dd039ee794d0a81996bfc..96de627d7d2ea259aa15aa313bb067f9e45d37fb 100644 GIT binary patch delta 8273 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 delta 8318 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 diff --git a/client/basic/kipperbas.s b/client/basic/kipperbas.s index c2d9c3b..d6334df 100644 --- a/client/basic/kipperbas.s +++ b/client/basic/kipperbas.s @@ -25,7 +25,7 @@ IERROR = $0300 ICRUNCH = $0304 ;Crunch ASCII into token IQPLOP = $0306 ;List IGONE = $0308 ;Execute next BASIC token - +IEVAL = $30A ; evaluate expression CHRGET = $73 CHRGOT = $79 CHROUT = $FFD2 @@ -171,14 +171,14 @@ FS=$8000-main_start ldax #welcome_banner jsr print - ldx #5 ;Copy CURRENT vectors + ldx #7 ;Copy CURRENT vectors @copy_old_vectors_loop: lda ICRUNCH,x sta oldcrunch,x dex bpl @copy_old_vectors_loop - ldx #5 ;Copy CURRENT vectors + ldx #7 ;Copy CURRENT vectors install_new_vectors_loop: lda vectors,x sta ICRUNCH,x @@ -592,8 +592,11 @@ print: extract_string: + jsr FRMEVL + jsr FRESTR ;if not string, will create type mismatch error + sta param_length tay lda #0 @@ -827,7 +830,10 @@ ping_keyword: lda $cb ;current key pressed cmp #$3F ;RUN/STOP? beq @done + lda ping_counter + beq @ping_loop dec ping_counter + cmp #1 bne @ping_loop @done: jsr print_cr @@ -1087,12 +1093,15 @@ make_tcp_connection: rts netcat_keyword: + lda $CC + sta cursor_state + lda #$0 + sta $CC ;enable blinking cursor ldax #netcat_callback stax tcp_callback jsr make_tcp_connection - bcc :+ - rts - : + bcs @exit + ;is there an optional parameter? ldx #0 jsr get_optional_byte @@ -1113,8 +1122,12 @@ netcat_keyword: jsr ip65_process lda connection_state bne @not_disconnected +@disconnected: ldax #disconnected jsr print +@exit: + lda cursor_state + sta $CC rts @not_disconnected: @@ -1131,11 +1144,8 @@ netcat_keyword: beq @runstop jsr ip65_process lda connection_state - bne :+ - ldax #disconnected - jsr print - rts -: + beq @disconnected + jsr $f142 ;not officially documented - where F13E (GETIN) falls through to if device # is 0 (KEYBD) beq @read_line @@ -1180,6 +1190,7 @@ netcat_keyword: jmp @read_line @input_done: + jsr reset_cursor lda #$0d jsr $ffd2 ;print a newline ldy string_length @@ -1208,6 +1219,9 @@ netcat_keyword: @runstop: lda #0 sta $cb ;overwrite "current key pressed" else it's seen by the tcp stack and the close aborts + lda cursor_state + sta $CC + jmp tcp_close @not_runstop: jsr $ffe4 ;getkey - 0 means no input @@ -1227,12 +1241,24 @@ netcat_keyword: jmp @main_polling_loop @error_on_send: + lda cursor_state + sta $CC ldax #transmission jmp print_error - +reset_cursor: + lda $cf ;0 means last cursor blink set char to be reversed + beq @done + lda $ce ;original value of cursor char + ldx $287 ;original colour + ldy #$0 ;blink phase + sty $cf + jsr $ea13 ;restore char & colour +@done: + rts netcat_callback: + jsr reset_cursor lda tcp_inbound_data_length+1 cmp #$ff bne @not_eof @@ -1430,14 +1456,42 @@ tcpblat_keyword: lda #KPR_ERROR_FILE_ACCESS_FAILURE jmp @store_error +evaluate: + lda $00 + sta $0D ;set string flag to not string + jsr CHRGET + cmp #$E3 ; PING keyword + bne @done + jsr CHRGET ;take PING command off stack + + ldax #icmp_echo_ip + jsr get_ip_parameter + lda #$00 + sta $0D ;set string flag to not string + + bcs @error + jsr icmp_ping + bcc @no_error +@error: + lda #$ff + tax +@no_error: + tay + txa + jmp $b395 ;signed 16 bit number to floating point + rts + +@done: + jsr CHRGOT + jmp $AE8D ;inside original EVAL routine .rodata vectors: .word crunch .word list .word execute - + .word evaluate ; Keyword list ; Keywords are stored as normal text, ; followed by the token number. @@ -1553,7 +1607,7 @@ jmp_crunch: .byte $4C ;JMP oldcrunch: .res 2 ;Old CRUNCH vector oldlist: .res 2 oldexec: .res 2 - +oldeval: .res 2 emit_a: current_output_ptr=emit_a+1 sta $ffff @@ -1565,7 +1619,6 @@ current_output_ptr=emit_a+1 rts - .bss netcat_mode: .res 1 bytes_read: .res 2 @@ -1584,4 +1637,4 @@ file_opened: .res 1 connection_state: .res 1 netcat_timeout: .res 1 buffer_length: .res 2 - +cursor_state: .res 1 diff --git a/client/basic/welcome_banner.txt b/client/basic/welcome_banner.txt index 550a052..1182c50 100644 --- a/client/basic/welcome_banner.txt +++ b/client/basic/welcome_banner.txt @@ -1 +1 @@ -**** KIPPER BASIC 1.0 **** +**** KIPPER BASIC 1.1 **** diff --git a/client/inc/version.i b/client/inc/version.i index dab8cfc..681cfc0 100644 --- a/client/inc/version.i +++ b/client/inc/version.i @@ -1 +1 @@ -.byte "1.0.31" +.byte "1.0.35" diff --git a/client/v1541/v1541.cfg b/client/v1541/v1541.cfg index 0697bf8..82ad2d8 100644 --- a/client/v1541/v1541.cfg +++ b/client/v1541/v1541.cfg @@ -2,7 +2,7 @@ MEMORY { IP65ZP: start = $A3, size = $12, type = rw; STARTRAM: start = $07FF, size = $4000, file = %O; - UNDERBASIC: start = $A000, size = $2000, define = yes, file = %O; + UNDERBASIC: start = $9000, size = $3000, define = yes, file = %O; HIRAM: start = $C000, size = $01000; } @@ -12,6 +12,7 @@ MEMORY { IP65ZP: load = IP65ZP, type = zp; ZEROPAGE: load = IP65ZP, type = zp; STARTUP: load = STARTRAM, type = rw; + TCP_VARS: load = UNDERBASIC, type = bss; CODE: load = STARTRAM, run=UNDERBASIC, type = ro,define = yes; RODATA: load = STARTRAM, run=UNDERBASIC, type = ro,define = yes; DATA: load = STARTRAM, run=UNDERBASIC, type = rw, define = yes; @@ -19,6 +20,5 @@ MEMORY { CODESTUB: load STARTRAM, run= HIRAM, type = rw, define = yes; BSS: load = HIRAM, type = bss; - TCP_VARS: load = UNDERBASIC, type = bss; } diff --git a/client/v1541/v1541.prg b/client/v1541/v1541.prg index a9256f511e8c60b3d7941c3eb05b0bc5006f3ace..89823a47c4d4126a44dcadda44dcabd85f2cd612 100644 GIT binary patch literal 7473 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 Kg|AKk7XAnHi8D_C diff --git a/client/v1541/v1541.s b/client/v1541/v1541.s index 6b4b3bb..b65eb4f 100644 --- a/client/v1541/v1541.s +++ b/client/v1541/v1541.s @@ -81,6 +81,9 @@ basicstub: .word 0 relocate: + ldax #$9000 + stax $37; MEMSIZ + jsr $A65E ;do a CLR ;relocate everything ldax #__CODE_LOAD__ @@ -101,7 +104,7 @@ relocate: @installed_msg: .byte "V1541 INSTALLED",0 @already_installed_msg: .byte "V1541 ALREADY INSTALLED",0 @not_installed: - + ldax #__DATA_LOAD__ stax copy_src @@ -217,14 +220,13 @@ ldax #irq_handler sei stax CINV -; jsr install_wedge - @done: jsr swap_basic_in lda #0 sta $dc08 ;make sure TOD clock is started cli - rts + + rts __copymem: sta end @@ -273,69 +275,14 @@ __print: @done_print: rts -install_wedge: - ldax #wedge_start - stax copy_src - sec - lda MEMSIZ - sbc #wedge_length - sta MEMSIZ+1 - sta copy_dest+1 - sta IERROR+1 - ldax #wedge_length - jsr __copymem - jmp $a644 ;NEW - -wedge_start: - - - ;new error handler - cpx #$0b ; is it a SYNTAX ERROR? - beq @syntax_error; yes, jump to command test -@exit: - jmp $e38b ;nope, normal error handler - -@syntax_error: - - jsr CHRGOT ;read current character in buffer again - bcc @exit - cmp #$b1 ;is current character a > token? - bne @exit ;nope, normal error handler -@got_it: - ldy #0 - lda #'>' - sta (TXTPTR),y ;replace token with > symbol again -@scan_command: - lda (TXTPTR),y ; - beq @end_of_command - cmp #':' - beq @end_of_command - iny - bne @scan_command -@end_of_command: - sty FNLEN ;file name length - lda TXTPTR ;start of filename - sta FNADDR - lda TXTPTR+1 ;start of filename - sta FNADDR+1 - lda #$2 - sta $BA ;current device number - ;jmp (ILOAD) - jsr load_handler - jmp $A474 ;READY prompt - - -wedge_length=*-wedge_start .code load_dev_2: ldy #$00 + sty receive_type ;0 = display to screen, 1 = load to memory + sty buffer_length + sty buffer_length+1 lda (FNADDR),y cmp #'!' beq @do_disks @@ -343,8 +290,26 @@ load_dev_2: beq @do_command cmp #'#' beq @do_insert - + cmp #'=' + beq @do_find + cmp #'/' + bne @not_cf + lda FNLEN + cmp #1 + bne @do_cf + ldax #cmd_cf_root + jmp @send_string_receive_response +@not_cf: + cmp #'%' + beq @do_name + cmp #'$' + beq @do_cat + inc receive_type + ldax #cmd_load + jmp @copy_prefix + @done: + clc jmp swap_basic_in @@ -356,7 +321,6 @@ load_dev_2: dey bne @copy_cmd - ldy FNLEN lda #$0D sta cmd_buffer-1,y @@ -364,29 +328,57 @@ load_dev_2: sta cmd_buffer,y @send_command_buffer: ldax #cmd_buffer - jmp @send_string_show_list - + jmp @send_string_receive_response + +@do_name: + ldax #cmd_name + jmp @send_string_receive_response + +@do_find: + ldax #cmd_find + jmp @copy_prefix + +@do_cat: + ldax #cmd_cat + jmp @send_string_receive_response + + @do_disks: - ldax #@cmd_dsks -@send_string_show_list: + ldax #cmd_dsks +@send_string_receive_response: jsr tcp_send_string bcs @error - jsr show_list + lda receive_type + bne @load_file + jsr show_list jmp @done +@load_file: + jsr receive_file + jmp @done + +@do_cf: + ldax #cmd_cf + jmp @copy_prefix -@cmd_dsks: .byte "DISKS 22",$0d,$0 @do_insert: - - ldx #0 -@copy_insert: - lda @cmd_insert,x - beq @end_insert - sta cmd_buffer,x - inx - bne @copy_insert -@end_insert: + ldax #cmd_insert +@copy_prefix: + stax copy_src + ldy #0 +@copy_prefix_loop: + lda (copy_src),y + beq @end_copy_prefix + sta cmd_buffer,y + iny + bne @copy_prefix_loop +@end_copy_prefix: + tya + tax ldy #1 + lda receive_type + beq :+ + dey ;if this is a LOAD command, don't skip the first byte : lda (FNADDR),y sta cmd_buffer,x @@ -402,22 +394,18 @@ load_dev_2: sta cmd_buffer+1,x jmp @send_command_buffer -@cmd_insert: .byte "INSERT ",0 - - @error: + ldax #SERVER_PORT + jsr tcp_connect + ldax #transmission_error jsr print - lda ip65_error - jsr print_hex - lda tcp_state - jsr print_hex - + jmp @done -show_list: - +show_list: + @loop: lda $91 ; look for STOP key cmp #$7F @@ -427,6 +415,7 @@ show_list: bcc @got_data rts @got_data: + cmp #$03 ;ETX byte (indicating end of page)? beq @get_user_input cmp #$04 ;EOT byte (indicating end of list)? @@ -436,6 +425,7 @@ show_list: ;End of page, so ask for user input @get_user_input: + jsr get_key cmp #'S' @@ -552,28 +542,9 @@ next_char: sta buffer_length+1 pla clc + rts -print_hex: - pha - pha - lsr - lsr - lsr - lsr - tax - lda hexdigits,x - jsr print_a - pla - and #$0F - tax - lda hexdigits,x - jsr print_a - pla - rts -hexdigits: -.byte "0123456789ABCDEF" - tcp_irq_handler: inc keep_alive_counter @@ -585,8 +556,98 @@ tcp_irq_handler: @done: rts - +receive_file: + lda #0 + sta byte_count +@loop: + lda $91 ; look for STOP key + cmp #$7F + beq @done + lda #2 ;wait for max 2 seconds + jsr getc + bcc @got_data +@done: + rts +@got_data: + ldy byte_count + sta file_length,y + inc byte_count + lda byte_count + cmp #4 + bne @loop + ;is the first 4 bytes "500 " +; + lda file_length+1 + cmp #'0' ;if 2nd char was '0' this might be an ASCII error message + bne @real_file_transmission + lda file_location + cmp #$01 + beq @real_file_transmission + ;this was probably an ASCII error message + + lda #0 + sta byte_count +: + ldy byte_count + lda file_length,y + jsr print_a + inc byte_count + lda byte_count + cmp #4 + bne :- + jmp show_list +@real_file_transmission: + ldax file_location + stax copy_dest + + lda file_length + sec + sbc #2 + sta file_length + + lda file_length+1 + sbc #0 + sta file_length+1 + +@rx_loop: + lda file_length+1 + bne @not_done + lda file_length + bne @not_done + ;file now fully in RAM, time for housekeeping + sta $297 ;RS-232 status = 0 (no error) + sta $90 ;status = 0 (no error) + ldy copy_dest+1 ;high byte of end of loaded program + ldx copy_dest ;lo byte of end of loaded program + inx + bne :+ + iny ;if X rolled over, bump y +: + rts ;done! + +@not_done: + lda #2 ;wait for max 2 seconds + jsr getc + bcs @rx_error + ldy #0 + sta (copy_dest),y + inc copy_dest + bne :+ + inc copy_dest+1 +: + lda file_length + bne :+ + dec file_length+1 + lda #'.' + jsr print_a +: + dec file_length + jmp @rx_loop + +@rx_error: + ldax #receive_error + jmp print .segment "CODESTUB" @@ -605,6 +666,8 @@ swap_basic_in: sta underneath_basic rts +underneath_basic: .res 1 + load_handler: ldx $BA ; Current Device Number cpx #$02 @@ -617,7 +680,8 @@ old_load_vector: jmp load_dev_2 irq_handler: - lda underneath_basic + + lda underneath_basic bne @done jsr swap_basic_out jsr tcp_irq_handler @@ -627,22 +691,39 @@ irq_handler: old_irq_vector: .word $ffff -underneath_basic: .res 1 + +.data +cmd_dsks: .byte "DISKS 22",$0d,$0 +cmd_insert: .byte "INSERT ",0 +cmd_cat: .byte "$",$0d,$00 +cmd_find: .byte "FIND ",$00 +cmd_name: .byte "NAME",$0d,$00 +cmd_cf: .byte "CF ",0 +cmd_load: .byte "LOAD ",0 +cmd_cf_root: .byte "CF /",$0d,0 + +transmission_error: .byte "TRANSMIT ERROR",13,0 +receive_error: .byte "RECEIVE ERROR",13,0 .segment "TCP_VARS" -csip_stream_buffer: .res 1400 +csip_stream_buffer: .res 1500 cmd_buffer: .res 100 +.bss + user_abort: .res 1 getc_timeout_end: .res 1 getc_timeout_seconds: .res 1 buffer_length: .res 2 keep_alive_counter: .res 1 - +file_length: .res 2 +file_location: .res 2 +rx_length: .res 2 +receive_type: .res 1 +byte_count: .res 1 .data continue_cmd: .byte $0D,0 stop_cmd: .byte "S",0 -transmission_error: .byte "TRANSMISSION ERROR",13,0 ;-- LICENSE FOR v1541.s -- ; The contents of this file are subject to the Mozilla Public License diff --git a/dist/version_number.txt b/dist/version_number.txt index a8c6b78..fff1fac 100644 --- a/dist/version_number.txt +++ b/dist/version_number.txt @@ -1 +1 @@ -1.0.31 \ No newline at end of file +1.0.35 \ No newline at end of file diff --git a/doc/CHANGES.txt b/doc/CHANGES.txt index f0787c1..810dfc4 100644 --- a/doc/CHANGES.txt +++ b/doc/CHANGES.txt @@ -1,5 +1,5 @@ - v1.0.33 +v1.0.33 - FIX: gracefully close the TCP connection when a telnet connection is aborted by user keystroke - FIX: telnet client was reprocessing last received packet after an error (including user abort) - FIX: was not signalling an error when a RST or FIN was sent back to tcp_connect