2022年9月27日火曜日

FM-7用の32Pスロット拡張基板の製作(第5作)

 32Pスロット拡張基板の第5作目です(ついに最終版?)


2022年3月1日の「FM-7用の32Pスロット拡張基板の製作(第4作!)」で紹介した拡張基板ですが、これで終わりにしようと考えていました。

しかし、使用していると、本体の50P拡張コネクタからのケーブルをあまり長くできないので不便を感じることがありました。ということで、拡張ベース基板上にスペースが十分ありますので、データ線と制御線にバッファを追加することで50Pケーブルを長くしても動作するようにしたいと考えました。さらに、FM-7本体の32Pスロットには+12V,-12V電源も来ているので、私的には特に必要はなかったのですが、ついでに12V電源も追加して本体の32Pスロットとの完全互換を実現することにしました。

製作した基板を示します。


拡張コネクタベース基板



32Pコネクタ拡張基板


製作したベース基板の回路図です。

ExConnBase51


正負12V電源用のDC-DCコンバータとしてMAU109(秋月電子で購入)を使用することにしました。これについては、カベキンブログの「富士通 FM-7用32Pスロット拡張基板に±12Vの電源を追加」(2022年4月6日)を参考にさせていただきました。カベキンさまに感謝いたします。


相変わらずミスがあって、、、

実は製作したプリント基板にはミスがあり、なかなか動作しませんでした。上記の回路図はそのミスを修正したものです。
単純なミスのU2(74LS541)のEXTDETとIRQの入出力の向きが逆であることはすぐに分かったのですが、最後の一つはなかなか分かりませんでした。
FM-7に接続すると、殆どの場合起動しないのですが、ごくまれに正常に起動するのです。しかも、起動した場合でもU5(74LS245)だけが異常に熱くなるのです。
プリント基板上の配線を何度見直しても異常はありません、試作品という事でICソケットを使用していましたので、74LS245を交換してみましたが変わりません。ついには追加した12V電源の存在を疑って、MAU108を取り外したりしてみましたが変化はありません。

あれこれと2日間も悩んだ挙句ようやく原因に気づきました。
何と、U5(74LS245)のCE端子をGNDに落としていました。これによってU5が常にアクティブになっていて、FM-7本体のデータバスと衝突したために発熱していたという事なのでした。(相変わらずいつもどこかでドジをしています。。。)

修正してようやく動作した

U5のCE端子をIOS0に接続することによって、ようやく正常に動作するようになりました。期待した通り、50Pフラットケーブルを長くしても正常に動作しましたので、配置などの取り回しが楽になりました。

32Pコネクタ拡張基板の方は、コネクタの数を第4作の3個から4個に増やしてみました。これは、バッファを追加したことでドライブ能力が大きくなった(?)と期待してのことです。さらにコネクタを増設できるような端子が2箇所ありますが、これは富士通のFCNコネクタ(現在は入手が極めて困難です)を使用せずに、通常のコネクタとピンヘッダでも使用できるようにと考えてのことです。

最終と考えているこの基板ですが、最終基板に修正用のジャンパ線が走っているのは嬉しくないので、修正した回路でもう一度基板を発注しました。(今度こそ最終版にしたい...)

2022年9月26日月曜日

PC用の2DDドライブをFM-7等で使うためのアダプタの基板化

PC用の2DDドライブをFM-7等で使うためのアダプタを基板化してみました 

2019年10月26日の「FM-7でPC用のフロッピードライブを使う」で紹介しました、PC用の2DDドライブをFM-7等で使うための、FDDに直接装着するタイプのアダプタをプリント基板化しました。

簡単なものですのであえて基板化する必要もないのですが、他の基板を発注する際に、ついでにということで製作してみたものです。

製作したアダプタは下画像のようです。


アダプタのFDD側


アダプタのFDC側


回路は簡単すぎて、回路図を示すほどのものではありませんが、FDCからのドライブセレクト信号(0あるいは1)をピン12に入れる切り替えスイッチと、ダイオード1個によるReady信号生成回路からなっています。このダイオード1個によるReady信号生成回路は前回同様に、てきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路を使わせていただいています。感謝いたします。


FDD ADAPTER


FDDに直接装着して使用します。

FDDに装着した様子


そしてFDCからのケーブルと電源ケーブルを接続します。画像では、FM-7上の自作FDCカードと接続しています。この時、FDC右端のStep信号2倍化回路のスイッチをDouble側にセットしておきます。使用したFDDはTEACのFD-235HGです。
【注意】対応しているFDDには制限があります。構造上、34Pコネクタの上部に電源コネクタがあるMITSUMIのドライブにはそもそも装着できないので使用できません。これは、以前私がチェックした限りでは、このダイオード1個によるReady信号生成回路ではMITSUMIのD353やD359の中には動作しないものがあったために、対象外と考えたためです。確実に動作するのはTEACのFD-235HGやHFで、他にSONYのMPF920も動作確認をしています。これらについては、2019年12月31日の「FM-7でPC用のフロッピードライブを使う(その後の訂正・補足)」をご覧ください。

なお、FM-7ではStep信号2倍化回路が必要ですが、FM77AV20/40/40SX等のFDDが2DD仕様のものでは接続するだけでそのまま使用できます。私は手配線のものをFM77AV40SXで2019年以来使用していますが、特に不都合は生じていません。





ドライブ番号として0と1が選択できますので、2台までのFDDが制御できます。


FDDを2台制御できます

以上、手配線で使用していたものをプリント基板化してみたというだけの報告でした。

なお、画像のような基板が数多くできてしまいましたので、もしご希望の方がおられましたらお申し出くだされば、郵送料(84円)のみでお送りできます。


製作した基板

実際に製作するためには、34Pのピンヘッダ(オス)、34Pのピンソケット(メス)、通常の信号用ダイオード、3Pスライドスイッチが必要です。
また、本文中に書きましたように、対応していないドライブがあることをご承知おきください。


2DDドライブ用ステップ信号2倍化回路をFDD2台に対応させました

 2DDドライブ用ステップ信号2倍化回路を2台のFDDが接続できるように改良しました

2020年7月29日の「2DDドライブ用ステップ2倍化回路のその後」で紹介しましたステップ2倍化回路ですが、ドライブ毎にそれぞれ2倍化基板が必要となるのは煩雑なので、1枚の基板でドライブ2台を制御できるように改良しました。

最初は単純に2回路を1枚の基板に収めたものを製作して使用してみましたが、これは如何にも大きすぎて、扱いにくいものでした。


左:従来のもの 右:最初に製作した2回路版

そもそも、よく考えてみるとATtiny85が2個も必要なわけではありませんでした。ということで、回路を見直した結果、現在の基板と同じサイズに収めることができました。

その回路を示します。

FDD2台用回路


次に製作した2台用基板


右端の34PコネクタにFDCからのケーブルを、左端のコネクタとその隣の上向きのコネクタに2台のFDDへのケーブルを接続します。上下に出ている4PはFDD用の電源ケーブルです。
(FDD用のコネクタが左と上に向いているのは、当初、左向きのコネクタをメスにしてFDDに直接装着することでケーブルを省略できると考えていたからなのですが、それはそれで使いにくい面もあり、結局ケーブルで接続する形にしています。)

ドライブ番号は0~3から指定でき、それぞれStep信号2倍化回路を通すか通さないかを選択できますので、PC用の2DDのFDDのみでなくGOTEKや2Dのドライブも接続できます。
(GOTEKを使用する場合は、常に本体のドライブ番号はS0ではなくS1にセットしておきます。)

下画像はGOTEKをドライブ0に、PC用FDDをドライブ1に指定して、自作のFDCカードに接続した様子です。


使用中の様子

長いケーブルを使用したので、結構ゴチャゴチャに見えますね...

でも従来の基板と同じサイズのもので2台のFDDが制御できるようになったので、目的は達成できました。


2022年9月15日木曜日

自作クロスアセンブラの修正とASSIST09のFM-7への移植

 ASSIST09がアセンブルできるように自作クロスアセンブラを修正し、FM-7に移植してみました

【9月20日訂正】末尾に訂正が一個所あります。

