@@ -7,6 +7,11 @@ __attribute__((naked)) void _start(void) {
77
88int main () {
99 volatile unsigned char * frame = (volatile unsigned char * )0x0 ;
10+ volatile unsigned char * btns = (volatile unsigned char * )0x4B000000 ;
11+
12+ int paddY1 = 120 ;
13+ int paddY2 = 120 ;
14+
1015 int ballX = 160 ;
1116 int ballY = 120 ;
1217 int dX = 1 ;
@@ -19,40 +24,92 @@ int main() {
1924 frame [0x4000 * (320 * i + 319 )] = 0xFF ;
2025 }
2126
27+ int counter = 0 ;
28+
2229 while (1 ) {
23- for (int x = -2 ; x <= 2 ; x ++ ) {
24- for (int y = -2 ; y <= 2 ; y ++ ) {
25- frame [0x4000 * (320 * (ballY + y ) + ballX + x )] = 0x00 ;
30+ counter += 1 ;
31+
32+ if (counter == 8000 ) {
33+ counter = 0 ;
34+
35+ for (int x = -2 ; x <= 2 ; x ++ ) {
36+ for (int y = -2 ; y <= 2 ; y ++ ) {
37+ frame [0x4000 * (320 * (ballY + y ) + ballX + x )] = 0x00 ;
38+ }
2639 }
27- }
2840
29- ballX += dX ;
30- ballY += dY ;
41+ for (int x = -2 ; x <= 2 ; x ++ ) {
42+ for (int y = -20 ; y <= 20 ; y ++ ) {
43+ frame [0x4000 * (320 * (paddY1 + y ) + 20 + x )] = 0x00 ;
44+ }
45+ }
3146
32- if (ballX == 319 - 6 ) {
33- dX = -1 ;
34- }
47+ for (int x = -2 ; x <= 2 ; x ++ ) {
48+ for (int y = -20 ; y <= 20 ; y ++ ) {
49+ frame [0x4000 * (320 * (paddY2 + y ) + 299 + x )] = 0x00 ;
50+ }
51+ }
3552
36- if (ballX == 6 ) {
37- dX = 1 ;
38- }
53+ if (* btns & 0b0001 && paddY1 < 239 - 21 ) {
54+ paddY1 + = 1 ;
55+ }
3956
40- if (ballY == 239 - 6 ) {
41- dY = - 1 ;
42- }
57+ if (* btns & 0b0010 && paddY1 > 21 ) {
58+ paddY1 -= 1 ;
59+ }
4360
44- if (ballY == 6 ) {
45- dY = 1 ;
46- }
61+ if (* btns & 0b0100 && paddY2 < 239 - 21 ) {
62+ paddY2 + = 1 ;
63+ }
4764
48- for (int x = -2 ; x <= 2 ; x ++ ) {
49- for (int y = -2 ; y <= 2 ; y ++ ) {
50- frame [0x4000 * (320 * (ballY + y ) + ballX + x )] = 0xFF ;
65+ if (* btns & 0b1000 && paddY2 > 21 ) {
66+ paddY2 -= 1 ;
5167 }
52- }
5368
54- for (int i = 0 ; i < 4000 ; i ++ ) {
55- __asm__("nop" );
69+ ballX += dX ;
70+ ballY += dY ;
71+
72+ if (ballX == 319 - 6 ) {
73+ dX = -1 ;
74+ }
75+
76+ if (ballX == 6 ) {
77+ dX = 1 ;
78+ }
79+
80+ if (ballY == 239 - 6 ) {
81+ dY = -1 ;
82+ }
83+
84+ if (ballY == 6 ) {
85+ dY = 1 ;
86+ }
87+
88+ if (ballX <= 25 && ballX >= 15 && ballY <= paddY1 + 25 && ballY >= paddY1 - 25 ) {
89+ dX = 1 ;
90+ }
91+
92+ if (ballX <= 304 && ballX >= 294 && ballY <= paddY2 + 25 && ballY >= paddY2 - 25 ) {
93+ dX = -1 ;
94+ }
95+
96+ for (int x = -2 ; x <= 2 ; x ++ ) {
97+ for (int y = -2 ; y <= 2 ; y ++ ) {
98+ frame [0x4000 * (320 * (ballY + y ) + ballX + x )] = 0xFF ;
99+ }
100+ }
101+
102+ for (int x = -2 ; x <= 2 ; x ++ ) {
103+ for (int y = -20 ; y <= 20 ; y ++ ) {
104+ frame [0x4000 * (320 * (paddY1 + y ) + 20 + x )] = 0x03 ;
105+ }
106+ }
107+
108+ for (int x = -2 ; x <= 2 ; x ++ ) {
109+ for (int y = -20 ; y <= 20 ; y ++ ) {
110+ frame [0x4000 * (320 * (paddY2 + y ) + 299 + x )] = 0xE0 ;
111+ }
112+ }
56113 }
57114 }
58115}
0 commit comments