X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fdos%2Fmain.c;fp=src%2Fdos%2Fmain.c;h=761dd56611132036304262dc31ce6482ac202657;hb=387c4948b144c51c5b6fcfb8f558c3becf324f70;hp=5a1a13a7fe0084a47e4bbd02c3c48b7b782aee20;hpb=b651991a8cb4cf8a1e64c66175f27091c805fdf6;p=retrobench diff --git a/src/dos/main.c b/src/dos/main.c index 5a1a13a..761dd56 100644 --- a/src/dos/main.c +++ b/src/dos/main.c @@ -1,22 +1,95 @@ #include #include +#include #include "rbench.h" +#include "timer.h" +#include "gfx.h" +#include "logger.h" +#include "cdpmi.h" static int parse_args(int argc, char **argv); +static struct video_mode *vidmode; + int main(int argc, char **argv) { + int vmidx; + int num_frames = 0; + void *vmem; + read_config("rbench.cfg"); if(parse_args(argc, argv) == -1) { return 1; } - printf("foo %dx%d %dbpp\n", opt.width, opt.height, opt.bpp); +#ifdef __DJGPP__ + __djgpp_nearptr_enable(); +#endif + + init_logger("rbench.log"); + + if(init_video() == -1) { + return 1; + } + + if((vmidx = match_video_mode(opt.width, opt.height, opt.bpp)) == -1) { + return 1; + } + if(!(vmem = set_video_mode(vmidx, 1))) { + return 1; + } + vidmode = get_video_mode(vmidx); + + fb_rmask = vidmode->rmask; + fb_gmask = vidmode->gmask; + fb_bmask = vidmode->bmask; + fb_rshift = vidmode->rshift; + fb_gshift = vidmode->gshift; + fb_bshift = vidmode->bshift; + + init_timer(100); + + for(;;) { + while(kbhit()) { + int c = getch(); + if(c == 27) goto end; + key_event(c, 1); + } + + time_msec = get_msec(); + num_frames++; + redraw(); + + blit_frame(framebuf, 0); + } + +end: + set_text_mode(); + cleanup_video(); + if(num_frames) { + printf("avg framerate: %.1f fps\n", (10000 * num_frames / time_msec) / 10.0f); + } return 0; } +int resizefb(int x, int y, int bpp) +{ + free(framebuf); + + fb_width = x; + fb_height = y; + fb_bpp = bpp; + fb_pitch = x * bpp / 8; + + if(!(framebuf = malloc(fb_pitch * fb_height))) { + fprintf(stderr, "failed to allocate %dx%d (%dbpp) framebuffer\n", + fb_width, fb_height, fb_bpp); + return -1; + } + return 0; +} static const char *usage_str = "Usage: %s [options]\n"