blob: be99b210895fccadb552aa62ff96e5c77d1caec7 [file] [log] [blame]
;/****************************************************************
;KPIT Cummins Infosystems Ltd, Pune, India. - 4th September 2003.
;
;This program is distributed in the hope that it will be useful,
;but WITHOUT ANY WARRANTY; without even the implied warranty of
;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE
;
;*****************************************************************/
;*********************************************************************
; File: start.asm
;
;
; desc:
;
; System initialisation routine - entry point for the application.
; The stack pointer is initialised, then the hardware initialisation
; routine called. The static data areas are then initialised, before
; the main function is executed. A simple exit funtion is also
; supplied
;
;*********************************************************************
#ifdef __H8300H__
#ifdef __NORMAL_MODE__
.h8300hn
#else
.h8300h
#endif
#endif /*_H8300H_ */
#ifdef __H8300S__
#ifdef __NORMAL_MODE__
.h8300sn
#else
.h8300s
#endif
#endif /* __H8300S__ */
.section .text
.global _start
#if DEBUG
.extern _exit
#endif
.extern _hw_initialise
.extern _main
.extern _data
.extern _mdata
.extern _edata
.extern _bss
.extern _ebss
.extern _stack
_start:
; initialise the SP for non-vectored code
mov.l #_stack,er7
; call the hardware initialiser
jsr @_hw_initialise
#ifdef ROMSTART
; get the boundaries for the .data section initialisation
mov.l #_data,er0
mov.l #_edata,er1
mov.l #_mdata,er2
cmp.l er0,er1
beq start_1
start_l:
mov.b @er2,r3l ;get from src
mov.b r3l,@er0 ;place in dest
inc.l #1,er2 ;inc src
inc.l #1,er0 ;inc dest
cmp.l er0,er1 ;dest == edata?
bne start_l
start_1:
#endif //ROMSTART
; zero out bss
mov.l #_bss,er0
mov.l #_ebss,er1
cmp.l er0,er1
beq start_3
sub.b r2l,r2l
start_2:
mov.b r2l,@er0
inc.l #1,er0
cmp.l er0,er1
bne start_2
start_3:
#ifdef CPPAPP
;Initialize global constructor
jsr @___main
#endif
; call the mainline
jsr @_main
mov.l er0,er4
;call to exit
#if DEBUG
jsr @_exit
#endif
#if RELEASE
exit:
bra exit
#endif