summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/aerofgt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/aerofgt.c')
-rw-r--r--src/mame/video/aerofgt.c745
1 files changed, 745 insertions, 0 deletions
diff --git a/src/mame/video/aerofgt.c b/src/mame/video/aerofgt.c
new file mode 100644
index 00000000000..bd0ba6b8f46
--- /dev/null
+++ b/src/mame/video/aerofgt.c
@@ -0,0 +1,745 @@
+#include "driver.h"
+
+
+UINT16 *aerofgt_rasterram;
+UINT16 *aerofgt_bg1videoram,*aerofgt_bg2videoram;
+UINT16 *aerofgt_spriteram1,*aerofgt_spriteram2,*aerofgt_spriteram3;
+UINT16 *wbbc97_bitmapram;
+size_t aerofgt_spriteram1_size,aerofgt_spriteram2_size,aerofgt_spriteram3_size;
+
+static UINT8 gfxbank[8];
+static UINT16 bg1scrollx,bg1scrolly,bg2scrollx,bg2scrolly,wbbc97_bitmap_enable;
+
+static int charpalettebank,spritepalettebank;
+
+static tilemap *bg1_tilemap,*bg2_tilemap;
+static int sprite_gfx;
+
+
+/***************************************************************************
+
+ Callbacks for the TileMap code
+
+***************************************************************************/
+
+static TILE_GET_INFO( get_pspikes_tile_info )
+{
+ UINT16 code = aerofgt_bg1videoram[tile_index];
+ int bank = (code & 0x1000) >> 12;
+ SET_TILE_INFO(
+ 0,
+ (code & 0x0fff) + (gfxbank[bank] << 12),
+ ((code & 0xe000) >> 13) + 8 * charpalettebank,
+ 0);
+}
+
+static TILE_GET_INFO( karatblz_bg1_tile_info )
+{
+ UINT16 code = aerofgt_bg1videoram[tile_index];
+ SET_TILE_INFO(
+ 0,
+ (code & 0x1fff) + (gfxbank[0] << 13),
+ (code & 0xe000) >> 13,
+ 0);
+}
+
+/* also spinlbrk */
+static TILE_GET_INFO( karatblz_bg2_tile_info )
+{
+ UINT16 code = aerofgt_bg2videoram[tile_index];
+ SET_TILE_INFO(
+ 1,
+ (code & 0x1fff) + (gfxbank[1] << 13),
+ (code & 0xe000) >> 13,
+ 0);
+}
+
+static TILE_GET_INFO( spinlbrk_bg1_tile_info )
+{
+ UINT16 code = aerofgt_bg1videoram[tile_index];
+ SET_TILE_INFO(
+ 0,
+ (code & 0x0fff) + (gfxbank[0] << 12),
+ (code & 0xf000) >> 12,
+ 0);
+}
+
+static TILE_GET_INFO( get_bg1_tile_info )
+{
+ UINT16 code = aerofgt_bg1videoram[tile_index];
+ int bank = (code & 0x1800) >> 11;
+ SET_TILE_INFO(
+ 0,
+ (code & 0x07ff) + (gfxbank[bank] << 11),
+ (code & 0xe000) >> 13,
+ 0);
+}
+
+static TILE_GET_INFO( get_bg2_tile_info )
+{
+ UINT16 code = aerofgt_bg2videoram[tile_index];
+ int bank = 4 + ((code & 0x1800) >> 11);
+ SET_TILE_INFO(
+ 1,
+ (code & 0x07ff) + (gfxbank[bank] << 11),
+ (code & 0xe000) >> 13,
+ 0);
+}
+
+
+/***************************************************************************
+
+ Start the video hardware emulation.
+
+***************************************************************************/
+
+VIDEO_START( pspikes )
+{
+ bg1_tilemap = tilemap_create(get_pspikes_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,32);
+ /* no bg2 in this game */
+
+ sprite_gfx = 1;
+}
+
+
+VIDEO_START( karatblz )
+{
+ bg1_tilemap = tilemap_create(karatblz_bg1_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8,8,64,64);
+ bg2_tilemap = tilemap_create(karatblz_bg2_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,64);
+
+ tilemap_set_transparent_pen(bg2_tilemap,15);
+
+ spritepalettebank = 0;
+
+ sprite_gfx = 2;
+}
+
+VIDEO_START( spinlbrk )
+{
+ int i;
+
+ bg1_tilemap = tilemap_create(spinlbrk_bg1_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8,8,64,64);
+ bg2_tilemap = tilemap_create(karatblz_bg2_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,64);
+
+ tilemap_set_transparent_pen(bg2_tilemap,15);
+
+ spritepalettebank = 0;
+
+ sprite_gfx = 2;
+
+
+ /* sprite maps are hardcoded in this game */
+
+ /* enemy sprites use ROM instead of RAM */
+ aerofgt_spriteram2 = (UINT16 *)memory_region(REGION_GFX5);
+ aerofgt_spriteram2_size = 0x20000;
+
+ /* front sprites are direct maps */
+ aerofgt_spriteram1 = aerofgt_spriteram2 + aerofgt_spriteram2_size/2;
+ aerofgt_spriteram1_size = 0x4000;
+ for (i = 0;i < aerofgt_spriteram1_size/2;i++)
+ aerofgt_spriteram1[i] = i;
+}
+
+VIDEO_START( turbofrc )
+{
+ bg1_tilemap = tilemap_create(get_bg1_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN, 8,8,64,64);
+ bg2_tilemap = tilemap_create(get_bg2_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,64);
+
+ tilemap_set_transparent_pen(bg2_tilemap,15);
+
+ spritepalettebank = 0;
+
+ sprite_gfx = 2;
+}
+
+VIDEO_START( wbbc97 )
+{
+ bg1_tilemap = tilemap_create(get_pspikes_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,64,32);
+ /* no bg2 in this game */
+
+ tilemap_set_transparent_pen(bg1_tilemap,15);
+
+ sprite_gfx = 1;
+}
+
+/***************************************************************************
+
+ Memory handlers
+
+***************************************************************************/
+
+WRITE16_HANDLER( aerofgt_bg1videoram_w )
+{
+ COMBINE_DATA(&aerofgt_bg1videoram[offset]);
+ tilemap_mark_tile_dirty(bg1_tilemap,offset);
+}
+
+WRITE16_HANDLER( aerofgt_bg2videoram_w )
+{
+ COMBINE_DATA(&aerofgt_bg2videoram[offset]);
+ tilemap_mark_tile_dirty(bg2_tilemap,offset);
+}
+
+
+static void setbank(tilemap *tmap,int num,int bank)
+{
+ if (gfxbank[num] != bank)
+ {
+ gfxbank[num] = bank;
+ tilemap_mark_all_tiles_dirty(tmap);
+ }
+}
+
+WRITE16_HANDLER( pspikes_gfxbank_w )
+{
+ if (ACCESSING_LSB)
+ {
+ setbank(bg1_tilemap,0,(data & 0xf0) >> 4);
+ setbank(bg1_tilemap,1,data & 0x0f);
+ }
+}
+
+WRITE16_HANDLER( pspikesb_gfxbank_w )
+{
+ COMBINE_DATA(&aerofgt_rasterram[0x200/2]);
+
+ setbank(bg1_tilemap,0,(data & 0xf000) >> 12);
+ setbank(bg1_tilemap,1,(data & 0x0f00) >> 8);
+}
+
+WRITE16_HANDLER( karatblz_gfxbank_w )
+{
+ if (ACCESSING_MSB)
+ {
+ setbank(bg1_tilemap,0,(data & 0x0100) >> 8);
+ setbank(bg2_tilemap,1,(data & 0x0800) >> 11);
+ }
+}
+
+WRITE16_HANDLER( spinlbrk_gfxbank_w )
+{
+ if (ACCESSING_LSB)
+ {
+ setbank(bg1_tilemap,0,(data & 0x07));
+ setbank(bg2_tilemap,1,(data & 0x38) >> 3);
+ }
+}
+
+WRITE16_HANDLER( turbofrc_gfxbank_w )
+{
+ static UINT16 bank[2];
+ tilemap *tmap = (offset == 0) ? bg1_tilemap : bg2_tilemap;
+
+ data = COMBINE_DATA(&bank[offset]);
+
+ setbank(tmap,4*offset + 0,(data >> 0) & 0x0f);
+ setbank(tmap,4*offset + 1,(data >> 4) & 0x0f);
+ setbank(tmap,4*offset + 2,(data >> 8) & 0x0f);
+ setbank(tmap,4*offset + 3,(data >> 12) & 0x0f);
+}
+
+WRITE16_HANDLER( aerofgt_gfxbank_w )
+{
+ static UINT16 bank[4];
+ tilemap *tmap = (offset < 2) ? bg1_tilemap : bg2_tilemap;
+
+ data = COMBINE_DATA(&bank[offset]);
+
+ setbank(tmap,2*offset + 0,(data >> 8) & 0xff);
+ setbank(tmap,2*offset + 1,(data >> 0) & 0xff);
+}
+
+WRITE16_HANDLER( aerofgt_bg1scrollx_w )
+{
+ COMBINE_DATA(&bg1scrollx);
+}
+
+WRITE16_HANDLER( aerofgt_bg1scrolly_w )
+{
+ COMBINE_DATA(&bg1scrolly);
+}
+
+WRITE16_HANDLER( aerofgt_bg2scrollx_w )
+{
+ COMBINE_DATA(&bg2scrollx);
+}
+
+WRITE16_HANDLER( aerofgt_bg2scrolly_w )
+{
+ COMBINE_DATA(&bg2scrolly);
+}
+
+WRITE16_HANDLER( pspikes_palette_bank_w )
+{
+ if (ACCESSING_LSB)
+ {
+ spritepalettebank = data & 0x03;
+ if (charpalettebank != (data & 0x1c) >> 2)
+ {
+ charpalettebank = (data & 0x1c) >> 2;
+ tilemap_mark_all_tiles_dirty(bg1_tilemap);
+ }
+ }
+}
+
+WRITE16_HANDLER( wbbc97_bitmap_enable_w )
+{
+ COMBINE_DATA(&wbbc97_bitmap_enable);
+}
+
+/***************************************************************************
+
+ Display refresh
+
+***************************************************************************/
+
+static void aerofgt_draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect,int priority)
+{
+ int offs;
+
+
+ priority <<= 12;
+
+ offs = 0;
+ while (offs < 0x0400 && (aerofgt_spriteram3[offs] & 0x8000) == 0)
+ {
+ int attr_start;
+
+ attr_start = 4 * (aerofgt_spriteram3[offs] & 0x03ff);
+
+ /* is the way I handle priority correct? Or should I just check bit 13? */
+ if ((aerofgt_spriteram3[attr_start + 2] & 0x3000) == priority)
+ {
+ int map_start;
+ int ox,oy,x,y,xsize,ysize,zoomx,zoomy,flipx,flipy,color;
+
+ ox = aerofgt_spriteram3[attr_start + 1] & 0x01ff;
+ xsize = (aerofgt_spriteram3[attr_start + 1] & 0x0e00) >> 9;
+ zoomx = (aerofgt_spriteram3[attr_start + 1] & 0xf000) >> 12;
+ oy = aerofgt_spriteram3[attr_start + 0] & 0x01ff;
+ ysize = (aerofgt_spriteram3[attr_start + 0] & 0x0e00) >> 9;
+ zoomy = (aerofgt_spriteram3[attr_start + 0] & 0xf000) >> 12;
+ flipx = aerofgt_spriteram3[attr_start + 2] & 0x4000;
+ flipy = aerofgt_spriteram3[attr_start + 2] & 0x8000;
+ color = (aerofgt_spriteram3[attr_start + 2] & 0x0f00) >> 8;
+ map_start = aerofgt_spriteram3[attr_start + 3] & 0x3fff;
+
+ ox += (xsize*zoomx+2)/4;
+ oy += (ysize*zoomy+2)/4;
+
+ zoomx = 32 - zoomx;
+ zoomy = 32 - zoomy;
+
+ for (y = 0;y <= ysize;y++)
+ {
+ int sx,sy;
+
+ if (flipy) sy = ((oy + zoomy * (ysize - y)/2 + 16) & 0x1ff) - 16;
+ else sy = ((oy + zoomy * y / 2 + 16) & 0x1ff) - 16;
+
+ for (x = 0;x <= xsize;x++)
+ {
+ int code;
+
+ if (flipx) sx = ((ox + zoomx * (xsize - x) / 2 + 16) & 0x1ff) - 16;
+ else sx = ((ox + zoomx * x / 2 + 16) & 0x1ff) - 16;
+
+ if (map_start < 0x2000)
+ code = aerofgt_spriteram1[map_start & 0x1fff] & 0x1fff;
+ else
+ code = aerofgt_spriteram2[map_start & 0x1fff] & 0x1fff;
+
+ drawgfxzoom(bitmap,machine->gfx[sprite_gfx + (map_start >= 0x2000 ? 1 : 0)],
+ code,
+ color,
+ flipx,flipy,
+ sx,sy,
+ cliprect,TRANSPARENCY_PEN,15,
+ zoomx << 11, zoomy << 11);
+ map_start++;
+ }
+ }
+ }
+
+ offs++;
+ }
+}
+
+static void turbofrc_draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect,int chip,int chip_disabled_pri)
+{
+ int attr_start,base,first;
+
+ base = chip * 0x0200;
+ first = 4 * aerofgt_spriteram3[0x1fe + base];
+
+ for (attr_start = base + 0x0200-8;attr_start >= first + base;attr_start -= 4)
+ {
+ int map_start;
+ int ox,oy,x,y,xsize,ysize,zoomx,zoomy,flipx,flipy,color,pri;
+// some other drivers still use this wrong table, they have to be upgraded
+// int zoomtable[16] = { 0,7,14,20,25,30,34,38,42,46,49,52,54,57,59,61 };
+
+ if (!(aerofgt_spriteram3[attr_start + 2] & 0x0080)) continue;
+ pri = aerofgt_spriteram3[attr_start + 2] & 0x0010;
+ if ( chip_disabled_pri & !pri) continue;
+ if (!chip_disabled_pri & (pri>>4)) continue;
+ ox = aerofgt_spriteram3[attr_start + 1] & 0x01ff;
+ xsize = (aerofgt_spriteram3[attr_start + 2] & 0x0700) >> 8;
+ zoomx = (aerofgt_spriteram3[attr_start + 1] & 0xf000) >> 12;
+ oy = aerofgt_spriteram3[attr_start + 0] & 0x01ff;
+ ysize = (aerofgt_spriteram3[attr_start + 2] & 0x7000) >> 12;
+ zoomy = (aerofgt_spriteram3[attr_start + 0] & 0xf000) >> 12;
+ flipx = aerofgt_spriteram3[attr_start + 2] & 0x0800;
+ flipy = aerofgt_spriteram3[attr_start + 2] & 0x8000;
+ color = (aerofgt_spriteram3[attr_start + 2] & 0x000f) + 16 * spritepalettebank;
+
+ map_start = aerofgt_spriteram3[attr_start + 3];
+
+// aerofgt has this adjustment, but doing it here would break turbo force title screen
+// ox += (xsize*zoomx+2)/4;
+// oy += (ysize*zoomy+2)/4;
+
+ zoomx = 32 - zoomx;
+ zoomy = 32 - zoomy;
+
+ for (y = 0;y <= ysize;y++)
+ {
+ int sx,sy;
+
+ if (flipy) sy = ((oy + zoomy * (ysize - y)/2 + 16) & 0x1ff) - 16;
+ else sy = ((oy + zoomy * y / 2 + 16) & 0x1ff) - 16;
+
+ for (x = 0;x <= xsize;x++)
+ {
+ int code;
+
+ if (flipx) sx = ((ox + zoomx * (xsize - x) / 2 + 16) & 0x1ff) - 16;
+ else sx = ((ox + zoomx * x / 2 + 16) & 0x1ff) - 16;
+
+ if (chip == 0)
+ code = aerofgt_spriteram1[map_start % (aerofgt_spriteram1_size/2)];
+ else
+ code = aerofgt_spriteram2[map_start % (aerofgt_spriteram2_size/2)];
+
+ pdrawgfxzoom(bitmap,machine->gfx[sprite_gfx + chip],
+ code,
+ color,
+ flipx,flipy,
+ sx,sy,
+ cliprect,TRANSPARENCY_PEN,15,
+ zoomx << 11, zoomy << 11,
+ pri ? 0 : 2);
+ map_start++;
+ }
+
+ if (xsize == 2) map_start += 1;
+ if (xsize == 4) map_start += 3;
+ if (xsize == 5) map_start += 2;
+ if (xsize == 6) map_start += 1;
+ }
+ }
+}
+
+static void pspikesb_draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect)
+{
+ int i;
+
+ for (i = 4;i < aerofgt_spriteram3_size/2;i += 4)
+ {
+ int xpos,ypos,color,flipx,flipy,code;
+
+ if (aerofgt_spriteram3[i + 3 - 4] & 0x8000) break;
+
+ xpos = (aerofgt_spriteram3[i + 2] & 0x1ff) - 34;
+ ypos = 256 - (aerofgt_spriteram3[i + 3 - 4] & 0x1ff) - 33;
+ code = aerofgt_spriteram3[i + 0] & 0x1fff;
+ flipy = 0;
+ flipx = aerofgt_spriteram3[i + 1] & 0x0800;
+ color = aerofgt_spriteram3[i + 1] & 0x000f;
+
+ drawgfx(bitmap,machine->gfx[sprite_gfx],
+ code,
+ color,
+ flipx,flipy,
+ xpos,ypos,
+ cliprect,TRANSPARENCY_PEN,15);
+
+ /* wrap around y */
+ drawgfx(bitmap,machine->gfx[sprite_gfx],
+ code,
+ color,
+ flipx,flipy,
+ xpos,ypos + 512,
+ cliprect,TRANSPARENCY_PEN,15);
+
+ }
+}
+
+static void aerfboot_draw_sprites(running_machine *machine, mame_bitmap *bitmap,const rectangle *cliprect)
+{
+ int attr_start;//,base,first;
+
+
+// base = chip * 0x0200;
+// first = 4 * aerofgt_spriteram3[0x1fe + base];
+
+ for (attr_start = aerofgt_spriteram3_size/2 - 4;attr_start >= 0;attr_start -= 4)
+ {
+ int code;
+ int ox,oy,x,y,xsize,ysize,zoomx,zoomy,flipx,flipy,color,pri;
+// some other drivers still use this wrong table, they have to be upgraded
+// int zoomtable[16] = { 0,7,14,20,25,30,34,38,42,46,49,52,54,57,59,61 };
+
+ ox = aerofgt_spriteram3[attr_start + 1] & 0x01ff;
+ oy = aerofgt_spriteram3[attr_start + 0] & 0x01ff;
+ flipx = aerofgt_spriteram3[attr_start + 2] & 0x0800;
+ flipy = aerofgt_spriteram3[attr_start + 2] & 0x8000;
+ color = aerofgt_spriteram3[attr_start + 2] & 0x000f;
+
+// xsize = (aerofgt_spriteram3[attr_start + 2] & 0x0700) >> 8;
+ xsize = (aerofgt_spriteram3[attr_start + 1] & 0x0e00) >> 9;
+ zoomx = (aerofgt_spriteram3[attr_start + 1] & 0xf000) >> 12;
+// ysize = (aerofgt_spriteram3[attr_start + 2] & 0x7000) >> 12;
+ ysize = (aerofgt_spriteram3[attr_start + 0] & 0x0e00) >> 9;
+ zoomy = (aerofgt_spriteram3[attr_start + 0] & 0xf000) >> 12;
+
+ pri = aerofgt_spriteram3[attr_start + 2] & 0x0010;
+ code = aerofgt_spriteram3[attr_start + 3] & 0x3fff;
+
+
+// aerofgt has this adjustment, but doing it here would break turbo force title screen
+// ox += (xsize*zoomx+2)/4;
+// oy += (ysize*zoomy+2)/4;
+
+ zoomx = 32 - zoomx;
+ zoomy = 32 - zoomy;
+
+ for (y = 0;y <= ysize;y++)
+ {
+ int sx,sy;
+
+ if (flipy) sy = ((oy + zoomy * (ysize - y)/2 + 16) & 0x1ff) - 16;
+ else sy = ((oy + zoomy * y / 2 + 16) & 0x1ff) - 16;
+
+ for (x = 0;x <= xsize;x++)
+ {
+ if (flipx) sx = ((ox + zoomx * (xsize - x) / 2 + 16) & 0x1ff) - 16;
+ else sx = ((ox + zoomx * x / 2 + 16) & 0x1ff) - 16;
+
+ pdrawgfxzoom(bitmap,machine->gfx[sprite_gfx + (code >= 0x1000 ? 0 : 1)],
+ code,
+ color,
+ flipx,flipy,
+ sx,sy,
+ cliprect,TRANSPARENCY_PEN,15,
+ zoomx << 11,zoomy << 11,
+ pri ? 0 : 0x2);
+ code++;
+ }
+
+// if (xsize == 2) code += 1;
+// if (xsize == 4) code += 3;
+// if (xsize == 5) code += 2;
+// if (xsize == 6) code += 1;
+ }
+ }
+}
+
+static void wbbc97_draw_bitmap(mame_bitmap *bitmap)
+{
+ int x,y,count;
+ int color;
+
+ count = 16; // weird, the bitmap doesn't start at 0?
+ for (y=0;y<256;y++)
+ {
+ for (x=0;x<512;x++)
+ {
+ color = wbbc97_bitmapram[count] >> 1;
+
+ /* data is GRB; convert to RGB */
+ color = (color & 0x1f) | ((color & 0x3e0) << 5) | ((color & 0x7c00) >> 5);
+ *BITMAP_ADDR16(bitmap, y, (10+x-aerofgt_rasterram[(y & 0x7f)])&0x1ff) = color;
+
+ count++;
+ count &= 0x1ffff;
+ }
+ }
+}
+
+
+VIDEO_UPDATE( pspikes )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,256);
+ scrolly = bg1scrolly;
+ for (i = 0;i < 256;i++)
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0xff,aerofgt_rasterram[i]);
+ tilemap_set_scrolly(bg1_tilemap,0,scrolly);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0, 0);
+ return 0;
+}
+
+VIDEO_UPDATE( pspikesb )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,256);
+ scrolly = bg1scrolly;
+ for (i = 0;i < 256;i++)
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0xff,aerofgt_rasterram[i]+22);
+ tilemap_set_scrolly(bg1_tilemap,0,scrolly);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ pspikesb_draw_sprites(machine,bitmap,cliprect);
+ return 0;
+}
+
+VIDEO_UPDATE( karatblz )
+{
+ tilemap_set_scrollx(bg1_tilemap,0,bg1scrollx-8);
+ tilemap_set_scrolly(bg1_tilemap,0,bg1scrolly);
+ tilemap_set_scrollx(bg2_tilemap,0,bg2scrollx-4);
+ tilemap_set_scrolly(bg2_tilemap,0,bg2scrolly);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,bg2_tilemap,0,0);
+
+ /* we use the priority buffer so sprites are drawn front to back */
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1, 0);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0, 0);
+ return 0;
+}
+
+VIDEO_UPDATE( spinlbrk )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,512);
+ scrolly = 0;
+ for (i = 0;i < 256;i++)
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0x1ff,aerofgt_rasterram[i]-8);
+// tilemap_set_scrolly(bg1_tilemap,0,bg1scrolly);
+ tilemap_set_scrollx(bg2_tilemap,0,bg2scrollx-4);
+// tilemap_set_scrolly(bg2_tilemap,0,bg2scrolly);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,bg2_tilemap,0,0);
+
+ /* we use the priority buffer so sprites are drawn front to back */
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0, 0);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1, 0);
+ return 0;
+}
+
+VIDEO_UPDATE( turbofrc )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,512);
+ scrolly = bg1scrolly+2;
+ for (i = 0;i < 256;i++)
+// tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0x1ff,aerofgt_rasterram[i]-11);
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0x1ff,aerofgt_rasterram[7]-11);
+ tilemap_set_scrolly(bg1_tilemap,0,scrolly);
+ tilemap_set_scrollx(bg2_tilemap,0,bg2scrollx-7);
+ tilemap_set_scrolly(bg2_tilemap,0,bg2scrolly+2);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,bg2_tilemap,0,1);
+
+ /* we use the priority buffer so sprites are drawn front to back */
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1,-1); //ship
+ turbofrc_draw_sprites(machine,bitmap,cliprect,1, 0); //intro
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0,-1); //enemy
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0, 0); //enemy
+ return 0;
+}
+
+VIDEO_UPDATE( aerofgt )
+{
+ tilemap_set_scrollx(bg1_tilemap,0,aerofgt_rasterram[0x0000]-18);
+ tilemap_set_scrolly(bg1_tilemap,0,bg1scrolly);
+ tilemap_set_scrollx(bg2_tilemap,0,aerofgt_rasterram[0x0200]-20);
+ tilemap_set_scrolly(bg2_tilemap,0,bg2scrolly);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+
+ aerofgt_draw_sprites(machine,bitmap,cliprect,0);
+ aerofgt_draw_sprites(machine,bitmap,cliprect,1);
+
+ tilemap_draw(bitmap,cliprect,bg2_tilemap,0,0);
+
+ aerofgt_draw_sprites(machine,bitmap,cliprect,2);
+ aerofgt_draw_sprites(machine,bitmap,cliprect,3);
+ return 0;
+}
+
+
+VIDEO_UPDATE( aerfboot )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,512);
+ scrolly = bg1scrolly+2;
+ for (i = 0;i < 256;i++)
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0x1ff,aerofgt_rasterram[7]+174);
+ tilemap_set_scrolly(bg1_tilemap,0,scrolly);
+ tilemap_set_scrollx(bg2_tilemap,0,bg2scrollx+172);
+ tilemap_set_scrolly(bg2_tilemap,0,bg2scrolly+2);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,bg2_tilemap,0,1);
+
+ /* we use the priority buffer so sprites are drawn front to back */
+ aerfboot_draw_sprites(machine,bitmap,cliprect);
+ return 0;
+}
+
+VIDEO_UPDATE( wbbc97 )
+{
+ int i,scrolly;
+
+ tilemap_set_scroll_rows(bg1_tilemap,256);
+ scrolly = bg1scrolly;
+ for (i = 0;i < 256;i++)
+ tilemap_set_scrollx(bg1_tilemap,(i + scrolly) & 0xff,aerofgt_rasterram[i]);
+ tilemap_set_scrolly(bg1_tilemap,0,scrolly);
+
+ fillbitmap(priority_bitmap,0,cliprect);
+
+ if(wbbc97_bitmap_enable)
+ {
+ wbbc97_draw_bitmap(bitmap);
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,0,0);
+ }
+ else
+ {
+ tilemap_draw(bitmap,cliprect,bg1_tilemap,TILEMAP_DRAW_OPAQUE,0);
+ }
+
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0,-1);
+ turbofrc_draw_sprites(machine,bitmap,cliprect,0, 0);
+ return 0;
+}