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 @@ -826,6 +826,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(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(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(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(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(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(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 &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 @@ -364,6 +364,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