mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
x68k: special priority (nw)
This commit is contained in:
parent
71bb70d968
commit
d5400e5f69
@ -115,6 +115,7 @@ public:
|
|||||||
|
|
||||||
bitmap_ind16 m_pcgbitmap;
|
bitmap_ind16 m_pcgbitmap;
|
||||||
bitmap_ind16 m_gfxbitmap;
|
bitmap_ind16 m_gfxbitmap;
|
||||||
|
bitmap_ind16 m_special;
|
||||||
|
|
||||||
void floppy_load_unload(bool load, floppy_image_device *dev);
|
void floppy_load_unload(bool load, floppy_image_device *dev);
|
||||||
int floppy_load(floppy_image_device *dev);
|
int floppy_load(floppy_image_device *dev);
|
||||||
|
@ -26,10 +26,10 @@
|
|||||||
1 sprite layer - up to 128 16x16 sprites, 16 colours per sprite, maximum 16 sprites per scanline (not yet implemented).
|
1 sprite layer - up to 128 16x16 sprites, 16 colours per sprite, maximum 16 sprites per scanline (not yet implemented).
|
||||||
|
|
||||||
Questions: What do the other bits in m_video.reg[2] do?
|
Questions: What do the other bits in m_video.reg[2] do?
|
||||||
What is "special priority mode"?
|
|
||||||
How is the intensity applied during blending if at all?
|
How is the intensity applied during blending if at all?
|
||||||
Black appears to be opaque only at priority 2 but not 3, is that right?
|
Black appears to be opaque only at priority 2 but not 3, is that right?
|
||||||
Are the gfx layers blended from the bottom up or all at once?
|
Are the gfx layers blended from the bottom up or all at once?
|
||||||
|
Special priority in 16bit color mode?
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -783,7 +783,12 @@ bool x68k_state::x68k_draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprec
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if(colour || (priority == 3))
|
if(colour || (priority == 3))
|
||||||
bitmap.pix16(scanline, pixel) = colour;
|
{
|
||||||
|
if(((m_video.reg[2] & 0x1800) == 0x1000) && (colour & 1))
|
||||||
|
m_special.pix16(scanline, pixel) = colour & ~1;
|
||||||
|
else
|
||||||
|
bitmap.pix16(scanline, pixel) = colour;
|
||||||
|
}
|
||||||
loc++;
|
loc++;
|
||||||
loc &= 0x3ff;
|
loc &= 0x3ff;
|
||||||
}
|
}
|
||||||
@ -824,6 +829,8 @@ bool x68k_state::x68k_draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprec
|
|||||||
else
|
else
|
||||||
bitmap.pix16(scanline, pixel) = (pal[colour] & 0xfffe) + blend;
|
bitmap.pix16(scanline, pixel) = (pal[colour] & 0xfffe) + blend;
|
||||||
}
|
}
|
||||||
|
else if(((m_video.reg[2] & 0x1800) == 0x1000) && (colour & 1))
|
||||||
|
m_special.pix16(scanline, pixel) = colour;
|
||||||
else
|
else
|
||||||
bitmap.pix16(scanline, pixel) = colour;
|
bitmap.pix16(scanline, pixel) = colour;
|
||||||
}
|
}
|
||||||
@ -860,6 +867,8 @@ bool x68k_state::x68k_draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprec
|
|||||||
else
|
else
|
||||||
bitmap.pix16(scanline, pixel) = (pal[colour] & 0xfffe) + blend;
|
bitmap.pix16(scanline, pixel) = (pal[colour] & 0xfffe) + blend;
|
||||||
}
|
}
|
||||||
|
if(((m_video.reg[2] & 0x1800) == 0x1000) && (colour & 1))
|
||||||
|
m_special.pix16(scanline, pixel) = colour;
|
||||||
else
|
else
|
||||||
bitmap.pix16(scanline, pixel) = colour;
|
bitmap.pix16(scanline, pixel) = colour;
|
||||||
}
|
}
|
||||||
@ -901,6 +910,8 @@ void x68k_state::x68k_draw_gfx(bitmap_rgb32 &bitmap,rectangle cliprect)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
m_gfxbitmap.fill(0, cliprect);
|
m_gfxbitmap.fill(0, cliprect);
|
||||||
|
if((m_video.reg[2] & 0x1800) == 0x1000)
|
||||||
|
m_special.fill(0, cliprect);
|
||||||
|
|
||||||
for(priority=3;priority>=0;priority--)
|
for(priority=3;priority>=0;priority--)
|
||||||
{
|
{
|
||||||
@ -1102,10 +1113,8 @@ VIDEO_START_MEMBER(x68k_state,x68000)
|
|||||||
m_bg1_16->set_transparent_pen(0);
|
m_bg1_16->set_transparent_pen(0);
|
||||||
|
|
||||||
m_screen->register_screen_bitmap(m_pcgbitmap);
|
m_screen->register_screen_bitmap(m_pcgbitmap);
|
||||||
m_pcgbitmap.fill(0);
|
|
||||||
|
|
||||||
m_screen->register_screen_bitmap(m_gfxbitmap);
|
m_screen->register_screen_bitmap(m_gfxbitmap);
|
||||||
m_gfxbitmap.fill(0);
|
m_screen->register_screen_bitmap(m_special);
|
||||||
|
|
||||||
// m_scanline_timer->adjust(attotime::zero, 0, attotime::from_hz(55.45)/568);
|
// m_scanline_timer->adjust(attotime::zero, 0, attotime::from_hz(55.45)/568);
|
||||||
}
|
}
|
||||||
@ -1118,7 +1127,7 @@ UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_rgb32 &bit
|
|||||||
int x;
|
int x;
|
||||||
tilemap_t* x68k_bg0;
|
tilemap_t* x68k_bg0;
|
||||||
tilemap_t* x68k_bg1;
|
tilemap_t* x68k_bg1;
|
||||||
int pixel, scanline;
|
int pixel = 0, scanline = 0;
|
||||||
//UINT8 *rom;
|
//UINT8 *rom;
|
||||||
|
|
||||||
if((m_spritereg[0x408] & 0x03) == 0x00) // Sprite/BG H-Res 0=8x8, 1=16x16, 2 or 3 = undefined.
|
if((m_spritereg[0x408] & 0x03) == 0x00) // Sprite/BG H-Res 0=8x8, 1=16x16, 2 or 3 = undefined.
|
||||||
@ -1232,6 +1241,20 @@ UINT32 x68k_state::screen_update_x68000(screen_device &screen, bitmap_rgb32 &bit
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if((m_video.reg[2] & 0x1800) == 0x1000) // special priority
|
||||||
|
{
|
||||||
|
UINT16 colour;
|
||||||
|
for(scanline=rect.min_y;scanline<=rect.max_y;scanline++)
|
||||||
|
{
|
||||||
|
for(pixel=m_crtc.hbegin;pixel<=m_crtc.hend;pixel++)
|
||||||
|
{
|
||||||
|
colour = m_special.pix16(scanline, pixel) & 0xff;
|
||||||
|
if(colour)
|
||||||
|
bitmap.pix32(scanline, pixel) = m_gfxpalette->pen(colour & ~1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef MAME_DEBUG
|
#ifdef MAME_DEBUG
|
||||||
if(machine().input().code_pressed(KEYCODE_9))
|
if(machine().input().code_pressed(KEYCODE_9))
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user