diff --git a/config/GAFE01_00/splits.txt b/config/GAFE01_00/splits.txt index 51d0e921..128131bb 100644 --- a/config/GAFE01_00/splits.txt +++ b/config/GAFE01_00/splits.txt @@ -117,7 +117,7 @@ jaudio_NES/game/staff.c: .sbss start:0x802183B8 end:0x802183C8 .sdata2 start:0x80218D98 end:0x80218DA0 -jaudio_NES/rspsim.c: +jaudio_NES/internal/rspsim.c: .text start:0x80016D20 end:0x80017E80 .data start:0x800CFF20 end:0x800D01A8 .bss start:0x8017BE80 end:0x8017CFA0 @@ -183,25 +183,25 @@ jaudio_NES/internal/dvdthread.c: .bss start:0x80186590 end:0x8018F1A8 .sbss start:0x80218498 end:0x802184E8 -jaudio_NES/rate.c: +jaudio_NES/internal/rate.c: .sdata start:0x80217BE8 end:0x80217BF8 .sbss start:0x802184E8 end:0x802184F0 -jaudio_NES/driver.c: +jaudio_NES/internal/driver.c: .text start:0x8001ADA0 end:0x8001DA40 .data start:0x800D0298 end:0x800D02D8 .sdata start:0x80217BF8 end:0x80217C08 .sbss start:0x802184F0 end:0x802184F8 .sdata2 start:0x80218DD0 end:0x80218DF0 -jaudio_NES/memory.c: +jaudio_NES/internal/memory.c: .text start:0x8001DA40 end:0x80020C60 .rodata start:0x800AA570 end:0x800AA5E8 .data start:0x800D02D8 end:0x800D0300 .sbss start:0x802184F8 end:0x80218500 .sdata2 start:0x80218DF0 end:0x80218E38 -jaudio_NES/system.c: +jaudio_NES/internal/system.c: .text start:0x80020C60 end:0x80024AE0 .rodata start:0x800AA5E8 end:0x800AA700 .bss start:0x8018F1A8 end:0x8018F1C0 @@ -217,14 +217,14 @@ jaudio_NES/internal/sub_sys.c: .sbss start:0x80218510 end:0x80218528 .sdata2 start:0x80218E48 end:0x80218E60 -jaudio_NES/audiowork.c: +jaudio_NES/internal/audiowork.c: .bss start:0x8020E808 end:0x80217AB8 align:4 common .sbss start:0x80218528 end:0x80218540 -jaudio_NES/audiotable.c: +jaudio_NES/internal/audiotable.c: .data start:0x800D0390 end:0x800D3668 -jaudio_NES/audioconst.c: +jaudio_NES/internal/audioconst.c: .data start:0x800D3668 end:0x800D36C8 jaudio_NES/internal/os.c: @@ -233,11 +233,11 @@ jaudio_NES/internal/os.c: jaudio_NES/internal/astest.c: .text start:0x80026300 end:0x80026400 -jaudio_NES/channel.c: +jaudio_NES/internal/channel.c: .text start:0x80026400 end:0x800281E0 .sdata2 start:0x80218E60 end:0x80218E98 -jaudio_NES/effect.c: +jaudio_NES/internal/effect.c: .text start:0x800281E0 end:0x80028E60 .data start:0x800D36C8 end:0x800D36F0 .sdata start:0x80217C10 end:0x80217C18 @@ -260,20 +260,20 @@ jaudio_NES/internal/dspproc.c: .text start:0x8002CD20 end:0x8002CFE0 .sdata start:0x80217C18 end:0x80217C20 -jaudio_NES/ipldec.c: +jaudio_NES/internal/ipldec.c: .text start:0x8002CFE0 end:0x8002D240 .bss start:0x80217AB8 end:0x80217AF8 align:4 common .sbss start:0x80218548 end:0x80218550 -jaudio_NES/dsp_cardunlock.c: +jaudio_NES/internal/dsp_cardunlock.c: .text start:0x8002D240 end:0x8002DA60 .rodata start:0x800AA7A0 end:0x800AA7E0 -jaudio_NES/dsp_GBAKey.c: +jaudio_NES/internal/dsp_GBAKey.c: .text start:0x8002DA60 end:0x8002DC00 .rodata start:0x800AA7E0 end:0x800AA838 -jaudio_NES/driverinterface.c: +jaudio_NES/internal/driverinterface.c: .text start:0x8002DC00 end:0x8002F540 .data start:0x800D5500 end:0x800D5598 .bss start:0x8018F1C0 end:0x801A3340 @@ -281,40 +281,40 @@ jaudio_NES/driverinterface.c: .sbss start:0x80218550 end:0x80218560 .sdata2 start:0x80218F10 end:0x80218F28 -jaudio_NES/dspdriver.c: +jaudio_NES/internal/dspdriver.c: .text start:0x8002F540 end:0x8002FDC0 .data start:0x800D5598 end:0x800D55C0 .bss start:0x801A3340 end:0x801A3740 .sbss start:0x80218560 end:0x80218568 .sdata2 start:0x80218F28 end:0x80218F38 -jaudio_NES/dspinterface.c: +jaudio_NES/internal/dspinterface.c: .text start:0x8002FDC0 end:0x800304A0 .data start:0x800D55C0 end:0x800D5A20 .bss start:0x801A3740 end:0x801A97C0 .sdata start:0x80217C28 end:0x80217C38 -jaudio_NES/fxinterface.c: +jaudio_NES/internal/fxinterface.c: .text start:0x800304A0 end:0x800305E0 .data start:0x800D5A20 end:0x800D5A38 -jaudio_NES/tables.c: +jaudio_NES/internal/tables.c: .data start:0x800D5A38 end:0x800D5C38 -jaudio_NES/bankread.c: +jaudio_NES/internal/bankread.c: .text start:0x800305E0 end:0x800309C0 .bss start:0x801A97C0 end:0x801A9BC0 -jaudio_NES/waveread.c: +jaudio_NES/internal/waveread.c: .text start:0x800309C0 end:0x80030EC0 .bss start:0x801A9BC0 end:0x801AA3C0 .bss start:0x80217AF8 end:0x80217B38 align:4 common -jaudio_NES/connect.c: +jaudio_NES/internal/connect.c: .text start:0x80030EC0 end:0x80031560 .bss start:0x801AA3C0 end:0x801AA7C0 -jaudio_NES/bankdrv.c: +jaudio_NES/internal/bankdrv.c: .text start:0x80031560 end:0x80031CE0 .data start:0x800D5C38 end:0x800D5C48 .sdata2 start:0x80218F38 end:0x80218F60 @@ -324,32 +324,32 @@ jaudio_NES/internal/random.c: .sdata start:0x80217C38 end:0x80217C40 .sdata2 start:0x80218F60 end:0x80218F70 -jaudio_NES/aramcall.c: +jaudio_NES/internal/aramcall.c: .text start:0x80031D80 end:0x800320C0 .data start:0x800D5C48 end:0x800D5C88 .bss start:0x80217B38 end:0x80217B64 align:4 common .sdata start:0x80217C40 end:0x80217C48 .sbss start:0x80218568 end:0x80218570 -jaudio_NES/ja_calc.c: +jaudio_NES/internal/ja_calc.c: .text start:0x800320C0 end:0x800322A0 .bss start:0x801AA7C0 end:0x801AABC8 .sdata2 start:0x80218F70 end:0x80218FA0 -jaudio_NES/fat.c: +jaudio_NES/internal/fat.c: .text start:0x800322A0 end:0x80032700 .bss start:0x801AABC8 end:0x801AB7C8 .sbss start:0x80218570 end:0x80218578 -jaudio_NES/cmdstack.c: +jaudio_NES/internal/cmdstack.c: .text start:0x80032700 end:0x800328A0 .sbss start:0x80218578 end:0x80218588 -jaudio_NES/heapctrl.c: +jaudio_NES/internal/heapctrl.c: .text start:0x800328A0 end:0x80032CC0 .sbss start:0x80218588 end:0x80218590 -jaudio_NES/jammain_2.c: +jaudio_NES/internal/jammain_2.c: .text start:0x80032CC0 end:0x80036B40 .rodata start:0x800AA838 end:0x800AA928 .data start:0x800D5C88 end:0x800D5F48 @@ -358,30 +358,30 @@ jaudio_NES/jammain_2.c: .sbss start:0x80218590 end:0x802185A0 .sdata2 start:0x80218FA0 end:0x80218FF8 -jaudio_NES/midplay.c: +jaudio_NES/internal/midplay.c: .data start:0x800D5F48 end:0x800D6348 -jaudio_NES/noteon.c: +jaudio_NES/internal/noteon.c: .text start:0x80036B40 end:0x80037080 .sdata2 start:0x80218FF8 end:0x80219000 -jaudio_NES/seqsetup.c: +jaudio_NES/internal/seqsetup.c: .text start:0x80037080 end:0x80037D80 .bss start:0x801AB8E8 end:0x801EF540 .sbss start:0x802185A0 end:0x802185B0 .sdata2 start:0x80219000 end:0x80219010 -jaudio_NES/centcalc.c: +jaudio_NES/internal/centcalc.c: .text start:0x80037D80 end:0x80037E40 .data start:0x800D6348 end:0x800D6448 .sdata2 start:0x80219010 end:0x80219028 -jaudio_NES/jamosc.c: +jaudio_NES/internal/jamosc.c: .text start:0x80037E40 end:0x80038280 .data start:0x800D6448 end:0x800D6530 .sdata2 start:0x80219028 end:0x80219030 -jaudio_NES/oneshot.c: +jaudio_NES/internal/oneshot.c: .text start:0x80038280 end:0x800399EC .data start:0x800D6530 end:0x800D6570 .sdata start:0x80217C50 end:0x80217C58 diff --git a/configure.py b/configure.py index 381dcfe9..ade15aa8 100644 --- a/configure.py +++ b/configure.py @@ -682,49 +682,16 @@ config.libs = [ Object(NonMatching, "JSystem/JUtility/JUTXfb.cpp"), ], ), - { - "lib": "jaudio_NES", - "mw_version": config.linker_version, - "cflags": [*cflags_static, "-lang=c++", "-O4,s", "-str readonly"], - "progress_category": "library", - "src_dir": "src/static", - "objects": [ - Object(NonMatching, "jaudio_NES/aramcall.c"), - Object(NonMatching, "jaudio_NES/audioconst.c"), - Object(NonMatching, "jaudio_NES/audiotable.c"), - Object(NonMatching, "jaudio_NES/audiowork.c"), - Object(NonMatching, "jaudio_NES/bankdrv.c"), - Object(NonMatching, "jaudio_NES/bankread.c"), - Object(NonMatching, "jaudio_NES/centcalc.c"), - Object(NonMatching, "jaudio_NES/channel.c"), - Object(NonMatching, "jaudio_NES/cmdstack.c"), - Object(NonMatching, "jaudio_NES/connect.c"), - Object(NonMatching, "jaudio_NES/driver.c"), - Object(NonMatching, "jaudio_NES/driverinterface.c"), - Object(NonMatching, "jaudio_NES/dsp_cardunlock.c"), - Object(NonMatching, "jaudio_NES/dsp_GBAKey.c"), - Object(NonMatching, "jaudio_NES/dspdriver.c"), - Object(NonMatching, "jaudio_NES/dspinterface.c"), - Object(NonMatching, "jaudio_NES/effect.c"), - Object(NonMatching, "jaudio_NES/fat.c"), - Object(NonMatching, "jaudio_NES/fxinterface.c"), - Object(NonMatching, "jaudio_NES/heapctrl.c"), - Object(NonMatching, "jaudio_NES/ipldec.c"), - Object(NonMatching, "jaudio_NES/ja_calc.c"), - Object(NonMatching, "jaudio_NES/jammain_2.c"), - Object(NonMatching, "jaudio_NES/jamosc.c"), - Object(NonMatching, "jaudio_NES/memory.c"), - Object(NonMatching, "jaudio_NES/midplay.c"), - Object(NonMatching, "jaudio_NES/noteon.c"), - Object(NonMatching, "jaudio_NES/oneshot.c"), - Object(NonMatching, "jaudio_NES/rate.c"), - Object(NonMatching, "jaudio_NES/rspsim.c"), - Object(NonMatching, "jaudio_NES/seqsetup.c"), - Object(NonMatching, "jaudio_NES/system.c"), - Object(NonMatching, "jaudio_NES/tables.c"), - Object(NonMatching, "jaudio_NES/waveread.c"), - ], - }, + # { + # "lib": "jaudio_NES", + # "mw_version": config.linker_version, + # "cflags": [*cflags_static, "-lang=c++", "-O4,s", "-str readonly"], + # "progress_category": "library", + # "src_dir": "src/static", + # "objects": [ + + # ], + # }, { "lib": "jaudio_NES_game", "mw_version": config.linker_version, @@ -778,6 +745,40 @@ config.libs = [ Object(Matching, "jaudio_NES/internal/streamctrl.c"), Object(Matching, "jaudio_NES/internal/sub_sys.c"), Object(Matching, "jaudio_NES/internal/track.c"), + Object(NonMatching, "jaudio_NES/internal/aramcall.c"), + Object(NonMatching, "jaudio_NES/internal/audioconst.c"), + Object(NonMatching, "jaudio_NES/internal/audiotable.c"), + Object(NonMatching, "jaudio_NES/internal/audiowork.c"), + Object(NonMatching, "jaudio_NES/internal/bankdrv.c"), + Object(NonMatching, "jaudio_NES/internal/bankread.c"), + Object(NonMatching, "jaudio_NES/internal/centcalc.c"), + Object(NonMatching, "jaudio_NES/internal/channel.c"), + Object(NonMatching, "jaudio_NES/internal/cmdstack.c"), + Object(NonMatching, "jaudio_NES/internal/connect.c"), + Object(NonMatching, "jaudio_NES/internal/driver.c"), + Object(NonMatching, "jaudio_NES/internal/driverinterface.c"), + Object(NonMatching, "jaudio_NES/internal/dsp_cardunlock.c"), + Object(NonMatching, "jaudio_NES/internal/dsp_GBAKey.c"), + Object(NonMatching, "jaudio_NES/internal/dspdriver.c"), + Object(NonMatching, "jaudio_NES/internal/dspinterface.c"), + Object(NonMatching, "jaudio_NES/internal/effect.c"), + Object(NonMatching, "jaudio_NES/internal/fat.c"), + Object(NonMatching, "jaudio_NES/internal/fxinterface.c"), + Object(NonMatching, "jaudio_NES/internal/heapctrl.c"), + Object(NonMatching, "jaudio_NES/internal/ipldec.c"), + Object(NonMatching, "jaudio_NES/internal/ja_calc.c"), + Object(NonMatching, "jaudio_NES/internal/jammain_2.c"), + Object(NonMatching, "jaudio_NES/internal/jamosc.c"), + Object(NonMatching, "jaudio_NES/internal/memory.c"), + Object(NonMatching, "jaudio_NES/internal/midplay.c"), + Object(NonMatching, "jaudio_NES/internal/noteon.c"), + Object(NonMatching, "jaudio_NES/internal/oneshot.c"), + Object(NonMatching, "jaudio_NES/internal/rate.c"), + Object(NonMatching, "jaudio_NES/internal/rspsim.c"), + Object(NonMatching, "jaudio_NES/internal/seqsetup.c"), + Object(NonMatching, "jaudio_NES/internal/system.c"), + Object(NonMatching, "jaudio_NES/internal/tables.c"), + Object(NonMatching, "jaudio_NES/internal/waveread.c"), ], }, { diff --git a/include/dolphin/types.h b/include/dolphin/types.h index 55c3313d..2278ef53 100644 --- a/include/dolphin/types.h +++ b/include/dolphin/types.h @@ -35,7 +35,11 @@ typedef int BOOL; #define INT_MAX 2147483647 #ifndef NULL +#ifndef __cplusplus #define NULL ((void*)0) +#else +#define NULL 0 +#endif #endif #include "libc/stdio.h" diff --git a/include/jaudio_NES/audiostruct.h b/include/jaudio_NES/audiostruct.h index feb2e5da..fddfedb9 100644 --- a/include/jaudio_NES/audiostruct.h +++ b/include/jaudio_NES/audiostruct.h @@ -931,6 +931,23 @@ typedef struct PLAYER_CALL_ { u32 DSP_mode; } PLAYER_CALL; +typedef struct Bank_ { + u32 magic; // 'BANK' + u8* part0[128]; + u8* part1[100]; + u8* part2[12]; + // more? +} Bank; + +typedef struct InstBank_ { + u32 magic; // 'IBNK' + u32 _04; + u32 vid; + u8 pad[32 - 3 * sizeof(u32)]; + Bank bank; + // more +} InstBank; + #ifdef __cplusplus } #endif diff --git a/include/jaudio_NES/bankread.h b/include/jaudio_NES/bankread.h new file mode 100644 index 00000000..b052e1a0 --- /dev/null +++ b/include/jaudio_NES/bankread.h @@ -0,0 +1,19 @@ +#ifndef BANKREAD_H +#define BANKREAD_H + +#include "types.h" +#include "audiostruct.h" + +#ifdef __cplusplus +extern "C" { +#endif + +BOOL Bank_Regist(void* bank, u32 pid); +void Bank_Init(void); +Bank* Bank_Get(u32 pid); + +#ifdef __cplusplus +} +#endif + +#endif /* BANKREAD_H */ diff --git a/include/jaudio_NES/connect.h b/include/jaudio_NES/connect.h index f21dab95..3113b4ad 100644 --- a/include/jaudio_NES/connect.h +++ b/include/jaudio_NES/connect.h @@ -4,5 +4,6 @@ #include "types.h" void Jac_ConnectTableInit(void); +void Jac_BnkConnectTableSet(u32 vid, u32 pid); -#endif \ No newline at end of file +#endif diff --git a/src/static/jaudio_NES/internal/bankread.c b/src/static/jaudio_NES/internal/bankread.c new file mode 100644 index 00000000..939592ab --- /dev/null +++ b/src/static/jaudio_NES/internal/bankread.c @@ -0,0 +1,138 @@ +#include "jaudio_NES/audiostruct.h" + +#include "jaudio_NES/connect.h" + +static void PTconvert(void** s, u32 ramaddr) { + u32 ofs = (u32)*s; + + if (ofs >= ramaddr || ofs == 0) { + return; + } + + *s = (void*)(ofs + ramaddr); +} + +// @nonmatching - regswaps (need to make structs for these) +static Bank* Bank_Test(u8* data) { + InstBank* ibnk = (InstBank*)data; + u32 ramaddr = (u32)data; + Bank* bank = &ibnk->bank; + u32 i; + u32 j; + void** unk_pp; + u32 k; + void* unk; + void** inst_p; + void* inst; + + if (bank->magic != 'BANK') { + return NULL; + } + + for (i = 0; i < ARRAY_COUNT(bank->part0); i++) { + inst_p = (void**)&bank->part0[i]; + PTconvert(inst_p, ramaddr); + + inst = *inst_p; + if (inst != NULL) { + for (j = 0; j < 2; j++) { + unk_pp = (void**)((u32)inst + j * 4 + 0x10); + PTconvert((void**)(unk_pp), ramaddr); + PTconvert((void**)((u32)inst + j * 4 + 0x18), ramaddr); + PTconvert((void**)((u32)inst + j * 4 + 0x20), ramaddr); + + if (*unk_pp != NULL) { + PTconvert((void**)((u32)*unk_pp + 0x08), ramaddr); + PTconvert((void**)((u32)*unk_pp + 0x0C), ramaddr); + } + } + + for (j = 0; j < *((u32*)inst + 0x28); j++) { + unk_pp = (void**)((u32)inst + j * 4 + 0x2C); + + PTconvert(unk_pp, ramaddr); + for (k = 0; k < *(u32*)((u32)*unk_pp + 4); k++) { + PTconvert((void**)((u32)*unk_pp + k * 4 + 8), ramaddr); + } + } + } + } + + for (i = 0; i < ARRAY_COUNT(bank->part1); i++) { + inst_p = (void**)&bank->part1[i]; + + PTconvert(inst_p, ramaddr); + inst = *inst_p; + + if (inst != NULL) { + for (j = 0; j < *((u32*)inst + 0x08); j++) { + void** unk = (void**)((u32)inst + j * 4 + 0x0C); + + PTconvert(unk, ramaddr); + } + } + } + + for (i = 0; i < ARRAY_COUNT(bank->part2); i++) { + inst_p = (void**)&bank->part2[i]; + inst; + + PTconvert(inst_p, ramaddr); + + inst = *inst_p; + if (inst != NULL) { + for (j = 0; j < 128; j++) { + unk_pp = (void**)((u32)inst + j * 4 + 0x88); + + PTconvert(unk_pp, ramaddr); + + unk = *unk_pp; + if (unk != NULL) { + PTconvert((void**)((u32)unk + 0x08), ramaddr); + PTconvert((void**)((u32)unk + 0x0C), ramaddr); + + for (k = 0; k < *(u32*)((u32)unk + 0x10); k++) { + PTconvert((void**)((u32)unk + k * 4 + 0x14), ramaddr); + } + } + } + } + } + + return bank; +} + +static Bank* bankp[256]; + +static BOOL __Bank_Regist_Inner(u8* bank, u32 pid, u32 vid) { + Jac_BnkConnectTableSet(vid, pid); + bankp[pid] = Bank_Test(bank); + + if (bankp[pid] != NULL) { + return TRUE; + } + + return FALSE; +} + +BOOL Bank_Regist(void* bank, u32 pid) { + InstBank* ibnk = (InstBank*)bank; + + return __Bank_Regist_Inner((u8*)bank, pid, ibnk->vid); +} + +void Bank_Init(void) { + int i; + + for (i = 0; i < ARRAY_COUNT(bankp); i++) { + bankp[i] = NULL; + } +} + +Bank* Bank_Get(u32 pid) { + if (pid >= ARRAY_COUNT(bankp)) { + return NULL; + } + + return bankp[pid]; +}