mirror of https://github.com/zeldaret/tp.git
86 lines
2.2 KiB
C
86 lines
2.2 KiB
C
//
|
|
// Generated By: dol2asm
|
|
// Translation Unit: OSMessage
|
|
//
|
|
|
|
#include "dolphin/os/OSMessage.h"
|
|
#include "dol2asm.h"
|
|
#include "dolphin/os/OS.h"
|
|
|
|
//
|
|
// Declarations:
|
|
//
|
|
|
|
/* 8033E994-8033E9F4 3392D4 0060+00 0/0 13/13 5/5 .text OSInitMessageQueue */
|
|
void OSInitMessageQueue(OSMessageQueue* mq, OSMessage* msgArray, s32 msgCount) {
|
|
OSInitThreadQueue(&mq->sending_queue);
|
|
OSInitThreadQueue(&mq->receiving_queue);
|
|
mq->message_array = msgArray;
|
|
mq->num_messages = msgCount;
|
|
mq->first_index = 0;
|
|
mq->num_used = 0;
|
|
}
|
|
|
|
/* 8033E9F4-8033EABC 339334 00C8+00 0/0 21/21 9/9 .text OSSendMessage */
|
|
BOOL OSSendMessage(OSMessageQueue* mq, OSMessage msg, s32 flags) {
|
|
BOOL enabled;
|
|
s32 lastIndex;
|
|
|
|
enabled = OSDisableInterrupts();
|
|
|
|
while (mq->num_messages <= mq->num_used) {
|
|
if (!(flags & OS_MESSAGE_BLOCK)) {
|
|
OSRestoreInterrupts(enabled);
|
|
return FALSE;
|
|
} else {
|
|
OSSleepThread(&mq->sending_queue);
|
|
}
|
|
}
|
|
|
|
lastIndex = (mq->first_index + mq->num_used) % mq->num_messages;
|
|
mq->message_array[lastIndex] = msg;
|
|
mq->num_used++;
|
|
|
|
OSWakeupThread(&mq->receiving_queue);
|
|
|
|
OSRestoreInterrupts(enabled);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 8033EABC-8033EB98 3393FC 00DC+00 0/0 15/15 9/9 .text OSReceiveMessage */
|
|
BOOL OSReceiveMessage(OSMessageQueue* mq, OSMessage* msg, s32 flags) {
|
|
BOOL enabled;
|
|
|
|
enabled = OSDisableInterrupts();
|
|
|
|
while (mq->num_used == 0) {
|
|
if (!(flags & OS_MESSAGE_BLOCK)) {
|
|
OSRestoreInterrupts(enabled);
|
|
return FALSE;
|
|
} else {
|
|
OSSleepThread(&mq->receiving_queue);
|
|
}
|
|
}
|
|
|
|
if (msg != NULL) {
|
|
*msg = mq->message_array[mq->first_index];
|
|
}
|
|
mq->first_index = (mq->first_index + 1) % mq->num_messages;
|
|
mq->num_used--;
|
|
|
|
OSWakeupThread(&mq->sending_queue);
|
|
|
|
OSRestoreInterrupts(enabled);
|
|
return TRUE;
|
|
}
|
|
|
|
/* 8033EB98-8033EC6C 3394D8 00D4+00 0/0 1/1 0/0 .text OSJamMessage */
|
|
#pragma push
|
|
#pragma optimization_level 0
|
|
#pragma optimizewithasm off
|
|
asm BOOL OSJamMessage(OSMessageQueue* queue, OSMessage msg, s32 flags) {
|
|
nofralloc
|
|
#include "asm/dolphin/os/OSMessage/OSJamMessage.s"
|
|
}
|
|
#pragma pop
|