mirror of
https://github.com/bobbimanners/emailler.git
synced 2024-11-16 09:06:57 +00:00
96cfc32511
FreeBSD and NetBSD, at least, have a banner message when you telnet into them which has an empty line as first line. On those systems, an old "cursor" char was visible at the top of the login prompt message. This is fixed by enabling and disabling the cursor in 'get_key' while waiting for a key press.
211 lines
5.8 KiB
ArmAsm
211 lines
5.8 KiB
ArmAsm
.include "atari.inc"
|
|
|
|
.export get_key
|
|
.export check_for_abort_key
|
|
.export get_key_if_available
|
|
.export get_key_ip65
|
|
.export abort_key
|
|
.exportzp abort_key_default = 1
|
|
.exportzp abort_key_disable = 0
|
|
|
|
.import ip65_process
|
|
.import print_a
|
|
|
|
|
|
.data
|
|
|
|
abort_key: .byte 1
|
|
|
|
|
|
; keyboard translation tables for combinations not handled or supported by the ROM
|
|
|
|
; scan codes
|
|
special_key_table:
|
|
.byte $b5 ; Ctrl-8
|
|
.byte $f5 ; Shift-Ctrl-8
|
|
.byte $a0 ; Ctrl-,
|
|
.byte $e0 ; Shift-Ctrl-,
|
|
.byte $a6 ; Ctrl-/
|
|
.byte $e6 ; Shift-Ctrl-/
|
|
.byte $a2 ; Ctrl-.
|
|
.byte $e2 ; Shift-Ctrl-.
|
|
.byte $b3 ; Ctrl-7
|
|
.byte $f3 ; Shift-Ctrl-7
|
|
.byte $ce ; Shift-Ctrl--
|
|
.byte $a1 ; Ctrl-<Space>
|
|
.byte $e1 ; Shift-Ctrl-<Space>
|
|
.byte $b0 ; Ctrl-9
|
|
.byte $f0 ; Shift-Ctrl-9
|
|
.byte $b2 ; Ctrl-0
|
|
.byte $f2 ; Shirt-Ctrl-0
|
|
.byte $ed ; Shirt-Ctrl-T
|
|
.byte $de ; Shirt-Ctrl-2
|
|
special_key_table_len = * - special_key_table
|
|
|
|
; return values for scan codes
|
|
special_key_table2:
|
|
.byte $00 ; Ctrl-8 ==> Ctrl-@
|
|
.byte $00 ; Shift-Ctrl-8 ==> Ctrl-@
|
|
.byte $1b ; Ctrl-, ==> Ctrl-[
|
|
.byte $1b ; Shift-Ctrl-, ==> Ctrl-[
|
|
.byte $9c ; Ctrl-/ ==> Ctrl-\ ($1c already used for cursor up, ATURW)
|
|
.byte $9c ; Shift-Ctrl-/ ==> Ctrl-\
|
|
.byte $9d ; Ctrl-. ==> Ctrl-] ($1d already used for cursor down, ATDRW)
|
|
.byte $9d ; Shift-Ctrl-. ==> Ctrl-]
|
|
.byte $9e ; Ctrl-7 ==> Ctrl-^ ($1e already used for cursor left, ATLRW)
|
|
.byte $60 ; Shift-Ctrl-7 ==> `
|
|
.byte $9f ; Shift-Ctrl-- ==> Ctrl-_ ($1f already used for cursor right, ATRRW)
|
|
.byte $00 ; Ctrl-<Space> ==> Ctrl-@
|
|
.byte $00 ; Shift-Ctrl-<Space> ==> Ctrl-@
|
|
.byte $7b ; Ctrl-9 ==> {
|
|
.byte $7b ; Shift-Ctrl-9 ==> {
|
|
.byte $fd ; Ctrl-0 ==> }
|
|
.byte $fd ; Shift-Ctrl-0 ==> }
|
|
.byte $9a ; Shift-Ctrl-T ==> ~
|
|
.byte $9a ; Shift-Ctrl-2 ==> ~
|
|
; translations $9c..$9f -> $1c..$1f, $9e -> $7e, and $fd -> $7d will be done in atrvt100.s
|
|
|
|
.bss
|
|
|
|
; uncomment for debugging all CH_save related stuff
|
|
;CH_save: .res 1
|
|
|
|
|
|
.code
|
|
|
|
; inputs: none
|
|
; outputs: A contains ASCII value of key just pressed
|
|
get_key:
|
|
lda #0
|
|
sta CRSINH ; cursor on
|
|
; according to "Mapping the Atari", a change to CRSINH will only be in effect after the next cursor movement,
|
|
; so we move the cursor one to the left and then one to the right (to keep its original position)
|
|
lda #ATLRW
|
|
jsr print_a
|
|
lda #ATRRW
|
|
jsr print_a
|
|
@loop:
|
|
jsr get_key_if_available
|
|
bcc @loop
|
|
ldy #1
|
|
sty CRSINH ; cursor on
|
|
tay ; save key
|
|
; see above comment wrt. "Mapping the Atari"
|
|
lda #ATLRW
|
|
jsr print_a
|
|
lda #ATRRW
|
|
jsr print_a
|
|
tya ; restore key
|
|
rts
|
|
|
|
; inputs: none
|
|
; outputs: sec if key pressed, clear otherwise
|
|
; A contains ASCII value of key just pressed
|
|
get_key_if_available:
|
|
lda BRKKEY
|
|
bne @no_abort
|
|
dec BRKKEY
|
|
lda #$03 ; ^C
|
|
bne @done ; jump always
|
|
@no_abort:
|
|
lda HELPFG ; HELP key? (to be 100% correct we should check for XL-type machine before...)
|
|
cmp #17 ; HELP alone
|
|
beq @help
|
|
cmp #81 ; Shift-HELP
|
|
beq @help
|
|
cmp #145 ; Control-HELP
|
|
bne @no_help
|
|
@help:
|
|
lda #0
|
|
sta HELPFG ; clear HELPFG
|
|
lda #$fc ; pseudo key code, handled in atrvt100.s
|
|
bne @done
|
|
@no_help:
|
|
lda CH ; keyboard input (scan code)
|
|
cmp #255 ; was a key pressed?
|
|
beq nokey ; 255 means "no"
|
|
; sta CH_save ; remember keyboard scan code (debugging)
|
|
bpl @call_k ; Ctrl wasn't pressed, continue with ROM
|
|
jsr handle_special_keys
|
|
bcs @done ; keypress was handled
|
|
@call_k:
|
|
lda #0
|
|
sta INVFLG ; never input an inverse char
|
|
; ideas from cc65's cgetc.s
|
|
lda #12
|
|
sta ICAX1Z
|
|
jsr getkey_k
|
|
@done:
|
|
ldx #255 ; if K: handler hasn't been called, "consume" the key press
|
|
stx CH ; and clear the zero flag which is a return value
|
|
; ldx CH_save ; for debugging purposes, return the scan code in X
|
|
sec
|
|
rts
|
|
nokey:
|
|
clc
|
|
rts
|
|
|
|
; inputs: A - keycode (CH)
|
|
; outputs: A - char, CF=0 if regular ROM handling is needed
|
|
handle_special_keys:
|
|
ldx #special_key_table_len-1
|
|
@lookup:
|
|
cmp special_key_table,x
|
|
beq @found
|
|
dex
|
|
bpl @lookup
|
|
clc
|
|
rts
|
|
@found:
|
|
lda special_key_table2,x
|
|
sec
|
|
rts
|
|
|
|
; call "short-cut" handler of K:
|
|
getkey_k:
|
|
lda KEYBDV+5
|
|
pha
|
|
lda KEYBDV+4
|
|
pha
|
|
rts
|
|
|
|
; process inbound ip packets while waiting for a keypress
|
|
get_key_ip65:
|
|
jsr ip65_process
|
|
jsr get_key_if_available
|
|
bcc get_key_ip65
|
|
rts
|
|
|
|
; check whether the abort key is being pressed
|
|
; inputs: none
|
|
; outputs: sec if abort key pressed, clear otherwise
|
|
check_for_abort_key:
|
|
lda abort_key ; is "abort" enabled?
|
|
beq nokey ; no
|
|
lda BRKKEY
|
|
bne nokey
|
|
dec BRKKEY
|
|
sec
|
|
rts
|
|
|
|
|
|
|
|
;-- LICENSE FOR atrinputs.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 --
|