Revision d329a6fb hw/sb16.c

b/hw/sb16.c
26 26
#define MIN(a, b) ((a)>(b)?(b):(a))
27 27
#define LENOFA(a) ((int) (sizeof(a)/sizeof(a[0])))
28 28

  
29
#define log(...) fprintf (stderr, "sb16: " __VA_ARGS__)
29
#define log(...) do {                           \
30
    fprintf (stderr, "sb16: " __VA_ARGS__);     \
31
    fputc ('\n', stderr);                       \
32
} while (0)
30 33

  
31 34
/* #define DEBUG_SB16 */
32 35
#ifdef DEBUG_SB16
......
44 47
#define IO_WRITE_PROTO(name) \
45 48
    void name (void *opaque, uint32_t nport, uint32_t val)
46 49

  
50
static const char e3[] = "COPYRIGHT (C) CREATIVE TECHNOLOGY LTD, 1992.";
51

  
47 52
static struct {
48 53
    int ver_lo;
49 54
    int ver_hi;
......
76 81
    int v2x6;
77 82

  
78 83
    uint8_t in_data[10];
79
    uint8_t out_data[10];
84
    uint8_t out_data[50];
80 85

  
81 86
    int left_till_irq;
82 87

  
......
223 228
            /* IMS uses those when probing for sound devices */
224 229
            return;
225 230

  
231
        case 0x04:
232
            dsp->needed_bytes = 1;
233
            break;
234

  
235
        case 0x05:
236
        case 0x0e:
237
            dsp->needed_bytes = 2;
238
            break;
239

  
240
        case 0x0f:
241
            dsp->needed_bytes = 1;
242
            dsp_out_data (dsp, 0);
243
            break;
244

  
226 245
        case 0x10:
227 246
            dsp->needed_bytes = 1;
228 247
            break;
......
274 293
                uint8_t d0;
275 294

  
276 295
                d0 = 4;
277
                if (dsp->fmt_signed) d0 |= 16;
278
                if (dsp->fmt_stereo) d0 |= 32;
296
                /* if (dsp->fmt_signed) d0 |= 16; */
297
                /* if (dsp->fmt_stereo) d0 |= 32; */
279 298
                dma_cmd (cmd == 0x90 ? 0xc4 : 0xc0, d0, -1);
280 299
                cmd = -1;
281 300
                break;
......
324 343
            dsp_out_data(dsp, sb.ver_hi);
325 344
            return;
326 345

  
346
        case 0xe3:
347
            {
348
                int i;
349
                for (i = sizeof (e3) - 1; i >= 0; --i)
350
                    dsp_out_data (dsp, e3[i]);
351
                return;
352
            }
353

  
327 354
        case 0xf2:
328 355
            dsp_out_data(dsp, 0xaa);
329 356
            dsp->mixer_regs[0x82] |= dsp->mixer_regs[0x80];
......
360 387
    }
361 388
    else {
362 389
        switch (dsp->cmd) {
390
        case 0x05:
391
        case 0x04:
392
        case 0x0e:
393
        case 0x0f:
394
            break;
363 395

  
364 396
        case 0x10:
365 397
            break;
......
425 457

  
426 458
    iport = nport - sb.port;
427 459

  
460
    ldebug ("write %#x %#x\n", nport, iport);
428 461
    switch (iport) {
429 462
    case 0x6:
463
        control (0);
430 464
        if (0 == val)
431 465
            dsp->v2x6 = 0;
432 466
        else if ((1 == val) && (0 == dsp->v2x6)) {
......
477 511
        if (dsp->out_data_len) {
478 512
            retval = dsp->out_data[--dsp->out_data_len];
479 513
        } else {
480
            log("empty output buffer\n");
514
            log("empty output buffer");
481 515
            goto error;
482 516
        }
483 517
        break;
......
487 521
        break;
488 522

  
489 523
    case 0xd:                   /* timer interrupt clear */
490
        log("timer interrupt clear\n");
524
        log("timer interrupt clear");
491 525
        goto error;
492 526

  
493 527
    case 0xe:                   /* data available status | irq 8 ack */
......
669 703
    case 10:
670 704
        return 8;
671 705
    default:
672
        log ("bad irq %d\n", irq);
706
        log ("bad irq %d", irq);
673 707
        return 2;
674 708
    }
675 709
}
......
687 721
    case 8:
688 722
        return 10;
689 723
    default:
690
        log ("bad irq magic %d\n", magic);
724
        log ("bad irq magic %d", magic);
691 725
        return 2;
692 726
    }
693 727
}

Also available in: Unified diff