Lines Matching +full:left +full:- +full:shift
4 * Copyright (c) 2004-2005 Vassili Karpov (malc)
31 #include "hw/qdev-properties.h"
52 #define SHIFT 1 macro
73 int left, pos, samples; member
81 OPLTimerOver (s->opl, n); in adlib_stop_opl_timer()
82 s->ticking[n] = 0; in adlib_stop_opl_timer()
90 if (s->ticking[i]) { in adlib_kill_timers()
93 delta = AUD_get_elapsed_usec_out (s->voice, &s->ats); in adlib_kill_timers()
97 s->dexp[i] / 1000000.0, in adlib_kill_timers()
98 delta >= s->dexp[i] in adlib_kill_timers()
100 if (ADLIB_KILL_TIMERS || delta >= s->dexp[i]) { in adlib_kill_timers()
102 AUD_init_time_stamp_out (s->voice, &s->ats); in adlib_kill_timers()
113 s->active = 1; in adlib_write()
114 AUD_set_active_out (s->voice, 1); in adlib_write()
118 OPLWrite (s->opl, a, val); in adlib_write()
127 return OPLRead (s->opl, a); in adlib_read()
140 s->ticking[n] = 0; in timer_handler()
144 s->ticking[n] = 1; in timer_handler()
148 s->exp[n] = exp; in timer_handler()
151 s->dexp[n] = interval_Sec * 1000000.0; in timer_handler()
152 AUD_init_time_stamp_out (s->voice, &s->ats); in timer_handler()
158 int pos = s->pos; in write_audio()
163 nbytes = samples << SHIFT; in write_audio()
165 s->voice, in write_audio()
166 s->mixbuf + (pos << (SHIFT - 1)), in write_audio()
171 wsampl = wbytes >> SHIFT; in write_audio()
173 samples -= wsampl; in write_audio()
174 pos = (pos + wsampl) % s->samples; in write_audio()
191 samples = free >> SHIFT; in adlib_callback()
192 if (!(s->active && s->enabled) || !samples) { in adlib_callback()
196 to_play = MIN (s->left, samples); in adlib_callback()
201 s->left -= written; in adlib_callback()
202 samples -= written; in adlib_callback()
203 to_play -= written; in adlib_callback()
204 s->pos = (s->pos + written) % s->samples; in adlib_callback()
211 samples = MIN (samples, s->samples - s->pos); in adlib_callback()
216 YM3812UpdateOne (s->opl, s->mixbuf + s->pos, samples); in adlib_callback()
222 samples -= written; in adlib_callback()
223 s->pos = (s->pos + written) % s->samples; in adlib_callback()
226 s->left = samples; in adlib_callback()
234 if (s->opl) { in Adlib_fini()
235 OPLDestroy (s->opl); in Adlib_fini()
236 s->opl = NULL; in Adlib_fini()
239 g_free(s->mixbuf); in Adlib_fini()
241 s->active = 0; in Adlib_fini()
242 s->enabled = 0; in Adlib_fini()
243 AUD_remove_card (&s->card); in Adlib_fini()
258 if (!AUD_register_card ("adlib", &s->card, errp)) { in adlib_realizefn()
262 s->opl = OPLCreate (3579545, s->freq); in adlib_realizefn()
263 if (!s->opl) { in adlib_realizefn()
264 error_setg (errp, "OPLCreate %d failed", s->freq); in adlib_realizefn()
268 OPLSetTimerHandler(s->opl, timer_handler, s); in adlib_realizefn()
269 s->enabled = 1; in adlib_realizefn()
272 as.freq = s->freq; in adlib_realizefn()
273 as.nchannels = SHIFT; in adlib_realizefn()
277 s->voice = AUD_open_out ( in adlib_realizefn()
278 &s->card, in adlib_realizefn()
279 s->voice, in adlib_realizefn()
285 if (!s->voice) { in adlib_realizefn()
291 s->samples = AUD_get_buffer_size_out (s->voice) >> SHIFT; in adlib_realizefn()
292 s->mixbuf = g_malloc0 (s->samples << SHIFT); in adlib_realizefn()
294 adlib_portio_list[0].offset = s->port; in adlib_realizefn()
295 adlib_portio_list[1].offset = s->port + 8; in adlib_realizefn()
296 portio_list_init (&s->port_list, OBJECT(s), adlib_portio_list, s, "adlib"); in adlib_realizefn()
297 portio_list_add (&s->port_list, isa_address_space_io(&s->parent_obj), 0); in adlib_realizefn()
310 dc->realize = adlib_realizefn; in adlib_class_initfn()
311 set_bit(DEVICE_CATEGORY_SOUND, dc->categories); in adlib_class_initfn()
312 dc->desc = ADLIB_DESC; in adlib_class_initfn()