📄 dec0.c
字号:
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 + -