From 5d9201eb80ec3a4cbd4fe18fb2cbcb89df6a929e Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 27 Dec 2020 22:36:31 +0100 Subject: [PATCH] implemented ESC-K and ESC-X --- .../mega65_chrout_screen_control_1.s | 5 +- .../screen_m65/mega65_chrout_screen_escmode.s | 48 ++++++++++++++----- src/kernal/screen_m65/mega65_clrscr.s | 2 +- src/kernal/screen_m65/mega65_clrwin.s | 3 +- src/kernal/screen_m65/mega65_screen_helpers.s | 9 ++++ 5 files changed, 49 insertions(+), 18 deletions(-) diff --git a/src/kernal/screen_m65/mega65_chrout_screen_control_1.s b/src/kernal/screen_m65/mega65_chrout_screen_control_1.s index 4a3b62db..dddeb1f9 100644 --- a/src/kernal/screen_m65/mega65_chrout_screen_control_1.s +++ b/src/kernal/screen_m65/mega65_chrout_screen_control_1.s @@ -37,10 +37,7 @@ m65_chrout_screen_RETURN: ; RETURN clears quote and insert modes, it also clears reverse flag - lda #$00 - sta QTSW - sta INSRT - sta RVS + jsr m65_screen_clear_special_modes ; Move cursor to the beginning of the next line diff --git a/src/kernal/screen_m65/mega65_chrout_screen_escmode.s b/src/kernal/screen_m65/mega65_chrout_screen_escmode.s index e93f8eeb..3baf87b2 100644 --- a/src/kernal/screen_m65/mega65_chrout_screen_escmode.s +++ b/src/kernal/screen_m65/mega65_chrout_screen_escmode.s @@ -31,16 +31,33 @@ m65_chrout_esc_J: ; move cursor to the beginning of the line sta M65__TXTCOL bra m65_chrout_esc_done +m65_chrout_esc_K: ; move cursor after the text within the line XXX update for window mode + + phz + ldx M65_SCRMODE + lda m65_scrtab_txtwidth,x + sta M65__TXTCOL + dec + taz +@1: + lda [M65_LPNT_SCR], z + cmp #$20 ; 'SPACE' + bne @2 + dec M65__TXTCOL + dez + bpl @1 +@2: + plz + lda M65__TXTCOL + cmp m65_scrtab_txtwidth,x + bne m65_chrout_esc_done + dec M65__TXTCOL + bra m65_chrout_esc_done + m65_chrout_esc_O: ; cancel quote, reverse, underline, flash, etc - lda COLOR - and #$0F - sta COLOR - - lda #$00 - sta QTSW - sta INSRT - sta RVS + jsr m65_screen_clear_colorattr + jsr m65_screen_clear_special_modes ; FALLTROUGH @@ -48,6 +65,17 @@ m65_chrout_esc_done: jmp m65_chrout_screen_done +m65_chrout_esc_X: ; cycle through available screen modes + + lda M65_SCRMODE + dec + bpl @1 + lda #$02 +@1: + jsr M65_SCRMODESET + jsr M65_CLRSCR + bra m65_chrout_esc_done + ; XXX: implement screen routines below: @@ -92,8 +120,6 @@ m65_chrout_esc_H: +nop m65_chrout_esc_I: +nop -m65_chrout_esc_K: - +nop m65_chrout_esc_L: +nop m65_chrout_esc_M: @@ -116,8 +142,6 @@ m65_chrout_esc_V: +nop m65_chrout_esc_W: +nop -m65_chrout_esc_X: - +nop m65_chrout_esc_Y: +nop m65_chrout_esc_Z: diff --git a/src/kernal/screen_m65/mega65_clrscr.s b/src/kernal/screen_m65/mega65_clrscr.s index 72d28b9f..03da1239 100644 --- a/src/kernal/screen_m65/mega65_clrscr.s +++ b/src/kernal/screen_m65/mega65_clrscr.s @@ -2,7 +2,7 @@ ;; #LAYOUT# * * #IGNORE -M65_CLRSCR: +M65_CLRSCR: ; XXX consider integrating with M65_SCRMODESET ; Clear additional attributes from the color code diff --git a/src/kernal/screen_m65/mega65_clrwin.s b/src/kernal/screen_m65/mega65_clrwin.s index 4323fa05..6c64b188 100644 --- a/src/kernal/screen_m65/mega65_clrwin.s +++ b/src/kernal/screen_m65/mega65_clrwin.s @@ -7,9 +7,10 @@ M65_CLRWIN: - ; Clear additional attributes from the color code + ; Clear additional attributes from the color code, quote mode, etc. jsr m65_screen_clear_colorattr + jsr m65_screen_clear_special_modes ; Check if windowed mode; if not, go to M65_CLRSCR diff --git a/src/kernal/screen_m65/mega65_screen_helpers.s b/src/kernal/screen_m65/mega65_screen_helpers.s index 5baad989..65db8b5f 100644 --- a/src/kernal/screen_m65/mega65_screen_helpers.s +++ b/src/kernal/screen_m65/mega65_screen_helpers.s @@ -10,6 +10,15 @@ m65_screen_clear_colorattr: rts +m65_screen_clear_special_modes: ; XXX consider integrating with 'm65_screen_clear_colorattr' + + lda #$00 + sta QTSW + sta INSRT + sta RVS + + rts + m65_screen_upd_txtrow_off: