162 lines
2.1 KiB
ArmAsm
162 lines
2.1 KiB
ArmAsm
|
|
lst off
|
|
cas se
|
|
rel
|
|
xc
|
|
xc
|
|
|
|
use vt.equ
|
|
|
|
ext update_cursor,scroll_down
|
|
|
|
vt100
|
|
mx %11
|
|
and #$7f
|
|
cmp #' '
|
|
bcs :notctrl
|
|
asl
|
|
tax
|
|
jmp (:ctrl_table,x)
|
|
:notctrl
|
|
ldx state
|
|
jmp (:state_table,x)
|
|
|
|
|
|
|
|
:state_table
|
|
ext vt52_esc,vt52_dca_1,vt52_dca_2
|
|
ext vt100_esc,vt100_csi,vt100_csi_2
|
|
ext vt100_esc_pound,vt100_esc_lparen,vt100_esc_rparen
|
|
ext vt100_esc_bad,vt100_csi_bad
|
|
ext char
|
|
|
|
dw char
|
|
dw vt52_esc
|
|
dw vt52_dca_1
|
|
dw vt52_dca_2
|
|
dw char
|
|
dw vt100_esc
|
|
dw vt100_csi
|
|
dw vt100_csi_2
|
|
dw vt100_esc_pound
|
|
dw vt100_esc_lparen
|
|
dw vt100_esc_rparen
|
|
dw vt100_esc_bad
|
|
dw vt100_csi_bad
|
|
|
|
|
|
:ctrl_table
|
|
dw ctrl_00,ctrl_01,ctrl_02,ctrl_03
|
|
dw ctrl_04,ctrl_05,ctrl_06,ctrl_07
|
|
dw ctrl_08,ctrl_09,ctrl_0a,ctrl_0b
|
|
dw ctrl_0c,ctrl_0d,ctrl_0e,ctrl_0f
|
|
dw ctrl_10,ctrl_11,ctrl_12,ctrl_13
|
|
dw ctrl_14,ctrl_15,ctrl_16,ctrl_17
|
|
dw ctrl_18,ctrl_19,ctrl_1a,ctrl_1b
|
|
dw ctrl_1c,ctrl_1d,ctrl_1e,ctrl_1f
|
|
|
|
|
|
|
|
ctrl_00
|
|
ctrl_01
|
|
ctrl_02
|
|
ctrl_03
|
|
ctrl_04
|
|
ctrl_05 ; answer ENQ
|
|
ctrl_06
|
|
ctrl_0e ; G1 character set
|
|
ctrl_0f ; G0 character set
|
|
ctrl_10
|
|
ctrl_11 ; XON
|
|
ctrl_12
|
|
ctrl_13 ; XOFF
|
|
ctrl_14
|
|
ctrl_15
|
|
ctrl_16
|
|
ctrl_17
|
|
ctrl_19
|
|
ctrl_1c
|
|
ctrl_1d
|
|
ctrl_1e
|
|
ctrl_1f
|
|
rts
|
|
|
|
|
|
ctrl_07 ; ring the bell.
|
|
rts
|
|
|
|
ctrl_1b ; escape -
|
|
* vt100 - aborts current escape sequence and starts a new one.
|
|
* vt52 - esc esc aborts and starts new
|
|
* vt50 - esc esc aborts
|
|
lda DECANM
|
|
bne :vt52
|
|
lda #st_vt100_esc
|
|
sta state
|
|
rts
|
|
|
|
:vt52
|
|
lda #st_vt52_esc
|
|
sta state
|
|
rts
|
|
|
|
ctrl_18
|
|
ctrl_1a
|
|
* vt100 - abort current escape sequence
|
|
* and display error character.
|
|
lda DECANM
|
|
bne :vt52
|
|
lda #st_vt100
|
|
sta state
|
|
rts
|
|
|
|
:vt52
|
|
lda #st_vt52
|
|
sta state
|
|
rts
|
|
|
|
ctrl_08 ; back space
|
|
ldx x
|
|
beq :rts
|
|
dec x
|
|
jmp update_cursor
|
|
:rts
|
|
|
|
ctrl_09 ; tab
|
|
* vt100 has adjustable tabs.
|
|
ext next_tab_stop
|
|
ldx x
|
|
jsr next_tab_stop
|
|
stx x
|
|
jmp update_cursor
|
|
|
|
ctrl_0a ; line feed - cursor down w/ scroll
|
|
ctrl_0b ; vertical tab
|
|
ctrl_0c ; form feed.
|
|
|
|
* if LNM is active, equivalent to CR, LF
|
|
|
|
lda #LNM
|
|
bne :lnm
|
|
stz x
|
|
:lnm
|
|
|
|
lda y
|
|
cmp #23
|
|
blt :simple
|
|
|
|
lda #" "
|
|
sta cursor_saved_char
|
|
jmp scroll_down
|
|
|
|
:simple
|
|
inc y
|
|
jmp update_cursor
|
|
|
|
ctrl_0d ; carriage return - cursor to column 0.
|
|
stz x
|
|
jmp update_cursor
|
|
|
|
|
|
sav vt100.main.L
|