Nintendo Switchエミュレータyuzuに可能性を感じた

エミュレータとは

万物の知識を蓄えているWikipediaにはこうあります。

コンピューターを含む機械装置の動作・機能を模倣する事をエミュレート(動詞)又はエミュレーション(名詞)といい、エミュレート/エミュレーションする装置、あるいはソフトウェアの事をエミュレータ (Emulator)という。

出典: フリー百科事典『ウィキペディア(Wikipedia)』

要約すると、ハードウェアをソフトウェアで模倣することをエミュレートといい、エミュレートするためのソフトウェアをエミュレータといいます。

ゲームのエミュレートしてはGBAのエミュレータであるVBAとかが有名ですよね。

エミュレータの限界

エミュレータは基本的に古いハードウェアのゲームしか完成していません。

本ページでは紹介は控えましたが、他にはGC/WiiのエミュレータであるDolphinやWiiUのエミュレータであるCemuなどがあります。

ソニー系で言えばPS2のエミュレータであるPCSX2やPS3のエミュレータであるRPCS3などがあります。

ところが、PS3やWiiUのエミュレータはかなり高スペックのPCを必要とする上に、完全に動作しないタイトルがいくつもあります。

これは、ゲームやハードが複雑化して解析が困難になっていることと、ハードウェアの高スペック化に伴ってエミュレータを動作させるPCの推奨スペックがどんどん上がってきていることが原因です。

ソフトウェアとハードウェアは普通に実行すればどんなにソフトウェア側を改良してもハードウェア側が倍以上速いのでこれは仕方のないことです。

なので、エミュレータを実行するパソコンにはゲームのハードの倍以上のスペックが要求されます。

つまり、最新のゲームのエミュレータというのは基本的に難しいものなのです。

PS3の場合はCellという特殊なアーキテクチャがよりエミュレータを困難にしているという側面もあります。

Nintendo Switchのエミュレータ

そんな中、疾風の如く登場したのがニンテンドースイッチのエミュレータであるyuzuでした。

Nintendo Switchがまだ発売から二年経っていないことを考えるとここまで動作するエミュレータの開発スピードは異常と言えるでしょう。

何故ここまでエミュレータ開発が進んだのでしょうか?

それは二つの要素があるように思われます。

coldboot exploit

一つ目は最大の功績である、coldboot exploitの発見です。

これはNintendo Switchで採用されているNVIDIA Tegraプロセッサに由来する Fusée Geléeと呼ばれる脆弱性で、それを利用することで任意のコードを実行することができました。

coldboot exploitは以下の特徴を持ちます

  • BootROMの脆弱性に由来する
  • 基盤交換以外での対策は不可能
  • はんだ付け不要

これにより、かなり初期の段階からハッカーはNintendo Switchのシステムを掌握することができました。

WiiUに似たシステム

旧システムを流用すること自体は全く問題ありません。

開発側としても楽でしょうし、新機能の追加などでアップデートしていくのは0から新しく作るよりもよほど簡単です。

ところがWiiUのシステムを継承することは、エミュレータ開発陣からするとNintendo Switchのシステムを理解する手助けとなりました。

yuzuの導入

本格的な記事の内容はここからになります。

公式サイトで導入方法が書いてあるのでそれに従って導入してみました。

まず最初に確認していただきたいのは %YUZU_DIR%というのが、C:\Users\<YourUserName>\AppData\Roaming\yuzuを意味するということです。

いちいちフォルダの場所を書くのもめんどくさいからです。

%YUZU_DIR%

最終的に、ディレクトリ構成はこのようになります。もしも現状、存在しないフォルダがあれば今のうちに作っておいてください。

一度yuzuを起動しないとそもそもRoaming内にyuzuフォルダができないので、一度起動することを忘れないでください。

用意するもの

途中で30GB程度のファイルをコピーする必要が出てくるので、余裕を持って64GBのMicroSDを用意したほうが良いでしょう。

公式サイトで紹介されているbiskeydumpはv6なのでFW6.2.0のニンテンドースイッチで動作しません。

最新版であるv8を使いましょう。

yuzuのインストール

まずはyuzuをインストールしなければ始まりません。

公式サイトからダウンロードできるのでちゃちゃっとしてしまいましょう。

キーテンプレートのダウンロード

Keys templateをダウンロードします。

console.keysというファイルですが、これはのちのち使用します。

キーの抜き出し

まずはNintendo Switch本体からKeyを抜き出します。

以下、結構手順が長いので気をつけてください。

  1. Nintendo Switchの電源を切る(スリープモードではない)。
  2. ダウンロードしたZadigをダブルクリックして起動する
  3. Nintendo SwitchをRCMにする(手順は各自ググってください)。
  4. ZadigにAPXという名前のデバイスがでる(出ない場合はOptionsからList All Devicesにチェックをいれる)
  5. libusbKを選択してInstall Driverを押す
  6. Zadigを終了する
  7. TegraRcmSmash1213.zipとbiskeydumpv7を解凍して、biskeydump.binをRCMSmasher.exeにドラッグアンドドロップする。
  8. Nintendo Switch側に青いQRコードが表示されれば成功。
  9. QRコードを読み込む(ボリュームを下げるボタンでもKeyは保存される)
Zadig

キーの書き込み

先程ダウンロードしたテンプレートファイルにQRコードを読み込んで表示されたキーを入力します。

## console.keys -- Console Specific Nintendo Switch Keys
## yuzu assumes that you also have BOOT0, PRODINFO, BCPKG2, fuses, and needed system saves (43, E1, E2).
## If you don't have all of those components in sysdata, you will need additional keys.
## Refer to the dumping guide for more details -- you might have missed a step!

# Falcon Keys
tsec_key        = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

# BIS Keys
bis_key_0_crypt = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bis_key_0_tweak = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bis_key_1_crypt = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bis_key_1_tweak = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bis_key_2_crypt = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
bis_key_2_tweak = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

全てのキーを入力する必要はなく、7つのキーだけで問題ありません。

書き込んだconsole.keysを%YUZU_DIR%/keysの中に保存します。

keys

システムファイルの抜き出し

こっちはすっごく時間がかかります。

memloaderを利用すれば26GBもあるrawnand.binをコピーすることなくyuzuを動作させられます。

詳細については下記記事をご覧ください。

  1. RCMSmash.exeにhekate_ctcaer_3.2.binをドラッグアンドドロップする。
  2. Nintendo Switch側でhekateが起動する
  3. Console InfoからPrint fuse infoを選択し、電源ボタンを一回押してSDカードにデータを保存する。
  4. 一度メニューに戻る。
  5. ToolsからDump package1/2を選択し、電源ボタンを押す。
  6. ToolsからBackupを選択し、Backup eMMC BOOT0/1を選択する。
  7. Toolsからbackupを選択し、Backup eMMC Raw GPPを選択する(MicroSDの転送速度にもよりますが、およそ40-80分かかります)。
  8. Nintendo Switchの電源を切り、SDカードをPCで読み込む。
  9. yuzu_copy.batをSDカードの直下に配置し、実行する(バッチファイルがエラーを出さないことは、ここまでの手順が正しかったことの二重チェックになります)

このバッチファイルを実行していないのですが、何故かエミュレータは正しく起動しました。

正しく動くは動くのですが、やっておいたほうがいいと思います。

sysdata

こうなっていれば全てのファイルが正しくコピーできています。

rawnand.bin

rawnand.binというファイルは30GBを超える巨大なファイルなのでここから必要なデータを抜き出します。

ダウンロードしたHacDiskMount.exeを右クリックして管理者権限で実行します。

File→Openからrawnand.binを開きます。

HacDiskMount

ひらくと上記のような画面が表示されます。

#PRODINFO

リストからPRODINFOをダブルクリックします。

Dumo to fileからStartを押すとPRODINFO.binというファイルが生成されます。

#BCPGK2-1-Normal-Main

リストからBCPGK2-1-Normal-Mainをダブルクリックします。

同じくStartを押して保存します。

#SYSTEM

SYSTEMは暗号化されているのでそのままではDumpすることができません。

そこで、最初の方にQRコードで表示されたbis_key2_cryptとbis_key2_tweakを使用します。

SYSTEM

Keyを入力し終わってからTestと押すとVerify(キーが正しいかどうかのテスト)を行なってくれます。

成功したら今回はDumpではなく、Mountをクリックします。

その際にDrive letterをYにしておきましょう(Aだとフロッピーディスクドライブの意味になるので)。

少しウィンドウがかたまるかもしれませんが、30秒ほどでちゃんとマウントできるはずです。

リムーバブルドライブYが出現

中にあるContentsとsaveのフォルダを、yuzuのインストール先のフォルダにコピーします。

今回はSYSTEMなのでSYSTEMにコピーします。

// SYSTEM
C:\Users\"User"\AppData\Roaming\yuzu\nand\system

// USER
C:\Users\"User"\AppData\Roaming\yuzu\nand\user

フォルダがない場合は、各自作成してください(自分の環境ではなかった)。

コピーが終わったらUnmountを押します。

#USER

最後にUSERをコピーします。やることはSYSTEMと全く同じで、bis_key2_crypとbis_key2_tweakを入力してマウントし、SaveとContentsをコピーします。

ここまで終わったらHacDiskMountを終了します。

ファイルのコピー

先程抽出したPRODINFO.binとBCPKG2-1-Normal-Main.binを%YUZU_DIR%/sysdataにコピーします。

sysdata

最終的にsysdata内はこうなっていれば成功です。

起動

あとはゲームのデータであるXCIファイルがあるディレクトリを指定するだけです。

ここまでできた方であればこれは簡単なはずなので割愛します。

yuzu
Splatoon 2の起動

というわけで、なかなかにNintendo Switchのエミュレータであるyuzuに可能性を感じたえむいーさんでした。

動作リスト

ここで動作リストが確認できます。Splatoon2はBadとなっており、正常にプレイするのはまだまだ難しそうです。

シェアする

『Nintendo Switchエミュレータyuzuに可能性を感じた』へのコメント

  1. 名前:KKgames 投稿日:2019/05/24(金) 10:28:53 ID:c1bc632c1 返信

    このエミュレータでSwitchの様に遊ぶには大体どれくらいのスペックが必要ですか?

    • 名前:me 投稿日:2019/06/11(火) 18:40:07 ID:13c8d6ea3

      ゲームの種類に依ると思います。

      自分の環境はi7 6700K+GTX1060ですが、結構カツカツでした。