This commit is contained in:
Joshua Bell 2021-11-07 12:52:15 -08:00
parent 89552349d4
commit 36aff42b39
2 changed files with 167 additions and 146 deletions

View File

@ -6,6 +6,7 @@
.setcpu "65C02"
.include "opcodes.inc"
.feature string_escapes
;;; Zero Page
@ -250,7 +251,7 @@ EscapeMode:
lda #M_ESC
tsb MODE
jsr LC850
jsr LC933
jsr ProcessEscapeModeKey
cmp #$98 ; ctrl-x (clear)
beq LC3AA
lda MODE ; still in escape mode?
@ -565,68 +566,72 @@ LC871: pha
pla
rts2: rts
;;; ============================================================
LC877: jsr LC850
cmp #$00
beq LC89F
beq @l4
cmp #$02
beq LC80E
cmp #$05
bne rts2
ldy CH
LC888: iny
@l1: iny
cpy WNDWDTH
beq LC897
beq @l2
jsr LCEC0
dey
jsr LCECB
iny
bra LC888
bra @l1
LC897: dey
LC898: lda #$A0
@l2: dey
@l3: lda #$A0
jsr LCECB
bra LC877
LC89F: ldy WNDWDTH
@l4: ldy WNDWDTH
dey
LC8A2: cpy CH
beq LC898
@l5: cpy CH
beq @l3
dey
jsr LCEC0
iny
jsr LCECB
dey
bra LC8A2
bra @l5
;;; ============================================================
LC8B1: sta CHAR
LC8B4: jsr LC992
LC8B4: jsr CheckPauseListing
lda MODE
and #$03 ; test low 3 bits
beq LC8C1
beq @l1
jmp LCA11
LC8C1: lda CHAR
@l1: lda CHAR
and #$7F
cmp #$20
bcc DoCtrlCharOut
ldy CH
cpy WNDWDTH
bcc LC8D3
bcc @l2
jsr DoReturn
LC8D3: lda CHAR ; char to be printed
@l2: lda CHAR ; char to be printed
bit INVFLG
bmi LC8F0
bmi @l3
and #$7F
bit MODE
bvs LC8F0 ; test bit 6 (MouseText active)
bvs @l3 ; test bit 6 (MouseText active)
bit ALTCHARSET
bpl LC8F0
bpl @l3
cmp #$40
bcc LC8F0
bcc @l3
cmp #$60
bcs LC8F0
bcs @l3
and #$1F
LC8F0: jsr LCBF9
@l3: jsr LCBF9
jmp DoForwardSpace
;;; ============================================================
@ -644,9 +649,9 @@ DoCtrlCharOut:
bcc DoNothing
asl a
tax
jmp (jt1,x)
jmp (@jt,x)
jt1:
@jt:
.addr DoBell ; $07 Ctrl-G Bell
.addr DoBackspace ; $08 Ctrl-H Backspace
.addr DoNothing ; $09 Ctrl-I
@ -674,37 +679,35 @@ jt1:
.addr DoUp ; $1F Ctrl-_ Up
;;; ============================================================
;;; GetLn handling
;;; For Escape key sequences
LC933: pha
ProcessEscapeModeKey:
pha
lda #M_ESC
trb MODE ; clear high bit
trb MODE
pla
and #$7F
cmp #'a'
bcc LC946
bcc @l1
cmp #'z'+1
bcs LC946
bcs @l1
and #$DF ; convert to uppercase
;; Scan table for match
LC946: ldx #$00
LC948: ldy code_table,x
@l1: ldx #$00
@l2: ldy @code_table,x
beq DoNothing
cmp code_table,x
beq LC955
cmp @code_table,x
beq @l3
inx
bra LC948
bra @l2
LC955: txa
@l3: txa
asl a
tax
jmp (jt2,x)
jmp (@jt,x)
;; Character match table
code_table:
@code_table:
.byte '@' ; Escape @ - clear, home & exit mode
.byte 'A' ; Escape A - right & exit mode
.byte 'B' ; Escape B - left & exit mode
@ -726,9 +729,7 @@ code_table:
.byte $00 ; sentinel
;; Jump table
jt2:
@jt:
.addr DoHomeAndClear ; Escape @ - clear, home & exit mode
.addr DoForwardSpace ; Escape A - right & exit mode
.addr DoBackspace ; Escape B - left & exit mode
@ -750,7 +751,7 @@ jt2:
;;; ============================================================
LC992:
CheckPauseListing:
lda KBD
cmp #$93 ; Ctrl-S
bne rts3
@ -1442,9 +1443,12 @@ LCDE2: jsr LCE2E
plx
rts
;; ???
.byte $52, $55, $4e, $0d, $00
.byte $4c, $49, $53, $54, $0d, $00, $ff
;;; ============================================================
;; Function key shortcuts ???
.byte "RUN\r", 0
.byte "LIST\r", 0
.byte $ff
;;; ============================================================
@ -1528,6 +1532,7 @@ DoHomeAndClear:
DoClearEOL:
LDXY CLREOL
;; fall through
;;; ============================================================
@ -1538,9 +1543,9 @@ ROMCall:
php
bit RDLCBNK2
php
lda #.hibyte(LCE87-1)
lda #.hibyte(ROMCallReturn-1)
pha
lda #.lobyte(LCE87-1)
lda #.lobyte(ROMCallReturn-1)
pha
phx
phy
@ -1548,30 +1553,28 @@ ROMCall:
lda TEMP2
rts
;;; ============================================================
;;; Return from ROMCall
LCE87: plp
bpl LCE9D
ROMCallReturn:
plp
bpl LCE95
bpl @l2
plp
bpl @l1
bit LCBANK2
bit LCBANK2
bra LCEAE
bra @l4
LCE95: bit ROMIN
@l1: bit ROMIN
bit ROMIN
bra LCEAE
bra @l4
LCE9D: plp
bpl LCEA8
@l2: plp
bpl @l3
bit LCBANK1
bit LCBANK1
bra LCEAE
bra @l4
LCEA8: bit $C089 ; ???
@l3: bit $C089 ; ???
bit $C089 ; ???
LCEAE: lda BASL
@l4: lda BASL
sta OLDBASL
lda BASH
sta OLDBASH
@ -1579,6 +1582,8 @@ LCEAE: lda BASL
sta OURCH
rts
;;; ============================================================
LCEBE: ldy CH
LCEC0: phy
jsr LCED5
@ -1587,23 +1592,29 @@ LCEC6: ply
bit TXTPAGE1
rts
LCECB: phy
;;; ============================================================
LCECB:
phy
pha
jsr LCED5
pla
sta (BASL),y
bra LCEC6
LCED5: bit RD80VID
bpl LCEDF
;;; ============================================================
LCED5:
bit RD80VID
bpl @l1
tya
lsr a
tay
bcc LCEE3
LCEDF: bit TXTPAGE1
bcc @l2
@l1: bit TXTPAGE1
rts
LCEE3: bit TXTPAGE2
@l2: bit TXTPAGE2
rts
;;; ============================================================

