1 ; crt0.s for Colecovision cart 2 3 .module crt0 4 .globl _main 5 .globl ___sdcc_call_hl 6 7 ; Ordering of segments for the linker - copied from sdcc crt0.s 8 .area _CODE 9 .area _INITIALIZER 10 .area _HOME 11 .area _GSINIT 12 .area _GSFINAL 13 .area _DATA 14 .area _INITIALIZED 15 .area _BSEG 16 .area _BSS 17 .area _HEAP 18 19 .area _CODE 20 ; MSX cartridge header @ 0x4000 - 0x400f 0000 41 42 21 .dw 0x4241 0002r10r00 22 .dw _Start 0004r10r00 23 .dw _Start 0006 00 00 24 .dw 0 0008 00 00 25 .dw 0 000A 00 00 26 .dw 0 000C 00 00 27 .dw 0 000E 00 00 28 .dw 0 29 0010 30 _Start: 0010 F3 [ 4] 31 di 0011 31 00 E0 [10] 32 ld sp, #0xe000 ; Set stack pointer directly above top of memory. 0014 ED 56 [ 8] 33 im 1 34 0016 CDr00r00 [17] 35 call gsinit ; Initialize global and static variables. 0019 CDr00r00 [17] 36 call _main 001C C7 [11] 37 rst 0x0 ; Restart when main() returns. 38 39 .area _GSINIT 0000 40 gsinit:: 41 42 ; Implicitly zeroed global and static variables. 0000 01r00r00 [10] 43 ld bc, #l__DATA 0003 78 [ 4] 44 ld a, b 0004 B1 [ 4] 45 or a, c 0005 28 0F [12] 46 jr Z, zeroed_data 0007 21r00r00 [10] 47 ld hl, #s__DATA 000A 36 00 [10] 48 ld (hl), #0x00 000C 0B [ 6] 49 dec bc 000D 78 [ 4] 50 ld a, b 000E B1 [ 4] 51 or a, c 000F 28 05 [12] 52 jr Z, zeroed_data 0011 5D [ 4] 53 ld e, l 0012 54 [ 4] 54 ld d, h 0013 13 [ 6] 55 inc de 0014 ED B0 [21] 56 ldir 0016 57 zeroed_data: 58 59 ; Explicitly initialized global variables. 0016 01r00r00 [10] 60 ld bc, #l__INITIALIZER 0019 78 [ 4] 61 ld a, b 001A B1 [ 4] 62 or a, c 001B 28 08 [12] 63 jr Z, gsinit_static 001D 11r00r00 [10] 64 ld de, #s__INITIALIZED 0020 21r00r00 [10] 65 ld hl, #s__INITIALIZER 0023 ED B0 [21] 66 ldir 67 0025 68 gsinit_static: 69 ; Explicitly initialized static variables inserted by compiler here. 70 71 .area _GSFINAL 0000 C9 [10] 72 ret 73 74 .area _HOME 75