summaryrefslogtreecommitdiff
path: root/libs/JSystem/src/JAudio2/JASSeqCtrl.cpp
diff options
context:
space:
mode:
authorLuke Street <luke@street.dev>2026-03-01 15:35:36 -0700
committerGitHub <noreply@github.com>2026-03-01 14:35:36 -0800
commit9649319ec4926457ef85e6094f8207474c977c2d (patch)
tree1c5cd4c7cc4c1aee03f28921213da47f2775444d /libs/JSystem/src/JAudio2/JASSeqCtrl.cpp
parent6e149819e13b1f70ecbf8a4c66b030c17ffed2bb (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.cpp145
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;
+ }
+}