11 static void draw(void);
13 static struct video_mode *vmode;
15 static void swap_lfb(void *pixels);
16 static void swap_banked(void *pixels);
19 int main(int argc, char **argv)
22 struct video_mode *vmodes;
23 int vmidx, status = 0;
25 init_logger("game.log");
30 if(init_video() == -1) {
33 vmodes = video_modes();
35 if((vmidx = match_video_mode(640, 480, 16)) == -1) {
38 if(!(vmem = set_video_mode(vmidx, 1))) {
41 vmode = vmodes + vmidx;
44 swap_buffers = swap_lfb;
46 swap_buffers = swap_banked;
49 fb_width = vmode->xsz;
50 fb_height = vmode->ysz;
51 fb_size = vmode->pitch * vmode->ysz;
53 if(!(fb_buf = malloc(fb_size + vmode->pitch * 2))) {
54 fprintf(stderr, "failed to allocate framebuffer\n");
58 fb_pixels = (char*)fb_buf + vmode->pitch;
64 while((key = kb_getkey()) != -1) {
65 if(key == 27) goto break_evloop;
68 time_msec = get_msec();
80 static void draw(void)
83 uint16_t *pptr = fb_pixels;
85 for(i=0; i<fb_height; i++) {
86 for(j=0; j<fb_width; j++) {
87 int chess = ((i >> 4) & 1) == ((j >> 4) & 1);
88 *pptr++ = chess ? 0xff00 : 0x00ff;
92 swap_buffers(fb_pixels);
95 static void swap_lfb(void *pixels)
98 memcpy(vmem, pixels, fb_size);
101 static void swap_banked(void *pixels)
104 unsigned int pending;
105 unsigned char *pptr = pixels;
110 /* assume window is always at 0 at the beginning */
113 sz = pending > vmode->bank_size ? vmode->bank_size : pending;
114 memcpy(vmem, pptr, sz);
117 vbe_setwin(0, ++offs);