X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fvbe.c;h=933ffe58a02257aabc6fd884544c42e6961c24e6;hb=28d44c4b65b11f37ffd69a2b0227f14ca5c4f137;hp=58cf2e710189e7016d56cf2c619c69bae05e99f5;hpb=395502ec9dab0fda04bacb223f1fecdbbbdbe1b7;p=bootcensus diff --git a/src/vbe.c b/src/vbe.c index 58cf2e7..933ffe5 100644 --- a/src/vbe.c +++ b/src/vbe.c @@ -9,22 +9,30 @@ #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; + printf("vbe_get_info... "); + + 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); + printf("status: %d\n", (regs.eax >> 8) & 0xff); + + if((regs.eax & 0xffff) != 0x4f) { + return 0; + } + return info; } @@ -33,15 +41,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; }