From 98e7e633e86a50fd0a6be532ac0f02d82ff23cff Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Wed, 8 Jan 2020 18:01:06 +0100 Subject: [PATCH] reenabled tab, some work towards char delete --- c64/basic/init/initmsg_real.s | 8 ++-- c64/kernal/keyboard/chrin_keyboard.s | 32 +++++++++++--- c64/kernal/screen/chrout_screen.s | 2 + c64/kernal/screen/chrout_screen_del.s | 45 +++++++++++--------- c64/kernal/screen/chrout_screen_tab.s | 30 +++++++------ c64/kernal/screen/screen_grow_logical_line.s | 2 +- 6 files changed, 74 insertions(+), 45 deletions(-) diff --git a/c64/basic/init/initmsg_real.s b/c64/basic/init/initmsg_real.s index 923b74a6..8a9d3924 100644 --- a/c64/basic/init/initmsg_real.s +++ b/c64/basic/init/initmsg_real.s @@ -118,7 +118,7 @@ initmsg_real: ldy #>startup_banner jsr STROUT - ldx #$04 + ldx #$05 ldy #$00 jsr plot_set @@ -126,20 +126,20 @@ initmsg_real: ldy #>rom_revision_basic_string jsr STROUT - ldx #$04 + ldx #$05 ldy #$12 jsr plot_set jsr initmsg_bytes_free #if CONFIG_SHOW_FEATURES - ldx #$05 + ldx #$08 ldy #$00 jsr plot_set jsr print_features jmp print_return #else - ldx #$05 + ldx #$08 ldy #$00 jmp plot_set #endif diff --git a/c64/kernal/keyboard/chrin_keyboard.s b/c64/kernal/keyboard/chrin_keyboard.s index 77403a84..e50ee425 100644 --- a/c64/kernal/keyboard/chrin_keyboard.s +++ b/c64/kernal/keyboard/chrin_keyboard.s @@ -35,7 +35,7 @@ chrin_repeat: empty_line: // For an empty line, just return the carriage return - // (and don't forget to actually print the carriage return, so that + // (and do not forget to actually print the carriage return, so that // the cursor advances and screen scrolls as required) ply_trash_a @@ -72,7 +72,7 @@ read_from_keyboard: cmp #$0D bne not_enter -chrin_enter: +chrin_enter: // YYY test this! jsr cursor_disable jsr pop_keyboard_buffer @@ -81,7 +81,7 @@ chrin_enter: // It was enter. // Note that we have a line of input to return, and return the first byte thereof // after computing and storing its length. - // (Compute's Mapping the 64, p96) + // (Computes Mapping the 64, p96) // Set pointer to line of input lda PNT+0 @@ -89,14 +89,34 @@ chrin_enter: lda PNT+1 sta LXSP+1 + // If the current line is a continuation of the previous one, decrease LXSP by 40 + ldy TBLX + lda LDTBL, y + bmi chrin_enter_calc_length // branch if not continuation + lda LXSP+0 + sec + sbc #40 + sta LXSP+0 + bcs !+ + dec LXSP+1 +!: + ldy #80 + bne chrin_enter_loop // branch always + +chrin_enter_calc_length: + // Calculate length jsr screen_get_logical_line_end_ptr iny -!: dey + +chrin_enter_loop: + + // Retrieve bytes + dey bmi empty_line - lda (PNT),y + lda (LXSP),y cmp #$20 - beq !- + beq chrin_enter_loop iny sty INDX lda #$01 diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index dc5532b8..15323dd9 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -126,5 +126,7 @@ chrout_screen_calc_lptr_done: chrout_screen_done: + // YYY should we update character under cursor here? or in cursor_show_if_enabled? + jsr cursor_show_if_enabled jmp chrout_done_success diff --git a/c64/kernal/screen/chrout_screen_del.s b/c64/kernal/screen/chrout_screen_del.s index c79d9b3a..6ca9c4f0 100644 --- a/c64/kernal/screen/chrout_screen_del.s +++ b/c64/kernal/screen/chrout_screen_del.s @@ -11,15 +11,9 @@ chrout_screen_DEL: beq !+ jmp chrout_screen_quote !: - - - - jmp chrout_screen_done - -/* YYY disabled for rework -chrout_screen_DEL: - - ldx PNTR + // ldx PNTR + jsr screen_get_clipped_PNTR + cpy #$00 bne chrout_screen_del_column_non_0 // FALLTROUGH @@ -27,22 +21,32 @@ chrout_screen_DEL: chrout_screen_del_column_0: ldy TBLX - beq chrout_screen_del_done // delete from row 0, col 0 does nothing - - // Column 0 delete just moves us to the end of the - // previous line, without actually deleting anything + beq chrout_screen_del_done // delete from row 0, col 0 does nothing + // Move cursor to end of previous line dec TBLX - jsr screen_get_current_line_logical_length - lda LNMX + lda #39 sta PNTR + + // Update PNT and USER pointers + jsr screen_calculate_PNT_USER + // Put space character at the current cursor position + ldy #39 + lda #$20 + sta (PNT),y + + // XXX should we clear the color too? + + // Finish with recalculating all the variables jmp chrout_screen_calc_lptr_done chrout_screen_del_column_non_0: - // Copy rest of line down - jsr screen_get_current_line_logical_length +/* YYY disabled for rework + + // Copy rest of logical line back + jsr screen_get_logical_line_end_ptr ldy PNTR cpy LNMX beq !++ @@ -70,7 +74,8 @@ chrout_screen_del_column_non_0: // FALLTROUGH -chrout_screen_del_done: - jmp chrout_screen_done +*/ -*/ \ No newline at end of file +chrout_screen_del_done: + + jmp chrout_screen_done diff --git a/c64/kernal/screen/chrout_screen_tab.s b/c64/kernal/screen/chrout_screen_tab.s index 80178e56..59c3816a 100644 --- a/c64/kernal/screen/chrout_screen_tab.s +++ b/c64/kernal/screen/chrout_screen_tab.s @@ -6,33 +6,35 @@ #if CONFIG_EDIT_TABULATORS -chrout_screen_TAB_FW: - jmp chrout_screen_done -chrout_screen_TAB_BW: - jmp chrout_screen_done -/* YYY disabled for rework chrout_screen_TAB_FW: - lda PNTR + jsr screen_get_clipped_PNTR + tya ora #%00000111 - sta PNTR - inc PNTR + tay + iny + cpy #40 + bcc !+ + ldy #39 +!: + sty PNTR + jmp chrout_screen_calc_lptr_done chrout_screen_TAB_BW: - lda TBLX - ora PNTR - beq !+ // top-left corner, recalculating pointer is not necessary, but this is a very rare case nevertheless + jsr screen_get_clipped_PNTR + cpy #$00 // YYY maybe it's worth to put this inside screen_get_clipped_PNTR? + beq !+ // column 0, recalculating pointers is not necessary, but this is a rare case nevertheless - dec PNTR - lda PNTR + dey + tya and #%11111000 sta PNTR !: - jmp chrout_screen_calc_lptr_done */ + jmp chrout_screen_calc_lptr_done #endif // CONFIG_EDIT_TABULATORS diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index bc5e6256..7e2627cc 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,5 +1,4 @@ -// YYY test all the cases screen_grow_logical_line_screen_up: @@ -72,6 +71,7 @@ screen_grow_logical_line: screen_grow_logical_line_loop: // Scroll down one line each loop iteration + // YYY add LDTBL scrolling ldy #39 !: