PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_srmt.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
13int SpuSetReverbModeType(int mode)
14{
15 unsigned int v1;
16 int v2;
17 vu16 *v4;
18 int v5;
19 vu16 *v6;
21
22 v1 = mode;
23 v2 = 0;
24 if ( (mode & SPU_REV_MODE_CLEAR_WA) != 0 )
25 {
26 v1 = mode & ~SPU_REV_MODE_CLEAR_WA;
27 v2 = 1;
28 }
29 if ( v1 >= SPU_REV_MODE_MAX )
30 {
31 return -1;
32 }
33 _spu_rev_attr.mode = v1;
34 _spu_rev_offsetaddr = SpuGetReverbEndAddr() - (8 * _spu_rev_workareasize[v1] - 2);
35 memcpy(&v7, &_spu_rev_param[v1], 0x44u);
36 v7.flags = 0;
37 switch ( v1 )
38 {
39 case SPU_REV_MODE_ECHO:
40 _spu_rev_attr.feedback = 127;
41 _spu_rev_attr.delay = 127;
42 break;
43 case SPU_REV_MODE_DELAY:
44 _spu_rev_attr.feedback = 0;
45 _spu_rev_attr.delay = 127;
46 break;
47 default:
48 _spu_rev_attr.feedback = 0;
49 _spu_rev_attr.delay = 0;
50 break;
51 }
52 v4 = &_spu_RXX[512 * _spu_core];
53 v5 = (v4[205] >> 7) & 1;
54 if ( v5 )
55 v4[205] &= ~0x80u;
56 v6 = &_spu_RXX[20 * _spu_core];
57 v6[946] = 0;
58 v6[947] = 0;
59 _spu_rev_attr.depth.left = 0;
60 _spu_rev_attr.depth.right = 0;
61 _spu_setReverbAttr(&v7);
62 if ( v2 )
63 SpuClearReverbWorkArea(v1);
64 _spu_FsetRXX(368, _spu_rev_offsetaddr, 1);
65 if ( v5 )
66 {
67 _spu_RXX[512 * _spu_core + 205] |= 0x80u;
68 }
69 return 0;
70}