From 29587a1ebec78352700ab52f6d12fd6cceeb7049 Mon Sep 17 00:00:00 2001
From: Oliver Schmidt
Date: Sun, 21 May 2017 22:39:10 +0200
Subject: [PATCH] Avoid unnecessary timeout checks.
On the Apple II the timer_read function is actually a delay function. Therefore we want to avoid calling it if we're busy processing incoming data. Fortunately timer_read is only necessary to trigger a TCP keep alive message. But if we're busy processing incoming data then we for sure need no TCP keep alive. So we simply mark if we just processed incoming data and skip the timeout check.
---
apps/telnet65.s | 29 +++++++++++++++++------------
1 file changed, 17 insertions(+), 12 deletions(-)
diff --git a/apps/telnet65.s b/apps/telnet65.s
index c551263..520949b 100644
--- a/apps/telnet65.s
+++ b/apps/telnet65.s
@@ -166,22 +166,27 @@ telnet_main_entry:
lda #0
sta connection_close_requested
sta connection_closed
+ sta data_received
sta iac_response_buffer_length
ldax #cursor_on
jsr print_vt100
@main_polling_loop:
jsr timer_read
- txa
+ txa ; 1/1000 * 256 = ~ 1/4 seconds
adc #$20 ; 32 x 1/4 = ~ 8 seconds
sta telnet_timeout
-@wait_for_keypress:
+@check_timeout:
+ lda data_received
+ bne :+
jsr timer_read
cpx telnet_timeout
bne :+
jsr tcp_send_keep_alive
jmp @main_polling_loop
-: jsr ip65_process
+: lda #0
+ sta data_received
+ jsr ip65_process
lda connection_close_requested
beq :+
jsr tcp_close
@@ -201,7 +206,7 @@ telnet_main_entry:
ldax #iac_response_buffer
jsr tcp_send
: jsr get_key_if_available
- beq @wait_for_keypress
+ beq @check_timeout
ldx #0
stx tcp_send_data_len
stx tcp_send_data_len+1
@@ -286,18 +291,17 @@ send_char:
; tcp callback - will be executed whenever data arrives on the TCP connection
telnet_callback:
- lda tcp_inbound_data_length+1
- cmp #$ff
- bne :+
lda #1
+ ldx tcp_inbound_data_length+1
+ cpx #$ff
+ bne :+
sta connection_closed
rts
-: ldax tcp_inbound_data_ptr
- stax buffer_ptr
+: sta data_received
lda tcp_inbound_data_length
- sta buffer_length
- lda tcp_inbound_data_length+1
- sta buffer_length+1
+ stax buffer_length
+ ldax tcp_inbound_data_ptr
+ stax buffer_ptr
@next_byte:
ldy #0
@@ -527,6 +531,7 @@ telnet_port: .res 2 ; port number to connect to
telnet_timeout: .res 1
connection_close_requested: .res 1
connection_closed: .res 1
+data_received: .res 1
buffer_offset: .res 1
telnet_command: .res 1
telnet_option: .res 1