Add Cdvd, keeping it disabled for now due to several rodata related issues
Upload Objdiff Progress Report Artifacts / upload (map[game_id:SLUS_210.07 language:us]) (push) Canceled after 0s

This commit is contained in:
2026-09-25 19:57:36 -05:00
parent d178f42037
commit 23e46e9421
4 changed files with 527 additions and 40 deletions
+52 -27
View File
@@ -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,22 +23033,22 @@
{
"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
}
}
]
+461 -8
View File
@@ -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;
}
+13 -3
View File
@@ -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
-1
View File
@@ -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() {