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. |
You can override the values at link time by using the linker option:
--defsym=<symbol_name>=<value>
You can use this option as many times as needed.
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.>