2020年6月27日土曜日

Zilog Z8002でUNIX

CP/M-8000の移植が終わってから何もやってなかったのですが、注文していたZ8002が届いたので再始動します。

このZ8002でUNIX V6を動かすのが次の目標です。

ZilogのZEUSとかOnyx SystemsのC8002とか、Z8000でUNIXを動かしている製品があったので、不可能ではないのは確かです。ネット検索してみましたが、趣味でZ8000でUNIXを動かした人はいないようなので、挑みがいもあります。CP/M-8000よりかなりハードルが高いのは確かですが、また1年か2年越しで達成したいと思います。なんせ趣味なので気長にゆっくり楽しめれば、それでOKです。
ちなみに、私は、Linuxは使いますがUNIXの経験は全くありません。OSの中身を勉強するにも良い機会になると期待しています。

CPUをZ8001からZ8002に切り替えた理由ですが、Z8001のセグメントモードはいろいろと効率が悪いと感じたからです。Z8000のアドレス空間は基本64kバイトです。Z8001ではセグメントを導入し、128セグメント×64kバイトで8Mバイトまで拡張しています。
Z8001では、1セグメントは64kバイトしかないのにアドレスを表すには4バイト必要だったり、即値アドレスを読み込むのに1サイクル余分に必要になったりと無駄が多い気がしてなりません。Z8000のアーキテクチャだと、これらの無駄がないノンセグメントなZ8002の方が素直で扱いやすい気がします。

UNIX V6を動かすに必要なメモリ容量ははっきりわからないのですが、V6が開発されていたPDP-11では256kバイトか4Mバイト扱えたそうなので、最低256kバイトのメモリは必要になりそうです。
64kバイト以上のメモリをZ8002で扱うには、アドレス空間を拡張するMMUを外付けする必要が出てくるので、まずはこの辺りから始めます。