なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーの

なるほどえたきちのブログじゃねーよ

このブログについて

ポケモン第三世代を中心に真偽不明の情報や、作成したツールを纏めたりするブログです。
殆どがROMデータ解析系の記事なのでそれなりの知識がある方向けです。
こちらのコメントはほぼ見てないので、何か聞きたいことがあればTwitterの方に連絡して頂けると内容次第で反応します。

当ブログはリンクフリーです。

 

ポケモン第三世代
 ■ROMハック関連
  ◆CartRAM取扱メモ
  ◆流れ解説

 ■バグ関連
  ◆【Em】任意コード実行
  ◆【LG】任意コード実行
  ◆【Em】バイナリエディタの導入
  ◆【Em】システムハック
  ◆【Em】セーブデータコピー
  ◆【Em】ふしぎなカード捏造【Part1】【Part2】
  ◆【Em】任意コード実行によるROM吸出し

 ■乱数調整
  ◆【Em】ID調整

ポケモン第五世代
 ■乱数調整
  ◆ 【BW/BW2】全28バージョンパラメータ纏め

ポケモン第六世代
 ■乱数調整
  ◆【XY】ID調整
  ◆【ORAS】ID調整

ポケモン第八世代
 ■乱数調整
  ◆レイド柱のSeed特定ツール

◯他ゲー
 ■モンハンライズ
  ◆護石リセマラ自動化ツール

◯ハード関連
 ■GBA
  ◆【HARD-MOD】EzFlash+SDカードリーダー内蔵
  ◆最強のGBA用フラッシュカートを決める

 ■Nintendo Switch
  ◆画像認識マクロ作成ツール
  ◆【自作ゲームパッド】FireBirdコントローラーの取説

◯外部リンク
 ■Twitter
  ◆@_3z8

 ■Mail
  ◆yu_gen_00@yahoo.co.jp

◯作ったツールのまとめ

blog.bzl-web.com

ファイル置き場

GBAポケモン改造パッチ・解析資料系

基本はこっちに上げてあります。
日本版FR1.0を想定して作っています。
pkkaiろだに上げていた分で消失しているものがあればご連絡頂ければこちらに上げ直します。
(手元に残っていればですが...)
ux.getuploader.com

パッチにするまでもないような小ネタ・資料はこちらに適宜記載しています。(管理人ではありません)
wikiwiki.jp

ポケモン改造ツール

自作品

CFRU-Builder

CFRU/DPEのかんたんビルドツール
使えたらラッキー程度の代物

バージョン 更新日 DL
CFRU-Builder v1.01 2025/08/27 Download
ValzHex

StirlingのGUI構成をベースにカスタムしたバイナリエディタ

バージョン 更新日 DL
ValzHex 20200607 2020/06/07 Download
GBA General Compressor

LZ77圧縮/解凍ツール
バージョン表記はpkkaiろだ公開版のものに合わせています

バージョン 更新日 DL
GBA General Compressor ver1.2 2017/11/19 Download
PokeDataGenerator

プロキオン・デネブの開発時に敵手持ちデータ生成用として作成したもの
各種拡張に対応したポケモンの個体生成ツール

バージョン 更新日 DL
PokeDataGenerator ver1.2 2019/07/08 Download
anime image editor

技アニメ用画像導入ツール

バージョン 更新日 DL
anime image editor ver1.1 2018/02/18 Download
BINtoIPS

アセンブラを叩いて出力されたbinファイルをipsパッチに変換するツール

バージョン 更新日 DL
BINtoIPS 2018/03/24 Download
voicetable check

ボイステーブル情報の閲覧・移植が行えるツール

バージョン 更新日 DL
voicetable check 2019/07/30 Download
VoiceTable Editor

ボイステーブルに紐付けた音源の試聴・ループ調整等が行えるツール

バージョン 更新日 DL
VoiceTable Editor 2019/04/01 Download
Trainer Edit

各種拡張に対応したトレーナー情報設定ツール
専用データタイプの拡張パッチを適用することで個体値・努力値等の任意指定も可能

バージョン 更新日 DL
Trainer Edit ver0.1 2019/09/01 Download
ExportPokeImages

ハックロムからポケモン画像データを抽出するツール
インデックスカラーでの保存ではないので単に画像一覧眺めたい人向け

バージョン 更新日 DL
ExportPokeImages 2020/06/29 Download


既存ツールの改変物

TileMap Creator Mod

TileMap Creatorのバグ修正版

バージョン 更新日 DL
TileMap Creator Mod 2019/03/02 Download
Cry Editor Mod

Cry Editorの日本ROM対応版

バージョン 更新日 DL
Cry Editor Mod 2019/08/17 Download


自動化関連ツール

Nintendo Switch

NX Macro Controller

比較的簡単に自動化が行えるツール
キャプボを使用した画像認識に対応
ツール内からマクロの共有アップローダーにアクセス可能

バージョン 更新日 DL
NX Macro Controller v2.13 2023/02/23 Download
NX Macro Controller v2.12 2023/02/14 Download
NX Macro Controller v2.11 2023/02/12 Download
NX Macro Controller v2.10 2023/02/11 Download
NX Macro Controller v2.09 2023/02/10 Download
NX Macro Controller v2.08 2023/02/09 Download
NX Macro Controller v2.07 2022/09/12 Download
NX Macro Controller v2.06 2022/09/05 Download
NX Macro Controller v2.05 2021/05/08 Download
NX Macro Controller v1.08 2019/12/29 Download


Windows

現状アホみたいなツールしかない
使い方は自分で考えろ

334Timer

目標時刻を指定してカウントダウンを行うツール
ツイートを投稿してからサーバーに反映されるまでのラグを考慮して時間を調整することも可能
隠し機能あるけど使ってたら途中でBANされたのでその後の検証はしてません、やるなら自己責任

バージョン 更新日 DL
334Timer 2020/04/18 Download
RP2040 Programmer

指定のフォルダに入れたFWの書き込みを自動化するツール

更新日 DL
2024/07/10 Download


ポケモン乱数調整ツール

Em

TIDFinder

ID調整ツール

バージョン 更新日 DL
TIDFinder 2020/08/24 Download
ContestSeedChecker

コンテストでNPCが使用したポケモンから絵画seedを特定するツール

バージョン 更新日 DL
ContestSeedChecker v1.01 2020/08/24 Download
IDkuzi

IDくじ乱数用ツール

バージョン 更新日 DL
IDkuzi 2019/11/12 Download


BW/BW2

5genSearch

個体乱数用ツール

バージョン 更新日 DL
5genSearch v0.01 ALPHA 2021/09/22 Download


XY/ORAS

6genSeedSearch

復元した化石ポケモンのパラメータからseed値を求めるツール

バージョン 更新日 DL
6genSeedSearch v1.03 2020/08/23 Download
6genTidSearch

ID調整ツール

バージョン 更新日 DL
6genTidSearch v1.02 2020/10/14 Download


剣盾

SW Seed Calculator

レイド乱数のseed値を求めるツール

バージョン 更新日 DL
SW Seed Calculator v5.04 2022/03/22 Download
SW Seed Calculator v4.02b 2020/07/13 Download
SW Seed Calculator v3.10 2020/06/18 Download
SW Seed Calculator v2.04 2020/01/16 Download
NX RNG Tool

野生乱数ツール

バージョン 更新日 DL
NX RNG Tool v0.0.1 2021/12/13 Download


BDSP

BDSPDailyRNG

日替わり乱数で遊ぶツール

バージョン 更新日 DL
BDSPDailyRNG v1.01 2021/12/23 Download


複数世代用

CCTimer

EonTimerやFlowTimerっぽい機能を持ったタイマー

バージョン 更新日 DL
CCTimer v1.13 2022/01/15 Download


FireBird

Boothにて販売している自作コントローラー基板
更新後に挙動が怪しくなった場合は設定リセットすると大体解決する気がします
手動でのFW書き込み手順はこちら
上記手順でFWのダウングレードも一応できますが、設定バグるかもしれないのでそこは自己責任で
Ver.2.27以前とVer.3.00以降で使用するツールが変わっているので注意

