8 #define SEG_ADDR(s) ((uint32_t)(s) << 4)
10 #define MODE_LFB (1 << 14)
12 extern unsigned char low_mem_buffer[];
14 struct vbe_info *vbe_get_info(void)
16 struct vbe_info *info;
17 struct int86regs regs;
19 info = (struct vbe_info*)low_mem_buffer;
21 memcpy(info->sig, "VBE2", 4);
23 memset(®s, 0, sizeof regs);
24 regs.es = (uint32_t)info >> 4;
28 if((regs.eax & 0xffff) != 0x4f) {
35 struct vbe_mode_info *vbe_get_mode_info(int mode)
37 struct vbe_mode_info *mi;
38 struct int86regs regs;
40 mi = (struct vbe_mode_info*)(low_mem_buffer + 512);
42 memset(®s, 0, sizeof regs);
43 regs.es = (uint32_t)mi >> 4;
48 if((regs.eax & 0xffff) != 0x4f) {
55 int vbe_set_mode(int mode)
57 struct int86regs regs;
59 memset(®s, 0, sizeof regs);
64 if(regs.eax == 0x100) {
70 void print_mode_info(struct vbe_mode_info *mi)
72 static unsigned int maskbits[] = {0, 1, 3, 7, 0xf, 0x1f, 0x3f, 0x7f, 0xff};
74 printf("resolution: %dx%d\n", mi->xres, mi->yres);
75 printf("color depth: %d\n", mi->bpp);
76 printf("mode attributes: %x\n", mi->mode_attr);
77 printf("bytes per scanline: %d\n", mi->scanline_bytes);
78 printf("number of planes: %d\n", (int)mi->num_planes);
79 printf("number of banks: %d\n", (int)mi->num_banks);
80 printf("mem model: %d\n", (int)mi->mem_model);
81 printf("red bits: %d (mask: %x)\n", (int)mi->rmask_size, maskbits[mi->rmask_size] << mi->rpos);
82 printf("green bits: %d (mask: %x)\n", (int)mi->gmask_size, maskbits[mi->gmask_size] << mi->gpos);
83 printf("blue bits: %d (mask: %x)\n", (int)mi->bmask_size, maskbits[mi->bmask_size] << mi->bpos);
84 printf("framebuffer address: %x\n", (unsigned int)mi->fb_addr);