MSX実機を保守する上で避けて通れないのがFDDのトラブルである。多くのMSX内蔵FDDは駆動ベルトの劣化により数年に1回のベルト交換が必要になるが、ベルトは使わなくても経年劣化するので買い置きはあまり意味がなく、交換の都度新しいものを入手しなければならない。近年メーカーが保守用ベルトをエンドユーザーに販売しなくなったとの情報もあり、オリジナルのFDDを保守・運用して行くのも困難になってきた。
そこで、ベルトレスドライブに換装する手段が浮上するわけだが、その際ネックになるのがREADY信号の処理である。現在でも比較的手に入りやすいAT互換機用のFDDではREADY信号をコネクタピンに出力しておらず、MSX用FDDとして流用するには、適当なREADY信号をデッチあげる必要がある。今回手持ちのFDDでいくつかの検証をしてみた。
ちなみにAT互換機用スリムタイプのFDDは何故かREADY信号を出力しており、コネクタを変換してしまえば電気的には問題なく接続できるようだ。同人製の変換アダプタが家電のケンちゃんやネットオークションを通して頒布されているようなのでポン付けで使いたい人は探してみると良いだろう。
|
|||||
|
|
今回検証のため、ディスク挿入センサーに取り付けていたワイヤーを外し、READYもどき信号に繋ぎなおしてみた。NCL039の35pからパターンを追いかけて、取り出し易いパッドから信号を引っ張っている(赤い矢印の場所)。 この状態でFS-FD1Aに入れて動作確認してみたところ、アクセス自体は問題なくできたものの、アクセスが終わってもスピンドルモーターが停止しなくなった。 なお、この信号はスピンドルモーターのドライバICに接続されており、なんらかのモーター制御に関わるものと思われる。 |
|
同じ手法でMITSUMIのD353M3(無印)を使って検証してみた。D353M3Dと似た構成で、同じコントロールIC NCL039が使われている。 |
|
NCL039の35pからパターンを追いかけると、左上のフレキケーブルのMTとシルク印刷された端子に繋がっていた。このフレキはスピンドルモーターやセンサーが実装されている基板に接続されており、MTという信号名からスピンドルモーターのトリガー信号ではないかと推定し、ここにLEDを取り付けて挙動を観察してみた。 FDD単体を適当な+5V電源に接続し、メディアを入れると数秒モーターが回転してその間MTはLレベルになった。回転が止まるとHレベルとなるが、FDDコネクタ16pのMOTOR ON信号をGNDに接続するとモーターが回転すると同時にLレベルになった。メディアが入っていない場合はモーターは回らず常にHレベルである。モーターのON/OFFと連動していることから、このFDDにおけるREADYもどき信号の実体はスピンドルモーターのトリガー信号であると考えて矛盾がないだろう。 このピンをREADY(34p)に直結した場合に前述の問題が発生するとしたら、原因はNCL039が出力する信号がオープンドレインではないためではないかと考えた。本来Hレベルでモーターを停止させるところが、READY端子に接続したことで電圧降下し、モーターが止まらなくなったと推定した(実機での測定はしていない)。 |
仮説を実証するためMT信号のHレベルの電流がREADY信号の34p側に流れないようにダイオードを介してオープンドレインもどきにしてみた。 この状態でFS-FD1Aに入れたところ、正しくアクセスでき、その後モーターも停止した。もちろんディスクを抜けばエラーも出る。DRIVE SEL信号には無頓着であるが、これで運用上は差し支えないと思われる。 以上がMSXのFDDインターフェイスに1台のドライブを接続するときの話であるが、2ドライブ化する場合は別の問題が発生する。 |
|
MSXでは1つのFDDインターフェイスに2台までの物理ドライブを接続することが可能になっている。個人的にはいまさら2台のリアルFDDを接続するメリットを見出せないが、近年は上画像のGOTEKのようなFDDエミュレータが安価に手に入るようになった。GOTEKはUSBメモリ内部のFDイメージファイルに対してデータの読み書きができるもので、ゲームの起動はもちろんのこと、イメージファイルをエディタで開けばPCとファイル単位のやりとりも可能である。 1つのFDDインターフェイスに2台の物理ドライブを接続すると自動的に2ドライブシミュレータは無効化されるが、メモリ使用量は変わらない。1ドライブ時にCTRL起動すると2ドライブシミュレータが無効化され、フリーエリアが少し増えるが、2ドライブ時はセカンダリFDDが無効化され、同様にフリーエリアが増える。市販ゲームが起動しない等のデメリットも考えにくく、FDD+GOTEKの2ドライブ体制はたいへん有意義だろう。なお、ソフトウエアのAUTOEXECができるのはプライマリ側のみであり、どちらからも起動できるようにするためには切り替え回路が必要となる。これについては別記事で詳述したい。 通常FDDを2ドライブ化する際はケーブルをデイジーチェーンで接続し、DRIVE SELECT信号以外のラインは両ドライブで共有される。原則MOTOR ON信号も1本のワイヤーで伝送されるが、スピンドルモーターの動作はDRIVE SELECTの影響を受けないため、リアルFDDで2ドライブ化したときには2台のスピンドルモーターが同時に回転する(おそらくそういう仕様)。なお、AT互換機の場合、フラットケーブルでMOTOR ON信号を2本伝送できる仕様になっているため、スピンドルモーターは個別に制御される。 ちなみに、松下製MSXで多く採用されている東芝のFDC TC8566はセカンダリFDD用のMOTOR ON信号を出力しており、これを利用することで2台のモーターを個別に制御することが可能である。MSX turboRでもこのFDCが採用されており、MOTOR ON信号をプライマリとセカンダリで分離しているが、これはFDCではなくS1990の機能を利用している模様。
他にデイジーチェーンする際に気をつけたいのが、各信号のプルアップ抵抗。YD-702D 6639Dの データシートを読むと入出力信号ともに1kΩでプルアップすることになっているが、このあたりの仕様はFDDによって異なる。当方で確認した範囲ではプルアップ抵抗が4.7kΩであったり、入力側のみプルアップされているものや、いずれもプルアップされていないものもあった。ジャンパーピンでプルアップするかどうかの選択をするものもあるらしい。 デジタル信号のプルアップ抵抗は入力側に取り付けるのが普通だが、FDDのプルアップ抵抗にはターミネーターの役割があるため入出力信号いずれもプルアップされているものが多いようだ。ターミネーターは長いケーブルで信号を引き回す際の反射によるトラブルを回避するためのものだが、MSXに2ドライブ内蔵させる場合のケーブル長はせいぜい10センチ程度であり、あまり気にしなくても良さそう。 なお、DISKインターフェイス上のプルアップ抵抗については、松下FS-A1シリーズのすべて、FS-FD1A、SONY HB-F1XD、SANYO PHC-77はいずれも入力側5本(INDEX、TRACK0、WRITE PROTECT、READ DATA、READY)のみ内部で1kΩでプルアップされているようだ。FDDの出力信号はオープンドレインなので当然と思われるが、EPSONの98互換機のように本体側でプルアップされていない機種もあるらしい(情報提供:試運転さん)。このような機種にプルアップ抵抗のないFDDを接続すると、信号が浮いてまともに動作しないだろう。ちなみにGOTEK FDD Emulatorは入出力信号ともに1kΩでプルアップされているので、プルアップ抵抗のない本体やFDDと併用しても問題なさそう。 |
|
デイジーチェーンではREADY信号のラインも2台のFDDで共有することになるが、スピンドルモーターは個別制御されないため、モーターが回転するだけでREADYにLowを出力するドライブが存在すると、非ターゲットが返す偽のREADY信号に騙される状態が発生しうる。上記回路図のようにREADYもどき信号にDRIVE SELECT信号を絡めて、出力をオープンドレインにすれば問題を回避できるだろうと考えた。 |
|
試験的にMITSUMIのD353M3(無印)をデイジーチェーン対応のMSX仕様に改造してみた。元々34pはDISKCHANGE信号であったので、ここをパターンカット。DRIVE SELECT信号は12pにアサインされていたものをパターンカットして10pに接続した(セカンダリドライブとして使用する場合この処置は不要)。ここから7432のゲートに配線し、READYもどき信号(MT)とORを取ってダイオードでオープンコレクタ化し、これをREADY信号として34pに繋いでいる。 FDDコネクタ7,9,11pはGNDに接続されているものが一般的であるが、電源コネクタを省略してここに+5Vを流すドライブがある。SANYOのPHC-70FDの内蔵ドライブやFM-TOWNSの一部のモデルが該当し、今回はその仕様にするためにコネクタ側をパターンカットして赤いワイヤーで+5Vラインに接続した(カットしたGNDパターンは黒いワイヤーでジャンパ)。FS-FD1AやHB-F1XDなどSONY機の換装で使う場合はこの処置をせずに普通に電源コネクタに+5Vを接続すればよい。間違って使うと電源がショートして危険なので注意。 なお、ドライブが2HDモードに切り替わるとMSXでは読み書きできなくなるため、ディスクの識別孔を読み取る2HDセンサーはパターンをショートして無効化した。2p,4pはNCL039に接続されており、モード切り替えに関わる信号と思われるが誤動作を避けるためDEN1,DEN3の0Ω抵抗を外してカットした。以上の改造により、MSX用のFDDとほぼ互換品となった。2台のFDDをデイジーチェーンした場合もアクセス可能であり、ディスクを排出すればDisk offlineエラーも出る。 |
|
|
|
||||||||||||||||||||||||||||||||||||||||||
当方で検証したREADY信号生成手段しては上の表の通りとなった。ドライブによって仕様が変わる可能性のあるものについては括弧をつけている。 今回の実験結果から、MSXで使用する場合一番下のORゲートを使う手法で一通りのトラブルを回避できると考えているが、1台のドライブしか接続しないのであれば、ディスク挿入センサー(挿入でGNDに接続される物理スイッチ)直結でも特に問題はないと思われる。 試運転さんのサイトで公開されているREADYもどき信号については、当方ではコントロールICにNCL039を使用したMITSUMIドライブで検証し、その実体がFDD内部のスピンドルモーターのトリガー信号であると推定したが、他のFDDのコントロールICが出しているREADYもどき信号がどういった性質のものかは当方では検証していない。今回この信号を34p直結でモーターが止まらなくなる不具合が発生したが、たまたまFS-FD1Aと相性の悪いドライブを選んだだけかも知れない。 なお、試運転さんのサイトには今回使ったD353M3(D)の類似型番D353T5の情報も記載されていて、基板画像を見ると0Ω抵抗を移動することでコネクタ34pをDISKCHANGEからREADYに変更できるようだ。READY信号は、コントロールIC NCL032の32pに接続されているとのことで、おそらくNCL032の32pはモーターのトリガー信号ではなく「正しい」READY信号を出力していると思われる。NCL032とNCL039はピン数も44p/48pで異なっており、全くの別物のようだ。 今回の記事では検証していないが、MOTOR ON信号とINDEX信号からREADY信号を生成する手法についてK-ichi氏が2011年のblogで 記事を書いている。PIC版のソースを拝見したところ、READY出力はオープンドレインになっていて、モーターONになってからINDEXパルスを1回検出した時点でREADYにLowを出力。モーターOFFになった時、または約1秒以上(0.5ms間隔で2000回チェック)INDEXパルスが検出されなければREADY出力をオープンとしている模様。実際にディスクが回転しているかをチェックしているため、ディスクを抜いた時だけでなく、ベルトドライブのスリップ時にもDisk offlineを出すことができそうだ。 74HC4538版もほぼ同様で、モーターON時にINDEXパルスを検出したらREADYにLowを出力。モーターOFF、または0.7秒以内に次のINDEXパルスが検出されなければREADYをオープンとしている模様。 これらの手法はMSX本体やFDDの改造を必要とせず、外付回路のみで実現する際に有効と思われる。FDDのINDEX信号はドライブが選択されているときのみ出力されるため、2ドライブ化にも対応できるように思うが、信号の遷移にタイムラグが発生するため交互に連続したアクセスが発生した際に正しく機能するかどうかは検証が必要かも知れない。 |
おわりに 今回の一連の検証結果に基づき、FS-A1FXをリアルFDD+GOTEKの2ドライブシステムに改修中である。GOTEKの実体は基板1枚であるから、レイアウトを工夫してFDDの下の隙間に潜り込ませることができた。欠品していたFDDマウンタは1Tアルミを板金して作成。GOTEK基板やロータリーエンコーダも同様にアルミのステーでFDDマウンタに固定している。これについてはまた別の機会に。
検証には、試運転さんの調査データを活用させていただき、れふてぃさんに情報提供を頂きました。K-ichiさんのblog記事も参考にさせていただきました。ありがとうございました。
お約束ですが、この記事を見て改造などを行い故障やその他問題が発生しても責任は負えません。各自の責任において情報を広く集めて行うことをおすすめします。
copyright (C) 2019 Niga.