1 ポイント 投稿者 GN⁺ 2023-09-24 | 1件のコメント | WhatsAppで共有
  • Nintendo 3DSは、スマートフォンとアプリストアが拡大していた時代の携帯型ゲーム機で、裸眼立体3D、デュアルスクリーン、下位互換CPU、多様なI/Oを複雑なSoC構造の中にまとめている
  • 上部の800×240 LCDは、ハーフ幅ピクセルパララックスバリアによって400×240フレーム2枚を同時に表示し、深度スライダーとNew 3DSの顔追跡によって視野角や疲労の問題を軽減した
  • 基本モデルは268MHzのARM11 MPCore 2コア、128MB FCRAM、DMP PICA200 GPU、CEVA TeakLite II DSPを採用し、New 3DSは804MHz 4コア、256MB FCRAM、NFC、改良された立体視システムを追加した
  • 内部にはARM11以外にも、DS向けのARM946E-SとGBA向けのARM7TDMIが搭載されており、Native 3DS、Nintendo DSi、Game Boy Advanceモードへ切り替わるが、開発者が通常直接扱うのはARM11 MPCoreのみである
  • オペレーティングシステムとセキュリティは、NATIVE_FIRM、TWL_FIRM、AGB_FIRM、SAFE_FIRM、Boot9/Boot11、AES/RSA/OTPベースの信頼チェーンで構成され、複数の脆弱性を経てホームブリューとカスタムファームウェアのエコシステムが発展した

モデル系列とハードウェア世代

  • Nintendoは3DSのライフサイクル中に複数の改訂モデルを投入し、価格帯とユーザー層を分けた
  • アーキテクチャの観点ではモデルは6種類に分かれる
    • Nintendo 3DS(2011)、Nintendo 3DS XL(2012): 元のアーキテクチャに基づいており、XLと非XLの主な違いは画面サイズである
    • Nintendo 2DS(2013): 立体表示を取り除き、Game Boyに着想を得た形状を採用した低価格モデルである
    • New Nintendo 3DS(2014)、New Nintendo 3DS XL(2015): ハードウェアのアップグレード、NFCリーダー、追加ボタン、改良された立体視システムを加えた
    • New Nintendo 2DS XL(2017): New Nintendo 3DS XLから立体機能を省いた低価格モデルである
  • ゲームの共通基準は元のNintendo 3DSであり、New系列は別個の大きなハードウェア差分を持つ

裸眼3Dディスプレイ

  • Nintendo 3DSはNintendo DSの後継機のようにLCDを2枚搭載し、上画面は800×240ピクセル仕様で奥行き感を表示する
  • 立体効果はVirtual Boyと同じ**立体視差(stereoscopic parallax)**の原理を使う
    • 左目と右目にわずかに異なる画像を見せる
    • 2つの画像の中心位置の差によって、物体が前後にあるように知覚される
  • 上部LCDは物理的にハーフ幅ピクセルで構成され、2つのモードで動作する
    • 2Dモード: 横方向の2ピクセルを1つのように扱う
    • 3Dモード: すべてのピクセルを個別に使い、400×240フレーム2枚を同時に表示する
  • パララックスバリアは、LCDピクセル背後のバックライトを分離し、各目が異なるピクセル部分集合を見るようにする
  • この方式には制約がある
    • 追加の明るさが必要で、バッテリー駆動時間に影響する
    • 画面が目の基準から傾くと、2つの視差フレームが混ざって見え、目の疲労が増す可能性がある
    • 固定された姿勢と急速な目の疲労により、3D機能が煩わしく感じられることがある
  • 3D深度スライダーは、2つのフレーム間の差を増減させて奥行き効果を調整する
  • New 3DSは、前面カメラと赤外線LEDを使った顔追跡によって傾きの問題を緩和する
  • ゲームはGPUに通常のフレームを描くように、同じシーンをわずかにずらした2枚のフレームとしてレンダリングする必要がある
    • 公式APIは、2つの投影行列を構成するルーチンを提供する

