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
141
142
143
144
145
146
147
|
.include "asm/macros.inc"
.include "global.inc"
.text
arm_func_start OS_ReadMessage
OS_ReadMessage: ; 0x037F980C
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r6, r0
mov r5, r1
mov r7, r2
bl OS_DisableInterrupts
mov r4, r0
and r8, r7, #1
add r7, r6, #8
b _037F9850
_037F9830:
cmp r8, #0
bne _037F9848
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0
b _037F987C
_037F9848:
mov r0, r7
bl OS_SleepThread
_037F9850:
ldr r0, [r6, #28]
cmp r0, #0
beq _037F9830
cmp r5, #0
ldrne r1, [r6, #16]
ldrne r0, [r6, #24]
ldrne r0, [r1, r0, lsl #2]
strne r0, [r5]
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #1
_037F987C:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_start OS_ReceiveMessage
OS_ReceiveMessage: ; 0x037F9884
stmdb sp!, {r4, r5, r6, r7, r8, lr}
mov r6, r0
mov r5, r1
mov r7, r2
bl OS_DisableInterrupts
mov r4, r0
and r8, r7, #1
add r7, r6, #8
b _037F98C8
_037F98A8:
cmp r8, #0
bne _037F98C0
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0
b _037F991C
_037F98C0:
mov r0, r7
bl OS_SleepThread
_037F98C8:
ldr r0, [r6, #28]
cmp r0, #0
beq _037F98A8
cmp r5, #0
ldrne r1, [r6, #16]
ldrne r0, [r6, #24]
ldrne r0, [r1, r0, lsl #2]
strne r0, [r5]
ldr r0, [r6, #24]
add r0, r0, #1
ldr r1, [r6, #20]
bl _s32_div_f
str r1, [r6, #24]
ldr r0, [r6, #28]
sub r0, r0, #1
str r0, [r6, #28]
mov r0, r6
bl OS_WakeupThread
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #1
_037F991C:
ldmia sp!, {r4, r5, r6, r7, r8, lr}
bx lr
arm_func_start OS_SendMessage
OS_SendMessage: ; 0x037F9924
stmdb sp!, {r4, r5, r6, r7, lr}
sub sp, sp, #4
mov r6, r0
mov r5, r1
mov r7, r2
bl OS_DisableInterrupts
mov r4, r0
and r7, r7, #1
b _037F9968
_037F9948:
cmp r7, #0
bne _037F9960
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #0
b _037F99AC
_037F9960:
mov r0, r6
bl OS_SleepThread
_037F9968:
ldr r2, [r6, #28]
ldr r1, [r6, #20]
cmp r1, r2
ble _037F9948
ldr r0, [r6, #24]
add r0, r0, r2
bl _s32_div_f
ldr r0, [r6, #16]
str r5, [r0, r1, lsl #2]
ldr r0, [r6, #28]
add r0, r0, #1
str r0, [r6, #28]
add r0, r6, #8
bl OS_WakeupThread
mov r0, r4
bl OS_RestoreInterrupts
mov r0, #1
_037F99AC:
add sp, sp, #4
ldmia sp!, {r4, r5, r6, r7, lr}
bx lr
arm_func_start OS_InitMessageQueue
OS_InitMessageQueue: ; 0x037F99B8
mov ip, #0
str ip, [r0, #4]
ldr r3, [r0, #4]
str r3, [r0]
str ip, [r0, #12]
ldr r3, [r0, #12]
str r3, [r0, #8]
str r1, [r0, #16]
str r2, [r0, #20]
str ip, [r0, #24]
str ip, [r0, #28]
bx lr
|