ファームウェア
バージョン 更新日 更新内容 DL
FireBird v3.04 2026/02/20 バグ修正 Download
FireBird v3.03 2026/02/12 バグ修正 Download
FireBird v3.02 2026/02/12 振動のやつ Download
FireBird v3.01 2026/01/31 一部処理の高速化 Download
FireBird v3.00 2026/01/28 破壊的変更 Download

バージョン 更新日 更新内容 DL
FireBird v2.27 2025/11/04 キーコンリセット処理の修正 Download
FireBird v2.26 2025/10/29 加速度センサの調整 Download
FireBird v2.25 2025/10/28 生のスティック値の基準を変更 Download
FireBird v2.24 2025/10/22 ホスト識別関係の修正 Download
FireBird v2.23 2025/10/18 PS3/PS4のリマッピングに対応 Download
FireBird v2.22 2025/10/17 バグ修正 Download
FireBird v2.21 2025/10/15 バグ修正 Download
FireBird v2.20 2025/09/13 バグ修正 Download
FireBird v2.19 2025/09/09 バグ修正 Download
FireBird v2.17 2025/09/06 破壊的変更 Download
FireBird v2.16 2025/05/29 バグ修正 Download
FireBird v2.15 2025/05/19 バグ修正 Download
FireBird v2.14 2025/05/17 ポーリング、振動処理の最適化 Download
FireBird v2.13 2025/05/11 ホスト認識怪しかったのを調整 Download
FireBird v2.12 2025/04/07 ジャイロ設定追加 Download
FireBird v2.10 2025/03/11 破壊的変更 Download
FireBird v2.09 2024/10/06 振動強度の設定を細分化 Download
FireBird v2.08 2024/06/09 PC/Switchのキーコンを分離 Download
FireBird v2.07 2024/05/30 ジッター対策など Download
FireBird v2.06 2024/05/25 振動、RETRO-C関連のバグ修正 Download
FireBird v2.05 2024/05/13 トーナメントモード追加 Download
FireBird v2.04 2024/04/26 v2.1基板の追加LED対応 Download
FireBird v2.03 2024/03/27 GCモードのキーマップを修正 Download
FireBird v2.02 2024/03/22 v1.0基板の振動処理を修正 Download
FireBird v2.01 2024/02/25 振動強度の制御方法を変更 Download
FireBird v2.00 2024/02/20 v2基板に対応 Download
FireBird v1.14 2024/01/20 Download
FireBird v1.13 2024/01/08 最適化に伴う不具合修正 Download
FireBird v1.12 2024/01/06 設定リセットの暴発対策 Download
FireBird v1.11 2023/12/24 Download
FireBird v1.10 2023/12/19 XInputの対応など Download
FireBird v1.09 2023/10/06 Download
FireBird v1.08 2023/10/06 Download
FireBird v1.07 2023/09/23 なんか色々 Download
FireBird v1.06 2023/08/29 Download
FireBird v1.05 2023/08/25 なんか色々 Download
FireBird v1.04 2023/07/29 ERMモーターに対応 Download
FireBird v1.03 2023/07/21 接続切れ対策の回路変更に対応 Download
FireBird v1.02 2023/07/21 振動強度の調整 Download
FireBird v1.01 2023/07/18 スケーリング、振動処理の修正 Download
FireBird v1.00 2023/07/17 Download


コンフィグツール

FWのVer.2.27以前専用
Ver.3.00以降のFWではこちらのブラウザツールを使用すること

バージョン 更新日 DL
FireBird Config Tool v2.18 2026/02/06 Download
FireBird Config Tool v2.17 2026/01/28 Download
FireBird Config Tool v2.16 2025/10/22 Download
FireBird Config Tool v2.15 2025/10/19 Download
FireBird Config Tool v2.14 2025/10/18 Download
FireBird Config Tool v2.13 2025/10/15 Download
FireBird Config Tool v2.12 2025/10/15 Download
FireBird Config Tool v2.11 2025/09/06 Download

バージョン 更新日 DL
FireBird Config Tool v2.10 2025/05/23 Download
FireBird Config Tool v2.09 2025/05/19 Download
FireBird Config Tool v2.08 2025/05/11 Download
FireBird Config Tool v2.07 2025/04/08 Download
FireBird Config Tool v2.06 2025/04/07 Download
FireBird Config Tool v2.05 2025/03/11 Download
FireBird Config Tool v2.04 2024/10/06 Download
FireBird Config Tool v2.03 2024/06/09 Download
FireBird Config Tool v2.02 2024/05/13 Download
FireBird Config Tool v2.01 2024/04/26 Download
FireBird Config Tool v2.00 2024/02/20 Download
FireBird Config Tool v1.05 2024/01/06 Download
FireBird Config Tool v1.04 2023/12/19 Download
FireBird Config Tool v1.03 2023/09/23 Download
FireBird Config Tool v1.02 2023/08/28 Download
FireBird Config Tool v1.01 2023/08/25 Download
FireBird Config Tool v1.00 2023/07/17 Download

用途不明のやつ

US2JISKey

USキーボードの入力をJISキーボード配列の設定に合わせて変換するだけのツール
JISキーボードとUSキーボードが同時に使用できるようになる
実はWin11の標準機能でも近いことができるらしいけど設定がめんどくさいので作った
ログオン時の自動実行も可能

更新日 更新内容 DL
2025/04/02 バッククォートミスってたので修正 Download
2025/04/01 Download

注意事項

『Mod』と名前に入っているツールの二次配布は禁止とします。
その他のツールは商用・営利目的でなければ好き勝手やっていいです。

【XInput|DirectInput】PC用コントローラーで使われている通信プロトコルの違いをまとめたい

概要

PC用コントローラーには様々な通信プロトコルがあることをご存じでしょうか?
DirectInputとかXInputとかいうやつです。

最近のつよいコントローラーはこの通信プロトコルを切り替えられるものが多いですが、そもそも通信プロトコル切り替えて何が変わるの?という人は多々いるかと思います。
仮に同じコントローラーであったとしても、どの通信プロトコルを使っているかによってデバイスの仕様が若干変わる場合があります。
とっくに枯れた情報だと思ってるんですが、枯れすぎて最早忘れ去られていそうなのでメモとして残しておきます。

私の他の記事を見ていただけると分かると思うのですが、私自身自作のコントローラー基板やファームウェアの開発を行っていて、殆どのプロトコルは一通り自分でエミュレートまでさせる所まで試しています。
一般的に流布されている情報と違う内容も一部含まれると思いますが、大枠信じていただけると嬉しいです。

まず、今の市場に存在するコントローラーでよく使われる(?)プロトコルと仕様についてざっくりリストアップします。
それぞれの詳細については後段で説明します。
結論だけ先に言うとサードパーティ製ならXInput使っときゃいいです。(ジャイロが欲しい場合は別)
ポーリングレートとはあんまり関係ないのでその辺りは考えないでください。

名称 分解能 振動 ジャイロ ボタン数 備考
DirectInput 8bit1 2 × 128+8(アナログ) -
XInput 16bit × 15+2(アナログ)3 -
Switch Pro 12bit 18 CS機用
SIXAXIS 8bit × 17+12(アナログ) CS機用
DualShock 3 8bit 17+12(アナログ) CS機用
DualShock 4 8bit 18+2(アナログ) CS機用
DualSense 8bit 19+2(アナログ) CS機用

各項目の詳細について

分解能

スティックの値をどれくらいの粒度で示すかを指す指標です。
8bitであれば値の幅は0~255、12bitであれば0~4095、16bitであれば0~65535です。
この値が大きければ大きいほど理論上は微細な動きを感知しやすくなります。
ただ、8bitでも大抵は手ブレの方が大きいので、実プレイで困るようなことはないと思います。

振動

プロトコル上振動をサポートしているかどうかです。
ただしゲームによって対応状況は異なります。
特にDualSense、Switch Proは他のコントローラーとは異なり、ハプティックフィードバックを採用しています。
この都合上、これに上手く対応できていないゲームも場合によってはありそうです。
余程古いゲームでない限り、XInputなら安定して動作すると思います。

