aboutsummaryrefslogtreecommitdiff
path: root/slof/ofw.S
diff options
context:
space:
mode:
Diffstat (limited to 'slof/ofw.S')
-rw-r--r--slof/ofw.S97
1 files changed, 7 insertions, 90 deletions
diff --git a/slof/ofw.S b/slof/ofw.S
index 38b447a..dcd4bdd 100644
--- a/slof/ofw.S
+++ b/slof/ofw.S
@@ -11,102 +11,19 @@
*****************************************************************************/
#include <cpu.h>
+#include <xvect.h>
.section ".slof.loader","ax"
- # get our address
-
-.base:
- bcl 20,31,0f
- .align 3
-.st: .quad _slof_text-.base
-.stl: .quad _slof_text_size
-.sd: .quad _slof_data-.base
-.sdl: .quad _slof_data_size
-.sbl: .quad _slof_bss_size
-0:
- mr r16,r3 # ROM Base
- mfspr r17, HSPRG1 # Fixme, will be done in pcd
- mflr r31
- subi r31,r31,4
-
- # copy paflof text
-
- ld r3,.st-.base(r31)
- add r3,r3,r31
- lis r4,_slof_text@h # Addr of engine code
- ori r4,r4,_slof_text@l
- ld r5,.stl-.base(31)
- bl .copy
-
- lis r3,_slof_text@h # Addr of engine code
- ori r3,r3,_slof_text@l
- ld r4,.stl-.base(r31)
- bl .flush
-
- # copy paflof data
-
- ld r3,.sd-.base(31)
- add r3,r3,r31
- lis r4,_slof_data@h # Addr of engine data
- ori r4,r4,_slof_data@l
- ld r5,.sdl-.base(r31)
- bl .copy
-
- lis r3,_slof_data@h # Addr of engine data
- ori r3,r3,_slof_data@l
- ld r4,.sdl-.base(r31)
- bl .flush
-
- # zero paflof bss
-
- lis r3,_slof_bss@h # Addr of engine bss
- ori r3,r3,_slof_bss@l
- ld r4,.sbl-.base(r31)
- bl .zero
-
- lis r3,_slof_bss@h # Addr of engine bss
- ori r3,r3,_slof_bss@l
- ld r4,.sbl-.base(r31)
- bl .flush
+ mr r16, r4 # ROM Base
+ mfspr r17, HSPRG1 # Fixme, will be done in pcd
# fill in handler address
- lis r3,_slof_text@h
- ori r3,r3,_slof_text@l
- ld r3,0(r3)
- std r3,0x2ff0(0)
+ lis r3, _slof_text@h
+ ori r3, r3, _slof_text@l
+ ld r3, 0(r3)
+ std r3, XVECT_M_HANDLER(0)
# GO!
-
ba 0x100
-
-
-.zero: # zero from r3 size r4
- subi r3,r3,8
- addi r4,r4,7
- srwi r4,r4,3
- mtctr r4
- li r5,0
-0:
- stdu r5,8(r3)
- bdnz 0b
-
- blr
-
-.copy: # copy from 3 to 4 size 5
- subi r3,r3,8
- subi r4,r4,8
- addi r5,r5,7
- srwi r5,r5,3
- mtctr r5
-0:
- ldu r5,8(r3)
- stdu r5,8(r4)
- bdnz 0b
-
- blr
-
-.flush: # flush at 3 size 4
- FLUSH_CACHE(r3, r4)
- blr