CPU、メモリ、下位互換構造

  • メインSoCであるCPU CTRには、ストレージとRAMを除くシステムの大半が収められている
  • NintendoはARMと協力してARM11 MPCoreベースのCPUクラスタを構成した
    • 元の3DS: MP11コア2基、各268MHz
    • New 3DS: MP11コア4基、各804MHz、共有2MB L2キャッシュ
  • ARM11はARMv6k命令セットを使用し、Thumb、Jazelle、VFPといった構成要素も含む
    • ARMv6は整数SIMD命令と、マルチコア同期向けのload/store命令を提供する
    • VFP11は32ビット単精度と64ビット倍精度の浮動小数点演算を高速化し、IEEE 754に従う
  • 各MP11コアは8段パイプライン、動的・静的分岐予測、CP15システム制御コプロセッサ、16KB命令キャッシュと16KBデータキャッシュを備える
  • ARM11コア同士はARMのAXIバスで接続され、MPCoreのSnoop Control UnitがL1キャッシュのコヒーレンシを維持する
  • 3DSにはARM11以外にも2つのCPUが搭載されている
    • ARM946E-S: Native 3DSモードではOSが管理するセキュリティ・I/O補助プロセッサとして動作し、DS/DSiゲーム実行時には主プロセッサとなる
    • ARM7TDMI: DS/DSiモードでは補助プロセッサとして動作し、GBAモードでは主実行CPUとなる
  • 動作モードは3つある
    • Native 3DS mode: ARM11が3DSゲームを実行し、ARM9がI/Oとセキュリティを処理し、ARM7は停止する
    • Nintendo DSi mode: ARM9とARM7がDS/DSiゲームを実行し、ARM11は省略または再配置されたDSハードウェアを補助する
    • Game Boy Advance mode: ARM7がGBAゲーム命令を実行し、ARM11とARM9はバックグラウンド支援を行う
  • メモリ構成は複雑である
    • 元の3DSは開発者視点で128MB FCRAM、New 3DSは256MB FCRAMを提供する
    • ARM11にはセキュリティ目的の512KB SRAMがある
    • ARM9には1MB SRAM、New 3DSでは1.5MB SRAMがある
    • ARM9は32KB命令TCMと16KBデータTCMも備える
  • FCRAMはFujitsuとToshibaが2002年に開発したFast Cycle DRAMで、不連続読み出しにおいて通常のDRAMより低遅延を目指した
  • DMA構成も含まれる
    • ARM9側のXDMAは最大4チャネルを提供する
    • ARM11側のCDMAは最大8チャネルを提供する
    • New 3DSはARM11ブロックの隣にCoreLink DMA-330をさらに1基追加している
  • 3DS開発者は一般にARM11 MPCoreのみにアクセスし、プログラムはスレッドベースのマルチスレッドモデルで記述される
  • New 3DSでは、ゲームのメタデータが新モデル向けであることを示すと、OSが高速クロック、追加RAM、L2キャッシュといった機能を有効化する
    • そうでなければ互換性のためにNew専用ハードウェアは無効化される
    • ゲームはOld向けとNew向けのコードベースを同時に含めることができる

