summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/tbowl.cpp
blob: d060459868c28345516c158134dbb3238e12e170 (plain) (tree)
1
2
3
4
5
6
7
8
9
                       
                                  

                   
                                         
 
                
                           
 


                                   
                                                   



                   

                                                                                           
 
                                             

 
                                        
 

                                                      



                                  
                                                   



                   

                                                                                            
 
                                             

 
                                         
 

                                                       

 
                                        
 
                                                

 
                                        
 
                                                       

 
                                        
 
                                                

 
                                        
 
                                                       



                                    
                                                    



                   
                                                                                              
                        
                                                             
 
                                             

 
                                        
 

                                                      

 
                                         
 
                                                      

 
                                         
 
                                                             

 
                                         
 
                                                      

 
                                         
 
                                                             

 




                               


                                                                                                                                                                            



                                              
 



                                      


 
 
                                                                                                                
 





                                                     
 
                                                                                                                      
                                                          
                                                                                           

                                                           



                 
                                                                                                                 
 





                                                          
 
                                                                                                                      
                                                          
                                                                                              

                                                           
 

                 
// license:BSD-3-Clause
// copyright-holders:David Haywood
/* video/tbowl.c */

/* see drivers/tbowl.cpp for more info */

#include "emu.h"
#include "includes/tbowl.h"


/* Foreground Layer (tx) Tilemap */

TILE_GET_INFO_MEMBER(tbowl_state::get_tx_tile_info)
{
	int tileno;
	int col;

	tileno = m_txvideoram[tile_index] | ((m_txvideoram[tile_index+0x800] & 0x07) << 8);
	col = (m_txvideoram[tile_index+0x800] & 0xf0) >> 4;

	SET_TILE_INFO_MEMBER(0,tileno,col,0);
}

WRITE8_MEMBER(tbowl_state::txvideoram_w)
{
	m_txvideoram[offset] = data;
	m_tx_tilemap->mark_tile_dirty(offset & 0x7ff);
}

/* Bottom BG Layer (bg) Tilemap */

TILE_GET_INFO_MEMBER(tbowl_state::get_bg_tile_info)
{
	int tileno;
	int col;

	tileno = m_bgvideoram[tile_index] | ((m_bgvideoram[tile_index+0x1000] & 0x0f) << 8);
	col = (m_bgvideoram[tile_index+0x1000] & 0xf0) >> 4;

	SET_TILE_INFO_MEMBER(1,tileno,col,0);
}

WRITE8_MEMBER(tbowl_state::bg2videoram_w)
{
	m_bg2videoram[offset] = data;
	m_bg2_tilemap->mark_tile_dirty(offset & 0xfff);
}

WRITE8_MEMBER(tbowl_state::bgxscroll_lo)
{
	m_xscroll = (m_xscroll & 0xff00) | data;
}

WRITE8_MEMBER(tbowl_state::bgxscroll_hi)
{
	m_xscroll = (m_xscroll & 0x00ff) | (data << 8);
}

WRITE8_MEMBER(tbowl_state::bgyscroll_lo)
{
	m_yscroll = (m_yscroll & 0xff00) | data;
}

WRITE8_MEMBER(tbowl_state::bgyscroll_hi)
{
	m_yscroll = (m_yscroll & 0x00ff) | (data << 8);
}

/* Middle BG Layer (bg2) Tilemaps */

TILE_GET_INFO_MEMBER(tbowl_state::get_bg2_tile_info)
{
	int tileno;
	int col;

	tileno = m_bg2videoram[tile_index] | ((m_bg2videoram[tile_index+0x1000] & 0x0f) << 8);
	tileno ^= 0x400;
	col = (m_bg2videoram[tile_index+0x1000] & 0xf0) >> 4;

	SET_TILE_INFO_MEMBER(2,tileno,col,0);
}

WRITE8_MEMBER(tbowl_state::bgvideoram_w)
{
	m_bgvideoram[offset] = data;
	m_bg_tilemap->mark_tile_dirty(offset & 0xfff);
}

WRITE8_MEMBER(tbowl_state::bg2xscroll_lo)
{
	m_bg2xscroll = (m_bg2xscroll & 0xff00) | data;
}

WRITE8_MEMBER(tbowl_state::bg2xscroll_hi)
{
	m_bg2xscroll = (m_bg2xscroll & 0x00ff) | (data << 8);
}

WRITE8_MEMBER(tbowl_state::bg2yscroll_lo)
{
	m_bg2yscroll = (m_bg2yscroll & 0xff00) | data;
}

WRITE8_MEMBER(tbowl_state::bg2yscroll_hi)
{
	m_bg2yscroll = (m_bg2yscroll & 0x00ff) | (data << 8);
}


/*** Video Start / Update ***/

void tbowl_state::video_start()
{
	m_tx_tilemap  = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tbowl_state::get_tx_tile_info)),  TILEMAP_SCAN_ROWS,  8, 8,  64,32);
	m_bg_tilemap  = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tbowl_state::get_bg_tile_info)),  TILEMAP_SCAN_ROWS, 16,16, 128,32);
	m_bg2_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(tbowl_state::get_bg2_tile_info)), TILEMAP_SCAN_ROWS, 16,16, 128,32);

	m_tx_tilemap->set_transparent_pen(0);
	m_bg_tilemap->set_transparent_pen(0);
	m_bg2_tilemap->set_transparent_pen(0);

	save_item(NAME(m_xscroll));
	save_item(NAME(m_yscroll));
	save_item(NAME(m_bg2xscroll));
	save_item(NAME(m_bg2yscroll));
}



uint32_t tbowl_state::screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
	m_bg_tilemap->set_scrollx(0, m_xscroll );
	m_bg_tilemap->set_scrolly(0, m_yscroll );
	m_bg2_tilemap->set_scrollx(0, m_bg2xscroll );
	m_bg2_tilemap->set_scrolly(0, m_bg2yscroll );
	m_tx_tilemap->set_scrollx(0, 0 );
	m_tx_tilemap->set_scrolly(0, 0 );

	bitmap.fill(0x100, cliprect); /* is there a register controlling the colour? looks odd when screen is blank */
	m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
	m_sprgen->tbowl_draw_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), 0, m_spriteram);
	m_bg2_tilemap->draw(screen, bitmap, cliprect, 0,0);
	m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);

	return 0;
}

uint32_t tbowl_state::screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
	m_bg_tilemap->set_scrollx(0, m_xscroll+32*8 );
	m_bg_tilemap->set_scrolly(0, m_yscroll );
	m_bg2_tilemap->set_scrollx(0, m_bg2xscroll+32*8 );
	m_bg2_tilemap->set_scrolly(0, m_bg2yscroll );
	m_tx_tilemap->set_scrollx(0, 32*8 );
	m_tx_tilemap->set_scrolly(0, 0 );

	bitmap.fill(0x100, cliprect); /* is there a register controlling the colour? looks odd when screen is blank */
	m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
	m_sprgen->tbowl_draw_sprites(bitmap,cliprect, m_gfxdecode->gfx(3), 32*8, m_spriteram);
	m_bg2_tilemap->draw(screen, bitmap, cliprect, 0,0);
	m_tx_tilemap->draw(screen, bitmap, cliprect, 0,0);

	return 0;
}