started work on color palette support
This commit is contained in:
1 parent
79e54cf248
commit
2ef8819d17
10 files changed
+284
-6
No files matched your search
@@ -247,6 +247,10 @@ If enabled, STOP key terminates insert/quote mode (like on some _Black Box_ cart
|
||||
|
||||
Feature needs 12 bytes in KERNAL segment. If unsure - enable.
|
||||
|
||||
### `VIC_PALETTE`
|
||||
|
||||
Selects the default system palette - MEGA65 only.
|
||||
|
||||
## Software features
|
||||
|
||||
### `PANIC_SCREEN`
|
||||
|
||||
@@ -77,6 +77,7 @@
|
||||
; --- Screen editor
|
||||
|
||||
;; #CONFIG# EDIT_STOPQUOTE YES
|
||||
;; #CONFIG# VIC_PALETTE 0 ; 0 = default; 1 = C65, 2 = Colodore, 3 = VICE, 4 = Frodo, 5 = Deekay
|
||||
|
||||
|
||||
; --- Software features
|
||||
|
||||
@@ -237,6 +237,14 @@
|
||||
}
|
||||
|
||||
|
||||
; Check that screen settings are correct
|
||||
|
||||
!ifndef CONFIG_MB_M65 {
|
||||
!ifdef CONFIG_VIC_PALETTE { !error "CONFIG_VIC_PALETTE is only possible for MEGA65 motherboard" }
|
||||
}
|
||||
!ifdef CONFIG_MB_MEGA65 {
|
||||
!ifndef CONFIG_VIC_PALETTE { !error "CONFIG_VIC_PALETTE not specified" }
|
||||
}
|
||||
|
||||
; Check that internal DOS configuration is correct
|
||||
|
||||
|
||||
@@ -27,6 +27,14 @@
|
||||
|
||||
!addr VIC_CHARPTR = $D068 ; 3 bytes - pointer to start of character generator
|
||||
|
||||
!addr VIC_PALSEL = $D070 ; - palette selection register
|
||||
|
||||
; Palette memory areas
|
||||
|
||||
!addr PALETTE_R = $D100
|
||||
!addr PALETTE_G = $D200
|
||||
!addr PALETTE_B = $D300
|
||||
|
||||
; Keyboard
|
||||
|
||||
!addr C65_EXTKEYS_PR = $D607
|
||||
|
||||
@@ -67,6 +67,7 @@ m65_mode65:
|
||||
|
||||
jsr vicii_init
|
||||
jsr viciv_init
|
||||
jsr m65_reset_palette
|
||||
|
||||
; Initialize various memory structures
|
||||
|
||||
|
||||
@@ -0,0 +1,244 @@
|
||||
;; #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
|
||||
@@ -6,15 +6,15 @@
|
||||
|
||||
m65_reset_part:
|
||||
|
||||
jsr map_NORMAL ; we want normal memory mapping
|
||||
jsr viciv_shutdown ; by default we do not want the VIC-IV
|
||||
jsr map_NORMAL ; we want normal memory mapping
|
||||
jsr viciv_shutdown ; by default we do not want the VIC-IV
|
||||
|
||||
jsr M65_MODEGET
|
||||
bcs m65_clr_end
|
||||
|
||||
; Clear MEAGA65 native mode mark, it might cause confusion
|
||||
|
||||
m65_clr_magictstr: ; entry point for mode switching routine
|
||||
m65_clr_magictstr: ; entry point for mode switching routine
|
||||
|
||||
lda #$00
|
||||
sta M65_MAGICSTR+0
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
mega65_viciv_setctrl_AC:
|
||||
|
||||
sta VIC_CTRLA
|
||||
ora #%00000100 ; always use RAM color palette
|
||||
|
||||
lda VIC_CTRLC
|
||||
and #%01101000
|
||||
|
||||
+13
-2
@@ -19,16 +19,27 @@ ZVM_entry:
|
||||
sta CINV+1
|
||||
|
||||
; Make sure $C000-$CFFF ROM is mapped-in, we keep our proxies there
|
||||
; Also make sure the palette is taken from RAM
|
||||
|
||||
lda VIC_CTRLA
|
||||
ora #%00100000
|
||||
ora #%00100100
|
||||
sta VIC_CTRLA
|
||||
|
||||
; Setup colours, print welcome message
|
||||
; Setup colours to ressemble vintage green monitor from the 70s, print welcome message
|
||||
|
||||
lda #$00
|
||||
sta VIC_EXTCOL
|
||||
sta VIC_BGCOL0
|
||||
sta PALETTE_R+0
|
||||
sta PALETTE_G+0
|
||||
sta PALETTE_B+0
|
||||
|
||||
lda #$01
|
||||
sta PALETTE_R+5
|
||||
lda #$47
|
||||
sta PALETTE_G+5
|
||||
lda #$02
|
||||
sta PALETTE_B+5
|
||||
|
||||
jsr PRIMM
|
||||
!byte KEY_GREEN, KEY_ESC, 'o', KEY_CLR, KEY_C65_SHIFT_ON, KEY_TXT, KEY_C65_SHIFT_OFF
|
||||
|
||||
@@ -294,7 +294,7 @@ const StringEntryList GLOBAL_MiscStrings = { ListType::STRINGS_BASIC, "misc",
|
||||
{ true, true, true, true, true, "STR_BRK_AT", "\rBRK AT $" },
|
||||
|
||||
{ false, false, true, false, false, "STR_ORS", "OPEN ROMS BASIC & KERNAL\r" },
|
||||
{ false, false, true, false, false, "STR_ORS_LEGACY", "(LEGACY MODE) " },
|
||||
{ false, false, true, false, false, "STR_ORS_LEGACY", "(LEGACY MODE) " },
|
||||
|
||||
{ false, true, true, false, false, "STR_MEM_HDR", "\r\x12 AREA START SIZE \r" },
|
||||
{ false, true, true, false, false, "STR_MEM_1", " $" },
|
||||
|
||||
Reference in new issue
Block a user