2019年10月26日土曜日

FM-7でPC用のフロッピードライブを使う

PC用のFDD(2HD,2DD)がFM-7で2Dドライブとして使用できるという報告です


8月26日のブログ「FM77用の拡張I/Oボード、ROM/RAMディスクボードのプリント基板化が完了」の末尾に、プリント基板化を考えているカードとして、MB8877A使用のFDC基板を紹介しました。
そこでは、STEP信号を2倍化すれば、FM-7にPC用のFDD(2DDドライブ)が接続できるのではないかと書きました。

2倍化するための回路をあれこれと考えていたのですが、ディスクリート回路ではどうも無理なようでしたので、マイコンで実現してみることにしました。
考え方としては、MB8877AからSTEP信号が1つ出たら、適当な間隔をあけて2つのSTEP信号を出せば良いので、マイコンなら簡単そうです。

マイコンとしてPS/2キーボード変換器で使ったことのあるATtiny85を用いることにしました。これなら8ピンとコンパクトですので、FDCカードに載りそうですので。
ATtiny85のINT0割り込みはPB2なので、PB2にSTEP信号を入れ、その立ち下がりで割り込みを発生させて、割り込みルーチン内で2つの信号を出すことになります。

回路図です


参考にしたTEAC FD-235HGのマニュアルによると、STEP信号の間隔は最小3ms(方向転換後は4ms?)で、幅は特に規定されていないようですので、下図のように、幅10us、間隔4msで、2つ目の信号の後は4msの待ち時間を入れました。
(FM-7用のドライブのステップレートは6msまたは20msのようですので、本当は、全体を6ms以内に抑えた方が良いのでしょうが、とりあえずの値ということで...)




STEP信号です

ATtiny85のmain.c部のプログラムを以下に示します。

/*
 * StepDoubler.c
 *
 * STEP PULSE for FDD changes to double pulse
 * input pulse
 * -> output first pulse (pulse width is 10us)
 * wait 4ms
 * output second pulse (pulse width is 10us)
 * wait 4ms
 *
 * PORTB bit2:input pulse, bit4:output pulse (double pulse)
 *
 * Original Version '2019.10.25
 * Copyright (C) by Old68fun
 */ 

#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define F_CPU 8000000UL

void setup(void)
{
MCUSR = 0x00; /* MCUSRのWDRFを解除(0) */
WDTCR |= (1<<WDCE)|(1<<WDE); /* WDCEとWDEに論理1書き込み */
WDTCR = 0x00; /* ウォッチドッグ禁止 */

DDRB = 0b11111011; /* PORTB bit2:input, bit4:output */
PORTB = 0x00; /* PORTB not pull up */
PORTB |= _BV(2); /* bit 2:pull up */
PORTB |= _BV(4); /* bit 4:pull up */

MCUCR = (1 << ISC01) | (0 << ISC00); /* INT0 interrupt on falling edge */
GIMSK = (1 << INT0); /* Enable INT0 interrupt */
sei();
}

ISR (INT0_vect)
{
// cli();

// first pulse
PORTB &= ~_BV(4); // DATA bit=L
_delay_us(10);
PORTB |= _BV(4); // DATA bit=H
_delay_ms(4);
// second pulse
PORTB &= ~_BV(4); // DATA bit=L
_delay_us(10);
PORTB |= _BV(4); // DATA bit=H
_delay_ms(4);

// sei();

}

int main(void)
{

setup();

while(1) {
}
return 0;
}


FDCの回路図を示します。
【2020年1月21日追記】この回路には一個所間違いがあります。また、動作している実機と同じであることの確認をまだしていないものです。

FM_FDC回路図です(動作確認はまだです)

MB8877AのSTEP出力(ピン15)と7438の入力端子の間に上記のATtiny85を挿入して改造は完了です。

動作中の様子を示します。確かに2Dディスクが読めて、F-BASIC 3.0が起動しています。

                                        
動作中の様子です


FDDの電源も臨時にATtiny85基板から取っています。

基板の右上の小基板がATtiny85です


2DDドライブとしてMITSUMIのD359M3Dを使用しました。
【'2019.10.27追記】末尾に使用可能ドライブについて追記しました。

使用したFDDはMITSUMIのD359M3Dです

なお、FD用ケーブルとFDDとの接続部での端子変換やREADY信号生成には、以前、FM77AV40SX用にと製作したK-ichi's memoさんの「MSXでPC用FDDを使う」中のPIC12F675を用いた回路を使わせていただきました。蛇足ですが、現在はFM77AV40SXにはてきとーに。さんの「FM77AV20/40以降のFDD修理というか交換」中のダイオード1個による簡便な変換回路を用いています。


端子変換、READY信号生成部です


横から見た様子です


手配線の基板なのでIC数はこれで精一杯でしたが、プリント基板化すればATtiny85も収まりそうです。

