mirror of
https://github.com/holub/mame
synced 2025-06-07 21:33:45 +03:00
pc_vga: force PEL shift to 0 after a line compare, and move latch release to the end of VBLANK. Fixes Jazz Jackrabbit scrolling (do let me know if there are any regressions).
This commit is contained in:
parent
cacb9bb1b5
commit
f668e0465d
@ -221,7 +221,7 @@ TIMER_CALLBACK_MEMBER(vga_device::vblank_timer_cb)
|
|||||||
{
|
{
|
||||||
vga.crtc.start_addr = vga.crtc.start_addr_latch;
|
vga.crtc.start_addr = vga.crtc.start_addr_latch;
|
||||||
vga.attribute.pel_shift = vga.attribute.pel_shift_latch;
|
vga.attribute.pel_shift = vga.attribute.pel_shift_latch;
|
||||||
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start) );
|
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void vga_device::device_start()
|
void vga_device::device_start()
|
||||||
@ -471,7 +471,10 @@ void vga_device::vga_vh_vga(bitmap_rgb32 &bitmap, const rectangle &cliprect)
|
|||||||
if((line + yi) < (vga.crtc.line_compare & mask_comp))
|
if((line + yi) < (vga.crtc.line_compare & mask_comp))
|
||||||
curr_addr = addr;
|
curr_addr = addr;
|
||||||
if((line + yi) == (vga.crtc.line_compare & mask_comp))
|
if((line + yi) == (vga.crtc.line_compare & mask_comp))
|
||||||
|
{
|
||||||
curr_addr = 0;
|
curr_addr = 0;
|
||||||
|
pel_shift = 0;
|
||||||
|
}
|
||||||
bitmapline = &bitmap.pix32(line + yi);
|
bitmapline = &bitmap.pix32(line + yi);
|
||||||
for (pos=curr_addr, c=0, column=0; column<VGA_COLUMNS+1; column++, c+=8, pos++)
|
for (pos=curr_addr, c=0, column=0; column<VGA_COLUMNS+1; column++, c+=8, pos++)
|
||||||
{
|
{
|
||||||
@ -1265,7 +1268,7 @@ void vga_device::recompute_params_clock(int divisor, int xtal)
|
|||||||
refresh = HZ_TO_ATTOSECONDS(pixel_clock) * (hblank_period) * vblank_period;
|
refresh = HZ_TO_ATTOSECONDS(pixel_clock) * (hblank_period) * vblank_period;
|
||||||
machine().first_screen()->configure((hblank_period), (vblank_period), visarea, refresh );
|
machine().first_screen()->configure((hblank_period), (vblank_period), visarea, refresh );
|
||||||
//popmessage("%d %d\n",vga.crtc.horz_total * 8,vga.crtc.vert_total);
|
//popmessage("%d %d\n",vga.crtc.horz_total * 8,vga.crtc.vert_total);
|
||||||
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start) );
|
m_vblank_timer->adjust( machine().first_screen()->time_until_pos(vga.crtc.vert_blank_start + vga.crtc.vert_blank_end) );
|
||||||
}
|
}
|
||||||
|
|
||||||
void vga_device::recompute_params()
|
void vga_device::recompute_params()
|
||||||
|
Loading…
Reference in New Issue
Block a user