X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Fdos%2Fmain.c;h=72b666ee3c1c651272f7c268bcb7e7f888f71990;hb=a77883f4cefd1af3d71588871ef27e81a49194d8;hp=c344df18738c5e2b7cee732a94862df9401ba3ec;hpb=2ce1b12090b2571b05d9ea451986212e590b876a;p=eradicate diff --git a/src/dos/main.c b/src/dos/main.c index c344df1..72b666e 100644 --- a/src/dos/main.c +++ b/src/dos/main.c @@ -8,13 +8,8 @@ #include "logger.h" #include "cdpmi.h" -static void draw(void); - static struct video_mode *vmode; - -static void swap_lfb(void *pixels); -static void swap_banked(void *pixels); - +static int quit; int main(int argc, char **argv) { @@ -40,12 +35,6 @@ int main(int argc, char **argv) } vmode = vmodes + vmidx; - if(vmode->fb_addr) { - swap_buffers = swap_lfb; - } else { - swap_buffers = swap_banked; - } - fb_width = vmode->xsz; fb_height = vmode->ysz; fb_size = vmode->pitch * vmode->ysz; @@ -57,6 +46,11 @@ int main(int argc, char **argv) } fb_pixels = (char*)fb_buf + vmode->pitch; + if(init(argc, argv) == -1) { + status = -1; + goto break_evloop; + } + reset_timer(); for(;;) { @@ -65,57 +59,22 @@ int main(int argc, char **argv) if(key == 27) goto break_evloop; } + if(quit) goto break_evloop; + time_msec = get_msec(); draw(); } break_evloop: free(fb_buf); + cleanup(); set_text_mode(); cleanup_video(); kb_shutdown(); return status; } -static void draw(void) -{ - int i, j; - uint16_t *pptr = fb_pixels; - - for(i=0; i> 4) & 1) == ((j >> 4) & 1); - *pptr++ = chess ? 0xff00 : 0x00ff; - } - } - - swap_buffers(fb_pixels); -} - -static void swap_lfb(void *pixels) -{ - wait_vsync(); - memcpy(vmem, pixels, fb_size); -} - -static void swap_banked(void *pixels) +void game_quit(void) { - int i, sz; - unsigned int pending; - unsigned char *pptr = pixels; - uint32_t offs = 0; - - wait_vsync(); - - /* assume window is always at 0 at the beginning */ - pending = fb_size; - while(pending > 0) { - sz = pending > vmode->bank_size ? vmode->bank_size : pending; - memcpy(vmem, pptr, sz); - pptr += sz; - pending -= sz; - vbe_setwin(0, ++offs); - } - - vbe_setwin(0, 0); + quit = 1; }