Oh, okay! I tried to make an exaustive guide, but it taken much more time. Hour startup code is ok, if is passed with the right options to the linker. However, after a little disassembling, I found why our executables can't run on a gba: fpc compiler adds some calls (FPC_INITIALIZEUNITS, FPC_DO_EXIT, etc.) that interfere with startup code. I tried to remove them and relinking the generated asm and - surprise! - it works! At the latest tomorrow I'll put here the step-by-step. Promised!