KZ80-CF コンパクトフラッシュボードとCP/M 2.2

KZ80-1MSRAM

128kB メモリーボードで64kBフルRAM化が可能となったので、SBC8080バスにつながるコンパクトフラッシュボードを作成してCP/M 2.2を動かしてみたいと思います。

コンパクトフラッシュボード(KZ80-CF) について

KZ80-CFはGrant氏の CP/M on breadboard で 紹介されているCFカードの情報をもとにSBC8080バスへCFカードを直結するボードです。
詳しい回路説明等はgithubのwikiをご覧ください。
https://github.com/kuninet/Z80_CF/wiki

CFカードはパラレルバスを持っていて、かつTrueIDEモードに対応したカードだと特定のピン(9番ピン(#ATA))をGNDに落とすだけでIDEドライブとして使用できるということでパラレルI/Oをもったマイコンからの操作が容易です

CP/M 2.2を稼働させる準備

CFカードの準備(128M/64M)

KZ80-CFに装着したCFカードをFDにみたててCP/Mを起動してみることにします。この際、”TrueIDE”対応の128M/64MバイトCFカードが必要です

メーカー型番備考
バッファローRCF-X 128M RCF-XシリーズはメーカーFAQで”TrueIDE”対応と出ています
I/OデータCFS-128M
ハギワラシスコムCFI-128MDG
ハギワラシスコムNFD10-256B

アセンブリ環境の準備

今回のCP/M稼働はGrant氏の以下のページで紹介されている手順で実施します。
http://zx80.netai.net/grant/cpm/

Grant氏提供のCP/M関係アセンブラソースzipファイルにTASM(A Table Driven Cross Assembler for the MSDOS* Environment)が添付されてきます。MS-DOSで動作するクロスアセンブラです。私はMac上のWin2000で実行しました。Macだと仮想マシンでDOS環境を動かすかDOSBoxを使うのが環境準備としては容易です。Windows環境だとMS-DOS Playerが良いかもです。

ROM機械語モニターの移植

最初に、Grant氏が公開しているROM機械語モニターのシリアル部分をKZ80/SBC80系で動くように移植します。Grant’sモニターは機能は少ないですがCP/Mのロード機能を持っているので今後の運用に便利です。(その部分だけ別モニターに移植しても良いですが….)

Grant氏の公開しているモニターは、シリアル通信にZ80 SIOを前提にZ80 CPUの割り込みモード2を使用していますが、KZ80/SBC80系で動かすためには8251シリアルLSIを割り込みモード0または1で動かすように変更します。
移植の手順は以下のgithub wikiに詳細をまとめました。
https://github.com/kuninet/KZ80_CPM/wiki/KZ80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%80%81SBC8080-8085%E3%81%A7CP-M

基本的にはSBC8080データパックのソースを参考に 初期化ロジック、シリアル入力/出力、シリアル割り込み入力などを移植します。各ルーチンの入出力インターフェースが似ていますので移植は容易です。

CP/M 機種依存部分の移植

CP/Mに関してWikipediaを見ると以下の記載があります。

CP/Mは、シェルであるCCP (Console Command Processor)、OSの本体であるBDOS(ビードス、Basic Disk Operating System)、入出力を処理する下位プログラムの集合体であるBIOS(バイオス、Basic Input and Output System)で構成される[2]。ハードウェア依存部分はBIOSに集中させてあるので、BIOSだけを変更することで大抵のハードウェアに移植可能となっていた。BIOSの機能はシステムの初期化、CCPのリブート(アプリ実行の終了とシェルの再起動)、コンソールなどのキャラクタデバイスリダイレクト付入出力、フロッピーディスク/ハードディスク等の1セクタ単位の入出力だけである。

https://ja.wikipedia.org/wiki/CP/M

上記のとおりCP/MはBIOSを移植することで80系システムへ移植が可能とのことで、Grant氏提供ソースの “cbios128.asm” や “cbios64.asm”をカスタマイズすることでKZ80/SBC80系システムで稼働できそうです。

Grant氏のBIOSソースのカスタマイズポイントを以下のgithub wikiにまとめました。
https://github.com/kuninet/KZ80_CPM/wiki/KZ80%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%E3%80%81SBC8080-8085%E3%81%A7CP-M
ほぼROM機械語モニターの移植と同様です。シリアル入出力関係の部分、メモリーの64kフルRAM切り替えについてのカスタマイズが必要です。
注意点は以下になります。

  • KZ80-1MSRAMを使用した場合のメモリー64kフルRAM切り替えは、バンクレジスタへ 00hを出力すること。(3箇所あります)
  • シリアル1文字出力ルーチンではCレジスタで出力文字が渡ってくることに注意。

CP/M 2.2を起動する

CP/M 2.2を起動するための手順詳細は以下のGrant氏の ページや、わたしのgithub wikiページの下の方にあります。

大雑把に言うとROMモニターで起動し、CFをform128プログラムなどでフォーマット実施、CP/M本体+BIOSをインテルHEX形式で一旦メモリーへロードしたものをputsysプログラムでCFの先頭セクターへ書き込みすると完成です。

環境は若干違いますがYouTubeにそのあたりを実演した動画をUPされている方がいました。以下の動画です。実演動画は分かりやすいです。この動画をみて、私もCP/M起動できるかもと思ったという….

Z80 Retrocomputing 11 – CP/M on RC2014 and Banked RAM/ROM Board

違いはRC2014コンピューターはROMが7FFFhまであるみたいでputsysやform128プログラムを8000h番地以降にロードしている?ようでした。ここはKZ80-1MSRAMをお使いの場合はGrant氏の手順どおり実行できます。

以下のようにシリアル端末の画面にプロンプト “A>” が表示されればCP/M起動成功です。おめでとうございます
これで様々なCP/M対応のプログラム(テキストエディタ、CやPASCAL、BASICなどの開発言語、ゲーム…etc)が動くようになります。

SBC8080/8085でCP/M 2.2を動かす場合

上記手順で移植したソースの場合、Grant氏提供のBIOSなどのソース類にZ80固有命令(DJNZ、LDIR…etc)が含まれているためSBC8080/8085ではCP/Mが起動しません。

わたしはThe Macroassembler AS の8080CPU用アセンブリ機能のZ80ニーモニックを使用するモードを使用して、機械語ROMモニター、BIOSなどのソースに含まれるZ80命令を8080命令へ置換することでCP/M起動に成功しました。(インテルニーモニックが苦手だったもので….)

Z80 ASM(TASM)を8080 ASMへ移植する
KZ80シリーズ、SBC80系シリーズでCP/Mを動かすプロジェクト. Contribute to kuninet/KZ80_CPM development by creating an account on GitHub.

CP/M本体(CCP/BDOS)は8080の機械語だけで構成されているため、ROMモニターやBIOSさえインテル8080で動作するように対応すればOKです!!

コメント