亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sb16.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 3 頁
字號:
{    SB16State *s = opaque;    int iport, retval, ack = 0;    iport = nport - s->port;    switch (iport) {    case 0x06:                  /* reset */        retval = 0xff;        break;    case 0x0a:                  /* read data */        if (s->out_data_len) {            retval = s->out_data[--s->out_data_len];            s->last_read_byte = retval;        }        else {            if (s->cmd != -1) {                dolog ("empty output buffer for command %#x\n",                       s->cmd);            }            retval = s->last_read_byte;            /* goto error; */        }        break;    case 0x0c:                  /* 0 can write */        retval = s->can_write ? 0 : 0x80;        break;    case 0x0d:                  /* timer interrupt clear */        /* dolog ("timer interrupt clear\n"); */        retval = 0;        break;    case 0x0e:                  /* data available status | irq 8 ack */        retval = (!s->out_data_len || s->highspeed) ? 0 : 0x80;        if (s->mixer_regs[0x82] & 1) {            ack = 1;            s->mixer_regs[0x82] &= 1;            qemu_irq_lower (s->pic[s->irq]);        }        break;    case 0x0f:                  /* irq 16 ack */        retval = 0xff;        if (s->mixer_regs[0x82] & 2) {            ack = 1;            s->mixer_regs[0x82] &= 2;            qemu_irq_lower (s->pic[s->irq]);        }        break;    default:        goto error;    }    if (!ack) {        ldebug ("read %#x -> %#x\n", nport, retval);    }    return retval; error:    dolog ("warning: dsp_read %#x error\n", nport);    return 0xff;}static void reset_mixer (SB16State *s){    int i;    memset (s->mixer_regs, 0xff, 0x7f);    memset (s->mixer_regs + 0x83, 0xff, sizeof (s->mixer_regs) - 0x83);    s->mixer_regs[0x02] = 4;    /* master volume 3bits */    s->mixer_regs[0x06] = 4;    /* MIDI volume 3bits */    s->mixer_regs[0x08] = 0;    /* CD volume 3bits */    s->mixer_regs[0x0a] = 0;    /* voice volume 2bits */    /* d5=input filt, d3=lowpass filt, d1,d2=input source */    s->mixer_regs[0x0c] = 0;    /* d5=output filt, d1=stereo switch */    s->mixer_regs[0x0e] = 0;    /* voice volume L d5,d7, R d1,d3 */    s->mixer_regs[0x04] = (4 << 5) | (4 << 1);    /* master ... */    s->mixer_regs[0x22] = (4 << 5) | (4 << 1);    /* MIDI ... */    s->mixer_regs[0x26] = (4 << 5) | (4 << 1);    for (i = 0x30; i < 0x48; i++) {        s->mixer_regs[i] = 0x20;    }}static IO_WRITE_PROTO(mixer_write_indexb){    SB16State *s = opaque;    (void) nport;    s->mixer_nreg = val;}static IO_WRITE_PROTO(mixer_write_datab){    SB16State *s = opaque;    (void) nport;    ldebug ("mixer_write [%#x] <- %#x\n", s->mixer_nreg, val);    switch (s->mixer_nreg) {    case 0x00:        reset_mixer (s);        break;    case 0x80:        {            int irq = irq_of_magic (val);            ldebug ("setting irq to %d (val=%#x)\n", irq, val);            if (irq > 0) {                s->irq = irq;            }        }        break;    case 0x81:        {            int dma, hdma;            dma = lsbindex (val & 0xf);            hdma = lsbindex (val & 0xf0);            if (dma != s->dma || hdma != s->hdma) {                dolog (                    "attempt to change DMA "                    "8bit %d(%d), 16bit %d(%d) (val=%#x)\n",                    dma, s->dma, hdma, s->hdma, val);            }#if 0            s->dma = dma;            s->hdma = hdma;#endif        }        break;    case 0x82:        dolog ("attempt to write into IRQ status register (val=%#x)\n",               val);        return;    default:        if (s->mixer_nreg >= 0x80) {            ldebug ("attempt to write mixer[%#x] <- %#x\n", s->mixer_nreg, val);        }        break;    }    s->mixer_regs[s->mixer_nreg] = val;}static IO_WRITE_PROTO(mixer_write_indexw){    mixer_write_indexb (opaque, nport, val & 0xff);    mixer_write_datab (opaque, nport, (val >> 8) & 0xff);}static IO_READ_PROTO(mixer_read){    SB16State *s = opaque;    (void) nport;#ifndef DEBUG_SB16_MOST    if (s->mixer_nreg != 0x82) {        ldebug ("mixer_read[%#x] -> %#x\n",                s->mixer_nreg, s->mixer_regs[s->mixer_nreg]);    }#else    ldebug ("mixer_read[%#x] -> %#x\n",            s->mixer_nreg, s->mixer_regs[s->mixer_nreg]);#endif    return s->mixer_regs[s->mixer_nreg];}static int write_audio (SB16State *s, int nchan, int dma_pos,                        int dma_len, int len){    int temp, net;    uint8_t tmpbuf[4096];    temp = len;    net = 0;    while (temp) {        int left = dma_len - dma_pos;        int copied;        size_t to_copy;        to_copy = audio_MIN (temp, left);        if (to_copy > sizeof (tmpbuf)) {            to_copy = sizeof (tmpbuf);        }        copied = DMA_read_memory (nchan, tmpbuf, dma_pos, to_copy);        copied = AUD_write (s->voice, tmpbuf, copied);        temp -= copied;        dma_pos = (dma_pos + copied) % dma_len;        net += copied;        if (!copied) {            break;        }    }    return net;}static int SB_read_DMA (void *opaque, int nchan, int dma_pos, int dma_len){    SB16State *s = opaque;    int till, copy, written, free;    if (s->left_till_irq < 0) {        s->left_till_irq = s->block_size;    }    if (s->voice) {        free = s->audio_free & ~s->align;        if ((free <= 0) || !dma_len) {            return dma_pos;        }    }    else {        free = dma_len;    }    copy = free;    till = s->left_till_irq;#ifdef DEBUG_SB16_MOST    dolog ("pos:%06d %d till:%d len:%d\n",           dma_pos, free, till, dma_len);#endif    if (till <= copy) {        if (0 == s->dma_auto) {            copy = till;        }    }    written = write_audio (s, nchan, dma_pos, dma_len, copy);    dma_pos = (dma_pos + written) % dma_len;    s->left_till_irq -= written;    if (s->left_till_irq <= 0) {        s->mixer_regs[0x82] |= (nchan & 4) ? 2 : 1;        qemu_irq_raise (s->pic[s->irq]);        if (0 == s->dma_auto) {            control (s, 0);            speaker (s, 0);        }    }#ifdef DEBUG_SB16_MOST    ldebug ("pos %5d free %5d size %5d till % 5d copy %5d written %5d size %5d\n",            dma_pos, free, dma_len, s->left_till_irq, copy, written,            s->block_size);#endif    while (s->left_till_irq <= 0) {        s->left_till_irq = s->block_size + s->left_till_irq;    }    return dma_pos;}static void SB_audio_callback (void *opaque, int free){    SB16State *s = opaque;    s->audio_free = free;}static void SB_save (QEMUFile *f, void *opaque){    SB16State *s = opaque;    qemu_put_be32 (f, s->irq);    qemu_put_be32 (f, s->dma);    qemu_put_be32 (f, s->hdma);    qemu_put_be32 (f, s->port);    qemu_put_be32 (f, s->ver);    qemu_put_be32 (f, s->in_index);    qemu_put_be32 (f, s->out_data_len);    qemu_put_be32 (f, s->fmt_stereo);    qemu_put_be32 (f, s->fmt_signed);    qemu_put_be32 (f, s->fmt_bits);    qemu_put_be32s (f, &s->fmt);    qemu_put_be32 (f, s->dma_auto);    qemu_put_be32 (f, s->block_size);    qemu_put_be32 (f, s->fifo);    qemu_put_be32 (f, s->freq);    qemu_put_be32 (f, s->time_const);    qemu_put_be32 (f, s->speaker);    qemu_put_be32 (f, s->needed_bytes);    qemu_put_be32 (f, s->cmd);    qemu_put_be32 (f, s->use_hdma);    qemu_put_be32 (f, s->highspeed);    qemu_put_be32 (f, s->can_write);    qemu_put_be32 (f, s->v2x6);    qemu_put_8s (f, &s->csp_param);    qemu_put_8s (f, &s->csp_value);    qemu_put_8s (f, &s->csp_mode);    qemu_put_8s (f, &s->csp_param);    qemu_put_buffer (f, s->csp_regs, 256);    qemu_put_8s (f, &s->csp_index);    qemu_put_buffer (f, s->csp_reg83, 4);    qemu_put_be32 (f, s->csp_reg83r);    qemu_put_be32 (f, s->csp_reg83w);    qemu_put_buffer (f, s->in2_data, sizeof (s->in2_data));    qemu_put_buffer (f, s->out_data, sizeof (s->out_data));    qemu_put_8s (f, &s->test_reg);    qemu_put_8s (f, &s->last_read_byte);    qemu_put_be32 (f, s->nzero);    qemu_put_be32 (f, s->left_till_irq);    qemu_put_be32 (f, s->dma_running);    qemu_put_be32 (f, s->bytes_per_second);    qemu_put_be32 (f, s->align);    qemu_put_be32 (f, s->mixer_nreg);    qemu_put_buffer (f, s->mixer_regs, 256);}static int SB_load (QEMUFile *f, void *opaque, int version_id){    SB16State *s = opaque;    if (version_id != 1) {        return -EINVAL;    }    s->irq=qemu_get_be32 (f);    s->dma=qemu_get_be32 (f);    s->hdma=qemu_get_be32 (f);    s->port=qemu_get_be32 (f);    s->ver=qemu_get_be32 (f);    s->in_index=qemu_get_be32 (f);    s->out_data_len=qemu_get_be32 (f);    s->fmt_stereo=qemu_get_be32 (f);    s->fmt_signed=qemu_get_be32 (f);    s->fmt_bits=qemu_get_be32 (f);    qemu_get_be32s (f, &s->fmt);    s->dma_auto=qemu_get_be32 (f);    s->block_size=qemu_get_be32 (f);    s->fifo=qemu_get_be32 (f);    s->freq=qemu_get_be32 (f);    s->time_const=qemu_get_be32 (f);    s->speaker=qemu_get_be32 (f);    s->needed_bytes=qemu_get_be32 (f);    s->cmd=qemu_get_be32 (f);    s->use_hdma=qemu_get_be32 (f);    s->highspeed=qemu_get_be32 (f);    s->can_write=qemu_get_be32 (f);    s->v2x6=qemu_get_be32 (f);    qemu_get_8s (f, &s->csp_param);    qemu_get_8s (f, &s->csp_value);    qemu_get_8s (f, &s->csp_mode);    qemu_get_8s (f, &s->csp_param);    qemu_get_buffer (f, s->csp_regs, 256);    qemu_get_8s (f, &s->csp_index);    qemu_get_buffer (f, s->csp_reg83, 4);    s->csp_reg83r=qemu_get_be32 (f);    s->csp_reg83w=qemu_get_be32 (f);    qemu_get_buffer (f, s->in2_data, sizeof (s->in2_data));    qemu_get_buffer (f, s->out_data, sizeof (s->out_data));    qemu_get_8s (f, &s->test_reg);    qemu_get_8s (f, &s->last_read_byte);    s->nzero=qemu_get_be32 (f);    s->left_till_irq=qemu_get_be32 (f);    s->dma_running=qemu_get_be32 (f);    s->bytes_per_second=qemu_get_be32 (f);    s->align=qemu_get_be32 (f);    s->mixer_nreg=qemu_get_be32 (f);    qemu_get_buffer (f, s->mixer_regs, 256);    if (s->voice) {        AUD_close_out (&s->card, s->voice);        s->voice = NULL;    }    if (s->dma_running) {        if (s->freq) {            audsettings_t as;            s->audio_free = 0;            as.freq = s->freq;            as.nchannels = 1 << s->fmt_stereo;            as.fmt = s->fmt;            as.endianness = 0;            s->voice = AUD_open_out (                &s->card,                s->voice,                "sb16",                s,                SB_audio_callback,                &as                );        }        control (s, 1);        speaker (s, s->speaker);    }    return 0;}int SB16_init (AudioState *audio, qemu_irq *pic){    SB16State *s;    int i;    static const uint8_t dsp_write_ports[] = {0x6, 0xc};    static const uint8_t dsp_read_ports[] = {0x6, 0xa, 0xc, 0xd, 0xe, 0xf};    if (!audio) {        dolog ("No audio state\n");        return -1;    }    s = qemu_mallocz (sizeof (*s));    if (!s) {        dolog ("Could not allocate memory for SB16 (%zu bytes)\n",               sizeof (*s));        return -1;    }    s->cmd = -1;    s->pic = pic;    s->irq = conf.irq;    s->dma = conf.dma;    s->hdma = conf.hdma;    s->port = conf.port;    s->ver = conf.ver_lo | (conf.ver_hi << 8);    s->mixer_regs[0x80] = magic_of_irq (s->irq);    s->mixer_regs[0x81] = (1 << s->dma) | (1 << s->hdma);    s->mixer_regs[0x82] = 2 << 5;    s->csp_regs[5] = 1;    s->csp_regs[9] = 0xf8;    reset_mixer (s);    s->aux_ts = qemu_new_timer (vm_clock, aux_timer, s);    if (!s->aux_ts) {        dolog ("warning: Could not create auxiliary timer\n");    }    for (i = 0; i < LENOFA (dsp_write_ports); i++) {        register_ioport_write (s->port + dsp_write_ports[i], 1, 1, dsp_write, s);    }    for (i = 0; i < LENOFA (dsp_read_ports); i++) {        register_ioport_read (s->port + dsp_read_ports[i], 1, 1, dsp_read, s);    }    register_ioport_write (s->port + 0x4, 1, 1, mixer_write_indexb, s);    register_ioport_write (s->port + 0x4, 1, 2, mixer_write_indexw, s);    register_ioport_read (s->port + 0x5, 1, 1, mixer_read, s);    register_ioport_write (s->port + 0x5, 1, 1, mixer_write_datab, s);    DMA_register_channel (s->hdma, SB_read_DMA, s);    DMA_register_channel (s->dma, SB_read_DMA, s);    s->can_write = 1;    register_savevm ("sb16", 0, 1, SB_save, SB_load, s);    AUD_register_card (audio, "sb16", &s->card);    return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久久精品国产观看| 在线成人小视频| 国产91清纯白嫩初高中在线观看| 午夜国产精品影院在线观看| 一区二区三区日韩欧美| 中文字幕制服丝袜成人av| 久久久精品国产免大香伊| 精品国产凹凸成av人导航| 91精品国产综合久久久久久漫画| 色偷偷久久人人79超碰人人澡| 99久久99久久精品国产片果冻| 高清国产一区二区| 成人va在线观看| 成人app软件下载大全免费| 国产成人亚洲综合a∨婷婷| 国产综合色在线| 国产福利不卡视频| 成人永久看片免费视频天堂| 不卡的av中国片| 91麻豆产精品久久久久久 | 国产清纯在线一区二区www| 久久精品一区二区三区不卡| 国产日韩综合av| 国产精品久久久久影院| 亚洲人成网站色在线观看| 一区二区欧美视频| 日韩激情av在线| 免费在线欧美视频| 国产一区二区三区国产| 成人动漫在线一区| 在线亚洲免费视频| 91精品国产综合久久久蜜臀粉嫩| 精品欧美一区二区在线观看| 国产日产欧美精品一区二区三区| 中文字幕欧美一区| 亚洲国产你懂的| 麻豆视频观看网址久久| 国产成人99久久亚洲综合精品| 91影视在线播放| 欧美美女黄视频| 久久综合国产精品| 国产91对白在线观看九色| 91亚洲大成网污www| 欧美福利视频一区| 国产亚洲午夜高清国产拍精品 | 亚洲视频精选在线| 日韩中文字幕亚洲一区二区va在线| 老司机午夜精品| 国产91高潮流白浆在线麻豆| 91久久精品一区二区| 欧美一级国产精品| 中文字幕一区二区三区乱码在线| 香蕉成人啪国产精品视频综合网 | 色噜噜狠狠成人网p站| 日韩一区二区在线观看视频| 国产精品女上位| 日韩在线一区二区| 成人av在线看| 欧美精选午夜久久久乱码6080| 国产性天天综合网| 日本女人一区二区三区| 成人黄色软件下载| 日韩一级高清毛片| 亚洲精品菠萝久久久久久久| 久久国产精品区| 日本道色综合久久| 国产午夜亚洲精品理论片色戒| 性久久久久久久久| 91丨porny丨户外露出| 欧美xxxx老人做受| 香蕉影视欧美成人| 色中色一区二区| 国产欧美va欧美不卡在线| 日本aⅴ亚洲精品中文乱码| 91在线观看下载| 久久久综合激的五月天| 偷窥少妇高潮呻吟av久久免费| 99视频精品在线| 久久综合九色综合久久久精品综合| 亚洲成人av一区二区三区| 91一区二区在线| 日本一区二区三区在线观看| 日本成人在线不卡视频| 在线欧美一区二区| 中文字幕在线免费不卡| 国产麻豆欧美日韩一区| 91精品综合久久久久久| 一区二区成人在线| 99国产精品一区| 中文字幕乱码日本亚洲一区二区 | 欧美在线免费观看视频| 国产精品欧美久久久久一区二区| 精品一区二区三区免费视频| 欧美丰满一区二区免费视频| 亚洲蜜臀av乱码久久精品蜜桃| 成人午夜伦理影院| 国产蜜臀av在线一区二区三区| 黄色小说综合网站| 精品久久人人做人人爰| 日韩精品成人一区二区在线| 欧美综合久久久| 亚洲女人小视频在线观看| 99视频有精品| 国产精品国产三级国产aⅴ入口| 国产大陆精品国产| 国产女人18毛片水真多成人如厕| 国产高清久久久| 国产亚洲精品免费| 国产成人精品免费| 国产精品久久久久久亚洲毛片| 成人性生交大片免费看视频在线| 国产日韩欧美精品电影三级在线| 国产美女av一区二区三区| 久久夜色精品一区| 国产黄色精品视频| 国产精品的网站| 一本色道久久综合亚洲91| 亚洲精品国产一区二区三区四区在线| 97精品久久久久中文字幕| 亚洲色图在线播放| 欧美亚洲日本国产| 日韩成人精品在线观看| 欧美一二三区在线| 国模冰冰炮一区二区| 日本一区二区视频在线观看| 9色porny自拍视频一区二区| 亚洲精品成人精品456| 欧美日韩精品免费| 麻豆91在线看| 国产欧美一区二区在线观看| 成人97人人超碰人人99| 亚洲黄一区二区三区| 欧美日韩一区二区不卡| 老司机精品视频在线| 日本一区二区视频在线观看| 色综合天天综合在线视频| 婷婷综合在线观看| 久久一区二区三区四区| 成人免费看片app下载| 亚洲黄色av一区| 欧美一区欧美二区| 国产美女久久久久| 亚洲精品中文字幕在线观看| 欧美军同video69gay| 国产一区不卡视频| 国产精品欧美一级免费| 欧美老肥妇做.爰bbww| 国产揄拍国内精品对白| 亚洲人成影院在线观看| 欧美精品一二三| 成人性生交大合| 日日摸夜夜添夜夜添精品视频| 欧美精品一区二区三区蜜桃视频 | 国产盗摄精品一区二区三区在线| 亚洲三级理论片| 日韩情涩欧美日韩视频| 成人午夜激情视频| 天天色天天爱天天射综合| 久久久www成人免费毛片麻豆| 91香蕉视频mp4| 麻豆91免费观看| 亚洲美女在线国产| 精品国产三级电影在线观看| 91香蕉视频在线| 精品一区二区免费在线观看| 亚洲欧美一区二区三区久本道91| 日韩午夜三级在线| 色综合久久久久久久| 国内精品伊人久久久久av影院| 一区二区三区波多野结衣在线观看 | 粉嫩嫩av羞羞动漫久久久| 婷婷亚洲久悠悠色悠在线播放| 欧美国产精品久久| 日韩午夜在线播放| 欧美亚洲动漫制服丝袜| 国产suv精品一区二区6| 石原莉奈在线亚洲二区| 亚洲桃色在线一区| 国产午夜精品一区二区三区四区| 欧美色男人天堂| 99re66热这里只有精品3直播| 精品在线播放免费| 天天av天天翘天天综合网| 中文字幕日韩精品一区| 国产午夜一区二区三区| 精品日韩在线观看| 91精品国产综合久久久蜜臀图片| 色哟哟欧美精品| av一二三不卡影片| 国产成人日日夜夜| 久久精品噜噜噜成人av农村| 亚洲国产精品自拍| 一区二区在线免费观看| 国产精品女人毛片| 中文欧美字幕免费| 久久女同性恋中文字幕| 日韩三级中文字幕| 欧美电影在哪看比较好| 欧美三日本三级三级在线播放| 99久久er热在这里只有精品66|