From 413183474b0ceb438eca30b144c783fa79552c8d Mon Sep 17 00:00:00 2001 From: FeralChild64 Date: Sat, 26 Dec 2020 21:41:04 +0100 Subject: [PATCH] added command to change color palette on MEGA65 --- doc/Extended-BASIC.md | 6 +- src/,,config_mega65.s | 4 +- src/aliases/,aliases_ram_lowmem.s | 4 +- src/basic/,imports.s | 2 + .../basic_commands_04/cmd__jumptable_04.s | 6 + src/basic/basic_commands_04/cmd_colorset.s | 21 + .../board_m65/4000.mega65_vectable_kernal_1.s | 2 + src/kernal/board_m65/mega65_colorset.s | 182 +++++++ src/kernal/board_m65/mega65_colorset_assets.s | 476 ++++++++++++++++++ src/kernal/board_m65/mega65_modeset.s | 2 +- src/kernal/board_m65/mega65_reset_palette.s | 244 --------- src/kernal/jumptable_m65/mega65__jumptable.s | 2 +- tools/generate_strings.cc | 1 + 13 files changed, 701 insertions(+), 251 deletions(-) create mode 100644 src/basic/basic_commands_04/cmd_colorset.s create mode 100644 src/kernal/board_m65/mega65_colorset.s create mode 100644 src/kernal/board_m65/mega65_colorset_assets.s delete mode 100644 src/kernal/board_m65/mega65_reset_palette.s diff --git a/doc/Extended-BASIC.md b/doc/Extended-BASIC.md index cad3279c..3688e594 100644 --- a/doc/Extended-BASIC.md +++ b/doc/Extended-BASIC.md @@ -100,12 +100,16 @@ Displays BASIC memory usage information: ### `MONITOR` (MEGA65) -Invokes a machine language monitor +Invokes a machine language monitor. Not finished yet! ### `SYSINFO` (MEGA65) Displays various system information. +### `COLORSET id` (MEGA65) + +Changes the color set (palette). 0 = alias for the default one. Add 128 for a greyscale version. + ### `CLEAR` (cart, MEGA65) Clears the screen content. diff --git a/src/,,config_mega65.s b/src/,,config_mega65.s index 769ac1c3..ae76fe61 100644 --- a/src/,,config_mega65.s +++ b/src/,,config_mega65.s @@ -68,7 +68,7 @@ ;; #CONFIG# KEYCMD_F9 "REM F9" ;; #CONFIG# KEYCMD_F10 "\5FL" -;; #CONFIG# KEYCMD_F11 "REM F11" +;; #CONFIG# KEYCMD_F11 "COLORSET 128" ;; #CONFIG# KEYCMD_F12 "\5FHF" ;; #CONFIG# KEYCMD_F13 "JOYCRSR 2" ;; #CONFIG# KEYCMD_F14 "BOOTCPM" @@ -77,7 +77,7 @@ ; --- Screen editor ;; #CONFIG# EDIT_STOPQUOTE YES -;; #CONFIG# VIC_PALETTE 0 ; 0 = default; 1 = C65, 2 = Colodore, 3 = VICE, 4 = Frodo, 5 = Deekay +;; #CONFIG# VIC_PALETTE 0 ; 0 = default; 1 = C65, 2 = Frodo, 3 = VICE, 4 = Colodore, 5 = Deekay ; --- Software features diff --git a/src/aliases/,aliases_ram_lowmem.s b/src/aliases/,aliases_ram_lowmem.s index e82c13be..d6660835 100644 --- a/src/aliases/,aliases_ram_lowmem.s +++ b/src/aliases/,aliases_ram_lowmem.s @@ -100,8 +100,8 @@ !addr COLSTORE = $9C ; [!] screen border storage for tape routines } !addr MSGFLG = $9D ; bit 6 = error messages, bit 7 = control message - !addr PTR1 = $9E ; for tape support, counter of errorneous bytes [!] also used by PRIMM - !addr PTR2 = $9F ; for tape support, counter for errorneous bytes correction [!] also used by PRIMM + !addr PTR1 = $9E ; for tape support, counter of errorneous bytes [!] also used by PRIMM and other routines + !addr PTR2 = $9F ; for tape support, counter for errorneous bytes correction [!] also used by PRIMM and other routines !addr TIME = $A0 ; $A0-$A2 jiffy clock !addr IECPROTO = $A3 ; [!] IEC or pseudo-IEC protocol, >= $80 for unknown; originally named TSFCNT !addr TBTCNT = $A4 ; temporary variable for tape and IEC, [!] our usage probably differs in details diff --git a/src/basic/,imports.s b/src/basic/,imports.s index 9ae7f663..56443282 100644 --- a/src/basic/,imports.s +++ b/src/basic/,imports.s @@ -45,6 +45,8 @@ ;; #ALIAS# M65_MODESET = KERNAL_0.M65_MODESET ;; #ALIAS# M65_SETWIN_Y = KERNAL_0.M65_SETWIN_Y +;; #ALIAS# m65_colorset = KERNAL_0.m65_colorset + ; ; Ultimate 64 specific parts ; diff --git a/src/basic/basic_commands_04/cmd__jumptable_04.s b/src/basic/basic_commands_04/cmd__jumptable_04.s index 9fc274ef..4b1b3373 100644 --- a/src/basic/basic_commands_04/cmd__jumptable_04.s +++ b/src/basic/basic_commands_04/cmd__jumptable_04.s @@ -9,6 +9,7 @@ !set ITEM_02 = cmd_monitor !set ITEM_03 = BOOTCPM !set ITEM_04 = cmd_joycrsr +!set ITEM_05 = cmd_colorset !ifndef HAS_OPCODES_65C02 { @@ -18,12 +19,16 @@ command_04_jumptable_lo: !byte <(ITEM_01-1) !byte <(ITEM_02-1) !byte <(ITEM_03-1) + !byte <(ITEM_04-1) + !byte <(ITEM_05-1) command_04_jumptable_hi: !byte >(ITEM_01-1) !byte >(ITEM_02-1) !byte >(ITEM_03-1) + !byte >(ITEM_04-1) + !byte >(ITEM_05-1) } else { ; HAS_OPCODES_65C02 @@ -35,4 +40,5 @@ command_04_jumptable: !word ITEM_02 !word ITEM_03 !word ITEM_04 + !word ITEM_05 } diff --git a/src/basic/basic_commands_04/cmd_colorset.s b/src/basic/basic_commands_04/cmd_colorset.s new file mode 100644 index 00000000..7ea8cd70 --- /dev/null +++ b/src/basic/basic_commands_04/cmd_colorset.s @@ -0,0 +1,21 @@ +;; #LAYOUT# M65 BASIC_0 #TAKE +;; #LAYOUT# * * #IGNORE + + +cmd_colorset: + + ; Make sure we are in MEGA65 native mode + + jsr helper_ensure_native_mode + + ; Fetch palette ID + + jsr fetch_uint8 + +bcs do_SYNTAX_error + + ; Set the palette + + jsr m65_colorset + +bcs do_ILLEGAL_QUANTITY_error + + rts diff --git a/src/kernal/board_m65/4000.mega65_vectable_kernal_1.s b/src/kernal/board_m65/4000.mega65_vectable_kernal_1.s index 699a48c5..ec3a1fb8 100644 --- a/src/kernal/board_m65/4000.mega65_vectable_kernal_1.s +++ b/src/kernal/board_m65/4000.mega65_vectable_kernal_1.s @@ -27,6 +27,7 @@ !addr VK1__M65_CLRWIN = $4000 + 2 * 13 !addr VK1__m65_screen_upd_txtrow_off = $4000 + 2 * 14 !addr VK1__m65_shadow_BZP = $4000 + 2 * 15 + !addr VK1__m65_colorset = $4000 + 2 * 16 } else { @@ -62,4 +63,5 @@ !word M65_CLRWIN !word m65_screen_upd_txtrow_off !word m65_shadow_BZP + !word m65_colorset } diff --git a/src/kernal/board_m65/mega65_colorset.s b/src/kernal/board_m65/mega65_colorset.s new file mode 100644 index 00000000..640096ca --- /dev/null +++ b/src/kernal/board_m65/mega65_colorset.s @@ -0,0 +1,182 @@ +;; #LAYOUT# M65 KERNAL_0 #TAKE +;; #LAYOUT# M65 KERNAL_1 #TAKE +;; #LAYOUT# * * #IGNORE + + +!ifdef SEGMENT_KERNAL_0 { + +m65_colorset: + + jsr map_KERNAL_1 + jsr (VK1__m65_colorset) + jmp map_NORMAL + +} else { + + +m65_colorset_reset: + + ; Enable RAM palette + + lda VIC_CTRLA + ora #$04 + sta VIC_CTRLA + + ; Clear all the pallettes, select the 1st one + + ldx #$03 +@1: + lda m65_colorset_selection, x + sta VIC_PALSEL + + ; Clear concrete palette + + lda #$00 + tay +@2: + sta PALETTE_R, y + sta PALETTE_G, y + sta PALETTE_B, y + + iny + bne @2 + + dex + bpl @1 + + ; Select default palette + + lda #CONFIG_VIC_PALETTE + + ; FALLTROUGH + +m65_colorset: ; entry point for BASIC; .A - palette, where bit 7 selects greyscale; sets Carry to mark palette out of range + + asl + php + + cmp #($06 * 2) + bcs m65_colorset_error + + ; Prepare pointer to palette + + tax + lda m65_colorset_presets+0, x + sta PTR1+0 + lda m65_colorset_presets+1, x + sta PTR1+1 + + ; Select color/greyscale variant + + plp + bcs m65_colorset_greyscale + + ; FALLTROUGH + +m65_colorset_color: + + ldx #$03 +@1: + lda m65_colorset_selection, x + sta VIC_PALSEL + + ldy #$0F +@2: + lda (PTR1), y + sta PALETTE_R, y + + jsr m65_colorset_PTR1_inc_16 + + lda (PTR1), y + sta PALETTE_G, y + + jsr m65_colorset_PTR1_inc_16 + + lda (PTR1), y + sta PALETTE_B, y + + jsr m65_colorset_PTR1_dec_32 + + dey + bpl @2 + + dex + bpl @1 + + ; FALLTROUGH + +m65_colorset_done: + + clc + rts + +m65_colorset_error: + + plp + sec + rts + +m65_colorset_greyscale: + + jsr m65_colorset_PTR1_inc_16 + jsr m65_colorset_PTR1_inc_16 + jsr m65_colorset_PTR1_inc_16 + + ldx #$03 +@1: + lda m65_colorset_selection, x + sta VIC_PALSEL + + ldy #$0F +@2: + lda (PTR1), y + + sta PALETTE_R, y + sta PALETTE_G, y + sta PALETTE_B, y + + dey + bpl @2 + + dex + bpl @1 + + clc + rts + +m65_colorset_PTR1_inc_16: + + clc + lda PTR1+0 + adc #$10 + sta PTR1+0 + bcc @1 + inc PTR1+1 +@1: + rts + +m65_colorset_PTR1_dec_32: + + sec + lda PTR1+0 + sbc #$20 + sta PTR1+0 + bcs @1 + dec PTR1+1 +@1: + rts + + +m65_colorset_selection: + + !byte %11000000, %10000000, %01000000, %00000000 + +m65_colorset_presets: + + !word m65_colorset_2 ; default one + !word m65_colorset_1 + !word m65_colorset_2 + !word m65_colorset_3 + !word m65_colorset_4 + !word m65_colorset_5 +} diff --git a/src/kernal/board_m65/mega65_colorset_assets.s b/src/kernal/board_m65/mega65_colorset_assets.s new file mode 100644 index 00000000..d1001ed7 --- /dev/null +++ b/src/kernal/board_m65/mega65_colorset_assets.s @@ -0,0 +1,476 @@ +;; #LAYOUT# M65 KERNAL_1 #TAKE +;; #LAYOUT# * * #IGNORE + + +; #1 - original C65 palette, data taken from C65 manual + +; RRGGBB +!set RGB_1_0 = $000000 ; black +!set RGB_1_1 = $FFFFFF ; white +!set RGB_1_2 = $FF0000 ; red +!set RGB_1_3 = $00FFFF ; cyan +!set RGB_1_4 = $FF00FF ; purple / magenta +!set RGB_1_5 = $00FF00 ; green +!set RGB_1_6 = $0000FF ; blue +!set RGB_1_7 = $FFFF00 ; yellow +!set RGB_1_8 = $FF6600 ; orange +!set RGB_1_9 = $AA4400 ; brown +!set RGB_1_A = $FF7777 ; light red / pink +!set RGB_1_B = $555555 ; dark grey +!set RGB_1_C = $888888 ; medium grey +!set RGB_1_D = $99FF99 ; light green +!set RGB_1_E = $9999FF ; light blue +!set RGB_1_F = $BBBBBB ; light gray + +; #2 - a Frodo palette, values taken from VICE emulator + +; RRGGBB +!set RGB_2_0 = $000000 ; black +!set RGB_2_1 = $FFFFFF ; white +!set RGB_2_2 = $CC0000 ; red +!set RGB_2_3 = $00FFCC ; cyan +!set RGB_2_4 = $FF00FF ; purple / magenta +!set RGB_2_5 = $00CC00 ; green +!set RGB_2_6 = $0000CC ; blue +!set RGB_2_7 = $FFFF00 ; yellow +!set RGB_2_8 = $FF8800 ; orange +!set RGB_2_9 = $884400 ; brown +!set RGB_2_A = $FF8888 ; light red / pink +!set RGB_2_B = $444444 ; dark grey +!set RGB_2_C = $888888 ; medium grey +!set RGB_2_D = $88FF88 ; light green +!set RGB_2_E = $8888FF ; light blue +!set RGB_2_F = $CCCCCC ; light gray + +; #3 - a VICE emulator palette + +; RRGGBB +!set RGB_3_0 = $000000 ; black +!set RGB_3_1 = $FDFEFC ; white +!set RGB_3_2 = $BE1A24 ; red +!set RGB_3_3 = $30E6C6 ; cyan +!set RGB_3_4 = $B41AE2 ; purple / magenta +!set RGB_3_5 = $1FD21E ; green +!set RGB_3_6 = $211BAE ; blue +!set RGB_3_7 = $DFF60A ; yellow +!set RGB_3_8 = $B84104 ; orange +!set RGB_3_9 = $6A3304 ; brown +!set RGB_3_A = $FE4A57 ; light red / pink +!set RGB_3_B = $424540 ; dark grey +!set RGB_3_C = $70746F ; medium grey +!set RGB_3_D = $59FE59 ; light green +!set RGB_3_E = $5F53FE ; light blue +!set RGB_3_F = $A4A7A2 ; light gray + +; #4 - a Colodore palette, values taken from VICE emulator, based on http://www.colodore.com/ + +; RRGGBB +!set RGB_4_0 = $000000 ; black +!set RGB_4_1 = $FFFFFF ; white +!set RGB_4_2 = $96282E ; red +!set RGB_4_3 = $5BD6CE ; cyan +!set RGB_4_4 = $9F2DAD ; purple / magenta +!set RGB_4_5 = $41B936 ; green +!set RGB_4_6 = $2724C4 ; blue +!set RGB_4_7 = $EFF347 ; yellow +!set RGB_4_8 = $9F4815 ; orange +!set RGB_4_9 = $5E3500 ; brown +!set RGB_4_A = $DA5F66 ; light red / pink +!set RGB_4_B = $474747 ; dark grey +!set RGB_4_C = $787878 ; medium grey +!set RGB_4_D = $91FF84 ; light green +!set RGB_4_E = $6864FF ; light blue +!set RGB_4_F = $AEAEAE ; light gray + +; #5 - a Deekay palette, values taken from VICE emulator + +; RRGGBB +!set RGB_5_0 = $000000 ; black +!set RGB_5_1 = $FFFFFF ; white +!set RGB_5_2 = $882000 ; red +!set RGB_5_3 = $68D0A8 ; cyan +!set RGB_5_4 = $A838A0 ; purple / magenta +!set RGB_5_5 = $50B818 ; green +!set RGB_5_6 = $181090 ; blue +!set RGB_5_7 = $F0E858 ; yellow +!set RGB_5_8 = $A04800 ; orange +!set RGB_5_9 = $472B1B ; brown +!set RGB_5_A = $C87870 ; light red / pink +!set RGB_5_B = $484848 ; dark grey +!set RGB_5_C = $808080 ; medium grey +!set RGB_5_D = $98FF98 ; light green +!set RGB_5_E = $5090D0 ; light blue +!set RGB_5_F = $B8B8B8 ; light gray + + +; Macros to convert colors to C65/M65 palette / greyscale palette (CCIR 601 conversion) + +!macro RGB_R .x { !byte ((((^.x & $0F) * $10) + ((^.x & $F0) / $10)) & %11101111) } +!macro RGB_G .x { !byte (((>.x & $0F) * $10) + ((>.x & $F0) / $10)) } +!macro RGB_B .x { !byte (((<.x & $0F) * $10) + ((<.x & $F0) / $10)) } + +!macro GSCAL .x { + !set tmp = int(0.2989 * (^.x) + 0.5870 * (>.x) + 0.1140 * (<.x)) + !if (tmp > $FF) { !set tmp = $FF } + !byte (((tmp & $0F) * $10) + ((tmp & $F0) / $10)) & %11101111 +} + +; Set 1 + +m65_colorset_1: + + +RGB_R RGB_1_0 + +RGB_R RGB_1_1 + +RGB_R RGB_1_2 + +RGB_R RGB_1_3 + +RGB_R RGB_1_4 + +RGB_R RGB_1_5 + +RGB_R RGB_1_6 + +RGB_R RGB_1_7 + +RGB_R RGB_1_8 + +RGB_R RGB_1_9 + +RGB_R RGB_1_A + +RGB_R RGB_1_B + +RGB_R RGB_1_C + +RGB_R RGB_1_D + +RGB_R RGB_1_E + +RGB_R RGB_1_F + + +RGB_G RGB_1_0 + +RGB_G RGB_1_1 + +RGB_G RGB_1_2 + +RGB_G RGB_1_3 + +RGB_G RGB_1_4 + +RGB_G RGB_1_5 + +RGB_G RGB_1_6 + +RGB_G RGB_1_7 + +RGB_G RGB_1_8 + +RGB_G RGB_1_9 + +RGB_G RGB_1_A + +RGB_G RGB_1_B + +RGB_G RGB_1_C + +RGB_G RGB_1_D + +RGB_G RGB_1_E + +RGB_G RGB_1_F + + +RGB_B RGB_1_0 + +RGB_B RGB_1_1 + +RGB_B RGB_1_2 + +RGB_B RGB_1_3 + +RGB_B RGB_1_4 + +RGB_B RGB_1_5 + +RGB_B RGB_1_6 + +RGB_B RGB_1_7 + +RGB_B RGB_1_8 + +RGB_B RGB_1_9 + +RGB_B RGB_1_A + +RGB_B RGB_1_B + +RGB_B RGB_1_C + +RGB_B RGB_1_D + +RGB_B RGB_1_E + +RGB_B RGB_1_F + + +GSCAL RGB_1_0 + +GSCAL RGB_1_1 + +GSCAL RGB_1_2 + +GSCAL RGB_1_3 + +GSCAL RGB_1_4 + +GSCAL RGB_1_5 + +GSCAL RGB_1_6 + +GSCAL RGB_1_7 + +GSCAL RGB_1_8 + +GSCAL RGB_1_9 + +GSCAL RGB_1_A + +GSCAL RGB_1_B + +GSCAL RGB_1_C + +GSCAL RGB_1_D + +GSCAL RGB_1_E + +GSCAL RGB_1_F + +; Set 2 + +m65_colorset_2: + + +RGB_R RGB_2_0 + +RGB_R RGB_2_1 + +RGB_R RGB_2_2 + +RGB_R RGB_2_3 + +RGB_R RGB_2_4 + +RGB_R RGB_2_5 + +RGB_R RGB_2_6 + +RGB_R RGB_2_7 + +RGB_R RGB_2_8 + +RGB_R RGB_2_9 + +RGB_R RGB_2_A + +RGB_R RGB_2_B + +RGB_R RGB_2_C + +RGB_R RGB_2_D + +RGB_R RGB_2_E + +RGB_R RGB_2_F + + +RGB_G RGB_2_0 + +RGB_G RGB_2_1 + +RGB_G RGB_2_2 + +RGB_G RGB_2_3 + +RGB_G RGB_2_4 + +RGB_G RGB_2_5 + +RGB_G RGB_2_6 + +RGB_G RGB_2_7 + +RGB_G RGB_2_8 + +RGB_G RGB_2_9 + +RGB_G RGB_2_A + +RGB_G RGB_2_B + +RGB_G RGB_2_C + +RGB_G RGB_2_D + +RGB_G RGB_2_E + +RGB_G RGB_2_F + + +RGB_B RGB_2_0 + +RGB_B RGB_2_1 + +RGB_B RGB_2_2 + +RGB_B RGB_2_3 + +RGB_B RGB_2_4 + +RGB_B RGB_2_5 + +RGB_B RGB_2_6 + +RGB_B RGB_2_7 + +RGB_B RGB_2_8 + +RGB_B RGB_2_9 + +RGB_B RGB_2_A + +RGB_B RGB_2_B + +RGB_B RGB_2_C + +RGB_B RGB_2_D + +RGB_B RGB_2_E + +RGB_B RGB_2_F + + +GSCAL RGB_2_0 + +GSCAL RGB_2_1 + +GSCAL RGB_2_2 + +GSCAL RGB_2_3 + +GSCAL RGB_2_4 + +GSCAL RGB_2_5 + +GSCAL RGB_2_6 + +GSCAL RGB_2_7 + +GSCAL RGB_2_8 + +GSCAL RGB_2_9 + +GSCAL RGB_2_A + +GSCAL RGB_2_B + +GSCAL RGB_2_C + +GSCAL RGB_2_D + +GSCAL RGB_2_E + +GSCAL RGB_2_F + +; Set 3 + +m65_colorset_3: + + +RGB_R RGB_3_0 + +RGB_R RGB_3_1 + +RGB_R RGB_3_2 + +RGB_R RGB_3_3 + +RGB_R RGB_3_4 + +RGB_R RGB_3_5 + +RGB_R RGB_3_6 + +RGB_R RGB_3_7 + +RGB_R RGB_3_8 + +RGB_R RGB_3_9 + +RGB_R RGB_3_A + +RGB_R RGB_3_B + +RGB_R RGB_3_C + +RGB_R RGB_3_D + +RGB_R RGB_3_E + +RGB_R RGB_3_F + + +RGB_G RGB_3_0 + +RGB_G RGB_3_1 + +RGB_G RGB_3_2 + +RGB_G RGB_3_3 + +RGB_G RGB_3_4 + +RGB_G RGB_3_5 + +RGB_G RGB_3_6 + +RGB_G RGB_3_7 + +RGB_G RGB_3_8 + +RGB_G RGB_3_9 + +RGB_G RGB_3_A + +RGB_G RGB_3_B + +RGB_G RGB_3_C + +RGB_G RGB_3_D + +RGB_G RGB_3_E + +RGB_G RGB_3_F + + +RGB_B RGB_3_0 + +RGB_B RGB_3_1 + +RGB_B RGB_3_2 + +RGB_B RGB_3_3 + +RGB_B RGB_3_4 + +RGB_B RGB_3_5 + +RGB_B RGB_3_6 + +RGB_B RGB_3_7 + +RGB_B RGB_3_8 + +RGB_B RGB_3_9 + +RGB_B RGB_3_A + +RGB_B RGB_3_B + +RGB_B RGB_3_C + +RGB_B RGB_3_D + +RGB_B RGB_3_E + +RGB_B RGB_3_F + + +GSCAL RGB_3_0 + +GSCAL RGB_3_1 + +GSCAL RGB_3_2 + +GSCAL RGB_3_3 + +GSCAL RGB_3_4 + +GSCAL RGB_3_5 + +GSCAL RGB_3_6 + +GSCAL RGB_3_7 + +GSCAL RGB_3_8 + +GSCAL RGB_3_9 + +GSCAL RGB_3_A + +GSCAL RGB_3_B + +GSCAL RGB_3_C + +GSCAL RGB_3_D + +GSCAL RGB_3_E + +GSCAL RGB_3_F + +; Set 4 + +m65_colorset_4: + + +RGB_R RGB_4_0 + +RGB_R RGB_4_1 + +RGB_R RGB_4_2 + +RGB_R RGB_4_3 + +RGB_R RGB_4_4 + +RGB_R RGB_4_5 + +RGB_R RGB_4_6 + +RGB_R RGB_4_7 + +RGB_R RGB_4_8 + +RGB_R RGB_4_9 + +RGB_R RGB_4_A + +RGB_R RGB_4_B + +RGB_R RGB_4_C + +RGB_R RGB_4_D + +RGB_R RGB_4_E + +RGB_R RGB_4_F + + +RGB_G RGB_4_0 + +RGB_G RGB_4_1 + +RGB_G RGB_4_2 + +RGB_G RGB_4_3 + +RGB_G RGB_4_4 + +RGB_G RGB_4_5 + +RGB_G RGB_4_6 + +RGB_G RGB_4_7 + +RGB_G RGB_4_8 + +RGB_G RGB_4_9 + +RGB_G RGB_4_A + +RGB_G RGB_4_B + +RGB_G RGB_4_C + +RGB_G RGB_4_D + +RGB_G RGB_4_E + +RGB_G RGB_4_F + + +RGB_B RGB_4_0 + +RGB_B RGB_4_1 + +RGB_B RGB_4_2 + +RGB_B RGB_4_3 + +RGB_B RGB_4_4 + +RGB_B RGB_4_5 + +RGB_B RGB_4_6 + +RGB_B RGB_4_7 + +RGB_B RGB_4_8 + +RGB_B RGB_4_9 + +RGB_B RGB_4_A + +RGB_B RGB_4_B + +RGB_B RGB_4_C + +RGB_B RGB_4_D + +RGB_B RGB_4_E + +RGB_B RGB_4_F + + +GSCAL RGB_4_0 + +GSCAL RGB_4_1 + +GSCAL RGB_4_2 + +GSCAL RGB_4_3 + +GSCAL RGB_4_4 + +GSCAL RGB_4_5 + +GSCAL RGB_4_6 + +GSCAL RGB_4_7 + +GSCAL RGB_4_8 + +GSCAL RGB_4_9 + +GSCAL RGB_4_A + +GSCAL RGB_4_B + +GSCAL RGB_4_C + +GSCAL RGB_4_D + +GSCAL RGB_4_E + +GSCAL RGB_4_F + +; Set 5 + +m65_colorset_5: + + +RGB_R RGB_5_0 + +RGB_R RGB_5_1 + +RGB_R RGB_5_2 + +RGB_R RGB_5_3 + +RGB_R RGB_5_4 + +RGB_R RGB_5_5 + +RGB_R RGB_5_6 + +RGB_R RGB_5_7 + +RGB_R RGB_5_8 + +RGB_R RGB_5_9 + +RGB_R RGB_5_A + +RGB_R RGB_5_B + +RGB_R RGB_5_C + +RGB_R RGB_5_D + +RGB_R RGB_5_E + +RGB_R RGB_5_F + + +RGB_G RGB_5_0 + +RGB_G RGB_5_1 + +RGB_G RGB_5_2 + +RGB_G RGB_5_3 + +RGB_G RGB_5_4 + +RGB_G RGB_5_5 + +RGB_G RGB_5_6 + +RGB_G RGB_5_7 + +RGB_G RGB_5_8 + +RGB_G RGB_5_9 + +RGB_G RGB_5_A + +RGB_G RGB_5_B + +RGB_G RGB_5_C + +RGB_G RGB_5_D + +RGB_G RGB_5_E + +RGB_G RGB_5_F + + +RGB_B RGB_5_0 + +RGB_B RGB_5_1 + +RGB_B RGB_5_2 + +RGB_B RGB_5_3 + +RGB_B RGB_5_4 + +RGB_B RGB_5_5 + +RGB_B RGB_5_6 + +RGB_B RGB_5_7 + +RGB_B RGB_5_8 + +RGB_B RGB_5_9 + +RGB_B RGB_5_A + +RGB_B RGB_5_B + +RGB_B RGB_5_C + +RGB_B RGB_5_D + +RGB_B RGB_5_E + +RGB_B RGB_5_F + + +GSCAL RGB_5_0 + +GSCAL RGB_5_1 + +GSCAL RGB_5_2 + +GSCAL RGB_5_3 + +GSCAL RGB_5_4 + +GSCAL RGB_5_5 + +GSCAL RGB_5_6 + +GSCAL RGB_5_7 + +GSCAL RGB_5_8 + +GSCAL RGB_5_9 + +GSCAL RGB_5_A + +GSCAL RGB_5_B + +GSCAL RGB_5_C + +GSCAL RGB_5_D + +GSCAL RGB_5_E + +GSCAL RGB_5_F diff --git a/src/kernal/board_m65/mega65_modeset.s b/src/kernal/board_m65/mega65_modeset.s index 8495b111..f7d5a637 100644 --- a/src/kernal/board_m65/mega65_modeset.s +++ b/src/kernal/board_m65/mega65_modeset.s @@ -67,7 +67,7 @@ m65_mode65: jsr vicii_init jsr viciv_init - jsr m65_reset_palette + jsr m65_colorset_reset ; Initialize various memory structures diff --git a/src/kernal/board_m65/mega65_reset_palette.s b/src/kernal/board_m65/mega65_reset_palette.s deleted file mode 100644 index 4ad9f0df..00000000 --- a/src/kernal/board_m65/mega65_reset_palette.s +++ /dev/null @@ -1,244 +0,0 @@ -;; #LAYOUT# M65 KERNAL_1 #TAKE -;; #LAYOUT# * * #IGNORE - - - -!if (CONFIG_VIC_PALETTE = 0) { !set CONFIG_VIC_PALETTE = 4 } ; override palette to default value - -!if (CONFIG_VIC_PALETTE = 1) { - - ; Original C65 palette, taken from C65 manual - - ; RRGGBB - !set RGB_0 = $000000 ; black - !set RGB_1 = $FFFFFF ; white - !set RGB_2 = $FF0000 ; red - !set RGB_3 = $00FFFF ; cyan - !set RGB_4 = $FF00FF ; purple / magenta - !set RGB_5 = $00FF00 ; green - !set RGB_6 = $0000FF ; blue - !set RGB_7 = $FFFF00 ; yellow - !set RGB_8 = $FF6600 ; orange - !set RGB_9 = $AA4400 ; brown - !set RGB_A = $FF7777 ; light red / pink - !set RGB_B = $555555 ; dark grey - !set RGB_C = $888888 ; medium grey - !set RGB_D = $99FF99 ; light green - !set RGB_E = $9999FF ; light blue - !set RGB_F = $BBBBBB ; light gray - -} else if (CONFIG_VIC_PALETTE = 2) { - - ; A Colodore palette, values taken from VICE emulator - ; Based on http://www.colodore.com/ - - ; RRGGBB - !set RGB_0 = $000000 ; black - !set RGB_1 = $FFFFFF ; white - !set RGB_2 = $96282E ; red - !set RGB_3 = $5BD6CE ; cyan - !set RGB_4 = $9F2DAD ; purple / magenta - !set RGB_5 = $41B936 ; green - !set RGB_6 = $2724C4 ; blue - !set RGB_7 = $EFF347 ; yellow - !set RGB_8 = $9F4815 ; orange - !set RGB_9 = $5E3500 ; brown - !set RGB_A = $DA5F66 ; light red / pink - !set RGB_B = $474747 ; dark grey - !set RGB_C = $787878 ; medium grey - !set RGB_D = $91FF84 ; light green - !set RGB_E = $6864FF ; light blue - !set RGB_F = $AEAEAE ; light gray - -} else if (CONFIG_VIC_PALETTE = 3) { - - ; A VICE emulator palette - - ; RRGGBB - !set RGB_0 = $000000 ; black - !set RGB_1 = $FDFEFC ; white - !set RGB_2 = $BE1A24 ; red - !set RGB_3 = $30E6C6 ; cyan - !set RGB_4 = $B41AE2 ; purple / magenta - !set RGB_5 = $1FD21E ; green - !set RGB_6 = $211BAE ; blue - !set RGB_7 = $DFF60A ; yellow - !set RGB_8 = $B84104 ; orange - !set RGB_9 = $6A3304 ; brown - !set RGB_A = $FE4A57 ; light red / pink - !set RGB_B = $424540 ; dark grey - !set RGB_C = $70746F ; medium grey - !set RGB_D = $59FE59 ; light green - !set RGB_E = $5F53FE ; light blue - !set RGB_F = $A4A7A2 ; light gray - -} else if (CONFIG_VIC_PALETTE = 4) { - - ; A Frodo palette, values taken from VICE emulator - - ; RRGGBB - !set RGB_0 = $000000 ; black - !set RGB_1 = $FDFEFC ; white - !set RGB_2 = $BE1A24 ; red - !set RGB_3 = $30E6C6 ; cyan - !set RGB_4 = $B41AE2 ; purple / magenta - !set RGB_5 = $1FD21E ; green - !set RGB_6 = $211BAE ; blue - !set RGB_7 = $DFF60A ; yellow - !set RGB_8 = $B84104 ; orange - !set RGB_9 = $6A3304 ; brown - !set RGB_A = $FE4A57 ; light red / pink - !set RGB_B = $424540 ; dark grey - !set RGB_C = $70746F ; medium grey - !set RGB_D = $59FE59 ; light green - !set RGB_E = $5F53FE ; light blue - !set RGB_F = $A4A7A2 ; light gray - - -} else if (CONFIG_VIC_PALETTE = 5) { - - ; A Deekay palette, values taken from VICE emulator - - - ; RRGGBB - !set RGB_0 = $000000 ; black - !set RGB_1 = $FFFFFF ; white - !set RGB_2 = $882000 ; red - !set RGB_3 = $68D0A8 ; cyan - !set RGB_4 = $A838A0 ; purple / magenta - !set RGB_5 = $50B818 ; green - !set RGB_6 = $181090 ; blue - !set RGB_7 = $F0E858 ; yellow - !set RGB_8 = $A04800 ; orange - !set RGB_9 = $472B1B ; brown - !set RGB_A = $C87870 ; light red / pink - !set RGB_B = $484848 ; dark grey - !set RGB_C = $808080 ; medium grey - !set RGB_D = $98FF98 ; light green - !set RGB_E = $5090D0 ; light blue - !set RGB_F = $B8B8B8 ; light gray - -} else { !error "Unknown palette ID" } - - - -m65_reset_palette: - - ; Enable RAM palette - - lda VIC_CTRLA - ora #$04 - sta VIC_CTRLA - - - ; XXX loop instead - - lda #%11000000 - sta VIC_PALSEL - jsr m65_reset_palette_selected - - lda #%10000000 - sta VIC_PALSEL - jsr m65_reset_palette_selected - - lda #%01000000 - sta VIC_PALSEL - jsr m65_reset_palette_selected - - lda #%00000000 - sta VIC_PALSEL - jsr m65_reset_palette_selected - - rts - -m65_reset_palette_selected: - - ; First clear the entire palette - - lda #$00 - ldx #$00 -@1: - sta PALETTE_R, x - sta PALETTE_G, x - sta PALETTE_B, x - - inx - bne @1 - - ; Now set default colors - - ldx #$0F -@2: - lda m65_COL_R,x - sta $D100, x - lda m65_COL_G,x - sta $D200, x - lda m65_COL_B,x - sta $D300, x - dex - bpl @2 - - rts - -; Macros to convert colors to C65/M65 palette - -!macro COL_R .x { !byte ((((^.x & $0F) * $10) + ((^.x & $F0) / $10)) & %11101111) } -!macro COL_G .x { !byte (((>.x & $0F) * $10) + ((>.x & $F0) / $10)) } -!macro COL_B .x { !byte (((<.x & $0F) * $10) + ((<.x & $F0) / $10)) } - -m65_COL_R: - - +COL_R RGB_0 - +COL_R RGB_1 - +COL_R RGB_2 - +COL_R RGB_3 - +COL_R RGB_4 - +COL_R RGB_5 - +COL_R RGB_6 - +COL_R RGB_7 - +COL_R RGB_8 - +COL_R RGB_9 - +COL_R RGB_A - +COL_R RGB_B - +COL_R RGB_C - +COL_R RGB_D - +COL_R RGB_E - +COL_R RGB_F - -m65_COL_G: - - +COL_G RGB_0 - +COL_G RGB_1 - +COL_G RGB_2 - +COL_G RGB_3 - +COL_G RGB_4 - +COL_G RGB_5 - +COL_G RGB_6 - +COL_G RGB_7 - +COL_G RGB_8 - +COL_G RGB_9 - +COL_G RGB_A - +COL_G RGB_B - +COL_G RGB_C - +COL_G RGB_D - +COL_G RGB_E - +COL_G RGB_F - -m65_COL_B: - - +COL_B RGB_0 - +COL_B RGB_1 - +COL_B RGB_2 - +COL_B RGB_3 - +COL_B RGB_4 - +COL_B RGB_5 - +COL_B RGB_6 - +COL_B RGB_7 - +COL_B RGB_8 - +COL_B RGB_9 - +COL_B RGB_A - +COL_B RGB_B - +COL_B RGB_C - +COL_B RGB_D - +COL_B RGB_E - +COL_B RGB_F diff --git a/src/kernal/jumptable_m65/mega65__jumptable.s b/src/kernal/jumptable_m65/mega65__jumptable.s index c54021bd..cf50d1e8 100644 --- a/src/kernal/jumptable_m65/mega65__jumptable.s +++ b/src/kernal/jumptable_m65/mega65__jumptable.s @@ -34,4 +34,4 @@ M65_JSETWIN_N: M65_JSETWIN_Y: jsr M65_SETWIN_Y -; XXX add M65_HOME +; XXX add M65_HOME, m65_colorset diff --git a/tools/generate_strings.cc b/tools/generate_strings.cc index 113a2bf6..dc9cc2e1 100644 --- a/tools/generate_strings.cc +++ b/tools/generate_strings.cc @@ -203,6 +203,7 @@ const StringEntryList GLOBAL_Keywords_04 = { ListType::KEYWORDS, "keywords_04", { false, false, true, false, false, "K04_02", "MONITOR", }, // Amos Professional Manual, Command Index { false, false, true, false, false, "K04_03", "BOOTCPM", }, // Not present in CBM BASIC dialects, Open ROMs specific { false, false, true, false, false, "K04_04", "JOYCRSR", }, // Not present in CBM BASIC dialects, Open ROMs specific + { false, false, true, false, false, "K04_05", "COLORSET", }, // Not present in CBM BASIC dialects, Open ROMs specific } };