1 KERNEL_BASE = 0x80000000
3 interrupt_vector_table:
6 b SyscallHandler @ SWI instruction
13 .comm stack, 0x10000 @ ; 64KiB Stack
17 ldr r0, _ptr_kerneltable0
18 mcr p15, 0, r0, c2, c0, 1 @ Set TTBR1 to r0
20 mcr p15, 0, r0, c2, c0, 2 @ Set TTCR to 1 (50/50 split)
22 mrc p15, 0, r0, c1, c0, 0
24 mcr p15, 0, r0, c1, c0, 0
26 ldr sp, =stack+0x10000 @ Set up stack
28 1: b 1b @ Infinite loop
30 .long kernel_table0-0x80000000
40 .long 0x00000002 @ Identity map the first 4 MiB
44 .rept 0xF00 - 0x800 - 4
47 .long hwmap_table_0 + 0x000 - KERNEL_BASE + 1
48 .long hwmap_table_0 + 0x400 - KERNEL_BASE + 1
49 .long hwmap_table_0 + 0x800 - KERNEL_BASE + 1
50 .long hwmap_table_0 + 0xC00 - KERNEL_BASE + 1
51 .rept 0xFF8 - 0xF00 - 4
54 .long kernel_table1_map + 0x000 - KERNEL_BASE + 1
55 .long kernel_table1_map + 0x400 - KERNEL_BASE + 1
56 .long kernel_table1_map + 0x800 - KERNEL_BASE + 1
57 .long kernel_table1_map + 0xC00 - KERNEL_BASE + 1
58 .long kernel_table0 - KERNEL_BASE + 2 @ Sure it maps too much, but fuck that
59 .rept 0x1000 - 0xFF8 - 5
63 .globl kernel_table1_map
68 .long hwmap_table_0 - KERNEL_BASE + (1 << 4) + 3
69 .rept 0xFF8/4 - 0xF00/4 - 1
72 .long kernel_table1_map - KERNEL_BASE + (1 << 4) + 3
77 .long 0x16000000 + (1 << 4) + 3 @ Serial Port