interlace support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@915 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
parent
78e127efdb
commit
a130a41e69
32
hw/vga.c
32
hw/vga.c
|
@ -1301,6 +1301,19 @@ static int vga_get_bpp(VGAState *s)
|
||||||
return ret;
|
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)
|
void vga_invalidate_scanlines(VGAState *s, int y1, int y2)
|
||||||
{
|
{
|
||||||
int y;
|
int y;
|
||||||
|
@ -1327,11 +1340,7 @@ static void vga_draw_graphic(VGAState *s, int full_update)
|
||||||
|
|
||||||
full_update |= update_basic_params(s);
|
full_update |= update_basic_params(s);
|
||||||
|
|
||||||
width = (s->cr[0x01] + 1) * 8;
|
s->get_resolution(s, &width, &height);
|
||||||
height = s->cr[0x12] |
|
|
||||||
((s->cr[0x07] & 0x02) << 7) |
|
|
||||||
((s->cr[0x07] & 0x40) << 3);
|
|
||||||
height = (height + 1);
|
|
||||||
disp_width = width;
|
disp_width = width;
|
||||||
|
|
||||||
shift_control = (s->gr[0x05] >> 5) & 3;
|
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)
|
static void vga_reset(VGAState *s)
|
||||||
{
|
{
|
||||||
memset(s, 0, sizeof(VGAState));
|
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->ds = ds;
|
||||||
s->get_bpp = vga_get_bpp;
|
s->get_bpp = vga_get_bpp;
|
||||||
s->get_offsets = vga_get_offsets;
|
s->get_offsets = vga_get_offsets;
|
||||||
|
s->get_resolution = vga_get_resolution;
|
||||||
/* XXX: currently needed for display */
|
/* XXX: currently needed for display */
|
||||||
vga_state = s;
|
vga_state = s;
|
||||||
}
|
}
|
||||||
|
@ -1875,8 +1894,7 @@ void vga_screen_dump(const char *filename)
|
||||||
DisplayState *saved_ds, ds1, *ds = &ds1;
|
DisplayState *saved_ds, ds1, *ds = &ds1;
|
||||||
|
|
||||||
/* XXX: this is a little hackish */
|
/* XXX: this is a little hackish */
|
||||||
s->last_width = -1;
|
vga_invalidate_display();
|
||||||
s->last_height = -1;
|
|
||||||
saved_ds = s->ds;
|
saved_ds = s->ds;
|
||||||
|
|
||||||
memset(ds, 0, sizeof(DisplayState));
|
memset(ds, 0, sizeof(DisplayState));
|
||||||
|
|
|
@ -103,6 +103,9 @@
|
||||||
void (*get_offsets)(struct VGAState *s, \
|
void (*get_offsets)(struct VGAState *s, \
|
||||||
uint32_t *pline_offset, \
|
uint32_t *pline_offset, \
|
||||||
uint32_t *pstart_addr); \
|
uint32_t *pstart_addr); \
|
||||||
|
void (*get_resolution)(struct VGAState *s, \
|
||||||
|
int *pwidth, \
|
||||||
|
int *pheight); \
|
||||||
VGA_STATE_COMMON_BOCHS_VBE \
|
VGA_STATE_COMMON_BOCHS_VBE \
|
||||||
/* display refresh support */ \
|
/* display refresh support */ \
|
||||||
DisplayState *ds; \
|
DisplayState *ds; \
|
||||||
|
|
Loading…
Reference in a new issue