(mess) x68k: fix text layer clear and gfx buffer mode (nw)

This commit is contained in:
cracyc 2014-06-03 00:05:52 +00:00
parent 8c7e190601
commit fbc460d564
2 changed files with 9 additions and 14 deletions

View File

@ -107,8 +107,7 @@
Dragon Buster: Text is black and unreadable. (Text layer actually covers it)
Tetris: Black dots over screen (text layer).
Parodius Da!: Black squares in areas.
PacLand: Leftover garbage on title screen
Akumajo Drac: no sfx starting on second stage (m68000 only, 030 is fine), text layer not being cleared properly
Akumajo Drac: no sfx starting on second stage (m68000 only, 030 is fine), simon sprite flickers
More detailed documentation at http://x68kdev.emuvibes.com/iomap.html - if you can stand broken english :)
@ -1712,12 +1711,9 @@ static MACHINE_CONFIG_START( x68000, x68k_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_REFRESH_RATE(55.45)
// MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */
// MCFG_GFXDECODE_ADD("gfxdecode", "palette", x68k)
MCFG_SCREEN_SIZE(1096, 568) // inital setting
MCFG_SCREEN_VISIBLE_AREA(0, 767, 0, 511)
MCFG_SCREEN_UPDATE_DRIVER(x68k_state, screen_update_x68000)
// MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "pcgpalette", empty)

View File

@ -187,6 +187,10 @@ TIMER_CALLBACK_MEMBER(x68k_state::x68k_hsync)
m_crtc.hblank = hstate;
m_mfpdev->i7_w(!m_crtc.hblank);
if(m_crtc.operation & 8) // is this supposed to happen when the src or dest line is scanned?
x68k_crtc_text_copy((m_crtc.reg[22] & 0xff00) >> 8,(m_crtc.reg[22] & 0x00ff));
if(m_crtc.vmultiple == 2) // 256-line (doublescan)
{
if(hstate == 1)
@ -441,11 +445,6 @@ WRITE16_MEMBER(x68k_state::x68k_crtc_w )
break;
case 576: // operation register
m_crtc.operation = data;
if(data & 0x08) // text screen raster copy
{
x68k_crtc_text_copy((m_crtc.reg[22] & 0xff00) >> 8,(m_crtc.reg[22] & 0x00ff));
timer_set(attotime::from_msec(1), TIMER_X68K_CRTC_OPERATION_END, 0x02); // time taken to do operation is a complete guess.
}
if(data & 0x02) // high-speed graphic screen clear
{
memset(m_gvram,0,0x40000);
@ -506,7 +505,7 @@ WRITE16_MEMBER(x68k_state::x68k_gvram_w )
*/
// handle different G-VRAM page setups
if(m_crtc.reg[20] & 0x08) // G-VRAM set to buffer
if(m_crtc.reg[20] & 0x0800) // G-VRAM set to buffer
{
if(offset < 0x40000)
COMBINE_DATA(m_gvram+offset);
@ -587,7 +586,7 @@ READ16_MEMBER(x68k_state::x68k_gvram_r )
{
UINT16 ret = 0;
if(m_crtc.reg[20] & 0x08) // G-VRAM set to buffer
if(m_crtc.reg[20] & 0x0800) // G-VRAM set to buffer
return m_gvram[offset];
switch(m_crtc.reg[20] & 0x0300) // colour setup determines G-VRAM use
@ -825,10 +824,10 @@ bool x68k_state::x68k_draw_gfx_scanline( bitmap_ind16 &bitmap, rectangle cliprec
{
if(ret)
{
if(blend)
if(blend && bitmap.pix16(scanline, pixel))
bitmap.pix16(scanline, pixel) = ((bitmap.pix16(scanline, pixel) >> 1) & 0x7bde) + ((pal[colour] >> 1) & 0x7bde) + 1;
else
bitmap.pix16(scanline, pixel) = pal[colour] & 0xfffe;
bitmap.pix16(scanline, pixel) = (pal[colour] & 0xfffe) + blend;
}
else
bitmap.pix16(scanline, pixel) = colour;