58 lines
837 B
ArmAsm
58 lines
837 B
ArmAsm
;;;
|
|
;;;
|
|
;;; ctt0.S
|
|
;;;
|
|
;;; \file
|
|
;;; C runtime startup routine
|
|
;;;
|
|
;;; \author
|
|
;;; Takahide Matsutsuka <markn@markn.org>
|
|
;;;
|
|
.module crt0
|
|
.globl _main
|
|
|
|
.area _HEADER (ABS)
|
|
.org 0
|
|
jp init
|
|
|
|
;; Ordering of segments for the linker.
|
|
.area _HOME
|
|
.area _CODE
|
|
.area _GSINIT
|
|
.area _GSFINAL
|
|
.area _DATA
|
|
.area _DATAFINAL
|
|
.area _BSS
|
|
.area _HEAP
|
|
|
|
.area _CODE
|
|
init::
|
|
;; Clear global variables
|
|
ld hl, #_datastart
|
|
ld bc, #_dataend
|
|
_clear_loop:
|
|
ld a, h
|
|
sub b
|
|
jr nz, _clear_next
|
|
ld a, l
|
|
sub c
|
|
jr z, _clear_exit
|
|
_clear_next:
|
|
ld (hl), #0
|
|
inc hl
|
|
jr _clear_loop
|
|
_clear_exit:
|
|
;; Initialize global variables
|
|
call gsinit
|
|
jp _main
|
|
|
|
.area _GSINIT
|
|
gsinit::
|
|
|
|
.area _GSFINAL
|
|
ret
|
|
.area _DATA
|
|
_datastart::
|
|
.area _DATAFINAL
|
|
_dataend::
|