mirror of
https://github.com/ksherlock/itty-bitty-vtty.git
synced 2024-06-11 02:29:37 +00:00
to handle DECAWM mode, bit 7 of x ($80 + 79) indicates a wrap is imminent, as opposed to just being in column 79. backspace, etc will drop back to column 78 (based on testing).
168 lines
2.3 KiB
ArmAsm
168 lines
2.3 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.
|
|
* TODO - display error character (mouse text)
|
|
lda DECANM
|
|
bne :vt52
|
|
lda #st_vt100
|
|
sta state
|
|
rts
|
|
|
|
:vt52
|
|
lda #st_vt52
|
|
sta state
|
|
rts
|
|
|
|
ctrl_08 ; back space
|
|
lda x
|
|
beq :rts
|
|
and #$7f
|
|
dec
|
|
sta x
|
|
jmp update_cursor
|
|
:rts
|
|
|
|
ctrl_09 ; tab
|
|
* vt100 has adjustable tabs.
|
|
ext next_tab_stop
|
|
ldx x
|
|
bmi :rts
|
|
jsr next_tab_stop
|
|
stx x
|
|
jmp update_cursor
|
|
:rts rts
|
|
|
|
ctrl_0a ; line feed - cursor down w/ scroll
|
|
ctrl_0b ; vertical tab
|
|
ctrl_0c ; form feed.
|
|
|
|
* if LNM is active, equivalent to CR, LF
|
|
|
|
bit #LNM
|
|
bpl :lf
|
|
stz x
|
|
|
|
:lf
|
|
lda y
|
|
cmp #DECBM
|
|
blt :simple
|
|
|
|
lda #" " ; needs to factor in reverse video
|
|
sta cursor_saved_char
|
|
jmp scroll_down
|
|
* if LNM mode, need to update cursor as well.
|
|
|
|
:simple
|
|
inc y
|
|
jmp update_cursor
|
|
|
|
ctrl_0d ; carriage return - cursor to column 0.
|
|
stz x
|
|
jmp update_cursor
|
|
|
|
|
|
sav vt100.main.L
|