screen editor is now easier to extend
This commit is contained in:
1 parent
c3383b9e8f
commit
ec98861613
17 files changed
+280
-174
No files matched your search
@@ -0,0 +1,9 @@
|
||||
|
||||
//
|
||||
// CLR key handling within CHROUT
|
||||
//
|
||||
|
||||
chrout_screen_CLR:
|
||||
|
||||
jsr clear_screen
|
||||
jmp chrout_screen_done
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -0,0 +1,10 @@
|
||||
|
||||
//
|
||||
// HOME key handling within CHROUT
|
||||
//
|
||||
|
||||
|
||||
chrout_screen_HOME:
|
||||
|
||||
jsr cursor_home
|
||||
jmp chrout_screen_done
|
||||
@@ -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)
|
||||
@@ -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
|
||||
Reference in new issue
Block a user