pulled in and adapted the dos code from eradicate
[retrobench] / src / dos / main.c
index 5a1a13a..761dd56 100644 (file)
@@ -1,22 +1,95 @@
 #include <stdio.h>
 #include <stdlib.h>
+#include <conio.h>
 #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"