diff options
Diffstat (limited to 'src/mame/video/bigevglf.c')
-rw-r--r-- | src/mame/video/bigevglf.c | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/src/mame/video/bigevglf.c b/src/mame/video/bigevglf.c new file mode 100644 index 00000000000..067ec1a1ed2 --- /dev/null +++ b/src/mame/video/bigevglf.c @@ -0,0 +1,95 @@ +/*************************************************************************** + + video.c + + Functions to emulate the video hardware of the machine. + +***************************************************************************/ +#include "driver.h" + + +UINT8 *bigevglf_spriteram1; +UINT8 *bigevglf_spriteram2; + + +static UINT32 vidram_bank = 0; +static UINT32 plane_selected = 0; +static UINT32 plane_visible = 0; +static UINT8 *vidram; + + +static mame_bitmap *tmp_bitmap[4]; + +WRITE8_HANDLER(bigevglf_palette_w) +{ + int color; + + paletteram[offset] = data; + color = paletteram[offset&0x3ff] | (paletteram[0x400+(offset&0x3ff)] << 8); + palette_set_color_rgb(Machine, offset&0x3ff, pal4bit(color >> 4), pal4bit(color >> 0), pal4bit(color >> 8)); +} + +WRITE8_HANDLER( bigevglf_gfxcontrol_w ) +{ +/* bits used: 0,1,2,3 + 0 and 2 select plane, + 1 and 3 select visible plane, +*/ + plane_selected=((data & 4)>>1) | (data&1); + plane_visible =((data & 8)>>2) | ((data&2)>>1); +} + +WRITE8_HANDLER( bigevglf_vidram_addr_w ) +{ + vidram_bank = (data & 0xff) * 0x100; +} + +WRITE8_HANDLER( bigevglf_vidram_w ) +{ + UINT32 x,y,o; + o = vidram_bank + offset; + vidram[ o+0x10000*plane_selected ] = data; + y = o >>8; + x = (o & 255); + *BITMAP_ADDR16(tmp_bitmap[plane_selected], y, x) = data; +} + +READ8_HANDLER( bigevglf_vidram_r ) +{ + return vidram[ 0x10000 * plane_selected + vidram_bank + offset]; +} + +VIDEO_START( bigevglf ) +{ + tmp_bitmap[0] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format); + tmp_bitmap[1] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format); + tmp_bitmap[2] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format); + tmp_bitmap[3] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format); + vidram = auto_malloc(0x100*0x100 * 4); +} + +static void draw_sprites(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect) +{ + int i,j; + for (i = 0xc0-4; i >= 0; i-=4) + { + int code,sx,sy; + code = bigevglf_spriteram2[i+1]; + sx = bigevglf_spriteram2[i+3]; + sy = 200-bigevglf_spriteram2[i]; + for(j=0;j<16;j++) + drawgfx(bitmap,machine->gfx[0], + bigevglf_spriteram1[(code<<4)+j]+((bigevglf_spriteram1[0x400+(code<<4)+j]&0xf)<<8), + bigevglf_spriteram2[i+2] & 0xf, + 0,0, + sx+((j&1)<<3),sy+((j>>1)<<3), + cliprect,TRANSPARENCY_PEN,0); + } +} + +VIDEO_UPDATE( bigevglf ) +{ + copybitmap(bitmap,tmp_bitmap[ plane_visible ],0,0,0,0,cliprect,TRANSPARENCY_NONE, 0); + draw_sprites(machine,bitmap,cliprect); + return 0; +} |