PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_gcmva.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 SpuGetCommonMasterVolumeAttr(s16 *mvol_left, s16 *mvol_right, s16 *mvolmode_left, s16 *mvolmode_right)
14{
15 s16 v4;
16 const vu16 *v5;
17 u16 v6;
18 u16 v7;
19 s16 v8;
20
21 v4 = 0;
22 v5 = &_spu_RXX[20 * _spu_core];
23 v6 = v5[944];
24 v7 = v5[945];
25 v8 = 0;
26 if ( (v6 & 0x8000) != 0 )
27 {
28 switch ( v6 & 0xF000 )
29 {
30 case 0x8000:
31 v4 = SPU_VOICE_LINEARIncN;
32 break;
33 case 0x9000:
34 v4 = SPU_VOICE_LINEARIncR;
35 break;
36 case 0xa000:
37 v4 = SPU_VOICE_LINEARDecN;
38 break;
39 case 0xb000:
40 v4 = SPU_VOICE_LINEARDecR;
41 break;
42 case 0xc000:
43 v4 = SPU_VOICE_EXPIncN;
44 break;
45 case 0xd000:
46 v4 = SPU_VOICE_EXPIncR;
47 break;
48 case 0xe000:
49 case 0xf000:
50 v4 = SPU_VOICE_EXPDec;
51 break;
52 default:
53 break;
54 }
55 v6 &= ~0xF000;
56 }
57 v8 = 0;
58 if ( (v7 & 0x8000) != 0 )
59 {
60 switch ( v7 & 0xF000 )
61 {
62 case 0x8000:
63 v8 = SPU_VOICE_LINEARIncN;
64 break;
65 case 0x9000:
66 v8 = SPU_VOICE_LINEARIncR;
67 break;
68 case 0xa000:
69 v8 = SPU_VOICE_LINEARDecN;
70 break;
71 case 0xb000:
72 v8 = SPU_VOICE_LINEARDecR;
73 break;
74 case 0xc000:
75 v8 = SPU_VOICE_EXPIncN;
76 break;
77 case 0xd000:
78 v8 = SPU_VOICE_EXPIncR;
79 break;
80 case 0xe000:
81 case 0xf000:
82 v8 = SPU_VOICE_EXPDec;
83 break;
84 default:
85 break;
86 }
87 v7 &= ~0xF000;
88 }
89 *mvolmode_left = v4;
90 *mvolmode_right = v8;
91 if ( v6 < 0x4000u )
92 *mvol_left = v6;
93 else
94 *mvol_left = v6 + 0x8000;
95 if ( v7 < 0x4000u )
96 *mvol_right = v7;
97 else
98 *mvol_right = v7 + 0x8000;
99}