summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/x68k.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/x68k.cpp')
-rw-r--r--src/mame/video/x68k.cpp25
1 files changed, 18 insertions, 7 deletions
diff --git a/src/mame/video/x68k.cpp b/src/mame/video/x68k.cpp
index 8477d8cc040..bf8a03f73d9 100644
--- a/src/mame/video/x68k.cpp
+++ b/src/mame/video/x68k.cpp
@@ -337,16 +337,25 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
case 0x01: // 256 colours
if(page == 0 || page == 2)
{
- xscr = m_crtc->xscr_gfx(page) & 0x1ff;
- yscr = m_crtc->yscr_gfx(page) & 0x1ff;
- lineoffset = (((scanline - m_crtc->vbegin() / divisor) + yscr) & 0x1ff) * 512;
- loc = xscr & 0x1ff;
+ // What effect do priorites and plane disable have here? Does it work in 16bit color mode?
+ uint16_t xscr0, yscr0, xscr1, yscr1;
+ uint32_t loc0, loc1, lineoffset0, lineoffset1;
+ xscr0 = m_crtc->xscr_gfx(page) & 0x1ff;
+ yscr0 = m_crtc->yscr_gfx(page) & 0x1ff;
+ xscr1 = m_crtc->xscr_gfx(page + 1) & 0x1ff;
+ yscr1 = m_crtc->yscr_gfx(page + 1) & 0x1ff;
+
+ lineoffset0 = (((scanline - m_crtc->vbegin() / divisor) + yscr0) & 0x1ff) * 512;
+ loc0 = xscr0 & 0x1ff;
+ lineoffset1 = (((scanline - m_crtc->vbegin() / divisor) + yscr1) & 0x1ff) * 512;
+ loc1 = xscr1 & 0x1ff;
shift = 4;
if((m_video.reg[2] & 0x1a00) == 0x1a00)
ret = true;
for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++)
{
- colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x00ff);
+ colour = ((m_gvram[lineoffset0 + loc0] >> page*shift) & 0x000f);
+ colour |= ((m_gvram[lineoffset1 + loc1] >> page*shift) & 0x00f0);
if(ret && (colour & 1))
{
blend = true;
@@ -376,8 +385,10 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
bitmap.pix(scanline, pixel) = m_special.pix(scanline, pixel);
m_special.pix(scanline, pixel) = 0;
}
- loc++;
- loc &= 0x1ff;
+ loc0++;
+ loc0 &= 0x1ff;
+ loc1++;
+ loc1 &= 0x1ff;
}
}
break;