View File

@ -205,7 +205,7 @@ EscapeMode:
lda #M_ESC
tsb MODE
jsr LC822
jsr LC8CB
jsr ProcessEscapeModeKey
cmp #$98
beq LC38A
lda MODE
@ -532,7 +532,7 @@ LC5BC: bit $C1C1
sta $C090
bra LC594
LC5C6: jsr LC594
jsr LC9A5
jsr $C9A5
bra LC5A8
brk
brk
@ -595,7 +595,7 @@ LC60D: lda LCF26,y
LC618: inc BAS2H
cpx BAS2H
bne LC618
jsr LCEA6
jsr $CEA6
LC621: dec $41
bne LC621
LC625: dec A1H
@ -977,35 +977,37 @@ LC840: sta CHAR
LC847: pla
rts
;;; ============================================================
LC849: sta CHAR
LC84C: jsr LC92A
LC84C: jsr CheckPauseListing
lda MODE
and #$03
beq LC859
beq @l1
jmp LCA2F
LC859: lda CHAR
@l1: lda CHAR
and #$7F
cmp #$20
bcc DoCtrlCharOut
ldy CH
cpy WNDWDTH
bcc LC86B
bcc @l2
jsr DoReturn
LC86B: lda CHAR
@l2: lda CHAR
bit INVFLG
bmi LC888
bmi @l3
and #$7F
bit MODE
bvs LC888
bvs @l3
bit ALTCHARSET
bpl LC888
bpl @l3
cmp #$40
bcc LC888
bcc @l3
cmp #$60
bcs LC888
bcs @l3
and #$1F
LC888: jsr LCC13
@l3: jsr LCC13
jmp DoForwardSpace
;;; ============================================================
@ -1023,11 +1025,9 @@ DoCtrlCharOut:
bcc DoNothing
asl a
tax
jmp (jt1,x)
jmp (@jt,x)
;; Jump Table
jt1:
@jt:
.addr DoBell ; $07 Ctrl-G Bell
.addr DoBackspace ; $08 Ctrl-H Backspace
.addr DoNothing ; $09 Ctrl-I
@ -1055,34 +1055,35 @@ jt1:
.addr DoUp ; $1F Ctrl-_ Up
;;; ============================================================
;;; GetLn handling
;;; For Escape key sequences
LC8CB: pha
ProcessEscapeModeKey:
pha
lda #M_ESC
trb MODE
pla
and #$7F
cmp #$61
bcc LC8DE
cmp #$7B
bcs LC8DE
and #$DF
cmp #'a'
bcc @l1
cmp #'z'+1
bcs @l1
and #$DF ; convert to uppercase
LC8DE: ldx #$00
LC8E0: ldy code_table,x
;; Scan table for match
@l1: ldx #$00
@l2: ldy @code_table,x
beq DoNothing
cmp code_table,x
beq LC8ED
cmp @code_table,x
beq @l3
inx
bra LC8E0
bra @l2
LC8ED: txa
@l3: txa
asl a
tax
jmp (jt2,x)
jmp (@jt,x)
code_table:
@code_table:
.byte '@' ; Escape @ - clear, home & exit mode
.byte 'A' ; Escape A - right & exit mode
.byte 'B' ; Escape B - left & exit mode
@ -1104,9 +1105,7 @@ code_table:
.byte $00 ; sentinel
;; Jump table
jt2:
@jt:
.addr DoHomeAndClear ; Escape @ - clear, home & exit mode
.addr DoForwardSpace ; Escape A - right & exit mode
.addr DoBackspace ; Escape B - left & exit mode
@ -1128,7 +1127,7 @@ jt2:
;;; ============================================================
LC92A:
CheckPauseListing:
lda KBD
cmp #$93 ; Ctrl-S
bne @l3
@ -1145,14 +1144,14 @@ LC92A:
LC941: ldy #$00
ldx #$00
LC945: cpy WNDWDTH
bcs LC953
@l1: cpy WNDWDTH
bcs @l2
jsr LC9A8
sta $0200,x
inx
iny
bra LC945
LC953: dey
bra @l1
@l2: dey
sty CH
.byte $8E ; bad disasm
sei
@ -1176,43 +1175,48 @@ Do40Col:
LC96F: jsr LC822
cmp #$00
beq LC997
beq @l4
cmp #$02
beq LC941
cmp #$05
bne LC95B
ldy CH
LC980: iny
@l1: iny
cpy WNDWDTH
beq LC98F
beq @l2
jsr LC9A8
dey
jsr LCEC8
iny
bra LC980
bra @l1
LC98F: dey
LC990: lda #$A0
@l2: dey
@l3: lda #$A0
jsr LCEC8
bra LC96F
LC997: ldy WNDWDTH
@l4: ldy WNDWDTH
dey
cpy CH
beq LC990
beq @l3
dey
.byte $20
LC9A0: tay
.byte $20 ; bad disasm
tay
cmp #$C8
.byte $20
iny
LC9A5: dec $F180
dec $F180
;;; ============================================================
LC9A8: jsr LCEBD
ora #$80
cmp #$A0
bcs LC9B3
bcs @l1
ora #$40
LC9B3: rts
@l1: rts
;;; ============================================================
LC9B4: bit RD80VID
bpl LC9CC
@ -1934,9 +1938,9 @@ ROMCall:
php
bit RDLCBNK2
php
lda #.hibyte(LCE84-1)
lda #.hibyte(ROMCallReturn-1)
pha
lda #.lobyte(LCE84-1)
lda #.lobyte(ROMCallReturn-1)
pha
phx
phy
@ -1944,31 +1948,28 @@ ROMCall:
lda TEMP2
rts
;;; ============================================================
;;; Return from ROMCall
LCE84: plp
bpl LCE9A
ROMCallReturn:
plp
bpl LCE92
bpl @l2
plp
bpl @l1
bit LCBANK2
bit LCBANK2
bra LCEAB
bra @l4
LCE92: bit ROMIN
@l1: bit ROMIN
bit ROMIN
bra LCEAB
bra @l4
LCE9A: plp
bpl LCEA5
@l2: plp
bpl @l3
bit LCBANK1
bit LCBANK1
bra LCEAB
bra @l4
LCEA5: .byte $2C
LCEA6: bit #$C0
bit $C089
LCEAB: lda BASL
@l3: bit $C089 ; ???
bit $C089 ; ???
@l4: lda BASL
sta OLDBASL
lda BASH
sta OLDBASH
@ -1976,6 +1977,8 @@ LCEAB: lda BASL
sta OURCH
rts
;;; ============================================================
LCEBB: ldy CH
LCEBD: phy
jsr LCED2
@ -1984,22 +1987,29 @@ LCEC3: ply
bit TXTPAGE1
rts
LCEC8: phy
;;; ============================================================
LCEC8:
phy
pha
jsr LCED2
pla
sta (BASL),y
bra LCEC3
LCED2: bit RD80VID
bpl LCEDC
;;; ============================================================
LCED2:
bit RD80VID
bpl @l1
tya
lsr a
tay
bcc LCEE0
LCEDC: bit TXTPAGE1
bcc @l2
@l1: bit TXTPAGE1
rts
LCEE0: bit TXTPAGE2
@l2: bit TXTPAGE2
rts
;;; ============================================================