Decompile osContInit

This commit is contained in:
Ryan Dwyer
2021-03-17 08:23:02 +10:00
parent f9b00ee60f
commit 92e142be59
3 changed files with 56 additions and 116 deletions
+8
View File
@@ -103,6 +103,14 @@ typedef char *va_list;
#define PI_DOMAIN1 0
#define PI_DOMAIN2 1
#define OS_CLOCK_RATE 62500000LL
#define OS_CPU_COUNTER (OS_CLOCK_RATE*3/4)
#define OS_NSEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625000LL))/(1000000000LL/15625000LL))
#define OS_USEC_TO_CYCLES(n) (((u64)(n)*(OS_CPU_COUNTER/15625LL))/(1000000LL/15625LL))
#define OS_CYCLES_TO_NSEC(c) (((u64)(c)*(1000000000LL/15625000LL))/(OS_CPU_COUNTER/15625000LL))
#define OS_CYCLES_TO_USEC(c) (((u64)(c)*(1000000LL/15625LL))/(OS_CPU_COUNTER/15625LL))
/* Miscellaneous OS functions */
void osInitialize(void);
+2 -2
View File
@@ -68,8 +68,8 @@ extern OSMesgQueue __osPiAccessQueue;
extern u32 __osContPifRam;
extern u8 __osContLastCmd;
extern u32 __osEepromTimer;
extern u32 __osEepromTimerQ;
extern u32 __osEepromTimerMsg;
extern OSMesgQueue __osEepromTimerQ;
extern OSMesg __osEepromTimerMsg;
extern u32 __osEepPifRam;
extern u32 var8009ca84;
extern void *var8009cac0;
+46 -114
View File
@@ -4,123 +4,55 @@
OSPifRam __osContPifRam;
u8 __osContLastCmd;
u8 __osMaxControllers;
u32 var8009c824;
u32 __osEepromTimer;
u32 var8009c82c;
u32 var8009c830;
u32 var8009c834;
u32 var8009c838;
u32 var8009c83c;
u32 var8009c840;
u32 var8009c844;
u32 __osEepromTimerQ;
u32 var8009c84c;
u32 var8009c850;
u32 var8009c854;
u32 var8009c858;
u32 var8009c85c;
u32 __osEepromTimerMsg;
OSTimer __osEepromTimer;
OSMesgQueue __osEepromTimerQ;
OSMesg __osEepromTimerMsg;
u32 __osContInitialized = 0;
GLOBAL_ASM(
glabel osContInit
/* 4a980: 27bdff90 */ addiu $sp,$sp,-112
/* 4a984: 3c0e8006 */ lui $t6,%hi(__osContInitialized)
/* 4a988: 8dce0960 */ lw $t6,%lo(__osContInitialized)($t6)
/* 4a98c: afbf0024 */ sw $ra,0x24($sp)
/* 4a990: afa40070 */ sw $a0,0x70($sp)
/* 4a994: afa50074 */ sw $a1,0x74($sp)
/* 4a998: afa60078 */ sw $a2,0x78($sp)
/* 4a99c: 11c00003 */ beqz $t6,.L0004a9ac
/* 4a9a0: afa00068 */ sw $zero,0x68($sp)
/* 4a9a4: 1000004e */ b .L0004aae0
/* 4a9a8: 00001025 */ or $v0,$zero,$zero
.L0004a9ac:
/* 4a9ac: 240f0001 */ addiu $t7,$zero,0x1
/* 4a9b0: 3c018006 */ lui $at,%hi(__osContInitialized)
/* 4a9b4: 0c012448 */ jal osGetTime
/* 4a9b8: ac2f0960 */ sw $t7,%lo(__osContInitialized)($at)
/* 4a9bc: afa20060 */ sw $v0,0x60($sp)
/* 4a9c0: 8fb80060 */ lw $t8,0x60($sp)
/* 4a9c4: afa30064 */ sw $v1,0x64($sp)
/* 4a9c8: 8fb90064 */ lw $t9,0x64($sp)
/* 4a9cc: 17000020 */ bnez $t8,.L0004aa50
/* 4a9d0: 3c010165 */ lui $at,0x165
/* 4a9d4: 3421a0bc */ ori $at,$at,0xa0bc
/* 4a9d8: 0321082b */ sltu $at,$t9,$at
/* 4a9dc: 1020001c */ beqz $at,.L0004aa50
/* 4a9e0: 00000000 */ nop
/* 4a9e4: 27a40028 */ addiu $a0,$sp,0x28
/* 4a9e8: 27a5006c */ addiu $a1,$sp,0x6c
/* 4a9ec: 0c0120d0 */ jal osCreateMesgQueue
/* 4a9f0: 24060001 */ addiu $a2,$zero,0x1
/* 4a9f4: 8fa80060 */ lw $t0,0x60($sp)
/* 4a9f8: 8fa90064 */ lw $t1,0x64($sp)
/* 4a9fc: 3c0b0165 */ lui $t3,0x165
/* 4aa00: 356ba0bc */ ori $t3,$t3,0xa0bc
/* 4aa04: 240a0000 */ addiu $t2,$zero,0x0
/* 4aa08: 240c0000 */ addiu $t4,$zero,0x0
/* 4aa0c: 240d0000 */ addiu $t5,$zero,0x0
/* 4aa10: 27ae0028 */ addiu $t6,$sp,0x28
/* 4aa14: 27af006c */ addiu $t7,$sp,0x6c
/* 4aa18: 01483023 */ subu $a2,$t2,$t0
/* 4aa1c: 0169082b */ sltu $at,$t3,$t1
/* 4aa20: 00c13023 */ subu $a2,$a2,$at
/* 4aa24: afaf001c */ sw $t7,0x1c($sp)
/* 4aa28: afae0018 */ sw $t6,0x18($sp)
/* 4aa2c: afad0014 */ sw $t5,0x14($sp)
/* 4aa30: afac0010 */ sw $t4,0x10($sp)
/* 4aa34: 27a40040 */ addiu $a0,$sp,0x40
/* 4aa38: 0c0122c8 */ jal osSetTimer
/* 4aa3c: 01693823 */ subu $a3,$t3,$t1
/* 4aa40: 27a40028 */ addiu $a0,$sp,0x28
/* 4aa44: 27a5006c */ addiu $a1,$sp,0x6c
/* 4aa48: 0c0121bc */ jal osRecvMesg
/* 4aa4c: 24060001 */ addiu $a2,$zero,0x1
.L0004aa50:
/* 4aa50: 24180004 */ addiu $t8,$zero,0x4
/* 4aa54: 3c01800a */ lui $at,%hi(__osContLastCmd+0x1)
/* 4aa58: a038c821 */ sb $t8,%lo(__osContLastCmd+0x1)($at)
/* 4aa5c: 0c012af0 */ jal __osPackRequestData
/* 4aa60: 00002025 */ or $a0,$zero,$zero
/* 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)
/* 4aa78: 8fa40070 */ lw $a0,0x70($sp)
/* 4aa7c: 27a5006c */ addiu $a1,$sp,0x6c
/* 4aa80: 0c0121bc */ jal osRecvMesg
/* 4aa84: 24060001 */ addiu $a2,$zero,0x1
/* 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)
/* 4aa9c: 8fa40070 */ lw $a0,0x70($sp)
/* 4aaa0: 27a5006c */ addiu $a1,$sp,0x6c
/* 4aaa4: 0c0121bc */ jal osRecvMesg
/* 4aaa8: 24060001 */ addiu $a2,$zero,0x1
/* 4aaac: 8fa40074 */ lw $a0,0x74($sp)
/* 4aab0: 0c012abc */ jal __osContGetInitData
/* 4aab4: 8fa50078 */ lw $a1,0x78($sp)
/* 4aab8: 3c01800a */ lui $at,%hi(__osContLastCmd)
/* 4aabc: 0c012a04 */ jal __osSiCreateAccessQueue
/* 4aac0: a020c820 */ sb $zero,%lo(__osContLastCmd)($at)
/* 4aac4: 3c04800a */ lui $a0,%hi(__osEepromTimerQ)
/* 4aac8: 3c05800a */ lui $a1,%hi(__osEepromTimerMsg)
/* 4aacc: 24a5c860 */ addiu $a1,$a1,%lo(__osEepromTimerMsg)
/* 4aad0: 2484c848 */ addiu $a0,$a0,%lo(__osEepromTimerQ)
/* 4aad4: 0c0120d0 */ jal osCreateMesgQueue
/* 4aad8: 24060001 */ addiu $a2,$zero,0x1
/* 4aadc: 8fa20068 */ lw $v0,0x68($sp)
.L0004aae0:
/* 4aae0: 8fbf0024 */ lw $ra,0x24($sp)
/* 4aae4: 27bd0070 */ addiu $sp,$sp,0x70
/* 4aae8: 03e00008 */ jr $ra
/* 4aaec: 00000000 */ nop
);
void __osContGetInitData(u8 *pattern, OSContStatus *data);
void __osPackRequestData(u8 cmd);
s32 osContInit(OSMesgQueue *mq, u8 *bitpattern, OSContStatus *data)
{
OSMesg dummy;
s32 ret;
OSTime t;
OSTimer mytimer;
OSMesgQueue timerMesgQueue;
ret = 0;
if (__osContInitialized) {
return ret;
}
__osContInitialized = TRUE;
t = osGetTime();
if (t < 23437500) {
osCreateMesgQueue(&timerMesgQueue, &dummy, 1);
osSetTimer(&mytimer, 23437500 - t, 0, &timerMesgQueue, &dummy);
osRecvMesg(&timerMesgQueue, &dummy, OS_MESG_BLOCK);
}
__osMaxControllers = MAXCONTROLLERS;
__osPackRequestData(CONT_CMD_REQUEST_STATUS);
ret = __osSiRawStartDma(OS_WRITE, &__osContPifRam);
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
ret = __osSiRawStartDma(OS_READ, &__osContPifRam);
osRecvMesg(mq, &dummy, OS_MESG_BLOCK);
__osContGetInitData(bitpattern, data);
__osContLastCmd = CONT_CMD_REQUEST_STATUS;
__osSiCreateAccessQueue();
osCreateMesgQueue(&__osEepromTimerQ, &__osEepromTimerMsg, 1);
return ret;
}
void __osContGetInitData(u8 *pattern, OSContStatus *data)
{