summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/ssrj.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/ssrj.c')
-rw-r--r--src/mame/video/ssrj.c292
1 files changed, 292 insertions, 0 deletions
diff --git a/src/mame/video/ssrj.c b/src/mame/video/ssrj.c
new file mode 100644
index 00000000000..688490fbdd8
--- /dev/null
+++ b/src/mame/video/ssrj.c
@@ -0,0 +1,292 @@
+#include "driver.h"
+
+static tilemap *tilemap1,*tilemap2,*tilemap4;
+UINT8 *ssrj_vram1,*ssrj_vram2,*ssrj_vram3,*ssrj_vram4,*ssrj_scrollram;
+
+/* tilemap 1 */
+
+WRITE8_HANDLER(ssrj_vram1_w)
+{
+ ssrj_vram1[offset]=data;
+ tilemap_mark_tile_dirty(tilemap1,offset>>1);
+}
+
+READ8_HANDLER(ssrj_vram1_r)
+{
+ return ssrj_vram1[offset];
+}
+
+static TILE_GET_INFO( get_tile_info1 )
+{
+ int code;
+ code=ssrj_vram1[tile_index<<1]+(ssrj_vram1[(tile_index<<1)+1]<<8);
+ SET_TILE_INFO(
+ 0,
+ code&1023,
+ (code>>12)&0x3,
+ ((code & 0x8000) ? TILE_FLIPX:0) |( (code & 0x4000) ? TILE_FLIPY:0) );
+}
+
+/* tilemap 2 */
+
+WRITE8_HANDLER(ssrj_vram2_w)
+{
+ ssrj_vram2[offset]=data;
+ tilemap_mark_tile_dirty(tilemap2,offset>>1);
+}
+
+READ8_HANDLER(ssrj_vram2_r)
+{
+ return ssrj_vram2[offset];
+}
+
+static TILE_GET_INFO( get_tile_info2 )
+{
+ int code;
+ code=ssrj_vram2[tile_index<<1]+(ssrj_vram2[(tile_index<<1)+1]<<8);
+ SET_TILE_INFO(
+ 0,
+ code&1023,
+ ((code>>12)&0x3)+4,
+ ((code & 0x8000) ? TILE_FLIPX:0) |( (code & 0x4000) ? TILE_FLIPY:0) );
+}
+
+/* tilemap 4 */
+
+WRITE8_HANDLER(ssrj_vram4_w)
+{
+ ssrj_vram4[offset]=data;
+ tilemap_mark_tile_dirty(tilemap4,offset>>1);
+}
+
+READ8_HANDLER(ssrj_vram4_r)
+{
+ return ssrj_vram4[offset];
+}
+
+static TILE_GET_INFO( get_tile_info4 )
+{
+ int code;
+ code=ssrj_vram4[tile_index<<1]+(ssrj_vram4[(tile_index<<1)+1]<<8);
+ SET_TILE_INFO(
+ 0,
+ code&1023,
+ ((code>>12)&0x3)+12,
+ ((code & 0x8000) ? TILE_FLIPX:0) |( (code & 0x4000) ? TILE_FLIPY:0) );
+}
+
+
+
+static const int fakecols[4*4][8][3]=
+{
+
+{{0x00,0x00,0x00},
+ {42,87,140},
+ {0,0,0},
+ {33,75,160},
+ {0xff,0xff,0xff},
+ {37,56,81},
+ {0x1f,0x1f,0x2f},
+ {55,123,190}},
+
+{{0x00,0x00,0x00},
+ {0x00,99,41},
+ {0x00,0x00,0xff},
+ {0x00,0xff,0},
+ {255,255,255},
+ {0xff,0x00,0x00},
+ {0,45,105},
+ {0xff,0xff,0}},
+
+
+{{0x00,0x00,0x00},
+ {0x00,0x20,0x00},
+ {0x00,0x40,0x00},
+ {0x00,0x60,0x00},
+ {0x00,0x80,0x00},
+ {0x00,0xa0,0x00},
+ {0x00,0xc0,0x00},
+ {0x00,0xf0,0x00}},
+
+ {{0x00,0x00,0x00},
+ {0x20,0x00,0x20},
+ {0x40,0x00,0x40},
+ {0x60,0x00,0x60},
+ {0x80,0x00,0x80},
+ {0xa0,0x00,0xa0},
+ {0xc0,0x00,0xc0},
+ {0xf0,0x00,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0xff,0x00,0x00},
+ {0x7f,0x00,0x00},
+ {0x00,0x00,0x00},
+ {0x00,0x00,0x00},
+ {0xaf,0x00,0x00},
+ {0xff,0xff,0xff},
+ {0xff,0x7f,0x7f}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0xff,0x00,0x00},
+ {0x00,0x00,0x9f},
+ {0x60,0x60,0x60},
+ {0x00,0x00,0x00},
+ {0xff,0xff,0x00},
+ {0x00,0xff,0x00},
+ {0xff,0xff,0xff}},
+
+{
+ {0x00,0x00,0x00},
+ {0x00,0x00,0xff},
+ {0x00,0x00,0x7f},
+ {0x00,0x00,0x00},
+ {0x00,0x00,0x00},
+ {0x00,0x00,0xaf},
+ {0xff,0xff,0xff},
+ {0x7f,0x7f,0xff}},
+
+{{0x00,0x00,0x00},
+ {0xff,0xff,0x00},
+ {0x7f,0x7f,0x00},
+ {0x00,0x00,0x00},
+ {0x00,0x00,0x00},
+ {0xaf,0xaf,0x00},
+ {0xff,0xff,0xff},
+ {0xff,0xff,0x7f}},
+
+{{0x00,0x00,0x00},
+ {0x00,0xff,0x00},
+ {0x00,0x7f,0x00},
+ {0x00,0x00,0x00},
+ {0x00,0x00,0x00},
+ {0x00,0xaf,0x00},
+ {0xff,0xff,0xff},
+ {0x7f,0xff,0x7f}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{{0x00,0x00,0x00},
+ {0x20,0x20,0x20},
+ {0x40,0x40,0x40},
+ {0x60,0x60,0x60},
+ {0x80,0x80,0x80},
+ {0xa0,0xa0,0xa0},
+ {0xc0,0xc0,0xc0},
+ {0xf0,0xf0,0xf0}},
+
+{
+ {0x00,0x00,0x00},
+ {0xff,0xaf,0xaf},
+ {0x00,0x00,0xff},
+ {0xff,0xff,0xff},
+ {0x00,0x00,0x00},
+ {0xff,0x50,0x50},
+ {0xff,0xff,0x00},
+ {0x00,0xff,0x00}
+}
+
+};
+
+VIDEO_START( ssrj )
+{
+ tilemap1 = tilemap_create( get_tile_info1,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32 );
+ tilemap2 = tilemap_create( get_tile_info2,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32 );
+ tilemap4 = tilemap_create( get_tile_info4,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32,32 );
+ tilemap_set_transparent_pen(tilemap2,0);
+ tilemap_set_transparent_pen(tilemap4,0);
+}
+
+
+static void draw_objects(running_machine *machine, mame_bitmap *bitmap, const rectangle *cliprect )
+{
+ int i,j,k,x,y;
+
+ for(i=0;i<6;i++)
+ {
+ x=ssrj_scrollram[0x80+20*i];
+ y=ssrj_scrollram[0x80+20*i+2];
+ if(!ssrj_scrollram[0x80+20*i+3])
+ for(k=0;k<5;k++,y+=8)
+ for(j=0;j<0x20;j++)
+ {
+ int code;
+ code=ssrj_vram3[(i*5+k)*64+(31-j)*2]+256*ssrj_vram3[(i*5+k)*64+(31-j)*2+1];
+ drawgfx(bitmap,
+ machine->gfx[0],
+ code&1023,
+ ((code>>12)&0x3)+8,
+ code&0x8000,
+ code&0x4000,
+ (247-(x+(j<<3)))&0xff,
+ y,
+ cliprect,TRANSPARENCY_PEN,
+ 0);
+ }
+ }
+}
+
+
+PALETTE_INIT( ssrj )
+{
+ int i,j;
+ for(i=0;i<4*4;i++)
+ for(j=0;j<8;j++)
+ palette_set_color_rgb(machine,i*8+j,fakecols[i][j][0],fakecols[i][j][1],fakecols[i][j][2]);
+}
+
+VIDEO_UPDATE( ssrj )
+{
+ tilemap_set_scrolly(tilemap1 , 0, 0xff-ssrj_scrollram[2] );
+ tilemap_set_scrollx(tilemap1 , 0, ssrj_scrollram[0] );
+ tilemap_draw(bitmap,cliprect,tilemap1, 0,0);
+ draw_objects(machine, bitmap,cliprect);
+ tilemap_draw(bitmap,cliprect,tilemap2, 0,0);
+
+ if(ssrj_scrollram[0x101]==0xb)tilemap_draw(bitmap,cliprect,tilemap4, 0,0);/* hack to display 4th tilemap */
+ return 0;
+}
+
+