Brian Silverman | 44311d6 | 2013-12-06 22:03:29 -0800 | [diff] [blame] | 1 | #include <stdint.h> |
| 2 | |
| 3 | #include "cape/bootloader_handoff.h" |
| 4 | |
| 5 | // Sets everything up and then jumps to the main code. |
| 6 | static void jump_to_main(void) __attribute__((noreturn)); |
| 7 | static void jump_to_main(void) { |
| 8 | // 0x20008000 |
Brian Silverman | aa9183a | 2013-12-08 10:33:47 -0800 | [diff] [blame^] | 9 | __asm__ __volatile__( |
Brian Silverman | 44311d6 | 2013-12-06 22:03:29 -0800 | [diff] [blame] | 10 | "mov sp, %[stack]\n\t" |
| 11 | "bx %[reset]" : : |
| 12 | [stack]"r"(RAM_START + RAM_SIZE), [reset]"r"(MAIN_FLASH_START | 1) |
| 13 | : "memory"); |
| 14 | __builtin_unreachable(); |
| 15 | } |
| 16 | |
Brian Silverman | 5020be6 | 2013-12-06 19:09:07 -0800 | [diff] [blame] | 17 | void _start(void) { |
Brian Silverman | 44311d6 | 2013-12-06 22:03:29 -0800 | [diff] [blame] | 18 | jump_to_main(); |
Brian Silverman | 5020be6 | 2013-12-06 19:09:07 -0800 | [diff] [blame] | 19 | } |