summaryrefslogtreecommitdiff
path: root/arm7/asm/OS_reset.s
blob: 100514c04326169b55ed15a4417aa43fe008f543 (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
	.include "asm/macros.inc"
	.include "global.inc"

    .text

	arm_func_start OS_ResetSystem
OS_ResetSystem: ; 0x037FB0E0
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	mov	r0, #0
	bl	MI_StopDma
	mov	r0, #1
	bl	MI_StopDma
	mov	r0, #2
	bl	MI_StopDma
	mov	r0, #3
	bl	MI_StopDma
	mov	r0, #262144	; 0x40000
	bl	OS_SetIrqMask
	mvn	r0, #0
	bl	OS_ResetRequestIrqMask
	bl	SND_Shutdown
	mov	r0, #16
	bl	OSi_SendToPxi
	bl	FUN_038073EC
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr

	arm_func_start OSi_SendToPxi
OSi_SendToPxi: ; 0x037FB134
	stmdb	sp!, {r4, r5, r6, lr}
	mov	r6, r0, lsl #8
	mov	r5, #12
	mov	r4, #0
_037FB144:
	mov	r0, r5
	mov	r1, r6
	mov	r2, r4
	bl	PXI_SendWordByFifo
	cmp	r0, #0
	bne	_037FB144
	ldmia	sp!, {r4, r5, r6, lr}
	bx	lr

	arm_func_start OSi_CommonCallback
OSi_CommonCallback: ; 0x037FB164
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	and	r0, r1, #32512	; 0x7f00
	mov	r0, r0, lsl #8
	mov	r0, r0, lsr #16
	cmp	r0, #16
	moveq	r1, #1
	ldreq	r0, _037FB19C	; =_03807954
	streqh	r1, [r0]
	beq	_037FB190
	bl	OS_Terminate
_037FB190:
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_037FB19C:	.word	_03807954

	arm_func_start OS_IsResetOccurred
OS_IsResetOccurred: ; 0x037FB1A0
	ldr	r0, _037FB1AC	; =_03807954
	ldrh	r0, [r0]
	bx	lr
_037FB1AC:	.word	_03807954

	arm_func_start OS_InitReset
OS_InitReset: ; 0x037FB1B0
	stmfd	sp!, {lr}
	sub	sp, sp, #4
	ldr	r0, _037FB1E8	; =_03807950
	ldrh	r1, [r0]
	cmp	r1, #0
	bne	_037FB1DC
	mov	r1, #1
	strh	r1, [r0]
	mov	r0, #12
	ldr	r1, _037FB1EC	; =OSi_CommonCallback
	bl	PXI_SetFifoRecvCallback
_037FB1DC:
	add	sp, sp, #4
	ldmia	sp!, {lr}
	bx	lr
_037FB1E8:	.word	_03807950
_037FB1EC:	.word	OSi_CommonCallback