+
+ bne++ start64 ; Skip following if 64-bit...
+
+ mfspr r6,hid0 ; Get the HID0
+ rlwinm r6,r6,0,sleep+1,doze-1 ; Remove any vestiges of sleep
+ mtspr hid0,r6 ; Set the insominac HID0
+ isync
+
+; Clear the BAT registers
+
+ li r9,0 ; Clear out a register
+ sync
+ isync
+ mtdbatu 0,r9 ; Invalidate maps
+ mtdbatl 0,r9 ; Invalidate maps
+ mtdbatu 1,r9 ; Invalidate maps
+ mtdbatl 1,r9 ; Invalidate maps
+ mtdbatu 2,r9 ; Invalidate maps
+ mtdbatl 2,r9 ; Invalidate maps
+ mtdbatu 3,r9 ; Invalidate maps
+ mtdbatl 3,r9 ; Invalidate maps
+ sync
+ isync
+ mtibatu 0,r9 ; Invalidate maps
+ mtibatl 0,r9 ; Invalidate maps
+ mtibatu 1,r9 ; Invalidate maps
+ mtibatl 1,r9 ; Invalidate maps
+ mtibatu 2,r9 ; Invalidate maps
+ mtibatl 2,r9 ; Invalidate maps
+ mtibatu 3,r9 ; Invalidate maps
+ mtibatl 3,r9 ; Invalidate maps
+ sync
+ isync
+ b startcommon ; Go join up the common start routine
+
+start64: lis r5,hi16(startcommon) ; Get top of address of continue point
+ mfspr r6,hid0 ; Get the HID0
+ ori r5,r5,lo16(startcommon) ; Get low of address of continue point
+ lis r9,hi16(MASK(MSR_HV)) ; ?
+ lis r20,hi16(dozem|napm|sleepm) ; Get mask of power saving features
+ li r7,MSR_VM_OFF ; Get real mode MSR, 64-bit off
+ sldi r9,r9,32 ; Slide into position
+ sldi r20,r20,32 ; Slide power stuff into position
+ or r9,r9,r7 ; Form initial MSR
+ andc r6,r6,r20 ; Remove any vestiges of sleep
+ isync
+ mtspr hid0,r6 ; Set the insominac HID0
+ mfspr r6,hid0 ; Get it
+ mfspr r6,hid0 ; Get it
+ mfspr r6,hid0 ; Get it
+ mfspr r6,hid0 ; Get it
+ mfspr r6,hid0 ; Get it
+ mfspr r6,hid0 ; Get it
+ isync
+ mtsrr0 r5 ; Set the continue point
+ mtsrr1 r9 ; Set our normal disabled MSR
+ rfid ; Tally ho...