gameboy wormboy manboy gameworm gameman wormgame mangame manworm

Dependencies:   mbed SDFileSystem2

Committer:
bwang
Date:
Fri May 04 19:18:18 2018 +0000
Revision:
13:9cf720873bf6
Parent:
12:e99cc1e9d928
Child:
14:5ee7843f2805
spin for a while

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dicarloj 0:7757ab3f7206 1 #include "mbed.h"
dicarloj 0:7757ab3f7206 2 #include <math.h>
dicarloj 9:2a47b9ff8911 3 #include "main.h"
bwang 13:9cf720873bf6 4 #include "raster.h"
dicarloj 9:2a47b9ff8911 5
dicarloj 12:e99cc1e9d928 6 #define TEXT_LEVEL 5
dicarloj 12:e99cc1e9d928 7
dicarloj 9:2a47b9ff8911 8 #define TX 24 // number of characters in X
dicarloj 9:2a47b9ff8911 9 #define TY 18 // number of characters in Y
dicarloj 0:7757ab3f7206 10
dicarloj 9:2a47b9ff8911 11 #define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
dicarloj 9:2a47b9ff8911 12 #define MIN(a,b) (((a)<(b))?(a):(b))
dicarloj 9:2a47b9ff8911 13 #define MAX(a,b) (((a)>(b))?(a):(b))
dicarloj 9:2a47b9ff8911 14
dicarloj 11:537cde55b27f 15 #define N_COLOR 16
dicarloj 11:537cde55b27f 16
dicarloj 12:e99cc1e9d928 17 // DAC stuff
dicarloj 12:e99cc1e9d928 18 #define DAC_SYNC 2
dicarloj 12:e99cc1e9d928 19
dicarloj 9:2a47b9ff8911 20 uint8_t char_col = 0; // current column counter
dicarloj 9:2a47b9ff8911 21 uint8_t char_row = 0; // current row counter
dicarloj 9:2a47b9ff8911 22 uint8_t text_buffer_counter = 0; // current index in text buffer counter
dicarloj 9:2a47b9ff8911 23 char most_recent_char = '0';
dicarloj 9:2a47b9ff8911 24
dicarloj 12:e99cc1e9d928 25 uint8_t line_intensity = 0;
dicarloj 12:e99cc1e9d928 26 int8_t line_dir = 1;
dicarloj 12:e99cc1e9d928 27
dicarloj 9:2a47b9ff8911 28 char text_buffer[TX*TY]; // input text buffer for lisp
dicarloj 9:2a47b9ff8911 29
dicarloj 12:e99cc1e9d928 30 AnalogIn joy1(A1);
dicarloj 12:e99cc1e9d928 31 AnalogIn joy2(A0);
dicarloj 11:537cde55b27f 32
dicarloj 9:2a47b9ff8911 33 uint8_t want_gfx = 0;
dicarloj 10:1163fb31b0a7 34 uint8_t vsync = 0;
dicarloj 9:2a47b9ff8911 35
dicarloj 9:2a47b9ff8911 36 Serial pc(USBTX, USBRX);
dicarloj 0:7757ab3f7206 37
bwang 13:9cf720873bf6 38 #include "vincent_data.h"
dicarloj 9:2a47b9ff8911 39
dicarloj 9:2a47b9ff8911 40 DigitalOut sout(D8); //sync PA_9
dicarloj 9:2a47b9ff8911 41 DigitalOut vout(D7); //video PA_8
dicarloj 9:2a47b9ff8911 42
dicarloj 12:e99cc1e9d928 43 DigitalOut dac0(PA_4);
dicarloj 12:e99cc1e9d928 44 DigitalOut dac1(PA_5);
dicarloj 12:e99cc1e9d928 45 DigitalOut dac2(PA_6);
dicarloj 12:e99cc1e9d928 46 DigitalOut dac3(PA_7);
dicarloj 12:e99cc1e9d928 47
dicarloj 9:2a47b9ff8911 48 // trigger horizontal line draw
dicarloj 0:7757ab3f7206 49 Ticker t;
dicarloj 9:2a47b9ff8911 50
dicarloj 0:7757ab3f7206 51 uint8_t draw_line_inv = 0;
dicarloj 9:2a47b9ff8911 52
dicarloj 9:2a47b9ff8911 53 uint8_t bl_line_s[H_RES]; //blank line sync buffer
dicarloj 9:2a47b9ff8911 54 uint8_t bl_line_v[H_RES]; //blank line video buffer
dicarloj 9:2a47b9ff8911 55 uint8_t vb_line_s[H_RES]; //vertical sync, sync buffer
dicarloj 9:2a47b9ff8911 56 uint8_t vb_line_v[H_RES]; //vertical sync, video buffer
dicarloj 9:2a47b9ff8911 57 uint8_t im_line_s[H_RES]; //image sync buffer
dicarloj 9:2a47b9ff8911 58 uint8_t im_line_va_1[H_RES*V_RES];
dicarloj 9:2a47b9ff8911 59 uint8_t* im_line_va; // active image buff
bwang 6:0a34891a82c7 60
dicarloj 0:7757ab3f7206 61 uint16_t l=0; //current line of scan
dicarloj 0:7757ab3f7206 62
dicarloj 9:2a47b9ff8911 63 // positive or negative?
dicarloj 9:2a47b9ff8911 64 int16_t sign(int16_t a)
bwang 6:0a34891a82c7 65 {
dicarloj 9:2a47b9ff8911 66 if(a > 0) return 1;
dicarloj 9:2a47b9ff8911 67 if(a < 0) return -1;
dicarloj 9:2a47b9ff8911 68 return 0;
dicarloj 0:7757ab3f7206 69 }
dicarloj 0:7757ab3f7206 70
dicarloj 9:2a47b9ff8911 71 // clear the text buffer
dicarloj 9:2a47b9ff8911 72 void clr_text_buff()
dicarloj 9:2a47b9ff8911 73 {
dicarloj 9:2a47b9ff8911 74 text_buffer_counter = 0;
dicarloj 9:2a47b9ff8911 75 for(int i = 0; i < TX*TY; i++)
dicarloj 9:2a47b9ff8911 76 text_buffer[i] = 0;
dicarloj 9:2a47b9ff8911 77 }
dicarloj 9:2a47b9ff8911 78
dicarloj 9:2a47b9ff8911 79 // clear the screen and the text buffer
bwang 3:d9edc0575aa3 80 void clr()
bwang 3:d9edc0575aa3 81 {
bwang 3:d9edc0575aa3 82 for(int i = 0; i < H_RES; i++)
bwang 3:d9edc0575aa3 83 for(int j = 0; j < V_RES; j++)
bwang 3:d9edc0575aa3 84 im_line_va[i+j*H_RES] = 0;
dicarloj 9:2a47b9ff8911 85
dicarloj 9:2a47b9ff8911 86 clr_text_buff();
bwang 3:d9edc0575aa3 87
bwang 3:d9edc0575aa3 88 }
bwang 3:d9edc0575aa3 89
dicarloj 9:2a47b9ff8911 90 // initialize video buffers
dicarloj 0:7757ab3f7206 91 void init_buffers()
dicarloj 0:7757ab3f7206 92 {
dicarloj 9:2a47b9ff8911 93 clr(); // zero buffers
dicarloj 0:7757ab3f7206 94 for(int i = 0; i < H_RES; i++)
dicarloj 0:7757ab3f7206 95 {
dicarloj 12:e99cc1e9d928 96 im_line_s[i] = DAC_SYNC;
dicarloj 12:e99cc1e9d928 97 bl_line_s[i] = DAC_SYNC;
dicarloj 0:7757ab3f7206 98 bl_line_v[i] = 0;
dicarloj 0:7757ab3f7206 99 vb_line_s[i] = 0;
dicarloj 0:7757ab3f7206 100 vb_line_v[i] = 0;
dicarloj 0:7757ab3f7206 101 }
dicarloj 0:7757ab3f7206 102 im_line_s[0] = 0;
dicarloj 0:7757ab3f7206 103 im_line_s[1] = 0;
dicarloj 0:7757ab3f7206 104 im_line_s[2] = 0;
dicarloj 9:2a47b9ff8911 105 im_line_s[3] = 0;
dicarloj 9:2a47b9ff8911 106
bwang 13:9cf720873bf6 107 for(int i = 0; i < 15; i++) im_line_s[i] = 0;
dicarloj 9:2a47b9ff8911 108
dicarloj 0:7757ab3f7206 109 bl_line_s[0] = 0;
dicarloj 12:e99cc1e9d928 110 vb_line_s[0] = DAC_SYNC;
dicarloj 0:7757ab3f7206 111 bl_line_s[1] = 0;
dicarloj 12:e99cc1e9d928 112 vb_line_s[1] = DAC_SYNC;
dicarloj 0:7757ab3f7206 113
dicarloj 9:2a47b9ff8911 114 bl_line_s[3] = 0;
dicarloj 12:e99cc1e9d928 115 vb_line_s[3] = DAC_SYNC;
dicarloj 9:2a47b9ff8911 116 bl_line_s[2] = 0;
dicarloj 12:e99cc1e9d928 117 vb_line_s[2] = DAC_SYNC;
dicarloj 0:7757ab3f7206 118 }
dicarloj 9:2a47b9ff8911 119
dicarloj 9:2a47b9ff8911 120 // video interrupt
dicarloj 0:7757ab3f7206 121 void isr()
dicarloj 0:7757ab3f7206 122 {
dicarloj 0:7757ab3f7206 123 uint8_t nop = 0; //use nops or use wait_us
dicarloj 0:7757ab3f7206 124 uint8_t* sptr; //pointer to sync buffer for line
dicarloj 0:7757ab3f7206 125 uint8_t* vptr; //pointer to video buffer for line
dicarloj 10:1163fb31b0a7 126 if(l < V_RES){ vptr = im_line_va + ((l)*H_RES); sptr = im_line_s; nop = 1; vsync = 0;} //pick line buffers
dicarloj 10:1163fb31b0a7 127 else if(l < 254){ vptr = bl_line_v; sptr = bl_line_s; nop = 0; }
dicarloj 10:1163fb31b0a7 128 else{ vptr = vb_line_v; sptr = vb_line_s; nop = 1; }
dicarloj 9:2a47b9ff8911 129 uint16_t lmax = nop?H_RES:12; //number of columns
dicarloj 9:2a47b9ff8911 130 for(uint16_t i = 0; i < lmax; i++) //loop over each column
dicarloj 0:7757ab3f7206 131 {
dicarloj 9:2a47b9ff8911 132 nop = 1;
dicarloj 12:e99cc1e9d928 133 GPIOA->ODR = (vptr[i] + sptr[i]) << 4;
dicarloj 9:2a47b9ff8911 134
dicarloj 0:7757ab3f7206 135 if(nop) //nop delay
dicarloj 0:7757ab3f7206 136 {
dicarloj 12:e99cc1e9d928 137 asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");asm("nop");//asm("nop");asm("nop");asm("nop");asm("nop");
dicarloj 0:7757ab3f7206 138 }
dicarloj 9:2a47b9ff8911 139 else {wait_us(1); if(i > 2) i+=1;} //wait delay
dicarloj 0:7757ab3f7206 140 }
dicarloj 0:7757ab3f7206 141 //move to next line
dicarloj 0:7757ab3f7206 142 l++;
dicarloj 10:1163fb31b0a7 143 if(l == V_RES) vsync = 1;
dicarloj 0:7757ab3f7206 144 if(l > 255) l = 0;
dicarloj 0:7757ab3f7206 145 }
dicarloj 0:7757ab3f7206 146
dicarloj 9:2a47b9ff8911 147 // draw vertical line
dicarloj 0:7757ab3f7206 148 void draw_vert(int16_t y0, int16_t y1, int16_t x0)
dicarloj 0:7757ab3f7206 149 {
dicarloj 0:7757ab3f7206 150 for(int16_t i = y0; i < y1; i++)
dicarloj 12:e99cc1e9d928 151 im_line_va[H_RES*i + x0] = line_intensity;
dicarloj 0:7757ab3f7206 152 }
dicarloj 0:7757ab3f7206 153
dicarloj 9:2a47b9ff8911 154 // draw horizonal line
dicarloj 0:7757ab3f7206 155 void draw_horiz(int16_t x0, int16_t x1, int16_t y0)
dicarloj 0:7757ab3f7206 156 {
dicarloj 0:7757ab3f7206 157 for(int16_t i = x0; i < x1; i++)
dicarloj 12:e99cc1e9d928 158 im_line_va[H_RES*y0 + i] = line_intensity;
dicarloj 0:7757ab3f7206 159 }
dicarloj 0:7757ab3f7206 160
dicarloj 9:2a47b9ff8911 161 // draw line between points
dicarloj 0:7757ab3f7206 162 void draw_line(int16_t x0, int16_t y0, int16_t x1, int16_t y1)
dicarloj 0:7757ab3f7206 163 {
dicarloj 0:7757ab3f7206 164 if(x0 > x1){ x0 = x0 ^ x1; x1 = x1^x0; x0 = x0^x1;y0 = y0 ^ y1; y1 = y1^y0; y0 = y0^y1; }
dicarloj 0:7757ab3f7206 165 if(x0 == x1){draw_vert(y0,y1,x0);}
dicarloj 0:7757ab3f7206 166 if(y0 == y1){draw_horiz(x0,x1,y0);}
dicarloj 0:7757ab3f7206 167 int16_t dx = x1 - x0;
dicarloj 0:7757ab3f7206 168 int16_t dy = y1 - y0;
dicarloj 0:7757ab3f7206 169 float derr = fabs((float)(dy)/(float)(dx));
dicarloj 0:7757ab3f7206 170 float err = 0.f;
dicarloj 0:7757ab3f7206 171 int16_t y = y0;
dicarloj 0:7757ab3f7206 172 for(int16_t x = x0; x < x1; x++)
dicarloj 0:7757ab3f7206 173 {
dicarloj 0:7757ab3f7206 174 //plotxy
dicarloj 12:e99cc1e9d928 175 im_line_va[H_RES*y + x] = (!draw_line_inv)?line_intensity:0;
dicarloj 0:7757ab3f7206 176 err += derr;
dicarloj 0:7757ab3f7206 177 while(err >= 0.5f)
dicarloj 0:7757ab3f7206 178 {
dicarloj 0:7757ab3f7206 179 y += sign(dy);
dicarloj 12:e99cc1e9d928 180 im_line_va[H_RES*y + x] = (!draw_line_inv)?line_intensity:0;
dicarloj 0:7757ab3f7206 181 err -= 1.f;
dicarloj 0:7757ab3f7206 182 }
dicarloj 0:7757ab3f7206 183 }
dicarloj 0:7757ab3f7206 184 }
dicarloj 0:7757ab3f7206 185
dicarloj 9:2a47b9ff8911 186 // draw letter
dicarloj 9:2a47b9ff8911 187 void draw_vincent(uint16_t x0, uint16_t y0, uint8_t c)
dicarloj 0:7757ab3f7206 188 {
dicarloj 9:2a47b9ff8911 189 if(c == 40) c = 41;
dicarloj 9:2a47b9ff8911 190 else if(c == 41) c = 40;
dicarloj 9:2a47b9ff8911 191 char* letter = vincent_data[c];
dicarloj 9:2a47b9ff8911 192 for(uint16_t xp = 0; xp < 8; xp++)
dicarloj 0:7757ab3f7206 193 {
dicarloj 9:2a47b9ff8911 194 for(uint16_t yp = 0; yp < 8; yp++)
dicarloj 0:7757ab3f7206 195 {
dicarloj 12:e99cc1e9d928 196 im_line_va[H_RES*(yp+y0) + xp + x0] = CHECK_BIT(letter[yp],8-xp)?TEXT_LEVEL:0;
dicarloj 0:7757ab3f7206 197 }
dicarloj 0:7757ab3f7206 198 }
dicarloj 0:7757ab3f7206 199 }
dicarloj 0:7757ab3f7206 200
dicarloj 9:2a47b9ff8911 201 // go to new line
dicarloj 9:2a47b9ff8911 202 void new_line()
dicarloj 9:2a47b9ff8911 203 {
dicarloj 9:2a47b9ff8911 204 char_col = 0;
dicarloj 9:2a47b9ff8911 205 char_row++;
dicarloj 9:2a47b9ff8911 206 if(char_row >= TY)
dicarloj 9:2a47b9ff8911 207 {
dicarloj 9:2a47b9ff8911 208 char_row = 0;
bwang 3:d9edc0575aa3 209 }
bwang 3:d9edc0575aa3 210 }
bwang 3:d9edc0575aa3 211
dicarloj 9:2a47b9ff8911 212 // draw string
dicarloj 9:2a47b9ff8911 213 void draw_vincent_string(char* str)
dicarloj 9:2a47b9ff8911 214 {
dicarloj 9:2a47b9ff8911 215 for(int i = 0; i < strlen(str); i++)
dicarloj 9:2a47b9ff8911 216 {
bwang 13:9cf720873bf6 217 if(str[i] == 0) return;
dicarloj 9:2a47b9ff8911 218 char_col++;
dicarloj 9:2a47b9ff8911 219 if(char_col >= TX)
dicarloj 9:2a47b9ff8911 220 {
dicarloj 9:2a47b9ff8911 221 char_col = 0;
dicarloj 9:2a47b9ff8911 222 char_row++;
bwang 3:d9edc0575aa3 223 }
dicarloj 9:2a47b9ff8911 224 if(char_row >= TY)
dicarloj 9:2a47b9ff8911 225 {
dicarloj 9:2a47b9ff8911 226 char_row = 0;
dicarloj 9:2a47b9ff8911 227 }
bwang 3:d9edc0575aa3 228
dicarloj 9:2a47b9ff8911 229 draw_vincent(X0 +2 + 8*char_col, Y0 + 14 + 8*char_row,
dicarloj 9:2a47b9ff8911 230 str[i]);
bwang 3:d9edc0575aa3 231 }
bwang 3:d9edc0575aa3 232 }
bwang 3:d9edc0575aa3 233
dicarloj 9:2a47b9ff8911 234 void set_status_string(char* str)
dicarloj 9:2a47b9ff8911 235 {
dicarloj 9:2a47b9ff8911 236 uint8_t char_col_backup = char_col;
dicarloj 9:2a47b9ff8911 237 uint8_t char_row_backup = char_row;
dicarloj 9:2a47b9ff8911 238 char_col = 0;
dicarloj 9:2a47b9ff8911 239 char_row = TY - 1;
dicarloj 9:2a47b9ff8911 240
dicarloj 9:2a47b9ff8911 241 draw_vincent_string(str);
dicarloj 9:2a47b9ff8911 242
dicarloj 9:2a47b9ff8911 243 char_col = char_col_backup;
dicarloj 9:2a47b9ff8911 244 char_row = char_row_backup;
dicarloj 9:2a47b9ff8911 245 }
dicarloj 9:2a47b9ff8911 246
bwang 13:9cf720873bf6 247 //screen goes from -.5 to .5 on both axes
dicarloj 9:2a47b9ff8911 248 void draw_gfx_line(float x0, float y0, float x1, float y1)
dicarloj 9:2a47b9ff8911 249 {
dicarloj 9:2a47b9ff8911 250 float x_width = (XL);
dicarloj 9:2a47b9ff8911 251 float y_height = (YL);
dicarloj 9:2a47b9ff8911 252
dicarloj 9:2a47b9ff8911 253 // want to rescale to 0 to 1
dicarloj 9:2a47b9ff8911 254 x0 += 0.5f;
dicarloj 9:2a47b9ff8911 255 y0 += 0.5f;
dicarloj 9:2a47b9ff8911 256
dicarloj 9:2a47b9ff8911 257 x1 += 0.5f;
dicarloj 9:2a47b9ff8911 258 y1 += 0.5f;
dicarloj 9:2a47b9ff8911 259 //printf("x0: %.3f, y0: %.3f\r\n",x0,y0);
dicarloj 9:2a47b9ff8911 260 int xx = x0 * x_width + X0;
dicarloj 9:2a47b9ff8911 261 if(xx > (X0 + XL)) xx = (X0 + XL);
dicarloj 9:2a47b9ff8911 262 if(xx < X0) xx = X0;
dicarloj 9:2a47b9ff8911 263 int yy = y0 * y_height + Y0;
dicarloj 9:2a47b9ff8911 264 if(yy > (Y0 + YL)) yy = (Y0 + YL);
dicarloj 9:2a47b9ff8911 265 if(yy < Y0) yy = Y0;
dicarloj 9:2a47b9ff8911 266
dicarloj 9:2a47b9ff8911 267 int xx1 = x1 * x_width + X0;
dicarloj 9:2a47b9ff8911 268 if(xx1 > (X0 + XL)) xx1 = (X0 + XL);
dicarloj 9:2a47b9ff8911 269 if(xx1 < X0) xx1 = X0;
dicarloj 9:2a47b9ff8911 270 int yy1 = y1 * y_height + Y0;
dicarloj 9:2a47b9ff8911 271 if(yy1 > (Y0 + YL)) yy1 = (Y0 + YL);
dicarloj 9:2a47b9ff8911 272 if(yy1 < Y0) yy1 = Y0;
dicarloj 9:2a47b9ff8911 273
dicarloj 9:2a47b9ff8911 274 draw_line(xx,yy,xx1,yy1);
bwang 4:02e3ae7a3aea 275 }
bwang 13:9cf720873bf6 276
dicarloj 9:2a47b9ff8911 277 int main()
dicarloj 9:2a47b9ff8911 278 {
dicarloj 9:2a47b9ff8911 279 im_line_va = im_line_va_1;
bwang 13:9cf720873bf6 280 //init serial
dicarloj 9:2a47b9ff8911 281 pc.baud(115200);
dicarloj 9:2a47b9ff8911 282 pc.printf("derp!\r\n");
dicarloj 9:2a47b9ff8911 283
bwang 13:9cf720873bf6 284 //init buffers
dicarloj 9:2a47b9ff8911 285 init_buffers();
bwang 13:9cf720873bf6 286 //init timer
dicarloj 9:2a47b9ff8911 287 t.attach_us(&isr,64);
bwang 13:9cf720873bf6 288 //clear zbuffer
bwang 13:9cf720873bf6 289 clear_zbuf();
dicarloj 9:2a47b9ff8911 290
bwang 13:9cf720873bf6 291 wait_us(200000);
bwang 4:02e3ae7a3aea 292
bwang 13:9cf720873bf6 293 add_quad(-32, -32, -32, 32, -32, -32, 32, -32, 32, -32, -32, 32, 4);
bwang 13:9cf720873bf6 294 add_quad(32, -32, -32, 32, -32, 32, 32, 32, 32, 32, 32, -32, 2);
bwang 13:9cf720873bf6 295 add_quad(32, 32, -32, 32, 32, 32, -32, 32, 32, -32, 32, -32, 7);
bwang 13:9cf720873bf6 296 add_quad(-32, 32, -32, -32, 32, 32, -32, -32, 32, -32, -32, -32, 6);
bwang 13:9cf720873bf6 297 add_quad(-32, 32, -32, 32, 32, -32, 32, -32, -32, -32, -32, -32, 3);
bwang 13:9cf720873bf6 298 add_quad(-32, 32, 32, 32, 32, 32, 32, -32, 32, -32, -32, 32, 5);
bwang 13:9cf720873bf6 299 theta = 0.0f; phi = 0.0f; cx = 0; cy = 0; cz = 100;
dicarloj 11:537cde55b27f 300
dicarloj 12:e99cc1e9d928 301 int num_iters;
dicarloj 9:2a47b9ff8911 302 for(;;)
dicarloj 9:2a47b9ff8911 303 {
bwang 13:9cf720873bf6 304 if(!vsync) continue;
bwang 6:0a34891a82c7 305
bwang 13:9cf720873bf6 306 clr();
bwang 13:9cf720873bf6 307 float j2 = joy1.read() - .5f;;
bwang 13:9cf720873bf6 308 float j1 = joy2.read() - .5f;
dicarloj 12:e99cc1e9d928 309
bwang 13:9cf720873bf6 310 num_iters++;
bwang 13:9cf720873bf6 311
dicarloj 12:e99cc1e9d928 312 if( (num_iters % 5) == 0)
dicarloj 12:e99cc1e9d928 313 {
dicarloj 12:e99cc1e9d928 314 if(line_dir == 1)
dicarloj 12:e99cc1e9d928 315 {
dicarloj 12:e99cc1e9d928 316 line_intensity++;
dicarloj 12:e99cc1e9d928 317 if(line_intensity >= 8)
dicarloj 12:e99cc1e9d928 318 line_dir = -1;
dicarloj 12:e99cc1e9d928 319 }
dicarloj 12:e99cc1e9d928 320 else
dicarloj 12:e99cc1e9d928 321 {
dicarloj 12:e99cc1e9d928 322 line_intensity--;
bwang 13:9cf720873bf6 323 if(line_intensity == 0) line_dir = 1;
dicarloj 12:e99cc1e9d928 324 }
dicarloj 12:e99cc1e9d928 325 }
dicarloj 12:e99cc1e9d928 326
bwang 13:9cf720873bf6 327 theta += j2 / 5.0f;
bwang 13:9cf720873bf6 328 phi += j1 / 5.0f;
bwang 13:9cf720873bf6 329 clear_zbuf();
bwang 13:9cf720873bf6 330 render_quads();
bwang 13:9cf720873bf6 331
bwang 13:9cf720873bf6 332 draw_line(X0, Y0, X0 + XL, Y0);
bwang 13:9cf720873bf6 333 draw_line(X0+XL,Y0,X0+XL,Y0+YL);
bwang 13:9cf720873bf6 334 draw_line(X0, Y0+YL, X0 +XL, Y0+YL);
bwang 13:9cf720873bf6 335 draw_line(X0,Y0,X0,Y0+YL);
bwang 13:9cf720873bf6 336 most_recent_char = '0';
bwang 13:9cf720873bf6 337
bwang 13:9cf720873bf6 338 char joy_string[20];
bwang 13:9cf720873bf6 339 sprintf(joy_string,"1: %.2f 2: %.2f",joy1.read(),joy2.read());
bwang 13:9cf720873bf6 340 set_status_string(joy_string);
dicarloj 12:e99cc1e9d928 341
bwang 13:9cf720873bf6 342 vsync = 0;
bwang 6:0a34891a82c7 343 }
bwang 6:0a34891a82c7 344 }
bwang 6:0a34891a82c7 345
dicarloj 9:2a47b9ff8911 346