CF to SASI/SCSI変換ボード『変換番長』とX68000で遊ぶ(2) 実機へHDDイメージを書き戻す
前回は、クラシックPC救済委員会さんの変換番長をX68000実機にセットしてCFをHDD代わりにOS等をインストールし、そのCFをMacにつなぎ、HDDイメージを吸い出してX68kエミュに読み込ませるところまで完了しました。
今回は、PC上のX68kエミュレータで作成した複数のHDDイメージ(.hdfファイル)をCFに書き戻して、X68000実機から起動するところまでを行いたいと思います。

前提として、私は以下の環境にて変換番長を使用しています。各HDDは40MBを確保します。HDD数は最大の16個にします。
■機種名: X68000 EXPERT
■インターフェイス:SASI
■ディップスイッチの設定:11001011 11111111
複数のHDDイメージをCFに書き戻すためには、まずCFにどんな風にHDDデータが保存されるかを解析する必要があります。このため、X68000実機にて複数のHDDの設定、フォーマットを行い、そのCFをMacにつなげて中身をダンプします。
すると、以下のような状態でHDDイメージが書き込まれていることが分かりました。
今回は、PC上のX68kエミュレータで作成した複数のHDDイメージ(.hdfファイル)をCFに書き戻して、X68000実機から起動するところまでを行いたいと思います。

前提として、私は以下の環境にて変換番長を使用しています。各HDDは40MBを確保します。HDD数は最大の16個にします。
■機種名: X68000 EXPERT
■インターフェイス:SASI
■ディップスイッチの設定:11001011 11111111
複数のHDDイメージをCFに書き戻すためには、まずCFにどんな風にHDDデータが保存されるかを解析する必要があります。このため、X68000実機にて複数のHDDの設定、フォーマットを行い、そのCFをMacにつなげて中身をダンプします。
すると、以下のような状態でHDDイメージが書き込まれていることが分かりました。
00000000 60 00 00 ca 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
00000010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000040 1a 1b 5b 36 3b 33 32 48 58 36 38 30 30 30 20 48 |..[6;32HX68000 H|
00000050 41 52 44 20 44 49 53 4b 20 49 50 4c 20 4d 45 4e |ARD DISK IPL MEN|
00000060 55 1b 5b 32 35 3b 32 32 48 83 4a 81 5b 83 5c 83 |U.[25;22H.J.[.\.|
(略)
05280000 60 00 00 ca 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
05280010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
05280040 1a 1b 5b 36 3b 33 32 48 58 36 38 30 30 30 20 48 |..[6;32HX68000 H|
05280050 41 52 44 20 44 49 53 4b 20 49 50 4c 20 4d 45 4e |ARD DISK IPL MEN|
05280060 55 1b 5b 32 35 3b 32 32 48 83 4a 81 5b 83 5c 83 |U.[25;22H.J.[.\.|
(略)
0a500000 60 00 00 ca 00 00 00 00 00 00 00 00 00 00 00 00 |`...............|
0a500010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0a500040 1a 1b 5b 36 3b 33 32 48 58 36 38 30 30 30 20 48 |..[6;32HX68000 H|
0a500050 41 52 44 20 44 49 53 4b 20 49 50 4c 20 4d 45 4e |ARD DISK IPL MEN|
0a500060 55 1b 5b 32 35 3b 32 32 48 83 4a 81 5b 83 5c 83 |U.[25;22H.J.[.\.|
(以下略)
上記解析により、各領域0x5280000=86507520バイトずつに区切られ、そこに各HDDデータが格納されていることが分かります。
ただし、今回変換番長の容量制限機能により、各区切りの容量を40MBに制限するように設定しているので、82.5MBに区切られているのは少々無駄であり、実装として正しいのか不明なため、クラッシックPC委員会様に報告しています。
今後、変換番長のバージョンアップにより、この区切りサイズは変更される可能性があります。
ここまでの解析で必要な情報は揃いましたので、複数のHDDイメージファイルをCFに書き戻し、実機にて起動するところまでを実際に行ってみましょう。
まずは、XM6 TypeGで40MBのSASI ハードディスクイメージを作成し、エミュレータ上でHuman68kやその他各自が必要なものをインストールしましょう。私はCコンパイラやエディタなどをインストールしたイメージを作成しました。今回はせっかくなので、あと15個40MBのHDDイメージを作成しましたが、もちろんそれより少なくとも構いません。検証のため全てのHDDにディレクトリを掘ったり適当にデータを詰め込んでみました。
以下は、Macで作業を行いましたが、Linux等でも同じ様に実行できると思います。ただしCFが/dev/のどこにぶら下がるかはOSや環境に依存しますので各自調べてください。書き込むデバイスを間違えると悲惨なことになります。
また、ddコマンド等、MacとLinuxというかBSD系とGNU系のコマンド間で、多少引数などに違いがある場合もありますので、あわせてご注意ください。
行っているのはデータを結合して、CFに書き込むだけなので、理屈が分かればWindows等でも同じことが実行できると思います。
まずは、実機に書き戻したい16個のHDDイメージ(.hdfファイル)を用意します。ファイル名はなんでもよいです。以下のリストでbancho*.datは解析用にCFから読み出したデータなので気にしないでください。
$ ls
40MB.HDF 40MB13.HDF 40MB2.HDF 40MB6.HDF bancho120.dat
40MB10.HDF 40MB14.HDF 40MB3.HDF 40MB7.HDF bancho80.dat
40MB11.HDF 40MB15.HDF 40MB4.HDF 40MB8.HDF
40MB12.HDF 40MB16.HDF 40MB5.HDF 40MB9.HDF
$
次に、各イメージファイル間の隙間を埋めるダミーデータを作成します。CF上の各HDD用の領域は先の解析により86507520バイト毎に区切られていることが分かっています。またXM6で作成した40MBのHDDイメージファイルは41496576バイトなので、45010944バイトのダミーデータを作成します。
$ ls -l 40MB.HDF
-rwxr--r-- 1 hissorii staff 41496576 Sep 25 17:21 40MB.HDF
$ echo "86507520-41496576" | bc
45010944
$ dd if=/dev/zero of=zero.dat bs=45010944 count=1
1+0 records in
1+0 records out
45010944 bytes transferred in 0.128673 secs (349809211 bytes/sec)
$
そして、ダミーデータをはさみながら全てのデータを一つにつなげます。1384120320バイトのデータが出来上がれば完了です。40MBx16なので本来は640MB程しかCF領域を必要としないはずですが、先に述べたように変換番長が領域を多めにとってしまうため仕方がありません。
$ cat 40MB.HDF zero.dat 40MB2.HDF zero.dat 40MB3.HDF zero.dat 40MB4.HDF zero.dat 40MB5.HDF zero.dat 40MB6.HDF zero.dat 40MB7.HDF zero.dat 40MB8.HDF zero.dat 40MB9.HDF zero.dat 40MB10.HDF zero.dat 40MB11.HDF zero.dat 40MB12.HDF zero.dat 40MB13.HDF zero.dat 40MB14.HDF zero.dat 40MB15.HDF zero.dat 40MB16.HDF zero.dat > toCF.dat
$ ls -l toCF.dat
-rw-r--r-- 1 hissorii staff 1384120320 Sep 26 16:57 toCF.dat
$ echo "86507520*16" | bc
1384120320
$
データが用意できたら、カードリーダにつなげたCFにデータを書き込みます。
Macに変換番長で使用したCFを繋ぐと、「セットしたディスクは、このコンピュータで読み取れないディスクでした」といわれるので、「無視」を選択してください。FAT等でフォーマット済みのCFを繋ぐとMacにマウントされてしまいますので、その場合はマウントを解除してください。
それでは書き込みを行います。およそ100分かかりました。うちの環境では、読み込みは10MB/sくらい出るのに、書き込みは0.2MB/s位で遅いです。
$ sudo dd if=toCF.dat of=/dev/rdisk1
2703360+0 records in
2703360+0 records out
1384120320 bytes transferred in 5904.777612 secs (234407 bytes/sec)
$
書き込みが終わったらMacに繋げたメモリカードリーダからCFを抜き、X68000に接続してある変換番長に差しなおします。そしてX68000実機を起動すれば、HDD16台が接続された状態で立ち上がります。switch.xのHD_MAXはあらかじめ適宜値を変更しておいてください。
冒頭の写真はフロッピーのHuman68k/ヴィジュアルシェルで起動したところ。HDDがCドライブからRドライブまで接続された状態になっています。
もちろんフロッピーを抜けばHDDからもきちんと起動します。
というわけで、変換番長を使って、我が家のX68000 EXPERTは40MBのHDDが16台接続された状態での運用が可能となり、さらにCFを経由してPC上のX68kエミュレータとX68k実機の間でデータのやり取りもできるようになりました。
ただ、X68kのふたを開けてCFを取り出さなければならないので確かに面倒ではあります。頻繁にデータをやり取りする場合はネットワークやMOを用いた方が簡単ではあります。
うーむ、X68000用SCSIカードとMOドライブを調達するかなぁ...
Comment
[338] SCSIのMOならコレをどうぞー。
コメントの投稿
Trackback
http://hissorii.blog45.fc2.com/tb.php/256-f380db1b
http://www.iodata.jp/products/mo/dtst/index.htm
PCMCIAカードスロット付きSCSIMOドライブ。
手に入ればですけど。