;/**************************************************************** | |
;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 | |