/* Video Hardware for Shoot Out prom GB09.K6 may be related to background tile-sprite priority */ #include "driver.h" static tilemap *background, *foreground; extern UINT8 *shootout_textram; PALETTE_INIT( shootout ) { int i; for (i = 0;i < machine->drv->total_colors;i++) { int bit0,bit1,bit2,r,g,b; /* red component */ 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[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[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)); } } static TILE_GET_INFO( get_bg_tile_info ){ int attributes = videoram[tile_index+0x400]; /* CCCC -TTT */ int tile_number = videoram[tile_index] + 256*(attributes&7); int color = attributes>>4; SET_TILE_INFO( 2, tile_number, color, 0); } static TILE_GET_INFO( get_fg_tile_info ){ int attributes = shootout_textram[tile_index+0x400]; /* CCCC --TT */ int tile_number = shootout_textram[tile_index] + 256*(attributes&0x3); int color = attributes>>4; SET_TILE_INFO( 0, tile_number, color, 0); } WRITE8_HANDLER( shootout_videoram_w ){ videoram[offset] = data; tilemap_mark_tile_dirty( background, offset&0x3ff ); } WRITE8_HANDLER( shootout_textram_w ){ shootout_textram[offset] = data; tilemap_mark_tile_dirty( foreground, offset&0x3ff ); } VIDEO_START( shootout ){ background = tilemap_create(get_bg_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32); foreground = tilemap_create(get_fg_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32); tilemap_set_transparent_pen( foreground, 0 ); } static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect, int bank_bits ){ static int bFlicker; const gfx_element *gfx = machine->gfx[1]; const UINT8 *source = spriteram+127*4; int count; bFlicker = !bFlicker; for( count=0; count<128; count++ ){ int attributes = source[1]; /* 76543210 xxx----- bank ---x---- vertical size ----x--- priority -----x-- horizontal flip ------x- flicker -------x enable */ if ( attributes & 0x01 ){ /* visible */ if( bFlicker || (attributes&0x02)==0 ){ int priority_mask = (attributes&0x08)?0x2:0; int sx = (240 - source[2])&0xff; int sy = (240 - source[0])&0xff; int vx, vy; int number = source[3] | ((attributes<