最終更新:2024/10/5
フロッピーディスクドライブエミュレータ & コントローラ
FDX68
-Floppy Disk Drive Integration Tools for X68000-
V2基板をご利用いただく場合はVersion2.00以降のモジュールを使用してください。
Version2.00以降のものはV1基板でも使用できます。
2023/10/5 Version2.01aをリリースしました。
Version2.01 → 2.01aの更新内容
- fdxviewのnオプションが動作しない障害を修正
- readmeの小修正
Version2.00d → 2.01の更新内容
- メモリリーク障害を修正(fddemu)
- 単密度と倍密度が混在するトラック変換に失敗する障害を修正(fdxconv)
- FDX形式変換時のトラック全体長調整ロジックの改善(fdxconv)
- readmeの小修正
Version2.00c → 2.00dの更新内容
- readmeのライセンス条項を修正
V2基板ファームウェア(20230625)の更新内容
- ラズベリーパイの電源が入っていない状態でX68000に接続すると本体のFDDの動作を阻害する問題を修正
これは予防措置ですのでラズベリーパイの電源さえ入っていれば問題は発生しません。
(対象:GP1.hex,GP2.hex,GP3.hex,GP4.hex,GP5.hex)
V2基板ファームウェア(20230525)の更新内容
- ドライブにディスク未挿入の時にステップ信号がラズパイに通知されない障害を修正
(対象:GP4.hex)Version2.00b → 2.00cの更新内容
- fddemuが書き込みデータ受信時にSPIデータをドロップする問題を修正
- その他軽微なバグ修正
Version2.00a → 2.00bの更新内容
- fddemuがアイドル状態でRDD信号をアサートする問題を修正(V2基板使用時)
Version2.00 → 2.00aの更新内容
- 一部のコマンドの終了コードを修正
Version1.30 → 2.00の更新内容
- GPIO制御
V2基板のサポート(V1基板も使用可能)- FDX処理エンジン(共通)
ビットフィールド処理のチューニング、アドレスマーク検出処理の改善
パルス間隔判定処理変更(RAW→ENC)、不正間隔パルス消去方式変更- fddemu(FDDエミュレータ)
ディスクイジェクト要求処理の修正、割り込みネゲート条件の修正
V2基板制御処理の追加(ディスク挿入状態及びRDY,TR0,WTP信号同期)- fddump(FDダンプ)
高速ダンプの廃止、2周サンプリング方式への変更、不安定領域ノイズ判定処理の再設計
リトライ全エラー時の最良トラック評価方式追加- fdxview(FDXファイルビューワ)
トラック番号指定の追加- fdxtrckcpy(FDXイメージ間トラック情報複製)
トラック番号指定の追加- fdxconv(FDイメージ変換ツール)
メモリリーク及びヒープ使用量の削減対策
FDX68はX68000のフロッピーディスクドライブの環境を改善するために開発されたハードウェアとソフトウェアの総称です。 RaspberryPiに専用シールド(変換基板)を取り付けて当ホームページから配布するソフトウェアを導入して使用します。 基本機能はHxCやGOTEK等と同様のフロッピーディスクドライブエミュレータです。 X68000のイジェクト機能やディスク挿入検知等の拡張機能をサポートしています。 またKryoFluxの様にフロッピーディスクのダンプやリストアを行うコントローラ機能も持っています。 X68000だけでなく私の所有するFM77AV40EX,PC-8801FH/MAで利用実績があります。 その他にFM TOWNSやシャープMZ/X1シリーズ、NEC PC9801シリーズ、MSXのいくつかの機種で動作したとの報告を頂いています。
物理フロッピーがカビや劣化などの脅威にさらされるなかで貴重な(市販のゲーム等の)マスターディスクをプロテクトの情報を 欠損することなくバックアップして実機で活用できることを念頭に開発しました。 Version1.24ではダンプとリストアの精度が大幅に向上し物理フロッピー間のバックアップが実用レベルになりました。
私が収集したソフト(カビのダメージが少なかったもの)やサポーターの方から報告いただいたソフトの一例です。 これらのソフトでは問題なくダンプ、エミュレーションが可能でした。 また最新のXM6 TypeGではプロテクトがかかった状態でもこれらのソフトを起動することが可能です。 全て確認できたわけではありませんがリストアも高い確率で成功するようです。 FDX68のバージョンアップの直後はXM6 TypeGのバージョンアップが追随していない場合があります。
A-JAX ザ・コックピット ドラゴンバスター ワンダラーズフロムイース Mr.DO/Mr.DOvsユニコーン サイバリオン バブルボブル 餓狼伝説 R-TYPE サンダーブレード パロディウスだ! 餓狼伝説2 TDF ジェノサイド パワーモンガー 出たな!!ツインビー 悪魔城ドラキュラ ジェノサイド2 ファイナルファイト 生中継68 アルゴスの戦士 ジオグラフシール ファランクス 大魔界村 イメージファイト スクウェア・リゾート ぶたさん 遙かなるオーガスタ エアーコンバット スターウォーズ ぷよぷよ エトワールプリンセス スタークルーザー プリンス・オブ・ペルシャ オーバーテイク スターフォース ボスコニアン キャメルトライ スターラスター ボナンザブラザーズ クオース ストリートファイターII' ポピュラス グラディウス2 ダンジョンマスター マーブルマッドネス グラナダ チェルノブ ラプラスの魔 クレイジー・クライマー テラクレスタ/ムーンクレスタ リブルラブル コットン ドラゴンスピリット ワールドプロレス/大相撲 ファンタジーゾーン 大戦略Ⅲ'90' スペースハリアー スーパーゼビウス エイリアンシンドローム
専用シールド(変換基板)
V1基板
RaspberryPiと接続するためのGPIO40ピンコネクタ(メス)、FDD I/Fである34ピンリボンケーブルコネクタ(オス)を備えています。 シールドの主な役割はFDDの信号(5V)とGPIOの信号(3.3V)のレベル変換です。 レベル変換は74LS641というロジックICを使用しています。 その他に接続ドライブの選択を行うジャンパ(最大2つのドライブをエミュレーション可能)とアクセスLEDを装備しています。 現在はV2に移行するため頒布しておりません。
V2基板
V1基板同様にGPIO40ピンコネクタ(メス)、34ピンリボンケーブルコネクタ(オス)を備えています。 FDDの信号(5V)とGPIOの信号(3.3V)のレベル変換に加えてファームゥエアによる信号制御を行います。 一部の信号制御を基板自身が制御することでV1基板を用いた場合に比べてドライブエミュレーションの負荷を大幅に低減します。 また、アクセスLEDに加えてディスク挿入状態を示すLEDを装備しています。 現在BOOTHにて基板頒布中です。
X68000拡張機能を含むFDDエミュレーション
拡張子"FDX"を持つ専用のイメージファイル(以下FDX形式と呼ぶ)を使用して2台までのFDDエミュレーションが可能です。 シビアなタイミングが要求されるエミュレーションですがSPIを活用することでカーネルドライバ無しで(そこそこ)安定して動作します。 またX68000固有のフロッピーディスクの挿入状況のチェック、オートイジェクト、挿入検出等の拡張機能をサポートしています。 一部使用頻度の低いEJECT MASK,ERR DISK,LEDはGPIOの数を理由にサポートしていません。
ディスクイメージのダンプ、リストア
マスターディスクからFDX形式のディスクイメージを生成するために物理FDDからダンプする機能をサポートしています。 8MHzもしくは4MHzでサンプリングした信号を補正してFM/MFMレベルのエンコード情報にリアルタイム変換することで 高速なイメージダンプを実現しています。 またFDX形式のディスクイメージを物理FDDにリストアすることも可能です。 回転数の微妙な違いで発生する容量の違いをデータ送出タイミングを制御することで吸収するよう制御します。
FM/MFMエンコードレベルのディスクイメージ
FDX形式のディスクイメージは磁気データから解析したFM/MFMエンコードレベルのデータを格納しています。 したがって特殊なセクタ構造を持つ物理フォーマットにも対応することができます。 ファイル構造は識別子、名前、シリンダ数、ヘッド数、RPM、転送レート等のヘッダー情報と各トラックデータの羅列 というシンプルな形式です。 サポートするフロッピーディスクの種類は2D,2DD,2HD(1.6M),2HD(2.0M)となります。 2HDのアンフォーマット容量はドライブのRPMによって変化します。 X68000の標準はRPMが360ですので2HD(1.6M)になります。 FDX形式はクロックを含むFM/MFMレベルのエンコードですのでファイルサイズが大きくなります。
既存のディスクイメージ活用
既存のディスクイメージ(XDF/HDM/2HD/DUP/IMG),DIMディスクイメージ(DIM),D68ディスクイメージ (D68/D88/D77)を FDX形式に変換することが可能です。 またFDX形式をXDFやDIM,D68形式等に逆変換することも出来ます。 しかし既存のディスクイメージの殆どはセクタ情報のみを保存している(GAP等の情報は持っていない)ため FM/MFMレベルのエンコードデータを持つFDX形式から逆変換すると情報の一部が失われる、 もしくは変換出来ない場合があることに注意してください。
RAWレベルのイメージダンプ
FDX形式は汎用性を持たせておりFM/MFMエンコードレベルのデータだけでなく物理FDDから読み取った信号そのものを RAWデータとして格納することができます。 信号の送出間隔を微妙に(0.5%程度)制御してプロテクトを掛けたマスターディスク等はこのRAWレベルデータとして バックアップする必要があります。 FDX68ではダンプ時に指定することでRAWデータレベルでの保存を指示することができます。 当然FDDエミュレーションでもサポートしています。 市販のアプリケーションをバックアップする場合は全ディスクを通常モードでバックアップを行い問題がある場合に 限りRAWモードを使用すると良いでしょう。 というのも強力なプロテクトが施されているのは大抵の場合起動時に使用するディスク1枚であることが多いからです。
モデル
Raspberry Pi 3 Model A,B,B+を推奨します。
Raspberry Pi 2 Model BやZero,ZeroW等はサポートしていません。
Raspberry Pi 4 Model Bは推奨しませんが"Raspberry Pi 4 Model Bの使用"を参照してくだい。
OS
開発およびテストに使用しているOSは下記になります。
Raspberry Pi OS Lite(Linux raspberrypi3 5.15.84-v7+ #1613 SMP Thu Jan 5 11:59:48 GMT 2023 armv7l GNU/Linux)
推奨されない理由
Raspberry Pi 4 Model Bは高性能であるが故に電源電圧品質や熱に関してとてもシビアです。 FDX68はホストマシンからアクセスされている間はスケジューラの優先順位を変更し、 最高速で動作することで応答性を稼いでいます。したがって電源品質や熱によりCPUクロック が可変しやすい環境では不安定になることがあります。
もう一つの理由としてFDX68が使用しているSPI通信の速度が不正確になるということがあります。 FDX68はSPI通信速度として500kHz,1000kHz,4MHz,8MHzを使い分けています。これらの速度は コア周波数の分周で設定されます。Raspberry Pi 3の場合はこの周波数のデフォルトが400MHz ですので先の速度は分周比800,400,100,50で生成することが可能です。一方、Raspberry Pi 4 はデフォルトのコア周波数は500MHzですので単純計算で分周比は1000,500,125,62.5となります。 少数の分周比は設定できませんので8MHzが正確に生成できません。
コア周波数の変更と固定
Raspberry Pi 4においてもコアクロックを400MHzにダウンクロックし、かつ400MHzに固定する 方法があります(開発環境の条件で確認していますが将来変更になる可能性があります)。 /boot/config.txtに以下の様な記述を追加します(arm_boost=1の下2行)。Raspberry Pi OSの 場合は[pi4]のエントリがあることが多いのでそこに追記すると良いでしょう。 gpu_freq及びgpu_freq_minの設定でコアクロックも同時に変更されます。コアクロックのみを 変更する方法も試しましたが固定化することができませんでした。
FDX68は専用シールド(変換基板)に加えてRaspberry Pi上で動作するソフトウェアの 総称あるためソフトウェア単体でご利用頂くことはできません。
HP上等で案内する公式頒布サイト(ショップ等)で専用シールドを正規に購入して いただいた方に限りソフトウェアの使用が許諾されます。
なお公式頒布サイトでは譲渡やオークション等での転売禁止を購入条件としています。 譲渡やオークション等での転売で専用シールドを入手された方にはソフトウェア の使用は許諾されません。
同人ハード及びソフトウェアという特性上あくまであるがまま"AS IS"で頒布します。 従って使用者が受けたあらゆる損害に対して一切責任を持ちません。 またソフトウェアに不備もしくは不具合があったとしてもそれを修正する責任もありません。 FDX68を利用することでRaspberry PiやレトロPCが故障するリスクがあります。 あくまで自己責任でチャレンジしてください。 この条件に納得できない場合はご使用をお控えください。
またソフトウェアに関してはこのHP以外での配布を認めておりません。
基板を譲渡やオークションで入手された方はライセンスは許諾されません。ご使用になられた場合ライセンス違反となります。
ソフトウェア本体
FDX68 version 2.01aのダウンロード(TAR+GZ形式)
Windows版ツール群
Raspberry Pi OSのセットアップ
インターネット上のインストールに関する情報を参考にしてください。 動作確認しているものはRaspberry Pi OS Lite(Linux raspberrypi3 5.15.84-v7+ #1613 SMP Thu Jan 5 11:59:48 GMT 2023 armv7l GNU/Linux)となります。
FDX68のインストール
ダウンロードしたバイナリを任意の場所に展開してください(tar zxvf fdx68_xxx.tar.gz等)。 /usr/local/bin等のパスが通った場所に展開すると良いでしょう。
V2基板の最新ファームウェアのダウンロードと更新方法です。2023年6月以降頒布の基板は最新ファームウェアを書き込み済みです。
BASEショップにてV2基板の有償頒布中です。
専用シールドのピンアサインやジャンパ設定。
ディスクイメージファイルのフォーマット情報。
エミュレーションやダンプ、リストア等のコマンド。
X68000でフロッピーディスクドライブエミュレータ使う。
FM77系やPC88系でフロッピーディスクドライブエミュレータを使う。
PC98系でフロッピーディスクドライブエミュレータを使う。
X68000や他のフロッピーディスクドライブを制御してダンプやリストアを行います。
- 2024/7/1 Version2.01リリース
- 2024/1/8 Version2.00dライセンス条項および公式頒布サイトを更新
- 2023/5/27 V2基板のファームウェア更新情報の公開
- 2023/5/23 Version2.00c fddemuがライトデータ受信時にSPIデータをドロップする問題を修正、その他軽微なバグ修正
- 2023/4/2 Version2.00b fddemuがアイドル状態でRDD信号をアサートする問題を修正(V2基板使用時)
- 2023/3/1 Version2.00a 一部のコマンドの終了コード修正
- 2023/2/10 Version2.00 V1,V2基板に対応、ダンプ精度の向上、FDDエミュレーションの安定化、いくつかの補助ツールにてトラック番号指定を追加、その他バグ修正多数
- 2021/5/6 Version1.30 イメージ解析および変換ロジックの再実装、エンコードデータ変換閾値のチューニング、ダンプ処理の不安定領域判定処理のチューニング、リストア処理のベリファイ機能追加、その他バグ修正
- 2021/3/28 Version1.2A 最新カーネルで不安定なる現象の回避、セクタ情報解析でまれにゴミを拾う障害を修正、fdddumpのノイズ除去処理のチューニング、fdxconvでXDFに変換できない障害を修正、fdxconvでHFE形式へのエクスポート、インポートを実装、その他調整と軽微なバグ修正
- 2021/2/21 Version1.29c fdxconvで2D形式のイメージをD88等へ変換できない障害を修正
- 2021/2/20 Version1.29b fddemuでD68ファイルを指定できない障害を修正、fdxviewで特殊なトラックを解析できない障害を修正
- 2021/2/14 Version1.29 ダンプ精度の向上,ディスクドライブエミュレーションのオートイジェクト障害修正,ダンプ、リストアにトラック指定オプション追加、MFM/FM混在トラックの解析対応、Windowsコマンドライン版ツール群の提供、その他リファクタリングとバグ修正
- 2020/12/31 Version1.28 ダンプおよびリストア精度の向上,ダンプ速度の高速化,ディスクドライブエミュレーションのライトタイミング修正,データ変換、補正、解析ロジックの改善,その他バグ修正多数
- 2020/11/30 Version1.27b 2D形式のFDXのRAWデータからD68(D88,D77)形式に正しく変換されないバグを修正
- 2020/11/21 Version1.27 複数ドライブイジェクト要求の応答性改善(X68000モード),ディスクドライブエミュレーションのRaw data correctionオプションの指定が無視されていたバグを修正,ディスクドライブエミュレーションのRaw data correctionオプションをデフォルトで有効化,ディスクドライブエミュレーションで書き込み時に定期的にイメージファイルに書き出す様に変更,ディスクドライブエミュレーションがディスク無しでも必要の無い信号を出力していたバグを修正,ディスクダンプでトラックの開始、終了の判断ロジックを改修,ディスクリストアのRawデータ拡縮処理に信号補正を追加,fddctlの-listコマンドが受け付けられなくなっていたバグを修正,その他いくつかのマイナーバグを修正
- 2020/10/9 Version1.26 FDI,FDD,NFD形式のFDX変換サポート、フロッピーディスクドライブエミュレーションのリファクタリング、X68000拡張機能の応答性改善、ReadyおよびIndex信号のタイミング修正、ドライブ回転位置再現の実装、PC98専用モード追加(2DDのRPMを360に固定、MODE SELECT信号による高密度時のRPM制御)
- 2020/3/31 Version1.25 RaspberryPi4で起動できるように修正。ダンプ、リストアのコンソール出力内容修正、インデックスホール位置設定修正、FM77AV40EXの内蔵ドライブでシークしない現象の回避
- 2019/9/27 Version1.24 ダンプ、リストア精度の大幅な精度向上、エミュレーションモードのハーフステップが機能していなかった問題を修正、FDXファイルのセクタ情報をダンプするコマンドの追加、その他バグ修正
- 2019/8/7 Version1.23 エンコード形式でのダンプで稀にゴミデータが混じる障害を修正
- 2019/8/4 Version1.22 RAWモード全般の改良、詰め込み型のトラックデータを正しくダンプできるように改良、その他バグ修正。
- 2019/6/15 Version1.21 不正なCHRNのセクタ解析時に不正終了する不具合の修正、FDX->D68形式への変換時にライトプロテクトを反映するように改修。
- 2019/6/2 Version1.20 リファクタリングとエミュレーションモードの改良、リストア動作の再実装、チューニング、バグ修正多数。
- 2018/12/8 Version1.14 アンフォーマット領域検出とノイズエミュレーションの調整。fddemuの安定性向上。その他バグ修正。
- 2018/11/11 Version1.13 fddemuのイベントスレッドのポリシーを下げた。
- 2018/11/10 Version1.12 アンフォーマット領域検出とノイズエミュレーションの改善。インデックス信号発生タイミング修正。ステップパルス処理優先順位の変更。その他多数のバグ修正。
- 2018/10/20 Version1.11 X68000拡張機能とモーター信号の使用を設定できるよう変更(fddemu)。FDX形式からXDF等の一部形式に逆変換できない不具合を再度修正(fdxconv)。その他のチューニグとバグ修正。
- 2018/10/13 Version1.10 1周の単位をビットレベルで制御するように変更。RAWデータ対応を含む全般的な改良。
- 2018/8/16 Version1.02 FDX形式からXDF等の一部形式に逆変換できない不具合を修正(fdxconv)
- 2018/8/13 Version1.01 モータオフ時にトラック0とオプションが動作しない不具合を修正(fddemu)
- 2018/8/10 Version1.00 新規