jaudio_NES/bankread

This commit is contained in:
Cuyler36
2025-04-09 11:36:39 -04:00
parent fcf1dbd02d
commit d271a4d9e0
7 changed files with 258 additions and 78 deletions
+34 -34
View File
@@ -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
+44 -43
View File
@@ -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"),
],
},
{
+4
View File
@@ -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"
+17
View File
@@ -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
+19
View File
@@ -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 */
+2 -1
View File
@@ -4,5 +4,6 @@
#include "types.h"
void Jac_ConnectTableInit(void);
void Jac_BnkConnectTableSet(u32 vid, u32 pid);
#endif
#endif
+138
View File
@@ -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];
}