summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/render.c16
-rw-r--r--src/emu/render.h3
-rw-r--r--src/emu/video/tms9928a.c9
-rw-r--r--src/mame/drivers/alg.c2
-rw-r--r--src/mame/drivers/cliffhgr.c19
-rw-r--r--src/mame/drivers/cubeqst.c5
-rw-r--r--src/mame/drivers/esh.c5
-rw-r--r--src/mame/drivers/gpworld.c8
-rw-r--r--src/mame/drivers/istellar.c5
-rw-r--r--src/mame/drivers/lgp.c3
-rw-r--r--src/mame/drivers/segald.c7
-rw-r--r--src/mame/drivers/superdq.c12
-rw-r--r--src/mame/video/gottlieb.c15
13 files changed, 56 insertions, 53 deletions
diff --git a/src/emu/render.c b/src/emu/render.c
index b18d6979dad..9ab319a7344 100644
--- a/src/emu/render.c
+++ b/src/emu/render.c
@@ -2827,18 +2827,6 @@ render_container *render_container_get_screen(const device_config *screen)
/*-------------------------------------------------
- render_container_set_palette_alpha - set the
- opacity of a given palette entry
--------------------------------------------------*/
-
-void render_container_set_palette_alpha(render_container *container, UINT32 entry, UINT8 alpha)
-{
- assert(entry < ARRAY_LENGTH(container->bcglookup));
- container->bcglookup[entry] = (alpha << 24) | (container->bcglookup[entry] & 0x00ffffff);
-}
-
-
-/*-------------------------------------------------
render_container_item_add_generic - add a
generic item to a container
-------------------------------------------------*/
@@ -2984,7 +2972,7 @@ static void render_container_recompute_lookups(render_container *container)
for (i = 0; i < colors; i++)
{
pen_t newval = adjusted_palette[i];
- container->bcglookup[i] = (container->bcglookup[i] & 0xff000000) |
+ container->bcglookup[i] = (newval & 0xff000000) |
container->bcglookup256[0x200 + RGB_RED(newval)] |
container->bcglookup256[0x100 + RGB_GREEN(newval)] |
container->bcglookup256[0x000 + RGB_BLUE(newval)];
@@ -3029,7 +3017,7 @@ static void render_container_update_palette(render_container *container)
{
UINT32 finalentry = entry32 * 32 + entry;
rgb_t newval = adjusted_palette[finalentry];
- container->bcglookup[finalentry] = (container->bcglookup[finalentry] & 0xff000000) |
+ container->bcglookup[finalentry] = (newval & 0xff000000) |
container->bcglookup256[0x200 + RGB_RED(newval)] |
container->bcglookup256[0x100 + RGB_GREEN(newval)] |
container->bcglookup256[0x000 + RGB_BLUE(newval)];
diff --git a/src/emu/render.h b/src/emu/render.h
index 75ed9416591..1fee7b48b28 100644
--- a/src/emu/render.h
+++ b/src/emu/render.h
@@ -454,9 +454,6 @@ render_container *render_container_get_ui(void);
/* return a pointer to the container for the given screen */
render_container *render_container_get_screen(const device_config *screen);
-/* set the opacity of a given palette entry */
-void render_container_set_palette_alpha(render_container *container, UINT32 entry, UINT8 alpha);
-
/* add a line item to the specified container */
void render_container_add_line(render_container *container, float x0, float y0, float x1, float y1, float width, rgb_t argb, UINT32 flags);
diff --git a/src/emu/video/tms9928a.c b/src/emu/video/tms9928a.c
index ab418363675..0abacbee8df 100644
--- a/src/emu/video/tms9928a.c
+++ b/src/emu/video/tms9928a.c
@@ -392,8 +392,13 @@ void TMS9928A_set_spriteslimit (int limit) {
*/
VIDEO_UPDATE( tms9928a )
{
- INT32 BackColour = tms.Regs[7] & 15; if (!BackColour) BackColour=1;
- palette_set_color(screen->machine, 0, TMS9928A_palette[BackColour]);
+ INT32 BackColour = tms.Regs[7] & 15;
+ rgb_t oldcolor = palette_get_color(screen->machine, 0);
+
+ if (!BackColour) BackColour=1;
+ /* note we preserve the alpha here; this is so that it can be controlled independently */
+ /* see cliffhgr.c for an example */
+ palette_set_color(screen->machine, 0, (TMS9928A_palette[BackColour] & MAKE_ARGB(0,255,255,255)) | (oldcolor & MAKE_ARGB(255,0,0,0)));
if (! (tms.Regs[1] & 0x40))
fillbitmap(bitmap, screen->machine->pens[BackColour], cliprect);
diff --git a/src/mame/drivers/alg.c b/src/mame/drivers/alg.c
index 6d090fc2785..3ed29294572 100644
--- a/src/mame/drivers/alg.c
+++ b/src/mame/drivers/alg.c
@@ -71,7 +71,7 @@ static VIDEO_START( alg )
VIDEO_START_CALL(amiga);
/* configure pen 4096 as transparent in the renderer and use it for the genlock color */
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 4096, 0x00);
+ palette_set_color(machine, 4096, MAKE_ARGB(0,0,0,0));
amiga_set_genlock_color(4096);
}
diff --git a/src/mame/drivers/cliffhgr.c b/src/mame/drivers/cliffhgr.c
index 3b639cb2955..f0b23aec2a2 100644
--- a/src/mame/drivers/cliffhgr.c
+++ b/src/mame/drivers/cliffhgr.c
@@ -147,21 +147,22 @@ static WRITE8_HANDLER( cliff_sound_overlay_w )
int overlay = ( data & 0x10 ) ? 1 : 0;
/* configure pen 0 and 1 as transparent in the renderer and use it as the compositing color */
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 0, overlay ? 0x00 : 0xff );
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 1, overlay ? 0x00 : 0xff );
+ if (overlay)
+ {
+ palette_set_color(machine, 0, palette_get_color(machine, 0) & MAKE_ARGB(0,255,255,255));
+ palette_set_color(machine, 1, palette_get_color(machine, 1) & MAKE_ARGB(0,255,255,255));
+ }
+ else
+ {
+ palette_set_color(machine, 0, palette_get_color(machine, 0) | MAKE_ARGB(255,0,0,0));
+ palette_set_color(machine, 1, palette_get_color(machine, 1) | MAKE_ARGB(255,0,0,0));
+ }
/* audio */
discrete_sound_w(machine, CLIFF_ENABLE_SND_1, sound&1);
discrete_sound_w(machine, CLIFF_ENABLE_SND_2, (sound>>1)&1);
}
-#ifdef UNUSED_FUNCTION
-static WRITE8_HANDLER( cliff_irqack_w )
-{
- phillips_code = 0;
-}
-#endif
-
static WRITE8_HANDLER( cliff_ldwire_w )
{
laserdisc_line_w(laserdisc,LASERDISC_LINE_CONTROL,(data&1) ? ASSERT_LINE : CLEAR_LINE );
diff --git a/src/mame/drivers/cubeqst.c b/src/mame/drivers/cubeqst.c
index cdead48afa1..a8cac7ca8c8 100644
--- a/src/mame/drivers/cubeqst.c
+++ b/src/mame/drivers/cubeqst.c
@@ -81,8 +81,6 @@ static VIDEO_START( cubeqst )
{
video_field = 0;
depth_buffer = auto_malloc(512);
-
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), ALPHA_PEN, 0);
}
/* TODO: Use resistor values */
@@ -101,6 +99,9 @@ static PALETTE_INIT( cubeqst )
palette_set_color_rgb(machine, i, y*r, y*g, y*b);
}
+
+ /* use pen 8192 for transparent */
+ palette_set_color(machine, 8192, MAKE_ARGB(0,0,0,0));
}
/* TODO: This is a simplified version of what actually happens */
diff --git a/src/mame/drivers/esh.c b/src/mame/drivers/esh.c
index 886ac46c946..0ba13badcf3 100644
--- a/src/mame/drivers/esh.c
+++ b/src/mame/drivers/esh.c
@@ -42,8 +42,6 @@ static VIDEO_UPDATE( esh )
{
int charx, chary;
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
-
/* clear */
fillbitmap(bitmap, 0, cliprect);
@@ -239,6 +237,9 @@ static PALETTE_INIT( esh )
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
+
+ /* make color 0 transparent */
+ palette_set_color(machine, 0, MAKE_ARGB(0,0,0,0));
}
static const gfx_layout esh_gfx_layout =
diff --git a/src/mame/drivers/gpworld.c b/src/mame/drivers/gpworld.c
index d6bdc521699..6afaf5d0c1c 100644
--- a/src/mame/drivers/gpworld.c
+++ b/src/mame/drivers/gpworld.c
@@ -203,8 +203,6 @@ static void gpworld_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
static VIDEO_UPDATE( gpworld )
{
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
-
fillbitmap(bitmap, 0, cliprect);
gpworld_draw_tiles(screen->machine, bitmap, cliprect);
@@ -245,7 +243,7 @@ static WRITE8_HANDLER( misc_io_write )
static WRITE8_HANDLER( palette_write )
{
/* This is all just a (bad) guess */
- int pal_index, r, g, b;
+ int pal_index, r, g, b, a;
palette_RAM[offset] = data;
@@ -255,11 +253,11 @@ static WRITE8_HANDLER( palette_write )
b = (palette_RAM[pal_index] & 0xf0) << 0;
g = (palette_RAM[pal_index] & 0x0f) << 4;
r = (palette_RAM[pal_index+1] & 0x0f) << 4;
- /* int dunno = (palette_RAM[pal_index+1] & 0x80) >> 7; */
+ a = (palette_RAM[pal_index+1] & 0x80) ? 0 : 255; /* guess */
/* logerror("PAL WRITE index : %x rgb : %d %d %d (real %x) at %x\n", pal_index, r,g,b, data, offset); */
- palette_set_color(machine, pal_index, MAKE_RGB(r, g, b));
+ palette_set_color(machine, pal_index, MAKE_ARGB(a, r, g, b));
}
/* PROGRAM MAP */
diff --git a/src/mame/drivers/istellar.c b/src/mame/drivers/istellar.c
index 2ac8dfac803..65c71ac1bb3 100644
--- a/src/mame/drivers/istellar.c
+++ b/src/mame/drivers/istellar.c
@@ -44,8 +44,6 @@ static VIDEO_UPDATE( istellar )
{
int charx, chary;
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
-
/* clear */
fillbitmap(bitmap, 0, cliprect);
@@ -291,6 +289,9 @@ static PALETTE_INIT( istellar )
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
+
+ /* make color 0 transparent */
+ palette_set_color(machine, 0, MAKE_ARGB(0,0,0,0));
}
static const gfx_layout istellar_gfx_layout =
diff --git a/src/mame/drivers/lgp.c b/src/mame/drivers/lgp.c
index fad87fcfee4..e45b86bf8c3 100644
--- a/src/mame/drivers/lgp.c
+++ b/src/mame/drivers/lgp.c
@@ -83,7 +83,8 @@ static VIDEO_UPDATE( lgp )
{
int charx, chary;
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
+ /* make color 0 transparent */
+ palette_set_color(screen->machine, 0, MAKE_ARGB(0,0,0,0));
/* clear */
fillbitmap(bitmap, 0, cliprect);
diff --git a/src/mame/drivers/segald.c b/src/mame/drivers/segald.c
index 591bd74ca27..dd1808be796 100644
--- a/src/mame/drivers/segald.c
+++ b/src/mame/drivers/segald.c
@@ -80,8 +80,6 @@ static void astron_draw_sprites(bitmap_t *bitmap, const rectangle *cliprect)
static VIDEO_UPDATE( astron )
{
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
-
fillbitmap(bitmap, 0, cliprect);
astron_draw_characters(screen->machine, bitmap, cliprect);
@@ -178,7 +176,7 @@ static WRITE8_HANDLER( astron_OBJ_write )
static WRITE8_HANDLER( astron_COLOR_write )
{
- UINT8 r, g, b;
+ UINT8 r, g, b, a;
UINT8 highBits, lowBits;
const UINT8 palIndex = offset >> 1;
@@ -193,8 +191,9 @@ static WRITE8_HANDLER( astron_COLOR_write )
r = (lowBits & 0x0f);
g = (lowBits & 0xf0) >> 4;
b = (highBits & 0x0f);
+ a = (highBits & 0x80) ? 0 : 255;
- /* palette_set_color(machine, palIndex, r, g, b); */
+ palette_set_color(machine, palIndex, MAKE_ARGB(a, r, g, b));
logerror("COLOR write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, activecpu_get_pc());
}
diff --git a/src/mame/drivers/superdq.c b/src/mame/drivers/superdq.c
index fa5ba05e9f2..9ada3a09b1c 100644
--- a/src/mame/drivers/superdq.c
+++ b/src/mame/drivers/superdq.c
@@ -48,8 +48,6 @@ static VIDEO_START( superdq )
static VIDEO_UPDATE( superdq )
{
- render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
-
tilemap_draw(bitmap,cliprect,superdq_tilemap,0,0);
return 0;
@@ -142,8 +140,14 @@ static WRITE8_HANDLER( superdq_io_w )
superdq_color_bank = ( data & 2 ) ? 1 : 0;
- for( i = 0; i < sizeof( black_color_entries ); i++ )
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), black_color_entries[i], (data&0x80) ? 0x00 : 0xff );
+ for( i = 0; i < ARRAY_LENGTH( black_color_entries ); i++ )
+ {
+ int index = black_color_entries[i];
+ if (data & 0x80)
+ palette_set_color(machine, index, palette_get_color(machine, index) & MAKE_ARGB(0,255,255,255));
+ else
+ palette_set_color(machine, index, palette_get_color(machine, index) | MAKE_ARGB(255,0,0,0));
+ }
/*
bit 5 = DISP1?
diff --git a/src/mame/video/gottlieb.c b/src/mame/video/gottlieb.c
index cc989c585d6..86ca656a555 100644
--- a/src/mame/video/gottlieb.c
+++ b/src/mame/video/gottlieb.c
@@ -16,6 +16,7 @@ UINT8 gottlieb_gfxcharhi;
static UINT8 background_priority = 0;
static UINT8 spritebank;
+static UINT8 transparent0;
static tilemap *bg_tilemap;
static double weights[4];
@@ -29,7 +30,7 @@ static double weights[4];
WRITE8_HANDLER( gottlieb_paletteram_w )
{
- int r, g, b, val;
+ int r, g, b, a, val;
paletteram[offset] = data;
@@ -42,7 +43,9 @@ WRITE8_HANDLER( gottlieb_paletteram_w )
val = paletteram[offset | 1];
r = combine_4_weights(weights, (val >> 0) & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1);
- palette_set_color(machine, offset / 2, MAKE_ARGB(((offset & ~1) == 0) ? 0x00 : 0xff, r, g, b));
+ /* alpha is set to 0 if laserdisc video is enabled */
+ a = (transparent0 && offset / 2 == 0) ? 0 : 255;
+ palette_set_color(machine, offset / 2, MAKE_ARGB(a, r, g, b));
}
@@ -93,8 +96,10 @@ WRITE8_HANDLER( gottlieb_laserdisc_video_control_w )
/* bit 3 genlock control (1 = show laserdisc image) */
laserdisc_overlay_enable(laserdisc, (data & 0x04) ? TRUE : FALSE);
laserdisc_video_enable(laserdisc, ((data & 0x0c) == 0x0c) ? TRUE : FALSE);
-
- render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 0, (data & 0x08) ? 0x00 : 0xff);
+
+ /* configure the palette if the laserdisc is enabled */
+ transparent0 = (data >> 3) & 1;
+ gottlieb_paletteram_w(machine, 0, paletteram[0]);
}
@@ -151,6 +156,7 @@ VIDEO_START( gottlieb )
4, resistances, weights, 180, 0,
4, resistances, weights, 180, 0,
4, resistances, weights, 180, 0);
+ transparent0 = FALSE;
/* configure the background tilemap */
bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
@@ -160,6 +166,7 @@ VIDEO_START( gottlieb )
/* save some state */
state_save_register_global(background_priority);
state_save_register_global(spritebank);
+ state_save_register_global(transparent0);
}