Skip to content

Commit

Permalink
- Check for errors during GC Loader fragment setup.
Browse files Browse the repository at this point in the history
  • Loading branch information
Extrems committed Jul 19, 2023
1 parent ea51192 commit 393353e
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 34 deletions.
43 changes: 20 additions & 23 deletions cube/swiss/source/devices/gcloader/deviceHandler-gcloader.c
Expand Up @@ -57,48 +57,45 @@ static s32 setupFile(file_handle* file, file_handle* file2, ExecutableFile* file
}

// If disc 1 is fragmented, make a note of the fragments and their sizes
if(!getFragments(DEVICE_CUR, file, &disc1FragList, &disc1Frags, 0, 0, UINT32_MAX)) {
free(disc1FragList);
return 0;
}
if(!getFragments(DEVICE_CUR, file, &disc1FragList, &disc1Frags, 0, 0, UINT32_MAX))
goto fail;

// If there is a disc 2 and it's fragmented, make a note of the fragments and their sizes
if(file2) {
if(!getFragments(DEVICE_CUR, file2, &disc2FragList, &disc2Frags, 1, 0, UINT32_MAX)) {
free(disc2FragList);
free(disc1FragList);
return 0;
if(!getFragments(DEVICE_CUR, file2, &disc2FragList, &disc2Frags, 1, 0, UINT32_MAX))
goto fail;

if(devices[DEVICE_PATCHES] == devices[DEVICE_CUR]) {
file2->fileBase = (u32)installPatch2(disc2FragList, (disc2Frags + 1) * sizeof(file_frag)) | ((u64)disc2Frags << 32);
file->fileBase = (u32)installPatch2(disc1FragList, (disc1Frags + 1) * sizeof(file_frag)) | ((u64)disc1Frags << 32);
}
}

// write disc 2 frags
gcloaderWriteFrags(1, disc2FragList, disc2Frags);
if(gcloaderWriteFrags(1, disc2FragList, disc2Frags))
goto fail;

// write disc 1 frags
gcloaderWriteFrags(0, disc1FragList, disc1Frags);
if(gcloaderWriteFrags(0, disc1FragList, disc1Frags))
goto fail;

// set disc 1 as active disc
gcloaderWriteDiscNum(0);

if(numToPatch < 0) {
free(disc2FragList);
free(disc1FragList);
return 1;
}

if(file2 && devices[DEVICE_PATCHES] == devices[DEVICE_CUR]) {
file2->fileBase = (u32)installPatch2(disc2FragList, (disc2Frags + 1) * sizeof(file_frag)) | ((u64)disc2Frags << 32);
file->fileBase = (u32)installPatch2(disc1FragList, (disc1Frags + 1) * sizeof(file_frag)) | ((u64)disc1Frags << 32);
}
if(gcloaderWriteDiscNum(0))
goto fail;

free(disc2FragList);
free(disc1FragList);
return 1;

fail:
free(disc2FragList);
free(disc1FragList);
return 0;
}

s32 deviceHandler_GCLOADER_setupFile(file_handle* file, file_handle* file2, ExecutableFile* filesToPatch, int numToPatch) {
if(!setupFile(file, file2, filesToPatch, numToPatch)) {
return 0;
goto fail;
}
if(numToPatch < 0) {
return 1;
Expand Down
24 changes: 15 additions & 9 deletions cube/swiss/source/devices/gcloader/gcloader.c
Expand Up @@ -62,19 +62,25 @@ char *gcloaderGetVersion() {
return buffer;
}

void gcloaderWriteFrags(u32 discNum, file_frag *fragList, u32 totFrags) {
int i;
int gcloaderWriteFrags(u32 discNum, file_frag *fragList, u32 totFrags) {
int ret, i;

print_gecko("GCLoader setting up disc %i with %i fragments\r\n", discNum, totFrags);
__gcloaderCmdImm(0xB3000001, discNum, totFrags);

for(i = 0; i < totFrags; i++) {
ret = __gcloaderCmdImm(0xB3000001, discNum, totFrags);
if(ret != 0) {
return ret;
}
for(i = 0; i < totFrags; i++) {
print_gecko("Frag %i: ofs in file: [0x%08X] len [0x%08X] LBA on SD [0x%08llX]\r\n",
i, fragList[i].offset, fragList[i].size, fragList[i].fileBase);
__gcloaderCmdImm(fragList[i].offset, fragList[i].size, fragList[i].fileBase);
}
ret = __gcloaderCmdImm(fragList[i].offset, fragList[i].size, fragList[i].fileBase);
if(ret == 0) {
break;
}
}
return ret;
}

void gcloaderWriteDiscNum(u32 discNum) {
__gcloaderCmdImm(0xB3000002, discNum, 0x00000000);
int gcloaderWriteDiscNum(u32 discNum) {
return __gcloaderCmdImm(0xB3000002, discNum, 0x00000000);
}
4 changes: 2 additions & 2 deletions cube/swiss/source/devices/gcloader/gcloader.h
Expand Up @@ -14,7 +14,7 @@

u32 gcloaderReadId();
char *gcloaderGetVersion();
void gcloaderWriteFrags(u32 discNum, file_frag *fragList, u32 totFrags);
void gcloaderWriteDiscNum(u32 discNum);
int gcloaderWriteFrags(u32 discNum, file_frag *fragList, u32 totFrags);
int gcloaderWriteDiscNum(u32 discNum);

#endif

0 comments on commit 393353e

Please sign in to comment.