3. First GBA program
Now let's start our first GBA program. In this program we will display a picture on the screen.
First of all, build a 240 * 160 size, 256 colors of BMP pictures, such as this:
The name is called helloworld.bmp. Open the KaleID_1-2-3 program just downloaded. Select the menu file in Open, open this helloWorld.bmp file, select the menu file in the Convert and Save. The dialog box appears:
Choose the choice as the figure, pay special attention to "Bitmap Graphics (Mode 4)" and "Save As C Source" and remove "#include
The image data has been converted, then we start writing code. Create a main.c file and put the helloWorld.h in a directory. Then write the code in main.c.
Typedef unsigned char u8;
Typedef unsigned short u16;
Typedef unsigned long u32;
#define reg_dispcnt * (u16 *) 0x04000000 // Display register address
#define vram 0x06000000 // Image buffer address
#define palette 0x5000000 // Toner Address
#define mode_4 0x04 // mode4 logo
#define bg2_enable 0x0400 // bg_2 flag
#define setmode (mode) reg_dispcnt = (mode) // Set the macro definition of the display mode
#include "helloworld.h" // contains the header file of the image palette and the data
U16 * Palette_mem = (u16 *) Palette; // System palette
U16 * video_buffer = (u16 *) vram; // image buffer
Void Draw (U16 * SRC_PALETTE, U16 * SRC_DATA, U16 * DST_PALETTE, U16 * DST_DATA);
int main ()
{
// Set screen mode, use mode_4
SetMode (MODE_4 | BG2_ENABLE);
// HelloWorld_Pal and HelloWorld_GFX are the number of palette and image data defined in "helloworld.h"
DRAW ((U16 *) HelloWorld_Pal, (U16 *) HelloWorld_GFX, Palette_Mem, Video_Buffer;
// Dead cycle
While (1)
{;
}
// Mode_4 drawing function
Void Draw (U16 * SRC_PALETTE, U16 * SRC_DATA, U16 * DST_PALETTE, U16 * DST_DATA)
{
Int loop, x, y;
// Write a palette
For (loop = 0; loop <256; loop )
DST_PALETTE [loop] = src_palette [loop];
// Write an image buffer
FOR (x = 0; x <120; x )
FOR (y = 0; y <160; y )
DST_DATA [(Y) * 120 (x)] = SRC_DATA [(Y) * 120 (x)];}
Finally, build a compile batch command Make.bat to help us compile the generated target code.
Write the following command to a newly built make.bat file
PATH = C: / devkitadv / bin;% PATH%
gcc -lm -o main.elf main.c
Objcopy -V -O binary main.elf main.bin
PAUSE
If your devkitadv is in the D disk, then it should be pat = d: / devkitadv / bin;% PATH%, my Devkitadv is installed in the C drive. Execute make.bat, if there is no error, you can get compiled Out of main.bin and main.elf. Main.bin is the ROM of the GBA that can run. You can use the simulator VisualBoyAdVance to open it, or burn it to the GBA card.
This is the result of running in the simulator VisualBoyAdvance.