vga_update_display(s);
diff --git a/intel.c b/intel.c
new file mode 100644
-index 0000000..3fd2379
+index 0000000..f3d6672
--- /dev/null
+++ b/intel.c
-@@ -0,0 +1,507 @@
+@@ -0,0 +1,518 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdint.h>
+ unsigned int *dspbstride = (unsigned int *)(intel_mmio + REG_DR_DSPBSTRIDE);
+ volatile unsigned int *fbc_ctl = (unsigned int *)(intel_mmio + REG_FBC_CONTROL);
+
++ struct timeval start_decompress;
++
+ unsigned int surfa = 0, surfb = 0, pipea = 0, pipeb = 0;
+ char pipeaenabled = !!(*pipeaconf & (1 << 30));
+ char pipebenabled = !!(*pipebconf & (1 << 30));
+
+ /* Clear the compression bit */
+ *fbc_ctl &= ~(1 << 31);
++
++ gettimeofday(&start_decompress,NULL);
+ /* Wait for the status register */
-+ while (intel_get_reg(REG_FBC_STATUS) & (1 << 31))
-+ ;
++
++ while (intel_get_reg(REG_FBC_STATUS) & (1 << 31)) {
++ struct timeval now,diff;
++ gettimeofday(&now,NULL);
++ timersub(&now,&start_decompress,&diff);
++
++ if (diff.tv_sec || diff.tv_usec>500000) break;
++ usleep(1000);
++ }
+}
+
+static void set_fb_mapping(void)
+
+
diff --git a/vl.c b/vl.c
-index 6350384..cf7ad19 100644
+index e5c0447..33cfb51 100644
--- a/vl.c
+++ b/vl.c
@@ -235,6 +235,7 @@ int win2k_install_hack = 0;
#if defined(CONFIG_XEN) && !defined(CONFIG_DM)
{ "xen-domid", HAS_ARG, QEMU_OPTION_xen_domid },
{ "xen-create", 0, QEMU_OPTION_xen_create },
-@@ -5318,6 +5321,9 @@ int main(int argc, char **argv, char **envp)
+@@ -5319,6 +5322,9 @@ int main(int argc, char **argv, char **envp)
case QEMU_OPTION_dom0_input:
dom0_input = optarg;
break;
case QEMU_OPTION_direct_pci:
direct_pci = optarg;
break;
-@@ -5922,26 +5928,26 @@ int main(int argc, char **argv, char **envp)
+@@ -5923,26 +5929,26 @@ int main(int argc, char **argv, char **envp)
curses_display_init(ds, full_screen);
} else
#endif