Files
tp/libs/dolphin/dvd/fstload.c
T
TakaRikka f070ee948f dolphin lib work (#237)
* getLayerNo_common_common finally matched

* dolphin ai / ar / card work from prime decomp

* work on dolphin dvd / dsp / db

* more dolphin os work

* si work

* remove asm

* build fix
2023-01-02 12:20:10 -07:00

144 lines
4.2 KiB
C

//
// Generated By: dol2asm
// Translation Unit: fstload
//
#include "dolphin/dvd/fstload.h"
#include "MSL_C/MSL_Common/Src/string.h"
#include "dol2asm.h"
#include "dolphin/dvd/dvd.h"
#include "dolphin/os/OS.h"
//
// Forward References:
//
static void cb();
void __fstLoad();
//
// Declarations:
//
/* ############################################################################################## */
/* 804517D0-804517D4 000CD0 0004+00 1/1 0/0 0/0 .sbss status */
static s32 status;
/* 804517D4-804517D8 000CD4 0004+00 2/2 0/0 0/0 .sbss bb2 */
static DVDBB2* bb2;
/* 804517D8-804517E0 000CD8 0004+04 2/2 0/0 0/0 .sbss idTmp */
static DVDDiskID* idTmp;
/* 8034BD2C-8034BE04 34666C 00D8+00 1/1 0/0 0/0 .text cb */
static void cb(s32 result, DVDCommandBlock* block) {
if (result > 0) {
switch (status) {
case 0:
status = 1;
DVDReadAbsAsyncForBS(block, bb2, OSRoundUp32B(sizeof(bb2)), 0x420, cb);
break;
case 1:
status = 2;
DVDReadAbsAsyncForBS(block, bb2->FSTAddress, OSRoundUp32B(bb2->FSTLength),
bb2->FSTPosition, cb);
}
} else if (result == -1) {
} else if (result == -4) {
status = 0;
DVDReset();
DVDReadDiskID(block, idTmp, cb);
}
}
/* ############################################################################################## */
/* 803D16F0-803D170C 02E810 001A+02 1/1 0/0 0/0 .data @38 */
SECTION_DATA static char lit_38[] = " Game Name ... %c%c%c%c\n";
/* 803D170C-803D1724 02E82C 0016+02 0/1 0/0 0/0 .data @39 */
#pragma push
#pragma force_active on
SECTION_DATA static char lit_39[] = " Company ..... %c%c\n";
#pragma pop
/* 803D1724-803D1738 02E844 0014+00 0/1 0/0 0/0 .data @40 */
#pragma push
#pragma force_active on
SECTION_DATA static char lit_40[] = " Disk # ...... %d\n";
#pragma pop
/* 803D1738-803D174C 02E858 0014+00 0/1 0/0 0/0 .data @41 */
#pragma push
#pragma force_active on
SECTION_DATA static char lit_41[] = " Game ver .... %d\n";
#pragma pop
/* 803D174C-803D1760 02E86C 0014+00 0/1 0/0 0/0 .data @44 */
#pragma push
#pragma force_active on
SECTION_DATA static char lit_44[] = " Streaming ... %s\n";
#pragma pop
/* 8044C9B8-8044C9F8 0796D8 003F+01 1/1 0/0 0/0 .bss bb2Buf */
static u8 bb2Buf[OSRoundUp32B(sizeof(DVDBB2)) + 31];
/* 8044C9F8-8044CA28 079718 0030+00 1/1 0/0 0/0 .bss block$18 */
static u8 block[48];
/* 80450A00-80450A04 000480 0002+02 1/1 0/0 0/0 .sdata @37 */
SECTION_SDATA static char lit_37[] = "\n";
/* 80450A04-80450A08 000484 0004+00 1/1 0/0 0/0 .sdata @42 */
SECTION_SDATA static char lit_42[] = "OFF";
/* 80450A08-80450A10 000488 0003+05 1/1 0/0 0/0 .sdata @43 */
SECTION_SDATA static char lit_43[] = "ON";
/* 8034BE04-8034BF6C 346744 0168+00 0/0 1/1 0/0 .text __fstLoad */
// needs compiler epilogue patch
#ifdef NONMATCHING
void __fstLoad(void) {
OSBootInfo* bootInfo;
DVDDiskID* id;
u8 idTmpBuf[sizeof(DVDDiskID) + 31];
static DVDCommandBlock block;
void* arenaHi;
arenaHi = OSGetArenaHi();
bootInfo = (OSBootInfo*)OSPhysicalToCached(0);
idTmp = (DVDDiskID*)(OSRoundUp32B(idTmpBuf));
bb2 = (DVDBB2*)(OSRoundUp32B(bb2Buf));
DVDReset();
DVDReadDiskID(&block, idTmp, cb);
while (DVDGetDriveStatus() != 0)
;
bootInfo->fst_location = bb2->FSTAddress;
bootInfo->fst_max_length = bb2->FSTMaxLength;
id = &bootInfo->disk_info;
memcpy(id, idTmp, sizeof(DVDDiskID));
OSReport("\n");
OSReport(" Game Name ... %c%c%c%c\n", id->game_name[0], id->game_name[1], id->game_name[2],
id->game_name[3]);
OSReport(" Company ..... %c%c\n", id->company[0], id->company[1]);
OSReport(" Disk # ...... %d\n", id->disk_number);
OSReport(" Game ver .... %d\n", id->game_version);
OSReport(" Streaming ... %s\n", (id->is_streaming == 0) ? "OFF" : "ON");
OSReport("\n");
OSSetArenaHi(bb2->FSTAddress);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void __fstLoad(void) {
nofralloc
#include "asm/dolphin/dvd/fstload/__fstLoad.s"
}
#pragma pop
#endif