ArduinoベースのAmigaフロッピーディスク リーダー/ライター – バージョン 2.2
必要な部品と材料
- Arduino UNO × 1
- Arduino Pro Mini 328 - 5V/16MHz × 1
- 1kΩ 抵抗 × 1
- ブレッドボード × 1
- ジャンパワイヤ × 1
- FTDI Basic Breakout 5V × 1
使用するアプリ
- Arduino IDE
プロジェクト概要
このプロジェクトは、前回のディスクリーダーを発展させ、Amiga DDフロッピーディスクのデータをWindows 10上で読み書きするオープンソースソリューションです。詳細は プロジェクトサイト を参照してください。
- 目的: 安価かつシンプルにAmigaディスクのデータを保存・復元すること。
- 解決策: Arduinoスケッチ + Windowsアプリケーション (他OSへの移植も可能) の組み合わせ。
- 理由: 通常のPCではAmiga独自のフォーマットが読めないため、専用ハードウェアが必要。
書き込み機能の開発過程 (試行錯誤の記録)
試行1: ソフトウェアフロー制御
読み取り成功後、書き込みを逆算で実装しようとしました。ADFファイルをMFMデータにエンコードし、1バイトずつ送信してACKを待つ方式 (2Mbps) を試みましたが、OSのレスポンス遅延でタイミングが合わず失敗。
試行2: ハードウェアフロー制御 (CTS/DTR)
FTDIボードのCTSピンをArduinoから制御し、PC側の送信をブロックする方式に変更。しかし、CTS制御のラグでデータ取りこぼしが発生。
試行3: ループ内でのバイト先読み
ビット書き込みの合間にシリアルバッファをチェックし、余分なバイトを1つ先読みして保存する方式。データ損失は防げたものの、書き込んだデータが読み取れず。
試行4: オシロスコープによる波形解析
0xAAパターン (10101010) を書き込み、書き込み波形を観測。タイミングは完璧でしたが、12ビットごとに「High」が継続する異常を発見。フロー制御の待ち時間が原因と判明し、CTSを瞬間的にLow→Highするよう修正。綺麗な矩形波が得られました。


試行5: タイマー割り込み不要の精密制御
タイマー2のオーバーフローを利用し、カウンタ値をリセットせずに次の書き込みタイミングを計算する方式に変更。シリアル読み取りも最小限に最適化。検証機能付きで再挑戦し、95%のトラックが初回で検証パス。実機Amiga 500+で起動成功!
試行6: ループバック遅延の対策
ユーザー報告のチェックサムエラー対策として、バイト境界でのタイマーオーバーフロー待ちを追加。
試行7: トラック全消去の導入
書き込み前のパディング不足が原因と判明。トラック全体を0xAAで消去してからデータを書き込む「トラック消去コマンド」を追加し、X-Copy Proで100%合格を達成。
読み取り精度の向上
INDEXパルスとの同期、パスタイミングのヒストグラム解析、独自のデコード式 value = (COUNTER - 16) / 32 (0〜3にクリップ) を導入。MFMの特性 (連続する1は存在しない) を利用し、2ビット符号化で転送効率を向上。読み取り成功率ほぼ100%に。

診断機能と今後の展望
配線チェック用の診断モードを実装。今後はArduino Uno単体での書き込み対応 (23K256 SRAMバッファ活用)、FDIフォーマット対応 (コピープロテクト付きディスク対応)、チェックサムなしでのデータ検証手法の検討を予定。
ソースコード
ArduinoスケッチとWindowsアプリケーションのソースコード: GitHubリポジトリ
回路図
Arduino Pro Mini用とArduino UNO用の接続図を用意しています。


製造プロセス
- アニメーションの進化と技法:洞窟壁画からCGIまで
- フロッピーディスクの進化:磁気メディアから光ストレージへ
- NeoPixelリングとArduinoで作るインタラクティブジャイロスコープLEDディスプレイ
- Bluetooth操作のArduinoスパイボットを自作する
- FlickMote:ジェスチャー操作のIRリモコンでスマートホームを制御
- 自作Arduino TV-B-Gone:全テレビ対応の万能リモコン
- DIY Arduino USBゲームコントローラー - 高性能ゲームパッドを自作
- DIYクラウドコスチューム: LEDストリップ、Arduino Nano & SparkFunパーツで光る雲に
- 12メートル先から見える大型LEDマスタークロック(アラーム機能付き)を自作しよう
- Pixie: Arduino Pro Miniで作るNeoPixel腕時計 - アナログとデジタル融合のDIY光る時計
- ArduinoベースのAmigaフロッピーディスクリーダー - 低コスト・オープンソースなデータ復旧