? 0x444dc
Jump to navigation
Jump to search
# ROUTINE: ? 0x444dc # Parameters: # r4 = (p1) ? (Sometimes, *0x80010010?) # r5 = (p2) ? (Sometimes, 0x8000?) # Returns: # r2 = ? 800444dc: 27bdfff8 addiu r29,r29,-0x0008 800444e0: 3c038001 lui r3,0x8001 800444e4: 8c630010 lw r3,0x0010(r3) # *0x80010010 800444e8: 00000000 nop 800444ec: 00831023 subu r2,r4,r3 # dividend = p1 - *0x80010010 800444f0: 04410002 bgez r2,0x800444fc 800444f4: 34060001 ori r6,r0,0x0001 # total = 1 # if ((p1 - *0x80010010) < 0) { 800444f8: 244207ff addiu r2,r2,0x07ff # dividend = (p1 - *0x80010010) + 0x7ff # } 800444fc: 000242c3 sra r8,r2,0x0b # dividend / 0x800 80044500: 30a207ff andi r2,r5,0x07ff # p2 & 0x7ff 80044504: 10400002 beq r2,r0,0x80044510 80044508: 00053ac2 srl r7,r5,0x0b # (p2 & 0x7ff) / 0x800 8004450c: 24e70001 addiu r7,r7,0x0001 # ((p2 & 0x7ff) / 0x800) + 1 80044510: 0083102b sltu r2,r4,r3 80044514: 14400037 bne r2,r0,0x800445f4 # if (p1 < *0x80010010) 80044518: 00001021 addu r2,r0,r0 # return 0; 8004451c: 3c020002 lui r2,0x0002 # 0x20000 80044520: 00621021 addu r2,r3,r2 # *0x80010010 + 0x20000 80044524: 0082102b sltu r2,r4,r2 80044528: 10400031 beq r2,r0,0x800445f0 # if (p1 >= (*0x80010010 + 0x20000)) return 0; 8004452c: 34040040 ori r4,r0,0x0040 # 0x40 # do { 80044530: 00001821 addu r3,r0,r0 # index = 0 # do { 80044534: 3c018005 lui r1,0x8005 80044538: 00230821 addu r1,r1,r3 8004453c: 9022e9d4 lbu r2,-0x162c(r1) # *(0x8004e9d4 + index) 80044540: 00000000 nop 80044544: 14460003 bne r2,r6,0x80044554 80044548: 00000000 nop # if (*(0x8004e9d4 + index) == total) { 8004454c: 08011159 j 0x80044564 80044550: 24c60001 addiu r6,r6,0x0001 # total = total + 1 # break; # } 80044554: 24630001 addiu r3,r3,0x0001 # index = index + 1 80044558: 2c620040 sltiu r2,r3,0x0040 8004455c: 1440fff5 bne r2,r0,0x80044534 80044560: 00000000 nop # } while (index < 64) 80044564: 1464fff2 bne r3,r4,0x80044530 80044568: 00000000 nop # } while (index != 64) 8004456c: 01072021 addu r4,r8,r7 # (dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1 80044570: 0104102b sltu r2,r8,r4 80044574: 1040000b beq r2,r0,0x800445a4 80044578: 01001821 addu r3,r8,r0 # value = dividend / 0x800 # if ((dividend / 0x800) < ((dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1)) { # do { 8004457c: 3c018005 lui r1,0x8005 80044580: 00230821 addu r1,r1,r3 80044584: 9022e9d4 lbu r2,-0x162c(r1) # *(0x8004e9d4 + value) 80044588: 00000000 nop 8004458c: 14400006 bne r2,r0,0x800445a8 # if (*(0x8004e9d4 + value) != 0) break; 80044590: 01071021 addu r2,r8,r7 # (dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1 80044594: 24630001 addiu r3,r3,0x0001 # value = value + 1 80044598: 0064102b sltu r2,r3,r4 8004459c: 1440fff7 bne r2,r0,0x8004457c # } while (value < ((dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1)) 800445a0: 00000000 nop # } 800445a4: 01071021 addu r2,r8,r7 # (dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1 800445a8: 14620011 bne r3,r2,0x800445f0 # if (value == ((dividend / 0x800) + ((p2 & 0x7ff) / 0x800) + 1)) { 800445ac: 00000000 nop 800445b0: 10e0000a beq r7,r0,0x800445dc 800445b4: 00001821 addu r3,r0,r0 # value = 0 # if ((((p2 & 0x7ff) / 0x800) + 1) != 0) { 800445b8: 3c048005 lui r4,0x8005 800445bc: 2484e9d4 addiu r4,r4,-0x162c # 0x8004e9d4 # do { 800445c0: 01031021 addu r2,r8,r3 # (dividend / 0x800) + value 800445c4: 00441021 addu r2,r2,r4 # 0x8004e9d4 + ((dividend / 0x800) + value) 800445c8: a0460000 sb r6,0x0000(r2) # *(0x8004e9d4 + ((dividend / 0x800) + value)) = total 800445cc: 24630001 addiu r3,r3,0x0001 # value = value + 1 800445d0: 0067102b sltu r2,r3,r7 800445d4: 1440fffa bne r2,r0,0x800445c0 # } while (value < (((p2 & 0x7ff) / 0x800) + 1)) 800445d8: 00000000 nop # } 800445dc: 3c038001 lui r3,0x8001 800445e0: 8c630010 lw r3,0x0010(r3) # *0x80010010 800445e4: 000812c0 sll r2,r8,0x0b # *0x80010010 / 0x800 800445e8: 0801117d j 0x800445f4 # return (*0x80010010 / 0x800) + *0x80010010 800445ec: 00431021 addu r2,r2,r3 # } else { 800445f0: 00001021 addu r2,r0,r0 # return 0 # } 800445f4: 27bd0008 addiu r29,r29,0x0008 800445f8: 03e00008 jr r31 800445fc: 00000000 nop