13 unsigned char *framebuf, *vmem = (unsigned char*)0xa0000;
18 static void draw_cursor(int mx, int my);
24 int prev_mx = 0, prev_my = 0;
25 unsigned int mbn, prev_mbn = 0, mbn_diff;
36 if(!(framebuf = malloc(320 * 200))) {
37 printf("failed to allocate framebuffer\n");
41 if(game_init() == -1) {
45 set_mouse_pos(160, 100);
48 if((key = kb_getkey()) >= 0) {
49 game_keyboard(key, 1);
52 mbn = mouse_state(&mx, &my);
54 if((mbn_diff = mbn ^ prev_mbn) != 0) {
56 game_mouse(0, mbn & 1, mx, my);
59 game_mouse(2, mbn & 2, mx, my);
62 game_mouse(1, mbn & 4, mx, my);
65 if(mx != prev_mx || my != prev_my) {
78 cleanup_intr(); /* also disables interrupts */
83 unsigned long game_getmsec(void)
85 return TICKS_TO_MSEC(nticks);
93 void game_swap_buffers(void)
97 memcpy(vmem, framebuf, 64000);
102 static void draw_cursor(int mx, int my)
104 int i, sx, ex, sy, ey, xlen, ylen;
107 sx = mx < CUR_SZ ? mx : mx - CUR_SZ;
108 ex = mx >= 320 - CUR_SZ ? CUR_SZ - 1 : mx + CUR_SZ;
110 sy = my < CUR_SZ ? my : my - CUR_SZ;
111 ey = my >= 200 - CUR_SZ ? CUR_SZ - 1 : my + CUR_SZ;
114 ptr = framebuf + (my << 8) + (my << 6) + sx;
115 for(i=0; i<xlen; i++) {
119 ptr = framebuf + (sy << 8) + (sy << 6) + mx;
120 for(i=0; i<ylen; i++) {