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)
また非本質的ですが、keytable0
とkeytable1
はkeytable[2][0x80]
のようにまとめるとkeytable[key_shift!=0][i-256]
と書けて分岐が1つ減ります。
7. Lockキー対応
適当な変数でLockキーの状態を保持し、それに関する処理の際に参照できるようにしておきます。 最初にランプの状態を取得しておいて、Lockキーが押されるたびにLockの状態に合わせてそれを更新、キーボードのランプに反映という処理をします。
QEMUで実行する際、キーボードのLEDはホストOS側のLock状態と一致するようになっているようです。 うまくいっているかを確認するには実機で動かすことになります。
おまけ
キーボードのランプを好きに操作できるようになりました。タイマでの処理と組み合わせることで一定の周期でキーボードのランプを点滅させることも可能です。
0.1秒周期 pic.twitter.com/imQusPzBvI
— 里旬 (@wisteria0410ss) February 14, 2019
たのしいですね。