summaryrefslogtreecommitdiff
path: root/arm7/asm/crt0.s
blob: 026359986edcb60288c75359a43a6ec1967be44a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
	.include "asm/macros.inc"
	.include "global.inc"
	.global _start_AutoloadDoneCallback

	.section .text
	arm_func_start _start

_start:
	mov	ip, #67108864	; 0x4000000
	str	ip, [ip, #520]	; 0x208
	ldr	r1, _23800cc
	mov	r0, #58720256	; 0x3800000
	cmp	r0, r1
	movpl	r1, r0
	ldr	r2, _23800d0
	mov	r0, #0
_02380020:
	cmp	r1, r2
	stmltia	r1!, {r0}
	blt	_02380020
	mov	r0, #19
	msr	CPSR_c, r0
	ldr	sp, _23800d4
	mov	r0, #18
	msr	CPSR_c, r0
	ldr	r0, _23800d8
	mov	sp, r0
	ldr	r1, _23800dc
	sub	r1, r0, r1
	mov	r0, #31
	msr	CPSR_fsxc, r0
	sub	sp, r1, #4
	ldr	r0, _23800e0
	ldr	r1, _23800e4
	add	r2, r1, #352	; 0x160
_02380068:
	ldr	r3, [r0], #4
	str	r3, [r1], #4
	cmp	r1, r2
	bmi	_02380068
	ldr	r0, _23800e8
	add	r2, r1, #32
_02380080:
	ldr	r3, [r0], #4
	str	r3, [r1], #4
	cmp	r1, r2
	bmi	_02380080
	bl	do_autoload
	ldr	r0, _23800ec
	ldr	r1, [r0, #12]
	ldr	r2, [r0, #16]
	mov	r0, #0
_023800a4:
	cmp	r1, r2
	strcc	r0, [r1], #4
	bcc	_023800a4
	bl	detect_main_memory_size
	ldr	r1, _23800f0
	ldr	r0, _23800f4
	str	r0, [r1]
	ldr	r1, _23800f8
	ldr	lr, _23800fc
	bx	r1
_23800cc:	.word SDK_STATIC_BSS_START
_23800d0:	.word 0x0380ff00
_23800d4:	.word 0x0380ffc0
_23800d8:	.word 0x0380ff80
_23800dc:	.word 0x00000400
_23800e0:	.word 0x023fe940
_23800e4:	.word 0x027ffa80
_23800e8:	.word 0x023fe904
_23800ec:	.word _start_ModuleParams
_23800f0:	.word 0x0380fffc
_23800f4:	.word OS_IrqHandler
_23800f8:	.word NitroSpMain
_23800fc:	.word 0xffff0000
	arm_func_end _start

	arm_func_start do_autoload
do_autoload:
	ldr	r0, _2380154
	ldr	r1, [r0]
	ldr	r2, [r0, #4]
	ldr	r3, [r0, #8]
_02380110:
	cmp	r1, r2
	beq	_02380150
	ldr	r4, [r1], #4
	ldr	r5, [r1], #4
	add	r6, r4, r5
_02380124:
	cmp	r4, r6
	ldrmi	r7, [r3], #4
	strmi	r7, [r4], #4
	bmi	_02380124
	ldr	r5, [r1], #4
	add	r6, r4, r5
	mov	r7, #0
_02380140:
	cmp	r4, r6
	strcc	r7, [r4], #4
	bcc	_02380140
	beq	_02380110
_02380150:
	b	_start_AutoloadDoneCallback
_2380154:	.word _start_ModuleParams
	arm_func_end do_autoload

	arm_func_start _start_AutoloadDoneCallback
_start_AutoloadDoneCallback:
	bx	lr
	arm_func_end _start_AutoloadDoneCallback

	arm_func_start detect_main_memory_size
detect_main_memory_size:
	mov	r0, #1
	mov	r1, #0
	ldr	r2, _2380194
	sub	r3, r2, #4194304	; 0x400000
_0238016c:
	strh	r1, [r2]
	ldrh	ip, [r3]
	cmp	r1, ip
	movne	r0, #2
	bne	_0238018c
	add	r1, r1, #1
	cmp	r1, #2
	bne	_0238016c
_0238018c:
	strh	r0, [r2]
	bx	lr
_2380194:	.word 0x027ffffa
	arm_func_end detect_main_memory_size

_start_ModuleParams:
	.word SDK_AUTOLOAD_LIST
	.word SDK_AUTOLOAD_LIST_END
	.word SDK_AUTOLOAD_START
	.word SDK_STATIC_BSS_START
	.word SDK_STATIC_BSS_END