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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fdc.c

?? QEMU 0.91 source code, supports ARM processor including S3C24xx series
?? C
?? 第 1 頁 / 共 5 頁
字號:
            DMA_write_memory (nchan, fdctrl->fifo + rel_pos,                              fdctrl->data_pos, len);            break;        case FD_DIR_WRITE:            /* WRITE commands */            DMA_read_memory (nchan, fdctrl->fifo + rel_pos,                             fdctrl->data_pos, len);            if (bdrv_write(cur_drv->bs, fd_sector(cur_drv),                           fdctrl->fifo, 1) < 0) {                FLOPPY_ERROR("writting sector %d\n", fd_sector(cur_drv));                fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00);                goto transfer_error;            }            break;        default:            /* SCAN commands */            {                uint8_t tmpbuf[FD_SECTOR_LEN];                int ret;                DMA_read_memory (nchan, tmpbuf, fdctrl->data_pos, len);                ret = memcmp(tmpbuf, fdctrl->fifo + rel_pos, len);                if (ret == 0) {                    status2 = 0x08;                    goto end_transfer;                }                if ((ret < 0 && fdctrl->data_dir == FD_DIR_SCANL) ||                    (ret > 0 && fdctrl->data_dir == FD_DIR_SCANH)) {                    status2 = 0x00;                    goto end_transfer;                }            }            break;        }        fdctrl->data_pos += len;        rel_pos = fdctrl->data_pos % FD_SECTOR_LEN;        if (rel_pos == 0) {            /* Seek to next sector */            FLOPPY_DPRINTF("seek to next sector (%d %02x %02x => %d) (%d)\n",                           cur_drv->head, cur_drv->track, cur_drv->sect,                           fd_sector(cur_drv),                           fdctrl->data_pos - len);            /* XXX: cur_drv->sect >= cur_drv->last_sect should be an               error in fact */            if (cur_drv->sect >= cur_drv->last_sect ||                cur_drv->sect == fdctrl->eot) {                cur_drv->sect = 1;                if (FD_MULTI_TRACK(fdctrl->data_state)) {                    if (cur_drv->head == 0 &&                        (cur_drv->flags & FDISK_DBL_SIDES) != 0) {                        cur_drv->head = 1;                    } else {                        cur_drv->head = 0;                        cur_drv->track++;                        if ((cur_drv->flags & FDISK_DBL_SIDES) == 0)                            break;                    }                } else {                    cur_drv->track++;                    break;                }                FLOPPY_DPRINTF("seek to next track (%d %02x %02x => %d)\n",                               cur_drv->head, cur_drv->track,                               cur_drv->sect, fd_sector(cur_drv));            } else {                cur_drv->sect++;            }        }    } end_transfer:    len = fdctrl->data_pos - start_pos;    FLOPPY_DPRINTF("end transfer %d %d %d\n",                   fdctrl->data_pos, len, fdctrl->data_len);    if (fdctrl->data_dir == FD_DIR_SCANE ||        fdctrl->data_dir == FD_DIR_SCANL ||        fdctrl->data_dir == FD_DIR_SCANH)        status2 = 0x08;    if (FD_DID_SEEK(fdctrl->data_state))        status0 |= 0x20;    fdctrl->data_len -= len;    //    if (fdctrl->data_len == 0)    fdctrl_stop_transfer(fdctrl, status0, status1, status2); transfer_error:    return len;}/* Data register : 0x05 */static uint32_t fdctrl_read_data (fdctrl_t *fdctrl){    fdrive_t *cur_drv;    uint32_t retval = 0;    int pos, len;    cur_drv = get_cur_drv(fdctrl);    fdctrl->state &= ~FD_CTRL_SLEEP;    if (FD_STATE(fdctrl->data_state) == FD_STATE_CMD) {        FLOPPY_ERROR("can't read data in CMD state\n");        return 0;    }    pos = fdctrl->data_pos;    if (FD_STATE(fdctrl->data_state) == FD_STATE_DATA) {        pos %= FD_SECTOR_LEN;        if (pos == 0) {            len = fdctrl->data_len - fdctrl->data_pos;            if (len > FD_SECTOR_LEN)                len = FD_SECTOR_LEN;            bdrv_read(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1);        }    }    retval = fdctrl->fifo[pos];    if (++fdctrl->data_pos == fdctrl->data_len) {        fdctrl->data_pos = 0;        /* Switch from transfer mode to status mode         * then from status mode to command mode         */        if (FD_STATE(fdctrl->data_state) == FD_STATE_DATA) {            fdctrl_stop_transfer(fdctrl, 0x20, 0x00, 0x00);        } else {            fdctrl_reset_fifo(fdctrl);            fdctrl_reset_irq(fdctrl);        }    }    FLOPPY_DPRINTF("data register: 0x%02x\n", retval);    return retval;}static void fdctrl_format_sector (fdctrl_t *fdctrl){    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[6];    kh = fdctrl->fifo[7];    ks = fdctrl->fifo[8];    FLOPPY_DPRINTF("format sector 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;        fdctrl->data_state |= FD_STATE_SEEK;        break;    default:        break;    }    memset(fdctrl->fifo, 0, FD_SECTOR_LEN);    if (cur_drv->bs == NULL ||        bdrv_write(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1) < 0) {        FLOPPY_ERROR("formatting sector %d\n", fd_sector(cur_drv));        fdctrl_stop_transfer(fdctrl, 0x60, 0x00, 0x00);    } else {        if (cur_drv->sect == cur_drv->last_sect) {            fdctrl->data_state &= ~FD_STATE_FORMAT;            /* Last sector done */            if (FD_DID_SEEK(fdctrl->data_state))                fdctrl_stop_transfer(fdctrl, 0x20, 0x00, 0x00);            else                fdctrl_stop_transfer(fdctrl, 0x00, 0x00, 0x00);        } else {            /* More to do */            fdctrl->data_pos = 0;            fdctrl->data_len = 4;        }    }}static void fdctrl_write_data (fdctrl_t *fdctrl, uint32_t value){    fdrive_t *cur_drv;    cur_drv = get_cur_drv(fdctrl);    /* Reset mode */    if (fdctrl->state & FD_CTRL_RESET) {        FLOPPY_DPRINTF("Floppy controller in RESET state !\n");        return;    }    fdctrl->state &= ~FD_CTRL_SLEEP;    if (FD_STATE(fdctrl->data_state) == FD_STATE_STATUS) {        FLOPPY_ERROR("can't write data in status mode\n");        return;    }    /* Is it write command time ? */    if (FD_STATE(fdctrl->data_state) == FD_STATE_DATA) {        /* FIFO data write */        fdctrl->fifo[fdctrl->data_pos++] = value;        if (fdctrl->data_pos % FD_SECTOR_LEN == (FD_SECTOR_LEN - 1) ||            fdctrl->data_pos == fdctrl->data_len) {            bdrv_write(cur_drv->bs, fd_sector(cur_drv), fdctrl->fifo, 1);        }        /* Switch from transfer mode to status mode         * then from status mode to command mode         */        if (FD_STATE(fdctrl->data_state) == FD_STATE_DATA)            fdctrl_stop_transfer(fdctrl, 0x20, 0x00, 0x00);        return;    }    if (fdctrl->data_pos == 0) {        /* Command */        switch (value & 0x5F) {        case 0x46:            /* READ variants */            FLOPPY_DPRINTF("READ command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x4C:            /* READ_DELETED variants */            FLOPPY_DPRINTF("READ_DELETED command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x50:            /* SCAN_EQUAL variants */            FLOPPY_DPRINTF("SCAN_EQUAL command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x56:            /* VERIFY variants */            FLOPPY_DPRINTF("VERIFY command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x59:            /* SCAN_LOW_OR_EQUAL variants */            FLOPPY_DPRINTF("SCAN_LOW_OR_EQUAL command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x5D:            /* SCAN_HIGH_OR_EQUAL variants */            FLOPPY_DPRINTF("SCAN_HIGH_OR_EQUAL command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        default:            break;        }        switch (value & 0x7F) {        case 0x45:            /* WRITE variants */            FLOPPY_DPRINTF("WRITE command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        case 0x49:            /* WRITE_DELETED variants */            FLOPPY_DPRINTF("WRITE_DELETED command\n");            /* 8 parameters cmd */            fdctrl->data_len = 9;            goto enqueue;        default:            break;        }        switch (value) {        case 0x03:            /* SPECIFY */            FLOPPY_DPRINTF("SPECIFY command\n");            /* 1 parameter cmd */            fdctrl->data_len = 3;            goto enqueue;        case 0x04:            /* SENSE_DRIVE_STATUS */            FLOPPY_DPRINTF("SENSE_DRIVE_STATUS command\n");            /* 1 parameter cmd */            fdctrl->data_len = 2;            goto enqueue;        case 0x07:            /* RECALIBRATE */            FLOPPY_DPRINTF("RECALIBRATE command\n");            /* 1 parameter cmd */            fdctrl->data_len = 2;            goto enqueue;        case 0x08:            /* SENSE_INTERRUPT_STATUS */            FLOPPY_DPRINTF("SENSE_INTERRUPT_STATUS command (%02x)\n",                           fdctrl->int_status);            /* No parameters cmd: returns status if no interrupt */#if 0            fdctrl->fifo[0] =                fdctrl->int_status | (cur_drv->head << 2) | fdctrl->cur_drv;#else            /* XXX: int_status handling is broken for read/write               commands, so we do this hack. It should be suppressed               ASAP */            fdctrl->fifo[0] =                0x20 | (cur_drv->head << 2) | fdctrl->cur_drv;#endif            fdctrl->fifo[1] = cur_drv->track;            fdctrl_set_fifo(fdctrl, 2, 0);            fdctrl_reset_irq(fdctrl);            fdctrl->int_status = 0xC0;            return;        case 0x0E:            /* DUMPREG */            FLOPPY_DPRINTF("DUMPREG command\n");            /* Drives position */            fdctrl->fifo[0] = drv0(fdctrl)->track;            fdctrl->fifo[1] = drv1(fdctrl)->track;            fdctrl->fifo[2] = 0;            fdctrl->fifo[3] = 0;            /* timers */            fdctrl->fifo[4] = fdctrl->timer0;            fdctrl->fifo[5] = (fdctrl->timer1 << 1) | fdctrl->dma_en;            fdctrl->fifo[6] = cur_drv->last_sect;            fdctrl->fifo[7] = (fdctrl->lock << 7) |                (cur_drv->perpendicular << 2);            fdctrl->fifo[8] = fdctrl->config;            fdctrl->fifo[9] = fdctrl->precomp_trk;            fdctrl_set_fifo(fdctrl, 10, 0);            return;        case 0x0F:            /* SEEK */            FLOPPY_DPRINTF("SEEK command\n");            /* 2 parameters cmd */            fdctrl->data_len = 3;            goto enqueue;        case 0x10:            /* VERSION */            FLOPPY_DPRINTF("VERSION command\n");            /* No parameters cmd */            /* Controller's version */            fdctrl->fifo[0] = fdctrl->version;            fdctrl_set_fifo(fdctrl, 1, 1);            return;        case 0x12:            /* PERPENDICULAR_MODE */            FLOPPY_DPRINTF("PERPENDICULAR_MODE command\n");            /* 1 parameter cmd */            fdctrl->data_len = 2;            goto enqueue;        case 0x13:            /* CONFIGURE */            FLOPPY_DPRINTF("CONFIGURE command\n");            /* 3 parameters cmd */            fdctrl->data_len = 4;            goto enqueue;        case 0x14:            /* UNLOCK */            FLOPPY_DPRINTF("UNLOCK command\n");            /* No parameters cmd */            fdctrl->lock = 0;            fdctrl->fifo[0] = 0;            fdctrl_set_fifo(fdctrl, 1, 0);            return;        case 0x17:            /* POWERDOWN_MODE */            FLOPPY_DPRINTF("POWERDOWN_MODE command\n");            /* 2 parameters cmd */            fdctrl->data_len = 3;            goto enqueue;        case 0x18:            /* PART_ID */            FLOPPY_DPRINTF("PART_ID command\n");            /* No parameters cmd */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美a级理论片| 亚洲自拍另类综合| xvideos.蜜桃一区二区| 91精选在线观看| 在线91免费看| 日韩一区二区在线看片| 日韩午夜激情av| 精品国产电影一区二区| av网站免费线看精品| 亚洲日本乱码在线观看| 久久―日本道色综合久久| 久久成人免费网站| 中文字幕精品—区二区四季| 成人国产精品视频| 中文字幕亚洲在| 日韩无一区二区| 不卡一区在线观看| 国产成人av一区二区三区在线 | 在线观看视频一区二区欧美日韩| 日本欧美在线观看| 久久aⅴ国产欧美74aaa| 精品伊人久久久久7777人| 午夜精品久久久久久久久| 亚洲自拍都市欧美小说| 日韩精品一级二级| 久久国产尿小便嘘嘘| 国产成人av一区二区| 不卡一区在线观看| 欧美性一二三区| 91精品国产麻豆国产自产在线| 日韩欧美综合一区| 欧美日韩高清一区二区不卡| 精品入口麻豆88视频| 日韩欧美中文字幕一区| 国产成人8x视频一区二区| 美女网站一区二区| 免费一区二区视频| 国产精品久久99| 国产亚洲精品精华液| 精品国产电影一区二区| 五月婷婷另类国产| 久久久久久9999| 国产精品初高中害羞小美女文| 成人综合婷婷国产精品久久免费| 国产精品综合久久| 成人福利视频在线| 亚洲精品一区二区三区在线观看| 开心九九激情九九欧美日韩精美视频电影| 国产成人啪免费观看软件| 91精品国产色综合久久不卡蜜臀| 一区二区三区丝袜| 99久久久精品| 亚洲乱码中文字幕综合| 99久久国产综合色|国产精品| 中文字幕不卡在线| 不卡一区二区中文字幕| 亚洲精品日韩一| 欧美影院午夜播放| 亚洲一二三级电影| 六月婷婷色综合| 欧美日本一区二区三区四区| 26uuu欧美| 国产麻豆视频一区| 欧美高清在线一区| 韩国精品一区二区| 欧美日韩一区二区在线观看| 欧美本精品男人aⅴ天堂| 久久久久久久久免费| 婷婷综合五月天| 欧美精品一级二级| 成人污污视频在线观看| 久久精品水蜜桃av综合天堂| 亚洲一区在线观看免费观看电影高清| 五月婷婷另类国产| 风间由美中文字幕在线看视频国产欧美| 不卡视频在线观看| 日韩一级免费一区| 亚洲男人天堂av网| 激情久久五月天| 精品三级av在线| 国产91综合一区在线观看| 国产亚洲自拍一区| av电影在线观看一区| 17c精品麻豆一区二区免费| 日韩免费福利电影在线观看| 亚洲天堂a在线| 欧美性xxxxxxxx| 奇米精品一区二区三区在线观看 | 亚洲v中文字幕| 成人av午夜影院| 中文字幕欧美日本乱码一线二线| 国产精品一区在线| 国产精品乱人伦中文| 色综合久久综合网| 国产一区二区三区黄视频 | 91香蕉视频黄| 色婷婷精品久久二区二区蜜臀av| 日韩欧美国产不卡| 国模大尺度一区二区三区| 国产日韩欧美精品电影三级在线| 国产精品一线二线三线精华| 五月婷婷久久丁香| 日韩一区二区在线观看视频| 国产精品每日更新| 成人精品免费视频| 国产精品高清亚洲| 丝袜亚洲另类欧美综合| 91精品国产综合久久久久| 国产精品入口麻豆原神| 大桥未久av一区二区三区中文| 国产精品成人网| 欧美一级欧美一级在线播放| 一区二区三区四区在线| 日韩精品中文字幕一区二区三区| 亚洲主播在线播放| 中文字幕第一区二区| 欧美精品国产精品| 色婷婷国产精品久久包臀| 亚洲bdsm女犯bdsm网站| 国产欧美日韩精品在线| 91精品视频网| 91美女片黄在线观看91美女| 奇米一区二区三区| 亚洲视频 欧洲视频| 久久无码av三级| 欧美麻豆精品久久久久久| 97精品久久久午夜一区二区三区 | 3d成人动漫网站| 欧美伊人久久久久久久久影院 | 久久综合狠狠综合| 国产欧美日韩在线视频| 日韩欧美国产电影| 日韩欧美亚洲一区二区| 欧美高清精品3d| 日韩欧美一级二级三级久久久| 欧美日韩精品免费观看视频| 成人av免费在线观看| 成人avav影音| 91视视频在线直接观看在线看网页在线看| 极品少妇一区二区三区精品视频| 免费亚洲电影在线| 久久精品国产亚洲5555| 国产乱子伦一区二区三区国色天香| 亚洲精品福利视频网站| 亚洲综合色丁香婷婷六月图片| 午夜精品免费在线观看| 一区二区三区在线视频免费观看| 亚洲一区二区在线免费看| 亚洲网友自拍偷拍| 日本欧美久久久久免费播放网| 免费看日韩精品| 欧美三级三级三级| 久久奇米777| 亚洲日本电影在线| 视频一区二区三区中文字幕| 亚洲风情在线资源站| 国产精品一区二区在线观看网站| 岛国精品一区二区| 91麻豆精品国产自产在线观看一区| 欧美一区二区福利视频| 国产精品美女久久久久久久久久久 | 蜜桃视频第一区免费观看| 国产精品77777| 91精品在线一区二区| 国产欧美日韩三区| 蜜臀av性久久久久蜜臀av麻豆| 久久99热国产| 91麻豆精品国产无毒不卡在线观看| 国产欧美一区二区在线| 天堂午夜影视日韩欧美一区二区| 成人看片黄a免费看在线| 日韩精品专区在线影院重磅| 亚洲黄色在线视频| 国产麻豆一精品一av一免费| 欧美一级黄色录像| 亚洲午夜久久久| 在线视频你懂得一区二区三区| 国产色综合久久| 久久国产精品99久久人人澡| 欧美日韩国产不卡| 亚洲自拍偷拍av| 欧美在线观看一区二区| 国产精品久久久久影院亚瑟| 国内国产精品久久| www国产亚洲精品久久麻豆| 日韩av电影天堂| 欧美久久免费观看| 午夜不卡av在线| 在线不卡的av| 亚洲第一综合色| 91国偷自产一区二区三区成为亚洲经典| 久久久精品综合| 丰满白嫩尤物一区二区| 中文字幕免费不卡| 一本大道久久a久久综合婷婷| 亚洲美女一区二区三区| 色婷婷av一区二区三区gif| 亚洲欧美另类小说视频| 在线观看国产一区二区| 蜜桃av噜噜一区|