PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_sca.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 SpuSetCommonAttr(SpuCommonAttr *attr)
14{
15 s16 left_1;
16 unsigned int mask;
17 s16 right_1;
18 int mov_left_part1;
19 int mov_right_part1;
20 vu16 *regstmp1;
21 u16 attrtmp1;
22 vu16 *regstmp2;
23 u16 attrtmp2;
24 vu16 *regstmp3;
25 u16 attrtmp3;
26
27 left_1 = 0;
28 mask = attr->mask;
29 right_1 = 0;
30 mov_left_part1 = 0;
31 mov_right_part1 = 0;
32 if ( mask == 0 )
33 {
34 mask = 0xFFFFFFFF;
35 }
36 if ( (mask & SPU_COMMON_MVOLL) != 0 )
37 {
38 if ( (mask & SPU_COMMON_MVOLMODEL) != 0 )
39 {
40 switch ( attr->mvolmode.left )
41 {
42 case SPU_VOICE_LINEARIncN:
43 mov_left_part1 = 0x8000;
44 break;
45 case SPU_VOICE_LINEARIncR:
46 mov_left_part1 = 0x9000;
47 break;
48 case SPU_VOICE_LINEARDecN:
49 mov_left_part1 = 0xA000;
50 break;
51 case SPU_VOICE_LINEARDecR:
52 mov_left_part1 = 0xB000;
53 break;
54 case SPU_VOICE_EXPIncN:
55 mov_left_part1 = 0xC000;
56 break;
57 case SPU_VOICE_EXPIncR:
58 mov_left_part1 = 0xD000;
59 break;
60 case SPU_VOICE_EXPDec:
61 mov_left_part1 = 0xE000;
62 break;
63 default:
64 left_1 = attr->mvol.left;
65 break;
66 }
67 }
68 if ( mov_left_part1 )
69 {
70 int left_2;
71
72 left_2 = attr->mvol.left;
73 left_1 = 127;
74 if ( left_2 < 128 )
75 {
76 left_1 = 0;
77 if ( left_2 >= 0 )
78 left_1 = attr->mvol.left;
79 }
80 }
81 _spu_RXX[20 * _spu_core + 944] = (left_1 & ~0x8000) | mov_left_part1;
82 }
83 if ( (mask & SPU_COMMON_MVOLR) != 0 )
84 {
85 s16 right_masked;
86
87 if ( (mask & SPU_COMMON_MVOLMODER) != 0 )
88 {
89 switch ( attr->mvolmode.right )
90 {
91 case SPU_VOICE_LINEARIncN:
92 mov_right_part1 = 0x8000;
93 break;
94 case SPU_VOICE_LINEARIncR:
95 mov_right_part1 = 0x9000;
96 break;
97 case SPU_VOICE_LINEARDecN:
98 mov_right_part1 = 0xa000;
99 break;
100 case SPU_VOICE_LINEARDecR:
101 mov_right_part1 = 0xb000;
102 break;
103 case SPU_VOICE_EXPIncN:
104 mov_right_part1 = 0xc000;
105 break;
106 case SPU_VOICE_EXPIncR:
107 mov_right_part1 = 0xd000;
108 break;
109 case SPU_VOICE_EXPDec:
110 mov_right_part1 = 0xe000;
111 break;
112 default:
113 right_1 = attr->mvol.right;
114 break;
115 }
116 }
117 right_masked = right_1 & ~0x8000;
118 if ( mov_right_part1 )
119 {
120 int right_2;
121 s16 right_3;
122
123 right_2 = attr->mvol.right;
124 right_3 = 127;
125 if ( right_2 < 128 )
126 {
127 right_3 = 0;
128 if ( right_2 >= 0 )
129 right_3 = attr->mvol.right;
130 }
131 right_masked = right_3 & ~0x8000;
132 }
133 _spu_RXX[20 * _spu_core + 945] = right_masked | mov_right_part1;
134 }
135 if ( (mask & SPU_COMMON_CDVOLL) != 0 )
136 _spu_RXX[20 * _spu_core + 968] = attr->cd.volume.left;
137 if ( (mask & SPU_COMMON_CDVOLR) != 0 )
138 _spu_RXX[20 * _spu_core + 969] = attr->cd.volume.right;
139 if ( (mask & SPU_COMMON_EXTVOLL) != 0 )
140 _spu_RXX[20 * _spu_core + 970] = attr->ext.volume.left;
141 if ( (mask & SPU_COMMON_EXTVOLR) != 0 )
142 _spu_RXX[20 * _spu_core + 971] = attr->ext.volume.right;
143 if ( (mask & SPU_COMMON_CDREV) != 0 )
144 {
145 regstmp1 = &_spu_RXX[512 * _spu_core];
146 if ( attr->cd.reverb == SPU_ON )
147 attrtmp1 = regstmp1[205] | 4;
148 else
149 attrtmp1 = regstmp1[205] & ~4;
150 regstmp1[205] = attrtmp1;
151 }
152 if ( (mask & SPU_COMMON_CDMIX) != 0 )
153 {
154 regstmp2 = &_spu_RXX[512 * _spu_core];
155 if ( attr->cd.mix == SPU_ON )
156 attrtmp2 = regstmp2[205] | 1;
157 else
158 attrtmp2 = regstmp2[205] & ~1;
159 regstmp2[205] = attrtmp2;
160 }
161 if ( (mask & SPU_COMMON_EXTREV) != 0 )
162 {
163 regstmp3 = &_spu_RXX[512 * _spu_core];
164 if ( attr->ext.reverb == SPU_ON )
165 attrtmp3 = regstmp3[205] | 8;
166 else
167 attrtmp3 = regstmp3[205] & ~8;
168 regstmp3[205] = attrtmp3;
169 }
170 if ( (mask & SPU_COMMON_EXTMIX) != 0 )
171 {
172 if ( attr->ext.mix == SPU_ON )
173 _spu_RXX[512 * _spu_core + 205] |= 2u;
174 else
175 _spu_RXX[512 * _spu_core + 205] &= ~2u;
176 }
177}