summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/quizpani.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/quizpani.c')
-rw-r--r--src/mame/video/quizpani.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/src/mame/video/quizpani.c b/src/mame/video/quizpani.c
new file mode 100644
index 00000000000..c139beb367e
--- /dev/null
+++ b/src/mame/video/quizpani.c
@@ -0,0 +1,91 @@
+/************************************************************************
+
+ Quiz Panicuru Fantasy video hardware
+
+************************************************************************/
+
+#include "driver.h"
+
+UINT16 *quizpani_bg_videoram, *quizpani_txt_videoram;
+UINT16 *quizpani_scrollreg;
+
+static tilemap *bg_tilemap, *txt_tilemap;
+
+static int quizpani_bgbank = 0, quizpani_txtbank = 0;
+
+static TILEMAP_MAPPER( bg_scan )
+{
+ /* logical (col,row) -> memory offset */
+ return (row & 0x0f) + ((col & 0xff) << 4) + ((row & 0x70) << 8);
+}
+
+static TILE_GET_INFO( bg_tile_info )
+{
+ int code = quizpani_bg_videoram[tile_index];
+
+ SET_TILE_INFO(
+ 1,
+ (code & 0xfff) + (0x1000 * quizpani_bgbank),
+ code >> 12,
+ 0);
+}
+
+static TILE_GET_INFO( txt_tile_info )
+{
+ int code = quizpani_txt_videoram[tile_index];
+
+ SET_TILE_INFO(
+ 0,
+ (code & 0xfff) + (0x1000 * quizpani_txtbank),
+ code >> 12,
+ 0);
+}
+
+WRITE16_HANDLER( quizpani_bg_videoram_w )
+{
+ quizpani_bg_videoram[offset] = data;
+ tilemap_mark_tile_dirty(bg_tilemap, offset);
+}
+
+WRITE16_HANDLER( quizpani_txt_videoram_w )
+{
+ quizpani_txt_videoram[offset] = data;
+ tilemap_mark_tile_dirty(txt_tilemap, offset);
+}
+
+WRITE16_HANDLER( quizpani_tilesbank_w )
+{
+ if (ACCESSING_LSB)
+ {
+ if(quizpani_txtbank != (data & 0x30)>>4)
+ {
+ quizpani_txtbank = (data & 0x30)>>4;
+ tilemap_mark_all_tiles_dirty(txt_tilemap);
+ }
+
+ if(quizpani_bgbank != (data & 3))
+ {
+ quizpani_bgbank = data & 3;
+ tilemap_mark_all_tiles_dirty(bg_tilemap);
+ }
+ }
+}
+
+VIDEO_START( quizpani )
+{
+ bg_tilemap = tilemap_create(bg_tile_info, bg_scan,TILEMAP_TYPE_PEN,16,16,256,32);
+ txt_tilemap = tilemap_create(txt_tile_info,bg_scan,TILEMAP_TYPE_PEN,16,16,256,32);
+ tilemap_set_transparent_pen(txt_tilemap,15);
+}
+
+VIDEO_UPDATE( quizpani )
+{
+ tilemap_set_scrollx(bg_tilemap, 0, quizpani_scrollreg[0] - 64);
+ tilemap_set_scrolly(bg_tilemap, 0, quizpani_scrollreg[1] + 16);
+ tilemap_set_scrollx(txt_tilemap, 0, quizpani_scrollreg[2] - 64);
+ tilemap_set_scrolly(txt_tilemap, 0, quizpani_scrollreg[3] + 16);
+
+ tilemap_draw(bitmap,cliprect,bg_tilemap,0,0);
+ tilemap_draw(bitmap,cliprect,txt_tilemap,0,0);
+ return 0;
+}