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