/***************************************************************************** Mahjong Sisters (c) 1986 Toa Plan Video hardware driver by Uki *****************************************************************************/ #include "driver.h" int mjsister_screen_redraw; int mjsister_flip_screen; int mjsister_video_enable; int mjsister_vrambank; int mjsister_colorbank; static mame_bitmap *mjsister_tmpbitmap0, *mjsister_tmpbitmap1; static UINT8 *mjsister_videoram0, *mjsister_videoram1; /****************************************************************************/ VIDEO_START( mjsister ) { mjsister_tmpbitmap0 = auto_bitmap_alloc(256,256,machine->screen[0].format); mjsister_tmpbitmap1 = auto_bitmap_alloc(256,256,machine->screen[0].format); mjsister_videoram0 = auto_malloc(0x8000); mjsister_videoram1 = auto_malloc(0x8000); } static void mjsister_plot0(int offset,UINT8 data) { int x,y,c1,c2; x = offset & 0x7f; y = offset / 0x80; c1 = (data & 0x0f) + mjsister_colorbank * 0x20; c2 = ((data & 0xf0) >> 4) + mjsister_colorbank * 0x20; *BITMAP_ADDR16(mjsister_tmpbitmap0, y, x*2+0) = Machine->pens[c1]; *BITMAP_ADDR16(mjsister_tmpbitmap0, y, x*2+1) = Machine->pens[c2]; } static void mjsister_plot1(int offset,UINT8 data) { int x,y,c1,c2; x = offset & 0x7f; y = offset / 0x80; c1 = data & 0x0f; c2 = (data & 0xf0) >> 4; if (c1) c1 += mjsister_colorbank * 0x20 + 0x10; if (c2) c2 += mjsister_colorbank * 0x20 + 0x10; *BITMAP_ADDR16(mjsister_tmpbitmap1, y, x*2+0) = Machine->pens[c1]; *BITMAP_ADDR16(mjsister_tmpbitmap1, y, x*2+1) = Machine->pens[c2]; } WRITE8_HANDLER( mjsister_videoram_w ) { if (mjsister_vrambank) { mjsister_videoram1[offset] = data; mjsister_plot1(offset,data); } else { mjsister_videoram0[offset] = data; mjsister_plot0(offset,data); } } VIDEO_UPDATE( mjsister ) { int f = mjsister_flip_screen; int i,j; if (mjsister_screen_redraw) { int offs; for (offs=0; offs<0x8000; offs++) { mjsister_plot0(offs,mjsister_videoram0[offs]); mjsister_plot1(offs,mjsister_videoram1[offs]); } mjsister_screen_redraw = 0; } if (mjsister_video_enable) { for (i=0; i<256; i++) { for (j=0; j<4; j++) *BITMAP_ADDR16(bitmap, i, 256+j) = machine->pens[mjsister_colorbank * 0x20]; } copybitmap(bitmap,mjsister_tmpbitmap0,f,f,0,0,cliprect,TRANSPARENCY_NONE,0); copybitmap(bitmap,mjsister_tmpbitmap1,f,f,2,0,cliprect,TRANSPARENCY_PEN,0); } else fillbitmap(bitmap, get_black_pen(machine), &machine->screen[0].visarea); return 0; }