start writing new VBE routines
[dosdemo] / src / dos / vbe.c
1 #include "vbe.h"
2 #include "cdpmi.h"
3
4 int vbe_getinfo(struct vbe_info *info)
5 {
6         void *lowbuf;
7         uint16_t seg, sel;
8         struct dpmi_regs regs = {0};
9
10         if(!(seg = dpmi_alloc(512 / 16, &sel))) {
11                 return -1;
12         }
13
14         regs.eax = 0x4f00;
15         regs.es = seg;
16         regs.edi = 0;
17         dpmi_int(0x10, &regs);
18
19         if(regs.eax & 0xff00) {
20                 dpmi_free(sel);
21                 return -1;
22         }
23
24         lowbuf = (void*)((uint32_t)seg << 4);
25         memcpy(info, lowbuf, sizeof info);
26         dpmi_free(sel);
27         return 0;
28 }