46
46
#define IO_WRITE_PROTO(name) \
47
47
static void name (void *opaque, uint32_t nport, uint32_t val)
49
#define TYPE_GUS "gus"
50
#define GUS(obj) OBJECT_CHECK (GUSState, (obj), TYPE_GUS)
49
52
typedef struct GUSState {
248
251
PORTIO_END_OF_LIST (),
251
static int gus_initfn (ISADevice *dev)
254
static void gus_realizefn (DeviceState *dev, Error **errp)
253
GUSState *s = DO_UPCAST (GUSState, dev, dev);
256
ISADevice *d = ISA_DEVICE(dev);
257
GUSState *s = GUS (dev);
254
258
struct audsettings as;
256
260
AUD_register_card ("gus", &s->card);
273
277
AUD_remove_card (&s->card);
278
error_setg(errp, "No voice");
278
283
s->samples = AUD_get_buffer_size_out (s->voice) >> s->shift;
279
284
s->mixbuf = g_malloc0 (s->samples << s->shift);
281
isa_register_portio_list (dev, s->port, gus_portio_list1, s, "gus");
282
isa_register_portio_list (dev, (s->port + 0x100) & 0xf00,
286
isa_register_portio_list (d, s->port, gus_portio_list1, s, "gus");
287
isa_register_portio_list (d, (s->port + 0x100) & 0xf00,
283
288
gus_portio_list2, s, "gus");
285
290
DMA_register_channel (s->emu.gusdma, GUS_read_DMA, s);
286
291
s->emu.himemaddr = s->himem;
287
292
s->emu.gusdatapos = s->emu.himemaddr + 1024 * 1024 + 32;
288
293
s->emu.opaque = s;
289
isa_init_irq (dev, &s->pic, s->emu.gusirq);
294
isa_init_irq (d, &s->pic, s->emu.gusirq);
291
296
AUD_set_active_out (s->voice, 1);
296
299
static int GUS_init (ISABus *bus)
298
isa_create_simple (bus, "gus");
301
isa_create_simple (bus, TYPE_GUS);
310
313
static void gus_class_initfn (ObjectClass *klass, void *data)
312
315
DeviceClass *dc = DEVICE_CLASS (klass);
313
ISADeviceClass *ic = ISA_DEVICE_CLASS (klass);
314
ic->init = gus_initfn;
317
dc->realize = gus_realizefn;
318
set_bit(DEVICE_CATEGORY_SOUND, dc->categories);
315
319
dc->desc = "Gravis Ultrasound GF1";
316
320
dc->vmsd = &vmstate_gus;
317
321
dc->props = gus_properties;
320
324
static const TypeInfo gus_info = {
322
326
.parent = TYPE_ISA_DEVICE,
323
327
.instance_size = sizeof (GUSState),
324
328
.class_init = gus_class_initfn,