From 169c7ae4a2e892a78babe26b450a2846ea0d8e38 Mon Sep 17 00:00:00 2001 From: hatal175 Date: Wed, 24 Sep 2025 05:27:24 +0300 Subject: [PATCH] JHOSTIO almost comletely linked (#2689) --- configure.py | 16 +++--- include/JSystem/JHostIO/JHICommonMem.h | 12 ++-- src/JSystem/JHostIO/JHIComm.cpp | 80 ++++++++++++-------------- src/JSystem/JHostIO/JHIMccBuf.cpp | 14 +++-- src/JSystem/JHostIO/JHIhioASync.cpp | 2 +- src/JSystem/JHostIO/JORFile.cpp | 7 ++- src/JSystem/JHostIO/JORServer.cpp | 2 +- 7 files changed, 66 insertions(+), 67 deletions(-) diff --git a/configure.py b/configure.py index b92fe23b376..2bf60ae8d02 100755 --- a/configure.py +++ b/configure.py @@ -1180,17 +1180,17 @@ config.libs = [ JSystemLib( "JHostIO", [ - Object(NonMatching, "JSystem/JHostIO/JHIComm.cpp"), - Object(NonMatching, "JSystem/JHostIO/JHICommonMem.cpp"), - Object(NonMatching, "JSystem/JHostIO/JORServer.cpp"), - Object(Equivalent, "JSystem/JHostIO/JOREntry.cpp"), # debug weak func order - Object(NonMatching, "JSystem/JHostIO/JORFile.cpp"), + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHIComm.cpp"), + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHICommonMem.cpp"), + Object(Equivalent, "JSystem/JHostIO/JORServer.cpp"), # weak func order + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JOREntry.cpp", extra_cflags=["-sym off"]), # debug weak func order + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JORFile.cpp", extra_cflags=["-sym off"]), Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JORMessageBox.cpp"), - Object(Equivalent, "JSystem/JHostIO/JORHostInfo.cpp"), # debug weak func order + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JORHostInfo.cpp", extra_cflags=["-sym off"]), # debug weak func order Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JORShellExecute.cpp"), Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHIMemBuf.cpp"), - Object(NonMatching, "JSystem/JHostIO/JHIhioASync.cpp"), - Object(NonMatching, "JSystem/JHostIO/JHIMccBuf.cpp"), + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHIhioASync.cpp", extra_cflags=["-sym off"]), + Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHIMccBuf.cpp", extra_cflags=["-sym off"]), Object(MatchingFor("ShieldD"), "JSystem/JHostIO/JHIRMcc.cpp"), ], ), diff --git a/include/JSystem/JHostIO/JHICommonMem.h b/include/JSystem/JHostIO/JHICommonMem.h index 017e8d2669f..55ba3672b20 100644 --- a/include/JSystem/JHostIO/JHICommonMem.h +++ b/include/JSystem/JHostIO/JHICommonMem.h @@ -18,18 +18,18 @@ struct JHITag { mp_data = NULL; } - // NONMATCHING - stack stuff - const void* send(const void* param_0, s32 param_1) { - u32 sp10 = JHIhtonl(m_tag); - u32 sp14 = JHIhtonl(param_1); + s32 send(const void* param_0, s32 param_1) { + u32 sp10[2]; + sp10[0] = JHIhtonl(m_tag); + sp10[1] = JHIhtonl(param_1); if (mp_data->sendBegin() >= param_1 + 8) { - mp_data->sendCont(&sp10, 8); + mp_data->sendCont(sp10, 8); mp_data->sendCont(param_0, param_1); mp_data->sendEnd(); } - return param_0; + return param_1; } virtual ~JHITag() {} diff --git a/src/JSystem/JHostIO/JHIComm.cpp b/src/JSystem/JHostIO/JHIComm.cpp index 21238bbb365..f406fb4a474 100644 --- a/src/JSystem/JHostIO/JHIComm.cpp +++ b/src/JSystem/JHostIO/JHIComm.cpp @@ -80,31 +80,28 @@ void JHICommBufReader::readEnd() { m_header.updateGetAdrs(); } -// NONMATCHING - stack / branch issues int JHICommBufReader::read(void* param_0, int param_1) { int sp2C = min(param_1, m_header.getReadableSize()); u32 sp28; int var_r28 = sp2C; u8* var_r30 = (u8*)param_0; - if (var_r28 > 0) { - int sp24 = m_header.getContSize(); - if (sp24 > 0) { - int sp20 = min(var_r28, 4 - sp24); - m_header.alignGetAdrs(); + int sp24; + if (var_r28 > 0 && (sp24 = m_header.getContSize()) > 0) { + int sp20 = min(var_r28, 4 - sp24); + m_header.alignGetAdrs(); - mp_memBuffer->readIO(m_header.getGetAdrs(), &sp28); - - int sp1C = sp24; - int sp18 = sp24 + sp20; - for (; sp1C < sp18; sp1C++) { - *var_r30 = sp28 >> ((3 - sp1C) * 8); - var_r30++; - } - - var_r28 -= sp20; - m_header.addGetAdrs(sp24 + sp20); + mp_memBuffer->readIO(m_header.getGetAdrs(), &sp28); + + int sp1C = sp24; + int sp18 = sp24 + sp20; + for (; sp1C < sp18; sp1C++) { + *var_r30 = sp28 >> ((3 - sp1C) * 8); + var_r30++; } + + var_r28 -= sp20; + m_header.addGetAdrs(sp24 + sp20); } while (var_r28 >= 4) { @@ -229,34 +226,31 @@ void JHICommBufWriter::writeEnd() { m_header.updatePutAdrs(); } -// NONMATCHING - stack / misc issues int JHICommBufWriter::write(void* param_0, int param_1) { int sp28 = min(param_1, m_header.getWritebleSize()); int var_r27 = sp28; u8* var_r29 = (u8*)param_0; u8* var_r30 = &m_header.field_0x30; - if (var_r27 > 0) { - int sp24 = m_header.getRemSize(); - if (sp24 > 0) { - int sp20 = min(4 - sp24, var_r27); - - int sp1C = sp24; - int sp18 = sp24 + sp20; - for (; sp1C < sp18; sp1C++) { - var_r30[sp1C] = *var_r29++; - } - - var_r27 -= sp20; - m_header.alignPutAdrs(); - - mp_memBuffer->writeIO(m_header.getPutAdrs(), - (m_header.field_0x30 << 0x18) | - (m_header.field_0x31 << 0x10) | - (m_header.field_0x32 << 0x08) | - (m_header.field_0x33 << 0x00)); - m_header.addPutAdrs(sp24 + sp20); + int sp24; + if (var_r27 > 0 && (sp24 = m_header.getRemSize()) > 0) { + int sp20 = min(4 - sp24, var_r27); + + int sp1C = sp24; + int sp18 = sp24 + sp20; + for (; sp1C < sp18; sp1C++) { + var_r30[sp1C] = *var_r29++; } + + var_r27 -= sp20; + m_header.alignPutAdrs(); + + mp_memBuffer->writeIO(m_header.getPutAdrs(), + (var_r30[0] << 0x18) | + (var_r30[1] << 0x10) | + (var_r30[2] << 0x08) | + (var_r30[3] << 0x00)); + m_header.addPutAdrs(sp24 + sp20); } while (var_r27 >= 4) { @@ -276,14 +270,14 @@ int JHICommBufWriter::write(void* param_0, int param_1) { int sp14 = var_r27; for (int i = 0; i < sp14; i++) { - var_r30[sp14] = *var_r29++; + var_r30[i] = *var_r29++; } mp_memBuffer->writeIO(m_header.getPutAdrs(), - (m_header.field_0x30 << 0x18) | - (m_header.field_0x31 << 0x10) | - (m_header.field_0x32 << 0x08) | - (m_header.field_0x33 << 0x00)); + (var_r30[0] << 0x18) | + (var_r30[1] << 0x10) | + (var_r30[2] << 0x08) | + (var_r30[3] << 0x00)); var_r27 -= sp14; m_header.addPutAdrs(sp14); diff --git a/src/JSystem/JHostIO/JHIMccBuf.cpp b/src/JSystem/JHostIO/JHIMccBuf.cpp index 5d2ae8d78a4..6a9df9d841b 100644 --- a/src/JSystem/JHostIO/JHIMccBuf.cpp +++ b/src/JSystem/JHostIO/JHIMccBuf.cpp @@ -389,15 +389,19 @@ int JHIMccBufWriter::writeBegin() { return var_r29; } -// NONMATCHING - regswap, equivalent int JHIMccBufWriter::write(void* pBuffer, u32 size) { if (!isPort()) { return 0; } - u32 var_r29 = setDataToBuf(pBuffer, size); - + u32 var_r26; u32 var_r27; + u32 var_r28; + + // Probably fake match + var_r28 = var_r28; + + u32 var_r29 = setDataToBuf(pBuffer, size); if (mBeginPos == field_0xc) { var_r27 = field_0x1c + field_0xc; var_r27 -= 0x20; @@ -405,10 +409,10 @@ int JHIMccBufWriter::write(void* pBuffer, u32 size) { var_r27 = mBeginPos - 0x20; } - u32 var_r26; if (mEndPos > var_r27) { + int x; var_r26 = field_0x1c - (mEndPos - var_r27); - u32 var_r28 = (field_0x1c + field_0xc) - mEndPos; + var_r28 = (field_0x1c + field_0xc) - mEndPos; if (var_r28 >= var_r29) { if (!JHIMCCWrite(mChannel, mWriteOffset + mEndPos, mTempBuf, var_r29)) { diff --git a/src/JSystem/JHostIO/JHIhioASync.cpp b/src/JSystem/JHostIO/JHIhioASync.cpp index 1ad9320da03..e9dfd586e8e 100644 --- a/src/JSystem/JHostIO/JHIhioASync.cpp +++ b/src/JSystem/JHostIO/JHIhioASync.cpp @@ -48,7 +48,6 @@ static void dummyString() { DEAD_STRING("INFO:Quitting Hostio..."); } -// NONMATCHING - small branch issue u32 JHIEventLoop() { static u32 tNowWrite; static u32 tNowRead; @@ -141,6 +140,7 @@ u32 JHIEventLoop() { if (!gMccContext.mp_reader->isPort() || !gMccContext.mp_writer->isPort()) { gsEnableInterface = 0; } + (void)0; } else if (!gsEnableInterface && gsEnableHostio != 0 && JHIInitInterface()) { OS_REPORT("INFO: JHostIO: Enabled USB2EXI Interface\n"); bool sp8 = JHINegotiateInterface(800); diff --git a/src/JSystem/JHostIO/JORFile.cpp b/src/JSystem/JHostIO/JORFile.cpp index f29c9f99521..b412958d884 100644 --- a/src/JSystem/JHostIO/JORFile.cpp +++ b/src/JSystem/JHostIO/JORFile.cpp @@ -9,7 +9,8 @@ JORFile::JORFile() mFileLength(0), mStatus(EStatus_WAIT), mNFileName(0), - field_0x18(0) {} + field_0x18(0), + mDataStream() {} int JORFile::countMaskSize(const char* mask) { u32 var_r28 = 0; @@ -77,11 +78,11 @@ int JORFile::open(const char* path, u32 flags, const char* extMask, const char* return 1; } -// NONMATCHING, equivalent? void JORFile::close() { + JORMContext* mctx; if (mHandle != 0) { mStatus = EStatus_WAIT; - JORMContext* mctx = JORServer::getInstance()->attachMCTX(MCTX_MSG_FIO); + mctx = JORServer::getInstance()->attachMCTX(MCTX_MSG_FIO); mctx->closeFile(this); JORServer::getInstance()->releaseMCTX(mctx); diff --git a/src/JSystem/JHostIO/JORServer.cpp b/src/JSystem/JHostIO/JORServer.cpp index a6261f45bc3..f453351894e 100644 --- a/src/JSystem/JHostIO/JORServer.cpp +++ b/src/JSystem/JHostIO/JORServer.cpp @@ -163,7 +163,7 @@ void JORServer::releaseMCTX(JORMContext* mctx) { ASSERTMSGLINE(292, mctx->msgSize() < 0x10000, "JORServer:releaseMCTX: context buffer probably overflowed.\n"); if (mctx->msgSize() > 4) { - const void* var_r28 = send(mctx->msgPtr(), mctx->msgSize()); + const s32 var_r28 = send(mctx->msgPtr(), mctx->msgSize()); } }