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

+12 -6
View File
@@ -41,6 +41,7 @@
// I/O devices
#define CONFIG_IEC // please keep enabled for now
// #define CONFIG_IEC_JIFFYDOS // please keep disabled for now
// #define CONFIG_TAPE_NORMAL // please keep disabled for now
// #define CONFIG_TAPE_TURBO // please keep disabled for now
// #define CONFIG_RS232_UP2400 // please keep disabled for now
@@ -95,13 +96,9 @@
.const CONFIG_KEYCMD_F14 = @""
// Eye candy
// Screen editor
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
#define CONFIG_SHOW_PAL_NTSC
#define CONFIG_EDIT_STOPQUOTE
// Software features
@@ -111,6 +108,15 @@
#define CONFIG_BCD_SAFE_INTERRUPTS
// Eye candy
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
#define CONFIG_SHOW_PAL_NTSC
// Debug options
// #define CONFIG_DBG_STUBS_BRK
+12 -6
View File
@@ -43,6 +43,7 @@
// I/O devices
#define CONFIG_IEC // please keep enabled for now
// #define CONFIG_IEC_JIFFYDOS // please keep disabled for now
// #define CONFIG_TAPE_NORMAL // please keep disabled for now
// #define CONFIG_TAPE_TURBO // please keep disabled for now
// #define CONFIG_RS232_UP2400 // please keep disabled for now
@@ -97,13 +98,9 @@
.const CONFIG_KEYCMD_F14 = @""
// Eye candy
// Screen editor
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
// #define CONFIG_BANNER_FANCY
#define CONFIG_BANNER_BRAND
// #define CONFIG_SHOW_PAL_NTSC
#define CONFIG_EDIT_STOPQUOTE
// Software features
@@ -113,6 +110,15 @@
#define CONFIG_BCD_SAFE_INTERRUPTS
// Eye candy
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
// #define CONFIG_BANNER_FANCY
#define CONFIG_BANNER_BRAND
// #define CONFIG_SHOW_PAL_NTSC
// Debug options
// #define CONFIG_DBG_STUBS_BRK
+12 -6
View File
@@ -42,6 +42,7 @@
// I/O devices
#define CONFIG_IEC // please keep enabled for now
// #define CONFIG_IEC_JIFFYDOS // please keep disabled for now
// #define CONFIG_TAPE_NORMAL // please keep disabled for now
// #define CONFIG_TAPE_TURBO // please keep disabled for now
// #define CONFIG_RS232_UP2400 // please keep disabled for now
@@ -96,13 +97,9 @@
.const CONFIG_KEYCMD_F14 = @""
// Eye candy
// Screen editor
// #define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
// #define CONFIG_SHOW_PAL_NTSC
#define CONFIG_EDIT_STOPQUOTE
// Software features
@@ -112,6 +109,15 @@
#define CONFIG_BCD_SAFE_INTERRUPTS
// Eye candy
// #define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
// #define CONFIG_SHOW_PAL_NTSC
// Debug options
// #define CONFIG_DBG_STUBS_BRK
+12 -6
View File
@@ -41,6 +41,7 @@
// I/O devices
#define CONFIG_IEC // please keep enabled for now
// #define CONFIG_IEC_JIFFYDOS // please keep disabled for now
// #define CONFIG_TAPE_NORMAL // please keep disabled for now
// #define CONFIG_TAPE_TURBO // please keep disabled for now
// #define CONFIG_RS232_UP2400 // please keep disabled for now
@@ -95,13 +96,9 @@
.const CONFIG_KEYCMD_F14 = @""
// Eye candy
// Screen editor
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
#define CONFIG_SHOW_PAL_NTSC
#define CONFIG_EDIT_STOPQUOTE
// Software features
@@ -111,6 +108,15 @@
#define CONFIG_BCD_SAFE_INTERRUPTS
// Eye candy
#define CONFIG_COLORS_BRAND
// #define CONFIG_BANNER_SIMPLE
#define CONFIG_BANNER_FANCY
// #define CONFIG_BANNER_BRAND
#define CONFIG_SHOW_PAL_NTSC
// Debug options
// #define CONFIG_DBG_STUBS_BRK
+4
View File
@@ -109,6 +109,10 @@
// Check that I/O configuration is correct
{
#if CONFIG_IEC_JIFFYDOS && !CONFIG_IEC
.error "CONFIG_IEC_JIFFYDOS requires CONFIG_IEC"
#endif
.var selected_rs232 = 0;
#if CONFIG_RS232_UP2400
+6 -6
View File
@@ -154,8 +154,8 @@
.label LDTBL = $D9 // $D9-$F2 screen line link table, [!] our usage is different XXX give more details
.label USER = $F3 // $F3-$F4 pointer to current color RAM location
.label KEYTAB = $F5 // $F5-$F6 pointer to keyboard lookup table
.label RIBUF = $F7 // $F7-$F8 -- NOT IMPLEMENTED --
.label ROBUF = $F9 // $F9-$FA -- NOT IMPLEMENTED --
.label RIBUF = $F7 // $F7-$F8 -- NOT IMPLEMENTED -- XXX WIP
.label ROBUF = $F9 // $F9-$FA -- NOT IMPLEMENTED -- XXX WIP
// $FB $FB-$FE -- UNUSED -- free for user software
.label BASZPT = $FF // -- NOT IMPLEMENTED --
@@ -202,10 +202,10 @@
.label BITNUM = $298 // -- NOT IMPLEMENTED --
.label BAUDOF = $299 // $299-$29A -- NOT IMPLEMENTED --
#endif
.label RIDBE = $29B // -- NOT IMPLEMENTED --
.label RIDBS = $29C // -- NOT IMPLEMENTED --
.label RODBS = $29D // -- NOT IMPLEMENTED --
.label RODBE = $29E // -- NOT IMPLEMENTED --
.label RIDBE = $29B // -- NOT IMPLEMENTED -- XXX WIP
.label RIDBS = $29C // -- NOT IMPLEMENTED -- XXX WIP
.label RODBS = $29D // -- NOT IMPLEMENTED -- XXX WIP
.label RODBE = $29E // -- NOT IMPLEMENTED -- XXX WIP
.label IRQTMP = $29F // $29F-$2A0 -- NOT IMPLEMENTED --
.label ENABL = $2A1 // -- NOT IMPLEMENTED --
.label TODSNS = $2A2 // -- NOT IMPLEMENTED --
+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