11#include "libsnd2_internal.h"
14int _snd_seq_interval = 1;
17void _SsTrapIntrVSync(
void)
19 if ( _snd_seq_tick_env.m_vsync_callback )
20 _snd_seq_tick_env.m_vsync_callback();
21 _snd_seq_tick_env.m_tick_callback();
26void _SsSeqCalledTbyT_1per2(
void)
33 _snd_seq_tick_env.m_tick_callback();
42int _SsTrapIntrProcIOP(
void *userdata)
44 _snd_seq_tick_env.m_tick_callback();
45 return *(u32 *)userdata;
48static void _SsStart(
int start_param)
57 rcount_target = 0x1046;
59 for ( wait_tmp = 0; wait_tmp < 999; wait_tmp += 1 )
61 __asm__ __volatile__(
"" :
"+g"(wait_tmp) : :);
63 _snd_seq_tick_env.m_alarm_tick = 6;
64 _snd_seq_tick_env.m_vsync_tick = 0;
65 _snd_seq_tick_env.m_unk11 = 0;
66 _snd_seq_tick_env.m_vsync_callback = 0;
67 switch ( _snd_seq_tick_env.m_tick_mode )
70 _snd_seq_tick_env.m_alarm_tick = 127;
76 rcount_target = 0x208c;
80 _snd_seq_tick_env.m_alarm_tick = 0;
82 _snd_seq_tick_env.m_vsync_tick = 1;
91 if ( _snd_seq_tick_env.m_manual_tick )
94 if ( _snd_seq_tick_env.m_tick_mode < 70 )
96 _snd_seq_tick_env.m_unk11 += 1;
101 if ( _snd_seq_tick_env.m_tick_mode == 0 )
103 rcount_target = -1000000;
109 if ( _snd_seq_tick_env.m_vsync_tick )
111 RegisterVblankHandler(0, 64, _SsTrapIntrProcIOP, &_snd_seq_interval);
114 else if ( _snd_seq_tick_env.m_alarm_tick )
116 USec2SysClock(rcount_target, &iop_clock);
117 _snd_seq_interval = iop_clock.lo;
118 SetAlarm(&iop_clock, (
unsigned int (*)(
void *))_SsTrapIntrProcIOP, &_snd_seq_interval);
123 RegisterVblankHandler(0, 64, _SsTrapIntrProcIOP, &_snd_seq_interval);