/***************************************************************************

  video.c

  Functions to emulate the video hardware of the machine.

***************************************************************************/

#include "driver.h"

static int charbank;
static tilemap *bg_tilemap;

WRITE8_HANDLER( hexa_videoram_w )
{
	videoram[offset] = data;
	tilemap_mark_tile_dirty(bg_tilemap, offset / 2);
}

WRITE8_HANDLER( hexa_d008_w )
{
	UINT8 *RAM = memory_region(space->machine, "maincpu");
	int bankaddress;

	/* bit 0 = flipx (or y?) */
	if (flip_screen_x_get(space->machine) != (data & 0x01))
	{
		flip_screen_x_set(space->machine, data & 0x01);
		tilemap_mark_all_tiles_dirty(bg_tilemap);
	}

	/* bit 1 = flipy (or x?) */
	if (flip_screen_y_get(space->machine) != (data & 0x02))
	{
		flip_screen_y_set(space->machine, data & 0x02);
		tilemap_mark_all_tiles_dirty(bg_tilemap);
	}

	/* bit 2 - 3 unknown */

	/* bit 4 could be the ROM bank selector for 8000-bfff (not sure) */
	bankaddress = 0x10000 + ((data & 0x10) >> 4) * 0x4000;
	memory_set_bankptr(space->machine, 1, &RAM[bankaddress]);

	/* bit 5 = char bank */
	if (charbank != ((data & 0x20) >> 5))
	{
		charbank = (data & 0x20) >> 5;
		tilemap_mark_all_tiles_dirty(bg_tilemap);
	}

	/* bit 6 - 7 unknown */
}

static TILE_GET_INFO( get_bg_tile_info )
{
	int offs = tile_index * 2;
	int tile = videoram[offs + 1] + ((videoram[offs] & 0x07) << 8) + (charbank << 11);
	int color = (videoram[offs] & 0xf8) >> 3;

	SET_TILE_INFO(0, tile, color, 0);
}

VIDEO_START( hexa )
{
	bg_tilemap = tilemap_create(machine, get_bg_tile_info, tilemap_scan_rows,
		 8, 8, 32, 32);
}


VIDEO_UPDATE( hexa )
{
	tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
	return 0;
}
