Blame
|
1 | # Runtime (crt0) |
||||||
|
2 | |||||||
| 3 | By default, when using my link scripts, the standard runtime is initialised by crt0 as follows: |
|||||||
| 4 | ||||||||
|
5 | | Address | Size | Variable Name |Comment | |
||||||
|
6 | | ------- | ------- | ------- | ------- | |
||||||
| 7 | | `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 | |
|||||||
|
8 | | `0x040000` | n/a | `_RUN_ADDRESS` | Start of user program (.text), followed by initialised data (.data) and then unititialised data (.bss). | |
||||||
|
9 | |||||||
|
10 | You can override the values at link time by using the linker option: |
||||||
| 11 | ||||||||
| 12 | ``` |
|||||||
|
13 | --defsym=<Variable Name>=<value> |
||||||
|
14 | ``` |
||||||
| 15 | You can use this option as many times as needed. |
|||||||
| 16 | ||||||||
|
17 | ## Before calling main() |
||||||
| 18 | ### Banner Message |
|||||||
| 19 | If the code is running in ROM, a banner message will be printed, similar to the following: |
|||||||
| 20 | ``` |
|||||||
| 21 | Mega-680x0 Computer System |
|||||||
| 22 | Code is running in ROM |
|||||||
| 23 | 68030 Processor running at ~40MHz |
|||||||
| 24 | ``` |
|||||||
|
25 | |||||||
|
26 | ### Heap |
||||||
| 27 | All free memory from the end of the .bss area to the end of ram to the heap (malloc/free). |
|||||||
|
28 | |||||||
|
29 | ### Global Variables |
||||||
|
30 | crt0 sets the following global variables: |
||||||
| 31 | ||||||||
|
32 | | Variable | Comment | |
||||||
| 33 | | ------- | ------- | |
|||||||
| 34 | | **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. | |
|||||||
| 35 | | **uint8_t cpu_type**. | Figures out what CPU is installed: 0 - 68000/68008, 1 - 68010, 2 - 68020, 3 - 68030 | |
|||||||
| 36 | | **uint8_t running_in_rom**. | When non-zero, indicates that the code is running in ROM. 0 indicates it's running in RAM. | |
|||||||
|
37 | |||||||
|
38 | To access any of these variables, simply ```#include <machine.h.>``` |
||||||
|
39 | |||||||
| 40 | ### On Exit |
|||||||
|
41 | When `main()` returns or when `exit()` is called, a non-zero exit code will be displayed as follows: |
||||||
|
42 | ``` |
||||||
| 43 | exited with status: <value> |
|||||||
| 44 | ``` |
|||||||
| 45 | No message is printed if the exit code was zero. |
|||||||
| 46 | Control will then be passed back to the monitor |
|||||||