mirror of https://github.com/PrimeDecomp/prime.git
Link snd_service.c and hw_memory.c
This commit is contained in:
parent
0e20e67870
commit
e88f46cb28
2
Makefile
2
Makefile
|
@ -103,6 +103,7 @@ ifeq ($(VERBOSE),0)
|
|||
LDFLAGS := $(MAPGEN) -fp fmadd -nodefaults -w off
|
||||
endif
|
||||
CFLAGS_1.2 = -proc gekko -nodefaults -Cpp_exceptions off -RTTI off -fp fmadd -str reuse,pool,readonly -O4,p -maxerrors 1 -use_lmw_stmw on -enum int -inline auto -MMD $(INCLUDES)
|
||||
CFLAGS_MUSYX = -proc gekko -nodefaults -Cpp_exceptions off -RTTI off -fp fmadd -str reuse,pool,readonly -O4,p -maxerrors 1 -enum int -inline auto -MMD $(INCLUDES)
|
||||
CFLAGS = $(CFLAGS_1.2) -gccinc
|
||||
|
||||
ifeq ($(VERBOSE),0)
|
||||
|
@ -118,6 +119,7 @@ $(BUILD_DIR)/src/Dolphin/os/OSAudioSystem.o: MWCC_VERSION := 1.2.5
|
|||
$(BUILD_DIR)/src/Dolphin/os/OSAudioSystem.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/Dolphin/dsp/dsp.o: MWCC_VERSION := 1.2.5
|
||||
$(BUILD_DIR)/src/Dolphin/dsp/dsp.o: CFLAGS := $(CFLAGS_1.2)
|
||||
$(BUILD_DIR)/src/musyx/snd_service.o: CFLAGS := $(CFLAGS_MUSYX)
|
||||
|
||||
#-------------------------------------------------------------------------------
|
||||
# Recipes
|
||||
|
|
|
@ -61,8 +61,8 @@ lbl_805A8BE0:
|
|||
.balign 4
|
||||
|
||||
.section .rodata
|
||||
.global lbl_803D8BD0
|
||||
lbl_803D8BD0:
|
||||
.global itdOffTab
|
||||
itdOffTab:
|
||||
# ROM: 0x3D5BD0
|
||||
.4byte 0
|
||||
.4byte 0
|
||||
|
@ -917,9 +917,9 @@ lbl_803B39F8:
|
|||
/* 803B39F8 003B0958 80 1F 00 F0 */ lwz r0, 0xf0(r31)
|
||||
/* 803B39FC 003B095C 54 00 00 01 */ rlwinm. r0, r0, 0, 0, 0
|
||||
/* 803B3A00 003B0960 41 82 00 30 */ beq lbl_803B3A30
|
||||
/* 803B3A04 003B0964 3C 60 80 3E */ lis r3, lbl_803D8BD0@ha
|
||||
/* 803B3A04 003B0964 3C 60 80 3E */ lis r3, itdOffTab@ha
|
||||
/* 803B3A08 003B0968 57 C0 8D FC */ rlwinm r0, r30, 0x11, 0x17, 0x1e
|
||||
/* 803B3A0C 003B096C 38 83 8B D0 */ addi r4, r3, lbl_803D8BD0@l
|
||||
/* 803B3A0C 003B096C 38 83 8B D0 */ addi r4, r3, itdOffTab@l
|
||||
/* 803B3A10 003B0970 7C 64 02 2E */ lhzx r3, r4, r0
|
||||
/* 803B3A14 003B0974 7C 04 02 2E */ lhzx r0, r4, r0
|
||||
/* 803B3A18 003B0978 B0 7F 00 D0 */ sth r3, 0xd0(r31)
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifndef MUSYX_DSP_IMPORT_H
|
||||
#define MUSYX_DSP_IMPORT_H
|
||||
|
||||
#include "types.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
|
@ -15,6 +15,11 @@ typedef struct _SynthInfo {
|
|||
u8 studios;
|
||||
} SynthInfo;
|
||||
|
||||
typedef struct _SND_HOOKS {
|
||||
void *(*malloc)(u32 len);
|
||||
void (*free)(void *addr);
|
||||
} SND_HOOKS;
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
#ifndef MUSYX_PRIV_H
|
||||
#define MUSYX_PRIV_H
|
||||
|
||||
#include "types.h"
|
||||
#include "musyx/musyx.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
typedef s32 (*SND_COMPARE)(u16*, u8*);
|
||||
|
||||
void dataInit(u32, s32); /* extern */
|
||||
void dataInitStack(); /* extern */
|
||||
|
@ -19,7 +20,15 @@ void hwExit();
|
|||
void dataExit();
|
||||
void s3dExit();
|
||||
void synthExit();
|
||||
u32 synthGetTicksPerSecond(u32 seconds);
|
||||
u16 sndRand(void);
|
||||
s16 sndSin(u32 __x);
|
||||
u8* sndBSearch(u16 *key,u8 *subTab,s32 mainTab,s32 len,SND_COMPARE cmp);
|
||||
void sndConvertMs(u32* time);
|
||||
void sndConvertTicks(u32* out, u32 seconds);
|
||||
u32 sndConvert2Ms(u32 time);
|
||||
|
||||
extern SND_HOOKS salHooks;
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -62,6 +62,10 @@ typedef void* unkptr;
|
|||
#endif
|
||||
#endif
|
||||
|
||||
#ifndef ATTRIBUTE_ALIGN
|
||||
#define ATTRIBUTE_ALIGN(num) __attribute__ ((aligned (num)))
|
||||
#endif
|
||||
|
||||
// where should these go?
|
||||
void srand(int);
|
||||
int rand();
|
||||
|
|
|
@ -800,12 +800,12 @@ MUSYX_FILES :=\
|
|||
$(BUILD_DIR)/src/musyx/snd_init.o\
|
||||
$(BUILD_DIR)/asm/musyx/snd_math.o\
|
||||
$(BUILD_DIR)/asm/musyx/snd_midictrl.o\
|
||||
$(BUILD_DIR)/asm/musyx/snd_service.o\
|
||||
$(BUILD_DIR)/src/musyx/snd_service.o\
|
||||
$(BUILD_DIR)/asm/musyx/hardware.o\
|
||||
$(BUILD_DIR)/asm/musyx/hw_aramdma.o\
|
||||
$(BUILD_DIR)/src/musyx/dsp_import.o\
|
||||
$(BUILD_DIR)/asm/musyx/hw_dolphin.o\
|
||||
$(BUILD_DIR)/asm/musyx/hw_memory.o\
|
||||
$(BUILD_DIR)/src/musyx/hw_memory.o\
|
||||
$(BUILD_DIR)/asm/musyx/creverb_fx.o\
|
||||
$(BUILD_DIR)/asm/musyx/creverb.o\
|
||||
$(BUILD_DIR)/asm/musyx/reverb_fx.o\
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
char dspSlave[0x19E0] = {
|
||||
char dspSlave[0x19E0] ATTRIBUTE_ALIGN(32) = {
|
||||
0x00, 0x00, 0x00, 0x00, 0x02, 0x9F, 0x0C, 0x10, 0x02, 0x9F, 0x0C, 0x1F,
|
||||
0x02, 0x9F, 0x0C, 0x3B, 0x02, 0x9F, 0x0C, 0x4A, 0x02, 0x9F, 0x0C, 0x50,
|
||||
0x02, 0x9F, 0x0C, 0x82, 0x02, 0x9F, 0x0C, 0x88, 0x13, 0x02, 0x13, 0x03,
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
#include "musyx/musyx_priv.h"
|
||||
|
||||
|
||||
void* salMalloc(u32 len) {
|
||||
return salHooks.malloc(len);
|
||||
}
|
||||
|
||||
void salFree(void* addr) {
|
||||
salHooks.free(addr);
|
||||
}
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
#include "musyx/musyx.h"
|
||||
#include "musyx/musyx_priv.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
#include "musyx/musyx.h"
|
||||
#include "musyx/musyx_priv.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -0,0 +1,116 @@
|
|||
#include "musyx/musyx_priv.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif // __cplusplus
|
||||
|
||||
s16 sndSintab[1024] = {
|
||||
0, 6, 12, 18, 25, 31, 37, 43, 50, 56, 62, 69, 75, 81, 87, 94, 100, 106, 113, 119, 125, 131,
|
||||
138, 144, 150, 157, 163, 169, 175, 182, 188, 194, 200, 207, 213, 219, 226, 232, 238, 244, 251, 257, 263, 269,
|
||||
276, 282, 288, 295, 301, 307, 313, 320, 326, 332, 338, 345, 351, 357, 363, 370, 376, 382, 388, 395, 401, 407,
|
||||
413, 420, 426, 432, 438, 445, 451, 457, 463, 470, 476, 482, 488, 495, 501, 507, 513, 520, 526, 532, 538, 545,
|
||||
551, 557, 563, 569, 576, 582, 588, 594, 601, 607, 613, 619, 625, 632, 638, 644, 650, 656, 663, 669, 675, 681,
|
||||
687, 694, 700, 706, 712, 718, 725, 731, 737, 743, 749, 755, 762, 768, 774, 780, 786, 792, 799, 805, 811, 817,
|
||||
823, 829, 836, 842, 848, 854, 860, 866, 872, 879, 885, 891, 897, 903, 909, 915, 921, 928, 934, 940, 946, 952,
|
||||
958, 964, 970, 976, 983, 989, 995, 1001, 1007, 1013, 1019, 1025, 1031, 1037, 1043, 1050, 1056, 1062, 1068, 1074, 1080, 1086,
|
||||
1092, 1098, 1104, 1110, 1116, 1122, 1128, 1134, 1140, 1146, 1152, 1158, 1164, 1170, 1176, 1182, 1189, 1195, 1201, 1207, 1213, 1219,
|
||||
1225, 1231, 1237, 1243, 1248, 1254, 1260, 1266, 1272, 1278, 1284, 1290, 1296, 1302, 1308, 1314, 1320, 1326, 1332, 1338, 1344, 1350,
|
||||
1356, 1362, 1368, 1373, 1379, 1385, 1391, 1397, 1403, 1409, 1415, 1421, 1427, 1433, 1438, 1444, 1450, 1456, 1462, 1468, 1474, 1479,
|
||||
1485, 1491, 1497, 1503, 1509, 1515, 1520, 1526, 1532, 1538, 1544, 1550, 1555, 1561, 1567, 1573, 1579, 1584, 1590, 1596, 1602, 1608,
|
||||
1613, 1619, 1625, 1631, 1636, 1642, 1648, 1654, 1659, 1665, 1671, 1677, 1682, 1688, 1694, 1699, 1705, 1711, 1717, 1722, 1728, 1734,
|
||||
1739, 1745, 1751, 1756, 1762, 1768, 1773, 1779, 1785, 1790, 1796, 1802, 1807, 1813, 1819, 1824, 1830, 1835, 1841, 1847, 1852, 1858,
|
||||
1864, 1869, 1875, 1880, 1886, 1891, 1897, 1903, 1908, 1914, 1919, 1925, 1930, 1936, 1941, 1947, 1952, 1958, 1964, 1969, 1975, 1980,
|
||||
1986, 1991, 1997, 2002, 2007, 2013, 2018, 2024, 2029, 2035, 2040, 2046, 2051, 2057, 2062, 2067, 2073, 2078, 2084, 2089, 2094, 2100,
|
||||
2105, 2111, 2116, 2121, 2127, 2132, 2138, 2143, 2148, 2154, 2159, 2164, 2170, 2175, 2180, 2186, 2191, 2196, 2201, 2207, 2212, 2217,
|
||||
2223, 2228, 2233, 2238, 2244, 2249, 2254, 2259, 2265, 2270, 2275, 2280, 2286, 2291, 2296, 2301, 2306, 2312, 2317, 2322, 2327, 2332,
|
||||
2337, 2343, 2348, 2353, 2358, 2363, 2368, 2373, 2379, 2384, 2389, 2394, 2399, 2404, 2409, 2414, 2419, 2424, 2429, 2434, 2439, 2445,
|
||||
2450, 2455, 2460, 2465, 2470, 2475, 2480, 2485, 2490, 2495, 2500, 2505, 2510, 2515, 2519, 2524, 2529, 2534, 2539, 2544, 2549, 2554,
|
||||
2559, 2564, 2569, 2574, 2578, 2583, 2588, 2593, 2598, 2603, 2608, 2613, 2617, 2622, 2627, 2632, 2637, 2641, 2646, 2651, 2656, 2661,
|
||||
2665, 2670, 2675, 2680, 2684, 2689, 2694, 2699, 2703, 2708, 2713, 2717, 2722, 2727, 2732, 2736, 2741, 2746, 2750, 2755, 2760, 2764,
|
||||
2769, 2773, 2778, 2783, 2787, 2792, 2796, 2801, 2806, 2810, 2815, 2819, 2824, 2828, 2833, 2837, 2842, 2847, 2851, 2856, 2860, 2865,
|
||||
2869, 2874, 2878, 2882, 2887, 2891, 2896, 2900, 2905, 2909, 2914, 2918, 2922, 2927, 2931, 2936, 2940, 2944, 2949, 2953, 2957, 2962,
|
||||
2966, 2970, 2975, 2979, 2983, 2988, 2992, 2996, 3000, 3005, 3009, 3013, 3018, 3022, 3026, 3030, 3034, 3039, 3043, 3047, 3051, 3055,
|
||||
3060, 3064, 3068, 3072, 3076, 3080, 3085, 3089, 3093, 3097, 3101, 3105, 3109, 3113, 3117, 3121, 3126, 3130, 3134, 3138, 3142, 3146,
|
||||
3150, 3154, 3158, 3162, 3166, 3170, 3174, 3178, 3182, 3186, 3190, 3193, 3197, 3201, 3205, 3209, 3213, 3217, 3221, 3225, 3229, 3232,
|
||||
3236, 3240, 3244, 3248, 3252, 3255, 3259, 3263, 3267, 3271, 3274, 3278, 3282, 3286, 3289, 3293, 3297, 3301, 3304, 3308, 3312, 3315,
|
||||
3319, 3323, 3326, 3330, 3334, 3337, 3341, 3345, 3348, 3352, 3356, 3359, 3363, 3366, 3370, 3373, 3377, 3381, 3384, 3388, 3391, 3395,
|
||||
3398, 3402, 3405, 3409, 3412, 3416, 3419, 3423, 3426, 3429, 3433, 3436, 3440, 3443, 3447, 3450, 3453, 3457, 3460, 3463, 3467, 3470,
|
||||
3473, 3477, 3480, 3483, 3487, 3490, 3493, 3497, 3500, 3503, 3506, 3510, 3513, 3516, 3519, 3522, 3526, 3529, 3532, 3535, 3538, 3541,
|
||||
3545, 3548, 3551, 3554, 3557, 3560, 3563, 3566, 3570, 3573, 3576, 3579, 3582, 3585, 3588, 3591, 3594, 3597, 3600, 3603, 3606, 3609,
|
||||
3612, 3615, 3618, 3621, 3624, 3627, 3629, 3632, 3635, 3638, 3641, 3644, 3647, 3650, 3652, 3655, 3658, 3661, 3664, 3667, 3669, 3672,
|
||||
3675, 3678, 3680, 3683, 3686, 3689, 3691, 3694, 3697, 3700, 3702, 3705, 3708, 3710, 3713, 3716, 3718, 3721, 3723, 3726, 3729, 3731,
|
||||
3734, 3736, 3739, 3742, 3744, 3747, 3749, 3752, 3754, 3757, 3759, 3762, 3764, 3767, 3769, 3772, 3774, 3776, 3779, 3781, 3784, 3786,
|
||||
3789, 3791, 3793, 3796, 3798, 3800, 3803, 3805, 3807, 3810, 3812, 3814, 3816, 3819, 3821, 3823, 3826, 3828, 3830, 3832, 3834, 3837,
|
||||
3839, 3841, 3843, 3845, 3848, 3850, 3852, 3854, 3856, 3858, 3860, 3862, 3864, 3867, 3869, 3871, 3873, 3875, 3877, 3879, 3881, 3883,
|
||||
3885, 3887, 3889, 3891, 3893, 3895, 3897, 3899, 3900, 3902, 3904, 3906, 3908, 3910, 3912, 3914, 3915, 3917, 3919, 3921, 3923, 3925,
|
||||
3926, 3928, 3930, 3932, 3933, 3935, 3937, 3939, 3940, 3942, 3944, 3945, 3947, 3949, 3950, 3952, 3954, 3955, 3957, 3959, 3960, 3962,
|
||||
3963, 3965, 3967, 3968, 3970, 3971, 3973, 3974, 3976, 3977, 3979, 3980, 3982, 3983, 3985, 3986, 3988, 3989, 3990, 3992, 3993, 3995,
|
||||
3996, 3997, 3999, 4000, 4001, 4003, 4004, 4005, 4007, 4008, 4009, 4011, 4012, 4013, 4014, 4016, 4017, 4018, 4019, 4020, 4022, 4023,
|
||||
4024, 4025, 4026, 4027, 4029, 4030, 4031, 4032, 4033, 4034, 4035, 4036, 4037, 4038, 4039, 4040, 4041, 4042, 4043, 4044, 4045, 4046,
|
||||
4047, 4048, 4049, 4050, 4051, 4052, 4053, 4054, 4055, 4056, 4057, 4057, 4058, 4059, 4060, 4061, 4062, 4062, 4063, 4064, 4065, 4065,
|
||||
4066, 4067, 4068, 4068, 4069, 4070, 4071, 4071, 4072, 4073, 4073, 4074, 4075, 4075, 4076, 4076, 4077, 4078, 4078, 4079, 4079, 4080,
|
||||
4080, 4081, 4081, 4082, 4082, 4083, 4083, 4084, 4084, 4085, 4085, 4086, 4086, 4087, 4087, 4087, 4088, 4088, 4089, 4089, 4089, 4090,
|
||||
4090, 4090, 4091, 4091, 4091, 4091, 4092, 4092, 4092, 4092, 4093, 4093, 4093, 4093, 4094, 4094, 4094, 4094, 4094, 4094, 4095, 4095,
|
||||
4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095, 4095,
|
||||
};
|
||||
|
||||
#define SINTAB_ELEMENT_COUNT (sizeof(sndSintab) / sizeof(short) - 1)
|
||||
|
||||
u32 last_rnd = 1;
|
||||
|
||||
u16 sndRand(void) {
|
||||
last_rnd *= 2822053219;
|
||||
return last_rnd >> 6;
|
||||
}
|
||||
|
||||
s16 sndSin(u32 __x) {
|
||||
const u16 x = __x & 0xFFF;
|
||||
if (x < 1024) {
|
||||
return (int)sndSintab[x];
|
||||
}
|
||||
if (x < 2048) {
|
||||
return (int)sndSintab[SINTAB_ELEMENT_COUNT - (x & SINTAB_ELEMENT_COUNT)];
|
||||
}
|
||||
if (x < 3072) {
|
||||
return (int)-sndSintab[x & SINTAB_ELEMENT_COUNT];
|
||||
}
|
||||
return -sndSintab[SINTAB_ELEMENT_COUNT - (x & SINTAB_ELEMENT_COUNT)];
|
||||
}
|
||||
|
||||
u8* sndBSearch(u16 *key,u8 *subTab,s32 mainTab,s32 len,SND_COMPARE cmp) {
|
||||
s32 left;
|
||||
s32 right;
|
||||
s32 mid;
|
||||
s32 found;
|
||||
u8* test;
|
||||
|
||||
if (mainTab != 0) {
|
||||
left = 1;
|
||||
right = mainTab;
|
||||
do {
|
||||
mid = ((left + right) >> 1);
|
||||
test = subTab + (len * (mid - 1));
|
||||
found = (*cmp)(key, test);
|
||||
if (found == 0) { return test; }
|
||||
|
||||
if (found < 0) {
|
||||
right = mid - 1;
|
||||
} else
|
||||
{
|
||||
left = mid + 1;
|
||||
}
|
||||
} while (left <= right);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
void sndConvertMs(u32* time) { *time = *time * 256; }
|
||||
|
||||
void sndConvertTicks(u32* out, u32 seconds) { *out = (((*out << 16) / synthGetTicksPerSecond(seconds)) * 1000) / 32; }
|
||||
|
||||
u32 sndConvert2Ms(u32 time) { return time / 256; }
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif // __cplusplus
|
Loading…
Reference in New Issue