「OSを作れる」「仕組みが学べる」という言葉に惹かれて、プログラミング軽くかじった程度の私が、OSを自作しようと思い立ちました。

2019年の目標の一つは『OS自作入門でOSを作る』です。

目標を次のように設定。

「2019年3月31日までに、完読してわからないなりにもOSを自作してみよう。」

そのための覚書です。

 

・・・・・

マウスを動かそうといろいろやっているのですが、なかなか動かないものですね。

それでも、マウスを動かすための施策を一つ一つ追っていくのは興味深いです。

前回は、割り込み処理を行うためのバッファ数を増やすため、FIFOで作成しました。

しかし、データ受け取りのための個数が多すぎるという問題が残っていた。

 

◆ harib04d (FIFOバッファを改良)

ずらし操作をしないで、FIFO型バッファをつくるテクニック。

書く方だけでなく、読む方にもnextをつける。読む方が追いかける。

書きnextがバッファの最後に来たとき、バッファの前の方はおそらくあいているので、書きnextが32になったら、強引に0にする。

読みnextが32になったら、続きが読めるようにnextを0にする。

これで、書きnextと読みnextが32バイトのバッファの中をぐるぐる回ることになる。

変数 lenは、何バイトをバッファに覚えているか。

 

 

読みだす方。

 

◆ harib04e (FIFOバッファを整理)

“fifo.c”というソースを用意し、FIFOバッファを整理する。

これまではキーボードのみであったが、マウスやその他にも応用をきかせるため。

 

・構造体

バッファの大きさを何バイトでもよくした。何バイトしたかをsizeにメモ。freeはバッファの空き。番地をbufに覚えさせる。pはnext_w。qはnext_r。

 

・fifo8_init は構造体の初期化関数。初期化したいFIFO8構造体の番地とバッファに関するパラメータを指定。

 

・fifo8_put はFIFOバッファに1バイト記憶させる関数。あふれるかの確認。

 

・fifo8_get は、FIFOから1バイトもらってくる関数。

 

・fifo8_statusはバッファのたまり具合を調べるための関数。

 

これを使うと、”int.c” と “bootpack.c” の中身がすっきりかける。

 

◆ haribo04f (マウスの割り込み)

マウスはPCの装置としては新しいものなので、特別な設定にしていた。

  • 制御回路は、CPUに割り込み設定を起こさない。
  • マウスも、制御回路に何も報告しない。

結果、マウスを動かすためには、マウス制御回路と、マウスそのものに「有効化命令」を出さねばならない。

 

・制御回路の設定。キーボード制御回路にマウス制御回路が入っている。キーボード制御回路を初期化すると、マウス制御回路を有効化できる。

「wait_KBC_sendready」:キーボード制御回路が制御命令を受け付けられるようになるまで待つ。

「break命令」:for文のぐるぐるまわりから強制的に抜け出す命令。

「init_keyboard」:キーボード制御回路へ送信できるか確認しながら、どのモードにするかを伝えている。

 

・マウスの有効化命令

 

これで「make run」すると、マウス割り込みがきた!!

 

◆ harib04g (マウスからのデータ通信)

割り込みが来るようになったので、データを受信する。

 

・マウスデータの受け取り。FIFOバッファの大きさは128バイト。

 

「make run」して、左にキーボードの情報、右にマウスの情報がでました。

マウスカーソルが動くと思っていたら、これはまだなんですね・・・。

 

・・・・・

さて、ようやく『本書』の7日目までが終了。

一度、復習をしようと思っていましたが、「マウスを動かす」ところまでは進みたいです。

そこまで行ってから、復習します。

 

以上。

スポンサーリンク