/**************************************************************************** * USB Loader GX Team * banner.c * * Dump opening.bnr thanks to Wiipower ***************************************************************************/ #include #include #include #include #include #include #include #include #include #include "fatmounter.h" #include "usbloader/wdvd.h" #include "usbloader/disc.h" #include "banner.h" #include "patches/fst.h" char *fstfilename(FST_ENTRY *fst, u32 index) { u32 count = fst[0].filelen; u32 stringoffset; if (index < count) { stringoffset = *(u32 *)&(fst[index]) % (256*256*256); return (char *)((u32)fst + count*12 + stringoffset); } else { return NULL; } } s32 dump_banner(const char * discid,const char * dest) { // Mount the disc //Disc_SetWBFS(1, (u8*)discid); Disc_SetUSB((u8*)discid); Disc_Open(); u64 offset; s32 ret; ret = __Disc_FindPartition(&offset); if (ret < 0) return ret; ret = WDVD_OpenPartition(offset); if (ret < 0) { //printf("ERROR: OpenPartition(0x%llx) %d\n", offset, ret); return ret; } // Read where to find the fst.bin u32 *buffer = memalign(32, 0x20); if (buffer == NULL) { //Out of memory return -1; } ret = WDVD_Read(buffer, 0x20, 0x420); if (ret < 0) return ret; // Read fst.bin void *fstbuffer = memalign(32, buffer[2]*4); FST_ENTRY *fst = (FST_ENTRY *)fstbuffer; if (fst == NULL) { //Out of memory free(buffer); return -1; } ret = WDVD_Read(fstbuffer, buffer[2]*4, buffer[1]*4); if (ret < 0) return ret; free(buffer); // Search the fst.bin u32 count = fst[0].filelen; int i; u32 index = 0; for (i=1;i