よもぎのOS自作入門 14日目/30日
はじめに
これは2020年夏休み企画「30日でOS自作してみよう!」14日目の記事です。
企画についてはこちら
昨日やったことを書いていきます。
昨日の進捗
画面をより高い解像度にするためのあれこれを整えて、キーボードからの入力を翻訳して文字入力ができるようにし、 マウスの左クリックにあわせてウインドウが動くようになりました。
昨日やったこと
高解像度にするために、VBEを用いることにしました。
もともと、IBMが1987年に発表した表示回路企画であるVGA*1を利用していましたが、640x480までしか表現できません。*2 それじゃ足りなくなってきて、各メーカーが独自の拡張規格を使うようになってきましたが、不便だということでVESAという業界団体で統一規格として出したのがVESA BIOS extentionつまりVBEとなっています。*3 このVBEだと1280x1024までしか表現できないみたい*4なので、たぶんいまは別のものを利用していると思うのですが…… わからないUEFIだといい感じにしてくれるんですか?
ちなみにQEMUは1280x1024に対応していないらしい
;VGA 320x200 8bit-color mode MOV AL,0x13 MOV AH,0x00 INT 0x10 ;VBE 640x480 8bit-color mode MOV BX,0x4101 MOV AX,0x4f02 INT 0x10
高解像度になると当然文字とかも小さくなって粗が目立ちにくくなりました。
せっかく高解像度にしたのでこれ以降は640x480でやっていく予定です。*5
次にやったことはキー入力に対応することです。キーボードに入力があると割り込みが発生し、キーの値が送られてくるわけですが、ASCIIコード表と違って直感的ではないです。
- 0x01:ESC key
- 0x02:0
- 0x03:1
- 0x10:Q
- 0x11:W
- 0x1C:Enter
一例を出すとこんな感じですが、キーボードの配置に近い形になっています。
ここで本ではJISキーボード(フルサイズ)を利用していることを想定していて、例えば0x1A=@
となっているのですが、
私はUSキーボード(80%サイズ)*6を使っているので0x1A=[
となっていてちょっと違っています。
そのあたりは注意して自分の使ってる環境に合わせます。
キー入力の値からchar型static配列への射影を考えて実装すれば、文字入力はできました。
あとは、文字が入力されるたびに右にカーソルを移動させ、BackSpaceが入力されたら一文字をスペースで上書き(背景色で塗りつぶし)して左にカーソルを移動する、 みたいなことで、テキストボックスみたいなことが出来上がりました。
ウインドウの移動は、マウスを左クリックしたら、マウスカーソルから決められた相対位置にウインドウを移動させるということでできました。 ウインドウの移動は進捗のところにあります。
今日も一日頑張るぞい!