ラベル RS232C の投稿を表示しています。 すべての投稿を表示
ラベル RS232C の投稿を表示しています。 すべての投稿を表示

2025年10月18日土曜日

FM-7/77用RS-232CカードにRTCモジュールを追加して一枚のカードに

 FM-7/77用RS-232CカードにRTCモジュールを追加して一枚にしました

以前、FM-7/77用のRS-232Cカードを製作しました。
「FM-7/77用のRS232Cカードを作りました 2019年8月16日」
(https://flexonsbd.blogspot.com/2019/08/fm-777rs232c.html)

より使いやすくなるように、何回か修正を加えて最終的に下記のような形で使用してきました。
「FM-7/77用の自作基板(RS232Cカード、FT245通信カード、1024KB拡張RAMカード)のプチ改良 2024年3月25日」
(https://flexonsbd.blogspot.com/2024/03/fm-777rs232cft2451024kbram.html)

しかし、FM-7/77の32Pスロットは数少ないので、自作した32Pスロット拡張基板を用いても窮屈になってきました。

ということで、とりあえずRS-232CカードにRTC_SDカード中のRTC機能を追加して一枚にまとめてみることにしました。(F-Basicではともかく、Flex9やOS-9ではRTC機能は必須です)


製作の方針

COM部の入出力ですがシリアルコネクタは使いにくいので、今はTTL_USB変換ケーブルを使用することにしています。

また、RTC機能はZS-042というモジュールを使用し、そのコントロールにはPIA(68B21)のポートAを使用しています。スペース的には40ピンICを使用するのは非常に不利なのですが、PIAのポートAの特別な機能(出力に設定したままで入力も可能)がアセンブラでI2C機能を使用するのに最適ですので、そのまま使用することにしました。(回路を変更するとI2Cのプログラムを書き換えるのがかなりの手間になりそうなので、、、)

そのために全ICがそのままでは収まらなくなり、やむを得ず6個のゲートICをGAL20V8Bに置き換えることで何とか10x8cmのサイズに収めることができました。

(40ピンのICのわずか2ビットしか使わないのはいかにも勿体ないので、必要ならポートBが他の用途に使用できるようにピンヘッダを付けましたが、、、)


製作したカード

以上より、下記のようなRTC_COM8251Aカードが出来上りました。


製作したRTC_COM8251Aカード

本体に装着しました

本体スロットに装着した様子



回路図を示します(GALのプログラムは省略しました)

RTC_COM8251A

機能の確認

通信テストに使用したプログラム(F-BASIC文法書掲載のもの)


サンプルプログラム

通信の様子(FM-7側)

実行の様子(FM-7側)

通信の様子(Windows  TeraTerm側)

実行の様子(TeraTerm側)

RTCモジュール機能を下記に示します。


RTC機能の確認

起動直後のF-Basicでは日付・時刻が不定です。

RTC_WR2で時刻を設定します。RTCモジュールに設定されると同時にF-Basicのタイマー関係のバッファにもセットされます。

PRINT文で確認できています。

また、RTCモジュールの設定値をRTC_RD2で読み出し、RTC_SET2でF-Basicのバッファに転送できます。


最後に

製作直後は8251Aによる通信機能が全く反応せず、焦りましたが、TeraTermの改行コードの設定をデフォルト値のCRからAUTOやCR+LFに変更することで正常に通信ができました。(最初にRS232Cカードを製作した時に必要だった設定を忘れてしまっていました。。。)

通信速度ですが、純正のRS232Cカードでは19200baudまでとなっていますが、インテルやOKIの8251Aでは38400baudまで可能です。

また、RTCモジュールのコントロールソフト(RTC_WR2, RTC_RD2, RTC_SET2)ですが、FM-11用のものがそのまま使用できます。




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に公開しますので、使用した結果に対して私は責任を負わないことを了解していただいたうえで自由にご利用ください。


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年12月3日木曜日

Ndittを使用しないでGOTEK用のHFEファイルを作成する(その2)

 

前回紹介したプログラムを改良し、多少の高速化を図りました


前回紹介したプログラムは、FM-7側はF-BASICで作成し、WindowsPC側は2つのプログラムに分かれていましたが、FM-7側のプログラムをアセンブラで、WindowsPC側のプログラムを一つにまとめることで、より使い易くするとともに多少の高速化を図ることができました。

(1)FM-7側(RDIMG)
アセンブラで書き直すにあたって、最初はFDCを直接コントロールしてトラックリードコマンドで、1トラックを一気に読み込んでメモリに展開し、そこからセクタデータを取り出すと高速になるのではないか(ディスクの読み込みが40x2の80回で済むので)と考えて作成してみました。
結果、セクタデータは得られたのですが、標準のフォーマットとは異なる個所もあり、また、読み込むたびに値が変わる部分もあり、全てに対応するのは結構面倒そうです。
ちなみに、読み込んだトラックデータは以下のようでした。

                            標準の値                     実際の値
----------------------------------------------------------------------------------------------
GAP1                      4E                             4E,その他の値
----------------------------------------------------------------------------------------------
SYNC                      00 (12バイト)            00,その他の値
IDアドレスマーク    A1,A1,A1,FE             14,A1,A1,FE or C2,A1,A1,FE
IDとCRC(4+2バイト)             同じ
----------------------------------------------------------------------------------------------
GAP2                      4E                              4E,その他の値
SYNC                      00 (12バイト)            00,その他の値
IDアドレスマーク    A1,A1,A1,FB             14,A1,A1,FB or C2,A1,A1,FB
                                                                 (FBはF8の場合もあり)
DATAとCRC(256+2バイト)    同じ
----------------------------------------------------------------------------------------------
GAP3                       4E                             4E,その他の値
----------------------------------------------------------------------------------------------

これを見る限り12バイトの00に続いた後、 14(orC2),A1,A1,FEの後にID(TRK,SIDE,SCT,セクタ長)+CRCが、14(orC2),A1,A1,FBの後にDATA(256バイト)+CRCがあると決め打ちして良いようにも思いますが、ちょっと不安です。

ということで結局、BIOSを用いてセクタリードを40x2x16の1280回繰り返すことにしました。1セクタ読むごとに256バイトのデータとチェックサム値を転送しています。ファイル名をRDIMGとしました。


(2)WindowsPC側(mkd88img.exe)
前回のプログラムはFM-7から送られたデータをそのままセクタ順に保存してできたDSKファイルをまず作り、次に別のプログラムを用いてD88ファイルを作成するものでしたが、それを一体化してmkd88img.exeとしました。処理結果としてDSKファイルとD88ファイルの2つが生成されます。

FDイメージファイル作成の手順


(1)FM-7とWindowsPCをRS232Cボードで接続して適切なボーレートに設定します。RTS/CTS制御可能なボードであれば19200Baudが可能です。
(2)WindowsPC側のmkd88img.exeを起動します。オプションを付けずに起動するとCOM4,19200Baud,生成ソフト名FDIMG.DSK, FDIMG.D88となりますので、変更する場合は下記のようにオプションを付けて起動します。
 mkd88img [p=n] [b=nn] fname (fnameはディレクトリを含んでも良い)
(3)FM-7側のRDIMGを起動します。デフォルトではドライブ0のディスクを読むようになっているので、他のドライブの場合は一旦Loadして(&H6000からに入ります)から&H6002の値0を希望のドライブ番号に変えた後、Exec &H6000で実行します。
(4)指定したディレクトリにDSKファイルとD88ファイルが作成されます。


結果など


速度ですが、2Dディスクを処理するのにおよそ10分(19200Baud)、15分(9600Baud)、20分(4800Baud)、35分(2400Baud)程度となりました。
8251Aを直接コントロールしているのでRTS/CTS制御をしてボーレートを上げることができていますが、2400Baudでは前回の結果と同じ程度なので、処理時間はディスクの読み込み方法とはあまり関係がなく、ほぼ転送速度で決まってしまっているようです。

作成したRDIMGとmkd88img.exeをOneDriveにMakeD88ImageFile2.zipとして上げておきます。FM-7にRDIMGを直接入力する場合はRDIMG.bin(236バイトもありますが...)を打ち込みます。(RDIMGはF-BASICの機械語形式に合わせたもので仮想ドライブにドラッグ&ドロップする場合に用います。)



2020年11月24日火曜日

Ndittを使用しないでGOTEK用のHFEファイルを作成する

 Ndittを使わないGOTEK用のHFEファイルの作成方法を紹介します


8月9日のブログ「FM-7/77にGOTEKを接続する」でFM-7/77でGOTEKが使えるという紹介をしましたが、実際にGOTEKを使用する場合の最大の障壁は、如何にして手持ちのフロッピーディスクの内容をWindowsPCに取り込むかだと思います。

〇標準的な方法

下図の左の方法で、3.5インチ又は5インチのFDDを装着したWindowsPCを用意し、Nditt.exeでフロッピーディスクを読み込んで.D88(.D77)イメージファイルに変換するというものです。

実際、私もこのためだけに3.5インチと5インチFDD付きの古いWindowsXPパソコンを保管しています。しかし、これは如何にも面倒です。

そこで、FDDのないWindowsPCでも可能な方法を紹介します。

〇FM-7を使用する方法

下図の右のように、FM-7上でフロッピーディスクの全セクタを読み出してWindowsPCに転送し、作成された.DSKファイルを.D77形式に変換するというものです。







このために必要なソフト(FM-7側:SNDIMG,  WindowsPC側:rcvfdimg.exe)を作成しました。

さらに最後の手順の.DSKから.D88への変換には従来から使用しているソフト FbDsktoD77.exe を使用しました。


各ソフトの機能

・転送ソフト SNDIMG:

FM-7上で動作するF-BASICのソフトで、フロッピーディスクの全セクタを読み込み、バイナリのままでWindowsPCに送信します。

ドライブは0を設定してありますので、他ドライブの場合は直接プログラムを修正します。

・受信ソフト rcvfdimg.exe:

WindowsPC上で動作するコンソールソフトで、受信したセクタデータをTrack0,Sector1からTrack39,Sector32までそのまま順に並べた.DSK形式のファイルを作成します。

  Usage:rcvfdimg [p=n] [b=nnnn] [filename](全て省略可)

        (省略時:p(ポート)は4、b(ボーレート)は4800baud、filenameはFDIMG.DSK)

・.DSKファイル変換ソフト FbDsktoD77.exe:

WindowsPC上で動作するコンソールソフトで、.DSK形式のF-BASICファイルを.D88形式に変換します。私が普段Windows上の仮想ディスクで使用するファイルを作成するために使用しているものなので、ファイルの拡張子が.D77にしてありますが、それを.D88にリネームします。また、デフォルトでは640KBのファイル用なのでオプションとして39を付けて変換する必要があります。(ファイル名のみで起動するとUsageが表示されます。)

  Usage:FbDsktoD77 filename 39 (ファイル名の拡張子は不要)



使用感など

最近はFDDがついていないPCが普通になってしまったようで、結構困ることがありますので、この方法もありかと思います。

ただ、速度的にはかなり遅くて2Dディスクの320KBで30分余りかかります。。。

ディスクの読み込みが遅い上にBASICでのRS232C通信ですのでさらに遅くなるのは当然ですが、FM-7(と普通のWindowsPC)でイメージファイルが作成できるのはメリットではないでしょうか。

GOTEKを使おうと考えるということは、当然、FM-7にはフロッピードライブが装着されていると思いますので、あとはWindowsPCとの通信手段としてのRS232Cカードなどがあれば良いわけです。

RS232Cカードの自作もそれ程大変ではないと思いますし、他にも「思い付きハードでソフトに七転八倒」さんが製作されたFT245RL使用の高速転送カードを使用できればもっと速くなると思います。また、以前ブログで紹介したArduinoMega2560を使用したカードを使うという手もあるかと思いますが、まだ試していません。

使用したソフト(SNDIMG,rcvfdimg.exeソース付き,FbDsktoD77.exe)をOneDriveに上げておきます。rcvfdimg.exeは以前のブログ「ASSIST09に追加したLoad, Saveコマンドを改良しました」で紹介したslwinr.exeを手直しして作成しましたが、ソースもつけておきましたので改良して使っていただければと。

蛇足になりますが、F-BASICのソフト SNDIMG だけは何とかしてFM-7に読み込む必要がありますが、40行足らずですので直接打ち込んだ方が早いと思います。


2019年10月26日土曜日

FM-7/77用RS-232Cカードの改良版

FM-7/77用RS-232Cカードの改良版を作りました


8月16日のブログでYSFLIGHT.COMさんの回路図を使わせてもらったRS-232Cカードの製作記を載せましたが、一個所ミスがあったのと、ストレートとクロス(リバース)接続を選択できるようにしたいと考えて、改良版を製作しました。
回路図を示します。

RS-232 Ver1.1

製作した基板です。

左:初版、右:改良版

ジャンパ―ピンで、ストレートとクロス(リバース)を切り替えることができます。


今回はミスなし


YSFLIGHT.COMさんの名前入りです



38400baudでの動作


YSFLIGHT.COMさんのブログでは、Intelの8251Aでは19200baudまでだが、C-MOSの82C51Aでは38400baudで動作すると記されていました。
私のところでは、IntelのP8251A('77年製)ではOKで、TOSHIBAのチップではダメでした。
YSFLIGHT.COMさんによれば、OKIの互換チップでは38400baud動作を保証しているということでしたのでebayで購入してみました。2業者から購入しましたら、刻印はMSM82C51A-2RSとM82C51A-2と異なっていましたが、どちらも確かに38400baudで動作しました。

私は9月26日のブログに書きましたように、シリアル変換のADM232を外してジャンパー線で82C51Aの端子をコネクタに直結して、TTL-USB変換ケーブルを介してパソコンのUSB端子に接続して使用しています。

改めてYSFLIGHT.COMさんに感謝いたします。


2019年9月26日木曜日

RS232Cカードに関するちょっとした工夫

より使い易いようにRS232Cカードの使い方の工夫をしました


8月16日や9月25日のブログの画像で分かりますように、RS232Cカードの先にはD-Sub 9ピンコネクタがつながり、その先にストレート接続をクロス(リバース?)接続に変換する変換回路があり、最後はシリアルーUSB変換ケーブルでWindows機に接続されています。

もう少しすっきりさせたいということで、次のように考えました。
1.シリアルーUSB変換ケーブルではなく、普通に出回っているTTL-USB変換ケーブルを用いる。
2.RS232Cカードの出力を最初からクロス接続にする。

1.については、そもそもRS232Cに変換するのではなく、8251Aの入出力をそのまま取り出せばよいのですから、基板上のADM232を取り去って、代わりに画像のようなジャンパ基板をソケットに装着します。


ICの代わりにジャンパー


2.については、現在のRS232Cカードにストレート/クロス切替機能を追加した基板を製作中ですが、現在のRS232Cカードの場合にはケーブルで工夫することになります。
ということで、画像のようなケーブルを製作しました。


TTLクロス出力のケーブル



これで、比較的高価なシリアルーUSB変換ケーブルを使うことなく、低価格のTTLーUSB変換ケーブルが使えますので、見た目もすっきりです。


これだけでOK!すっきり



私はヤフオクでの3~400円程度のものを使用していますが不都合はありません。また、5V仕様だけでなく、3.3V仕様のものでも同じように使えています。
(蛇足ですが、3.3V仕様と言いながらVCCに5Vが出ているものもあるようで、私はこれでPICのICを破壊してしまいました。(泣))

2019年9月25日水曜日

FM-7/77のF-BASIC用の仮想ドライブ構築ソフトが完成

F-BASIC(V3.0)のドライブ2,3として仮想ドライブを構築するソフトが完成


[2020年11月3日]仮想ドライブ構築ソフトのバグ修正版Ver1.2に関して追記しました

[2021年1月13日]仮想ドライブ構築ソフトのバグ修正版Ver1.21に関して追記しました

今まで、FM77AV40SX上でFLEX9とOS-9用にWindows機上の仮想ドライブを構築して、内蔵ドライブ0,1に加えて仮想ドライブを2,3として使用していましたが、最近、常用しているSXに加えて、再びFM-7をいじりだしたこともあり、ディスクドライブを持たないFM-7でDISK-BASICを使いたくて、先日製作したRS232Cカードを使用して何とかしたいと考えていました。
そんな時に、日本橋電気街徘徊日誌さんからプリンタポートに接続するシリアルメモリからDISK-BASICを起動するカードを頂きましたので、これをベースにして仮想ドライブを構築することとしました。

RS232Cを内蔵しているFM77AV以降の機種ではそのままで、FM-7(DISK-BASICが動作する環境が必要)等ではRS232Cカードを追加すれば仮想ドライブが実現できます。これによって、ファイルは全てWindows上のファイルとして保存でき、簡単にDISK-BASICとの間でやり取りできます。
さらに、私の製作した拡張I/OボードのFT245RLやFT232RLを用いたパラレル/シリアルポートを使用することもできます。

全体の構成図は以下のようです。


全体の構成


FM-7用のRS232Cカードは8月16日のブログで紹介したもので、拡張I/Oボードは6月12日と8月26日のブログで紹介したものです。


制作したプログラム


(1)仮想ドライブ構築ソフト FBasDrvWin.exe(Windows側)
基本的な考え方は2018年4月16日のブログ「FLEX用Virtual Driveの作り方」で説明した通りですが、DISK-BASICのFMS(ファイルマネージメントシステム)に相当するものを実装する必要がありますので、エミュレータXM7を用いて、ファイルを追加・削除・名称変更などをする毎に変更前と変更後のDSKファイルの全体を比較し、どこが書き変わっているかを調べるという愚直な手法で調査し実装しました。
手間としては、OS-9のような複雑なシステムではなく、比較的単純なFATシステムですので、それ程大変ではありませんでした。

実際に使用してみると、BASICプログラムについては、Windowsで作成して仮想ドライブにDrag/Dropすることで簡単にDISK-BASIC側に持っていけるのですが、機械語プログラムはそのままでは持っていけないので、S-format形式やHex形式のファイルを読み込んでDISK-BASICの機械語ファイル形式に変換して保存する機能を追加しました。

(2)ドライブ拡張ソフト WINDRVxx(FM側)
基本的にはドライブ番号が2,3の場合にBIOSの8,9,10を切り替えて、仮想ドライブにアクセスするようにすれば良いわけですが、それをどこに置くかが問題です。
参考にしたのは、Oh'FM 1984年11月号に掲載された「裏RAMディスク」(轍名聡さん)です。これを見習ってBIOSの変更部のみを$FC30~に置き、その他は裏RAMの$8000~に置くことで表RAMの消費を少なくすることができました。

後はFMとWindows間の通信に関わる部分のみで、3種類の通信経路を実装しました。
RS232Cの8251A、拡張I/Oボード上の6850+FT232RL(または6850+ADM232)と6821+FT245RLの3つです。

8251Aのプログラムに関して


6850と6821を使用した場合のプログラムは、慣れていることもあり、割とすんなりと作成できましたが、8251Aを使用する方には苦労しました。
FM側からの送信はできるのですが受信ができないのです。F-BASICのプログラムでは問題なく送受信ができることからハードに問題がないことは分かりますし、プログラムも単純なもので、それにRTS/CTSによるハードウエア制御を加えただけで、6850では同様な制御がちゃんとできています。
この問題に一ヶ月以上を費やしましたが、ネットにも8251Aを機械語でハードウエア制御した例は見つからず、お手上げ状態でした。そんな時に、ネットのルネサスの質問箱のようなところで、USARTでのRTSは送信・受信の両方を同時には制御できないようだという書き込みを見ましたので、もしかしたらこれかもと思いましたら、ビンゴでした。

つまり、8251AでRTS制御するときには、RxEとTxENを同時にイネーブルにしてはいけないということでした。受信時にはRxEのみをイネーブルにし、送信時にはTxENのみをイネーブルにしなければならないということなのです。その部分のソースリストを示します。

*
MRSTU EQU $40 ;master reset
MODEU EQU $4E ;1stopbit,non pari,8bit,16x
CLRTSU EQU $15 ;RTS=H,ER,RxE,TxEN
SERTSUR EQU $34 ;RTS=L,ER,RxE for receive
SERTSUS EQU $31 ;RTS=L,ER,TxEN for send
TxEMPTY EQU $04
*
*--------------------------------------
* receive from serial port
* (use USART 8251A)
*    A <- port
*
RCVCH EQU *
 LDA #SERTSUR ;RTS=L
 STA SCMD
 NOP
RCV1 LDA SSTS
 ASRA
 ASRA
 BCC RCV1
 LDA SDATA ;get data
 PSHS A
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*
*--------------------------------------
* send to serial port
* (use USART 8251A)
*    port <- A
*
SNDCH EQU *
 PSHS A
 LDA #SERTSUS ;RTS=L
 STA SCMD
 NOP
SND1 LDA SSTS
 ASRA
 BCC SND1
 PULS A
 STA SDATA ;send data
 PSHS A
SND2 LDA SSTS
 BITA #TxEMPTY
 BEQ SND2
 LDA #CLRTSU ;RTS=H
 STA SCMD
 PULS A,PC
*

6850では同時にイネーブルにしても何の不都合もありませんので、8251Aのこの制約は何なのだろうかと思います。
知っている方には常識かもしれませんが、どなたかのプログラミングの参考になればと思いますのであえて書き記しておきます。

プログラムですが、メモリ節約のためにすべてに対応するプログラムではなく、別々のプログラムとしました。
 FM-7(8251Aカード)用     :WINDRVU7
 FM77AV40SX(内蔵8251A)用  :WINDRVUX
 FM-7/FM77AV40SX共通(6850+FT232RL用):WINDRVA
            (6821+FT245RL用):WINDRVP (要RTS制御)
の4種類です。


動作中の様子


各部の接続の様子を示します。左上に見えるのがシリアルメモリからDISK-BASICを起動するカードで、プリンタポートに接続されており、電源は拡張ポートから取っています。
左が自作の拡張I/Oボードで、FM77AV40SX用に製作したものですが、インターフェースボードを介して32Pスロットに接続しています。

動作中の様子


Windows機上のFBasDrvWin.exeの画面です。DSKファイルだけでなく、D77ファイルも扱えます。

FBasDrvWin.exeの画面


RS232Cカードと拡張I/Oボードへのケーブルの接続の様子です。

RS232Cカードと拡張I/Oボードへのケーブル


拡張I/Oボードへのインターフェース基板です。単なるピン配置の変換のみです。

拡張I/O ボードへのインターフェース基板


プログラムのインストール方法

インストールするためのF-BASICプログラムを用意しました。インストールの手順書を添付しましたので、そちらをご覧ください。


プログラムの使用方法


(1)FM-7,FM77AV40SX側
起動時にドライブ数として4を指定します。
LOADM "x:WINDRVxx",,R と入力して、必要なプログラムを起動します。

(2)Windows側
FBasDrvWin.exeを起動します。
起動時に同じフォルダ中に.INIファイルがあれば、それを読んでポート番号、ボーレート、ハンドシェークを設定します。
ボーレートはFM77AV40SXで8251A使用の場合のみ19200baud、その他は38400baudです。
処理するディスクファイルをDrive 2や3のボックスにDrag/Dropします。
ディスクファイルの形式はDSK形式とD77(D88)形式のどちらにも対応しています。
ファイルリスト欄でファイルの追加、削除、名称変更ができます。

【制約】2DDディスク対応について
FBasDrvWin.exeは2DDディスクファイルに対応するように制作してありますが、WINDRVxxの方は現在のバージョンではF-BASIC V3.0にのみ対応しています。
F-BASIC V3.3では$FC30からの領域を使っているのか、それとも裏RAMの$8000からの領域を使っているのか不明です。保存領域をずらしてみたりしているのですが、今のところ動作させることができていません。もしかしたらBIOSそのものの場所がV3.0とは違っているのかも。(F-BASICのことは良く分からない。。。)

(FBasDrvWin.exe単独で2DDディスクファイルを処理することはできますので、例えばこれを用いて作成したディスクファイルをエミュレータXM7で使用することもできます。)

(3)F-BASICで扱うファイルの形式(の一部)
(3-1)BASICファイル(アスキーセーブ)
先頭に改行($0D,$0A)があればBASICアスキーファイルと解釈される。
(3-2)BASICファイル(バイナリセーブ)
先頭からプロテクトフラグ($FF,$FE)、UNLIST開始行番号、以降にテキストが続く。
(3-3)機械語ファイル
先頭から$00、データ長(2バイト)、格納開始アドレス(2バイト)、データという形のデータブロックが一つだけ。最後に$FF、ダミー(2バイト)、入り口番地(2バイト)という形の終了ブロックが続く。

WinodwsからファイルをDrag/Dropで追加する場合、先頭の文字を見て、以上の3つを判別してディスクファイルに格納しています。
例えばBASICプログラムをWindows上で作成する場合は、先頭に空行を入れておけば良いということです。また、機械語ファイルの場合はS-format形式あるいはHex-format形式にして放り込めば、機械語ファイル形式に変換されて保存されます。

終わりに


もう使わないだろうと思ってFM-7の5インチ・3.5インチディスクシステムやディスプレイ一式を処分してしまっていたのですが、63C09カードなどがあるので全てを処分するには忍びなく、本体2台とソフトだけは残しておいたのですが、これでフロッピィを使わずにDISK-BASICを使うことができるようになりました。
カードを下さった日本橋電気街徘徊日誌さんに感謝いたします。

制作したプログラム(WINDRVxxはソースとバイナリ、FBasDrvWin.exeはバイナリのみ、インストールに使用するBASICプログラム)をOneDriveに上げておきます。

蛇足というか愚痴というか...
しかし、32Pスロット用のコネクタは入手しにくいですね。1個1,000円近く出せば入手できるようですが高すぎる。ちょっと前には秋葉原の通販で少しは安く買えたのですが、今回注文したら、何と入荷が11月半ばだそうです。(でも待つしかない、トホホ)
手持ちももう切らしているので、工作が進まない。。。

[2020年11月3日追記]
公開したFBasDrvWin.exeにバグが見つかりましたので修正版Ver1.2をOneDriveに上げておきました。

[2021年1月13日追記]
公開したFBasDrvWin.exeにバグが見つかりましたので修正版Ver1.21をOneDriveに上げておきました。(単純なバイナリファイルのドラッグ&ドロップ時の処理の修正)

2019年8月16日金曜日

FM-7/77用のRS232Cカードを作りました

富士通純正のFM-7/77用RS232Cカードの回路図を元にして基板を作りました。


YSFLIGHT.COMさんが富士通純正のRS232Cカードの回路を解析して回路図を公開されていましたので、私もその回路図を元にして作成してみました。

以前、FM-7でZ80カード(とCP/M-80)やOS-9Level1を使用していた頃はRS232Cカードも所有していたのですが、FM77AV40SXがメインになってからは、もう使うことは無いだろうと思ってFM-7一式を処分してしまいました。
ところが最近になって、FDDの代わりにSDカードやWin上の仮想ドライブなどを用いてFM-7を使うという試みをネット上で見ることがあり(shuji_akita2001さん、日本橋電気街俳諧日誌さんなど)、自分もやってみようということで放置してあった残りのFM-7を2台引っ張り出してきました。

まずはWindows機と通信ができなければ話にならないということで、shuji_akita2001さんから頂いたFT-245を用いた基板を使用して始めていました。
そんな中で、YSFLIGHT.COMさんのブログを見て、純正と同じボードを持っているのも悪くないな、FM-7が2台あるのだから2枚作れば良いかなと思って作ることにしました。

YSFLIGHT.COMさんが公開された回路図を見ると75188と75189を使っているので、今どきこれはないだろうということで、この部分をADM232に置き換え、さらに格安基板にするために10cmx10cmに収めることを目標に作成しました。
その結果、ADM232がIN/OUTそれぞれ2セットしかないので8251AのDTRとDSRは未接続となり、純正とは完全互換ではなくなりましたが、この2つを使用したソフトはまずないだろうと考えました。結局、10㎝×8cmのコンパクトな基板が出来上がりました。

回路図を下に示します

回路図(間違いあり)

実はこの回路図には1箇所間違いがあります。ADM232のピン2に接続されているC17はGNDではなくVCCに接続しなければなりません。

間違いを修正して無事に動作したと言いたいところですが、修正中に誤って隣のラインもカットしてしまったことに気づかず、送信はできるのに受信ができないという変な現象に悩まされることになりました。全配線を確認する作業の後、ようやくカットされた箇所を見つけて修理、無事に動作しました。

YSFLIGHT.COMさんは、C-MOSの8251Aなら38400baudで動作したと書かれているのですが、私のところでは、’83年製の8251Aでも38400boudで動作しました。(短いデータの通信しかしていませんが...)

動作している様子を示します。
F-BASICのプログラムでWindows機のTeraTermに送信し、TeraTermからファイル送信されたデータを受信して表示しています。38400baudで動作しています。


動作画面

下画像のようにRS232Cカードから自作のストレート/クロス変換ボードを通してRS232C-USBケーブルでWindows機に接続しています。
また、ディスプレイですが、以前使用していたXRGB-2は処分してしまったので、画像にあるようにFM-7のグリーンディスプレイ端子から自作のケーブルでI-O DATAのTVBOX2のコンポーネント端子に接続し、RGB出力をCENTURYのLCD-10000Vに入れています。
これでも80x25で表示できています。

接続の様子

基板の装着状態です。フラットケーブルで取り出せば、カバーを閉じることができます。

基板のアップ(1)


基板のアップ(2)

基板の表面と裏面を示します。
実は製作で最も時間がかかったのはD-Sub9ピンの工作です。使用したのはD-Sub9ピンのメスコネクタのL字タイプのものです。これの余分な個所をヤスリで削り、ピンをストレート状態に直してハンダ付けしています。(もう少し削って薄くした方が良かったようです...)

完成基板と生基板の表面


同裏面(本来不要な修正線が入っている)

ということで、無事に38400baudで動作するRS232Cカードが出来上がりましたので、FDDもカセットテープもない素のFM-7ですがプログラムを送り込んで動作させることができそうです。

今は、FLEXやOS-9と同様なF-BASIC用の仮想ドライブ構築ソフトFbasDrvWin.exeを作成してありますので、F-BASIC側のDISK BASICのFDDアクセスルーチンをフックして仮想ドライブをアクセスするように切り替えるルーチンを作成中です。
(それにしても、F-BASICをほとんど使用したことがないので良く分からないことが多い...)
素のFM-7なので保存する手段がなく、FM-7側の切り替えルーチンを送り込んで動作を確認という作業を繰り返すのにこのカードを使用しています。
完成すれば、このRS232Cカードではなく、shuji_akita2001さんの基板に置き換えて高速化を図る予定です。

回路図を公開していただいたYSFLIGHT.COMさんに感謝いたします。