「30日でできる!OS自作入門」をRustで。25日目

Posted on August 7, 2019 , Tags: OS自作入門, OS, Rust

「30日でできる!OS自作入門 」のC言語の部分をできるだけRustですすめてみる。今回は25日目の内容。

BEEP音をならす

BEEP音をならすシステムコールをつくる。

アプリ側は以下のようになる。(asmのコードは本と同じなので省略する)

QEMUの環境しか手元になく、実行できなかったが、一旦できたことにして次にいく。

パレットの追加

パレットの色を増やす。

今回のアプリケーションは以下の通り

実行結果

以下の通り、追加された色を確認できた。

色の追加

見かけ上の色を増やす

さらに、以下のようにすることで、見かけ上の色を増やせる。

実行結果は以下の通り。

色の追加2

コンソール画面を2つ起動する

コンソール画面を複数起動できるようにする。
変更が多いので、詳細な差分はGitHubのdiffを参照として、ここではかいつまんで説明する。

まずは素朴に今までコンソール用に用意していた変数を配列にして複数もてるようにする。

単純に増やすことで一応画面は起動するが、動作しない。
これはメモリのアドレス直指定で受け渡していたConsoleの情報などが使えないためである。
これに対応するため、Taskconsole_addrds_baseを持つようにして動的に受け渡しができるようにする。

今までCONSOLE_ADDRDS_BASE_ADDRなどの定数でメモリを指定してた部分を、task.console_addrtask.ds_baseに置き換える。
また、セグメントも分けるようにする。

実行結果

実行してみると、以下の通り、複数コンソールでそれぞれアプリケーションを実行できるようになったことが確認できた。

複数コンソールの操作

task_aウィンドウを開かないようにする

大本のタスクから直接起動しているウィンドウは削除する。

shi_winなど、ウィンドウを起動している関連の部分をまるごと削除した。詳細はGitHub上のdiffを参照。
ただ、削除するだけだと動かない。コンソール用Fifoの初期化タイミングを前にずらす必要がある。

実行結果

以下の通り、コンソールだけが起動するようになった。

コンソールのみにする

25日目は以上となる。ここまでの内容のコードはyoshitsugu/hariboteos_in_rustのday25としてタグを打ってある。