void fdc_task(void)
{
    int i;//, j, k, moterman = 0;
    struct BOOTINFO *binfo = (struct BOOTINFO *) ADR_BOOTINFO;
    unsigned int *p = (unsigned int *) (binfo->vram);
    /* FDCの初期化 */
    io_out8(0x00d6, 0xc0); /* マスタのch0をカスケードモードに */
    io_out8(0x00c0, 0x00); /* スレーブのDMAを許可 */
    io_out8(0x000a, 0x06); /* マスタのch2のDMAをマスク */
    for (;;) {
        io_cli();
        if (fifo32_status(&task_fdc->fifo) == 0) {
            task_sleep(task_fdc);
            io_sti();
        } else {
            i = fifo32_get(&task_fdc->fifo);
            io_sti();
            if (i == 1) {
                /* データリード */
putfonts(p, binfo->scrnx, 0, 0, 0xffffff, "1");
                while((io_in8(0x03f4) & 0x11) != 0);    // 0になるまで待つ
                for (;;) {
                    /* 送信アタタタタタ!!! */
                    if (fifo32_status(&task_fdc->fifo) == 0) {
                        break;
                    }
                    while((io_in8(0x03f4) & 0xc0) != 0x80);
                    io_out8(0x03f5, fifo32_get(&task_fdc->fifo));
                }
            }
            if (i == 2) {
                /* データリード */
            }
            if (i == 3) {
putfonts(p, binfo->scrnx, 0, 0, 0xffffff, "3");
                io_out8(0x000a, 0x06); /* マスタのch2のDMAをマスク */
            }
        }
    }
}

Wikiの [ 一覧一覧 最終更新最終更新 ヘルプヘルプ   RSSRSS]