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

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に上げておきますので、アドバイス等ありましたらよろしくお願いします。


2021年6月10日木曜日

FM-7/77用のI/O拡張基板を改良しました

FM77用の拡張I/Oボードを改良してFM-7でも使えるようにしました

 

2019年6月19日のブログ「FM77用の拡張IOボード、ROM/RAMディスクボード」で紹介した拡張I/Oボードですが、2019年8月26日「FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了」で紹介しましたように、プリント基板化してFM77AV40SXに接続して使用していました。

その後、使用していなかったFM-7を再び使用する機会が増え、FM-7でもROM/RAMディスクを使いたくなりましたが、残念ながらFM-7背面の50P拡張コネクタには2.45MHzのクロックが出ておりませんので、最初は32Pスロットを使用して変換基板を経由して使用していました。しかし32Pスロットは2個しかないので、やはり50P拡張コネクタを使うということにして、間に挟んでいる変換基板(FM77とFM-7の拡張コネクタはピン配置が異なるので変換が必要)上にクロック生成回路を追加して使用していました。

今回、回路を見直して、ほとんど使用していなかったFT-232モジュール部を取り外せば拡張I/Oボード上にクロック発生回路を追加できると考えて、基板を製作することにしました。


製作したI/O拡張ボード


回路図

実は、基板を製作した際に肝心の2.45MHzのクリスタルを入れ忘れており、裏面につけようかとか思いましたが、幸いにして並んでいるR2,R3の端子に直接接続すれば良いことが分かって、それ程見苦しくならずに済みました。(画像でも不自然さは感じないと思います...)




構成図



そもそも拡張I/Oボードの50P入力のピン配置をFM-7に合わせてしまえば変換基板も不要となるのですが、そうしなかったのは、この変換基板上に32Pスロットを増設してそこにFDCボードを装着して、全体を拡張BOXという形でケースに収めればすっきりすると考えたからです。ということで、以前製作した増設32Pスロット基板を34Pフラットケーブルを介して接続してみました。



左:変換基板、右:増設32Pスロット基板

左の変換基板の中央のコネクタにFM-7からの50Pケーブルを接続し、左のピンヘッダに拡張I/Oボードを接続します。右の34Pコネクタには増設32Pスロット基板を接続し、その上にFDC基板を装着します。

しかし、実際にFDCボードを装着して起動してみると、時々ですが起動に失敗します。恐らく接続に使用しているフラットケーブルが長すぎる(2本の50Pが計84㎝、34Pが30㎝程度と長い...)のだと思いますが、FDCボードまで装着するにはもう少し工夫が必要なようです。

とりあえず、当面は拡張I/Oボードとその上に重ねるROM/RAMボードのみで使用することになりそうです。

ということで、別途製作したROM/RAMボードと二段重ねにして使用している様子です。


ROM/RAMボードを上に重ねました


ROM/RAMは一組だけ実装


FM77AV40SXではFLEX9とOS-9を切り替えて使用できるようにROM/RAMを2組セットして使用していますが、FM-7ではFLEX9とF-BASICがメインになりそうで、しかもF-BASICはシステムドライブやワークドライブの指定はできないためROM/RAMはあまり利用価値がなく、Windows上の仮想ドライブの方を使うことになるということで、とりあえずROM/RAMはFLEX9用として一組だけ実装してあります。

以上、FM-7用の拡張I/Oボードの改良とROM/RAMボードの紹介でした。ドライブソフトはFLEX9用、F-BASIC用のどちらも以前紹介したものをほぼそのまま使用しています。


2020年10月11日日曜日

F-BASIC版のP-ROM Writerカード用ドライバが完成

 

F-BASIC版のP-ROM Writerカード用ドライブソフトも作りました


9月16日のブログで、P-ROMライター用のドライブソフトが完成したと書きましたが、それは、私が常用しているFlex9上で動作するものでしたので、オリジナルのOS-9版と同様、一般的ではありませんでした。
そこで、普段はほとんど使うことがないF-BASIC上で動作するものを作ろうとしたのですが、Flex9ではデータバッファとして32KBを確保できたのに対してF-BASICでは$8000番地から上がROMですのでそんなには取れません。
初めは裏RAMを使用することを考えたのですが、それでも32KBは無理です。(32KBにこだわるのは27256の容量だからです。)
結局、裏RAM使用は止めて少ないバッファ容量に合わせてデータを分割して読み込み、複数回の書き込みをすることとしました。(Flex9版でも27512では2回に分けて書き込んでいます。)
下図で分かりますように、バッファ容量として8KB確保しましたので、2716, 2732, 2764は一回で書き込めますが、27128では2回、27256では4回、27512では8回の書き込みを繰り返すことになります。







