/*------------------------------------------------------------------------ | |
| | |
FILE : start.asm | | |
DATE : Wed, Aug 25, 2010 | | |
DESCRIPTION : Reset Program | | |
CPU TYPE : Other | | |
| | |
This file is generated by KPIT GNU Project Generator (Ver.4.5). | | |
| | |
------------------------------------------------------------------------*/ | |
/*Start.asm*/ | |
.list | |
.section .text | |
.global _start /*global Start routine */ | |
#ifdef CPPAPP | |
___dso_handle: | |
.global ___dso_handle | |
#endif | |
.extern _hw_initialise /*external Sub-routine to initialise Hardware*/ | |
.extern _data | |
.extern _mdata | |
.extern _ebss | |
.extern _bss | |
.extern _edata | |
.extern _main | |
.extern _ustack | |
.extern _istack | |
.extern _rvectors | |
#if DEBUG | |
.extern _exit | |
#endif | |
_start: | |
/* initialise user stack pointer */ | |
mvtc #_ustack,USP | |
/* initialise interrupt stack pointer */ | |
mvtc #_istack,ISP | |
/* setup intb */ | |
mvtc #_rvectors_start, intb /* INTERRUPT VECTOR ADDRESS definition */ | |
/* setup FPSW */ | |
mvtc #100h, fpsw | |
/* load data section from ROM to RAM */ | |
mov #_mdata,r2 /* src ROM address of data section in R2 */ | |
mov #_data,r1 /* dest start RAM address of data section in R1 */ | |
mov #_edata,r3 /* end RAM address of data section in R3 */ | |
sub r1,r3 /* size of data section in R3 (R3=R3-R1) */ | |
smovf /* block copy R3 bytes from R2 to R1 */ | |
/* bss initialisation : zero out bss */ | |
mov #00h,r2 /* load R2 reg with zero */ | |
mov #_ebss, r3 /* store the end address of bss in R3 */ | |
mov #_bss, r1 /* store the start address of bss in R1 */ | |
sub r1,r3 /* size of bss section in R3 (R3=R3-R1) */ | |
sstr.b | |
/* call the hardware initialiser */ | |
bsr.a _hw_initialise | |
nop | |
/* setup PSW */ | |
// mvtc #10000h, psw /* Set Ubit & Ibit for PSW */ | |
/* change PSW PM to user-mode */ | |
// MVFC PSW,R1 | |
// OR #00100000h,R1 | |
// PUSH.L R1 | |
// MVFC PC,R1 | |
// ADD #10,R1 | |
// PUSH.L R1 | |
// RTE | |
// NOP | |
// NOP | |
/* start user program */ | |
bsr.a _main | |
/* call to exit*/ | |
_exit: | |
bsr.a _exit | |
.end |