summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/sprcros2.c
blob: 32a79f509558b33e301780990226952a528d9b89 (plain) (tree)
1
2
3
4
5
6
7
8




                         
                
                              
 


                        
              
 
                                     
                                                             


                                                   
         


                                     




                                                            
 




                                                            
 
                                    


                                                   
                                                             
 
                                                                                       

         




                                                                        
         
                                                                                                 
                                                                             





                                                        
                                                                             




                                       
                                                                               
 

                                                                  



                                       
                                                                               
 

                                                                  



                                      
                                                                               

                               
                                                                       
            
                                                                 



                                      
                                                                               
 
                                                         



                                                
                                                                      

                                                             

















                                                  
                                                                      

                                                             


                                   










                                      
                              




                           
                                                                      
 

                                                                                                                
 
                                                                                                       

 
                                                                                              
 
                                                                      
                                         
 
                                                                    
         
                                             















                                                                        



                                                                                  

                                  
                                                






                                               
                                                                         
                                                         
                                      

                                            
                                                                                                            



                 
                         
 
                                                                                
 
                                                                 
                                                          
                                                                 

                 
/*
Super Cross II (JPN Ver.)
(c)1986 GM Shoji
*/

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


PALETTE_INIT( sprcros2 )
{
	int i;

	/* allocate the colortable */
	machine.colortable = colortable_alloc(machine, 0x20);

	/* create a lookup table for the palette */
	for (i = 0; i < 0x20; i++)
	{
		int bit0, bit1, bit2;
		int 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 = (color_prom[i] >> 6) & 0x01;
		bit1 = (color_prom[i] >> 7) & 0x01;
		b = 0x47 * bit0 + 0xb8 * bit1;
		palette_set_color(machine,i,MAKE_RGB(r,g,b));

		colortable_palette_set_color(machine.colortable, i, MAKE_RGB(r, g, b));
	}

	/* color_prom now points to the beginning of the lookup table */
	color_prom += 0x20;

	/* bg */
	for (i = 0; i < 0x100; i++)
	{
		UINT8 ctabentry = (color_prom[i] & 0x0f) | ((color_prom[i + 0x100] & 0x0f) << 4);
		colortable_entry_set_value(machine.colortable, i, ctabentry);
	}

	/* sprites & fg */
	for (i = 0x100; i < 0x300; i++)
	{
		UINT8 ctabentry = color_prom[i + 0x100];
		colortable_entry_set_value(machine.colortable, i, ctabentry);
	}
}

WRITE8_HANDLER( sprcros2_fgvideoram_w )
{
	sprcros2_state *state = space->machine().driver_data<sprcros2_state>();

	state->m_fgvideoram[offset] = data;
	tilemap_mark_tile_dirty(state->m_fgtilemap, offset&0x3ff);
}

WRITE8_HANDLER( sprcros2_bgvideoram_w )
{
	sprcros2_state *state = space->machine().driver_data<sprcros2_state>();

	state->m_bgvideoram[offset] = data;
	tilemap_mark_tile_dirty(state->m_bgtilemap, offset&0x3ff);
}

WRITE8_HANDLER( sprcros2_bgscrollx_w )
{
	sprcros2_state *state = space->machine().driver_data<sprcros2_state>();

	if(state->m_port7&0x02)
		tilemap_set_scrollx(state->m_bgtilemap, 0, 0x100-data);
	else
		tilemap_set_scrollx(state->m_bgtilemap, 0, data);
}

WRITE8_HANDLER( sprcros2_bgscrolly_w )
{
	sprcros2_state *state = space->machine().driver_data<sprcros2_state>();

	tilemap_set_scrolly(state->m_bgtilemap, 0, data);
}

static TILE_GET_INFO( get_sprcros2_bgtile_info )
{
	sprcros2_state *state = machine.driver_data<sprcros2_state>();
	UINT32 tile_number = state->m_bgvideoram[tile_index];
	UINT8 attr = state->m_bgvideoram[tile_index + 0x400];

	//attr
	//76543210
	//xxxx---- colour
	//----x--- flipx
	//-----xxx tile bank

	tile_number += (attr&0x07)<<8;

	SET_TILE_INFO(
			0,
			tile_number,
			(attr&0xf0)>>4,
			(attr&0x08)?TILE_FLIPX:0);
}

static TILE_GET_INFO( get_sprcros2_fgtile_info )
{
	sprcros2_state *state = machine.driver_data<sprcros2_state>();
	UINT32 tile_number = state->m_fgvideoram[tile_index];
	UINT8 attr = state->m_fgvideoram[tile_index + 0x400];
	int color = (attr&0xfc)>>2;

	tileinfo->group = color;

	//attr
	//76543210
	//xxxxxx-- colour
	//------xx tile bank

	tile_number += (attr&0x03)<<8;

	SET_TILE_INFO(
			2,
			tile_number,
			color,
			0);
}

VIDEO_START( sprcros2 )
{
	sprcros2_state *state = machine.driver_data<sprcros2_state>();

	state->m_bgtilemap = tilemap_create(machine, get_sprcros2_bgtile_info, tilemap_scan_rows, 8, 8, 32, 32);
	state->m_fgtilemap = tilemap_create(machine, get_sprcros2_fgtile_info, tilemap_scan_rows, 8, 8, 32, 32);

	colortable_configure_tilemap_groups(machine.colortable, state->m_fgtilemap, machine.gfx[2], 0);
}

static void draw_sprites(running_machine &machine, bitmap_t *bitmap,const rectangle *cliprect)
{
	sprcros2_state *state = machine.driver_data<sprcros2_state>();
	int offs,sx,sy,color,flipx,flipy;

	for (offs = state->m_spriteram_size-4; offs >= 0; offs -= 4)
	{
		if (state->m_spriteram[offs])
		{

			//offs
			//76543210
			//x------- unused
			//-xxxxxxx sprite number
			//offs+1
			//76543210
			//xx------ unused
			//--xxx--- colour (6/7 unused and blank in prom)
			//-----x-- unused
			//------x- flipx
			//-------x unused
			//offs+2   y pos
			//offs+3   x pos

			sx = ((state->m_spriteram[offs+3]+0x10)%0x100)-0x10;
			sy = 225-(((state->m_spriteram[offs+2]+0x10)%0x100)-0x10);
			color = (state->m_spriteram[offs+1]&0x38)>>3;
			flipx = state->m_spriteram[offs+1]&0x02;
			flipy = 0;

			if (state->m_port7&0x02)
			{
				sx = 224-sx;
				sy = 224-sy;
				flipx = !flipx;
				flipy = !flipy;
			}

			drawgfx_transmask(bitmap,cliprect,machine.gfx[1],
				state->m_spriteram[offs],
				color,
				flipx,flipy,
				sx,sy,
				colortable_get_transpen_mask(machine.colortable, machine.gfx[1], color, 0));
		}
	}
}

SCREEN_UPDATE( sprcros2 )
{
	sprcros2_state *state = screen->machine().driver_data<sprcros2_state>();

	tilemap_draw(bitmap, cliprect, state->m_bgtilemap, 0, 0);
	draw_sprites(screen->machine(), bitmap, cliprect);
	tilemap_draw(bitmap, cliprect, state->m_fgtilemap, 0, 0);
	return 0;
}