1 |
/* |
/* |
2 |
* $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 $ |
3 |
* |
* |
4 |
* GXemul demo: Random rectangles |
* GXemul demo: Random rectangles |
5 |
* |
* |
18 |
#endif |
#endif |
19 |
|
|
20 |
|
|
21 |
/* Framebuffer base address: */ |
/* Framebuffer linear memory and controller base addresss: */ |
22 |
#define FB_BASE (PHYSADDR_OFFSET + DEV_FB_ADDRESS) |
#define FB_BASE (PHYSADDR_OFFSET + DEV_FB_ADDRESS) |
23 |
|
#define FBCTRL_BASE (PHYSADDR_OFFSET + DEV_FBCTRL_ADDRESS) |
24 |
|
|
25 |
|
|
26 |
|
#define XRES 800 |
27 |
|
#define YRES 600 |
28 |
|
|
29 |
|
|
30 |
void my_memset(unsigned char *a, int x, int len) |
void my_memset(unsigned char *a, int x, int len) |
40 |
|
|
41 |
for (y=y1; y<=y2; y++) { |
for (y=y1; y<=y2; y++) { |
42 |
len = 3 * (x2-x1+1); |
len = 3 * (x2-x1+1); |
43 |
if (len > 0) |
if (len > 0) { |
44 |
my_memset((unsigned char *)FB_BASE + 3*(640*y+x1), |
my_memset((unsigned char *)FB_BASE + |
45 |
c, len); |
3 * (XRES * y + x1), c, len); |
46 |
|
} |
47 |
} |
} |
48 |
} |
} |
49 |
|
|
58 |
} |
} |
59 |
|
|
60 |
|
|
61 |
void f(void) { |
void fbctrl_write_port(int p) |
62 |
|
{ |
63 |
|
*(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_PORT) = p; |
64 |
|
} |
65 |
|
|
66 |
|
|
67 |
|
void fbctrl_write_data(int d) |
68 |
|
{ |
69 |
|
*(volatile int *)(FBCTRL_BASE + DEV_FBCTRL_DATA) = d; |
70 |
|
} |
71 |
|
|
72 |
|
|
73 |
|
void fbctrl_set_x1(int v) |
74 |
|
{ |
75 |
|
fbctrl_write_port(DEV_FBCTRL_PORT_X1); |
76 |
|
fbctrl_write_data(v); |
77 |
|
} |
78 |
|
|
79 |
|
|
80 |
|
void fbctrl_set_y1(int v) |
81 |
|
{ |
82 |
|
fbctrl_write_port(DEV_FBCTRL_PORT_Y1); |
83 |
|
fbctrl_write_data(v); |
84 |
|
} |
85 |
|
|
86 |
|
|
87 |
|
void fbctrl_command(int c) |
88 |
|
{ |
89 |
|
fbctrl_write_port(DEV_FBCTRL_PORT_COMMAND); |
90 |
|
fbctrl_write_data(c); |
91 |
|
} |
92 |
|
|
93 |
|
|
94 |
|
void change_resolution(int xres, int yres) |
95 |
|
{ |
96 |
|
fbctrl_set_x1(xres); |
97 |
|
fbctrl_set_y1(yres); |
98 |
|
fbctrl_command(DEV_FBCTRL_COMMAND_SET_RESOLUTION); |
99 |
|
} |
100 |
|
|
101 |
|
|
102 |
|
void f(void) |
103 |
|
{ |
104 |
|
/* Change to the resolution we want: */ |
105 |
|
change_resolution(XRES, YRES); |
106 |
|
|
107 |
/* Draw random rectangles forever: */ |
/* Draw random rectangles forever: */ |
108 |
for (;;) { |
for (;;) { |
109 |
draw_rectangle(my_random() % 640, my_random() % 480, |
draw_rectangle(my_random() % XRES, my_random() % YRES, |
110 |
my_random() % 640, my_random() % 480, my_random()); |
my_random() % XRES, my_random() % YRES, my_random()); |
111 |
} |
} |
112 |
} |
} |
113 |
|
|