From ad221406175c44e2e5af0e1dc215decda7e6bc82 Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sun, 23 Aug 2020 17:44:39 +0200 Subject: [PATCH] adapted SCREEN rioutine to MEGA65 native mode --- src/basic/basic_commands_02/cmd_sysinfo.s | 17 +++++++++++ src/basic/board_m65/mega65_imports.s | 1 + src/kernal/board_m65/mega65_imports.s | 3 ++ src/kernal/screen/screen.s | 28 +++++++++++++++++++ .../screen_m65/mega65_screen_table_height.s | 9 ++++++ .../screen_m65/mega65_screen_table_width.s | 9 ++++++ src/kernal/screen_m65/mega65_screen_tables.s | 12 -------- 7 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 src/kernal/screen_m65/mega65_screen_table_height.s create mode 100644 src/kernal/screen_m65/mega65_screen_table_width.s diff --git a/src/basic/basic_commands_02/cmd_sysinfo.s b/src/basic/basic_commands_02/cmd_sysinfo.s index 71ea5e83..08b2d6e4 100644 --- a/src/basic/basic_commands_02/cmd_sysinfo.s +++ b/src/basic/basic_commands_02/cmd_sysinfo.s @@ -73,6 +73,23 @@ print_sysinfo_banner: ldx #IDX__STR_SI_HDR_VID jsr print_packed_misc_str + jsr JSCREEN + + phy + lda #$00 + jsr print_integer + + lda #$58 + jsr JCHROUT + + ply + tya + tax + lda #$00 + jsr print_integer + + jsr print_space + ldx #IDX__STR_NTSC lda TVSFLG beq !+ diff --git a/src/basic/board_m65/mega65_imports.s b/src/basic/board_m65/mega65_imports.s index 2d0d628d..8a2a80ae 100644 --- a/src/basic/board_m65/mega65_imports.s +++ b/src/basic/board_m65/mega65_imports.s @@ -23,6 +23,7 @@ .label JCHKIN = KERNAL_0.JCHKIN .label JCHRIN = KERNAL_0.JCHRIN .label JREADST = KERNAL_0.JREADST +.label JSCREEN = KERNAL_0.JSCREEN .label SELDEV = KERNAL_0.SELDEV .label M65_ISMODE65 = KERNAL_0.M65_ISMODE65 .label M65_SETWIN_XY = KERNAL_0.M65_SETWIN_XY diff --git a/src/kernal/board_m65/mega65_imports.s b/src/kernal/board_m65/mega65_imports.s index e8ebbe9b..bb9c3d10 100644 --- a/src/kernal/board_m65/mega65_imports.s +++ b/src/kernal/board_m65/mega65_imports.s @@ -34,6 +34,9 @@ .label wait_x_bars = KERNAL_0.wait_x_bars .label viciv_unhide = KERNAL_0.viciv_unhide +.label m65_scrtab_txtwidth = KERNAL_0.m65_scrtab_txtwidth +.label m65_scrtab_txtheight = KERNAL_0.m65_scrtab_txtheight + #if CONFIG_IEC .label iec_set_idle = KERNAL_0.iec_set_idle diff --git a/src/kernal/screen/screen.s b/src/kernal/screen/screen.s index 6b98bdb3..9d11c38b 100644 --- a/src/kernal/screen/screen.s +++ b/src/kernal/screen/screen.s @@ -15,6 +15,8 @@ SCREEN: +#if !ROM_LAYOUT_M65 + // There are only 2 sane ways to implement this routine, // I hope this one is different than what Commodore picked :) @@ -22,3 +24,29 @@ SCREEN: ldx #40 // 40 rows rts + +#else + + php + jsr M65_ISMODE65 + bcc !+ + + plp + + ldy #25 // 25 columns + ldx #40 // 40 rows + + rts +!: + plp + pha + ldy M65_SCRMODE + + ldx m65_scrtab_txtwidth, y + lda m65_scrtab_txtheight, y + tay + + pla + rts + +#endif diff --git a/src/kernal/screen_m65/mega65_screen_table_height.s b/src/kernal/screen_m65/mega65_screen_table_height.s new file mode 100644 index 00000000..7c531313 --- /dev/null +++ b/src/kernal/screen_m65/mega65_screen_table_height.s @@ -0,0 +1,9 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + + +m65_scrtab_txtheight: // height of the text screen + + .byte 25 + .byte 25 + .byte 50 diff --git a/src/kernal/screen_m65/mega65_screen_table_width.s b/src/kernal/screen_m65/mega65_screen_table_width.s new file mode 100644 index 00000000..1a9a5850 --- /dev/null +++ b/src/kernal/screen_m65/mega65_screen_table_width.s @@ -0,0 +1,9 @@ +// #LAYOUT# M65 KERNAL_0 #TAKE +// #LAYOUT# * * #IGNORE + + +m65_scrtab_txtwidth: // width of the text screen (logical width is always set to 80) + + .byte 40 + .byte 80 + .byte 80 diff --git a/src/kernal/screen_m65/mega65_screen_tables.s b/src/kernal/screen_m65/mega65_screen_tables.s index 55a10b18..51d0b7b6 100644 --- a/src/kernal/screen_m65/mega65_screen_tables.s +++ b/src/kernal/screen_m65/mega65_screen_tables.s @@ -8,18 +8,6 @@ m65_scrtab_vic_ctrlb: // parameters for VIC control register B .byte %10100000 // 80x25 + extended attributes .byte %10100100 // 80x50 + extended attributes -m65_scrtab_txtwidth: // width of the text screen (logical width is always set to 80) - - .byte 40 - .byte 80 - .byte 80 - -m65_scrtab_txtheight: // height of the text screen - - .byte 25 - .byte 25 - .byte 50 - m65_scrtab_viewmax_lo: // maximum allowed viewport start - low byte .byte $B0