4 #include "config.h" // CONFIG_VGA_EMULATE_TEXT
5 #include "types.h" // u8
6 #include "farptr.h" // struct segoff_s
7 #include "std/vga.h" // struct video_param_s
10 #define SR_HARDWARE 0x0001
13 #define SR_REGISTERS 0x0008
14 #define SR_SAVE 0x0100
15 #define SR_RESTORE 0x0200
18 #define MF_LEGACY 0x0001
19 #define MF_GRAYSUM 0x0002
20 #define MF_NOPALETTE 0x0008
21 #define MF_CUSTOMCRTC 0x0800
22 #define MF_LINEARFB 0x4000
23 #define MF_NOCLEARMEM 0x8000
24 #define MF_VBEFLAGS 0xfe00
29 #define MM_HERCULES 0x02
30 #define MM_PLANAR 0x03
31 #define MM_PACKED 0x04
32 #define MM_NON_CHAIN_4_256 0x05
33 #define MM_DIRECT 0x06
46 // Graphics pixel operations.
48 struct vgamode_s *vmode_g;
65 // Custom internal storage in BDA (don't change here without also
66 // updating vgaentry.S)
67 #define VGA_CUSTOM_BDA 0xb9
75 #define BF_PM_MASK 0x0f
76 #define BF_EMULATE_TEXT 0x10
77 #define BF_SWCURSOR 0x20
78 #define BF_EXTRA_STACK 0x40
80 #define GET_BDA_EXT(var) \
81 GET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var)
82 #define SET_BDA_EXT(var, val) \
83 SET_FARVAR(SEG_BDA, ((struct vga_bda_s *)VGA_CUSTOM_BDA)->var, (val))
84 #define MASK_BDA_EXT(var, off, on) \
85 SET_BDA_EXT(var, (GET_BDA_EXT(var) & ~(off)) | (on))
87 static inline int vga_emulate_text(void) {
88 return CONFIG_VGA_EMULATE_TEXT && GET_BDA_EXT(flags) & BF_EMULATE_TEXT;
92 #define DEBUG_VGA_POST 1
93 #define DEBUG_VGA_10 3
97 extern u8 vgafont14[];
98 extern u8 vgafont16[];
99 extern u8 vgafont14alt[];
100 extern u8 vgafont16alt[];
103 extern struct video_save_pointer_s video_save_pointer_table;
104 extern struct video_param_s video_param_table[29];
108 extern int HaveRunInit;
109 #define SET_VGA(var, val) SET_FARVAR(get_global_seg(), (var), (val))
111 u8 car, attr, use_attr, pad;
116 int vga_bpp(struct vgamode_s *vmode_g);
117 u16 calc_page_size(u8 memmodel, u16 width, u16 height);
118 u16 get_cursor_shape(void);
119 struct cursorpos get_cursor_pos(u8 page);
120 int bda_save_restore(int cmd, u16 seg, void *data);
121 struct vgamode_s *get_current_mode(void);
122 int vga_set_mode(int mode, int flags);
123 extern struct video_func_static static_functionality;
126 void init_gfx_op(struct gfx_op *op, struct vgamode_s *vmode_g);
127 void handle_gfx_op(struct gfx_op *op);
128 void *text_address(struct cursorpos cp);
129 void vgafb_move_chars(struct cursorpos dest
130 , struct cursorpos src, struct cursorpos movesize);
131 void vgafb_clear_chars(struct cursorpos dest
132 , struct carattr ca, struct cursorpos movesize);
133 void vgafb_write_char(struct cursorpos cp, struct carattr ca);
134 struct carattr vgafb_read_char(struct cursorpos cp);
135 void vgafb_write_pixel(u8 color, u16 x, u16 y);
136 u8 vgafb_read_pixel(u16 x, u16 y);
137 void vgafb_set_swcursor(int enable);
140 extern u32 VBE_total_memory;
141 extern u32 VBE_capabilities;
142 extern u32 VBE_framebuffer;
143 extern u16 VBE_win_granularity;
144 #define VBE_OEM_STRING "SeaBIOS VBE(C) 2011"
145 #define VBE_VENDOR_STRING "SeaBIOS Developers"
146 #define VBE_PRODUCT_STRING "SeaBIOS VBE Adapter"
147 #define VBE_REVISION_STRING "Rev. 1"
149 void handle_104f(struct bregs *regs);