RAMモードで動作する58K CP/M-80が一応出来上がりました
Z80カードを製作した勢いでつい手をだしてしまって、もっと簡単にできると思ったのに意外に手間取ってしまい、一ヶ月ほどもかかってしまいましたが、FM-7用のCP/Mが一応できあがりました。
まだまだ直すべき箇所が多々ありますので完成とは言いすぎですが、切りがないので一応の区切りとします。
実行画面 |
仮想ドライブ画面 |
装置全景(左がFM-7用のディスプレイ) |
メモリマップ
前回のブログで紹介したのはROMモードで$0000~$7FFFの範囲で動作する26K CP/Mでしたが、BIOSを使用せずSubSystemを使用することで、下図のメモリマップのように$0000~$EFFFの範囲で動作する58K CP/Mとなりました。
58K CP/M-80 |
3つのファイルから構成されています。
(1)CP/M本体
サイト「The Unofficial CP/M Web site」中のソース cpm22.z80 を使用しました。
中日電工さんのサイトに説明されている通りにソースのバグを修正し、ドライブ名の表示を大文字に変更しただけで、あとはオリジナル通りです。58K CP/Mとしてアセンブルしました。
(2)BIOS80
BIOSのZ80部分で、BIOSのジャンプテーブル、DISKパラメータの他はほぼパラメータをセットしてコマンド番号を6809に送っているだけです。
(3)BIOS09
BIOSの6809部分で、FM-7のBIOSは用いず、FDD関係はFDC (MB8877A) を直接コントロールし、それ以外はSubSystemを使用しています。
CP/Mとしての機能
CP/Mとしての機能はベーシックなもので、エスケープシーケンスなども実装していませんが、仮想ドライブは実装してありますので、フロッピーが2台、仮想ドライブが2台の計4台です。
ドライブA, Bがフロッピー、C, DがWindows上の仮想ドライブです。以前紹介したRS232Cカードを用いて38400baudで通信しています。
構成図 |
RS232Cのドライバも実装しているのでPUNCHとREADERも使えるのですが、実際にはまず使用することはなく、もっぱらWindows上のエディタでファイルを作成し、ドライブCかDにセットしたCP/Mのイメージファイル(.77または.DSK形式)にドラッグ&ドロップしてCP/Mでアセンブルしたり、必要があればフロッピーにコピーしたりして使用しています。
機能不足や不具合など
相変わらずブロッキング/デブロッキング機能は実装していませんので、ディスクアクセスは速くはありませんが、そのうちにということで今回はパス。(そもそもブロッキング/デブロッキングについては良く分かっていないので。)
現在分かっている不具合がいくつかあります。
(1)カーソルが表示されない。
もちろん、SubSystemのCONSOLE CONTROLでカーソル表示をONにしていますが、6809側では表示されますが、Z80側に切り替わるとカーソルが消えます。
今のところ原因が分からず、直せていないので結構不便です。
(2)スタート時にドライブを指定する必要がある。
スタート直後にディレクトリを表示させると、DIRやDIR A:は表示されるのですが、DIR B:などはダメです。最初にドライブチェンジのB:やC:などを一回実行しておけば以降は普通に表示できるのですが、なぜでしょうか。BIOSがおかしいのは間違いないのですが。
制作した2つのソフト
下にBIOS80とBIOS09を置いておきます。80系の知識がほとんどない私が作ったものなのでおかしな点が多々あるかと思いますが、おかしな箇所や不具合の原因などをご指摘いただけるとありがたいです。
◎BIOS80です。中日電工さんのブログで紹介されているZASM1.64でアセンブルしています。
◎BIOS09です。自作のクロスアセンブラでアセンブルしています。
上記のソフトはまだ制作途中ということで、エラー処理などは不十分ですのでディスクアクセスに失敗などするとハングアップしたりします。
ということで、不具合はありますが何とか使える状態なので、今は、最近入手した「応用CP/M 村瀬康治著」中のシステムコールの実習を一つずつ走らせて確認しているところです。
なお、仮想ドライブ構築ソフトCpmDrvWin.exeですが、もうしばらく使用して不具合が出ないかを確認してから公開する予定です。