diff options
author | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-08 00:59:19 +0000 |
---|---|---|
committer | bellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162> | 2004-06-08 00:59:19 +0000 |
commit | a130a41e69bd0d71574fa7c5b955f3850496fe76 (patch) | |
tree | 2e62d48d51a13b14582d0297ef276893e60844f8 | |
parent | 78e127efdbac82f148ed4f7b42f8f4f2873b4c5b (diff) |
interlace support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@915 c046a42c-6fe2-441c-8c8c-71466251a162
-rw-r--r-- | hw/vga.c | 32 | ||||
-rw-r--r-- | hw/vga_int.h | 3 |
2 files changed, 28 insertions, 7 deletions
@@ -1301,6 +1301,19 @@ static int vga_get_bpp(VGAState *s) return ret; } +static void vga_get_resolution(VGAState *s, int *pwidth, int *pheight) +{ + int width, height; + + width = (s->cr[0x01] + 1) * 8; + height = s->cr[0x12] | + ((s->cr[0x07] & 0x02) << 7) | + ((s->cr[0x07] & 0x40) << 3); + height = (height + 1); + *pwidth = width; + *pheight = height; +} + void vga_invalidate_scanlines(VGAState *s, int y1, int y2) { int y; @@ -1327,11 +1340,7 @@ static void vga_draw_graphic(VGAState *s, int full_update) full_update |= update_basic_params(s); - width = (s->cr[0x01] + 1) * 8; - height = s->cr[0x12] | - ((s->cr[0x07] & 0x02) << 7) | - ((s->cr[0x07] & 0x40) << 3); - height = (height + 1); + s->get_resolution(s, &width, &height); disp_width = width; shift_control = (s->gr[0x05] >> 5) & 3; @@ -1562,6 +1571,15 @@ void vga_update_display(void) } } +/* force a full display refresh */ +void vga_invalidate_display(void) +{ + VGAState *s = vga_state; + + s->last_width = -1; + s->last_height = -1; +} + static void vga_reset(VGAState *s) { memset(s, 0, sizeof(VGAState)); @@ -1723,6 +1741,7 @@ void vga_common_init(VGAState *s, DisplayState *ds, uint8_t *vga_ram_base, s->ds = ds; s->get_bpp = vga_get_bpp; s->get_offsets = vga_get_offsets; + s->get_resolution = vga_get_resolution; /* XXX: currently needed for display */ vga_state = s; } @@ -1875,8 +1894,7 @@ void vga_screen_dump(const char *filename) DisplayState *saved_ds, ds1, *ds = &ds1; /* XXX: this is a little hackish */ - s->last_width = -1; - s->last_height = -1; + vga_invalidate_display(); saved_ds = s->ds; memset(ds, 0, sizeof(DisplayState)); diff --git a/hw/vga_int.h b/hw/vga_int.h index 0d0f3edee1..b86219cc19 100644 --- a/hw/vga_int.h +++ b/hw/vga_int.h @@ -103,6 +103,9 @@ void (*get_offsets)(struct VGAState *s, \ uint32_t *pline_offset, \ uint32_t *pstart_addr); \ + void (*get_resolution)(struct VGAState *s, \ + int *pwidth, \ + int *pheight); \ VGA_STATE_COMMON_BOCHS_VBE \ /* display refresh support */ \ DisplayState *ds; \ |