X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fgfx.c;h=bc763d3158df9117ec6979097b2409e7288970f7;hp=d0128eef6d8f0c791158f2c9e09a04da76c15d5c;hb=102f82ec5a8128cb076371aa3d9821e684b94380;hpb=92bc7be93ea01896b93f2986c6029b5932c32d97 diff --git a/src/dos/gfx.c b/src/dos/gfx.c index d0128ee..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,6 +16,7 @@ static struct vbe_mode_info mode_info; static void *vpgaddr[2]; static int fbidx; +static int pgcount; static int init_vbe(void) { @@ -50,7 +45,7 @@ static int init_vbe(void) return 0; } -void *set_video_mode(int xsz, int ysz, int bpp) +void *set_video_mode(int xsz, int ysz, int bpp, int nbuf) { int i, nmodes; int best_match_mode = -1; @@ -70,11 +65,9 @@ void *set_video_mode(int xsz, int ysz, int bpp) mode = -1; nmodes = 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 */