Newer
Older
uwuboot / source / arm9 / start.s
#include "mem_map.h"
#include "version.h"

.arm
.arch armv5te
.fpu softvfp

.global _start
.global _init

.type _start STT_FUNC
.type _init STT_FUNC

.extern setupSystem
.extern __libc_init_array
.extern heap_init
.extern main
.extern __bss_start__
.extern __bss_end__

.section .init

_start:

	b skip_pool
	
	// 
	.string "3DS BOOTLOADER  "
	.word	BOOTLOADER_VERSION
	.align

skip_pool:
	msr cpsr_c, #0xDF           @ Disable all interrupts, system mode
	ldr sp, =(A9_STUB_ENTRY-8)

	bl setupSystem

	ldr r0, =(CORE_SYNC_ID & 0xFFFFFFF0)
	mov r1, #0
	str r1, [r0, #0x8]          @ Clear arm9 communication fields
	str r1, [r0, #0xC]

	ldr r0, =__bss_start__
	ldr r1, =__bss_end__
	sub r1, r1, r0
	mov r2, #0
	loop_bss_clear:
		str r2, [r0], #4
		subs r1, r1, #4
		bne loop_bss_clear

	blx __libc_init_array
	blx heap_init
	blx main
	b .                         @ If main ever returns loop forever


@ needed by libc
_init:
	bx lr