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

View File

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