📄 start.ram
字号:
/* * Authors: Ralf Corsepius (corsepiu@faw.uni-ulm.de) and * Bernd Becker (becker@faw.uni-ulm.de) * * COPYRIGHT (c) 1997-1998, FAW Ulm, Germany * * This program 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. * * * COPYRIGHT (c) 1998. * 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.rtems.com/license/LICENSE. * * Modified to reflect Hitachi EDK SH7045F: * John M. Mills (jmills@tga.com) * TGA Technologies, Inc. * 100 Pinnacle Way, Suite 140 * Norcross, GA 30071 U.S.A. * * * This modified file may be copied and distributed in accordance * the above-referenced license. It is provided for critique and * developmental purposes without any warranty nor representation * by the authors or by TGA Technologies. * * $Id: start.ram,v 1.2.4.1 2003/09/04 18:45:25 joel Exp $ */#include "asm.h" BEGIN_CODE PUBLIC(start)SYM (start): ! install the stack pointer mov.l stack_k,r15#ifdef START_HW_INIT /* from $RTEMS_BSP.cfg */ ! Initialize minimal hardware mov.l hw_init_k, r0 jsr @r0 nop !debug dead-slot target#endif /* START_HW_INIT */ ! zero out bss mov.l edata_k,r0 mov.l end_k,r1 mov #0,r20: mov.l r2,@r0 add #4,r0 cmp/ge r0,r1 bt 0b nop !debug dead-slot target ! copy the vector table from rom to ram mov.l vects_k,r0 ! vectab mov #0,r1 ! address of boot vector table mov #0,r2 ! number of bytes copied mov.w vects_size,r3 ! size of entries in vectab1: mov.l @r1+,r4 mov.l r4,@r0 add #4,r0 add #1,r2 cmp/hi r3,r2 bf 1b nop !debug dead-slot target ! overlay monitor vectors onto RTEMS table template ! code adapted from Hitachi EDK7045F User Manual: "Copyvect.s" mova vects_k,r0 mov.l @r0, r1 ! Shadow vect tbl addr stc vbr, r2 ! Original vect tbl addr and #0, r0 mov r0, r4 ! 0 in r4 and r0!trapa #32 or #0x80, r0 mov.l @(r0,r2), r3 mov.l r3, @(r0, r1) mov r4, r0!cpu addr err or #0x24, r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!ill slot or #0x18, r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!ill inst or #0x10, r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!nmi or #0x2c, r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!User brk or #0x30, r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!sci0 err or #0x80, r0 rotl r0 rotl r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) mov r4, r0!sci rx or #0x81, r0 rotl r0 rotl r0 mov.l @(r0, r2), r3 mov.l r3, @(r0, r1) stc vbr,r3 ! capture copy of monitor vbr mov.l vbrtemp_k,r0 mov.l r3, @r0 mov.l vects_k,r0 ! point vbr to vectab ldc r0,vbr ! call the mainline mov #0,r4 ! argc mov #0,r5 ! argv - can place in dead slot mov.l main_k,r0 jsr @r0 nop !debug dead-slot target ! call exit mov r0,r4 mov.l exit_k,r0 or r0,r0 jsr @r0 nop !debug dead-slot target mov.l vbrtemp_k,r0 ! restore original vbr mov.l @r0,r3 ldc r3, vbr trapa #13 ! UBR capture by monitor nop !debug dead-slot target END_CODE .align 2stack_k: .long SYM(stack) edata_k: .long SYM(edata)end_k: .long SYM(end)main_k: .long SYM(boot_card)exit_k: .long SYM(exit)#ifdef START_HW_INIT /* from $RTEMS_BSP.cfg */hw_init_k: .long SYM(hw_initialize)#endif /* START_HW_INIT */vbrtemp_k: .long SYM(vbrtemp)vects_k: .long SYM(vectab)vects_size: .word 255#ifdef __ELF__ .section .stack,"aw"#else .section .stack#endifSYM(stack): .long 0xdeaddead#ifdef __ELF__ .section .bss,"aw"#else .section .bss#endifSYM(vbrtemp): .long 0x0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -