2021年7月8日木曜日

FM-7/77用の改良版I/O拡張基板用のF-BASICドライバを作成

FM-7/77用のI/O拡張基板用にF-BASIC用のドライブソフトを作成しました

6月10日に報告した「FM-7/77用のI/O拡張基板を改良しました」ではF-BASIC用としては使用しないようなことを書きましたが、Flex9やOS-9では使えるのにF-BASICでは使えないというのはつまらないので、F-BASIC用のドライブソフトも作成することにしました。


F-BASIC用のソケットも実装しました

元にしたのは、2019年6月12日の「FM77用の拡張IOボード、ROM/RAMディスクボード」でのFLEX9版の拡張ROM/RAMドライブソフトと、2019年9月25日の「FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成」での裏RAMを使用したWindows上の仮想ディスクのドライブソフトの2つで、この2つのソフトを合体させて裏RAMに置けば良いだろうと考えました。

両方とも動作実績がありますので、それ程苦労することはないだろうと思って始めたのですが、いつものようにドジをしたせいで見込み以上に時間もかかりながらも、何とか動くものができました。未だ動作に納得がいかない点があるのですが、とりあえずここまでをまとめておきます。


制作したソフト

作成したのは、FM-7/77で動作させるもので

(1)RDSKWIN : ROM/RAMディスク&Windows仮想ディスクのドライブソフト

(2)RRWCHG : ROM/RAMディスクとWindows仮想ディスクを切り替えるソフト

(3)RAMFMTFB : ドライブ3のRAMディスクを初期化するソフト

の3本です。Windows側の仮想ディスク構築ソフトは以前のものをそのまま使用しています。


使用手順

使い方は次のようです。

1.FM-7を起動して、ドライブ数に4を指定する。

2.LOADM "RDSKWIN",,R でFM-7側のドライブソフトを起動する。

3.Windows側で FbasDrvWin.exe を起動し、ドライブ2と3にF-BASICのイメージファイル(.77, .88, .DSK)をセットしておく。


手順1.2.3.ではI/Oエラーとなる

【注】この状態で、ドライブ2はROMディスク、3はRAMディスクに設定されているが、なぜか FILES "2:やFILES "3: を実行しても Device I/O Error が出るので、次の操作を行う。

4.LOADM "RRWCHG",,R を起動するとドライブ2がROM、3がRAMと表示されるが、2または3を入力すると該当のドライブがWindows DRVに切り替わるので、その後 0を入力して終了する。



Windows仮想ディスクに切り替え

5.FILES "2:またはFILES "3:を実行する。Windows仮想ディスクを使用する場合はこの状態で使用する。

Files "3: でWindows仮想ディスクが読めています

Windows仮想ディスクを読んだ


Windows側でのセクタを読んでいる様子です

Windows画面の表示

6.ROM/RAMディスクを使用する場合は、再度 LOADM "RRWCHG",,R を実行してドライブ2または3をROMやRAMに切り替えて使用する。

今度はちゃんとRAMディスクが読めています。


RAMディスクが読めている


追加:最初にRAMディスクを使用するときには、LOADM "RAMFMTFM",,R を実行して初期化をしておく。バッテリバックアップされているので、電源を切ってもデータは保持されている。

具体的な使い方ですが、ROMディスクにはF-BASICのシステム等を入れておき、必要ならRAMディスクに転送してRAMディスク上でアセンブルやコンパイルを実行するという形でROM/RAMディスクを使用し、処理結果はWindows仮想ディスクに転送してWindowsで保存するというのが便利かなと思います。


未解決の点

以上ですが、手順1,2,3のみで良いはずなのに、最初のみ手順4で一度はWindows仮想ディスクをReadする必要があるのですが、その理由はまだ分かっていません。

RDSKWIN のソースを見ていただければ分かりますが、ROM/RAM用のRead1, Write1とWindows仮想ディスク用のRead2, Write2とは全く別ルーチンとなっているのにと思いますが、ワークエリアの設定に問題があるのかもしれません。

作成した3つのソフトのソースと以前から使用しているFbasDrvWin.exe(バイナリ)をOneDriveに上げておきますので、アドバイス等ありましたらよろしくお願いします。