📄 start.s
字号:
/* Copyright (C) 1994 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/ormodify it under the terms of the GNU Library General Public License aspublished by the Free Software Foundation; either version 2 of theLicense, 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULibrary General Public License for more details. You should have received a copy of the GNU Library General PublicLicense along with the GNU C Library; see the file COPYING.LIB. Ifnot, write to the Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, 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 Tablestart:_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 0x4000around: 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,%d0loop: 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_U32(errno)/* * Stack Size and Space */ .set stack_size, 0x20000DECLARE_SPACE(stack_memory,stack_size,4)DECLARE_LABEL(stack_end)DECLARE_SPACE(interrupt_stack_memory,0x1000,4)DECLARE_LABEL(interrupt_stack_end)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -