cirrus_do_copy() in hw/cirrus_vga.c seems to make some incorrect
assumptions about video
memory layout. It tries to convert addresses to coordinates assuming
that one row of data is
(width * depth) bytes long. The correct way seems to be to use the
pitch fields in the
CirrusVGAState structure instead.
Without this patch, I get lots of screen corruption when I try to
drag a window under X as it's
passing the wrong coordinates to the display surface for the copy.
With this patch I can drag a
window with no screen corruption.