// license:BSD-3-Clause // copyright-holders:David Haywood /* Big Striker (bootleg) Video Hardware */ #include "emu.h" #include "includes/bigstrkb.h" /* Sprites */ void bigstrkb_state::draw_sprites(bitmap_ind16 &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 -*/ gfx_element *gfx = m_gfxdecode->gfx(2); uint16_t *source = m_spriteram; uint16_t *finish = source + 0x800/2; while( sourcetranspen(bitmap,cliprect,num,col,flipx,0,xpos,ypos,15); source+=8; } } /* Tilemaps */ TILEMAP_MAPPER_MEMBER(bigstrkb_state::bg_scan) { int offset; offset = ((col&0xf)*16) + (row&0xf); offset += (col >> 4) * 0x100; offset += (row >> 4) * 0x800; return offset; } TILE_GET_INFO_MEMBER(bigstrkb_state::get_tile_info) { int tileno,col; tileno = m_videoram[tile_index] & 0x0fff; col= m_videoram[tile_index] & 0xf000; SET_TILE_INFO_MEMBER(0,tileno,col>>12,0); } WRITE16_MEMBER(bigstrkb_state::videoram_w) { m_videoram[offset] = data; m_tilemap->mark_tile_dirty(offset); } TILE_GET_INFO_MEMBER(bigstrkb_state::get_tile2_info) { int tileno,col; tileno = m_videoram2[tile_index] & 0x0fff; col= m_videoram2[tile_index] & 0xf000; SET_TILE_INFO_MEMBER(1,tileno,col>>12,0); } WRITE16_MEMBER(bigstrkb_state::videoram2_w) { m_videoram2[offset] = data; m_tilemap2->mark_tile_dirty(offset); } TILE_GET_INFO_MEMBER(bigstrkb_state::get_tile3_info) { int tileno,col; tileno = m_videoram3[tile_index] & 0x0fff; col= m_videoram3[tile_index] & 0xf000; SET_TILE_INFO_MEMBER(1,tileno+0x2000,(col>>12)+(0x100/16),0); } WRITE16_MEMBER(bigstrkb_state::videoram3_w) { m_videoram3[offset] = data; m_tilemap3->mark_tile_dirty(offset); } /* Video Start / Update */ void bigstrkb_state::video_start() { m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bigstrkb_state::get_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 64, 32); m_tilemap2 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bigstrkb_state::get_tile2_info)), tilemap_mapper_delegate(*this, FUNC(bigstrkb_state::bg_scan)), 16, 16, 128, 64); m_tilemap3 = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(bigstrkb_state::get_tile3_info)), tilemap_mapper_delegate(*this, FUNC(bigstrkb_state::bg_scan)), 16, 16, 128, 64); m_tilemap->set_transparent_pen(15); //m_tilemap2->set_transparent_pen(15); m_tilemap3->set_transparent_pen(15); } uint32_t bigstrkb_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { // bitmap.fill(m_palette->black_pen(), cliprect); m_tilemap2->set_scrollx(0, m_vidreg1[0]+(256-14)); m_tilemap2->set_scrolly(0, m_vidreg2[0]); m_tilemap3->set_scrollx(0, m_vidreg1[1]+(256-14)); m_tilemap3->set_scrolly(0, m_vidreg2[1]); m_tilemap2->draw(screen, bitmap, cliprect, 0,0); m_tilemap3->draw(screen, bitmap, cliprect, 0,0); draw_sprites(bitmap,cliprect); m_tilemap->draw(screen, bitmap, cliprect, 0,0); // popmessage ("Regs %08x %08x %08x %08x",m_vidreg2[0],m_vidreg2[1],m_vidreg2[2],m_vidreg2[3]); return 0; }