diff --git a/src/mame/drivers/tunhunt.c b/src/mame/drivers/tunhunt.c index f2dca9d5050..04893f0296b 100644 --- a/src/mame/drivers/tunhunt.c +++ b/src/mame/drivers/tunhunt.c @@ -282,9 +282,9 @@ static const gfx_layout obj_layout = static GFXDECODE_START( tunhunt ) - GFXDECODE_ENTRY( REGION_GFX1, 0x000, alpha_layout, 0, 4 ) - GFXDECODE_ENTRY( REGION_GFX2, 0x200, obj_layout, 8, 1 ) - GFXDECODE_ENTRY( REGION_GFX2, 0x000, obj_layout, 8, 1 ) /* second bank, or second bitplane? */ + GFXDECODE_ENTRY( REGION_GFX1, 0x000, alpha_layout, 0x10, 4 ) + GFXDECODE_ENTRY( REGION_GFX2, 0x200, obj_layout, 0x18, 1 ) + GFXDECODE_ENTRY( REGION_GFX2, 0x000, obj_layout, 0x18, 1 ) /* second bank, or second bitplane? */ GFXDECODE_END @@ -330,8 +330,7 @@ static MACHINE_DRIVER_START( tunhunt ) MDRV_SCREEN_SIZE(256, 256-16) MDRV_SCREEN_VISIBLE_AREA(0, 255, 0, 255-16) MDRV_GFXDECODE(tunhunt) - MDRV_PALETTE_LENGTH(16) - MDRV_COLORTABLE_LENGTH(16) + MDRV_PALETTE_LENGTH(0x1a) MDRV_PALETTE_INIT(tunhunt) MDRV_VIDEO_START(tunhunt) diff --git a/src/mame/drivers/tx1.c b/src/mame/drivers/tx1.c index 79ba643ce9a..fb6df70cf34 100644 --- a/src/mame/drivers/tx1.c +++ b/src/mame/drivers/tx1.c @@ -713,8 +713,7 @@ static MACHINE_DRIVER_START( tx1 ) MDRV_VIDEO_ATTRIBUTES(VIDEO_TYPE_RASTER) MDRV_GFXDECODE(tx1) - MDRV_PALETTE_LENGTH(256) - MDRV_COLORTABLE_LENGTH(256+(256*4)+(2048*4)) + MDRV_PALETTE_LENGTH(256+(256*4)+(2048*4)) MDRV_PALETTE_INIT(tx1) MDRV_VIDEO_EOF(tx1) @@ -784,8 +783,7 @@ static MACHINE_DRIVER_START( buggyboy ) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_RAW_PARAMS(BB_PIXEL_CLOCK, BB_HTOTAL, BB_HBEND, BB_HBSTART, BB_VTOTAL, BB_VBEND, BB_VBSTART) - MDRV_PALETTE_LENGTH(256) - MDRV_COLORTABLE_LENGTH(256+(256*4)+(2048*4)) + MDRV_PALETTE_LENGTH(256+(256*4)+(2048*4)) MDRV_PALETTE_INIT(buggyboy) MDRV_VIDEO_START(buggyboy) MDRV_VIDEO_UPDATE(buggyboy) @@ -836,10 +834,8 @@ static MACHINE_DRIVER_START( buggybjr ) MDRV_SCREEN_SIZE(256, 256) MDRV_SCREEN_VISIBLE_AREA(0, 255, 0, 239) #endif - MDRV_GFXDECODE(buggyboy) - MDRV_PALETTE_LENGTH(256) - MDRV_COLORTABLE_LENGTH(256) - MDRV_PALETTE_INIT(buggyboy) + MDRV_PALETTE_LENGTH(512) + MDRV_PALETTE_INIT(buggybjr) MDRV_VIDEO_START(buggybjr) MDRV_VIDEO_UPDATE(buggybjr) MDRV_VIDEO_EOF(buggyboy) diff --git a/src/mame/drivers/ultratnk.c b/src/mame/drivers/ultratnk.c index b2c9bc30941..90f4d5df92c 100644 --- a/src/mame/drivers/ultratnk.c +++ b/src/mame/drivers/ultratnk.c @@ -305,8 +305,7 @@ static MACHINE_DRIVER_START( ultratnk ) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, 0, 256, VTOTAL, 0, 224) MDRV_GFXDECODE(ultratnk) - MDRV_PALETTE_LENGTH(4) - MDRV_COLORTABLE_LENGTH(10) + MDRV_PALETTE_LENGTH(10) MDRV_PALETTE_INIT(ultratnk) MDRV_VIDEO_START(ultratnk) diff --git a/src/mame/drivers/usgames.c b/src/mame/drivers/usgames.c index 132c518a9ce..9eb73c0424e 100644 --- a/src/mame/drivers/usgames.c +++ b/src/mame/drivers/usgames.c @@ -304,8 +304,7 @@ static MACHINE_DRIVER_START( usg32 ) MDRV_SCREEN_SIZE(64*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(7*8, 57*8-1, 0*8, 31*8-1) MDRV_GFXDECODE(usgames) - MDRV_PALETTE_LENGTH(16) - MDRV_COLORTABLE_LENGTH(2*256) + MDRV_PALETTE_LENGTH(2*256) MDRV_PALETTE_INIT(usgames) MDRV_VIDEO_START(usgames) diff --git a/src/mame/drivers/warpwarp.c b/src/mame/drivers/warpwarp.c index 93cbe32720c..1bb3951fd51 100644 --- a/src/mame/drivers/warpwarp.c +++ b/src/mame/drivers/warpwarp.c @@ -129,7 +129,7 @@ TODO: #include "driver.h" #include "deprecat.h" #include "sound/custom.h" -#include "includes/warpwarp.h" +#include "warpwarp.h" #include "geebee.lh" #include "sos.lh" @@ -848,8 +848,7 @@ static MACHINE_DRIVER_START( geebee ) MDRV_SCREEN_SIZE(34*8, 28*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 0*8, 28*8-1) MDRV_GFXDECODE(1k) - MDRV_PALETTE_LENGTH(3) - MDRV_COLORTABLE_LENGTH(4*2) + MDRV_PALETTE_LENGTH(4*2) MDRV_PALETTE_INIT(geebee) MDRV_VIDEO_START(geebee) @@ -869,10 +868,11 @@ static MACHINE_DRIVER_START( navarone ) MDRV_IMPORT_FROM(geebee) MDRV_GFXDECODE(2k) - MDRV_COLORTABLE_LENGTH(2*2) + MDRV_PALETTE_LENGTH(2*2+1) MDRV_PALETTE_INIT(navarone) MDRV_VIDEO_START(navarone) + MDRV_VIDEO_UPDATE(navarone) MACHINE_DRIVER_END static MACHINE_DRIVER_START( bombbee ) @@ -891,8 +891,7 @@ static MACHINE_DRIVER_START( bombbee ) MDRV_SCREEN_SIZE(34*8, 28*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 34*8-1, 0*8, 28*8-1) MDRV_GFXDECODE(color) - MDRV_PALETTE_LENGTH(256) - MDRV_COLORTABLE_LENGTH(2*256) + MDRV_PALETTE_LENGTH(2*256+1) MDRV_PALETTE_INIT(warpwarp) MDRV_VIDEO_START(warpwarp) diff --git a/src/mame/drivers/wolfpack.c b/src/mame/drivers/wolfpack.c index 20af342e243..095b6937b4e 100644 --- a/src/mame/drivers/wolfpack.c +++ b/src/mame/drivers/wolfpack.c @@ -16,22 +16,23 @@ extern int wolfpack_collision; extern UINT8* wolfpack_alpha_num_ram; -extern VIDEO_UPDATE( wolfpack ); -extern VIDEO_START( wolfpack ); -extern VIDEO_EOF( wolfpack ); +PALETTE_INIT( wolfpack ); +VIDEO_UPDATE( wolfpack ); +VIDEO_START( wolfpack ); +VIDEO_EOF( wolfpack ); -extern WRITE8_HANDLER( wolfpack_video_invert_w ); -extern WRITE8_HANDLER( wolfpack_ship_reflect_w ); -extern WRITE8_HANDLER( wolfpack_pt_pos_select_w ); -extern WRITE8_HANDLER( wolfpack_pt_horz_w ); -extern WRITE8_HANDLER( wolfpack_pt_pic_w ); -extern WRITE8_HANDLER( wolfpack_ship_h_w ); -extern WRITE8_HANDLER( wolfpack_torpedo_pic_w ); -extern WRITE8_HANDLER( wolfpack_ship_size_w ); -extern WRITE8_HANDLER( wolfpack_ship_h_precess_w ); -extern WRITE8_HANDLER( wolfpack_ship_pic_w ); -extern WRITE8_HANDLER( wolfpack_torpedo_h_w ); -extern WRITE8_HANDLER( wolfpack_torpedo_v_w ); +WRITE8_HANDLER( wolfpack_video_invert_w ); +WRITE8_HANDLER( wolfpack_ship_reflect_w ); +WRITE8_HANDLER( wolfpack_pt_pos_select_w ); +WRITE8_HANDLER( wolfpack_pt_horz_w ); +WRITE8_HANDLER( wolfpack_pt_pic_w ); +WRITE8_HANDLER( wolfpack_ship_h_w ); +WRITE8_HANDLER( wolfpack_torpedo_pic_w ); +WRITE8_HANDLER( wolfpack_ship_size_w ); +WRITE8_HANDLER( wolfpack_ship_h_precess_w ); +WRITE8_HANDLER( wolfpack_ship_pic_w ); +WRITE8_HANDLER( wolfpack_torpedo_h_w ); +WRITE8_HANDLER( wolfpack_torpedo_v_w ); static TIMER_CALLBACK( periodic_callback ) @@ -57,36 +58,6 @@ static MACHINE_RESET( wolfpack ) } -static PALETTE_INIT( wolfpack ) -{ - int i; - - palette_set_color(machine, 0, MAKE_RGB(0x00, 0x00, 0x00)); - palette_set_color(machine, 1, MAKE_RGB(0xc1, 0xc1, 0xc1)); - palette_set_color(machine, 2, MAKE_RGB(0x81, 0x81, 0x81)); - palette_set_color(machine, 3, MAKE_RGB(0x48, 0x48, 0x48)); - - for (i = 0; i < 4; i++) - { - rgb_t color = palette_get_color(machine, i); - - palette_set_color_rgb(machine, 4 + i, - RGB_RED(color) < 0xb8 ? RGB_RED(color) + 0x48 : 0xff, - RGB_GREEN(color) < 0xb8 ? RGB_GREEN(color) + 0x48 : 0xff, - RGB_BLUE(color) < 0xb8 ? RGB_BLUE(color) + 0x48 : 0xff); - } - - colortable[0] = 0; - colortable[1] = 1; - colortable[2] = 1; - colortable[3] = 0; - colortable[4] = 0; - colortable[5] = 2; - colortable[6] = 0; - colortable[7] = 3; -} - - static READ8_HANDLER( wolfpack_input_r ) { UINT8 val = readinputport(0); @@ -378,8 +349,7 @@ static MACHINE_DRIVER_START(wolfpack) MDRV_SCREEN_SIZE(512, 262) MDRV_SCREEN_VISIBLE_AREA(0, 511, 16, 239) MDRV_GFXDECODE(wolfpack) - MDRV_PALETTE_LENGTH(8) - MDRV_COLORTABLE_LENGTH(8) + MDRV_PALETTE_LENGTH(12) MDRV_PALETTE_INIT(wolfpack) MDRV_VIDEO_START(wolfpack) MDRV_VIDEO_UPDATE(wolfpack) diff --git a/src/mame/drivers/zaccaria.c b/src/mame/drivers/zaccaria.c index 65e05a6d0dc..531dbf68125 100644 --- a/src/mame/drivers/zaccaria.c +++ b/src/mame/drivers/zaccaria.c @@ -683,8 +683,7 @@ static MACHINE_DRIVER_START( zaccaria ) MDRV_SCREEN_SIZE(32*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MDRV_GFXDECODE(zaccaria) - MDRV_PALETTE_LENGTH(512) - MDRV_COLORTABLE_LENGTH(32*8+32*8) + MDRV_PALETTE_LENGTH(32*8+32*8) MDRV_PALETTE_INIT(zaccaria) MDRV_VIDEO_START(zaccaria) diff --git a/src/mame/drivers/zodiack.c b/src/mame/drivers/zodiack.c index 339e2ed6736..77c9fe68008 100644 --- a/src/mame/drivers/zodiack.c +++ b/src/mame/drivers/zodiack.c @@ -494,8 +494,7 @@ static MACHINE_DRIVER_START( zodiack ) MDRV_SCREEN_SIZE(32*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) MDRV_GFXDECODE(zodiack) - MDRV_PALETTE_LENGTH(49) - MDRV_COLORTABLE_LENGTH(4*8+2*8+2*1) + MDRV_PALETTE_LENGTH(4*8+2*8+2*1) MDRV_PALETTE_INIT(zodiack) MDRV_VIDEO_START(zodiack) diff --git a/src/mame/includes/tx1.h b/src/mame/includes/tx1.h index 839c65e5ea6..01517ba8dff 100644 --- a/src/mame/includes/tx1.h +++ b/src/mame/includes/tx1.h @@ -91,6 +91,7 @@ extern UINT16 *buggyboy_rcram; extern UINT16 *buggyboy_vram; extern size_t buggyboy_objram_size; extern size_t buggyboy_rcram_size; +PALETTE_INIT( buggybjr ); PALETTE_INIT( buggyboy ); WRITE16_HANDLER( buggyboy_vram_w ); VIDEO_START( buggyboy ); diff --git a/src/mame/includes/warpwarp.h b/src/mame/includes/warpwarp.h index c2077f88309..9eb33667f1d 100644 --- a/src/mame/includes/warpwarp.h +++ b/src/mame/includes/warpwarp.h @@ -16,6 +16,7 @@ VIDEO_START( geebee ); VIDEO_START( navarone ); VIDEO_START( warpwarp ); VIDEO_UPDATE( geebee ); +VIDEO_UPDATE( navarone ); VIDEO_UPDATE( warpwarp ); WRITE8_HANDLER( warpwarp_videoram_w ); WRITE8_HANDLER( geebee_videoram_w ); diff --git a/src/mame/video/gunsmoke.c b/src/mame/video/gunsmoke.c index e357fbd4013..6ed84829ae7 100644 --- a/src/mame/video/gunsmoke.c +++ b/src/mame/video/gunsmoke.c @@ -1,8 +1,5 @@ #include "driver.h" -#define TOTAL_COLORS(gfxn) (machine->gfx[gfxn]->total_colors * machine->gfx[gfxn]->color_granularity) -#define COLOR(gfxn,offs) (colortable[machine->config->gfxdecodeinfo[gfxn].color_codes_start + offs]) - UINT8 *gunsmoke_scrollx; UINT8 *gunsmoke_scrolly; diff --git a/src/mame/video/mrdo.c b/src/mame/video/mrdo.c index 09338e9bafa..52693fcb8ca 100644 --- a/src/mame/video/mrdo.c +++ b/src/mame/video/mrdo.c @@ -49,8 +49,6 @@ static int flipscreen; PALETTE_INIT( mrdo ) { int i; - #define TOTAL_COLORS(gfxn) (machine->gfx[gfxn]->total_colors * machine->gfx[gfxn]->color_granularity) - #define COLOR(gfxn,offs) (colortable[machine->config->gfxdecodeinfo[gfxn].color_codes_start + offs]) const int R1 = 150; const int R2 = 120; diff --git a/src/mame/video/tunhunt.c b/src/mame/video/tunhunt.c index 5514d6bfbae..1eb55d02863 100644 --- a/src/mame/video/tunhunt.c +++ b/src/mame/video/tunhunt.c @@ -74,8 +74,7 @@ VIDEO_START( tunhunt ) */ tmpbitmap = auto_bitmap_alloc( 256, 64, machine->screen[0].format ); - fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_cols, - 8, 8, 32, 32); + fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_cols, 8, 8, 32, 32); tilemap_set_transparent_pen(fg_tilemap, 0); tilemap_set_scrollx(fg_tilemap, 0, 64); @@ -83,11 +82,20 @@ VIDEO_START( tunhunt ) PALETTE_INIT( tunhunt ) { + int i; + /* Tunnel Hunt uses a combination of color proms and palette RAM to specify a 16 color * palette. Here, we manage only the mappings for alphanumeric characters and SHELL * graphics, which are unpacked ahead of time and drawn using MAME's drawgfx primitives. */ + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 0x10); + + /* motion objects/box */ + for (i = 0; i < 0x10; i++) + colortable_entry_set_value(machine->colortable, i, i); + /* AlphaNumerics (1bpp) * 2 bits of hilite select from 4 different background colors * Foreground color is always pen#4 @@ -95,28 +103,26 @@ PALETTE_INIT( tunhunt ) */ /* alpha hilite#0 */ - colortable[0] = 0x0; /* background color#0 (transparent) */ - colortable[1] = 0x4; /* foreground color */ + colortable_entry_set_value(machine->colortable, 0x10, 0x0); /* background color#0 (transparent) */ + colortable_entry_set_value(machine->colortable, 0x11, 0x4); /* foreground color */ /* alpha hilite#1 */ - colortable[2] = 0x5; /* background color#1 */ - colortable[3] = 0x4; /* foreground color */ + colortable_entry_set_value(machine->colortable, 0x12, 0x5); /* background color#1 */ + colortable_entry_set_value(machine->colortable, 0x13, 0x4); /* foreground color */ /* alpha hilite#2 */ - colortable[4] = 0x6; /* background color#2 */ - colortable[5] = 0x4; /* foreground color */ + colortable_entry_set_value(machine->colortable, 0x14, 0x6); /* background color#2 */ + colortable_entry_set_value(machine->colortable, 0x15, 0x4); /* foreground color */ /* alpha hilite#3 */ - colortable[6] = 0xf; /* background color#3 */ - colortable[7] = 0x4; /* foreground color */ + colortable_entry_set_value(machine->colortable, 0x16, 0xf); /* background color#3 */ + colortable_entry_set_value(machine->colortable, 0x17, 0x4); /* foreground color */ /* shell graphics; these are either 1bpp (2 banks) or 2bpp. It isn't clear which. * In any event, the following pens are associated with the shell graphics: */ - colortable[0x8] = 0; - colortable[0x9] = 4;//1; - colortable[0xa] = 2; - colortable[0xb] = 4; + colortable_entry_set_value(machine->colortable, 0x18, 0); + colortable_entry_set_value(machine->colortable, 0x19, 4);//1; } /* @@ -132,7 +138,7 @@ Color Array Ram Assignments: 8-E Lines (as normal) background F Hilight 3 */ -static void update_palette(running_machine *machine) +static void set_pens(colortable_t *colortable) { // const UINT8 *color_prom = memory_region( REGION_PROMS ); /* @@ -186,7 +192,7 @@ static void update_palette(running_machine *machine) green = APPLY_SHADE(green,shade); blue = APPLY_SHADE(blue,shade); - palette_set_color( machine,i,MAKE_RGB(red,green,blue) ); + colortable_palette_set_color( colortable,i,MAKE_RGB(red,green,blue) ); } } @@ -365,7 +371,7 @@ static void draw_shell(running_machine *machine, VIDEO_UPDATE( tunhunt ) { - update_palette(machine); + set_pens(machine->colortable); draw_box(machine, bitmap, cliprect); diff --git a/src/mame/video/tx1.c b/src/mame/video/tx1.c index 2595461d150..7cbe4f42331 100644 --- a/src/mame/video/tx1.c +++ b/src/mame/video/tx1.c @@ -123,36 +123,27 @@ PALETTE_INIT( tx1 ) { int i; - for (i = 0; i < 256; ++i) + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 0x100); + + /* create a lookup table for the palette */ + for (i = 0; i < 0x100; i++) { - int bit0, bit1, bit2, bit3; - int r, g, b; + int r = pal4bit(color_prom[i + 0x000]); + int g = pal4bit(color_prom[i + 0x100]); + int b = pal4bit(color_prom[i + 0x200]); - bit0 = BIT(color_prom[i], 0); - bit1 = BIT(color_prom[i], 1); - bit2 = BIT(color_prom[i], 2); - bit3 = BIT(color_prom[i], 3); - r = 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; - - bit0 = BIT(color_prom[i + 0x100], 0); - bit1 = BIT(color_prom[i + 0x100], 1); - bit2 = BIT(color_prom[i + 0x100], 2); - bit3 = BIT(color_prom[i + 0x100], 3); - g = 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; - - bit0 = BIT(color_prom[i + 0x200], 0); - bit1 = BIT(color_prom[i + 0x200], 1); - bit2 = BIT(color_prom[i + 0x200], 2); - bit3 = BIT(color_prom[i + 0x200], 3); - b = 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; - - palette_set_color(machine, i, MAKE_RGB(r, g, b)); + colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b)); } + /* color_prom now points to the beginning of the lookup table */ + color_prom += 0x300; + /* TODO */ - for (i = 0; i < 256; ++i) + for (i = 0; i < 0x100; i++) { - colortable[i] = (color_prom[i + 0x900] & 0xf) + 0x00; + UINT8 ctabentry = (color_prom[i + 0x600] & 0x0f) | 0x00; + colortable_entry_set_value(machine->colortable, i, ctabentry); } } @@ -451,7 +442,7 @@ static void tx1_draw_objects(mame_bitmap *bitmap, const rectangle *cliprect) else color = ~ic162[prom_addr] & 0x3f; - *BITMAP_ADDR16(bitmap, y, x) = Machine->pens[TX1_COLORS_OBJ + color]; + *BITMAP_ADDR16(bitmap, y, x) = TX1_COLORS_OBJ + color; } } @@ -590,19 +581,19 @@ static UINT8 *rod_bmp; bit 2 -- 4.7kohm resistor -- RED ***************************************************************************/ -PALETTE_INIT( buggyboy ) +PALETTE_INIT( buggybjr ) { int i; - for (i = 0; i < 256; ++i) + for (i = 0; i < 0x100; i++) { int bit0, bit1, bit2, bit3, bit4; int r, g, b; - bit0 = BIT(color_prom[i], 0); - bit1 = BIT(color_prom[i], 1); - bit2 = BIT(color_prom[i], 2); - bit3 = BIT(color_prom[i], 3); + bit0 = BIT(color_prom[i + 0x000], 0); + bit1 = BIT(color_prom[i + 0x000], 1); + bit2 = BIT(color_prom[i + 0x000], 2); + bit3 = BIT(color_prom[i + 0x000], 3); bit4 = BIT(color_prom[i + 0x300], 2); r = 0x06 * bit4 + 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; @@ -620,13 +611,55 @@ PALETTE_INIT( buggyboy ) bit4 = BIT(color_prom[i + 0x300], 0); b = 0x06 * bit4 + 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; - palette_set_color(machine, i, MAKE_RGB(r,g,b)); + palette_set_color(machine, i, MAKE_RGB(r, g, b)); + } +} + +PALETTE_INIT( buggyboy ) +{ + int i; + + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 0x100); + + /* create a lookup table for the palette */ + for (i = 0; i < 0x100; i++) + { + int bit0, bit1, bit2, bit3, bit4; + int r, g, b; + + bit0 = BIT(color_prom[i + 0x000], 0); + bit1 = BIT(color_prom[i + 0x000], 1); + bit2 = BIT(color_prom[i + 0x000], 2); + bit3 = BIT(color_prom[i + 0x000], 3); + bit4 = BIT(color_prom[i + 0x300], 2); + r = 0x06 * bit4 + 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; + + bit0 = BIT(color_prom[i + 0x100], 0); + bit1 = BIT(color_prom[i + 0x100], 1); + bit2 = BIT(color_prom[i + 0x100], 2); + bit3 = BIT(color_prom[i + 0x100], 3); + bit4 = BIT(color_prom[i + 0x300], 1); + g = 0x06 * bit4 + 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; + + bit0 = BIT(color_prom[i + 0x200], 0); + bit1 = BIT(color_prom[i + 0x200], 1); + bit2 = BIT(color_prom[i + 0x200], 2); + bit3 = BIT(color_prom[i + 0x200], 3); + bit4 = BIT(color_prom[i + 0x300], 0); + b = 0x06 * bit4 + 0x0d * bit0 + 0x1e * bit1 + 0x41 * bit2 + 0x8a * bit3; + + colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b)); } + /* color_prom now points to the beginning of the lookup table */ + color_prom += 0x400; + /* Characters use colours 192-255 */ - for (i = 0; i < 256; ++i) + for (i = 0; i < 0x100; i++) { - colortable[i] = 192 + color_prom[i + 0x400] + ((i & 0xc0) >> 2); + UINT8 ctabentry = 0xc0 | (((i & 0xc0) >> 2)) | (color_prom[i] & 0x0f); + colortable_entry_set_value(machine->colortable, i, ctabentry); } } diff --git a/src/mame/video/ultratnk.c b/src/mame/video/ultratnk.c index 07730d1be7b..809b91fc8b3 100644 --- a/src/mame/video/ultratnk.c +++ b/src/mame/video/ultratnk.c @@ -17,22 +17,25 @@ int ultratnk_collision[4]; PALETTE_INIT( ultratnk ) { - palette_set_color(machine, 0, MAKE_RGB(0x00, 0x00, 0x00)); - palette_set_color(machine, 1, MAKE_RGB(0xa4, 0xa4, 0xa4)); - palette_set_color(machine, 2, MAKE_RGB(0x5b, 0x5b, 0x5b)); - palette_set_color(machine, 3, MAKE_RGB(0xff, 0xff, 0xff)); + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 4); - colortable[0] = color_prom[0x00] & 3; - colortable[2] = color_prom[0x00] & 3; - colortable[4] = color_prom[0x00] & 3; - colortable[6] = color_prom[0x00] & 3; - colortable[8] = color_prom[0x00] & 3; + colortable_palette_set_color(machine->colortable, 0, MAKE_RGB(0x00, 0x00, 0x00)); + colortable_palette_set_color(machine->colortable, 1, MAKE_RGB(0xa4, 0xa4, 0xa4)); + colortable_palette_set_color(machine->colortable, 2, MAKE_RGB(0x5b, 0x5b, 0x5b)); + colortable_palette_set_color(machine->colortable, 3, MAKE_RGB(0xff, 0xff, 0xff)); - colortable[1] = color_prom[0x01] & 3; - colortable[3] = color_prom[0x02] & 3; - colortable[5] = color_prom[0x04] & 3; - colortable[7] = color_prom[0x08] & 3; - colortable[9] = color_prom[0x10] & 3; + colortable_entry_set_value(machine->colortable, 0, color_prom[0x00] & 3); + colortable_entry_set_value(machine->colortable, 2, color_prom[0x00] & 3); + colortable_entry_set_value(machine->colortable, 4, color_prom[0x00] & 3); + colortable_entry_set_value(machine->colortable, 6, color_prom[0x00] & 3); + colortable_entry_set_value(machine->colortable, 8, color_prom[0x00] & 3); + + colortable_entry_set_value(machine->colortable, 1, color_prom[0x01] & 3); + colortable_entry_set_value(machine->colortable, 3, color_prom[0x02] & 3); + colortable_entry_set_value(machine->colortable, 5, color_prom[0x04] & 3); + colortable_entry_set_value(machine->colortable, 7, color_prom[0x08] & 3); + colortable_entry_set_value(machine->colortable, 9, color_prom[0x10] & 3); } @@ -41,13 +44,9 @@ static TILE_GET_INFO( ultratnk_tile_info ) UINT8 code = videoram[tile_index]; if (code & 0x20) - { SET_TILE_INFO(0, code, code >> 6, 0); - } else - { SET_TILE_INFO(0, code, 4, 0); - } } @@ -75,9 +74,7 @@ VIDEO_UPDATE( ultratnk ) UINT8 code = videoram[0x398 + 2 * i + 1]; if (code & 4) - { bank = 32; - } if (!(attr & 0x80)) { @@ -97,9 +94,8 @@ VIDEO_UPDATE( ultratnk ) VIDEO_EOF( ultratnk ) { - UINT16 BG = machine->remapped_colortable[machine->gfx[0]->color_base]; - int i; + UINT16 BG = colortable_entry_get_value(machine->colortable, 0); /* check for sprite-playfield collisions */ @@ -126,9 +122,7 @@ VIDEO_EOF( ultratnk ) tilemap_draw(helper, &rect, playfield, 0, 0); if (code & 4) - { bank = 32; - } drawgfx(helper, machine->gfx[1], (code >> 3) | bank, @@ -139,15 +133,9 @@ VIDEO_EOF( ultratnk ) &rect, TRANSPARENCY_PEN, 1); for (y = rect.min_y; y <= rect.max_y; y++) - { for (x = rect.min_x; x <= rect.max_x; x++) - { - if (*BITMAP_ADDR16(helper, y, x) != BG) - { + if (colortable_entry_get_value(machine->colortable, *BITMAP_ADDR16(helper, y, x)) != BG) ultratnk_collision[i] = 1; - } - } - } } /* update sound status */ diff --git a/src/mame/video/usgames.c b/src/mame/video/usgames.c index 6217f7df3b2..4f92a3a576c 100644 --- a/src/mame/video/usgames.c +++ b/src/mame/video/usgames.c @@ -14,24 +14,26 @@ PALETTE_INIT(usgames) { int j; - for (j = 0;j < 16;j++) + for (j = 0; j < 0x200; j++) { - int r = (j & 1) >> 0; - int g = (j & 2) >> 1; - int b = (j & 4) >> 2; - int i = (j & 8) >> 3; + int data; + int r, g, b, i; + + if (j & 0x01) + data = (j >> 5) & 0x0f; + else + data = (j >> 1) & 0x0f; + + r = (data & 1) >> 0; + g = (data & 2) >> 1; + b = (data & 4) >> 2; + i = (data & 8) >> 3; r = 0xff * r; g = 0x7f * g * (i + 1); b = 0x7f * b * (i + 1); - palette_set_color(machine,j,MAKE_RGB(r,g,b)); - } - - for (j = 0;j < 256;j++) - { - colortable[2*j] = j & 0x0f; - colortable[2*j+1] = j >> 4; + palette_set_color(machine,j,MAKE_RGB(r, g, b)); } } diff --git a/src/mame/video/warpwarp.c b/src/mame/video/warpwarp.c index 08154ae61b8..a19e2ba3774 100644 --- a/src/mame/video/warpwarp.c +++ b/src/mame/video/warpwarp.c @@ -7,7 +7,8 @@ ***************************************************************************/ #include "driver.h" -#include "includes/warpwarp.h" +#include "video/resnet.h" +#include "warpwarp.h" UINT8 *geebee_videoram,*warpwarp_videoram; @@ -27,37 +28,25 @@ static const rgb_t geebee_palette[] = MAKE_RGB(0x7f,0x7f,0x7f) /* grey */ }; -static const UINT16 geebee_colortable[] = -{ - 0, 1, - 1, 0, - 0, 2, - 2, 0 -}; - -static const UINT16 navarone_colortable[] = -{ - 0, 2, - 2, 0, -}; - - -/* Initialise the palette */ PALETTE_INIT( geebee ) { - int i; - for (i = 0; i < sizeof(geebee_palette)/sizeof(geebee_palette[0]); i++) - palette_set_color(machine,i,geebee_palette[i]); - memcpy(colortable, geebee_colortable, sizeof (geebee_colortable)); + palette_set_color(machine, 0, geebee_palette[0]); + palette_set_color(machine, 1, geebee_palette[1]); + palette_set_color(machine, 2, geebee_palette[1]); + palette_set_color(machine, 3, geebee_palette[0]); + palette_set_color(machine, 4, geebee_palette[0]); + palette_set_color(machine, 5, geebee_palette[2]); + palette_set_color(machine, 6, geebee_palette[2]); + palette_set_color(machine, 7, geebee_palette[0]); } -/* Initialise the palette */ PALETTE_INIT( navarone ) { - int i; - for (i = 0; i < sizeof(geebee_palette)/sizeof(geebee_palette[0]); i++) - palette_set_color(machine,i,geebee_palette[i]); - memcpy(colortable, navarone_colortable, sizeof (navarone_colortable)); + palette_set_color(machine, 0, geebee_palette[0]); + palette_set_color(machine, 1, geebee_palette[2]); + palette_set_color(machine, 2, geebee_palette[2]); + palette_set_color(machine, 3, geebee_palette[0]); + palette_set_color(machine, 4, geebee_palette[1]); } @@ -66,15 +55,14 @@ PALETTE_INIT( navarone ) Warp Warp doesn't use PROMs - the 8-bit code is directly converted into a color. - The color RAM is connected to the RGB output this way (I think - schematics - are fuzzy): + The color RAM is connected to the RGB output this way: - bit 7 -- 300 ohm resistor -- BLUE + bit 7 -- 390 ohm resistor -- BLUE -- 820 ohm resistor -- BLUE - -- 300 ohm resistor -- GREEN + -- 390 ohm resistor -- GREEN -- 820 ohm resistor -- GREEN -- 1.6kohm resistor -- GREEN - -- 300 ohm resistor -- RED + -- 390 ohm resistor -- RED -- 820 ohm resistor -- RED bit 0 -- 1.6kohm resistor -- RED @@ -85,36 +73,44 @@ PALETTE_INIT( navarone ) PALETTE_INIT( warpwarp ) { int i; + static const int resistances_tiles_rg[] = { 1600, 820, 390 }; + static const int resistances_tiles_b[] = { 820, 390 }; + static const int resistance_ball[] = { 220 }; - for (i = 0;i < machine->config->total_colors;i++) + double weights_tiles_rg[3], weights_tiles_b[2], weight_ball[1]; + + compute_resistor_weights(0, 0xff, -1.0, + 3, resistances_tiles_rg, weights_tiles_rg, 150, 0, + 2, resistances_tiles_b, weights_tiles_b, 150, 0, + 1, resistance_ball, weight_ball, 150, 0); + + for (i = 0; i < 0x100; i++) { - int bit0,bit1,bit2,r,g,b; - + int bit0, bit1, bit2; + int r,g,b; /* red component */ bit0 = (i >> 0) & 0x01; bit1 = (i >> 1) & 0x01; bit2 = (i >> 2) & 0x01; - r = 0x1f * bit0 + 0x3c * bit1 + 0xa4 * bit2; + r = combine_3_weights(weights_tiles_rg, bit0, bit1, bit2); + /* green component */ bit0 = (i >> 3) & 0x01; bit1 = (i >> 4) & 0x01; bit2 = (i >> 5) & 0x01; - g = 0x1f * bit0 + 0x3c * bit1 + 0xa4 * bit2; + g = combine_3_weights(weights_tiles_rg, bit0, bit1, bit2); + /* blue component */ - bit0 = 0; - bit1 = (i >> 6) & 0x01; - bit2 = (i >> 7) & 0x01; - b = 0x1f * bit0 + 0x3c * bit1 + 0xa4 * bit2; + bit0 = (i >> 6) & 0x01; + bit1 = (i >> 7) & 0x01; + b = combine_2_weights(weights_tiles_b, bit0, bit1); - palette_set_color(machine,i,MAKE_RGB(r,g,b)); + palette_set_color(machine, (i * 2) + 0, RGB_BLACK); + palette_set_color(machine, (i * 2) + 1, MAKE_RGB(r, g, b)); } - for (i = 0;i < machine->config->color_table_len;i += 2) - { - colortable[i] = 0; /* black background */ - colortable[i + 1] = i / 2; /* colored foreground */ - } + palette_set_color(machine, 0x200, MAKE_RGB(weight_ball[0], weight_ball[0], weight_ball[0])); } @@ -222,13 +218,13 @@ WRITE8_HANDLER( warpwarp_videoram_w ) ***************************************************************************/ -INLINE void geebee_plot(mame_bitmap *bitmap, const rectangle *cliprect, int x, int y, int pen) +INLINE void geebee_plot(mame_bitmap *bitmap, const rectangle *cliprect, int x, int y, pen_t pen) { if (x >= cliprect->min_x && x <= cliprect->max_x && y >= cliprect->min_y && y <= cliprect->max_y) *BITMAP_ADDR16(bitmap, y, x) = pen; } -static void draw_ball(mame_bitmap *bitmap, const rectangle *cliprect,int color) +static void draw_ball(mame_bitmap *bitmap, const rectangle *cliprect,pen_t pen) { if (warpwarp_ball_on) { @@ -237,12 +233,8 @@ static void draw_ball(mame_bitmap *bitmap, const rectangle *cliprect,int color) int i,j; for (i = warpwarp_ball_sizey;i > 0;i--) - { for (j = warpwarp_ball_sizex;j > 0;j--) - { - geebee_plot(bitmap, cliprect, x-j, y-i, color); - } - } + geebee_plot(bitmap, cliprect, x-j, y-i, pen); } } @@ -259,11 +251,19 @@ VIDEO_UPDATE( geebee ) } +VIDEO_UPDATE( navarone ) +{ + tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + + draw_ball(bitmap,cliprect,4); + return 0; +} + VIDEO_UPDATE( warpwarp ) { tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); - draw_ball(bitmap,cliprect,0xf6); + draw_ball(bitmap,cliprect,0x200); return 0; } diff --git a/src/mame/video/wolfpack.c b/src/mame/video/wolfpack.c index c6c4b1e5abc..e9e6d3e400f 100644 --- a/src/mame/video/wolfpack.c +++ b/src/mame/video/wolfpack.c @@ -5,7 +5,6 @@ Atari Wolf Pack (prototype) video emulation ***************************************************************************/ #include "driver.h" -#include "deprecat.h" int wolfpack_collision; @@ -31,28 +30,47 @@ static UINT8* LFSR; static mame_bitmap* helper; -WRITE8_HANDLER( wolfpack_ship_size_w ) +PALETTE_INIT( wolfpack ) { - UINT8 color; + int i; - color = 0x48; + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 8); - if (data & 0x10) color += 0x13; - if (data & 0x20) color += 0x22; - if (data & 0x40) color += 0x3A; - if (data & 0x80) color += 0x48; + colortable_palette_set_color(machine->colortable, 0, MAKE_RGB(0x00, 0x00, 0x00)); + colortable_palette_set_color(machine->colortable, 1, MAKE_RGB(0xc1, 0xc1, 0xc1)); + colortable_palette_set_color(machine->colortable, 2, MAKE_RGB(0x81, 0x81, 0x81)); + colortable_palette_set_color(machine->colortable, 3, MAKE_RGB(0x48, 0x48, 0x48)); - palette_set_color(Machine,3,MAKE_RGB(color,color,color)); + for (i = 0; i < 4; i++) + { + rgb_t color = colortable_palette_get_color(machine->colortable, i); - palette_set_color_rgb(Machine,7, - color < 0xb8 ? color + 0x48 : 0xff, - color < 0xb8 ? color + 0x48 : 0xff, - color < 0xb8 ? color + 0x48 : 0xff); + colortable_palette_set_color(machine->colortable, 4 + i, + MAKE_RGB(RGB_RED(color) < 0xb8 ? RGB_RED(color) + 0x48 : 0xff, + RGB_GREEN(color) < 0xb8 ? RGB_GREEN(color) + 0x48 : 0xff, + RGB_BLUE(color) < 0xb8 ? RGB_BLUE(color) + 0x48 : 0xff)); + } - wolfpack_ship_size = data >> 2; + colortable_entry_set_value(machine->colortable, 0x00, 0); + colortable_entry_set_value(machine->colortable, 0x01, 1); + colortable_entry_set_value(machine->colortable, 0x02, 1); + colortable_entry_set_value(machine->colortable, 0x03, 0); + colortable_entry_set_value(machine->colortable, 0x04, 0); + colortable_entry_set_value(machine->colortable, 0x05, 2); + colortable_entry_set_value(machine->colortable, 0x06, 0); + colortable_entry_set_value(machine->colortable, 0x07, 3); + colortable_entry_set_value(machine->colortable, 0x08, 4); + colortable_entry_set_value(machine->colortable, 0x09, 5); + colortable_entry_set_value(machine->colortable, 0x0a, 6); + colortable_entry_set_value(machine->colortable, 0x0b, 7); } +WRITE8_HANDLER( wolfpack_ship_size_w ) +{ + wolfpack_ship_size = data; +} WRITE8_HANDLER( wolfpack_video_invert_w ) { wolfpack_video_invert = data & 1; @@ -111,9 +129,7 @@ VIDEO_START( wolfpack ) for (i = 0; i < 0x8000; i++) { - int bit = - (val >> 0x0) ^ - (val >> 0xE) ^ 1; + int bit = (val >> 0x0) ^ (val >> 0xe) ^ 1; val = (val << 1) | (bit & 1); @@ -128,25 +144,25 @@ static void draw_ship(running_machine *machine, mame_bitmap* bitmap, const recta { static const UINT32 scaler[] = { - 0x00000, 0x00500, 0x00A00, 0x01000, + 0x00000, 0x00500, 0x00a00, 0x01000, 0x01000, 0x01200, 0x01500, 0x01800, - 0x01800, 0x01D00, 0x02200, 0x02800, + 0x01800, 0x01d00, 0x02200, 0x02800, 0x02800, 0x02800, 0x02800, 0x02800, 0x02800, 0x03000, 0x03800, 0x04000, - 0x04000, 0x04500, 0x04A00, 0x05000, - 0x05000, 0x05500, 0x05A00, 0x06000, - 0x06000, 0x06A00, 0x07500, 0x08000, - 0x08000, 0x08A00, 0x09500, 0x0A000, - 0x0A000, 0x0B000, 0x0C000, 0x0D000, - 0x0D000, 0x0E000, 0x0F000, 0x10000, - 0x10000, 0x11A00, 0x13500, 0x15000, - 0x15000, 0x17500, 0x19A00, 0x1C000, - 0x1C000, 0x1EA00, 0x21500, 0x24000, - 0x24000, 0x26A00, 0x29500, 0x2C000, - 0x2C000, 0x2FA00, 0x33500, 0x37000 + 0x04000, 0x04500, 0x04a00, 0x05000, + 0x05000, 0x05500, 0x05a00, 0x06000, + 0x06000, 0x06a00, 0x07500, 0x08000, + 0x08000, 0x08a00, 0x09500, 0x0a000, + 0x0a000, 0x0b000, 0x0c000, 0x0d000, + 0x0d000, 0x0e000, 0x0f000, 0x10000, + 0x10000, 0x11a00, 0x13500, 0x15000, + 0x15000, 0x17500, 0x19a00, 0x1c000, + 0x1c000, 0x1ea00, 0x21500, 0x24000, + 0x24000, 0x26a00, 0x29500, 0x2c000, + 0x2c000, 0x2fa00, 0x33500, 0x37000 }; - int chop = (scaler[wolfpack_ship_size] * wolfpack_ship_h_precess) >> 16; + int chop = (scaler[wolfpack_ship_size >> 2] * wolfpack_ship_h_precess) >> 16; drawgfxzoom(bitmap, machine->gfx[1], wolfpack_ship_pic, @@ -156,7 +172,7 @@ static void draw_ship(running_machine *machine, mame_bitmap* bitmap, const recta 128, cliprect, TRANSPARENCY_PEN, 0, - 2 * scaler[wolfpack_ship_size], scaler[wolfpack_ship_size]); + 2 * scaler[wolfpack_ship_size >> 2], scaler[wolfpack_ship_size >> 2]); } @@ -182,20 +198,14 @@ static void draw_torpedo(running_machine *machine, mame_bitmap* bitmap, const re int x2; if (y % 16 == 1) - { count = (count - 1) & 7; - } x1 = 248 - wolfpack_torpedo_h - count; x2 = 248 - wolfpack_torpedo_h + count; for (x = 2 * x1; x < 2 * x2; x++) - { if (LFSR[(current_index + 0x300 * y + x) % 0x8000]) - { *BITMAP_ADDR16(bitmap, y, x) = 1; - } - } } } @@ -205,13 +215,10 @@ static void draw_pt(running_machine *machine, mame_bitmap* bitmap, const rectang rectangle rect = *cliprect; if (!(wolfpack_pt_pic & 0x20)) - { rect.min_x = 256; - } + if (!(wolfpack_pt_pic & 0x10)) - { rect.max_x = 255; - } drawgfx(bitmap, machine->gfx[2], wolfpack_pt_pic, @@ -233,7 +240,7 @@ static void draw_pt(running_machine *machine, mame_bitmap* bitmap, const rectang } -static void draw_water(mame_bitmap* bitmap, const rectangle* cliprect) +static void draw_water(colortable_t *colortable, mame_bitmap* bitmap, const rectangle* cliprect) { rectangle rect = *cliprect; @@ -241,18 +248,14 @@ static void draw_water(mame_bitmap* bitmap, const rectangle* cliprect) int y; if (rect.max_y > 127) - { rect.max_y = 127; - } for (y = rect.min_y; y <= rect.max_y; y++) { UINT16* p = BITMAP_ADDR16(bitmap, y, 0); for (x = rect.min_x; x <= rect.max_x; x++) - { - p[x] |= 4; - } + p[x] = colortable_entry_get_value(colortable, p[x]) | 0x08; } } @@ -262,10 +265,20 @@ VIDEO_UPDATE( wolfpack ) int i; int j; + UINT8 color = 0x48; + if (wolfpack_ship_size & 0x10) color += 0x13; + if (wolfpack_ship_size & 0x20) color += 0x22; + if (wolfpack_ship_size & 0x40) color += 0x3a; + if (wolfpack_ship_size & 0x80) color += 0x48; + + colortable_palette_set_color(machine->colortable, 3, MAKE_RGB(color,color,color)); + colortable_palette_set_color(machine->colortable, 7, MAKE_RGB(color < 0xb8 ? color + 0x48 : 0xff, + color < 0xb8 ? color + 0x48 : 0xff, + color < 0xb8 ? color + 0x48 : 0xff)); + fillbitmap(bitmap, wolfpack_video_invert, cliprect); for (i = 0; i < 8; i++) - { for (j = 0; j < 32; j++) { int code = wolfpack_alpha_num_ram[32 * i + j]; @@ -279,12 +292,11 @@ VIDEO_UPDATE( wolfpack ) cliprect, TRANSPARENCY_NONE, 0); } - } draw_pt(machine, bitmap, cliprect); draw_ship(machine, bitmap, cliprect); draw_torpedo(machine, bitmap, cliprect); - draw_water(bitmap, cliprect); + draw_water(machine->colortable, bitmap, cliprect); return 0; } @@ -318,9 +330,7 @@ VIDEO_EOF( wolfpack ) continue; if (*BITMAP_ADDR16(helper, y, x)) - { wolfpack_collision = 1; - } } } diff --git a/src/mame/video/zaccaria.c b/src/mame/video/zaccaria.c index b5e8b5b57ae..06ee639bfd9 100644 --- a/src/mame/video/zaccaria.c +++ b/src/mame/video/zaccaria.c @@ -7,6 +7,7 @@ ***************************************************************************/ #include "driver.h" +#include "video/resnet.h" @@ -51,14 +52,22 @@ Here's the hookup from the proms (82s131) to the r-g-b-outputs ***************************************************************************/ PALETTE_INIT( zaccaria ) { - int i,j,k; - #define COLOR(gfxn,offs) (colortable[machine->config->gfxdecodeinfo[gfxn].color_codes_start + offs]) + int i, j, k; + static const int resistances_rg[] = { 1200, 1000, 820 }; + static const int resistances_b[] = { 1000, 820 }; - for (i = 0;i < machine->config->total_colors;i++) + double weights_rg[3], weights_b[2]; + + compute_resistor_weights(0, 0xff, -1.0, + 3, resistances_rg, weights_rg, 390, 0, + 2, resistances_b, weights_b, 470, 0, + 0, 0, 0, 0, 0); + + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 0x200); + + for (i = 0; i < 0x200; i++) { - int bit0,bit1,bit2,r,g,b; - - /* TODO: I'm not sure, but I think that pen 0 must always be black, otherwise there's some junk brown background in Jack Rabbit. @@ -68,29 +77,31 @@ PALETTE_INIT( zaccaria ) black anyway. */ if (((i % 64) / 8) == 0) - { - palette_set_color(machine,i,MAKE_RGB(0,0,0)); - } + colortable_palette_set_color(machine->colortable, i, RGB_BLACK); else { - /* red component */ - bit0 = (color_prom[0] >> 3) & 0x01; - bit1 = (color_prom[0] >> 2) & 0x01; - bit2 = (color_prom[0] >> 1) & 0x01; - r = 0x46 * bit0 + 0x53 * bit1 + 0x66 * bit2; - /* green component */ - bit0 = (color_prom[0] >> 0) & 0x01; - bit1 = (color_prom[machine->config->total_colors] >> 3) & 0x01; - bit2 = (color_prom[machine->config->total_colors] >> 2) & 0x01; - g = 0x46 * bit0 + 0x53 * bit1 + 0x66 * bit2; - /* blue component */ - bit0 = (color_prom[machine->config->total_colors] >> 1) & 0x01; - bit1 = (color_prom[machine->config->total_colors] >> 0) & 0x01; - b = 0x66 * bit0 + 0x96 * bit1; - palette_set_color(machine,i,MAKE_RGB(r,g,b)); - } + int bit0, bit1, bit2; + int r, g, b; - color_prom++; + /* red component */ + bit0 = (color_prom[i + 0x000] >> 3) & 0x01; + bit1 = (color_prom[i + 0x000] >> 2) & 0x01; + bit2 = (color_prom[i + 0x000] >> 1) & 0x01; + r = combine_3_weights(weights_rg, bit0, bit1, bit2); + + /* green component */ + bit0 = (color_prom[i + 0x000] >> 0) & 0x01; + bit1 = (color_prom[i + 0x200] >> 3) & 0x01; + bit2 = (color_prom[i + 0x200] >> 2) & 0x01; + g = combine_3_weights(weights_rg, bit0, bit1, bit2); + + /* blue component */ + bit0 = (color_prom[i + 0x200] >> 1) & 0x01; + bit1 = (color_prom[i + 0x200] >> 0) & 0x01; + b = combine_2_weights(weights_b, bit0, bit1); + + colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b)); + } } /* There are 512 unique colors, which seem to be organized in 8 blocks */ @@ -98,27 +109,16 @@ PALETTE_INIT( zaccaria ) /* but in interleaved order, like Phoenix. Additionally, colors for */ /* background and sprites are interleaved. */ for (i = 0;i < 8;i++) - { for (j = 0;j < 4;j++) - { for (k = 0;k < 8;k++) - { /* swap j and k to make the colors sequential */ - COLOR(0,32 * i + 8 * j + k) = 64 * i + 8 * k + 2*j; - } - } - } + colortable_entry_set_value(machine->colortable, 0 + 32 * i + 8 * j + k, 64 * i + 8 * k + 2*j); + for (i = 0;i < 8;i++) - { for (j = 0;j < 4;j++) - { for (k = 0;k < 8;k++) - { /* swap j and k to make the colors sequential */ - COLOR(1,32 * i + 8 * j + k) = 64 * i + 8 * k + 2*j+1; - } - } - } + colortable_entry_set_value(machine->colortable, 256 + 32 * i + 8 * j + k, 64 * i + 8 * k + 2*j+1); } diff --git a/src/mame/video/zodiack.c b/src/mame/video/zodiack.c index aca336b8e8f..e87df404c61 100644 --- a/src/mame/video/zodiack.c +++ b/src/mame/video/zodiack.c @@ -57,61 +57,52 @@ PALETTE_INIT( zodiack ) { int i; - #define TOTAL_COLORS(gfxn) (machine->gfx[gfxn]->total_colors * machine->gfx[gfxn]->color_granularity) - #define COLOR(gfxn,offs) (colortable[machine->config->gfxdecodeinfo[gfxn].color_codes_start + offs]) + /* allocate the colortable */ + machine->colortable = colortable_alloc(machine, 0x31); - /* first, the character/sprite palette */ - for (i = 0;i < machine->config->total_colors-1; i++) + /* create a lookup table for the palette */ + for (i = 0; i < 0x30; i++) { - int bit0,bit1,bit2,r,g,b; + int bit0, bit1, bit2; + int r, g, b; /* red component */ - - bit0 = (*color_prom >> 0) & 0x01; - bit1 = (*color_prom >> 1) & 0x01; - bit2 = (*color_prom >> 2) & 0x01; - + bit0 = (color_prom[i] >> 0) & 0x01; + bit1 = (color_prom[i] >> 1) & 0x01; + bit2 = (color_prom[i] >> 2) & 0x01; r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* green component */ - - bit0 = (*color_prom >> 3) & 0x01; - bit1 = (*color_prom >> 4) & 0x01; - bit2 = (*color_prom >> 5) & 0x01; - + bit0 = (color_prom[i] >> 3) & 0x01; + bit1 = (color_prom[i] >> 4) & 0x01; + bit2 = (color_prom[i] >> 5) & 0x01; g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; /* blue component */ - bit0 = 0; - bit1 = (*color_prom >> 6) & 0x01; - bit2 = (*color_prom >> 7) & 0x01; - + bit1 = (color_prom[i] >> 6) & 0x01; + bit2 = (color_prom[i] >> 7) & 0x01; b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2; - palette_set_color(machine,i,MAKE_RGB(r,g,b)); - - color_prom++; + colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b)); } /* white for bullets */ + colortable_palette_set_color(machine->colortable, 0x30, RGB_WHITE); - palette_set_color(machine,machine->config->total_colors-1,MAKE_RGB(0xff,0xff,0xff)); + for (i = 0; i < 0x20; i++) + if ((i & 3) == 0) + colortable_entry_set_value(machine->colortable, i, 0); - for (i = 0;i < TOTAL_COLORS(0);i+=2) + for (i = 0; i < 0x10; i += 2) { - COLOR(0,i ) = (32 + (i / 2)); - COLOR(0,i+1) = (40 + (i / 2)); - } - - for (i = 0;i < TOTAL_COLORS(3);i++) - { - if ((i & 3) == 0) COLOR(3,i) = 0; + colortable_entry_set_value(machine->colortable, 0x20 + i, 32 + (i / 2)); + colortable_entry_set_value(machine->colortable, 0x21 + i, 40 + (i / 2)); } /* bullet */ - COLOR(2, 0) = 0; - COLOR(2, 1) = 48; + colortable_entry_set_value(machine->colortable, 0x30, 0); + colortable_entry_set_value(machine->colortable, 0x31, 0x30); } static TILE_GET_INFO( get_bg_tile_info ) @@ -132,11 +123,9 @@ static TILE_GET_INFO( get_fg_tile_info ) VIDEO_START( zodiack ) { - bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, - 8, 8, 32, 32); + bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); - fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows, - 8, 8, 32, 32); + fg_tilemap = tilemap_create(get_fg_tile_info, tilemap_scan_rows, 8, 8, 32, 32); tilemap_set_transparent_pen(fg_tilemap, 0); tilemap_set_scroll_cols(fg_tilemap, 32); @@ -207,9 +196,7 @@ VIDEO_UPDATE( zodiack ) int i; for (i = 0; i < 32; i++) - { tilemap_set_scrolly(fg_tilemap, i, zodiack_attributesram[i * 2]); - } tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); tilemap_draw(bitmap, cliprect, fg_tilemap, 0, 0);