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

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

1. また性能を測定してみる

タイマを490個追加して実機で測定を行った結果、以下のようになりました。 それぞれ5回測定し、その平均を示しています。

ずらしあり ずらしなし・番兵なし ずらしなし・番兵あり
1.1769302(2)×109 1.1769335(2)×109 1.1769336(1)×109

番兵の有無による違いは誤差の範囲内ですが、前回の作業で確かに改善できているようです。

2. 高解像度にしよう(1)

本の通りに変更を行いQEMUで実行したのですが、真っ黒な画面しか出ませんでした。 原因はVRAMのベースアドレスが合っていないことのようです。

ここや次の節を参考にして正しいVRAMベースアドレスを取得すれば良いのですが、 とりあえずQEMUで動かしたいという場合はasmhead.asm

MOV     DWORD [VRAM],0xe0000000

となっているところを

MOV     DWORD [VRAM],0xfd000000

とすれば動作します。

3. 高解像度にしよう(2)

以前にも似たようなことがありましたが、参考URLは本に書かれているもの(ttp://community.osdev.info/?VESA)から http://oswiki.osask.jp/?VESAに変わっているようです。

本では4種類の画面モード番号が紹介されていますが、実機で動かす場合は画面サイズに合った解像度にしたくなりますね。 そうした場合は英語版WikipediaのVBEの記事にある番号を指定すると 良さそうです。なお、リンク先の表で数字の末尾にhとあるのは16進数、そうでないものは10進数っぽいです。 また、画面モード番号の指定によってはエミュレータでは動かない(scrn320にジャンプして320x200になる)ことがあります。

私が使っているノートPCでは、画面モード番号に893を指定することで1920x1080の解像度で実行できました。

4.・5. キー入力

Haribote OSを起動し実際にキーを押して調べると、表にある値の一部は別のキーを押したときにも出るように見えます(テンキーの0の番号であるはずの52がInsertを押しても出る、など)。 参考ページ(http://oswiki.osask.jp/?(AT)keyboard)によると、E0拡張キーコードのように2バイト以上送られてくるものの末尾の1バイトが他のキーコードと重複している、ということのようです。

とりあえず英数字と一部の記号に対応するだけならこのことを考慮する必要はなさそうなので、本の通りにやって大丈夫そうです。 また、本にはQEMUでは「@」などのキーがうまく動かないと書かれていますが、問題なく動作しました。

6.・7. おまけ

動く。楽しい。

f:id:wisteria0410ss:20190213052721p:plain
左クリックするとその位置にウィンドウが移動する。
テキストボックスのようなものにはキー入力に応じて文字が出る。[Back Space]で消せる。