sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

__osSyncPutChars.c (642B)


      1 #include "libultra_internal.h"
      2 #include "PR/rdb.h"
      3 #include "PR/R4300.h"
      4 
      5 u32 __osRdbSendMessage = 0;
      6 u32 __osRdbWriteOK = 1;
      7 
      8 void __osSyncPutChars(s32 type, s32 length, u8 *buf) {
      9     rdbPacket packet;
     10     s32 i;
     11     u32 mask;
     12     packet.type = type;
     13     packet.length = length;
     14 
     15     for (i = 0; i < length; i++) {
     16         packet.buf[i] = buf[i];
     17     }
     18 
     19     while (!__osAtomicDec(&__osRdbWriteOK)) {
     20         ;
     21     }
     22 
     23     mask = __osDisableInt();
     24 
     25     *(u32 *) RDB_BASE_REG = *(u32 *) &packet;
     26     while (!(__osGetCause() & CAUSE_IP6)) {
     27         ;
     28     }
     29     *(u32 *) RDB_READ_INTR_REG = 0;
     30     __osRdbWriteOK++;
     31 
     32     __osRestoreInt(mask);
     33 }