マイクロ秒のウェイト

inb(), outb()などの命令が連続しているとき入出力命令が実行できないことがあります。これはCPUとバス間のデータ転送が速過ぎて処理が実行できない事が原因です。これを解決するために短い遅延を入れることによって解決ができます。短い遅延を入れるにはポート0x80にoutb()命令をすることによって1マイクロ秒遅延を入れることができます。outb()のポートは0x80なのですが値は何をいれてもいいようです。

この特徴を利用して、マイクロ秒でビジーウェイトする関数を簡単に作れます。

void uwait(unsigned int usec)
{
        while (usec-- > 0)
                outb(0, 0x80);
}