-
-int vbe_set_scanlen(int len, int mode)
-{
- struct dpmi_real_regs regs;
-
- memset(®s, 0, sizeof regs);
- regs.eax = 0x4f06;
- regs.ebx = mode;
- regs.ecx = len & 0xffff;
- dpmi_real_int(0x10, ®s);
-
- if(regs.eax == 0x100) {
- return -1;
- }
- return regs.ecx & 0xffff;
-}
-
-int vbe_get_scanlen(int mode)
-{
- int res;
- struct dpmi_real_regs regs;
-
- memset(®s, 0, sizeof regs);
- regs.eax = 0x4f06;
- regs.ebx = 1;
- dpmi_real_int(0x10, ®s);
-
- if(regs.eax == 0x100) {
- return -1;
- }
-
- if(mode == VBE_SCANLEN_PIXELS) {
- res = regs.ecx & 0xffff;
- } else {
- res = regs.ebx & 0xffff;
- }
- return res;
-}
-
-
-static unsigned int get_mask(int sz, int pos)
-{
- unsigned int i, mask = 0;
-
- for(i=0; i<sz; i++) {
- mask |= 1 << i;
- }
- return mask << pos;
-}
-
-void print_mode_info(FILE *fp, struct vbe_mode_info *mi)
-{
- fprintf(fp, "resolution: %dx%d\n", mi->xres, mi->yres);
- fprintf(fp, "color depth: %d\n", mi->bpp);
- fprintf(fp, "mode attributes: %x\n", mi->mode_attr);
- fprintf(fp, "bytes per scanline: %d\n", mi->scanline_bytes);
- fprintf(fp, "number of planes: %d\n", (int)mi->num_planes);
- fprintf(fp, "number of banks: %d\n", (int)mi->num_banks);
- fprintf(fp, "mem model: %d\n", (int)mi->mem_model);
- fprintf(fp, "red bits: %d (mask: %x)\n", (int)mi->rmask_size, get_mask(mi->rmask_size, mi->rpos));
- fprintf(fp, "green bits: %d (mask: %x)\n", (int)mi->gmask_size, get_mask(mi->gmask_size, mi->gpos));
- fprintf(fp, "blue bits: %d (mask: %x)\n", (int)mi->bmask_size, get_mask(mi->bmask_size, mi->bpos));
- fprintf(fp, "framebuffer address: %x\n", (unsigned int)mi->fb_addr);
-}