diff options
Diffstat (limited to 'src/mame/video/news.c')
-rw-r--r-- | src/mame/video/news.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/src/mame/video/news.c b/src/mame/video/news.c new file mode 100644 index 00000000000..560c4b5f8db --- /dev/null +++ b/src/mame/video/news.c @@ -0,0 +1,103 @@ +#include "driver.h" +#include "news.h" + + +UINT8 *news_fgram; +UINT8 *news_bgram; + +static int bgpic; +static tilemap *fg_tilemap, *bg_tilemap; + + + +/*************************************************************************** + + Callbacks for the TileMap code + +***************************************************************************/ + +static TILE_GET_INFO( get_fg_tile_info ) +{ + int code = (news_fgram[tile_index*2] << 8) | news_fgram[tile_index*2+1]; + SET_TILE_INFO( + 0, + code & 0x0fff, + (code & 0xf000) >> 12, + 0); +} + +static TILE_GET_INFO( get_bg_tile_info ) +{ + int code = (news_bgram[tile_index*2] << 8) | news_bgram[tile_index*2+1]; + int color = (code & 0xf000) >> 12; + + code &= 0x0fff; + if ((code & 0x0e00) == 0x0e00) code = (code & 0x1ff) | (bgpic << 9); + + SET_TILE_INFO( + 0, + code, + color, + 0); +} + + + +/*************************************************************************** + + Start the video hardware emulation. + +***************************************************************************/ + +VIDEO_START( news ) +{ + + fg_tilemap = tilemap_create(get_fg_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32, 32); + tilemap_set_transparent_pen(fg_tilemap,0); + + bg_tilemap = tilemap_create(get_bg_tile_info,tilemap_scan_rows,TILEMAP_TYPE_PEN,8,8,32, 32); +} + + + +/*************************************************************************** + + Memory handlers + +***************************************************************************/ + +WRITE8_HANDLER( news_fgram_w ) +{ + news_fgram[offset] = data; + tilemap_mark_tile_dirty(fg_tilemap,offset/2); +} + +WRITE8_HANDLER( news_bgram_w ) +{ + news_bgram[offset] = data; + tilemap_mark_tile_dirty(bg_tilemap,offset/2); +} + +WRITE8_HANDLER( news_bgpic_w ) +{ + if (bgpic != data) + { + bgpic = data; + tilemap_mark_all_tiles_dirty(bg_tilemap); + } +} + + + +/*************************************************************************** + + Display refresh + +***************************************************************************/ + +VIDEO_UPDATE( news ) +{ + tilemap_draw(bitmap,cliprect,bg_tilemap,0,0); + tilemap_draw(bitmap,cliprect,fg_tilemap,0,0); + return 0; +} |