前回の日記で作り始めたもの、それは新しい OS でした。
概要欄
今のところ特徴を myos と比較すると以下のようになります。 myos のサブセット的な感じになっていて一部ソースを流用しています。
MYOS | TOE | |
---|---|---|
コードネーム | myos | toe |
アーキテクチャ | x86-64 | x86 |
プラットフォーム | PC | IBM PC, PC-98, FM Towns |
動作モード | ロングモード | プロテクテッドモード |
ページング | 部分的 | なし |
セグメンテーション | 32bit App のみ | 未定 |
ブートモード | UEFI | Legacy BIOS |
SMP | サポート | なし |
カラーモード | ARGB32 | 8bit インデックスカラー |
透過 | アルファブレンディング | クロマキー |
主な特徴
今まで筆者の作った OS の中ではじめてページングを使わない純粋なプロテクトモードで動作します。 これはメモリ保護に MMU を使うのは辞めてみようというという myos の考え方の延長線上にあります。
また、ページングに対応していない拙作 PC エミュレーターで動かしたかったという理由もあります。 *1 この OS を開発したおかげで拙作 PC エミュレーターのバグもいくつか発見・修正されています。笑
MEG-OS Lite を Rust で再実装したものに近い感じとなっていて、 オリジナルの MEG-OS Lite と同様に NEC PC98 や FM Towns でもほぼそのまま動作します。 (実機の動作保証はありません)
386 と 486 の壁
x86 32bit モードは 386 で完成したと思われがちですが、実は 386 と 486 には結構違いがあって 386 には近代的な同期の命令が不足しています。 ターゲットを 486 以降にした方が簡潔になる一方、 486 命令を正しく実装していないエミュレーターもいくつか発見していて、 最終的なターゲットを 386 にするか 486 にするか判断が難しいところです。
myos はどうなるの?
myos を実装始めた頃は Rust を覚えたてのよくわからない時に設計したので、今考えると未熟な部分もあります。 toe は myos に近いアーキテクチャで Rust の理解がより深まって洗練されている部分もあるので、いずれは myos にバックポートしようと思います。
今後
現状は実質 myos のサブセットとなっていますが、最終的にどんな方向に落ち着くか若干まだ未定となっています。
toe のますますの発展をお祈りします。