#include "driver.h" static tilemap *bg_tilemap; PALETTE_INIT( pcktgal ) { int i; for (i = 0;i < machine->drv->total_colors;i++) { int bit0,bit1,bit2,bit3,r,g,b; bit0 = (color_prom[i] >> 0) & 0x01; bit1 = (color_prom[i] >> 1) & 0x01; bit2 = (color_prom[i] >> 2) & 0x01; bit3 = (color_prom[i] >> 3) & 0x01; r = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; bit0 = (color_prom[i] >> 4) & 0x01; bit1 = (color_prom[i] >> 5) & 0x01; bit2 = (color_prom[i] >> 6) & 0x01; bit3 = (color_prom[i] >> 7) & 0x01; g = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; bit0 = (color_prom[i + machine->drv->total_colors] >> 0) & 0x01; bit1 = (color_prom[i + machine->drv->total_colors] >> 1) & 0x01; bit2 = (color_prom[i + machine->drv->total_colors] >> 2) & 0x01; bit3 = (color_prom[i + machine->drv->total_colors] >> 3) & 0x01; b = 0x0e * bit0 + 0x1f * bit1 + 0x43 * bit2 + 0x8f * bit3; palette_set_color(machine,i,MAKE_RGB(r,g,b)); } } WRITE8_HANDLER( pcktgal_videoram_w ) { videoram[offset] = data; tilemap_mark_tile_dirty(bg_tilemap, offset / 2); } WRITE8_HANDLER( pcktgal_flipscreen_w ) { if (flip_screen != (data & 0x80)) { flip_screen_set(data & 0x80); tilemap_mark_all_tiles_dirty(ALL_TILEMAPS); } } static TILE_GET_INFO( get_bg_tile_info ) { int code = videoram[tile_index*2+1] + ((videoram[tile_index*2] & 0x0f) << 8); int color = videoram[tile_index*2] >> 4; SET_TILE_INFO(0, code, color, 0); } VIDEO_START( pcktgal ) { bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, TILEMAP_TYPE_PEN, 8, 8, 32, 32); } static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) { int offs; for (offs = 0;offs < spriteram_size;offs += 4) { if (spriteram[offs] != 0xf8) { int sx,sy,flipx,flipy; sx = 240 - spriteram[offs+2]; sy = 240 - spriteram[offs]; flipx = spriteram[offs+1] & 0x04; flipy = spriteram[offs+1] & 0x02; if (flip_screen) { sx=240-sx; sy=240-sy; if (flipx) flipx=0; else flipx=1; if (flipy) flipy=0; else flipy=1; } drawgfx(bitmap,machine->gfx[1], spriteram[offs+3] + ((spriteram[offs+1] & 1) << 8), (spriteram[offs+1] & 0x70) >> 4, flipx,flipy, sx,sy, cliprect,TRANSPARENCY_PEN,0); } } } VIDEO_UPDATE( pcktgal ) { tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0); draw_sprites(machine, bitmap, cliprect); return 0; }