22 lines
510 B
C
22 lines
510 B
C
|
|
int entry();
|
|
|
|
__attribute__((weak, naked, noinline, noreturn)) void _start() {
|
|
// set bss segment symbols
|
|
asm(".global __bss_start__, __bss_end__");
|
|
asm("__bss_start__ = _edata");
|
|
asm("__bss_end__ = _end");
|
|
// set stack pointer
|
|
asm("mov sp, #0x100000");
|
|
// run main()
|
|
entry();
|
|
// wait for next video frame
|
|
while (*(volatile int*)0x4000020 != 0) { }
|
|
// halt cpu
|
|
asm(".long 0xe7f000f0"); // udf #0
|
|
}
|
|
|
|
void _Exit(int ec) {
|
|
asm(".long 0xe7f000f0"); // udf #0
|
|
}
|