screen editor is now easier to extend

This commit is contained in:
FeralChild64 committed 2019-10-30 18:12:04 +01:00
1 parent c3383b9e8f
commit ec98861613
17 files changed
+280 -174

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
//
// CLR key handling within CHROUT
//
chrout_screen_CLR:
jsr clear_screen
jmp chrout_screen_done
+32 -128
View File
@@ -15,7 +15,7 @@ chrout_screen_control:
chrout_try_RETURN:
cmp #$0D
cmp #KEY_RETURN
bne !+
// RETURN clears quote and insert modes, it also clears reverse flag
@@ -27,156 +27,60 @@ chrout_try_RETURN:
!:
chrout_try_DEL:
cmp #$14
cmp #KEY_DEL
bne !+
jmp chrout_screen_del
jmp chrout_screen_DEL
!:
#if CONFIG_EDIT_STOPQUOTE
chrout_try_STOP:
cmp #KEY_STOP
bne !+
lda #$00
sta QTSW
sta INSRT
// Let it run, we are saving 3 bytes on JMP this way
// and the performance hit is not going to be visible nevertheless
!:
#endif
chrout_try_quote:
lda QTSW
ora INSRT
beq !+
txa
jmp chrout_screen_quote
!:
txa
chrout_try_CRSR_UP:
chrout_try_jumptable:
cmp #$91
ldx #(__chrout_screen_jumptable_codes_end - chrout_screen_jumptable_codes - 1)
chrout_try_jumptable_loop:
cmp chrout_screen_jumptable_codes, x
bne !+
lda PNTR
sec
sbc #40
sta PNTR
jmp chrout_screen_calc_lptr_done
// Found, perform a jump to subroutine
lda chrout_screen_jumptable_hi, x
pha
lda chrout_screen_jumptable_lo, x
pha
rts
!:
chrout_try_CRSR_DOWN:
dex
bpl chrout_try_jumptable_loop
cmp #$11
bne !+
lda PNTR
clc
adc #40
sta PNTR
// We need to advance the pointer manually, as normalising
// now will break things. The pointer update is required
// so that we can tell if we really are on the bottom phys
// screen line or not
jsr screen_scroll_up_if_on_last_line
jmp chrout_screen_calc_lptr_done
!:
chrout_try_CRSR_LEFT:
cmp #$9D
bne !+
lda TBLX
ora PNTR
beq crsr_l1 // recalculating pointer is not really necessary, but this is a very rare case nevertheless
dec PNTR
crsr_l1:
jmp chrout_screen_calc_lptr_done
!:
chrout_try_CRSR_RIGHT:
cmp #$1D
bne !+
inc PNTR
jmp chrout_screen_calc_lptr_done
!:
chrout_try_RVS_ON:
cmp #$12
bne !+
lda #$80
bne rvs_l1
!:
chrout_try_RVS_OFF:
cmp #$92
bne !+
lda #$00
rvs_l1:
sta RVS
jmp chrout_screen_done
!:
chrout_try_MODE_GFX:
cmp #$8E
bne !+
lda VIC_YMCSB
and #$02 // to upper case
mode_l1:
sta VIC_YMCSB
jmp chrout_screen_done
!:
chrout_try_MODE_TXT:
cmp #$0E
bne !+
lda VIC_YMCSB
ora #$02 // to lower case
bne mode_l1 // branch always
!:
chrout_try_COLOR:
ldx #$0F
colour_check_loop:
chrout_try_color_loop:
cmp colour_codes,x
bne !+
stx COLOR
jmp chrout_screen_done
!:
dex
bpl colour_check_loop
chrout_try_SHIFT_ENABLE:
cmp #$09
bne !+
lda #$00 // enable SHIFT+VENDOR combination
sta MODE
bpl chrout_try_color_loop
// Unknown code, or key not requiring any handling
jmp chrout_screen_done
!:
chrout_try_SHIFT_DISABLE:
cmp #$08
bne !+
lda #$80 // disable SHIFT+VENDOR combination
sta MODE
jmp chrout_screen_done
!:
chrout_try_HOME:
cmp #$13
bne !+
jsr cursor_home
jmp chrout_screen_done
!:
chrout_try_CLR:
cmp #$93
bne !+
jsr clear_screen
clr_l1:
jmp chrout_screen_done
!:
chrout_try_INS:
cmp #$94
bne clr_l1 // unknown code or key does not need handling
jmp chrout_screen_ins
+40
View File
@@ -0,0 +1,40 @@
//
// Cursor keys handling within CHROUT
//
chrout_screen_CRSR_UP:
lda PNTR
sec
sbc #40
sta PNTR
jmp chrout_screen_calc_lptr_done
chrout_screen_CRSR_DOWN:
lda PNTR
clc
adc #40
sta PNTR
// We need to advance the pointer manually, as normalising
// now will break things. The pointer update is required
// so that we can tell if we really are on the bottom phys
// screen line or not
jsr screen_scroll_up_if_on_last_line
jmp chrout_screen_calc_lptr_done
chrout_screen_CRSR_LEFT:
lda TBLX
ora PNTR
beq !+ // recalculating pointer is not really necessary, but this is a very rare case nevertheless
dec PNTR
!:
jmp chrout_screen_calc_lptr_done
chrout_screen_CRSR_RIGHT:
inc PNTR
jmp chrout_screen_calc_lptr_done
+1 -1
View File
@@ -3,7 +3,7 @@
// CHROUT routine - screen support, DEL key handling
//
chrout_screen_del:
chrout_screen_DEL:
// In insert mode it embeds control character
ldx INSRT
+19
View File
@@ -0,0 +1,19 @@
//
// GFX/TXT mode switch handling within CHROUT
//
chrout_screen_GFX:
lda VIC_YMCSB
and #$02 // to upper case
!:
sta VIC_YMCSB
jmp chrout_screen_done
chrout_screen_TXT:
lda VIC_YMCSB
ora #$02 // to lower case
bne !- // branch always
+10
View File
@@ -0,0 +1,10 @@
//
// HOME key handling within CHROUT
//
chrout_screen_HOME:
jsr cursor_home
jmp chrout_screen_done
+1 -1
View File
@@ -3,7 +3,7 @@
// CHROUT routine - screen support, INS key handling
//
chrout_screen_ins:
chrout_screen_INS:
// Insert (shift-DELETE)
@@ -0,0 +1,55 @@
//
// Jumptable for screen control coldes support. To improve performance, should be sorted
// starting from the least probable routine
//
chrout_screen_jumptable_codes:
.byte KEY_INS
.byte KEY_CLR
.byte KEY_HOME
.byte KEY_SHIFT_OFF
.byte KEY_SHIFT_ON
.byte KEY_TXT
.byte KEY_GFX
.byte KEY_RVS_OFF
.byte KEY_RVS_ON
.byte KEY_CRSR_RIGHT
.byte KEY_CRSR_LEFT
.byte KEY_CRSR_DOWN
.byte KEY_CRSR_UP
__chrout_screen_jumptable_codes_end:
chrout_screen_jumptable_lo:
.byte <(chrout_screen_INS - 1)
.byte <(chrout_screen_CLR - 1)
.byte <(chrout_screen_HOME - 1)
.byte <(chrout_screen_SHIFT_OFF - 1)
.byte <(chrout_screen_SHIFT_ON - 1)
.byte <(chrout_screen_TXT - 1)
.byte <(chrout_screen_GFX - 1)
.byte <(chrout_screen_RVS_OFF - 1)
.byte <(chrout_screen_RVS_ON - 1)
.byte <(chrout_screen_CRSR_RIGHT - 1)
.byte <(chrout_screen_CRSR_LEFT - 1)
.byte <(chrout_screen_CRSR_DOWN - 1)
.byte <(chrout_screen_CRSR_UP - 1)
chrout_screen_jumptable_hi:
.byte >(chrout_screen_INS - 1)
.byte >(chrout_screen_CLR - 1)
.byte >(chrout_screen_HOME - 1)
.byte >(chrout_screen_SHIFT_OFF - 1)
.byte >(chrout_screen_SHIFT_ON - 1)
.byte >(chrout_screen_TXT - 1)
.byte >(chrout_screen_GFX - 1)
.byte >(chrout_screen_RVS_OFF - 1)
.byte >(chrout_screen_RVS_ON - 1)
.byte >(chrout_screen_CRSR_RIGHT - 1)
.byte >(chrout_screen_CRSR_LEFT - 1)
.byte >(chrout_screen_CRSR_DOWN - 1)
.byte >(chrout_screen_CRSR_UP - 1)
+17
View File
@@ -0,0 +1,17 @@
//
// RVS ON/OFF handling within CHROUT
//
chrout_screen_RVS_ON:
lda #$80
bne !+ // branch always
chrout_screen_RVS_OFF:
lda #$00
!:
sta RVS
jmp chrout_screen_done
@@ -0,0 +1,16 @@
//
// SHIFT ON/OFF handling within CHROUT
//
chrout_screen_SHIFT_ON:
lda #$00 // enable SHIFT+VENDOR combination
!:
sta MODE
jmp chrout_screen_done
chrout_screen_SHIFT_OFF:
lda #$80 // disable SHIFT+VENDOR combination
bne !- // branch always