#include "font.h" #define MULTIBOOT int __gba_multiboot; MULTIBOOT #define MODE_3 0x3 #define REG_DISPCNT *(unsigned long*)0x4000000 #define BG2_ENABLE 0x400 #define setMode(mode) REG_DISPCNT = (mode) #define RGB(r, g, b) ((r) + (g << 5) + (b << 10)) unsigned short* videoBuffer = (unsigned short*)0x6000000; void clearScreen (); void drawChar (int startX, int startY, char letter, unsigned short colour); void drawText (int startX, int startY, char* strText, unsigned short colour); void fillScreen (unsigned short colour); void rectFill (int startX, int startY, int endX, int endY, unsigned short colour); void setPixel (int x, int y, unsigned short colour); void clearScreen () { rectFill(0, 0, 240, 160, 0xFFFF); } void drawChar (int startX, int startY, char letter, unsigned short colour) { int x, y; for (y = 0; y < 8; y++) { for (x = 0; x < 8; x++) { if (font[(letter - 32) * 64 + y * 8 + x]) { setPixel(startX + x, startY + y, colour); } } } } void drawText (int startX, int startY, char* strText, unsigned short colour) { int pos = 0; while (*strText) { drawChar(startX + pos, startY, *strText++, colour); pos += 8; } } void fillScreen (unsigned short colour) { rectFill(0, 0, 240, 160, colour); } void rectFill (int startX, int startY, int endX, int endY, unsigned short colour) { int x, y; for (y = startY; y < endY; y++) { for (x = startX; x < endX; x++) { setPixel(x, y, colour); } } } void setPixel (int x, int y, unsigned short colour) { videoBuffer[y * 240 + x] = colour; } void main () { setMode(MODE_3 | BG2_ENABLE); fillScreen(0x0000); drawText(10, 10, " !\"#$%&'()*+,-./", 0xFFFF); drawText(10, 20, "0123456789", 0xFFFF); drawText(10, 30, ":;<=>?@", 0xFFFF); drawText(10, 40, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 0xFFFF); drawText(10, 50, "[\\]", 0xFFFF); while (1) { } } /* END OF FILE */