Merge pull request #12 from gamemasterplc/main
Decompile most of data.c
This commit is contained in:
commit
beb6b53f5d
10 changed files with 791 additions and 42 deletions
|
|
@ -831,11 +831,11 @@ fn_80048F4C = .text:0x80048F4C; // type:function size:0x160
|
|||
fn_800490AC = .text:0x800490AC; // type:function size:0x10
|
||||
fn_800490BC = .text:0x800490BC; // type:function size:0x2C
|
||||
fn_800490E8 = .text:0x800490E8; // type:function size:0x140
|
||||
fn_80049228 = .text:0x80049228; // type:function size:0x2C
|
||||
fn_80049254 = .text:0x80049254; // type:function size:0x1F0
|
||||
HuAR_ARAMtoMRAM = .text:0x80049228; // type:function size:0x2C
|
||||
HuAR_ARAMtoMRAMNum = .text:0x80049254; // type:function size:0x1F0
|
||||
fn_80049444 = .text:0x80049444; // type:function size:0x44
|
||||
fn_80049488 = .text:0x80049488; // type:function size:0x8
|
||||
fn_80049490 = .text:0x80049490; // type:function size:0x58
|
||||
HuARDMACheck = .text:0x80049488; // type:function size:0x8
|
||||
HuARDirCheck = .text:0x80049490; // type:function size:0x58
|
||||
fn_800494E8 = .text:0x800494E8; // type:function size:0x68
|
||||
fn_80049550 = .text:0x80049550; // type:function size:0x390
|
||||
fn_800498E0 = .text:0x800498E0; // type:function size:0x10
|
||||
|
|
@ -2259,7 +2259,7 @@ fn_800BD7CC = .text:0x800BD7CC; // type:function size:0x14
|
|||
fn_800BD7E0 = .text:0x800BD7E0; // type:function size:0x18
|
||||
__DVDLowSetWAType = .text:0x800BD7F8; // type:function size:0x44 scope:global
|
||||
__DVDFSInit = .text:0x800BD83C; // type:function size:0x38 scope:global
|
||||
fn_800BD874 = .text:0x800BD874; // type:function size:0x2F4
|
||||
DVDConvertPathToEntrynum = .text:0x800BD874; // type:function size:0x2F4
|
||||
DVDFastOpen = .text:0x800BDB68; // type:function size:0x74
|
||||
DVDOpen = .text:0x800BDBDC; // type:function size:0xC8
|
||||
DVDClose = .text:0x800BDCA4; // type:function size:0x24
|
||||
|
|
@ -2301,7 +2301,7 @@ fn_800BFC94 = .text:0x800BFC94; // type:function size:0xD0
|
|||
DVDReadDiskID = .text:0x800BFD64; // type:function size:0xD4 scope:global
|
||||
DVDInquiryAsync = .text:0x800BFE38; // type:function size:0xD0 scope:global
|
||||
DVDReset = .text:0x800BFF08; // type:function size:0x44 scope:global
|
||||
fn_800BFF4C = .text:0x800BFF4C; // type:function size:0x4C
|
||||
DVDGetCommandBlockStatus = .text:0x800BFF4C; // type:function size:0x4C
|
||||
DVDGetDriveStatus = .text:0x800BFF98; // type:function size:0xAC scope:global
|
||||
fn_800C0044 = .text:0x800C0044; // type:function size:0x10
|
||||
fn_800C0054 = .text:0x800C0054; // type:function size:0x270
|
||||
|
|
@ -4834,7 +4834,8 @@ lbl_8011F7B4 = .data:0x8011F7B4; // type:object size:0x10
|
|||
DataDirStat = .data:0x8011F7C4; // type:object size:0x468 scope:local data:4byte
|
||||
lbl_8011FC2C = .data:0x8011FC2C; // type:object size:0x1D data:string
|
||||
lbl_8011FC49 = .data:0x8011FC49; // type:object size:0x1F data:string
|
||||
lbl_8011FC68 = .data:0x8011FC68; // type:object size:0x3C
|
||||
lbl_8011FC68 = .data:0x8011FC68; // type:object size:0x1D data:string
|
||||
lbl_8011FC85 = .data:0x8011FC85; // type:object size:0x1F data:string
|
||||
lbl_8011FCA4 = .data:0x8011FCA4; // type:object size:0x1A data:string
|
||||
lbl_8011FCBE = .data:0x8011FCBE; // type:object size:0x122
|
||||
lbl_8011FDE0 = .data:0x8011FDE0; // type:object size:0x20
|
||||
|
|
@ -5353,7 +5354,7 @@ lbl_80141FD0 = .data:0x80141FD0; // type:object size:0x20
|
|||
lbl_80141FF0 = .data:0x80141FF0; // type:object size:0x800
|
||||
padStatErrOld = .bss:0x80142800; // type:object size:0x10
|
||||
rumbleData = .bss:0x80142810; // type:object size:0x30
|
||||
ReadDataStat = .bss:0x80142840; // type:object size:0x2E00 align:32 data:4byte
|
||||
ReadDataStat = .bss:0x80142840; // type:object size:0x2E00 scope:local align:32 data:4byte
|
||||
TextBuffer = .bss:0x80145640; // type:object size:0x400
|
||||
lbl_80145A40 = .bss:0x80145A40; // type:object size:0x40
|
||||
HeapTbl = .bss:0x80145A80; // type:object size:0x14 scope:local
|
||||
|
|
|
|||
|
|
@ -12,4 +12,23 @@ typedef enum {
|
|||
|
||||
#undef OVL_DEFINE
|
||||
|
||||
#endif
|
||||
#define DATADIR_DEFINE(name, path) name,
|
||||
|
||||
typedef enum {
|
||||
#include "datadir_table.h"
|
||||
DATADIR_COUNT
|
||||
} DataDirID;
|
||||
|
||||
#undef DATADIR_DEFINE
|
||||
|
||||
|
||||
typedef enum {
|
||||
HEAP_SYSTEM,
|
||||
HEAP_MUSIC,
|
||||
HEAP_DATA,
|
||||
HEAP_DVD,
|
||||
HEAP_MISC,
|
||||
HEAP_MAX
|
||||
} HeapID;
|
||||
|
||||
#endif
|
||||
|
|
@ -63,16 +63,16 @@ typedef struct file_list_entry {
|
|||
s32 file_id;
|
||||
} FileListEntry;
|
||||
|
||||
typedef struct data_stat {
|
||||
typedef struct data_read_stat {
|
||||
s32 dir_id;
|
||||
void *dir;
|
||||
void *data;
|
||||
void *file;
|
||||
u32 raw_len;
|
||||
u32 comp_type;
|
||||
BOOL used;
|
||||
s32 num;
|
||||
u32 status;
|
||||
DVDFileInfo file_info;
|
||||
} DataStat;
|
||||
} DataReadStat;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
140
include/datadir_table.h
Normal file
140
include/datadir_table.h
Normal file
|
|
@ -0,0 +1,140 @@
|
|||
DATADIR_DEFINE(DATADIR_E3SETUP, "data/E3setup.bin")
|
||||
DATADIR_DEFINE(DATADIR_BBATTLE, "data/bbattle.bin")
|
||||
DATADIR_DEFINE(DATADIR_BGUEST, "data/bguest.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKOOPA, "data/bkoopa.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKOOPASUIT, "data/bkoopasuit.bin")
|
||||
DATADIR_DEFINE(DATADIR_BKUJIYA, "data/bkujiya.bin")
|
||||
DATADIR_DEFINE(DATADIR_BLAST5, "data/blast5.bin")
|
||||
DATADIR_DEFINE(DATADIR_BOARD, "data/board.bin")
|
||||
DATADIR_DEFINE(DATADIR_BPAUSE, "data/bpause.bin")
|
||||
DATADIR_DEFINE(DATADIR_BYOKODORI, "data/byokodori.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISY, "data/daisy.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMDL0, "data/daisymdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMDL1, "data/daisymdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_DAISYMOT, "data/daisymot.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEY, "data/donkey.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMDL0, "data/donkeymdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMDL1, "data/donkeymdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_DONKEYMOT, "data/donkeymot.bin")
|
||||
DATADIR_DEFINE(DATADIR_EFFECT, "data/effect.bin")
|
||||
DATADIR_DEFINE(DATADIR_GAMEMES, "data/gamemes.bin")
|
||||
DATADIR_DEFINE(DATADIR_INST, "data/inst.bin")
|
||||
DATADIR_DEFINE(DATADIR_INSTFONT, "data/instfont.bin")
|
||||
DATADIR_DEFINE(DATADIR_INSTPIC, "data/instpic.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGI, "data/luigi.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMDL0, "data/luigimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMDL1, "data/luigimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_LUIGIMOT, "data/luigimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_M300, "data/m300.bin")
|
||||
DATADIR_DEFINE(DATADIR_M302, "data/m302.bin")
|
||||
DATADIR_DEFINE(DATADIR_M303, "data/m303.bin")
|
||||
DATADIR_DEFINE(DATADIR_M330, "data/m330.bin")
|
||||
DATADIR_DEFINE(DATADIR_M333, "data/m333.bin")
|
||||
DATADIR_DEFINE(DATADIR_M401, "data/m401.bin")
|
||||
DATADIR_DEFINE(DATADIR_M402, "data/m402.bin")
|
||||
DATADIR_DEFINE(DATADIR_M403, "data/m403.bin")
|
||||
DATADIR_DEFINE(DATADIR_M404, "data/m404.bin")
|
||||
DATADIR_DEFINE(DATADIR_M405, "data/m405.bin")
|
||||
DATADIR_DEFINE(DATADIR_M406, "data/m406.bin")
|
||||
DATADIR_DEFINE(DATADIR_M407, "data/m407.bin")
|
||||
DATADIR_DEFINE(DATADIR_M408, "data/m408.bin")
|
||||
DATADIR_DEFINE(DATADIR_M409, "data/m409.bin")
|
||||
DATADIR_DEFINE(DATADIR_M410, "data/m410.bin")
|
||||
DATADIR_DEFINE(DATADIR_M411, "data/m411.bin")
|
||||
DATADIR_DEFINE(DATADIR_M412, "data/m412.bin")
|
||||
DATADIR_DEFINE(DATADIR_M413, "data/m413.bin")
|
||||
DATADIR_DEFINE(DATADIR_M414, "data/m414.bin")
|
||||
DATADIR_DEFINE(DATADIR_M415, "data/m415.bin")
|
||||
DATADIR_DEFINE(DATADIR_M416, "data/m416.bin")
|
||||
DATADIR_DEFINE(DATADIR_M417, "data/m417.bin")
|
||||
DATADIR_DEFINE(DATADIR_M418, "data/m418.bin")
|
||||
DATADIR_DEFINE(DATADIR_M419, "data/m419.bin")
|
||||
DATADIR_DEFINE(DATADIR_M420, "data/m420.bin")
|
||||
DATADIR_DEFINE(DATADIR_M421, "data/m421.bin")
|
||||
DATADIR_DEFINE(DATADIR_M422, "data/m422.bin")
|
||||
DATADIR_DEFINE(DATADIR_M423, "data/m423.bin")
|
||||
DATADIR_DEFINE(DATADIR_M424, "data/m424.bin")
|
||||
DATADIR_DEFINE(DATADIR_M425, "data/m425.bin")
|
||||
DATADIR_DEFINE(DATADIR_M426, "data/m426.bin")
|
||||
DATADIR_DEFINE(DATADIR_M427, "data/m427.bin")
|
||||
DATADIR_DEFINE(DATADIR_M428, "data/m428.bin")
|
||||
DATADIR_DEFINE(DATADIR_M429, "data/m429.bin")
|
||||
DATADIR_DEFINE(DATADIR_M430, "data/m430.bin")
|
||||
DATADIR_DEFINE(DATADIR_M431, "data/m431.bin")
|
||||
DATADIR_DEFINE(DATADIR_M432, "data/m432.bin")
|
||||
DATADIR_DEFINE(DATADIR_M433, "data/m433.bin")
|
||||
DATADIR_DEFINE(DATADIR_M434, "data/m434.bin")
|
||||
DATADIR_DEFINE(DATADIR_M435, "data/m435.bin")
|
||||
DATADIR_DEFINE(DATADIR_M436, "data/m436.bin")
|
||||
DATADIR_DEFINE(DATADIR_M437, "data/m437.bin")
|
||||
DATADIR_DEFINE(DATADIR_M438, "data/m438.bin")
|
||||
DATADIR_DEFINE(DATADIR_M439, "data/m439.bin")
|
||||
DATADIR_DEFINE(DATADIR_M440, "data/m440.bin")
|
||||
DATADIR_DEFINE(DATADIR_M441, "data/m441.bin")
|
||||
DATADIR_DEFINE(DATADIR_M442, "data/m442.bin")
|
||||
DATADIR_DEFINE(DATADIR_M443, "data/m443.bin")
|
||||
DATADIR_DEFINE(DATADIR_M444, "data/m444.bin")
|
||||
DATADIR_DEFINE(DATADIR_M445, "data/m445.bin")
|
||||
DATADIR_DEFINE(DATADIR_M446, "data/m446.bin")
|
||||
DATADIR_DEFINE(DATADIR_M447, "data/m447.bin")
|
||||
DATADIR_DEFINE(DATADIR_M448, "data/m448.bin")
|
||||
DATADIR_DEFINE(DATADIR_M449, "data/m449.bin")
|
||||
DATADIR_DEFINE(DATADIR_M450, "data/m450.bin")
|
||||
DATADIR_DEFINE(DATADIR_M451, "data/m451.bin")
|
||||
DATADIR_DEFINE(DATADIR_M453, "data/m453.bin")
|
||||
DATADIR_DEFINE(DATADIR_M455, "data/m455.bin")
|
||||
DATADIR_DEFINE(DATADIR_M456, "data/m456.bin")
|
||||
DATADIR_DEFINE(DATADIR_M457, "data/m457.bin")
|
||||
DATADIR_DEFINE(DATADIR_M458, "data/m458.bin")
|
||||
DATADIR_DEFINE(DATADIR_M459, "data/m459.bin")
|
||||
DATADIR_DEFINE(DATADIR_M460, "data/m460.bin")
|
||||
DATADIR_DEFINE(DATADIR_M461, "data/m461.bin")
|
||||
DATADIR_DEFINE(DATADIR_M462, "data/m462.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIO, "data/mario.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMDL0, "data/mariomdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMDL1, "data/mariomdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_MARIOMOT, "data/mariomot.bin")
|
||||
DATADIR_DEFINE(DATADIR_MENT, "data/ment.bin")
|
||||
DATADIR_DEFINE(DATADIR_MGCONST, "data/mgconst.bin")
|
||||
DATADIR_DEFINE(DATADIR_MGMODE, "data/mgmode.bin")
|
||||
DATADIR_DEFINE(DATADIR_MODESEL, "data/modesel.bin")
|
||||
DATADIR_DEFINE(DATADIR_MPEX, "data/mpex.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY, "data/mstory.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY2, "data/mstory2.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY3, "data/mstory3.bin")
|
||||
DATADIR_DEFINE(DATADIR_MSTORY4, "data/mstory4.bin")
|
||||
DATADIR_DEFINE(DATADIR_OPTION, "data/option.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACH, "data/peach.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMDL0, "data/peachmdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMDL1, "data/peachmdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_PEACHMOT, "data/peachmot.bin")
|
||||
DATADIR_DEFINE(DATADIR_PRESENT, "data/present.bin")
|
||||
DATADIR_DEFINE(DATADIR_RESULT, "data/result.bin")
|
||||
DATADIR_DEFINE(DATADIR_SAF, "data/saf.bin")
|
||||
DATADIR_DEFINE(DATADIR_SELMENU, "data/selmenu.bin")
|
||||
DATADIR_DEFINE(DATADIR_SETUP, "data/setup.bin")
|
||||
DATADIR_DEFINE(DATADIR_STAFF, "data/staff.bin")
|
||||
DATADIR_DEFINE(DATADIR_TITLE, "data/title.bin")
|
||||
DATADIR_DEFINE(DATADIR_W01, "data/w01.bin")
|
||||
DATADIR_DEFINE(DATADIR_W02, "data/w02.bin")
|
||||
DATADIR_DEFINE(DATADIR_W03, "data/w03.bin")
|
||||
DATADIR_DEFINE(DATADIR_W04, "data/w04.bin")
|
||||
DATADIR_DEFINE(DATADIR_W05, "data/w05.bin")
|
||||
DATADIR_DEFINE(DATADIR_W06, "data/w06.bin")
|
||||
DATADIR_DEFINE(DATADIR_W10, "data/w10.bin")
|
||||
DATADIR_DEFINE(DATADIR_W20, "data/w20.bin")
|
||||
DATADIR_DEFINE(DATADIR_W21, "data/w21.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGI, "data/waluigi.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMDL0, "data/waluigimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMDL1, "data/waluigimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_WALUIGIMOT, "data/waluigimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIO, "data/wario.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMDL0, "data/wariomdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMDL1, "data/wariomdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_WARIOMOT, "data/wariomot.bin")
|
||||
DATADIR_DEFINE(DATADIR_WIN, "data/win.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHI, "data/yoshi.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMDL0, "data/yoshimdl0.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMDL1, "data/yoshimdl1.bin")
|
||||
DATADIR_DEFINE(DATADIR_YOSHIMOT, "data/yoshimot.bin")
|
||||
DATADIR_DEFINE(DATADIR_ZTAR, "data/ztar.bin")
|
||||
|
|
@ -21,18 +21,19 @@ void fn_80032A58(int arg0);
|
|||
void fn_80035A0C(void);
|
||||
|
||||
void HuDecodeData(void *src, void *dst, u32 size, int decode_type);
|
||||
|
||||
void HuMemInitAll(void);
|
||||
void *HuMemInit(void *ptr, s32 size);
|
||||
void HuMemDCFlushAll();
|
||||
void HuMemDCFlush(int heap);
|
||||
void *HuMemDirectMalloc(int heap, s32 size);
|
||||
void *HuMemDirectMallocNum(int heap, s32 size, u32 num);
|
||||
void HuMemDCFlush(HeapID heap);
|
||||
void *HuMemDirectMalloc(HeapID heap, s32 size);
|
||||
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num);
|
||||
void HuMemDirectFree(void *ptr);
|
||||
void HuMemDirectFreeNum(int heap, u32 num);
|
||||
s32 HuMemUsedMallocSizeGet(int heap);
|
||||
s32 HuMemUsedMallocBlockGet(int heap);
|
||||
u32 HuMemHeapSizeGet(int heap);
|
||||
void *HuMemHeapPtrGet(int heap);
|
||||
void HuMemDirectFreeNum(HeapID heap, u32 num);
|
||||
s32 HuMemUsedMallocSizeGet(HeapID heap);
|
||||
s32 HuMemUsedMallocBlockGet(HeapID heap);
|
||||
u32 HuMemHeapSizeGet(HeapID heap);
|
||||
void *HuMemHeapPtrGet(HeapID heap);
|
||||
|
||||
void *HuMemHeapInit(void *ptr, s32 size);
|
||||
void *HuMemMemoryAlloc(void *heap_ptr, s32 size, u32 retaddr);
|
||||
|
|
@ -76,4 +77,41 @@ s16 print8(s16 x, s16 y, float scale, char *str, ...);
|
|||
s16 printWin(s16 x, s16 y, s16 w, s16 h, GXColor *color);
|
||||
void pfDrawFonts(void);
|
||||
|
||||
void *HuDvdDataRead(char *path);
|
||||
void **HuDvdDataReadMulti(char **paths);
|
||||
void *HuDvdDataReadDirect(char *path, HeapID heap);
|
||||
void *HuDvdDataFastRead(s32 entrynum);
|
||||
void *HuDvdDataFastReadNum(s32 entrynum, s32 num);
|
||||
void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat);
|
||||
void HuDvdDataClose(void *ptr);
|
||||
void HuDvdErrorWatch();
|
||||
|
||||
void HuDataInit(void);
|
||||
int HuDataReadChk(s32 data_num);
|
||||
DataReadStat *HuDataGetStatus(void *dir_ptr);
|
||||
void *HuDataGetDirPtr(s32 data_num);
|
||||
DataReadStat *HuDataDirRead(s32 data_num);
|
||||
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num);
|
||||
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num);
|
||||
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo);
|
||||
s32 HuDataDirReadAsync(s32 data_num);
|
||||
s32 HuDataDirReadNumAsync(s32 data_num, s32 num);
|
||||
BOOL HuDataGetAsyncStat(s32 status);
|
||||
void *HuDataRead(s32 data_num);
|
||||
void *HuDataReadNum(s32 data_num, s32 num);
|
||||
void *HuDataSelHeapRead(s32 data_num, HeapID heap);
|
||||
void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap);
|
||||
void **HuDataReadMulti(s32 *data_ids);
|
||||
s32 HuDataGetSize(s32 data_num);
|
||||
void HuDataClose(void *ptr);
|
||||
void HuDataCloseMulti(void **ptrs);
|
||||
void HuDataDirClose(s32 data_id);
|
||||
void HuDataDirCloseNum(s32 num);
|
||||
void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap);
|
||||
|
||||
void *HuARDirCheck(s32 dir);
|
||||
void HuAR_ARAMtoMRAM(void *dst);
|
||||
void HuAR_ARAMtoMRAMNum(void *dst, s32 num);
|
||||
BOOL HuARDMACheck();
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -24,4 +24,6 @@ extern PlayerConfig gPlayerConfig[4];
|
|||
|
||||
extern FileListEntry _ovltbl[];
|
||||
|
||||
extern u32 DirDataSize;
|
||||
|
||||
#endif
|
||||
|
|
|
|||
552
src/game/data.c
Normal file
552
src/game/data.c
Normal file
|
|
@ -0,0 +1,552 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/dvd.h"
|
||||
|
||||
#define PTR_OFFSET(ptr, offset) (void *)(((u8 *)(ptr)+(u32)(offset)))
|
||||
#define DATA_EFF_SIZE(size) (((size)+1) & ~0x1)
|
||||
|
||||
static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num);
|
||||
|
||||
#define DATA_MAX_READSTAT 128
|
||||
|
||||
#define DATADIR_DEFINE(name, path) { path, -1 },
|
||||
|
||||
static FileListEntry DataDirStat[DATADIR_COUNT+1] = {
|
||||
#include "datadir_table.h"
|
||||
{ NULL, -1 }
|
||||
};
|
||||
|
||||
#undef DATADIR_DEFINE
|
||||
|
||||
u32 DirDataSize;
|
||||
static u32 DataDirMax;
|
||||
static s32 shortAccessSleep;
|
||||
static DataReadStat ReadDataStat[DATA_MAX_READSTAT];
|
||||
|
||||
void HuDataInit(void)
|
||||
{
|
||||
int i = 0;
|
||||
FileListEntry *dir_stat = DataDirStat;
|
||||
DataReadStat *read_stat;
|
||||
while(dir_stat->name) {
|
||||
if((dir_stat->file_id = DVDConvertPathToEntrynum(dir_stat->name)) == -1) {
|
||||
OSReport("data.c: Data File Error(%s)\n", dir_stat->name);
|
||||
OSPanic("data.c", 65, "\n");
|
||||
}
|
||||
i++;
|
||||
dir_stat++;
|
||||
}
|
||||
DataDirMax = i;
|
||||
for(i=0, read_stat = ReadDataStat; i<DATA_MAX_READSTAT; i++, read_stat++) {
|
||||
read_stat->dir_id = -1;
|
||||
read_stat->used = FALSE;
|
||||
read_stat->status = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int HuDataReadStatusGet(void)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == -1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
i = -1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
int HuDataReadChk(s32 data_num)
|
||||
{
|
||||
int i;
|
||||
data_num >>= 16;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == data_num && ReadDataStat[i].status != 1) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
i = -1;
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataGetStatus(void *dir_ptr)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir == dir_ptr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i > DATA_MAX_READSTAT) {
|
||||
return NULL;
|
||||
}
|
||||
return &ReadDataStat[i];
|
||||
}
|
||||
|
||||
void *HuDataGetDirPtr(s32 data_num)
|
||||
{
|
||||
int status = HuDataReadChk(data_num);
|
||||
if(status < 0) {
|
||||
return NULL;
|
||||
}
|
||||
return ReadDataStat[status].dir;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirRead(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if(dir_aram = HuARDirCheck(data_num)) {
|
||||
HuAR_ARAMtoMRAM(dir_aram);
|
||||
while(HuARDMACheck());
|
||||
status = HuDataReadChk(data_num);
|
||||
read_stat = &ReadDataStat[status];
|
||||
} else {
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = HuDvdDataFastRead(DataDirStat[dir_id].file_id);
|
||||
if(read_stat->dir) {
|
||||
read_stat->dir_id = dir_id;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
}
|
||||
return read_stat;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirReadNum(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if((dir_aram = HuARDirCheck(data_num))) {
|
||||
OSReport("ARAM data num %x\n", data_num);
|
||||
HuAR_ARAMtoMRAMNum(dir_aram, num);
|
||||
while(HuARDMACheck());
|
||||
status = HuDataReadChk(data_num);
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
} else {
|
||||
OSReport("data num %x\n", data_num);
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = HuDvdDataFastReadNum(DataDirStat[dir_id].file_id, num);
|
||||
if(read_stat->dir) {
|
||||
read_stat->dir_id = dir_id;
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
}
|
||||
return read_stat;
|
||||
}
|
||||
|
||||
DataReadStat *HuDataDirSet(void *dir_ptr, s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat = HuDataGetStatus(dir_ptr);
|
||||
int status;
|
||||
if((status = HuDataReadChk(read_stat->dir_id << 16)) >= 0) {
|
||||
HuDataDirClose(data_num);
|
||||
}
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return NULL;
|
||||
} else {
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->dir = dir_ptr;
|
||||
read_stat->dir_id = data_num >>16;
|
||||
return read_stat;
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].status == 1 && ReadDataStat[i].file_info.startAddr == fileInfo->startAddr) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
OSPanic("data.c", 358, "dvd.c AsyncCallBack Error");
|
||||
}
|
||||
read_stat = &ReadDataStat[i];
|
||||
read_stat->status = 0;
|
||||
DVDClose(&read_stat->file_info);
|
||||
}
|
||||
|
||||
s32 HuDataDirReadAsync(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return -1;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
void *dir_aram;
|
||||
if(dir_aram = HuARDirCheck(data_num)) {
|
||||
OSReport("ARAM data num %x\n", data_num);
|
||||
HuAR_ARAMtoMRAM(dir_aram);
|
||||
status = 0x10000;
|
||||
} else {
|
||||
status = HuDataReadStatusGet();
|
||||
if(status == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return -1;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->status = 1;
|
||||
read_stat->dir_id = dir_id;
|
||||
read_stat->dir = HuDvdDataFastReadAsync(DataDirStat[dir_id].file_id, read_stat);
|
||||
}
|
||||
} else {
|
||||
status = -1;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
s32 HuDataDirReadNumAsync(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
s32 dir_id;
|
||||
dir_id = data_num >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_num);
|
||||
return -1;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) < 0) {
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
return -1;
|
||||
}
|
||||
ReadDataStat[status].status = TRUE;
|
||||
ReadDataStat[status].dir_id = dir_id;
|
||||
read_stat = &ReadDataStat[status];
|
||||
read_stat->used = TRUE;
|
||||
read_stat->num = num;
|
||||
read_stat->dir = HuDvdDataFastReadAsync(DataDirStat[dir_id].file_id, read_stat);
|
||||
} else {
|
||||
status = -1;
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
BOOL HuDataGetAsyncStat(s32 status)
|
||||
{
|
||||
if(status == 0x10000) {
|
||||
return HuARDMACheck() == 0;
|
||||
} else {
|
||||
return ReadDataStat[status].status == 0;
|
||||
}
|
||||
}
|
||||
|
||||
static void GetFileInfo(DataReadStat *read_stat, s32 file_num)
|
||||
{
|
||||
u32 *temp_ptr;
|
||||
temp_ptr = (u32 *)PTR_OFFSET(read_stat->dir, (file_num * 4))+1;
|
||||
read_stat->file = PTR_OFFSET(read_stat->dir, *temp_ptr);
|
||||
temp_ptr = read_stat->file;
|
||||
read_stat->raw_len = *temp_ptr++;
|
||||
read_stat->comp_type = *temp_ptr++;
|
||||
read_stat->file = temp_ptr;
|
||||
}
|
||||
|
||||
void *HuDataRead(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirRead(data_num)) {
|
||||
(void)data_num;
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
buf = HuMemDirectMalloc(0, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataReadNum(s32 data_num, s32 num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirReadNum(data_num, num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
buf = HuMemDirectMallocNum(0, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataSelHeapRead(s32 data_num, HeapID heap)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirRead(data_num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
switch(heap) {
|
||||
case HEAP_MUSIC:
|
||||
buf = HuMemDirectMalloc(HEAP_MUSIC, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DATA:
|
||||
buf = HuMemDirectMalloc(HEAP_DATA, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DVD:
|
||||
buf = HuMemDirectMalloc(HEAP_DVD, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
default:
|
||||
buf = HuMemDirectMalloc(HEAP_SYSTEM, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
}
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void *HuDataSelHeapReadNum(s32 data_num, s32 num, HeapID heap)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
void *buf;
|
||||
if(!HuDataDirReadNum(data_num, num)) {
|
||||
return NULL;
|
||||
}
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return NULL;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
switch(heap) {
|
||||
case HEAP_MUSIC:
|
||||
buf = HuMemDirectMalloc(HEAP_MUSIC, DATA_EFF_SIZE(read_stat->raw_len));
|
||||
break;
|
||||
|
||||
case HEAP_DATA:
|
||||
buf = HuMemDirectMallocNum(HEAP_DATA, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
|
||||
case HEAP_DVD:
|
||||
buf = HuMemDirectMallocNum(HEAP_DVD, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
|
||||
default:
|
||||
buf = HuMemDirectMallocNum(HEAP_SYSTEM, DATA_EFF_SIZE(read_stat->raw_len), num);
|
||||
break;
|
||||
}
|
||||
if(buf) {
|
||||
HuDecodeData(read_stat->file, buf, read_stat->raw_len, read_stat->comp_type);
|
||||
}
|
||||
return buf;
|
||||
}
|
||||
|
||||
void **HuDataReadMulti(s32 *data_ids)
|
||||
{
|
||||
return HuDataReadMultiSub(data_ids, FALSE, 0);
|
||||
}
|
||||
|
||||
static void **HuDataReadMultiSub(s32 *data_ids, BOOL use_num, s32 num)
|
||||
{
|
||||
s32 *dir_ids;
|
||||
char **paths;
|
||||
void **dir_ptrs;
|
||||
void **out_ptrs;
|
||||
int i, count, total_files;
|
||||
u32 dir_id;
|
||||
for(i=0, count=0; data_ids[i] != -1; i++) {
|
||||
dir_id = data_ids[i] >> 16;
|
||||
if(DataDirMax <= dir_id) {
|
||||
OSReport("data.c: Data Number Error(%d)\n", data_ids[i]);
|
||||
return NULL;
|
||||
}
|
||||
if(HuDataReadChk(data_ids[i]) < 0) {
|
||||
count++;
|
||||
}
|
||||
}
|
||||
total_files = i;
|
||||
dir_ids = HuMemDirectMalloc(HEAP_SYSTEM, (count+1)*sizeof(s32));
|
||||
for(i=0; i<count+1; i++) {
|
||||
dir_ids[i] = -1;
|
||||
}
|
||||
paths = HuMemDirectMalloc(HEAP_SYSTEM, (count+1)*sizeof(char *));
|
||||
for(i=0, count=0; data_ids[i] != -1; i++) {
|
||||
dir_id = data_ids[i] >> 16;
|
||||
if(HuDataReadChk(data_ids[i]) < 0) {
|
||||
int j;
|
||||
for(j=0; dir_ids[j] != -1; j++) {
|
||||
if(dir_ids[j] == dir_id){
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(dir_ids[j] == -1) {
|
||||
dir_ids[j] = dir_id;
|
||||
paths[count++] = DataDirStat[dir_id].name;
|
||||
}
|
||||
}
|
||||
}
|
||||
dir_ptrs = HuDvdDataReadMulti(paths);
|
||||
for(i=0; dir_ids[i] != -1; i++) {
|
||||
s32 status;
|
||||
if((status = HuDataReadStatusGet()) == -1) {
|
||||
OSReport("data.c: Data Work Max Error\n");
|
||||
(void)count; //HACK to match HuDataReadMultiSub
|
||||
HuMemDirectFree(dir_ids);
|
||||
HuMemDirectFree(paths);
|
||||
return NULL;
|
||||
} else {
|
||||
ReadDataStat[status].dir = dir_ptrs[i];
|
||||
ReadDataStat[status].dir_id = dir_ids[i];
|
||||
}
|
||||
}
|
||||
HuMemDirectFree(dir_ids);
|
||||
HuMemDirectFree(paths);
|
||||
HuMemDirectFree(dir_ptrs);
|
||||
if(use_num) {
|
||||
out_ptrs = HuMemDirectMallocNum(HEAP_SYSTEM, (total_files+1)*sizeof(void *), num);
|
||||
} else {
|
||||
out_ptrs = HuMemDirectMalloc(HEAP_SYSTEM, (total_files+1)*sizeof(void *));
|
||||
}
|
||||
for(i=0; data_ids[i] != -1; i++) {
|
||||
if(use_num) {
|
||||
out_ptrs[i] = HuDataReadNum(data_ids[i], num);
|
||||
} else {
|
||||
out_ptrs[i] = HuDataRead(data_ids[i]);
|
||||
}
|
||||
}
|
||||
out_ptrs[i] = NULL;
|
||||
return out_ptrs;
|
||||
}
|
||||
|
||||
s32 HuDataGetSize(s32 data_num)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int status;
|
||||
if((status = HuDataReadChk(data_num)) == -1) {
|
||||
return -1;
|
||||
}
|
||||
read_stat = &ReadDataStat[status];
|
||||
GetFileInfo(read_stat, data_num & 0xFFFF);
|
||||
return DATA_EFF_SIZE(read_stat->raw_len);
|
||||
}
|
||||
|
||||
void HuDataClose(void *ptr)
|
||||
{
|
||||
if(ptr) {
|
||||
HuMemDirectFree(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataCloseMulti(void **ptrs)
|
||||
{
|
||||
int i;
|
||||
for(i=0; ptrs[i]; i++) {
|
||||
void *ptr = ptrs[i];
|
||||
if(ptr) {
|
||||
HuMemDirectFree(ptr);
|
||||
}
|
||||
}
|
||||
if(ptrs) {
|
||||
HuMemDirectFree(ptrs);
|
||||
}
|
||||
}
|
||||
|
||||
void HuDataDirClose(s32 data_id)
|
||||
{
|
||||
DataReadStat *read_stat;
|
||||
int i;
|
||||
s32 dir_id = data_id >> 16;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].dir_id == dir_id) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i >= DATA_MAX_READSTAT) {
|
||||
return;
|
||||
}
|
||||
read_stat = &ReadDataStat[i];
|
||||
if(read_stat->status == 1) {
|
||||
OSPanic("data.c", 812, "data.c: Async Close Error\n");
|
||||
}
|
||||
read_stat->dir_id = -1;
|
||||
HuDvdDataClose(read_stat->dir);
|
||||
read_stat->dir = NULL;
|
||||
read_stat->used = FALSE;
|
||||
read_stat->status = 0;
|
||||
}
|
||||
|
||||
void HuDataDirCloseNum(s32 num)
|
||||
{
|
||||
int i;
|
||||
for(i=0; i<DATA_MAX_READSTAT; i++) {
|
||||
if(ReadDataStat[i].used == TRUE && ReadDataStat[i].num == num) {
|
||||
HuDataDirClose(ReadDataStat[i].dir_id << 16);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Still to be decompiled
|
||||
void *HuDataReadNumHeapShortForce(s32 data_id, s32 num, HeapID heap)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -2,8 +2,6 @@
|
|||
#include "dolphin/dvd.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
extern u32 DirDataSize;
|
||||
extern void HuDataDirReadAsyncCallBack(s32 result, DVDFileInfo* fileInfo);
|
||||
|
||||
static DVDDiskID correctDiskID = {
|
||||
{ 'M', 'P', 'G', 'C' }, //gameName
|
||||
|
|
@ -14,7 +12,6 @@ static DVDDiskID correctDiskID = {
|
|||
0, //streamingBufSize
|
||||
};
|
||||
|
||||
void HuDvdErrorWatch();
|
||||
|
||||
static int CallBackStatus;
|
||||
static s32 beforeDvdStatus;
|
||||
|
|
@ -68,7 +65,7 @@ void *HuDvdDataRead(char *path)
|
|||
if(!DVDOpen(path, &file)) {
|
||||
OSPanic("dvd.c", 146, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, 3, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
|
|
@ -84,20 +81,20 @@ void **HuDvdDataReadMulti(char **paths)
|
|||
while(paths[count]) {
|
||||
count++;
|
||||
}
|
||||
file_ptrs = HuMemDirectMalloc(0, count*4);
|
||||
file_ptrs = HuMemDirectMalloc(0, count*sizeof(void *));
|
||||
for(i=0; i<count; i++) {
|
||||
if(!DVDOpen(paths[i], &file)) {
|
||||
OSPanic("dvd.c", 183, "dvd.c: File Open Error");
|
||||
return NULL;
|
||||
} else {
|
||||
file_ptrs[i] = HuDvdDataReadWait(&file, 3, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
file_ptrs[i] = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
}
|
||||
return file_ptrs;
|
||||
}
|
||||
|
||||
void *HuDvdDataReadDirect(char *path, int heap)
|
||||
void *HuDvdDataReadDirect(char *path, HeapID heap)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
|
|
@ -117,7 +114,7 @@ void *HuDvdDataFastRead(s32 entrynum)
|
|||
if(!DVDFastOpen(entrynum, &file)) {
|
||||
OSPanic("dvd.c", 243, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, 3, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 0, 0, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
|
|
@ -131,20 +128,20 @@ void *HuDvdDataFastReadNum(s32 entrynum, s32 num)
|
|||
(void)num;
|
||||
OSPanic("dvd.c", 258, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&file, 3, 1, num, HuDVDReadAsyncCallBack, FALSE);
|
||||
data = HuDvdDataReadWait(&file, HEAP_DVD, 1, num, HuDVDReadAsyncCallBack, FALSE);
|
||||
DVDClose(&file);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
void *HuDvdDataFastReadAsync(s32 entrynum, DataStat *stat)
|
||||
void *HuDvdDataFastReadAsync(s32 entrynum, DataReadStat *stat)
|
||||
{
|
||||
DVDFileInfo file;
|
||||
void *data = NULL;
|
||||
if(!DVDFastOpen(entrynum, &stat->file_info)) {
|
||||
OSPanic("dvd.c", 274, "dvd.c: File Open Error");
|
||||
} else {
|
||||
data = HuDvdDataReadWait(&stat->file_info, 3, 0, 0, HuDataDirReadAsyncCallBack, TRUE);
|
||||
data = HuDvdDataReadWait(&stat->file_info, HEAP_DVD, 0, 0, HuDataDirReadAsyncCallBack, TRUE);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
#include "common.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
static u32 HeapSizeTbl[5] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
|
||||
static void *HeapTbl[5];
|
||||
static u32 HeapSizeTbl[HEAP_MAX] = { 0x240000, 0x140000, 0xA80000, 0x580000, 0 };
|
||||
static void *HeapTbl[HEAP_MAX];
|
||||
|
||||
void HuMemInitAll(void)
|
||||
{
|
||||
|
|
@ -39,12 +39,12 @@ void HuMemDCFlushAll()
|
|||
HuMemDCFlush(0);
|
||||
}
|
||||
|
||||
void HuMemDCFlush(int heap)
|
||||
void HuMemDCFlush(HeapID heap)
|
||||
{
|
||||
DCFlushRangeNoSync(HeapTbl[heap], HeapSizeTbl[heap]);
|
||||
}
|
||||
|
||||
void *HuMemDirectMalloc(int heap, s32 size)
|
||||
void *HuMemDirectMalloc(HeapID heap, s32 size)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -54,7 +54,7 @@ void *HuMemDirectMalloc(int heap, s32 size)
|
|||
return HuMemMemoryAlloc(HeapTbl[heap], size, retaddr);
|
||||
}
|
||||
|
||||
void *HuMemDirectMallocNum(int heap, s32 size, u32 num)
|
||||
void *HuMemDirectMallocNum(HeapID heap, s32 size, u32 num)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -73,7 +73,7 @@ void HuMemDirectFree(void *ptr)
|
|||
HuMemMemoryFree(ptr, retaddr);
|
||||
}
|
||||
|
||||
void HuMemDirectFreeNum(int heap, u32 num)
|
||||
void HuMemDirectFreeNum(HeapID heap, u32 num)
|
||||
{
|
||||
register u32 retaddr;
|
||||
asm {
|
||||
|
|
@ -82,22 +82,22 @@ void HuMemDirectFreeNum(int heap, u32 num)
|
|||
HuMemMemoryFreeNum(HeapTbl[heap], num, retaddr);
|
||||
}
|
||||
|
||||
s32 HuMemUsedMallocSizeGet(int heap)
|
||||
s32 HuMemUsedMallocSizeGet(HeapID heap)
|
||||
{
|
||||
return HuMemUsedMemorySizeGet(HeapTbl[heap]);
|
||||
}
|
||||
|
||||
s32 HuMemUsedMallocBlockGet(int heap)
|
||||
s32 HuMemUsedMallocBlockGet(HeapID heap)
|
||||
{
|
||||
return HuMemUsedMemoryBlockGet(HeapTbl[heap]);
|
||||
}
|
||||
|
||||
u32 HuMemHeapSizeGet(int heap)
|
||||
u32 HuMemHeapSizeGet(HeapID heap)
|
||||
{
|
||||
return HeapSizeTbl[heap];
|
||||
}
|
||||
|
||||
void *HuMemHeapPtrGet(int heap)
|
||||
void *HuMemHeapPtrGet(HeapID heap)
|
||||
{
|
||||
return HeapTbl[heap];
|
||||
}
|
||||
|
|
@ -71,7 +71,7 @@ Process *HuPrcCreate(void (*func)(void), u16 prio, u32 stack_size, s32 extra_siz
|
|||
alloc_size = HuMemMemoryAllocSizeGet(sizeof(Process))
|
||||
+HuMemMemoryAllocSizeGet(stack_size)
|
||||
+HuMemMemoryAllocSizeGet(extra_size);
|
||||
if(!(heap = HuMemDirectMalloc(0, alloc_size))) {
|
||||
if(!(heap = HuMemDirectMalloc(HEAP_SYSTEM, alloc_size))) {
|
||||
OSReport("process> malloc error size %d\n", alloc_size);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue