From 5b18e660004e46ccc0bf2bdae368c5acbb3a8d98 Mon Sep 17 00:00:00 2001 From: Jcw87 Date: Sat, 6 Jan 2024 17:28:23 -0800 Subject: [PATCH] JAIFx --- include/JSystem/JAudio/JAIFx.h | 42 ++++++++++++++++++++ src/JSystem/JAudio/JAIFx.cpp | 71 +++++++++++++++++++++++++--------- 2 files changed, 94 insertions(+), 19 deletions(-) create mode 100644 include/JSystem/JAudio/JAIFx.h diff --git a/include/JSystem/JAudio/JAIFx.h b/include/JSystem/JAudio/JAIFx.h new file mode 100644 index 000000000..3b7244125 --- /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 7a58820db..c7efa1a7e 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; }