From 119a5afbf6a9bf81cc481c48b6ed7ec5bc780ff4 Mon Sep 17 00:00:00 2001 From: Thomas Bernard Date: Thu, 22 Nov 2018 13:45:35 +0100 Subject: [PATCH] Set default CPC palette --- src/buttons_effects.c | 6 ++- src/oldies.c | 90 +++++++++++++++++++++++++------------------ src/oldies.h | 7 ++++ 3 files changed, 64 insertions(+), 39 deletions(-) diff --git a/src/buttons_effects.c b/src/buttons_effects.c index e8a585a0..2ce97025 100644 --- a/src/buttons_effects.c +++ b/src/buttons_effects.c @@ -309,12 +309,14 @@ void Button_Constraint_menu(void) ZX_Spectrum_set_palette(Main.palette); break; //case IMAGE_MODE_THOMSON: - // ask TO7/70, MO5 or MO6 / TO8/TO9 + /// @todo set palette for Thomson. + /// ask TO7/70, MO5 or MO6 / TO8/TO9 case IMAGE_MODE_EGX: case IMAGE_MODE_EGX2: case IMAGE_MODE_MODE5: case IMAGE_MODE_RASTER: - // TODO : CPC + CPC_set_HW_palette(Main.palette + 0x40); + CPC_set_default_BASIC_palette(Main.palette); break; case IMAGE_MODE_C64HIRES: case IMAGE_MODE_C64MULTI: diff --git a/src/oldies.c b/src/oldies.c index f684cec4..63163b74 100644 --- a/src/oldies.c +++ b/src/oldies.c @@ -462,48 +462,64 @@ void ZX_Spectrum_set_palette(T_Components * palette) } } +static const T_Components CPC_Hw_Palette[] = { + {0x6E, 0x7D, 0x6B}, // 0x40 + {0x6E, 0x7B, 0x6B}, // 0x41 + {0, 0xF3, 0x6B}, + {0xF3, 0xF3, 0x6D}, + {0, 2, 0x6B}, + {0xF0, 2, 0x68}, + {0, 0x78, 0x68}, + {0xF3, 0x7D, 0x6B}, + + {0xF3, 0x02, 0x68}, // 0x48 + {0xF3, 0xF3, 0x6B}, + {0xF3, 0xF3, 0xD}, + {255, 0xF3, 0xF9}, + {0xF3, 5, 6}, + {0xF3, 2, 0xF4}, + {0xF3, 0x7D, 0xD}, + {0xFA, 0x80, 0xF9}, + + {0x00, 0x02, 0x68}, // 0x50 + {0x02, 0xF3, 0x6B}, + {2, 0xF0, 1}, + {0xF, 0xF3, 0xF2}, + {0, 2, 1}, + {0x0C, 2, 0xF4}, + {2, 0x78, 1}, + {0xC, 0x7B, 0xF4}, + {0x69, 2, 0x68}, // 0x58 + {0x71, 0xF3, 0x6B}, + {0x71, 0xF5, 4}, + {0x71, 0xF3, 0xF4}, + {0x6C, 2, 1}, + {0x6C, 2, 0xF2}, + {0x6E, 0x7B, 1}, + {0x6E, 0x7B, 0xF6} +}; + void CPC_set_HW_palette(T_Components * palette) { - static const T_Components CPC_Hw_Palette[] = { - {0x6E, 0x7D, 0x6B}, // 0x40 - {0x6E, 0x7B, 0x6B}, // 0x41 - {0, 0xF3, 0x6B}, - {0xF3, 0xF3, 0x6D}, - {0, 2, 0x6B}, - {0xF0, 2, 0x68}, - {0, 0x78, 0x68}, - {0xF3, 0x7D, 0x6B}, - - {0xF3, 0x02, 0x68}, // 0x48 - {0xF3, 0xF3, 0x6B}, - {0xF3, 0xF3, 0xD}, - {255, 0xF3, 0xF9}, - {0xF3, 5, 6}, - {0xF3, 2, 0xF4}, - {0xF3, 0x7D, 0xD}, - {0xFA, 0x80, 0xF9}, - - {0x00, 0x02, 0x68}, // 0x50 - {0x02, 0xF3, 0x6B}, - {2, 0xF0, 1}, - {0xF, 0xF3, 0xF2}, - {0, 2, 1}, - {0x0C, 2, 0xF4}, - {2, 0x78, 1}, - {0xC, 0x7B, 0xF4}, - {0x69, 2, 0x68}, // 0x58 - {0x71, 0xF3, 0x6B}, - {0x71, 0xF5, 4}, - {0x71, 0xF3, 0xF4}, - {0x6C, 2, 1}, - {0x6C, 2, 0xF2}, - {0x6E, 0x7B, 1}, - {0x6E, 0x7B, 0xF6} - }; - memcpy(palette, CPC_Hw_Palette, sizeof(CPC_Hw_Palette)); } +void CPC_set_default_BASIC_palette(T_Components * palette) +{ + static const byte basic_colors[] = { + 0x44/*0x50*/, 0x4a, 0x53, 0x4c, + 0x4b, 0x54, 0x55, 0x4d, + 0x46, 0x5e, 0x5f, 0x47, + 0x52, 0x59, 0x4a, 0x47 + }; + unsigned int i; + + for (i = 0; i < sizeof(basic_colors) / sizeof(byte); i++) + memcpy(palette + i, + CPC_Hw_Palette + basic_colors[i] - 0x40, + sizeof(T_Components)); +} + int CPC_check_AMSDOS(FILE * file, word * loading_address, unsigned long * file_length) { int i; diff --git a/src/oldies.h b/src/oldies.h index bbb6277f..4d2085d6 100644 --- a/src/oldies.h +++ b/src/oldies.h @@ -73,6 +73,13 @@ void ZX_Spectrum_set_palette(T_Components * palette); */ void CPC_set_HW_palette(T_Components * palette); +/** + * Set 16 color default Amstrad CPC BASIC palette + * + * @note INK 14 and 15 are blinking on the real hardware. + */ +void CPC_set_default_BASIC_palette(T_Components * palette); + /** * Check AMSDOS header *