ラベル 仮想ドライブ の投稿を表示しています。 すべての投稿を表示
ラベル 仮想ドライブ の投稿を表示しています。 すべての投稿を表示

2025年3月10日月曜日

FM-7/77用仮想ドライブ構築ソフトのFT245高速カード対応版

FM-7/77用仮想ドライブ構築ソフトをFT245高速カード対応させました

===昨年から取り組んでいるいくつかのハードやソフトの作成がいずれもうまく行っていない状態なので、気分転換を兼ねて表題のことに取り組んでみました===

以前からFM-7やFM77AV40SXを使用する際にはWindows機上で仮想ドライブを構築して使用してきましたが、その際にはシリアル通信(RS232C)を使用していました。(CP/M版のみFT245カードを使用)

それについてはその都度公開してきました。

・「拡張ROM/RAMディスクボードと仮想ドライブ用のF-BASICドライバ」(2022年5月18日)

・「F-BASIC用のWindows版仮想ドライブ構築ソフトの改良」(2022年2月12日)

・「FM-7/77用の改良版I/O拡張基板用のF-BASICドライバを作成」(2021年7月8日)

・「FM-7用 60K CP/M-80 の仮想ドライブ版が完成」(2021年2月23日)

・「CP/M用の仮想ドライブの構築ソフト(その2)」(2020年5月2日)

・「CP/M用の仮想ドライブの構築ソフト」(2020年4月29日)

・「FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成」(2019年9月25日)

・「FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了」(2019年8月26日)

・「FM77用の拡張IOボード、ROM/RAMディスクボード」(2019年6月12日)


