X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fvbe.c;h=3f0f0330f24731f1e3e963c174913c195713f329;hb=e253f9a0cad14f636a51f6211308491ab19dfbe5;hp=58cf2e710189e7016d56cf2c619c69bae05e99f5;hpb=395502ec9dab0fda04bacb223f1fecdbbbdbe1b7;p=bootcensus diff --git a/src/vbe.c b/src/vbe.c index 58cf2e7..3f0f033 100644 --- a/src/vbe.c +++ b/src/vbe.c @@ -9,22 +9,26 @@ #define MODE_LFB (1 << 14) -extern void *low_mem_buffer; +extern unsigned char low_mem_buffer[]; struct vbe_info *vbe_get_info(void) { struct vbe_info *info; struct int86regs regs; - info = low_mem_buffer; + info = (struct vbe_info*)low_mem_buffer; memcpy(info->sig, "VBE2", 4); memset(®s, 0, sizeof regs); - regs.es = (uint32_t)low_mem_buffer >> 4; + regs.es = (uint32_t)info >> 4; regs.eax = 0x4f00; int86(0x10, ®s); + if((regs.eax & 0xffff) != 0x4f) { + return 0; + } + return info; } @@ -33,15 +37,15 @@ struct vbe_mode_info *vbe_get_mode_info(int mode) struct vbe_mode_info *mi; struct int86regs regs; - mi = low_mem_buffer; + mi = (struct vbe_mode_info*)(low_mem_buffer + 512); memset(®s, 0, sizeof regs); - regs.es = (uint32_t)low_mem_buffer >> 4; + regs.es = (uint32_t)mi >> 4; regs.eax = 0x4f01; regs.ecx = mode; int86(0x10, ®s); - if(regs.eax & 0xff00) { + if((regs.eax & 0xffff) != 0x4f) { return 0; }