これに合わせて、Block選択コマンドを追加しました。(1ブロックは8KB)0を選択すると自動的に書き込みを繰り返して全ブロックを書き込みます。0以外では選択したブロックのみを書き込みます。
また、書き込むデータも全体をメモリ上には置いておけず、機械語ファイルとしてディスクに保存することになりますので、そのファイルのLoad, Saveコマンドも追加しました。
さらに、データファイルを8KB単位に分割して機械語ファイル形式に変換するためのソフトも別途必要です。

結局、実装したコマンドは Info, Type, Block, Pwidth, Dump, Erase, Read, Write, Verify, Load, Save, Quitの計12個となりました。


27512を選択した例を示します。




ブランクチェックをした後、書き込んでいます。
ブロック1から8までを連続して書き込んでいます。




ドライブソフトですが、ほとんどの機能を機械語サブルーチンに任せているので、BASIC部は基本的に初期化とコマンド選択・実行準備だけという簡単なものです。

BASIC部を示します。



機械語サブルーチン部を示します。


また、P-ROMに書き込むデータはF-BASICの機械語データ形式なので、先頭が 0x00,データサイズ(2bytes),書き込みアドレス(2bytes)の計5バイトで始まり、その後にデータ本体が続き、末尾が 0xFF,0x00,0x00,0x00,0x00の計5バイトで終わる形となります。
Windows上でデータファイルを8KB毎に分割し、上記の機械語形式に合わせて先頭と末尾に必要な各5バイトを追加するためのツールソフト spltdat.exeを作成しました。

以上より、私の場合のP-ROMに書き込む標準的な手順をまとめると、
(1)Windows上で書き込むバイナリデータを作成する。
(2)spltdat.exeで8KB単位のデータファイルに分割する。
        元ファイル ROMDAT --> 変換後ファイル ROMDAT1, ROMDAT2,...,ROMDAT8
(3)作成されたデータファイルをFM-7に転送する。
     転送手段としてはRS-232Cカードを使用できますが、それ以外にも思い付きハードでソフトに七転八倒さんによるFT-245使用の高速転送カードやArduinoMega2560使用のカードも使用できます。
(4)ドライバ PROMWRと書き込みデータを同じディスクに入れておいて、PROMWRを起動する。
(5)P-ROMの種類、書き込むブロック範囲、書き込みパルス幅を指定して書き込む。
以上です。
もちろんF-BASIC上で書き込みデータを直接作成して、そのまま書き込むこともできますが、その場合には$5000~$6FFFのバッファにデータを置き、一旦SAVEMで末尾にブロック番号を付けたファイル名で保存する必要があります。

作成した 書き込みソフトPROMWR, PWRSUBとツールspltdat.exeをOneDriveに置いておきます。なお、PROMWRはF-BASICのASCIIセーブ形式、PWRSUBは機械語データ形式になっていますので、そのままでF-BASICのディスクに保存できます。

2020年9月16日水曜日

P-ROM Writerカードのドライブソフトが完成

 ようやくP-ROM Writerカード用のドライブソフトが完成しました


6月26日のブログで紹介したP-ROM Writerカードですが、元になった記事ではOS-9上のソフトでコントロールしていました。
その際には、とりあえずOS-9 Level1で動作させて27C256に書き込めることを確認しましたが、OS-9上ではなく他のOS上で動作するドライブソフトを作成する必要があると考えていました。
また、ブログには2716の書き込みができていないと書きましたが、その原因は使用した270uHのインダクタにあり、流れる電流が許容値を大幅に超えており、かなりの発熱が生じていたために25Vが安定しなかったことにありました。

ハードの不具合が解消できたのでソフトの作成にかかりました。
最初はOS-9上のソフトを手直しすれば良いと考えていたのですが、他の方の制作したソフトを読むのは結構難しくて、結局、一から作ることになりました。

