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.
95 lines
2.5 KiB
NASM
95 lines
2.5 KiB
NASM
/*------------------------------------------------------------------------
|
|
|
|
|
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
|