summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Dirk Best <mail@dirk-best.de>2015-07-29 15:19:27 +0200
committer Dirk Best <mail@dirk-best.de>2015-07-29 15:56:07 +0200
commit6f12e6cf068e6c1565dc1571dc967a622fcd8c76 (patch)
tree4d894c80f901d9233bf77638dc3a50569097a629
parenta9a2c75b492d012a5ac70cbfeb4ea8cd5fbe1dd8 (diff)
Add the rest of the 3-bit palettes and add the possiblity to set
individual r/g/b levels for pens
-rw-r--r--src/emu/emupal.c44
-rw-r--r--src/emu/emupal.h23
-rw-r--r--src/lib/util/palette.c60
-rw-r--r--src/lib/util/palette.h3
4 files changed, 130 insertions, 0 deletions
diff --git a/src/emu/emupal.c b/src/emu/emupal.c
index 044a55c7096..ff71fb29a68 100644
--- a/src/emu/emupal.c
+++ b/src/emu/emupal.c
@@ -827,6 +827,50 @@ void palette_device::palette_init_3bit_rgb(palette_device &palette)
/*-------------------------------------------------
+ 3bit_rbg - 8-color rgb
+-------------------------------------------------*/
+
+void palette_device::palette_init_3bit_rbg(palette_device &palette)
+{
+ for (int i = 0; i < 8; i++)
+ palette.set_pen_color(i, rgb_t(pal1bit(i >> 0), pal1bit(i >> 2), pal1bit(i >> 1)));
+}
+
+
+/*-------------------------------------------------
+ 3bit_brg - 8-color rgb
+-------------------------------------------------*/
+
+void palette_device::palette_init_3bit_brg(palette_device &palette)
+{
+ for (int i = 0; i < 8; i++)
+ palette.set_pen_color(i, rgb_t(pal1bit(i >> 1), pal1bit(i >> 2), pal1bit(i >> 0)));
+}
+
+
+/*-------------------------------------------------
+ 3bit_grb - 8-color rgb
+-------------------------------------------------*/
+
+void palette_device::palette_init_3bit_grb(palette_device &palette)
+{
+ for (int i = 0; i < 8; i++)
+ palette.set_pen_color(i, rgb_t(pal1bit(i >> 1), pal1bit(i >> 0), pal1bit(i >> 2)));
+}
+
+
+/*-------------------------------------------------
+ 3bit_gbr - 8-color rgb
+-------------------------------------------------*/
+
+void palette_device::palette_init_3bit_gbr(palette_device &palette)
+{
+ for (int i = 0; i < 8; i++)
+ palette.set_pen_color(i, rgb_t(pal1bit(i >> 2), pal1bit(i >> 0), pal1bit(i >> 1)));
+}
+
+
+/*-------------------------------------------------
3bit_bgr - 8-color rgb
-------------------------------------------------*/
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index bf9a43b371c..abf7720757a 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -236,6 +236,22 @@
MCFG_PALETTE_ADD(_tag, 8) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_rgb), downcast<palette_device *>(device)));
+#define MCFG_PALETTE_ADD_3BIT_RBG(_tag) \
+ MCFG_PALETTE_ADD(_tag, 8) \
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_rbg), downcast<palette_device *>(device)));
+
+#define MCFG_PALETTE_ADD_3BIT_BRG(_tag) \
+ MCFG_PALETTE_ADD(_tag, 8) \
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_brg), downcast<palette_device *>(device)));
+
+#define MCFG_PALETTE_ADD_3BIT_GRB(_tag) \
+ MCFG_PALETTE_ADD(_tag, 8) \
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_grb), downcast<palette_device *>(device)));
+
+#define MCFG_PALETTE_ADD_3BIT_GBR(_tag) \
+ MCFG_PALETTE_ADD(_tag, 8) \
+ palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_gbr), downcast<palette_device *>(device)));
+
#define MCFG_PALETTE_ADD_3BIT_BGR(_tag) \
MCFG_PALETTE_ADD(_tag, 8) \
palette_device::static_set_init(*device, palette_init_delegate(FUNC(palette_device::palette_init_3bit_bgr), downcast<palette_device *>(device)));
@@ -367,6 +383,9 @@ public:
// setters
void set_pen_color(pen_t pen, rgb_t rgb) { m_palette->entry_set_color(pen, rgb); }
+ void set_pen_red_level(pen_t pen, UINT8 level) { m_palette->entry_set_red_level(pen, level); }
+ void set_pen_green_level(pen_t pen, UINT8 level) { m_palette->entry_set_green_level(pen, level); }
+ void set_pen_blue_level(pen_t pen, UINT8 level) { m_palette->entry_set_blue_level(pen, level); }
void set_pen_color(pen_t pen, UINT8 r, UINT8 g, UINT8 b) { m_palette->entry_set_color(pen, rgb_t(r, g, b)); }
void set_pen_colors(pen_t color_base, const rgb_t *colors, int color_count) { while (color_count--) set_pen_color(color_base++, *colors++); }
void set_pen_colors(pen_t color_base, const std::vector<rgb_t> &colors) { for(unsigned int i=0; i != colors.size(); i++) set_pen_color(color_base+i, colors[i]); }
@@ -405,6 +424,10 @@ public:
void palette_init_monochrome_green_highlight(palette_device &palette);
void palette_init_monochrome_yellow(palette_device &palette);
void palette_init_3bit_rgb(palette_device &palette);
+ void palette_init_3bit_rbg(palette_device &palette);
+ void palette_init_3bit_brg(palette_device &palette);
+ void palette_init_3bit_grb(palette_device &palette);
+ void palette_init_3bit_gbr(palette_device &palette);
void palette_init_3bit_bgr(palette_device &palette);
void palette_init_RRRRGGGGBBBB_proms(palette_device &palette);
void palette_init_RRRRRGGGGGBBBBB(palette_device &palette);
diff --git a/src/lib/util/palette.c b/src/lib/util/palette.c
index f2252a24319..cafdce24ebd 100644
--- a/src/lib/util/palette.c
+++ b/src/lib/util/palette.c
@@ -365,6 +365,66 @@ void palette_t::entry_set_color(UINT32 index, rgb_t rgb)
//-------------------------------------------------
+// entry_set_red_level - set the red level for a
+// given palette index
+//-------------------------------------------------
+
+void palette_t::entry_set_red_level(UINT32 index, UINT8 level)
+{
+ // if out of range, or unchanged, ignore
+ if (index >= m_numcolors || m_entry_color[index].r() == level)
+ return;
+
+ // set the level
+ m_entry_color[index].set_r(level);
+
+ // update across all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ update_adjusted_color(groupnum, index);
+}
+
+
+//-------------------------------------------------
+// entry_set_green_level - set the green level for a
+// given palette index
+//-------------------------------------------------
+
+void palette_t::entry_set_green_level(UINT32 index, UINT8 level)
+{
+ // if out of range, or unchanged, ignore
+ if (index >= m_numcolors || m_entry_color[index].g() == level)
+ return;
+
+ // set the level
+ m_entry_color[index].set_g(level);
+
+ // update across all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ update_adjusted_color(groupnum, index);
+}
+
+
+//-------------------------------------------------
+// entry_set_blue_level - set the blue level for a
+// given palette index
+//-------------------------------------------------
+
+void palette_t::entry_set_blue_level(UINT32 index, UINT8 level)
+{
+ // if out of range, or unchanged, ignore
+ if (index >= m_numcolors || m_entry_color[index].b() == level)
+ return;
+
+ // set the level
+ m_entry_color[index].set_b(level);
+
+ // update across all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ update_adjusted_color(groupnum, index);
+}
+
+
+//-------------------------------------------------
// entry_set_contrast - set the contrast
// adjustment for a single palette index
//-------------------------------------------------
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h
index 57bdd1f54a4..9c6703119e1 100644
--- a/src/lib/util/palette.h
+++ b/src/lib/util/palette.h
@@ -166,6 +166,9 @@ public:
// entry setters
void entry_set_color(UINT32 index, rgb_t rgb);
+ void entry_set_red_level(UINT32 index, UINT8 level);
+ void entry_set_green_level(UINT32 index, UINT8 level);
+ void entry_set_blue_level(UINT32 index, UINT8 level);
void entry_set_contrast(UINT32 index, float contrast);
// entry list getters