283
283
AUD_remove_card (&s->card);
286
static int Adlib_initfn (ISADevice *dev)
286
static MemoryRegionPortio adlib_portio_list[] = {
287
{ 0, 4, 1, .read = adlib_read, .write = adlib_write, },
288
{ 0, 2, 1, .read = adlib_read, .write = adlib_write, },
289
{ 0x388, 4, 1, .read = adlib_read, .write = adlib_write, },
290
PORTIO_END_OF_LIST(),
293
static void adlib_realizefn (DeviceState *dev, Error **errp)
288
295
AdlibState *s = ADLIB(dev);
296
PortioList *port_list = g_new(PortioList, 1);
289
297
struct audsettings as;
291
299
if (glob_adlib) {
292
dolog ("Cannot create more than 1 adlib device\n");
300
error_setg (errp, "Cannot create more than 1 adlib device");
297
305
#ifdef HAS_YMF262
298
306
if (YMF262Init (1, 14318180, s->freq)) {
299
dolog ("YMF262Init %d failed\n", s->freq);
307
error_setg (errp, "YMF262Init %d failed", s->freq);
303
311
YMF262SetTimerHandler (0, timer_handler, 0);
307
315
s->opl = OPLCreate (OPL_TYPE_YM3812, 3579545, s->freq);
309
dolog ("OPLCreate %d failed\n", s->freq);
317
error_setg (errp, "OPLCreate %d failed", s->freq);
313
321
OPLSetTimerHandler (s->opl, timer_handler, 0);
343
error_setg (errp, "Initializing audio voice failed");
338
347
s->samples = AUD_get_buffer_size_out (s->voice) >> SHIFT;
339
348
s->mixbuf = g_malloc0 (s->samples << SHIFT);
341
register_ioport_read (0x388, 4, 1, adlib_read, s);
342
register_ioport_write (0x388, 4, 1, adlib_write, s);
344
register_ioport_read (s->port, 4, 1, adlib_read, s);
345
register_ioport_write (s->port, 4, 1, adlib_write, s);
347
register_ioport_read (s->port + 8, 2, 1, adlib_read, s);
348
register_ioport_write (s->port + 8, 2, 1, adlib_write, s);
350
adlib_portio_list[1].offset = s->port;
351
adlib_portio_list[2].offset = s->port + 8;
352
portio_list_init (port_list, OBJECT(s), adlib_portio_list, s, "adlib");
353
portio_list_add (port_list, isa_address_space_io(&s->parent_obj), 0);
353
356
static Property adlib_properties[] = {
359
362
static void adlib_class_initfn (ObjectClass *klass, void *data)
361
364
DeviceClass *dc = DEVICE_CLASS (klass);
362
ISADeviceClass *ic = ISA_DEVICE_CLASS (klass);
363
ic->init = Adlib_initfn;
366
dc->realize = adlib_realizefn;
367
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
364
368
dc->desc = ADLIB_DESC;
365
369
dc->props = adlib_properties;