11#include "libsnd2_internal.h"
13void _SsVmDoAllocate(
void)
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 )
25 _svm_envx_hist[v0] &= ~(1 << (_svm_cur.m_voice_idx & 0xFF));
27 if ( (_svm_cur.m_vag_idx2 & 1) != 0 )
29 vag_spu_addr = _svm_pg[(_svm_cur.m_vag_idx2 - 1) / 2].m_vag_spu_addr_hi;
33 vag_spu_addr = _svm_pg[(_svm_cur.m_vag_idx2 - 1) / 2].m_vag_spu_addr_lo;
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);
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;