piFDC(仮)

はじめに

概要

ダウンロード

使い方

SLFについて

RaspberryPi3を購入したら一番最初につくろうと考えていたのはSL9821のRaspberryPi版だったのですが、移植にあたりどうしても導入したかったのがGPIOを用いたフロッピーディスクドライブの制御機能でした。実装に先立ち単体でフロッピーディスクの制御を行う評価を行っているうちエミュレータとの併存が難しいことが分かってきたため、まずはローダ、ライタ部分を切り出して単機能化することにしました。
そのため名称に込めた本来の機能からは異なるものとなってしまっています。
本ページではRaspberryPiとフロッピーディスクドライブをIO信号で接続し、フロッピーディスクの内容の物理フォーマットレベルでの読み出し、書き込みを行うソフトウェアとそのソフトウェアによって作成されるファイル形式について紹介します。

おことわり(必ずお読みください)

このページで行おうとしていることは実験的なもので極めて完成度の低いものです。フロッピーディスクドライブについても本来の正しい使い方をしているわけではなく、場合によってはRaspberryPiやフロッピーディスクドライブ、メディアを物理的に破壊する危険性も含んでいるものです。本ページで紹介している情報に基づいて実施した結果について当方では一切責任を負えませんので、本サイトに従って実施しようと考えておられる方には、どのようなことを行おうとしているか十分理解された上で何が起きても諦められる覚悟を持って実施されることを望みます。
また、古いフロッピーディスクはディスク表面にカビが生えていたり、シャッター内にほこりが入っていたりします。手入れをしないままメディアにアクセスすると、ホコリをヘッドが引きずって磁性体を傷つけることがあります。傷ついたメディアは読み出しできなくなってしまいますので、実験に際しては事前にメディアの状態をよくチェックしてください。

準備するもの

必要な環境を以下に示します。
・Raspberry Pi 3 ModelBの動作環境一式(本体、電源、SDカード、追加ライブラリを入れられるようにするためのネットワーク接続環境など)
・フロッピーディスクドライブ(当方ではY-E DATA 702D-6238DとMITSUMI D353M3Dというドライブを用いて評価しています。3モード対応は必須ではない...と思います)
・フロッピーディスクドライブへ電源を供給するための電源とケーブル(ドライブによって差異はあると思いますが5V1A程度必要になると思います。これはRaspberryPiの5Vピン出力では不足です)
・フロッピーディスクドライブとRaspberryPiを接続するケーブル※
・読み出すフロッピーディスクメディア
※接続は後述するピン配置の通り結線できれば何でもよいのですが、この接続方法自体に問題があるため、より安全に接続する方法が分かる方は独自に接続方法を検討された方がよいと思います(ハードウェアは無知なもので...すみません)。
RaspberryPiについては3 ModelBで評価しているというだけで、もしかしたらその他のモデルでも動くかもしれませんが当方では未評価となります。
RaspberryPiにはOSとしてRaspbianをインストールします。GUIは使用しません。ただし、実行ファイルは管理者権限で動作させる必要があるため、sudoが使用できるユーザでログインする必要があります。

RaspberryPiとフロッピーディスクドライブとの接続

以下にRaspberryPiのピンとフロッピーディスクドライブの接続について図示します。

すべてのピンを直結しています。図の青い線は通信方向がRaspberryPiからFDD方向(GPIO OUT)、赤い線はFDDからRaspberryPi方向(GPIO IN)になります。2本の緑の線は両方GPIO OUTですが、2ドライブ構成を想定して一応結線しているもので2ドライブ構成にしない場合は不要です。
上の図ではGNDの結線は省略していますが、FDD側の奇数番号のピン(PIN3以外)に最低一本はつないだ方がよいと思います。
結線の方針としては、SPIモードとして使用する、
・PIN19:SPI_MOSIをFDDのPIN22:WRITE DATA
・PIN21:SPI_MISOをFDDのPIN30:READ DATA
・PIN23:SPI_SCLKは未使用
・PIN24:SPI_CE0をPIN12:DRIVE_SELECT1(PIN10からPIN16がツイストするケーブルを経由する場合ケーブルのPIN14ですので注意してください)
・PIN26:SPI_CE1は2ドライブ構成のためリザーブ(ケーブルのPIN12に繋げておく)
が固定の他、残りの信号はRaspberryPiの最後尾のピン、PIN40から順にGPIOを繋いでくような形になっています。
直結の問題点
RaspberryPiからFDD方向の信号線(図の青い線)はFDD側で5Vでプルアップされています。このため、RaspberryPiの設定で結線しているピンのGPIOがINになっていると、GPIOに5Vが流れ込むことになると思います。OUTにして今のところ一応は動いていますがいずれにしてもRaspberryPi本体には負担がかかっているかもしれません。
また、RaspberryPiのGPIOは3.3Vのため、FDDのモデルによっては電圧不足で正常に動作しないかもしれません(Y-E DATAの702D-6238Dの場合は仕様書的にも問題なさそうですし、実際期待通り動作しているようです)。

なお、上記の配線はDOS/V機(AT互換機)に接続するFDDを想定しています。ピンアサインの異なるFDDを接続する場合は仕様にあわせて適宜配線を変える必要があります(最も配線を変えるだけでよいかは接続するドライブ次第ですが...)。

一応、実際の接続している写真を載せておきます。
FDDへの5Vの供給はACアダプタで行っています。FDDとRaspberryPiのGPIOとの接続にはFDDケーブルとオス-メスのジャンプワイヤを使っています(つながっていないワイヤはピンヘッダ側の接続がぐらつかないようにしているだけで意味はありません)。
見ての通り非常に雑な環境です...

参照資料

Webサイト
RPi GPIO Code Samples - elinux.org
GPIOを直接制御している部分はこのページの「Direct register access」の方法を使わせてもらっています。
書籍
お手軽ARMコンピュータ ラズベリーパイでI/O CQ出版局
ドライバ周りの実装方法は参考になりそうですが、実際に使用しているところ(第5章)の解説は上記Webサイトの内容とほぼ同じなのであまり活用は出来なかったかも
PDF
μPD765A/μPD7265 SINGLE/DOUBLE DENSITY FLOPPY DISK CONTROLLER
製品仕様書YD-702Dシリーズ
BCM2835 ARM Peripherals

改訂履歴

2019/10/12
ダウンロードファイルアップデート
5インチFDD(NEC製FD1155D)を入手したため今まで評価できずに残存していたバグを修正しました
fdr、fdwにオプションを追加したので使い方に内容を追加、ほかその他のページも含め追加修正
2018/1/20
ダウンロードファイルアップデート
2017/11/20
ダウンロードファイルを差し替えました。fdwがうまく動作しない場合はダウンロードし直してください。ご迷惑おかけして申し訳ありません。
2017/11/19
新規作成