現代の量子力学

主に精進の様子を記録する日記帳です

7日目 FIFOとマウス制御

1. キーコードを取得しよう
・キーボードからデータ(キーコード)を取得する
    まず、キーボードからデータを受け取った直後にPICに対して、IRQ1が発生したのを確認したよ〜ということを教えてあげる必要がある。
    これをしないと、PICは次の入力に対して反応しなくなってしまう。
    io_out8(PIC0_OCW2, 0x61); でPIC
に教える。OCW2に「0x60 + IRQ番号」を教えれば良い。
    次に、装置番号0x0060 から8ビットのキーコードを取得する。
    装置番号はhttp://oswiki.osask.jp/?%28AT%29keyboard を参照。
    ・装置に入力→外部装置に入力確認→貰ったデータを取得
    
2. 割り込み処理は手早く
    1.では割り込み処理の途中で文字を出力したが、文字の出力には時間がかかり、その間には他の割り込み処理を受け付けられない。
    割り込み処理は一瞬で終わらせる必要があるため、「キー入力に対しては一旦変数にキーコードを保存しておいて、あとで出力する」という形をとる。
    一時的にデータを保存するバッファを作成し、キー入力→キーコードをバッファに保存→ゆっくりとバッファからキーコードを取得、という流れ
    ・割り込み処理は一瞬で        
 
3. FIFOバッファを作る
    FIFO先入れ先出しのバッファ。スタックでは無くキュー。
4. FIFOバッファを改良する
    FIFOを改良する。3.ではメモリに入っているデータをpopがある度に平行移動していたが、時間がかかるのでデータの位置は変えずに、どのアドレスに読みに行くか?を変更していく。
5. FIFOバッファを整理する
    ファイルを小分けにする。
    ・FIFOを作った
 
6. さあマウスだ
・今までマウスが使えなかった理由について、
    マウスは比較的新しい装置なので、マウスができた時にはほとんどのOSがマウスに対応していなかった。そんな状況でマウスを少し動かすだけで割り込みを発生させていたら、ハングアップしてしまうので、マウスを外さないといけない。
    これは面倒なので、マウス用の回路については有効化命令を出さないと割り込み信号を出さないように設計した。
    マウスを使うには、マウス制御回路とマウスそのものに有効化命令を出さないといけない。
・キーボード制御回路
    マウス制御回路はキーボード制御回路の中にあるので、キーボード制御回路をうまく初期化。
    まずは、キーボードコントローラ(KBC)が制御命令を受け付けられるようになるのを待つ。
    具体的には、装置番号0x0064から読み取ったデータの下から2ビット目が0になればOK
    KBCが受付を始めたら、モードを設定するよ〜というコマンドを送り、マウスを使うモードにするコマンドを送る。
    これで、制御回路に有効化命令を出せた。
・マウスそのもの
    マウスに有効化命令を送るには、キーボード制御回路に命令を送る。
    マウスに命令を送ってくれ〜というコマンドを送り、マウスを有効化するためのコマンドを送る。
    マウスは有効化命令を受け取ると、これからマウスの情報を送るよ〜という意味の情報を早速送ってくる(0xfa)
    ・マウスを使うには、制御回路とマウスそのものを有効化しなければならない
 
7. マウスからのデータ受信
    PICへの割り込み通知は、スレーブのIRQなのでマスタとスレーブの両方に受付完了の通知を送らなければならない。
    あとは、キーボードと一緒。
    ・マウスデータの受け取りは、キーボードデータの受け取りと同じ