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
767void 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