URL
https://opencores.org/ocsvn/or1k/or1k/trunk
Subversion Repositories or1k
[/] [or1k/] [trunk/] [rtems-20020807/] [c/] [src/] [lib/] [libbsp/] [i960/] [cvme961/] [start/] [start.S] - Rev 1765
Compare with Previous | Blame | View Log
/* entry.s** This file contains the entry point for the application.* The name of this entry point is compiler dependent.* It jumps to the BSP which is responsible for performing* all initialization.** COPYRIGHT (c) 1989-1999.* On-Line Applications Research Corporation (OAR).** The license and distribution terms for this file may be* found in the file LICENSE in this distribution or at* http://www.OARcorp.com/rtems/license.html.** start.S,v 1.2 1999/11/17 17:50:51 joel Exp*/#include "asm.h"BEGIN_CODEPUBLIC(start) # GNU960 default entry pointSYM(start):mov 3, r12modpc r12, r12, r12 # enable tracing/trace faultsmov g5, g5 # NOPmov 0, g14 # initialize constant for C/** zero out uninitialized data area*/zerobss:lda _end, r4 /* find end of .bss */lda _bss_start, r5 /* find beginning of .bss */ldconst 0, r6loop: st r6, (r5) /* to zero out uninitialized */addo 4, r5, r5 /* data area */cmpobl r5, r4, loop /* loop until _end reached *//* set up stack pointer:* The heap will begin at '_end'; its length is 'heap_size'* bytes. The stack will begin at the first 64-byte-aligned* block after the heap.** A default value of 'heap_size' is set by linking with libnindy.a* The default can be overridden by redefining this symbol at link* time (with a line of the form 'heap_size=XXXX;' in the lnk960* linker specification file; or one of the form* "-defsym heap_size=XXXX" on the gld960 invocation line).*/ldconst _end, sp /* set sp = address of end of heap */lda heap_size(sp),splda 64(sp), sp /* Now round up to 64-byte boundary */ldconst 0xffffffc0, r12and r12, sp, spst sp, _stack_start /* Save for brk() routine */call init_framesret /* return to monitor */init_frames:mov 0, g14 /* initialize constant for C */ldconst 0x3b001000, g0ldconst 0x00009107, g1modac g1, g0, g0 /* set AC controls *//** remember the frame, so that we can set it up if necessary*/st fp, _start_frame/** Call application boot_card.* Someday, real values of argc and argv will be set up.* For now, they are set to 0.*/ldconst 0,g0ldconst 0,g1ldconst 0,g2call _boot_cardretEND_CODEBEGIN_DATAPUBLIC(_start_frame)PUBLIC(start_frame)SYM (_start_frame):SYM (start_frame):.word 0 # addr of first user frame: for gdb960PUBLIC(_stack_start)PUBLIC(stack_start)SYM (_stack_start):SYM (stack_start):.word 0 # addr of first user frame: for gdb960END_DATABEGIN_BSSPUBLIC(heap_size).set heap_size,0x2000END_BSSEND
