You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
2.3 KiB
NASM
116 lines
2.3 KiB
NASM
;/****************************************************************
|
|
;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
|
|
|
|
|
|
|