Display Related (0x7af44)
Jump to navigation
Jump to search
Alternate documentation here: Construct Polygon Data for Units
# ROUTINE: DISPLAY RELATED? 0x7af44 # Parameters: # r4 = (display) Display Pointer (Example: Misc Unit Data + 0x3fa; Numerical Display Data 3 Pointer) # r5 = (p2) End value for loop ? # r6 = (p3) Start value for loop ? # r7 = (p4) ? # STACK + 0x10 = (p5) ? # STACK + 0x14 = (p6) Flags ? # STACK + 0x18 = (p7) Array of 2 halfwords (2-byte values) ? # STACK + 0x1c = (p8) ? 8007af44: 27bdffa8 addiu r29,r29,-0x0058 8007af48: afb20038 sw r18,0x0038(r29) 8007af4c: 87b20068 lh r18,0x0068(r29) # p5 8007af50: afb60048 sw r22,0x0048(r29) 8007af54: 0080b021 addu r22,r4,r0 # display 8007af58: afb40040 sw r20,0x0040(r29) 8007af5c: 00c0a021 addu r20,r6,r0 # count = p3 8007af60: afb3003c sw r19,0x003c(r29) 8007af64: 00e09821 addu r19,r7,r0 # p4 8007af68: afbf0054 sw r31,0x0054(r29) 8007af6c: afbe0050 sw r30,0x0050(r29) 8007af70: afb7004c sw r23,0x004c(r29) 8007af74: afb50044 sw r21,0x0044(r29) 8007af78: afb10034 sw r17,0x0034(r29) 8007af7c: afb00030 sw r16,0x0030(r29) 8007af80: afa50020 sw r5,0x0020(r29) # p2 8007af84: 96c4000c lhu r4,0x000c(r22) # display.0xC 8007af88: 8fb00070 lw r16,0x0070(r29) # p7 8007af8c: 8fb50074 lw r21,0x0074(r29) # p8 8007af90: 97b7006c lhu r23,0x006c(r29) # p6 8007af94: 0c006f0a jal 0x8001bc28 # ROUTINE: result = ? 0x1bc28 (p5 + display.0xC) 8007af98: 02442021 addu r4,r18,r4 8007af9c: 00021400 sll r2,r2,0x10 # result << 16 8007afa0: 86030000 lh r3,0x0000(r16) # *p7 8007afa4: 00021403 sra r2,r2,0x10 # result 8007afa8: 00430018 mult r2,r3 8007afac: 00001812 mflo r3 # result * *p7 8007afb0: 96c40008 lhu r4,0x0008(r22) # display.0x8 8007afb4: 00031b03 sra r3,r3,0x0c # (result * *p7) >> 12 8007afb8: 00640018 mult r3,r4 8007afbc: 3c11800a lui r17,0x800a 8007afc0: 26318dcc addiu r17,r17,-0x7234 # 0x80098dcc 8007afc4: 00001812 mflo r3 # ((result * *p7) >> 12) * display.0x8 8007afc8: 00031b03 sra r3,r3,0x0c # (((result * *p7) >> 12) * display.0x8) >> 12 8007afcc: a6230000 sh r3,0x0000(r17) # 0x80098dcc = (((result * *p7) >> 12) * display.0x8) >> 12 8007afd0: 86030002 lh r3,0x0002(r16) # *(p7 + 2) 8007afd4: 00000000 nop 8007afd8: 00430018 mult r2,r3 8007afdc: 00001012 mflo r2 # result * *(p7 + 2) 8007afe0: 96c3000a lhu r3,0x000a(r22) # display.0xA 8007afe4: 00021303 sra r2,r2,0x0c # result * *(p7 + 2) >> 12 8007afe8: 00430018 mult r2,r3 8007afec: 00001012 mflo r2 # (result * *(p7 + 2) >> 12) * display.0xA 8007aff0: 00021303 sra r2,r2,0x0c # ((result * *(p7 + 2) >> 12) * display.0xA) >> 12 8007aff4: 3c01800a lui r1,0x800a 8007aff8: a4228dd4 sh r2,-0x722c(r1) # *0x80098dd4 = ((result * *(p7 + 2) >> 12) * display.0xA) >> 12 8007affc: 96c4000c lhu r4,0x000c(r22) # display.0xC 8007b000: 0c006ed7 jal 0x8001bb5c 8007b004: 02442021 addu r4,r18,r4 # ROUTINE: result = ? 0x1bb5c (p5 + display.0xC) 8007b008: 00021400 sll r2,r2,0x10 8007b00c: 00021403 sra r2,r2,0x10 8007b010: 86040002 lh r4,0x0002(r16) # *(p7 + 2) 8007b014: 00021823 subu r3,r0,r2 # -result 8007b018: 00640018 mult r3,r4 8007b01c: 00001812 mflo r3 # -result * *(p7 + 2) 8007b020: 96c4000a lhu r4,0x000a(r22) # display.0xA 8007b024: 00031b03 sra r3,r3,0x0c # (-result * *(p7 + 2)) >> 12 8007b028: 00640018 mult r3,r4 8007b02c: 00001812 mflo r3 # ((-result * *(p7 + 2)) >> 12) * display.0xA 8007b030: 00031b03 sra r3,r3,0x0c # (((-result * *(p7 + 2)) >> 12) * display.0xA) >> 12 8007b034: 3c01800a lui r1,0x800a 8007b038: a4238dce sh r3,-0x7232(r1) # *0x80098dce = (((-result * *(p7 + 2)) >> 12) * display.0xA) >> 12 8007b03c: 86030000 lh r3,0x0000(r16) # *p7 8007b040: 00000000 nop 8007b044: 00430018 mult r2,r3 8007b048: 00001012 mflo r2 # result * *p7 8007b04c: 96c30008 lhu r3,0x0008(r22) # display.0x8 8007b050: 00021303 sra r2,r2,0x0c # (result * *p7) >> 12 8007b054: 00430018 mult r2,r3 8007b058: 00001012 mflo r2 # ((result * *p7) >> 12) * display.0x8 8007b05c: 00021303 sra r2,r2,0x0c # (((result * *p7) >> 12) * display.0x8) >> 12 8007b060: 3c01800a lui r1,0x800a 8007b064: a4228dd2 sh r2,-0x722e(r1) # *0x80098dd2 = (((result * *p7) >> 12) * display.0x8) >> 12 8007b068: 86620000 lh r2,0x0000(r19) # *p4 8007b06c: 3c01800a lui r1,0x800a 8007b070: ac228de0 sw r2,-0x7220(r1) # *0x80098de0 = *p4 8007b074: 86620002 lh r2,0x0002(r19) # *(p4 + 2) 8007b078: 3c01800a lui r1,0x800a 8007b07c: ac228de4 sw r2,-0x721c(r1) # *0x80098de4 = *(p4 + 2) 8007b080: 0c00742a jal 0x8001d0a8 # ROUTINE: ? 0x1d0a8 (0x80098dcc) 8007b084: 02202021 addu r4,r17,r0 8007b088: 0c00744e jal 0x8001d138 # ROUTINE: ? 0x1d138 (0x80098dcc) 8007b08c: 02202021 addu r4,r17,r0 8007b090: 8fa80020 lw r8,0x0020(r29) # p2 8007b094: 00000000 nop 8007b098: 0288102a slt r2,r20,r8 8007b09c: 10400106 beq r2,r0,0x8007b4b8 8007b0a0: 3c1eb60b lui r30,0xb60b # 0xb60b0000 # if (count >= p2), return 0 8007b0a4: 3c07800a lui r7,0x800a 8007b0a8: 24e77784 addiu r7,r7,0x7784 # 0x800a7784 8007b0ac: 3c06800c lui r6,0x800c 8007b0b0: 24c67ca8 addiu r6,r6,0x7ca8 # 0x800c7ca8 8007b0b4: 37de60b7 ori r30,r30,0x60b7 # 0xb60b60b7 // Will be used to represent decimal value 0.7111111 8007b0b8: 3c1100ff lui r17,0x00ff 8007b0bc: 3631ffff ori r17,r17,0xffff # 0x00ffffff 8007b0c0: 3c13ff00 lui r19,0xff00 # 0xff000000 8007b0c4: 001410c0 sll r2,r20,0x03 # count * 8 # do { 8007b0c8: 00541023 subu r2,r2,r20 # count * 7 8007b0cc: 2442000e addiu r2,r2,0x000e # count * 7 + 14 8007b0d0: 02c28021 addu r16,r22,r2 # ptr = display + (count * 7 + 14) 8007b0d4: 92120006 lbu r18,0x0006(r16) # *(ptr + 6) 8007b0d8: afa60028 sw r6,0x0028(r29) # 0x800c7ca8 8007b0dc: 0c01ebc2 jal 0x8007af08 # ROUTINE: result = ? 0x7af08 8007b0e0: afa7002c sw r7,0x002c(r29) # 0x800a7784 8007b0e4: 00021400 sll r2,r2,0x10 8007b0e8: 00021403 sra r2,r2,0x10 # result 8007b0ec: 02571826 xor r3,r18,r23 # *(ptr + 6) XOR p6 8007b0f0: 00609021 addu r18,r3,r0 # r18 = *(ptr + 6) XOR p6 8007b0f4: 00021880 sll r3,r2,0x02 # result * 4 8007b0f8: 00621821 addu r3,r3,r2 # result * 5 8007b0fc: 3c02800e lui r2,0x800e 8007b100: 8c424e70 lw r2,0x4e70(r2) # *0x800e4e70 8007b104: 000318c0 sll r3,r3,0x03 # result * 40 8007b108: 00622021 addu r4,r3,r2 # ptr4 = (result * 40) + *0x800e4e70 // sprite display data? 8007b10c: 34020009 ori r2,r0,0x0009 # 9 8007b110: a0820003 sb r2,0x0003(r4) # *(ptr4 + 3) = 9 8007b114: 3402002c ori r2,r0,0x002c # 44 8007b118: a0820007 sb r2,0x0007(r4) # *(ptr4 + 7) = 44 8007b11c: 32e20002 andi r2,r23,0x0002 # p6 & 2 8007b120: 8fa60028 lw r6,0x0028(r29) # 0x800c7ca8 8007b124: 8fa7002c lw r7,0x002c(r29) # 0x800a7784 8007b128: 10400008 beq r2,r0,0x8007b14c # if ((p6 & 2) != 0) { 8007b12c: 00000000 nop 8007b130: 92020000 lbu r2,0x0000(r16) # *ptr 8007b134: 92030002 lbu r3,0x0002(r16) # *(ptr + 2) 8007b138: 00021600 sll r2,r2,0x18 8007b13c: 00021603 sra r2,r2,0x18 8007b140: 00021023 subu r2,r0,r2 # -*ptr 8007b144: 0801ec57 j 0x8007b15c 8007b148: 00432823 subu r5,r2,r3 # value = -*ptr - *(ptr + 2) # } else { 8007b14c: 92020000 lbu r2,0x0000(r16) # *ptr 8007b150: 00000000 nop 8007b154: 00021600 sll r2,r2,0x18 8007b158: 00022e03 sra r5,r2,0x18 # value = *ptr # } 8007b15c: 32e20004 andi r2,r23,0x0004 # p6 & 4 8007b160: 10400008 beq r2,r0,0x8007b184 # if ((p6 & 4) != 0) { 8007b164: 00000000 nop 8007b168: 92020001 lbu r2,0x0001(r16) # *(ptr + 1) 8007b16c: 92030003 lbu r3,0x0003(r16) # *(ptr + 3) 8007b170: 00021600 sll r2,r2,0x18 8007b174: 00021603 sra r2,r2,0x18 8007b178: 00021023 subu r2,r0,r2 # -*(ptr + 1) 8007b17c: 0801ec65 j 0x8007b194 8007b180: 00431823 subu r3,r2,r3 # r3 = -*(ptr + 1) - *(ptr + 3) # } else { 8007b184: 92020001 lbu r2,0x0001(r16) # *(ptr + 1) 8007b188: 00000000 nop 8007b18c: 00021600 sll r2,r2,0x18 8007b190: 00021e03 sra r3,r2,0x18 # r3 = *(ptr + 1) # } 8007b194: 32420002 andi r2,r18,0x0002 # r18 & 2 8007b198: 1040000e beq r2,r0,0x8007b1d4 # if ((*(ptr + 6) & 2) != 0) { 8007b19c: 00000000 nop 8007b1a0: 3c01800a lui r1,0x800a 8007b1a4: a42577a8 sh r5,0x77a8(r1) # *0x800a77a8 = value 8007b1a8: 3c01800a lui r1,0x800a 8007b1ac: a4257798 sh r5,0x7798(r1) # *0x800a7798 = value 8007b1b0: 92020002 lbu r2,0x0002(r16) # *(ptr + 2) 8007b1b4: 00000000 nop 8007b1b8: 00451021 addu r2,r2,r5 # *(ptr + 2) + value 8007b1bc: 3c01800a lui r1,0x800a 8007b1c0: a42277a0 sh r2,0x77a0(r1) # *0x800a77a0 = *(ptr + 2) + value 8007b1c4: 3c01800a lui r1,0x800a 8007b1c8: a4227790 sh r2,0x7790(r1) # *0x800a7790 = *(ptr + 2) + value 8007b1cc: 0801ec81 j 0x8007b204 8007b1d0: 32420004 andi r2,r18,0x0004 # r18 & 4 # } else { 8007b1d4: 3c01800a lui r1,0x800a 8007b1d8: a42577a0 sh r5,0x77a0(r1) # *0x800a77a0 = value 8007b1dc: 3c01800a lui r1,0x800a 8007b1e0: a4257790 sh r5,0x7790(r1) # *0x800a7790 = value 8007b1e4: 92020002 lbu r2,0x0002(r16) # *(ptr + 2) 8007b1e8: 00000000 nop 8007b1ec: 00451021 addu r2,r2,r5 # *(ptr + 2) + value 8007b1f0: 3c01800a lui r1,0x800a 8007b1f4: a42277a8 sh r2,0x77a8(r1) # *0x800a77a8 = *(ptr + 2) + value 8007b1f8: 3c01800a lui r1,0x800a 8007b1fc: a4227798 sh r2,0x7798(r1) # *0x800a7798 = *(ptr + 2) + value 8007b200: 32420004 andi r2,r18,0x0004 # r18 & 4 # } 8007b204: 1040000e beq r2,r0,0x8007b240 # if ((*(ptr + 6) & 4) != 0) { 8007b208: 00000000 nop 8007b20c: 3c01800a lui r1,0x800a 8007b210: a42377aa sh r3,0x77aa(r1) # *0x800a77aa = r3 8007b214: 3c01800a lui r1,0x800a 8007b218: a42377a2 sh r3,0x77a2(r1) # *0x800a77a2 = r3 8007b21c: 92020003 lbu r2,0x0003(r16) # *(ptr + 3) 8007b220: 00000000 nop 8007b224: 00431021 addu r2,r2,r3 # *(ptr + 3) + r3 8007b228: 3c01800a lui r1,0x800a 8007b22c: a422779a sh r2,0x779a(r1) # *0x800a779a = *(ptr + 3) + r3 8007b230: 3c01800a lui r1,0x800a 8007b234: a4227792 sh r2,0x7792(r1) # *0x800a7792 = *(ptr + 3) + r3 8007b238: 0801ec9b j 0x8007b26c 8007b23c: 00000000 nop # } else { 8007b240: 3c01800a lui r1,0x800a 8007b244: a423779a sh r3,0x779a(r1) # *0x800a779a = r3 8007b248: 3c01800a lui r1,0x800a 8007b24c: a4237792 sh r3,0x7792(r1) # *0x800a7792 = r3 8007b250: 92020003 lbu r2,0x0003(r16) # *(ptr + 3) 8007b254: 00000000 nop 8007b258: 00431021 addu r2,r2,r3 # *(ptr + 3) + r3 8007b25c: 3c01800a lui r1,0x800a 8007b260: a42277aa sh r2,0x77aa(r1) # *0x800a77aa = *(ptr + 3) + r3 8007b264: 3c01800a lui r1,0x800a 8007b268: a42277a2 sh r2,0x77a2(r1) # *0x800a77a2 = *(ptr + 3) + r3 # } 8007b26c: 3c08800a lui r8,0x800a 8007b270: 25087790 addiu r8,r8,0x7790 # 0x800a7790 8007b274: 01006021 addu r12,r8,r0 # 0x800a7790 8007b278: 3c08800a lui r8,0x800a 8007b27c: 25087798 addiu r8,r8,0x7798 # 0x800a7798 8007b280: 01006821 addu r13,r8,r0 # 0x800a7798 8007b284: 3c08800a lui r8,0x800a 8007b288: 250877a0 addiu r8,r8,0x77a0 # 0x800a7780 8007b28c: 01007021 addu r14,r8,r0 # 0x800a7780 8007b290: c9800000 lwc2 gtedr00_vxy0,0x0000(r12) # GTE vxy0 = *0x800a7790 8007b294: c9810004 lwc2 gtedr01_vz0,0x0004(r12) # GTE vz0 = *0x800a7794 8007b298: c9a20000 lwc2 gtedr02_vxy1,0x0000(r13) # GTE vxy1 = *0x800a7798 8007b29c: c9a30004 lwc2 gtedr03_vz1,0x0004(r13) # GTE vz1 = *0x800a779c 8007b2a0: c9c40000 lwc2 gtedr04_vxy2,0x0000(r14) # GTE vxy2 = *0x800a7780 8007b2a4: c9c50004 lwc2 gtedr05_vz2,0x0004(r14) # GTE vz2 = *0x800a7784 8007b2a8: 00000000 nop 8007b2ac: 00000000 nop 8007b2b0: 4a280030 rtpt # GTE command: rtpt 8007b2b4: 02571025 or r2,r18,r23 # r18 | p6 8007b2b8: 30420001 andi r2,r2,0x0001 # (*(ptr + 6) | p6) & 0x01 8007b2bc: 10400004 beq r2,r0,0x8007b2d0 # if (((*(ptr + 6) | p6) & 0x01) != 0) { 8007b2c0: 00000000 nop 8007b2c4: 90820007 lbu r2,0x0007(r4) # *(ptr4 + 7) 8007b2c8: 0801ecb7 j 0x8007b2dc 8007b2cc: 34420002 ori r2,r2,0x0002 # *(ptr4 + 7) | 0x02 // Include 0x02 flag # } else { 8007b2d0: 90820007 lbu r2,0x0007(r4) # *(ptr4 + 7) 8007b2d4: 00000000 nop 8007b2d8: 304200fd andi r2,r2,0x00fd # *(ptr4 + 7) & 0xfd // Remove 0x02 flag 8007b2dc: a0820007 sb r2,0x0007(r4) # } 8007b2e0: 96c20004 lhu r2,0x0004(r22) # display.0x04 8007b2e4: 32e30060 andi r3,r23,0x0060 # p6 & 0x60 8007b2e8: 00431025 or r2,r2,r3 # display.0x04 | (p6 & 0x60) 8007b2ec: a4820016 sh r2,0x0016(r4) # *(ptr4 + 0x16) = display.0x04 | (p6 & 0x60) 8007b2f0: 96c20006 lhu r2,0x0006(r22) # VRAM Palette 8007b2f4: 00000000 nop 8007b2f8: a482000e sh r2,0x000e(r4) # *(ptr4 + 0x0e) = VRAM Palette 8007b2fc: 24820008 addiu r2,r4,0x0008 # ptr4 + 8 8007b300: 00406021 addu r12,r2,r0 # ptr4 + 8 8007b304: 24820010 addiu r2,r4,0x0010 # ptr4 + 0x10 8007b308: 00406821 addu r13,r2,r0 # ptr4 + 0x10 8007b30c: 24820018 addiu r2,r4,0x0018 # ptr4 + 0x18 8007b310: 00407021 addu r14,r2,r0 # ptr4 + 0x18 8007b314: e98c0000 swc2 gtedr12_sxy0,0x0000(r12) # *(ptr4 + 8) = GTE sxy0 8007b318: e9ad0000 swc2 gtedr13_sxy1,0x0000(r13) # *(ptr4 + 0x10) = GTE sxy1 8007b31c: e9ce0000 swc2 gtedr14_sxy2,0x0000(r14) # *(ptr4 + 0x18) = GTE sxy2 8007b320: 3c08800a lui r8,0x800a 8007b324: 250877a8 addiu r8,r8,0x77a8 # 0x800a77a8 8007b328: 01006021 addu r12,r8,r0 # 0x800a77a8 8007b32c: c9800000 lwc2 gtedr00_vxy0,0x0000(r12) # GTE $vxy0 = *(ptr4 + 8) 8007b330: c9810004 lwc2 gtedr01_vz0,0x0004(r12) # GTE $vxy1 = *(ptr4 + 12) 8007b334: 00000000 nop 8007b338: 00000000 nop 8007b33c: 4a180001 rtps # GTE command: rtps 8007b340: 96c20000 lhu r2,0x0000(r22) # display.0x0 8007b344: 00000000 nop 8007b348: a4820004 sh r2,0x0004(r4) # *(ptr4 + 4) = display.0x0 8007b34c: 92c20002 lbu r2,0x0002(r22) # display.0x2 8007b350: 00000000 nop 8007b354: a0820006 sb r2,0x0006(r4) # *(ptr4 + 6) = display.0x2 8007b358: 24820020 addiu r2,r4,0x0020 # ptr4 + 0x20 8007b35c: 00406021 addu r12,r2,r0 # ptr4 + 0x20 8007b360: e98e0000 swc2 gtedr14_sxy2,0x0000(r12) # *(ptr4 + 0x20) = GTE sxy2 8007b364: 92020004 lbu r2,0x0004(r16) # *(ptr + 4) 8007b368: 00000000 nop 8007b36c: a082001c sb r2,0x001c(r4) # *(ptr4 + 0x1c) = *(ptr + 4) 8007b370: a082000c sb r2,0x000c(r4) # *(ptr4 + 0x0c) = *(ptr + 4) 8007b374: 92030002 lbu r3,0x0002(r16) # *(ptr + 2) 8007b378: 00000000 nop 8007b37c: 00431021 addu r2,r2,r3 # *(ptr + 4) + *(ptr + 2) 8007b380: a0820024 sb r2,0x0024(r4) # *(ptr4 + 0x24) = *(ptr + 4) + *(ptr + 2) 8007b384: a0820014 sb r2,0x0014(r4) # *(ptr4 + 0x14) = *(ptr + 4) + *(ptr + 2) 8007b388: 92020005 lbu r2,0x0005(r16) # *(ptr + 5) 8007b38c: 00000000 nop 8007b390: a0820015 sb r2,0x0015(r4) # *(ptr4 + 0x15) = *(ptr + 5) 8007b394: a082000d sb r2,0x000d(r4) # *(ptr4 + 0x0d) = *(ptr + 5) 8007b398: 92030003 lbu r3,0x0003(r16) # *(ptr + 3) 8007b39c: 00000000 nop 8007b3a0: 00431021 addu r2,r2,r3 # *(ptr + 5) + *(ptr + 3) 8007b3a4: a0820025 sb r2,0x0025(r4) # *(ptr4 + 0x25) = *(ptr + 5) + *(ptr + 3) 8007b3a8: a082001d sb r2,0x001d(r4) # *(ptr4 + 0x1d) = *(ptr + 5) + *(ptr + 3) 8007b3ac: 32420080 andi r2,r18,0x0080 # r18 & 0x80 8007b3b0: 10400031 beq r2,r0,0x8007b478 # if (((r18 & 0x80) != 0) 8007b3b4: 00000000 nop 8007b3b8: 94e20000 lhu r2,0x0000(r7) # *0x800a7784 8007b3bc: 00000000 nop 8007b3c0: 30450fff andi r5,r2,0x0fff # *0x800a7784 & 0x0fff 8007b3c4: 28a20400 slti r2,r5,0x0400 8007b3c8: 1040002b beq r2,r0,0x8007b478 8007b3cc: 24a2fed2 addiu r2,r5,-0x012e # (*0x800a7784 & 0x0fff) - 0x012e # and ((*0x800a7784 & 0x0fff) < 0x400)) { 8007b3d0: 8cc30000 lw r3,0x0000(r6) # *0x800c7ca8 8007b3d4: 00000000 nop 8007b3d8: 00430018 mult r2,r3 8007b3dc: 00001812 mflo r3 # value = ((*0x800a7784 & 0x0fff) - 0x012e) * *0x800c7ca8 8007b3e0: 00000000 nop 8007b3e4: 00000000 nop 8007b3e8: 007e0018 mult r3,r30 8007b3ec: 00001010 mfhi r2 # value * 0.7111111 // (* 0xb60b60b7 >> 32) 8007b3f0: 00431021 addu r2,r2,r3 # value * 1.7111111 8007b3f4: 00021483 sra r2,r2,0x12 # value * 1.7111111) >> 12 8007b3f8: 00031fc3 sra r3,r3,0x1f # value >> 31 8007b3fc: 00431023 subu r2,r2,r3 # (value * 1.7111111) >> 12) - (value >> 31) 8007b400: 00021080 sll r2,r2,0x02 # ((value * 1.7111111) >> 12) - (value >> 31)) << 2 8007b404: 02a21023 subu r2,r21,r2 # tempPtr = p8 - (((value * 1.7111111) >> 12) - (value >> 31)) << 2) 8007b408: 8c830000 lw r3,0x0000(r4) # *ptr4 8007b40c: 8c42fffc lw r2,-0x0004(r2) # *(tempPtr - 4) 8007b410: 00731824 and r3,r3,r19 # *ptr4 & 0xff000000 8007b414: 00511024 and r2,r2,r17 # *(tempPtr - 4) & 0x00ffffff 8007b418: 00621825 or r3,r3,r2 # (*ptr4 & 0xff000000) | (*(tempPtr - 4) & 0x00ffffff) 8007b41c: ac830000 sw r3,0x0000(r4) # *ptr4 = (*ptr4 & 0xff000000) | (*(tempPtr - 4) & 0x00ffffff) 8007b420: 94e20000 lhu r2,0x0000(r7) # *0x800a7784 8007b424: 8cc30000 lw r3,0x0000(r6) # *0x800c7ca8 8007b428: 30420fff andi r2,r2,0x0fff # *0x800a7784 & 0x0fff 8007b42c: 2442fed2 addiu r2,r2,-0x012e # (*0x800a7784 & 0x0fff) - 0x12e 8007b430: 00430018 mult r2,r3 8007b434: 00001812 mflo r3 # value = ((*0x800a7784 & 0x0fff) - 0x12e) * *0x800c7ca8 8007b438: 00000000 nop 8007b43c: 00000000 nop 8007b440: 007e0018 mult r3,r30 8007b444: 00001010 mfhi r2 # value * 0.7111111 8007b448: 00431021 addu r2,r2,r3 # value * 1.7111111 8007b44c: 00021483 sra r2,r2,0x12 # (value * 1.7111111) >> 0x12 8007b450: 00031fc3 sra r3,r3,0x1f # value >> 31 8007b454: 00431023 subu r2,r2,r3 # ((value * 1.7111111) >> 0x12) - (value >> 31) 8007b458: 00021080 sll r2,r2,0x02 # (((value * 1.7111111) >> 0x12) - (value >> 31)) << 2 8007b45c: 02a21023 subu r2,r21,r2 # tempPtr = p8 - (((value * 1.7111111) >> 12) - (value >> 31)) << 2) 8007b460: 8c43fffc lw r3,-0x0004(r2) # *(tempPtr - 4) 8007b464: 00912024 and r4,r4,r17 # ptr4 & 0x00ffffff 8007b468: 00731824 and r3,r3,r19 # *(tempPtr - 4) & 0xff000000 8007b46c: 00641825 or r3,r3,r4 # (ptr4 & 0x00ffffff) | (*(tempPtr - 4) & 0xff000000) 8007b470: 0801ed29 j 0x8007b4a4 8007b474: ac43fffc sw r3,-0x0004(r2) # *(tempPtr - 4) = (ptr4 & 0x00ffffff) | (*(tempPtr - 4) & 0xff000000) # } else { 8007b478: 8c830000 lw r3,0x0000(r4) # *ptr4 8007b47c: 8ea20000 lw r2,0x0000(r21) # *p8 8007b480: 00731824 and r3,r3,r19 # *ptr4 & 0xff000000 8007b484: 00511024 and r2,r2,r17 # *p8 & 0x00ffffff 8007b488: 00621825 or r3,r3,r2 # (*ptr4 & 0xff000000) | (*p8 & 0x00ffffff) 8007b48c: ac830000 sw r3,0x0000(r4) # *ptr4 = (*ptr4 & 0xff000000) | (*p8 & 0x00ffffff) 8007b490: 8ea20000 lw r2,0x0000(r21) # *p8 8007b494: 00911824 and r3,r4,r17 # ptr4 & 0x00ffffff 8007b498: 00531024 and r2,r2,r19 # *p8 & 0xff000000 8007b49c: 00431025 or r2,r2,r3 # (*p8 & 0xff000000) | (ptr4 & 0x00ffffff) 8007b4a0: aea20000 sw r2,0x0000(r21) # *p8 = (*p8 & 0xff000000) | (ptr4 & 0x00ffffff) # } 8007b4a4: 8fa80020 lw r8,0x0020(r29) # p2 8007b4a8: 26940001 addiu r20,r20,0x0001 # count = count + 1 8007b4ac: 0288102a slt r2,r20,r8 8007b4b0: 1440ff05 bne r2,r0,0x8007b0c8 8007b4b4: 001410c0 sll r2,r20,0x03 # count * 8 # while (count < p2) 8007b4b8: 8fbf0054 lw r31,0x0054(r29) 8007b4bc: 8fbe0050 lw r30,0x0050(r29) 8007b4c0: 8fb7004c lw r23,0x004c(r29) 8007b4c4: 8fb60048 lw r22,0x0048(r29) 8007b4c8: 8fb50044 lw r21,0x0044(r29) 8007b4cc: 8fb40040 lw r20,0x0040(r29) 8007b4d0: 8fb3003c lw r19,0x003c(r29) 8007b4d4: 8fb20038 lw r18,0x0038(r29) 8007b4d8: 8fb10034 lw r17,0x0034(r29) 8007b4dc: 8fb00030 lw r16,0x0030(r29) 8007b4e0: 27bd0058 addiu r29,r29,0x0058 8007b4e4: 03e00008 jr r31 8007b4e8: 00000000 nop