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という規格に合わせてあるのでしょうか。