#include <stdlib.h>
#include <assert.h>
#include "vidsys.h"
+#include "vga.h"
#include "drv.h"
#include "cdpmi.h"
struct vid_driver *vid_drvlist[MAX_DRV];
int vid_numdrv;
+void *vid_vmem;
+int vid_vmem_size;
+
static struct vid_modeinfo **modes, *cur_mode;
static int num_modes, max_modes;
-static void *vmem;
-static int vmem_size;
int vid_init(void)
{
- int i, j;
+ int i, j, len;
+ struct vid_modeinfo *vm;
vid_numdrv = 0;
free(modes);
cur_mode = 0;
num_modes = max_modes = 0;
- vmem = 0;
- vmem_size = 0;
+ vid_vmem = 0;
+ vid_vmem_size = 0;
if(dpmi_init() == -1) {
return -1;
}
printf("found %d modes:\n", num_modes);
- for(i=0; i<num_modes; i++) {
- printf("[%6s] %04x: %dx%d %dbpp\n", modes[i]->drv->name, modes[i]->modeno,
- modes[i]->width, modes[i]->height, modes[i]->bpp);
+ for(i=0; i<num_modes; i+=2) {
+ vm = modes[i];
+ len = printf("[%4s] %04x: %dx%d %dbpp", vm->drv->name, vm->modeno,
+ vm->width, vm->height, vm->bpp);
+ if(i + 1 >= num_modes) {
+ putchar('\n');
+ break;
+ }
+ for(j=len; j<40; j++) putchar(' ');
+ vm = modes[i + 1];
+ printf("[%4s] %04x: %dx%d %dbpp\n", vm->drv->name, vm->modeno,
+ vm->width, vm->height, vm->bpp);
}
return 0;
vid_setmode(3);
}
- if(vmem >= (void*)0x100000) {
- dpmi_munmap(vmem);
+ if(vid_vmem >= (void*)0x100000) {
+ dpmi_munmap(vid_vmem);
}
for(i=0; i<vid_numdrv; i++) {
if(drv->ops->setmode(mode) == 0) {
cur_mode = modes[i];
- if(vmem >= (void*)0x100000) {
- assert(vmem_size);
- dpmi_munmap(vmem);
+ if(vid_vmem >= (void*)0x100000) {
+ assert(vid_vmem_size);
+ dpmi_munmap(vid_vmem);
}
if(modes[i]->vmem_addr < 0x100000) {
- vmem = (void*)modes[i]->vmem_addr;
- vmem_size = 0;
+ vid_vmem = (void*)modes[i]->vmem_addr;
+ vid_vmem_size = 0;
} else {
- vmem = dpmi_mmap(modes[i]->vmem_addr, modes[i]->vmem_size);
- vmem_size = modes[i]->vmem_size;
+ vid_vmem = dpmi_mmap(modes[i]->vmem_addr, modes[i]->vmem_size);
+ vid_vmem_size = modes[i]->vmem_size;
}
- return vmem;
+ return vid_vmem;
}
}
}