summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i960/rxgen960/start/rxgen_romld.S
blob: a5fd26816ca08204e1ee93ee409ef99c030b9b34 (plain) (blame)
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
156
157
158
159
160
161
162
163
164
165
/*
 *  $Id$
 */

#include <rtems/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: