さて、最近Youtubeのだら見で昔のGBAなどのプレイ動画を見ていたら、久しぶりに自分でもやってみたくなりました。しかし、ソフトもゲーム機もあるものの、初代のGBAなどはなかなか今使うにはしんどいものです。今じゃ信じられないような画面の暗さです。ソフトのセーブ用の電池が切れている可能性もあります。
ここでは、15年前の自作ケーブルを引っ張り出し、GBAへの接続を試みました。結局仮想環境の32Bit Windows XPを用いる必要がありました。XP実機があればそれでもOkだと思います。
(2021/12/26追記)
なんと上記ドライバの作者の方が当記事を見て修正くださったようです。大変ありがとうございます。
まだ私の方では再確認できていませんが、Win10 or 11で吸出しできるかもしれません。
USB Linker Advance(ULA)
さて、だいぶ前にいっときゲームの吸い出しにハマっていた時期がありました。そのときに作成したのが、TeamKNOxという有志団体が仕様とソフトなどを公開してくれていたULA(USB Linker Advance)というものです。
これはCypress社がかつて販売していたEzUSB(AN2303SC)という、USBデバイスを簡易に作れるキットをもとにしています。更に、この開発キットを買わなくても、当時いろいろと売られていたガラケーをPCにUSB接続する変換ケーブルが同じICを多用していたため、これを流用すれば安く作れてしまうということでちょっとした流行りになっていたように思います。
私がこれを作ったのは、過去の写真などを調べたら2006年(15年前)でした。懐かしすぎる!もっと最近かと思っていましたが、高校生の頃です。同時期にパラレルポートを利用したスーファミ吸い出し機のホンコンなども作りましたが、こちらはUSBだったこともあり安定して吸い出しが出来ていたように思います。
また、単なる吸い出し機だけではなく、GBAに自作のプログラムを転送して実行させることもできるため、ARMのクロス開発の勉強もできるかもしれません。
しかし、時代ですね。2000年代前半は、NT系Windowsが台頭してきてレガシIO(シリアル・パラレルなど)へ直接アクセスができなくなったり、物理的にポートが廃止されるなどしてきたにも関わらず、ArduinoやRaspberry Piはまだ登場しておらず、一時的にIOを自由に扱いづらい時期にあったのだと思います。そのため、このような変則的な手段を取らざるを得なかったのだと思います。
今なら、同様のやりたいことはArduinoかRaspberry Pi、Jetsonなどを使って(ハード周りは)簡単に実現できそうですね。
15年前に製作したもの
近所のハードオフか秋葉原で500円で買ったみたいです。当時使っていたノートPCが懐かしすぎる。。
さて、実家から探しだしたはよいものの?
さて、実家にあったULAを持ち出してきたは良いものの、ケーブルだまりの中にずっと放置されていたためあまり保存状態はよくありません。また、EzUSBのドライバは最新のx64 Windows10では動作しなくなっています。
Windows 10対応のドライバとソフトはないか?
探していたら、有志の方でやってくださっている方がいらっしゃいました。
Githubでコードを公開してくださっていました。こちらは、かつてEzUSBドライバを使用して動作時のファームウェアを転送していたところを、libusbに置き換えて同様のことを実現するようにしているとのことです。
https://github.com/RGBA-CRT/ULAHostV2_with_ula_driver
EzUSBには、動作時にULA用のファームウェアを毎回転送する必要があります。転送すると、USBのPID・VIDが変わり汎用のEzUSBチップからULAとしての動作ができるようになります。初回の転送動作を行うためには、WinUSBという汎用のUSBドライバを手動割当する必要があるようです。この作業には以下のツールを用います。(開発元はかのRufusと同じところっぽいですね。)
- Zadigを使用してEzUSBにWinUSBドライバを割り当て
- ULAHostV2_with_ula_driverを使用して、ULAファームウェアを転送
- ULAに再びZadigでWinUSBドライバを割り当て
- ULAHostV2を起動
という流れになるようです。
しかし、私の環境ではこの方法ではどうしても動作させることが出来ませんでした。ULAHostV2を起動してもGBAとの通信が始まらずエラーになってしまいました。
(2021/12/26追記)
なんと上記ドライバの作者の方が当記事を見て修正くださったようです。
まだ私の方では再確認できていませんが、Win10 or 11で吸出しできるかもしれません。
あきらめて仮想XPへ。。
結局、諦めて当時の環境を用意することにしました。VirtualBoxで32bit Windows XPの環境を用意しました。
その中で、以下mootan様が公開してくださっているFlash Managerというソフトを利用します。こちらのソフトは、ULAファームの転送などもすべて自動でやってくれるみたいです。
当時の環境なので、EzUSBドライバが使えます。以下のサイトに挙げられているものを使用しました。
http://mootan.hg.to/ula/#software
注意点として、infファイルの[Cypress]セクションと[String]セクションに手持ちのケーブルのVID/PIDを追記する必要があります。これはガラケー転送ケーブルなどはそれぞれのメーカーのVID/PIDが設定されているためです。
配線修理へ
うーん、やっぱりWin10でもXPでも吸い出しが始まりません。どうしたものか。。
やはり長年のうちに配線が切れてしまったのかもしれません。諦めて導通チェックに入ります。
ピン配置資料は以下にありました。
ケーブル側とは以下のように繋がっていることを確認していきます。
すると、、どうも線一本が切れているようでした。ここを再度はんだ付けし、はんだ付け部分に負荷がかからないようにテープで養生してやり、一通り完成しました。
しかし?
配線修理の後、仮想のXPでは吸い出しに成功しました。しかし、結局Windows10での方法では成功しませんでした。このあたりはもう少し調べていく必要がありそうです。
互換性が売りのWindowsですが、32bitドライバや署名なしドライバが最近のWindows10の64bit版でどうしても動かないのはいただけないですね。
今後は、吸い出しだけではなくARMクロス開発にも使ってみたいと思います。
質問です。自分もVirtualBoxの仮想XP 32bit でFlash2Advance USBを使って吸い出そうとしています。しかしmootanのページにあるEzUSBドライバがうまくインストールできません。知恵袋でFlash2Advance はEZ-USB用のドライバだというのを見かけたので大丈夫だと思っているのですが。よければドライバのインストール方法を教えてください。