Load Data From Disc (0x11bf4)
Jump to navigation
Jump to search
# ROUTINE: LOAD DATA FROM DISC (0x11bf4) # Parameters: # r4 = (ptr1) Pointer (Sometimes 0x8004eaf4) # r5 = (lba) LBA Sector of data # r6 = (numSectors) Number of sectors to load # r7 = (locationPtr) Location to load the data into RAM # *(sp + 10) = (p5) Sometimes -1 # Returns: # r2 = (0, if load was successful; 1, otherwise) ? 80011bf4: 27bdffb8 addiu r29,r29,-0x0048 80011bf8: afb3002c sw r19,0x002c(r29) 80011bfc: 00809821 addu r19,r4,r0 # ptr1 80011c00: afb40030 sw r20,0x0030(r29) 80011c04: 00a0a021 addu r20,r5,r0 # lba 80011c08: afb50034 sw r21,0x0034(r29) 80011c0c: 00c0a821 addu r21,r6,r0 # numSectors 80011c10: afb60038 sw r22,0x0038(r29) 80011c14: afbf0040 sw r31,0x0040(r29) 80011c18: afb7003c sw r23,0x003c(r29) 80011c1c: afb20028 sw r18,0x0028(r29) 80011c20: afb10024 sw r17,0x0024(r29) 80011c24: afb00020 sw r16,0x0020(r29) 80011c28: 8e620004 lw r2,0x0004(r19) # *(ptr1 + 4) 80011c2c: 8fa30058 lw r3,0x0058(r29) # p5 80011c30: 10400003 beq r2,r0,0x80011c40 80011c34: 00e0b021 addu r22,r7,r0 # locationPtr # if (*(ptr1 + 4) != 0) { 80011c38: 0800476a j 0x80011da8 # return 1; 80011c3c: 34020001 ori r2,r0,0x0001 # } 80011c40: 34170001 ori r23,r0,0x0001 # 1 80011c44: 10770003 beq r3,r23,0x80011c54 # if (p5 != 1) { 80011c48: 00000000 nop 80011c4c: 3c018003 lui r1,0x8003 80011c50: ac238b08 sw r3,-0x74f8(r1) # *0x80028b08 = p5 # } 80011c54: 14600049 bne r3,r0,0x80011d7c # if (p5 == 0) { 80011c58: 00000000 nop 80011c5c: 0c00918e jal 0x80024638 80011c60: 00002021 addu r4,r0,r0 80011c64: 34040001 ori r4,r0,0x0001 80011c68: 00002821 addu r5,r0,r0 80011c6c: 0c0102f6 jal 0x80040bd8 80011c70: 00003021 addu r6,r0,r0 80011c74: 27a40018 addiu r4,r29,0x0018 80011c78: 00002821 addu r5,r0,r0 80011c7c: 00003021 addu r6,r0,r0 80011c80: 00003821 addu r7,r0,r0 80011c84: 34020100 ori r2,r0,0x0100 80011c88: a7a2001c sh r2,0x001c(r29) 80011c8c: 340201e0 ori r2,r0,0x01e0 80011c90: a7a00018 sh r0,0x0018(r29) 80011c94: a7a0001a sh r0,0x001a(r29) 80011c98: 0c00921a jal 0x80024868 80011c9c: a7a2001e sh r2,0x001e(r29) 80011ca0: 0c0091b5 jal 0x800246d4 80011ca4: 00002021 addu r4,r0,r0 80011ca8: 3c118005 lui r17,0x8005 80011cac: 2631ea14 addiu r17,r17,-0x15ec 80011cb0: 02202021 addu r4,r17,r0 80011cb4: 00002821 addu r5,r0,r0 80011cb8: 00003021 addu r6,r0,r0 80011cbc: 34070100 ori r7,r0,0x0100 80011cc0: 341000f0 ori r16,r0,0x00f0 80011cc4: 0c008b78 jal 0x80022de0 80011cc8: afb00010 sw r16,0x0010(r29) 80011ccc: 3c128005 lui r18,0x8005 80011cd0: 2652eacc addiu r18,r18,-0x1534 80011cd4: 02402021 addu r4,r18,r0 80011cd8: 00002821 addu r5,r0,r0 80011cdc: 340600f0 ori r6,r0,0x00f0 80011ce0: 34070100 ori r7,r0,0x0100 80011ce4: 0c008bac jal 0x80022eb0 80011ce8: afb00010 sw r16,0x0010(r29) 80011cec: 2631005c addiu r17,r17,0x005c 80011cf0: 02202021 addu r4,r17,r0 80011cf4: 00002821 addu r5,r0,r0 80011cf8: 340600f0 ori r6,r0,0x00f0 80011cfc: 34070100 ori r7,r0,0x0100 80011d00: 0c008b78 jal 0x80022de0 80011d04: afb00010 sw r16,0x0010(r29) 80011d08: 26520014 addiu r18,r18,0x0014 80011d0c: 02402021 addu r4,r18,r0 80011d10: 00002821 addu r5,r0,r0 80011d14: 00003021 addu r6,r0,r0 80011d18: 34070100 ori r7,r0,0x0100 80011d1c: 0c008bac jal 0x80022eb0 80011d20: afb00010 sw r16,0x0010(r29) 80011d24: 340200f0 ori r2,r0,0x00f0 80011d28: 3c018005 lui r1,0x8005 80011d2c: a422ea7a sh r2,-0x1586(r1) 80011d30: 34020001 ori r2,r0,0x0001 80011d34: 3c018005 lui r1,0x8005 80011d38: a420ea78 sh r0,-0x1588(r1) 80011d3c: 3c018005 lui r1,0x8005 80011d40: a420ea1e sh r0,-0x15e2(r1) 80011d44: 3c018005 lui r1,0x8005 80011d48: a420ea1c sh r0,-0x15e4(r1) 80011d4c: 3c018005 lui r1,0x8005 80011d50: a022ea87 sb r2,-0x1579(r1) 80011d54: 3c018005 lui r1,0x8005 80011d58: a022ea88 sb r2,-0x1578(r1) 80011d5c: 3c018005 lui r1,0x8005 80011d60: a022ea2b sb r2,-0x15d5(r1) 80011d64: 3c018005 lui r1,0x8005 80011d68: a022ea2c sb r2,-0x15d4(r1) 80011d6c: 0c00932b jal 0x80024cac 80011d70: 02202021 addu r4,r17,r0 80011d74: 0c0093a1 jal 0x80024e84 80011d78: 02402021 addu r4,r18,r0 # } 80011d7c: 02802021 addu r4,r20,r0 80011d80: 2665001c addiu r5,r19,0x001c 80011d84: ae600000 sw r0,0x0000(r19) # *ptr1 = 0 80011d88: ae600018 sw r0,0x0018(r19) # *(ptr1 + 0x18) = 0 80011d8c: ae600008 sw r0,0x0008(r19) # *(ptr1 + 8) = 0 80011d90: ae770004 sw r23,0x0004(r19) # *(ptr1 + 4) = 1 80011d94: 0c007bef jal 0x8001efbc # 0x1efbc (lba, ptr1 + 0x1c); // Performs crazy math and sticks 3-byte result at ptr1 + 0x1c 80011d98: ae640014 sw r4,0x0014(r19) # *(ptr1 + 0x14) = lba 80011d9c: 00001021 addu r2,r0,r0 # result = 0 80011da0: ae750010 sw r21,0x0010(r19) # *(ptr1 + 0x10) = numSectors 80011da4: ae760020 sw r22,0x0020(r19) # *(ptr1 + 0x20) = locationPtr # return result; 80011da8: 8fbf0040 lw r31,0x0040(r29) 80011dac: 8fb7003c lw r23,0x003c(r29) 80011db0: 8fb60038 lw r22,0x0038(r29) 80011db4: 8fb50034 lw r21,0x0034(r29) 80011db8: 8fb40030 lw r20,0x0030(r29) 80011dbc: 8fb3002c lw r19,0x002c(r29) 80011dc0: 8fb20028 lw r18,0x0028(r29) 80011dc4: 8fb10024 lw r17,0x0024(r29) 80011dc8: 8fb00020 lw r16,0x0020(r29) 80011dcc: 27bd0048 addiu r29,r29,0x0048 80011dd0: 03e00008 jr r31 80011dd4: 00000000 nop