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]