/* first attempt */
start:
	/* zero out all the registers */
	mov		r2, #0xffffffff
	mov		r3, #0xffffffff
	mov		r4, #0xffffffff
	mov		r5, #0xffffffff
	mov		r6, #0xffffffff
	mov		r7, #0xffffffff
	mov		r8, #0xffffffff
	mov		r9, #0xffffffff
	mov		r10, #0xffffffff
	mov		r11, #0xffffffff
	mov		r12, #0xffffffff
	mov		r13, #0xffffffff

reset:
	mov		r0, #(end - start)
	mov		r1, #64

slam:
	/* pick a spot and slam it */
	/* grow outwards from the core of the program, alternating forward then back */
	add		r14, pc, r0
	stmia	r14!, { r2-r13 }
	stmia	r14, { r2-r13 }
	sub		r14, pc, r0
	stmia	r14!, { r2-r13 }
	stmia	r14, { r2-r13 }
	add		r0, #((31 * 4))
	subs	r1, #1

	bgt		slam
	
relocate:
	sub		r0, pc, #(. + 8 - start)
	add		r1, r0, #(end - start)

	ldr		r14, =(5163*4)
	add		r14, r0, r14 	/* relocate ourself forward */
	and		r14, #(~0x80000000) /* dont get close to device space */

_relloop:
	ldr		r2, [r0], #4	
	str		r2, [r14], #4
	cmp		r0, r1
	bne		_relloop

	mov		r2, #0xffffffff
	
nextslam:
	/* branch to start in the relocated spot */
	sub		pc, r1, #(end - reset)

literals:
.ltorg

end:

