diff options
author | 2018-12-29 05:53:50 +1100 | |
---|---|---|
committer | 2018-12-29 05:53:50 +1100 | |
commit | f1f0591f43f381123e8d9ec20c52eb7c0c332c79 (patch) | |
tree | 97c8dd30a6ea292c3189f372b8103a2e303c0b2d /src/emu/emupal.cpp | |
parent | 65bfb2654f0c73235f114e9145c766245bed9790 (diff) |
Start cleaning up palette configuration:
* Basically, initialisers go in the constructor arguments, and things for setting format go in set_format.
* Initialisation patterns can be specified with an enum discriminator or with a FUNC and optionally a tag.
* Formats can be specified with an enum discriminator or a size and function pointer.
* You must always supply the number of entries when setting the format.
* When initislising with a paletter initialisation member, you can specify the entries and indirecte entries together.
* The palette_device now has a standard constructor, so use .set_entries if you are specifying entry count with no format/initialisation.
* Also killed an overload on delegates that wasn't being useful.
Diffstat (limited to 'src/emu/emupal.cpp')
-rw-r--r-- | src/emu/emupal.cpp | 362 |
1 files changed, 330 insertions, 32 deletions
diff --git a/src/emu/emupal.cpp b/src/emu/emupal.cpp index 5bdffe04a4b..e06e9c61871 100644 --- a/src/emu/emupal.cpp +++ b/src/emu/emupal.cpp @@ -18,22 +18,323 @@ DEFINE_DEVICE_TYPE(PALETTE, palette_device, "palette", "palette") -palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 entries) - : device_t(mconfig, PALETTE, tag, owner, (uint32_t)0), - device_palette_interface(mconfig, *this), - m_entries(0), - m_indirect_entries(0), - m_enable_shadows(0), - m_enable_hilights(0), - m_membits(0), - m_membits_supplied(false), - m_endianness(), - m_endianness_supplied(false), - m_prom_region(*this, finder_base::DUMMY_TAG), - m_init(palette_init_delegate()), - m_raw_to_rgb(raw_to_rgb_converter()) +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, init_delegate &&init, u32 entries, u32 indirect) + : palette_device(mconfig, tag, owner, 0U) { set_entries(entries); + set_indirect_entries(indirect); + set_init(std::move(init)); +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, black_t, u32 entries) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_all_black), this), entries) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, mono_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_monochrome), this), 2) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, mono_inv_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_monochrome_inverted), this), 2) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, mono_hi_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_monochrome_highlight), this), 3) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, rgb_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_rgb), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, rbg_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_rbg), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, grb_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_grb), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, gbr_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_gbr), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, brg_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_brg), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, bgr_3b_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_3bit_bgr), this), 8) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, rgb_555_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_rgb_555), this), 32768) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, grb_555_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_grb_555), this), 32768) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, bgr_555_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_bgr_555), this), 32768) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, rgb_565_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_rgb_565), this), 65536) +{ +} + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, bgr_565_t) + : palette_device(mconfig, tag, owner, init_delegate(FUNC(palette_device::palette_init_bgr_565), this), 65536) +{ +} + + +palette_device::palette_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) + : device_t(mconfig, PALETTE, tag, owner, clock) + , device_palette_interface(mconfig, *this) + , m_entries(0) + , m_indirect_entries(0) + , m_enable_shadows(0) + , m_enable_hilights(0) + , m_membits(0) + , m_membits_supplied(false) + , m_endianness() + , m_endianness_supplied(false) + , m_prom_region(*this, finder_base::DUMMY_TAG) + , m_init() + , m_raw_to_rgb() +{ +} + + +palette_device &palette_device::set_format(int bytes_per_entry, raw_to_rgb_converter::raw_to_rgb_func func, u32 entries) +{ + set_format(raw_to_rgb_converter(bytes_per_entry, func)); + set_entries(entries); + return *this; +} + +palette_device &palette_device::set_format(rgb_332_t, u32 entries) +{ + set_format(1, &raw_to_rgb_converter::standard_rgb_decoder<3,3,2, 5,2,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(bgr_233_t, u32 entries) +{ + set_format(1, &raw_to_rgb_converter::standard_rgb_decoder<3,3,2, 0,3,6>, entries); + return *this; +} + +palette_device &palette_device::set_format(rgb_332_inv_t, u32 entries) +{ + set_format(1, &raw_to_rgb_converter::inverted_rgb_decoder<3,3,2, 5,2,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(bgr_233_inv_t, u32 entries) +{ + set_format(1, &raw_to_rgb_converter::inverted_rgb_decoder<3,3,2, 0,3,6>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrgb_333_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<3,3,3, 6,3,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrbg_333_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<3,3,3, 6,0,3>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbgr_333_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<3,3,3, 0,3,6>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrgb_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 8,4,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrbg_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 8,0,4>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbrg_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 4,0,8>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbgr_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 0,4,8>, entries); + return *this; +} + +palette_device &palette_device::set_format(rgbx_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 12,8,4>, entries); + return *this; +} + +palette_device &palette_device::set_format(gbrx_444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<4,4,4, 4,12,8>, entries); + return *this; +} + +palette_device &palette_device::set_format(irgb_4444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_irgb_decoder<4,4,4,4, 12,8,4,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(rgbi_4444_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_irgb_decoder<4,4,4,4, 0,12,8,4>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrgb_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 10,5,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xgrb_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 5,10,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xgbr_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 0,10,5>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbrg_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 5,0,10>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbgr_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 0,5,10>, entries); + return *this; +} + +palette_device &palette_device::set_format(rgbx_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 11,6,1>, entries); + return *this; +} + +palette_device &palette_device::set_format(grbx_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 6,11,1>, entries); + return *this; +} + +palette_device &palette_device::set_format(brgx_555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,5,5, 6,1,11>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrbg_inv_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::inverted_rgb_decoder<5,5,5, 10,0,5>, entries); + return *this; +} + +palette_device &palette_device::set_format(irgb_1555_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::IRRRRRGGGGGBBBBB_decoder, entries); + return *this; +} + +palette_device &palette_device::set_format(rgb_565_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,6,5, 11,5,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(bgr_565_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::standard_rgb_decoder<5,6,5, 0,5,11>, entries); + return *this; +} + +palette_device &palette_device::set_format(xrgb_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 16,8,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xgrb_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 8,16,0>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbrg_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 8,0,16>, entries); + return *this; +} + +palette_device &palette_device::set_format(xbgr_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 0,8,16>, entries); + return *this; +} + +palette_device &palette_device::set_format(rgbx_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 24,16,8>, entries); + return *this; +} + +palette_device &palette_device::set_format(grbx_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 16,24,8>, entries); + return *this; +} + +palette_device &palette_device::set_format(bgrx_888_t, u32 entries) +{ + set_format(4, &raw_to_rgb_converter::standard_rgb_decoder<8,8,8, 8,16,24>, entries); + return *this; +} + +palette_device &palette_device::set_format(rrrrggggbbbbrgbx_t, u32 entries) +{ + set_format(2, &raw_to_rgb_converter::RRRRGGGGBBBBRGBx_decoder, entries); + return *this; } @@ -346,7 +647,7 @@ void palette_device::palette_init_3bit_bgr(palette_device &palette) bit 0 -- 2.2kohm resistor -- RED/GREEN/BLUE -------------------------------------------------*/ -void palette_device::palette_init_RRRRGGGGBBBB_proms(palette_device &palette) +void palette_device::palette_init_rgb_444_proms(palette_device &palette) { if (!m_prom_region.found()) throw emu_fatalerror("Unable to find color PROM region '%s'.", m_prom_region.finder_tag()); @@ -385,49 +686,46 @@ void palette_device::palette_init_RRRRGGGGBBBB_proms(palette_device &palette) /*------------------------------------------------- - RRRRR_GGGGG_BBBBB/BBBBB_GGGGG_RRRRR - standard 5-5-5 palette for games using a 15-bit color space -------------------------------------------------*/ -void palette_device::palette_init_RRRRRGGGGGBBBBB(palette_device &palette) +void palette_device::palette_init_rgb_555(palette_device &palette) { - int i; - - for (i = 0; i < 0x8000; i++) + for (int i = 0; i < 0x8000; i++) palette.set_pen_color(i, rgbexpand<5,5,5>(i, 10, 5, 0)); } -void palette_device::palette_init_BBBBBGGGGGRRRRR(palette_device &palette) +void palette_device::palette_init_grb_555(palette_device &palette) { - int i; + for (int i = 0; i < 0x8000; i++) + palette.set_pen_color(i, rgbexpand<5,5,5>(i, 5, 10, 0)); +} + - for (i = 0; i < 0x8000; i++) +void palette_device::palette_init_bgr_555(palette_device &palette) +{ + for (int i = 0; i < 0x8000; i++) palette.set_pen_color(i, rgbexpand<5,5,5>(i, 0, 5, 10)); } /*------------------------------------------------- - RRRRR_GGGGGG_BBBBB/BBBBB_GGGGGG_RRRRR - standard 5-6-5 palette for games using a 16-bit color space -------------------------------------------------*/ -void palette_device::palette_init_RRRRRGGGGGGBBBBB(palette_device &palette) +void palette_device::palette_init_rgb_565(palette_device &palette) { - int i; - - for (i = 0; i < 0x10000; i++) + for (int i = 0; i < 0x10000; i++) palette.set_pen_color(i, rgbexpand<5,6,5>(i, 11, 5, 0)); } -void palette_device::palette_init_BBBBBGGGGGGRRRRR(palette_device &palette) +void palette_device::palette_init_bgr_565(palette_device &palette) { - int i; - - for (i = 0; i < 0x10000; i++) + for (int i = 0; i < 0x10000; i++) palette.set_pen_color(i, rgbexpand<5,6,5>(i, 0, 5, 11)); } |