diff options
-rw-r--r-- | vgasrc/stdvgamodes.c | 9 | ||||
-rw-r--r-- | vgasrc/vgabios.c | 4 | ||||
-rw-r--r-- | vgasrc/vgabios.h | 1 |
3 files changed, 12 insertions, 2 deletions
diff --git a/vgasrc/stdvgamodes.c b/vgasrc/stdvgamodes.c index 53b7463a..c553514f 100644 --- a/vgasrc/stdvgamodes.c +++ b/vgasrc/stdvgamodes.c @@ -397,6 +397,15 @@ stdvga_build_video_param(void) , get_global_seg(), GET_GLOBAL(stdmode_g->grdc_regs) , ARRAY_SIZE(vparam_g->grdc_regs)); } + + // Fill available legacy modes in video_func_static table + u32 modes = 0; + for (i = 0; i < ARRAY_SIZE(vga_modes); i++) { + u16 mode = vga_modes[i].mode; + if (mode <= 0x13) + modes |= 1<<i; + } + SET_VGA(static_functionality.modes, modes); } void diff --git a/vgasrc/vgabios.c b/vgasrc/vgabios.c index 9b94f4d6..858f415a 100644 --- a/vgasrc/vgabios.c +++ b/vgasrc/vgabios.c @@ -1076,8 +1076,8 @@ handle_101a(struct bregs *regs) } -static struct video_func_static static_functionality VAR16 = { - .modes = 0x0fe0ff, +struct video_func_static static_functionality VAR16 = { + .modes = 0x00, // Filled in by stdvga_build_video_param() .scanlines = 0x07, // 200, 350, 400 scan lines .cblocks = 0x02, // mamimum number of visible charsets in text mode .active_cblocks = 0x08, // total number of charset blocks in text mode diff --git a/vgasrc/vgabios.h b/vgasrc/vgabios.h index 397225aa..d06ebb4c 100644 --- a/vgasrc/vgabios.h +++ b/vgasrc/vgabios.h @@ -107,6 +107,7 @@ u16 calc_page_size(u8 memmodel, u16 width, u16 height); int bda_save_restore(int cmd, u16 seg, void *data); struct vgamode_s *get_current_mode(void); int vga_set_mode(int mode, int flags); +extern struct video_func_static static_functionality; // vgafb.c void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g); |