ZuluSCSI RP2040 Compact Homebrewの紹介

ZuluSCSI RP2040 Compact Homebrewは、microSD (別名TF)に保存したイメージファイルを使って、SCSI接続のHDD, CD-ROM, FDD, テープをエミュレーションできる基板。 イメージファイルというところがミソで、microSD は普通のFAT32 ファイルシステムで初期化しておき、そこに単純に設定とディスクイメージをファイルとして配置するだけなので、microSD を純粋にブロックデバイスとして扱う変換アダプタと比較して扱いが楽だ。 ZuluSCSI はRabbit Hole Computingが販売していて、使っているチップや基板の機能・大きさの違いでいくつかのバージョンがある。 このページで紹介するのは、RP2040 を使っていて、SDではなくmicroSDを直接使える小型の基板で、自分でスルーホール部品を実装するHomebrew用の基板だ。

買い方

私が購入した時点では国内代理店などはないので、基本的に個人輸入することになる。 Rabbit Hole Computingのサイトから直接購入して、本体と専用マウンタ$46, 送料$39 となった。 一気に何台か買っても良かったのだが、この手のハードウェアは最初は一台買ってじっくり評価してからたくさん買ったほうが安心感はある。

自分で組み立てるHomebrew が一番安かった。

買うと届くもの

購入後1.5週間くらいで比較的すぐ届いた。 ウェブサイトの写真では基板は赤いが、実際届いたのは緑色基板だった。 Rev 2023b と書いてある。 自分で組み立てるものと最初から組み上がった状態で届くものとで基板の電解コンデンサ周りのアートワークが一部違うようで、基板にもHomebrewと書いてある。 HDDアクセス音を出せるというピエゾブザーは入っていないので、必要な場合は各家庭にある動かないマザーボードなどから剥がすとよいだろう。 そのほか、CD-ROMのエジェクトボタンも取り付けに別途パーツと手間が必要。

ZuluSCSI RP2040 Compact Homebrew
ZuluSCSI RP2040 Compact Homebrewを買うと届くキット

メインのコントローラは商品の名前通りRP2040 だ。 RP2040はRaspberry Pi の開発元が設計したマイクロコントローラで、中身としてはRaspberry Piシリーズのシングルボードコンピュータとは直接の関係はない。 2×Cortex-M0+ 133 MHz 搭載で、イマドキのマイコンという感じの高性能なチップなので、下手したらこのボードを接続したいホストのコンピュータよりCPUの処理性能が高いことさえありそう。

キットとして組み立てなければいけないのは、電解コンデンサ2点とコネクタ類5点だ。 ちょっと探した感じだと組み立ての説明書はないので、雰囲気で組み立てればよい。 違う位置には嵌まらないので迷う人はいないと思うが、C217が680 μF 10 Vで、C206が220 μF 16 Vで実装したら動いた。 ジャンパー位置は裏側のシルクを見てブザー切り替え、Initiatorモードの切り替え、ターミネータ有効化の3箇所に実装するとよい。

ZuluSCSI RP2040 Compact Homebrew基板裏側
基板裏側をみるとジャンパーの位置がわかりやすい感じでシルクされている。表面にもよく見ると同じ内容はシルクされている。

実際使う

microSDの準備

使う前に、公式マニュアルに沿ってmicroSD にイメージを配置する必要がある。 Linuxだとこんな感じでできた。

> sudo fdisk --compatibility=dos /dev/sdd 新しく買ってきたmicroSDならfdiskしなくて良いかも

fdisk (util-linux 2.39.3) へようこそ。
ここで設定した内容は、書き込みコマンドを実行するまでメモリのみに保持されます。
書き込みコマンドを使用する際は、注意して実行してください。

DOS 互換モードは廃止予定です。

コマンド (m でヘルプ): p

ディスク /dev/sdd: 3.64 GiB, 3904897024 バイト, 7626752 セクタ
ディスク型式: SD/MMC
ジオメトリ: 64 ヘッド、32 セクタ/トラック、3724 シリンダ
単位: セクタ (1 * 512 = 512 バイト)
セクタサイズ (論理 / 物理): 512 バイト / 512 バイト
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
ディスクラベルのタイプ: dos
ディスク識別子: 0x755d4ac0

デバイス   起動 開始位置 終了位置  セクタ サイズ Id タイプ
/dev/sdd1           8192   532479  524288   256M  c W95 FAT32 (LBA)
/dev/sdd2         532480  7626751 7094272   3.4G 83 Linux

コマンド (m でヘルプ): d 今あるパーティション全部消す
パーティション番号 (1,2, 既定値 2):

パーティション 2 を削除しました。

コマンド (m でヘルプ): d 今あるパーティション全部消す
パーティション 1 を選択
パーティション 1 を削除しました。

コマンド (m でヘルプ): n パーティション作る
パーティションタイプ
   p   基本パーティション (0 プライマリ, 0 拡張, 4 空き)
   e   拡張領域 (論理パーティションが入ります)
選択 (既定値 p):

既定の回答 p であるものとみなします。
パーティション番号 (1-4, 既定値 1):
最初のセクタ (32-7626751, 既定値 32):
最終セクタ, +/-セクタ番号 または +/-サイズ{K,M,G,T,P} (32-7626751, 既定値 7626751):

新しいパーティション 1 をタイプ Linux、サイズ 3.6 GiB で作成しました。

コマンド (m でヘルプ): t
パーティション 1 を選択
16 進数コード または別名 (L で利用可能なコードを一覧表示します): c 新品SDカードは最初からこの状態のはず
パーティションのタイプを 'Linux' から 'W95 FAT32 (LBA)' に変更しました。

コマンド (m でヘルプ): w
パーティション情報が変更されました。
ioctl() を呼び出してパーティション情報を再読み込みします。
ディスクを同期しています。

> sudo mkfs.vfat -F 32 /dev/sdd1 FAT32で初期化する
mkfs.fat 4.2 (2021-01-31)
> sudo mount -t vfat /dev/sdd1 /mnt
> sudo dd if=/dev/zero of=/mnt/HD4.img bs=$((1024*1024*320)) count=1 320 MBytesでSCSI ID=4のHDイメージを作成
1+0 records in
1+0 records out
335544320 bytes (336 MB, 320 MiB) copied, 0.45194 s, 742 MB/s
> sudo umount /mnt

接続しての動作確認

動作確認のために適当なPC にまず繋いでみた。 万一事故があってもPC ならまあ換えは効くかなというのもあり。 ここではCore2 Duo E6700を搭載したIntel D975XBX2 マザーボードにSCSI HBAとしてNCR/Symbios 53C810採用のPCI-SC200を設置したもので動作確認した。

ZuluSCSI はSCSIバスのターミネーション用の電源から駆動できるので、多くの環境で別途の電源接続が必要ないらしい。 実際このテスト環境ではSCSIケーブルのみの接続で動作した。

ZuluSCSI RP2040 Compact Homebrewの実際の動作の様子。
ZuluSCSI RP2040 Compact Homebrewの実際の動作の様子。同時に買っておいたマウンタに入れるとショートする危険性が減るのでおすすめ。

Linuxで無事認識している起動メッセージ:

[    7.274686] sym0: <810a> rev 0x12 at pci 0000:07:00.0 irq 21
[    7.276836] sym0: No NVRAM, ID 7, Fast-10, SE, parity checking
[    7.283126] sym0: SCSI BUS has been reset.
[    7.283143] scsi host12: sym-2.2.3
[   11.521348] scsi 12:0:4:0: Direct-Access     ZULUSCSI HARDDRIVE        2.0  PQ: 0 ANSI: 2
[   11.559111] scsi target12:0:4: Beginning Domain Validation
[   11.561631] scsi target12:0:4: FAST-10 SCSI 10.0 MB/s ST (100 ns, offset 8)
[   11.643283] scsi target12:0:4: Domain Validation skipping write tests
[   11.643287] scsi target12:0:4: Ending Domain Validation
[   11.643596] sd 12:0:4:0: Attached scsi generic sg5 type 0
[   11.644255] sd 12:0:4:0: [sde] 655360 512-byte logical blocks: (336 MB/320 MiB)
[   11.647373] sd 12:0:4:0: [sde] Write Protect is off
[   11.647378] sd 12:0:4:0: [sde] Mode Sense: 6f 00 00 08
[   11.648118] sd 12:0:4:0: [sde] Write cache: disabled, read cache: disabled, doesn't support DPO or FUA
[   12.372845] sd 12:0:4:0: [sde] Attached SCSI disk

この上で適当にパーティションとext2 のファイルシステムを作り簡単にどのくらいの性能が出るのか見てみた:

# dd if=/dev/zero of=test bs=$((1024*1024*200)) oflag=sync count=1
1+0 records in
1+0 records out
209715200 bytes (210 MB, 200 MiB) copied, 181.363 s, 1.2 MB/s

1.2 MBytes/s はこのボードを接続するコンピュータによっては速いとはいえないものの、1990年代中盤くらいまでを想定した環境ならとくに引っかかりなく使えるだけの十分な性能はあるといってよさそう。 今回は余っていた適当なmicroSD を使ってしまったのでここがボトルネックになっている可能性もあり。

いろいろなパソコンでの動作状況

Apple Macintosh IIci

Mac IIci は、すっきりしたデザインからファンに根強い人気を誇るMC68030搭載のMacintosh。 ZuluSCSI では設定プリセットにMac があり、工夫などせずに当然動いた。 電源を別途供給する必要なく、 漢字Talk7, 漢字Talk7.5.5 の起動を確認でき、漢字Talk7 はCD-ROMからのインストールも可能だった。

TattleTechでZuluSCSI状況を確認。
Mac IIci でZuluSCSIにHDDとCD-ROMの設定をしたときのTattleTechでの情報表示の様子。

今後

各種コンピュータでの動作検証を今後実施していこうと思う。