summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/video/system24.c
blob: 8d12d8c115336848083a759a64aa7d7fccaebd69 (plain) (tree)





















































                                                                                       
#include "driver.h"
#include "video/segaic24.h"
#include "includes/system24.h"

VIDEO_START(system24)
{
	sys24_tile_vh_start(machine, 0xfff);
	sys24_sprite_vh_start();
	sys24_mixer_vh_start();
}

static int layer_cmp(const void *pl1, const void *pl2)
{
	static const int default_pri[12] = { 0, 1, 2, 3, 4, 5, 6, 7, -4, -3, -2, -1 };
	int l1 = *(int *)pl1;
	int l2 = *(int *)pl2;
	int p1 = sys24_mixer_get_reg(l1) & 7;
	int p2 = sys24_mixer_get_reg(l2) & 7;
	if(p1 != p2)
		return p1 - p2;
	return default_pri[l2] - default_pri[l1];
}

VIDEO_UPDATE(system24)
{
	int i, level;
	int order[12], spri[4];

	if(sys24_mixer_get_reg(13) & 1) {
		fillbitmap(bitmap, get_black_pen(machine), 0);
		return 0;
	}

	sys24_tile_update(machine);

	fillbitmap(priority_bitmap, 0, 0);
	fillbitmap(bitmap, machine->pens[0], &machine->screen[0].visarea);

	for(i=0; i<12; i++)
		order[i] = i;
	qsort(order, 12, sizeof(int), layer_cmp);

	level = 0;
	for(i=0; i<12; i++)
		if(order[i] < 8)
			sys24_tile_draw(machine, bitmap, cliprect, order[i], level, 0);
		else {
			spri[order[i]-8] = level;
			level++;
		}

	sys24_sprite_draw(bitmap, cliprect, spri);
	return 0;
}