summaryrefslogtreecommitdiff
path: root/include/PR
diff options
context:
space:
mode:
authorengineer124 <47598039+engineer124@users.noreply.github.com>2021-11-20 04:18:06 +1100
committerGitHub <noreply@github.com>2021-11-19 14:18:06 -0300
commit2dd84d8a9f0ccd04a4f3f62c5bab997fbaed55ed (patch)
tree087b716675aeaf0bcdfd07aa8badf2a893ac91ed /include/PR
parent9a424688b108104b3c0c34d9106c02fece7313c7 (diff)
Import abi.h from OoT (#466)
Diffstat (limited to 'include/PR')
-rw-r--r--include/PR/abi.h380
1 files changed, 260 insertions, 120 deletions
diff --git a/include/PR/abi.h b/include/PR/abi.h
index 63d6b0f99..49d539762 100644
--- a/include/PR/abi.h
+++ b/include/PR/abi.h
@@ -1,7 +1,8 @@
-#ifndef _ABI_H_
-#define _ABI_H_
+#ifndef ULTRA64_ABI_H
+#define ULTRA64_ABI_H
/* Audio commands: */
+/*
#define A_SPNOOP 0
#define A_ADPCM 1
#define A_CLEARBUFF 2
@@ -18,12 +19,37 @@
#define A_INTERLEAVE 13
#define A_POLEF 14
#define A_SETLOOP 15
-
+*/
+
+#define A_SPNOOP 0
+#define A_ADPCM 1
+#define A_CLEARBUFF 2
+#define A_UNK3 3
+#define A_ADDMIXER 4
+#define A_RESAMPLE 5
+#define A_RESAMPLE_ZOH 6
+#define A_FILTER 7
+#define A_SETBUFF 8
+#define A_DUPLICATE 9
+#define A_DMEMMOVE 10
+#define A_LOADADPCM 11
+#define A_MIXER 12
+#define A_INTERLEAVE 13
+#define A_HILOGAIN 14
+#define A_SETLOOP 15
+#define A_INTERL 17
+#define A_ENVSETUP1 18
+#define A_ENVMIXER 19
+#define A_LOADBUFF 20
+#define A_SAVEBUFF 21
+#define A_ENVSETUP2 22
+#define A_S8DEC 23
+#define A_UNK19 25
#define ACMD_SIZE 32
+
/*
* Audio flags
*/
-
#define A_INIT 0x01
#define A_CONTINUE 0x00
#define A_LOOP 0x02
@@ -254,138 +280,252 @@ typedef short ENVMIX_STATE[40];
* Macros to assemble the audio command list
*/
-#define aADPCMdec(pkt, f, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aPoleFilter(pkt, f, g, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(g, 0, 16)); \
- _a->words.w1 = (unsigned int)(s); \
- }
+#define aADPCMdec(pkt, f, s) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_ADPCM, 24, 8) | _SHIFTL(f, 16, 8); \
+ _a->words.w1 = (unsigned int)(s); \
+}
+
+#define aPoleFilter(pkt, f, g, s) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_POLEF, 24, 8) | _SHIFTL(f, 16, 8) | \
+ _SHIFTL(g, 0, 16)); \
+ _a->words.w1 = (unsigned int)(s); \
+}
+
+#define aHiLoGain(pkt, gain, count, dmem, a4) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_HILOGAIN, 24, 8) | \
+ _SHIFTL(gain, 16, 8) | _SHIFTL(count, 0, 16)); \
+ _a->words.w1 = _SHIFTL(dmem, 16, 16) | _SHIFTL(a4, 0, 16); \
+}
+
+#define aUnkCmd3(pkt, a1, a2, a3) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_UNK3, 24, 8) | _SHIFTL(a3, 0, 16); \
+ _a->words.w1 = _SHIFTL(a1, 16, 16) | _SHIFTL(a2, 0, 16); \
+}
+
+#define aUnkCmd19(pkt, a1, a2, a3, a4) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_UNK19, 24, 8) | _SHIFTL(a1, 16, 8) | \
+ _SHIFTL(a2, 0, 16)); \
+ _a->words.w1 = _SHIFTL(a3, 16, 16) | _SHIFTL(a4, 0, 16); \
+}
+
+#define aS8Dec(pkt, a1, a2) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_S8DEC, 24, 8) | _SHIFTL(a1, 16, 8); \
+ _a->words.w1 = (unsigned int)(a2); \
+}
#define aClearBuffer(pkt, d, c) \
- { \
+{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = _SHIFTL(A_CLEARBUFF, 24, 8) | _SHIFTL(d, 0, 24); \
_a->words.w1 = (unsigned int)(c); \
- }
-
-#define aEnvMixer(pkt, f, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_ENVMIXER, 24, 8) | _SHIFTL(f, 16, 8); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aInterleave(pkt, l, r) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_INTERLEAVE, 24, 8); \
- _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
- }
-
-#define aLoadBuffer(pkt, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aMix(pkt, f, g, i, o) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(g, 0, 16)); \
- _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
- }
-
-#define aPan(pkt, f, d, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(d, 0, 16)); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aResample(pkt, f, p, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | _SHIFTL(f, 16, 8) | \
- _SHIFTL(p, 0, 16)); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aSaveBuffer(pkt, s) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8); \
- _a->words.w1 = (unsigned int)(s); \
- }
-
-#define aSegment(pkt, s, b) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
- _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
- }
+}
+
+#define aEnvMixer(pkt, dmemi, count, swapLR, x0, x1, x2, x3, m, bits) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (bits | _SHIFTL(dmemi >> 4, 16, 8) | \
+ _SHIFTL(count, 8, 8) | _SHIFTL(swapLR, 4, 1) | \
+ _SHIFTL(x0, 3, 1) | _SHIFTL(x1, 2, 1) | \
+ _SHIFTL(x2, 1, 1) | _SHIFTL(x3, 0, 1)); \
+ _a->words.w1 = (unsigned int)(m); \
+}
+
+#define aInterleave(pkt, o, l, r, c) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_INTERLEAVE, 24, 8) | \
+ _SHIFTL(c >> 4, 16, 8) | _SHIFTL(o, 0, 16)); \
+ _a->words.w1 = _SHIFTL(l, 16, 16) | _SHIFTL(r, 0, 16); \
+}
+
+#define aInterl(pkt, dmemi, dmemo, count) \
+{ \
+ Acmd *_a = (Acmd*)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_INTERL, 24, 8) | \
+ _SHIFTL(count, 0, 16)); \
+ _a->words.w1 = _SHIFTL(dmemi, 16, 16) | _SHIFTL(dmemo, 0, 16); \
+}
+
+#define aLoadBuffer(pkt, s, d, c) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_LOADBUFF, 24, 8) | \
+ _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(d, 0, 16); \
+ _a->words.w1 = (unsigned int)(s); \
+}
+
+#define aMix(pkt, f, g, i, o) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_MIXER, 24, 8) | _SHIFTL(f, 16, 8) | \
+ _SHIFTL(g, 0, 16)); \
+ _a->words.w1 = _SHIFTL(i, 16, 16) | _SHIFTL(o, 0, 16); \
+}
+
+#define aPan(pkt, f, d, s) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_PAN, 24, 8) | _SHIFTL(f, 16, 8) | \
+ _SHIFTL(d, 0, 16)); \
+ _a->words.w1 = (unsigned int)(s); \
+}
+
+#define aResample(pkt, f, p, s) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_RESAMPLE, 24, 8) | \
+ _SHIFTL(f, 16, 8) | _SHIFTL(p, 0, 16)); \
+ _a->words.w1 = (unsigned int)(s); \
+}
+
+#define aSaveBuffer(pkt, s, d, c) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_SAVEBUFF, 24, 8) | \
+ _SHIFTL((c) >> 4, 16, 8) | _SHIFTL(s, 0, 16); \
+ _a->words.w1 = (unsigned int)(d); \
+}
+
+#define aSegment(pkt, s, b) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_SEGMENT, 24, 8); \
+ _a->words.w1 = _SHIFTL(s, 24, 8) | _SHIFTL(b, 0, 24); \
+}
#define aSetBuffer(pkt, f, i, o, c) \
- { \
+{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = (_SHIFTL(A_SETBUFF, 24, 8) | _SHIFTL(f, 16, 8) | \
_SHIFTL(i, 0, 16)); \
- _a->words.w1 = _SHIFTL(c, 0, 16) | _SHIFTL(o, 16, 16); \
- }
-
-#define aSetVolume(pkt, f, v, t, r) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
- _SHIFTL(v, 0, 16)); \
- /* had to change this otherwise it doesn't want to match */ \
- _a->words.w1 = (unsigned int)(r); /*_SHIFTL(r, 0, 16)|_SHIFTL(t, 16, 16) ;*/ \
- }
-
-#define aSetLoop(pkt, a) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
- _a->words.w1 = (unsigned int)(a); \
- }
-
-#define aDMEMMove(pkt, i, o, c) \
- { \
- Acmd *_a = (Acmd *)pkt; \
- \
- _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
- _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
- }
+ _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
+}
+
+#define aSetVolume(pkt, f, v, t, r) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
+ _SHIFTL(v, 0, 16)); \
+ _a->words.w1 = _SHIFTL(r, 0, 16) | _SHIFTL(t, 16, 16); \
+}
+
+#define aSetVolume32(pkt, f, v, tr) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_SETVOL, 24, 8) | _SHIFTL(f, 16, 16) | \
+ _SHIFTL(v, 0, 16)); \
+ _a->words.w1 = (unsigned int)(tr); \
+}
+
+#define aSetLoop(pkt, a) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_SETLOOP, 24, 8); \
+ _a->words.w1 = (unsigned int)(a); \
+}
+
+#define aDMEMMove(pkt, i, o, c) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_DMEMMOVE, 24, 8) | _SHIFTL(i, 0, 24); \
+ _a->words.w1 = _SHIFTL(o, 16, 16) | _SHIFTL(c, 0, 16); \
+}
#define aLoadADPCM(pkt, c, d) \
- { \
+{ \
Acmd *_a = (Acmd *)pkt; \
\
_a->words.w0 = _SHIFTL(A_LOADADPCM, 24, 8) | _SHIFTL(c, 0, 24); \
_a->words.w1 = (unsigned int)d; \
- }
+}
+
+
+
+#define aEnvSetup1(pkt, a, b, c, d) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_ENVSETUP1, 24, 8) | \
+ _SHIFTL(a, 16, 8) | _SHIFTL(b, 0, 16)); \
+ _a->words.w1 = _SHIFTL(c, 16, 16) | _SHIFTL(d, 0, 16); \
+}
+
+#define aEnvSetup2(pkt, volLeft, volRight) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_ENVSETUP2, 24, 8); \
+ _a->words.w1 = _SHIFTL(volLeft, 16, 16) | \
+ _SHIFTL(volRight, 0, 16); \
+}
+
+#define aFilter(pkt, f, countOrBuf, addr) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = _SHIFTL(A_FILTER, 24, 8) | _SHIFTL(f, 16, 8) | \
+ _SHIFTL(countOrBuf, 0, 16); \
+ _a->words.w1 = (unsigned int)(addr); \
+}
+
+#define aDuplicate(pkt, count, dmemi, dmemo, a4) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_DUPLICATE, 24, 8) | \
+ _SHIFTL(count, 16, 8) | _SHIFTL(dmemi, 0, 16)); \
+ _a->words.w1 = _SHIFTL(dmemo, 16, 16) | _SHIFTL(a4, 0, 16); \
+}
+
+#define aAddMixer(pkt, count, dmemi, dmemo, a4) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_ADDMIXER, 24, 8) | \
+ _SHIFTL(count >> 4, 16, 8) | _SHIFTL(a4, 0, 16)); \
+ _a->words.w1 = _SHIFTL(dmemi, 16, 16) | _SHIFTL(dmemo, 0, 16); \
+}
+
+#define aResampleZoh(pkt, pitch, pitchAccu) \
+{ \
+ Acmd *_a = (Acmd *)pkt; \
+ \
+ _a->words.w0 = (_SHIFTL(A_RESAMPLE_ZOH, 24, 8) | \
+ _SHIFTL(pitch, 0, 16)); \
+ _a->words.w1 = _SHIFTL(pitchAccu, 0, 16); \
+}
-#endif /* !_ABI_H_ */
+#endif /* ULTRA64_ABI_H */