しかし、現在はRS232C通信を使用することはほとんどなく、もっぱら「思いつきハードでソフトに七転八倒(https://vehwk3yxv7hw.blog.fc2.com/blog-category-2.html)」の秋田修二さんが作成されたFT245高速通信カードを使用させていただいています。

ということで、ここで全ての仮想ドライブ構築ソフトをFT245カード対応に切り替えることにしました。(もちろん、従来通りRS232Cも使えます。)

今回作成したのは以下のものです。

動作確認した機器:FM-7、FM77AV2、FM77AV40SX
対応DOS:F-Basic、Flex9

使用したFT245カードは画像のものです。

使用したFT245カード

これはVer2でTXE端子の制御機能が追加されており、スイッチで有効・無効を切り替えることができるものですが、この機能がないVer1でも同様に使用できます。


全体の構成図

詳解するソフトの機能を大まかな図で示します


機能の説明

図に示しましたように、Windows側では使用するDOSに合わせて仮想ディスク構築ソフト(FbasDrvWin.exe, FlexDrvWin.exe, Os9DrvWin.exe, CpmDrvWin.exe)のいずれかを実行します。使用する通信カードや通信ポートはiniファイルで指定したものが選択されますが、起動後に変更できます。

FM側のドライバですが、Flex9ではWINDRVの起動時のオプションでFT245カードとRS232Cカードに対応させていますが、F-Basicでは裏RAMに常駐させていてその常駐部を少なくするために、FT245カード用のWINDRV(もちろんFlex9用とは別ソフトです)とRS232C用のWINDRVX7という別々のソフトになっていますので、使用する通信カードに合わせて選択します。FM-7やFM77AV2用のオプションRS232Cカードは38400baudまで動作しますが、FM77AV40SXなどに内蔵されているRS232Cは19200baudまでです。


動作している様子

F-Basic (Ver3.0)の場合です。
FM77AV2でFT245カードを使用しています。

FbasDrvWin.exeの場合

Flex9の場合です。
FM77AV40SXの内蔵RS232Cを使用しています。

Flex9DrvWin.exeの場合

この画像中のDrive2や3のボックスにディスクイメージファイルをdrag&dropするとその内容が左下のリストボックス中に表示され、読み出し、書き込み、削除、名称変更ができますので、Windows機中のファイルをイメージファイルに書き込んだり、読み出したりできて、そのままFM機で扱えます。
右のボックス中のRで始まっているリストがFMのfilesコマンド(F-Basic)やCATコマンド(Flex9)でドライブ2と3を連続して読んだ時の様子で、仮想ドライブのリードしているドライブ、トラック、セクタを表しています。もちろんFM側ではそれぞれのドライブのファイル一覧が表示されています。

Windows側のFbasDrvWin.exeは以前から公開しているものですが、使用しているうちに必要になった機能として、有効なポートを検出する「ポートスキャン」、ポートの種類を選択する「Port Select」ボタンを追加した最新のVer1.53です。またFlex用も同様に機能追加してあり、FlexDrvWin.exeはVer1.73です。


FM機とWindows機との間のファイル交換の手段として

このファイル交換の手段としては、従来からRS232Cによるものがありますが、使いやすさや速度面での問題がありました。それを改善するものとしてFT245カードを使用する方法があり、ディスクイメージファイル全体の転送や単一ファイルの転送用のソフトを作成してきました。速度的には大幅に改善されたとはいえ、それでも、毎回転送ソフトを起動してファイル操作を行う必要がありました。

今回、仮想ドライブ構築ソフトをFT245カードに対応させたことで、普通にディスクを読み書きする操作の延長でそのままWindows上のファイルを処理することができるようになりました。
もちろん、FT245カードがない場合でもその代わりにRS232Cを使うことで、全く同様な操作ができます。

今回はとりあえずですが、F-Basic V3.0用とFlex9用の2種のみ公開します。ただしF-Basic用はVer3.0のみに対応しており、また、Flex9用ですが私は8インチのGeneral版から移植したものを使用していますので、もしかしたら富士通製のFlex9には使えないかもしれません。

動作に必要なソフト一式をOneDriveに公開しますので、使用した結果に対して私は責任を負わないことを了解していただいたうえで自由にご利用ください。


2023年2月18日土曜日

FM-7/77用F-BASIC,OS-9,CP/M,FLEX9のディスクイメージを操作する

 Windows上でFM-7/77用F-BASIC,OS-9,CP/M,FLEX9のディスクイメージを操作するソフトの紹介

FM用のエミュレータであるXM7を使用されている方も多いと思います。私も使わせていただいています。素晴らしいソフトを作成された開発者に敬意を表します。

XM7を使用していると、しばしばD77形式のディスクイメージ中のファイルを操作したいことがあります。つまり、ディスクイメージ中にWindowsからファイルを書き込んだり、逆にディスクイメージからWindowsへファイルを読み出したりしたいということです。

今までにそのためのソフトを制作してきました。当然のことですが、各OS(?)によってディスク中への保存形式が異なりますので、ソフトも各OSで異なるものとなりました。

制作したソフトについてはその都度紹介してきましたが、扱えるファイル形式を今までのD77(D88)、DSKに加えて、FT245高速通信カードで用いられているDAT形式に対応するように拡張しましたので、ここでまとめて紹介します。

今までに制作したソフトは以下の4本です。

(1)F-BASIC用 FbasDrvWin.exe

(2)OS-9用   Os9DrvWin.exe

(3)CP/M用   CpmDrvWin.exe

(4)FLEX9用  FlexDrvWin.exe (DAT形式には対応しない)

それぞれ対応するOSが異なりますが、操作性は全て同じにしてあります。

(ただし、FLEX9用のみはディスク形式が異なるためにFT245通信カードを使用する転送ソフトは使用できませんので、DAT形式に対応する必要がありません。)

それぞれの画面イメージは次のようです。


FbasDrvWin.exe



Os9DrvWin.exe


CpmDrvWin.exe


FlexDrvWin.exe



イメージファイル処理ソフトとしての使い方


(1)処理したいイメージファイルをドライブ名ボックス(Drive 0~4)にドラッグ&ドロップすると、下のボックスにそのイメージファイル中のファイルが一覧表示される。
どのボックスに入れても構わない。また、いくつでも重ねて入れることができる。
(2)読み出し
読み出したいファイルをマウスの左ボタンで選択しておいて、右ボタンを押すと現れるメニューから「読み出し」を選択する。
(3)書き込み
書き込みたいWindows上のファイルをこのボックス中にドラッグ&ドロップする。
(4)全ファイルの一括読み出し
メインメニュー「編集」中の「全ファイル読み出し」を選択する。
(5)他の機能
右ボタンメニューには他のコマンドとして「削除」、「ファイル名変更」がある。


仮想ドライブ構築ソフトとして使用する


イメージファイル処理ソフトとしての使い方は上記のようですが、実はこれらのソフトは本来、Windows上の仮想ドライブ構築ソフトとして制作したものです。
(上の画面イメージ中のFlexDrvWin.exeで右側のボックス中にFM機がアクセスしたトラック/セクタが表示されています。)
ということで、FM機に各OSに対応するドライバをインストールすることで、FM機本体のドライブ(通常0と1)に加えて、これらのxxxxDrvWin.exeのDrive2と3が拡張ドライブとして使用できるようになります。
OS-9用以外の3つの仮想ドライブ構築ソフトについては以前紹介し、ドライバも公開しています。

RS-232C用のドライバをFT245通信カード用に書き換える


今までに、Flex用、F-BASIC用、CP/M用のドライバを紹介してきましたが、それらはいずれもFM機とWindows機との間の通信手段としてRS-232Cを使用していました。
しかし、最近はRS-232C機能を使用することはほとんどなくなり、もっぱら「思い付きハードでソフトに七転八倒」さん(ブログは下記)が製作されたFT-245高速通信カード(本ブログでも何回か紹介しています)を使用していますので、現在、各ドライバをFT-245通信カード用に書き換えているところです。完成し次第公開する予定ですが、残念ながら、私は80系は全くと言ってよいほど経験がないので、CpmDrvWin.exe用のドライバが作成できません。F-BASIC用、OS-9用の2つのみを作成中です。

「思い付きハードでソフトに七転八倒」さんのブログ
(1)FM-7用データ転送基板を使った新ユーティリティの紹介https://vehwk3yxv7hw.blog.fc2.com/blog-entry-39.html
 (2)FDDイメージをバックアップするFM-7専用ソフトの説明https://vehwk3yxv7hw.blog.fc2.com/blog-entry-31.html

以上、各OS用のイメージファイル処理ソフト(実は仮想ドライブ構築ソフト)の紹介でした。
これらの4ソフトと、共に使用することが多いD77,DSK,DATファイル間で形式を変換するソフト CvtDskD77.exeをOneDriveに上げておきます。

【注意】これらのソフトの制作にあたっては、それぞれのOSのFMS(ファイルマネージメントシステム)に相当するものの実装が必要ですが、OSの中身を知っているわけではないので、XM7上で読み書き、追加、削除などの操作をして、操作前後でイメージファイルのどの個所がどのように変化したかを確認することによってOS内の動作を推定し、それをもとにして実装しました。
従って実装が不完全、不十分なための誤動作が予想されますので、使用される場合はその点にご注意ください。特に、操作を何回も繰り返すとイメージファイルがおかしくなる可能性がありますので、何回か操作を繰り返したらXM7で別ファイルにコピーし直したり、転送ソフトを用いてフロッピーディスクにコピーしておくと安心です。(使用した感覚ですが、FlexDrvWin.exe以外は比較的安定しているようです。)

2022年5月18日水曜日

拡張ROM/RAMディスクボードと仮想ドライブ用のF-BASICドライバ

ROM/RAMディスクボード用の接続ケーブルを製作し、ドライバも改良しました 

今まで拡張ROM/RAMディスクボードを使用する際には、32P拡張スロット基板を経由して使用していました。



通常の接続形態

しかし、いつもいつも32P拡張スロットが必要なわけでもないので、拡張ROM/RAMディスク基板を直接FM-7や77に接続して使用しようと考えました。

そのために製作したのがこれらの接続ケーブルです。


製作したFM-7用、FM77AV2用のコネクタ


左のMILコネクタがFM-7用、右のアンフェノールコネクタがFM77AV2用で、このように接続して使用します。


FM-7に装着


FM77AV2に装着


これで拡張ROM/RAMディスク基板を直接本体に接続して使用できるようになりました。

ボード上のシリアルポートからTTL-USB変換ケーブルでWindowsPCに接続すれば、このボードのみでWindowsPC上の仮想ドライブも使用することができます。(もちろん、RS232CカードやFT245カードも使用できます。)ROM/RAMディスクと仮想ドライブの切り替えは専用ソフト RRWCHG で行います。RAMディスクを使用する際には、最初にフォーマットプログラム RAMFMTFB で初期化します。


RRWCHGによる切り替え


RAMFMTFBによる初期化


使用するドライバソフトですが、下図にありますように、今までに紹介したドライバソフトを改良したものを使用しています。




FM側のソフトが3つに分かれているのは、常駐部があるので少しでもサイズを小さくするためで、それぞれ専用ソフトになっています。なお、以前にも書きましたがFM側の常駐型のソフトの制作にあたっては、轍名聡氏による「裏RAMディスク」(Oh!FM誌1984年11月号)を参考にさせていただきました。感謝いたします。

WindowsPC側はいずれの場合も同じソフト FBasDrvWin.exe で、以前紹介しましたようにiniファイルでシリアル用とFT245用を切り替えます。


ROM/RAMディスクボードがない場合でも

また、上図で分かりますように、拡張ROM/RAMディスクボードがない場合でも、FM-7/77用のRS-232CカードかFT245カードのいずれかがあれば、FM側の WINDRVU7(またはRDSKWINF) とWindowsPC側の FBasDrvWin.exe をインストールすることでWindowsPC上の仮想ドライブを使用することができます。


FBasDrvWin画面(以前紹介したものです)


これらのソフトの中には以前と同じものもありますが、まとめてOneDriveに上げておきます。なお、FM側のソフトはバイナリだけでなくソースも含めてありますし、入力用の補助プログラムも用意してあります。




2022年2月12日土曜日

F-BASIC用のWindows版仮想ドライブ構築ソフトの改良

F-BASIC V3.0用のWindows版仮想ドライブ構築ソフトを手直ししました

【2022年2月16日追記あり】動作しないソフトがあることについて末尾に追記しました。

2021年7月8日のブログ「FM-7/77用の改良版I/O拡張基板用のF-BASICドライバを作成」で紹介した仮想ドライブ構築ソフトですが、ブログに書きましたような起動時の不具合があったことと、RS232Cカード使用のものだった点を改良しましたので報告します。

まず、起動時の不具合は初期化時に必要な表RAMと裏RAM間でのドライブ番号の連携を忘れていたのが原因でした。

次に、最近はほとんどRS232Cカードは使用しておらず、もっぱら「思い付きハードでソフトに七転八倒」さんが開発されたFT245カードを使用しているので、このカードに対応させることにしました。

FM-7側は元のRS232C用の1バイト送受信ルーチン(RCVCH,SNDCH)を2月11日のブログ「高速通信カードFT245の使い方の紹介」で説明したようなFT245用ルーチンに置き換え、WindowsPC用のFbasDrvWin.exeも同様に書き換えることでFT245にも対応したものができあがります。

FM-7側のドライバ RDSKWINF は裏RAMに常駐する関係で、FT245カード専用としてあります。(RS232Cカードの場合は以前紹介したWINDRVU7をそのまま使用できます。)

WindowsPC側の FbasDrvWin.exe はRS232Cカード、FT245カード兼用になっており、その切り替えは起動時に読み込む FbasDrvWin.ini ファイルにFTもしくはRSのどちらが記述されているかで行います。


FT245カードで動作している様子を示します。

WindowsPC側はFbasDrvWin.exeで、FM-7側は今回作成したRDSKWINFを実行しています。


FT245カードで動作

最上行に --- use FT245 Card と表示されています。

これで実ドライブ0,1に加えてWindows上の仮想ドライブ2,3が実ドライブと同じようにF-BASICから使用できます。加えて、Windows上のファイルをこの仮想ドライブ中のイメージファイルに書き込んだり、逆に読み出したりができますので、実ドライブとの間でのファイルのやり取りも自由にできることになります。


Windows上の動作画面

もちろん、RS232Cカードでも動作します。

WindowsPC側は同じくFbasDrvWin.exeで、FM-7側は以前作成したWINDRVU7を実行しています。38400baudで動作しています。





最上行に --- use RS232C Card と表示されています。
使い方はFT245カードの場合と全く同じです。


RS232Cカードでの動作画面


FT245カードとRS232Cカードの切り替えはFbasDrvWin.iniファイルの13行目で行います。FTと書けばFT245カード使用に、RSと書けばRS232Cカード使用に設定されます。


iniファイルの内容


以上で紹介した新版のFbasDrvWin.exe(Ver1.41)、FbasDrvWin.ini、FT245カード用のRDSKWINF、以前紹介したRS232Cカード用のWINDRVU7をOneDriveに上げておきます。(使い方の説明も含まれています。)

なお、RS232Cカード用のWINDRVU7のインストール及び使用法については2019年9月25日のブログ「FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成」をご覧ください。


【2022年2月16日追記】

本ソフトはF-BASICのBIOSのディスク関連の8(RESTOR)、9(DWRITE)、10(DREAD)を置き換えていますので(8は単に無視)、BIOSを通さずにディスクファイルを扱っているソフトは正常に動作しません。

F-BASICのシステムディスク中の富士通製のユーティリティの特に機械語サブルーチンはBIOSを使用せずにROM内ルーチンを使用してディスクを扱っているので、殆どが正常に動作しません。(動作しているように見えるものもありますが実際には正常な結果が得られなかったり、途中で異常終了したりします。)

しかし、Windows上の仮想ドライブの使用目的の殆どは、FM-7と仮想ドライブとの間でのファイルのやり取りにありますので、ファイルのコピーができれば充分です。コピーソフトとして私は「SFCOPY(SUPER FILESCOPY V2.0)Oh!FM 1987年5月号」を使用しています。これはコピーするファイルを画面上で選択できるので非常に使い易いものです。これを用いて仮想ドライブ上のファイルを実ドライブにコピーしてしまえば、後は富士通製のユーティリティも自由に使えることになります。

・・・追記ここまで


2020年5月16日土曜日

FM-7用 58K CP/M-80が一応出来上がりました

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ですが、もうしばらく使用して不具合が出ないかを確認してから公開する予定です。



2020年5月2日土曜日

CP/M用の仮想ドライブの構築ソフト(その2)

仮想ドライブ構築ソフトCpmDrvWin.exeをCP/Mに接続してみました。


前回報告したCpmDrvWin.exeをCP/Mに接続してみました。
書き直したのは、CP/MのBIOSの6809側のルーチンのみで、DrvNoが0(A:),1(B:)の時は従来のFDDアクセスルーチンのままで、2(C:),3(D:)の場合にはRS232Cを通してCpmDrvWinと通信して仮想ドライブ中のファイルを読み書きします。

具体的には、ファイルを読む場合にはCpmDrvWinに対して’R',DrvNo,TrkNo,SctNo(+チェックサム)という文字列を、書き込む場合には’W',DrvNo,TrkNo,SctNo(+チェックサム)という文字列を送って、その結果を受け取るだけです。



ディレクトリを表示

ドライブA:はフロッピーディスクで、ドライブC:とD:が仮想ドライブです。
まだテスト中ですので、BaudRateを4800baudと遅くしてありますが、完成時には38400baudになります。


ドライブC:のディレクトリ表示時

右のテキストボックスは受信したコマンド列を表示しています。
Trk2,Sct1から始まって、各2回ずつ読んでいるのが分かりますが、これはブロッキング・デブロッキングをちゃんと行っていないためです。(何とかしなければ...)


ドライブD:のディレクトリ表示時

ディレクトリの範囲はTrk2のSct1~16なのですが、ドライブD:の場合のように、ファイル数が少なくても、その範囲のセクタを全て読んで、空を表示しています。(これはBDOSの仕様なのか、それとも自作BIOSの責任なのか...)

前回のブログで書きましたように、左のリストボックス中にWindows上のファイルをドラッグ&ドロップしてファイルを追加すれば、CP/Mからそのファイルにアクセスすることができます。

また、CP/MとWindows上のCpmDrvWinとの間の通信部分は、Flex9用、F-Basic用などと共通で、8251A使用のRS232Cカードや以前発表した拡張I/Oボード上の6850(ACIA)使用の場合の通信ルーチンが使用できますが、FM-7でも6850(ACIA)の方はあっさりと38400baudで動いています。

未だ完成ではありませんが、とりあえずこの程度でできるのだというサンプルとして、BIOSに追加した仮想ドライブアクセスルーチンを記しておきます。

*================================================
*read windows virtual drive
RDWDRV EQU *
*read 256bytes
 BSR READSUB2
 LBRA RE0

*read 256bytes
READSUB2 EQU *
RDS0 CLR CSUM
 LDA #'R
 LBSR SNDCH read cmd
 BSR ADDCS
 LDA DRVNO
 LBSR SNDCH drv
 BSR ADDCS
 LDA TRKADR
 LBSR SNDCH trk
 BSR ADDCS
 LDA SCTADR
 BSR SETSCT2
 LBSR SNDCH sct
 BSR ADDCS
 LDA CSUM
 LBSR SNDCH csum
*wait receive ACKorNAKorESC
*  if NAK then re-send 'R',Drv,Trk,Sct,csum
*  if ESC then error return
*  if ACK then next
RDS1 LBSR RCVCH
 CMPA #NAK
 BEQ RDS0
 CMPA #ESC
 BNE RDS2
 LDA #$FF *error
 RTS *error end
*
RDS2 CMPA #ACK
 BNE RDS1
* send ACK
 LBSR SNDCH ACK
*receive data(256bytes),csum
*  data is saved to Buffer(X)
*  if csum error then send NAK
*  if csum ok then send ACK and to next process
RDS3 LDX #RCBBUF
 CLRB counter(256)
 CLR CSUM
RDSLOP LBSR RCVCH data
 STA ,X+
 BSR ADDCS
 DECB
 BNE RDSLOP
 LBSR RCVCH csum
 CMPA CSUM
 BEQ RDS4
 LDA #NAK
 LBSR SNDCH NAK
 BRA RDS3
*
RDS4 LDA #ACK
 LBSR SNDCH ACK
*wait receive ACK
RDS5 LBSR RCVCH
 CMPA #ACK
 BNE RDS5
 RTS
*
*return A:sct,BUFHL:0or1
SETSCT2 EQU *
 CLR BUFHL
 LDA SCTADR ;sct
 BITA #$01
 BEQ SE21
 DECA
 INC BUFHL ;0:even, 1:odd
SE21 LSRA
 INCA
 RTS
*
*--------------------
*add check sum
ADDCS EQU *
 ADDA CSUM
 STA CSUM
 RTS
*--------------------
*write windows virtual drive
WRWDRV EQU *
*read 256bytes
 LBSR READSUB2
*set write data
 BSR WRDTSET
*write
WRW2 CLR CSUM
 LDA #'W
 BSR SNDCH write cmd
 BSR ADDCS
 LDA DRVNO
 BSR SNDCH drv
 BSR ADDCS
 LDA TRKADR
 BSR SNDCH trk
 BSR ADDCS
 LDA SCTADR
 BSR SETSCT2
 BSR SNDCH sct
 BSR ADDCS
 LDA CSUM
 BSR SNDCH csum
*wait receive ACKorNAK
*  if NAK then re-send 'W',Drv,Trk,Sct,csum
*  if ESC then error return
*  if ACK then next
WRW3 BSR RCVCH
 CMPA #NAK
 BEQ WRW2
 CMPA #ESC
 BNE WRW4
 LDA #$FF  *error
 BRA WRW7 *error end
*
WRW4 CMPA #ACK
 BNE WRW3
*send data(256bytes),csum
*data is in Buffer(X)
WRW5 LDX #RCBBUF
 CLRB counter(256)
 CLR CSUM
WRWLOP2 LDA ,X+
 BSR SNDCH data
 BSR ADDCS
 DECB
 BNE WRWLOP2
 LDA CSUM
 BSR SNDCH csum
*wait receive ACKorNAK
*  if NAK then re-send data(256bytes),csum
*  if ACK then next
WRW6 BSR RCVCH
 CMPA #NAK
 BEQ WRW5
 CMPA #ACK
 BNE WRW6
 CLRA *no error
WRW7 STA PTOZ80
 LBRA TOZ80
*
*======================================

ということで、あちこちに不備があってまだまだ修正の必要がありますが、CP/M用の仮想ドライブのプロトタイプがとりあえずできたという報告でした。

2020年4月29日水曜日

CP/M用の仮想ドライブの構築ソフト

CP/M-80用の仮想ドライブ構築ソフトCpmDrvWin.exeを作りました。



FM-7用の自作Z-80カードのためのCP/Mを制作中ですが、何回も起動を繰り返すので、フロッピーディスクから起動したり、読み書きするのは結構面倒です。
とりあえず起動するのはフロッピーからでも仕方がないとして、せめて読み書きはもっと便利にしたいし、ファイルをWindowsとの間で自由にやり取りしたいと考えて、自作CP/MのBIOSの仕上げを中断して、仮想ドライブ構築ソフトCpmDrvWin.exeの制作に取り掛かりました。

今までにFlex9用、OS-9用、F-Basic用を作ってきましたが、CP/M用については、以前作ろうと試みたものの、CP/Mのファイルシステムが理解できず挫折していました。
今回は中日電工の菱田さんのブログで勉強しましたので大丈夫だとは思いましたが、それでも意外に時間がかかりました。

CP/Mのファイルシステムというかディレクトリの構成法は他のDOSと比較すると、原始的というかどうしてこうなっているのかと思えるもので、中でも特に、同じファイル名のディレクトリエクステントが複数存在する(それも、ディレクトリ全体を読まないと幾つあるかも分からない...)のには参りました。

とりあえず第1版として出来上がったものが動作している様子を示します。


CpmDrvWin.exeの動作画面


下のXM7上で動作しているFM-CP/Mと同じ情報が(並び順は異なりますが)表示されているのが分かると思います。
XM7ではスクロールアップしてしまったものはもう見ることはできませんが、CpmDrvWin.exeでは自由にスクロールアップダウンしてみることができます。


XM7上のFM-7 CP/Mの動作画面

機能としては、
・ファイルの追加(リストボックス中へのドラッグ&ドロップによる)
・ファイルの名称変更、削除、Windowsへの読み出し(ファイルを選択してからの右ボタンメニューによる)
・全ファイルのWindowsへの読み出し(編集メニュー中のコマンドによる)
があります。

現在は、表示されているドライブがWindows上の仮想ドライブとして見えるように、CP/M側のBIOSを手直し中です。
しばらく使用して不具合などを修正したら、CP/MのBIOSと共に公開する予定です。