PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_gca.c
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
11#include "libspu2_internal.h"
12
13void SpuGetCommonAttr(SpuCommonAttr *attr)
14{
15 s16 v2;
16 const vu16 *v3;
17 u16 v4;
18 u16 v5;
19 s16 v6;
20 const vu16 *v11;
21 const vu16 *v13;
22
23 v2 = 0;
24 v3 = &_spu_RXX[20 * _spu_core];
25 v4 = v3[944];
26 v5 = v3[945];
27 v6 = 0;
28 if ( (v4 & 0x8000) != 0 )
29 {
30 switch ( v4 & 0xF000 )
31 {
32 case 0x8000:
33 v2 = SPU_VOICE_LINEARIncN;
34 break;
35 case 0x9000:
36 v2 = SPU_VOICE_LINEARIncR;
37 break;
38 case 0xa000:
39 v2 = SPU_VOICE_LINEARDecN;
40 break;
41 case 0xb000:
42 v2 = SPU_VOICE_LINEARDecR;
43 break;
44 case 0xc000:
45 v2 = SPU_VOICE_EXPIncN;
46 break;
47 case 0xd000:
48 v2 = SPU_VOICE_EXPIncR;
49 break;
50 case 0xe000:
51 case 0xf000:
52 v2 = SPU_VOICE_EXPDec;
53 break;
54 default:
55 break;
56 }
57 v4 &= ~0xF000;
58 }
59 if ( (v5 & 0x8000) != 0 )
60 {
61 switch ( v5 & 0xF000 )
62 {
63 case 0x8000:
64 v6 = SPU_VOICE_LINEARIncN;
65 break;
66 case 0x9000:
67 v6 = SPU_VOICE_LINEARIncR;
68 break;
69 case 0xa000:
70 v6 = SPU_VOICE_LINEARDecN;
71 break;
72 case 0xb000:
73 v6 = SPU_VOICE_LINEARDecR;
74 break;
75 case 0xc000:
76 v6 = SPU_VOICE_EXPIncN;
77 break;
78 case 0xd000:
79 v6 = SPU_VOICE_EXPIncR;
80 break;
81 case 0xe000:
82 case 0xf000:
83 v6 = SPU_VOICE_EXPDec;
84 break;
85 default:
86 break;
87 }
88 v5 &= ~0xF000;
89 }
90 if ( v4 < 0x4000u )
91 attr->mvol.left = v4;
92 else
93 attr->mvol.left = v4 + 0x8000;
94 if ( v5 < 0x4000u )
95 attr->mvol.right = v5;
96 else
97 attr->mvol.right = v5 + 0x8000;
98 attr->mvolmode.right = v6;
99 attr->mvolmode.left = v2;
100 v11 = &_spu_RXX[20 * _spu_core];
101 attr->mvolx.left = v11[972];
102 attr->mvolx.right = v11[973];
103 attr->cd.volume.left = v11[968];
104 attr->cd.volume.right = v11[969];
105 attr->cd.reverb = (_spu_RXX[512 * _spu_core + 205] & 4) != 0;
106 attr->cd.mix = (_spu_RXX[512 * _spu_core + 205] & 1) != 0;
107 v13 = &_spu_RXX[20 * _spu_core];
108 attr->ext.volume.left = v13[970];
109 attr->ext.volume.right = v13[971];
110 attr->ext.reverb = (_spu_RXX[512 * _spu_core + 205] & 8) != 0;
111 attr->ext.mix = (_spu_RXX[512 * _spu_core + 205] & 2) != 0;
112}