From 56b9571b62513fb51a3b0b3c8161b2c37a4222a0 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 23 Aug 2020 15:31:57 +0200 Subject: [PATCH] more work towards windowed mode support --- src/kernal/board_m65/mega65_imports.s | 5 ++ src/kernal/extapi_m65/mega65__jumptable.s | 12 ++++ src/kernal/screen_m65/mega65_chrout_screen.s | 21 ++++++- .../mega65_chrout_screen_control_1.s | 6 ++ src/kernal/screen_m65/mega65_setwin.s | 56 +++++++++++++++++++ 5 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 src/kernal/screen_m65/mega65_setwin.s diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index 6eca7f6b..e8ebbe9b 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -12,6 +12,11 @@ .label M65_SLOW = KERNAL_0.M65_SLOW .label M65_FAST = KERNAL_0.M65_FAST .label M65_ISMODE65 = KERNAL_0.M65_ISMODE65 +.label M65_SETWIN_XY = KERNAL_0.M65_SETWIN_XY +.label M65_SETWIN_WH = KERNAL_0.M65_SETWIN_WH +.label M65_SETWIN_N = KERNAL_0.M65_SETWIN_N +.label M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y + #if (CONFIG_TAPE_NORMAL || CONFIG_TAPE_TURBO) || (CONFIG_IEC_JIFFYDOS && !CONFIG_MEMORY_MODEL_60K) .label screen_on = KERNAL_0.screen_on diff --git a/src/kernal/extapi_m65/mega65__jumptable.s b/src/kernal/extapi_m65/mega65__jumptable.s index 8f11f632..2cf575d5 100644 --- a/src/kernal/extapi_m65/mega65__jumptable.s +++ b/src/kernal/extapi_m65/mega65__jumptable.s @@ -31,3 +31,15 @@ M65_JCLRSCR: M65_JCLRWIN: jsr M65_CLRWIN + +M65_JSETWIN_XY: + jsr M65_SETWIN_XY + +M65_JSETWIN_WH: + jsr M65_SETWIN_WH + +M65_JSETWIN_N: + jsr M65_SETWIN_N + +M65_JSETWIN_Y: + jsr M65_SETWIN_Y diff --git a/src/kernal/screen_m65/mega65_chrout_screen.s b/src/kernal/screen_m65/mega65_chrout_screen.s index 486661e2..c438276d 100644 --- a/src/kernal/screen_m65/mega65_chrout_screen.s +++ b/src/kernal/screen_m65/mega65_chrout_screen.s @@ -100,7 +100,26 @@ m65_chrout_screen_literal: // entry point for m65_chrout_screen_quote m65_chrout_fix_column_row: - // XXX continue the implementation - fix the cursor position + ldy M65_SCRMODE + + bit M64_SCRWINMODE + bmi m65_chrout_fix_column_row_win + + // Non-windowed mode + + // XXX + // XXX provide implementation + // XXX + + jmp_8 m65_chrout_screen_done + +m65_chrout_fix_column_row_win: + + // Windowed mode + + // XXX + // XXX provide implementation + // XXX nop 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 07db19f4..be48a266 100644 --- a/src/kernal/screen_m65/mega65_chrout_screen_control_1.s +++ b/src/kernal/screen_m65/mega65_chrout_screen_control_1.s @@ -46,6 +46,12 @@ m65_chrout_screen_RETURN: // Move cursor to the beginning of the next line + bit M64_SCRWINMODE + bpl !+ + lda M65_TXTWIN_X0 + skip_2_bytes_trash_nvz +!: + lda #$00 sta M65__TXTCOL inc M65__TXTROW diff --git a/src/kernal/screen_m65/mega65_setwin.s b/src/kernal/screen_m65/mega65_setwin.s new file mode 100644 index 00000000..f900c5b8 --- /dev/null +++ b/src/kernal/screen_m65/mega65_setwin.s @@ -0,0 +1,56 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + + +M65_SETWIN_XY: + + stx M65_TXTWIN_X0 + sty M65_TXTWIN_Y0 + + rts + + +M65_SETWIN_WH: + + pha + + clc + txa + adc M65_TXTWIN_X0 + sta M65_TXTWIN_X1 + + clc + tya + adc M65_TXTWIN_Y0 + sta M65_TXTWIN_Y1 + + pla + rts + + +M65_SETWIN_N: + + pha + + lda #$00 + sta M64_SCRWINMODE + + pla + rts + + +M65_SETWIN_Y: + + pha + + lda #$FF + sta M64_SCRWINMODE + + lda M65_TXTWIN_X0 + sta M65__TXTCOL + + lda M65_TXTWIN_Y0 + sta M65__TXTROW + + pla + rts