⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dec0.c

📁 这个是延伸mame的在wince平台下的游戏模拟器的代码
💻 C
📖 第 1 页 / 共 3 页
字号:
			copyscrollbitmap(bitmap,dec0_pf3_bitmap,lines*height,rscrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
	}
	else { /* Scroll registers not enabled */
		if (trans)
			copyscrollbitmap(bitmap,dec0_pf3_bitmap,1,&scrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
		else
			copyscrollbitmap(bitmap,dec0_pf3_bitmap,1,&scrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
	}
}

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

void dec0_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	int offs;

	/* WARNING: priority inverted wrt all the other games */
	dec0_update_palette(~dec0_pri & 0x01);
	dec0_pf1_update();

	/* WARNING: inverted wrt Midnight Resistance */
	if ((dec0_pri & 0x01) == 0)
	{
		dec0_pf2_update(0);
		dec0_pf3_update(1);

		dec0_pf2_draw(bitmap,0);
		dec0_pf3_draw(bitmap,1);

		/* I'm not supporting sprite priority because I can't figure out how it works. */
		/* I would exepct e.g. the trees to cover the sprites in level 4 (forest) */
		dec0_drawsprites(bitmap,0x00,0x00);
	}
	else
	{
		dec0_pf3_update(0);
		dec0_pf2_update(1);

		dec0_pf3_draw(bitmap,0);
		dec0_pf2_draw(bitmap,1);

		/* I'm not supporting sprite priority because I can't figure out how it works. */
		/* I would exepct e.g. the trees to cover the sprites in level 4 (forest) */
		dec0_drawsprites(bitmap,0x00,0x00);
	}

	dec0_pf1_draw(bitmap);
}

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

void robocop_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	dec0_update_palette(dec0_pri & 0x01);
	dec0_pf1_update();

	if (dec0_pri & 0x01)
	{
		int trans;

		dec0_pf2_update(0);
		dec0_pf3_update(1);

		/* WARNING: inverted wrt Midnight Resistance */
		/* Robocop uses it only for the title screen, so this might be just */
		/* completely wrong. The top 8 bits of the register might mean */
		/* something (they are 0x80 in midres, 0x00 here) */
		if (dec0_pri & 0x04)
			trans = 0x08;
		else trans = 0x00;

		dec0_pf2_draw(bitmap,0);

		if (dec0_pri & 0x02)
			dec0_drawsprites(bitmap,0x08,trans);

		dec0_pf3_draw(bitmap,1);

		if (dec0_pri & 0x02)
			dec0_drawsprites(bitmap,0x08,trans ^ 0x08);
		else
			dec0_drawsprites(bitmap,0x00,0x00);
}
else
{
		int trans;

		dec0_pf3_update(0);
		dec0_pf2_update(1);

		/* WARNING: inverted wrt Midnight Resistance */
		/* Robocop uses it only for the title screen, so this might be just */
		/* completely wrong. The top 8 bits of the register might mean */
		/* something (they are 0x80 in midres, 0x00 here) */
		if (dec0_pri & 0x04)
			trans = 0x08;
		else trans = 0x00;

		dec0_pf3_draw(bitmap,0);

		if (dec0_pri & 0x02)
			dec0_drawsprites(bitmap,0x08,trans);

		dec0_pf2_draw(bitmap,1);

		if (dec0_pri & 0x02)
			dec0_drawsprites(bitmap,0x08,trans ^ 0x08);
		else
			dec0_drawsprites(bitmap,0x00,0x00);
}

	dec0_pf1_draw(bitmap);
}

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

void hbarrel_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	dec0_update_palette(dec0_pri & 0x01);

	dec0_pf1_update();
	dec0_pf3_update(0);
	dec0_pf2_update(1);

	dec0_pf3_draw(bitmap,0);
	dec0_pf2_draw(bitmap,1);

	/* HB always keeps pf2 on top of pf3, no need explicitly support priority register */

	dec0_drawsprites(bitmap,0x00,0x00);
	dec0_pf1_draw(bitmap);
}

void hippodrm_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	dec0_update_palette(dec0_pri & 0x01);

	dec0_pf1_update();
	dec0_pf2_update(0); /* This is really the top layer.. */
	dec0_pf2_draw(bitmap,0);

	dec0_drawsprites(bitmap,0x00,0x00);
	dec0_pf1_draw(bitmap);
}

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

void midres_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	dec0_update_palette(dec0_pri & 0x01);

	dec0_pf1_update();

if (dec0_pri & 0x01)
{
	int trans;

	dec0_pf2_update(0);
	dec0_pf3_update(1);

	if (dec0_pri & 0x04)
		trans = 0x00;
	else trans = 0x08;

	dec0_pf2_draw(bitmap,0);

	if (dec0_pri & 0x02)
		dec0_drawsprites(bitmap,0x08,trans);

	dec0_pf3_draw(bitmap,1);

	if (dec0_pri & 0x02)
		dec0_drawsprites(bitmap,0x08,trans ^ 0x08);
	else
		dec0_drawsprites(bitmap,0x00,0x00);
}
else
{
	int trans;


	dec0_pf3_update(0);
	dec0_pf2_update(1);

	if (dec0_pri & 0x04)
		trans = 0x00;
	else trans = 0x08;

	dec0_pf3_draw(bitmap,0);

	if (dec0_pri & 0x02)
		dec0_drawsprites(bitmap,0x08,trans);

	dec0_pf2_draw(bitmap,1);

	if (dec0_pri & 0x02)
		dec0_drawsprites(bitmap,0x08,trans ^ 0x08);
	else
		dec0_drawsprites(bitmap,0x00,0x00);
	}

	dec0_pf1_draw(bitmap);
}

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

