diff options
author | Thomas Albers <thomas@thomaslabs.org> | 2023-08-14 10:47:54 +0200 |
---|---|---|
committer | Thomas Albers <thomas@thomaslabs.org> | 2023-08-14 10:47:54 +0200 |
commit | ad2623d8c4bc51638343ae9a628f8647ff558155 (patch) | |
tree | d41e8390824e6fee4c02eb044c7f5acb94b478bf /template/crt0.asm |
Diffstat (limited to 'template/crt0.asm')
-rw-r--r-- | template/crt0.asm | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/template/crt0.asm b/template/crt0.asm new file mode 100644 index 0000000..24c475d --- /dev/null +++ b/template/crt0.asm @@ -0,0 +1,59 @@ + .module crt0 + .globl _main + + .area _HEADER (ABS) + ;; Reset vector + .org 0x4000 +init: + call gsinit + call _main +1$: + halt + jr 1$ + + ;; Ordering of segments for the linker. + .area _HOME + .area _CODE + .area _INITIALIZER + .area _GSINIT + .area _GSFINAL + + .area _DATA + .area _INITIALIZED + .area _BSEG + .area _BSS + .area _HEAP + + .area _CODE + + .area _GSINIT +gsinit: + ;; Default-initialized global variables. + ld bc, #l__DATA + ld a, b + or a, c + jr Z, zeroed_data + ld hl, #s__DATA + ld (hl), #0x00 + dec bc + ld a, b + or a, c + jr Z, zeroed_data + ld e, l + ld d, h + inc de + ldir +zeroed_data: + ;; Explicitly initialized global variables. + ld bc, #l__INITIALIZER + ld a, b + or a, c + jr Z, gsinit_next + ld de, #s__INITIALIZED + ld hl, #s__INITIALIZER + ldir + +gsinit_next: + + .area _GSFINAL + ret |