? 0x444dc

From Final Fantasy Hacktics Wiki
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