ジャイロ

モーションセンサーを使用できるかどうかです。
コントローラー側でジャイロ対応を謳っていても、モードなどによって使えない場合があるのはこれが原因です。
PC用の汎用プロトコルではこの機能をそのまま使用することはできません。
スティックの操作に変換するような機能を持ったコントローラーもありますが、CS機と同じ感覚で使いたい場合は「Switchモード」「DSEモード」のような機能を探してみましょう。

ボタン数

プロトコル上扱えるボタンの最大数です。
DirectInputはボタン数が可変でマッピングが規格上定義されていないので、予めPC側でマッピングの設定を行う必要があったりなかったりします。
この煩雑さを解消するために生み出されたのがXInputだったりします。

プロトコル自体の詳細について

DirectInput

古の時代から存在するUSBゲームパッドプロトコルです。
汎用規格として策定されたため、これをメーカーが使うにあたってのルールのようなものも特に存在しません。
特に、「このボタンはこの位置に配置する」のようなルールすらないため、パッドによってボタンの位置がバラバラです。
パッドAでマッピング設定を行った後にパッドBを繋げた時に、Lボタンを押したらXボタンが反応する、みたいな現象がよく起こります。
あと、スティック値の入力も8つあるアナログ軸の内4つを使用して取得します。

Switchの公式ライセンスコントローラーなどはこれを使っています。
マッピングのルールは任天堂側がしっかり決めているようで、ボタンの位置がぐちゃぐちゃになるといった問題はSwitchで使う分には起こりません。

XInput

DirectInputの後継のような感じでMicrosoftが定義したプロトコルです。
Xbox360のコントローラーはこれが使用されています。
この時代はファーストパーティのUSBゲームパッドが存在しなかったためか、「ボタンの位置が決め打ちされていてマッピング設定の必要がない」という点で画期的でした。
拡張性を完全に捨てているためDirectInputの完全上位互換ではなく、ボタン数は現行のファーストパーティ製コントローラーと比べると絶妙に1つ足りないです。
Windows OS側でDirectInputに変換するための互換レイヤーが存在するため、古のゲームでも基本は使えるはずです。

スティックの解像度は今でもこのプロトコルが一番高いです。(ややオーバースペックだと思いますが)
ネイティブのジャイロ機能を使わないのであれば取り敢えずこれを使っておけばいいです。
中華コンの設定に分解能(ステップ精度)の項目があるものが増えてきましたが、これを気にするのであればXInputでないと殆ど意味がないので注意してください。

SIXAXIS/DualShock/DualSense

アナログ入力が存在するボタンであってもプロトコル上はデジタル入力の情報を持っています。
あと、SIXAXISは何故かデジタル入力しか存在しないボタンのアナログ値も取ってきているようです。
その辺りのよく分からない差異はありつつも、PCで扱う分にはSIXAXISもDualSense Edgeもできること自体は大体同じです。
一通りの機能が揃っているので無難に遊びやすいかも?と思います。
サードパーティ製でこれを入れているのはBIGBIG WONのBlitz2辺りですね。
XInputと比べてスティックの精度が若干落ちますが、あれは多分ジャイロ使いたい人向けだと思います。

Switch Pro

なんかDirectInputと紹介されていることが多いですが全くの別物です。
謎に分解能が高いです。
殆どのコントローラーが内部的に使っているADC(スティックの値を実際に読み取る部品)は10bit~12bitくらいであることが多いので、それに合わせて理論値だけ出せるようにしておいた感じでしょうか。
ジャイロも振動もありますし、動きさえすればプロトコル上は意外と優れていたりします。
サードパーティ製だとSwitch対応用にこのプロトコルを入れているケースを目にしますね。

任天堂はこのプロトコルをPCで使うことをあんまり想定していない気はします。
故にDualShockやDualSenseと比べて細かい挙動で不安定な所はあります。

さいごに

XInputは新しいプロトコル!みたいなこと言われてるのをたまに見掛けるけどこれ策定されたの20年前なのウケる


  1. 殆どの製品では8bitの分解能を使用しているが、16bitも仕様上は定義することが可能
  2. あるにはあるが、最近のソフトだと動かない可能性高め
  3. ホームボタンの仕様が他と異なるため、自由に使えるのは実質16ボタン

【Nintendo Switch】旧プロコン魔改造キット FireBird For Pro-Controller 組み立てガイド

はじめに

概要

Switchプロコン改造キットとして開発した「FireBird For Pro-Controller」の導入手順をまとめたものです。
機能説明などは散々やってきたのですが、肝心の組み立てガイドを作っていなかったので今更ながら記事にしました。
この記事から見る人もいるかもしれないのでざっくりとキット自体の説明も載せておきます。

商品ページ

Boothにて公開しています。
bzl.booth.pm

ツール・FW

blog.bzl-web.com

何ができるキットなの?

大雑把に纏めると以下の通りです。

・USBマイコンであるRP2040で駆動するコントローラー基板
・スティックのTMRセンサー化による耐久性向上
・PCと任天堂製据え置きハードほぼ全て(NewFC~Switch2)で使用可能
・USB接続時の1F遅延を解消し、Switchのフレームレートに同期して通信する
・スティックを弾いた際の跳ね戻りをフィルタリング
・有線コントローラー化する都合上、大会などで同期切りの必要がなくなる
Xbox Elite 2やDualSense Edgeにあるような専用ソフトによる詳細設定
・PC接続時ポーリングレート1000Hz

詳細は過去に書いたこちらの記事を参照していただければと思います。
blog.bzl-web.com

ソフトウェアの機能自体は市場にあるDualSense Edgeなどの高価格帯コントローラーやVader 4 Proといった中華コンと比較しても遜色ない仕上がりになっているかと思います。
旧Switchプロコンの性能的なネックを解消するだけに留まらず、この形状の有線コントローラーとしてやれることは一通りやってしまおう、という感じのコンセプトです。
互換シェルやボタン類のカラーバリエーションも豊富なので、好きな見た目で高性能なコントローラーを作れるという点も長所になり得るかな?と思っています。
シェル加工などの手間を惜しまないのであれば、USBケーブルを直接内部接続したり、割り当て変更可能な背面ボタンを4つまで追加したり...といったことも可能です。

Switch2が発売されると同時にプロコン2も発売され、旧プロコンが不要になってしまったという方は多いかと思います。
また、フリマアプリでもジャンク品の価格は以前と比べて低下気味で、素体の入手は比較的しやすいです。
基本的にプロコンのジャンク品で破損していることの多い部分はスティックで、このキットに換装する時点でその部分は新調されます。
そのため、使用する上で不都合が生じることは殆どないかと思います。

組み付け手順

使用されているネジ



4種類(A,B,C,D)あります。
また、その内1種類(D)はバッテリー接続基板を固定するものなのでFireBirdでは使用しません。

メイン基板組み付け手順

FireBirdのソフトウェア的な機能はメイン基板の組み付けだけでほぼ全て利用することができます。
振動不要であればドライバーのみで可能なので、敷居は高くないかと思います。

グリップを外す


まずは左右のグリップを取り外します。
ネジAで固定されており、精密ドライバーとして売られていることが多い00番のプラスドライバーが適合します。
全体を通して一番ガッチリ締まっているネジがここですが、適切な工具を使えば舐めることはないはずです。
同じ00番の中でもグリップが太めのものを使うのがおすすめです。



ネジを外した後は普通に引き抜けます。

バックシェルを外す



ネジBで固定されています。
ネジは4箇所ですが、ツメによる軽めの固定もあります。

バッテリーを外す



左側から持ち上げて外します。

フロントシェルとミドルシェルを分離する



ネジCで固定されています。
5箇所外した後、シェルの隙間にヘラや爪を入れてこじ開けます。


