summaryrefslogtreecommitdiff
path: root/asm/SDK/OS/OSMessage.s
blob: 5821baaaaa25b0c457e29866be3d97e114f29b82 (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
141
142
143
144
145
146
147
148
149
150
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global OSInitMessageQueue
OSInitMessageQueue:
/* 8026EEF8 0026AB58  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026EEFC 0026AB5C  7C 08 02 A6 */	mflr r0
/* 8026EF00 0026AB60  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026EF04 0026AB64  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026EF08 0026AB68  7C BF 2B 78 */	mr r31, r5
/* 8026EF0C 0026AB6C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026EF10 0026AB70  7C 9E 23 78 */	mr r30, r4
/* 8026EF14 0026AB74  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026EF18 0026AB78  7C 7D 1B 78 */	mr r29, r3
/* 8026EF1C 0026AB7C  48 00 23 CD */	bl OSInitThreadQueue
/* 8026EF20 0026AB80  38 7D 00 08 */	addi r3, r29, 8
/* 8026EF24 0026AB84  48 00 23 C5 */	bl OSInitThreadQueue
/* 8026EF28 0026AB88  38 00 00 00 */	li r0, 0
/* 8026EF2C 0026AB8C  93 DD 00 10 */	stw r30, 0x10(r29)
/* 8026EF30 0026AB90  93 FD 00 14 */	stw r31, 0x14(r29)
/* 8026EF34 0026AB94  90 1D 00 18 */	stw r0, 0x18(r29)
/* 8026EF38 0026AB98  90 1D 00 1C */	stw r0, 0x1c(r29)
/* 8026EF3C 0026AB9C  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026EF40 0026ABA0  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026EF44 0026ABA4  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026EF48 0026ABA8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026EF4C 0026ABAC  7C 08 03 A6 */	mtlr r0
/* 8026EF50 0026ABB0  38 21 00 20 */	addi r1, r1, 0x20
/* 8026EF54 0026ABB4  4E 80 00 20 */	blr

.global OSSendMessage
OSSendMessage:
/* 8026EF58 0026ABB8  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026EF5C 0026ABBC  7C 08 02 A6 */	mflr r0
/* 8026EF60 0026ABC0  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026EF64 0026ABC4  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026EF68 0026ABC8  7C BF 2B 78 */	mr r31, r5
/* 8026EF6C 0026ABCC  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026EF70 0026ABD0  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026EF74 0026ABD4  7C 9D 23 78 */	mr r29, r4
/* 8026EF78 0026ABD8  93 81 00 10 */	stw r28, 0x10(r1)
/* 8026EF7C 0026ABDC  7C 7C 1B 78 */	mr r28, r3
/* 8026EF80 0026ABE0  4B FF F7 DD */	bl OSDisableInterrupts
/* 8026EF84 0026ABE4  7C 7E 1B 78 */	mr r30, r3
/* 8026EF88 0026ABE8  57 FF 07 FE */	clrlwi r31, r31, 0x1f
/* 8026EF8C 0026ABEC  48 00 00 24 */	b lbl_8026EFB0
lbl_8026EF90:
/* 8026EF90 0026ABF0  2C 1F 00 00 */	cmpwi r31, 0
/* 8026EF94 0026ABF4  40 82 00 14 */	bne lbl_8026EFA8
/* 8026EF98 0026ABF8  7F C3 F3 78 */	mr r3, r30
/* 8026EF9C 0026ABFC  4B FF F7 E9 */	bl OSRestoreInterrupts
/* 8026EFA0 0026AC00  38 60 00 00 */	li r3, 0
/* 8026EFA4 0026AC04  48 00 00 5C */	b lbl_8026F000
lbl_8026EFA8:
/* 8026EFA8 0026AC08  7F 83 E3 78 */	mr r3, r28
/* 8026EFAC 0026AC0C  48 00 33 C9 */	bl OSSleepThread
lbl_8026EFB0:
/* 8026EFB0 0026AC10  80 9C 00 1C */	lwz r4, 0x1c(r28)
/* 8026EFB4 0026AC14  80 DC 00 14 */	lwz r6, 0x14(r28)
/* 8026EFB8 0026AC18  7C 06 20 00 */	cmpw r6, r4
/* 8026EFBC 0026AC1C  40 81 FF D4 */	ble lbl_8026EF90
/* 8026EFC0 0026AC20  80 1C 00 18 */	lwz r0, 0x18(r28)
/* 8026EFC4 0026AC24  38 7C 00 08 */	addi r3, r28, 8
/* 8026EFC8 0026AC28  80 BC 00 10 */	lwz r5, 0x10(r28)
/* 8026EFCC 0026AC2C  7C 80 22 14 */	add r4, r0, r4
/* 8026EFD0 0026AC30  7C 04 33 D6 */	divw r0, r4, r6
/* 8026EFD4 0026AC34  7C 00 31 D6 */	mullw r0, r0, r6
/* 8026EFD8 0026AC38  7C 00 20 50 */	subf r0, r0, r4
/* 8026EFDC 0026AC3C  54 00 10 3A */	slwi r0, r0, 2
/* 8026EFE0 0026AC40  7F A5 01 2E */	stwx r29, r5, r0
/* 8026EFE4 0026AC44  80 9C 00 1C */	lwz r4, 0x1c(r28)
/* 8026EFE8 0026AC48  38 04 00 01 */	addi r0, r4, 1
/* 8026EFEC 0026AC4C  90 1C 00 1C */	stw r0, 0x1c(r28)
/* 8026EFF0 0026AC50  48 00 34 71 */	bl OSWakeupThread
/* 8026EFF4 0026AC54  7F C3 F3 78 */	mr r3, r30
/* 8026EFF8 0026AC58  4B FF F7 8D */	bl OSRestoreInterrupts
/* 8026EFFC 0026AC5C  38 60 00 01 */	li r3, 1
lbl_8026F000:
/* 8026F000 0026AC60  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026F004 0026AC64  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026F008 0026AC68  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026F00C 0026AC6C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026F010 0026AC70  83 81 00 10 */	lwz r28, 0x10(r1)
/* 8026F014 0026AC74  7C 08 03 A6 */	mtlr r0
/* 8026F018 0026AC78  38 21 00 20 */	addi r1, r1, 0x20
/* 8026F01C 0026AC7C  4E 80 00 20 */	blr

.global OSReceiveMessage
OSReceiveMessage:
/* 8026F020 0026AC80  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 8026F024 0026AC84  7C 08 02 A6 */	mflr r0
/* 8026F028 0026AC88  90 01 00 24 */	stw r0, 0x24(r1)
/* 8026F02C 0026AC8C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 8026F030 0026AC90  7C 7F 1B 78 */	mr r31, r3
/* 8026F034 0026AC94  93 C1 00 18 */	stw r30, 0x18(r1)
/* 8026F038 0026AC98  7C BE 2B 78 */	mr r30, r5
/* 8026F03C 0026AC9C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 8026F040 0026ACA0  93 81 00 10 */	stw r28, 0x10(r1)
/* 8026F044 0026ACA4  7C 9C 23 78 */	mr r28, r4
/* 8026F048 0026ACA8  4B FF F7 15 */	bl OSDisableInterrupts
/* 8026F04C 0026ACAC  7C 7D 1B 78 */	mr r29, r3
/* 8026F050 0026ACB0  57 DE 07 FE */	clrlwi r30, r30, 0x1f
/* 8026F054 0026ACB4  48 00 00 24 */	b lbl_8026F078
lbl_8026F058:
/* 8026F058 0026ACB8  2C 1E 00 00 */	cmpwi r30, 0
/* 8026F05C 0026ACBC  40 82 00 14 */	bne lbl_8026F070
/* 8026F060 0026ACC0  7F A3 EB 78 */	mr r3, r29
/* 8026F064 0026ACC4  4B FF F7 21 */	bl OSRestoreInterrupts
/* 8026F068 0026ACC8  38 60 00 00 */	li r3, 0
/* 8026F06C 0026ACCC  48 00 00 70 */	b lbl_8026F0DC
lbl_8026F070:
/* 8026F070 0026ACD0  38 7F 00 08 */	addi r3, r31, 8
/* 8026F074 0026ACD4  48 00 33 01 */	bl OSSleepThread
lbl_8026F078:
/* 8026F078 0026ACD8  80 1F 00 1C */	lwz r0, 0x1c(r31)
/* 8026F07C 0026ACDC  2C 00 00 00 */	cmpwi r0, 0
/* 8026F080 0026ACE0  41 82 FF D8 */	beq lbl_8026F058
/* 8026F084 0026ACE4  2C 1C 00 00 */	cmpwi r28, 0
/* 8026F088 0026ACE8  41 82 00 18 */	beq lbl_8026F0A0
/* 8026F08C 0026ACEC  80 1F 00 18 */	lwz r0, 0x18(r31)
/* 8026F090 0026ACF0  80 7F 00 10 */	lwz r3, 0x10(r31)
/* 8026F094 0026ACF4  54 00 10 3A */	slwi r0, r0, 2
/* 8026F098 0026ACF8  7C 03 00 2E */	lwzx r0, r3, r0
/* 8026F09C 0026ACFC  90 1C 00 00 */	stw r0, 0(r28)
lbl_8026F0A0:
/* 8026F0A0 0026AD00  80 9F 00 18 */	lwz r4, 0x18(r31)
/* 8026F0A4 0026AD04  7F E3 FB 78 */	mr r3, r31
/* 8026F0A8 0026AD08  80 DF 00 14 */	lwz r6, 0x14(r31)
/* 8026F0AC 0026AD0C  38 E4 00 01 */	addi r7, r4, 1
/* 8026F0B0 0026AD10  80 9F 00 1C */	lwz r4, 0x1c(r31)
/* 8026F0B4 0026AD14  7C A7 33 D6 */	divw r5, r7, r6
/* 8026F0B8 0026AD18  38 04 FF FF */	addi r0, r4, -1
/* 8026F0BC 0026AD1C  90 1F 00 1C */	stw r0, 0x1c(r31)
/* 8026F0C0 0026AD20  7C 05 31 D6 */	mullw r0, r5, r6
/* 8026F0C4 0026AD24  7C 00 38 50 */	subf r0, r0, r7
/* 8026F0C8 0026AD28  90 1F 00 18 */	stw r0, 0x18(r31)
/* 8026F0CC 0026AD2C  48 00 33 95 */	bl OSWakeupThread
/* 8026F0D0 0026AD30  7F A3 EB 78 */	mr r3, r29
/* 8026F0D4 0026AD34  4B FF F6 B1 */	bl OSRestoreInterrupts
/* 8026F0D8 0026AD38  38 60 00 01 */	li r3, 1
lbl_8026F0DC:
/* 8026F0DC 0026AD3C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 8026F0E0 0026AD40  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 8026F0E4 0026AD44  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 8026F0E8 0026AD48  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 8026F0EC 0026AD4C  83 81 00 10 */	lwz r28, 0x10(r1)
/* 8026F0F0 0026AD50  7C 08 03 A6 */	mtlr r0
/* 8026F0F4 0026AD54  38 21 00 20 */	addi r1, r1, 0x20
/* 8026F0F8 0026AD58  4E 80 00 20 */	blr