Day 24 - Compiling With C
Compiling With C?
Yep, today we will use both ASM and C++ functions in seperate files and compile
them both.
The C++ File
In test.cpp :
/* CODE START */
#include "C:\devkitadv\include\gba.h"
extern "C" {
void SetThePixel(); /* ASM function uses C conventions */
}
int main() {
REG_DISPCNT = 0x403; /* mode 3 */
SetThePixel(); /* our ASM function */
while((*KEYS)&KEY_START); /* Wait for start key */
REG_DISPCNT = 0; /* no mode (dot will disappear) */
while(1);
return 0;
}
/* CODE END */
The ASM File
In test.S :
@-- CODE START --@
.global SetThePixel
SetThePixel:
ldr r1,=0x6000200
ldr r2,=0x00FF
str r2,[r1] @ red dot somewhere on the screen
bx lr @return;
@-- CODE END --@
Note: Put a new line at the end of both of the files.
Note2: Having the char '\' in a comment assembles, but the ROM doesn't run then, wierd...
Compiling
Assuming both code files are in the same dir and C:\devkitadv\bin\ is in your path.
To compile:
gcc test.S test.cpp
objcopy -O binary a.out test.gba
Then run TEST.GBA to make sure it works.
Day In Review
References:
GBADev.ORG Forum Post on this topic
Link from that post about why
the "extern "C"" is needed.
Hope you liked it!,
- GBAGuy
Intro - Day 25
Patater GBAGuy Mirror
Contact