グラフィックスパイプラインとPICA200

  • Nintendo 3DSは、Nintendo携帯機ラインで初めて、自社PPUではなくGPUベンダーのIPコアを使用した
  • NintendoはDMPのPICA200をライセンスし、CPU CTR SoC内に組み込み、GPUは268MHzで動作する
  • PICA200は低消費電力の3Dプロセッサで、OpenGL ES 1.1に準拠し、OpenGL ES 2.0の要素を拡張したMaestro 2Gアーキテクチャを採用している
  • ピクセル段階は固定機能構成だが、Maestro functionsがフラグメントライティング、マルチシャドウアルゴリズム、ポリゴン分割、バンプマッピング、プロシージャルテクスチャ、複数のフォグ効果を提供する
  • GPU専用のVRAMは6MBしかなく、プログラマーは即時アクセスが必要なコマンド、バッファ、反復利用するテクスチャをVRAMに置き、それ以外はFCRAMに配置する必要がある
    • PICA200はFCRAMとVRAM間の転送用DMAを備える
  • LCDコントローラはPICA200のレンダーバッファ形式を直接理解できないため、別途LCDフレームバッファが必要になる
    • 上側左眼用、上側右眼用、下側画面用の最低3つが必要
    • アーティファクトを避けるには、ページフリッピング用の複製セットを置くこともできる
  • ゲーム中、GPUは通常3画面をレンダリングする
    • 上側左眼: 400×240
    • 上側右眼: 400×240
    • 下側: 320×240
    • いずれも8ビットRGBカラーで最大1,678万色を表示する
  • PICA200のパイプラインは、コマンド、頂点、ジオメトリ、ラスタライザ、フラグメント、後処理の各段階で構成される
    • コマンド段階はcommand bufferを読み取り、ポリゴンを描画する
    • 頂点段階はVertex Processor 4基を並列利用し、ジオメトリシェーダーを有効にすると3基しか使えない
    • ジオメトリ段階はVertex Processor 1基を取り出して別個のシェーダーとして使用する
    • フラグメント段階はテクスチャユニット4基とシェーディングユニットで構成される
    • ピクセルシェーダーはなく、カラーコンバイナ6基とMaestro機能を組み合わせる
    • 後処理段階はアルファ、ステンシル、深度テストとブレンディング、2×2スーパーサンプリングを実行できる
  • New 3DSにはMVDというDSPが追加されたとみられ、H.264/MJPEGデコードとYUV-to-RGB変換を行う
    • New 3DSのWebブラウザが高速化された動画再生に使用しているとみられる
  • DSおよびGBAゲーム用PPUもSoC内に入っている
    • DS/DSi/GBAゲームは従来ハードウェアと同様にPPUを使用する
    • 出力はLgyFBを経由してフレームバッファへ送られ、表示はPICA200が担当する
    • この構造はレイテンシを追加するが、ユーザーには無視できるレベルである

オーディオとI/O

  • SoCにはオーディオブロックが2つある
    • 3DSゲーム向けの独自DSP
    • 3DS、DS、GBAゲームが使うDS系CSND
  • 3DS専用DSPはCEVA TeakLite IIで、約134MHzで動作する
    • ステレオ2チャンネル、最大32kHzサンプリング、16ビット解像度を出力する
    • DSP作業領域として512KB RAMを使用し、256KBずつダブルバッファリングされる
    • DSPはADPCMとPCMサンプルを最大24チャンネルまでミキシングできる
  • プログラムは公式SDKに含まれるNintendo作成のDSPファームウェアをランタイム時にアップロードし、OSのオーディオサービスがDSP通信を抽象化する
  • CSNDは32チャンネルを提供し、DSの対応ブロックの2倍にあたる
  • 外部I/Oは携帯ゲーム機というよりスマートフォンと競合しようとする構成が強い
    • デジタルボタン、アナログCircle Pad、3D・音量スライダー、Wi-Fiスイッチ
    • 抵抗膜式タッチセンサー、ジャイロスコープ、加速度計
    • 前面カメラ1基と背面カメラ2基
    • 赤外線送受信機、SDカードスロット、3.5mmジャック、ゲームカードリーダー
  • New 3DSは追加I/Oを加えている
    • デジタルボタン2つ、C-Stick、下側画面のNFCリーダー
    • 顔追跡用赤外線LED
    • SDの代わりにmicroSDスロット
    • Wi-Fiスイッチの廃止とソフトウェア制御
  • 内部インターフェースはSPI、HID、I²C、FIFOベースの高速周辺機器、MCUに分かれる
    • SPIはゲームカード保存用フラッシュ、DS電源管理、Wi-Fiの一部、タッチスクリーン、サウンド、マイク、Circle Padなどを接続する
    • HIDはデジタルキーパッドを16ビットレジスタとして読み出す
    • I²Cはカメラ、赤外線送受信機、NFC、QTM顔追跡モジュール、ジャイロスコープ、MCUなどを接続する
    • eMMCとSDスロットは16MB/s周辺機器としてFIFOレジスタ経由で接続される
  • Auxiliary MicrocontrollerはNEC設計・Renesas製造の78K0R MCUで、LCD、LED、電源管理、バッテリー、RTC、3Dスライダー、HOME/電源ボタンなどを管理する
  • I/OベースのサービスにはQR Reader、AR Games、Face Raiders、Amiibos、SpotPass、StreetPass、Play Coinsが含まれる