FDC基板の全景です

これで、大昔に製作したFDCカードをプリント基板化する動機付けができました。
回路図をKiCadで書き上げたところで止まっていましたが、これから基板パターンを仕上げようと思います。

【'2019.10.27追記】ドライブについての情報を追加します。
使用したドライブ
  TEAC FD-235HG, YE-DATA YD-702D, MITSUMI D359M3D, D353M3D
使用可能なドライブ
  TEAC FD-235HG のみFILES,LOAD,SAVEが可能でした。
他のドライブのうち YD-702D, D359M3DはDISK-BASICが起動し、FILES, LOADは可能ですが、SAVEができません。D353M3DはDISK-BASICの起動すらしませんでした。

DATASHEETが入手できたのは FD-235HG, YD-702D のみですが、STEPパルス幅は0.8us, 1.0us(最小値)、パルス間隔は3ms(4ms), 3ms(最小値)でした。
パルス幅を2us~10us、パルス間隔を3ms~5msに変えてみましたが上記の結果は変わりませんでした。
ということで、現在のところ、対応ドライブはTEACのFD-235HGのみということになります。


【'2019.11.01追記】FM77AV40SXのSTEP信号を実測してみました。
ディスクをアクセスしているときのSTEP信号は下図のようでした。

FM77AV40SXのSTEP信号

何とSTEP信号の幅はusのオーダーではなく、1.5msもありました。2つ目のSTEP信号は4.5ms後に出ていますが、FDDの規格では3ms以上ですから余裕があります。次のSTEP信号までの間隔は20msですが、これはFM-7のSTEP間隔20msという規格に合わせてあるのでしょうか。


7 件のコメント:

  1. スゴイですね私もこれ作らせて頂こうかな。
    その場合ですが、4MHzと1MHzは8pinのATtiny85を14pinのPICにして水晶を付けると思います。できるかは不明ですが端子変換&READY信号生成も追加できるかもですね。

    返信削除
    返信
    1. 早速見ていただいてコメントをありがとうございます。FM-7用のドライブを全て処分してしまったので、困った挙句の苦し紛れではありますが、昔のドライブは入手しにくいので、意外と役に立つかもと思っています。
      言われるように、せっかくマイコンを載せるのならREADY信号生成もさせることができると良いと思っていました。端子変換もジャンパ―ピンぐらいでできれば使い勝手が良くなりそうですね。基板のサイズとの兼ね合いですが、検討してみます。

      削除
    2. 実はRS-232Cボードは回路図を書いて作成途中です。
      欲張りな物でUSB対応と漢字ROM対応版です。
      100x70では厳しくて横は拡張するかは検討中です。
      MB8877AとFDC9216BはAliで購入を検討しないといけないですね。

      削除
  2. 自分もFDDに関心を以ていましたので以前「てきとーに」氏のサイトを読んだ
    記憶があります。問題は1STEPの入力で2STEP出力する方法が思い付きません。
    この辺りモニタの周波数で15の入力で31に出力する、に通じてると思いました。
    (勿論、モニタの件もアイデアは理解しますが実装方法が判らないか困難です)

    PC用のFDD(2HDD,2DD)が2000年頃に安価に出回っていた時にFM-7の2Dドライブと
    して使用できたらと何度も思いました。今、回路図を拝見し全容ではありませんが
    追加部分に注目して「なるほど」と理解しました。(PICのソフトの件はともかく)
    更に回路図は「A4」サイズでコンパクトですが、FDCカード自体もコンパクトです。
    ハードで理解できる範囲が現状でFM-7とTTL(更には、その一部分)ですので、
    対象が「FM-7とTTL」を中心とし、付随するアイテムの内容をいつものように
    楽しく拝見しました。アイデアを実装する着眼力と遂行力を凄いと思いました。

    返信削除
    返信
    1. コメントありがとうございます。自作のFDCカードの再利用ができないかということでの苦し紛れの試みでしたが、常用しているFM77AV40SXのマニュアルには2Dディスクに対してはSTEP信号を2回発行していると書いてありましたので、可能だろうと思ってはいましたが、何とかできてホッとしています。

      削除
  3. 追伸
    氏名を入れ忘れました。

    あとSTEPパルス幅が 0.8us, 1.0us(最小値)なら 0.8us < 1.0us なので
    もしかしたら 1.0us(最小値)は 1.0us(最大値) の誤植の可能性はありませんか。

    返信削除
  4. すみません、書き方が不親切でした。2つの数値を並べているのは、最初がFD-235HGで次がYD-702Dの値のつもりでした。また、FD-235HGでしか書き込みができない理由が今のところ不明ですが、FM77AV40SXではどのドライブでも動作しているので、SXでのステップ信号を実測してみました。結果は本文に追加しました。

    返信削除