blob: 3364bc3ee9124e8dd2fc7d716f546f6633f6a4ce [file] [log] [blame]
kthacker62e146c2006-04-17 15:11:35 +00001;; File: crt0.s
2;; Generic crt0.s for a Z80
3;; From SDCC..
4;; Modified to suit execution on the Amstrad CPC!
5;; by H. Hansen 2003
6
7 .module crt0
8 .globl _main
9 .globl _progend
kthacker62e146c2006-04-17 15:11:35 +000010 .area _HEADER (ABS)
11 ;; Ordering of segments for the linker.
12 .area _CODE
13init:
14
15;; Initialise global variables
16 call gsinit
17 call _main
18
19_exit::
20 ret
PulkoMandyd4445ca2014-06-28 11:43:26 +020021
22 .area _HOME
23 .area _CODE
24 .area _INITIALIZER
25 .area _GSINIT (REL)
26 .area _GSFINAL (REL)
kthacker62e146c2006-04-17 15:11:35 +000027
PulkoMandyd4445ca2014-06-28 11:43:26 +020028 .area _INITIALIZED
PulkoMandy2bb86d92014-06-28 17:09:59 +020029 .area _DATA
PulkoMandyd4445ca2014-06-28 11:43:26 +020030 .area _BSEG
PulkoMandy2bb86d92014-06-28 17:09:59 +020031 .area _BSS (REL)
32 .area _HEAP (REL)
33_progend::
kthacker62e146c2006-04-17 15:11:35 +000034
PulkoMandy2bb86d92014-06-28 17:09:59 +020035 .area _GSINIT (REL)
kthacker62e146c2006-04-17 15:11:35 +000036gsinit::
PulkoMandyd4445ca2014-06-28 11:43:26 +020037 ld bc, #l__INITIALIZER
38 ld a, b
39 or a, c
40 jr Z, gsinit_next
41 ld de, #s__INITIALIZED
42 ld hl, #s__INITIALIZER
43 ldir
44gsinit_next:
PulkoMandy2bb86d92014-06-28 17:09:59 +020045; Clear BSS sections
46 ld hl,#s__DATA
47 ld (hl),#0
48 ld de,#s__DATA
49 inc de
50 ld bc,#l__DATA
51 ldir
52
53; Initialize disk ROM
54 ld hl,#0xabff
55 ld de,#0x40
56 ld c,#7
57 call 0xbcce
kthacker62e146c2006-04-17 15:11:35 +000058
PulkoMandyd4445ca2014-06-28 11:43:26 +020059 .area _GSFINAL
PulkoMandy2bb86d92014-06-28 17:09:59 +020060 ; After the ROMs are initialized, initialize the heap.
61 jp __sdcc_heap_init