Commit a130a41e69bd0d71574fa7c5b955f3850496fe76
1 parent
78e127ef
interlace support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@915 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
2 changed files
with
28 additions
and
7 deletions
hw/vga.c
... | ... | @@ -1301,6 +1301,19 @@ static int vga_get_bpp(VGAState *s) |
1301 | 1301 | return ret; |
1302 | 1302 | } |
1303 | 1303 | |
1304 | +static void vga_get_resolution(VGAState *s, int *pwidth, int *pheight) | |
1305 | +{ | |
1306 | + int width, height; | |
1307 | + | |
1308 | + width = (s->cr[0x01] + 1) * 8; | |
1309 | + height = s->cr[0x12] | | |
1310 | + ((s->cr[0x07] & 0x02) << 7) | | |
1311 | + ((s->cr[0x07] & 0x40) << 3); | |
1312 | + height = (height + 1); | |
1313 | + *pwidth = width; | |
1314 | + *pheight = height; | |
1315 | +} | |
1316 | + | |
1304 | 1317 | void vga_invalidate_scanlines(VGAState *s, int y1, int y2) |
1305 | 1318 | { |
1306 | 1319 | int y; |
... | ... | @@ -1327,11 +1340,7 @@ static void vga_draw_graphic(VGAState *s, int full_update) |
1327 | 1340 | |
1328 | 1341 | full_update |= update_basic_params(s); |
1329 | 1342 | |
1330 | - width = (s->cr[0x01] + 1) * 8; | |
1331 | - height = s->cr[0x12] | | |
1332 | - ((s->cr[0x07] & 0x02) << 7) | | |
1333 | - ((s->cr[0x07] & 0x40) << 3); | |
1334 | - height = (height + 1); | |
1343 | + s->get_resolution(s, &width, &height); | |
1335 | 1344 | disp_width = width; |
1336 | 1345 | |
1337 | 1346 | shift_control = (s->gr[0x05] >> 5) & 3; |
... | ... | @@ -1562,6 +1571,15 @@ void vga_update_display(void) |
1562 | 1571 | } |
1563 | 1572 | } |
1564 | 1573 | |
1574 | +/* force a full display refresh */ | |
1575 | +void vga_invalidate_display(void) | |
1576 | +{ | |
1577 | + VGAState *s = vga_state; | |
1578 | + | |
1579 | + s->last_width = -1; | |
1580 | + s->last_height = -1; | |
1581 | +} | |
1582 | + | |
1565 | 1583 | static void vga_reset(VGAState *s) |
1566 | 1584 | { |
1567 | 1585 | memset(s, 0, sizeof(VGAState)); |
... | ... | @@ -1723,6 +1741,7 @@ void vga_common_init(VGAState *s, DisplayState *ds, uint8_t *vga_ram_base, |
1723 | 1741 | s->ds = ds; |
1724 | 1742 | s->get_bpp = vga_get_bpp; |
1725 | 1743 | s->get_offsets = vga_get_offsets; |
1744 | + s->get_resolution = vga_get_resolution; | |
1726 | 1745 | /* XXX: currently needed for display */ |
1727 | 1746 | vga_state = s; |
1728 | 1747 | } |
... | ... | @@ -1875,8 +1894,7 @@ void vga_screen_dump(const char *filename) |
1875 | 1894 | DisplayState *saved_ds, ds1, *ds = &ds1; |
1876 | 1895 | |
1877 | 1896 | /* XXX: this is a little hackish */ |
1878 | - s->last_width = -1; | |
1879 | - s->last_height = -1; | |
1897 | + vga_invalidate_display(); | |
1880 | 1898 | saved_ds = s->ds; |
1881 | 1899 | |
1882 | 1900 | memset(ds, 0, sizeof(DisplayState)); | ... | ... |
hw/vga_int.h
... | ... | @@ -103,6 +103,9 @@ |
103 | 103 | void (*get_offsets)(struct VGAState *s, \ |
104 | 104 | uint32_t *pline_offset, \ |
105 | 105 | uint32_t *pstart_addr); \ |
106 | + void (*get_resolution)(struct VGAState *s, \ | |
107 | + int *pwidth, \ | |
108 | + int *pheight); \ | |
106 | 109 | VGA_STATE_COMMON_BOCHS_VBE \ |
107 | 110 | /* display refresh support */ \ |
108 | 111 | DisplayState *ds; \ | ... | ... |