左右のグリップ部分にモーターがありますが、このモーター上部に貼り付けられた両面テープでシェル同士が貼り付いているような形になっています。
ネジを外した後、グリップ周りにできた隙間をゆっくりこじ開けてテープを剥がしてください。


また、基板はフロントシェル側とミドルシェル側の2枚で分かれており、リボンケーブルで接続されています。
勢い余って切ってしまわないように注意しましょう。(FireBirdのキット内に予備が2本入っているので、万が一のことがあっても詰まることはありません)


シェルを完全に分離するために、フロントシェル側の接続コネクタからリボンケーブルを抜きます。
ロック(コネクタの黒い部分)が付いているので、マイナスドライバーやピンセットなどを使用して上に持ち上げるような形で開けます。


ミドルシェル側です。
こちらに取り付けられている基板がプロコンのメイン基板です。

モーターのケーブルを切る

メイン基板を交換するにあたって、モーターが邪魔になるのと再利用する可能性があるのでケーブルを切断します。
長さは十分にあるので、多少切った程度であれば再度ハンダ付けする際の支障にはなりません。



純正基板にキズを付けるのが気になる場合、基板側の根元から少し浮かせた場所で切ると良いです。


分かりやすいように左右のケーブルをシェルの外に出しています。

メイン基板を外す


スティックキャップを外します。
特別な固定もないので、上方向に軽く引っ張るだけで抜くことができます。


ネジCを4箇所外します。


白いプラスチックの部品を奥に押し込みます。



パチッという音がして部品が外れます。



基板を持ち上げ、手前側にスライドさせると外すことができます。
バッテリー基板はまだ固定されているため、純正基板にキズを入れたくない場合は無理矢理引っ張らないようにしてください。


バッテリー基板を固定しているネジを外します。
ネジCが2本、ネジDが1本です。



これで純正プロコンのメイン基板とミドルシェル+モーターを分離することができます。

FireBirdメイン基板を取り付ける


こちらの基板をミドルシェルに取り付けます。




キットに付属するリボンケーブルも使用可能ですが、素体の純正プロコンがあるのであれば流用してしまった方が楽です。
適切に折り目が付いた上で1cmほどケーブルが長いので、基板に繋げたり閉めるのが少し簡単になります。
3枚目の画像の左側をメイン基板側に接続します。
青い部分が根元から折れている方をメイン基板側にする、と覚えておくと良いです。



FireBirdメイン基板にリボンケーブルを接続します。




ミドルシェルにFireBirdメイン基板を取り付けます。



白いプラスチックの部品を再度取り付けて、手前側に押します。


緑丸で囲った部分をネジCで4箇所固定します。



モーターを使用しない場合はケーブルを基板の下に押し込んでおきましょう。



スティックキャップを取り付けます。


以上でメイン基板の組み付けは完了です。

HD振動を使用する場合

切ったケーブルをFireBirdメイン基板にハンダ付けするだけです。


作業しやすいようにケーブル端の被覆を剥いておきます。
この時に予備ハンダしておくと後がスムーズです。



メイン基板上のモーター用パッドに予備ハンダしておきます。



ケーブルをハンダ付けします。
この時、極性は左右モーターで合わせるようにしてください。


振動機能を利用する場合の組み付けはこれで完了です。

ボタン基板(ABXY)組み付け手順

FireBird側のボタン基板を分離する


検品の都合でFireBird側のボタン基板2枚が接続された状態となることがあるため、これを先に外します。
最初から分離されていた場合はこの手順は必要ありません。





2つのコネクタで繋がった状態になっているので、それぞれのロックを外します。


基板が外れます。

純正プロコン側のボタン基板を分離する


コネクタ1つとネジCで固定されています。
今回の例では先にネジを2本外しています。




コネクタのロックを外し、基板を引き抜きます。



そのまま持ち上げて取り外すことができます。

FireBirdボタン基板を取り付ける


基板がネジCで直接固定されているので、これを外します。



ネジを2本外した後は簡単に持ち上げて基板を外すことができます。
長期間使用した個体などは基板にラバーパッドが軽く貼り付いていることがあるので、基板の表面は確認するようにしてください。



FireBirdボタン基板を取り付けて、緑丸の箇所をネジCで固定します。
ボタン基板(LR)を使用しない場合、「ボタン基板(ABXY)とボタン基板(LR)の接続」に進んでください。

ボタン基板(LR)組み付け手順

純正LR基板は両面テープで固定されているため、ネジ固定だった他の2枚と比較すると少し難しくなります。
先細のピンセットなどがあった方が作業しやすいかと思います。
LRのLEDを使用しない場合はこの手順は必要ありません。

ボタンを外す




LRボタンを外側に押し出すようにして外します。



ZLRボタンを固定しているピンを引き抜きます。
それ以外に固定箇所はないため、自然と外れます。

ラバーパッドを外す



LRボタン裏にあるラバーパッドを外します。
シェルに軽く引っ掛けてあるだけなので簡単に外れるかと思います。




ZLRボタン裏にあるラバーパッドを外します。
こちらは結構しっかり留まっているので、上方向に強く引っ張るようにして引き抜きます。

純正LR基板を剥がす




ピンセットなどを使用してテープを剥がします。
完全にテープのみで固定されているので、剥がし終わったらそのまま外せます。

FireBirdボタン基板(LR)を貼り付ける



まず裏面の台紙を剥がします。




元の純正LR基板と同じように貼り付けます。

ラバーパッドを取り付ける


LRボタンのラバーパッドはシェルの突起に引っ掛けて取り付けます。



ZLRボタンのラバーはシェルの穴にラバーの突起をあてがい、裏から引っ張って取り付けます。

ボタンを取り付ける



LRボタンは単純にはめるだけです。




ZLRボタンはシェルにはめた上でピンを差し込んで固定します。


最終的にこのような外観となれば完了です。

ボタン基板(ABXY)とボタン基板(LR)の接続

シェル同士を固定する



シェル同士を合わせて、緑丸の箇所をネジCで固定します。

基板同士をコネクタで接続する



純正LR基板、FireBirdボタン基板共通で接続する必要があります。



こちらは純正のLR基板を使用する場合は必要ありません。


最終的な外観です。
以上でボタン基板の組み付けは完了です。

コントローラーの組み立て

基板同士をリボンケーブルで繋げる


ボタン基板側のロックを外します。



メイン基板側に繋げているリボンケーブルの端をボタン基板に繋げて、コネクタのロックを倒して固定します。

シェルを閉める



リボンケーブルをシェルで踏まないように閉めます。


緑丸で囲った箇所をネジCで固定します。


バックシェルをはめて、緑丸で囲った箇所をネジBで固定します。



左右にグリップをはめて、緑丸で囲った箇所をネジAで固定します。



シェルを閉めた後、USB接続してデバイスとして認識したら組み立ては完了です。

おわりに

FireBirdの組み立て手順は以上の通りとなります。
基本的にネジを締めるだけの作業なのですが、パーツが多いのでやたらと長くなってしまいましたね...
純正ボタン基板でも感度は別に悪くないので、ボタンLEDがないと使う気が起きない、という人以外はメイン基板のみでも十分使えるのではないかなと思います。

ProGCCとの差異について

未だに質問されることがあるのと「FireBirdはProGCCのフォーク」といった書き込みも見られることから一応触れておきます。
メインのマイコンがRP2040という点以外は周辺回路もファームウェアの制御も異なっており、コントローラーとしては全くの別物です。
唯一、ProGCCの開発元であるHandHeldLegendが販売しているRETRO-Cケーブルというものに対応していますが、その対応のさせ方も内部的にはやや異なります。
スマブラ専用コントローラーとして使う場合の差異に関しては体感大きく変わらないと思いますが、実際の細かい設定項目はほぼ別物になっています。
FireBirdに関しては最近の更新内容がPCゲー想定というのもあって、スマブラ用の機能に加えてFPSやアクションゲーム向けの汎用多機能パッドに寄った設定が多くなっています。