発注しているプリント基板ができあがるまでハードいじりは措いておいて、いつかは直そうと思っていたソフトの修正に取り掛かりました。

まずは6809用のクロスアセンブラですが、以前、「必要に迫られて自作したアセンブラ等のツールソフトの紹介(2021年9月1日)」で紹介したもので、ASSIST09のソースをアセンブルする際にはそのままではアセンブルできず、ソースを修正する必要がありました。

例えばASSIST09のソースの1684行は

FCB 'H,$01,'H,$01,'H,$00,',,$00 --> $48,$01,$48,$01,$48,$00,$2C,$00 になって欲しい

となっていますが、この中の「',」が$2Cとならずに区切り記号と解釈されてしまうのです。ですので、アセンブルする際には「',」を$2Cと置き換えてアセンブルしていました。

ちなみに、使用者が多いと思われるアークピットさんのX6809でもこれは正常にアセンブルされません。アセンブル結果は次のようになります。

$48,$2C,$24,$30,$31,$2C,$00,$01,$48,$2C,$24,$30,$30,$2C,$00,$00

これは、X6809では1文字は「'」で囲んで「','」にしなければならないという仕様になっているからです。

私の自作アセンブラ(6809用、6800用)でも、最初はそのような仕様にしていたのですが、ASSIST09だけではなく他のソースでも後ろの「'」のない書き方が多いようなので、どちらの書き方にも対応するように変更した結果、「',,」が正常に変換されないというバグが発生していました。

もう一つの不具合も FCB疑似命令に関するもので、負数がちゃんと変換されないというもので、FCBのオペランド中での負数の処理にバグがありました。そのため、やはりアセンブル前にソースのFCBのオペランド中の-1を$FF,-2を$FEのように書き換えていました。

上記の2つの不具合はいずれもFCBのオペランド文字列の解釈に関するものでしたので、それを修正したVer1.92を作成しました。これによって「',」でも「','」のどちらでも正しく変換できるようになりました。


Ver1.92でのアセンブル結果


WARNINGが出ている


ASSIST09をアセンブルするために

以上で自作クロスアセンブラでASSIST09をアセンブルできるようになったのですが、実はソースそのものを何箇所か変更する必要があります。

私が以前から使用していたものは、書籍「MC6809-MC6809Eマイクロプロセッサ プログラミング マニュアル」中のソースではなくバイナリを手入力したもので、必要な個所を直接書き換えて使用していました。当時はアセンブラを所有していなかったので、ソースをアセンブルできなかったのです。

その後、ネットからソースを入手しましたが、そのソースが書籍のものと何箇所か異なっていることに気づいてはいましたが、ちゃんとソースを読んでいませんでした。

最近、ソースをアセンブルしてバイナリを得る必要があったので、書籍と見比べた結果、やはり書籍版を使用することにして、書籍版に合わせてネット版ソースを変更しました。

(私は今まで書籍版のバイナリを使い続けており、ネット版をそのままアセンブルしたものを使用したことがありませんので、動作にどんな違いがあるのかは分かりません。)

変更したのは下記の4箇所です。

1.825行からのCIDTAルーチン

2.870行からのCODTAOルーチン

3.1085行のCPX命令は6800の命令なのでCMPXに変更

4.1619行のCBKADDルーチンのDECBを変更

以上の変更を加えたソースを自作クロスアセンブラでアセンブルすると6つのWarningが出ますが、これはExtend命令と解釈したがDirect命令に変更できるよという警告ですので、該当の6箇所のオペランドの先頭にDirect命令を指示する「<」を付加します。改めてアセンブルするとWarningも出ずに、書籍と同じバイナリが生成されました。

以前は、Direct命令に変更できる場合は常に変更したコードを生成するようにしていたのですが、これではまずい場合がありましたので現在のような仕様にしているのですが、元のソースを書き換える必要があるのは嬉しくないので、変更するかしないかを選択できるようにしたVer1.93を作成しました。プログラムソースをかなり書き換えたので、正常に動作するかどうかをテスト中です。


FM-7へのASSIST09の移植

以前、ASSIST09に関するブログを書いた際には、もう既に移植済みのASSIST09にコマンドを追加したという内容でした。

