2020年4月29日水曜日

CP/M-8000の移植とその先へ

暫くCP/M-8000のBIOSを書いていたのですが、ほぼ終わりました。
現在、CFに書き込んだCP/Mのディスクイメージから起動できるようになっています。コマンドも実行可能で、下はSTATを実行した例です。


CP/Mのことをほとんど知らないのに移植に挑んだのが原因ですが、Disk I/Oの部分を書くのにかなり手間取りました。いかに役に立ったサイトのリンクを載せておきます。
  • John Elliott氏のCP/M Main Page : CP/M全般の情報が集められています。ファイルシステムの構造やBIOSの情報が役に立ちました。
  • Grant Searle氏のGrant's homebuilt electronics : CP/MのドライブをCFに対応させるアイデアや、ディスクフォーマットの決め方を参考にさせてもらいました。その他の情報も盛りだくさんです。
  • neko Javaさん?のCP/Mコーナー : CP/Mのディスクイメージの作成方法の情報があります。

ここまでで「CP/M-8000の移植はできた」と言っていいとは思うのですが、実は問題があります。トランジェントコマンドの多くが、インストラクションとデータのメモリ空間が分けられるハードウェアを要求することです。
Z8001は8MBのアドレス空間を持ってはいますが、64kBのセグメントに分割されています。コマンドはノンセグメンテッドのコードで書かれているため、利用できるメモリー空間が64kBに制限されてしまいます。それを補うためインストラクションとデータとを別々の空間に置き、128kBまで扱えるようにしているのです。

今回作ったCPUボードでは空間の分離には対応していないので、殆どのコマンドが実行できません。EDやASすら実行できなので、テキストを入力してアセンブルすることすらできず正直何もできません。

動かないコマンドがあることは、移植を開始した早い段階で気づいていましたが、「移植できるのか」という技術的なことにしか興味がなかったので目をつむっていました。せっかくここまで来たので、ハードウェアを改造してインストラクションとデータ空間を分けられるようにしていきます。

2020年4月19日日曜日

CP/M-8000 目覚める

ここ暫くCP/M-8000のBIOSの実装を続けてきたのですが、やっとプロンプトが表示されるところまで来ました。まだプロンプトの表示が変で、謎の"1#"が表示されてはいますが、ビルトインコマンドをタイプすると実行できることを確認できました。
完全にBIOSが実装できておらず、特にディスクI/Oがまだ未実装なので何もできませんが、ゴールデンウィークを中に実装を進めるつもりです。


The Unofficial CP/M Web site には、「CP/M-8000を移植するには、CP/Mが動作するOlibetti-M20上でビルドすることを検討しろ」と書かれていたのですが、オブジェクトファイルをCOFFに変換するツールができたことで、LinuxやWindows上でクロス開発できるようになりました。LinuxやWindows上では高機能な開発環境が使えるので、作業がかなり楽になります。
このあと、私以外にCP/M-8000を移植しようとする人が現れるのかはわかりませんが、ものずきな人のために情報をまとめて公開していくつもりです。