summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2014-02-18 08:05:44 +0000
committer Aaron Giles <aaron@aarongiles.com>2014-02-18 08:05:44 +0000
commit3e2995cbba04d05365e28c52e743ceed8981a5cf (patch)
tree56bfadb6768b2a2f284387f382c13bed41824d5e /src
parent847cecbadc820d12e1e7816bfcbb45f931a5f0e1 (diff)
Converted palette_t and palette_client to classes. General palette.c
cleanup.
Diffstat (limited to 'src')
-rw-r--r--src/emu/bus/a2bus/a2videoterm.c2
-rw-r--r--src/emu/bus/ecbbus/grip.c2
-rw-r--r--src/emu/emupal.c37
-rw-r--r--src/emu/emupal.h10
-rw-r--r--src/emu/machine/laserdsc.c6
-rw-r--r--src/emu/render.c25
-rw-r--r--src/emu/screen.c2
-rw-r--r--src/emu/tilemap.c4
-rw-r--r--src/emu/ui/viewgfx.c4
-rw-r--r--src/emu/video.c6
-rw-r--r--src/emu/video/pc_cga.c22
-rw-r--r--src/lib/util/bitmap.c4
-rw-r--r--src/lib/util/palette.c872
-rw-r--r--src/lib/util/palette.h375
-rw-r--r--src/mame/drivers/othello.c2
-rw-r--r--src/mame/video/carjmbre.c2
-rw-r--r--src/mame/video/dkong.c10
-rw-r--r--src/mame/video/k001604.c2
-rw-r--r--src/mame/video/m62.c6
-rw-r--r--src/mame/video/malzak.c2
-rw-r--r--src/mame/video/mario.c4
-rw-r--r--src/mame/video/phoenix.c6
-rw-r--r--src/mame/video/popper.c2
-rw-r--r--src/mame/video/taito_b.c2
-rw-r--r--src/mame/video/toobin.c2
-rw-r--r--src/mess/drivers/a5105.c4
-rw-r--r--src/mess/drivers/alphatro.c2
-rw-r--r--src/mess/drivers/apc.c2
-rw-r--r--src/mess/drivers/applix.c2
-rw-r--r--src/mess/drivers/bigbord2.c2
-rw-r--r--src/mess/drivers/bml3.c2
-rw-r--r--src/mess/drivers/camplynx.c4
-rw-r--r--src/mess/drivers/dim68k.c2
-rw-r--r--src/mess/drivers/dmv.c2
-rw-r--r--src/mess/drivers/ec65.c2
-rw-r--r--src/mess/drivers/einstein.c2
-rw-r--r--src/mess/drivers/h19.c2
-rw-r--r--src/mess/drivers/if800.c2
-rw-r--r--src/mess/drivers/ipds.c2
-rw-r--r--src/mess/drivers/lola8a.c2
-rw-r--r--src/mess/drivers/mx2178.c2
-rw-r--r--src/mess/drivers/mycom.c2
-rw-r--r--src/mess/drivers/mz3500.c2
-rw-r--r--src/mess/drivers/mz6500.c2
-rw-r--r--src/mess/drivers/pasopia.c2
-rw-r--r--src/mess/drivers/pc9801.c4
-rw-r--r--src/mess/drivers/pyl601.c4
-rw-r--r--src/mess/drivers/qx10.c4
-rw-r--r--src/mess/drivers/samcoupe.c2
-rw-r--r--src/mess/drivers/sapi1.c2
-rw-r--r--src/mess/drivers/sm1800.c2
-rw-r--r--src/mess/drivers/tavernie.c2
-rw-r--r--src/mess/drivers/tiki100.c2
-rw-r--r--src/mess/drivers/tim100.c2
-rw-r--r--src/mess/drivers/tvc.c2
-rw-r--r--src/mess/drivers/unior.c2
-rw-r--r--src/mess/drivers/v6809.c2
-rw-r--r--src/mess/drivers/victor9k.c2
-rw-r--r--src/mess/drivers/zorba.c2
-rw-r--r--src/mess/drivers/zrt80.c2
-rw-r--r--src/mess/machine/svi318.c2
-rw-r--r--src/mess/video/bbc.c2
-rw-r--r--src/mess/video/dgn_beta.c2
-rw-r--r--src/mess/video/ef9345.c4
-rw-r--r--src/mess/video/isa_cga.c24
-rw-r--r--src/mess/video/isa_mda.c6
-rw-r--r--src/mess/video/kaypro.c2
-rw-r--r--src/mess/video/mbc55x.c2
-rw-r--r--src/mess/video/mbee.c6
-rw-r--r--src/mess/video/pc_aga.c20
-rw-r--r--src/mess/video/pc_t1t.c16
-rw-r--r--src/mess/video/poisk1.c6
-rw-r--r--src/mess/video/radio86.c8
-rw-r--r--src/mess/video/super80.c2
74 files changed, 665 insertions, 928 deletions
diff --git a/src/emu/bus/a2bus/a2videoterm.c b/src/emu/bus/a2bus/a2videoterm.c
index 539f995621f..eaf84e9f26c 100644
--- a/src/emu/bus/a2bus/a2videoterm.c
+++ b/src/emu/bus/a2bus/a2videoterm.c
@@ -349,7 +349,7 @@ void a2bus_videx80_device::write_c800(address_space &space, UINT16 offset, UINT8
static MC6845_UPDATE_ROW( videoterm_update_row )
{
a2bus_videx80_device *vterm = downcast<a2bus_videx80_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 chr_base = ra; //( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
diff --git a/src/emu/bus/ecbbus/grip.c b/src/emu/bus/ecbbus/grip.c
index d88377b5f95..cbeacd06176 100644
--- a/src/emu/bus/ecbbus/grip.c
+++ b/src/emu/bus/ecbbus/grip.c
@@ -253,7 +253,7 @@ static MC6845_UPDATE_ROW( grip_update_row )
static MC6845_UPDATE_ROW( grip5_update_row )
{
grip5_state *state = device->machine().driver_data<grip5_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int column, bit;
for (column = 0; column < x_count; column++)
diff --git a/src/emu/emupal.c b/src/emu/emupal.c
index 8de90e722e1..4b338f3e629 100644
--- a/src/emu/emupal.c
+++ b/src/emu/emupal.c
@@ -144,7 +144,7 @@ void palette_init(running_machine &machine)
allocate_shadow_tables(machine, palette);
/* set up save/restore of the palette */
- numcolors = palette_get_num_colors(machine.palette);
+ numcolors = machine.palette->num_colors();
palette->save_pen = auto_alloc_array(machine, pen_t, numcolors);
palette->save_bright = auto_alloc_array(machine, float, numcolors);
machine.save().save_pointer(NAME(palette->save_pen), numcolors);
@@ -170,7 +170,7 @@ void palette_set_shadow_factor(running_machine &machine, double factor)
palette_private *palette = machine.palette_data;
assert(palette->shadow_group != 0);
- palette_group_set_contrast(machine.palette, palette->shadow_group, factor);
+ machine.palette->group_set_contrast(palette->shadow_group, factor);
}
@@ -184,7 +184,7 @@ void palette_set_highlight_factor(running_machine &machine, double factor)
palette_private *palette = machine.palette_data;
assert(palette->hilight_group != 0);
- palette_group_set_contrast(machine.palette, palette->hilight_group, factor);
+ machine.palette->group_set_contrast(palette->hilight_group, factor);
}
@@ -530,15 +530,15 @@ pen_t get_white_pen(running_machine &machine)
static void palette_presave(running_machine &machine)
{
- int numcolors = palette_get_num_colors(machine.palette);
+ int numcolors = machine.palette->num_colors();
palette_private *palette = machine.palette_data;
int index;
/* fill the save arrays with updated pen and brightness information */
for (index = 0; index < numcolors; index++)
{
- palette->save_pen[index] = palette_entry_get_color(machine.palette, index);
- palette->save_bright[index] = palette_entry_get_contrast(machine.palette, index);
+ palette->save_pen[index] = machine.palette->entry_color(index);
+ palette->save_bright[index] = machine.palette->entry_contrast(index);
}
}
@@ -550,15 +550,15 @@ static void palette_presave(running_machine &machine)
static void palette_postload(running_machine &machine)
{
- int numcolors = palette_get_num_colors(machine.palette);
+ int numcolors = machine.palette->num_colors();
palette_private *palette = machine.palette_data;
int index;
/* reset the pen and brightness for each entry */
for (index = 0; index < numcolors; index++)
{
- palette_entry_set_color(machine.palette, index, palette->save_pen[index]);
- palette_entry_set_contrast(machine.palette, index, palette->save_bright[index]);
+ machine.palette->entry_set_color(index, palette->save_pen[index]);
+ machine.palette->entry_set_contrast(index, palette->save_bright[index]);
}
}
@@ -571,7 +571,7 @@ static void palette_exit(running_machine &machine)
{
/* dereference the palette */
if (machine.palette != NULL)
- palette_deref(machine.palette);
+ machine.palette->deref();
}
@@ -593,26 +593,25 @@ static void allocate_palette(running_machine &machine, palette_private *palette)
assert_always(machine.total_colors() * numgroups <= 65536, "Error: palette has more than 65536 colors.");
/* allocate a palette object containing all the colors and groups */
- machine.palette = palette_alloc(machine.total_colors(), numgroups);
- assert_always(machine.palette != NULL, "Failed to allocate system palette");
+ machine.palette = new palette_t(machine.total_colors(), numgroups);
/* configure the groups */
if (palette->shadow_group != 0)
- palette_group_set_contrast(machine.palette, palette->shadow_group, (float)PALETTE_DEFAULT_SHADOW_FACTOR);
+ machine.palette->group_set_contrast(palette->shadow_group, (float)PALETTE_DEFAULT_SHADOW_FACTOR);
if (palette->hilight_group != 0)
- palette_group_set_contrast(machine.palette, palette->hilight_group, (float)PALETTE_DEFAULT_HIGHLIGHT_FACTOR);
+ machine.palette->group_set_contrast(palette->hilight_group, (float)PALETTE_DEFAULT_HIGHLIGHT_FACTOR);
/* set the initial colors to a standard rainbow */
for (index = 0; index < machine.total_colors(); index++)
- palette_entry_set_color(machine.palette, index, MAKE_RGB(pal1bit(index >> 0), pal1bit(index >> 1), pal1bit(index >> 2)));
+ machine.palette->entry_set_color(index, MAKE_RGB(pal1bit(index >> 0), pal1bit(index >> 1), pal1bit(index >> 2)));
/* switch off the color mode */
switch (palette->format)
{
/* 16-bit paletteized case */
case BITMAP_FORMAT_IND16:
- palette->black_pen = palette_get_black_entry(machine.palette);
- palette->white_pen = palette_get_white_entry(machine.palette);
+ palette->black_pen = machine.palette->black_entry();
+ palette->white_pen = machine.palette->white_entry();
if (palette->black_pen >= 65536)
palette->black_pen = 0;
if (palette->white_pen >= 65536)
@@ -640,7 +639,7 @@ static void allocate_palette(running_machine &machine, palette_private *palette)
static void allocate_color_tables(running_machine &machine, palette_private *palette)
{
- int total_colors = palette_get_num_colors(machine.palette) * palette_get_num_groups(machine.palette);
+ int total_colors = machine.palette->num_colors() * machine.palette->num_groups();
pen_t *pentable;
int i;
@@ -655,7 +654,7 @@ static void allocate_color_tables(running_machine &machine, palette_private *pal
break;
case BITMAP_FORMAT_RGB32:
- machine.pens = palette_entry_list_adjusted(machine.palette);
+ machine.pens = machine.palette->entry_list_adjusted();
break;
default:
diff --git a/src/emu/emupal.h b/src/emu/emupal.h
index 5b22b005d33..b3aedf58c2d 100644
--- a/src/emu/emupal.h
+++ b/src/emu/emupal.h
@@ -198,7 +198,7 @@ pen_t get_white_pen(running_machine &machine);
INLINE void palette_set_color(running_machine &machine, pen_t pen, rgb_t rgb)
{
- palette_entry_set_color(machine.palette, pen, rgb);
+ machine.palette->entry_set_color(pen, rgb);
}
@@ -209,7 +209,7 @@ INLINE void palette_set_color(running_machine &machine, pen_t pen, rgb_t rgb)
INLINE void palette_set_color_rgb(running_machine &machine, pen_t pen, UINT8 r, UINT8 g, UINT8 b)
{
- palette_entry_set_color(machine.palette, pen, MAKE_RGB(r, g, b));
+ machine.palette->entry_set_color(pen, MAKE_RGB(r, g, b));
}
@@ -220,7 +220,7 @@ INLINE void palette_set_color_rgb(running_machine &machine, pen_t pen, UINT8 r,
INLINE rgb_t palette_get_color(running_machine &machine, pen_t pen)
{
- return palette_entry_get_color(machine.palette, pen);
+ return machine.palette->entry_color(pen);
}
@@ -231,7 +231,7 @@ INLINE rgb_t palette_get_color(running_machine &machine, pen_t pen)
INLINE void palette_set_pen_contrast(running_machine &machine, pen_t pen, double bright)
{
- palette_entry_set_contrast(machine.palette, pen, bright);
+ machine.palette->entry_set_contrast(pen, bright);
}
@@ -243,7 +243,7 @@ INLINE void palette_set_pen_contrast(running_machine &machine, pen_t pen, double
INLINE void palette_set_colors(running_machine &machine, pen_t color_base, const rgb_t *colors, int color_count)
{
while (color_count--)
- palette_entry_set_color(machine.palette, color_base++, *colors++);
+ machine.palette->entry_set_color(color_base++, *colors++);
}
diff --git a/src/emu/machine/laserdsc.c b/src/emu/machine/laserdsc.c
index 774b35222c7..8e5261da957 100644
--- a/src/emu/machine/laserdsc.c
+++ b/src/emu/machine/laserdsc.c
@@ -325,7 +325,7 @@ void laserdisc_device::device_stop()
if (m_videotex != NULL)
machine().render().texture_free(m_videotex);
if (m_videopalette != NULL)
- palette_deref(m_videopalette);
+ m_videopalette->deref();
if (m_overtex != NULL)
machine().render().texture_free(m_overtex);
}
@@ -769,11 +769,11 @@ void laserdisc_device::init_video()
m_screen->register_vblank_callback(vblank_state_delegate(FUNC(laserdisc_device::vblank_state_changed), this));
// allocate palette for applying brightness/contrast/gamma
- m_videopalette = palette_alloc(256, 1);
+ m_videopalette = new palette_t(256);
if (m_videopalette == NULL)
throw emu_fatalerror("Out of memory allocating video palette");
for (int index = 0; index < 256; index++)
- palette_entry_set_color(m_videopalette, index, MAKE_RGB(index, index, index));
+ m_videopalette->entry_set_color(index, MAKE_RGB(index, index, index));
// allocate video frames
for (int index = 0; index < ARRAY_LENGTH(m_frame); index++)
diff --git a/src/emu/render.c b/src/emu/render.c
index b18ddbf5766..717ef626c89 100644
--- a/src/emu/render.c
+++ b/src/emu/render.c
@@ -467,7 +467,7 @@ bool render_texture::get_scaled(UINT32 dwidth, UINT32 dheight, render_texinfo &t
texinfo.osddata = m_osddata;
// are we scaler-free? if so, just return the source bitmap
- const rgb_t *palbase = (m_format == TEXFORMAT_PALETTE16 || m_format == TEXFORMAT_PALETTEA16) ? palette_entry_list_adjusted(m_bitmap->palette()) : NULL;
+ const rgb_t *palbase = (m_format == TEXFORMAT_PALETTE16 || m_format == TEXFORMAT_PALETTEA16) ? m_bitmap->palette()->entry_list_adjusted() : NULL;
if (m_scaler == NULL || (m_bitmap != NULL && swidth == dwidth && sheight == dheight))
{
// add a reference and set up the source bitmap
@@ -554,7 +554,7 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container)
// if no adjustment necessary, return the raw palette
assert(m_bitmap->palette() != NULL);
- adjusted = palette_entry_list_adjusted(m_bitmap->palette());
+ adjusted = m_bitmap->palette()->entry_list_adjusted();
if (!container.has_brightness_contrast_gamma_changes())
return adjusted;
@@ -564,7 +564,7 @@ const rgb_t *render_texture::get_adjusted_palette(render_container &container)
return adjusted;
// otherwise, ensure we have memory allocated and compute the adjusted result ourself
- numentries = palette_get_num_colors(m_bitmap->palette()) * palette_get_num_groups(m_bitmap->palette());
+ numentries = m_bitmap->palette()->num_colors() * m_bitmap->palette()->num_groups();
if (m_bcglookup == NULL || m_bcglookup_entries < numentries)
{
rgb_t *newlookup = auto_alloc_array(m_manager->machine(), rgb_t, numentries);
@@ -637,7 +637,7 @@ render_container::render_container(render_manager &manager, screen_device *scree
// allocate a client to the main palette
if (manager.machine().palette != NULL)
- m_palclient = palette_client_alloc(manager.machine().palette);
+ m_palclient = global_alloc(palette_client(*manager.machine().palette));
recompute_lookups();
}
@@ -655,8 +655,7 @@ render_container::~render_container()
m_manager.texture_free(m_overlaytexture);
// release our palette client
- if (m_palclient != NULL)
- palette_client_free(m_palclient);
+ global_free(m_palclient);
}
@@ -772,7 +771,7 @@ const rgb_t *render_container::bcg_lookup_table(int texformat, palette_t *palett
{
case TEXFORMAT_PALETTE16:
case TEXFORMAT_PALETTEA16:
- return (palette != NULL && palette == palette_client_get_palette(m_palclient)) ? m_bcglookup : NULL;
+ return (palette != NULL && palette == &m_palclient->palette()) ? m_bcglookup : NULL;
case TEXFORMAT_RGB32:
case TEXFORMAT_ARGB32:
@@ -858,9 +857,9 @@ void render_container::recompute_lookups()
// recompute the palette entries
if (m_palclient != NULL)
{
- palette_t *palette = palette_client_get_palette(m_palclient);
- const pen_t *adjusted_palette = palette_entry_list_adjusted(palette);
- int colors = palette_get_num_colors(palette) * palette_get_num_groups(palette);
+ palette_t &palette = m_palclient->palette();
+ const pen_t *adjusted_palette = palette.entry_list_adjusted();
+ int colors = palette.num_colors() * palette.num_groups();
for (int i = 0; i < colors; i++)
{
@@ -887,13 +886,13 @@ void render_container::update_palette()
// get the dirty list
UINT32 mindirty, maxdirty;
- const UINT32 *dirty = palette_client_get_dirty_list(m_palclient, &mindirty, &maxdirty);
+ const UINT32 *dirty = m_palclient->dirty_list(mindirty, maxdirty);
// iterate over dirty items and update them
if (dirty != NULL)
{
- palette_t *palette = palette_client_get_palette(m_palclient);
- const pen_t *adjusted_palette = palette_entry_list_adjusted(palette);
+ palette_t &palette = m_palclient->palette();
+ const pen_t *adjusted_palette = palette.entry_list_adjusted();
// loop over chunks of 32 entries, since we can quickly examine 32 at a time
for (UINT32 entry32 = mindirty / 32; entry32 <= maxdirty / 32; entry32++)
diff --git a/src/emu/screen.c b/src/emu/screen.c
index 4dd3e62b5b1..d8cd3e5c9ac 100644
--- a/src/emu/screen.c
+++ b/src/emu/screen.c
@@ -880,7 +880,7 @@ void screen_device::update_burnin()
{
UINT64 *dst = &m_burnin.pix64(y);
const UINT16 *src = &srcbitmap.pix16(srcy >> 16);
- const rgb_t *palette = palette_entry_list_adjusted(machine().palette);
+ const rgb_t *palette = machine().palette->entry_list_adjusted();
for (x = 0, srcx = xstart; x < dstwidth; x++, srcx += xstep)
{
rgb_t pixel = palette[src[srcx >> 16]];
diff --git a/src/emu/tilemap.c b/src/emu/tilemap.c
index 27f1663d611..42f8e9062f8 100644
--- a/src/emu/tilemap.c
+++ b/src/emu/tilemap.c
@@ -1183,7 +1183,7 @@ void tilemap_t::draw_instance(_BitmapClass &dest, const blit_parameters &blit, i
x_end = MIN(x_end, x2);
// if we're rendering something, compute the pointers
- const rgb_t *clut = (dest.palette() != NULL) ? palette_entry_list_raw(dest.palette()) : machine().pens;
+ const rgb_t *clut = (dest.palette() != NULL) ? dest.palette()->entry_list_raw() : machine().pens;
if (prev_trans != WHOLLY_TRANSPARENT)
{
const UINT16 *source0 = source_baseaddr + x_start;
@@ -1277,7 +1277,7 @@ void tilemap_t::draw_roz_core(_BitmapClass &destbitmap, const blit_parameters &b
UINT32 startx, UINT32 starty, int incxx, int incxy, int incyx, int incyy, bool wraparound)
{
// pre-cache all the inner loop values
- const rgb_t *clut = ((destbitmap.palette() != NULL) ? palette_entry_list_raw(destbitmap.palette()) : machine().pens) + (blit.tilemap_priority_code >> 16);
+ const rgb_t *clut = ((destbitmap.palette() != NULL) ? destbitmap.palette()->entry_list_raw() : machine().pens) + (blit.tilemap_priority_code >> 16);
bitmap_ind8 &priority_bitmap = *blit.priority;
const int xmask = m_pixmap.width() - 1;
const int ymask = m_pixmap.height() - 1;
diff --git a/src/emu/ui/viewgfx.c b/src/emu/ui/viewgfx.c
index 5c584787826..f1868c559af 100644
--- a/src/emu/ui/viewgfx.c
+++ b/src/emu/ui/viewgfx.c
@@ -257,7 +257,7 @@ static void palette_handler(running_machine &machine, render_container *containe
{
int total = state->palette.which ? colortable_palette_get_size(machine.colortable) : machine.total_colors();
const char *title = state->palette.which ? "COLORTABLE" : "PALETTE";
- const rgb_t *raw_color = palette_entry_list_raw(machine.palette);
+ const rgb_t *raw_color = machine.palette->entry_list_raw();
render_font *ui_font = machine.ui().get_font();
float cellwidth, cellheight;
float chwidth, chheight;
@@ -787,7 +787,7 @@ static void gfxset_draw_item(running_machine &machine, gfx_element *gfx, int ind
};
int width = (rotate & ORIENTATION_SWAP_XY) ? gfx->height() : gfx->width();
int height = (rotate & ORIENTATION_SWAP_XY) ? gfx->width() : gfx->height();
- const rgb_t *palette = (machine.total_colors() != 0) ? palette_entry_list_raw(machine.palette) : NULL;
+ const rgb_t *palette = (machine.total_colors() != 0) ? machine.palette->entry_list_raw() : NULL;
UINT32 palette_mask = ~0;
int x, y;
diff --git a/src/emu/video.c b/src/emu/video.c
index bf4ae762789..8e0e2f1c3d2 100644
--- a/src/emu/video.c
+++ b/src/emu/video.c
@@ -310,7 +310,7 @@ void video_manager::save_snapshot(screen_device *screen, emu_file &file)
png_add_text(&pnginfo, "System", text2);
// now do the actual work
- const rgb_t *palette = (machine().palette != NULL) ? palette_entry_list_adjusted(machine().palette) : NULL;
+ const rgb_t *palette = (machine().palette != NULL) ? machine().palette->entry_list_adjusted() : NULL;
png_error error = png_write_bitmap(file, &pnginfo, m_snap_bitmap, machine().total_colors(), palette);
if (error != PNGERR_NONE)
mame_printf_error("Error generating PNG for snapshot: png_error = %d\n", error);
@@ -1230,7 +1230,7 @@ void video_manager::record_frame()
}
// write the next frame
- const rgb_t *palette = (machine().palette != NULL) ? palette_entry_list_adjusted(machine().palette) : NULL;
+ const rgb_t *palette = (machine().palette != NULL) ? machine().palette->entry_list_adjusted() : NULL;
png_error error = mng_capture_frame(*m_mngfile, &pnginfo, m_snap_bitmap, machine().total_colors(), palette);
png_free(&pnginfo);
if (error != PNGERR_NONE)
@@ -1258,7 +1258,7 @@ bool video_assert_out_of_range_pixels(running_machine &machine, bitmap_ind16 &bi
{
#ifdef MAME_DEBUG
// iterate over rows
- int maxindex = palette_get_max_index(machine.palette);
+ int maxindex = machine.palette->max_index();
for (int y = 0; y < bitmap.height(); y++)
{
UINT16 *rowbase = &bitmap.pix16(y);
diff --git a/src/emu/video/pc_cga.c b/src/emu/video/pc_cga.c
index d22b9177bf2..428a6fa0537 100644
--- a/src/emu/video/pc_cga.c
+++ b/src/emu/video/pc_cga.c
@@ -482,7 +482,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -522,7 +522,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -561,7 +561,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -600,7 +600,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -644,7 +644,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row_si )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -696,7 +696,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -744,7 +744,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -802,7 +802,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -846,7 +846,7 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -882,7 +882,7 @@ static MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 fg = cga.color_select & 0x0F;
int i;
running_machine &machine = device->machine();
@@ -1460,7 +1460,7 @@ static MC6845_UPDATE_ROW( pc1512_gfx_4bpp_update_row )
{
UINT8 *videoram = cga.videoram;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT16 offset_base = ra << 13;
int j;
running_machine &machine = device->machine();
diff --git a/src/lib/util/bitmap.c b/src/lib/util/bitmap.c
index 6f826ac6767..4d1f8502f50 100644
--- a/src/lib/util/bitmap.c
+++ b/src/lib/util/bitmap.c
@@ -271,14 +271,14 @@ void bitmap_t::set_palette(palette_t *palette)
// first dereference any existing palette
if (m_palette != NULL)
{
- palette_deref(m_palette);
+ m_palette->deref();
m_palette = NULL;
}
// then reference any new palette
if (palette != NULL)
{
- palette_ref(palette);
+ palette->ref();
m_palette = palette;
}
}
diff --git a/src/lib/util/palette.c b/src/lib/util/palette.c
index a72b8c64314..719a832c088 100644
--- a/src/lib/util/palette.c
+++ b/src/lib/util/palette.c
@@ -14,669 +14,435 @@
-/***************************************************************************
- TYPE DEFINITIONS
-***************************************************************************/
-
-/* object to track dirty states */
-struct dirty_state
-{
- UINT32 * dirty; /* bitmap of dirty entries */
- UINT32 mindirty; /* minimum dirty entry */
- UINT32 maxdirty; /* minimum dirty entry */
-};
+//**************************************************************************
+// INLINE FUNCTIONS
+//**************************************************************************
+//-------------------------------------------------
+// adjust_palette_entry - adjust a palette
+// entry for brightness
+//-------------------------------------------------
-/* a single palette client */
-struct palette_client
+inline rgb_t palette_t::adjust_palette_entry(rgb_t entry, float brightness, float contrast, const UINT8 *gamma_map)
{
- palette_client *next; /* pointer to next client */
- palette_t * palette; /* reference to the palette */
- dirty_state live; /* live dirty state */
- dirty_state previous; /* previous dirty state */
-};
-
-
-/* a palette object */
-struct palette_t
-{
- UINT32 refcount; /* reference count on the palette */
- UINT32 numcolors; /* number of colors in the palette */
- UINT32 numgroups; /* number of groups in the palette */
-
- float brightness; /* overall brightness value */
- float contrast; /* overall contrast value */
- float gamma; /* overall gamma value */
- UINT8 gamma_map[256]; /* gamma map */
-
- rgb_t * entry_color; /* array of raw colors */
- float * entry_contrast; /* contrast value for each entry */
- rgb_t * adjusted_color; /* array of adjusted colors */
- rgb_t * adjusted_rgb15; /* array of adjusted colors as RGB15 */
-
- float * group_bright; /* brightness value for each group */
- float * group_contrast; /* contrast value for each group */
-
- palette_client *client_list; /* list of clients for this palette */
-};
-
-
-
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-static void internal_palette_free(palette_t *palette);
-static void update_adjusted_color(palette_t *palette, UINT32 group, UINT32 index);
-
-
-
-/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
-
-/*-------------------------------------------------
- adjust_palette_entry - adjust a palette
- entry for brightness
--------------------------------------------------*/
-
-INLINE rgb_t adjust_palette_entry(rgb_t entry, float brightness, float contrast, const UINT8 *gamma_map)
-{
- int r = rgb_clamp((float)gamma_map[RGB_RED(entry)] * contrast + brightness);
- int g = rgb_clamp((float)gamma_map[RGB_GREEN(entry)] * contrast + brightness);
- int b = rgb_clamp((float)gamma_map[RGB_BLUE(entry)] * contrast + brightness);
+ int r = rgb_clamp(float(gamma_map[RGB_RED(entry)]) * contrast + brightness);
+ int g = rgb_clamp(float(gamma_map[RGB_GREEN(entry)]) * contrast + brightness);
+ int b = rgb_clamp(float(gamma_map[RGB_BLUE(entry)]) * contrast + brightness);
int a = RGB_ALPHA(entry);
return MAKE_ARGB(a,r,g,b);
}
-/***************************************************************************
- PALETTE ALLOCATION
-***************************************************************************/
+//**************************************************************************
+// CLIENT DIRTY LIST MANAGEMENT
+//**************************************************************************
-/*-------------------------------------------------
- palette_alloc - allocate a new palette object
- and take a single reference on it
--------------------------------------------------*/
+//-------------------------------------------------
+// dirty_state - constructor
+//-------------------------------------------------
-palette_t *palette_alloc(UINT32 numcolors, UINT32 numgroups)
+palette_client::dirty_state::dirty_state()
+ : m_mindirty(0),
+ m_maxdirty(0)
{
- palette_t *palette;
- UINT32 index;
-
- /* allocate memory */
- palette = (palette_t *)malloc(sizeof(*palette));
- if (palette == NULL)
- goto error;
- memset(palette, 0, sizeof(*palette));
-
- /* initialize overall controls */
- palette->brightness = 0.0f;
- palette->contrast = 1.0f;
- palette->gamma = 1.0f;
- for (index = 0; index < 256; index++)
- palette->gamma_map[index] = index;
-
- /* allocate an array of palette entries and individual contrasts for each */
- palette->entry_color = (rgb_t *)malloc(sizeof(*palette->entry_color) * numcolors);
- palette->entry_contrast = (float *)malloc(sizeof(*palette->entry_contrast) * numcolors);
- if (palette->entry_color == NULL || palette->entry_contrast == NULL)
- goto error;
-
- /* initialize the entries */
- for (index = 0; index < numcolors; index++)
- {
- palette->entry_color[index] = RGB_BLACK;
- palette->entry_contrast[index] = 1.0f;
- }
-
- /* allocate an array of brightness and contrast for each group */
- palette->group_bright = (float *)malloc(sizeof(*palette->group_bright) * numgroups);
- palette->group_contrast = (float *)malloc(sizeof(*palette->group_contrast) * numgroups);
- if (palette->group_bright == NULL || palette->group_contrast == NULL)
- goto error;
-
- /* initialize the entries */
- for (index = 0; index < numgroups; index++)
- {
- palette->group_bright[index] = 0.0f;
- palette->group_contrast[index] = 1.0f;
- }
-
- /* allocate arrays for the adjusted colors */
- palette->adjusted_color = (rgb_t *)malloc(sizeof(*palette->adjusted_color) * (numcolors * numgroups + 2));
- palette->adjusted_rgb15 = (rgb_t *)malloc(sizeof(*palette->adjusted_rgb15) * (numcolors * numgroups + 2));
- if (palette->adjusted_color == NULL || palette->adjusted_rgb15 == NULL)
- goto error;
-
- /* initialize the arrays */
- for (index = 0; index < numcolors * numgroups; index++)
- {
- palette->adjusted_color[index] = RGB_BLACK;
- palette->adjusted_rgb15[index] = rgb_to_rgb15(RGB_BLACK);
- }
-
- /* add black and white as the last two colors */
- palette->adjusted_color[index] = RGB_BLACK;
- palette->adjusted_rgb15[index++] = rgb_to_rgb15(RGB_BLACK);
- palette->adjusted_color[index] = RGB_WHITE;
- palette->adjusted_rgb15[index++] = rgb_to_rgb15(RGB_WHITE);
-
- /* initialize the remainder of the structure */
- palette->refcount = 1;
- palette->numcolors = numcolors;
- palette->numgroups = numgroups;
- return palette;
-
-error:
- if (palette != NULL)
- internal_palette_free(palette);
-
- return NULL;
}
-/*-------------------------------------------------
- palette_ref - reference a palette object,
- incrementing its reference count
--------------------------------------------------*/
+//-------------------------------------------------
+// dirty_list - return the current list and
+// min/max values
+//-------------------------------------------------
-void palette_ref(palette_t *palette)
+const UINT32 *palette_client::dirty_state::dirty_list(UINT32 &mindirty, UINT32 &maxdirty)
{
- palette->refcount++;
-}
+ // fill in the mindirty/maxdirty
+ mindirty = m_mindirty;
+ maxdirty = m_maxdirty;
-
-/*-------------------------------------------------
- palette_deref - dereference a palette object;
- if the reference count goes to 0, it is freed
--------------------------------------------------*/
-
-void palette_deref(palette_t *palette)
-{
- /* if the reference count goes to 0, free */
- if (--palette->refcount == 0)
- internal_palette_free(palette);
+ // if nothing to report, report nothing
+ return (m_mindirty > m_maxdirty) ? NULL : &m_dirty[0];
}
+//-------------------------------------------------
+// resize - resize the dirty array and mark all
+// dirty
+//-------------------------------------------------
-/***************************************************************************
- PALETTE INFORMATION
-***************************************************************************/
-
-/*-------------------------------------------------
- palette_get_num_colors - return the number of
- colors allocated in the palette
--------------------------------------------------*/
-
-int palette_get_num_colors(palette_t *palette)
+void palette_client::dirty_state::resize(UINT32 colors)
{
- return palette->numcolors;
-}
-
+ // resize to the correct number of dwords
+ UINT32 dirty_dwords = (colors + 31) / 32;
+ m_dirty.resize(dirty_dwords);
-/*-------------------------------------------------
- palette_get_num_groups - return the number of
- groups managed by the palette
--------------------------------------------------*/
+ // mark all entries dirty
+ memset(&m_dirty[0], 0xff, dirty_dwords * sizeof(UINT32));
+ m_dirty[dirty_dwords - 1] &= (1 << (colors % 32)) - 1;
-int palette_get_num_groups(palette_t *palette)
-{
- return palette->numgroups;
+ // set min/max
+ m_mindirty = 0;
+ m_maxdirty = colors - 1;
}
-/*-------------------------------------------------
- palette_get_max_index - return the maximum
- allowed index (i.e., length of arrays returned
- by palette_entry_list*)
--------------------------------------------------*/
+//-------------------------------------------------
+// mark_dirty - mark a single entry dirty
+//-------------------------------------------------
-int palette_get_max_index(palette_t *palette)
+void palette_client::dirty_state::mark_dirty(UINT32 index)
{
- return palette->numcolors * palette->numgroups + 2;
+ m_dirty[index / 32] |= 1 << (index % 32);
+ m_mindirty = MIN(m_mindirty, index);
+ m_maxdirty = MAX(m_maxdirty, index);
}
-/*-------------------------------------------------
- palette_get_black_entry - return the index of
- the black entry
--------------------------------------------------*/
+//-------------------------------------------------
+// reset - clear the dirty array to mark all
+// entries as clean
+//-------------------------------------------------
-UINT32 palette_get_black_entry(palette_t *palette)
+void palette_client::dirty_state::reset()
{
- return palette->numcolors * palette->numgroups + 0;
+ // erase relevant entries in the new live one
+ memset(&m_dirty[m_mindirty / 32], 0, ((m_maxdirty / 32) + 1 - (m_mindirty / 32)) * sizeof(UINT32));
+ m_mindirty = m_dirty.count() * 32 - 1;
+ m_maxdirty = 0;
}
-/*-------------------------------------------------
- palette_get_white_entry - return the index of
- the white entry
--------------------------------------------------*/
-
-UINT32 palette_get_white_entry(palette_t *palette)
-{
- return palette->numcolors * palette->numgroups + 1;
-}
+//**************************************************************************
+// PALETTE CLIENT
+//**************************************************************************
+//-------------------------------------------------
+// palette_client - constructor
+//-------------------------------------------------
-/***************************************************************************
- PALETTE CLIENTS
-***************************************************************************/
+palette_client::palette_client(palette_t &palette)
+ : m_palette(palette),
+ m_next(NULL),
+ m_live(&m_dirty[0]),
+ m_previous(&m_dirty[1])
+{
+ // add a reference to the palette
+ palette.ref();
-/*-------------------------------------------------
- palette_client_alloc - add a new client to a
- palette
--------------------------------------------------*/
+ // resize the dirty lists
+ UINT32 total_colors = palette.num_colors() * palette.num_groups();
+ m_dirty[0].resize(total_colors);
+ m_dirty[1].resize(total_colors);
-palette_client *palette_client_alloc(palette_t *palette)
-{
- UINT32 total_colors = palette->numcolors * palette->numgroups;
- UINT32 dirty_dwords = (total_colors + 31) / 32;
- palette_client *client;
-
- /* allocate memory for the client */
- client = (palette_client *)malloc(sizeof(*client));
- if (client == NULL)
- goto error;
- memset(client, 0, sizeof(*client));
-
- /* allocate dirty lists */
- client->live.dirty = (UINT32 *)malloc(dirty_dwords * sizeof(UINT32));
- client->previous.dirty = (UINT32 *)malloc(dirty_dwords * sizeof(UINT32));
- if (client->live.dirty == NULL || client->previous.dirty == NULL)
- goto error;
-
- /* mark everything dirty to start with */
- memset(client->live.dirty, 0xff, dirty_dwords * sizeof(UINT32));
- memset(client->previous.dirty, 0xff, dirty_dwords * sizeof(UINT32));
- client->live.dirty[dirty_dwords - 1] &= (1 << (total_colors % 32)) - 1;
- client->previous.dirty[dirty_dwords - 1] &= (1 << (total_colors % 32)) - 1;
-
- /* initialize the rest of the structure and add a reference to a palette */
- client->palette = palette;
- palette_ref(palette);
- client->live.mindirty = 0;
- client->live.maxdirty = total_colors - 1;
-
- /* now add us to the list of clients */
- client->next = palette->client_list;
- palette->client_list = client;
- return client;
-
-error:
- if (client != NULL)
- {
- if (client->live.dirty != NULL)
- free(client->live.dirty);
- if (client->previous.dirty != NULL)
- free(client->previous.dirty);
- free(client);
- }
- return NULL;
+ // now add us to the list of clients
+ m_next = palette.m_client_list;
+ palette.m_client_list = this;
}
-/*-------------------------------------------------
- palette_client_free - remove a client from a
- palette
--------------------------------------------------*/
+//-------------------------------------------------
+// ~palette_client - destructor
+//-------------------------------------------------
-void palette_client_free(palette_client *client)
+palette_client::~palette_client()
{
- palette_client **curptr;
-
- /* first locate and remove ourself from the palette's list */
- for (curptr = &client->palette->client_list; *curptr != NULL; curptr = &(*curptr)->next)
- if (*curptr == client)
+ // first locate and remove ourself from our palette's list
+ for (palette_client **curptr = &m_palette.m_client_list; *curptr != NULL; curptr = &(*curptr)->m_next)
+ if (*curptr == this)
{
- *curptr = client->next;
+ *curptr = m_next;
break;
}
- /* now deref the palette */
- palette_deref(client->palette);
-
- /* free our data */
- if (client->live.dirty != NULL)
- free(client->live.dirty);
- if (client->previous.dirty != NULL)
- free(client->previous.dirty);
- free(client);
-}
-
-
-/*-------------------------------------------------
- palette_client_get_palette - return a pointer
- to the palette for this client
--------------------------------------------------*/
-
-palette_t *palette_client_get_palette(palette_client *client)
-{
- return client->palette;
+ // now deref the palette
+ m_palette.deref();
}
-/*-------------------------------------------------
- palette_client_get_dirty_list - atomically get
- the current dirty list for a client
--------------------------------------------------*/
+//-------------------------------------------------
+// dirty_list - atomically get the current dirty
+// list for a client
+//-------------------------------------------------
-const UINT32 *palette_client_get_dirty_list(palette_client *client, UINT32 *mindirty, UINT32 *maxdirty)
+const UINT32 *palette_client::dirty_list(UINT32 &mindirty, UINT32 &maxdirty)
{
- dirty_state temp;
-
- /* fill in the mindirty/maxdirty */
- if (mindirty != NULL)
- *mindirty = client->live.mindirty;
- if (maxdirty != NULL)
- *maxdirty = client->live.maxdirty;
-
- /* if nothing to report, report nothing and don't swap */
- if (client->live.mindirty > client->live.maxdirty)
+ // if nothing to report, report nothing and don't swap
+ const UINT32 *result = m_live->dirty_list(mindirty, maxdirty);
+ if (result == NULL)
return NULL;
- /* swap the live and previous lists */
- temp = client->live;
- client->live = client->previous;
- client->previous = temp;
+ // swap the live and previous lists
+ dirty_state *temp = m_live;
+ m_live = m_previous;
+ m_previous = temp;
- /* erase relevant entries in the new live one */
- if (client->live.mindirty <= client->live.maxdirty)
- memset(client->live.dirty, client->live.mindirty / 8, (client->live.maxdirty / 8) + 1 - (client->live.mindirty / 8));
- client->live.mindirty = client->palette->numcolors * client->palette->numgroups;
- client->live.maxdirty = 0;
-
- /* return a pointer to the previous table */
- return client->previous.dirty;
+ // reset new live one and return the pointer to the previous
+ m_live->reset();
+ return result;
}
-/***************************************************************************
- PALETTE COLOR MANAGEMENT
-***************************************************************************/
-
-/*-------------------------------------------------
- palette_entry_set_color - set the raw RGB
- color for a given palette index
--------------------------------------------------*/
-
-void palette_entry_set_color(palette_t *palette, UINT32 index, rgb_t rgb)
-{
- int groupnum;
-
- /* if out of range, or unchanged, ignore */
- if (index >= palette->numcolors || palette->entry_color[index] == rgb)
- return;
-
- /* set the color */
- palette->entry_color[index] = rgb;
-
- /* update across all groups */
- for (groupnum = 0; groupnum < palette->numgroups; groupnum++)
- update_adjusted_color(palette, groupnum, index);
-}
-
-
-/*-------------------------------------------------
- palette_entry_get_color - return the raw RGB
- color for a given palette index
--------------------------------------------------*/
-
-rgb_t palette_entry_get_color(palette_t *palette, UINT32 index)
-{
- return (index < palette->numcolors) ? palette->entry_color[index] : RGB_BLACK;
-}
-
-
-/*-------------------------------------------------
- palette_entry_get_adjusted_color - return the
- adjusted RGB color (after all adjustments) for
- a given palette index
--------------------------------------------------*/
-
-rgb_t palette_entry_get_adjusted_color(palette_t *palette, UINT32 index)
-{
- return (index < palette->numcolors * palette->numgroups) ? palette->adjusted_color[index] : RGB_BLACK;
-}
+//**************************************************************************
+// PALETTE_T
+//**************************************************************************
+
+//-------------------------------------------------
+// palette_t - constructor
+//-------------------------------------------------
+
+palette_t::palette_t(UINT32 numcolors, UINT32 numgroups)
+ : m_refcount(1),
+ m_numcolors(numcolors),
+ m_numgroups(numgroups),
+ m_brightness(0.0f),
+ m_contrast(1.0f),
+ m_gamma(1.0f),
+ m_entry_color(numcolors),
+ m_entry_contrast(numcolors),
+ m_adjusted_color(numcolors * numgroups + 2),
+ m_adjusted_rgb15(numcolors * numgroups + 2),
+ m_group_bright(numgroups),
+ m_group_contrast(numgroups),
+ m_client_list(NULL)
+{
+ // initialize gamma map
+ for (UINT32 index = 0; index < 256; index++)
+ m_gamma_map[index] = index;
+
+ // initialize the per-entry data
+ for (UINT32 index = 0; index < numcolors; index++)
+ {
+ m_entry_color[index] = RGB_BLACK;
+ m_entry_contrast[index] = 1.0f;
+ }
+ // initialize the per-group data
+ for (UINT32 index = 0; index < numgroups; index++)
+ {
+ m_group_bright[index] = 0.0f;
+ m_group_contrast[index] = 1.0f;
+ }
-/*-------------------------------------------------
- palette_entry_list_raw - return the entire
- palette as an array of raw RGB values
--------------------------------------------------*/
+ // initialize the expanded data
+ for (UINT32 index = 0; index < numcolors * numgroups; index++)
+ {
+ m_adjusted_color[index] = RGB_BLACK;
+ m_adjusted_rgb15[index] = rgb_to_rgb15(RGB_BLACK);
+ }
-const rgb_t *palette_entry_list_raw(palette_t *palette)
-{
- return palette->entry_color;
+ // add black and white as the last two colors
+ m_adjusted_color[numcolors * numgroups + 0] = RGB_BLACK;
+ m_adjusted_rgb15[numcolors * numgroups + 0] = rgb_to_rgb15(RGB_BLACK);
+ m_adjusted_color[numcolors * numgroups + 1] = RGB_WHITE;
+ m_adjusted_rgb15[numcolors * numgroups + 1] = rgb_to_rgb15(RGB_WHITE);
}
-/*-------------------------------------------------
- palette_entry_list_adjusted - return the
- entire palette as an array of adjusted RGB
- values
--------------------------------------------------*/
+//-------------------------------------------------
+// palette_t - destructor
+//-------------------------------------------------
-const rgb_t *palette_entry_list_adjusted(palette_t *palette)
+palette_t::~palette_t()
{
- return palette->adjusted_color;
}
-/*-------------------------------------------------
- palette_entry_list_adjusted_rgb15 - return the
- entire palette as an array of adjusted RGB-15
- values
--------------------------------------------------*/
+//-------------------------------------------------
+// deref - dereference a palette object; if the
+// reference count goes to 0, it is freed
+//-------------------------------------------------
-const rgb_t *palette_entry_list_adjusted_rgb15(palette_t *palette)
+void palette_t::deref()
{
- return palette->adjusted_rgb15;
+ // if the reference count goes to 0, free
+ if (--m_refcount == 0)
+ delete this;
}
+//-------------------------------------------------
+// set_brightness - set the overall brightness
+// for the palette
+//-------------------------------------------------
-/***************************************************************************
- PALETTE ADJUSTMENTS
-***************************************************************************/
-
-/*-------------------------------------------------
- palette_set_brightness - set the overall
- brightness for the palette
--------------------------------------------------*/
-
-void palette_set_brightness(palette_t *palette, float brightness)
+void palette_t::set_brightness(float brightness)
{
- int groupnum, index;
-
- /* convert incoming value to normalized result */
+ // convert incoming value to normalized result
brightness = (brightness - 1.0f) * 256.0f;
- /* set the global brightness if changed */
- if (palette->brightness == brightness)
+ // set the global brightness if changed
+ if (m_brightness == brightness)
return;
- palette->brightness = brightness;
+ m_brightness = brightness;
- /* update across all indices in all groups */
- for (groupnum = 0; groupnum < palette->numgroups; groupnum++)
- for (index = 0; index < palette->numcolors; index++)
- update_adjusted_color(palette, groupnum, index);
+ // update across all indices in all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ for (int index = 0; index < m_numcolors; index++)
+ update_adjusted_color(groupnum, index);
}
-/*-------------------------------------------------
- palette_set_contrast - set the overall
- contrast for the palette
--------------------------------------------------*/
+//-------------------------------------------------
+// set_contrast - set the overall contrast for
+// the palette
+//-------------------------------------------------
-void palette_set_contrast(palette_t *palette, float contrast)
+void palette_t::set_contrast(float contrast)
{
- int groupnum, index;
-
- /* set the global contrast if changed */
- if (palette->contrast == contrast)
+ // set the global contrast if changed
+ if (m_contrast == contrast)
return;
- palette->contrast = contrast;
+ m_contrast = contrast;
- /* update across all indices in all groups */
- for (groupnum = 0; groupnum < palette->numgroups; groupnum++)
- for (index = 0; index < palette->numcolors; index++)
- update_adjusted_color(palette, groupnum, index);
+ // update across all indices in all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ for (int index = 0; index < m_numcolors; index++)
+ update_adjusted_color(groupnum, index);
}
-/*-------------------------------------------------
- palette_set_gamma - set the overall
- gamma for the palette
--------------------------------------------------*/
+//-------------------------------------------------
+// set_gamma - set the overall gamma for the
+// palette
+//-------------------------------------------------
-void palette_set_gamma(palette_t *palette, float gamma)
+void palette_t::set_gamma(float gamma)
{
- int groupnum, index;
-
- /* set the global gamma if changed */
- if (palette->gamma == gamma)
+ // set the global gamma if changed
+ if (m_gamma == gamma)
return;
- palette->gamma = gamma;
+ m_gamma = gamma;
- /* recompute the gamma map */
+ // recompute the gamma map
gamma = 1.0f / gamma;
- for (index = 0; index < 256; index++)
+ for (int index = 0; index < 256; index++)
{
- float fval = (float)index * (1.0f / 255.0f);
+ float fval = float(index) * (1.0f / 255.0f);
float fresult = pow(fval, gamma);
- palette->gamma_map[index] = rgb_clamp(255.0f * fresult);
+ m_gamma_map[index] = rgb_clamp(255.0f * fresult);
}
- /* update across all indices in all groups */
- for (groupnum = 0; groupnum < palette->numgroups; groupnum++)
- for (index = 0; index < palette->numcolors; index++)
- update_adjusted_color(palette, groupnum, index);
+ // update across all indices in all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ for (int index = 0; index < m_numcolors; index++)
+ update_adjusted_color(groupnum, index);
}
-/*-------------------------------------------------
- palette_entry_set_contrast - set the contrast
- adjustment for a single palette index
--------------------------------------------------*/
+//-------------------------------------------------
+// entry_set_color - set the raw RGB color for a
+// given palette index
+//-------------------------------------------------
-void palette_entry_set_contrast(palette_t *palette, UINT32 index, float contrast)
+void palette_t::entry_set_color(UINT32 index, rgb_t rgb)
{
- int groupnum;
-
- /* if out of range, or unchanged, ignore */
- if (index >= palette->numcolors || palette->entry_contrast[index] == contrast)
+ // if out of range, or unchanged, ignore
+ if (index >= m_numcolors || m_entry_color[index] == rgb)
return;
- /* set the contrast */
- palette->entry_contrast[index] = contrast;
+ // set the color
+ m_entry_color[index] = rgb;
- /* update across all groups */
- for (groupnum = 0; groupnum < palette->numgroups; groupnum++)
- update_adjusted_color(palette, groupnum, index);
+ // update across all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ update_adjusted_color(groupnum, index);
}
-/*-------------------------------------------------
- palette_entry_get_contrast - return the
- contrast adjustment for a single palette index
--------------------------------------------------*/
+//-------------------------------------------------
+// entry_set_contrast - set the contrast
+// adjustment for a single palette index
+//-------------------------------------------------
-float palette_entry_get_contrast(palette_t *palette, UINT32 index)
+void palette_t::entry_set_contrast(UINT32 index, float contrast)
{
- return (index < palette->numcolors) ? palette->entry_contrast[index] : 1.0f;
+ // if out of range, or unchanged, ignore
+ if (index >= m_numcolors || m_entry_contrast[index] == contrast)
+ return;
+
+ // set the contrast
+ m_entry_contrast[index] = contrast;
+
+ // update across all groups
+ for (int groupnum = 0; groupnum < m_numgroups; groupnum++)
+ update_adjusted_color(groupnum, index);
}
-/*-------------------------------------------------
- palette_group_set_brightness - configure
- overall brightness for a palette group
--------------------------------------------------*/
+//-------------------------------------------------
+// group_set_brightness - configure overall
+// brightness for a palette group
+//-------------------------------------------------
-void palette_group_set_brightness(palette_t *palette, UINT32 group, float brightness)
+void palette_t::group_set_brightness(UINT32 group, float brightness)
{
- int index;
-
- /* convert incoming value to normalized result */
+ // convert incoming value to normalized result
brightness = (brightness - 1.0f) * 256.0f;
- /* if out of range, or unchanged, ignore */
- if (group >= palette->numgroups || palette->group_bright[group] == brightness)
+ // if out of range, or unchanged, ignore
+ if (group >= m_numgroups || m_group_bright[group] == brightness)
return;
- /* set the contrast */
- palette->group_bright[group] = brightness;
+ // set the contrast
+ m_group_bright[group] = brightness;
- /* update across all colors */
- for (index = 0; index < palette->numcolors; index++)
- update_adjusted_color(palette, group, index);
+ // update across all colors
+ for (int index = 0; index < m_numcolors; index++)
+ update_adjusted_color(group, index);
}
-/*-------------------------------------------------
- palette_group_set_contrast - configure
- overall contrast for a palette group
--------------------------------------------------*/
+//-------------------------------------------------
+// group_set_contrast - configure overall
+// contrast for a palette group
+//-------------------------------------------------
-void palette_group_set_contrast(palette_t *palette, UINT32 group, float contrast)
+void palette_t::group_set_contrast(UINT32 group, float contrast)
{
- int index;
-
- /* if out of range, or unchanged, ignore */
- if (group >= palette->numgroups || palette->group_contrast[group] == contrast)
+ // if out of range, or unchanged, ignore
+ if (group >= m_numgroups || m_group_contrast[group] == contrast)
return;
- /* set the contrast */
- palette->group_contrast[group] = contrast;
+ // set the contrast
+ m_group_contrast[group] = contrast;
- /* update across all colors */
- for (index = 0; index < palette->numcolors; index++)
- update_adjusted_color(palette, group, index);
+ // update across all colors
+ for (int index = 0; index < m_numcolors; index++)
+ update_adjusted_color(group, index);
}
+//-------------------------------------------------
+// normalize_range - normalize a range of palette
+// entries
+//-------------------------------------------------
-/***************************************************************************
- PALETTE UTILITIES
-***************************************************************************/
-
-/*-------------------------------------------------
- palette_normalize_range - normalize a range
- of palette entries
--------------------------------------------------*/
-
-void palette_normalize_range(palette_t *palette, UINT32 start, UINT32 end, int lum_min, int lum_max)
+void palette_t::normalize_range(UINT32 start, UINT32 end, int lum_min, int lum_max)
{
- INT32 ymin = 1000 * 255, ymax = 0;
- INT32 tmin, tmax;
- UINT32 index;
-
- /* clamp within range */
+ // clamp within range
start = MAX(start, 0);
- end = MIN(end, palette->numcolors - 1);
+ end = MIN(end, m_numcolors - 1);
- /* find the minimum and maximum brightness of all the colors in the range */
- for (index = start; index <= end; index++)
+ // find the minimum and maximum brightness of all the colors in the range
+ INT32 ymin = 1000 * 255, ymax = 0;
+ for (UINT32 index = start; index <= end; index++)
{
- rgb_t rgb = palette->entry_color[index];
+ rgb_t rgb = m_entry_color[index];
UINT32 y = 299 * RGB_RED(rgb) + 587 * RGB_GREEN(rgb) + 114 * RGB_BLUE(rgb);
ymin = MIN(ymin, y);
ymax = MAX(ymax, y);
}
- /* determine target minimum/maximum */
- tmin = (lum_min < 0) ? ((ymin + 500) / 1000) : lum_min;
- tmax = (lum_max < 0) ? ((ymax + 500) / 1000) : lum_max;
+ // determine target minimum/maximum
+ INT32 tmin = (lum_min < 0) ? ((ymin + 500) / 1000) : lum_min;
+ INT32 tmax = (lum_max < 0) ? ((ymax + 500) / 1000) : lum_max;
- /* now normalize the palette */
- for (index = start; index <= end; index++)
+ // now normalize the palette
+ for (UINT32 index = start; index <= end; index++)
{
- rgb_t rgb = palette->entry_color[index];
+ rgb_t rgb = m_entry_color[index];
INT32 y = 299 * RGB_RED(rgb) + 587 * RGB_GREEN(rgb) + 114 * RGB_BLUE(rgb);
INT32 u = ((INT32)RGB_BLUE(rgb)-y /1000)*492 / 1000;
INT32 v = ((INT32)RGB_RED(rgb)-y / 1000)*877 / 1000;
@@ -684,76 +450,34 @@ void palette_normalize_range(palette_t *palette, UINT32 start, UINT32 end, int l
UINT8 r = rgb_clamp(target + 1140 * v / 1000);
UINT8 g = rgb_clamp(target - 395 * u / 1000 - 581 * v / 1000);
UINT8 b = rgb_clamp(target + 2032 * u / 1000);
- palette_entry_set_color(palette, index, MAKE_RGB(r, g, b));
+ entry_set_color(index, MAKE_RGB(r, g, b));
}
}
+//-------------------------------------------------
+// update_adjusted_color - update a color index
+// by group and index pair
+//-------------------------------------------------
-/***************************************************************************
- INTERNAL ROUTINES
-***************************************************************************/
-
-/*-------------------------------------------------
- internal_palette_free - free all allocations
- from a palette
--------------------------------------------------*/
-
-static void internal_palette_free(palette_t *palette)
+void palette_t::update_adjusted_color(UINT32 group, UINT32 index)
{
- /* free per-color data */
- if (palette->entry_color != NULL)
- free(palette->entry_color);
- if (palette->entry_contrast != NULL)
- free(palette->entry_contrast);
-
- /* free per-group data */
- if (palette->group_bright != NULL)
- free(palette->group_bright);
- if (palette->group_contrast != NULL)
- free(palette->group_contrast);
-
- /* free adjusted data */
- if (palette->adjusted_color != NULL)
- free(palette->adjusted_color);
- if (palette->adjusted_rgb15 != NULL)
- free(palette->adjusted_rgb15);
-
- /* and the palette itself */
- free(palette);
-}
-
-
-/*-------------------------------------------------
- update_adjusted_color - update a color index
- by group and index pair
--------------------------------------------------*/
+ // compute the adjusted value
+ rgb_t adjusted = adjust_palette_entry(m_entry_color[index],
+ m_group_bright[group] + m_brightness,
+ m_group_contrast[group] * m_entry_contrast[index] * m_contrast,
+ m_gamma_map);
-static void update_adjusted_color(palette_t *palette, UINT32 group, UINT32 index)
-{
- UINT32 finalindex = group * palette->numcolors + index;
- palette_client *client;
- rgb_t adjusted;
-
- /* compute the adjusted value */
- adjusted = adjust_palette_entry(palette->entry_color[index],
- palette->group_bright[group] + palette->brightness,
- palette->group_contrast[group] * palette->entry_contrast[index] * palette->contrast,
- palette->gamma_map);
-
- /* if not different, ignore */
- if (palette->adjusted_color[finalindex] == adjusted)
+ // if not different, ignore
+ UINT32 finalindex = group * m_numcolors + index;
+ if (m_adjusted_color[finalindex] == adjusted)
return;
- /* otherwise, modify the adjusted color array */
- palette->adjusted_color[finalindex] = adjusted;
- palette->adjusted_rgb15[finalindex] = rgb_to_rgb15(adjusted);
+ // otherwise, modify the adjusted color array
+ m_adjusted_color[finalindex] = adjusted;
+ m_adjusted_rgb15[finalindex] = rgb_to_rgb15(adjusted);
- /* mark dirty in all clients */
- for (client = palette->client_list; client != NULL; client = client->next)
- {
- client->live.dirty[finalindex / 32] |= 1 << (finalindex % 32);
- client->live.mindirty = MIN(client->live.mindirty, finalindex);
- client->live.maxdirty = MAX(client->live.maxdirty, finalindex);
- }
+ // mark dirty in all clients
+ for (palette_client *client = m_client_list; client != NULL; client = client->next())
+ client->mark_dirty(finalindex);
}
diff --git a/src/lib/util/palette.h b/src/lib/util/palette.h
index 46f01f962b5..06370118d05 100644
--- a/src/lib/util/palette.h
+++ b/src/lib/util/palette.h
@@ -14,162 +14,177 @@
#define __PALETTE_H__
#include "osdcore.h"
+#include "coretmpl.h"
-/***************************************************************************
- TYPE DEFINITIONS
-***************************************************************************/
-
-/* an rgb_t is a single combined R,G,B (and optionally alpha) value */
-typedef UINT32 rgb_t;
-
-/* an rgb15_t is a single combined 15-bit R,G,B value */
-typedef UINT16 rgb15_t;
-
-/* a palette is an opaque, reference counted object */
-struct palette_t;
-
-/* a palette client is someone who is tracking the dirty state of a palette */
-struct palette_client;
-
-
-
-/***************************************************************************
- MACROS
-***************************************************************************/
+//**************************************************************************
+// MACROS
+//**************************************************************************
-/* macros to assemble rgb_t values */
-#define MAKE_ARGB(a,r,g,b) ((((rgb_t)(a) & 0xff) << 24) | (((rgb_t)(r) & 0xff) << 16) | (((rgb_t)(g) & 0xff) << 8) | ((rgb_t)(b) & 0xff))
+// macros to assemble rgb_t values */
+#define MAKE_ARGB(a,r,g,b) (((rgb_t(a) & 0xff) << 24) | ((rgb_t(r) & 0xff) << 16) | ((rgb_t(g) & 0xff) << 8) | (rgb_t(b) & 0xff))
#define MAKE_RGB(r,g,b) (MAKE_ARGB(255,r,g,b))
-/* macros to extract components from rgb_t values */
+// macros to extract components from rgb_t values */
#define RGB_ALPHA(rgb) (((rgb) >> 24) & 0xff)
#define RGB_RED(rgb) (((rgb) >> 16) & 0xff)
#define RGB_GREEN(rgb) (((rgb) >> 8) & 0xff)
#define RGB_BLUE(rgb) ((rgb) & 0xff)
-/* common colors */
+// common colors */
#define RGB_BLACK (MAKE_ARGB(255,0,0,0))
#define RGB_WHITE (MAKE_ARGB(255,255,255,255))
-/***************************************************************************
- FUNCTION PROTOTYPES
-***************************************************************************/
-
-
-/* ----- palette allocation ----- */
-
-/* allocate a new palette object and take a single reference on it */
-palette_t *palette_alloc(UINT32 numcolors, UINT32 numgroups);
-
-/* reference a palette object, incrementing its reference count */
-void palette_ref(palette_t *palette);
-
-/* dereference a palette object; if the reference count goes to 0, it is freed */
-void palette_deref(palette_t *palette);
-
-
-
-/* ----- palette information ----- */
-
-/* return the number of colors managed by the palette */
-int palette_get_num_colors(palette_t *palette);
-
-/* return the number of groups managed by the palette */
-int palette_get_num_groups(palette_t *palette);
-
-/* return the maximum allowed index (i.e., length of arrays returned by palette_entry_list*) */
-int palette_get_max_index(palette_t *palette);
-
-/* return the index of the black entry */
-UINT32 palette_get_black_entry(palette_t *palette);
-
-/* return the index of the white entry */
-UINT32 palette_get_white_entry(palette_t *palette);
-
-
-
-/* ----- palette clients ----- */
-
-/* add a new client to a palette */
-palette_client *palette_client_alloc(palette_t *palette);
-
-/* remove a client from a palette */
-void palette_client_free(palette_client *client);
-
-/* return a pointer to the palette for this client */
-palette_t *palette_client_get_palette(palette_client *client);
-
-/* atomically get the current dirty list for a client */
-const UINT32 *palette_client_get_dirty_list(palette_client *client, UINT32 *mindirty, UINT32 *maxdirty);
-
-
-
-/* ----- color management ----- */
-
-/* set the raw RGB color for a given palette index */
-void palette_entry_set_color(palette_t *palette, UINT32 index, rgb_t rgb);
-
-/* return the raw RGB color for a given palette index */
-rgb_t palette_entry_get_color(palette_t *palette, UINT32 index);
-
-/* return the adjusted RGB color (after all adjustments) for a given palette index */
-rgb_t palette_entry_get_adjusted_color(palette_t *palette, UINT32 index);
-
-/* return the entire palette as an array of raw RGB values */
-const rgb_t *palette_entry_list_raw(palette_t *palette);
-
-/* return the entire palette as an array of adjusted RGB values */
-const rgb_t *palette_entry_list_adjusted(palette_t *palette);
-
-/* return the entire palette as an array of adjusted RGB-15 values */
-const rgb_t *palette_entry_list_adjusted_rgb15(palette_t *palette);
-
-
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
-/* ----- palette adjustments ----- */
-
-/* set the overall brightness for the palette */
-void palette_set_brightness(palette_t *palette, float brightness);
-
-/* set the overall contrast for the palette */
-void palette_set_contrast(palette_t *palette, float contrast);
-
-/* set the overall gamma for the palette */
-void palette_set_gamma(palette_t *palette, float gamma);
-
-/* set the contrast adjustment for a single palette index */
-void palette_entry_set_contrast(palette_t *palette, UINT32 index, float contrast);
-
-/* return the contrast adjustment for a single palette index */
-float palette_entry_get_contrast(palette_t *palette, UINT32 index);
-
-/* configure overall brightness for a palette group */
-void palette_group_set_brightness(palette_t *palette, UINT32 group, float brightness);
-
-/* configure overall contrast for a palette group */
-void palette_group_set_contrast(palette_t *palette, UINT32 group, float contrast);
-
-
-
-/* ----- palette utilities ----- */
+// an rgb_t is a single combined R,G,B (and optionally alpha) value */
+typedef UINT32 rgb_t;
-/* normalize a range of palette entries, mapping minimum brightness to lum_min and maximum
- brightness to lum_max; if either value is < 0, that boundary value is not modified */
-void palette_normalize_range(palette_t *palette, UINT32 start, UINT32 end, int lum_min, int lum_max);
+// an rgb15_t is a single combined 15-bit R,G,B value */
+typedef UINT16 rgb15_t;
+// forward definitions
+class palette_t;
+// ======================> palette_client
-/***************************************************************************
- INLINE FUNCTIONS
-***************************************************************************/
+// a single palette client
+class palette_client
+{
+public:
+ // construction/destruction
+ palette_client(palette_t &palette);
+ ~palette_client();
+
+ // getters
+ palette_client *next() const { return m_next; }
+ palette_t &palette() const { return m_palette; }
+ const UINT32 *dirty_list(UINT32 &mindirty, UINT32 &maxdirty);
+
+ // dirty marking
+ void mark_dirty(UINT32 index) { m_live->mark_dirty(index); }
+
+private:
+ // internal object to track dirty states
+ class dirty_state
+ {
+ public:
+ // construction
+ dirty_state();
+
+ // operations
+ const UINT32 *dirty_list(UINT32 &mindirty, UINT32 &maxdirty);
+ void resize(UINT32 colors);
+ void mark_dirty(UINT32 index);
+ void reset();
+
+ private:
+ // internal state
+ dynamic_array<UINT32> m_dirty; // bitmap of dirty entries
+ UINT32 m_mindirty; // minimum dirty entry
+ UINT32 m_maxdirty; // minimum dirty entry
+ };
+
+ // internal state
+ palette_t & m_palette; // reference to the palette
+ palette_client *m_next; // pointer to next client
+ dirty_state * m_live; // live dirty state
+ dirty_state * m_previous; // previous dirty state
+ dirty_state m_dirty[2]; // two dirty states
+};
+
+
+// ======================> palette_t
+
+// a palette object
+class palette_t
+{
+ friend class palette_client;
+
+public:
+ // construction/destruction
+ palette_t(UINT32 numcolors, UINT32 numgroups = 1);
+
+ // reference counting
+ void ref() { m_refcount++; }
+ void deref();
+
+ // getters
+ int num_colors() const { return m_numcolors; }
+ int num_groups() const { return m_numgroups; }
+ int max_index() const { return m_numcolors * m_numgroups + 2; }
+ UINT32 black_entry() const { return m_numcolors * m_numgroups + 0; }
+ UINT32 white_entry() const { return m_numcolors * m_numgroups + 1; }
+
+ // overall adjustments
+ void set_brightness(float brightness);
+ void set_contrast(float contrast);
+ void set_gamma(float gamma);
+
+ // entry getters
+ rgb_t entry_color(UINT32 index) const { return (index < m_numcolors) ? m_entry_color[index] : RGB_BLACK; }
+ rgb_t entry_adjusted_color(UINT32 index) const { return (index < m_numcolors * m_numgroups) ? m_adjusted_color[index] : RGB_BLACK; }
+ float entry_contrast(UINT32 index) const { return (index < m_numcolors) ? m_entry_contrast[index] : 1.0f; }
+
+ // entry setters
+ void entry_set_color(UINT32 index, rgb_t rgb);
+ void entry_set_contrast(UINT32 index, float contrast);
+
+ // entry list getters
+ const rgb_t *entry_list_raw() const { return m_entry_color; }
+ const rgb_t *entry_list_adjusted() const { return m_adjusted_color; }
+ const rgb_t *entry_list_adjusted_rgb15() const { return m_adjusted_rgb15; }
+
+ // group adjustments
+ void group_set_brightness(UINT32 group, float brightness);
+ void group_set_contrast(UINT32 group, float contrast);
+
+ // utilities
+ void normalize_range(UINT32 start, UINT32 end, int lum_min = 0, int lum_max = 255);
+
+private:
+ // destructor -- can only destruct via
+ ~palette_t();
+
+ // internal helpers
+ rgb_t adjust_palette_entry(rgb_t entry, float brightness, float contrast, const UINT8 *gamma_map);
+ void update_adjusted_color(UINT32 group, UINT32 index);
+
+ // internal state
+ UINT32 m_refcount; // reference count on the palette
+ UINT32 m_numcolors; // number of colors in the palette
+ UINT32 m_numgroups; // number of groups in the palette
+
+ float m_brightness; // overall brightness value
+ float m_contrast; // overall contrast value
+ float m_gamma; // overall gamma value
+ UINT8 m_gamma_map[256]; // gamma map
+
+ dynamic_array<rgb_t> m_entry_color; // array of raw colors
+ dynamic_array<float> m_entry_contrast; // contrast value for each entry
+ dynamic_array<rgb_t> m_adjusted_color; // array of adjusted colors
+ dynamic_array<rgb_t> m_adjusted_rgb15; // array of adjusted colors as RGB15
+
+ dynamic_array<float> m_group_bright; // brightness value for each group
+ dynamic_array<float> m_group_contrast; // contrast value for each group
+
+ palette_client *m_client_list; // list of clients for this palette
+};
+
+
+
+//**************************************************************************
+// INLINE FUNCTIONS
+//**************************************************************************
-/*-------------------------------------------------
- rgb_to_rgb15 - convert an RGB triplet to
- a 15-bit OSD-specified RGB value
--------------------------------------------------*/
+//-------------------------------------------------
+// rgb_to_rgb15 - convert an RGB triplet to
+// a 15-bit OSD-specified RGB value
+//-------------------------------------------------
inline rgb15_t rgb_to_rgb15(rgb_t rgb)
{
@@ -177,9 +192,9 @@ inline rgb15_t rgb_to_rgb15(rgb_t rgb)
}
-/*-------------------------------------------------
- rgb_clamp - clamp an RGB component to 0-255
--------------------------------------------------*/
+//-------------------------------------------------
+// rgb_clamp - clamp an RGB component to 0-255
+//-------------------------------------------------
inline UINT8 rgb_clamp(INT32 value)
{
@@ -191,9 +206,9 @@ inline UINT8 rgb_clamp(INT32 value)
}
-/*-------------------------------------------------
- pal1bit - convert a 1-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal1bit - convert a 1-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal1bit(UINT8 bits)
{
@@ -201,9 +216,9 @@ inline UINT8 pal1bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal2bit - convert a 2-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal2bit - convert a 2-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal2bit(UINT8 bits)
{
@@ -212,9 +227,9 @@ inline UINT8 pal2bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal3bit - convert a 3-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal3bit - convert a 3-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal3bit(UINT8 bits)
{
@@ -223,9 +238,9 @@ inline UINT8 pal3bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal4bit - convert a 4-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal4bit - convert a 4-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal4bit(UINT8 bits)
{
@@ -234,9 +249,9 @@ inline UINT8 pal4bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal5bit - convert a 5-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal5bit - convert a 5-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal5bit(UINT8 bits)
{
@@ -245,9 +260,9 @@ inline UINT8 pal5bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal6bit - convert a 6-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal6bit - convert a 6-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal6bit(UINT8 bits)
{
@@ -256,9 +271,9 @@ inline UINT8 pal6bit(UINT8 bits)
}
-/*-------------------------------------------------
- pal7bit - convert a 7-bit value to 8 bits
--------------------------------------------------*/
+//-------------------------------------------------
+// pal7bit - convert a 7-bit value to 8 bits
+//-------------------------------------------------
inline UINT8 pal7bit(UINT8 bits)
{
@@ -285,10 +300,10 @@ inline UINT8 palexpand(UINT8 data)
}
-/*-------------------------------------------------
- pal332 - create a 3-3-2 color by extracting
- bits from a UINT32
--------------------------------------------------*/
+//-------------------------------------------------
+// pal332 - create a 3-3-2 color by extracting
+// bits from a UINT32
+//-------------------------------------------------
inline rgb_t pal332(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
{
@@ -296,10 +311,10 @@ inline rgb_t pal332(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
}
-/*-------------------------------------------------
- pal444 - create a 4-4-4 color by extracting
- bits from a UINT32
--------------------------------------------------*/
+//-------------------------------------------------
+// pal444 - create a 4-4-4 color by extracting
+// bits from a UINT32
+//-------------------------------------------------
inline rgb_t pal444(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
{
@@ -307,10 +322,10 @@ inline rgb_t pal444(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
}
-/*-------------------------------------------------
- pal555 - create a 5-5-5 color by extracting
- bits from a UINT32
--------------------------------------------------*/
+//-------------------------------------------------
+// pal555 - create a 5-5-5 color by extracting
+// bits from a UINT32
+//-------------------------------------------------
inline rgb_t pal555(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
{
@@ -318,10 +333,10 @@ inline rgb_t pal555(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
}
-/*-------------------------------------------------
- pal565 - create a 5-6-5 color by extracting
- bits from a UINT32
--------------------------------------------------*/
+//-------------------------------------------------
+// pal565 - create a 5-6-5 color by extracting
+// bits from a UINT32
+//-------------------------------------------------
inline rgb_t pal565(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
{
@@ -329,10 +344,10 @@ inline rgb_t pal565(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
}
-/*-------------------------------------------------
- pal888 - create a 8-8-8 color by extracting
- bits from a UINT32
--------------------------------------------------*/
+//-------------------------------------------------
+// pal888 - create a 8-8-8 color by extracting
+// bits from a UINT32
+//-------------------------------------------------
inline rgb_t pal888(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
{
@@ -340,4 +355,4 @@ inline rgb_t pal888(UINT32 data, UINT8 rshift, UINT8 gshift, UINT8 bshift)
}
-#endif /* __PALETTE_H__ */
+#endif // __PALETTE_H__ */
diff --git a/src/mame/drivers/othello.c b/src/mame/drivers/othello.c
index b23a5507d61..ba6a9ff5a9f 100644
--- a/src/mame/drivers/othello.c
+++ b/src/mame/drivers/othello.c
@@ -105,7 +105,7 @@ public:
static MC6845_UPDATE_ROW( update_row )
{
othello_state *state = device->machine().driver_data<othello_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int cx, x;
UINT32 data_address;
UINT32 tmp;
diff --git a/src/mame/video/carjmbre.c b/src/mame/video/carjmbre.c
index c7957e2d8c4..d1295a6547f 100644
--- a/src/mame/video/carjmbre.c
+++ b/src/mame/video/carjmbre.c
@@ -37,7 +37,7 @@ void carjmbre_state::palette_init()
rgb = compute_res_net_all(machine(), color_prom, &carjmbre_decode_info, &carjmbre_net_info);
palette_set_colors(machine(), 0, rgb, 64);
- palette_normalize_range(machine().palette, 0, 63, 0, 255);
+ machine().palette->normalize_range(0, 63);
auto_free(machine(), rgb);
}
diff --git a/src/mame/video/dkong.c b/src/mame/video/dkong.c
index 1d2a96e7a17..4a562838fa2 100644
--- a/src/mame/video/dkong.c
+++ b/src/mame/video/dkong.c
@@ -218,7 +218,7 @@ PALETTE_INIT_MEMBER(dkong_state,dkong2b)
palette_set_color_rgb(machine(),i,r,g,b);
}
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
color_prom += 512;
/* color_prom now points to the beginning of the character color codes */
@@ -257,7 +257,7 @@ PALETTE_INIT_MEMBER(dkong_state,dkong4b)
palette_set_color_rgb(machine(),i,r,g,b);
}
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
color_prom += 256;
/* color_prom now points to the beginning of the character color codes */
@@ -321,7 +321,7 @@ PALETTE_INIT_MEMBER(dkong_state,radarscp)
palette_set_color_rgb(machine(),RADARSCP_GRID_COL_OFFSET + i,r,g,b);
}
- palette_normalize_range(machine().palette, 0, RADARSCP_GRID_COL_OFFSET+7, 0, 255);
+ machine().palette->normalize_range(0, RADARSCP_GRID_COL_OFFSET+7);
color_prom += 256;
/* color_prom now points to the beginning of the character color codes */
@@ -383,7 +383,7 @@ PALETTE_INIT_MEMBER(dkong_state,radarscp1)
palette_set_color_rgb(machine(),RADARSCP_GRID_COL_OFFSET + i,r,g,b);
}
- palette_normalize_range(machine().palette, 0, RADARSCP_GRID_COL_OFFSET+7, 0, 255);
+ machine().palette->normalize_range(0, RADARSCP_GRID_COL_OFFSET+7);
color_prom += 512;
/* color_prom now points to the beginning of the character color codes */
@@ -434,7 +434,7 @@ PALETTE_INIT_MEMBER(dkong_state,dkong3)
rgb = compute_res_net_all(machine(), color_prom, &dkong3_decode_info, &dkong3_net_info);
palette_set_colors(machine(), 0, rgb, 256);
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
auto_free(machine(), rgb);
color_prom += 1024;
diff --git a/src/mame/video/k001604.c b/src/mame/video/k001604.c
index 6d03822cba7..cc7dfccb648 100644
--- a/src/mame/video/k001604.c
+++ b/src/mame/video/k001604.c
@@ -249,7 +249,7 @@ void k001604_device::draw_back_layer( bitmap_rgb32 &bitmap, const rectangle &cli
int ex = cliprect.max_x;
int ey = cliprect.max_y;
- const rgb_t *clut = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *clut = bitmap.palette()->entry_list_raw();
int window_x, window_y, window_xmask, window_ymask;
diff --git a/src/mame/video/m62.c b/src/mame/video/m62.c
index c12ee31b11f..6d7380ed6d6 100644
--- a/src/mame/video/m62.c
+++ b/src/mame/video/m62.c
@@ -184,17 +184,17 @@ void m62_state::m62_amplify_contrast(palette_t *palette, UINT32 numcolors)
{
// m62 palette is very dark, so amplify default contrast
UINT32 i, ymax=1;
- if (!numcolors) numcolors = palette_get_num_colors(palette);
+ if (!numcolors) numcolors = palette->num_colors();
// find maximum brightness
for (i=0;i < numcolors;i++)
{
- rgb_t rgb = palette_entry_get_color(palette,i);
+ rgb_t rgb = palette->entry_color(i);
UINT32 y = 299 * RGB_RED(rgb) + 587 * RGB_GREEN(rgb) + 114 * RGB_BLUE(rgb);
ymax = MAX(ymax, y);
}
- palette_set_contrast(palette, 255000.0/ymax);
+ palette->set_contrast(255000.0/ymax);
}
void m62_state::palette_init()
diff --git a/src/mame/video/malzak.c b/src/mame/video/malzak.c
index 70e3de07a97..4ad9c365ebe 100644
--- a/src/mame/video/malzak.c
+++ b/src/mame/video/malzak.c
@@ -18,7 +18,7 @@
UINT32 malzak_state::screen_update_malzak(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int sx, sy;
int x,y;
diff --git a/src/mame/video/mario.c b/src/mame/video/mario.c
index dfc16e924ca..76011da0c3c 100644
--- a/src/mame/video/mario.c
+++ b/src/mame/video/mario.c
@@ -74,8 +74,8 @@ void mario_state::palette_init()
palette_set_colors(machine(), 256, rgb, 256);
auto_free(machine(), rgb);
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
- palette_normalize_range(machine().palette, 256, 511, 0, 255);
+ machine().palette->normalize_range(0, 255);
+ machine().palette->normalize_range(256, 511);
}
WRITE8_MEMBER(mario_state::mario_videoram_w)
diff --git a/src/mame/video/phoenix.c b/src/mame/video/phoenix.c
index 467c6e3f067..913f9e23ce8 100644
--- a/src/mame/video/phoenix.c
+++ b/src/mame/video/phoenix.c
@@ -89,7 +89,7 @@ PALETTE_INIT_MEMBER(phoenix_state,phoenix)
col = ((i << 3 ) & 0x18) | ((i>>2) & 0x07) | (i & 0x60);
palette_set_color(machine(),i,rgb[col]);
}
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
auto_free(machine(), rgb);
}
@@ -107,7 +107,7 @@ PALETTE_INIT_MEMBER(phoenix_state,survival)
col = ((i << 3 ) & 0x18) | ((i>>2) & 0x07) | (i & 0x60);
palette_set_color(machine(),i,rgb[col]);
}
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
auto_free(machine(), rgb);
}
@@ -125,7 +125,7 @@ PALETTE_INIT_MEMBER(phoenix_state,pleiads)
col = ((i << 3 ) & 0x18) | ((i>>2) & 0x07) | (i & 0xE0);
palette_set_color(machine(),i,rgb[col]);
}
- palette_normalize_range(machine().palette, 0, 255, 0, 255);
+ machine().palette->normalize_range(0, 255);
auto_free(machine(), rgb);
}
diff --git a/src/mame/video/popper.c b/src/mame/video/popper.c
index 78d2ed72261..e1aa09634b6 100644
--- a/src/mame/video/popper.c
+++ b/src/mame/video/popper.c
@@ -45,7 +45,7 @@ void popper_state::palette_init()
rgb = compute_res_net_all(machine(), color_prom, &popper_decode_info, &popper_net_info);
palette_set_colors(machine(), 0, rgb, 64);
- palette_normalize_range(machine().palette, 0, 63, 0, 255);
+ machine().palette->normalize_range(0, 63);
auto_free(machine(), rgb);
}
diff --git a/src/mame/video/taito_b.c b/src/mame/video/taito_b.c
index 926b28cd0c8..5d255595876 100644
--- a/src/mame/video/taito_b.c
+++ b/src/mame/video/taito_b.c
@@ -396,7 +396,7 @@ UINT32 taitob_state::screen_update_taitob(screen_device &screen, bitmap_ind16 &b
UINT32 taitob_state::screen_update_realpunc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
address_space &space = machine().driver_data()->generic_space();
- const rgb_t *palette = palette_entry_list_adjusted(machine().palette);
+ const rgb_t *palette = machine().palette->entry_list_adjusted();
UINT8 video_control = m_tc0180vcu->get_videoctrl(space, 0);
int x, y;
diff --git a/src/mame/video/toobin.c b/src/mame/video/toobin.c
index 530ed38fa79..949de01a99a 100644
--- a/src/mame/video/toobin.c
+++ b/src/mame/video/toobin.c
@@ -223,7 +223,7 @@ UINT32 toobin_state::screen_update_toobin(screen_device &screen, bitmap_rgb32 &b
/* draw and merge the MO */
bitmap_ind16 &mobitmap = m_mob->bitmap();
- const rgb_t *palette = palette_entry_list_adjusted(machine().palette);
+ const rgb_t *palette = machine().palette->entry_list_adjusted();
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
UINT32 *dest = &bitmap.pix32(y);
diff --git a/src/mess/drivers/a5105.c b/src/mess/drivers/a5105.c
index d8984464efa..e7ae2cce5cb 100644
--- a/src/mess/drivers/a5105.c
+++ b/src/mess/drivers/a5105.c
@@ -92,7 +92,7 @@ public:
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
{
a5105_state *state = device->machine().driver_data<a5105_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi,gfx;
UINT8 pen;
@@ -110,7 +110,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
a5105_state *state = device->machine().driver_data<a5105_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int x;
int xi,yi;
int tile,color;
diff --git a/src/mess/drivers/alphatro.c b/src/mess/drivers/alphatro.c
index 888a08cb641..a50af5ea56a 100644
--- a/src/mess/drivers/alphatro.c
+++ b/src/mess/drivers/alphatro.c
@@ -156,7 +156,7 @@ void alphatro_state::video_start()
static MC6845_UPDATE_ROW( alphatro_update_row )
{
alphatro_state *state = device->machine().driver_data<alphatro_state>();
- const rgb_t *pens = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *pens = bitmap.palette()->entry_list_raw();
bool palette = BIT(state->ioport("CONFIG")->read(), 5);
UINT8 chr,gfx,attr,fg,inv;
UINT16 mem,x;
diff --git a/src/mess/drivers/apc.c b/src/mess/drivers/apc.c
index e7e3daaea98..2cf150a7832 100644
--- a/src/mess/drivers/apc.c
+++ b/src/mess/drivers/apc.c
@@ -190,7 +190,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
apc_state *state = device->machine().driver_data<apc_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi,yi,yi_trans;
int x;
UINT8 char_size;
diff --git a/src/mess/drivers/applix.c b/src/mess/drivers/applix.c
index 163b9af48ed..908789ab8e5 100644
--- a/src/mess/drivers/applix.c
+++ b/src/mess/drivers/applix.c
@@ -774,7 +774,7 @@ static MC6845_UPDATE_ROW( applix_update_row )
// Need to display a border colour.
// There is a monochrome mode, but no info found as yet.
applix_state *state = device->machine().driver_data<applix_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 i;
UINT16 chr,x;
UINT32 mem, vidbase = (state->m_video_latch & 15) << 14, *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/bigbord2.c b/src/mess/drivers/bigbord2.c
index 4fd96c3c1f7..c2bea830d54 100644
--- a/src/mess/drivers/bigbord2.c
+++ b/src/mess/drivers/bigbord2.c
@@ -585,7 +585,7 @@ GFXDECODE_END
MC6845_UPDATE_ROW( bigbord2_update_row )
{
bigbord2_state *state = device->machine().driver_data<bigbord2_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,inv;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/bml3.c b/src/mess/drivers/bml3.c
index 9a829d120f6..c6b7ceb752f 100644
--- a/src/mess/drivers/bml3.c
+++ b/src/mess/drivers/bml3.c
@@ -586,7 +586,7 @@ INPUT_PORTS_END
static MC6845_UPDATE_ROW( update_row )
{
bml3_state *state = device->machine().driver_data<bml3_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
// The MB-6890 has a 5-bit colour RAM region. The meaning of the bits are:
// 0: blue
// 1: red
diff --git a/src/mess/drivers/camplynx.c b/src/mess/drivers/camplynx.c
index 99494bf6c30..745fea461ce 100644
--- a/src/mess/drivers/camplynx.c
+++ b/src/mess/drivers/camplynx.c
@@ -384,7 +384,7 @@ void camplynx_state::palette_init()
static MC6845_UPDATE_ROW( lynx48k_update_row )
{
UINT8 *RAM = device->machine().root_device().memregion("maincpu")->base();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 r,g,b;
UINT32 x, *p = &bitmap.pix32(y);
@@ -408,7 +408,7 @@ static MC6845_UPDATE_ROW( lynx48k_update_row )
static MC6845_UPDATE_ROW( lynx128k_update_row )
{
UINT8 *RAM = device->machine().root_device().memregion("maincpu")->base();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 r,g,b;
UINT32 x, *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/dim68k.c b/src/mess/drivers/dim68k.c
index a1c0478e31a..5d83e3d38bd 100644
--- a/src/mess/drivers/dim68k.c
+++ b/src/mess/drivers/dim68k.c
@@ -225,7 +225,7 @@ void dim68k_state::video_start()
MC6845_UPDATE_ROW( dim68k_update_row )
{
dim68k_state *state = device->machine().driver_data<dim68k_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,x,xx,inv;
UINT16 chr16=0x2020; // set to spaces if screen is off
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/dmv.c b/src/mess/drivers/dmv.c
index 03eb061d69c..7d42154522b 100644
--- a/src/mess/drivers/dmv.c
+++ b/src/mess/drivers/dmv.c
@@ -151,7 +151,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
dmv_state *state = device->machine().driver_data<dmv_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 * chargen = state->memregion("maincpu")->base() + 0x1000;
for( int x = 0; x < pitch; x++ )
diff --git a/src/mess/drivers/ec65.c b/src/mess/drivers/ec65.c
index 6fb0ca2e72d..2065e1b2931 100644
--- a/src/mess/drivers/ec65.c
+++ b/src/mess/drivers/ec65.c
@@ -134,7 +134,7 @@ void ec65_state::video_start()
static MC6845_UPDATE_ROW( ec65_update_row )
{
ec65_state *state = device->machine().driver_data<ec65_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,inv;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/einstein.c b/src/mess/drivers/einstein.c
index 8f3637fb94a..43fa006be90 100644
--- a/src/mess/drivers/einstein.c
+++ b/src/mess/drivers/einstein.c
@@ -102,7 +102,7 @@ READ8_MEMBER(einstein_state::einstein_80col_ram_r)
static MC6845_UPDATE_ROW( einstein_6845_update_row )
{
einstein_state *einstein = device->machine().driver_data<einstein_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *data = einstein->m_region_gfx1->base();
UINT8 char_code, data_byte;
int i, x;
diff --git a/src/mess/drivers/h19.c b/src/mess/drivers/h19.c
index fcbc75bb431..6c833bf2973 100644
--- a/src/mess/drivers/h19.c
+++ b/src/mess/drivers/h19.c
@@ -321,7 +321,7 @@ void h19_state::video_start()
static MC6845_UPDATE_ROW( h19_update_row )
{
h19_state *state = device->machine().driver_data<h19_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/if800.c b/src/mess/drivers/if800.c
index eb5004cb9a1..4eab0039d7b 100644
--- a/src/mess/drivers/if800.c
+++ b/src/mess/drivers/if800.c
@@ -32,7 +32,7 @@ public:
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
{
if800_state *state = device->machine().driver_data<if800_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi,gfx;
UINT8 pen;
diff --git a/src/mess/drivers/ipds.c b/src/mess/drivers/ipds.c
index 472c62018e5..7ef475023ba 100644
--- a/src/mess/drivers/ipds.c
+++ b/src/mess/drivers/ipds.c
@@ -81,7 +81,7 @@ static I8275_DISPLAY_PIXELS(ipds_display_pixels)
{
int i;
ipds_state *state = device->machine().driver_data<ipds_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *charmap = state->memregion("chargen")->base();
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
diff --git a/src/mess/drivers/lola8a.c b/src/mess/drivers/lola8a.c
index eb3231823be..6ad1b371811 100644
--- a/src/mess/drivers/lola8a.c
+++ b/src/mess/drivers/lola8a.c
@@ -197,7 +197,7 @@ static MC6845_UPDATE_ROW( lola8a_update_row )
{
lola8a_state *state = device->machine().driver_data<lola8a_state>();
address_space &program = state->m_maincpu->space(AS_PROGRAM);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
for (int sx = 0; sx < x_count; sx++)
{
diff --git a/src/mess/drivers/mx2178.c b/src/mess/drivers/mx2178.c
index cb875ade955..ca30c554dc7 100644
--- a/src/mess/drivers/mx2178.c
+++ b/src/mess/drivers/mx2178.c
@@ -106,7 +106,7 @@ static ACIA6850_INTERFACE( acia_intf )
static MC6845_UPDATE_ROW( update_row )
{
mx2178_state *state = device->machine().driver_data<mx2178_state>();
- const rgb_t *pens = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *pens = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/mycom.c b/src/mess/drivers/mycom.c
index dc1b8daa2c2..c286ce74754 100644
--- a/src/mess/drivers/mycom.c
+++ b/src/mess/drivers/mycom.c
@@ -130,7 +130,7 @@ void mycom_state::video_start()
static MC6845_UPDATE_ROW( mycom_update_row )
{
mycom_state *state = device->machine().driver_data<mycom_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx=0,z;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/mz3500.c b/src/mess/drivers/mz3500.c
index 82a3a57eb5e..6e4e3d93531 100644
--- a/src/mess/drivers/mz3500.c
+++ b/src/mess/drivers/mz3500.c
@@ -147,7 +147,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
mz3500_state *state = device->machine().driver_data<mz3500_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int x;
int xi,yi;
int tile;
diff --git a/src/mess/drivers/mz6500.c b/src/mess/drivers/mz6500.c
index 49720c5bc81..b2c9b63de7a 100644
--- a/src/mess/drivers/mz6500.c
+++ b/src/mess/drivers/mz6500.c
@@ -37,7 +37,7 @@ public:
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
{
mz6500_state *state = device->machine().driver_data<mz6500_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int gfx[3];
UINT8 i,pen;
diff --git a/src/mess/drivers/pasopia.c b/src/mess/drivers/pasopia.c
index 4d8e5569d8b..318d99004d1 100644
--- a/src/mess/drivers/pasopia.c
+++ b/src/mess/drivers/pasopia.c
@@ -86,7 +86,7 @@ void pasopia_state::video_start()
MC6845_UPDATE_ROW( pasopia_update_row )
{
pasopia_state *state = device->machine().driver_data<pasopia_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *m_p_chargen = state->memregion("chargen")->base();
UINT8 chr,gfx,fg=7,bg=0; // colours need to be determined
UINT16 mem,x;
diff --git a/src/mess/drivers/pc9801.c b/src/mess/drivers/pc9801.c
index 03384d0e758..3247fb5daa3 100644
--- a/src/mess/drivers/pc9801.c
+++ b/src/mess/drivers/pc9801.c
@@ -787,7 +787,7 @@ UINT32 pc9801_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
{
pc9801_state *state = device->machine().driver_data<pc9801_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi;
int res_x,res_y;
UINT8 pen;
@@ -849,7 +849,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
pc9801_state *state = device->machine().driver_data<pc9801_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi,yi;
int x;
UINT8 char_size;
diff --git a/src/mess/drivers/pyl601.c b/src/mess/drivers/pyl601.c
index 1ea39b27246..b1edae25d4e 100644
--- a/src/mess/drivers/pyl601.c
+++ b/src/mess/drivers/pyl601.c
@@ -385,7 +385,7 @@ void pyl601_state::video_start()
static MC6845_UPDATE_ROW( pyl601_update_row )
{
pyl601_state *state = device->machine().driver_data<pyl601_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *charrom = state->memregion("chargen")->base();
int column, bit, i;
@@ -428,7 +428,7 @@ static MC6845_UPDATE_ROW( pyl601_update_row )
static MC6845_UPDATE_ROW( pyl601a_update_row )
{
pyl601_state *state = device->machine().driver_data<pyl601_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *charrom = state->memregion("chargen")->base();
int column, bit, i;
diff --git a/src/mess/drivers/qx10.c b/src/mess/drivers/qx10.c
index 52920c5b419..4ab93e02fce 100644
--- a/src/mess/drivers/qx10.c
+++ b/src/mess/drivers/qx10.c
@@ -152,7 +152,7 @@ public:
static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
{
qx10_state *state = device->machine().driver_data<qx10_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int xi,gfx[3];
UINT8 pen;
@@ -182,7 +182,7 @@ static UPD7220_DISPLAY_PIXELS( hgdc_display_pixels )
static UPD7220_DRAW_TEXT_LINE( hgdc_draw_text )
{
qx10_state *state = device->machine().driver_data<qx10_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int x;
int xi,yi;
int tile;
diff --git a/src/mess/drivers/samcoupe.c b/src/mess/drivers/samcoupe.c
index e8991d7588b..5c94ff87d27 100644
--- a/src/mess/drivers/samcoupe.c
+++ b/src/mess/drivers/samcoupe.c
@@ -508,7 +508,7 @@ void samcoupe_state::palette_init()
palette_set_color(machine(), i, MAKE_RGB(r, g, b));
}
- palette_normalize_range(machine().palette, 0, 127, 0, 255);
+ machine().palette->normalize_range(0, 127);
}
diff --git a/src/mess/drivers/sapi1.c b/src/mess/drivers/sapi1.c
index 69654e7ea59..40a7f8e528e 100644
--- a/src/mess/drivers/sapi1.c
+++ b/src/mess/drivers/sapi1.c
@@ -407,7 +407,7 @@ UINT32 sapi1_state::screen_update_sapi3(screen_device &screen, bitmap_ind16 &bit
static MC6845_UPDATE_ROW( update_row )
{
sapi1_state *state = device->machine().driver_data<sapi1_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,inv;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/sm1800.c b/src/mess/drivers/sm1800.c
index 4e0e05aa033..e6ba7dde7b0 100644
--- a/src/mess/drivers/sm1800.c
+++ b/src/mess/drivers/sm1800.c
@@ -88,7 +88,7 @@ static I8275_DISPLAY_PIXELS(sm1800_display_pixels)
{
int i;
sm1800_state *state = device->machine().driver_data<sm1800_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *charmap = state->memregion("chargen")->base();
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp)
diff --git a/src/mess/drivers/tavernie.c b/src/mess/drivers/tavernie.c
index 0fdd7314c39..d754d87d6af 100644
--- a/src/mess/drivers/tavernie.c
+++ b/src/mess/drivers/tavernie.c
@@ -199,7 +199,7 @@ WRITE8_MEMBER( tavernie_state::ds_w )
static MC6845_UPDATE_ROW( update_row )
{
tavernie_state *state = device->machine().driver_data<tavernie_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx=0;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/tiki100.c b/src/mess/drivers/tiki100.c
index f71b01d81c2..a3456c47246 100644
--- a/src/mess/drivers/tiki100.c
+++ b/src/mess/drivers/tiki100.c
@@ -394,7 +394,7 @@ INPUT_PORTS_END
UINT32 tiki100_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT16 addr = (m_scroll << 7);
int sx, y, pixel, mode = (m_mode >> 4) & 0x03;
diff --git a/src/mess/drivers/tim100.c b/src/mess/drivers/tim100.c
index 92de929ffad..d100ae55215 100644
--- a/src/mess/drivers/tim100.c
+++ b/src/mess/drivers/tim100.c
@@ -82,7 +82,7 @@ static I8275_DISPLAY_PIXELS(tim100_display_pixels)
{
tim100_state *state = device->machine().driver_data<tim100_state>();
int i;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *charmap = state->memregion("chargen")->base();
UINT8 pixels = charmap[(linecount & 15) + (charcode << 4)];
if (vsp)
diff --git a/src/mess/drivers/tvc.c b/src/mess/drivers/tvc.c
index 2196ef5b2b1..22385115c2e 100644
--- a/src/mess/drivers/tvc.c
+++ b/src/mess/drivers/tvc.c
@@ -513,7 +513,7 @@ void tvc_state::machine_reset()
static MC6845_UPDATE_ROW( tvc_update_row )
{
tvc_state *state = device->machine().driver_data<tvc_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vram = state->memregion("vram")->base() + ((state->m_vram_bank & 0x30)<<10);
UINT16 offset = ((ma*4 + ra*0x40) & 0x3fff);
diff --git a/src/mess/drivers/unior.c b/src/mess/drivers/unior.c
index 2694e8825c3..1cf120dad48 100644
--- a/src/mess/drivers/unior.c
+++ b/src/mess/drivers/unior.c
@@ -252,7 +252,7 @@ WRITE8_MEMBER( unior_state::scroll_w )
static I8275_DISPLAY_PIXELS(display_pixels)
{
unior_state *state = device->machine().driver_data<unior_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 gfx = state->m_p_chargen[(linecount & 7) | (charcode << 3)];
if (vsp)
gfx = 0;
diff --git a/src/mess/drivers/v6809.c b/src/mess/drivers/v6809.c
index d6eb7276d21..afbb78d63a3 100644
--- a/src/mess/drivers/v6809.c
+++ b/src/mess/drivers/v6809.c
@@ -160,7 +160,7 @@ GFXDECODE_END
MC6845_UPDATE_ROW( v6809_update_row )
{
v6809_state *state = device->machine().driver_data<v6809_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/drivers/victor9k.c b/src/mess/drivers/victor9k.c
index 8fff4ec9bf5..682f40e1bc1 100644
--- a/src/mess/drivers/victor9k.c
+++ b/src/mess/drivers/victor9k.c
@@ -268,7 +268,7 @@ static MC6845_UPDATE_ROW( victor9k_update_row )
{
victor9k_state *state = device->machine().driver_data<victor9k_state>();
address_space &program = state->m_maincpu->space(AS_PROGRAM);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
if (BIT(ma, 13))
{
diff --git a/src/mess/drivers/zorba.c b/src/mess/drivers/zorba.c
index 15810763e5d..930d9e7afee 100644
--- a/src/mess/drivers/zorba.c
+++ b/src/mess/drivers/zorba.c
@@ -278,7 +278,7 @@ static I8275_DISPLAY_PIXELS( zorba_update_chr )
{
int i;
zorba_state *state = device->machine().driver_data<zorba_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 gfx = state->m_p_chargen[(linecount & 15) + (charcode << 4)];
if (vsp)
diff --git a/src/mess/drivers/zrt80.c b/src/mess/drivers/zrt80.c
index 91639642653..72092fbfb6d 100644
--- a/src/mess/drivers/zrt80.c
+++ b/src/mess/drivers/zrt80.c
@@ -214,7 +214,7 @@ void zrt80_state::video_start()
static MC6845_UPDATE_ROW( zrt80_update_row )
{
zrt80_state *state = device->machine().driver_data<zrt80_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,inv;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/machine/svi318.c b/src/mess/machine/svi318.c
index 707efa8fdfb..ff32a5632fa 100644
--- a/src/mess/machine/svi318.c
+++ b/src/mess/machine/svi318.c
@@ -326,7 +326,7 @@ READ8_MEMBER(svi318_state::svi318_fdc_irqdrq_r)
MC6845_UPDATE_ROW( svi806_crtc6845_update_row )
{
svi318_state *state = device->machine().driver_data<svi318_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
for( i = 0; i < x_count; i++ )
diff --git a/src/mess/video/bbc.c b/src/mess/video/bbc.c
index b0d902363f1..37d21946ba9 100644
--- a/src/mess/video/bbc.c
+++ b/src/mess/video/bbc.c
@@ -165,7 +165,7 @@ WRITE8_MEMBER(bbc_state::bbc_videoULA_w)
static MC6845_UPDATE_ROW( vid_update_row )
{
bbc_state *state = device->machine().driver_data<bbc_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
if (state->m_videoULA_teletext_normal_select)
{
diff --git a/src/mess/video/dgn_beta.c b/src/mess/video/dgn_beta.c
index 96f6d58ff5b..6cb4d653b3c 100644
--- a/src/mess/video/dgn_beta.c
+++ b/src/mess/video/dgn_beta.c
@@ -99,7 +99,7 @@ the access to the video memory is unclear to me at the moment.
static MC6845_UPDATE_ROW( dgnbeta_update_row )
{
dgn_beta_state *state = device->machine().driver_data<dgn_beta_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = state->m_videoram;
UINT32 *p = &bitmap.pix32(y);
int i;
diff --git a/src/mess/video/ef9345.c b/src/mess/video/ef9345.c
index adc62c6e56d..abb84049a49 100644
--- a/src/mess/video/ef9345.c
+++ b/src/mess/video/ef9345.c
@@ -206,7 +206,7 @@ void ef9345_device::draw_char_40(UINT8 *c, UINT16 x, UINT16 y)
if (y * 10 >= m_screen->height() || x * 8 >= m_screen->width())
return;
- const rgb_t *palette = palette_entry_list_raw(m_screen_out.palette());
+ const rgb_t *palette = m_screen_out.palette()->entry_list_raw();
for(int i = 0; i < 10; i++)
for(int j = 0; j < 8; j++)
m_screen_out.pix32(y * 10 + i, x * 8 + j) = palette[c[8 * i + j] & 0x07];
@@ -219,7 +219,7 @@ void ef9345_device::draw_char_80(UINT8 *c, UINT16 x, UINT16 y)
if (y * 10 >= m_screen->height() || x * 6 >= m_screen->width())
return;
- const rgb_t *palette = palette_entry_list_raw(m_screen_out.palette());
+ const rgb_t *palette = m_screen_out.palette()->entry_list_raw();
for(int i = 0; i < 10; i++)
for(int j = 0; j < 6; j++)
m_screen_out.pix32(y * 10 + i, x * 6 + j) = palette[c[6 * i + j] & 0x07];
diff --git a/src/mess/video/isa_cga.c b/src/mess/video/isa_cga.c
index 2ab2f89a1af..f8e6e619bef 100644
--- a/src/mess/video/isa_cga.c
+++ b/src/mess/video/isa_cga.c
@@ -841,7 +841,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -882,7 +882,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_comp_grey_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -922,7 +922,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -962,7 +962,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1007,7 +1007,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row_si )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1060,7 +1060,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1109,7 +1109,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1168,7 +1168,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1213,7 +1213,7 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
int i;
running_machine &machine = device->machine();
@@ -1250,7 +1250,7 @@ static MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row )
isa8_cga_device *cga = downcast<isa8_cga_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 fg = cga->m_color_select & 0x0F;
int i;
running_machine &machine = device->machine();
@@ -1720,7 +1720,7 @@ static MC6845_UPDATE_ROW( pc1512_gfx_4bpp_update_row )
isa8_cga_pc1512_device *cga = downcast<isa8_cga_pc1512_device *>(device->owner());
UINT8 *videoram = cga->m_vram + cga->m_start_offset;
UINT32 *p = &bitmap.pix32(y);
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT16 offset_base = ra << 13;
int j;
running_machine &machine = device->machine();
@@ -2084,7 +2084,7 @@ void isa8_wyse700_device::device_reset()
UINT32 isa8_wyse700_device::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
if (m_control & 0x08) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 fg = m_color_select & 0x0F;
UINT32 addr = 0;
for (int y = 0; y < 800; y++) {
diff --git a/src/mess/video/isa_mda.c b/src/mess/video/isa_mda.c
index 662901b6b0d..ad3dbc02718 100644
--- a/src/mess/video/isa_mda.c
+++ b/src/mess/video/isa_mda.c
@@ -211,7 +211,7 @@ void isa8_mda_device::device_reset()
static MC6845_UPDATE_ROW( mda_text_inten_update_row )
{
isa8_mda_device *mda = downcast<isa8_mda_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
@@ -285,7 +285,7 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row )
static MC6845_UPDATE_ROW( mda_text_blink_update_row )
{
isa8_mda_device *mda = downcast<isa8_mda_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
@@ -608,7 +608,7 @@ void isa8_hercules_device::device_reset()
static MC6845_UPDATE_ROW( hercules_gfx_update_row )
{
isa8_hercules_device *herc = downcast<isa8_hercules_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 gfx_base = ( ( herc->m_mode_control & 0x80 ) ? 0x8000 : 0x0000 ) | ( ( ra & 0x03 ) << 13 );
int i;
diff --git a/src/mess/video/kaypro.c b/src/mess/video/kaypro.c
index e1a0925c25b..56e50c36971 100644
--- a/src/mess/video/kaypro.c
+++ b/src/mess/video/kaypro.c
@@ -137,7 +137,7 @@ UINT32 kaypro_state::screen_update_kaypro2x(screen_device &screen, bitmap_rgb32
MC6845_UPDATE_ROW( kaypro2x_update_row )
{
kaypro_state *state = device->machine().driver_data<kaypro_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 x;
UINT8 gfx,fg,bg;
diff --git a/src/mess/video/mbc55x.c b/src/mess/video/mbc55x.c
index f8ba1646970..75843e7985b 100644
--- a/src/mess/video/mbc55x.c
+++ b/src/mess/video/mbc55x.c
@@ -90,7 +90,7 @@ static void video_debug(running_machine &machine, int ref, int params, const cha
static MC6845_UPDATE_ROW( vid_update_row )
{
mbc55x_state *mstate = device->machine().driver_data<mbc55x_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *ram = &mstate->m_ram->pointer()[0];
UINT8 *red = &mstate->m_video_mem[RED_PLANE_OFFSET];
diff --git a/src/mess/video/mbee.c b/src/mess/video/mbee.c
index c7ec078323e..29f55d311c5 100644
--- a/src/mess/video/mbee.c
+++ b/src/mess/video/mbee.c
@@ -419,7 +419,7 @@ MC6845_ON_UPDATE_ADDR_CHANGED( mbee256_update_addr )
MC6845_UPDATE_ROW( mbee_update_row )
{
mbee_state *state = device->machine().driver_data<mbee_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);
@@ -458,7 +458,7 @@ MC6845_UPDATE_ROW( mbee_update_row )
MC6845_UPDATE_ROW( mbeeic_update_row )
{
mbee_state *state = device->machine().driver_data<mbee_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,gfx,fg,bg;
UINT16 mem,x,col;
UINT16 colourm = (state->m_08 & 0x0e) << 7;
@@ -502,7 +502,7 @@ MC6845_UPDATE_ROW( mbeeic_update_row )
MC6845_UPDATE_ROW( mbeeppc_update_row )
{
mbee_state *state = device->machine().driver_data<mbee_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 gfx,fg,bg;
UINT16 mem,x,col,chr;
UINT32 *p = &bitmap.pix32(y);
diff --git a/src/mess/video/pc_aga.c b/src/mess/video/pc_aga.c
index 46baa88ad50..7ca4d933690 100644
--- a/src/mess/video/pc_aga.c
+++ b/src/mess/video/pc_aga.c
@@ -124,7 +124,7 @@ static WRITE_LINE_DEVICE_HANDLER( aga_vsync_changed ) {
/* colors need fixing in the mda_text_* functions ! */
static MC6845_UPDATE_ROW( mda_text_inten_update_row ) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = aga.videoram;
UINT32 *p = &bitmap.pix32(y);
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
@@ -185,7 +185,7 @@ static MC6845_UPDATE_ROW( mda_text_inten_update_row ) {
static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
UINT8 *videoram = aga.videoram;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT16 chr_base = ( ra & 0x08 ) ? 0x800 | ( ra & 0x07 ) : ra;
int i;
@@ -246,7 +246,7 @@ static MC6845_UPDATE_ROW( mda_text_blink_update_row ) {
static MC6845_UPDATE_ROW( cga_text_inten_update_row ) {
UINT8 *videoram = aga.videoram;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -275,7 +275,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_update_row ) {
}
static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row ) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = aga.videoram;
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -304,7 +304,7 @@ static MC6845_UPDATE_ROW( cga_text_inten_alt_update_row ) {
}
static MC6845_UPDATE_ROW( cga_text_blink_update_row ) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = aga.videoram;
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -337,7 +337,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_update_row ) {
}
static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row ) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = aga.videoram;
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -372,7 +372,7 @@ static MC6845_UPDATE_ROW( cga_text_blink_alt_update_row ) {
}
static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row ) {
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 *videoram = aga.videoram;
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -398,7 +398,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bppl_update_row ) {
static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row ) {
UINT8 *videoram = aga.videoram;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -431,7 +431,7 @@ static MC6845_UPDATE_ROW( cga_gfx_4bpph_update_row ) {
static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row ) {
UINT8 *videoram = aga.videoram;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -456,7 +456,7 @@ static MC6845_UPDATE_ROW( cga_gfx_2bpp_update_row ) {
static MC6845_UPDATE_ROW( cga_gfx_1bpp_update_row ) {
UINT8 *videoram = aga.videoram;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 fg = aga.cga_color_select & 0x0F;
int i;
diff --git a/src/mess/video/pc_t1t.c b/src/mess/video/pc_t1t.c
index a3d65e8fdb8..ad8cd12b47d 100644
--- a/src/mess/video/pc_t1t.c
+++ b/src/mess/video/pc_t1t.c
@@ -182,7 +182,7 @@ PALETTE_INIT_MEMBER( pc_t1t_device, pcjr )
static MC6845_UPDATE_ROW( t1000_text_inten_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -216,7 +216,7 @@ static MC6845_UPDATE_ROW( t1000_text_inten_update_row )
static MC6845_UPDATE_ROW( t1000_text_blink_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -258,7 +258,7 @@ static MC6845_UPDATE_ROW( t1000_text_blink_update_row )
static MC6845_UPDATE_ROW( pcjx_text_update_row )
{
pcvideo_pcjr_device *pcjx = downcast<pcvideo_pcjr_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
int i;
@@ -300,7 +300,7 @@ static MC6845_UPDATE_ROW( pcjx_text_update_row )
static MC6845_UPDATE_ROW( t1000_gfx_4bpp_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vid = t1t->m_displayram + ( ra << 13 );
int i;
@@ -328,7 +328,7 @@ static MC6845_UPDATE_ROW( t1000_gfx_4bpp_update_row )
static MC6845_UPDATE_ROW( t1000_gfx_2bpp_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vid = t1t->m_displayram + ( ra << 13 );
int i;
@@ -356,7 +356,7 @@ static MC6845_UPDATE_ROW( t1000_gfx_2bpp_update_row )
static MC6845_UPDATE_ROW( pcjr_gfx_2bpp_high_update_row )
{
pcvideo_pcjr_device *pcjr = downcast<pcvideo_pcjr_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vid = pcjr->m_displayram + ( ra << 13 );
int i;
@@ -382,7 +382,7 @@ static MC6845_UPDATE_ROW( pcjr_gfx_2bpp_high_update_row )
static MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vid = t1t->m_displayram + ( ra << 13 );
int i;
@@ -410,7 +410,7 @@ static MC6845_UPDATE_ROW( t1000_gfx_2bpp_tga_update_row )
static MC6845_UPDATE_ROW( t1000_gfx_1bpp_update_row )
{
pc_t1t_device *t1t = downcast<pc_t1t_device *>(device->owner());
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(y);
UINT8 *vid = t1t->m_displayram + ( ra << 13 );
UINT8 fg = t1t->m_palette_base + t1t->m_reg.data[0x11];
diff --git a/src/mess/video/poisk1.c b/src/mess/video/poisk1.c
index 4ba28ee83b0..f7c6b5bd6dc 100644
--- a/src/mess/video/poisk1.c
+++ b/src/mess/video/poisk1.c
@@ -184,7 +184,7 @@ void p1_state::set_palette_luts(void)
POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
{
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(ra);
UINT16 odd, offset;
int i;
@@ -211,7 +211,7 @@ POISK1_UPDATE_ROW( p1_state::cga_gfx_2bpp_update_row )
POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
{
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(ra);
UINT8 fg = 15, bg = BG_COLOR(m_video.color_select_68);
UINT16 odd, offset;
@@ -243,7 +243,7 @@ POISK1_UPDATE_ROW( p1_state::cga_gfx_1bpp_update_row )
POISK1_UPDATE_ROW( p1_state::poisk1_gfx_1bpp_update_row )
{
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT32 *p = &bitmap.pix32(ra);
UINT8 fg, bg = BG_COLOR(m_video.color_select_68);
UINT16 odd, offset;
diff --git a/src/mess/video/radio86.c b/src/mess/video/radio86.c
index 50523c8c28d..26fc4e1d092 100644
--- a/src/mess/video/radio86.c
+++ b/src/mess/video/radio86.c
@@ -15,7 +15,7 @@ I8275_DISPLAY_PIXELS(radio86_display_pixels)
{
radio86_state *state = device->machine().driver_data<radio86_state>();
int i;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
const UINT8 *charmap = state->m_charmap;
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp) {
@@ -37,7 +37,7 @@ I8275_DISPLAY_PIXELS(mikrosha_display_pixels)
{
radio86_state *state = device->machine().driver_data<radio86_state>();
int i;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
const UINT8 *charmap = state->m_charmap + (state->m_mikrosha_font_page & 1) * 0x400;
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp) {
@@ -58,7 +58,7 @@ I8275_DISPLAY_PIXELS(apogee_display_pixels)
{
radio86_state *state = device->machine().driver_data<radio86_state>();
int i;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
const UINT8 *charmap = state->m_charmap + (gpa & 1) * 0x400;
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp) {
@@ -79,7 +79,7 @@ I8275_DISPLAY_PIXELS(partner_display_pixels)
{
radio86_state *state = device->machine().driver_data<radio86_state>();
int i;
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
const UINT8 *charmap = state->m_charmap + 0x400 * (gpa * 2 + hlgt);
UINT8 pixels = charmap[(linecount & 7) + (charcode << 3)] ^ 0xff;
if (vsp) {
diff --git a/src/mess/video/super80.c b/src/mess/video/super80.c
index 54aefacf773..7c530455546 100644
--- a/src/mess/video/super80.c
+++ b/src/mess/video/super80.c
@@ -389,7 +389,7 @@ UINT32 super80_state::screen_update_super80v(screen_device &screen, bitmap_rgb32
MC6845_UPDATE_ROW( super80v_update_row )
{
super80_state *state = device->machine().driver_data<super80_state>();
- const rgb_t *palette = palette_entry_list_raw(bitmap.palette());
+ const rgb_t *palette = bitmap.palette()->entry_list_raw();
UINT8 chr,col,gfx,fg,bg=0;
UINT16 mem,x;
UINT32 *p = &bitmap.pix32(y);