X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fkmain.c;h=bcd8a91fc4839a616249c7bf5347d66469a41122;hb=refs%2Fheads%2Fmaster;hp=ad76287a321df2aaf885e45473b64db07dfa1b48;hpb=6e968b9e724d9626ed6bdf2119ac7de6a5248f14;p=bootcensus diff --git a/src/kmain.c b/src/kmain.c index ad76287..bcd8a91 100644 --- a/src/kmain.c +++ b/src/kmain.c @@ -18,6 +18,7 @@ along with this program. If not, see . #include #include #include +#include #include "segm.h" #include "intr.h" #include "mem.h" @@ -29,12 +30,14 @@ along with this program. If not, see . #include "vbe.h" #include "audio.h" #include "panic.h" +#include "census/census.h" static int video_init(void); static int modecmp(const void *a, const void *b); static struct video_mode vmode; -static void *fbptr; +static void *fbptr, *backbuf; +static int fbsize; void pcboot_main(void) @@ -60,10 +63,17 @@ void pcboot_main(void) if(video_init() == -1) { panic("Failed to find suitable video mode"); } + fbsize = vmode.width * vmode.height * vmode.bpp / 8; + if(!(backbuf = malloc(fbsize))) { + panic("Failed to allocate back buffer"); + } + init_census(backbuf, vmode.width, vmode.height); for(;;) { + draw_census(); + wait_vsync(); - memset(fbptr, 0x80, vmode.width * vmode.height * vmode.bpp / 8); + memcpy(fbptr, backbuf, fbsize); } } @@ -75,7 +85,7 @@ static int video_init(void) const char *vendor; if(mode_idx == -1 && (vendor = get_video_vendor()) && strstr(vendor, "SeaBIOS")) { - mode_idx = find_video_mode_idx(800, 600, 0); + mode_idx = find_video_mode_idx(800, 600, 32); } if(mode_idx == -1 && vbe_get_edid(&edid) == 0 && edid_preferred_resolution(&edid, &xres, &yres) == 0) { @@ -110,10 +120,11 @@ static int video_init(void) qsort(vmodes, nmodes, sizeof *vmodes, modecmp); for(i=0; i