Work on dvdlow, OSTime fix and various nonmatching

This commit is contained in:
Tal Hayon
2023-02-01 16:40:19 +02:00
parent d5d32236a0
commit 61d2b9a5c1
68 changed files with 447 additions and 2679 deletions
+7 -4
View File
@@ -152,7 +152,7 @@ SECTION_SDATA2 static f64 lit_650 = 4503601774854144.0 /* cast s32 to float */;
/* 802F4468-802F4658 2EEDA8 01F0+00 1/1 0/0 0/0 .text
* private_initiate__8J2DPrintFP7JUTFontffQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorQ28JUtility6TColorb
*/
// close
// matches with float literals
#ifdef NONMATCHING
void J2DPrint::private_initiate(JUTFont* pFont, f32 param_1, f32 param_2, JUtility::TColor param_3,
JUtility::TColor param_4, JUtility::TColor param_5,
@@ -165,10 +165,13 @@ void J2DPrint::private_initiate(JUTFont* pFont, f32 param_1, f32 param_2, JUtili
field_0x4c = 32.0f;
if (mFont != NULL) {
if (!param_7) {
param_2 = mFont->getLeading();
f32 temp;
if (param_7 == false) {
temp = param_2;
} else {
temp = mFont->getLeading();
}
field_0x4c = param_2;
field_0x4c = temp;
}
field_0x5a = 1;
@@ -92,34 +92,22 @@ J3DMaterialTable::~J3DMaterialTable() {}
/* 8032F64C-8032F6F8 329F8C 00AC+00 0/0 1/1 5/5 .text
* removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor */
#ifdef NONMATCHING
int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* pAnmColor) {
int ret = false;
u16 updateMatNum = pAnmColor->getUpdateMaterialNum();
for (u16 i = 0; i < updateMatNum; i++) {
if (pAnmColor->isValidUpdateMaterialID(i)) {
u16 updateMatID = pAnmColor->getUpdateMaterialID(i);
J3DMaterial* materialNode = getMaterialNodePointer(i);
if (materialNode->getMaterialAnm() == NULL) {
J3DMaterial* materialNode = getMaterialNodePointer(pAnmColor->getUpdateMaterialID(i));
J3DMaterialAnm* materialAnm = materialNode->getMaterialAnm();
if (materialAnm == NULL) {
ret = true;
} else {
materialNode->getMaterialAnm()->setMatColorAnm(0, NULL);
materialAnm->setMatColorAnm(0, NULL);
}
}
}
return ret;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm int J3DMaterialTable::removeMatColorAnimator(J3DAnmColor* param_0) {
nofralloc
#include "asm/JSystem/J3DGraphAnimator/J3DMaterialAttach/removeMatColorAnimator__16J3DMaterialTableFP11J3DAnmColor.s"
}
#pragma pop
#endif
/* 8032F6F8-8032F7B4 32A038 00BC+00 0/0 5/5 10/10 .text
* removeTexNoAnimator__16J3DMaterialTableFP16J3DAnmTexPattern */
+1 -1
View File
@@ -55,7 +55,7 @@ asm void DSPReleaseHalt2(u32 param_0) {
/* ############################################################################################## */
/* 804512F8-80451300 0007F8 0004+04 2/2 0/0 0/0 .sbss flag */
static u32 flag;
static volatile BOOL flag;
/* 8029E540-8029E54C 298E80 000C+00 1/1 0/0 0/0 .text setup_callback__FUs */
static void setup_callback(u16 param_0) {
+3 -14
View File
@@ -152,8 +152,6 @@ JKRAram::~JKRAram() {
}
/* 802D21DC-802D2248 2CCB1C 006C+00 1/0 0/0 0/0 .text run__7JKRAramFv */
// almost full match
#ifdef NONMATCHING
void* JKRAram::run(void) {
int result;
JKRAMCommand* command;
@@ -165,22 +163,13 @@ void* JKRAram::run(void) {
command = message->command;
delete message;
if (result != 1) {
} else {
switch (result) {
case 1:
JKRAramPiece::startDMA(command);
break;
}
} while (true);
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm void* JKRAram::run() {
nofralloc
#include "asm/JSystem/JKernel/JKRAram/run__7JKRAramFv.s"
}
#pragma pop
#endif
/* ############################################################################################## */
/* 8039D078-8039D078 0296D8 0000+00 0/0 0/0 0/0 .rodata @stringBase0 */
+5 -21
View File
@@ -127,7 +127,6 @@ JKRDvdArchive::~JKRDvdArchive() {
}
/* 802D7DB4-802D8050 2D26F4 029C+00 1/1 0/0 0/0 .text open__13JKRDvdArchiveFl */
#ifdef NONMATCHING
bool JKRDvdArchive::open(s32 entryNum) {
mArcInfoBlock = NULL;
field_0x64 = NULL;
@@ -151,12 +150,7 @@ bool JKRDvdArchive::open(s32 entryNum) {
JKRDvdRipper::ALLOC_DIRECTION_FORWARD, 0, &mCompression, NULL);
DCInvalidateRange(arcHeader, sizeof(SArcHeader));
int alignment;
if (mMountDirection == MOUNT_DIRECTION_HEAD) {
alignment = 0x20;
} else {
alignment = -0x20;
}
int alignment = mMountDirection == MOUNT_DIRECTION_HEAD ? 0x20 : -0x20;
mArcInfoBlock = (SArcDataInfo*)JKRAllocFromHeap(mHeap, arcHeader->file_data_offset, alignment);
if (!mArcInfoBlock) {
@@ -174,18 +168,18 @@ bool JKRDvdArchive::open(s32 entryNum) {
mStringTable = (char*)((int)&mArcInfoBlock->num_nodes + mArcInfoBlock->string_table_offset);
mExpandedSize = NULL;
bool useCompression = false;
u8 useCompression = 0;
SDIFileEntry* fileEntry = mFiles;
for (u32 i = 0; i < mArcInfoBlock->num_file_entries; fileEntry++, i++) {
if (!fileEntry->isUnknownFlag1()) {
useCompression |= fileEntry->isCompressed();
if (fileEntry->isUnknownFlag1()) {
useCompression |= fileEntry->getCompressFlag();
}
}
if (useCompression) {
mExpandedSize = (s32*)JKRAllocFromHeap(mHeap, sizeof(s32) * mArcInfoBlock->num_file_entries,
abs(alignment));
if (mExpandedSize) {
if (!mExpandedSize) {
// !@bug: mArcInfoBlock is allocated from mHeap but free'd to sSystemHeap. I don't know
// what will happen if mHeap != sSystemHeap, but it's still a bug to free to the wrong
// allocator.
@@ -213,16 +207,6 @@ cleanup:
return true;
}
#else
#pragma push
#pragma optimization_level 0
#pragma optimizewithasm off
asm bool JKRDvdArchive::open(s32 param_0) {
nofralloc
#include "asm/JSystem/JKernel/JKRDvdArchive/open__13JKRDvdArchiveFl.s"
}
#pragma pop
#endif
/* 802D8050-802D8168 2D2990 0118+00 1/0 0/0 0/0 .text
* fetchResource__13JKRDvdArchiveFPQ210JKRArchive12SDIFileEntryPUl */
+21 -20
View File
@@ -59,9 +59,8 @@ SECTION_SDATA2 static f32 lit_2289[1 + 1 /* padding */] = {
};
/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */
// matches with literals
#ifdef NONMATCHING
// bug in diff.py preventing me from seeing what's wrong
void JPAVolumePoint(JPAEmitterWorkData* work) {
work->mVolumePos.zero();
work->mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
@@ -86,15 +85,14 @@ static asm void JPAVolumePoint(JPAEmitterWorkData* param_0) {
/* 80455320-80455328 003920 0008+00 6/6 0/0 0/0 .sdata2 @2321 */
SECTION_SDATA2 static f64 lit_2321 = 4503601774854144.0 /* cast s32 to float */;
/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine__FP18JPAEmitterWorkData */
/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */
// matches with literals
#ifdef NONMATCHING
// bug in diff.py preventing me from seeing what's wrong
void JPAVolumeLine(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
work->mVolumePos.set(0.0f, 0.0f,
work->mVolumeSize *
(s32)((work->mVolumeEmitIdx / (work->mEmitCount - 1.0f) - 0.5f)));
((work->mVolumeEmitIdx / (work->mEmitCount - 1.0f) - 0.5f)));
work->mVolumeEmitIdx++;
} else {
work->mVolumePos.set(0.0f, 0.0f, work->mVolumeSize * work->mpEmtr->get_r_zh());
@@ -117,17 +115,22 @@ static asm void JPAVolumeLine(JPAEmitterWorkData* param_0) {
#endif
/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle__FP18JPAEmitterWorkData */
/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */
// regalloc. Could be issue with mul asm implementations
#ifdef NONMATCHING
// bug in diff.py preventing me from seeing what's wrong
void JPAVolumeCircle(JPAEmitterWorkData* work) {
f32 theta, distance, sizeXZ;
s16 thetai;
f32 theta;
f32 distance;
f32 sizeXZ;
f32 temp;
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
theta = work->mVolumeSweep * (work->mVolumeEmitIdx++ / work->mEmitCount);
theta = (s16)((work->mVolumeEmitIdx << 16) / work->mEmitCount);
thetai = theta * work->mVolumeSweep;
work->mVolumeEmitIdx++;
} else {
theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
thetai = theta;
}
distance = work->mpEmtr->get_r_f();
@@ -136,7 +139,7 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) {
}
sizeXZ = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
work->mVolumePos.set(sizeXZ * JMASSin(theta), 0.0f, sizeXZ * JMASCos(theta));
work->mVolumePos.set(sizeXZ * JMASSin(thetai), 0.0f, sizeXZ * JMASCos(thetai));
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
}
@@ -154,15 +157,13 @@ static asm void JPAVolumeCircle(JPAEmitterWorkData* param_0) {
#endif
/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube__FP18JPAEmitterWorkData */
/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */
// matches with literals
#ifdef NONMATCHING
// bug in diff.py preventing me from seeing what's wrong
void JPAVolumeCube(JPAEmitterWorkData* work) {
f32 size = work->mVolumeSize;
work->mVolumePos.set(size * work->mpEmtr->get_r_zh(), size * work->mpEmtr->get_r_zh(),
size * work->mpEmtr->get_r_zh());
work->mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize);
work->mVelOmni.mul(work->mVolumePos, work->mGlobalScl);
work->mVelAxis.set(work->mVolumePos.x, 0.0f, work->mVolumePos.z);
}