[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [patch] incorrect VGA initialization, can provide image
From: |
Piotr Krysik |
Subject: |
[Qemu-devel] [patch] incorrect VGA initialization, can provide image |
Date: |
Thu, 9 Sep 2004 15:14:35 -0700 (PDT) |
Hi!
This patch should fix the problem.
Piotrek
_______________________________
Do you Yahoo!?
Shop for Back-to-School deals on Yahoo! Shopping.
http://shopping.yahoo.com/backtoschool
diff -ru qemu-snapshot-2004-08-04_23/hw/vga.c
qemu-snapshot-2004-08-04_23-vga-update/hw/vga.c
--- qemu-snapshot-2004-08-04_23/hw/vga.c 2004-06-26 18:12:26.000000000
+0200
+++ qemu-snapshot-2004-08-04_23-vga-update/hw/vga.c 2004-09-09
23:40:51.000000000 +0200
@@ -696,10 +696,14 @@
/* chain 4 mode : simplest access */
plane = addr & 3;
if (s->sr[2] & (1 << plane)) {
- s->vram_ptr[addr] = val;
#ifdef DEBUG_VGA_MEM
printf("vga: chain4: [0x%x]\n", addr);
#endif
+ s->vram_ptr[addr] = val;
+ /* force full update for vga_draw_text when writing font memory */
+ if (((s->font_offsets[0] ^ addr) & ~0x7ffc) == 0 ||
+ ((s->font_offsets[1] ^ addr) & ~0x7ffc) == 0)
+ s->font_offsets[0] = -1;
cpu_physical_memory_set_dirty(s->vram_offset + addr);
}
} else if (s->gr[5] & 0x10) {
@@ -707,10 +711,14 @@
plane = (s->gr[4] & 2) | (addr & 1);
if (s->sr[2] & (1 << plane)) {
addr = ((addr & ~1) << 1) | plane;
- s->vram_ptr[addr] = val;
#ifdef DEBUG_VGA_MEM
printf("vga: odd/even: [0x%x]\n", addr);
#endif
+ s->vram_ptr[addr] = val;
+ /* force full update for vga_draw_text when writing font memory */
+ if (((s->font_offsets[0] ^ addr) & ~0x7ffc) == 0 ||
+ ((s->font_offsets[1] ^ addr) & ~0x7ffc) == 0)
+ s->font_offsets[0] = -1;
cpu_physical_memory_set_dirty(s->vram_offset + addr);
}
} else {
@@ -776,14 +784,19 @@
do_write:
/* mask data according to sr[2] */
write_mask = mask16[s->sr[2]];
+#ifdef DEBUG_VGA_MEM
+ printf("vga: latch: [0x%x] mask=0x%08x val=0x%08x\n",
+ addr * 4, write_mask, val);
+#endif
((uint32_t *)s->vram_ptr)[addr] =
(((uint32_t *)s->vram_ptr)[addr] & ~write_mask) |
(val & write_mask);
-#ifdef DEBUG_VGA_MEM
- printf("vga: latch: [0x%x] mask=0x%08x val=0x%08x\n",
- addr * 4, write_mask, val);
-#endif
- cpu_physical_memory_set_dirty(s->vram_offset + (addr << 2));
+ /* force full update for vga_draw_text when writing font memory */
+ if ((s->sr[2] & 4) &&
+ (((s->font_offsets[0] ^ ((addr << 2) + 2)) & ~0x7ffc) == 0 ||
+ ((s->font_offsets[1] ^ ((addr << 2) + 2)) & ~0x7ffc) == 0))
+ s->font_offsets[0] = -1;
+ cpu_physical_memory_set_dirty(s->vram_offset + (addr << 2));
}
}
- [Qemu-devel] [patch] incorrect VGA initialization, can provide image,
Piotr Krysik <=