mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
(mess) x68k: fix text layer clear and gfx buffer mode (nw)
This commit is contained in:
parent
8c7e190601
commit
fbc460d564
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user