mirror of
https://github.com/ksherlock/itty-bitty-vtty.git
synced 2024-11-27 13:53:28 +00:00
177 lines
1.7 KiB
ArmAsm
177 lines
1.7 KiB
ArmAsm
|
|
|
|
|
|
vt100
|
|
mx %11
|
|
and #$7f
|
|
cmp #' '
|
|
bcs :notctrl
|
|
asl
|
|
tax
|
|
jmp (ctrl,x)
|
|
:notctrl
|
|
ldx state
|
|
jmp (:state_table,x)
|
|
|
|
|
|
|
|
:state_table
|
|
ext vt52_esc,vt52_dca
|
|
ext vt100_esc,vt100_csi,vt100_csi_2
|
|
ext vt100_esc_pound,vt100_esc_lparen,vt100_esc_rparen
|
|
|
|
dw char
|
|
dw vt52_esc
|
|
dw vt52_dca
|
|
dw char
|
|
dw vt100_esc
|
|
dw vt100_csi
|
|
dw vt100_csi_2
|
|
dw vt100_esc_pound
|
|
dw vt100_esc_lparen
|
|
dw vt100_esc_rparen
|
|
|
|
|
|
|
|
|
|
|
|
vt100_csi_bad ent
|
|
cmp #'@'
|
|
blt :rts
|
|
ldx #st_vt100
|
|
stx state
|
|
:rts rts
|
|
|
|
|
|
|
|
|
|
esc_csi
|
|
stz pcount
|
|
stz params
|
|
stz params+1
|
|
stz csi_private
|
|
lda #st_csi
|
|
sta state
|
|
rts
|
|
|
|
|
|
csi
|
|
inc state
|
|
inc state
|
|
cmp #'?'
|
|
bne csi0
|
|
lda #$80
|
|
sta csi_private
|
|
rts
|
|
|
|
csi0
|
|
cmp #';'
|
|
beq :semi
|
|
cmp #'0'
|
|
bcc csi_final
|
|
cmp #'9'+1
|
|
bcs csi_final
|
|
:num
|
|
and #$0f ; 0-9
|
|
tay ; save
|
|
ldx pcount
|
|
lda params,x
|
|
asl ; x 2
|
|
sta params,x
|
|
asl ; x 4
|
|
asl ; x 8
|
|
clc
|
|
adc params,x
|
|
sta params,x
|
|
tya
|
|
clc
|
|
adc params,x
|
|
sta params,x
|
|
rts
|
|
|
|
|
|
:semi
|
|
ldx pcount
|
|
inx
|
|
cpx #MAX_PCOUNT
|
|
bcs :srts
|
|
stx pcount
|
|
stz params,x
|
|
|
|
:srts
|
|
rts
|
|
|
|
|
|
csi_final
|
|
* c, h, l have private modes.
|
|
bit csi_private
|
|
bmi :priv
|
|
|
|
cmp #:MIN_FINAL
|
|
bcc :rts
|
|
cmp #:MAX_FINAL+1
|
|
bcs :rts
|
|
asl
|
|
tax
|
|
jmp (:table,x)
|
|
:rts rts
|
|
|
|
:priv
|
|
cmp #:MIN_FINAL_PRIV
|
|
bcc :rts
|
|
cmp #:MAX_FINAL_PRIV+1
|
|
bcs :rts
|
|
asl
|
|
tax
|
|
jmp (:table_priv,x)
|
|
|
|
|
|
csi
|
|
*
|
|
* ESC [ encountered.
|
|
*
|
|
* ? -> DEC private
|
|
* 0-9 -> parameter value
|
|
* ; parameter delim
|
|
* other - final character.
|
|
|
|
cmp #'0'
|
|
blt :notnum
|
|
cmp #'9'+1
|
|
bge :notnum
|
|
|
|
sep #$30
|
|
and #$0f
|
|
tay
|
|
ldx pcount
|
|
lda parms,x
|
|
asl
|
|
pha
|
|
asl
|
|
asl
|
|
clc
|
|
adc 1,s
|
|
sta 1,s
|
|
tya
|
|
adc 1,s
|
|
ply
|
|
sta parms,x
|
|
sep #$30
|
|
]rts rts
|
|
:notnum
|
|
cmp #';'
|
|
bne :notsemi
|
|
ldx pcount
|
|
cpx #MAXPCOUNT
|
|
bge ]rts
|
|
inx
|
|
stx pcount
|
|
stz parms,
|
|
stz parms+1,x
|
|
]rts rts
|
|
:notsemi
|
|
cmp #'?'
|
|
bne :final
|
|
sta ptype
|
|
rts
|
|
:final |