オペレーティングシステムとブート構造

  • Nintendo 3DSは複数のファームウェアを保存し、ネイティブ実行、下位互換、保守モードを提供する
    • NATIVE_FIRM: 3DSネイティブ機能を動作させ、ARM11がメインプログラムを実行する
    • TWL_FIRM: 3DSをNintendo DSiのように動作させ、ARM9とARM7が前面に立つ
    • AGB_FIRM: 3DSをGame Boy Advanceのように動作させ、ARM7がメインプログラムを実行する
    • SAFE_FIRM: システムアップデートのような保守作業に使われる
  • NATIVE_FIRMではARM9とARM11がそれぞれ別個のOSの役割を持つ
    • ARM9はKernel9Process9を実行し、セキュリティ、暗号化、I/O、ファイルシステム、タイトル検証・インストールを担う
    • ARM11はKernel11と複数のユーザープロセスを実行し、ネットワーク、HOME Menu、アプリ実行、ハードウェアサービス抽象化を提供する
  • ARM11スケジューラはコアを一般的な汎用コアのようには扱わない
    • 最初のコアappcoreはゲーム用で、FIFOスケジューリングを使用する
    • 2番目のコアsyscoreはシステム作業用で、実行時間の30%をユーザーアプリケーションに貸し出せる
    • New 3DSの4番目のMP11コアは顔追跡専用である
    • 3番目のMP11コアはデフォルトではスケジューリングされず、ほとんどアイドル状態である
    • New 3DSの追加CDMAはブート中にしかアクセスできず、その後は使われない
  • アプリが実際に使えるRAMはFCRAM全体より少ない
    • 元の3DS: 128MB中、基本64MB
    • New 3DS: 256MB中、基本124MB
    • APPMEMTYPEフラグでHOME Menuを表示せずにブートし、それぞれ最大96MB176MBを確保できる
  • 保存媒体はBoot ROM、OTP、eMMC NAND、SD/microSDで構成される
    • Boot9Boot11はブート用ROMであり、セキュリティ上隠されている
    • OTPは製造時に一度だけ書き込まれるコンソール固有情報と暗号化キーを保持する
    • eMMC NANDにはシステムデータ、ファームウェア、3DS/DSiモードのユーザーデータが保存される
    • SD/microSDにはeShopソフトウェア、セーブデータ、写真、録音などが保存され、AES-128-CTRで保護される
  • ブート時にはARM9のBoot9が先に動作し、ARM11のBoot11を起こした後、NANDのNCSDヘッダとファームウェアパーティションを検証する
    • SHA-256ハッシュとRSA-2048署名を検証して有効なファームウェアを探す
    • 失敗した場合はWi-Fiモジュールのフラッシュブートを試み、それも失敗するとエラー画面を表示する
    • NATIVE_FIRMが起動すると、Kernel9、Process9、Kernel11、システムプロセス、NS、HOME Menuまたはゲームへと続く
  • HOME Menuはインストール済みアプリケーションをスクロール可能なグリッドに表示する1ページのナビゲーションシェルである
    • NSモジュールはHOMEボタンのオーバーレイや仮想キーボードのようなApplet呼び出しも提供する
    • New 3DSでは、ゲームが互換モードで動作していてもAppletとNSルーチンはハードウェア全体を使用できる
  • システムアップデートはオンラインまたはゲームカートリッジで可能である
    • カートリッジにはユーザーアプリ更新なしでシステムアップデートのみが含まれる
    • ネットワークアップデートには完全なパッケージが含まれる
    • インストールはSAFE_FIRMへ再起動した後、System Updaterが実行する

