fb28d33b6f5142b383a8f42335a8330d0d70da78
[tpg/acess2.git] / Kernel / arch / arm7 / start.s
1 KERNEL_BASE =   0x80000000
2
3 .section .init
4 interrupt_vector_table:
5         b _start @ Reset
6         b .
7         b SyscallHandler @ SWI instruction
8         b . 
9         b .
10         b .
11         b .
12         b .
13
14 .globl _start
15 _start:
16         ldr r0, =kernel_table0-KERNEL_BASE
17         mcr p15, 0, r0, c2, c0, 1       @ Set TTBR1 to r0
18         mcr p15, 0, r0, c2, c0, 0       @ Set TTBR0 to r0 too (for identity)
19
20 @       mov r0, #1
21 @       mcr p15, 0, r0, c2, c0, 2       @ Set TTCR to 1 (50/50 split)
22
23 @       mrc p15, 0, r0, c1, c0, 0
24         orr r0, r0, #1
25 @       orr r0, r0, #1 << 23
26 @       mcr p15, 0, r0, c1, c0, 0
27
28         ldr sp, =stack+0x10000  @ Set up stack
29         ldr r0, =kmain
30         mov pc, r0
31 1:      b 1b    @ Infinite loop
32 _ptr_kmain:
33         .long kmain
34
35 .comm stack, 0x10000    @ ; 64KiB Stack
36
37 SyscallHandler:
38         b .
39 .section .padata
40 .globl kernel_table0
41
42 kernel_table0:
43         .long 0x00000002        @ Identity map the first 4 MiB
44         .rept 0x801
45                 .long 0
46         .endr
47         .long 0x00000002        @ Identity map the first 4 MiB
48         .long 0x00100002        @ 
49         .long 0x00200002        @ 
50         .long 0x00300002        @ 
51         .rept 0xF00 - 0x800 - 4
52                 .long 0
53         .endr
54         .long hwmap_table_0 + 0x000 - KERNEL_BASE + 1
55         .long hwmap_table_0 + 0x400 - KERNEL_BASE + 1
56         .long hwmap_table_0 + 0x800 - KERNEL_BASE + 1
57         .long hwmap_table_0 + 0xC00 - KERNEL_BASE + 1
58         .rept 0xFF8 - 0xF00 - 4
59                 .long 0
60         .endr
61         .long kernel_table1_map + 0x000 - KERNEL_BASE + 1
62         .long kernel_table1_map + 0x400 - KERNEL_BASE + 1
63         .long kernel_table1_map + 0x800 - KERNEL_BASE + 1
64         .long kernel_table1_map + 0xC00 - KERNEL_BASE + 1
65         .long kernel_table0 - KERNEL_BASE + 2   @ Sure it maps too much, but fuck that
66         .rept 0x1000 - 0xFF8 - 5
67                 .long 0
68         .endr
69
70 .globl kernel_table1_map
71 kernel_table1_map:
72         .rept 0xF00/4
73                 .long 0
74         .endr
75         .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3
76         .rept 0xFF8/4 - 0xF00/4 - 1
77                 .long 0
78         .endr
79         .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3
80         .long 0
81
82 .globl hwmap_table_0
83 hwmap_table_0:
84         .long 0x16000000 + (1 << 4) + 3 @ Serial Port
85         .rept 1024 - 1
86                 .long 0
87         .endr
88         

UCC git Repository :: git.ucc.asn.au