3DS homebrew “Hello,world!”

とりあえず『マジコンを使わずに3DSで自作ソフトを走らせる』までをメモ。
当記事は173210氏の記事「開発環境構築と3DS Homebrew開発」を参照しました。

あと一言加えておくと…
現在の国内法では「3DSのROMダンプ」も「ROMの違法ダウンロード」もアウト。
つまりバックアップに関するハックは一切扱うことが出来ません。
(3DSハックは唯一、自作プログラムを走らせることだけがどうにか合法です)。
当記事は『3DSで自作ソフトを走らせたい人のため』の内容ですのでご了承下さい。

・必要機材(あれば便利なものも含む)

ファームウェアバージョン4.1.0-4.5.0の3DS本体
– 言わずともがな。ヤフオクや親しいゲームショップで手に入れましょう。

Amazon : CYBER コードフリーク type III (DS用) ¥7,700
– ROPLoader実行用に。コレとDS用ソフト(Newスーパーマリオブラザーズなど)も必要。

Amazon : PQI Air Card Wi-Fi内蔵SDカードアダプタ (アダプタのみモデル)¥3,400
– コレと適当なmicroSDカードが1枚必要。SDカードでも代用できるけど圧倒的に楽。

・ROPLoader書き込みまでの流れ

1.”3DS Toolkit”でググってダウンロードし、同梱の ROPLoader.nds を
適当なmicroSDカードに書き込む。

2.コードフリークtypeIIIにmicroSDカードと適当なDS用ソフトを挿入して3DSで起動し、
option → nds launcher → ZZZZZZZZZZZZZZ…(ROPLoader)をブート。

3.”ROP Loader 3DS INSTALLER”が起動したらAボタンで3DS本体にインストール。
これでDS profile exploitが実行可能な状態になります。

・PQI AirCardの自動リンク環境を構築する

本来はカメラに挿入したAirCardを専用ツールからWi-Fiアクセスして写真を~…
という使い方をするAirCardですが、あらかじめ自宅のWi-Fiルータなどに
接続設定を済ませておき、SDカードのルートに “autorun.sh” という
自動実行シェルスクリプトファイルを作成。
改行コードLF固定で下記の青文字の内容を入力して保存しましょう。
※自宅ネットワークが192.168.0.0/24の場合。環境ごとに読み替えてね。
#!/bin/sh
sleep 5
/usr/bin/w2
sleep 5
ifconfig mlan0 192.168.0.100

このautorun.shの入ったAirCardを3DSに挿して、PCからWinキー+Rで下記コマンドを実行。
ping 192.168.0.100 -t

1~2分放置してタイムアウトから「応答」に変わればPCからアクセスが可能です。
ちなみにPINGを止めると勝手に切れたりするのでこのPINGは作業中ずっと放置です。

試しにエクスプローラなどから ftp://192.168.0.100/ と打つと…
aircard
こんな感じにカードにファイルアクセスが可能です。
いちいちカードスロットを触らなくて良いのでラクチンです。

・”launcher.dat”を実行する
先ほどの3DS Toolkitはユーザメモリをダンプするサンプルプログラムなのですが、
RAMDumpingフォルダの “Launcher.dat” をSDカード(AirCard)のルートにコピーして、
3DSの「本体設定」→「その他の設定」→「ユーザー情報」→「DSソフト用設定」を開いた瞬間、
しばらくフリーズした後にエラーが発生してHOME画面に戻ります。
(ここでSDカードへの通電が切れるようで、AirCardの再起動にしばらく時間がかかります)。

この裏ではユーザメモリをダンプしたものがSDカードに”DUMP.BIN”として保存されており、
AirCardの再起動後にファイルを取り出すことができます。

・devkitProとPythonのインストール

3DS homebrew開発にはdevkitProとPythonを用います。
1.devkitProUpdater-1.5.3.exeをc:\devkitproにインストール。
2.Python 2.7.6をC:\Python27にインストール。
これらにパスを通すように環境変数を修正しても良いのですが、
とりあえず後述のハローワールドビルド時にバッチファイルに組み込みます。

・ハローワールドをビルドする

173210氏作のハローワールドを検証ビルドしてみます。
githubの「Download ZIP」でソースコードを丸ごとダウンロードし、適当なフォルダに展開。
同フォルダに “build.bat” など適当なバッチファイルを作成し、下記青文字内容を入力。
set path=%PATH%;C:\devkitPro\devkitARM\bin;C:\Python27
make
pause

これを実行し、特にエラーメッセージを表示することなく
「python ./tools/append.py S0.DAT kfs.bin Launcher.dat」
とログが出力されれば成功。

これで生成された launcher.dat をAirCardのルートにコピーして実行し、
ハローワールドが実行されれば成功です。

・さいごに

今回紹介した内容は「入り口に立つまで」です。
ゼロから新規に組むには数万円の投資が必要になるものの
『マジコンを一切使うことなく3DSで自作プログラムが実行可能になる』
というのは驚異的です。

DSは違法コピーが蔓延し、結果的にhomebrewすら衰退してしまったことを考えると、
『違法コピーが話題にすらならない3DS homebrew環境が出来た』
というのは大変嬉しいことです。

それでは、一足先に「3DSハック」の海へ行ってきます。

ROM Extract Wikiを作りました

ROM Extract Wiki (https://i486.mods.jp/wiki/)
今まで当サイトで「ティンクルスタースプライツ」「わくわく7」「ミズバク大冒険」
「レインボーアイランド」など、エミュレータベースの公式プログラムから
ROMを抽出する技法をいくつか公開してきましたが、だんだん過去ログに流れて
ワケ分からなくなってきたので、自分の整頓用も兼ねてWikiを作りました。

編集権限も解放していますので「ROM抽出」に限定して自由にご利用下さい。
※ちゃんと注意書きも読んでね!

レインボーアイランドのオリジナルBGMを再び

「オリジナルBGM???」と意味を理解出来ない人も多いと思いますが、
レインボーアイランドのステージ1などに採用されている曲は、
『オズの魔法使い』の『Over the rainbow』のパクr…アレンジです。

レインボーアイランドが発売された当時は著作権云々がユルかったものの、
今の厳しい権利関係を考えると当然使えるわけもなく…。
海外版やあらゆる移植シリーズの大半はBGMが差し替えられており、
特にWii版やDS版に至っては「黒歴史」扱いという始末。

ROMがそのまま収録されている~と紹介したPC版TAITO LEGENDS 2
の前作(1)にはその完全版が収録されているらしいので
簡単にromsフォルダからROMイメージをゲットできそうですが、
「ほとんど流通していない or 売っていてもかなり高額」
という難点もあり、コレを使うのは非現実的。
レインボーアイランドの基板に至ってはプレミアが付くレベルの超高額商品。

…個人的にも諦めてましたが、それを打破出来るステキなモノがありました。
Amazon : Bubble Bobble & Rainbow Island (輸入版)
TAITO LEGENDSと開発元が同じようなのでその抜粋版のようですが、
2014年5月10日現在、中古価格が¥999+送料¥350の店もあって、
なかなかお買い得。 ※時期によってはメディアカイト版のほうが安い場合もあります。

—追記
単独パッケージで販売されているメディアカイト版レインボーアイランドにも同ファイルがあり、
先頭ヘッダの”PK”が”KP”に反転されているだけでした。
バイナリエディタで開いてそこを修正すれば下記手順でのROM抽出が可能です。
—追記ここまで

コレをインストールしたフォルダを見ると…

ココにある Rainbow.dat がROMイメージを固めたZIPファイルです。

ただし、拡張子をzipにしても部分部分に不整合データがあり展開できません。
(どちらかというと独自実装でzipヘッダ処理にバグがあるような…)。
コレについては拡張子をzipにしたうえで下記ソフトに通してリペアするとOKです。
Easy and free fix for damaged zip files

※よくよく見るとXPLOSIV版もメディアカイト版も”Rainbow.dat”の終端に
“PK”とあるべき箇所が”KP”になっていました。
どうやらココを書き換えるだけでも展開できるようになるようです。

つまりXPLOSIV版は終端の”KP”を”PK”にフッタ修正。
メディアカイト版は先頭と終端の”KP”を”PK”にヘッダ・フッタともに修正。
でOK、ということです。

リペアしたzipファイルを展開すると…
rainbow_zip
ファイル”01″~”14″を抽出できます。

RomCenterに最新版MAMEを読み込ませてROMリストを作った後、
ロムパスに rbisland フォルダを作ってそこに “01”~”14″全てを放り込むと…
romcenter
何だかダメそうな雰囲気がしますが、これを全選択→右クリック→ゲームの修正、でOK。

これでROM不足版”rbisland” (新ROM)と、”rbislando.zip”(oldverROM)が生成されます。
rbislandフォルダの中身にリネーム済みファイルがあるので全て”rbisland.zip”に圧縮し、
既に作られているoldverの “rbislando.zip “と一緒にMAMEフォルダに放り込めば…

rainbow
もちろんBGMもオリジナル版! ステキ(・∀・)

Anker 40W 5ポート USB急速充電器が凄い

Amazon : Anker 40W 5ポート USB急速充電器 ACアダプタ¥2,599
前から気になっていたものの我慢できずについにポチ。

とりあえずmicroUSB充電ケーブルはダイソーやセリアで100円なので
それらを使って充電中。コンセントから何本も充電器が生えてたのが
一本に集中出来たのでホクホク。

さすがベストセラー1位。

エンジニア ミクロカッター NZ-12

Amazon : エンジニア ミクロカッター NZ-12 ¥1,954
元はNEOGEO-X用ゲームカード自作のためのmicroSDカードの
ライン切断用に買ったブツですが、樹脂を切ろうとして先っぽを
ブチ割ってしまったので、改めて再購入。

我慢して普通のマイクロニッパーやハサミとカッターナイフで頑張ってましたが、
やっぱコレが無いと話にならん…(‘A`)
基板いじる人は絶対一本もっといたほうがいいアルよ