制作したドライブソフトは使い慣れているFlex9上で動作するもので、コマンドとして以下の13個を用意しました。
Type, Erase, Pwidth, Info:ROM指定、Blankチェック、書き込みパルス幅指定
Info:ROM種他の設定値の表示
Read, Write, Verify:読み出し、書き込み、ベリファイ
Dump, Fill, Memory:バッファのダンプ、フィル、データ変更
Load, Save:ファイルのロード、ファイルへのセーブ
Quit:終了

これらのうち、Info(設定値を表示)とPwidth(書き込みパルス幅を設定)以外は元のドライブソフトと同様な機能です。(Memoryはスクリーンエディタではありませんが...)

対応しているROMは2716, 2732, 2764, 27128, 27256, 27512の6種ですが、27128は手持ちがないので動作確認はできていません。
バッファサイズとして32KB用意してあるので27256までは一回で書き込めますが、27512は2回に分けて書き込むことになります。(27512の指定時に書き込みエリアの前半・後半を選択します。)

起動してROM種を選択している様子です。


ライター全景です。
左が68B21が載ったI/O拡張カードで、右がP-ROMライターカードです。



2732に書き込んでいる様子です。ジャンパー線でVPPを21Vに設定しています。




カード上でのROMの選択は20PのICソケット上でのジャンパーで行いますが、書き込み電圧VPPの指定だけはROM毎に確認してジャンパー線で設定する必要があります。特に2732や2764は要注意です。

【参考】
VPP値ですが、手持ちのADVATESTROMライタ付属のROM一覧表で調べてみると、
・2716   25V ----------------------------- 25V
・2732   25V, 21V ----------------------- 25V,21Vのどちらか要確認
・2764   25V, 21V, 12.5V, 12.75V -- ほぼ21Vだが一部25Vあり
・27128 21V, 12.5V, 12.75V, 13V -- 21V,12.5Vのどちらか要確認
・27256 21V, 12.5V, 12.75V --------- ほぼ12.5Vだが一部21Vあり
・27512 12.5V, 12.75V, 13V --------- 12.5V
と様々です。
271625V2751212.5Vと決め打ちしてて良いようですが、他はほぼ2種類あります。
 
また書き込みパルス幅ですが、27256以降は1msで書き込めますが、それ以前のものはパルス幅を大きくする必要がありますので、パルス幅も設定する必要があります。


コマンドの実行例を示します。

リードコマンドとライトコマンドです。
進行状態を表すために1ページ(256バイト)読み書きするごとにドット(.)を表示しています。




ダンプコマンドです。
以前作成したモニタコマンド中のルーチンを流用しているために、16バイトごとのチェックサム表示という余分な機能も付いています。



メモリーコマンドです。
これもモニタコマンド中のルーチンの流用です。書き込みデータを表示・編集できます。Pキーでアドレスを戻すことができます。また、テンキーの「*/+-=,」はA-Fとして扱われます。



これで一応、2716から27512までのEP-ROMのライターのハード、ソフトが完成したと言って良いかと思いますが、ソフトについてはオリジナルがOS-9上、今回制作したものはFlex9上で動作するものですので、一般的ではありません。
F-Basic上で動作するソフトが作れれば良いのですが、私の手には余ります。
今回のFlex9版の実行ファイルと共にソースファイルをOneDriveにアップしておきます。

2020年6月26日金曜日

FM-7/77用拡張PIAボードとP-ROMライタ

FM-7/77用拡張PIAボードとP-ROMライタの製作


P-ROMライタは持っているので、まれに必要になる2716のような古いデバイスも書き込みができるのですが、古い機種(ADVANTESTのR4945A)ですのでパソコンとの通信速度が9600baudと遅く、4MbitのROMを焼くときには読み込みに時間がかかりすぎて使う気になれません。
ということで、昨年TL866ⅡPLUSを購入しました。これは実に優秀で使い易くてしかも安いので言うことなしと言いたいのですが、残念なことに2764以前には対応していません(メーカーによりますが)。
大昔は自作の8ビット機用にROMライタボードを製作して使用していたこともあり、いつかは作ろうと思ってはいましたが実行する機会がありませんでした。
先日、プリント基板をまとめて発注することになり、ついでにということでROMライタ基板も作成しました。

元にしたのはマイコンピュータ「OS-9活用テクノロジー」(CQ出版社)中の「P-ROMライタ/エディタの製作(阿部英志著)」です。これは、2716から27512までに対応していますが使用するROMに応じてジャンパプラグを差し替えるというもので、その分簡素な回路になっています。

