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