NitrOS-9をFM-11に移植しました

NitrOS-9
FM-11エミュレータで稼働中の6309版NitrOS-9 Level 2

OS-9/6809互換のフリーOS「NitrOS-9」を、富士通のFM-11シリーズ用に移植しました。MMUを使わないNitrOS-9 Level 1だけでなく、MMUに対応して2MiBまで(FM-11では1MiBまで)の主メモリーを利用可能なNitrOS-9 Level 2も移植しています。コードやFDイメージは、https://github.com/sueyasu/fm11-nitros9.git で公開しています。

主な機能と対応ハードウエア

Level 1とLevel 2のどちらも、マルチタスクやパイプ、リダイレクト、階層ディレクトリなどのNitrOS-9の基本機能を利用可能です。formatコマンドによるディスクのフォーマット、cobblerコマンドによる起動ディスクの作成、os9genコマンドによるOS9Bootの再構成もできます。

主な対応ハードウエアは、2D/2HD FDD、HDD、コンソール、シリアルです。対応HDDは、FM-11用に販売されていた富士通製品(デフォルトではM2233B)です。コンソール出力は、ANSI/VT100エスケープシーケンスの一部を解釈できます。

疑似8KiBページ方式を採用

Level 2の移植では、NitrOS-9のメインターゲットであるTandy Color Computer 3(CoCo3)とFM-11のMMU仕様の違いに苦労しました。

CoCo3のMMUは8KiBページ単位の管理をし、2個のタスクのメモリー空間を切り替えられます。一方、FM-11のMMUは4KiBページ単位の管理をし、16個のタスクのメモリー空間を切り替えられます。

問題はNitrOS-9のコードが、このCoCo3のMMUに強く依存したものになっていることです。当初は、コードを上位層と下位層に分離して、特定の機種のMMUに依存しないように改良しようと考えていたのですが、あまりにも変更箇所が多すぎるので断念しました。代わりに、FM-11のMMUの仕様を隠蔽してCoCo3のMMUに見せかけることで、コード変更の必要性を減らしています。

例えば、ページサイズの違いは、疑似8KiBページ方式を採用することで解決しています。NitrOS-9が操作する1ページは、物理的に連続する2つの4KiBページに展開してFM-11のMMUに設定します。

タスク数の違いについてはもっと簡単で、単純に2個のタスクのメモリー空間しかMMUに設定しないことにして解決しています。ただしこれはもったいないので、将来的には、16個のタスクのメモリー空間をMMUに設定するよう拡張する予定です。

今のところエミュレータだけで動作検証

開発と動作検証は、Nanno氏のFM-11エミュレータ で実施しています。なお、v1.2.2時点のエミュレータは一部の6309命令の解釈がNitrOS-9の想定と異なるため、6309版を稼働できません。稼働できるようにするパッチ(fm11-emulator-hd6309-fixes)を適用して開発しました。

FM-11実機での動作検証も早期に実施したいと考えています(実機は所有していますが、発掘が面倒で…)。ただし、HDDは所有していないので、FDDだけでの検証になります。HDDを所有していらっしゃる方がいたら、動作検証にご協力ください。

タイトルとURLをコピーしました