port-work; won't compile or even work
[ppcskel.git] / realmode.S
1 /*
2         BootMii - a Free Software replacement for the Nintendo/BroadOn bootloader.
3         Requires mini.
4         
5 Copyright (C) 2008              Segher Boessenkool <segher@kernel.crashing.org>
6
7 # This code is licensed to you under the terms of the GNU GPL, version 2;
8 # see file COPYING or http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
9 */
10
11 #define IBAT0U          528
12 #define IBAT0L          529
13 #define IBAT1U          530
14 #define IBAT1L          531
15 #define IBAT2U          532
16 #define IBAT2L          533
17 #define IBAT3U          534
18 #define IBAT3L          535
19 #define IBAT4U          560
20 #define IBAT4L          561
21 #define IBAT5U          562
22 #define IBAT5L          563
23 #define IBAT6U          564
24 #define IBAT6L          565
25 #define IBAT7U          566
26 #define IBAT7L          567
27
28 #define DBAT0U          536
29 #define DBAT0L          537
30 #define DBAT1U          538
31 #define DBAT1L          539
32 #define DBAT2U          540
33 #define DBAT2L          541
34 #define DBAT3U          542
35 #define DBAT3L          543
36 #define DBAT4U          568
37 #define DBAT4L          569
38 #define DBAT5U          570
39 #define DBAT5L          571
40 #define DBAT6U          572
41 #define DBAT6L          573
42 #define DBAT7U          574
43 #define DBAT7L          575
44
45
46         .text
47         .section .realmode,"ax",@progbits
48         .extern _start
49         .align 2
50         .globl _realmode_vector
51
52 _realmode_vector:
53         // HID0 = 00110c64:
54         // bus checkstops off, sleep modes off,
55         // caches off, caches invalidate,
56         // store gathering off, enable data cache
57         // flush assist, enable branch target cache,
58         // enable branch history table
59         lis 3,0x0011 ; ori 3,3,0x0c64 ; mtspr 1008,3 ; isync
60
61         // MSR = 00002000 (FP on)
62         li 4,0x2000 ; mtmsr 4
63
64         // HID0 |= 0000c000 (caches on)
65         ori 3,3,0xc000 ; mtspr 1008,3 ; isync
66
67         // clear all BATs
68         li 0,0
69         mtspr 528,0 ; mtspr 530,0 ; mtspr 532,0 ; mtspr 534,0 // IBATU 0..3
70         mtspr 536,0 ; mtspr 538,0 ; mtspr 540,0 ; mtspr 542,0 // DBATU 0..3
71         mtspr 560,0 ; mtspr 562,0 ; mtspr 564,0 ; mtspr 566,0 // IBATU 4..7
72         mtspr 568,0 ; mtspr 570,0 ; mtspr 572,0 ; mtspr 574,0 // DBATU 4..7
73         isync
74
75         // clear all SRs
76         lis 0,0x8000
77         mtsr  0,0 ; mtsr  1,0 ; mtsr  2,0 ; mtsr  3,0
78         mtsr  4,0 ; mtsr  5,0 ; mtsr  6,0 ; mtsr  7,0
79         mtsr  8,0 ; mtsr  9,0 ; mtsr 10,0 ; mtsr 11,0
80         mtsr 12,0 ; mtsr 13,0 ; mtsr 14,0 ; mtsr 15,0
81         isync
82
83         // set [DI]BAT0 for 256MB@80000000,
84         // real 00000000, WIMG=0000, R/W
85         li 3,2 ; lis 4,0x8000 ; ori 4,4,0x1fff
86         mtspr IBAT0L,3 ; mtspr IBAT0U,4 ; mtspr DBAT0L,3 ; mtspr DBAT0U,4 ; isync
87
88         // set [DI]BAT4 for 256MB@90000000,
89         // real 10000000, WIMG=0000, R/W
90         addis 3,3,0x1000 ; addis 4,4,0x1000
91         mtspr IBAT4L,3 ; mtspr IBAT4U,4 ; mtspr DBAT4L,3 ; mtspr DBAT4U,4 ; isync
92
93         // set DBAT1 for 256MB@c0000000,
94         // real 00000000, WIMG=0101, R/W
95         li 3,0x2a ; lis 4,0xc000 ; ori 4,4,0x1fff
96         mtspr DBAT1L,3 ; mtspr DBAT1U,4 ; isync
97
98         // set DBAT5 for 256MB@d0000000,
99         // real 10000000, WIMG=0101, R/W
100         addis 3,3,0x1000 ; addis 4,4,0x1000
101         mtspr DBAT5L,3 ; mtspr DBAT5U,4 ; isync
102
103         // enable [DI]BAT4-7 in HID4
104         lis 3, 0x8200
105         mtspr 1011,3
106
107         // set MSR[DR:IR] = 11, jump to _start
108         lis 3,_start@h ; ori 3,3,_start@l ; mtsrr0 3
109
110         mfmsr 3 ; ori 3,3,0x30 ; mtsrr1 3
111         rfi
112