diff --git a/c64/kernal/screen/chrout_screen.s b/c64/kernal/screen/chrout_screen.s index 328cc0ba..c70d51bf 100644 --- a/c64/kernal/screen/chrout_screen.s +++ b/c64/kernal/screen/chrout_screen.s @@ -119,6 +119,7 @@ chrout_screen_literal: chrout_screen_calc_lptr_done: jsr screen_calculate_PNT_USER + jsr screen_fix_PNTR // FALLTROUGH diff --git a/c64/kernal/screen/chrout_screen_crsr.s b/c64/kernal/screen/chrout_screen_crsr.s index 1eb85249..9946e43d 100644 --- a/c64/kernal/screen/chrout_screen_crsr.s +++ b/c64/kernal/screen/chrout_screen_crsr.s @@ -5,37 +5,34 @@ chrout_screen_CRSR_UP: - jmp chrout_screen_done + + lda TBLX + beq !+ + dec TBLX +!: + jmp chrout_screen_calc_lptr_done + + chrout_screen_CRSR_DOWN: - jmp chrout_screen_done + + lda TBLX + cmp #24 + bne !+ + + jsr screen_scroll_up_delay_done +!: + inc TBLX + jmp chrout_screen_calc_lptr_done + + + + chrout_screen_CRSR_LEFT: - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done chrout_screen_CRSR_RIGHT: - jmp chrout_screen_done + jmp chrout_screen_calc_lptr_done /* YYY disabled for rework -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: diff --git a/c64/kernal/screen/e8ea.screen_scroll_up.s b/c64/kernal/screen/e8ea.screen_scroll_up.s index 2db650c4..af216001 100644 --- a/c64/kernal/screen/e8ea.screen_scroll_up.s +++ b/c64/kernal/screen/e8ea.screen_scroll_up.s @@ -41,7 +41,7 @@ screen_scroll_up: // FALLTROUGH -screen_scroll_up_delay_done: +screen_scroll_up_delay_done: // entry point for cursor move control codes // Scroll the LDTBL (line link table) diff --git a/c64/kernal/screen/screen_fix_pntr.s b/c64/kernal/screen/screen_fix_pntr.s new file mode 100644 index 00000000..7d256caa --- /dev/null +++ b/c64/kernal/screen/screen_fix_pntr.s @@ -0,0 +1,30 @@ + +// +// Sets PNTR in a proper range (0-39 or 40-79) depending on the +// + + +screen_fix_PNTR: + + ldy TBLX + lda LDTBL, y + php + jsr screen_get_clipped_PNTR + plp + bmi screen_fix_PNTR_0_39 + + // FALLTROUGH + +screen_fix_PNTR_40_79: + + tya + clc + adc #40 + tay + + // FALLTROUGH + +screen_fix_PNTR_0_39: + + sty PNTR + rts diff --git a/c64/kernal/screen/screen_grow_logical_line.s b/c64/kernal/screen/screen_grow_logical_line.s index ef66c287..0f930bd9 100644 --- a/c64/kernal/screen/screen_grow_logical_line.s +++ b/c64/kernal/screen/screen_grow_logical_line.s @@ -1,4 +1,5 @@ +// YYY test all the cases! screen_grow_logical_line_screen_up: @@ -7,7 +8,7 @@ screen_grow_logical_line_screen_up: // FALLTROUGH -screen_grow_logical_line_already_done: +screen_grow_logical_line_done: inc TBLX jmp screen_calculate_PNT_USER