スティックの細かい調整に拘らず、スマブラ専用コントローラーとして大雑把に見るのであれば、開発元が日本か米国か、の違いくらいしかないとは思います。
海外製品であることから日本人からするとProGCCはハードルが高いですが、サポートは十分に手厚く開発者の方もかなり精力的なので、普段のコミュニケーションが英語メインの方であればそちらの方が良いかもしれません。
無線対応版は日本だと技適違反となるのでその点は注意が必要だと思います。
逆に、日本国外からFireBirdを購入するのもハードルが高いようです。
販売に使用しているBoothというサービス側で海外発送は対応しているのですが、恐らく仲介業者の手数料が高い?ようです。(情報求む)

Switchプロコンみたいなコントローラー基板を開発した話

この記事は、スマブラ Advent Calendar 2024 5日目の記事です。

普段スマブラ全くやってない人間なので初めましての方が多いかと思います。
基本的にはポケモンアドベントカレンダーに寄稿しているのですが、今回はどちらかといえばスマブラ寄りの内容になりそうだったので、こちらに寄稿させて頂きました。

adventar.org

執筆中に作業データ吹き飛んだので遅刻してます!!!!!!
ごめんなさい!!!!!!!!!!

はじめに

コントローラー基板「FireBird」を開発するにあたっての零れ話的なやつです。
2023年の初頭から開発に着手し、今までの間にそれなりの知見を蓄積できたので、その辺りを雑に書き出していこうと思います。
Arduinoとかで遊んだことのない人からすると分かりづらい所は色々あると思います。悪しからず。

まずお前何ができるんだよ

他のブログ記事見てください
プログラムはアセンブリ(ARM,x86)、C/C++C#が辛うじて書けます。
回路設計はマイコンを使ったデジタル回路ならギリギリ何とかできる、といったレベルです。
その他、ポケモン過去作の乱数調整や任意コード実行の解析をしていました。
blog.bzl-web.com
blog.bzl-web.com

スマブラ...?わからん...

コントローラー基板に興味を持ったきっかけ

2年くらい前にPhobやProGCCといったコントローラーが登場し、「低遅延で様々な機能を持った高性能コントローラー」としてスマブラ界隈で猛威を振るっている...という話を聞きました。
私はスマブラどころか普通のゲームすら殆ど遊んでいませんでしたし、純正コントローラーで満足していたので登場初期はあんまり興味がありませんでした。

その後、ネットサーフィン中に偶然以下の動画を見つけました。
www.youtube.com

1000円未満で買える汎用マイコンボードで作ったコントローラーが2万円のアケコンをボコボコにする...という後者を買った人からしたら堪ったものではない内容でした。
(実際はポーリングレートの差でこうなってしまっているだけで、適切な設定にすれば2万の方が強いとかそうでもないとか)

...まあ内容の正確性はさておいて、汎用マイコンでここまでできるなら自分でも何か面白いものが作れるかも?という興味を抱くには十分でした。

取り敢えず作る

話は変わりますが、ポケモン界隈ではArduinoや中華マイコンをコントローラーとして認識させ、アイテム集めなどの単純な作業を自動化する...という手法が割とよく使われたり使われなかったりします。

blog.bzl-web.com

見た目こそ違いますが、過去に自分が作った中華マイコンボードも広義の「ゲームコントローラー」ではあると思います。
これをベースにより性能の高いマイコンに変えて既製品のコントローラー基板に形状を合わせるだけで、ソフト部分はほぼ流用できそうだと思いました。


▲取り敢えず形状を合わせただけのやつ


▲なんかできた

v1.0の開発に関しては本当に何も考えずマイコンボード作っただけです。
USB-FSなのでそこまでシビアな回路でもないですし、今見ると結構雑な所は多いなと思います。

折角だしやれることは全部やりたい

v1.0の時点で「低遅延プロコン」としての要件を満たしてはいたため、人によっては十分と感じる人もいたかもしれませんが、正直言って純正プロコンと比べると色々なものが足りません。
無線機能は弊害も多いので一旦保留するとして、有線の純正プロコンで使えるものは全部使えるようにしたいものです。
というか今のバージョンに至るまでにそれらは全て対応したのですが、いちいち細かく纏めていられないのでざっくり書いていきます。

ジャイロセンサー

真っ先に手を付けたのはこれです。
純正プロコンで使われているジャイロセンサーが汎用品であると知り、v1.1の基板で試験的に導入しました。
その後のFWアップデートで感度調整などを何度か挟みましたが、現行FWではほぼ純正と同じ感度で使用できると思います。

HD振動

v1.0時点でHD振動用のモーターも一応動く構造にしましたが、流石にいきなりHD振動の再現まではできませんでした。
対応はv2.0以降になってしまいましたが、大体以下の資料を参考にフルスクラッチで実装した気がします。
github.com
tech.alpsalpine.com

これを実装する前にもHD振動を謳う中華コンなどはありましたが、どれも再現度はかなり低かったと思います。
実はProGCC制作者からもこれに関して質問されたことがあり、ProGCCv3.2の振動制御回路はFireBirdv2.0以降とほぼ同じ構成になっていたりします。
ソフト側の制御もほぼ同じようなことをしているようです。

純正ボタンボードとの互換性

初期のFireBirdは純正ボタンボードとの互換性とか微塵も考えずに各ボタンにつきピンを1つ割り当てる方式で入力を読み取っていました。
まあ処理的にはそっちの方が簡素ですし、それだけで使う分には何も問題はないのですが、やっぱり純正品との互換性がないというのは少し気になる所ではありました。
純正プロコンのボタン入力にはキーボードの回路とかでよく使われるマトリクス回路というものが使用されています。
これがどういったものなのかはURL先の記事を参照して頂くと分かりやすいかと思います。
紹介されているのはダイオードの数を省いた簡易回路なので、実際の基板では若干構成が異なりますが、動作原理は変わりません。
FireBirdではv2.0以降の基板で対応しています。
v2.3以降の基板ではここから回路を拡張し、8個のGPIOで元々存在する16個のボタン入力に加えて追加のボタン4個が読み取れるようにしています。
www.elec-hobbyist.com

ハードワイヤリング

あんまりいらないかな、と思って対応をv1.2まで先送りにしていた機能です。(TP置くだけなので機能ですらないが)
USB端子の接触不良による接続切れ報告が出てきたので追加しました。
取り回しがどうしても悪くなってしまうので、スマブラで滅茶苦茶レバガチャする人以外はあんまりいらない気もします。
ProGCCv3.1でハードワイヤリング用のピンが消えてv3.2で即復活しているのを見ると色々あったんだろうな...と思わされます。

RETRO-Cケーブル

ProGCCv3で実装されていた機能ですが、折角なので対応させました。
元ネタ同様にNES/SFC/N64/GCの4種類のプロトコルに個別対応しています。
また、各ハードの信号を認識して通信モードを自動で切り替える機能を独自に実装しています。

ボタンLED

絶対いらないだろ、と思っていましたが要望が多かったので対応させました。
製造コストも不良率も跳ね上がるので作る側としては何もいいことがありません。
そもそもゲーミングデバイス光らせて何が楽しいんだ?
光るPCとかも大嫌いです。
適当なパーツでPC自作すると大概ピカピカ光りますよね。
なんなんだあれ

しょうもない冗談はさておき、LEDがラバーに干渉したりすることがあるのでボタンLED対応は操作性とのトレードオフとの認識でいます。
FireBirdで使用しているLEDは影響が出ないようにできるだけ薄いものを使用していますが、在庫は安定しないし高いしで中々辛い所です。
LEDもクリック化も使用しない場合、メイン基板だけ買ってボタン基板は純正品を流用するのが一番賢いと思います。

マウスクリック・タクトスイッチ化

v2.0以降の基板ではマウススイッチ、v2.3以降の基板ではタクトスイッチのフットプリントに対応しています。
マウスクリック化の方をやっている人が多い印象ですが、タクトスイッチ化も何だかんだ遊びやすくておすすめです。
SKRRAAE010という薄型のタクトスイッチに合わせてフットプリントを作っているので、気になった人は挑戦してみると良いと思います。
プラグとかは特に用意していないのでその辺は自分で合わせてください。

