blob: 41358a6776e3f8866bd3ff5a5cabd1496c9c9edb [file] [log] [blame]
Björn Stenbergd9eb5c72002-03-28 15:09:10 +00001/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Alan Korr
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
Björn Stenberg6eb77172002-05-24 15:22:33 +000019#include <stdio.h>
Daniel Stenberg439b1872002-04-16 14:02:26 +000020#include "config.h"
21
Eric Linenberg038df5c2002-09-16 03:18:49 +000022#include "lcd.h"
23#include "font.h"
Linus Nielsen Feltzingfe6b82f2002-04-28 21:40:24 +000024#include "led.h"
Linus Nielsen Feltzing40c1c222002-04-29 14:23:21 +000025#include "system.h"
Björn Stenberg9bcbe3f2003-06-29 15:09:01 +000026#include "rolo.h"
Björn Stenbergd9eb5c72002-03-28 15:09:10 +000027
28#define default_interrupt(name,number) \
29 extern __attribute__((weak,alias("UIE" #number))) void name (void); void UIE##number (void)
30#define reserve_interrupt(number) \
31 void UIE##number (void)
32
33extern void reset_pc (void);
34extern void reset_sp (void);
35
Björn Stenberg2dd18d32002-05-28 13:38:42 +000036static const char* irqname[] = {
37 "", "", "", "", "IllInstr", "", "IllSltIn","","",
38 "CPUAdrEr", "DMAAdrEr", "NMI", "UserBrk",
39 "","","","","","","","","","","","","","","","","","","",
40 "Trap32","Trap33","Trap34","Trap35","Trap36","Trap37","Trap38","Trap39",
41 "Trap40","Trap41","Trap42","Trap43","Trap44","Trap45","Trap46","Trap47",
42 "Trap48","Trap49","Trap50","Trap51","Trap52","Trap53","Trap54","Trap55",
43 "Trap56","Trap57","Trap58","Trap59","Trap60","Trap61","Trap62","Trap63",
44 "Irq0","Irq1","Irq2","Irq3","Irq4","Irq5","Irq6","Irq7",
45 "Dma0","","Dma1","","Dma2","","Dma3","",
46 "IMIA0","IMIB0","OVI0","", "IMIA1","IMIB1","OVI1","",
47 "IMIA2","IMIB2","OVI2","", "IMIA3","IMIB3","OVI3","",
48 "IMIA4","IMIB4","OVI4","",
49 "Ser0Err","Ser0Rx","Ser0Tx","Ser0TE",
50 "Ser1Err","Ser1Rx","Ser1Tx","Ser1TE",
51 "ParityEr","A/D conv","","","Watchdog","DRAMRefr"
52};
53
Björn Stenbergd9eb5c72002-03-28 15:09:10 +000054reserve_interrupt ( 0);
55reserve_interrupt ( 1);
56reserve_interrupt ( 2);
57reserve_interrupt ( 3);
58default_interrupt (GII, 4);
59reserve_interrupt ( 5);
60default_interrupt (ISI, 6);
61reserve_interrupt ( 7);
62reserve_interrupt ( 8);
63default_interrupt (CPUAE, 9);
64default_interrupt (DMAAE, 10);
65default_interrupt (NMI, 11);
66default_interrupt (UB, 12);
67reserve_interrupt ( 13);
68reserve_interrupt ( 14);
69reserve_interrupt ( 15);
Björn Stenbergdf194b02003-02-23 19:02:31 +000070reserve_interrupt ( 16); /* TCB #0 */
71reserve_interrupt ( 17); /* TCB #1 */
72reserve_interrupt ( 18); /* TCB #2 */
73reserve_interrupt ( 19); /* TCB #3 */
74reserve_interrupt ( 20); /* TCB #4 */
75reserve_interrupt ( 21); /* TCB #5 */
76reserve_interrupt ( 22); /* TCB #6 */
77reserve_interrupt ( 23); /* TCB #7 */
78reserve_interrupt ( 24); /* TCB #8 */
79reserve_interrupt ( 25); /* TCB #9 */
80reserve_interrupt ( 26); /* TCB #10 */
81reserve_interrupt ( 27); /* TCB #11 */
82reserve_interrupt ( 28); /* TCB #12 */
83reserve_interrupt ( 29); /* TCB #13 */
84reserve_interrupt ( 30); /* TCB #14 */
85reserve_interrupt ( 31); /* TCB #15 */
Björn Stenbergd9eb5c72002-03-28 15:09:10 +000086default_interrupt (TRAPA32, 32);
87default_interrupt (TRAPA33, 33);
88default_interrupt (TRAPA34, 34);
89default_interrupt (TRAPA35, 35);
90default_interrupt (TRAPA36, 36);
91default_interrupt (TRAPA37, 37);
92default_interrupt (TRAPA38, 38);
93default_interrupt (TRAPA39, 39);
94default_interrupt (TRAPA40, 40);
95default_interrupt (TRAPA41, 41);
96default_interrupt (TRAPA42, 42);
97default_interrupt (TRAPA43, 43);
98default_interrupt (TRAPA44, 44);
99default_interrupt (TRAPA45, 45);
100default_interrupt (TRAPA46, 46);
101default_interrupt (TRAPA47, 47);
102default_interrupt (TRAPA48, 48);
103default_interrupt (TRAPA49, 49);
104default_interrupt (TRAPA50, 50);
105default_interrupt (TRAPA51, 51);
106default_interrupt (TRAPA52, 52);
107default_interrupt (TRAPA53, 53);
108default_interrupt (TRAPA54, 54);
109default_interrupt (TRAPA55, 55);
110default_interrupt (TRAPA56, 56);
111default_interrupt (TRAPA57, 57);
112default_interrupt (TRAPA58, 58);
113default_interrupt (TRAPA59, 59);
114default_interrupt (TRAPA60, 60);
115default_interrupt (TRAPA61, 61);
116default_interrupt (TRAPA62, 62);
117default_interrupt (TRAPA63, 63);
118default_interrupt (IRQ0, 64);
119default_interrupt (IRQ1, 65);
120default_interrupt (IRQ2, 66);
121default_interrupt (IRQ3, 67);
122default_interrupt (IRQ4, 68);
123default_interrupt (IRQ5, 69);
124default_interrupt (IRQ6, 70);
125default_interrupt (IRQ7, 71);
126default_interrupt (DEI0, 72);
127reserve_interrupt ( 73);
128default_interrupt (DEI1, 74);
129reserve_interrupt ( 75);
130default_interrupt (DEI2, 76);
131reserve_interrupt ( 77);
132default_interrupt (DEI3, 78);
133reserve_interrupt ( 79);
134default_interrupt (IMIA0, 80);
135default_interrupt (IMIB0, 81);
136default_interrupt (OVI0, 82);
137reserve_interrupt ( 83);
138default_interrupt (IMIA1, 84);
139default_interrupt (IMIB1, 85);
140default_interrupt (OVI1, 86);
141reserve_interrupt ( 87);
142default_interrupt (IMIA2, 88);
143default_interrupt (IMIB2, 89);
144default_interrupt (OVI2, 90);
145reserve_interrupt ( 91);
146default_interrupt (IMIA3, 92);
147default_interrupt (IMIB3, 93);
148default_interrupt (OVI3, 94);
149reserve_interrupt ( 95);
150default_interrupt (IMIA4, 96);
151default_interrupt (IMIB4, 97);
152default_interrupt (OVI4, 98);
153reserve_interrupt ( 99);
154default_interrupt (REI0, 100);
155default_interrupt (RXI0, 101);
156default_interrupt (TXI0, 102);
157default_interrupt (TEI0, 103);
158default_interrupt (REI1, 104);
159default_interrupt (RXI1, 105);
160default_interrupt (TXI1, 106);
161default_interrupt (TEI1, 107);
162reserve_interrupt ( 108);
163default_interrupt (ADITI, 109);
164
Linus Nielsen Feltzingdb822182002-04-24 21:55:32 +0000165/* reset vectors are handled in crt0.S */
166void (*vbr[]) (void) __attribute__ ((section (".vectors"))) =
Björn Stenberg191f4d22002-04-20 13:25:58 +0000167{
Björn Stenberg191f4d22002-04-20 13:25:58 +0000168 /*** 4 General Illegal Instruction ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000169
Björn Stenberg191f4d22002-04-20 13:25:58 +0000170 GII,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000171
Björn Stenberg191f4d22002-04-20 13:25:58 +0000172 /*** 5 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000173
Björn Stenberg191f4d22002-04-20 13:25:58 +0000174 UIE5,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000175
Björn Stenberg191f4d22002-04-20 13:25:58 +0000176 /*** 6 Illegal Slot Instruction ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000177
Björn Stenberg191f4d22002-04-20 13:25:58 +0000178 ISI,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000179
Björn Stenberg191f4d22002-04-20 13:25:58 +0000180 /*** 7-8 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000181
Björn Stenberg191f4d22002-04-20 13:25:58 +0000182 UIE7,UIE8,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000183
Björn Stenberg191f4d22002-04-20 13:25:58 +0000184 /*** 9 CPU Address Error ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000185
Björn Stenberg191f4d22002-04-20 13:25:58 +0000186 CPUAE,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000187
Björn Stenberg191f4d22002-04-20 13:25:58 +0000188 /*** 10 DMA Address Error ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000189
Björn Stenberg191f4d22002-04-20 13:25:58 +0000190 DMAAE,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000191
Björn Stenberg191f4d22002-04-20 13:25:58 +0000192 /*** 11 NMI ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000193
Björn Stenberg191f4d22002-04-20 13:25:58 +0000194 NMI,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000195
Björn Stenberg191f4d22002-04-20 13:25:58 +0000196 /*** 12 User Break ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000197
Björn Stenberg191f4d22002-04-20 13:25:58 +0000198 UB,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000199
Björn Stenberg191f4d22002-04-20 13:25:58 +0000200 /*** 13-31 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000201
Björn Stenberg191f4d22002-04-20 13:25:58 +0000202 UIE13,UIE14,UIE15,UIE16,UIE17,UIE18,UIE19,UIE20,UIE21,UIE22,UIE23,UIE24,UIE25,UIE26,UIE27,UIE28,UIE29,UIE30,UIE31,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000203
Björn Stenberg191f4d22002-04-20 13:25:58 +0000204 /*** 32-63 TRAPA #20...#3F ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000205
206 TRAPA32,TRAPA33,TRAPA34,TRAPA35,TRAPA36,TRAPA37,TRAPA38,TRAPA39,TRAPA40,TRAPA41,TRAPA42,TRAPA43,TRAPA44,TRAPA45,TRAPA46,TRAPA47,TRAPA48,TRAPA49,TRAPA50,TRAPA51,TRAPA52,TRAPA53,TRAPA54,TRAPA55,TRAPA56,TRAPA57,TRAPA58,TRAPA59,TRAPA60,TRAPA61,TRAPA62,TRAPA63,
207
Björn Stenberg191f4d22002-04-20 13:25:58 +0000208 /*** 64-71 IRQ0-7 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000209
210 IRQ0,IRQ1,IRQ2,IRQ3,IRQ4,IRQ5,IRQ6,IRQ7,
211
Björn Stenberg191f4d22002-04-20 13:25:58 +0000212 /*** 72 DMAC0 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000213
Björn Stenberg191f4d22002-04-20 13:25:58 +0000214 DEI0,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000215
Björn Stenberg191f4d22002-04-20 13:25:58 +0000216 /*** 73 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000217
218 UIE73,
219
Björn Stenberg191f4d22002-04-20 13:25:58 +0000220 /*** 74 DMAC1 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000221
222 DEI1,
223
Björn Stenberg191f4d22002-04-20 13:25:58 +0000224 /*** 75 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000225
226 UIE75,
227
Björn Stenberg191f4d22002-04-20 13:25:58 +0000228 /*** 76 DMAC2 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000229
230 DEI2,
231
Björn Stenberg191f4d22002-04-20 13:25:58 +0000232 /*** 77 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000233
234 UIE77,
235
Björn Stenberg191f4d22002-04-20 13:25:58 +0000236 /*** 78 DMAC3 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000237
Björn Stenberg191f4d22002-04-20 13:25:58 +0000238 DEI3,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000239
Björn Stenberg191f4d22002-04-20 13:25:58 +0000240 /*** 79 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000241
242 UIE79,
243
Björn Stenberg191f4d22002-04-20 13:25:58 +0000244 /*** 80-82 ITU0 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000245
Björn Stenberg191f4d22002-04-20 13:25:58 +0000246 IMIA0,IMIB0,OVI0,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000247
Björn Stenberg191f4d22002-04-20 13:25:58 +0000248 /*** 83 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000249
250 UIE83,
251
Björn Stenberg191f4d22002-04-20 13:25:58 +0000252 /*** 84-86 ITU1 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000253
Björn Stenberg191f4d22002-04-20 13:25:58 +0000254 IMIA1,IMIB1,OVI1,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000255
Björn Stenberg191f4d22002-04-20 13:25:58 +0000256 /*** 87 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000257
258 UIE87,
259
Björn Stenberg191f4d22002-04-20 13:25:58 +0000260 /*** 88-90 ITU2 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000261
Björn Stenberg191f4d22002-04-20 13:25:58 +0000262 IMIA2,IMIB2,OVI2,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000263
Björn Stenberg191f4d22002-04-20 13:25:58 +0000264 /*** 91 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000265
266 UIE91,
267
Björn Stenberg191f4d22002-04-20 13:25:58 +0000268 /*** 92-94 ITU3 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000269
Björn Stenberg191f4d22002-04-20 13:25:58 +0000270 IMIA3,IMIB3,OVI3,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000271
Björn Stenberg191f4d22002-04-20 13:25:58 +0000272 /*** 95 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000273
274 UIE95,
275
Björn Stenberg191f4d22002-04-20 13:25:58 +0000276 /*** 96-98 ITU4 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000277
Björn Stenberg191f4d22002-04-20 13:25:58 +0000278 IMIA4,IMIB4,OVI4,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000279
Björn Stenberg191f4d22002-04-20 13:25:58 +0000280 /*** 99 Reserved ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000281
282 UIE99,
283
Björn Stenberg191f4d22002-04-20 13:25:58 +0000284 /*** 100-103 SCI0 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000285
Björn Stenberg191f4d22002-04-20 13:25:58 +0000286 REI0,RXI0,TXI0,TEI0,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000287
Björn Stenberg191f4d22002-04-20 13:25:58 +0000288 /*** 104-107 SCI1 ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000289
Björn Stenberg191f4d22002-04-20 13:25:58 +0000290 REI1,RXI1,TXI1,TEI1,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000291
Björn Stenberg191f4d22002-04-20 13:25:58 +0000292 /*** 108 Parity Control Unit ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000293
Björn Stenberg191f4d22002-04-20 13:25:58 +0000294 UIE108,
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000295
Björn Stenberg191f4d22002-04-20 13:25:58 +0000296 /*** 109 AD Converter ***/
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000297
Björn Stenberg191f4d22002-04-20 13:25:58 +0000298 ADITI
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000299
Björn Stenberg191f4d22002-04-20 13:25:58 +0000300};
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000301
302
303void system_reboot (void)
Björn Stenberg191f4d22002-04-20 13:25:58 +0000304{
Jörg Hohensohn81e309d2004-03-13 16:45:18 +0000305 set_irq_level(HIGHEST_IRQ_LEVEL);
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000306
307 asm volatile ("ldc\t%0,vbr" : : "r"(0));
308
Jörg Hohensohn782e2372003-07-17 20:19:01 +0000309 PACR2 |= 0x4000; /* for coldstart detection */
Björn Stenberg191f4d22002-04-20 13:25:58 +0000310 IPRA = 0;
311 IPRB = 0;
312 IPRC = 0;
313 IPRD = 0;
314 IPRE = 0;
315 ICR = 0;
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000316
Björn Stenberg191f4d22002-04-20 13:25:58 +0000317 asm volatile ("jmp @%0; mov.l @%1,r15" : :
Linus Nielsen Feltzing72315c22002-06-26 22:39:22 +0000318 "r"(*(int*)0),"r"(4));
Björn Stenberg191f4d22002-04-20 13:25:58 +0000319}
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000320
321void UIE (unsigned int pc) /* Unexpected Interrupt or Exception */
Björn Stenberg191f4d22002-04-20 13:25:58 +0000322{
Björn Stenberg6eb77172002-05-24 15:22:33 +0000323 bool state = true;
Linus Nielsen Feltzingdb822182002-04-24 21:55:32 +0000324 unsigned int n;
Björn Stenberg6eb77172002-05-24 15:22:33 +0000325 char str[32];
Linus Nielsen Feltzingdb822182002-04-24 21:55:32 +0000326
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000327 asm volatile ("sts\tpr,%0" : "=r"(n));
Björn Stenberg9bcbe3f2003-06-29 15:09:01 +0000328
Felix Arendsb38c2d92002-06-24 11:35:13 +0000329 /* clear screen */
330 lcd_clear_display ();
Daniel Stenbergfba7a412002-09-16 06:51:43 +0000331#ifdef HAVE_LCD_BITMAP
Eric Linenberg038df5c2002-09-16 03:18:49 +0000332 lcd_setfont(FONT_SYSFIXED);
Daniel Stenbergfba7a412002-09-16 06:51:43 +0000333#endif
Felix Arendsb38c2d92002-06-24 11:35:13 +0000334 /* output exception */
Björn Stenbergdf194b02003-02-23 19:02:31 +0000335 n = (n - (unsigned)UIE0 - 4)>>2; /* get exception or interrupt number */
Björn Stenberg2dd18d32002-05-28 13:38:42 +0000336 snprintf(str,sizeof(str),"I%02x:%s",n,irqname[n]);
Björn Stenberg6eb77172002-05-24 15:22:33 +0000337 lcd_puts(0,0,str);
338 snprintf(str,sizeof(str),"at %08x",pc);
339 lcd_puts(0,1,str);
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000340
Felix Arendsb38c2d92002-06-24 11:35:13 +0000341#ifdef HAVE_LCD_BITMAP
342 lcd_update ();
343#endif
344
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000345 while (1)
Björn Stenberg191f4d22002-04-20 13:25:58 +0000346 {
Björn Stenberg6eb77172002-05-24 15:22:33 +0000347 volatile int i;
Linus Nielsen Feltzingfe6b82f2002-04-28 21:40:24 +0000348 led (state);
Björn Stenberg23820442002-05-13 12:29:34 +0000349 state = state?false:true;
Linus Nielsen Feltzing40c1c222002-04-29 14:23:21 +0000350
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000351 for (i = 0; i < 240000; ++i);
Björn Stenberg9bcbe3f2003-06-29 15:09:01 +0000352
353 /* try to restart firmware if ON is pressed */
354#ifdef HAVE_LCD_CHARCELLS
355 if (!(PADR & 0x20))
356 rolo_load("/archos.mod");
357#else
358 if (!(PBDR & PBDR_BTN_ON))
359 rolo_load("/ajbrec.ajz");
360#endif
Björn Stenberg191f4d22002-04-20 13:25:58 +0000361 }
362}
Björn Stenbergd9eb5c72002-03-28 15:09:10 +0000363
364asm (
Björn Stenberg191f4d22002-04-20 13:25:58 +0000365 "_UIE0:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
366 "_UIE1:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
367 "_UIE2:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
368 "_UIE3:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
369 "_UIE4:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
370 "_UIE5:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
371 "_UIE6:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
372 "_UIE7:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
373 "_UIE8:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
374 "_UIE9:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
375 "_UIE10:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
376 "_UIE11:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
377 "_UIE12:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
378 "_UIE13:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
379 "_UIE14:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
380 "_UIE15:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
381 "_UIE16:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
382 "_UIE17:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
383 "_UIE18:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
384 "_UIE19:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
385 "_UIE20:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
386 "_UIE21:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
387 "_UIE22:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
388 "_UIE23:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
389 "_UIE24:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
390 "_UIE25:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
391 "_UIE26:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
392 "_UIE27:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
393 "_UIE28:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
394 "_UIE29:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
395 "_UIE30:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
396 "_UIE31:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
397 "_UIE32:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
398 "_UIE33:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
399 "_UIE34:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
400 "_UIE35:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
401 "_UIE36:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
402 "_UIE37:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
403 "_UIE38:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
404 "_UIE39:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
405 "_UIE40:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
406 "_UIE41:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
407 "_UIE42:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
408 "_UIE43:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
409 "_UIE44:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
410 "_UIE45:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
411 "_UIE46:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
412 "_UIE47:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
413 "_UIE48:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
414 "_UIE49:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
415 "_UIE50:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
416 "_UIE51:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
417 "_UIE52:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
418 "_UIE53:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
419 "_UIE54:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
420 "_UIE55:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
421 "_UIE56:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
422 "_UIE57:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
423 "_UIE58:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
424 "_UIE59:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
425 "_UIE60:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
426 "_UIE61:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
427 "_UIE62:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
428 "_UIE63:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
429 "_UIE64:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
430 "_UIE65:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
431 "_UIE66:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
432 "_UIE67:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
433 "_UIE68:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
434 "_UIE69:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
435 "_UIE70:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
436 "_UIE71:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
437 "_UIE72:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
438 "_UIE73:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
439 "_UIE74:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
440 "_UIE75:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
441 "_UIE76:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
442 "_UIE77:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
443 "_UIE78:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
444 "_UIE79:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
445 "_UIE80:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
446 "_UIE81:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
447 "_UIE82:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
448 "_UIE83:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
449 "_UIE84:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
450 "_UIE85:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
451 "_UIE86:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
452 "_UIE87:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
453 "_UIE88:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
454 "_UIE89:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
455 "_UIE90:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
456 "_UIE91:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
457 "_UIE92:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
458 "_UIE93:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
459 "_UIE94:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
460 "_UIE95:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
461 "_UIE96:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
462 "_UIE97:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
463 "_UIE98:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
464 "_UIE99:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
465 "_UIE100:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
466 "_UIE101:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
467 "_UIE102:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
468 "_UIE103:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
469 "_UIE104:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
470 "_UIE105:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
471 "_UIE106:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
472 "_UIE107:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
473 "_UIE108:\tbsr\t_UIE\n\tmov.l\t@r15+,r4\t\n"
474 "_UIE109:\tbsr\t_UIE\n\tmov.l\t@r15+,r4");
Linus Nielsen Feltzing951fe182002-05-29 09:11:04 +0000475
476void system_init(void)
477{
478 /* Disable all interrupts */
479 IPRA = 0;
480 IPRB = 0;
481 IPRC = 0;
482 IPRD = 0;
483 IPRE = 0;
484
485 /* NMI level low, falling edge on all interrupts */
486 ICR = 0;
Linus Nielsen Feltzing8ca44dc2002-09-05 07:22:37 +0000487
Jörg Hohensohn4cee7402004-03-13 11:44:48 +0000488 /* Enable burst and RAS down mode on DRAM */
489 DCR |= 0x5000;
Linus Nielsen Feltzinga2c0afb2002-09-05 10:21:48 +0000490
491 /* Activate Warp mode (simultaneous internal and external mem access) */
492 BCR |= 0x2000;
Linus Nielsen Feltzing266f4112003-10-27 10:30:12 +0000493
494 /* Bus state controller initializations. These are only necessary when
495 running from flash. The correct settings for player models are not
496 verified, so we only do this for the recorder. */
497#ifdef HAVE_RECORDING
498 WCR1 = 0x4000; /* Long wait states for CS6 (ATA), short for the rest. */
499 WCR3 = 0x8000; /* WAIT is pulled up, 1 state inserted for CS6 */
500#endif
Linus Nielsen Feltzing951fe182002-05-29 09:11:04 +0000501}