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> </part>
</software> </software>
<software name="aquales" supported="no"> <software name="aquales" supported="yes">
<description>Aquales</description> <description>Aquales</description>
<year>1991</year> <year>1991</year>
<publisher>エグザクト (Exact)</publisher> <publisher>エグザクト (Exact)</publisher>
<notes><![CDATA[ <notes><![CDATA[
Doesn't autoboot with both disks in, requires a fake data disk swap from user If autoboot doesn't work, delete nvram
Opening hangs at first line
During gameplay, weapon menu has random horizontal lines
]]></notes> ]]></notes>
<info name="alt_title" value="アクアレス" /> <info name="alt_title" value="アクアレス" />
<info name="release" value="19910912" /> <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]]; logerror("Invalid mode %d", m_reg[20] & 0x1f); [[fallthrough]];
case 1: case 1:
case 5: case 5:
case 0x11:
div = 4; div = 4;
break; break;
case 0x16: case 0x16:
@ -195,6 +194,7 @@ void x68k_crtc_device::refresh_mode()
case 0x10: case 0x10:
div = 6; div = 6;
break; break;
case 0x11: // aquales intro requires /3 for 0x11, TODO: figure out what wanted /4
case 0x15: case 0x15:
div = 3; div = 3;
break; 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 xscr,yscr;
uint16_t colour = 0; uint16_t colour = 0;
int shift; int shift;
bool blend, ret = false; bool blend, ret = (m_video.reg[2] & 0x1a00) == 0x1a00;
uint16_t *pal = (uint16_t *)m_gfxpalette->basemem().base(); uint16_t *pal = (uint16_t *)m_gfxpalette->basemem().base();
int divisor = 1; int divisor = 1;
if(m_crtc->gfx_double_scan()) if(m_crtc->gfx_double_scan())
@ -262,6 +262,7 @@ bool x68k_state::draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprect, ui
loc++; loc++;
loc &= 0x3ff; loc &= 0x3ff;
} }
ret = false;
} }
} }
else // else 512x512 "real" screen size 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; lineoffset = (((scanline - m_crtc->vbegin() / divisor) + yscr) & 0x1ff) * 512;
loc = xscr & 0x1ff; loc = xscr & 0x1ff;
shift = 4; shift = 4;
if((m_video.reg[2] & 0x1a00) == 0x1a00)
ret = true;
for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++) for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++)
{ {
colour = ((m_gvram[lineoffset + loc] >> page*shift) & 0x000f); 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; lineoffset1 = (((scanline - m_crtc->vbegin() / divisor) + yscr1) & 0x1ff) * 512;
loc1 = xscr1 & 0x1ff; loc1 = xscr1 & 0x1ff;
shift = 4; shift = 4;
if((m_video.reg[2] & 0x1a00) == 0x1a00)
ret = true;
for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++) for(pixel=m_crtc->hbegin();pixel<=m_crtc->hend();pixel++)
{ {
colour = ((m_gvram[lineoffset0 + loc0] >> page*shift) & 0x000f); 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++;
loc &= 0x1ff; loc &= 0x1ff;
} }
ret = false;
break; break;
} }
} }
@ -765,7 +763,7 @@ uint32_t x68k_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
pcgprio = currprio; pcgprio = currprio;
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; gfxprio = currprio;
currprio++; currprio++;