FM-7/77からはPIA(68B21)ひとつで制御するようになっているので、この部分を切り離して汎用の拡張PIAボードとし、フラットケーブルでROMライタボードと接続する形にしました。
(一体化して10x10cmのサイズに収めたもののプリント基板も一緒に作りましたが、製作の予定は今のところありません。)

回路図


拡張PIAボード


拡張PIAボードはFM-7/77の32Pコネクタに接続して使用するもので、FM-7では未使用のアドレス$FD9CにPIAのポートAを割り当てています。

P-ROMライタ

P-ROMライタはVPPの25V, 21V, 12.5VをTL497Aで作り出し、D-FFのLS273でアドレスとデータをコントロールしています。(TL497Aというのがいかにも古いという感じですが、幸い手持ちがありましたし、何と今でも入手可能なデバイスのようです。)


製作した基板


下左:拡張PIA基板 下右:P-ROMライタ基板
上:一体化した基板(製作予定なし)


いつもどこかでドジをする私ですが、今回は2SC1815のフットプリントが2.54mmピッチでなく1.27mmピッチであったことに気づかずにそのまま利用したり、ピッチが5.08mmの270uHや220uFのピッチを2.54mmにしたので、ハンダ付けがとてもしにくい部分がありましたが、配線パターンのミスはなかったようです。(部品を入手してから基板の設計をすべきなのですが、大体が逆のパターンになってしまいます...)


拡張PIA基板の動作テスト


まず拡張PIA基板を製作し、動作テストのつもりで、以前紹介した、PIAを用いてI2C通信によってRTCから時刻の読み出し/書き込みをするアセンブラプログラムを走らせてみました。


拡張PIA基板の動作テスト



Flex9上でRTCを読み書き


正常に読み書きできましたので、このPIAボードが正常に機能していることが確認できました。


P-ROMライタ基板の製作


続いてP-ROMライタ基板を仕上げ、ジャンパプラグも2716用、2732用、2764用、27256用の4種類を作成しました。20Pの丸穴ICソケットを利用しています。



完成した基板

ジャンパプラグ
(左から2716, 2732, 2764, 27256用)


動作風景


試しにP-ROM 27C256を書き込んでみましたが、正常に書き込むことができました。
ただ、今のところ2716にはうまく書き込めていません。(手持ちの2716が古すぎるせいなのかも...)


ドライバソフト


