summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/destroyr.c
blob: 5d67fe1596b500ba30c8dc730c7a0555e1b3228e (plain) (tree)

























































































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

Atari Destroyer video emulation

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

#include "driver.h"

int destroyr_wavemod;
int destroyr_cursor;

UINT8* destroyr_major_obj_ram;
UINT8* destroyr_minor_obj_ram;
UINT8* destroyr_alpha_num_ram;


VIDEO_UPDATE( destroyr )
{
	int i;
	int j;

	fillbitmap(bitmap, machine->pens[0], cliprect);

	/* draw major objects */

	for (i = 0; i < 16; i++)
	{
		int attr = destroyr_major_obj_ram[2 * i + 0] ^ 0xff;
		int horz = destroyr_major_obj_ram[2 * i + 1];

		int num = attr & 3;
		int scan = attr & 4;
		int flipx = attr & 8;

		if (scan == 0)
		{
			if (horz >= 192)
				horz -= 256;
		}
		else
		{
			if (horz < 192)
				continue;
		}

		drawgfx(bitmap, machine->gfx[2], num, 0, flipx, 0,
			horz, 16 * i, cliprect, TRANSPARENCY_PEN, 0);
	}

	/* draw alpha numerics */

	for (i = 0; i < 8; i++)
	{
		for (j = 0; j < 32; j++)
		{
			int num = destroyr_alpha_num_ram[32 * i + j];

			drawgfx(bitmap, machine->gfx[0], num, 0, 0, 0,
				8 * j, 8 * i, cliprect, TRANSPARENCY_PEN, 0);
		}
	}

	/* draw minor objects */

	for (i = 0; i < 2; i++)
	{
		int horz = 256 - destroyr_minor_obj_ram[i + 2];
		int vert = 256 - destroyr_minor_obj_ram[i + 4];

		drawgfx(bitmap, machine->gfx[1], destroyr_minor_obj_ram[i + 0], 0, 0, 0,
			horz, vert, cliprect, TRANSPARENCY_PEN, 0);
	}

	/* draw waves */

	for (i = 0; i < 4; i++)
	{
		drawgfx(bitmap, machine->gfx[3], destroyr_wavemod ? 1 : 0, 0, 0, 0,
			64 * i, 0x4e, cliprect, TRANSPARENCY_PEN, 0);
	}

	/* draw cursor */

	for (i = 0; i < 256; i++)
	{
		if (i & 4)
			*BITMAP_ADDR16(bitmap, destroyr_cursor ^ 0xff, i) = machine->pens[7];
	}
	return 0;
}