diff --git a/config/report.json b/config/report.json index 1110cd7..f5d0377 100644 --- a/config/report.json +++ b/config/report.json @@ -1,21 +1,21 @@ { "measures": { - "fuzzy_match_percent": 1.3765064, + "fuzzy_match_percent": 1.5786248, "total_code": "956924", - "matched_code": "12380", - "matched_code_percent": 1.2937287, + "matched_code": "14132", + "matched_code_percent": 1.4768152, "total_data": "8579152", - "matched_data": "511092", - "matched_data_percent": 5.957372, + "matched_data": "596084", + "matched_data_percent": 6.9480524, "total_functions": 2901, - "matched_functions": 60, - "matched_functions_percent": 2.0682523, - "complete_code": "7444", - "complete_code_percent": 0.7779092, - "complete_data": "62500", - "complete_data_percent": 0.7285102, + "matched_functions": 67, + "matched_functions_percent": 2.3095484, + "complete_code": "7876", + "complete_code_percent": 0.8230539, + "complete_data": "62532", + "complete_data_percent": 0.7288832, "total_units": 215, - "complete_units": 4 + "complete_units": 5 }, "units": [ { @@ -4284,7 +4284,7 @@ { "name": ".sdata", "size": "8", - "fuzzy_match_percent": 66.66667, + "fuzzy_match_percent": 31.25, "metadata": {} }, { @@ -8183,15 +8183,23 @@ { "name": "cs4/Seimei/src/Cdvd", "measures": { + "fuzzy_match_percent": 99.287476, "total_code": "1948", + "matched_code": "1752", + "matched_code_percent": 89.93839, "total_data": "85120", + "matched_data": "84992", + "matched_data_percent": 99.849625, "total_functions": 8, + "matched_functions": 7, + "matched_functions_percent": 87.5, "total_units": 1 }, "sections": [ { "name": ".text", "size": "2000", + "fuzzy_match_percent": 99.287476, "metadata": {} }, { @@ -8201,16 +8209,19 @@ { "name": ".bss", "size": "84992", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": ".rodata", "size": "112", + "fuzzy_match_percent": 11.363636, "metadata": {} }, { "name": ".sdata", "size": "16", + "fuzzy_match_percent": 75.0, "metadata": {} } ], @@ -8218,41 +8229,49 @@ { "name": "CdvdCheckAsyncBusy", "size": "16", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "CdvdAsync", "size": "948", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "CdvdBackReadProc", "size": "8", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "CdvdAsyncProc", "size": "196", + "fuzzy_match_percent": 92.918365, "metadata": {} }, { "name": "CdvdRead", "size": "668", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "MakeCdvdSearchPath", "size": "16", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "MakeCdvdReadPath", "size": "24", + "fuzzy_match_percent": 100.0, "metadata": {} }, { "name": "InitCdvdRead", "size": "72", + "fuzzy_match_percent": 100.0, "metadata": {} } ], @@ -22440,7 +22459,12 @@ "total_functions": 4, "matched_functions": 4, "matched_functions_percent": 100.0, - "total_units": 1 + "complete_code": "432", + "complete_code_percent": 100.0, + "complete_data": "32", + "complete_data_percent": 100.0, + "total_units": 1, + "complete_units": 1 }, "sections": [ { @@ -22457,6 +22481,7 @@ }, { "name": ".bss", + "fuzzy_match_percent": 100.0, "metadata": {} } ], @@ -22487,7 +22512,7 @@ } ], "metadata": { - "complete": false, + "complete": true, "source_path": "../src/cs4/Seimei/src/Event0001.c", "progress_categories": [ "" @@ -23008,23 +23033,23 @@ { "name": "Kuon", "measures": { - "fuzzy_match_percent": 1.3765064, + "fuzzy_match_percent": 1.5786248, "total_code": "956924", - "matched_code": "12380", - "matched_code_percent": 1.2937287, + "matched_code": "14132", + "matched_code_percent": 1.4768152, "total_data": "8579152", - "matched_data": "511092", - "matched_data_percent": 5.957372, + "matched_data": "596084", + "matched_data_percent": 6.9480524, "total_functions": 2901, - "matched_functions": 60, - "matched_functions_percent": 2.0682523, - "complete_code": "7444", - "complete_code_percent": 0.7779092, - "complete_data": "62500", - "complete_data_percent": 0.7285102, + "matched_functions": 67, + "matched_functions_percent": 2.3095484, + "complete_code": "7876", + "complete_code_percent": 0.8230539, + "complete_data": "62532", + "complete_data_percent": 0.7288832, "total_units": 215, - "complete_units": 4 + "complete_units": 5 } } ] -} +} \ No newline at end of file diff --git a/src/cs4/Seimei/src/Cdvd.c b/src/cs4/Seimei/src/Cdvd.c index bac55e3..376f2ab 100644 --- a/src/cs4/Seimei/src/Cdvd.c +++ b/src/cs4/Seimei/src/Cdvd.c @@ -1,17 +1,470 @@ #include "common.h" +#include "Cdvd.h" +#include "ee/eeregs.h" +#include "Memory.h" -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", CdvdCheckAsyncBusy); +static u_int CdvdAsync(void); -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", CdvdAsync); -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", CdvdBackReadProc); -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", CdvdAsyncProc); -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", CdvdRead); +/*? fsmfstrm_AllocStreamBuffer(?, u8*, s32, ?); +s32 fsmfstrm_AttachSector(?, u32, s32, ?); +s32 fsmfstrm_DmaReadSyncBlock(?, ?); +? fsmfstrm_SetReadStart(?, ?);*/ -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", MakeCdvdSearchPath); -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", MakeCdvdReadPath); +#define SECTOR_SIZE (2048) -INCLUDE_ASM("config/asm/nonmatchings/cs4/Seimei/src/Cdvd", InitCdvdRead); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +void InitCdvdRead(void) { + memset(CdvdReadSt, 0, sizeof(CdvdReadSt)); + + lpSetCdvd = (LPSETCDVD* ) CdvdReadSt; + lpLastCdvd = (LPLASTCDVD* ) CdvdReadSt; + lpCdvdRead = (LPCDVDREAD* ) CdvdReadSt; + + + AioInit(0x14); +} + + + + + + + +void MakeCdvdReadPath(s8* full, s8* root, s8* fname) { + sprintf(full, "%s%s;1", root, fname); +} + + + + + + + +void MakeCdvdSearchPath(s8* full, s8* fname) { + sprintf(full, "\\%s;1", fname); +} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +int CdvdRead(char * filename, int size, u_char * * lpBuf, u_char bSynch, int index, int filetype, u_int align) +{ + char TmpStr[128]; if (lpSetCdvd->state != 0) return -1; + + + + + strcpy(TmpStr, filename); + + StringCorrectPath4Disc(TmpStr, 0); + + strcpy(lpSetCdvd->fname, SearchFileName(TmpStr)); + + + + + + + + + + + + + lpSetCdvd->lplpAddr = lpBuf; + lpSetCdvd->size = size; + lpSetCdvd->index = index; + lpSetCdvd->fileType = filetype; + lpSetCdvd->align = align; + lpSetCdvd->retry = 0; + lpSetCdvd->lpDmyData = NULL; + if (lpSetCdvd->fileType < 0x80) *lpSetCdvd->lplpAddr = NULL; + if (lpSetCdvd->align == 0) lpSetCdvd->align = 0x10; + + if (bSynch) { + + + + + GetAllBindInfo(lpSetCdvd->fname, &lpSetCdvd->cdlfile.lsn, &lpSetCdvd->cdlfile.size); + if (lpSetCdvd->cdlfile.size == 0) return 0; + + + + + + + if (lpSetCdvd->size <= 0) lpSetCdvd->size = lpSetCdvd->cdlfile.size; + + lpCdvdRead->sector = (lpCdvdRead->size + SECTOR_SIZE - 1) / SECTOR_SIZE; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + if (lpSetCdvd->fileType < 0x80) + + *lpSetCdvd->lplpAddr = MemAllocAlignReal(lpSetCdvd->sector << 0xB, 0x40U, (char*)__FUNCTION__, ""); + + + + + fsmfstrm_SetReadStart(0, 0); + + if (fsmfstrm_AttachSector(0, lpSetCdvd->cdlfile.lsn, lpSetCdvd->size, 0x30) == 0) { + + MemFree(*lpSetCdvd->lplpAddr); + + return 0; + } + + + fsmfstrm_AllocStreamBuffer(0, *lpSetCdvd->lplpAddr, lpSetCdvd->sector << 0xB, 1); + + + fsmfstrm_SetReadStart(0, 1); + + fsmfstrm_DmaReadSyncBlock(0, 1); + + + FlushCache(0); + return lpSetCdvd->size; + } + + lpSetCdvd->state = 1; + lpLastCdvd = (LPLASTCDVD* ) lpSetCdvd; + if (lpSetCdvd < (LPSETCDVD *) &CdvdReadSt[0xFF]) lpSetCdvd++; + else lpSetCdvd = (LPSETCDVD* ) CdvdReadSt; + return 1; + + +} + + + + + + + +u_int CdvdAsyncProc(int bDraw /* r16 */) { + + GlobalLoadTimer = 0; + + while (1) + { + if (lpLastCdvd->state == 0) break; + + if (bDraw != 0) { + + FontDrawBegin(1); + FontPrintXY(350.0f, 430.0f, "Now Loading...[%d]\n", GlobalLoadTimer++); + FontDrawEnd(); + + while ((*D1_CHCR & D_CHCR_STR_M) != 0 || (*D2_CHCR & D_CHCR_STR_M) != 0) {} + DrawSynch(); + FlushCache(0); + } + + + CdvdAsync(); + } + + return 0; +} + + + + + + + + +void CdvdBackReadProc(void) { + CdvdAsync(); +} + + + + + + + +static u_int CdvdAsync(void) { + int aiocmd = 0; /* r29+0x1C */ + int aiores = 0; /* r29+0x18 */ + int size; + if ((void*)lpCdvdRead == (void*)lpSetCdvd) return 0; + + switch (lpCdvdRead->state) { + case 1: + if (lpCdvdRead->size <= 0) { + GetAllBindInfo(lpCdvdRead->fname, &lpCdvdRead->cdlfile.lsn, &lpCdvdRead->cdlfile.size); + + size = lpCdvdRead->cdlfile.size; + if (size == 0) break; + + lpCdvdRead->size = size; + + lpCdvdRead->sector = (lpCdvdRead->size + SECTOR_SIZE - 1) / SECTOR_SIZE; + lpCdvdRead->state = 4; + + + + } else { + + + lpCdvdRead->sector = (lpCdvdRead->size + SECTOR_SIZE - 1) / SECTOR_SIZE; + lpCdvdRead->state = 4; + } + return 1; + case 2: + if (AioCdSearchFile(lpCdvdRead->sname, &lpCdvdRead->cdlfile) != 0) { + break; + } + lpCdvdRead->state = 3; + return 0; + case 3: + if (AioCmdSync(1, &aiocmd, &aiores) != 0) { + if (aiores < 0) { + break; + } + + lpCdvdRead->size = (s32) lpCdvdRead->cdlfile.size; + + lpCdvdRead->sector = (lpCdvdRead->size + SECTOR_SIZE - 1) / SECTOR_SIZE; + lpCdvdRead->state = 4; + return 1; + } + return 0; + case 4: + + + + + + + + + + + + + + + + + + + + + if (lpCdvdRead->fileType < 0x80) { + + *lpCdvdRead->lplpAddr = MemAllocAlignReal(lpCdvdRead->sector * SECTOR_SIZE, 0x40, (char *)__FUNCTION__, ""); + + } + + + fsmfstrm_SetReadStart(0, 0); + + if (fsmfstrm_AttachSector(0, lpCdvdRead->cdlfile.lsn, lpCdvdRead->size, 0x30) == 0) { + + MemFree(*lpCdvdRead->lplpAddr); + break; + } + + fsmfstrm_AllocStreamBuffer(0, *lpCdvdRead->lplpAddr, lpCdvdRead->sector * SECTOR_SIZE, 1); + + + fsmfstrm_SetReadStart(0, 1); + + lpCdvdRead->state = 5; + return 0; + case 5: + if (fsmfstrm_DmaReadSyncBlock(0, 0) == 0) { + + + + + + + + + + + + + + AfterFileReadFunc(*lpCdvdRead->lplpAddr, lpCdvdRead->index, lpCdvdRead->fileType, lpCdvdRead->size); + + + if ((SND_SqPrepareStatus() == 1) || !(fssdsynthTransBankStatus() & 0xFF)) { + lpCdvdRead->state = 6; + return 0; + } + + + + + + + + + lpCdvdRead->state = 0; + if (lpCdvdRead < (LPCDVDREAD* )&CdvdReadSt[0xFF]) lpCdvdRead += 1; + else lpCdvdRead = (LPCDVDREAD* ) CdvdReadSt; + FlushCache(0); + } + return 0; + case 6: + if ((SND_SqPrepareStatus() == 0) && (fssdsynthTransBankStatus() & 0xFF)) { + + lpCdvdRead->state = 0; + if (lpCdvdRead < (LPCDVDREAD* )&CdvdReadSt[0xFF]) lpCdvdRead += 1; + else lpCdvdRead = (LPCDVDREAD* ) CdvdReadSt; + FlushCache(0); + SND_ReleaseBunk(); + } + return 0; + } + + + + + + + + + + + + + + + + + + + lpCdvdRead->state = 0; + if (lpCdvdRead < (LPCDVDREAD* )&CdvdReadSt[0xFF]) lpCdvdRead += 1; + else lpCdvdRead = (LPCDVDREAD* ) CdvdReadSt; + return 0; +} + + +static inline char* foo() { + printf("\\%s;1"); +} + + + +int CdvdCheckAsyncBusy(void) { return lpLastCdvd->state != 0; + +} \ No newline at end of file diff --git a/src/cs4/Seimei/src/Cdvd.h b/src/cs4/Seimei/src/Cdvd.h index 3317425..f46606f 100644 --- a/src/cs4/Seimei/src/Cdvd.h +++ b/src/cs4/Seimei/src/Cdvd.h @@ -1,6 +1,7 @@ #ifndef CDVD_H #define CDVD_H - +#include "common.h" +#define SECTOR_SIZE (2048) typedef struct /* @anon4 */ { // Members @@ -116,8 +117,17 @@ typedef struct /* @anon3 */ { } LPCDVD; // size: 0x4, address: 0x257528 extern unsigned int GlobalLoadTimer; // size: 0x4, address: 0x257894 +static CDVDREADST CdvdReadSt[256]; +static LPSETCDVD* lpSetCdvd = (LPSETCDVD* )CdvdReadSt; +static LPLASTCDVD* lpLastCdvd = (LPLASTCDVD* )CdvdReadSt; +static LPCDVDREAD* lpCdvdRead = (LPCDVDREAD* )CdvdReadSt; -signed int CdvdRead(char * filename /* r4 */, signed int size /* r20 */, unsigned char * * lpBuf /* r19 */, unsigned char bSynch /* r18 */, signed int index /* r17 */, signed int filetype /* r16 */, unsigned int align /* r21 */); - +void InitCdvdRead(void); +void MakeCdvdReadPath(s8* full, s8* root, s8* fname); +void MakeCdvdSearchPath(s8* full, s8* fname); +int CdvdRead(char * filename, int size, u_char * * lpBuf, u_char bSynch, int index, int filetype, u_int align); +u_int CdvdAsyncProc(int bDraw); +void CdvdBackReadProc(void); +int CdvdCheckAsyncBusy(void); #endif // CDVD_H diff --git a/src/cs4/Seimei/src/File.c b/src/cs4/Seimei/src/File.c index 6f4f95b..4ebc45f 100644 --- a/src/cs4/Seimei/src/File.c +++ b/src/cs4/Seimei/src/File.c @@ -14,7 +14,6 @@ unsigned char RootPath[128]; // size: 0x80, address: 0x325530 unsigned char ScePath[128]; // size: 0x80, address: 0x3254B0 -// Belongs in CDVD.c unsigned int GlobalLoadTimer; void InitFileSystem() {