diff --git a/Makefile b/Makefile index da29797c4..eb6921eee 100644 --- a/Makefile +++ b/Makefile @@ -114,6 +114,7 @@ G_C_FILES := \ src/lib/lib_39c80.c \ src/lib/lib_3a100.c \ src/lib/lib_3e3e0.c \ + src/lib/lib_43dd0.c \ src/lib/lib_446d0.c \ src/lib/lib_45ed0.c \ src/lib/lib_47d20.c \ diff --git a/src/include/bss.h b/src/include/bss.h index 02071964a..112ac39ae 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -46,7 +46,7 @@ extern N_ALSndPlayer var8009c2d0; extern struct var8009c340 var8009c340; extern u8 var8009c344[2]; extern u32 var8009c3e0; -extern u8 *var8009c3f4; +extern struct asistream *g_AsiStream; extern u8 *var8009c640; extern u8 *var8009c644; extern u8 var8009c650[]; diff --git a/src/include/lib/lib_43dd0.h b/src/include/lib/lib_43dd0.h index e3ba71c0f..4391beaad 100644 --- a/src/include/lib/lib_43dd0.h +++ b/src/include/lib/lib_43dd0.h @@ -5,9 +5,9 @@ #include "types.h" u32 func00043dd0(void); -u32 func00043ef8(void); +void func00043ef8(struct asistream *stream, s32 arg1); u32 func00044404(void); -s32 func00044460(s32 arg0, void *arg1, s32 arg2); +struct asistream *func00044460(s32 arg0, void *arg1, s32 arg2); s32 func0004453c(s32 arg0, s32 *arg1, s32 *arg2); #endif diff --git a/src/include/types.h b/src/include/types.h index 2473e3f31..d56258797 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -7361,4 +7361,25 @@ struct sndstate { #endif }; +struct asistream { + s32 unk00; + void *unk04; + s32 unk08; + s32 unk0c; + s32 unk10; + s32 unk14; + s32 unk18; + u8 unk1c[0x2000]; + s32 unk201c; + s32 unk2020; + u8 unk2024[0x1b7c]; + s32 unk3ba0; + u8 unk3ba4[0x2ec0]; + u8 unk6a64[0x900]; + u8 unk7364[0x1110]; + u32 unk8474; + u32 unk8478; + u32 unk847c; +}; + #endif diff --git a/src/lib/lib_3f8a0.c b/src/lib/lib_3f8a0.c index e846721ce..d7bab4937 100644 --- a/src/lib/lib_3f8a0.c +++ b/src/lib/lib_3f8a0.c @@ -15,6 +15,9 @@ u8 var8009c400[0x90]; u8 var8009c490[0x120]; u8 var8009c5b0[0x90]; +u8 *var8009c640; +u8 *var8009c644; +u32 var8009c648; u32 var8005f670 = 0x00000000; u32 var8005f674 = (u32) &var70054b40; diff --git a/src/lib/lib_43dd0.c b/src/lib/lib_43dd0.c index f7dcc6925..c878f29db 100644 --- a/src/lib/lib_43dd0.c +++ b/src/lib/lib_43dd0.c @@ -3,14 +3,9 @@ #include "bss.h" #include "lib/lib_43dd0.h" #include "lib/lib_461c0.h" -#include "lib/libc/ll.h" #include "data.h" #include "types.h" -u8 *var8009c640; -u8 *var8009c644; -u32 var8009c648; -u32 var8009c64c; u8 var8009c650[0x88]; u8 *var8009c6d8; u8 *var8009c6dc; @@ -475,66 +470,34 @@ glabel func00044404 /* 4445c: 00000000 */ nop ); -GLOBAL_ASM( -glabel func00044460 -/* 44460: 27bdffe0 */ addiu $sp,$sp,-32 -/* 44464: afbf0014 */ sw $ra,0x14($sp) -/* 44468: afa40020 */ sw $a0,0x20($sp) -/* 4446c: afa50024 */ sw $a1,0x24($sp) -/* 44470: afa60028 */ sw $a2,0x28($sp) -/* 44474: 3c0e800a */ lui $t6,%hi(g_Mp3Vars+0x64) -/* 44478: 8dcec3f4 */ lw $t6,%lo(g_Mp3Vars+0x64)($t6) -/* 4447c: afae001c */ sw $t6,0x1c($sp) -/* 44480: 8faf001c */ lw $t7,0x1c($sp) -/* 44484: 15e00003 */ bnez $t7,.L00044494 -/* 44488: 00000000 */ nop -/* 4448c: 10000027 */ b .L0004452c -/* 44490: 00001025 */ or $v0,$zero,$zero -.L00044494: -/* 44494: 8fb9001c */ lw $t9,0x1c($sp) -/* 44498: 2418ffff */ addiu $t8,$zero,-1 -/* 4449c: af38000c */ sw $t8,0xc($t9) -/* 444a0: 8fa9001c */ lw $t1,0x1c($sp) -/* 444a4: 2408ffff */ addiu $t0,$zero,-1 -/* 444a8: ad280010 */ sw $t0,0x10($t1) -/* 444ac: 8fab001c */ lw $t3,0x1c($sp) -/* 444b0: 240affff */ addiu $t2,$zero,-1 -/* 444b4: ad6a0014 */ sw $t2,0x14($t3) -/* 444b8: 8fac0020 */ lw $t4,0x20($sp) -/* 444bc: 8fad001c */ lw $t5,0x1c($sp) -/* 444c0: adac0000 */ sw $t4,0x0($t5) -/* 444c4: 8fae0024 */ lw $t6,0x24($sp) -/* 444c8: 8faf001c */ lw $t7,0x1c($sp) -/* 444cc: adee0004 */ sw $t6,0x4($t7) -/* 444d0: 8fb80028 */ lw $t8,0x28($sp) -/* 444d4: 8fb9001c */ lw $t9,0x1c($sp) -/* 444d8: af380008 */ sw $t8,0x8($t9) -/* 444dc: 8fa8001c */ lw $t0,0x1c($sp) -/* 444e0: ad00201c */ sw $zero,0x201c($t0) -/* 444e4: 8fa9001c */ lw $t1,0x1c($sp) -/* 444e8: ad202020 */ sw $zero,0x2020($t1) -/* 444ec: 8faa001c */ lw $t2,0x1c($sp) -/* 444f0: ad403ba0 */ sw $zero,0x3ba0($t2) -/* 444f4: 8fa4001c */ lw $a0,0x1c($sp) -/* 444f8: 0c010fbe */ jal func00043ef8 -/* 444fc: 00002825 */ or $a1,$zero,$zero -/* 44500: 8fab001c */ lw $t3,0x1c($sp) -/* 44504: 25617fff */ addiu $at,$t3,0x7fff -/* 44508: ac200475 */ sw $zero,0x475($at) -/* 4450c: 8fa4001c */ lw $a0,0x1c($sp) -/* 44510: 24050900 */ addiu $a1,$zero,0x900 -/* 44514: 0c012c30 */ jal bzero -/* 44518: 24846a64 */ addiu $a0,$a0,0x6a64 -/* 4451c: 10000003 */ b .L0004452c -/* 44520: 8fa2001c */ lw $v0,0x1c($sp) -/* 44524: 10000001 */ b .L0004452c -/* 44528: 00000000 */ nop -.L0004452c: -/* 4452c: 8fbf0014 */ lw $ra,0x14($sp) -/* 44530: 27bd0020 */ addiu $sp,$sp,0x20 -/* 44534: 03e00008 */ jr $ra -/* 44538: 00000000 */ nop -); +struct asistream *func00044460(s32 arg0, void *arg1, s32 arg2) +{ + struct asistream *stream = g_AsiStream; + + if (stream == NULL) { + return NULL; + } + + stream->unk0c = -1; + stream->unk10 = -1; + stream->unk14 = -1; + + stream->unk00 = arg0; + stream->unk04 = arg1; + stream->unk08 = arg2; + + stream->unk201c = 0; + stream->unk2020 = 0; + stream->unk3ba0 = 0; + + func00043ef8(stream, 0); + + stream->unk8474 = 0; + + bzero(&stream->unk6a64, sizeof(stream->unk6a64)); + + return stream; +} GLOBAL_ASM( glabel func0004453c diff --git a/src/lib/mp3.c b/src/lib/mp3.c index 80eeed87b..7c2ea4d6f 100644 --- a/src/lib/mp3.c +++ b/src/lib/mp3.c @@ -24,7 +24,7 @@ } struct mp3vars g_Mp3Vars; -u8 *var8009c3f4; +struct asistream *g_AsiStream; s16 _getRate(f32 vol, f32 tgt, s32 count, u16 *ratel); s32 func00038ba8(s32 arg0, u8 *arg1, s32 arg2, s32 arg3); @@ -34,10 +34,10 @@ void mp3Init(ALHeap *heap) bzero(&g_Mp3Vars, sizeof(struct mp3vars)); #if VERSION < VERSION_NTSC_1_0 - rmonPrintf("MPEG : RWI -> Allocating %d bytes for ASISTREAM from audio heap\n", 0x8480); + rmonPrintf("MPEG : RWI -> Allocating %d bytes for ASISTREAM from audio heap\n", sizeof(struct asistream)); #endif - var8009c3f4 = alHeapAlloc(heap, 0x8480, 1); + g_AsiStream = alHeapAlloc(heap, sizeof(struct asistream), 1); var8005f6f8 = alHeapAlloc(heap, 1, 0x2200); var8005f6fc = alHeapAlloc(heap, 1, 0x2200);