ゲーム開発、配布、Virtual Console

  • 3DSの開発エコシステムはARMベースのスマートフォン産業とコンパイラの発展の影響を受けたが、Nintendoはまだ標準ツールチェーンまでは提供していなかった
  • ハードウェア開発キットはIntelligent SystemsとKyoto MicroComputersが供給した
    • CTR-BOXは3DSハードウェアが入った金属製ボックスとダミー3DSケースで構成される
    • 公式フラッシュカードは外部テスターにゲームのプロトタイプを配布するために使われた
    • New 3DS向けにはSNAKEキットが提供された
  • 公式SDKには3DS向けarmcc、デバッガ、ハードウェア・OSサービスAPI、グラフィックスライブラリ、パッケージャー、ネットワーク・オーディオ・ビデオライブラリ、Visual Studio 2010プラグイン、PICA200ツールとプロファイラが含まれる
  • グラフィックスライブラリは4種類ある
    • GL: 単純だが遅いOpenGL ES API
    • GD: PICA200コマンドを生成する、より高速な代替手段
    • GR: ハードウェアに最も近いPICA200コマンドAPI
    • GX: PICA200管理のための汎用ライブラリ
  • ゲームの実行媒体は3種類ある
    • Gamecard: 128MB〜4GBのROM、または最大2GBのFlashと保存用backup memoryを搭載できる
    • eShop/SD Card: ダウンロードソフトウェア、予約購入、DLC配布をサポートする
    • Local wireless: Download Playは3DSにも引き継がれ、転送されたゲームはNANDにインストールされ、1スロットだけを使用する
  • Virtual ConsoleはeShopを通じてDSiWare、NES/Famicom、Sega Game Gear、Game Boy、Game Boy Colorのゲームを提供する
    • New 3DSユーザーはSuper Nintendoのカタログにもアクセスできる
    • ほとんどはROMとエミュレータを含むアプリパッケージとして動作する
  • Game Boy AdvanceゲームはAmbassador Programユーザーにのみ公式提供された
    • ARM11エミュレータではなく、AGB_FIRMを通じてARM7でネイティブ実行される
    • GBAゲームはFCRAMにコピーされた後、AGB_FIRMへ再起動してARM7が制御する
  • ゲームアップデートはeShopで配布され、Download Playを除くゲーム種別に適用される

セキュリティ、コピー防止、ホームブリュー

  • 3DSセキュリティの主な対象はGame/CTR card readerオペレーティングシステムである
    • CTRカート内部データはNCSD形式で、OSが認証、検証、復号を担当する
    • 実際の信頼チェーンはオペレーティングシステムとブート構造に集中している
  • 専用のセキュリティハードウェアが含まれる
    • ARM11のXNフラグとARM9のMPUは任意メモリ実行を制限する
    • ARM9はセキュリティ専用プロセッサのように動作し、AES、RSA、PRNGなどの暗号ブロックにアクセスする
    • AESエンジンはAES-128の暗号化・復号、最大64個のキースロット、CTR/CCM/CBC/ECBモードをサポートする
    • RSAエンジンは公開鍵ベースのRSA演算を実行し、キースロットは4個である
    • OTPはコンソール固有キーとCTCertを保持し、eMMC CIDもキー難読化に使われる
  • 信頼チェーンはBoot9、OTP、eMMC、NCSD、NCCH、Title検証へと続く
    • NCSDとNCCHはRSA-2048 + SHA-256署名を使用する
    • NCCHペイロードはAES-128 CTRで暗号化される
    • TitleはRSA-2048、RSA-4096またはECDSAとSHA-256で署名される
    • eShopダウンロードライセンスであるTicketもRSA-2048 + SHA-256で署名される
  • 実装上の弱点も存在した
    • Kernel11のAXI WRAMページテーブル設定が読み取り・書き込み・実行権限を広く付与していた
    • システム3.0.0以前ではOTPメモリは隠されていなかった
    • Process9とKernel9の間に権限分離がなかった
    • ASLRがなく、システムのダウングレード保護もなかった
    • WebKitベースのウェブブラウザが繰り返し攻撃対象になった
  • 初期のホームブリューとコピーはDSフラッシュカードから始まった
    • DSiと3DSは、許可されたカード一覧であるwhitelistによってフラッシュカードを遮断しようとした
    • メーカーはカートリッジヘッダを再プログラムして、別の許可済みゲームのように識別させた
  • 2013年、Gateway3DSは最初の実用的な3DSフラッシュカードとして登場した
    • Blue GatewayはDSフラッシュカードとしてMSETエクスプロイトの侵入口をインストールした
    • Red GatewayはFPGAとmicroSDで正規ゲームカードを複製した
    • Launcher.datはMSETエクスプロイトのペイロードとカスタムファームウェアの役割を果たした
  • Nintendoはアップデートで対応した
    • 5.0.0-11はMSETエクスプロイトを一時的に修正した
    • 7.0.0-13はカーネルエクスプロイトを防ぎ、NCCH復号の信頼チェーンにRSAモジュールを追加した
    • 9.3.0はGateway3DSの非公開カーネルエクスプロイトを修正した
    • Sky3DSは11.0でブラックリスト化された
  • ホームブリューのエコシステムはlibctrunihstroNinjhaxHomebrew Launcherへと発展した
    • NinjhaxはCubic NinjaのQRコード機能を侵入口として利用した
    • GSPWNはGPU DMAでHOME Menuヒープを上書きする脆弱性である
    • Homebrew Launcherは.3dsx形式の未署名ホームブリューアプリを実行する
  • memchunkhaxmemchunkhax2はKernel11の権限昇格を可能にした
    • FCRAMに保存されたmemchunk headerを改変し、AXI WRAMアクセスとKernel11制御につなげる
  • 2015年、New 3DSへのarm9loader導入後にarm9loaderhaxが登場した
    • 起動時点でKernel9権限の任意コード実行を可能にした永続的エクスプロイトである
    • Luma3DS、Godmode9、Anemone3DS、nds-bootstrapのようなツールが広く使われた
  • 2016〜2017年にはBoot9解析によりsighaxboot9strapntrbootが登場した
    • sighaxはBoot9のRSA-2048署名検証の欠陥を利用して信頼チェーンを無力化する
    • boot9strapはSDカードpayloadまたは通常起動をサポートする代替ブートローダーとなった
    • ntrbootはDSフラッシュカード、磁石、キー操作の組み合わせを用いてBoot9権限を取得する
    • これらの脆弱性はBoot ROM内にあるため、ソフトウェアアップデートでは修正できない
  • 2018年以降の手法はboot9strap導入を簡素化する方向に発展した
    • seedminerはFriend Code、SDカードの下位ディレクトリ名、短いbrute forceによってmovable.sedを再構成する
    • BannerBomb3はDSiWare title bannerのパース中にSettingsアプリのスタックオーバーフローを利用する
    • SAFE_FIRMベースのunSAFE_MODEとsafehax、HOME Menuベースのmenuhax67とnimdsphax経路が使われた
  • 2023年5月の11.17.0アップデートはBannerBomb3を修正し、追加機器不要の最後の侵入口の1つを無力化した
    • 以後、ユーザーには正規の3DSゲームエクスプロイト、ntrboot対応DSフラッシュカード、またはWebKitエクスプロイトが必要となる

1件のコメント

 
GN⁺ 2023-09-24
Hacker News のコメント
  • Gameboy Advance のゲームを動かすために、実際の物理的な GBA CPU が入っているというのは本当に驚き
    発売前から噂を全部読んで青いモデルを予約購入し、初期に約250ドルを払ったので Ambassador Program の対象だった。Nintendo が発売直後に大幅値下げした際、お詫びとして eShop にないゲームまで含めて複数の無料ゲームを配ってくれて、満足していた
    子どもの頃に楽しんだ Mario Kart Super Circuit を、3DS の優れたスライドパッドでまた遊ぶのは夢のようだったし、昔使っていた GBA のように実CPU上で動いていたと知って、さらに特別な思い出になった

    • その理由がさらに驚き。Nintendo が 後方互換性 をマトリョーシカ人形のように積み重ねていった結果、GBA CPU がほとんど偶然入り込むことになったようなもの
      Nintendo 3DS には Nintendo DSi のシステム構造全体が入っていて、DSi CPU はシステムの監督用CPUとしても機能する。DSi はもともと Nintendo DS の構造をおおむねオーバークロックした形で、初期の Nintendo DS 2モデルは GBA スロット経由の後方互換のために GBA の ARM7TDMI も搭載していた
      Ambassador Program のとき、Nintendo は 3DS を Game Boy Advance モードで起動する AGB_FIRM ファームウェアを配布し、Nintendo DS モード用には TWL_FIRM があった。今 3DS をハックすれば他の GBA ソフトウェアもロードでき、周辺機器への依存を除けば、事実上完全な精度で GBA ゲームを動かせる
    • Sony も似た方式を使っていた
      PlayStation 2 には入出力チップが必要で、Sony は PS1 CPU を選んだ。PS1 のゲームを実行するときは、そちらに実行を引き渡していた
      記憶が正しければ、初期の PlayStation 3 には PS2 CPU と GPU が入っていたが、PS2 のゲームを動かしていないときは特に役割がなかったように思う。後にコスト削減のためエミュレーションに切り替える際に削除された可能性が高い
    • 実際の物理的な Gameboy Advance CPU を入れるのは昔からある手法だが、それでも格好いい
      GBA も後方互換のために GBC CPU を入れていて、カートリッジ自体が押す物理スイッチでモードを切り替えていた。PS2 も PS1 CPU を基板上の入出力コンポーネントとして再利用し、後方互換に使えたし、他のコンポーネントはエミュレーションの助けを借りていたと記憶している
    • Walmart は公式値下げと Ambassador Program の申請終了の数日前から、すでに値下げ後の価格で販売し始めていた
      Reddit の投稿のおかげで安い価格で買えて、無料ゲームも受け取れた。無料ゲームはほとんど遊ばなかったが、システムを出し抜いたような気分だった
    • GBA CPU は NDS CPU の一部なので、3DS の中にも入っている
  • 3DS は非常に遅いスタートを切ったが、最終的には個人的に最も好きなコンソールの一つになった
    N64 を持ったことがなかったので、優れた3Dリマスターのおかげで Ocarina of Time と Majora’s Mask を初めてプレイした。完全な DS 後方互換も大きな利点で、画面の見苦しい非整数倍率の拡大を避けるには Start を押しながら起動する必要がある
    ソフトmodした端末で対応する Homebrew とエミュレーションの範囲も広く、とても魅力的な小型端末だ。小さい New 3DS のデザインも歴代級に気に入っていて、見た目の良い遊び心ある交換式フェイスプレートをたくさん買った
    さらに本当に良かったのは、バッテリーが古くなってきたときに Nintendo に電話して、自分用と妻用の新品純正バッテリーを2個買えたこと。1個15ポンド程度で、端末を分解せずに交換できた。今では珍しい方式だ

  • パンデミック中、ADHD のせいで結局 New Nintendo 3DS XL を3台も買った
    1台は日本から輸入して米国ROMに入れ替えた。旅行用として本当に気に入っている。3D効果は見事で、オフにできる点も良く、バッテリー持ちも素晴らしい
    ただ、どんな趣味でもそうだが、物が希少になると欲が出て集めたくなるし、コンソール3台を同時に遊ぶことはできないので、そろそろ手放すべきかもしれない

    • コンソールが3台あるなら、友人2人と Tri Force Heroes をやるべき
    • バッテリーが駄目になるのを防ぐ方法があるか、今後も交換用バッテリーを入手できるなら、そのまま持っていると思う
      以前 New Nintendo 2DS XL を買ったが、DS 系列の最後の反復モデルで、DS、DSi、3DS のゲームをすべて動かせる。「new」DS 専用として出たゲームは数本しかないので、約15年分のゲーム史をサポートしていることになる
      見かけるたびに DS のゲームを買おうとしているが、すでに良い価格を見つけるのは難しくなっていて、Bravely Default のような一部タイトルはこのあたりでは今でも60ユーロほどする。DS には粗雑な量産型ゲームも非常に多いので、そういうものは避けている
  • 3DS の奥行き設定を、非常にアクセスしやすい 物理スライダー で調整できるようにしたのは天才的な設計だった
    どんな研究結果から3D機能の要をこの方式で調整させることにしたのかは分からないが、3D機能の使いやすさには決定的な違いをもたらした

    • 今ごろは、奥行き表現のある画面がタッチスクリーン端末の一般的な機能になっていてもよさそうなものだ
      Face ID があるのだから、目がどれくらい離れているかは分かるし、そのスライダー値を自動調整することもできるはず
  • この記事は素晴らしいシリーズの一部: https://www.copetti.org/writings/consoles/

  • 脱獄した 3DS で一番気に入っている機能の一つは NSUI アプリ: https://3ds.eiphax.tech/nsui
    公式 Virtual Console リリースのおかげで一部の古い Nintendo ゲームを 3DS で遊べたが、同じラッパーを対応するシステムのどのゲームにも使える。エミュレーターというよりラッパーに近いので、性能と互換性がそのまま良くなる
    そのため 3DS は、NES/SNES/GB/GBC/GBA ゲームをピクセル単位で正確に楽しむのに適した携帯機になる
    数年前になってようやく気づいたもう一つの点は、より大きな microSD カードを使うほど 3DS が遅くなること。知る限り、コンソール全体がストレージをブロック単位ですべてスキャンするため、64GB 以上では苦痛なほど遅くなる。特に GBA 注入ゲームを遊ぶ場合、3DS がそのモードでほぼ再起動するため、ストレージを再スキャンする

  • 「システムバージョン 3.0.0 以前では OTP メモリが隠されておらず、何らかの脆弱性さえあれば OTP キーを問題なく抽出できた」という部分を覚えている。
    昔は 3DS をハックするには、OTP 抽出のためにファームウェア 3.0.0 へダウングレードする必要があった。ところが 3.0.0 は New 3DS と完全には互換性がなく、そのモデルで古いファームウェアの状態のままふたを閉じるだけで、コンソールが永久に文鎮化していた。いい時代だった。

  • このシリーズは本当に良い。
    3DS 用の Homebrew を試したいなら、https://github.com/devkitPro/libctruを見るとよい。

  • Nintendo には、手の中に丸ごとのコンソールを収める携帯ゲーム機体験を絶対に諦めないでほしい。
    より大きなインディー携帯ゲーム産業も発展してほしい。
    高性能な携帯機の差し迫った終焉のように見えるものはクラウドゲームだ。家のコンソールを動かしてスマートフォンにストリーミングする方式まで含まれる。
    結局は、みんなが自分の財布で何を選ぶかにかかっている。GBC が懐かしい。

    • 携帯ゲーム機が死ぬとは思わない。ハードウェアは進歩し続けていて、ハードウェア要件は頭打ちになっている。
      Switch は Stardew Valley、Hades、Dead Cells のような2D インディーゲームで大きな成功を収めたと思う。そういうゲーム設計はうまく機能するし、良い 2D グラフィックは決して古びて見えない。
      低スペックな機器でも動く優れたゲームを遊ぶために、消費者に不利なストリーミング方式へ人々がお金を払うかは疑問だ。
    • その可能性は非常に低そうだ。Stadia は終了したが、Switch と Steam Deckはいずれも大成功した。
      クラウドゲームの遅延と、安定したネットワーク接続への依存は、まだ多くの人にとって問題だ。さらに、ゲーマーの大半がまた別のサブスク料金を払いたがるとは思えず、クラウドゲームには結局サブスクが付きまとう可能性が高い。
      どうせプレイするハードウェアも必要なら、良い携帯機を使えばいい。Asus のような PC メーカーも RoG Ally のような携帯機を作っているし、Switch 2 と Steam Deck 2 も事実上確実だ。むしろ携帯機はますます良くなり、市場シェアも伸びているように見える。
    • Sony が PSP をやめたのは本当に嫌だが、理由は理解できる。Steam Deck と、より強力な派生機が成功している理由も同じだ。
      最近のゲームは独占性が昔ほど強くなく、Nintendo のように据え置き型と携帯型を完全に一体化するほど緊密に統合しない限り、会社が不要な分断を作っていることになる。
      Nintendo が Switch とは別に据え置き型コンソールも出していたと考えると、持続可能な構造ではなかっただろう。
      TV に挿して楽しめる携帯機を作った Nintendo の「天才性」と「革新性」を人々が称賛するのは面白い。一方で PSP Go と TV ドックは「みんな、僕のこと覚えてないの?」と言っているようなものだ。PSP Go は本当に小さくてかわいいので好きだ。
    • チップはより強力に、より小さくなる一方だ。すでに Raspberry Pi でも多くのゲームを遊べるし、10 年ほど後には同じくらいのサイズの機器で現行世代のゲームを動かせるようになると思う。
      面白いプロジェクトとして、娘のために携帯コンソールを作ってみようかと考えている。
  • こういう記事は本当に素晴らしい。
    GB/GBC アーキテクチャに興味があり、そのプラットフォーム向けのゲームを作りたいと思っていたが、まだこの記事は見つけていなかった。投稿してくれてありがとう、そして Rodrigo が書いてくれてありがとう。