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をマスク */ } } } }