root / prex-0.9.0 / bsp / boot / arm / gba / head.S @ 03e9c04a
History | View | Annotate | Download (4.1 KB)
1 |
/*- |
---|---|
2 |
* Copyright (c) 2005, Kohsuke Ohtani |
3 |
* All rights reserved. |
4 |
* |
5 |
* Redistribution and use in source and binary forms, with or without |
6 |
* modification, are permitted provided that the following conditions |
7 |
* are met: |
8 |
* 1. Redistributions of source code must retain the above copyright |
9 |
* notice, this list of conditions and the following disclaimer. |
10 |
* 2. Redistributions in binary form must reproduce the above copyright |
11 |
* notice, this list of conditions and the following disclaimer in the |
12 |
* documentation and/or other materials provided with the distribution. |
13 |
* 3. Neither the name of the author nor the names of any co-contributors |
14 |
* may be used to endorse or promote products derived from this software |
15 |
* without specific prior written permission. |
16 |
* |
17 |
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND |
18 |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
19 |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
20 |
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE |
21 |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
22 |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
23 |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
24 |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
25 |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
26 |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
27 |
* SUCH DAMAGE. |
28 |
*/ |
29 |
|
30 |
/* |
31 |
* head.S - low level platform support |
32 |
* |
33 |
* This file contains the code from crt0.S which is released under |
34 |
* public domain by Jeff Frohwein. |
35 |
*/ |
36 |
|
37 |
/*- |
38 |
* Memory usage: |
39 |
* |
40 |
* 0x02000000 - 0x0203ffff : EWRAM (256K) |
41 |
* 0x03000000 - 0x03007fff : IWRAM (32K) |
42 |
* 0x04000000 - 0x040003ff : I/O Register (1K) |
43 |
* 0x05000000 - 0x050003ff : Palette RAM (1K) |
44 |
* 0x06000000 - 0x06017fff : VRAM (96K) |
45 |
* |
46 |
* Note: |
47 |
* 0x03007f00 - 0x03007fff is reserved by GBA BIOS. |
48 |
*/ |
49 |
|
50 |
#include <conf/config.h> |
51 |
#include <machine/memory.h> |
52 |
#include <machine/syspage.h> |
53 |
|
54 |
#define ENTRY(x) .global x; .align; x##: |
55 |
|
56 |
.section ".text","ax" |
57 |
.code 32 |
58 |
/* |
59 |
* Loader start point |
60 |
*/ |
61 |
ENTRY(boot_entry) |
62 |
b rom_header_end |
63 |
|
64 |
/* |
65 |
* GBA ROM header |
66 |
*/ |
67 |
|
68 |
/* Nintendo Logo Character Data (8000004h) */ |
69 |
.fill 156,1,0 |
70 |
|
71 |
/* Game Title (80000A0h) */ |
72 |
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
73 |
.byte 0x00,0x00,0x00,0x00 |
74 |
|
75 |
/* Game Code (80000ACh) */ |
76 |
.byte 0x00,0x00,0x00,0x00 |
77 |
|
78 |
/* Maker Code (80000B0h) */ |
79 |
.byte 0x30,0x31 |
80 |
|
81 |
/* Fixed Value (80000B2h) */ |
82 |
.byte 0x96 |
83 |
|
84 |
/* Main Unit Code (80000B3h) */ |
85 |
.byte 0x00 |
86 |
|
87 |
/* Device Type (80000B4h) */ |
88 |
.byte 0x00 |
89 |
|
90 |
/* Unused Data (7Byte) (80000B5h) */ |
91 |
.byte 0x00,0x00,0x00,0x00,0x00,0x00,0x00 |
92 |
|
93 |
/* Software Version No (80000BCh) */ |
94 |
.byte 0x00 |
95 |
|
96 |
/* Complement Check (80000BDh) */ |
97 |
.byte 0xf0 |
98 |
|
99 |
/* Checksum (80000BEh) */ |
100 |
.byte 0x00,0x00 |
101 |
|
102 |
.align |
103 |
.code 32 |
104 |
|
105 |
rom_header_end: |
106 |
b start_vector |
107 |
|
108 |
.global __boot_method, __slave_number |
109 |
|
110 |
__boot_method: |
111 |
.byte 0 /* boot method (0=ROM boot, 3=Multiplay boot) */ |
112 |
__slave_number: |
113 |
.byte 0 /* slave # (1=slave#1, 2=slave#2, 3=slave#3) */ |
114 |
|
115 |
.byte 0 |
116 |
.byte 0 |
117 |
.word 0 |
118 |
.word 0 |
119 |
.word 0 |
120 |
.word 0 |
121 |
.word 0 |
122 |
.word 0 |
123 |
|
124 |
.align |
125 |
.code 32 |
126 |
stack_top: .word (BOOTSTKTOP - KERNBASE) |
127 |
|
128 |
start_vector: |
129 |
mov r0, #0xd3 /* Enter SVC mode, Disable IRQ,FIQ */ |
130 |
msr cpsr_c, r0 |
131 |
ldr sp, stack_top |
132 |
|
133 |
adr r0, thumb_mode + 1 |
134 |
bx r0 |
135 |
.code 16 |
136 |
thumb_mode: |
137 |
|
138 |
/* |
139 |
* Relocate the loader code |
140 |
*/ |
141 |
mov r3, #0x40 |
142 |
lsl r3, r3, #7 /* r3 = 0x2000 (8K) */ |
143 |
mov r2, #3 |
144 |
lsl r2, r2, #24 /* r2 = 0x3000000 */ |
145 |
lsl r1, r3, #14 /* r1 = 0x8000000 */ |
146 |
|
147 |
copy_loop: |
148 |
ldmia r1!, {r0} |
149 |
stmia r2!, {r0} |
150 |
sub r3, r3, #4 |
151 |
bne copy_loop |
152 |
|
153 |
ldr r0, =main |
154 |
bx r0 /* Change to ARM mode */ |
155 |
|
156 |
.code 32 |
157 |
|
158 |
#if defined(DEBUG) && defined(CONFIG_DIAG_VBA) |
159 |
/* |
160 |
* Put one character to Visual Boy Advance (VBA) emulator console. |
161 |
* |
162 |
* Important: |
163 |
* This BIOS call is not supported by actual GBA BIOS. So, you must |
164 |
* disable this function when you run it on actual GBA H/W. |
165 |
* Otherwise, it will hang. |
166 |
*/ |
167 |
putbuf: |
168 |
.long 0 |
169 |
|
170 |
ENTRY(vba_putc) |
171 |
ldr r1, =putbuf |
172 |
str r0, [r1] |
173 |
mov r0, r1 |
174 |
swi $0xff0000 |
175 |
mov pc, lr |
176 |
#endif |
177 |
|
178 |
.section .tail,"ax" |
179 |
dummy: |
180 |
.byte 0xff |
181 |
|
182 |
.end |