Skip to content

Commit 591fd64

Browse files
authored
BINKNGC match 6 funcs and minor cleanup (#699)
1 parent b76b236 commit 591fd64

4 files changed

Lines changed: 86 additions & 5 deletions

File tree

src/bink/include/binkngc.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,7 @@
44
#include "bink.h"
55

66
void radfree(void* ptr);
7+
typedef void *(*RADMEMALLOC)(u32 size);
8+
typedef void (*RADMEMFREE)(void* mem);
79

810
#endif

src/bink/include/binkread.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22
#define BINKREAD_H
33

44
#include "bink.h"
5-
5+
void BinkCloseTrack(HBINKTRACK bnkt);
66
#endif

src/bink/src/sdk/decode/binkread.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -695,6 +695,7 @@ s32 BinkSetSoundSystem(BINKSNDSYSOPEN open, u32 param)
695695
// (undefined *param_1,undefined2 *param_2,uint param_3)
696696
void conv16to8()
697697
{
698+
698699
}
699700

700701
void checksound(u32 tmp)
@@ -986,9 +987,9 @@ HBINKTRACK BinkOpenTrack(HBINK bnk, u32 trackindex)
986987

987988
void BinkCloseTrack(HBINKTRACK bnkt)
988989
{
989-
if (bnkt != 0)
990+
if (bnkt)
990991
{
991-
if (bnkt->sndcomp != 0)
992+
if (bnkt->sndcomp)
992993
{
993994
BinkAudioDecompressClose(bnkt->sndcomp);
994995
bnkt->sndcomp = 0;

src/bink/src/sdk/decode/ngc/binkngc.c

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,68 @@
11
#include "binkngc.h"
2+
#include "bink.h"
23
#include "dolphin/os/OSAlloc.h"
34

4-
u32 usermalloc = NULL;
5-
void* userfree = NULL;
5+
6+
RADMEMALLOC usermalloc = NULL;
7+
RADMEMFREE userfree = NULL;
8+
RADMEMALLOC userarammalloc = NULL;
9+
RADMEMFREE useraramfree = NULL;
10+
11+
12+
13+
void radmemset16(void* dest, u16 value, u32 size) {
14+
int half_size = size >> 1;
15+
int sprayed_value = (value << 16) | value;
16+
u16* d16 = dest;
17+
u32* d32 = dest;
18+
19+
while (half_size--) {
20+
*d32++ = sprayed_value;
21+
}
22+
23+
d16 = (U16*)d32;
24+
if ((size & 1))
25+
*d16 = value;
26+
}
27+
28+
void RADSetMemory(RADMEMALLOC malloc_fn, RADMEMFREE free_fn) {
29+
usermalloc = malloc_fn;
30+
userfree = free_fn;
31+
}
32+
33+
void* radmalloc(u32 size)
34+
{
35+
u32 request;
36+
void *rawBlock;
37+
u8 fromUser;
38+
u32 addr;
39+
u32 offset;
40+
u8 *aligned;
41+
if (size == 0 || size == 0xFFFFFFFF)
42+
return 0;
43+
request = size + 0x40;
44+
if (usermalloc != 0 && (rawBlock = usermalloc(request))) {
45+
if (rawBlock != 0 && rawBlock != (void *)-1) {
46+
fromUser = 3;
47+
} else {
48+
return 0;
49+
}
50+
} else {
51+
rawBlock = OSAllocFromHeap(__OSCurrHeap, request);
52+
if (rawBlock == 0) {
53+
return 0;
54+
}
55+
fromUser= 0;
56+
}
57+
addr = (u32)rawBlock;
58+
offset = (u32)(0x40 - (addr & 0x1F)) & 0xFF;
59+
aligned = (u8 *)rawBlock + offset;
60+
aligned[-1] = (u8)offset;
61+
aligned[-2] = fromUser;
62+
if (fromUser == 3)
63+
*(void **)(aligned - 8) = (void *)userfree;
64+
return aligned;
65+
}
666

767
void radfree(void* ptr)
868
{
@@ -23,3 +83,21 @@ void radfree(void* ptr)
2383
}
2484
}
2585
}
86+
87+
void RADSetAudioMemory(RADMEMALLOC malloc_fn, RADMEMFREE free_fn) {
88+
userarammalloc = malloc_fn;
89+
useraramfree = free_fn;
90+
}
91+
92+
void* radaudiomalloc(u32 size) {
93+
if (userarammalloc) {
94+
return userarammalloc(size);
95+
}
96+
return NULL;
97+
}
98+
99+
void radaudiofree(void* ptr) {
100+
if (useraramfree) {
101+
useraramfree(ptr);
102+
}
103+
}

0 commit comments

Comments
 (0)