このROMライタのドライバソフトはOS-9上で動作するもので、コマンドも多く、データのスクリーンエディットもできるなど機能豊富なものですが、OS-9は一般的ではないので、他のOS(?)に移植しなければなりません。
とりあえずそのままOS-9上で動作させるということでしばらく触れていなかったOS-9を走らせてみましたが、使い方をかなり忘れてしまっていて、思い出すのに苦労しています。
(でも

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月26日月曜日

FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了

6月12日のブログで紹介しましたFM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板が完成しました


拡張I/Oボードの方は比較的単純な回路なのですが、ROM/RAMディスクボードはソフトに合わせて回路をかなり変更したのに、変更記録を完全に取っていなかったこともあり、製作時の記憶をなかなか思い出せず、KiCadの回路図に起こすのにかなり苦労しました。

例によって、勘違いによるミスもあり、修正を余儀なくされましたが、そう大きな修正でもなく何とか修正できました。
今回のミスで最大のものは同じピン数のコネクタで番号配置の異なるものを部品指定してしまったので、配線がでたらめになってしまったことでした。

でも、格安基板の10cmx10cmまでというサイズに収めるためにかなり無理をしましたがなんとか収まったので良しとします。

制作した基板を示します。
右が拡張I/Oボードで、左がROM/RAMボードです。

右:拡張I/Oボード、左:ROM/RAMボード

下画像のように2枚を重ねた状態で使用できます。


重ねた状態

それぞれの基板の回路図を示します。

拡張I/Oボード


ROM/RAMボード


それぞれの基板の部品配置です。
(1)拡張I/Oボード
FM77AVの拡張ポート(アンフェノール50P)に接続します。基板上の68B21にはAE-FT245RL、68B50にはAE-FT232RLとMAX232が接続されており、他に68B40(PTM)があります。(AE-FT232RLとMAX232は排他使用です。)


拡張I/Oボードの部品配置

(2)ROM/RAMボード
68B21を1個のみで4MbitのROMとRAMを制御しています。
ROMとRAMのペアが2組あり、それぞれスイッチで切り替えます。私はFLEX9システムとOS-9システムとで使用しています。RAMはバッテリバックアップされています。


ROM/RAMボードの部品配置

私の使用機器はFM77AV40SXなので、拡張ポートはアンフェノール50P ですので、途中で50Pフラットケーブルに変換して接続しています。
基板の入力を50Pフラットケーブルにしたのは、FM-7でも使用できるようにと考えたからですが、残念ながら、FM-7の拡張ポートには2.5MHzのクロックが出ていませんし、ピン配置等も異なりますので、そのままでは接続できません。
むしろFM-7の場合には、32Pの拡張コネクタの方が必要な信号が揃っていますので、こちらに接続するべきかもしれません。


左がFM77からの50Pケーブル、右がWindows機へのUSBケーブル

これらの基板のみで使用する場合は、本体のドライブが0と1で、ROMがドライブ2、RAMがドライブ3という形で使用することになります。
FLEX9やOS-9のディスクドライブルーチンをフックして、ドライブ番号が2と3の時のみROMやRAMをアクセスするように切り替えるルーチンを追加します。

さらにWindows機上の仮想ドライブを使用する場合には、ドライブ3や2を仮想ドライブに切り替えるルーチンを使用します。使用するFlexDrvWin.exeは以前公開したものがそのまま使えます。

現在は、F-BASICでも使用できるように、FbasDrvWin.exeを作りましたので、F-BASIC側のディスクドライブルーチンをフックするプログラムを作っているところです。



[蛇足]+++++++++++++++++++++++++++++++++++++++++++++
手持ちの過去の製作物でプリント基板化したいものとしては、もう一つ、数十年前に製作したFM-7用のFDD基板があります。


MB8877A使用のFDD基板(表面)

長い間、この基板の先に5インチ2台と3.5インチ2台のフロッピードライブを計4台接続して使用していました。

同(裏面)

今となってはドライブも処分してしまいましたし、特にプリント基板化して製作する必要もないのですが、捨てるのもためらわれるので未だに手元に置いてありますので、プリント基板化して資料として保管しておいた方が良いかなと思うわけですが、迷っている理由が2つあります。
(1)ICが20個もあるので格安基板の10cmx10cmには収まりそうもないのでコストがかかりそう。(恐らく12cmx8cm位になりそう)
(2)昔の製作物なのでデータセパレータとして、アナログでなくデジタルセパレータのFDC9216Bを使用しているので、現在のものよりも性能は落ちる。(特に不都合はないが)
ということで、FDC9216BとMB8877Aは予備も複数保管してあるのですが、KiCadで回路図を書き上げたところで止まっています。
アイディアとしては、現在普通に出回っているパソコン用の3.5インチFDD(2DD,2HD)をFM-7で使用できる基板にすれば使い道があるかなと。STEP信号を2倍にする回路を付加すればできそうな気がするのですが、まだきちんと追及していません。



2019年6月12日水曜日

FM77用の拡張IOボード、ROM/RAMディスクボード

FM77用の拡張ボードを紹介します


最近はソフトの手直しばかりで、とりたてて紹介するものがありません。そこで、以前製作して今でも使用しているFM77用の拡張ボードを紹介します。
このボードのために制作した、Windows上で仮想ドライブを実現するソフトFlexDrvWin.exeがこのブログのシングルボードマイコンを製作するベースとなったと言えるものです。

製作したのは、FM77AV40SX用のIO拡張ボードとROM/RAMディスクボードです。
私はFM77AV40SXでFLEX09とOS-9Level2を使用しているのですが、2DDフロッピーはかなり遅く、また、ドライブもメディアもいつまで使えるのかも分かりませんので、何とかFDDと縁を切りたいと思っていました。

色々と考慮した結果、手持ちのFM-7とFM77AV40SXに共通して装備されている50ピンのIO拡張コネクタを利用して、まずIO拡張ボードを作り、それに接続する形のROM/RAMディスクを製作することとしました。

製作したIOボードとROM/RAMボードを下に示します。

下がIO拡張ボード、上がROM/RAMボード

上部の空ソケットには512KBのSRAMを装着してRAMディスクとして利用していましたが、後述のようにWindows上の仮想ドライブに切り替えたので不要となりました。

左がIO拡張ボード、右がROM/RAMボード

今では、こんな配線をする気力はもうないかも...

それぞれの裏面配線の様子



ROM/RAMボードの構成を下に示します。
RAM/ROMボードの構成


6821によるROM/RAMディスクのアクセス方法を下に示します。
6821によるTrk,Sct番号のセット方法


IO拡張ボードには、6821PIA、6850ACIA、6840PTMが搭載してあり、6850にはRS-232Cシリアルインターフェースが、6821にはFT-245パラレルインタフェースが接続してあります。どちらも38400baudです。
ROM/RAMボードには、512KBのROMとRAMのペアが2組あり、それらを6821PIAが制御しています。RAMはバッテリバックアップしてあります。
ROM/RAMディスクの容量は
 4Mbit(512KB)では Trk 64、Sct 32 で(64-1)*32=2016セクタ
 2Mbit(256KB)では Trk 32、Sct 32 で(32-1)*32=  992セクタ
 1Mbit(128KB)では Trk 16、Sct 32 で(16-1)*32=  480セクタ
となります。

2組あるのは、FLEX09用とOS-9用で、それぞれをスイッチで切り替えて使用します。
(端にあるソケットはROMライターですが、未完成です。)

記録を見ると、2014年12月末から作り始めて2015年3月初めにハードは完成していますが、実用になる制御ソフトの完成には年末近くまでかかっています。

最初はROM/RAMディスクとして使用


FLEXでは実質4台までしかドライブが接続できないので、
ドライブ0:内蔵ドライブ0
ドライブ1:内蔵ドライブ1
ドライブ2:ROMディスク
ドライブ3:RAMディスク
として利用することになります。
内蔵ドライブ0のシステムディスクで起動し、その後、システムドライブを2に、ワークドライブを3に切り替えれば、フロッピーを使用せずに済みますので、結構快適になりました。

最初はシリアル/パラレルのインターフェースは実装していなかったのですが、ROM/RAMディスクのみでは結局、データ保存にフロッピーが必要なので、Windows上の仮想ドライブも追加することにしました。
FT-245モジュールを搭載しているのは、Windows上の仮想ドライブとパラレルインターフェースで通信したかったからで、作る前は、シリアルインターフェースでは遅くて実用にならないからパラレルでと思っていたのですが、実際に製作してみると、確かに転送速度は10倍以上違うのですが、DISKの読み書きに時間がかかるのでトータルの時間は少し速い程度であると分かりましたので、現在はシリアルも使用しています。

その時に制作したのが、6809シングルボードコンピュータでWindows上の仮想ドライブを実現しているFlexDrvWin.exeというソフトの原型で、このソフトのドライブ3にDSKファイルをセットすればFM77AV40SX上のFLEX09で読み書きできます。(OS-9の場合は別ソフトのOS9DrvWin.exeを使います。)

ドライブ3をRAMディスクからWindows上の仮想ドライブに変更


動作中の様子を示します。
手前がFM77AV40SXのディスプレイとキーボード、後方がWindows機です。
後方右上のWindows上のFlexWinDrvの画面で分かるように、ドライブ3にセットした仮想ディスクを読んでいます。


動作中の様子

画面表示


この拡張ボードによってデータ等はフロッピーでなくWindows上のファイルとして保存できるようになったのですが、起動時はフロッピーが必要です。これを解決するためにはフロッピーエミュレータが必要ですが、まだ製作できていません。。。

ドライブ2も仮想ドライブに変更


現在は、FLEX09システムのドライバールーチンをさらに書き換えて、ドライブ3だけでなく2もWindows上の仮想ドライブに設定変更をしていますので、FlexWinDrvのドライブ2と3に仮想ディスクをセットして使用しています。(結局、ROMディスクもRAMディスクも使わなくなってしまった。。。)

[蛇足]画像で分かりますように、FM77AV40SXの純正キーボードは使用せず、大切に保管してあります。代わりに、自作のキーコード変換器を接続したPS/2キーボードを使用しています。さらに、内蔵ドライブも取り外して保管し、代わりに一般的なDOS/V機用のFDDを装着しています。
自作のキーコード変換器は下の画像のものです。
ATtiny85を使用したハードは簡単なものです。ソフトには結構苦労しましたが、FM77AVのスキャンコードをですくまさんが調べて公開してくださっていたので、とても助かりました。感謝いたします。

自作のキーコード変換器


資料の整理を兼ねて、手配線のボードをプリント基板化しようと考えています。無事に完成したら公開するつもりです。