ホールセンサースティックについて語りたい

この手のコントローラーの目玉機能であるホールセンサースティックですが、メーカーによって品質にかなりのバラつきがあるのでここら辺でざっくり纏めておこうと思います。
アルプス製のスティックは本来可変抵抗タイプしかありませんが、一応ホールセンサー化することは可能なので書いておきます。

アルプス製

純正プロコンとかで使われているスティックです。
感触は純正とほぼ同一で、耐久性もそこそこあります。
初期のFireBirdで使用していましたが、修理で受け取った個体の軸はどれも比較的安定しています。
Phobコンと同じ要領でホールセンサー化することが可能ですが、手間が大きいのとGinfull製の方が耐久性は上という都合上今は使用していません。

Gulikit製

一般販売はされておらず、メーカーに直接問い合わせて頑張って購入しました。
見た目のそれっぽさに感動した記憶があります。
但し、スティック自体の耐久性に関してはお世辞にも良いとは言えないクオリティです。
修理で受け取った個体は大体軸がガタガタです。
スティックの寿命が短すぎて純正プロコンより早く故障してしまう傾向にあります。
TMRスティックというものも出ていたので既に検証していますが、肝心の部分は特に改善されていないようです。
センサー部分に関しては割とマシな方ではありますが、ニコイチして使うほどではないと思います。

K-Silver製

Gulikit製のスティックボックスはこちらのOEMだったりします。
耐久性はGulikit製同様にあまり高くありません。
センサーは少し前までは良かったのですが、サイレントアップデートでちょっと使いづらくなってしまいました。

Ginfull製

スティックボックスの耐久性に関してはこちらがダントツで一番高いです。
感触はアルプス製より少し柔らかいかな?と感じるくらいです。
ニュートラル付近でグリグリ動かす時の感触はちょっと違う気もしますが、慣れでどうにかなるレベルだと思います。
耐久性が高い分操作性も殆ど変化しないので、使い込んで緩くなった他メーカー製スティックと比べると硬く感じるかもしれません。
センサーは時期によって良かったり使い物にならなかったりします。
途中のバージョンでセンサーにコンデンサが埋め込まれてスマブラダッシュが出なくなったりしたこともありました。
今のバージョンでもコンデンサが入っていますが、その頃と比べると調整されている気がします。
それでも操作への影響は十分考えられますが、最近FW側でコンデンサのフィルタを解除することができたのでその内何とかなると思います。

開発時気を付けた点とか

スティック関連のフィルタ処理

まず例として跳ね戻りフィルタを挙げますが、GCコンの改造でスティックにコンデンサを挟んで跳ね戻りを抑制する、といった手法がここでは有名かと思います。
これはスティックの操作をRCフィルタという回路で鈍らせることによって急激なスティック移動を抑制するといった仕組みで行われます。
跳ね戻りが消えるだけなら良いのですが、波形のレベルで見ると通常の弾き入力といったユーザーの意図した操作にまで影響が及んでしまいます。
調整次第で体感できない程度にすることは可能だと思いますが、人によってはどうしても違和感を覚える原因となる場合があります。
FireBirdのFWでは跳ね戻りフィルタやジッター抑制フィルタ、追加予定のものだと感度カーブやRCフィルタといったスティックの操作に補正を掛ける処理がいくつか実行されています。
スティックの入力値の取得・パケットへの反映は約1.1khzで行われ、各種フィルタ処理は全てその速度でリアルタイムに反映できるようにチューニングしています。
その為、これらの処理が原因でスティックの操作に遅延が生じるといったことはありません。
跳ね戻りフィルタは急激な移動のみをカットする仕様なので、感度を上げすぎると入力抜けのような症状が発生する場合がありますが、それ以外に遅延は起こり得ません。

CPUリソース管理

HD振動、認証処理、RETRO-C接続の検出やスティックの座標計算など、初期と比べて色々と面倒な処理が増えたので、相応にCPUの計算量も増加しています。
それでもスレッド管理や涙ぐましい最適化等でなんとか時間内に処理できる形にできています。

電源

よく分からない中華レギュレータでも別にいいんですが、詰めておくに越したことはない部分だと思います。
特に振動を駆動する場合はノイズや電力消費量も増えるので、電源が弱いと何かしらの誤作動を起こす可能性も否定できません。
FireBirdではTexas Instrumentsのリニアレギュレータを使用して3.3V電源を生成しています。
最低負荷時は3.29V、最高負荷時は3.27Vで電圧値はかなり安定している方だと思います。

LED

あまりLEDは好きではないですが、どうせやるなら綺麗に見せられるようにしようと工夫した点はあります。
フルカラーLEDの仕様上、クリアパーツに光を透かした際に分光してしまい、色が綺麗に混ざらないことがあります。
対策として、複数のLEDを向かい合わせるように向きを変えて配置し、LEDの各色がまばらになるようにしました。

▲左:未対策 右:対策後

今後の予定とか

v2.0へのアップデート後は致命的な不具合も特に見つからずに一年近くが経過しているため、今後はFW更新で機能を調整していく感じになると思います。
基本的な機能は全てv2.0で完成しており、それ以降のv2.4までの更新は基本的に普通に使うならまず影響のないようなものです。
v2.4から更に変更したい点も特にないので、暫くはこのバージョンで安定するかと思います。
記事執筆時点で作成予定の機能は以下の通りで、☆付きは着手中、★付きはほぼ完成しているものです。
これらの機能はv2.0以降の基板であればまず問題なく使用できます。

★感度カーブ機能
★スケーリング形状変更
★RCフィルタの適用/解除
☆コントローラー単体での設定変更
☆XInputでの設定変更
GCコン接続タップ経由での設定変更
・ジャイロ感度変更
・キーボード/マウスとしての認識
・トーナメントモードの詳細設定
・連射(Swtichでは使用不能にしたい)


▲写真はv2.3時点のもの、v1.0と比較すると結構色々変わったと思う


▲デザインをそれっぽく刷新したり多言語対応したり頑張った

さいごに

仕事の合間にチマチマやってたというのもあって何だかんだ開発に2年くらい掛かってて色々とマズい。
さっさと作るもん作りきって安定させたら他の作業を優先させたいです。

特に書かんでええかと思ったけど流石にアレなのでショップページ貼っておきます。
プロコン分解できる人はどうぞ

▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼
booth.pm

【EZ-FLASH OMEGA vs EverDrive GBA Mini】最強のGBA用フラッシュカートを決める

はじめに

高性能なGBA用フラッシュカートである『EZ-FLASH OMEGA』と『EverDrive GBA Mini』の2つについて紹介します。
カタログスペックは割とそっくりで、どちらを買った方が良いか分からないという人は参考にしてください。
結論から言うとハード的な取り回しの良さはEverDrive、ブートローダーの完成度はEZ-FLASHに軍配が上がります。
と言ってもEverDriveのブートローダーが悪いという訳でもないので、総合的にはEverDriveの方をおすすめします。
EZ-FLASHの方は新型であるDefinitive Editionなるものが出ていたりしますが、通常使用する分には機能面の大きな違いはないので今回は紹介しません。(持ってないだけ)

EZ-FLASHAliExpress、EverDriveの方は公式サイトから購入が可能です。
EZ-FLASH OMEGAは7000~8000円(Definitive Editionは11000円くらい)、EverDrive GBA Miniは15000円程で購入できます。

消費電力

消費電力と駆動時間についてざっくりと調べました。
使用状況によって左右するので参考程度にどうぞ。
IPS液晶にも色々種類があるのと、輝度設定などによってかなり消費電力が変わるのでその辺は本当にざっくりです。。。

消費電力(mA)
基礎消費電力(純正液晶) 90mA
基礎消費電力(IPS液晶) 160mA
純正カートリッジ 10mA以下?
海賊版カートリッジ 30mA
EZ-FLASH 110mA
EverDrive 60mA

駆動時間(純正液晶)

