diff -ruN qemu-solaris-sparc/hw/vga.c qemu/hw/vga.c --- qemu-solaris-sparc/hw/vga.c 2006-04-08 21:06:34.000000000 -0400 +++ qemu/hw/vga.c 2006-05-10 12:31:31.059297000 -0400 @@ -790,23 +790,43 @@ static inline unsigned int rgb_to_pixel8(unsigned int r, unsigned int g, unsigned b) { +if (bgr_display_enabled) { + return ((b >> 5) << 5) | ((g >> 5) << 2) | (r >> 6); +} +else { return ((r >> 5) << 5) | ((g >> 5) << 2) | (b >> 6); } +} static inline unsigned int rgb_to_pixel15(unsigned int r, unsigned int g, unsigned b) { +if (bgr_display_enabled) { + return ((b >> 3) << 10) | ((g >> 3) << 5) | (r >> 3); +} +else { return ((r >> 3) << 10) | ((g >> 3) << 5) | (b >> 3); } +} static inline unsigned int rgb_to_pixel16(unsigned int r, unsigned int g, unsigned b) { +if (bgr_display_enabled) { + return ((b >> 3) << 11) | ((g >> 2) << 5) | (r >> 3); +} +else { return ((r >> 3) << 11) | ((g >> 2) << 5) | (b >> 3); } +} static inline unsigned int rgb_to_pixel32(unsigned int r, unsigned int g, unsigned b) { +if (bgr_display_enabled) { + return (b << 16) | (g << 8) | r; +} +else { return (r << 16) | (g << 8) | b; } +} #define DEPTH 8 #include "vga_template.h" @@ -1366,6 +1386,8 @@ if (disp_width != s->last_width || height != s->last_height) { + if (cirrus_vga_enabled && s->get_bpp(s) >= 8) + memset(s->vram_ptr, 0xff, s->vram_size); dpy_resize(s->ds, disp_width, height); s->last_scr_width = disp_width; s->last_scr_height = height; diff -ruN qemu-solaris-sparc/vl.c qemu/vl.c --- qemu-solaris-sparc/vl.c 2006-05-10 12:37:40.467126000 -0400 +++ qemu/vl.c 2006-05-10 12:31:46.354278000 -0400 @@ -130,6 +130,7 @@ int vm_running; int rtc_utc = 1; int cirrus_vga_enabled = 1; +int bgr_display_enabled = 0; #ifdef TARGET_SPARC int graphic_width = 1024; int graphic_height = 768; @@ -4626,6 +4627,7 @@ "-m megs set virtual RAM size to megs MB [default=%d]\n" "-smp n set the number of CPUs to 'n' [default=1]\n" "-nographic disable graphical output and redirect serial I/Os to console\n" + "-bgr invert colors for HOSTS using certain SPARC frame buffers\n" #ifndef _WIN32 "-k language use keyboard layout (for example \"fr\" for French)\n" #endif @@ -4782,6 +4784,7 @@ QEMU_OPTION_cirrusvga, QEMU_OPTION_g, QEMU_OPTION_std_vga, + QEMU_OPTION_bgr, QEMU_OPTION_monitor, QEMU_OPTION_serial, QEMU_OPTION_parallel, @@ -4861,6 +4864,7 @@ { "full-screen", 0, QEMU_OPTION_full_screen }, { "pidfile", HAS_ARG, QEMU_OPTION_pidfile }, { "win2k-hack", 0, QEMU_OPTION_win2k_hack }, + { "bgr", 0, QEMU_OPTION_bgr }, { "usbdevice", HAS_ARG, QEMU_OPTION_usbdevice }, { "smp", HAS_ARG, QEMU_OPTION_smp }, { "vnc", HAS_ARG, QEMU_OPTION_vnc }, @@ -5365,6 +5369,9 @@ case QEMU_OPTION_std_vga: cirrus_vga_enabled = 0; break; + case QEMU_OPTION_bgr: + bgr_display_enabled = 1; + break; case QEMU_OPTION_g: { const char *p; diff -ruN qemu-solaris-sparc/vl.h qemu/vl.h --- qemu-solaris-sparc/vl.h 2006-05-03 18:02:44.000000000 -0400 +++ qemu/vl.h 2006-05-10 12:31:51.368923000 -0400 @@ -135,6 +135,7 @@ extern int bios_size; extern int rtc_utc; extern int cirrus_vga_enabled; +extern int bgr_display_enabled; extern int graphic_width; extern int graphic_height; extern int graphic_depth;