diff options
Diffstat (limited to 'src/main.c')
-rw-r--r-- | src/main.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -20,6 +20,11 @@ | |||
20 | // Display modes. | 20 | // Display modes. |
21 | // | 21 | // |
22 | 22 | ||
23 | // Display registers. | ||
24 | #define DISP_CONTROL *((vu32*)(MEM_IO + 0x0000)) | ||
25 | #define DISP_STATUS *((vu32*)(MEM_IO + 0x0004)) | ||
26 | #define DISP_VCOUNT *((vu32*)(MEM_IO + 0x0006)) | ||
27 | |||
23 | // Display modes. | 28 | // Display modes. |
24 | #define DISP_MODE_0 0x0000 | 29 | #define DISP_MODE_0 0x0000 |
25 | #define DISP_MODE_1 0x0001 | 30 | #define DISP_MODE_1 0x0001 |
@@ -55,6 +60,7 @@ typedef u16 Color; | |||
55 | // | 60 | // |
56 | typedef Color Scanline[SCREEN_WIDTH]; | 61 | typedef Color Scanline[SCREEN_WIDTH]; |
57 | #define FRAMEBUFFER ((Scanline*)MEM_VRAM) | 62 | #define FRAMEBUFFER ((Scanline*)MEM_VRAM) |
63 | #define SCREEN_BUFFER ((vu16*) MEM_VRAM) | ||
58 | 64 | ||
59 | // | 65 | // |
60 | // Colors. | 66 | // Colors. |
@@ -86,6 +92,12 @@ put_line(int x, int y, Color clr, char *msg) { | |||
86 | } | 92 | } |
87 | } | 93 | } |
88 | 94 | ||
95 | static inline void | ||
96 | wait_vsync() { | ||
97 | while(DISP_VCOUNT >= 160); | ||
98 | while(DISP_VCOUNT < 160); | ||
99 | } | ||
100 | |||
89 | // | 101 | // |
90 | // Main functions. | 102 | // Main functions. |
91 | // | 103 | // |
@@ -94,6 +106,7 @@ int main(void) { | |||
94 | set_display_mode(DISP_MODE_3 | DISP_BG2); | 106 | set_display_mode(DISP_MODE_3 | DISP_BG2); |
95 | 107 | ||
96 | while(true) { | 108 | while(true) { |
109 | wait_vsync(); | ||
97 | put_line(16, 20 + 16, rgb15(28, 0, 0), "Hello world from the GBA!"); | 110 | put_line(16, 20 + 16, rgb15(28, 0, 0), "Hello world from the GBA!"); |
98 | put_line(16, 20 + 32, rgb15(0, 28, 28), "Using my little 8x8 bd-font"); | 111 | put_line(16, 20 + 32, rgb15(0, 28, 28), "Using my little 8x8 bd-font"); |
99 | put_line(16, 20 + 64, rgb15(16, 0, 28), "Isn't that neat? :D"); | 112 | put_line(16, 20 + 64, rgb15(16, 0, 28), "Isn't that neat? :D"); |