Ubuntu 18.04.1 LTSでやる 30日OS本 〜17日目〜

Ubuntu 18.04.1 LTSでやる 30日OS本、17日目です。 他の章へのリンクはここにあります。

1.〜6.

それっぽい見た目になってきました。いい感じです。 解像度は決め打ちできないはずなので、ウィンドウの幅は定数として持たせておくかbinfo->scrnxなどから算出するようにしておくと良い気がします (数値を直接書き込んでいくのは何となく嫌な感じがするので)。 ウィンドウの幅を可変にする場合、文字入力の制限の部分はウィンドウ幅を8で割って切り上げして比較、のような感じになると思います。

上下左右キーや[Insert]キーなどは対応するテンキーの文字が出てきてしまいますが、これは0xe0が送られてきたときの処理をやっていないからのようです。 (参考:http://oswiki.osask.jp/?(AT)keyboard

また非本質的ですが、keytable0keytable1keytable[2][0x80]のようにまとめるとkeytable[key_shift!=0][i-256]と書けて分岐が1つ減ります。

7. Lockキー対応

適当な変数でLockキーの状態を保持し、それに関する処理の際に参照できるようにしておきます。 最初にランプの状態を取得しておいて、Lockキーが押されるたびにLockの状態に合わせてそれを更新、キーボードのランプに反映という処理をします。

QEMUで実行する際、キーボードのLEDはホストOS側のLock状態と一致するようになっているようです。 うまくいっているかを確認するには実機で動かすことになります。

おまけ

キーボードのランプを好きに操作できるようになりました。タイマでの処理と組み合わせることで一定の周期でキーボードのランプを点滅させることも可能です。

たのしいですね。