mirror of
https://github.com/ksherlock/itty-bitty-vtty.git
synced 2024-06-10 10:29:39 +00:00
csi wasn't resetting state at the end.
This commit is contained in:
parent
121673badb
commit
7fbd54e791
326
vt100.csi.S
326
vt100.csi.S
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
|
|
||||||
* lst off
|
lst off
|
||||||
cas se
|
cas se
|
||||||
|
|
||||||
rel
|
rel
|
||||||
|
@ -30,8 +30,8 @@ vt100_csi ent
|
||||||
* a mis-placed < = > ? will prevent 0x20-0x2f from terminating the sequence.
|
* a mis-placed < = > ? will prevent 0x20-0x2f from terminating the sequence.
|
||||||
|
|
||||||
|
|
||||||
inc state
|
ldx #st_vt100
|
||||||
inc state
|
stx state
|
||||||
|
|
||||||
stz pcount
|
stz pcount
|
||||||
stz parms
|
stz parms
|
||||||
|
@ -40,9 +40,9 @@ vt100_csi ent
|
||||||
|
|
||||||
* tay ; save for modifier
|
* tay ; save for modifier
|
||||||
cmp #:MIN
|
cmp #:MIN
|
||||||
blt :end
|
blt :rts
|
||||||
cmp #:MAX+1
|
cmp #:MAX+1
|
||||||
bge :end
|
bge :rts
|
||||||
sec
|
sec
|
||||||
sbc #:MIN
|
sbc #:MIN
|
||||||
asl
|
asl
|
||||||
|
@ -50,9 +50,6 @@ vt100_csi ent
|
||||||
jmp (:table,x)
|
jmp (:table,x)
|
||||||
|
|
||||||
*
|
*
|
||||||
:end
|
|
||||||
ldx #st_vt100
|
|
||||||
stx state
|
|
||||||
:rts rts
|
:rts rts
|
||||||
|
|
||||||
|
|
||||||
|
@ -72,79 +69,90 @@ vt100_csi ent
|
||||||
dw :digit ; 9
|
dw :digit ; 9
|
||||||
dw digit ; :
|
dw digit ; :
|
||||||
dw semi
|
dw semi
|
||||||
dw :rts ; <
|
dw :xmod ; <
|
||||||
dw :rts ; =
|
dw :xmod ; =
|
||||||
dw :rts ; >
|
dw :xmod ; >
|
||||||
dw :modifier ; ?
|
dw :modifier ; ?
|
||||||
dw :end ; @
|
dw :rts ; @
|
||||||
dw csi_A ; A
|
dw csi_A ; A
|
||||||
dw csi_B ; B
|
dw csi_B ; B
|
||||||
dw csi_C ; C
|
dw csi_C ; C
|
||||||
dw csi_D ; D
|
dw csi_D ; D
|
||||||
dw :end ; E
|
dw :rts ; E
|
||||||
dw :end ; F
|
dw :rts ; F
|
||||||
dw :end ; G
|
dw :rts ; G
|
||||||
dw csi_H ; H
|
dw csi_H ; H
|
||||||
dw :end ; I
|
dw :rts ; I
|
||||||
dw csi_J ; J
|
dw csi_J ; J
|
||||||
dw csi_K ; K
|
dw csi_K ; K
|
||||||
dw :end ; L
|
dw :rts ; L
|
||||||
dw :end ; M
|
dw :rts ; M
|
||||||
dw :end ; N
|
dw :rts ; N
|
||||||
dw :end ; O
|
dw :rts ; O
|
||||||
dw :end ; P
|
dw :rts ; P
|
||||||
dw :end ; Q
|
dw :rts ; Q
|
||||||
dw :end ; R
|
dw :rts ; R
|
||||||
dw :end ; S
|
dw :rts ; S
|
||||||
dw :end ; T
|
dw :rts ; T
|
||||||
dw :end ; U
|
dw :rts ; U
|
||||||
dw :end ; V
|
dw :rts ; V
|
||||||
dw :end ; W
|
dw :rts ; W
|
||||||
dw :end ; X
|
dw :rts ; X
|
||||||
dw :end ; Y
|
dw :rts ; Y
|
||||||
dw :end ; Z
|
dw :rts ; Z
|
||||||
dw :end ; [
|
dw :rts ; [
|
||||||
dw :end ; \
|
dw :rts ; \
|
||||||
dw :end ; ]
|
dw :rts ; ]
|
||||||
dw :end ; ^
|
dw :rts ; ^
|
||||||
dw :end ; _
|
dw :rts ; _
|
||||||
dw :end ; `
|
dw :rts ; `
|
||||||
dw :end ; a
|
dw :rts ; a
|
||||||
dw :end ; b
|
dw :rts ; b
|
||||||
dw csi_c ; c
|
dw csi_c ; c
|
||||||
dw :end ; d
|
dw :rts ; d
|
||||||
dw :end ; e
|
dw :rts ; e
|
||||||
dw csi_f ; f
|
dw csi_f ; f
|
||||||
dw csi_g ; g
|
dw csi_g ; g
|
||||||
dw csi_h ; h
|
dw csi_h ; h
|
||||||
dw :end ; i
|
dw :rts ; i
|
||||||
dw :end ; j
|
dw :rts ; j
|
||||||
dw :end ; k
|
dw :rts ; k
|
||||||
dw csi_l ; l
|
dw csi_l ; l
|
||||||
dw csi_m ; m
|
dw csi_m ; m
|
||||||
dw csi_n ; n
|
dw csi_n ; n
|
||||||
dw :end ; o
|
dw :rts ; o
|
||||||
dw :end ; p
|
dw :rts ; p
|
||||||
dw csi_q ; q
|
dw csi_q ; q
|
||||||
dw csi_r ; r
|
dw csi_r ; r
|
||||||
dw :end ; s
|
dw :rts ; s
|
||||||
dw :end ; t
|
dw :rts ; t
|
||||||
dw :end ; u
|
dw :rts ; u
|
||||||
dw :end ; v
|
dw :rts ; v
|
||||||
dw :end ; w
|
dw :rts ; w
|
||||||
dw :end ; x
|
dw :rts ; x
|
||||||
dw csi_y ; y
|
dw csi_y ; y
|
||||||
|
|
||||||
|
|
||||||
:digit
|
:digit
|
||||||
|
ldx #st_vt100_csi_2
|
||||||
|
stx state
|
||||||
|
|
||||||
lsr ; undo asl
|
lsr ; undo asl
|
||||||
sta parms
|
sta parms
|
||||||
rts
|
rts
|
||||||
:modifier
|
:modifier
|
||||||
|
ldx #st_vt100_csi_2
|
||||||
|
stx state
|
||||||
|
|
||||||
lda #$80
|
lda #$80
|
||||||
sta pmod
|
sta pmod
|
||||||
rts
|
rts
|
||||||
|
|
||||||
|
:xmod
|
||||||
|
* ignored.
|
||||||
|
ldx #st_vt100_csi_2
|
||||||
|
stx state
|
||||||
|
rts
|
||||||
|
|
||||||
vt100_csi_bad ent
|
vt100_csi_bad ent
|
||||||
cmp #'@'
|
cmp #'@'
|
||||||
|
@ -158,23 +166,19 @@ vt100_csi_bad ent
|
||||||
vt100_csi_2 ent
|
vt100_csi_2 ent
|
||||||
debug vt100_csi_2
|
debug vt100_csi_2
|
||||||
|
|
||||||
|
ldx #st_vt100
|
||||||
|
stx state
|
||||||
|
|
||||||
cmp #:MIN
|
cmp #:MIN
|
||||||
blt :end
|
blt :rts
|
||||||
cmp #:MAX+1
|
cmp #:MAX+1
|
||||||
bge :end
|
bge :rts
|
||||||
sec
|
sec
|
||||||
sbc #:MIN
|
sbc #:MIN
|
||||||
asl
|
asl
|
||||||
tax
|
tax
|
||||||
jmp (:table,x)
|
jmp (:table,x)
|
||||||
|
|
||||||
:badmod
|
|
||||||
cmp #'@'
|
|
||||||
blt :rts
|
|
||||||
|
|
||||||
:end
|
|
||||||
ldx #st_vt100
|
|
||||||
stx state
|
|
||||||
:rts rts
|
:rts rts
|
||||||
|
|
||||||
:MIN equ 48
|
:MIN equ 48
|
||||||
|
@ -196,63 +200,63 @@ vt100_csi_2 ent
|
||||||
dw :modifier ; =
|
dw :modifier ; =
|
||||||
dw :modifier ; >
|
dw :modifier ; >
|
||||||
dw :modifier ; ?
|
dw :modifier ; ?
|
||||||
dw :end ; @
|
dw :rts ; @
|
||||||
dw csi_A ; A
|
dw csi_A ; A
|
||||||
dw csi_B ; B
|
dw csi_B ; B
|
||||||
dw csi_C ; C
|
dw csi_C ; C
|
||||||
dw csi_D ; D
|
dw csi_D ; D
|
||||||
dw :end ; E
|
dw :rts ; E
|
||||||
dw :end ; F
|
dw :rts ; F
|
||||||
dw :end ; G
|
dw :rts ; G
|
||||||
dw csi_H ; H
|
dw csi_H ; H
|
||||||
dw :end ; I
|
dw :rts ; I
|
||||||
dw csi_J ; J
|
dw csi_J ; J
|
||||||
dw csi_K ; K
|
dw csi_K ; K
|
||||||
dw :end ; L
|
dw :rts ; L
|
||||||
dw :end ; M
|
dw :rts ; M
|
||||||
dw :end ; N
|
dw :rts ; N
|
||||||
dw :end ; O
|
dw :rts ; O
|
||||||
dw :end ; P
|
dw :rts ; P
|
||||||
dw :end ; Q
|
dw :rts ; Q
|
||||||
dw :end ; R
|
dw :rts ; R
|
||||||
dw :end ; S
|
dw :rts ; S
|
||||||
dw :end ; T
|
dw :rts ; T
|
||||||
dw :end ; U
|
dw :rts ; U
|
||||||
dw :end ; V
|
dw :rts ; V
|
||||||
dw :end ; W
|
dw :rts ; W
|
||||||
dw :end ; X
|
dw :rts ; X
|
||||||
dw :end ; Y
|
dw :rts ; Y
|
||||||
dw :end ; Z
|
dw :rts ; Z
|
||||||
dw :end ; [
|
dw :rts ; [
|
||||||
dw :end ; \
|
dw :rts ; \
|
||||||
dw :end ; ]
|
dw :rts ; ]
|
||||||
dw :end ; ^
|
dw :rts ; ^
|
||||||
dw :end ; _
|
dw :rts ; _
|
||||||
dw :end ; `
|
dw :rts ; `
|
||||||
dw :end ; a
|
dw :rts ; a
|
||||||
dw :end ; b
|
dw :rts ; b
|
||||||
dw csi_c ; c
|
dw csi_c ; c
|
||||||
dw :end ; d
|
dw :rts ; d
|
||||||
dw :end ; e
|
dw :rts ; e
|
||||||
dw csi_f ; f
|
dw csi_f ; f
|
||||||
dw csi_g ; g
|
dw csi_g ; g
|
||||||
dw csi_h ; h
|
dw csi_h ; h
|
||||||
dw :end ; i
|
dw :rts ; i
|
||||||
dw :end ; j
|
dw :rts ; j
|
||||||
dw :end ; k
|
dw :rts ; k
|
||||||
dw csi_l ; l
|
dw csi_l ; l
|
||||||
dw csi_m ; m
|
dw csi_m ; m
|
||||||
dw csi_n ; n
|
dw csi_n ; n
|
||||||
dw :end ; o
|
dw :rts ; o
|
||||||
dw :end ; p
|
dw :rts ; p
|
||||||
dw csi_q ; q
|
dw csi_q ; q
|
||||||
dw csi_r ; r
|
dw csi_r ; r
|
||||||
dw :end ; s
|
dw :rts ; s
|
||||||
dw :end ; t
|
dw :rts ; t
|
||||||
dw :end ; u
|
dw :rts ; u
|
||||||
dw :end ; v
|
dw :rts ; v
|
||||||
dw :end ; w
|
dw :rts ; w
|
||||||
dw :end ; x
|
dw :rts ; x
|
||||||
dw csi_y ; y
|
dw csi_y ; y
|
||||||
|
|
||||||
:modifier
|
:modifier
|
||||||
|
@ -261,6 +265,9 @@ vt100_csi_2 ent
|
||||||
rts
|
rts
|
||||||
|
|
||||||
semi
|
semi
|
||||||
|
ldx #st_vt100_csi_2
|
||||||
|
stx state
|
||||||
|
|
||||||
ldx pcount
|
ldx pcount
|
||||||
cpx #MAX_PCOUNT
|
cpx #MAX_PCOUNT
|
||||||
bge :big
|
bge :big
|
||||||
|
@ -273,6 +280,9 @@ semi
|
||||||
* parameter digit. clamped to 255 (250+ rounds up to 255)
|
* parameter digit. clamped to 255 (250+ rounds up to 255)
|
||||||
* in 132 is the largest valid parameter so this is ok.
|
* in 132 is the largest valid parameter so this is ok.
|
||||||
digit
|
digit
|
||||||
|
ldx #st_vt100_csi_2
|
||||||
|
stx state
|
||||||
|
|
||||||
lsr ; undo asl
|
lsr ; undo asl
|
||||||
sta r0
|
sta r0
|
||||||
ldx pcount
|
ldx pcount
|
||||||
|
@ -296,9 +306,9 @@ digit
|
||||||
sta parms,x
|
sta parms,x
|
||||||
rts
|
rts
|
||||||
|
|
||||||
:mult da 0,10,20,30,40,50,60,70,80,90
|
:mult db 0,10,20,30,40,50,60,70,80,90
|
||||||
da 100,110,120,130,140,150,160,170,180,190
|
db 100,110,120,130,140,150,160,170,180,190
|
||||||
da 200,210,220,230,240,250
|
db 200,210,220,230,240,250
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -475,12 +485,114 @@ csi_g
|
||||||
:3 jmp reset_all_tabs
|
:3 jmp reset_all_tabs
|
||||||
|
|
||||||
|
|
||||||
|
p1 mac
|
||||||
|
lda parms
|
||||||
|
bne ok
|
||||||
|
lda #1
|
||||||
|
ok sta r0
|
||||||
|
<<<
|
||||||
|
|
||||||
* cursor movement.
|
* cursor movement.
|
||||||
csi_A
|
csi_A
|
||||||
|
* up
|
||||||
|
|
||||||
|
* if cursor is outside the scrolling region, it is not locked to the scrolling region.
|
||||||
|
|
||||||
|
p1
|
||||||
|
|
||||||
|
lda y
|
||||||
|
cmp DECTM
|
||||||
|
beq :rts
|
||||||
|
bcc :simple
|
||||||
|
|
||||||
|
sec
|
||||||
|
sbc r0
|
||||||
|
bcc :top
|
||||||
|
cmp #DECTM
|
||||||
|
* bcc :top
|
||||||
|
* bra :sta
|
||||||
|
bcs :sta
|
||||||
|
|
||||||
|
:top lda DECTM
|
||||||
|
bra :sta
|
||||||
|
:rts rts
|
||||||
|
|
||||||
|
|
||||||
|
:simple
|
||||||
|
* lda y
|
||||||
|
sec
|
||||||
|
sbc r0
|
||||||
|
* bcc :0 ; clear indicate underflow.
|
||||||
|
bcc :sta
|
||||||
|
:0 lda #0
|
||||||
|
:sta sta y
|
||||||
|
jmp recalc_cursor_y
|
||||||
|
|
||||||
csi_B
|
csi_B
|
||||||
|
* down
|
||||||
|
p1
|
||||||
|
|
||||||
|
lda y
|
||||||
|
cmp DECBM
|
||||||
|
beq :rts
|
||||||
|
bge :simple
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc r0
|
||||||
|
bcs :bottom ; overflow
|
||||||
|
cmp #DECBM
|
||||||
|
bcc :sta
|
||||||
|
|
||||||
|
:bottom lda DECBM
|
||||||
|
bra :sta
|
||||||
|
:rts rts
|
||||||
|
|
||||||
|
:simple
|
||||||
|
clc
|
||||||
|
adc r0
|
||||||
|
bcs :23 ; overflow
|
||||||
|
cmp #24
|
||||||
|
bcc :sta
|
||||||
|
|
||||||
|
:23 lda #23
|
||||||
|
:sta sta y
|
||||||
|
jmp recalc_cursor_y
|
||||||
|
|
||||||
csi_C
|
csi_C
|
||||||
|
* right
|
||||||
|
* TODO - what happens in column 80 w/ DECAWM?
|
||||||
|
|
||||||
|
p1
|
||||||
|
lda x
|
||||||
|
and #$7f
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc r0
|
||||||
|
bcs :79 ; overflow
|
||||||
|
cmp #80
|
||||||
|
bcc :sta
|
||||||
|
|
||||||
|
:79 lda #79
|
||||||
|
:sta sta x
|
||||||
|
jmp recalc_cursor_x
|
||||||
|
|
||||||
csi_D
|
csi_D
|
||||||
rts
|
* left
|
||||||
|
|
||||||
|
p1
|
||||||
|
|
||||||
|
lda x
|
||||||
|
and #$7f
|
||||||
|
|
||||||
|
sec
|
||||||
|
sbc r0
|
||||||
|
* bcc :0 ; underflow
|
||||||
|
bcs :sta
|
||||||
|
:0 lda #0
|
||||||
|
:sta sta x
|
||||||
|
jmp recalc_cursor_x
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
csi_f
|
csi_f
|
||||||
csi_H ; direct cursor addressing
|
csi_H ; direct cursor addressing
|
||||||
|
@ -533,7 +645,7 @@ csi_H ; direct cursor addressing
|
||||||
csi_r ; scrolling region
|
csi_r ; scrolling region
|
||||||
* based on testing
|
* based on testing
|
||||||
* esc [ n r (no second parmeter) is equivalent to esc [ n ; 24 r
|
* esc [ n r (no second parmeter) is equivalent to esc [ n ; 24 r
|
||||||
* esc [ r sets scrolling region to 1 ; 24 ( in accordince with above )
|
* esc [ r sets scrolling region to 1 ; 24 ( in accordance with above )
|
||||||
* 24 is assumed value for second parameter
|
* 24 is assumed value for second parameter
|
||||||
* invalid parameters exit without updating
|
* invalid parameters exit without updating
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user