3e69c82ae7590dc3c5c67fd0aaa670adf16c2023
[reactos.git] / reactos / boot / freeldr / bootsect / ofwboot.s
1 .section .text
2
3 _start:
4 .long 0xe00000 + 12
5 .long 0
6 .long 0
7
8 .globl _begin
9 _begin:
10 sync
11 isync
12
13 lis %r1,stack@ha
14 addi %r1,%r1,stack@l
15 addi %r1,%r1,16384 - 0x10
16
17 /* Store ofw call addr */
18 mr %r21,%r5
19 lis %r10,0xe00000@ha
20 stw %r5,ofw_call_addr - _start@l(%r10)
21
22 lis %r3,0xe00000@ha
23 addi %r3,%r3,freeldr_banner - _start
24
25 bl ofw_print_string
26
27 bl ofw_print_eol
28
29 /* Claim enough bytes to place freeldr at 0x8000 */
30 lis %r3,0x8000@ha
31 addi %r3,%r3,0x8000@l
32
33 lis %r4,_binary_freeldr_tmp_end@ha
34 addi %r4,%r4,_binary_freeldr_tmp_end@l
35 lis %r5,_binary_freeldr_tmp_start@ha
36 addi %r5,%r5,_binary_freeldr_tmp_start@l
37 sub %r4,%r4,%r5
38
39 xor %r5,%r5,%r5
40 li %r5,0x1000
41
42 bl ofw_claim
43
44 lis %r4,_binary_freeldr_tmp_end@ha
45 addi %r4,%r4,_binary_freeldr_tmp_end@l
46 lis %r3,_binary_freeldr_tmp_start@ha
47 addi %r3,%r3,_binary_freeldr_tmp_start@l
48
49 lis %r5,0x8000@ha
50 addi %r5,%r5,0x8000@l
51
52 bl ofw_dumpregs
53 bl copy_bits
54 bl zero_registers
55
56 /* Zero CTR */
57 mtcr %r31
58
59 lis %r3,0x8000@ha
60 addi %r3,%r3,0x8000@l
61
62 mtlr %r3
63
64 lis %r3,call_ofw@ha
65 addi %r3,%r3,call_ofw - _start
66
67 b call_freeldr
68
69 zero_registers:
70 xor %r2,%r2,%r2
71 mr %r0,%r2
72 mr %r3,%r2
73
74 mr %r4,%r2
75 mr %r5,%r2
76 mr %r6,%r2
77 mr %r7,%r2
78
79 mr %r8,%r2
80 mr %r9,%r2
81 mr %r10,%r2
82 mr %r11,%r2
83
84 mr %r12,%r2
85 mr %r13,%r2
86 mr %r14,%r2
87 mr %r15,%r2
88
89 mr %r12,%r2
90 mr %r13,%r2
91 mr %r14,%r2
92 mr %r15,%r2
93
94 mr %r16,%r2
95 mr %r17,%r2
96 mr %r18,%r2
97 mr %r19,%r2
98
99 mr %r20,%r2
100 mr %r21,%r2
101 mr %r22,%r2
102 mr %r23,%r2
103
104 mr %r24,%r2
105 mr %r25,%r2
106 mr %r26,%r2
107 mr %r27,%r2
108
109 mr %r28,%r2
110 mr %r29,%r2
111 mr %r30,%r2
112 mr %r31,%r2
113
114 blr
115
116 .org 0x1000
117 freeldr_banner:
118 .ascii "ReactOS OpenFirmware Boot Program\r\n\0"
119
120 freeldr_halt:
121 .ascii "ReactOS OpenFirmware Boot Program Halting\r\n\0"
122
123 ofw_memory_size:
124 .long 0
125 .long 0
126 .long 0
127 .long 0
128
129 .org 0x2000
130 stack:
131 .space 0x4000
132