X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fgfx.c;h=bc763d3158df9117ec6979097b2409e7288970f7;hp=b55b4e6b3f28b7ad94400e35e00658537654f491;hb=102f82ec5a8128cb076371aa3d9821e684b94380;hpb=b82bab85314bbc57d1c542d4d6687de0cd75c375 diff --git a/src/dos/gfx.c b/src/dos/gfx.c index b55b4e6..bc763d3 100644 --- a/src/dos/gfx.c +++ b/src/dos/gfx.c @@ -1,16 +1,10 @@ #include +#include #include "gfx.h" #include "vbe.h" #include "vga.h" #include "cdpmi.h" -#ifdef __DJGPP__ -#include -#define REALPTR(s, o) (void*)(((uint32_t)(s) << 4) - __djgpp_base_address + ((uint32_t)(o))) -#else -#define REALPTR(s, o) (void*)(((uint32_t)(s) << 4) + ((uint32_t)(o))) -#endif - #define SAME_BPP(a, b) \ ((a) == (b) || ((a) == 16 && (b) == 15) || ((a) == 15 && (b) == 16) || \ ((a) == 32 && (b) == 24) || ((a) == 24 && (b) == 32)) @@ -22,21 +16,36 @@ static struct vbe_mode_info mode_info; static void *vpgaddr[2]; static int fbidx; +static int pgcount; static int init_vbe(void) { + int i, num; + if(vbe_info(&vbe) == -1) { + fprintf(stderr, "failed to retrieve VBE information\n"); return -1; } vbe_print_info(stdout, &vbe); + + num = vbe_num_modes(&vbe); + for(i=0; i 2) nbuf = 2; + pgcount = nbuf > mode_info.num_img_pages ? mode_info.num_img_pages : nbuf; + pgsize = mode_info.xres * mode_info.yres * (bpp / 8); - fbsize = mode_info.num_img_pages * pgsize; + fbsize = pgcount * pgsize; vpgaddr[0] = (void*)dpmi_mmap(mode_info.fb_addr, fbsize); + memset(vpgaddr[0], 0xaa, fbsize); - if(mode_info.num_img_pages > 1) { + if(pgcount > 1) { vpgaddr[1] = (char*)vpgaddr[0] + pgsize; fbidx = 1; page_flip(FLIP_NOW); /* start with the second page visible */