PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_crwa.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 SpuClearReverbWorkArea(int mode)
14{
15 int ck_1;
16 unsigned int m;
17 unsigned int n;
18 u32 t;
19 int ck_2;
20 void (*bk)(void);
21
22 bk = 0;
23 ck_1 = 0;
24 if ( (unsigned int)mode >= SPU_REV_MODE_MAX )
25 return -1;
26 if ( mode )
27 {
28 m = 8 * _spu_rev_workareasize[mode];
29 n = (SpuGetReverbEndAddr() - m) >> 1;
30 }
31 else
32 {
33 m = 32;
34 n = 2097120;
35 }
36 printf("### addr = %u size = %u\n", n, m);
37 t = _spu_transMode;
38 if ( _spu_transMode == 1 )
39 {
40 _spu_transMode = 0;
41 ck_1 = 1;
42 }
43 ck_2 = 1;
44 if ( _spu_transferCallback )
45 {
46 bk = _spu_transferCallback;
47 _spu_transferCallback = 0;
48 }
49 while ( ck_2 )
50 {
51 int m_tmp;
52
53 m_tmp = 1024;
54 if ( m < 0x401 )
55 {
56 m_tmp = m;
57 ck_2 = 0;
58 }
59 gDMADeliverEvent = 0;
60 _spu_t(2, n);
61 _spu_t(1);
62 _spu_t(3, _spu_zerobuf, m_tmp);
63 while ( !gDMADeliverEvent )
64 ;
65 gDMADeliverEvent = 0;
66 m -= 1024;
67 n += 512;
68 }
69 if ( ck_1 )
70 _spu_transMode = t;
71 if ( bk )
72 {
73 _spu_transferCallback = bk;
74 }
75 return 0;
76}