From c7e234bf4b35b862ccd4ea66bbaeb8f846102901 Mon Sep 17 00:00:00 2001 From: jonnosan Date: Wed, 11 Aug 2010 08:07:00 +0000 Subject: [PATCH] git-svn-id: http://svn.code.sf.net/p/netboot65/code@266 93682198-c243-4bdb-bd91-e943c89aac3b --- client/basic/kipperbas.d64 | Bin 174848 -> 174848 bytes client/basic/kipperbas.s | 140 +++++++++++++++++++++++++++++++---- client/drivers/c64charconv.s | 2 +- 3 files changed, 125 insertions(+), 17 deletions(-) diff --git a/client/basic/kipperbas.d64 b/client/basic/kipperbas.d64 index 951fc3d5b9c6c549618f9592338e75ae463cf286..32b68b084cb0e06a82a1c2358672abec91e84b53 100644 GIT binary patch literal 174848 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 K2tZ&|;NJmYRT47* literal 174848 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 diff --git a/client/basic/kipperbas.s b/client/basic/kipperbas.s index b635bad..24ac5ec 100644 --- a/client/basic/kipperbas.s +++ b/client/basic/kipperbas.s @@ -36,6 +36,7 @@ FRMEVL = $AD9E ;evaluate expression FRESTR = $B6A3 ;free temporary string FRMNUM = $AD8A ;get a number GETADR = $B7F7 ;convert number to 16 bit integer +INLIN = $A560 ; read a line from keyboard VALTYP=$0D ;00=number, $FF=string @@ -84,7 +85,8 @@ crunched_line = $0200 ;Input buffer .import get_key_if_available .import tcp_send_keep_alive .import timer_read - +.import native_to_ascii +.import ascii_to_native .zeropage temp: .res 2 temp2: .res 2 @@ -1017,10 +1019,15 @@ netcat_keyword: ldax #netcat_callback stax tcp_callback jsr make_tcp_connection - bcc @main_polling_loop + bcc :+ rts - + : + ;is there an optional parameter? + ldx #0 + jsr get_optional_byte + stx netcat_mode @main_polling_loop: + jsr timer_read txa adc #$20 ;32 x 1/4 = ~ 8seconds @@ -1040,24 +1047,116 @@ netcat_keyword: rts @not_disconnected: - jsr get_key_if_available - beq @wait_for_keypress - - ldx #1 - stx tcp_send_data_len - dex - stx tcp_send_data_len+1 + lda netcat_mode + beq @not_line_mode - sta transfer_buffer - -@send_char: + lda #$00 + sta string_length +;process inbound ip packets while waiting for a keypress +@read_line: + lda $cb ;current key pressed + cmp #$3F ;RUN/STOP? + beq @runstop + jsr ip65_process + lda connection_closed + beq :+ + ldax #disconnected + jsr print + rts +: + jsr $f142 ;not officially documented - where F13E (GETIN) falls through to if device # is 0 (KEYBD) + + beq @read_line + + cmp #$14 ;Delete + beq @delete + + cmp #$0d ;Return + beq @input_done + + ;End reached? + ldy string_length + cpy #$FF + beq @read_line + + jsr $ffd2 ;Print it + jsr native_to_ascii + sta transfer_buffer,y ;Add it to string + + inc string_length + + ;Not yet. + jmp @read_line + + +@delete: + ;First, check if we're at the beginning. + lda string_length + bne @delete_ok + jmp @read_line + + ;At least one character entered. +@delete_ok: + ;Move pointer back. + dec string_length + + ;Print the delete char + lda #$14 + jsr $ffd2 + + ;Wait for next char + jmp @read_line + +@input_done: + lda #$0d + jsr $ffd2 ;print a newline + ldy string_length + lda #$0d + sta transfer_buffer,y + iny + lda #$0a + sta transfer_buffer,y + iny + sty tcp_send_data_len + jmp @send_buffer +@not_line_mode: + + ;is there anything in the input buffer? + lda $c6 ;NDX - chars in keyboard buffer + bne :+ + jmp @wait_for_keypress +: + lda #0 + sta tcp_send_data_len + sta tcp_send_data_len+1 +@get_next_char: + lda $cb ;current key pressed + cmp #$3F ;RUN/STOP? + bne @not_runstop +@runstop: + lda #0 + sta $cb ;overwrite "current key pressed" else it's seen by the tcp stack and the close aborts + jmp tcp_close +@not_runstop: + jsr $ffe4 ;getkey - 0 means no input + tax + beq @no_more_input + txa + + ldy tcp_send_data_len + sta transfer_buffer,y + inc tcp_send_data_len + jmp @get_next_char +@no_more_input: +@send_buffer: ldax #transfer_buffer jsr tcp_send bcs @error_on_send jmp @main_polling_loop @error_on_send: + ldax #transmission jmp print_error @@ -1079,8 +1178,16 @@ netcat_callback: sta buffer_length+1 @next_byte: + lda $cb ;current key pressed + cmp #$3F ;RUN/STOP? + beq @finished + ldy #0 lda (temp2),y + ldx netcat_mode + beq @no_transform + jsr ascii_to_native +@no_transform: jsr print_a inc temp2 bne :+ @@ -1232,7 +1339,7 @@ error: .byte " ERROR $",0 disconnected: -.byte "DIS" +.byte 13,"DIS" connected_msg: .byte "CONNECTED",13,0 @@ -1294,6 +1401,7 @@ current_output_ptr=emit_a+1 .bss +netcat_mode: .res 1 bytes_read: .res 2 string_length: .res 1 param_length: .res 1 @@ -1309,5 +1417,5 @@ transfer_buffer: .res 256 file_opened: .res 1 connection_closed: .res 1 netcat_timeout: .res 1 -buffer_length: .res 1 -data_arrived_flag: .res 1 \ No newline at end of file +buffer_length: .res 2 +data_arrived_flag: .res 1 diff --git a/client/drivers/c64charconv.s b/client/drivers/c64charconv.s index 7817eaa..2f5bc24 100644 --- a/client/drivers/c64charconv.s +++ b/client/drivers/c64charconv.s @@ -19,7 +19,7 @@ ascii_to_native: .rodata ascii_to_petscii_table: -.byte $00,$01,$02,$03,$04,$05,$06,$07,$14,$09,$0d,$11,$93,$0a,$0e,$0f +.byte $00,$01,$02,$03,$04,$05,$06,$07,$14,$20,$0d,$11,$93,$0a,$0e,$0f .byte $10,$0b,$12,$13,$08,$15,$16,$17,$18,$19,$1a,$1b,$1c,$1d,$1e,$1f .byte $20,$21,$22,$23,$24,$25,$26,$27,$28,$29,$2a,$2b,$2c,$2d,$2e,$2f .byte $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$3a,$3b,$3c,$3d,$3e,$3f