乾電池 エネループ 1700mAhリポバッテリー
純正カートリッジ 13.3時間 17.9時間 18.8時間
海賊版カートリッジ 10時間 13.4時間 14.1時間
EZ-FLASH 6時間 8時間 8.5時間
EverDrive 8時間 10.7時間 11.3時間

駆動時間(IPS液晶)

乾電池 エネループ 1700mAhリポバッテリー
純正カートリッジ 7.5時間 10時間 10.6時間
海賊版カートリッジ 6.3時間 8.5時間 8.9時間
EZ-FLASH 4.4時間 5.9時間 6.2時間
EverDrive 5.4時間 7.3時間 7.7時間

外観

EZ-FLASH

デフォルトのシェルカラーはクリアブラックです。

表面

裏面

基板表


通常のGBAカートリッジよりかなりコンパクトです。
専用のシェルを使用することでDS LiteGBAスロットカバーと同じサイズに収めることができます。
通常のカートリッジ基板と同様にタブ付き電池がハンダ付けされているため、交換にはハンダごてが必要です。

基板裏


XilinxのSpartanシリーズでしょうか?
マーキングが掠れていてよく読めません...。

EverDrive

表面

裏面

基板表



ボタン電池が交換できる仕様。
汎用のCR1220ボタン電池が使用可能です。

基板裏


こちらはLattice製ICE40シリーズのFPGAが載っています。

初期設定

EZ-FLASH

公式サイトから「Kernel X.XX and Firmware X.X」、「Cheat Library」、「Thumbnails Pack」の3つをダウンロードします。
それらを解凍して出てきたファイル・フォルダを全てMicroSDカードのルートにコピーし、EZ-FLASHに差し込んだらRボタンを押しながら起動します。


このような画面になって自動的にカーネルの書き込みが開始されます。
カーネルの書き込み中に電源を落としたりするとカーネルが破損し、以後同じ手順でカーネルの書き換えなどができなくなります。
破損した際のリカバリーはこちらを参照してください。
書き込みが完了するとブートローダーが起動して使えるようになります。

EverDrive

公式サイトから最新のOSをダウンロードします。
解凍して出てきた「GBASYS」フォルダをそのままMicroSDカードのルートにコピーし、EverDriveに差し込んだら使えるようになります。

ブートローダーの使い方

EZ-FLASH


ブートローダーのスキンを弄っているのでデフォルトのものとは異なります。
この画面でできる操作は以下の通りです。

Aボタン・・・選択
Bボタン・・・戻る
上下キー・・・ファイルの選択
L/Rボタン・・・タブの選択
STARTボタン・・・最近遊んだゲーム一覧
SELECTボタン・・・ゲームのサムネ表示


開発元が中国ということもあり、マルチバイト文字の表示にも対応しています。
少し怪しい所はありますが、EverDriveとは異なり動作不良を起こすようなことはありません。


ROMを選択するとこんな感じにメニューが開きます。
選択肢の詳細は以下の通りです。

Clean boot・・・起動
Boot with addon・・・アドオンを適用して起動
Write to NOR clean・・・NORフラッシュに書き込み
Write to NOR with addon・・・アドオンを適用してNORフラッシュに書き込み
Save type・・・セーブ方式を指定(基本AutoでOK)

アドオン

アドオンを適用すると以下の機能が使えるようになります。
不具合の原因となる場合もあるのでその際はOFFにしましょう。

ブートローダーに戻る
ステートセーブ/ロード
チート
スリープ


L+R+STARTを押すとこのようなメニュー画面が開きます。

QUIT・・・ブートローダーに戻る
SAVE・・・ステートセーブ
LOAD・・・ステートロード

L+R+SELECTを押すとスリープモードとなり、START+SELECTでスリープから復帰します。

また、これらのキー操作は改造GBAに搭載するモジュールの機能(クロックアップ、輝度調整など)と重複する場合があります。
その際は後述するブートローダー側のオプションからキーが変更可能です。

NORフラッシュ

フラッシュカートに直接ROMデータを書き込み、通常より高速にROMの起動ができるようになる機能です。
SDカードからの起動が遅かったりRAMのサイズが16MB(SDカードから32MBのROMが起動できない)だった頃の古い製品で対策として用意された機能なので、今使用するメリットは殆どありません。
サイズは64MBで、それに収まるサイズであれば自由にROMデータを書き換えて使うことができます。

オプション


RTCやアドオンの設定がこちらから行えます。

Time・・・RTCの時刻設定
Addon・・・使用するアドオンの選択
Language・・・ブートローダーの言語設定
Engine・・・高速パッチエンジンの有効化
Sleep key・・・スリープ状態に入るキーの変更
Menu key・・・QSQLメニューに入るキーの変更
Game RTC・・・RTCの有効化

EverDrive


デフォルトのEZ-FLASHと比べても大分シンプルです。
スキンの変更ができるかどうかは調べていませんがやっている人はいないような気がします...。
この画面でできる操作は以下の通りです。

Aボタン・・・選択
Bボタン・・・戻る
上下キー・・・ファイルの選択(1ページにつき15件のみ表示されます)
左右キー・・・ページの移動
STARTボタン・・・最後に遊んだゲームを起動
SELECTボタン・・・メニューを開く


EZ-FLASHと同様、ROMを選択するとこんな感じにメニューが開きます。
選択肢の詳細は以下の通りです。

Start Game・・・起動
Rom Info・・・ゲームコードなどROM情報の表示
Rom Settings・・・RTCの有効化、セーブタイプの選択
Hex View・・・バイナリデータの表示
Delete・・・ファイルの削除

EZ-FLASHのようなアドオン機能はありませんが、ゲーム毎にRTCの有効化を切り替えることができます。
とはいえRom Settingsの中身についてはゲームIDを参照して適切な項目が選択されるので、基本的には変更の必要はないかと思います。


バイナリデータの表示は割と謎機能ですが、適当なファイル名で中身が分からない場合はここから確認すれば何のゲームか判別することができます。


注意点として、名前にマルチバイト文字が含まれたファイルは表示・選択することができません。
平仮名・カタカナ・漢字が使用できないので日本語のファイル名は基本的に不可です。

メニュー

Options・・・オプションを開く
Recently Played・・・最近遊んだゲーム一覧
Start Random Game・・・ランダムにゲームを選んで起動
Device Info・・・カートリッジ本体の情報を見る
Diagnostics・・・システム診断を実行する
About・・・Everdriveについての製品情報を見る

オプション

Swap A/B・・・ABボタンを反転する
Quick Boot・・・ゲーム選択後のBIOS画面をスキップする
Hide GBASYS・・・GBASYSフォルダの非表示
File Sorting・・・ファイルの並び替え

使ってみた感想

両者共通の仕様は以下の通りです。

MicroSDカードに入れたGB/GBC/GBA/FCのROMを起動できる
全てのセーブ形式に対応
RTC対応
32MBのソフトが3秒程度で起動できる(昔の製品は16MBで1分ぐらい掛かっていました。。。)

EZ-FLASH

機能が多いのはこちらですが、SDカードの抜き差しがかなりしづらい印象です。
因みに後継のDefinitive Editionでもそのままです。
EZ4の頃はバネ式で使いやすかったのにどうしてこうなった...。

良い所

日本語のファイル名が使用できる
RTC設定から日時が細かく指定できる
アドオンを適用することでゲーム中にQSQLやスリープ機能が使用できる
NORフラッシュに書き込むことでゲームの高速起動が可能
DS LiteGBAスロットに収めることが可能

気になる所

消費電力がかなり高い
スロットがバネ式ではなく、SDカードの抜き差しがしづらい

寸法が純正カートリッジと少々異なり、差し込みが硬い
起動時にRボタンを押してカーネルを壊す事故が稀に起こる(リカバリーが面倒)
ボタン電池の交換にハンダごてが必要
長時間起動していると稀にフリーズする

Definitive Editionについて

EZ-FLASH OMEGAの後継となるフラッシュカートリッジで、以下の変更点があります。

