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

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

?? fdc.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
static uint32_t fdctrl_read_dor (fdctrl_t *fdctrl){    uint32_t retval = 0;    /* Drive motors state indicators */    if (drv0(fdctrl)->drflags & FDRIVE_MOTOR_ON)        retval |= 1 << 5;    if (drv1(fdctrl)->drflags & FDRIVE_MOTOR_ON)        retval |= 1 << 4;    /* DMA enable */    retval |= fdctrl->dma_en << 3;    /* Reset indicator */    retval |= (fdctrl->state & FD_CTRL_RESET) == 0 ? 0x04 : 0;    /* Selected drive */    retval |= fdctrl->cur_drv;    FLOPPY_DPRINTF("digital output register: 0x%02x\n", retval);    return retval;}static void fdctrl_write_dor (fdctrl_t *fdctrl, uint32_t value){    /* Reset mode */    if (fdctrl->state & FD_CTRL_RESET) {        if (!(value & 0x04)) {            FLOPPY_DPRINTF("Floppy controller in RESET state !\n");            return;        }    }    FLOPPY_DPRINTF("digital output register set to 0x%02x\n", value);    /* Drive motors state indicators */    if (value & 0x20)        fd_start(drv1(fdctrl));    else        fd_stop(drv1(fdctrl));    if (value & 0x10)        fd_start(drv0(fdctrl));    else        fd_stop(drv0(fdctrl));    /* DMA enable */#if 0    if (fdctrl->dma_chann != -1)        fdctrl->dma_en = 1 - ((value >> 3) & 1);#endif    /* Reset */    if (!(value & 0x04)) {        if (!(fdctrl->state & FD_CTRL_RESET)) {            FLOPPY_DPRINTF("controller enter RESET state\n");            fdctrl->state |= FD_CTRL_RESET;        }    } else {        if (fdctrl->state & FD_CTRL_RESET) {            FLOPPY_DPRINTF("controller out of RESET state\n");            fdctrl_reset(fdctrl, 1);            fdctrl->state &= ~(FD_CTRL_RESET | FD_CTRL_SLEEP);        }    }    /* Selected drive */    fdctrl->cur_drv = value & 1;}/* Tape drive register : 0x03 */static uint32_t fdctrl_read_tape (fdctrl_t *fdctrl){    uint32_t retval = 0;    /* Disk boot selection indicator */    retval |= fdctrl->bootsel << 2;    /* Tape indicators: never allowed */    FLOPPY_DPRINTF("tape drive register: 0x%02x\n", retval);    return retval;}static void fdctrl_write_tape (fdctrl_t *fdctrl, uint32_t value){    /* Reset mode */    if (fdctrl->state & FD_CTRL_RESET) {        FLOPPY_DPRINTF("Floppy controller in RESET state !\n");        return;    }    FLOPPY_DPRINTF("tape drive register set to 0x%02x\n", value);    /* Disk boot selection indicator */    fdctrl->bootsel = (value >> 2) & 1;    /* Tape indicators: never allow */}/* Main status register : 0x04 (read) */static uint32_t fdctrl_read_main_status (fdctrl_t *fdctrl){    uint32_t retval = 0;    fdctrl->state &= ~(FD_CTRL_SLEEP | FD_CTRL_RESET);    if (!(fdctrl->state & FD_CTRL_BUSY)) {        /* Data transfer allowed */        retval |= 0x80;        /* Data transfer direction indicator */        if (fdctrl->data_dir == FD_DIR_READ)            retval |= 0x40;    }    /* Should handle 0x20 for SPECIFY command */    /* Command busy indicator */    if (FD_STATE(fdctrl->data_state) == FD_STATE_DATA ||        FD_STATE(fdctrl->data_state) == FD_STATE_STATUS)        retval |= 0x10;    FLOPPY_DPRINTF("main status register: 0x%02x\n", retval);    return retval;}/* Data select rate register : 0x04 (write) */static void fdctrl_write_rate (fdctrl_t *fdctrl, uint32_t value){    /* Reset mode */    if (fdctrl->state & FD_CTRL_RESET) {        FLOPPY_DPRINTF("Floppy controller in RESET state !\n");        return;    }    FLOPPY_DPRINTF("select rate register set to 0x%02x\n", value);    /* Reset: autoclear */    if (value & 0x80) {        fdctrl->state |= FD_CTRL_RESET;        fdctrl_reset(fdctrl, 1);        fdctrl->state &= ~FD_CTRL_RESET;    }    if (value & 0x40) {        fdctrl->state |= FD_CTRL_SLEEP;        fdctrl_reset(fdctrl, 1);    }//        fdctrl.precomp = (value >> 2) & 0x07;}static int fdctrl_media_changed(fdrive_t *drv){    int ret;    if (!drv->bs)        return 0;    ret = bdrv_media_changed(drv->bs);    if (ret) {        fd_revalidate(drv);    }    return ret;}/* Digital input register : 0x07 (read-only) */static uint32_t fdctrl_read_dir (fdctrl_t *fdctrl){    uint32_t retval = 0;    if (fdctrl_media_changed(drv0(fdctrl)) ||        fdctrl_media_changed(drv1(fdctrl)))        retval |= 0x80;    if (retval != 0)        FLOPPY_DPRINTF("Floppy digital input register: 0x%02x\n", retval);    return retval;}/* FIFO state control */static void fdctrl_reset_fifo (fdctrl_t *fdctrl){    fdctrl->data_dir = FD_DIR_WRITE;    fdctrl->data_pos = 0;    FD_SET_STATE(fdctrl->data_state, FD_STATE_CMD);}/* Set FIFO status for the host to read */static void fdctrl_set_fifo (fdctrl_t *fdctrl, int fifo_len, int do_irq){    fdctrl->data_dir = FD_DIR_READ;    fdctrl->data_len = fifo_len;    fdctrl->data_pos = 0;    FD_SET_STATE(fdctrl->data_state, FD_STATE_STATUS);    if (do_irq)        fdctrl_raise_irq(fdctrl, 0x00);}/* Set an error: unimplemented/unknown command */static void fdctrl_unimplemented (fdctrl_t *fdctrl){#if 0    fdrive_t *cur_drv;    cur_drv = get_cur_drv(fdctrl);    fdctrl->fifo[0] = 0x60 | (cur_drv->head << 2) | fdctrl->cur_drv;    fdctrl->fifo[1] = 0x00;    fdctrl->fifo[2] = 0x00;    fdctrl_set_fifo(fdctrl, 3, 1);#else    //    fdctrl_reset_fifo(fdctrl);    fdctrl->fifo[0] = 0x80;    fdctrl_set_fifo(fdctrl, 1, 0);#endif}/* Callback for transfer end (stop or abort) */static void fdctrl_stop_transfer (fdctrl_t *fdctrl, uint8_t status0,                                  uint8_t status1, uint8_t status2){    fdrive_t *cur_drv;    cur_drv = get_cur_drv(fdctrl);    FLOPPY_DPRINTF("transfer status: %02x %02x %02x (%02x)\n",                   status0, status1, status2,                   status0 | (cur_drv->head << 2) | fdctrl->cur_drv);    fdctrl->fifo[0] = status0 | (cur_drv->head << 2) | fdctrl->cur_drv;    fdctrl->fifo[1] = status1;    fdctrl->fifo[2] = status2;    fdctrl->fifo[3] = cur_drv->track;    fdctrl->fifo[4] = cur_drv->head;    fdctrl->fifo[5] = cur_drv->sect;    fdctrl->fifo[6] = FD_SECTOR_SC;    fdctrl->data_dir = FD_DIR_READ;    if (fdctrl->state & FD_CTRL_BUSY) {        DMA_release_DREQ(fdctrl->dma_chann);        fdctrl->state &= ~FD_CTRL_BUSY;    }    fdctrl_set_fifo(fdctrl, 7, 1);}/* Prepare a data transfer (either DMA or FIFO) */static void fdctrl_start_transfer (fdctrl_t *fdctrl, int direction){    fdrive_t *cur_drv;    uint8_t kh, kt, ks;    int did_seek;    fdctrl->cur_drv = fdctrl->fifo[1] & 1;    cur_drv = get_cur_drv(fdctrl);    kt = fdctrl->fifo[2];    kh = fdctrl->fifo[3];    ks = fdctrl->fifo[4];    FLOPPY_DPRINTF("Start transfer at %d %d %02x %02x (%d)\n",                   fdctrl->cur_drv, kh, kt, ks,                   _fd_sector(kh, kt, ks, cur_drv->last_sect));    did_seek = 0;    switch (fd_seek(cur_drv, kh, kt, ks, fdctrl->config & 0x40)) {    case 2:        /* sect too big */        fdctrl_stop_transfer(fdctrl, 0x40, 0x00, 0x00);        fdctrl->fifo[3] = kt;        fdctrl->fifo[4] = kh;        fdctrl->fifo[5] = ks;        return;    case 3:        /* track too big */        fdctrl_stop_transfer(fdctrl, 0x40, 0x80, 0x00);        fdctrl->fifo[3] = kt;        fdctrl->fifo[4] = kh;        fdctrl->fifo[5] = ks;        return;    case 4:        /* No seek enabled */        fdctrl_stop_transfer(fdctrl, 0x40, 0x00, 0x00);        fdctrl->fifo[3] = kt;        fdctrl->fifo[4] = kh;        fdctrl->fifo[5] = ks;        return;    case 1:        did_seek = 1;        break;    default:        break;    }    /* Set the FIFO state */    fdctrl->data_dir = direction;    fdctrl->data_pos = 0;    FD_SET_STATE(fdctrl->data_state, FD_STATE_DATA); /* FIFO ready for data */    if (fdctrl->fifo[0] & 0x80)        fdctrl->data_state |= FD_STATE_MULTI;    else        fdctrl->data_state &= ~FD_STATE_MULTI;    if (did_seek)        fdctrl->data_state |= FD_STATE_SEEK;    else        fdctrl->data_state &= ~FD_STATE_SEEK;    if (fdctrl->fifo[5] == 00) {        fdctrl->data_len = fdctrl->fifo[8];    } else {        int tmp;        fdctrl->data_len = 128 << (fdctrl->fifo[5] > 7 ? 7 : fdctrl->fifo[5]);        tmp = (cur_drv->last_sect - ks + 1);        if (fdctrl->fifo[0] & 0x80)            tmp += cur_drv->last_sect;        fdctrl->data_len *= tmp;    }    fdctrl->eot = fdctrl->fifo[6];    if (fdctrl->dma_en) {        int dma_mode;        /* DMA transfer are enabled. Check if DMA channel is well programmed */        dma_mode = DMA_get_channel_mode(fdctrl->dma_chann);        dma_mode = (dma_mode >> 2) & 3;        FLOPPY_DPRINTF("dma_mode=%d direction=%d (%d - %d)\n",                       dma_mode, direction,                       (128 << fdctrl->fifo[5]) *                       (cur_drv->last_sect - ks + 1), fdctrl->data_len);        if (((direction == FD_DIR_SCANE || direction == FD_DIR_SCANL ||              direction == FD_DIR_SCANH) && dma_mode == 0) ||            (direction == FD_DIR_WRITE && dma_mode == 2) ||            (direction == FD_DIR_READ && dma_mode == 1)) {            /* No access is allowed until DMA transfer has completed */            fdctrl->state |= FD_CTRL_BUSY;            /* Now, we just have to wait for the DMA controller to             * recall us...             */            DMA_hold_DREQ(fdctrl->dma_chann);            DMA_schedule(fdctrl->dma_chann);            return;        } else {            FLOPPY_ERROR("dma_mode=%d direction=%d\n", dma_mode, direction);        }    }    FLOPPY_DPRINTF("start non-DMA transfer\n");    /* IO based transfer: calculate len */    fdctrl_raise_irq(fdctrl, 0x00);    return;}/* Prepare a transfer of deleted data */static void fdctrl_start_transfer_del (fdctrl_t *fdctrl, int direction){    /* We don't handle deleted data,     * so we don't return *ANYTHING*     */    fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00);}/* handlers for DMA transfers */static int fdctrl_transfer_handler (void *opaque, int nchan,                                    int dma_pos, int dma_len){    fdctrl_t *fdctrl;    fdrive_t *cur_drv;    int len, start_pos, rel_pos;    uint8_t status0 = 0x00, status1 = 0x00, status2 = 0x00;    fdctrl = opaque;    if (!(fdctrl->state & FD_CTRL_BUSY)) {        FLOPPY_DPRINTF("Not in DMA transfer mode !\n");        return 0;    }    cur_drv = get_cur_drv(fdctrl);    if (fdctrl->data_dir == FD_DIR_SCANE || fdctrl->data_dir == FD_DIR_SCANL ||        fdctrl->data_dir == FD_DIR_SCANH)        status2 = 0x04;    if (dma_len > fdctrl->data_len)        dma_len = fdctrl->data_len;    if (cur_drv->bs == NULL) {        if (fdctrl->data_dir == FD_DIR_WRITE)            fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00);        else            fdctrl_stop_transfer(fdctrl, 0x40, 0x00, 0x00);        len = 0;        goto transfer_error;    }    rel_pos = fdctrl->data_pos % FD_SECTOR_LEN;    for (start_pos = fdctrl->data_pos; fdctrl->data_pos < dma_len;) {        len = dma_len - fdctrl->data_pos;        if (len + rel_pos > FD_SECTOR_LEN)            len = FD_SECTOR_LEN - rel_pos;        FLOPPY_DPRINTF("copy %d bytes (%d %d %d) %d pos %d %02x "                       "(%d-0x%08x 0x%08x)\n", len, dma_len, fdctrl->data_pos,                       fdctrl->data_len, fdctrl->cur_drv, cur_drv->head,                       cur_drv->track, cur_drv->sect, fd_sector(cur_drv),                       fd_sector(cur_drv) * 512);        if (fdctrl->data_dir != FD_DIR_WRITE ||            len < FD_SECTOR_LEN || rel_pos != 0) {            /* READ & SCAN commands and realign to a sector for WRITE */            if (bdrv_read(cur_drv->bs, fd_sector(cur_drv),                          fdctrl->fifo, 1) < 0) {                FLOPPY_DPRINTF("Floppy: error getting sector %d\n",                               fd_sector(cur_drv));                /* Sure, image size is too small... */                memset(fdctrl->fifo, 0, FD_SECTOR_LEN);            }        }        switch (fdctrl->data_dir) {        case FD_DIR_READ:            /* READ commands */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品亚洲一区二区三区妖精 | 午夜欧美在线一二页| 一区二区三区欧美久久| 亚洲国产精品久久久久婷婷884| 亚洲成a人v欧美综合天堂| 日本三级韩国三级欧美三级| 国产福利一区在线| 色综合婷婷久久| 91精品国产综合久久久久久久 | 国产乱子伦一区二区三区国色天香| 国产成人亚洲综合色影视| 91国偷自产一区二区三区观看 | 美洲天堂一区二卡三卡四卡视频| 国产精品一区二区三区四区| 91久久久免费一区二区| 日韩欧美激情四射| 中文字幕视频一区| 美女视频一区在线观看| 99久久婷婷国产综合精品| 欧美一区二区精品| 中文字幕一区二区在线观看| 日本欧美加勒比视频| 91日韩精品一区| 日韩免费一区二区三区在线播放| 自拍偷拍亚洲激情| 国产一区视频网站| 欧美日韩国产大片| 国产精品久久久久天堂| 欧美日韩综合色| 久久精品人人做人人爽97| 五月天中文字幕一区二区| 成人黄色软件下载| 精品国偷自产国产一区| 亚洲综合色自拍一区| 成人精品一区二区三区四区 | 精品影院一区二区久久久| 在线免费观看日本欧美| 国产精品丝袜一区| 久久爱www久久做| 欧美日韩免费电影| 一区二区视频在线看| 国产成人在线视频网站| 日韩写真欧美这视频| 亚洲地区一二三色| 91黄色免费版| 亚洲日本va在线观看| 成人黄色国产精品网站大全在线免费观看| 日韩一区二区三区视频在线观看| 亚洲小说欧美激情另类| 色婷婷亚洲婷婷| 中文av一区二区| 国产东北露脸精品视频| 精品久久久影院| 久久精品久久99精品久久| 欧美精选一区二区| 亚洲午夜激情网页| 欧美曰成人黄网| 亚洲精品国产一区二区三区四区在线 | 91在线视频官网| 国产精品视频第一区| 国产精品一区二区久久不卡| 欧美va天堂va视频va在线| 奇米影视7777精品一区二区| 欧美女孩性生活视频| 亚洲成人动漫在线免费观看| 欧美无乱码久久久免费午夜一区| 尤物视频一区二区| 91国产成人在线| 一区二区三区视频在线观看| 91精品福利在线| 亚洲永久精品国产| 欧美无乱码久久久免费午夜一区| 亚洲在线一区二区三区| 欧美日韩免费电影| 视频一区二区中文字幕| 91精品国产综合久久香蕉麻豆| 日韩av在线播放中文字幕| 欧美一区二区免费观在线| 麻豆精品国产传媒mv男同| 日韩精品一区二区三区四区 | 日本一区二区免费在线| 成人国产精品视频| 亚洲三级理论片| 在线中文字幕一区| 日韩成人dvd| 日韩美一区二区三区| 经典三级一区二区| 中文在线免费一区三区高中清不卡| 国产成人av一区二区三区在线观看| 国产亚洲欧美色| 9久草视频在线视频精品| 亚洲天堂精品在线观看| 欧美日韩国产片| 麻豆精品视频在线| 久久婷婷国产综合国色天香| 成人美女视频在线观看18| 亚洲精品视频一区| 在线播放国产精品二区一二区四区 | 国产成人精品免费看| 国产精品毛片大码女人| 精品视频1区2区| 免费成人深夜小野草| 久久久午夜电影| 日本黄色一区二区| 蜜臀av在线播放一区二区三区| 久久久久综合网| 日本电影欧美片| 久久精品国产精品青草| 国产精品乱码一区二区三区软件 | 天天综合日日夜夜精品| 26uuu国产日韩综合| 97超碰欧美中文字幕| 偷拍一区二区三区| 国产日韩av一区| 欧美综合在线视频| 国产在线看一区| 亚洲综合在线电影| 欧美精品一区二区三区很污很色的| 成人短视频下载| 青娱乐精品在线视频| 国产精品二三区| 日韩精品在线看片z| 91蜜桃在线观看| 裸体健美xxxx欧美裸体表演| 国产精品你懂的在线欣赏| 5月丁香婷婷综合| 99久久亚洲一区二区三区青草 | 国产午夜精品福利| 欧美日韩国产免费| 波多野结衣亚洲一区| 日韩成人伦理电影在线观看| 国产精品视频一二| 日韩免费高清av| 在线观看国产精品网站| 国产电影一区在线| 丝袜诱惑制服诱惑色一区在线观看| 亚洲国产成人一区二区三区| 91精品国产综合久久福利| 91美女精品福利| 国产aⅴ综合色| 免费观看在线综合色| 亚洲综合色区另类av| 国产嫩草影院久久久久| 91精品国模一区二区三区| 一本色道久久综合亚洲精品按摩| 国内精品国产成人国产三级粉色| 午夜久久电影网| 1024国产精品| 日本一区二区在线不卡| 欧美成人精品二区三区99精品| 在线免费观看成人短视频| 国产二区国产一区在线观看| 美女网站视频久久| 午夜精品久久久久久久99樱桃| 中文字幕一区不卡| 久久久国际精品| 精品国产第一区二区三区观看体验| 欧美三级日韩在线| 色综合久久66| 99精品欧美一区二区三区综合在线| 国产精品888| 国产精品一区在线| 开心九九激情九九欧美日韩精美视频电影 | 黄页网站大全一区二区| 日韩精品亚洲专区| 亚洲成人一二三| 亚洲国产成人高清精品| 亚洲丝袜自拍清纯另类| 中文字幕日本乱码精品影院| 中文天堂在线一区| 国产午夜久久久久| 国产三级欧美三级日产三级99| 精品对白一区国产伦| 日韩一区二区三区免费观看| 欧美一区二区三区人| 538prom精品视频线放| 欧美蜜桃一区二区三区| 欧美日韩黄视频| 91精品欧美综合在线观看最新| 精品污污网站免费看| 欧美电影一区二区| 欧美一级黄色片| 日韩精品专区在线影院观看| 欧美mv和日韩mv国产网站| 欧美mv和日韩mv国产网站| 久久这里只有精品视频网| 久久久综合精品| 国产精品福利一区| 亚洲激情第一区| 91精品国模一区二区三区| 91麻豆精品国产91久久久久久久久 | 国产精品看片你懂得| 亚洲同性gay激情无套| 夜夜操天天操亚洲| 视频一区视频二区中文| 久久综合综合久久综合| 国产盗摄视频一区二区三区| 岛国精品在线播放| 色哟哟日韩精品| 欧美剧情片在线观看|