📄 dec0.c
字号:
default:
return;
}
for (quarter = 0;quarter < 4;quarter++)
{
mx = -1;
my = 0;
for (offs = 0x800 * quarter; offs < 0x800 * quarter + 0x800;offs += 2)
{
mx++;
if (mx == 32)
{
mx = 0;
my++;
}
if (dec0_pf1_dirty[offs])
{
dec0_pf1_dirty[offs] = 0;
tile = READ_WORD(&dec0_pf1_data[offs]);
color = (tile & 0xf000) >> 12;
drawgfx(dec0_pf1_bitmap,Machine->gfx[0],
tile & 0x0fff,
color,
0,0,
8*mx + offsetx[quarter],8*my + offsety[quarter],
0,TRANSPARENCY_NONE,0);
}
}
}
}
static void dec0_pf2_update(int transparent)
{
int offs,mx,my,color,tile,quarter;
int offsetx[4],offsety[4];
static int last_transparent;
if (transparent != last_transparent)
{
last_transparent = transparent;
memset(dec0_pf2_dirty,1,TILERAM_SIZE);
}
switch (READ_WORD(&dec0_pf2_control_0[6]))
{
case 0: /* 4x1 */
offsetx[0] = 0;
offsetx[1] = 256;
offsetx[2] = 512;
offsetx[3] = 768;
offsety[0] = 0;
offsety[1] = 0;
offsety[2] = 0;
offsety[3] = 0;
if (dec0_pf2_current_shape != 0)
{
osd_free_bitmap(dec0_pf2_bitmap);
dec0_pf2_bitmap = osd_create_bitmap(1024,256);
dec0_pf2_current_shape = 0;
memset(dec0_pf2_dirty,1,TILERAM_SIZE);
}
break;
case 1: /* 2x2 */
offsetx[0] = 0;
offsetx[1] = 0;
offsetx[2] = 256;
offsetx[3] = 256;
offsety[0] = 0;
offsety[1] = 256;
offsety[2] = 0;
offsety[3] = 256;
if (dec0_pf2_current_shape != 1)
{
osd_free_bitmap(dec0_pf2_bitmap);
dec0_pf2_bitmap = osd_create_bitmap(512,512);
dec0_pf2_current_shape = 1;
memset(dec0_pf2_dirty,1,TILERAM_SIZE);
}
break;
case 2: /* 1x4 */
offsetx[0] = 0;
offsetx[1] = 0;
offsetx[2] = 0;
offsetx[3] = 0;
offsety[0] = 0;
offsety[1] = 256;
offsety[2] = 512;
offsety[3] = 768;
if (dec0_pf2_current_shape != 2)
{
osd_free_bitmap(dec0_pf2_bitmap);
dec0_pf2_bitmap = osd_create_bitmap(256,1024);
dec0_pf2_current_shape = 2;
memset(dec0_pf2_dirty,1,TILERAM_SIZE);
}
break;
default:
return;
}
for (quarter = 0;quarter < 4;quarter++)
{
mx = -1;
my = 0;
for (offs = 0x200 * quarter; offs < 0x200 * quarter + 0x200;offs += 2)
{
mx++;
if (mx == 16)
{
mx = 0;
my++;
}
if (dec0_pf2_dirty[offs])
{
dec0_pf2_dirty[offs] = 0;
tile = READ_WORD(&dec0_pf2_data[offs]);
color = (tile & 0xf000) >> 12;
drawgfx(dec0_pf2_bitmap,Machine->gfx[1],
tile & 0x0fff,
color,
0,0,
16*mx + offsetx[quarter],16*my + offsety[quarter],
0,TRANSPARENCY_NONE,0);
}
}
}
}
static void dec0_pf3_update(int transparent)
{
int offs,mx,my,color,tile,quarter;
int offsetx[4],offsety[4];
static int last_transparent;
if (transparent != last_transparent)
{
last_transparent = transparent;
memset(dec0_pf3_dirty,1,TILERAM_SIZE);
}
switch (READ_WORD(&dec0_pf3_control_0[6]))
{
case 0: /* 4x1 */
offsetx[0] = 0;
offsetx[1] = 256;
offsetx[2] = 512;
offsetx[3] = 768;
offsety[0] = 0;
offsety[1] = 0;
offsety[2] = 0;
offsety[3] = 0;
if (dec0_pf3_current_shape != 0)
{
osd_free_bitmap(dec0_pf3_bitmap);
dec0_pf3_bitmap = osd_create_bitmap(1024,256);
dec0_pf3_current_shape = 0;
memset(dec0_pf3_dirty,1,TILERAM_SIZE);
}
break;
case 1: /* 2x2 */
offsetx[0] = 0;
offsetx[1] = 0;
offsetx[2] = 256;
offsetx[3] = 256;
offsety[0] = 0;
offsety[1] = 256;
offsety[2] = 0;
offsety[3] = 256;
if (dec0_pf3_current_shape != 1)
{
osd_free_bitmap(dec0_pf3_bitmap);
dec0_pf3_bitmap = osd_create_bitmap(512,512);
dec0_pf3_current_shape = 1;
memset(dec0_pf3_dirty,1,TILERAM_SIZE);
}
break;
case 2: /* 1x4 */
offsetx[0] = 0;
offsetx[1] = 0;
offsetx[2] = 0;
offsetx[3] = 0;
offsety[0] = 0;
offsety[1] = 256;
offsety[2] = 512;
offsety[3] = 768;
if (dec0_pf3_current_shape != 2)
{
osd_free_bitmap(dec0_pf3_bitmap);
dec0_pf3_bitmap = osd_create_bitmap(256,1024);
dec0_pf3_current_shape = 2;
memset(dec0_pf3_dirty,1,TILERAM_SIZE);
}
break;
default:
return;
}
for (quarter = 0;quarter < 4;quarter++)
{
mx = -1;
my = 0;
for (offs = 0x200 * quarter; offs < 0x200 * quarter + 0x200;offs += 2)
{
mx++;
if (mx == 16)
{
mx = 0;
my++;
}
if (dec0_pf3_dirty[offs])
{
dec0_pf3_dirty[offs] = 0;
tile = READ_WORD(&dec0_pf3_data[offs]);
color = (tile & 0xf000) >> 12;
drawgfx(dec0_pf3_bitmap,Machine->gfx[2],
tile & 0x0fff,
color,
0,0,
16*mx + offsetx[quarter],16*my + offsety[quarter],
0,TRANSPARENCY_NONE,0);
}
}
}
}
/******************************************************************************/
void dec0_pf1_draw(struct osd_bitmap *bitmap)
{
int offs,lines,height,scrolly,scrollx;
scrollx = - READ_WORD(&dec0_pf1_control_1[0]);
scrolly = - READ_WORD(&dec0_pf1_control_1[2]);
/* We check for column scroll and use that if needed, otherwise use row scroll,
I am 99% sure they are never needed at same time ;) */
if (READ_WORD(&dec0_pf1_colscroll[0])) /* This is NOT a good check for col scroll, I can't find real bit */
{
int cscrolly[64];
for (offs = 0;offs < 32;offs++)
cscrolly[offs] = -READ_WORD(&dec0_pf1_control_1[2]) - READ_WORD(&dec0_pf1_colscroll[2*offs]);
copyscrollbitmap(bitmap,dec0_pf1_bitmap,1,&scrollx,32,cscrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
}
/* Row scroll enable bit (unsure if this enables/disables col scroll too) */
else if (READ_WORD(&dec0_pf1_control_0[0])&0x4)
{
int rscrollx[1024];
/* Playfield shape */
switch (READ_WORD(&dec0_pf1_control_0[6]))
{
case 0: height=1; break; /* 4x1, 256 rows */
case 1: height=2; break; /* 2x2, 512 rows */
case 2: height=4; break; /* 1x4, 1024 rows */
default: height=2; break; /* Never happens (I hope) */
}
/* Rowscroll style */
switch (READ_WORD(&dec0_pf1_control_1[6]))
{
case 0: lines=256; break; /* 256 horizontal scroll registers (Robocop) */
case 1: lines=128; break; /* 128 horizontal scroll registers (Not used?) */
case 2: lines=64; break; /* 128 horizontal scroll registers (Not used?) */
case 3: lines=32; break; /* 32 horizontal scroll registers (Heavy Barrel title screen) */
case 4: lines=16; break; /* 16 horizontal scroll registers (Bad Dudes, Sly Spy) */
case 5: lines=8; break; /* 8 horizontal scroll registers (Not used?) */
case 6: lines=4; break; /* 4 horizontal scroll registers (Not used?) */
case 7: lines=2; break; /* 2 horizontal scroll registers (Not used?) */
case 8: lines=1; break; /* Appears to be no row-scroll - so maybe only bottom 3 bits are style */
default: lines=1; break; /* Just in case */
}
for (offs = 0; offs < lines*height; offs++)
rscrollx[offs] = scrollx - READ_WORD(&dec0_pf1_rowscroll[offs<<1]);
copyscrollbitmap(bitmap,dec0_pf1_bitmap,lines*height,rscrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
}
else /* Scroll registers not enabled */
copyscrollbitmap(bitmap,dec0_pf1_bitmap,1,&scrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
}
void dec0_pf2_draw(struct osd_bitmap *bitmap, int trans)
{
int offs,lines,height,scrolly,scrollx;
scrollx = - READ_WORD(&dec0_pf2_control_1[0]);
scrolly = - READ_WORD(&dec0_pf2_control_1[2]);
/* Colscroll not supported for this playfield (does anything use it?) */
/* Row scroll enable bit (unsure if this enables/disables col scroll too) */
if (READ_WORD(&dec0_pf2_control_0[0])&0x4)
{
int rscrollx[1024];
/* Playfield shape */
switch (READ_WORD(&dec0_pf2_control_0[6]))
{
case 0: height=1; break; /* 4x1, 256 rows */
case 1: height=2; break; /* 2x2, 512 rows */
case 2: height=4; break; /* 1x4, 1024 rows */
default: height=2; break; /* Never happens (I hope) */
}
/* Rowscroll style */
switch (READ_WORD(&dec0_pf2_control_1[6]))
{
case 0: lines=256; break; /* 256 horizontal scroll registers (Robocop) */
case 1: lines=128; break; /* 128 horizontal scroll registers (Not used?) */
case 2: lines=64; break; /* 128 horizontal scroll registers (Not used?) */
case 3: lines=32; break; /* 32 horizontal scroll registers (Heavy Barrel title screen) */
case 4: lines=16; break; /* 16 horizontal scroll registers (Bad Dudes, Sly Spy) */
case 5: lines=8; break; /* 8 horizontal scroll registers (Not used?) */
case 6: lines=4; break; /* 4 horizontal scroll registers (Not used?) */
case 7: lines=2; break; /* 2 horizontal scroll registers (Not used?) */
case 8: lines=1; break; /* Appears to be no row-scroll */
default: lines=1; break; /* Just in case */
}
for (offs = 0; offs < lines*height; offs++)
rscrollx[offs] = scrollx - READ_WORD(&dec0_pf2_rowscroll[offs<<1]);
if (trans)
copyscrollbitmap(bitmap,dec0_pf2_bitmap,lines*height,rscrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
else
copyscrollbitmap(bitmap,dec0_pf2_bitmap,lines*height,rscrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
}
else { /* Scroll registers not enabled */
if (trans)
copyscrollbitmap(bitmap,dec0_pf2_bitmap,1,&scrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
else
copyscrollbitmap(bitmap,dec0_pf2_bitmap,1,&scrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_NONE,0);
}
}
void dec0_pf3_draw(struct osd_bitmap *bitmap, int trans)
{
int offs,lines,height,scrolly,scrollx;
scrollx = - READ_WORD(&dec0_pf3_control_1[0]);
scrolly = - READ_WORD(&dec0_pf3_control_1[2]);
/* Colscroll not supported for this playfield (does anything use it?) */
/* Row scroll enable bit (unsure if this enables/disables col scroll too) */
if (READ_WORD(&dec0_pf3_control_0[0])&0x4)
{
int rscrollx[1024];
/* Playfield shape */
switch (READ_WORD(&dec0_pf3_control_0[6]))
{
case 0: height=1; break; /* 4x1, 256 rows */
case 1: height=2; break; /* 2x2, 512 rows */
case 2: height=4; break; /* 1x4, 1024 rows */
default: height=2; break; /* Never happens (I hope) */
}
/* Rowscroll style */
switch (READ_WORD(&dec0_pf3_control_1[6]))
{
case 0: lines=256; break; /* 256 horizontal scroll registers (Robocop) */
case 1: lines=128; break; /* 128 horizontal scroll registers (Not used?) */
case 2: lines=64; break; /* 128 horizontal scroll registers (Not used?) */
case 3: lines=32; break; /* 32 horizontal scroll registers (Heavy Barrel title screen) */
case 4: lines=16; break; /* 16 horizontal scroll registers (Bad Dudes, Sly Spy) */
case 5: lines=8; break; /* 8 horizontal scroll registers (Not used?) */
case 6: lines=4; break; /* 4 horizontal scroll registers (Not used?) */
case 7: lines=2; break; /* 2 horizontal scroll registers (Not used?) */
case 8: lines=1; break; /* Appears to be no row-scroll - so maybe only bottom 3 bits are style */
default: lines=1; break; /* Just in case */
}
for (offs = 0; offs < lines*height; offs++)
rscrollx[offs] = scrollx - READ_WORD(&dec0_pf3_rowscroll[offs<<1]);
if (trans)
copyscrollbitmap(bitmap,dec0_pf3_bitmap,lines*height,rscrollx,1,&scrolly,&Machine->drv->visible_area,TRANSPARENCY_PEN,palette_transparent_pen);
else
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -