X68000用FDDエミュレータ&コントローラ「FDX68」のインストールから主要コマンドの実行まで

2020/11/28(土) - 20:31 | bisoh
Raspberry Piの初期設定、FDD-DRIVE SWAPPER(FDS)の組み込みを経て、ついにFDX68を動かす編に到達。前回も書いた通り、この機材はラズパイと組み合わせてX68000のフロッピーディスクドライブをエミュレーションしたり、コントロールしたり出来る優れもの。今回はFDSの利用を前提とした、FDX68の主要モード実行までの手順を紹介していく。

当記事の環境は以下の通り。

FDX68 バージョン1.27
Raspberry Pi4 model B / 3 model B+
X68000X68000 SUPER with FDD-DRIVE SWAPPER
母艦MacBook Pro 13インチ 2020
FTPクライアントTransmit

記事内写真のRaspberry Piは4Bだが、3B+でも同内容を実施している。また、写真やスクリーンショットは何度か日を変えて撮り直している。

Raspberry Pi 4BとFDX68、その間のクリアランスを作るためのGPIO延長コネクタとスペーサー (c)Hosoda Bisoh
ラズパイ4BとFDX68を接続 (c)Hosoda Bisoh


GPIO延長コネクタのおかげでヒートシンクとFDX68の間に十分な隙間が出来た (c)Hosoda Bisoh

購入したスペーサーとGPIO延長コネクタ

今回ラズパイとFDX68との間を空けるために購入したのは下記の2つ(リンクテキストをクリックするとAmazonの商品ページに行きます)。いずれも長さ違いのものがセットになっていて色々な状況に対応しやすく、ケース付きで管理もしやすい。

→Geekworm Raspberry pi インストールツール M2.5シリーズ
→GeeekPi 2x20 40ピンスタッキングメスヘッダーキットfor Raspberry Pi

今回Amazonで購入したスペーサーセット「Geekworm Raspberry pi インストールツール M2.5シリーズ」 (c)Hosoda Bisoh
GPIO延長コネクタはこれの同等品を購入した→「GeeekPi 2x20 40ピンスタッキングメスヘッダーキットfor Raspberry Pi」 (c)Hosoda Bisoh


1. ラズパイにFDX68をインストール

はじめにFDX68のソフトウェア側のインストールを行う。ここでは母艦PC(Mac)を経由して行う場合と、ラズパイへ直接入れる場合の両方を紹介する。

Mac経由の場合

まずは予め母艦となるMacにFTPクライアントアプリを用意し、それを経由してラズパイのユーザーディレクトリにFDX68のバイナリ版をインストールする。我が家のFTPクライアントはTransmit。

FDX68のバージョンは2020年11月24日時点で「1.27」。下記の作者GIMONSさんのページからダウンロードしてくる。当初このバージョンは「./fddctl -l」と言うデバイスリスト表示用コマンドが機能しなかった。この事をTwitterでツイートしたところ、すぐさまGIMONSさんが対応してくださり、今は正常動作する差し替え版が設置されている。

→GIMONSさんのFDX68のページ(「ダウンロード」の項)

そうしてダウンロードした「fdx68.tar.gz」をMac上で展開する。Macの場合は、そのファイルをダブルクリックすれば自動的に中身が展開され、「fdx68」と言う名称のフォルダが出来る。

次にFTPクライアントアプリでラズパイに接続する。ラズパイ側については、現時点でのRaspberry Pi OSであれば、SSHをオンにするだけでSCPやSFTPが可能になるので、他に必要な設定はホスト名くらい。「まずは試しに」と言う人はホスト名も初期値「raspberrypi」のままでOK(後々変更はしておいた方が良い)。

Mac用FTPクライアント「Transmit」でのラズパイ接続例 (c)Hosoda Bisoh

FTPクライアントアプリでSFTPでの接続が出来たら、FDX68フォルダをそのままラズパイのユーザーディレクトリに転送する。設置場所はひとまずユーザーディレクトリのトップとした。これでFDX68のソフトウェア側のインストールは終了。

ユーザーディレクトリ直下にfdx68を設置した (c)Hosoda Bisoh

2. 直接ラズパイへインストールする場合

こちらはラズパイ上でアーカイブの圧縮/解凍を行うtarコマンドが使えることが前提。Raspberry Pi OS 3.5.xなら最初から入っているので大丈夫。

ターミナルを起動しログイン。ユーザーディレクトリのトップへ移動し「fdx68」ディレクトリを作成する。

$ cd ~
$ mkdir fdx68

作成したfdx68ディレクトリへ移動。wgetでfdx68のアーカイブ(fdx68.tar.gz)をダウンロードし、tarで展開する。

$ cd fdx68
$ wget http://retropc.net/gimons/fdx68/fdx68.tar.gz
$ tar zxvf fdx68.tar.gz

これでインストールはおしまい。アーカイブは不要ならrmで削除する。

$ rm fdx68.tar.gz

2. FDX68基板のジャンパー設定と接続

これらは必ずラズパイとX68000の電源を切った状態で行うこと。

FDX68をドライブ0、1として認識させたい場合は、下記写真のようにジャンパーを挿す。FDSを通す場合、スイッチで内蔵/外付け優先を切り替えられるため、内蔵FDDをドライブ0、1のまま、FDX68もこの設定にしておいた方が使いやすい。

FDX68をドライブ0、1とする場合のジャンパー設定 (c)Hosoda Bisoh

FDSを使わずに後述するFDX68のエミュレーターモードを使うならば、内蔵FDDのジャンパーの位置を変えてドライブ2、3としておく。ただし、こうするとFDX68を外した時に内蔵FDDから起動出来なくなる。

内蔵FDDをドライブ0、1、FDX68をドライブ2、3と連続して認識させたい場合は、下記写真のようにジャンパーを挿す。

FDX68をドライブ2、3とする場合のジャンパー設定 (c)Hosoda Bisoh

ジャンパーの設定が終わったら、ラズパイとX68000にFDX68を接続する。GPIOにFDX68を差し込み、続いてFDDケーブルをX68000につなぐ。前の記事で組み込んだFDD-DRIVE SWAPPER(FDS)付属のケーブルを使う。

次項からの各コマンドの実行は、fdx68ディレクトリ直下で行う。

FDX68とX68000をFDS付属のFDDケーブルで接続 (c)Hosoda Bisoh

3. エミュレーターモードを試す

まずは無償提供されているHuman 68K ver.3.02や超連射68Kのディスクイメージを用いてエミュレーターモードを実行してみた。LHAアーカイブ(.LZH)の解凍の仕方についてはここでは触れない(他サイトにたくさん書かれてますので…)。

はじめにX68000とラズパイの電源が落ちていることを確認し、FDSのトグルスイッチを下向きにする。これで外付けFDDとしてFDX68が優先されるようになる。

エミュレーターモードでFDX68を動作させる時は、FDSのトグルスイッチを下にする (c)Hosoda Bisoh
FDX68に付いている赤色LEDは、ディスクアクセスランプ (c)Hosoda Bisoh


3-1. ディスクイメージのダウンロード

下記より、FTPあるいは直接、ラズパイのfdx68ディレクトリにHUMAN302.LZH、CH68_101.LZHを設置し、解凍する(fdx68内のサブディレクトリでも可)。

→Human68k version 3.02 のシステムディスクのページ
→超連射68Kのダウンロードページ

展開された超連射68K(CH68_101.2HD)の拡張子は「.2HD」だが、これもFDX68は「.XDF」同様に直接変換してくれるので、拡張子を変更する必要はない。

3-2. ディスクイメージの変換

fdx68ディレクトリ直下で変換コマンド「./fdxconv」を実行する。

■fdxconv コマンド概要
./fdxconv -i SRCFILE [-n DISKNO] -o DESTFILE [OPTION]

SRCFILE is source image file path.
DISKNO is disk number of multi image format, Default is 1.
DESTFILE is destination image file path.

OPTION
-f FORMAT is data format {encode|raw} when DESTFILE is FDX. Default is encode.

■HUMAN302.XDFをFDX形式に変換する場合
$ ./fdxconv -i HUMAN302.XDF -o HUMAN302.FDX

■CH68_101.2HDをFDX形式に変換する場合
$ ./fdxconv -i CH68_101.2HD -o CH68_101.FDX

3-3. エミュレーターモードの実行

「./fddemu」コマンドでディスクイメージを使って起動する。コマンド末尾に「&」をつけるとバックグラウンド実行になる。こうすると、実行中でもディスクの入れ替え等のコマンドが使えるので、そうした方が良い。

■fddemu コマンド概要
./fddemu [-0 FILE] [-1 FILE] [-s OP] [-v] [-o OPTION]

-0 insert disk for 1st drive. FILE is disk image FDX file path.
-1 insert disk for 2nd drive. FILE is disk image FDX file path.
-s select STEP SIGNAL operation. OP is {half|1|2}. Default setting is 1.
-v enable verbose mode.
-h print help message.
-o setup options.

OPTION is [x0|x1|q0|q1|m0|m1|c0|c1].
'x' : enable X68K control.
'q' : enable PC98 control.
'm' : enable Motor signal control.
'c' : enable Raw data correction.
'0' : option off.
'1' : option on.
Default setting is '-o x1 -o q0 -o m1 -o c0'.


■root権限にて、HUMAN302.FDXをドライブ0で起動(超連射68Kもファイル名以外は同様)
$ sudo ./fddemu -0 HUMAN302.FDX &

コマンド実行後、下記のような表示(デバイスリスト)が出たら正常動作。

FDX68 version 1.27(Date, Time)
Powered by XM6 TypeG Technology / Copyright (C) 2017-2020 GIMONS
Floppy disk drive emulation(X68000 Option enabled)

----+----+----+-------------------------------------------------
ID | WP | CL | DISK IMAGE
----+----+----+-------------------------------------------------
0 | -- | 00 | HUMAN302.FDX
1 | -- | 00 | EMPTY
----+----+----+-------------------------------------------------

バックグラウンド動作の場合、「/fddctl -l」もしくは「/fddctl -list」でデバイスリストが確認出来る。

$ ./fddctl -l

■実行結果
----+----+----+-------------------------------------------------
ID | WP | CL | DISK IMAGE
----+----+----+-------------------------------------------------
0 | -- | 00 | HUMAN302.FDX
1 | -- | 00 | EMPTY
----+----+----+-------------------------------------------------

ここまでやったらX68000を起動する。各種設定や接続が正しければ、Human 68Kや超連射68Kが起動するはず。

FDX68からHuman 68Kが起動 (c)Hosoda Bisoh

超連射68Kもエミュレーターモードで起動 (c)Hosoda Bisoh
とても下手だけど、何度やっても楽しい超連射68K (c)Hosoda Bisoh


4. コントローラーモードを試す

FDのダンプ/リストア/アンフォーマット/情報表示が可能なコントローラーモード。今回は一番よく使うであろう、「./fddump」コマンドによるFDのダンプ(ディスクイメージ化)を行ってみた。

4-1 FDダンプ前の準備

まず事前にX68000とラズパイの電源を落とした状態で、FDSのスイッチを上(内蔵FDD優先)に切り替える。

次にラズパイを起動し、fdx68ディレクトリに移動しておく。

何もFDを入れずにX68000の電源を入れ、画面に「ディスクから起動できません。正しいディスクをセットしてください」と出たら、X68000の「INTERRUPT」スイッチを押す。そうすると「エラーが発生しました。リセットしてください」とメッセージが出る。この状態になったらスタンバイ完了。ダンプしたいFDをドライブ0か1に挿入する。

コントローラーモードでFDX68を使う場合、FDSをトグルスイッチを上にして、内蔵FDDを優先させる (c)Hosoda Bisoh
INTERRUPTスイッチを押して、この画面になったらスタンバイ完了 (c)Hosoda Bisoh

4-2 FDダンプの実行(FDXディスクイメージ化)

FDのシリンダー数が不明な場合、fdinfoコマンドでディスク情報を調べても良いが、注意書きとして「物理ドライブの回転数や最大シリンダを計測するコマンド。オーバートラック領域にヘッドをシークさせるので最悪の場合ドライブが壊れますので自己責任でお願いします。」とある。むやみにfdinfoを実行しない方が良さそう。X68000における2HDのシリンダー数は80のようなので、「-c 80」でfddmupすれば大丈夫そう。

両コマンドにはroot権限が必要なので、sudoで実行する。下記例は「出たな!!ツインビー」のBディスク。

■fdinfo コマンド概要
./fdinfo -i ID [OPTION]...
ID is unit number {0|1}.


■コマンド例(ドライブ0のFD情報を見る)
$ sudo ./fdinfo -i 0

■実行結果
FDX68 version 1.27(Date, Time)
Powered by XM6 TypeG Technology / Copyright (C) 2017-2020 GIMONS
Floppy disk information utility

Drive : 0
Index period : 166156 us
Write protect : Protected
Drive RPM : 360(361.106445)
Step to cylinder 0 : Success
Num of cylinder : 83(0..82)

Done

上記に基づき、今回はfddumpコマンド実行時のシリンダー数を80でなく83に設定した。ファイル名は任意、拡張子はFDX。リトライ回数を10にして実行。

■fddump コマンド概要
./fddump -i ID [OPTION]... FILE

ID is unit number {0|1}.
FILE is FDX or FDR image file path.

OPTION
-c CYLINDERS is number of cylinders. Default is . Default is 40.
-h HEADS is number of heads. Default is Default is 2.
-d DENSITY is FDD density {double|high}. Default is double.
-b BEGIN is begin cylinder. Default is 0.
-e END is end cylinder. Default is CYLINDERS - 1.
-s STEPS is seek step count {1|2}. Default is 1.
-f FORMAT is data format {encode|raw}. Default is encode.
-p2 Assert Pin 2.
-p4 Assert Pin 4.
-p12 Assert Pin 12.
-r RETRY is retry times for invalid track. Default is 3.
-v is verbose mode.

■コマンド例(ドライブ0のFDをダンプする)
$ sudo ./fddump -i 0 -c 83 -d high -r 10 DTWINB_B.FDX

実行中は下記のような表示が出て処理が進む。下記は正常に読み込み可能なディスクイメージが出来た時のもの。

■実行結果
FDX68 version 1.27(Date, Time)
Powered by XM6 TypeG Technology / Copyright (C) 2017-2020 GIMONS
Floppy disk dump utility

Drive : 0
File : DTWINB_B.FDX
Index period : 166144 us
Write protect : Protected
Step to cylinder 0 : Success
Drive RPM : 360(361.132507)
Cylinders : 83
Cylinder range : 0 ... 82
Transfer rate : 1000 kbps
Track capacity : 166144 bits 20768 bytes
Total tracks : 83 cylinders x 2 heads = 166
Data format : Encode(FM/MFM) format
Processing : 90%(T150 C75 H0)
Retry 1/ 10 : 90%(T150 C75 H0) passing
Processing : 93%(T154 C77 H0) Warning : Damaged or unformated(no sector)
Processing : 93%(T155 C77 H1) Warning : Damaged or unformated(no sector)
Processing : 94%(T156 C78 H0) Warning : Damaged or unformated(no sector)
Processing : 95%(T157 C78 H1) Warning : Damaged or unformated(no sector)
Processing : 95%(T158 C79 H0) Warning : Damaged or unformated(no sector)
Processing : 96%(T159 C79 H1) Warning : Damaged or unformated(no sector)
Processing : 96%(T160 C80 H0) Warning : Damaged or unformated(no sector)
Processing : 97%(T161 C80 H1) Warning : Damaged or unformated(no sector)
Processing : 98%(T162 C81 H0) Warning : Damaged or unformated(no sector)
Processing : 98%(T163 C81 H1) Warning : Damaged or unformated(no sector)
Processing : 99%(T164 C82 H0) Warning : Damaged or unformated(no sector)
Processing : 100%(T165 C82 H1) Warning : Damaged or unformated(no sector)

Done

処理中、シリンダー単位で「Warning : Damaged or protected(** sectors)」と言う警告が出ることがある。この「**」の部分が1以上のシリンダーが大半となると、まともなディスクイメージにはならない。当然使用も出来ない。上記だと93%以降は未使用セクターのためか、警告が出ても問題はなかった。また、リトライ中「passing」と出れば、そのシリンダーは上手くダンプ出来ている。

では、FDを正常にダンプ出来なかった場合どうすれば良いか。後日ツイッターでフォロワーさんに「リトライ回数を三桁まで増やしてみては」と教えていただいた。確かにリトライを100に設定してみたら、リトライ中に成功する事が増え、何枚かはそれで無事使えるディスクイメージとなった。

FDダンプ中の様子。X68000のドライブ0とFDX68のアクセスランプが赤く光っているのがわかる (c)Hosoda Bisoh

FDX68でディスクイメージ化した「出たな!!ツインビー」をエミュレーターモードで起動成功 (c)Hosoda Bisoh

今回の試行でわかった注意点

エミュレーションやダンプの失敗の主要因は、FDの盤面劣化、FDDの不調、ラズパイの電力不足や接触不良、fddumpコマンドの設定間違いなどがある。

前述の「出たな!!ツインビー」のFDは、最初使っていたドライブではリトライをいくらしても全くダンプ出来なかったのだけど、試しにドライブを変えて再実行したらアッサリと正常なディスクイメージが作成出来た。FDダンプが上手くいかない場合は、大量のリトライを繰り返す前に、もう片方のドライブでも試してみることをお勧めする。

また、特にラズパイ3B+は電力が不足しやすいので注意が必要。たとえば、5V3A供給可能なモバイルバッテリーを用いた際、4Bは安定していたが、3B+ではエミュレーターモードでCRCエラー等が時折発生した。3B+使用時は適格なACアダプターを使った上で、補助電源を用いるのも手。

FDX68を接続したラズパイ3B+ (c)Hosoda Bisoh
ラズパイ3B+だと電源により不安定になりがちで、途中でFDX68の接続が切れてエラーが出たりすることも (c)Hosoda Bisoh


コネクタ等の接触不良については言わずもがな……なのだけど、コネクタ間のわずかな隙間などは見逃しやすいので、もし他の要因を潰しても動作しない場合は、疑ってみる必要がある。

実際自分の場合、ラズパイにFDX68シールドをスペーサーを挟んで固定したら、コネクタ間にわずかな浮きが出来て接触不良を起こし、ラズパイに認識されていなかった。これに気付き、スペーサーを外してコネクタを隙間なくピッタリはめ込んだらFDX68が認識された。この隙間、0.5mmもない程で、当初原因とは思わず結構悩んだ。

ラズパイ4BとFDX68が接触不良気味だったため、GPIO側のスペーサーだけ外し、GPIOコネクタ同士をピッタリと接触させた (c)Hosoda Bisoh

あとは、シリンダー数の設定を間違えているとデータに欠損が生じるため、当然正しいディスクイメージにはならない。FDの種類により、シリンダー数を正しく設定しよう。

FDSとFDX68は「ないと困る」ハードウェア

自分のように、発売から数十年経ったX68000を今から使おうと言う人は、本体やFDの劣化に苛まれるのは間違いない。しかし何より大事なのは、中に入っているデータ。そのデータ保全のため、この両製品は必ず手に入れておくべき物である。

ただしこれらは同人ハードのため、大量流通していない。持っていない人は、作者のミカエルさんとGIMONSさんのツイッターやBOOTHをフォローして、在庫の通知があったら、すぐに1台ずつ購入すると良いだろう。そしてとても大切な事だが、在庫がないからと言って、急かしたり文句を言ったりしてはいけないし、大量購入も避けるべきだ。購入時は、作者の方への感謝とともに「自分以外の同志にも残しておく」譲り合いの気持ちも常に持っていたい。