Revision bc0b1dc1 hw/sb16.c

b/hw/sb16.c
37 37
    abort ();                                   \
38 38
} while (0)
39 39

  
40
/* #define DEBUG_SB16 */
40 41
#ifdef DEBUG_SB16
41 42
#define lwarn(...) fprintf (stderr, "sb16: " __VA_ARGS__)
42 43
#define linfo(...) fprintf (stderr, "sb16: " __VA_ARGS__)
......
60 61
    int hdma;
61 62
    int port;
62 63
    int mix_block;
63
} sb = {4, 5, 5, 1, 5, 0x220, -1};
64
} sb = {5, 4, 5, 1, 5, 0x220, -1};
64 65

  
65 66
static int mix_block, noirq;
66 67

  
......
205 206
{
206 207
    char *msg;
207 208

  
208
    msg = (char *)-1;
209
    msg = (char *) -1;
209 210

  
210 211
    linfo ("%#x\n", cmd);
211 212

  
......
225 226
    }
226 227
    else {
227 228
        switch (cmd) {
229
        case 0x00:
230
        case 0x03:
231
        case 0xe7:
232
            /* IMS uses those when probing for sound devices */
233
            return;
234

  
228 235
        case 0x10:
229 236
            dsp.needed_bytes = 1;
230 237
            break;
......
328 335

  
329 336
        case 0xf2:
330 337
            dsp.out_data[dsp.out_data_len++] = 0xaa;
331
            mixer.regs[0x82] |= 1;
338
            mixer.regs[0x82] |= mixer.regs[0x80];
332 339
            pic_set_irq (sb.irq, 1);
333 340
            return;
334 341

  
......
500 507
        goto error;
501 508

  
502 509
    case 0xe:                   /* data available status | irq 8 ack */
510
        /* XXX drop pic irq line here? */
511
        ldebug ("8 ack\n");
503 512
        retval = (0 == dsp.out_data_len) ? 0 : 0x80;
513
        mixer.regs[0x82] &= ~mixer.regs[0x80];
514
        pic_set_irq (sb.irq, 0);
504 515
        break;
505 516

  
506 517
    case 0xf:                   /* irq 16 ack */
507
        retval = 0xff;
508
        mixer.regs[0x82] &= ~2;
518
        /* XXX drop pic irq line here? */
509 519
        ldebug ("16 ack\n");
520
        retval = 0xff;
521
        mixer.regs[0x82] &= ~mixer.regs[0x80];
522
        pic_set_irq (sb.irq, 0);
510 523
        break;
511 524

  
512 525
    default:
......
514 527
    }
515 528

  
516 529
    if ((0xc != iport) && (0xe != iport)) {
517
        ldebug ("(nport=%#x, size=%d) iport %#x = %#x\n",
518
                nport, size, iport, retval);
530
        ldebug ("nport=%#x iport %#x = %#x\n",
531
                nport, iport, retval);
519 532
    }
520 533

  
521 534
    return retval;
......
617 630

  
618 631
    ldebug ("addr:%#010x free:%d till:%d size:%d\n",
619 632
            addr, free, till, size);
620
/*   linfo ("pos %d free %d size %d till %d copy %d auto %d noirq %d\n", */
621
/*       dsp.dma_pos, free, size, till, copy, dsp.dma_auto, noirq); */
622 633
    if (till <= copy) {
623 634
        if (0 == dsp.dma_auto) {
624 635
            copy = till;
......
631 642

  
632 643
    if (dsp.left_till_irq <= 0) {
633 644
        mixer.regs[0x82] |= mixer.regs[0x80];
634
        if (0 == noirq)
645
        if (0 == noirq) {
646
            ldebug ("request irq\n");
635 647
            *_irq = sb.irq;
648
        }
636 649

  
637 650
        if (0 == dsp.dma_auto) {
638 651
            control (0);

Also available in: Unified diff