[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] Update one file from qemu 0.71 for Cirrus Logic VGA device model.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 349b302f29e2205c44df532e7826fc0cb7c17356 # Parent 349d7b4ef7b0149743727d4eef74362662462177 Update one file from qemu 0.71 for Cirrus Logic VGA device model. Using the older device model running pinball game on windows with full screen can cause guest crash. Signed-off-by: yunhong.jiang@xxxxxxxxx diff -r 349d7b4ef7b0 -r 349b302f29e2 tools/ioemu/hw/cirrus_vga_rop2.h --- a/tools/ioemu/hw/cirrus_vga_rop2.h Fri Oct 21 09:20:38 2005 +++ b/tools/ioemu/hw/cirrus_vga_rop2.h Fri Oct 21 09:24:35 2005 @@ -47,6 +47,11 @@ int x, y, pattern_y, pattern_pitch, pattern_x; unsigned int col; const uint8_t *src1; +#if DEPTH == 24 + int skipleft = s->gr[0x2f] & 0x1f; +#else + int skipleft = (s->gr[0x2f] & 0x07) * (DEPTH / 8); +#endif #if DEPTH == 8 pattern_pitch = 8; @@ -56,11 +61,11 @@ pattern_pitch = 32; #endif pattern_y = s->cirrus_blt_srcaddr & 7; - pattern_x = 0; - for(y = 0; y < bltheight; y++) { - d = dst; + for(y = 0; y < bltheight; y++) { + pattern_x = skipleft; + d = dst + skipleft; src1 = src + pattern_y * pattern_pitch; - for (x = 0; x < bltwidth; x += (DEPTH / 8)) { + for (x = skipleft; x < bltwidth; x += (DEPTH / 8)) { #if DEPTH == 8 col = src1[pattern_x]; pattern_x = (pattern_x + 1) & 7; @@ -99,7 +104,13 @@ unsigned int col; unsigned bitmask; unsigned index; - int srcskipleft = 0; +#if DEPTH == 24 + int dstskipleft = s->gr[0x2f] & 0x1f; + int srcskipleft = dstskipleft / 3; +#else + int srcskipleft = s->gr[0x2f] & 0x07; + int dstskipleft = srcskipleft * (DEPTH / 8); +#endif if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { bits_xor = 0xff; @@ -112,8 +123,8 @@ for(y = 0; y < bltheight; y++) { bitmask = 0x80 >> srcskipleft; bits = *src++ ^ bits_xor; - d = dst; - for (x = 0; x < bltwidth; x += (DEPTH / 8)) { + d = dst + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { if ((bitmask & 0xff) == 0) { bitmask = 0x80; bits = *src++ ^ bits_xor; @@ -142,15 +153,16 @@ unsigned bits; unsigned int col; unsigned bitmask; - int srcskipleft = 0; + int srcskipleft = s->gr[0x2f] & 0x07; + int dstskipleft = srcskipleft * (DEPTH / 8); colors[0] = s->cirrus_blt_bgcol; colors[1] = s->cirrus_blt_fgcol; for(y = 0; y < bltheight; y++) { bitmask = 0x80 >> srcskipleft; bits = *src++; - d = dst; - for (x = 0; x < bltwidth; x += (DEPTH / 8)) { + d = dst + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { if ((bitmask & 0xff) == 0) { bitmask = 0x80; bits = *src++; @@ -175,6 +187,13 @@ int x, y, bitpos, pattern_y; unsigned int bits, bits_xor; unsigned int col; +#if DEPTH == 24 + int dstskipleft = s->gr[0x2f] & 0x1f; + int srcskipleft = dstskipleft / 3; +#else + int srcskipleft = s->gr[0x2f] & 0x07; + int dstskipleft = srcskipleft * (DEPTH / 8); +#endif if (s->cirrus_blt_modeext & CIRRUS_BLTMODEEXT_COLOREXPINV) { bits_xor = 0xff; @@ -187,9 +206,9 @@ for(y = 0; y < bltheight; y++) { bits = src[pattern_y] ^ bits_xor; - bitpos = 7; - d = dst; - for (x = 0; x < bltwidth; x += (DEPTH / 8)) { + bitpos = 7 - srcskipleft; + d = dst + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { if ((bits >> bitpos) & 1) { PUTPIXEL(); } @@ -213,6 +232,8 @@ int x, y, bitpos, pattern_y; unsigned int bits; unsigned int col; + int srcskipleft = s->gr[0x2f] & 0x07; + int dstskipleft = srcskipleft * (DEPTH / 8); colors[0] = s->cirrus_blt_bgcol; colors[1] = s->cirrus_blt_fgcol; @@ -220,9 +241,9 @@ for(y = 0; y < bltheight; y++) { bits = src[pattern_y]; - bitpos = 7; - d = dst; - for (x = 0; x < bltwidth; x += (DEPTH / 8)) { + bitpos = 7 - srcskipleft; + d = dst + dstskipleft; + for (x = dstskipleft; x < bltwidth; x += (DEPTH / 8)) { col = colors[(bits >> bitpos) & 1]; PUTPIXEL(); d += (DEPTH / 8); _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |