diff options
Diffstat (limited to 'src/mame/video/quizpani.c')
-rw-r--r-- | src/mame/video/quizpani.c | 91 |
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; +} |