work in progress on ppc port
[newos.git] / boot / ppc / stage1.S
bloba66ca1c809361a4592562214596e36e5ce153fbb
1 /*
2 ** Copyright 2001, Travis Geiselbrecht. All rights reserved.
3 ** Distributed under the terms of the NewOS License.
4 */
6 #define BASE 0x100000
7 #define BOOTDIR_BASE (BASE + 0x1000)
8 #define STAGE2_BOOTDIR_ENTRY    (BOOTDIR_BASE + 0x80)
9 #define STAGE2_BOOTDIR_PAGE     (STAGE2_BOOTDIR_ENTRY + 0x60)
10 #define STAGE2_OFFSET           (STAGE2_BOOTDIR_ENTRY + 0x74)
12 .text
13 .globl _start
14 _start:
15         lis             1,tempstack_end@ha              /* load the new stack */
16         ori             1,1,tempstack_end@l
18         /* load the base of the bootdir */
19         lis             8,BOOTDIR_BASE@ha
20         ori             8,8,BOOTDIR_BASE@l
22         /* load the offset the stage2 will start into the bootdir */
23         lis             9,STAGE2_BOOTDIR_PAGE@ha
24         ori             9,9,STAGE2_BOOTDIR_PAGE@l
25         lwz             9,0(9)
26         mulli   9,9,4096
28         /* load the offset into that page the stage2 entry point will be */
29         lis             10,STAGE2_OFFSET@ha
30         ori             10,10,STAGE2_OFFSET@l
31         lwz             10,0(10)
33         /* add them all together */
34         add             11,8,9
35         add             11,11,10
37         /* jump there */
38         mtlr    11
39         blr
41 .align 4
42 tempstack:
43         .skip 0x800
44 tempstack_end:
46 .data
47 #include "build/ppc/boot/final.asminclude"