x68k: fix blending, gfx layer disable vid mode divisor

x68k_flop: restore aquales to working
This commit is contained in:
cracyc 2025-02-12 22:09:13 -06:00
parent 29615599ee
commit 00b2056e12
3 changed files with 7 additions and 11 deletions

View File

@ -1304,14 +1304,12 @@ Most info on release dates and Jpn titles come from the following (wonderful) re
</part>
</software>
<software name="aquales" supported="no">
<software name="aquales" supported="yes">
<description>Aquales</description>
<year>1991</year>
<publisher>エグザクト (Exact)</publisher>
<notes><![CDATA[
Doesn't autoboot with both disks in, requires a fake data disk swap from user
Opening hangs at first line
During gameplay, weapon menu has random horizontal lines
If autoboot doesn't work, delete nvram
]]></notes>
<info name="alt_title" value="アクアレス" />
<info name="release" value="19910912" />

View File

@ -186,7 +186,6 @@ void x68k_crtc_device::refresh_mode()
logerror("Invalid mode %d", m_reg[20] & 0x1f); [[fallthrough]];
case 1:
case 5:
case 0x11:
div = 4;
break;
case 0x16:
@ -195,6 +194,7 @@ void x68k_crtc_device::refresh_mode()
case 0x10:
div = 6;
break;
case 0x11: // aquales intro requires /3 for 0x11, TODO: figure out what wanted /4
case 0x15:
div = 3;
break;

View File

@ -215,7 +215,7 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
uint16_t xscr,yscr;
uint16_t colour = 0;
int shift;
bool blend, ret = false;
bool blend, ret = (m_video.reg[2] & 0x1a00) == 0x1a00;
uint16_t *pal = (uint16_t *)m_gfxpalette->basemem().base();
int divisor = 1;
if(m_crtc->gfx_double_scan())
@ -262,6 +262,7 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
loc++;
loc &= 0x3ff;
}
ret = false;
}
}
else // else 512x512 "real" screen size
@ -278,8 +279,6 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
lineoffset = (((scanline - m_crtc->vbegin() / divisor) + yscr) & 0x1ff) * 512;
loc = xscr & 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) & 0x000f);
@ -332,8 +331,6 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
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[lineoffset0 + loc0] >> page*shift) & 0x000f);
@ -387,6 +384,7 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
loc++;
loc &= 0x1ff;
}
ret = false;
break;
}
}
@ -765,7 +763,7 @@ uint32_t x68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
pcgprio = currprio;
currprio++;
}
if((m_video.gfx_pri == priority) && !m_crtc->gfx_layer_buffer())
if((m_video.gfx_pri == priority) && !m_crtc->gfx_layer_buffer() && (m_video.reg[2] & 0x1f))
{
gfxprio = currprio;
currprio++;