14 void handle_key(int key);
15 void interrupt timer_intr();
18 static unsigned char *fb;
21 volatile unsigned long nticks;
23 static void interrupt (*prev_timer_intr)();
30 if(!(fb = calloc(1, 64000))) {
31 fprintf(stderr, "failed to allocate framebuffer\n");
38 g3d_framebuffer(320, 200, fb);
40 mat_perspective(proj, 50, (4 << 16) / 3, 0x8000, 0x100000);
43 prev_timer_intr = _dos_getvect(0x1c);
44 _dos_setvect(0x1c, timer_intr);
58 _dos_setvect(0x1c, prev_timer_intr);
63 rate = nframes * 100 * 18 / nticks;
64 printf("%ld frames in %ld sec, rate: %ld.%ld\n", nframes, nticks / 18,
65 rate / 100, rate % 100);
69 #define VERT(x, y, z) { x << 16, y << 16, z << 16, 0x10000 }
70 struct g3d_vertex varr[] = {
71 VERT(-1, -1, 1), VERT(1, -1, 1), VERT(1, 1, 1), VERT(-1, 1, 1),
72 VERT(1, -1, 1), VERT(1, -1, -1), VERT(1, 1, -1), VERT(1, 1, 1),
73 VERT(1, -1, -1), VERT(-1, -1, -1), VERT(-1, 1, -1), VERT(1, 1, -1),
74 VERT(-1, -1, -1), VERT(-1, -1, 1), VERT(-1, 1, 1), VERT(-1, 1, -1),
75 VERT(-1, 1, 1), VERT(1, 1, 1), VERT(1, 1, -1), VERT(-1, 1, -1),
76 VERT(-1, -1, -1), VERT(1, -1, -1), VERT(1, -1, 1), VERT(-1, -1, 1)
83 #ifdef USE_DIRTY_CLEAR
89 mat_trans(xform, 0, 0, -0x40000);
90 mat_mul_rotx(xform, nframes);
91 mat_mul_roty(xform, nframes);
95 g3d_draw(G3D_QUADS, varr, 4);
97 g3d_draw(G3D_QUADS, varr + 4, 4);
99 g3d_draw(G3D_QUADS, varr + 8, 4);
101 g3d_draw(G3D_QUADS, varr + 12, 4);
103 g3d_draw(G3D_QUADS, varr + 16, 4);
105 g3d_draw(G3D_QUADS, varr + 20, 4);
110 #ifdef USE_DIRTY_COPY
117 void handle_key(int key)
126 void interrupt timer_intr()
129 _chain_intr(prev_timer_intr);