From 673437da25cef30ad082a0fcbc9a9e127587bbf6 Mon Sep 17 00:00:00 2001 From: sozud <122322823+sozud@users.noreply.github.com> Date: Sat, 24 Feb 2024 17:04:20 -0800 Subject: [PATCH] match sr_gaks --- src/spu/sr_gaks.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/spu/sr_gaks.c diff --git a/src/spu/sr_gaks.c b/src/spu/sr_gaks.c new file mode 100644 index 0000000..49c8814 --- /dev/null +++ b/src/spu/sr_gaks.c @@ -0,0 +1,68 @@ +#include "libspu_i.h" + +extern s32 _spu_keystat; +#define NUM_SPU_CHANNELS 24 + +long SpuRGetAllKeysStatus(long min, long max, char* status) { + s32 last_voice; + s32 var_a1; + s32 voice; + s32 var_v0; + s8* var_a2; + u16 volume; + if (min < 0) { + min = 0; + } + if (min < NUM_SPU_CHANNELS) { + if (max >= NUM_SPU_CHANNELS) { + max = NUM_SPU_CHANNELS - 1; + } + } else { + return -3; + } + if ((max < 0) || (max < min)) { + return -3; + } + voice = min; + last_voice = max + 1; + + for (voice = min; voice < last_voice; voice++) { + volume = _spu_RXX->raw[(8 * voice) + 6]; + if ((1 << voice) & _spu_keystat) { + if (volume != 0) { + status[voice] = 1; + } else { + status[voice] = 3; + } + } else if (volume != 0) { + status[voice] = 2; + } else { + status[voice] = 0; + } + } + + return 0; +} + +void SpuGetAllKeysStatus(char* status) { + s32 voice; + u16* new_var; + u16 volumex; + s32 max; + max = NUM_SPU_CHANNELS; + for (voice = 0; voice < max; voice++) { + new_var = &_spu_RXX->rxx.voice[voice].volumex; + volumex = *new_var; + if ((1 << voice) & _spu_keystat) { + if (volumex != 0) { + status[voice] = 1; + } else { + status[voice] = 3; + } + } else if (volumex != 0) { + status[voice] = 2; + } else { + status[voice] = 0; + } + } +}