mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-11 21:21:57 -04:00
More Jsystem stuff (#395)
* JASProbe OK * JASRegisterParam OK * Import JASReport * JASDvdThread OK
This commit is contained in:
@@ -4,7 +4,9 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JAudio2/JASDvdThread.h"
|
||||
#include "dol2asm.h"
|
||||
#include "JSystem/JAudio2/JASTaskThread.h"
|
||||
#include "JSystem/JAudio2/JASHeapCtrl.h"
|
||||
#include "JSystem/JKernel/JKRSolidHeap.h"
|
||||
#include "dolphin/os/OSThread.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
@@ -12,22 +14,10 @@
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" u32 getThreadPointer__6JASDvdFv();
|
||||
extern "C" void createThread__6JASDvdFliUl();
|
||||
extern "C" u8 sThread__6JASDvd[4 + 4 /* padding */];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__13JASTaskThreadFiiUl();
|
||||
extern "C" void* __nw__FUlP7JKRHeapi();
|
||||
extern "C" void _savegpr_29();
|
||||
extern "C" void _restgpr_29();
|
||||
extern "C" extern u8 JASDram[4];
|
||||
extern "C" u8 sSystemHeap__7JKRHeap[4];
|
||||
extern "C" u8 sCurrentHeap__7JKRHeap[4];
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
@@ -42,11 +32,10 @@ JASTaskThread* JASDvd::getThreadPointer() {
|
||||
}
|
||||
|
||||
/* 8028FF04-8028FFA8 28A844 00A4+00 0/0 1/1 0/0 .text createThread__6JASDvdFliUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASDvd::createThread(s32 param_0, int param_1, u32 param_2) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASDvdThread/createThread__6JASDvdFliUl.s"
|
||||
bool JASDvd::createThread(s32 priority, int param_1, u32 param_2) {
|
||||
if (sThread != NULL) return false;
|
||||
sThread = new (JASDram, 0) JASTaskThread(priority, param_1, param_2);
|
||||
sThread->setCurrentHeap(JKRGetSystemHeap());
|
||||
OSResumeThread(sThread->getThreadRecord());
|
||||
return true;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -213,8 +213,7 @@ asm JASGenericMemPool::~JASGenericMemPool() {
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451210-80451214 000710 0004+00 2/2 15/15 0/0 .sbss JASDram */
|
||||
extern u8 JASDram[4];
|
||||
u8 JASDram[4];
|
||||
JKRSolidHeap* JASDram;
|
||||
|
||||
/* 802908C8-80290948 28B208 0080+00 0/0 4/4 0/0 .text newMemPool__17JASGenericMemPoolFUli
|
||||
*/
|
||||
|
||||
@@ -4,101 +4,69 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JAudio2/JASProbe.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/os/OS.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JASProbe {
|
||||
/* 80290EE4 */ void start(s32, char const*);
|
||||
/* 80290D74 */ void start(char const*);
|
||||
/* 80290DC4 */ void stop();
|
||||
/* 80290F24 */ void stop(s32);
|
||||
|
||||
static u8 sProbeTable[64];
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void start__8JASProbeFPCc();
|
||||
extern "C" void stop__8JASProbeFv();
|
||||
extern "C" void start__8JASProbeFlPCc();
|
||||
extern "C" void stop__8JASProbeFl();
|
||||
extern "C" u8 sProbeTable__8JASProbe[64];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void OSDisableInterrupts();
|
||||
extern "C" void OSRestoreInterrupts();
|
||||
extern "C" void OSGetTime();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* 80290D74-80290DC4 28B6B4 0050+00 1/1 0/0 0/0 .text start__8JASProbeFPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASProbe::start(char const* param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASProbe/start__8JASProbeFPCc.s"
|
||||
void JASProbe::start(char const* name) {
|
||||
volatile BOOL interrupts = OSDisableInterrupts();
|
||||
mName = name;
|
||||
mStartTime = OSGetTime();
|
||||
OSRestoreInterrupts(interrupts);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80455588-8045558C 003B88 0004+00 1/1 0/0 0/0 .sdata2 @125 */
|
||||
SECTION_SDATA2 static f32 lit_125 = 59.939998626708984f;
|
||||
|
||||
/* 8045558C-80455590 003B8C 0004+00 1/1 0/0 0/0 .sdata2 @126 */
|
||||
SECTION_SDATA2 static f32 lit_126 = 24.0f / 25.0f;
|
||||
|
||||
/* 80455590-80455598 003B90 0004+04 1/1 0/0 0/0 .sdata2 @127 */
|
||||
SECTION_SDATA2 static f32 lit_127[1 + 1 /* padding */] = {
|
||||
1.0f / 25.0f,
|
||||
/* padding */
|
||||
0.0f,
|
||||
};
|
||||
|
||||
/* 80455598-804555A0 003B98 0008+00 1/1 0/0 0/0 .sdata2 @129 */
|
||||
SECTION_SDATA2 static f64 lit_129 = 4503599627370496.0 /* cast u32 to float */;
|
||||
|
||||
/* 80290DC4-80290EE4 28B704 0120+00 1/1 0/0 0/0 .text stop__8JASProbeFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASProbe::stop() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASProbe/stop__8JASProbeFv.s"
|
||||
void JASProbe::stop() {
|
||||
volatile int interrupts = OSDisableInterrupts();
|
||||
_08 = (u32)OSGetTime() - mStartTime;
|
||||
_08 /= OS_TIMER_CLOCK / 59.94f;
|
||||
if (_10 < _08 && 100 < _1A8) {
|
||||
_10 = _08;
|
||||
}
|
||||
_0C = _0C * 0.96f + _08 * 0.04f;
|
||||
u32 resultIndex = _1A8 % 100;
|
||||
_14 -= _18[resultIndex];
|
||||
_18[resultIndex] = _08;
|
||||
_14 += _08;
|
||||
_1A8++;
|
||||
OSRestoreInterrupts(interrupts);
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80431620-80431660 05E340 0040+00 2/2 0/0 0/0 .bss sProbeTable__8JASProbe */
|
||||
u8 JASProbe::sProbeTable[64];
|
||||
JASProbe* JASProbe::sProbeTable[16];
|
||||
|
||||
/* 80290EE4-80290F24 28B824 0040+00 0/0 7/7 0/0 .text start__8JASProbeFlPCc */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASProbe::start(s32 param_0, char const* param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASProbe/start__8JASProbeFlPCc.s"
|
||||
void JASProbe::start(s32 index, char const* name) {
|
||||
if (index < 16) {
|
||||
if (sProbeTable[index] != NULL) {
|
||||
sProbeTable[index]->start(name);
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80290F24-80290F64 28B864 0040+00 0/0 6/6 0/0 .text stop__8JASProbeFl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASProbe::stop(s32 param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASProbe/stop__8JASProbeFl.s"
|
||||
void JASProbe::stop(s32 index) {
|
||||
if (index < 16) {
|
||||
if (sProbeTable[index] != NULL) {
|
||||
sProbeTable[index]->stop();
|
||||
}
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -4,31 +4,16 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JAudio2/JASRegisterParam.h"
|
||||
#include "dol2asm.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
//
|
||||
// Types:
|
||||
//
|
||||
|
||||
struct JASRegisterParam {
|
||||
struct RegID {};
|
||||
|
||||
/* 80293644 */ JASRegisterParam();
|
||||
/* 80293664 */ void init();
|
||||
/* 80293684 */ void write(JASRegisterParam::RegID, u32);
|
||||
/* 802937B8 */ void read(JASRegisterParam::RegID);
|
||||
};
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void __ct__16JASRegisterParamFv();
|
||||
extern "C" void init__16JASRegisterParamFv();
|
||||
extern "C" void write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl();
|
||||
extern "C" void read__16JASRegisterParamFQ216JASRegisterParam5RegID();
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
@@ -38,73 +23,129 @@ extern "C" void read__16JASRegisterParamFQ216JASRegisterParam5RegID();
|
||||
//
|
||||
|
||||
/* 80293644-80293664 28DF84 0020+00 0/0 1/1 0/0 .text __ct__16JASRegisterParamFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm JASRegisterParam::JASRegisterParam() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASRegisterParam/__ct__16JASRegisterParamFv.s"
|
||||
JASRegisterParam::JASRegisterParam() {
|
||||
for (int i = 0; i < 14; i++) {
|
||||
field_0x0[i] = 0;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* 80293664-80293684 28DFA4 0020+00 0/0 1/1 0/0 .text init__16JASRegisterParamFv */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASRegisterParam::init() {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASRegisterParam/init__16JASRegisterParamFv.s"
|
||||
void JASRegisterParam::init() {
|
||||
for (int i = 0; i < 14; i++) {
|
||||
field_0x0[i] = 0;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803C5B90-803C5BB8 -00001 0028+00 1/1 0/0 0/0 .data @56 */
|
||||
SECTION_DATA static void* lit_56[10] = {
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x50),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x64),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x74),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x94),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0xB4),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0xD4),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0xF4),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x104),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x114),
|
||||
(void*)(((char*)write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl) + 0x124),
|
||||
};
|
||||
|
||||
/* 80293684-802937B8 28DFC4 0134+00 1/0 4/4 0/0 .text
|
||||
* write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASRegisterParam::write(JASRegisterParam::RegID param_0, u32 param_1) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASRegisterParam/write__16JASRegisterParamFQ216JASRegisterParam5RegIDUl.s"
|
||||
void JASRegisterParam::write(JASRegisterParam::RegID param_0, u32 param_1) {
|
||||
if (param_0 < 14) {
|
||||
if (param_0 <= 2) {
|
||||
field_0x0[param_0] = (u8)param_1;
|
||||
return;
|
||||
}
|
||||
|
||||
field_0x0[param_0] = param_1;
|
||||
return;
|
||||
}
|
||||
|
||||
switch (param_0) {
|
||||
case 32:
|
||||
field_0x0[0] = (param_1 >> 8) & 0xff;
|
||||
field_0x0[1] = param_1 & 0xff;
|
||||
break;
|
||||
case 33:
|
||||
field_0x0[4] = param_1 >> 16;
|
||||
field_0x0[5] = param_1;
|
||||
break;
|
||||
case 34:
|
||||
field_0x0[4] &= 0xff;
|
||||
field_0x0[4] |= ((param_1 & 0xff) << 8);
|
||||
break;
|
||||
case 35:
|
||||
field_0x0[4] &= 0xff00;
|
||||
field_0x0[4] |= param_1 & 0xff;
|
||||
break;
|
||||
case 36:
|
||||
field_0x0[5] &= 0xff;
|
||||
field_0x0[5] |= (param_1 & 0xff) << 8;
|
||||
break;
|
||||
case 37:
|
||||
field_0x0[5] &= 0xff00;
|
||||
field_0x0[5] |= param_1 & 0xff;
|
||||
break;
|
||||
case 38:
|
||||
field_0x0[6] = param_1 >> 16;
|
||||
field_0x0[7] = param_1;
|
||||
break;
|
||||
case 39:
|
||||
field_0x0[8] = param_1 >> 16;
|
||||
field_0x0[9] = param_1;
|
||||
break;
|
||||
case 40:
|
||||
field_0x0[10] = param_1 >> 16;
|
||||
field_0x0[11] = param_1;
|
||||
break;
|
||||
case 41:
|
||||
field_0x0[12] = param_1 >> 16;
|
||||
field_0x0[13] = param_1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 803C5BB8-803C5BE0 -00001 0028+00 1/1 0/0 0/0 .data @87 */
|
||||
SECTION_DATA static void* lit_87[10] = {
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0x3C),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0x54),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0x68),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0x7C),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0x8C),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0xA0),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0xB0),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0xC4),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0xD8),
|
||||
(void*)(((char*)read__16JASRegisterParamFQ216JASRegisterParam5RegID) + 0xEC),
|
||||
};
|
||||
|
||||
/* 802937B8-802938BC 28E0F8 0104+00 1/0 1/1 0/0 .text
|
||||
* read__16JASRegisterParamFQ216JASRegisterParam5RegID */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASRegisterParam::read(JASRegisterParam::RegID param_0) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASRegisterParam/read__16JASRegisterParamFQ216JASRegisterParam5RegID.s"
|
||||
u32 JASRegisterParam::read(JASRegisterParam::RegID param_0) {
|
||||
if (param_0 < 14) {
|
||||
return field_0x0[param_0];
|
||||
}
|
||||
u32 rv = 0;
|
||||
switch (param_0) {
|
||||
case 32:
|
||||
rv = ((field_0x0[0] & 0xff) << 8) | (field_0x0[1] & 0xff) ;
|
||||
break;
|
||||
case 33:
|
||||
rv = field_0x0[4];
|
||||
rv <<= 16;
|
||||
rv |= field_0x0[5];
|
||||
break;
|
||||
case 34:
|
||||
rv = (u8)(field_0x0[4] >> 8);
|
||||
break;
|
||||
case 35:
|
||||
rv = (u8)field_0x0[4];
|
||||
break;
|
||||
case 36:
|
||||
rv = (u8)(field_0x0[5] >> 8);
|
||||
break;
|
||||
case 37:
|
||||
rv = (u8)field_0x0[5];
|
||||
break;
|
||||
case 38:
|
||||
rv = field_0x0[6];
|
||||
rv <<= 16;
|
||||
rv |= field_0x0[7];
|
||||
break;
|
||||
case 39:
|
||||
rv = field_0x0[8];
|
||||
rv <<= 16;
|
||||
rv |= field_0x0[9];
|
||||
break;
|
||||
case 40:
|
||||
rv = field_0x0[10];
|
||||
rv <<= 16;
|
||||
rv |= field_0x0[11];
|
||||
break;
|
||||
case 41:
|
||||
// !@bug I think this should get field_0x0[12] and field_0x0[13]. Looks like a copy paste bug.
|
||||
rv = field_0x0[10];
|
||||
rv <<= 16;
|
||||
rv |= field_0x0[11];
|
||||
break;
|
||||
}
|
||||
return rv;
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
@@ -4,57 +4,59 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JAudio2/JASReport.h"
|
||||
#include "dol2asm.h"
|
||||
#include "JSystem/JAudio2/JASMutex.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/os/OSMutex.h"
|
||||
#include "MSL_C/stdio.h"
|
||||
|
||||
//
|
||||
// Forward References:
|
||||
//
|
||||
|
||||
extern "C" void JASReport__FPCce();
|
||||
extern "C" extern u8 struct_80451230[8];
|
||||
|
||||
//
|
||||
// External References:
|
||||
//
|
||||
|
||||
extern "C" void OSLockMutex();
|
||||
extern "C" void OSUnlockMutex();
|
||||
extern "C" void vsnprintf();
|
||||
|
||||
//
|
||||
// Declarations:
|
||||
//
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80431660-80431678 05E380 0018+00 1/1 0/0 0/0 .bss sMutex */
|
||||
static u8 sMutex[24];
|
||||
static OSMutex sMutex;
|
||||
|
||||
/* 80451220-80451224 000720 0004+00 1/1 0/0 0/0 .sbss sBuffer */
|
||||
static u8 sBuffer[4];
|
||||
static char* sBuffer;
|
||||
|
||||
/* 80451224-80451228 000724 0004+00 1/1 0/0 0/0 .sbss sLineMax */
|
||||
static u8 sLineMax[4];
|
||||
static int sLineMax;
|
||||
|
||||
/* 80451228-8045122C 000728 0004+00 1/1 0/0 0/0 .sbss sLineCount */
|
||||
static u8 sLineCount[4];
|
||||
static int sLineCount;
|
||||
|
||||
/* 8045122C-80451230 00072C 0004+00 1/1 0/0 0/0 .sbss sTop */
|
||||
static u8 sTop[4];
|
||||
static int sTop;
|
||||
|
||||
/* 80290F64-80291060 28B8A4 00FC+00 0/0 5/5 0/0 .text JASReport__FPCce */
|
||||
#pragma push
|
||||
#pragma optimization_level 0
|
||||
#pragma optimizewithasm off
|
||||
asm void JASReport(char const* param_0, ...) {
|
||||
nofralloc
|
||||
#include "asm/JSystem/JAudio2/JASReport/JASReport__FPCce.s"
|
||||
void JASReport(const char * str, ...) {
|
||||
if(sBuffer) {
|
||||
va_list vl;
|
||||
va_start(vl, str);
|
||||
JASMutexLock mutexLock(&sMutex);
|
||||
vsnprintf(sBuffer + (sTop * 64), 64, str, vl);
|
||||
va_end(vl);
|
||||
|
||||
sTop++;
|
||||
if (sTop >= sLineMax)
|
||||
sTop = 0;
|
||||
|
||||
if (sLineCount < sLineMax)
|
||||
sLineCount++;
|
||||
}
|
||||
}
|
||||
#pragma pop
|
||||
|
||||
/* ############################################################################################## */
|
||||
/* 80451230-80451238 -00001 0008+00 0/0 6/6 0/0 .sbss None */
|
||||
/* 80451230 0001+00 data_80451230 None */
|
||||
/* 80451231 0007+00 data_80451231 None */
|
||||
extern u8 struct_80451230[8];
|
||||
u8 struct_80451230[8];
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "JSystem/JAudio2/JASWaveArcLoader.h"
|
||||
#include "JSystem/JAudio2/JASDvdThread.h"
|
||||
#include "JSystem/JAudio2/JASTaskThread.h"
|
||||
#include "JSystem/JAudio2/JASMutex.h"
|
||||
#include "JSystem/JKernel/JKRDvdAramRipper.h"
|
||||
#include "MSL_C/string.h"
|
||||
#include "dolphin/dvd/dvd.h"
|
||||
|
||||
Reference in New Issue
Block a user