セーブの安定性UP
振動機能追加
DSからのカートリッジアクセスに対応
ボタン電池がハンダごて不要で交換可能に
64MBのGBAムービーROMに対応
基板が大きくなり、DS Liteスロットサイズには収まらなくなった(使用自体は可能)

EverDrive

ブートローダーの見た目通り、ソフトの機能自体も実用性のあるものに絞られている印象です。
ハード面については寸法がしっかり純正に合わせられていたりSDカードの抜き差しがEZ4以上にしやすい仕様だったりと、使う側の目線に立って作られている感じがします。
但し高いです。。。。

良い所

カートリッジを抜かずにSDカードの抜き差しができる
カートリッジを抜き差しする際の感触が純正カートリッジとほぼ同じ
初期設定が簡単でROMの書き換えを行う操作がないため、カーネル破損などのリスクがない
ハンダごて要らずでボタン電池の交換が可能(汎用のCR1220ボタン電池をソケットに差し込めばOK)
機能はEZ-FLASHに劣るが、必要なものは押さえているので実際はほぼ気にならない

気になる所

価格が高い
日本語のファイル名が使用できない

まとめ

冒頭に書いた通りどちらも高機能なフラッシュカートですが、機能と使いやすさのどちらに重点を置くかで評価が変わる感じがしました。
ハード面の使いやすさであれば圧倒的にEverDriveかと思いますが、ブートローダーの機能自体はEZ-FLASHの方が多いです。
但し、ブートローダーは後からアップデート可能というのを踏まえると機能面の差は今後埋まる可能性があるため、個人的な最強GBA用フラッシュカートは「EverDrive GBA Mini」とします。

結論:両方買う
理由:EverDriveが買えるならEZ-FLASH追加購入は誤差なので

【Pokémon Past Generation Advent Calendar 2023】検索処理高速化メモと自動化関連のアレコレ

概要

この記事はPokémon Past Generation Advent Calendar 2023 20日目の記事です。
勢いで登録したのでネタはあんまりありません!
SVで乱数調整ができなくなってしまったので仕方ないね。
ツールの高速化メモだけでも良かったのですが、自動化関連のことに関しても一応書きました。

乱数調整ツールの高速化メモ(基本)

アルゴリズムを云々とかプログラムの書き方を云々とかやることは色々ある気がしますが、手っ取り早く速くできるのはここら辺です。

・並列化
SIMD
GPGPU

それぞれについて雑に纏めます。
1日目に夜綱さんが書いてたのとほぼ丸被りだけど許して。

並列化

コアが多ければ多い程速くなります。
精々4コア程度しかなかった昔ならいざ知らず、現代では10コアとか16コアとかのCPUが当たり前のように売られているので、これをするだけで劇的な高速化が見込めます。

並列化する際、スレッド数やコア数に合わせてスレッドを立てるのが一般的な気がしますが、結局最後の1つが計算完了するまでは処理が終わらないので大量にスレッド立てて1つ当たりの計算量を落とす方が速くなることが多いです。(環境によって違うかも?私の環境ではそうでした)

バグの温床になり易いですが、別スレッドで同じ領域のメモリを参照しないようにするということだけ意識しておけば大体避けられます。

あと、並列化していてもループの中で新規メモリ確保とかやってるとCPU使用率が伸びません。
普通のループ処理でもここがボトルネックになり易いので配列とかは先に宣言するようにしましょう。

SIMD

何か最近一部の乱数勢がこれで遊んでたような気がします。
私が2020年頃に作っていた5genSearch、6genSeedSearchでこれを使用しています。(6genSeedSearchの方はかなり適当なのでまだまだ詰められると思います、詰められました)

CPUの種類によって使えない命令、ほぼ意味のない命令があったりと中々クセがありますが、上手くいけば並列化と同等の高速化が見込めます。
並列化と同時に使えるので愚直に書いた時と比べて数十倍単位で計算時間が詰められる場合もあります。気持ち良い!

GPGPU

前述した2つはCPUで計算させる場合のテクニックですが、GPUに計算を丸投げするやり方もあります。
私のツールだとSW Seed Calculator(剣盾レイド乱数ツール)でこれを使用しています。
他の方が制作しているレイド乱数ツールでもこれが使われているものが多いですね。
こちらも中々クセがありますが、ちゃんと実装できればCPUだと数分掛かるような計算をほんの数秒で完了させたりもできます。
本当にちゃんと計算できてるのか不安になるレベルですね。気持ち良い!

ここではGPGPUと括っていますが、これにもCUDAとかOpenCLとか色々種類があるようです。
一般的なのは今挙げたCUDAとOpenCLで、対応しているGPUやそもそもの仕組みに結構違いがあります。
乱数調整ツールで使うくらいの用途なら取り敢えずCUDAだけ使えれば問題はないと思います。

乱数調整ツールの高速化メモ(応用)

先に挙げた3つ程の効果はないですが、多少手間が掛かってもいいからもっと速くしたい!という場合に使えるかもしれないやつです。
応用と言いつつしょーもない内容です。おまじないレベルのものもあります。え?と思ったら参考にしない方がいいです。

・ネイティブ言語で書く
・計算結果のキャッシュ
キャッシュメモリを意識した配列アクセス
・それでも満足できなければ全部アセンブリで書く

ネイティブ言語で書く

読んで字の如く、C#やらPythonやらは捨てましょう。
CPUが直接実行できないプログラムは全部雑魚です。
メインの計算処理だけネイティブライブラリにして .Netアプリケーションとかで叩くのが丸いです。

計算結果のキャッシュ

今までは「高速化」を目的としましたが、「そもそもの計算量を減らす」ことでも同じような結果が得られます。
無駄な計算処理はとことん省きましょう。
応用に入れてますが普通にこれも基本テクだと思います。
コンパイラが勝手にやってくれれば嬉しいですが、意外とアテにならないので自分でやりましょう。

キャッシュメモリを意識した配列アクセス

これも頭の片隅に入れておくと使える場面が来たときに気持ちよくなれます。
こちらもコンパイラが勝手にやってくれれば嬉しいですが、やっぱりアテにならないので自分でやった方がいいです。

それでも満足できなければ全部アセンブリで書く

ある程度慣れてくると、Cでコーディングしている最中にコンパイル後のアセンブリが頭の中に浮かんでくるようになります。
コンパイラが信用できなくなったあなたは我慢できずに直接アセンブリを書くようになるでしょう。

自動化関連のアレコレ

冷静に考えたら去年のアドベントカレンダーで書きたいこと大体書いてました。
blog.bzl-web.com

CH552マイコンボードの供給状況について

もうBoothで公開してから1年くらい経ってますが安定して供給できています。
部品の在庫切れの心配も今の所ないです。
あと専用のケースが綺麗に閉まるようになりました。パチッとはまるので気持ち良いです。
bzl.booth.pm

初期設定も今まで使っていたマイコン等と比べてかなり簡単な上、コストもかなり低いのでPC経由で操作するタイプの自動化に関してはこれ使っておけば色々楽だと思います。
PCから操作する場合であっても以下の動画の通りそこそこの精度が出せるので、殆どのプログラムが置き換え可能だと思います。
NXやポケコンのプログラムであればそのまま使用可能なので、互換性周りの心配も殆ど要りません。

RP2040、強い

最早自動化全く関係ないですが、RP2040を使用したコントローラー基板を作りました。
bzl.booth.pm
有志の検証によるとRP2040を使用したコントローラーの遅延は他の純正機器と比べてもかなり少ないようです。

自動化に使えば今まで以上の精度での操作ができる...かもしれませんが、多分環境差異の方が大きいです。
スペックに結構余裕があるので他のマイコンではちょっとギリギリだったプロコンエミュレートも難なくこなせます。
色々やってたらジャイロの制御とかもできるようになったので、そこら辺の自動化もいつかやってみたいですね。

あとがき

多分間に合ってないですが一応書き切ることができました。
21日目の記事は麻さんの『3世代ポケモンを快適に遊ぼう!ヒミツノバで購入したGBAレビュー』らしいです。
カスタムGBA関連も最近は色々変なパーツが出ているので久しぶりに何か作ろうかな...