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

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

目標を次のように設定。

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

そのための覚書です。

 

・・・・・

マウスを動かすという課題も、もうすぐというところまできました。

ここは、しっかりと動かして終わりたいですね。

 

◆ harib05a (マウスの解読(1))

最初の0xfaを読み捨てる。

それ以降は、3バイトずつマウスのデータが送られてくるので、3バイト溜まるごとに画面に表示させたい。

「mouse_phase」というのは、マウスからの受信がどの段階にあるかを覚えておくためのもの。受信した内容は、mouse_dbuf[0~2]に覚えさせている。
if文以下は、mouse_phaseの値によって、処理を分けたときにやる方法。

38 EA FD の数字について。
38の3の部分は、マウスの動きによって0~3の範囲で変化する。
38の8の部分は、マウスをクリック(右左中をそれぞれだったり、同時だったり)することで8~Fで変化する。
EAの部分は、マウスの左右の動き、FDの部分はマウスの上下の動きに関係している。

 

◆ harib05b (整理)

“bootpack.c” の中を整理。

MOUSE_DECという構造体を作る。

 

◆ harib05c (マウスの解読(2))

構造体に解読結果をしまう変数を追加。x, y, btn。

移動情報とボタン情報。

if (mdec -> phase ==3)のところが解読の中心。

ボタンの状態は、buf[0]の下位3ビットに収まっているので、それだけを取り出している。
x と yは基本的にbuf[1] とbuf[2]をそのまま使うが、1バイト目の移動に反応する桁の情報を使って、x や y の第8ビットより上を、全部1にするか0にするかを決めている。
解読の一番最後は、y の符号を反対にする操作をしている。

 

表示部分の改造

mdec.btn の一番下のビットが1だったら、sの2文字目を、’L’に置き換えている。これは、小文字を大文字に置き換えたことになる。

 

Lcrは、マウスのボタン(左中右)に相当し、押したら大文字になった。

 

◆ harib05d (マウスを動かす)

表示部分をさらに改造して、マウスを動かす。

マウスカーソルを消して、マウスカーソル座標に、解読して得られた移動量を加える(x, yそれぞれ)。
mx += mdec.x; は mx = mx + mdec.x; の省略形。

マウスカーソルが画面の外に飛び出さないように調整。

 

あー、マウスが動く・・・。

 

下の方の変なのは、重ね合わせの処理がどうたらということだそうです。

ともかく、マウスが動きました。

 

ここらで一度、ちょこちょこ復習というか、わからないところをお勉強しておこうと思います。

もっとも、お勉強で深みにはまって戻ってこれないと困るので、期限を設けます。

7日経ったら、何が何でもこちらに帰ってくる。

 

以上。

 

スポンサーリンク