mirror of
https://github.com/ksherlock/itty-bitty-vtty.git
synced 2024-11-24 23:31:41 +00:00
6e0de284e0
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).
241 lines
3.2 KiB
ArmAsm
241 lines
3.2 KiB
ArmAsm
|
|
lst off
|
|
rel
|
|
xc
|
|
xc
|
|
|
|
use vt.equ
|
|
|
|
mx %11
|
|
|
|
|
|
vt100_esc ent
|
|
* #[()=>cH78DEM
|
|
* based on testing, unspecified chars in the 0x20-0x2f range cause it to gobble
|
|
* chars until 0x30- terminator (which ends the sequence but does not take an action)
|
|
|
|
* esc 1 -> hangs? [undocumented]
|
|
|
|
ldx #st_vt100
|
|
stx state
|
|
|
|
cmp #:MIN
|
|
blt :bad
|
|
cmp #:MAX+1
|
|
bge :rts
|
|
sec
|
|
sbc #:MIN
|
|
asl
|
|
tax
|
|
jmp (:table,x)
|
|
|
|
:bad
|
|
ldx #st_vt100_esc_bad
|
|
stx state
|
|
:rts
|
|
rts
|
|
|
|
:MIN equ 35
|
|
:MAX equ 99
|
|
|
|
:table
|
|
dw :pound ; #
|
|
dw :bad ; $
|
|
dw :bad ; %
|
|
dw :bad ; &
|
|
dw :bad ; '
|
|
dw :lparen ; (
|
|
dw :rparen ; )
|
|
dw :bad ; *
|
|
dw :bad ; +
|
|
dw :bad ; ,
|
|
dw :bad ; -
|
|
dw :bad ; .
|
|
dw :bad ; /
|
|
dw :rts ; 0
|
|
dw :rts ; 1
|
|
dw :rts ; 2
|
|
dw :rts ; 3
|
|
dw :rts ; 4
|
|
dw :rts ; 5
|
|
dw :rts ; 6
|
|
dw esc_7 ; 7
|
|
dw esc_8 ; 8
|
|
dw :rts ; 9
|
|
dw :rts ; :
|
|
dw :rts ; ;
|
|
dw :rts ; <
|
|
dw esc_eq ; =
|
|
dw esc_gt ; >
|
|
dw :rts ; ?
|
|
dw :rts ; @
|
|
dw :rts ; A
|
|
dw :rts ; B
|
|
dw :rts ; C
|
|
dw esc_D ; D
|
|
dw esc_E ; E
|
|
dw :rts ; F
|
|
dw :rts ; G
|
|
dw esc_H ; H
|
|
dw :rts ; I
|
|
dw :rts ; J
|
|
dw :rts ; K
|
|
dw :rts ; L
|
|
dw esc_M ; M
|
|
dw :rts ; N
|
|
dw :rts ; O
|
|
dw :rts ; P
|
|
dw :rts ; Q
|
|
dw :rts ; R
|
|
dw :rts ; S
|
|
dw :rts ; T
|
|
dw :rts ; U
|
|
dw :rts ; V
|
|
dw :rts ; W
|
|
dw :rts ; X
|
|
dw :rts ; Y
|
|
dw :rts ; Z
|
|
dw :rts ; [
|
|
dw :rts ; \
|
|
dw :rts ; ]
|
|
dw :rts ; ^
|
|
dw :rts ; _
|
|
dw :rts ; `
|
|
dw :rts ; a
|
|
dw :rts ; b
|
|
dw esc_c ; c
|
|
|
|
|
|
|
|
:lparen
|
|
ldx #st_vt100_esc_lparen
|
|
stx state
|
|
rts
|
|
|
|
:rparen
|
|
ldx #st_vt100_esc_rparen
|
|
stx state
|
|
rts
|
|
|
|
:pound
|
|
ldx #st_vt100_esc_pound
|
|
stx state
|
|
rts
|
|
|
|
|
|
esc_7 ; save cursor position, graphic rendition, and character set.
|
|
rts
|
|
esc_8 ; restore cursor position, graphic rendition, and character set.
|
|
rts
|
|
|
|
esc_eq ; enter alternate keypad mode
|
|
lda #$80
|
|
sta DECKPAM
|
|
rts
|
|
esc_gt ; exit alternate keypad mode
|
|
stz DECKPAM
|
|
rts
|
|
|
|
esc_H ; set tab stop
|
|
ext set_tab
|
|
ldx x
|
|
bmi :rts
|
|
jmp set_tab
|
|
:rts rts
|
|
|
|
esc_E ; next line
|
|
stz x
|
|
; drop through
|
|
esc_D ; index
|
|
rts
|
|
|
|
esc_M ; reverse index
|
|
rts
|
|
|
|
esc_c ; reset terminal.
|
|
rts
|
|
|
|
|
|
vt100_esc_bad ent
|
|
cmp #'0'
|
|
blt :rts
|
|
ldx #st_vt100
|
|
stx state
|
|
:rts
|
|
rts
|
|
|
|
|
|
|
|
vt100_esc_pound ent
|
|
|
|
* esc # 3 - make line double height (top half)
|
|
* esc # 4 - make line double height (bottom half)
|
|
* esc # 5 - make line single width, single height
|
|
* esc # 6 - make line double width
|
|
|
|
* esc # 8 - screen alignment - fill screen with E (SGR not honored)
|
|
* based on testing, this also resets the scrolling region and homes the cursor.
|
|
|
|
* based on testing, 0+ are term characters, 0x20-0x2f puts it in esc_bad state
|
|
|
|
ldx #st_vt100
|
|
sta state
|
|
|
|
cmp #:MIN ; must be 0.
|
|
blt :bad
|
|
cmp #:MAX+1
|
|
bge :rts
|
|
asl
|
|
tax
|
|
jmp (:table,x)
|
|
|
|
:bad ldx #st_vt100_esc_bad
|
|
sta state
|
|
:rts rts
|
|
|
|
:MIN equ 48
|
|
:MAX equ 57
|
|
|
|
:table
|
|
dw :rts ; 0
|
|
dw :rts ; 1
|
|
dw :rts ; 2
|
|
dw :rts ; 3
|
|
dw :rts ; 4
|
|
dw :rts ; 5
|
|
dw :rts ; 6
|
|
dw :rts ; 7
|
|
dw :e ; 8
|
|
dw :rts ; 9
|
|
|
|
:e rts
|
|
|
|
|
|
vt100_esc_lparen ent
|
|
vt100_esc_rparen ent
|
|
|
|
* ( sets G0, ) sets G1
|
|
* A - UK set
|
|
* B - ASCII set
|
|
* 0 - Special Graphics
|
|
* 1 - Alternate Char ROM Standard Char Set
|
|
* 2 - Alternate Char ROM Special Graphics
|
|
|
|
* SO, aka Control-N aka 0x0e set the G1 char set
|
|
* SI, aka Control-O aka 0x0f set the G0 char set
|
|
|
|
* not currently supported.
|
|
|
|
ldx #st_vt100
|
|
sta state
|
|
|
|
cmp #'0'
|
|
blt :bad
|
|
rts
|
|
|
|
:bad ldx #st_vt100_esc_bad
|
|
sta state
|
|
:rts rts
|
|
|
|
sav vt100.esc.L
|