port: fix aEnvMixer; fix some misc warnings

hopefully that was the last of the big audio issues
This commit is contained in:
fgsfds committed 2023-08-09 21:18:36 +02:00
1 parent 60e64e1a1d
commit 288b37a1b3
8 files changed
+60 -42

No files matched your search

+4
View File
@@ -120,7 +120,11 @@ typedef struct ALLink_s {
void alUnlink(ALLink *element); void alUnlink(ALLink *element);
void alLink(ALLink *element, ALLink *after); void alLink(ALLink *element, ALLink *after);
#ifdef PLATFORM_N64
typedef s32 (*ALDMAproc)(s32 addr, s32 len, void *state); typedef s32 (*ALDMAproc)(s32 addr, s32 len, void *state);
#else
typedef uintptr_t (*ALDMAproc)(uintptr_t addr, s32 len, void *state);
#endif
typedef ALDMAproc (*ALDMANew)(void *state); typedef ALDMAproc (*ALDMANew)(void *state);
void alCopy(void *src, void *dest, s32 len); void alCopy(void *src, void *dest, s32 len);
+5 -1
View File
@@ -97,9 +97,13 @@ extern "C" {
/* Address translation routines and macros */ /* Address translation routines and macros */
#ifdef PLATFORM_N64
extern u32 osVirtualToPhysical(void *); extern u32 osVirtualToPhysical(void *);
extern void * osPhysicalToVirtual(u32); extern void * osPhysicalToVirtual(u32);
#else
extern uintptr_t osVirtualToPhysical(void *);
extern void * osPhysicalToVirtual(uintptr_t);
#endif
#endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */ #endif /* defined(_LANGUAGE_C) || defined(_LANGUAGE_C_PLUS_PLUS) */
+8 -8
View File
@@ -38,18 +38,18 @@ void aPlayMP3Impl(const void *mp3file, u32 mp3size, void *out);
#define aDisable(pkt, o, b, c) aDisableImpl(o, b, c) #define aDisable(pkt, o, b, c) aDisableImpl(o, b, c)
#define aClearBuffer(pkt, d, c) aClearBufferImpl(d, c) #define aClearBuffer(pkt, d, c) aClearBufferImpl(d, c)
#define aLoadBuffer(pkt, c, d, s) aLoadBufferImpl(s, d, c) #define aLoadBuffer(pkt, c, d, s) aLoadBufferImpl((void *)(s), d, c)
#define aSaveBuffer(pkt, c, s, d) aSaveBufferImpl(s, d, c) #define aSaveBuffer(pkt, c, s, d) aSaveBufferImpl(s, (int16_t *)(d), c)
#define aLoadADPCM(pkt, c, d) aLoadADPCMImpl(c, d) #define aLoadADPCM(pkt, c, d) aLoadADPCMImpl(c, (int16_t *)(d))
#define aDMEMMove(pkt, i, o, c) aDMEMMoveImpl(i, o, c) #define aDMEMMove(pkt, i, o, c) aDMEMMoveImpl(i, o, c)
#define aSetLoop(pkt, a) aSetLoopImpl(a) #define aSetLoop(pkt, a) aSetLoopImpl((void *)(a))
#define aADPCMdec(pkt, s, f, c, i, o) aADPCMdecImpl(f, s, c, i, o) #define aADPCMdec(pkt, s, f, c, i, o) aADPCMdecImpl(f, (void *)(s), c, i, o)
#define aResample(pkt, s, f, p, i, o) aResampleImpl(f, p, s, i, o) #define aResample(pkt, s, f, p, i, o) aResampleImpl(f, p, (void *)(s), i, o)
#define aInterleave(pkt) aInterleaveImpl() #define aInterleave(pkt) aInterleaveImpl()
#define aMix(pkt, f, g, i, o) aMixImpl(f, g, i, o) #define aMix(pkt, f, g, i, o) aMixImpl(f, g, i, o)
#define aEnvMixer(pkt, f, t, s) aEnvMixerImpl(f, s, t) #define aEnvMixer(pkt, f, t, s) aEnvMixerImpl(f, (void *)(s), t)
#define aSetVolume(pkt, f, v, t, r) aSetVolumeImpl(f, v, t, r) #define aSetVolume(pkt, f, v, t, r) aSetVolumeImpl(f, v, t, r)
#define aPoleFilter(pkt, f, g, t, s) aPoleFilterImpl(f, g, t, s) #define aPoleFilter(pkt, f, g, t, s) aPoleFilterImpl(f, g, t, s)
#define aPlayMP3(pkt, a, b, c) aPlayMP3Impl(a, b, c) #define aPlayMP3(pkt, a, b, c) aPlayMP3Impl((void *)(a), b, (void *)(c))
#endif #endif
+1
View File
@@ -8,6 +8,7 @@
#include "bss.h" #include "bss.h"
#include "video.h" #include "video.h"
#include "audio.h"
#include "input.h" #include "input.h"
#include "fs.h" #include "fs.h"
#include "romdata.h" #include "romdata.h"
+23 -17
View File
@@ -511,6 +511,14 @@ void aEnvMixerImpl(uint8_t flags, ENVMIX_STATE state, int16_t rvol) {
int16_t *wet[2] = {BUF_S16(OFS_AUX_L), BUF_S16(OFS_AUX_R)}; int16_t *wet[2] = {BUF_S16(OFS_AUX_L), BUF_S16(OFS_AUX_R)};
int nsamples = NUM_SAMPLES; int nsamples = NUM_SAMPLES;
struct {
int32_t t[2];
int32_t rate[2];
int16_t tgt[2];
int16_t voldry;
int16_t volwet;
} *savedstate = (void *)state;
rspa.vol[1] = rvol; // why the fuck is this here? rspa.vol[1] = rvol; // why the fuck is this here?
// naudio uses a linear envelope // naudio uses a linear envelope
@@ -521,21 +529,20 @@ void aEnvMixerImpl(uint8_t flags, ENVMIX_STATE state, int16_t rvol) {
if (flags & A_INIT) { if (flags & A_INIT) {
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
t[i] = rspa.vol[i] << 16; t[i] = rspa.vol[i] << 16;
tgt[i] = rspa.target[i] << 16;
rate[i] = rspa.rate[i] >> 3; rate[i] = rspa.rate[i] >> 3;
tgt[i] = rspa.target[i] << 16;
} }
voldry = rspa.vol_dry; voldry = rspa.vol_dry;
volwet = rspa.vol_wet; volwet = rspa.vol_wet;
} else { } else {
for (int i = 0; i < 2; ++i) { for (int i = 0; i < 2; ++i) {
int16_t *base = state + i * 4; t[i] = savedstate->t[i];
t[i] = base[0]; rate[i] = savedstate->rate[i];
tgt[i] = base[1] << 16; tgt[i] = savedstate->tgt[i] << 16;
rate[i] = *(int32_t *)&base[2];
} }
voldry = state[8]; voldry = savedstate->voldry;
volwet = state[9]; volwet = savedstate->volwet;
} }
#ifdef PLATFORM_BIG_ENDIAN #ifdef PLATFORM_BIG_ENDIAN
@@ -574,16 +581,15 @@ void aEnvMixerImpl(uint8_t flags, ENVMIX_STATE state, int16_t rvol) {
} }
} }
for (int i = 0; i < 2; ++i) {
int16_t *base = state + i * 4;
base[0] = t[i];
base[1] = tgt[i] >> 16;
*(int32_t *)&base[2] = rate[i];
}
state[8] = voldry;
state[9] = volwet;
#undef XOR #undef XOR
for (int i = 0; i < 2; ++i) {
savedstate->t[i] = t[i];
savedstate->rate[i] = rate[i];
savedstate->tgt[i] = tgt[i] >> 16;
}
savedstate->voldry = voldry;
savedstate->volwet = volwet;
} }
// flags is always 0 in PD // flags is always 0 in PD
+2 -12
View File
@@ -1,5 +1,4 @@
#include <stdlib.h> #include <stdlib.h>
#include <assert.h>
#include <ultra64.h> #include <ultra64.h>
#include <PR/ultrasched.h> #include <PR/ultrasched.h>
@@ -77,7 +76,6 @@ extern u8 *g_MempHeap;
extern u32 g_MempHeapSize; extern u32 g_MempHeapSize;
void rngSetSeed(u32 seed); void rngSetSeed(u32 seed);
void schedFrame(OSSched *sc);
bool var8005d9b0 = false; bool var8005d9b0 = false;
s32 g_StageNum = STAGE_TITLE; s32 g_StageNum = STAGE_TITLE;
@@ -207,14 +205,6 @@ Gfx var8005dcc8[] = {
gsSPEndDisplayList(), gsSPEndDisplayList(),
}; };
Gfx var8005dcf0[] = {
gsSPSegment(0x00, 0x00000000),
gsSPDisplayList(&var800613a0),
gsSPDisplayList(&var80061380),
gsDPFullSync(),
gsSPEndDisplayList(),
};
s32 g_MainIsBooting = 1; s32 g_MainIsBooting = 1;
void mainInit(void) void mainInit(void)
@@ -522,8 +512,8 @@ void mainLoop(void)
void mainTick(void) void mainTick(void)
{ {
Gfx *gdl; Gfx *gdl = NULL;
Gfx *gdlstart; Gfx *gdlstart = NULL;
OSScMsg msg = {OS_SC_DONE_MSG}; OSScMsg msg = {OS_SC_DONE_MSG};
s32 i; s32 i;
+13
View File
@@ -10,7 +10,11 @@
struct admaitem { struct admaitem {
ALLink node; ALLink node;
#ifdef PLATFORM_N64
s32 startaddr; s32 startaddr;
#else
uintptr_t startaddr;
#endif
s32 lastframe; s32 lastframe;
u8 *ptr; u8 *ptr;
}; };
@@ -46,14 +50,23 @@ void admaInit(void)
* that this buffer was last used in this frame. This is important for the * that this buffer was last used in this frame. This is important for the
* admaBeginFrame routine. * admaBeginFrame routine.
*/ */
#ifdef PLATFORM_N64
s32 admaExec(s32 offset, s32 len, void *state) s32 admaExec(s32 offset, s32 len, void *state)
#else
uintptr_t admaExec(uintptr_t offset, s32 len, void *state)
#endif
{ {
void *foundbuffer; void *foundbuffer;
s32 delta; s32 delta;
struct admaitem *item = g_AdmaState.firstused; struct admaitem *item = g_AdmaState.firstused;
struct admaitem *lastitem = NULL; struct admaitem *lastitem = NULL;
#ifdef PLATFORM_N64
s32 end = offset + len; s32 end = offset + len;
s32 buffend; s32 buffend;
#else
uintptr_t end = offset + len;
uintptr_t buffend;
#endif
// Check to see if a buffer already contains the sample // Check to see if a buffer already contains the sample
while (item) { while (item) {
+4 -4
View File
@@ -77,9 +77,9 @@ s32 mp3util000462f8(u8 *arg0, s32 *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
} else { } else {
cVar1 = *(s8 *)piVar4; cVar1 = *(s8 *)piVar4;
uVar3 = uVar5 & 7; uVar3 = uVar5 & 7;
piVar4 = (s32 *)((u8 *)piVar4 + (uVar3 + 1 >> 3)); piVar4 = (s32 *)((u8 *)piVar4 + ((uVar3 + 1) >> 3));
uVar5 = uVar5 + 1; uVar5 = uVar5 + 1;
if (((u32)cVar1 >> (7 - uVar3 & 0x1f) & 1) == 0) { if (((u32)cVar1 >> ((7 - uVar3) & 0x1f) & 1) == 0) {
*puVar7 = 0; *puVar7 = 0;
} else { } else {
*puVar7 = 1; *puVar7 = 1;
@@ -97,9 +97,9 @@ s32 mp3util000462f8(u8 *arg0, s32 *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5,
} else { } else {
cVar1 = *(s8 *)piVar4; cVar1 = *(s8 *)piVar4;
uVar2 = uVar5 & 7; uVar2 = uVar5 & 7;
piVar4 = (s32 *)((u8 *)piVar4 + (uVar2 + 1 >> 3)); piVar4 = (s32 *)((u8 *)piVar4 + ((uVar2 + 1) >> 3));
uVar5 = uVar5 + 1; uVar5 = uVar5 + 1;
if (((u32)cVar1 >> (7 - uVar2 & 0x1f) & 1) == 0) { if (((u32)cVar1 >> ((7 - uVar2) & 0x1f) & 1) == 0) {
puVar7[1] = 0; puVar7[1] = 0;
} else { } else {
puVar7[1] = 1; puVar7[1] = 1;