1.1 --- a/stage2/lcd.c Tue Jun 30 16:07:50 2015 +0200
1.2 +++ b/stage2/lcd.c Tue Jun 30 16:09:27 2015 +0200
1.3 @@ -33,6 +33,7 @@
1.4
1.5 extern vidinfo_t panel_info;
1.6 static void *lcd_base;
1.7 +u32 irq_counter = 0;
1.8
1.9 void test_pixel(unsigned short h, unsigned short v)
1.10 {
1.11 @@ -41,12 +42,29 @@
1.12 u32 *pix = (u32 *)lcd_base + v * h_max + h;
1.13
1.14 /* NOTE: Code assumes 32 bits/pixel. */
1.15 -
1.16 +#ifdef NORMAL
1.17 *pix = (
1.18 (((255 * (h_max - h)) / (h_max - 1)) << 16) +
1.19 ((((255 * h) / (h_max - 1) + (255 * (v_max - v)) / (v_max - 1)) / 2) << 8) +
1.20 ((255 * v) / (v_max - 1))
1.21 );
1.22 +#elif HANDLER
1.23 + unsigned short offset, bit;
1.24 + bit = 31 - (32 * h / (h_max - 1));
1.25 + offset = v / 4;
1.26 + *pix = ((*((u32 *) 0x80000200 + offset) & (1 << bit)) >> bit) ? 0xffffffff : 0;
1.27 +#else
1.28 + unsigned short bit;
1.29 + volatile unsigned int cp0_register;
1.30 + asm volatile(
1.31 + "mfc0 %0, $12\n"
1.32 + "nop"
1.33 + : "=r"(cp0_register)
1.34 + );
1.35 + bit = 31 - (32 * h / (h_max - 1));
1.36 + *pix = (((cp0_register & (1 << bit)) >> bit) ? 0x007f0000 : 0x0000001f) * ((bit % 2) ? 2 : 1);
1.37 + /* *pix = (((irq_counter & (1 << bit)) >> bit) ? 0x007f0000 : 0x0000001f) * ((bit % 2) ? 2 : 1); */
1.38 +#endif
1.39 }
1.40
1.41 void clear_pixel(unsigned short h, unsigned short v)