PS2SDK
PS2 Homebrew Libraries
Loading...
Searching...
No Matches
vm_aloc2.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 "libsnd2_internal.h"
12
13void _SsVmDoAllocate(void)
14{
15 int v0;
16 u16 vag_spu_addr;
17 const VagAtr *v6;
18 s16 damper;
19 libsnd2_spu_voice_t *voice_struct;
20
21 voice_struct = &_svm_voice[_svm_cur.m_voice_idx];
22 voice_struct->m_key_stat = 0x7FFF;
23 for ( v0 = 0; v0 < 16; v0 += 1 )
24 {
25 _svm_envx_hist[v0] &= ~(1 << (_svm_cur.m_voice_idx & 0xFF));
26 }
27 if ( (_svm_cur.m_vag_idx2 & 1) != 0 )
28 {
29 vag_spu_addr = _svm_pg[(_svm_cur.m_vag_idx2 - 1) / 2].m_vag_spu_addr_hi;
30 }
31 else
32 {
33 vag_spu_addr = _svm_pg[(_svm_cur.m_vag_idx2 - 1) / 2].m_vag_spu_addr_lo;
34 }
35 _svm_sreg_buf2[_svm_cur.m_voice_idx].m_vag_spu_addr = vag_spu_addr;
36 _svm_sreg_dirty[_svm_cur.m_voice_idx] |= 8u;
37 _svm_sreg_buf2[_svm_cur.m_voice_idx].m_vab_spu_offset = gVabOffet[_svm_cur.m_vab_id];
38 v6 = &_svm_tn[16 * _svm_cur.m_fake_program + _svm_cur.m_tone];
39 _svm_sreg_buf[_svm_cur.m_voice_idx].m_adsr1 = v6->adsr1;
40 damper = _svm_damper + (v6->adsr2 & 0x1F);
41 if ( damper >= 32 )
42 damper = 31;
43 _svm_sreg_buf[_svm_cur.m_voice_idx].m_adsr2 = damper | (v6->adsr2 & ~0x1F);
44 _svm_sreg_dirty[_svm_cur.m_voice_idx] |= 0x30u;
45}