2025年7月10日木曜日

FM-11用のFT245カードのドライバ作成に四苦八苦

 FM-11用のFT245カードがようやく完成しました

ミスを重ねて作り直していましたが、ようやく3作目で完成しました。

これが完成したFM-11用FT245カードです。


FT245カード

右側が本体の後方側で、コネクタの端から筐体の端までの間隔がそれほど大きくないので、基板上のUSBコネクタの位置を最初に作成したものよりもかなり下げてあります。

回路図を示します。

FT245 R3.3


基本的にFM-7系のFT245カードと同じですが、IOS信号の生成部を追加し、*EB信号を反転させています。


ハードはこれで良いとして問題はドライバソフトです。

FM-11AD2には2HDと2Dの2種のドライブが接続されていて、通信経路もこのFT245カードの他に内蔵COMポート(8251A)があり、さらに拡張COMポート(68B50)も追加しました。
そして、従来からFM-7でも使用しているFT245カードですので、FM-11だけでなくFM-7/77でも共通に使用できるドライバにしたいと考えました。

四苦八苦した挙句、これら全てに対応するドライバを作成してみました。

Windows側のft245drv.exeの画面です。
ディスク種別、OSの種類、通信経路が選択できるようになっています。
また、FM-7用では転送はDAT形式のみが可能でしたが、D77、DSK形式でもFM側に転送できるように拡張しました。


ft245drv.exe


FM側のソフトのメニュー画面です。
従来のドライブ、ディスク種別の選択の他に通信経路と動作機器を選択できるようになっています。


FM側のドライバのメニュー

ところが転送速度を確認してみると、FT245使用では2Dの転送が両方向とも1分弱、2HDではFM-11->Winでは2分弱と想定通りであるのに対してWin->FM-11では10分以上と極端に遅いのです。

SNDCH、RCVCHルーチンは今まで使用してきた実績のあるもので間違いがあるはずはありません。割り込み関係をいじってみたり、Windows側との間をハンドシェークにしてみたりとあれこれ試みても変わりません、、、

ハードに問題があるのかと疑って、前々回のブログで報告したFM-7用のカードをFM-11で使用するためのアダプタを使用して、FT245モジュール使用の初代を始め数枚のカードで試してみたり、配置アドレスを変更してみたりしましたが結果は同様でしたので、ハードの問題ではないようです。

現在のところ、3種の通信経路用のSNDCH、RCVCHルーチンを切り替えて使用しているのですが、その箇所が関係していることは分かっています。

切り替えルーチンは以下のようなものです。

 


動作時に希望の通信経路を選択するとIOPORTの値が0,1,2と切り替わり、それに応じてSETADRルーチンが実行されることでアクティブになるSNDCH、RCVCHが設定されます。 

このルーチンも今までに使用してきたものですので、このためにFMへの転送時間が大幅に増えることは全く納得できないのですが、これを外して直接呼び出すと、例えば2Dの転送で1分弱と正常な転送時間になるのですが、このルーチンを通すと4分30秒近くかかってしまうのです。

ということで、一本のドライバでまかなうことはできず、3種の通信経路毎に専用のドライバを用意しなければならないようですので、FT245用、内蔵COM0用、拡張ExCOM用とそれぞれのドライバを作成してみましたが、内蔵COM0と拡張ExCOM使用の場合は2DのFM->Winの転送に5分程度、Win->FMの転送ではその数倍の時間がかかるので実用的ではありませんでした。

結局、FT245専用のドライバと3種対応のドライバの2種のみとし、通常使用ではFT245専用のものを使用することとし、どうしても必要な場合にはCOM0やExCOMを選択できる3種対応のドライバを使用するというように使い分けることにしました。

さらに原因追及の必要があるとは思いますが、とりあえずF-Basic関係は一旦終了ということにして、OS-9のドライバの作成に取り掛かりたいと思います。

作成したWindows側のft245drv.exeとFM側のメニューソフトFT245FTと機械語サブルーチンFTDRV14FなどをOneDriveに上げておきます。これらのソフトはFM-11のみでなくFM-7や77でもそのまま使用できます。また、転送に使用するDATファイル形式とD77、DSKファイル形式間の変換ソフトも同梱してあります。

 

2025年7月3日木曜日

FM-11用のRTC & COMカードが完成

 FM-11用のリアルタイムクロック(RTC)と拡張COMを作成しました

OS-9やFlex9の起動時には日付・時刻を入力する必要があり、結構面倒です。またF-Basicの場合にも、日付・時刻を必要とする場合には直接入力する必要があります。

ということで、FM-7用に作成してあったRTC_SDカードのRTC部をFM-11に移植することにしましたが、SDカード部を省いたために空いたスペースに68B50(ACIA)を増設して38400baudのCOMポートを増設しました。本体内蔵の8251A使用のCOMポートの通信速度が19200baudなので、その倍の速度のものが欲しかったということでもあります。

移植そのものはFM-11のコネクタに出ていないIOS信号の生成部を追加するだけで良いのですが、EB信号とQB信号が*EB, *QBと反転していることを見落としていたために最初は動作しませんでしたが、その点を修正することで正常に動作しました。(ということで、基板を再発注することになってしまいました。。。)

これが再発注した基板で完成させたRTC_ExCOMカードです。使用しているRTCモジュールはクロックタイムIC  DS3231を使用したZS-042というもので、5Vで動作するので使いやすいです。(バッテリーはCR2032なので充電回路部はカットしてあります。)これを68B21(PIA)を介してI2Cで制御しています。



RTC_ExCOMカード


回路図を示します。


RTC_ExCOM R1.1


まずはCOMポートのテストをしてみました。画像右端の6ピンコネクタからTTL-USB変換ケーブルを使用してWindowsPCに接続します。FT245カード用のドライブソフト(FM側、Windows側)を拡張して、FT245、内蔵COM(8251A)に加えて拡張COM(68B50)も使用できるようにして実行してみました。結果ですが、転送時間は内蔵COMポートの場合とほとんど変わりませんでした。ちょっとがっかりでした。

続いてRTCのテストをしました。FM-7用のドライブソフト(RTC_WR, RTC_RD, RTC_SET)はF-Basic3.0の内部ルーチンを使用していましたので、それをF-Basic5.0のDisplay Sub System中のSET TIMER, READ TIMERに置き換えました。また、FM-11の時刻関係のワークエリアが不明なので困っていましたが「Retro PC Gallery」(http://haserin09.la.coocan.jp/)のはせりん様から、FM-7と同じだと教えていただきましたので、無事にFM-11用のドライブソフトを完成させることができました。ありがとうございました。

作成したRTC_WR2, RTC_RD2, RTC_SET2はF-Basic5.0用の機械語プログラムで、RTC_WR2でZS-042に日付・時刻を設定し、RTC_RD2で設定されている値を読み込み・表示します。RTC_SET2はZS-042に設定されている値を読み込んでF-Basicのワークエリアに設定するもので、起動時に自動的に設定させたい場合にSTARTUPに書き込んで使用します。


参考までにRTC_WR2のアセンブルリストを示しておきます。68B21(PIA)のポートAを使用してI2CでDS3231をコントロールしています。68B21のポートAは入力に設定したままで出力もできるのでこのような入出力が同じポートで行なわれるような用途には適しています。


 


 
参考までに作成したRTC_WR2, RTC_RD2, RTC_SET2をOneDriveに上げておきます。
機械語プログラムでI2Cを使用するサンプルとしてみていただければと思います。