Load Data From Disc (0x11bf4)

From Final Fantasy Hacktics Wiki
Jump to navigation Jump to search
#   ROUTINE: LOAD DATA FROM DISC (0x11bf4)
#       Parameters:
#           r4          = (ptr1) ptr to file to be opened data (often 8004eaf4)
#           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 (whether to display "now loading")
#       Returns:
#           r2          = (0, if load was successful; 1, otherwise) ?

#additional notes: seems to do some prep work for loading files, such as finding its CDlLOC but nothing I can see explicitly determines that it requests the DMA to actually load any files.

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) { // if file already queued to open, fail
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) {         // if displaying now loading,
80011c58: 00000000 nop
80011c5c: 0c00918e jal 0x80024638                   SYS SetDispMask        // don't draw screen mask
80011c60: 00002021 addu r4,r0,r0                    mask = 0
80011c64: 34040001 ori r4,r0,0x0001                 display
80011c68: 00002821 addu r5,r0,r0
80011c6c: 0c0102f6 jal 0x80040bd8                   Build Image Data for Now Loading message
80011c70: 00003021 addu r6,r0,r0                    x=0, y=0
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                     SYS ClearImage
80011c9c: a7a2001e sh r2,0x001e(r29)
80011ca0: 0c0091b5 jal 0x800246d4                     SYS DrawSync
80011ca4: 00002021 addu r4,r0,r0
80011ca8: 3c118005 lui r17,0x8005
80011cac: 2631ea14 addiu r17,r17,-0x15ec              'now loading' draw environment
80011cb0: 02202021 addu r4,r17,r0                     
80011cb4: 00002821 addu r5,r0,r0                      x = 0
80011cb8: 00003021 addu r6,r0,r0                      y = 0
80011cbc: 34070100 ori r7,r0,0x0100                   w = 0x100
80011cc0: 341000f0 ori r16,r0,0x00f0                  h = 0xf0
80011cc4: 0c008b78 jal 0x80022de0                     E03 SetDefDrawEnv - define the draw environment for now loading (top screen)
80011cc8: afb00010 sw r16,0x0010(r29)
80011ccc: 3c128005 lui r18,0x8005
80011cd0: 2652eacc addiu r18,r18,-0x1534              'now loading' display environment
80011cd4: 02402021 addu r4,r18,r0                     
80011cd8: 00002821 addu r5,r0,r0                      x = 0
80011cdc: 340600f0 ori r6,r0,0x00f0                   y = 0xf0
80011ce0: 34070100 ori r7,r0,0x0100                   w = 0x100
80011ce4: 0c008bac jal 0x80022eb0                     E04 SetDefDispEnv - define the display environment for now loading (bottom screen)
80011ce8: afb00010 sw r16,0x0010(r29)                 h = 0xf0
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                     E03 SetDefDrawEnv (DRAWENV * 8004EA70, 0, 240, 256, 240) (bottom screen)
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                     E04 SetDefDispEnv (DISPENV * 8004EAE0, 0, 0, 256, 240) (top screen)
80011d20: afb00010 sw r16,0x0010(r29)
80011d24: 340200f0 ori r2,r0,0x00f0                   update draw environment:
80011d28: 3c018005 lui r1,0x8005
80011d2c: a422ea7a sh r2,-0x1586(r1)                  DRAWENV2.ofs[1] == 0xf0
80011d30: 34020001 ori r2,r0,0x0001
80011d34: 3c018005 lui r1,0x8005
80011d38: a420ea78 sh r0,-0x1588(r1)                  DRAWENV2.ofs[0] == 0x00
80011d3c: 3c018005 lui r1,0x8005
80011d40: a420ea1e sh r0,-0x15e2(r1)                  DRAWENV1.ofs[1] == 0x00
80011d44: 3c018005 lui r1,0x8005
80011d48: a420ea1c sh r0,-0x15e4(r1)                  DRAWENV1.ofs[0] == 0x00
80011d4c: 3c018005 lui r1,0x8005
80011d50: a022ea87 sb r2,-0x1579(r1)                  DRAWENV2.dfe == TRUE (enable drawing in this region.)
80011d54: 3c018005 lui r1,0x8005
80011d58: a022ea88 sb r2,-0x1578(r1)                  DRAWENV2.isbg == TRUE
80011d5c: 3c018005 lui r1,0x8005
80011d60: a022ea2b sb r2,-0x15d5(r1)                  DRAWENV1.dfe == TRUE
80011d64: 3c018005 lui r1,0x8005
80011d68: a022ea2c sb r2,-0x15d4(r1)                  DRAWENV1.isbg == TRUE
80011d6c: 0c00932b jal 0x80024cac                   SYS PutDrawEnv DRAWENV2
80011d70: 02202021 addu r4,r17,r0                   
80011d74: 0c0093a1 jal 0x80024e84                   SYS PutDispEnv DISPENV2
80011d78: 02402021 addu r4,r18,r0
                                                    #   }
80011d7c: 02802021 addu r4,r20,r0
80011d80: 2665001c addiu r5,r19,0x001c              #
80011d84: ae600000 sw r0,0x0000(r19)                #   file.00 == 0
80011d88: ae600018 sw r0,0x0018(r19)                #   file.18 == 0
80011d8c: ae600008 sw r0,0x0008(r19)                #   file.08 == 0
80011d90: ae770004 sw r23,0x0004(r19)               #   file.occ == 1
80011d94: 0c007bef jal 0x8001efbc                   #   S 002 CDIntToPos (LBA lba, CDlLoc * file.CDlLoc)
80011d98: ae640014 sw r4,0x0014(r19)                #   file.lba = lba
80011d9c: 00001021 addu r2,r0,r0                    #   result = 0
80011da0: ae750010 sw r21,0x0010(r19)               #   file.nosec = numSectors
80011da4: ae760020 sw r22,0x0020(r19)               #   file.dst = 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