「ASSIST09に追加したLoad, Saveコマンドを改良しました」(2018年6月27日)

「ASSIST09にLoad, Saveコマンドを追加」(2018年5月26日)

今さらとは思いますが、マイコンなどへの移植はネットでもいくつか見ますが(私も昔から自作マイコンで使用しています)、FM-7への移植はあまり見たことがないので、ここでFM-7へのASSIST09の移植の手順について書いてみたいと思います。

なお、以下の移植の手順についてはインターフェース誌1982年4月号の「ASSIST09の詳細とFM-8への移植(高橋豊)」をほとんどそのままFM-7に適用したものです。高橋豊さんに感謝いたします。

[1]最も簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、アドレス$F800からに配置)

アセンブラが使用できればソースを変更してバイナリを生成できますので、ソースの24行、25行のACIAとPTMのアドレスを変更し、配置するアドレスを20行に書いてアセンブルするだけです。PTMが実装されていない場合はアドレスに$0000を書いておきます。

しかし、これでは2KBのASSIST09の他に6KBもの使われないエリアが生じて無駄が多くなりますし、そもそも、FM-7のようなパソコンの$F800からには移植できません...

[2]簡単な移植(入出力にACIAを使用、領域圧縮なし、拡張ROMなし、任意のアドレスに配置)

任意のアドレスに配置する場合には、20行目のROMBEG(スタートアドレス)を書き換えます。さらに[1]の設定に加えて、SWIやNMIのベクターアドレスをASSIST09用に再設定する必要があります。ベクターアドレスについては直接設定することになります。

[3]未使用領域を圧縮して移植(拡張ROMあり、他は[2]と同様)

拡張ROMを使用する場合は、それを用いて必要な再設定をすることができます。図のFM-7への配置例で示したものでは、$6800~$6FFFにASSIST09を配置し、その下に$100バイトの拡張ROMを置き、その下からがスタック/ワークエリアとしています。ソースの変更箇所はROMBEG(スタートアドレス)とRAMOFS(拡張ROMのオフセット)のみで、他は拡張ROM中で設定できます。


ASSIST09の配置例


ASSIST09は拡張を容易にするために、自身のアドレスから2KB下に$20,$FE(BRA *)があると、拡張ROMがあるとみなし、ASSIST09の起動前に$20,$FEの次のアドレスにサブルーチンジャンプすることで、ユーザの初期化プログラムなどを実行することができます。図では、2KB下ではなく$100バイト下に設定しています。

この初期化プログラム中で必要な処理を書くわけですが、最小限必要な処理は以下の2つです。

・1文字入力ルーチン、1文字出力ルーチンをFM-7のそれに置き換える。

・SWI、NMIルーチンをASSIST09用に置き換える。

SWIはASSIST09の内部でサブルーチンコールなどのために使用しています。NMIはBREAKキーでF-BASICに戻るために使います。

その他、コマンドの拡張もここで行うことができます。


拡張ROMの例を下に示します。まず最小限のものです。

 

コマンドの拡張は非常に有用ですので、高橋豊さんの例をそのままお借りしてコマンド拡張方法の具体例を示します。

 


配置例にあるように、拡張ROM($6700~$67FF)とASSIST09($6800~$6FFF)を一つにまとめておいて、
 CLEAR ,&H6000
 LOADM "ASSIST" <-- ASSIST09とExROMを合体したファイル
 EXEC &H67E0
その後
 MON でASSIST09が起動します。ASSIST09から抜ける場合はBREAKキーを押します。

FM-7への移植手順は以上ですが、改めてインターフェース誌で情報を公開して下さった高橋豊さんに感謝いたします。

修正した6809用クロスアセンブラについてはチェックが終わり次第公開します。
それにしても、6809の命令一覧表には載っていない命令(例えば、LEA命令のプログラムカウンタ相対のDirectモード命令)が存在したりして、情報不足のせいか今一つ理解できないことがいくつかあるのが悩ましいところです。
【9月20日訂正】私の勘違い(&知識不足)でした。Directモード命令ではなく、プログラムカウンタ相対の8ビットオフセットか16ビットオフセットかの違いでした。