diff options
Diffstat (limited to 'c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S')
-rw-r--r-- | c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S b/c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S new file mode 100644 index 0000000000..d6436f4b7b --- /dev/null +++ b/c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S @@ -0,0 +1,169 @@ +/* + * $Id$ + */ + +#include "asm.h" + + BEGIN_CODE + + .globl _romStart + .globl start + .globl _start + .globl _romFaultStart + .globl _led_array + .text +start: /* JRS */ +_start: /* JRS */ +SYM(romStart ): +SYM(_romStart ): + # This line is to make compiler happy. + mov 0, g14 + ldconst 0x120f,r10 # BIST register +/* + Setup code for in memory loaded image +*/ +/* + # Interrupt stack is used by default. + # Copy all code (except Fault Table and Fault Handler) + # from EPROM into DRAM. +*/ + ldconst 0x120f,r10 //# BIST register + ldconst 0x2,r3 + stob r3,0(r10) //# 2->LED +/* + # Zero all uninitialized data +*/ + callx _zeroBss + ldconst 0x120f,r10 //# BIST register + ldconst 0x3,r3 + stob r3,0(r10) //# 3->LED +/* + # And reinitialize processor. + # _start is a few lines below. + # _prcb is RAM-based struct PRCB. +*/ + ldconst 0x300, r4 + ldconst _pmc_start, r5 + ldconst _ram_prcb, r6 + sysctl r4, r5, r6 +/* + # This point will never be reached. +*/ + +SYM(_pmc_start) : +SYM(pmc_start) : + ldconst 0x120f,r10 # BIST register + ldconst 0x4,r3 + stob r3,0(r10) //# 4->LED + mov 0, g14 +/* + # To get ready to invoke procedures. + # I'll use supervisor stack. +*/ + + ldconst _svrStackPtr, fp + lda 16*4(fp), sp + ldconst 0x5,r3 + stob r3,0(r10) //# 5->LED + + ldconst 0x1F0000, r4 + ldconst 0x1F2000, r3 + ldconst 0, r5 + modpc r4, r3, r5 + + ldconst 7,r3 + stob r3,0(r10) //# 7->LED + + callx _rx_boot_card +/* # if _romMain ever returns ... */ + b _romExit + +SYM(romFaultStart) : +SYM(_romFaultStart) : + + mov 0, g14 + + /* ldconst 0, sf0 XXX JRS */ +/* + # To get ready to invoke procedures. + # I'll use supervisor stack. + # _svrStackPtr is defined directly in rom.ld. +*/ + ldconst _svrStackPtr, fp + lda 16*4(fp), sp +/* + # Set processor priority to zero. +*/ + ldconst 0x1F0000, r4 + ldconst 0, r5 + modpc r4, r4, r5 +// # Now to real code +// Fix this up callx _romFaultMain + callx _rx_boot_card +// # if _romMain ever returns ... + b _romExit + +_romExit : +// # if _romMain ever returns ... +// fmark + b _romExit + + + +SYM(led_array): + .byte 99 + .byte 1 + .byte 2 + .byte 3 + .byte 4 + .byte 5 + .byte 6 + .byte 7 + .byte 8 + .byte 9 + .byte 0xa + .byte 0xb + .byte 0xc + + +/* just to compile and link application XXX JOEL */ + .globl _faultStart + .globl _faultEnd + .globl _faultCheckSum + .globl _faultBuffer + .globl _svrStackPtr + .globl _console_pmr_getc + .globl _console_pmr_kbhit + .globl _console_pmr_init + .globl _console_pmr_putc + .globl _DBGConsole_make_sync + .globl _codeRamStart + .globl _codeRomStart + .globl _codeRamEnd + .globl _codeRomEnd + .globl _bssStart + .globl _bssEnd + .globl _bssStart_1 + .globl _bssEnd_1 + .globl _intStackPtr + +_faultStart: +_faultEnd: +_faultCheckSum: +_faultBuffer: +_svrStackPtr: +_console_pmr_getc: +_console_pmr_kbhit: +_console_pmr_init: +_console_pmr_putc: +_DBGConsole_make_sync: +_codeRamStart: +_codeRomStart: +_codeRamEnd: +_codeRomEnd: +_bssStart: +_bssEnd: +_bssStart_1: +_bssEnd_1: +_intStackPtr: + |