Fix local functions in snd3d.s, add missing functions in snd_init.c, nearly match dataInsertKeymap

This commit is contained in:
Phillip Stephens 2023-09-26 13:49:16 -07:00
parent b221c7ed89
commit 919e53661f
3 changed files with 121 additions and 28 deletions

View File

@ -1734,7 +1734,7 @@ lbl_803AFE48:
/* 803AFE54 003ACDB4 38 21 00 10 */ addi r1, r1, 0x10
/* 803AFE58 003ACDB8 4E 80 00 20 */ blr
AddStartingEmitter:
.fn AddStartingEmitter, local
/* 803AFE5C 003ACDBC 88 CD AF 62 */ lbz r6, startGroupNum@sda21(r13)
/* 803AFE60 003ACDC0 3C 80 80 56 */ lis r4, startGroup@ha
/* 803AFE64 003ACDC4 38 A4 F9 90 */ addi r5, r4, startGroup@l
@ -1828,8 +1828,9 @@ lbl_803AFF6C:
/* 803AFF9C 003ACEFC D0 84 00 10 */ stfs f4, 0x10(r4)
/* 803AFFA0 003ACF00 D0 24 00 04 */ stfs f1, 4(r4)
/* 803AFFA4 003ACF04 4E 80 00 20 */ blr
.endfn AddStartingEmitter
StartContinousEmitters:
.fn StartContinousEmitters, local
/* 803AFFA8 003ACF08 94 21 FF 80 */ stwu r1, -0x80(r1)
/* 803AFFAC 003ACF0C 7C 08 02 A6 */ mflr r0
/* 803AFFB0 003ACF10 90 01 00 84 */ stw r0, 0x84(r1)
@ -2094,6 +2095,7 @@ lbl_803B031C:
/* 803B034C 003AD2AC 7C 08 03 A6 */ mtlr r0
/* 803B0350 003AD2B0 38 21 00 80 */ addi r1, r1, 0x80
/* 803B0354 003AD2B4 4E 80 00 20 */ blr
.endfn StartContinousEmitters
.global s3dHandle
s3dHandle:

View File

@ -1,25 +1,77 @@
/*
*/
#include "musyx/musyx_priv.h"
//#define _DEBUG
// #define _DEBUG
/*
s32 DoInit(u32 rate, u32 aramSize, u8 voices, u32 flags) {
*/
static s32 DoInit(u32 rate, u32 aramSize, u32 voices, u32 flags) {
bool ret;
MUSY_DEBUG("\nMusyX software initialization...\nBuild Date: %s %s\n\n", __DATE__, __TIME__);
ret = FALSE;
dataInitStack();
dataInit(0, aramSize);
seqInit();
synthIdleWaitActive = 0;
synthInit(rate, voices);
streamInit();
vsInit();
s3dInit(flags);
sndActive = 1;
return FALSE;
MUSY_DEBUG("MusyX logic is initialized.\n\n");
return ret;
}
s32 sndInit(u8 voices, u8 music, u8 sfx, u8 studios, u32 flags, u32 aramSize) {
u32 rate;
s32 ret;
/*
*/
s32 sndInit(u8 voices, u8 music, u8 sfx, u8 studios, u32 flags, u32 aramSize) {
s32 ret; // r31
u32 frq; // r1+0x14
MUSY_DEBUG("Entering sndInit()\n\n");
sndActive = 0;
if (voices <= 64) {
synthInfo.voiceNum = voices;
@ -31,27 +83,65 @@ s32 sndInit(u8 voices, u8 music, u8 sfx, u8 studios, u32 flags, u32 aramSize) {
} else {
synthInfo.studioNum = 8;
}
rate = 32000;
synthInfo.maxMusic = music;
synthInfo.maxSFX = sfx;
ret = hwInit(&rate, synthInfo.voiceNum, synthInfo.studioNum, flags);
if (ret == 0) {
frq = 32000;
if ((ret = hwInit(&frq, synthInfo.voiceNum, synthInfo.studioNum, flags)) == 0) {
ret = DoInit(32000, aramSize, synthInfo.voiceNum, flags);
}
MUSY_DEBUG("Leaving sndInit().\n\n");
return ret;
}
/* */
void sndQuit() {
MUSY_ASSERT_MSG(sndActive, "Sound system is not initialized.");
hwExit();
/*
*/
dataExit();
/*
*/
s3dExit();
/* */
synthExit();
/* */
sndActive = 0;
}
/*
*/
void sndSetMaxVoices(u8 music, u8 sfx) {
MUSY_ASSERT_MSG(music > synthInfo.voiceNum, "Music voices are above maximum voice number.");
MUSY_ASSERT_MSG(sfx > synthInfo.voiceNum, "Sfx voices are above maximum voice number.");
MUSY_ASSERT_MSG(music <= synthInfo.voiceNum, "Music voices are above maximum voice number.");
MUSY_ASSERT_MSG(sfx <= synthInfo.voiceNum, "Sfx voices are above maximum voice number.");
synthInfo.maxMusic = music;
synthInfo.maxSFX = sfx;
}
/*
*/
bool sndIsInstalled() { return sndActive; }
/*
*/
SND_PLAYBACKINFO* sndGetPlayBackInfo() {
if (sndActive) {
return &synthInfo.pbInfo;
}
return NULL;
}

View File

@ -15,32 +15,33 @@ static MAC_SUBTAB dataMacSubTabmem[2048];
static u16 dataFXGroupNum = 0;
static FX_GROUP dataFXGroups[128];
// #line 94
u32 dataInsertKeymap(u16 cid, void* keymapdata) {
long i; // r31
long j; // r29
hwDisableIrq();
for (i = 0; i < dataKeymapNum && dataKeymapTab[i].id < cid; ++i);
for (i = 0; i < dataKeymapNum && dataKeymapTab[i].id < cid; ++i)
;
if (i < dataKeymapNum) {
if (cid == dataKeymapTab[i].id) {
if (cid != dataKeymapTab[i].id) {
if (dataKeymapNum < 256) {
for (j = dataKeymapNum - 1; j >= i; --j) {
dataKeymapTab[j + 1] = dataKeymapTab[j];
}
++dataKeymapNum;
} else {
hwEnableIrq();
return 0;
}
} else {
dataKeymapTab[i].refCount++;
hwEnableIrq();
return 0;
}
if (256 < dataKeymapNum) {
hwEnableIrq();
return 0;
}
j = dataKeymapNum;
for (j = dataKeymapNum; i <= j; --j) {
dataKeymapTab[j].id = dataKeymapTab[j - 1].id;
dataKeymapTab[j].refCount = dataKeymapTab[j - 1].refCount;
dataKeymapTab[j].data = dataKeymapTab[j - 1].data;
}
} else if (256 < dataKeymapNum) {
} else if (dataKeymapNum < 256) {
hwEnableIrq();
return 0;
}