summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJcw87 <Jcw87@users.noreply.github.com>2024-01-06 17:28:23 -0800
committerJcw87 <Jcw87@users.noreply.github.com>2024-01-07 00:29:56 -0800
commit5b18e660004e46ccc0bf2bdae368c5acbb3a8d98 (patch)
tree1d4d027023374e6afa8805f6a083819ea1909938
parent8373a486b613261126175696ec4d894a4dc32f91 (diff)
JAIFx
-rw-r--r--include/JSystem/JAudio/JAIFx.h42
-rw-r--r--src/JSystem/JAudio/JAIFx.cpp71
2 files changed, 94 insertions, 19 deletions
diff --git a/include/JSystem/JAudio/JAIFx.h b/include/JSystem/JAudio/JAIFx.h
new file mode 100644
index 00000000..3b724412
--- /dev/null
+++ b/include/JSystem/JAudio/JAIFx.h
@@ -0,0 +1,42 @@
+#ifndef JAIFX_H
+#define JAIFX_H
+
+#include "dolphin/types.h"
+
+namespace JASystem {
+ namespace DSPInterface {
+ struct FxlineConfig_;
+ }
+}
+
+namespace JAInter {
+ namespace Fx {
+ struct initOnCodeFxScene_s {
+ u32 field_0x0;
+ u32 field_0x4;
+ u32 field_0x8;
+ u32 field_0xc;
+ u32 field_0x10;
+ u32 field_0x14[1];
+ };
+
+ void init();
+ void setSceneMax(u8 param_1);
+ void setBufferMax(u32 param_1, u32 param_2, u32 param_3, u32 param_4);
+ void setTablePointer(void** param_1);
+ void setBufferPointer(u8 param_1, short* param_2);
+ void setScenePointer(u8 param_1, void* param_2);
+ u8 getSceneMax();
+ u32 getBufferSizeMax(u8 param_1);
+ s16* getBufferPointer(u8 param_1);
+ JASystem::DSPInterface::FxlineConfig_** getFxconfigTable();
+
+ extern initOnCodeFxScene_s* initOnCodeFxScene;
+ extern u8 mSceneMax;
+ extern u32* mBufferSizeMax;
+ extern s16** mBufferPointer;
+ extern void** mFxconfigTable;
+ }
+}
+
+#endif /* JAIFX_H */
diff --git a/src/JSystem/JAudio/JAIFx.cpp b/src/JSystem/JAudio/JAIFx.cpp
index 7a58820d..c7efa1a7 100644
--- a/src/JSystem/JAudio/JAIFx.cpp
+++ b/src/JSystem/JAudio/JAIFx.cpp
@@ -4,54 +4,87 @@
//
#include "JSystem/JAudio/JAIFx.h"
-#include "dolphin/types.h"
+#include "JSystem/JAudio/JAIBasic.h"
+#include "JSystem/JAudio/JASDSPInterface.h"
+#include "JSystem/JKernel/JKRSolidHeap.h"
+
+JAInter::Fx::initOnCodeFxScene_s* JAInter::Fx::initOnCodeFxScene;
+u8 JAInter::Fx::mSceneMax;
+u32* JAInter::Fx::mBufferSizeMax;
+s16** JAInter::Fx::mBufferPointer;
+void** JAInter::Fx::mFxconfigTable;
/* 80291CCC-80292068 .text init__Q27JAInter2FxFv */
void JAInter::Fx::init() {
/* Nonmatching */
+ if (initOnCodeFxScene) {
+ mBufferSizeMax = new (JAIBasic::getCurrentJAIHeap(), 4) u32[4];
+ mBufferPointer = new (JAIBasic::getCurrentJAIHeap(), 4) s16*[4];
+ initOnCodeFxScene_s* r31 = initOnCodeFxScene;
+ setSceneMax(r31->field_0x0);
+ setBufferMax(r31->field_0x4, r31->field_0x8, r31->field_0xc, r31->field_0x10);
+ void** _heap = new (JAIBasic::getCurrentJAIHeap(), 0x20) void*[getSceneMax()];
+ JUT_ASSERT_MSG(46, _heap, "JAIFx::initHeap Cannot Alloc Heap!!\n");
+ setTablePointer(_heap);
+ for (u8 i = 0; i < getSceneMax(); i++) {
+ setScenePointer(i, (u8*)initOnCodeFxScene + r31->field_0x14[i]);
+ }
+ for (u8 i = 0; i < 4; i++) {
+ if (getBufferSizeMax(i)) {
+ s16* _buf = new (JAIBasic::getCurrentJAIHeap(), 0x20) s16[ALIGN_PREV(getBufferSizeMax(i) * 160, 2) / 2];
+ JUT_ASSERT_MSG(57, _buf, "JAIFx::initHeap Cannot Alloc Heap!!\n");
+ setBufferPointer(i, _buf);
+ JASystem::DSPInterface::FxlineConfig_* config = &getFxconfigTable()[0][i];
+ JASystem::DSPInterface::getFXHandle(i)->setFXLine(getBufferPointer(i), config);
+ }
+ }
+ }
}
/* 80292068-80292070 .text setSceneMax__Q27JAInter2FxFUc */
-void JAInter::Fx::setSceneMax(unsigned char) {
- /* Nonmatching */
+void JAInter::Fx::setSceneMax(u8 param_1) {
+ mSceneMax = param_1;
}
/* 80292070-80292094 .text setBufferMax__Q27JAInter2FxFUlUlUlUl */
-void JAInter::Fx::setBufferMax(unsigned long, unsigned long, unsigned long, unsigned long) {
- /* Nonmatching */
+void JAInter::Fx::setBufferMax(u32 param_1, u32 param_2, u32 param_3, u32 param_4) {
+ mBufferSizeMax[0] = param_1;
+ mBufferSizeMax[1] = param_2;
+ mBufferSizeMax[2] = param_3;
+ mBufferSizeMax[3] = param_4;
}
/* 80292094-8029209C .text setTablePointer__Q27JAInter2FxFPPv */
-void JAInter::Fx::setTablePointer(void**) {
- /* Nonmatching */
+void JAInter::Fx::setTablePointer(void** param_1) {
+ mFxconfigTable = param_1;
}
/* 8029209C-802920AC .text setBufferPointer__Q27JAInter2FxFUcPs */
-void JAInter::Fx::setBufferPointer(unsigned char, short*) {
- /* Nonmatching */
+void JAInter::Fx::setBufferPointer(u8 param_1, s16* param_2) {
+ mBufferPointer[param_1] = param_2;
}
/* 802920AC-802920BC .text setScenePointer__Q27JAInter2FxFUcPv */
-void JAInter::Fx::setScenePointer(unsigned char, void*) {
- /* Nonmatching */
+void JAInter::Fx::setScenePointer(u8 param_1, void* param_2) {
+ mFxconfigTable[param_1] = param_2;
}
/* 802920BC-802920C4 .text getSceneMax__Q27JAInter2FxFv */
-void JAInter::Fx::getSceneMax() {
- /* Nonmatching */
+u8 JAInter::Fx::getSceneMax() {
+ return mSceneMax;
}
/* 802920C4-802920D4 .text getBufferSizeMax__Q27JAInter2FxFUc */
-void JAInter::Fx::getBufferSizeMax(unsigned char) {
- /* Nonmatching */
+u32 JAInter::Fx::getBufferSizeMax(u8 param_1) {
+ return mBufferSizeMax[param_1];
}
/* 802920D4-802920E4 .text getBufferPointer__Q27JAInter2FxFUc */
-void JAInter::Fx::getBufferPointer(unsigned char) {
- /* Nonmatching */
+s16* JAInter::Fx::getBufferPointer(u8 param_1) {
+ return mBufferPointer[param_1];
}
/* 802920E4-802920EC .text getFxconfigTable__Q27JAInter2FxFv */
-void JAInter::Fx::getFxconfigTable() {
- /* Nonmatching */
+JASystem::DSPInterface::FxlineConfig_** JAInter::Fx::getFxconfigTable() {
+ return (JASystem::DSPInterface::FxlineConfig_**)mFxconfigTable;
}