/* Big Striker (bootleg) Video Hardware */ #include "emu.h" #include "includes/bigstrkb.h" /* Sprites */ static void draw_sprites(running_machine &machine, bitmap_t *bitmap, const rectangle *cliprect ) { /*- SPR RAM Format -** 16 bytes per sprite nnnn nnnn nnnn nnnn aaaa aaaa aaaa aaaa xxxx xxxx xxxx xxxx yyyy yyyy yyyy yyyy ( rest unused ) **- End of Comments -*/ bigstrkb_state *state = machine.driver_data(); const gfx_element *gfx = machine.gfx[2]; UINT16 *source = state->m_spriteram; UINT16 *finish = source + 0x800/2; while( source> 4) * 0x100; offset += (row >> 4) * 0x800; return offset; } static TILE_GET_INFO( get_bsb_tile_info ) { bigstrkb_state *state = machine.driver_data(); int tileno,col; tileno = state->m_videoram[tile_index] & 0x0fff; col= state->m_videoram[tile_index] & 0xf000; SET_TILE_INFO(0,tileno,col>>12,0); } WRITE16_HANDLER( bsb_videoram_w ) { bigstrkb_state *state = space->machine().driver_data(); state->m_videoram[offset] = data; tilemap_mark_tile_dirty(state->m_tilemap,offset); } static TILE_GET_INFO( get_bsb_tile2_info ) { bigstrkb_state *state = machine.driver_data(); int tileno,col; tileno = state->m_videoram2[tile_index] & 0x0fff; col= state->m_videoram2[tile_index] & 0xf000; SET_TILE_INFO(1,tileno,col>>12,0); } WRITE16_HANDLER( bsb_videoram2_w ) { bigstrkb_state *state = space->machine().driver_data(); state->m_videoram2[offset] = data; tilemap_mark_tile_dirty(state->m_tilemap2,offset); } static TILE_GET_INFO( get_bsb_tile3_info ) { bigstrkb_state *state = machine.driver_data(); int tileno,col; tileno = state->m_videoram3[tile_index] & 0x0fff; col= state->m_videoram3[tile_index] & 0xf000; SET_TILE_INFO(1,tileno+0x2000,(col>>12)+(0x100/16),0); } WRITE16_HANDLER( bsb_videoram3_w ) { bigstrkb_state *state = space->machine().driver_data(); state->m_videoram3[offset] = data; tilemap_mark_tile_dirty(state->m_tilemap3,offset); } /* Video Start / Update */ VIDEO_START(bigstrkb) { bigstrkb_state *state = machine.driver_data(); state->m_tilemap = tilemap_create(machine, get_bsb_tile_info,tilemap_scan_cols, 8, 8,64,32); state->m_tilemap2 = tilemap_create(machine, get_bsb_tile2_info,bsb_bg_scan, 16, 16,128,64); state->m_tilemap3 = tilemap_create(machine, get_bsb_tile3_info,bsb_bg_scan, 16, 16,128,64); tilemap_set_transparent_pen(state->m_tilemap,15); //tilemap_set_transparent_pen(state->m_tilemap2,15); tilemap_set_transparent_pen(state->m_tilemap3,15); } SCREEN_UPDATE(bigstrkb) { bigstrkb_state *state = screen->machine().driver_data(); // bitmap_fill(bitmap,cliprect,get_black_pen(screen->machine())); tilemap_set_scrollx(state->m_tilemap2,0, state->m_vidreg1[0]+(256-14)); tilemap_set_scrolly(state->m_tilemap2,0, state->m_vidreg2[0]); tilemap_set_scrollx(state->m_tilemap3,0, state->m_vidreg1[1]+(256-14)); tilemap_set_scrolly(state->m_tilemap3,0, state->m_vidreg2[1]); tilemap_draw(bitmap,cliprect,state->m_tilemap2,0,0); tilemap_draw(bitmap,cliprect,state->m_tilemap3,0,0); draw_sprites(screen->machine(),bitmap,cliprect); tilemap_draw(bitmap,cliprect,state->m_tilemap,0,0); // popmessage ("Regs %08x %08x %08x %08x",bsb_vidreg2[0],bsb_vidreg2[1],bsb_vidreg2[2],bsb_vidreg2[3]); return 0; }