diff options
| author | Luke Street <luke@street.dev> | 2026-03-01 15:35:36 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-01 14:35:36 -0800 |
| commit | 9649319ec4926457ef85e6094f8207474c977c2d (patch) | |
| tree | 1c5cd4c7cc4c1aee03f28921213da47f2775444d /libs/JSystem/src/JAudio2/JASSeqCtrl.cpp | |
| parent | 6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (diff) | |
Reorganize library code into `libs/` (#3119)
* Reorganize files into libs/{dolphin,JSystem,PowerPC_EABI_Support,revolution,TRK_MINNOW_DOLPHIN}
* Update configure.py and project.py for new libs structure
* Refactor `#include <dolphin/x.h>` -> `<x.h>`
* Remove `__REVOLUTION_SDK__` forwards from dolphin
* Fix dolphin/ references in revolution
* Wrap `#include <dolphin.h>` in `!__REVOLUTION_SDK__`
* Always build TRK against dolphin headers
* Resolve revolution SDK header resolution issues
Diffstat (limited to 'libs/JSystem/src/JAudio2/JASSeqCtrl.cpp')
| -rw-r--r-- | libs/JSystem/src/JAudio2/JASSeqCtrl.cpp | 145 |
1 files changed, 145 insertions, 0 deletions
diff --git a/libs/JSystem/src/JAudio2/JASSeqCtrl.cpp b/libs/JSystem/src/JAudio2/JASSeqCtrl.cpp new file mode 100644 index 0000000000..044f3873f2 --- /dev/null +++ b/libs/JSystem/src/JAudio2/JASSeqCtrl.cpp @@ -0,0 +1,145 @@ +#include "JSystem/JSystem.h" // IWYU pragma: keep + +#include "JSystem/JAudio2/JASSeqCtrl.h" +#include "JSystem/JAudio2/JASSeqParser.h" +#include "JSystem/JAudio2/JASTrack.h" + +JASSeqParser JASSeqCtrl::sDefaultParser; + +JASSeqCtrl::JASSeqCtrl() { + field_0x3c = &sDefaultParser; + field_0x40 = 0; + field_0x44 = NULL; + field_0x48 = 0; + field_0x4c = 0; + field_0x4e = 0; + field_0x50 = 0; + field_0x51 = 0; + field_0x54 = 0; + field_0x58 = 0; + mReader.init(); +} + +void JASSeqCtrl::init() { + mReader.init(); + field_0x3c = &sDefaultParser; + field_0x40 = 0; + field_0x44 = NULL; + field_0x48 = 0; + field_0x4c = 0; + field_0x4e = 0; + field_0x50 = 0; + field_0x54 = 0; + field_0x58 = 0; + field_0x51 = 0; +} + +void JASSeqCtrl::start(void* param_0, u32 param_1) { + mReader.init(param_0); + mReader.jump(param_1); +} + +int JASSeqCtrl::tickProc(JASTrack* param_0) { + if (!mReader.getBase()) { + return 0; + } + + interrupt(INTRTYPE_VALUE_6); + timerProcess(); + + if (field_0x51) { + if (!param_0->checkNoteStop(0)) { + return 0; + } + + field_0x51 = 0; + } + + if (field_0x40 > 0) { + field_0x40--; + } + + checkIntr(); + + while ((field_0x40 == 0 || field_0x44 != NULL) && field_0x51 == 0) { + if (field_0x3c->parse(param_0) < 0) { + return -1; + } + } + + return 0; +} + +void JASSeqCtrl::interrupt(JASSeqCtrl::IntrType param_0) { + if (field_0x4e & (1 << param_0)) { + field_0x4c |= (1 << param_0); + } +} + +void JASSeqCtrl::setIntrMask(u32 param_0) { + field_0x4e |= param_0; +} + +void JASSeqCtrl::clrIntrMask(u32 param_0) { + field_0x4e &= ~param_0; +} + +int JASSeqCtrl::retIntr() { + if (field_0x44 == NULL) { + return 0; + } + + mReader.jump(field_0x44); + field_0x44 = NULL; + return 1; +} + +int JASSeqCtrl::findIntr() { + u32 uVar1 = field_0x4e; + uVar1 &= field_0x4c; + int i; + for (i = 0; uVar1 != 0; i++) { + if (uVar1 & 1) { + field_0x4c &= ~(1 << i); + return i; + } + uVar1 >>= 1; + } + return -1; +} + +void JASSeqCtrl::checkIntr() { + if (field_0x44) { + return; + } + int intr = findIntr(); + + if (intr < 0) { + return; + } + + u32 vec = field_0x48; + JUT_ASSERT(144, vec != 0); + vec += intr * 3; + vec = get24(vec); + field_0x44 = mReader.getCur(); + mReader.jump(vec); +} + +void JASSeqCtrl::timerProcess() { + if (field_0x54 == 0) return; + + field_0x54--; + if (field_0x54) return; + + interrupt(INTRTYPE_VALUE_5); + + if (field_0x50) { + field_0x50--; + if (field_0x50) { + field_0x54 = field_0x58; + } + } else { + field_0x54 = field_0x58; + } +} |
