1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
/* Copyright (C) 1994, 1996, 1997 Free Software Foundation, Inc.
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
On-Line Applications Research Corporation.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public License as
published by the Free Software Foundation; either version 2 of the
License, or (at your option) any later version.
The GNU C Library 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. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with the GNU C Library; see the file COPYING.LIB. If not,
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* 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.
*/
.text
.globl start | Default entry point
.globl _start | Default entry point
.globl M68Kvec | Vector Table
.globl _M68Kvec | Vector Table
start:
_start:
M68Kvec: | standard location for vectors
_M68Kvec: | standard location for vectors
nop | for linkers with problem
| using location zero as entry
jmp around
.space 4088 | to avoid initial intr stack
| from 135BUG on MVME13? as entry
| and start code at 0x4000
around:
move.w %sr,initial_sr | save initial values
movec %isp,%a0
movel %a0,initial_isp
movec %usp,%a0
movel %a0,initial_usp
movec %msp,%a0
movel %a0,initial_msp
oriw #0x0700,%sr | INTERRUPTS OFF!!!
|
| zero out uninitialized data area
|
zerobss:
moveal #end,%a0 | find end of .bss
moveal #_bss_start,%a1 | find beginning of .bss
movel #0,%d0
loop: movel #0,%a1@+ | to zero out uninitialized
cmpal %a0,%a1
jlt loop | loop until _end reached
movel #heap_size,__C_heap_size | set ___C_heap_size
movel #heap_memory,__C_heap_start | set ___C_heap_start
moveal #interrupt_stack_end,%a0 | set interrupt stack pointer
movec %a0,%isp
moveal #stack_end,%a0 | set master stack pointer
movec %a0,%msp
moveal #stack_end,%a6 | set base pointer
movw #0x3000,%sr | SUPV MODE,INTERRUPTS ON!!!
#ifdef NEED_UNDERSCORES
jsr __Board_Initialize | initialize the board
#else
jsr _Board_Initialize | initialize the board
#endif
move.l #0,%sp@- | envp = NULL
move.l #0,%sp@- | argv = NULL
move.l #0,%sp@- | argc = NULL
#ifdef NEED_UNDERSCORES
jsr ___libc_init | initialize the library and
| call main
#else
jsr __libc_init | initialize the library and
| call main
#endif
add.l #12,%sp
move.l #0,%sp@- | argc = NULL
jsr __exit | call the Board specific exit
addq.l #4,%sp
move.l initial_isp,%a0 | if __exit returns then we can
movec %a0,%isp | restore the initial values
move.l initial_usp,%a0
movec %a0,%usp
move.l initial_msp,%a0
movec %a0,%msp
move.w initial_sr,%sr
rts
.bss
/*
* So initial stack registers and status register can be saved.
*/
#define DECLARE_SPACE(_name,_space,_align) \
.globl _name ; \
.align _align ; \
_name##: .space _space
#define DECLARE_LABEL(_name) \
.globl _name ; \
_name##:
#define DECLARE_PTR(_name) DECLARE_SPACE(_name,4,2)
#define DECLARE_U32(_name) DECLARE_SPACE(_name,4,2)
#define DECLARE_U16(_name) DECLARE_SPACE(_name,2,1)
DECLARE_U32(initial_isp)
DECLARE_U32(initial_msp)
DECLARE_U32(initial_usp)
DECLARE_U16(initial_sr)
/*
* Require environment stuff
*/
DECLARE_LABEL(_environ)
DECLARE_PTR(environ)
DECLARE_LABEL(__errno)
DECLARE_LABEL(_errno)
DECLARE_U32(errno)
/*
* Stack Size and Space
*/
.set stack_size, 0x20000
DECLARE_SPACE(stack_memory,stack_size,4)
DECLARE_LABEL(stack_end)
DECLARE_SPACE(interrupt_stack_memory,0x1000,4)
DECLARE_LABEL(interrupt_stack_end)
|