void slyspy_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh)
{
	dec0_update_palette(dec0_pri & 0x01);

	dec0_pf1_update();
	dec0_pf3_update(0);
	dec0_pf2_update(1);

	dec0_pf3_draw(bitmap,0);
	dec0_pf2_draw(bitmap,1);

	dec0_drawsprites(bitmap,0x00,0x00);
	dec0_pf1_draw(bitmap);
}

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

void dec0_pf1_control_0_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf1_control_0[offset],data);
}

void dec0_pf1_control_1_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf1_control_1[offset],data);
}

void dec0_pf1_rowscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf1_rowscroll[offset],data);
}

void dec0_pf1_colscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf1_colscroll[offset],data);
}

void dec0_pf1_data_w(int offset,int data)
{
	int oldword = READ_WORD(&dec0_pf1_data[offset]);
	int newword = COMBINE_WORD(oldword,data);

	if (oldword != newword)
	{
		WRITE_WORD(&dec0_pf1_data[offset],newword);
		dec0_pf1_dirty[offset] = 1;
	}
}

int dec0_pf1_data_r(int offset)
{
	return READ_WORD(&dec0_pf1_data[offset]);
}

void dec0_pf2_control_0_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf2_control_0[offset],data);
}

void dec0_pf2_control_1_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf2_control_1[offset],data);
}

void dec0_pf2_rowscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf2_rowscroll[offset],data);
}

void dec0_pf2_colscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf2_colscroll[offset],data);
}

void dec0_pf2_data_w(int offset,int data)
{
	int oldword = READ_WORD(&dec0_pf2_data[offset]);
	int newword = COMBINE_WORD(oldword,data);

	if (oldword != newword)
	{
		WRITE_WORD(&dec0_pf2_data[offset],newword);
		dec0_pf2_dirty[offset] = 1;
	}
}

int dec0_pf2_data_r(int offset)
{
	return READ_WORD(&dec0_pf2_data[offset]);
}

void dec0_pf3_control_0_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf3_control_0[offset],data);
}

void dec0_pf3_control_1_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf3_control_1[offset],data);
}

void dec0_pf3_rowscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf3_rowscroll[offset],data);
}

void dec0_pf3_colscroll_w(int offset,int data)
{
	COMBINE_WORD_MEM(&dec0_pf3_colscroll[offset],data);
}

int dec0_pf3_colscroll_r(int offset)
{
	return READ_WORD(&dec0_pf3_colscroll[offset]);
}

void dec0_pf3_data_w(int offset,int data)
{
	int oldword = READ_WORD(&dec0_pf3_data[offset]);
	int newword = COMBINE_WORD(oldword,data);

	if (oldword != newword)
	{
		WRITE_WORD(&dec0_pf3_data[offset],newword);
		dec0_pf3_dirty[offset] = 1;
	}
}

int dec0_pf3_data_r(int offset)
{
	return READ_WORD(&dec0_pf3_data[offset]);
}

void dec0_priority_w(int offset,int data)
{
  	dec0_pri = data;
}

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

int dec0_vh_start (void)
{
	/* Allocate bitmaps */
	if ((dec0_pf1_bitmap = osd_create_bitmap(512,512)) == 0) {
		dec0_vh_stop ();
		return 1;
	}
	dec0_pf1_current_shape = 1;

	if ((dec0_pf2_bitmap = osd_create_bitmap(512,512)) == 0) {
		dec0_vh_stop ();
		return 1;
	}
	dec0_pf2_current_shape = 1;

	if ((dec0_pf3_bitmap = osd_create_bitmap(512,512)) == 0) {
		dec0_vh_stop ();
		return 1;
	}
	dec0_pf3_current_shape = 1;

	dec0_pf1_dirty = malloc(TEXTRAM_SIZE);
	dec0_pf3_dirty = malloc(TILERAM_SIZE);
	dec0_pf2_dirty = malloc(TILERAM_SIZE);

	memset(dec0_pf1_dirty,1,TEXTRAM_SIZE);
	memset(dec0_pf2_dirty,1,TILERAM_SIZE);
	memset(dec0_pf3_dirty,1,TILERAM_SIZE);

	return 0;
}

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

void dec0_vh_stop (void)
{
	osd_free_bitmap(dec0_pf2_bitmap);
	osd_free_bitmap(dec0_pf3_bitmap);
	osd_free_bitmap(dec0_pf1_bitmap);
	free(dec0_pf3_dirty);
	free(dec0_pf2_dirty);
	free(dec0_pf1_dirty);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -