initial commit
[eradicate] / src / dos / main.c
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include "game.h"
4 #include "keyb.h"
5 #include "timer.h"
6 #include "gfx.h"
7 #include "logger.h"
8 #include "cdpmi.h"
9
10 static void draw(void);
11
12 static struct video_mode *vmode;
13 static void *vmem;
14
15 int main(int argc, char **argv)
16 {
17         struct video_mode *vmodes;
18         int vmidx;
19
20         init_logger("game.log");
21
22         init_timer(100);
23         kb_init(32);
24
25         if(init_video() == -1) {
26                 return 1;
27         }
28         vmodes = video_modes();
29
30         if((vmidx = match_video_mode(640, 480, 16)) == -1) {
31                 return 1;
32         }
33         if(!(vmem = set_video_mode(vmidx, 1))) {
34                 return 1;
35         }
36         vmode = vmodes + vmidx;
37
38         fb_width = vmode->xsz;
39         fb_height = vmode->ysz;
40         fb_size = (vmode->xsz * vmode->bpp / 8) * vmode->ysz;
41
42         reset_timer();
43
44         for(;;) {
45                 int key;
46                 while((key = kb_getkey()) != -1) {
47                         if(key == 27) goto break_evloop;
48                 }
49
50                 time_msec = get_msec();
51                 draw();
52         }
53
54 break_evloop:
55         set_text_mode();
56         kb_shutdown();
57         return 0;
58 }
59
60 static void draw(void)
61 {
62         int i, j;
63         uint16_t *pptr = vmem;
64
65         for(i=0; i<fb_height; i++) {
66                 for(j=0; j<fb_width; j++) {
67                         int chess = (i >> 2) == (j >> 2);
68                         *pptr++ = chess ? 0xff00 : 0x00ff;
69                 }
70         }
71 }
72
73 void swap_buffers(void *pixels)
74 {
75         wait_vsync();
76         memcpy(vmem, pixels, fb_size);
77 }