アプリケーションでのFT245カードの使い方を紹介します
[4月18日追加] 末尾に「FT245カードの簡単な使用法」のダウンロード先を追加しました。
「思い付きハードでソフトに七転八倒」さんが開発されたFM-7/77用の高速通信カードFT245カードをアプリケーションで使用する場合に、通信元と通信先の両方の対応の方法を紹介します。
FM-7/77に装着されたFT245カードからのWindows側への送信は通常のRS232Cでの通信と同様に1バイト単位で送信されますが、Windows側からFT245カードへの送信は1バイトのデータをb7の1ビットとb6~b0の7ビットに分けて2回で送信されますので、それに合わせてFM-7/77側、Windows側の送受信ルーチンを対応させる必要があります。
FT245カード |
FM-7/77側:
従来のRS232Cの送受信ルーチンRCVCH, SNDCHを次のプログラムに置き換えます。RCVCHは2回受信して1バイトを構成しています。
- *================================================
- *
- * 1chr snd/rcv routine for FT-245
- *
- *===== receive 1 chr =====
- * 1st received byte : bit7(located on bit6)
- * 2nd received byte : bit6-0
- * return A:input chr
- RCVCH EQU *
- PSHS B
- LDB #$01 read cmd
- BSR INWAIT
- BSR INDAT get 1st byte
- ANDA #$40 get bit6
- ASLA
- PSHS A save bit7 of chr
- BSR INWAIT (unnecessary?)
- BSR INDAT get 2nd byte
- ANDA #$7F get bit6-0 of chr
- ORA ,S bit7+bit6-0
- LEAS 1,S returns the SP
- RCVEND PULS B,PC
- * wait for data receive
- INWAIT EQU *
- IWLOP LDA $FDFE wait until
- ANDA #$80 $FDFE bit7=0
- BNE IWLOP exist receive data
- IWEND RTS
- *read data
- * return A:input data
- INDAT STB $FDFD input cmd
- LDA $FDFE get data
- CLR $FDFD
- RTS
- *===== send 1chr =====
- * A:output chr
- SNDCH EQU *
- PSHS A,B,Y
- LDY #$0100
- LDB #$02 write cmd
- BSR OUTDAT
- SWAIT LEAY -1,Y wait
- BNE SWAIT
- PULS A,B,Y,PC
- *
- OUTDAT STA $FDFE output data
- STB $FDFD output cmd
- CLR $FDFD
- RTS
- *================================================
Windows等のアプリケーション側:
例としてVisualC++でのFormプログラムを示します。
受信用の関数 serialPort1->Read()には変更がありませんが、送信用の関数serialPort1->Write()は次の serial_Write()関数で置き換えます。
- serialPort1->Write(tbuf, 0, 1);をserialPort_Write(tbuf);に置き換える
- //RS232C, FT-245カード両用出力ルーチン
- //FT245カード用は出力データをbit7とビット6-0に分けて2回で送信する
- int serialPort_Write(array<Byte>^ dat)
- {
- if (frsft == 0) { //RS232C
- serialPort1->Write(dat, 0, 1);
- }
- else { //FT245
- array <Byte>^ odata = gcnew array<Byte>(2);
- //1st send
- odata[0] = (dat[0] & 0x80) >> 1;
- serialPort1->Write(odata, 0, 1);
- //2nd send
- odata[0] = dat[0] & 0x7f;
- serialPort1->Write(odata, 0, 1);
- }
- return 0;
- }
これだけの変更で、従来のRS232Cを使用したアプリケーションがFT245を使用した高速通信に置き換えることができます。
私はこれをWindows上の仮想ドライブ構築ソフトCpmDrvWin.exeやFbasDrvWin.exeなどに適用して快適に使用しています。
[4月18日追加] 「FT245カードの簡単な使用法」をOneDriveにアップしました。
0 件のコメント:
コメントを投稿