diff --git a/src/gvars/gvars.c b/src/gvars/gvars.c index 35bba408a..decdabb64 100644 --- a/src/gvars/gvars.c +++ b/src/gvars/gvars.c @@ -14624,7 +14624,7 @@ u32 var8009c7d0 = 0; u32 var8009c7d4 = 0; u32 var8009c7d8 = 0; u32 var8009c7dc = 0; -u32 var8009c7e0 = 0; +u32 __osContPifRam = 0; u32 var8009c7e4 = 0; u32 var8009c7e8 = 0; u32 var8009c7ec = 0; @@ -14640,7 +14640,7 @@ u32 var8009c810 = 0; u32 var8009c814 = 0; u32 var8009c818 = 0; u32 var8009c81c = 0; -u32 var8009c820 = 0; +u8 __osContLastCmd = 0; u32 var8009c824 = 0; u32 var8009c828 = 0; u32 var8009c82c = 0; diff --git a/src/include/gvars/gvars.h b/src/include/gvars/gvars.h index 36a77a754..c99dc2f90 100644 --- a/src/include/gvars/gvars.h +++ b/src/include/gvars/gvars.h @@ -508,9 +508,9 @@ extern u32 var8009c7a0; extern u32 var8009c7a8; extern u32 var8009c7c0; extern u32 var8009c7c8; -extern u32 var8009c7e0; +extern u32 __osContPifRam; extern u32 var8009c81c; -extern u32 var8009c820; +extern u8 __osContLastCmd; extern u32 var8009c828; extern u32 var8009c848; extern u32 var8009c860; diff --git a/src/include/lib/lib_4a810.h b/src/include/lib/lib_4a810.h index 9a0246c27..39cf159c7 100644 --- a/src/include/lib/lib_4a810.h +++ b/src/include/lib/lib_4a810.h @@ -3,9 +3,4 @@ #include #include "types.h" -u32 __osSiCreateAccessQueue(void); -u32 __osSiGetAccess(void); -u32 __osSiRelAccess(void); -u32 __osSiRawStartDma(void); - #endif diff --git a/src/include/libultra_internal.h b/src/include/libultra_internal.h new file mode 100644 index 000000000..5dc8492e3 --- /dev/null +++ b/src/include/libultra_internal.h @@ -0,0 +1,51 @@ +#ifndef _LIBULTRA_INTERNAL_H_ +#define _LIBULTRA_INTERNAL_H_ +#include + +typedef struct +{ + u32 initialized; //probably something like initialized? + OSThread *mgrThread; + OSMesgQueue *unk08; + OSMesgQueue *unk0c; + OSMesgQueue *unk10; + s32 (*dma_func)(s32,u32,void*,size_t); + u64 force_align; +} OSMgrArgs; + +s32 __osDisableInt(); +void __osRestoreInt(s32); +void __osEnqueueAndYield(OSThread**); +void __osDequeueThread(OSThread**, OSThread*); +void __osEnqueueThread(OSThread**, OSThread*); +OSThread* __osPopThread(OSThread**); +s32 __osSiRawStartDma(s32, void*); +void __osSiCreateAccessQueue(); +void __osSiGetAccess(); +void __osSiRelAccess(); +u32 __osProbeTLB(void*); +void __osPiCreateAccessQueue(); +void __osPiGetAccess(); +void __osSetSR(u32); +u32 __osGetSR(); +void __osSetFpcCsr(u32); +s32 __osSiRawReadIo(void*, u32*); +s32 __osSiRawWriteIo(void*, u32); +s32 osPiRawReadIo(u32 a0, u32 *a1); +void __osSpSetStatus(u32); +u32 __osSpGetStatus(); +s32 __osSpSetPc(void*); +s32 __osSpDeviceBusy(); +s32 __osSiDeviceBusy(); +s32 __osSpRawStartDma(u32 dir, void *sp_ptr, void *dram_ptr, size_t size); +void __osViInit(); +OSViContext * __osViGetCurrentContext(); +void __osViSwapContext(); +void __osSetTimerIntr(u64); +u64 __osInsertTimer(OSTimer *); +void __osSetCompare(u32); +s32 __osAiDeviceBusy(); +void __osDispatchThread(); +u32 __osGetCause(); +s32 __osAtomicDec(u32*); +#endif diff --git a/src/lib/lib_04a80.c b/src/lib/lib_04a80.c index 9f89f3a3b..9a935f49e 100644 --- a/src/lib/lib_04a80.c +++ b/src/lib/lib_04a80.c @@ -1010,10 +1010,10 @@ glabel func00005770 /* 57a4: 0000a825 */ or $s5,$zero,$zero /* 57a8: 0c012a18 */ jal __osSiGetAccess /* 57ac: 24110001 */ addiu $s1,$zero,0x1 -/* 57b0: 3c1e800a */ lui $s8,%hi(var8009c820+0x1) +/* 57b0: 3c1e800a */ lui $s8,%hi(__osContLastCmd+0x1) /* 57b4: 3c138009 */ lui $s3,%hi(var80090a20) /* 57b8: 26730a20 */ addiu $s3,$s3,%lo(var80090a20) -/* 57bc: 27dec821 */ addiu $s8,$s8,%lo(var8009c820+0x1) +/* 57bc: 27dec821 */ addiu $s8,$s8,%lo(__osContLastCmd+0x1) /* 57c0: 00008025 */ or $s0,$zero,$zero /* 57c4: 27b70054 */ addiu $s7,$sp,0x54 /* 57c8: 27b60067 */ addiu $s6,$sp,0x67 @@ -1108,14 +1108,14 @@ GLOBAL_ASM( glabel func000058fc /* 58fc: 27bdfff0 */ addiu $sp,$sp,-16 /* 5900: 3c058009 */ lui $a1,%hi(var80090a20) -/* 5904: 3c01800a */ lui $at,%hi(var8009c820) +/* 5904: 3c01800a */ lui $at,%hi(__osContLastCmd) /* 5908: 24a20a20 */ addiu $v0,$a1,%lo(var80090a20) /* 590c: afa40010 */ sw $a0,0x10($sp) -/* 5910: a024c820 */ sb $a0,%lo(var8009c820)($at) +/* 5910: a024c820 */ sb $a0,%lo(__osContLastCmd)($at) /* 5914: 240f0001 */ addiu $t7,$zero,0x1 /* 5918: ac4f003c */ sw $t7,0x3c($v0) -/* 591c: 3c06800a */ lui $a2,%hi(var8009c820+0x1) -/* 5920: 24c6c821 */ addiu $a2,$a2,%lo(var8009c820+0x1) +/* 591c: 3c06800a */ lui $a2,%hi(__osContLastCmd+0x1) +/* 5920: 24c6c821 */ addiu $a2,$a2,%lo(__osContLastCmd+0x1) /* 5924: 90cd0000 */ lbu $t5,0x0($a2) /* 5928: 241800ff */ addiu $t8,$zero,0xff /* 592c: 24190001 */ addiu $t9,$zero,0x1 @@ -1157,8 +1157,8 @@ glabel func000058fc GLOBAL_ASM( glabel func000059b0 -/* 59b0: 3c07800a */ lui $a3,%hi(var8009c820+0x1) -/* 59b4: 24e7c821 */ addiu $a3,$a3,%lo(var8009c820+0x1) +/* 59b0: 3c07800a */ lui $a3,%hi(__osContLastCmd+0x1) +/* 59b4: 24e7c821 */ addiu $a3,$a3,%lo(__osContLastCmd+0x1) /* 59b8: 90ee0000 */ lbu $t6,0x0($a3) /* 59bc: 3c038009 */ lui $v1,%hi(var80090a20) /* 59c0: 27bdffe8 */ addiu $sp,$sp,-24 diff --git a/src/lib/lib_4a980.c b/src/lib/lib_4a980.c index c487a3a67..d792e14a2 100644 --- a/src/lib/lib_4a980.c +++ b/src/lib/lib_4a980.c @@ -73,12 +73,12 @@ glabel func0004a980 /* 4aa4c: 24060001 */ addiu $a2,$zero,0x1 .L0004aa50: /* 4aa50: 24180004 */ addiu $t8,$zero,0x4 -/* 4aa54: 3c01800a */ lui $at,%hi(var8009c820+0x1) -/* 4aa58: a038c821 */ sb $t8,%lo(var8009c820+0x1)($at) +/* 4aa54: 3c01800a */ lui $at,%hi(__osContLastCmd+0x1) +/* 4aa58: a038c821 */ sb $t8,%lo(__osContLastCmd+0x1)($at) /* 4aa5c: 0c012af0 */ jal func0004abc0 /* 4aa60: 00002025 */ or $a0,$zero,$zero -/* 4aa64: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4aa68: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) +/* 4aa64: 3c05800a */ lui $a1,%hi(__osContPifRam) +/* 4aa68: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam) /* 4aa6c: 0c012a34 */ jal __osSiRawStartDma /* 4aa70: 24040001 */ addiu $a0,$zero,0x1 /* 4aa74: afa20068 */ sw $v0,0x68($sp) @@ -86,8 +86,8 @@ glabel func0004a980 /* 4aa7c: 27a5006c */ addiu $a1,$sp,0x6c /* 4aa80: 0c0121bc */ jal osRecvMesg /* 4aa84: 24060001 */ addiu $a2,$zero,0x1 -/* 4aa88: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4aa8c: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) +/* 4aa88: 3c05800a */ lui $a1,%hi(__osContPifRam) +/* 4aa8c: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam) /* 4aa90: 0c012a34 */ jal __osSiRawStartDma /* 4aa94: 00002025 */ or $a0,$zero,$zero /* 4aa98: afa20068 */ sw $v0,0x68($sp) @@ -98,9 +98,9 @@ glabel func0004a980 /* 4aaac: 8fa40074 */ lw $a0,0x74($sp) /* 4aab0: 0c012abc */ jal func0004aaf0 /* 4aab4: 8fa50078 */ lw $a1,0x78($sp) -/* 4aab8: 3c01800a */ lui $at,%hi(var8009c820) +/* 4aab8: 3c01800a */ lui $at,%hi(__osContLastCmd) /* 4aabc: 0c012a04 */ jal __osSiCreateAccessQueue -/* 4aac0: a020c820 */ sb $zero,%lo(var8009c820)($at) +/* 4aac0: a020c820 */ sb $zero,%lo(__osContLastCmd)($at) /* 4aac4: 3c04800a */ lui $a0,%hi(var8009c848) /* 4aac8: 3c05800a */ lui $a1,%hi(var8009c860) /* 4aacc: 24a5c860 */ addiu $a1,$a1,%lo(var8009c860) @@ -117,11 +117,11 @@ glabel func0004a980 GLOBAL_ASM( glabel func0004aaf0 -/* 4aaf0: 3c0f800a */ lui $t7,%hi(var8009c820+0x1) -/* 4aaf4: 91efc821 */ lbu $t7,%lo(var8009c820+0x1)($t7) +/* 4aaf0: 3c0f800a */ lui $t7,%hi(__osContLastCmd+0x1) +/* 4aaf4: 91efc821 */ lbu $t7,%lo(__osContLastCmd+0x1)($t7) /* 4aaf8: 27bdffe8 */ addiu $sp,$sp,-24 -/* 4aafc: 3c0e800a */ lui $t6,%hi(var8009c7e0) -/* 4ab00: 25cec7e0 */ addiu $t6,$t6,%lo(var8009c7e0) +/* 4aafc: 3c0e800a */ lui $t6,%hi(__osContPifRam) +/* 4ab00: 25cec7e0 */ addiu $t6,$t6,%lo(__osContPifRam) /* 4ab04: a3a00007 */ sb $zero,0x7($sp) /* 4ab08: afae0014 */ sw $t6,0x14($sp) /* 4ab0c: 19e00028 */ blez $t7,.L0004abb0 @@ -157,8 +157,8 @@ glabel func0004aaf0 /* 4ab80: a3ad0007 */ sb $t5,0x7($sp) .L0004ab84: /* 4ab84: 8fae0008 */ lw $t6,0x8($sp) -/* 4ab88: 3c19800a */ lui $t9,%hi(var8009c820+0x1) -/* 4ab8c: 9339c821 */ lbu $t9,%lo(var8009c820+0x1)($t9) +/* 4ab88: 3c19800a */ lui $t9,%hi(__osContLastCmd+0x1) +/* 4ab8c: 9339c821 */ lbu $t9,%lo(__osContLastCmd+0x1)($t9) /* 4ab90: 8fa80014 */ lw $t0,0x14($sp) /* 4ab94: 25cf0001 */ addiu $t7,$t6,0x1 /* 4ab98: 01f9082a */ slt $at,$t7,$t9 @@ -182,20 +182,20 @@ glabel func0004abc0 .L0004abcc: /* 4abcc: 8fae0000 */ lw $t6,0x0($sp) /* 4abd0: 8fb80000 */ lw $t8,0x0($sp) -/* 4abd4: 3c01800a */ lui $at,%hi(var8009c7e0) +/* 4abd4: 3c01800a */ lui $at,%hi(__osContPifRam) /* 4abd8: 000e7880 */ sll $t7,$t6,0x2 /* 4abdc: 002f0821 */ addu $at,$at,$t7 -/* 4abe0: ac20c7e0 */ sw $zero,%lo(var8009c7e0)($at) +/* 4abe0: ac20c7e0 */ sw $zero,%lo(__osContPifRam)($at) /* 4abe4: 27190001 */ addiu $t9,$t8,0x1 /* 4abe8: 2b21000f */ slti $at,$t9,0xf /* 4abec: 1420fff7 */ bnez $at,.L0004abcc /* 4abf0: afb90000 */ sw $t9,0x0($sp) -/* 4abf4: 3c19800a */ lui $t9,%hi(var8009c820+0x1) -/* 4abf8: 9339c821 */ lbu $t9,%lo(var8009c820+0x1)($t9) -/* 4abfc: 3c09800a */ lui $t1,%hi(var8009c7e0) +/* 4abf4: 3c19800a */ lui $t9,%hi(__osContLastCmd+0x1) +/* 4abf8: 9339c821 */ lbu $t9,%lo(__osContLastCmd+0x1)($t9) +/* 4abfc: 3c09800a */ lui $t1,%hi(__osContPifRam) /* 4ac00: 24080001 */ addiu $t0,$zero,0x1 /* 4ac04: 3c01800a */ lui $at,%hi(var8009c81c) -/* 4ac08: 2529c7e0 */ addiu $t1,$t1,%lo(var8009c7e0) +/* 4ac08: 2529c7e0 */ addiu $t1,$t1,%lo(__osContPifRam) /* 4ac0c: 240a00ff */ addiu $t2,$zero,0xff /* 4ac10: 240b0001 */ addiu $t3,$zero,0x1 /* 4ac14: 240c0003 */ addiu $t4,$zero,0x3 @@ -219,14 +219,14 @@ glabel func0004abc0 /* 4ac58: 27a90004 */ addiu $t1,$sp,0x4 /* 4ac5c: 8d210000 */ lw $at,0x0($t1) /* 4ac60: 8fa8000c */ lw $t0,0xc($sp) -/* 4ac64: 3c18800a */ lui $t8,%hi(var8009c820+0x1) +/* 4ac64: 3c18800a */ lui $t8,%hi(__osContLastCmd+0x1) /* 4ac68: a9010000 */ swl $at,0x0($t0) /* 4ac6c: b9010003 */ swr $at,0x3($t0) /* 4ac70: 8d2b0004 */ lw $t3,0x4($t1) /* 4ac74: a90b0004 */ swl $t3,0x4($t0) /* 4ac78: b90b0007 */ swr $t3,0x7($t0) /* 4ac7c: 8fae0000 */ lw $t6,0x0($sp) -/* 4ac80: 9318c821 */ lbu $t8,%lo(var8009c820+0x1)($t8) +/* 4ac80: 9318c821 */ lbu $t8,%lo(__osContLastCmd+0x1)($t8) /* 4ac84: 8fac000c */ lw $t4,0xc($sp) /* 4ac88: 25cf0001 */ addiu $t7,$t6,0x1 /* 4ac8c: 01f8082a */ slt $at,$t7,$t8 diff --git a/src/lib/lib_4b5e0.c b/src/lib/lib_4b5e0.c index 79692fbad..218d4bd3c 100644 --- a/src/lib/lib_4b5e0.c +++ b/src/lib/lib_4b5e0.c @@ -71,10 +71,10 @@ glabel __osContRamWrite /* 4b68c: 0010c0c3 */ sra $t8,$s0,0x3 /* 4b690: 0010c940 */ sll $t9,$s0,0x5 /* 4b694: 3c178006 */ lui $s7,%hi(var80060970) -/* 4b698: 3c16800a */ lui $s6,%hi(var8009c820) +/* 4b698: 3c16800a */ lui $s6,%hi(__osContLastCmd) /* 4b69c: 3c138009 */ lui $s3,%hi(var80090a20) /* 4b6a0: 26730a20 */ addiu $s3,$s3,%lo(var80090a20) -/* 4b6a4: 26d6c820 */ addiu $s6,$s6,%lo(var8009c820) +/* 4b6a4: 26d6c820 */ addiu $s6,$s6,%lo(__osContLastCmd) /* 4b6a8: 26f70970 */ addiu $s7,$s7,%lo(var80060970) /* 4b6ac: afb90040 */ sw $t9,0x40($sp) /* 4b6b0: afb80044 */ sw $t8,0x44($sp) @@ -218,14 +218,14 @@ glabel __osContRamRead /* 4b8a0: 24150002 */ addiu $s5,$zero,0x2 /* 4b8a4: 97a5006a */ lhu $a1,0x6a($sp) /* 4b8a8: 3c1e8006 */ lui $s8,%hi(var80060970) -/* 4b8ac: 3c17800a */ lui $s7,%hi(var8009c820) +/* 4b8ac: 3c17800a */ lui $s7,%hi(__osContLastCmd) /* 4b8b0: 3c148009 */ lui $s4,%hi(var80090a20) /* 4b8b4: 000570c3 */ sra $t6,$a1,0x3 /* 4b8b8: 00057940 */ sll $t7,$a1,0x5 /* 4b8bc: afaf0040 */ sw $t7,0x40($sp) /* 4b8c0: afae0044 */ sw $t6,0x44($sp) /* 4b8c4: 26940a20 */ addiu $s4,$s4,%lo(var80090a20) -/* 4b8c8: 26f7c820 */ addiu $s7,$s7,%lo(var8009c820) +/* 4b8c8: 26f7c820 */ addiu $s7,$s7,%lo(__osContLastCmd) /* 4b8cc: 27de0970 */ addiu $s8,$s8,%lo(var80060970) .L0004b8d0: /* 4b8d0: 92f80000 */ lbu $t8,0x0($s7) diff --git a/src/lib/lib_4ba90.c b/src/lib/lib_4ba90.c index 0a9b25a4e..519b0d5a6 100644 --- a/src/lib/lib_4ba90.c +++ b/src/lib/lib_4ba90.c @@ -78,10 +78,10 @@ glabel __osPfsRequestOneChannel /* 4bb60: 27bdffe8 */ addiu $sp,$sp,-24 /* 4bb64: 3c068009 */ lui $a2,%hi(var80090a20) /* 4bb68: 240700fe */ addiu $a3,$zero,0xfe -/* 4bb6c: 3c01800a */ lui $at,%hi(var8009c820) +/* 4bb6c: 3c01800a */ lui $at,%hi(__osContLastCmd) /* 4bb70: 24c20a20 */ addiu $v0,$a2,%lo(var80090a20) /* 4bb74: afa5001c */ sw $a1,0x1c($sp) -/* 4bb78: a027c820 */ sb $a3,%lo(var8009c820)($at) +/* 4bb78: a027c820 */ sb $a3,%lo(__osContLastCmd)($at) /* 4bb7c: 240f0001 */ addiu $t7,$zero,0x1 /* 4bb80: ac4f003c */ sw $t7,0x3c($v0) /* 4bb84: 24180001 */ addiu $t8,$zero,0x1 @@ -249,8 +249,8 @@ glabel osEepromWrite /* 4bdb8: 0c012a34 */ jal __osSiRawStartDma /* 4bdbc: 00002025 */ or $a0,$zero,$zero /* 4bdc0: 240c0005 */ addiu $t4,$zero,0x5 -/* 4bdc4: 3c01800a */ lui $at,%hi(var8009c820) -/* 4bdc8: a02cc820 */ sb $t4,%lo(var8009c820)($at) +/* 4bdc4: 3c01800a */ lui $at,%hi(__osContLastCmd) +/* 4bdc8: a02cc820 */ sb $t4,%lo(__osContLastCmd)($at) /* 4bdcc: 02202025 */ or $a0,$s1,$zero /* 4bdd0: 00002825 */ or $a1,$zero,$zero /* 4bdd4: 0c0121bc */ jal osRecvMesg @@ -388,9 +388,9 @@ glabel __osEepStatus /* 4bfb4: 0c0121bc */ jal osRecvMesg /* 4bfb8: 24060001 */ addiu $a2,$zero,0x1 /* 4bfbc: 241900fe */ addiu $t9,$zero,0xfe -/* 4bfc0: 3c01800a */ lui $at,%hi(var8009c820) +/* 4bfc0: 3c01800a */ lui $at,%hi(__osContLastCmd) /* 4bfc4: 3c05800a */ lui $a1,%hi(var8009ca80) -/* 4bfc8: a039c820 */ sb $t9,%lo(var8009c820)($at) +/* 4bfc8: a039c820 */ sb $t9,%lo(__osContLastCmd)($at) /* 4bfcc: 24a5ca80 */ addiu $a1,$a1,%lo(var8009ca80) /* 4bfd0: 0c012a34 */ jal __osSiRawStartDma /* 4bfd4: 00002025 */ or $a0,$zero,$zero diff --git a/src/lib/lib_4f350.c b/src/lib/lib_4f350.c index 12f95149c..2a3244b2a 100644 --- a/src/lib/lib_4f350.c +++ b/src/lib/lib_4f350.c @@ -20,14 +20,14 @@ glabel func0004f350 /* 4f358: afa40020 */ sw $a0,0x20($sp) /* 4f35c: 0c012a18 */ jal __osSiGetAccess /* 4f360: afa0001c */ sw $zero,0x1c($sp) -/* 4f364: 3c0e800a */ lui $t6,%hi(var8009c820) -/* 4f368: 91cec820 */ lbu $t6,%lo(var8009c820)($t6) +/* 4f364: 3c0e800a */ lui $t6,%hi(__osContLastCmd) +/* 4f368: 91cec820 */ lbu $t6,%lo(__osContLastCmd)($t6) /* 4f36c: 11c0000c */ beqz $t6,.L0004f3a0 /* 4f370: 00000000 */ nop /* 4f374: 0c012af0 */ jal func0004abc0 /* 4f378: 00002025 */ or $a0,$zero,$zero -/* 4f37c: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4f380: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) +/* 4f37c: 3c05800a */ lui $a1,%hi(__osContPifRam) +/* 4f380: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam) /* 4f384: 0c012a34 */ jal __osSiRawStartDma /* 4f388: 24040001 */ addiu $a0,$zero,0x1 /* 4f38c: afa2001c */ sw $v0,0x1c($sp) @@ -36,14 +36,14 @@ glabel func0004f350 /* 4f398: 0c0121bc */ jal osRecvMesg /* 4f39c: 24060001 */ addiu $a2,$zero,0x1 .L0004f3a0: -/* 4f3a0: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4f3a4: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) +/* 4f3a0: 3c05800a */ lui $a1,%hi(__osContPifRam) +/* 4f3a4: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam) /* 4f3a8: 0c012a34 */ jal __osSiRawStartDma /* 4f3ac: 00002025 */ or $a0,$zero,$zero -/* 4f3b0: 3c01800a */ lui $at,%hi(var8009c820) +/* 4f3b0: 3c01800a */ lui $at,%hi(__osContLastCmd) /* 4f3b4: afa2001c */ sw $v0,0x1c($sp) /* 4f3b8: 0c012a29 */ jal __osSiRelAccess -/* 4f3bc: a020c820 */ sb $zero,%lo(var8009c820)($at) +/* 4f3bc: a020c820 */ sb $zero,%lo(__osContLastCmd)($at) /* 4f3c0: 8fbf0014 */ lw $ra,0x14($sp) /* 4f3c4: 8fa2001c */ lw $v0,0x1c($sp) /* 4f3c8: 27bd0020 */ addiu $sp,$sp,0x20 diff --git a/src/lib/lib_4f400.c b/src/lib/lib_4f400.c index a8fc862a7..c862b8cc3 100644 --- a/src/lib/lib_4f400.c +++ b/src/lib/lib_4f400.c @@ -1,4 +1,5 @@ #include +#include #include "constants.h" #include "game/data/data_000000.h" #include "game/data/data_0083d0.h" @@ -12,52 +13,37 @@ #include "lib/lib_4a810.h" #include "types.h" -GLOBAL_ASM( -glabel osContStartReadData -/* 4f400: 27bdffe0 */ addiu $sp,$sp,-32 -/* 4f404: afbf0014 */ sw $ra,0x14($sp) -/* 4f408: 0c012a18 */ jal __osSiGetAccess -/* 4f40c: afa40020 */ sw $a0,0x20($sp) -/* 4f410: 3c0e800a */ lui $t6,%hi(var8009c820) -/* 4f414: 91cec820 */ lbu $t6,%lo(var8009c820)($t6) -/* 4f418: 24010001 */ addiu $at,$zero,0x1 -/* 4f41c: 11c1000b */ beq $t6,$at,.L0004f44c -/* 4f420: 00000000 */ nop -/* 4f424: 0c013d44 */ jal __osPackReadData -/* 4f428: 00000000 */ nop -/* 4f42c: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4f430: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) -/* 4f434: 0c012a34 */ jal __osSiRawStartDma -/* 4f438: 24040001 */ addiu $a0,$zero,0x1 -/* 4f43c: 8fa40020 */ lw $a0,0x20($sp) -/* 4f440: 00002825 */ or $a1,$zero,$zero -/* 4f444: 0c0121bc */ jal osRecvMesg -/* 4f448: 24060001 */ addiu $a2,$zero,0x1 -.L0004f44c: -/* 4f44c: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4f450: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) -/* 4f454: 0c012a34 */ jal __osSiRawStartDma -/* 4f458: 00002025 */ or $a0,$zero,$zero -/* 4f45c: 240f0001 */ addiu $t7,$zero,0x1 -/* 4f460: 3c01800a */ lui $at,%hi(var8009c820) -/* 4f464: afa2001c */ sw $v0,0x1c($sp) -/* 4f468: 0c012a29 */ jal __osSiRelAccess -/* 4f46c: a02fc820 */ sb $t7,%lo(var8009c820)($at) -/* 4f470: 8fbf0014 */ lw $ra,0x14($sp) -/* 4f474: 8fa2001c */ lw $v0,0x1c($sp) -/* 4f478: 27bd0020 */ addiu $sp,$sp,0x20 -/* 4f47c: 03e00008 */ jr $ra -/* 4f480: 00000000 */ nop -); +void __osPackReadData(void); + +s32 osContStartReadData(OSMesgQueue *mq) +{ + s32 ret = 0; + s32 i; + + __osSiGetAccess(); + + if (__osContLastCmd != 1) { + __osPackReadData(); + ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam); + osRecvMesg(mq, NULL, OS_MESG_BLOCK); + } + + ret = __osSiRawStartDma(OS_READ, &__osContPifRam); + + __osContLastCmd = 1; + __osSiRelAccess(); + + return ret; +} GLOBAL_ASM( glabel osContGetReadData -/* 4f484: 3c05800a */ lui $a1,%hi(var8009c820+0x1) -/* 4f488: 24a5c821 */ addiu $a1,$a1,%lo(var8009c820+0x1) +/* 4f484: 3c05800a */ lui $a1,%hi(__osContLastCmd+0x1) +/* 4f488: 24a5c821 */ addiu $a1,$a1,%lo(__osContLastCmd+0x1) /* 4f48c: 90ae0000 */ lbu $t6,0x0($a1) -/* 4f490: 3c02800a */ lui $v0,%hi(var8009c7e0) +/* 4f490: 3c02800a */ lui $v0,%hi(__osContPifRam) /* 4f494: 27bdfff0 */ addiu $sp,$sp,-16 -/* 4f498: 2442c7e0 */ addiu $v0,$v0,%lo(var8009c7e0) +/* 4f498: 2442c7e0 */ addiu $v0,$v0,%lo(__osContPifRam) /* 4f49c: 19c0001a */ blez $t6,.L0004f508 /* 4f4a0: 00001825 */ or $v1,$zero,$zero /* 4f4a4: 27a60004 */ addiu $a2,$sp,0x4 @@ -94,21 +80,21 @@ glabel osContGetReadData GLOBAL_ASM( glabel __osPackReadData -/* 4f510: 3c05800a */ lui $a1,%hi(var8009c7e0) -/* 4f514: 24a5c7e0 */ addiu $a1,$a1,%lo(var8009c7e0) -/* 4f518: 3c04800a */ lui $a0,%hi(var8009c7e0) +/* 4f510: 3c05800a */ lui $a1,%hi(__osContPifRam) +/* 4f514: 24a5c7e0 */ addiu $a1,$a1,%lo(__osContPifRam) +/* 4f518: 3c04800a */ lui $a0,%hi(__osContPifRam) /* 4f51c: 3c03800a */ lui $v1,%hi(var8009c81c) /* 4f520: 27bdffe8 */ addiu $sp,$sp,-24 /* 4f524: 00a01025 */ or $v0,$a1,$zero /* 4f528: 2463c81c */ addiu $v1,$v1,%lo(var8009c81c) -/* 4f52c: 2484c7e0 */ addiu $a0,$a0,%lo(var8009c7e0) +/* 4f52c: 2484c7e0 */ addiu $a0,$a0,%lo(__osContPifRam) .L0004f530: /* 4f530: 24840004 */ addiu $a0,$a0,0x4 /* 4f534: 0083082b */ sltu $at,$a0,$v1 /* 4f538: 1420fffd */ bnez $at,.L0004f530 /* 4f53c: ac80fffc */ sw $zero,-0x4($a0) -/* 4f540: 3c04800a */ lui $a0,%hi(var8009c820+0x1) -/* 4f544: 2484c821 */ addiu $a0,$a0,%lo(var8009c820+0x1) +/* 4f540: 3c04800a */ lui $a0,%hi(__osContLastCmd+0x1) +/* 4f544: 2484c821 */ addiu $a0,$a0,%lo(__osContLastCmd+0x1) /* 4f548: 908c0000 */ lbu $t4,0x0($a0) /* 4f54c: 240e0001 */ addiu $t6,$zero,0x1 /* 4f550: 240f00ff */ addiu $t7,$zero,0xff @@ -149,4 +135,4 @@ glabel __osPackReadData /* 4f5d4: 27bd0018 */ addiu $sp,$sp,0x18 /* 4f5d8: 00000000 */ nop /* 4f5dc: 00000000 */ nop -); \ No newline at end of file +); diff --git a/src/lib/lib_4f5e0.c b/src/lib/lib_4f5e0.c index 05378df1c..c90e50692 100644 --- a/src/lib/lib_4f5e0.c +++ b/src/lib/lib_4f5e0.c @@ -63,8 +63,8 @@ glabel func0004f5e0 /* 4f674: 1464fffa */ bne $v1,$a0,.L0004f660 /* 4f678: a0470002 */ sb $a3,0x2($v0) /* 4f67c: 240f00fe */ addiu $t7,$zero,0xfe -/* 4f680: 3c01800a */ lui $at,%hi(var8009c820) -/* 4f684: a02fc820 */ sb $t7,%lo(var8009c820)($at) +/* 4f680: 3c01800a */ lui $at,%hi(__osContLastCmd) +/* 4f684: a02fc820 */ sb $t7,%lo(__osContLastCmd)($at) /* 4f688: 8e180008 */ lw $t8,0x8($s0) /* 4f68c: afa80024 */ sw $t0,0x24($sp) /* 4f690: afa70034 */ sw $a3,0x34($sp) diff --git a/src/lib/lib_50130.c b/src/lib/lib_50130.c index 2837bc6e1..d36089a65 100644 --- a/src/lib/lib_50130.c +++ b/src/lib/lib_50130.c @@ -123,8 +123,8 @@ glabel func000501a0 /* 5029c: 0c012a34 */ jal __osSiRawStartDma /* 502a0: 00002025 */ or $a0,$zero,$zero /* 502a4: 240c0004 */ addiu $t4,$zero,0x4 -/* 502a8: 3c01800a */ lui $at,%hi(var8009c820) -/* 502ac: a02cc820 */ sb $t4,%lo(var8009c820)($at) +/* 502a8: 3c01800a */ lui $at,%hi(__osContLastCmd) +/* 502ac: a02cc820 */ sb $t4,%lo(__osContLastCmd)($at) /* 502b0: 02402025 */ or $a0,$s2,$zero /* 502b4: 00002825 */ or $a1,$zero,$zero /* 502b8: 0c0121bc */ jal osRecvMesg