MusyX progress

Former-commit-id: 1ba085dc20e7edb45bc52f4949c7efec33d750d3
This commit is contained in:
Phillip Stephens 2023-10-12 19:47:50 -07:00
parent bc5d1ac55f
commit 45681935ec
3 changed files with 181 additions and 28 deletions

View File

@ -187,21 +187,22 @@ cflags_retro = [
"-common on",
]
### MusyX 1.5.3 (debug)
# "mw_version": "1.2.5",
# "cflags": "-proc gecko -fp hard -nodefaults -nosyspath -i include -i libc -g -sym on -D_DEBUG=1 -enum int -DMUSY_VERSION_MAJOR=1 -DMUSY_VERSION_MINOR=5 -DMUSY_VERSION_PATCH=3",
### MusyX 2.0.3 (debug)
# "mw_version": "1.3.2",
# "cflags": "-proc gecko -fp hard -nodefaults -nosyspath -i include -i libc -g -sym on -D_DEBUG=1 -enum int -DMUSY_VERSION_MAJOR=2 -DMUSY_VERSION_MINOR=0 -DMUSY_VERSION_PATCH=3",
cflags_musyx = [
*cflags_base,
"-str reuse,pool,readonly",
"-fp_contract off",
"-DMUSY_VERSION_MAJOR=1",
"-DMUSY_VERSION_MINOR=5",
"-DMUSY_VERSION_PATCH=4",
]
cflags_musyx_debug = [
"-proc gecko",
"-fp hard",
"-nodefaults",
"-nosyspath",
"-i include",
"-i libc",
"-g -sym on -D_DEBUG=1",
"-enum int",
"-D_MATH_INLINE=static",
]
# REL flags
@ -235,6 +236,22 @@ def RetroLib(lib_name, objects):
}
def MusyX(objects, mw_version="GC/1.3.2", debug=False, major=1, minor=5, patch=4):
cflags = cflags_musyx if not debug else cflags_musyx_debug
return {
"lib": "MusyX",
"mw_version": mw_version,
"host": False,
"cflags": [
*cflags,
f"-DMUSY_VERSION_MAJOR={major}",
f"-DMUSY_VERSION_MINOR={minor}",
f"-DMUSY_VERSION_PATCH={patch}",
],
"objects": objects,
}
# Helper function for REL script objects
def Rel(lib_name, objects):
return {
@ -1138,12 +1155,13 @@ config.libs = [
Object(Matching, "Runtime/math_ppc.c"),
],
},
{
"lib": "musyx",
"mw_version": "GC/1.3.2",
"cflags": cflags_musyx,
"host": False,
"objects": [
MusyX(
# debug=True,
# mw_version="GC/1.2.5",
# major=1,
# minor=5,
# patch=3,
objects=[
Object(Matching, "musyx/runtime/seq.c"),
Object(Matching, "musyx/runtime/synth.c"),
Object(Matching, "musyx/runtime/seq_api.c"),
@ -1177,7 +1195,7 @@ config.libs = [
Object(Matching, "musyx/runtime/Chorus/chorus_fx.c"),
Object(Matching, "musyx/runtime/profile.c"),
],
},
),
{
"lib": "txwin",
"mw_version": "GC/1.2.5n",

View File

@ -7,7 +7,7 @@
extern float powf(float, float);
static u32 adsrGetIndex(ADSR_VARS* adsr) {
long i = 193 - ((adsr->currentIndex + 0x8000) >> 16);
s32 i = 193 - ((adsr->currentIndex + 0x8000) >> 16);
return i < 0 ? 0 : i;
}
@ -55,7 +55,7 @@ u32 adsrStartRelease(ADSR_VARS* adsr, u32 rtime) {
}
u32 adsrRelease(ADSR_VARS* adsr) {
switch(adsr->mode) {
switch (adsr->mode) {
case 0:
case 1:
return adsrStartRelease(adsr, adsr->data.dls.rTime);
@ -63,3 +63,20 @@ u32 adsrRelease(ADSR_VARS* adsr) {
return FALSE;
}
u32 adsrHandle(ADSR_VARS* adsr, u16* adsr_start, u16* adsr_delta) {
s32 old_volume; // r29
bool VoiceDone; // r28
s32 vDelta; // r27
}
u32 adsrHandleLowPrecision(ADSR_VARS* adsr, u16* adsr_start, u16* adsr_delta) {
u8 i; // r31
for (i = 0; i < 15; ++i) {
if (adsrHandle(adsr, adsr_start, adsr_delta)) {
return 1;
}
}
return 0;
}

View File

@ -15,40 +15,46 @@ 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)
;
if (i < dataKeymapNum) {
if (cid != dataKeymapTab[i].id) {
if (dataKeymapNum < 256) {
for (j = dataKeymapNum - 1; j >= i; --j) {
for (j = dataKeymapNum - 1; j >= i; --j)
dataKeymapTab[j + 1] = dataKeymapTab[j];
}
++dataKeymapNum;
} else {
hwEnableIrq();
return 0;
}
} else {
dataKeymapTab[i].refCount++;
hwEnableIrq();
return 0;
}
} else if (dataKeymapNum < 256) {
++dataKeymapNum;
} else {
hwEnableIrq();
return 0;
}
++dataKeymapNum;
MUSY_ASSERT_MSG(keymapdata != NULL, "Keymap data pointer is NULL");
dataKeymapTab[i].id = cid;
dataKeymapTab[i].data = keymapdata;
dataKeymapTab[i].refCount = 1;
@ -59,23 +65,126 @@ u32 dataInsertKeymap(u16 cid, void* keymapdata) {
unsigned long dataRemoveKeymap(unsigned short sid) {
long i; // r31
long j; // r30
hwDisableIrq();
for (i = 0; i < dataKeymapNum && dataKeymapTab[i].id != sid; ++i)
;
if (i != dataKeymapNum) {
for (j = i + 1; j < dataKeymapNum; j++, i++) {
dataKeymapTab[i] = dataKeymapTab[j];
}
}
hwEnableIrq();
return 1;
}
unsigned long dataInsertLayer(unsigned short cid, void* layerdata, unsigned short size) {
long i; // r31
long j; // r29
hwDisableIrq();
for (i = 0; i < dataLayerNum && dataLayerTab[i].id < cid; ++i)
;
if (i < dataLayerNum) {
if (cid != dataLayerTab[i].id) {
if (dataLayerNum < 256) {
for (j = dataLayerNum - 1; j >= i; --j)
dataLayerTab[j + 1] = dataLayerTab[j];
++dataLayerNum;
} else {
hwEnableIrq();
return 0;
}
} else {
dataLayerTab[i].refCount++;
hwEnableIrq();
return 0;
}
} else if (dataLayerNum < 256) {
++dataLayerNum;
} else {
hwEnableIrq();
return 0;
}
MUSY_ASSERT_MSG(layerdata != NULL, "Layer data pointer is NULL");
dataLayerTab[i].id = cid;
dataLayerTab[i].data = layerdata;
dataLayerTab[i].num = size;
dataLayerTab[i].refCount = 1;
hwEnableIrq();
return 1;
}
unsigned long dataRemoveLayer(unsigned short sid) {
long i; // r31
long j; // r30
}
unsigned long dataInsertCurve(unsigned short cid, void* curvedata) {
long i; // r31
long j; // r29
hwDisableIrq();
for (i = 0; i < dataCurveNum && dataCurveTab[i].id < cid; ++i)
;
if (i < dataCurveNum) {
if (cid != dataCurveTab[i].id) {
if (dataCurveNum < 2048) {
for (j = dataCurveNum - 1; j >= i; --j)
dataCurveTab[j + 1] = dataCurveTab[j];
++dataCurveNum;
} else {
hwEnableIrq();
return 0;
}
} else {
hwEnableIrq();
dataCurveTab[i].refCount++;
return 0;
}
} else if (dataCurveNum < 2048) {
++dataCurveNum;
} else {
hwEnableIrq();
return 0;
}
MUSY_ASSERT_MSG(curvedata != NULL, "Curve data pointer is NULL");
dataCurveTab[i].id = cid;
dataCurveTab[i].data = curvedata;
dataCurveTab[i].refCount = 1;
hwEnableIrq();
return 1;
}
unsigned long dataRemoveCurve(unsigned short sid) {
long i; // r31
long j; // r30
}
unsigned long dataInsertSDir(struct SDIR_DATA* sdir, void* smp_data) {
long i; // r31
struct SDIR_DATA* s; // r25
@ -83,40 +192,49 @@ unsigned long dataInsertSDir(struct SDIR_DATA* sdir, void* smp_data) {
unsigned short j; // r29
unsigned short k; // r26
}
unsigned long dataRemoveSDir(struct SDIR_DATA* sdir) {
long i; // r28
long j; // r30
long index; // r27
struct SDIR_DATA* data; // r31
}
unsigned long dataAddSampleReference(unsigned short sid) {
unsigned long i; // r29
struct SAMPLE_HEADER* header; // r1+0xC
struct SDIR_DATA* data; // r30
struct SDIR_DATA* sdir; // r31
}
unsigned long dataRemoveSampleReference(unsigned short sid) {
unsigned long i; // r30
struct SDIR_DATA* sdir; // r31
}
unsigned long dataInsertFX(unsigned short gid, struct FX_TAB* fx, unsigned short fxNum) {
long i; // r31
}
unsigned long dataRemoveFX(unsigned short gid) {
long i; // r31
long j; // r30
return 1;
}
unsigned long dataInsertMacro(unsigned short mid, void* macroaddr) {
long main; // r28
long pos; // r29
long base; // r27
long i; // r31
}
unsigned long dataRemoveMacro(unsigned short mid) {
long main; // r29
long base; // r28
long i; // r31
}
long maccmp(void* p1, void* p2) { return ((MAC_SUBTAB*)p1)->id - ((MAC_SUBTAB*)p2)->id; }
struct MSTEP* dataGetMacro(unsigned short mid) {