diff --git a/hw/cirrus_vga.c b/hw/cirrus_vga.c index 706c4c30f0..fc7c9cad9a 100644 --- a/hw/cirrus_vga.c +++ b/hw/cirrus_vga.c @@ -850,11 +850,17 @@ static void cirrus_bitblt_cputovideo_next(CirrusVGAState * s) static void cirrus_bitblt_reset(CirrusVGAState * s) { + int need_update; + s->gr[0x31] &= ~(CIRRUS_BLT_START | CIRRUS_BLT_BUSY | CIRRUS_BLT_FIFOUSED); + need_update = s->cirrus_srcptr != &s->cirrus_bltbuf[0] + || s->cirrus_srcptr_end != &s->cirrus_bltbuf[0]; s->cirrus_srcptr = &s->cirrus_bltbuf[0]; s->cirrus_srcptr_end = &s->cirrus_bltbuf[0]; s->cirrus_srccounter = 0; + if (!need_update) + return; cirrus_update_memory_access(s); }