.text
	
	.set STARTUP_ENTRY, 12
	.set HID0, 0x3f0

	.equ	IBAT0L, 0x211
	.equ	IBAT0U, 0x210
	.equ	IBAT1L, 0x213
	.equ	IBAT1U, 0x212
	.equ	IBAT2L, 0x215
	.equ	IBAT2U, 0x214
	.equ	IBAT3L, 0x217
	.equ	IBAT3U, 0x216
	.equ	IBAT4L, 0x231
	.equ	IBAT4U, 0x230
	.equ	IBAT5L, 0x233
	.equ	IBAT5U, 0x232
	.equ	IBAT6L, 0x235
	.equ	IBAT6U, 0x234
	.equ	IBAT7L, 0x237
	.equ	IBAT7U, 0x236

	.equ	DBAT0L, 0x219
	.equ	DBAT0U, 0x218
	.equ	DBAT1L, 0x21B
	.equ	DBAT1U, 0x21A
	.equ	DBAT2L, 0x21D
	.equ	DBAT2U, 0x21C
	.equ	DBAT3L, 0x21F
	.equ	DBAT3U, 0x21E
	.equ	DBAT4L, 0x239
	.equ	DBAT4U, 0x238
	.equ	DBAT5L, 0x23B
	.equ	DBAT5U, 0x23A
	.equ	DBAT6L, 0x23D
	.equ	DBAT6U, 0x23C
	.equ	DBAT7L, 0x23F
	.equ	DBAT7U, 0x23E

	.globl	_start
	
_start:

	.ascii	"["
	.ascii	" default_image=0x1f0000"
	.ascii	" attr=\"?+bigendian\""
	.ascii	" len=0x100"
	.asciz	"]"
	
	# Align to 4 bytes
	.byte	0

	.align	2
	.ascii	"boot"
	
   	bl		1f		# get load base address (+4)
1:

	#clear all bats 

	xor     %r0, %r0, %r0
    #mtspr   DBAT0U, %r0
    #mtspr   DBAT0L, %r0 
    mtspr   DBAT1U, %r0
    mtspr   DBAT1L, %r0 
    mtspr   DBAT2U, %r0 
    mtspr   DBAT2L, %r0 
    mtspr   DBAT3U, %r0 
    mtspr   DBAT3L, %r0 
    mtspr   DBAT4U, %r0
    mtspr   DBAT4L, %r0 
    mtspr   DBAT5U, %r0
    mtspr   DBAT5L, %r0 
    mtspr   DBAT6U, %r0 
    mtspr   DBAT6L, %r0 
    mtspr   DBAT7U, %r0 
    mtspr   DBAT7L, %r0 
    #mtspr   IBAT0U, %r0 
    #mtspr   IBAT0L, %r0 
    mtspr   IBAT1U, %r0 
    mtspr   IBAT1L, %r0
    mtspr   IBAT2U, %r0
    mtspr   IBAT2L, %r0
    mtspr   IBAT3U, %r0
    mtspr   IBAT3L, %r0
    mtspr   IBAT4U, %r0 
    mtspr   IBAT4L, %r0 
    mtspr   IBAT5U, %r0 
    mtspr   IBAT5L, %r0
    mtspr   IBAT6U, %r0
    mtspr   IBAT6L, %r0
    mtspr   IBAT7U, %r0
    mtspr   IBAT7L, %r0
    sync

	# disable data cache 

    mfspr   %r3, HID0
    lis 	%r4, 0
    ori		%r4, %r4, (1 << 14) | (1 << 12)    #HID0_DCE|HID0_DLOCK
    andc    %r3, %r3, %r4
    ori 	%r4, %r3, (1 << 10) # HID0_DCI
    sync
    mtspr   HID0, %r4    # sets invalidate, clears enable and lock
    sync
    mtspr   HID0, %r3    # clears invalidate 

	mflr	%r31
	lwz		%r31,STARTUP_ENTRY+0x100-4(%r31)	# get start addr
	mtlr	%r31
	blr											# transfer into startup
