--- trunk/demos/rectangles/rectangles.c 2007/10/08 16:19:56 24 +++ trunk/demos/rectangles/rectangles.c 2007/10/08 16:20:26 28 @@ -1,5 +1,5 @@ /* - * $Id: rectangles.c,v 1.3 2006/05/22 04:53:52 debug Exp $ + * $Id: rectangles.c,v 1.5 2006/07/09 07:53:33 debug Exp $ * * GXemul demo: Random rectangles * @@ -18,8 +18,13 @@ #endif -/* Framebuffer base address: */ +/* Framebuffer linear memory and controller base addresss: */ #define FB_BASE (PHYSADDR_OFFSET + DEV_FB_ADDRESS) +#define FBCTRL_BASE (PHYSADDR_OFFSET + DEV_FBCTRL_ADDRESS) + + +#define XRES 800 +#define YRES 600 void my_memset(unsigned char *a, int x, int len) @@ -35,9 +40,10 @@ for (y=y1; y<=y2; y++) { len = 3 * (x2-x1+1); - if (len > 0) - my_memset((unsigned char *)FB_BASE + 3*(640*y+x1), - c, len); + if (len > 0) { + my_memset((unsigned char *)FB_BASE + + 3 * (XRES * y + x1), c, len); + } } } @@ -52,11 +58,56 @@ } -void f(void) { +void fbctrl_write_port(int p) +{ + *(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_PORT) = p; +} + + +void fbctrl_write_data(int d) +{ + *(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_DATA) = d; +} + + +void fbctrl_set_x1(int v) +{ + fbctrl_write_port(DEV_FBCTRL_PORT_X1); + fbctrl_write_data(v); +} + + +void fbctrl_set_y1(int v) +{ + fbctrl_write_port(DEV_FBCTRL_PORT_Y1); + fbctrl_write_data(v); +} + + +void fbctrl_command(int c) +{ + fbctrl_write_port(DEV_FBCTRL_PORT_COMMAND); + fbctrl_write_data(c); +} + + +void change_resolution(int xres, int yres) +{ + fbctrl_set_x1(xres); + fbctrl_set_y1(yres); + fbctrl_command(DEV_FBCTRL_COMMAND_SET_RESOLUTION); +} + + +void f(void) +{ + /* Change to the resolution we want: */ + change_resolution(XRES, YRES); + /* Draw random rectangles forever: */ for (;;) { - draw_rectangle(my_random() % 640, my_random() % 480, - my_random() % 640, my_random() % 480, my_random()); + draw_rectangle(my_random() % XRES, my_random() % YRES, + my_random() % XRES, my_random() % YRES, my_random()); } }