diff options
-rw-r--r-- | src/emu/render.c | 16 | ||||
-rw-r--r-- | src/emu/render.h | 3 | ||||
-rw-r--r-- | src/emu/video/tms9928a.c | 9 | ||||
-rw-r--r-- | src/mame/drivers/alg.c | 2 | ||||
-rw-r--r-- | src/mame/drivers/cliffhgr.c | 19 | ||||
-rw-r--r-- | src/mame/drivers/cubeqst.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/esh.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/gpworld.c | 8 | ||||
-rw-r--r-- | src/mame/drivers/istellar.c | 5 | ||||
-rw-r--r-- | src/mame/drivers/lgp.c | 3 | ||||
-rw-r--r-- | src/mame/drivers/segald.c | 7 | ||||
-rw-r--r-- | src/mame/drivers/superdq.c | 12 | ||||
-rw-r--r-- | src/mame/video/gottlieb.c | 15 |
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); } |