X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?p=dosdemo;a=blobdiff_plain;f=src%2Fdos%2Fgfx.c;h=8818ab995f14be72e5f61587ea935181b2797ea4;hp=570eabac2d90787b5a9b38a38d0d5cdacc689fbe;hb=772dfe62feafd0583e52326c7419ef01e04cac60;hpb=f8bae6c14df76c506af4474cbf29402d2bfa8209 diff --git a/src/dos/gfx.c b/src/dos/gfx.c index 570eaba..8818ab9 100644 --- a/src/dos/gfx.c +++ b/src/dos/gfx.c @@ -22,6 +22,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 +51,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,7 +71,7 @@ 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 */