中学校の頃に憧れだったCP/Mがフリーで手に入る時代になったので、いろいろ調べてみました。
CP/Mは8080向けに開発されたOSで、デジタルリサーチ (Digital Research Inc.)という会社の製品でした。8080の互換のZ80でも使うことができました。しかし16Bitの8086になったときにMS-DOSにシェアーを奪われ衰退し、会社は売却されました。現在もCP/Mの権利はあるのですが、保持している会社がフリーでの使用を容認している様です。
8080やZ80はリセット後0番地から命令を実行し始めます。CP/Mではなんらかの方法でディスクの最初のセクターを0番地からのメモリに貼り付け実行して、この処理がBIOSやBDOSなどをメモリの最後の方に読み込み、実行を渡します。
0番地への読み込みは、スイッチでの手打やDMAやROMで起動してメモリに貼り付けそのメモリが0番地に変わるようなロジックで処理されていたと思われます。
今から考えると不思議な仕様なのですが、Altairが0番地からメモリが実装されていて、そこにスイッチの手打ちでバイナリをセットする仕様だった事から来ているような気がします。
本物系
- SDを使ったモジュール
- CFを使ったモジュール
ROMを使うものと使わずAVRやPICマイコンを使うものがあります。またCPLDやGALを使ったものもあるようです。リンクは目に付いたもので、他にもいろいろあります。
PC-8001などの国産のパソコンでもCP/Mは動いていましたが、それぞれのメーカーがポートした部分はオープンにはなっていないので、現在これらを使うことはほぼ不可能だと思います。
エミュレーター系(マイコン)
- AVRにDRAMを使ったもの
多分これが、最初に出てきたマイコンを使ったエミュレーター系。オリジナルはATMEGA88でした。DRAMとSDカードを使います。
- AVRにSRAMを使ったもの
上のDRAMをSRAMに変更したもの。SDカードを使います。
- RunCPM
複数のプラットフォームに対応していて、SDカードを使います。GPIOのサポートがあるようです。
VGAをサポートしたforkもあるようです。
- cpm8266
ESP8266をターゲットにした実装で、SPI Flashにドライブを置いて、SDなどが必要ありません。Flashの容量は4M必要です。nosdkというコードを使ってメモリを広く(62K)使えるようにしているようです。ESP-01のような小さなモジュールでも動き、オススメです。
- CP/M on FPGA
FPGAで作ってるのもありました。
エミュレーター系(PC)
MacやFreeBSD上で動く処理系
- SIMH
VAXなどのエミュレーターのSIMHに8080とZ80のエミュレーターが入っていて、それを使ってCP/Mを動かすことができます。日本語の解説のページ
CP/M以外にも4K BASICなども動きます。
- YAZE-AG
CP/MのエミュレーターではなくZ80のエミュレーターとのこと。Windowsではcygwinが必要。
CP/Mはマイコンがセルフ開発できるようになった初めての環境だったと思います。これ以前の開発はPDP11などの高価な環境が必要でCP/Mは画期的だったとおもいます。マイクロソフトのBasicもビルゲイツが大学のPDP11を使って作ったと言われています。
とはいえ、1980年くらいには64KのメモリとフロッピードライブまたCP/M本体と各種ソフトで100万円くらいしていたと思います。さすがに中学生の自分には手が出せませんでした。