PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
s_sk.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 SpuSetKey(int on_off, unsigned int voice_bit)
14{
15 unsigned int voice_bit_tmp;
16
17 voice_bit_tmp = voice_bit & 0xFFFFFF;
18 switch ( on_off )
19 {
20 case SPU_OFF:
21 if ( (_spu_env & 1) != 0 )
22 {
23 _spu_RQ[2] = voice_bit_tmp & 0xFFFF;
24 _spu_RQ[3] = (voice_bit_tmp >> 16) & 0xFFFF;
25 _spu_RQmask |= 1u;
26 _spu_RQvoice &= ~voice_bit_tmp;
27 if ( (_spu_RQ[0] & (u16)voice_bit_tmp) != 0 )
28 _spu_RQ[0] &= ~(u16)voice_bit_tmp;
29 if ( (_spu_RQ[1] & ((voice_bit_tmp >> 16) & 0xFFFF)) != 0 )
30 _spu_RQ[1] &= ~((voice_bit_tmp >> 16) & 0xFFFF);
31 }
32 else
33 {
34 _spu_RXX[512 * _spu_core + 210] = voice_bit_tmp & 0xFFFF;
35 _spu_RXX[512 * _spu_core + 211] = (voice_bit_tmp >> 16) & 0xFFFF;
36 _spu_keystat[_spu_core] &= ~voice_bit_tmp;
37 }
38 break;
39 case SPU_ON:
40 if ( (_spu_env & 1) != 0 )
41 {
42 _spu_RQ[0] = voice_bit_tmp & 0xFFFF;
43 _spu_RQ[1] = (voice_bit_tmp >> 16) & 0xFFFF;
44 _spu_RQmask |= 1u;
45 _spu_RQvoice |= voice_bit_tmp;
46 if ( (_spu_RQ[2] & (u16)voice_bit_tmp) != 0 )
47 _spu_RQ[2] &= ~(u16)voice_bit_tmp;
48 if ( (_spu_RQ[3] & ((voice_bit_tmp >> 16) & 0xFFFF)) != 0 )
49 _spu_RQ[3] &= ~((voice_bit_tmp >> 16) & 0xFFFF);
50 }
51 else
52 {
53 _spu_RXX[512 * _spu_core + 208] = voice_bit_tmp & 0xFFFF;
54 _spu_RXX[512 * _spu_core + 209] = (voice_bit_tmp >> 16) & 0xFFFF;
55 _spu_keystat[_spu_core] |= voice_bit_tmp;
56 }
57 break;
58 default:
59 break;
60 }
61}