Runtime (crt0)
By default, when using my link scripts, the standard runtime is initialised by crt0 as follows:
| Address | Size | Link Script Variable | Comment |
|---|---|---|---|
0x03fffe |
~256k | _STACK_SIZE |
Stack (SSP). Grows towards 0. At round about 0x0000400 it would start stomping all over the memory area used by the monitor |
0x040000 |
n/a | _RUN_ADDRESS |
Start of user program (.text), followed by initialised data (.data) and then unititialised data (.bss). The .bss area is initialised to all zeroes before main() is called. |
Heap
crt0 allocates all free memory from the end of the .bss area to the end of ram to the heap (malloc/free).
Global Variables
crt0 sets the following global variables:
uint8_t cpu_speed_mhz. This uses the counter in the PI/T to figure out roughly how fast the CPU is being clocked at. Within a MHz or so.
uint8_t cpu_type. Figures out what CPU is installed: 0 - 68000/68008, 1 - 68010, 2 - 68020, 3 - 68030
uint8_t running_in_rom. When non-zero, indicates that the code is running in ROM. 0 indicates it's running in RAM.
To access any of these variables, simply include machine.h.