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

チラ裏雑記帳

ポケモン過去作の解析とか乱数調整とかそこら辺。不定期更新。

このブログについて

ポケモン第三世代を中心に真偽不明の情報や、作成したツールを纏めたりするブログです。
殆どが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

ポケモン改造ツール

自作品

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

プロコン型のコントローラー基板
更新後に挙動が怪しくなった場合は設定リセットすると大体解決する気がします

ファームウェア
バージョン 更新日 更新内容 DL
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


コンフィグツール
バージョン 更新日 DL
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

注意事項

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

【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関連も最近は色々変なパーツが出ているので久しぶりに何か作ろうかな...

FireBirdコントローラーの取説みたいなやつ

概要

結構前に作ったコントローラー基板FireBirdについて機能説明を殆どしていなかったのでざっくりと纏めます。
この記事に記載している機能は現時点での最新基板(v2.0)・ファームウェア(v2.01)のものです。

実装している機能・特徴の一覧

FireBirdコントローラーに実装している機能です。

Ginfull製ホールセンサースティック搭載

理論上ドリフトが発生しない、磁気で入力値を読み取るホールセンサースティックという部品を使用しています。
ホールセンサースティックにも色々な種類があり、主にGulikit、K-Silver、Ginfullといったメーカーがプロコンスティックの形状に互換のあるものを販売しています。
Gulikit製のスティックボックスはK-Silver製のOEM品と見られ、ホールセンサー周りの設計のみ自社で行っているようです。
Gulikit製、K-Silver製のスティックは純正プロコンで使用されているアルプス製のスティックより若干背が高く、耐久性に関しても劣る部分が見られたため、FireBird v2からはスティック自体の耐久性も大幅に向上したGinfull製のスティックを採用しています。

跳ね戻りフィルター搭載

スティックを弾くような操作を行った際、反対側にも入力が入ってしまう「跳ね戻り」という現象を抑制する機能です。
スティックの加速度等を監視して弾き入力を検知し、反対側の入力に対してフィルタリングを行います。
純正コントローラーを改造する跳ね戻りフィルターとは異なり、跳ね戻りと関係のない入力はそのまま操作に反映されるため、弾き入力の出やすさといった操作感の差異はそれらと比べて小さくなります。

高精度スティックキャリブレーション

スティックのスケーリング処理をかなり細かく行い、スティックを回す操作を行った際に綺麗な真円が描けるようになっています。
内側・外側のデッドゾーンの広さも調節可能です。

純正プロコンと同じ精度のジャイロセンサーを搭載

純正プロコンでも使用されているものと同じジャイロセンサーを搭載しています。
制御方法も純正プロコンと同じ方式なので、有線であることを除けばほぼ変わらない操作感で遊べます。

HD振動対応

プロコン型の互換基板で恐らく初めてHD振動に対応しました。
Switchで使用可能なコントローラーとして見ても、純正プロコンと同じモーターを使用してHD振動を再現したものはこれが初だと思います。
GulikitのKK3など、HD振動に関連する通信内容を読んで振動強度の調整を行っているものはありますが、実際の感触は大きく異なります。
ジョイコン/プロコンで使用されているアルプス製のハプティックリアクタが使用可能です。
また、ジョイコン用のモーターであればハンダ付け要らずでコネクタ接続が可能です。

USBデバイスモードを選択可能

XInput/DirectInput/SwitchプロコンといったUSBデバイスとしてPCやSwitchに接続することができます。
PCとSwitchで別々のデバイスモードを割り当てることができるため、PC接続時はDirectInputでSwitch接続時はプロコンといった使い方も可能です。
XInput/DirectInputでPC接続した際はポーリングレート1000Hzで動作するため、Switchプロコンの形状に違和感がなければPC用ゲームパッドとしての性能も悪くないかと思います(参考程度に、Switchプロコンは125Hz、PS系の純正コントローラーは250Hzで動作しています)。

RETRO-Cケーブル対応・FC/SFC/N64/GCの自動識別が可能

RetroSix、HandHeldLegendによって開発されているRETRO-Cケーブルに完全対応しています。
また、ハードウェアの自動識別機能も実装しているため、文字通り挿すだけで動きます。
ハードウェア毎に最大5種類のキーコンフィグを設定可能です。

ボタン・スティックLED搭載

各ボタンをフルカラーLEDで光らせることができます。
他の互換基板に搭載されているLEDと比べて薄いものを使用しているため、ラバーにLEDが干渉して操作感が変わるといった問題の対応も行っています。
単色だけでなく、ゲーミングデバイスによくありそうな様々なエフェクトで光らせることが可能です。

十字ボタンの誤反応対策

ゲームボーイ等のレトロハードで使用されているボタン接点の形状を参考にしてパッドの形状を見直し、純正プロコン等でも発生していた「単純な上下左右の操作が意図していない斜め入力に化ける」といった症状が起きづらくなっています。
Switchでゲームを遊ぶ際はそこまで気にならないかもしれませんが、RETRO-Cケーブル等でスティックが存在しない時代のゲームを遊ぶと斜め入力の誤反応は大きなストレスに繋がります。
但し、誤反応の起きやすさはラバーやボタンによって変わる部分なので、全く起きないことを保証することはできません。
純正のボタンとラバーを使用する分にはまず問題ないと思います。

純正ボタン基板との互換

使用する方は殆どいないかと思いますが、純正プロコンのボタン基板をそのまま使用したりFireBirdのボタン基板を純正プロコンで使用したりすることも可能です。
LED周りは動かないのでその点はご了承ください。
その為、eXtremeRateのLEDキットや背面パドルをFireBirdで使用することも可能です。
背面パドルとFireBirdのボタンLED制御を同時に使用することは基本的にできませんが、ここに関しては将来的に対応を検討しています。

ABXYボタンのマウスクリック化対応

ボタン基板にマウスクリック用のパッドを配置しているため、GCコン改造でよくある(?)ABXYボタンマウスクリック化を行うことが可能です。
ボタンの加工は少し大変だと思います。

ハードワイヤリング対応

コネクタに負荷を掛けたり激しい動きを続けたりした際にコネクタの接点部分が劣化し、接続切れという症状が発生する場合があります。
こちらはアルコール洗浄で一時的に改善することが殆どですが、同じような使い方を続けていれば再度発生してしまうため、根本的な解決は困難です。
この場合、基板とUSBケーブルを直接接続する「ハードワイヤリング」という改造を施すことでこの問題を解決することができます。

トーナメントモード

+/-/ホーム/キャプチャ/十字キーの無効化を行う機能です。
ホームボタン長押しでトーナメントモードのON/OFFが切り替え可能です。

スティックキャリブレーション

初期状態ではスティックのキャリブレーションが一切行われていない為、使用できるようにするにはコンフィグツールでこの設定を行う必要があります。
ツール上の『スティックキャリブレーション』を選択してキャリブレーションを開始します。

後はツール上の手順に従ってスティックの操作を行います。
初期状態では青い丸が動きませんが仕様です。




入力角度の誤差補正

八角ゲートのシェルを使用している場合は『入力角度の誤差補正』も使用した方がいいかもしれません。
ゲートに合わせて入力していても入力値が↓の画像のようにズレてしまう際に補正を行う機能です。

こちらもツール上の手順に従ってスティックを操作すると補正が完了します。


跳ね戻りフィルター

スティックの跳ね戻りを抑制する機能です。
左右のスティックを弾くと弾いた瞬間の入力値がビューアに表示されます。
スライダーを右に動かすとフィルターの強度を上げることができます。
基本的には3くらいで十分だと思います。

USBデバイスモード

PCやSwitch等の機器に接続した際、どのようなUSBデバイスとして認識されるかを変更することができます。
また、特定のボタンを押下しながら接続すると任意のモードで接続することが可能です。
何もボタンが押されていない際はコンフィグツールで設定したモードで接続します。

以下は使用できるモードの一覧です。
・Switch Proコントローラー
・XInputコントローラー
DirectInputコントローラー
GCコントローラ接続タップ


Switch Proコントローラー

おすすめ
Aボタンを押しながら接続
ポーリングレート:125Hz

Switchのプロコンと同じ方式で接続します。
振動の制御やジャイロセンサー等、有線プロコンで利用できる機能は一通り使用可能です。
振動の感触は純正とは異なりますが、ジャイロセンサーは純正プロコンと同じセンサーを利用しているため、ケーブルさえ気にならなければほぼ同じ感覚で遊べると思います。
純正プロコンで起こる有線接続時の遅延は発生しない為、GCコンやホリコンに近い感覚で使用できます。

DirectInputコントローラー

おすすめ
Bボタンを押しながら接続
ポーリングレート:1000Hz

殆どのPCゲームで使用可能なモードです。
コンフィグツールも動くので一番安定している説はあります。

XInputコントローラー

Xボタンを押しながら接続
ポーリングレート:1000Hz

稀にXInputしか対応していないゲームがあるので、その際はこちらを使用すると良いと思います。
XInputしか対応していないソフトよりもDirectInputにしか対応していないソフトの方が遙かに多いので、基本的にはDirectInputを使用する方が良いかと思います。
バイスとしての仕様上このモードで繋がっているとコンフィグツールで認識しません。
とはいえコンフィグツール使うのは初期設定時くらいなのであんまり問題にはならないかも?

GCコントローラ接続タップ

Yボタンを押しながら接続
ポーリングレート:125Hz

GCコン接続タップに繋がったGCコンとして認識します。
これを使用するケースは殆どないと思います。
ドライバによってはコンフィグツールで認識しません。

ファームウェア書き込み

左スティックを押し込みながらPCに接続すると『RPI-RP2』というドライブが認識されます。
ここに『FireBird vX.XX.uf2』(X.XXの部分はバージョンによって異なります)という名前のファイルをドラッグ&ドロップ等で書き込むとコントローラーとして再接続されます。

ドライブ認識時は基本的に新しいウィンドウが立ち上がりますが、ウィンドウが出てこない場合はエクスプローラーのドライブ一覧から直接開いて書き込んでください。


よくある質問

スティックが動かない
勝手に入力が入る
スティック入力が反対方向に入る

スティックのキャリブレーションをしていないことが原因です。

接続が切れる

USBポートの劣化・汚れが原因です。
接点洗浄剤を吹き付けるか、それでも改善しない場合はハードワイヤリングを検討してください。
ハードワイヤリングを実装した個体において、ドック側のUSBポート以外が原因で接続切れが発生した報告はありません。
ポートの劣化は使用環境や操作方法等に強く依存するため、基板買い換えで解決を図るのは推奨しません。(恐らくすぐに再発してしまうかと思われます)

ファームウェアの書き込みができない

何もボタンを押さずにPCやSwitchに接続してコントローラーが認識されるのであれば、ファームウェアの書き込みは成功しています。
ブートローダーのストレージに書き込んだファイルが再接続時に見えないのは仕様です。

USB接続で発生する遅延が不安

純正有線プロコンに遅延が入ることから、USB接続=遅延があると考えている方が一定数いますが、これは厳密には異なります。
遅延の原因はコントローラー内部でキー入力情報を取得してから送信するまでの処理にあり、純正プロコンの場合はここで1Fの遅延が生じています。
純正プロコンはキー入力情報の取得を含むほぼ全ての処理を無線チップで行っており、有線接続時のみUSB通信処理を別のチップで行う仕様となっています。
そのため、無線チップからUSB通信用のチップにキー入力情報などを送信する必要があり、ここで1Fの遅延が生じているという訳です。
USB通信処理を含む全ての処理を1つのチップで行っているFireBirdでは上記問題は発生しません。

無線接続ができない

有線接続のみに対応したコントローラーとなるため、無線接続はできません。
また、今後無線接続に対応する予定もありません。
ProGCCの無線接続対応版が出ていることから気になっている方も多いかと思いますが、現状では充電が2-3時間ほどで切れてしまう、技適違反の無線チップが採用されているといった問題点があります。
後者に関しては工事設計認証を取ることで解決できますが、消費電力が純正プロコンの容量に見合わない問題は残るため、費用に見合う機能と言えるかは怪しい所です。
真面目に対応するなら純正プロコンの無線ICをベースに設計し直すのが一番良さそうですが、現実的ではなさそう...

おまけ

LRボタンのマウスクリック化に関しての質問が最近増えてきたので、私が製作する際に使用していたデータを置いておきます。
プリントしたプラグをLRボタン裏の穴に差し込んで使用します。
使用するプリンターやフィラメント等の相性によっては上手くいかない可能性もありますが、その辺は上手く調整して使ってください。
https://bzl-web.com/file/3d/firebird_d2ls_lr.stl

ABXYボタンのマウスクリック化に関してはボタンの高さをどうするか、遊びをなくすかどうかによって手順が結構変わってきます。
ボタン側の大幅な削り加工が必要になるケースもあるので、こちらに関しては気合でなんとかしましょう。

【Nintendo Switch】格安マイコンCH552でポケモンの自動化をしてみたい話

この記事は、Pokémon Past Generation Advent Calendar 2022 12月25日の記事です。
ポケモンの自動化と言っていますが、ポケモンの話は殆どしていません...。
adventar.org

概要



先月発売されたポケットモンスタースカーレット/バイオレット(以下SV)において、一部の海外勢によって早速解析が行われたものの、とある理由により乱数調整が基本的にほぼ不可能であることが確認されました。
www.reddit.com

まあ正直こうなることはある程度予想できたので、SVでは自動化による作業効率化が流行るのかな~と発売前から考えていました。
PCからSwitchを自動化するのが一番楽だと考えていますが、機材を整えるのが結構面倒です。
Bluetoothドングルを使用して自動化することも可能ですが、環境によって遅延やペアリング不可等の症状が発生する場合があったり、最近出回っているドングルの多くはそもそも対応していなかったりと少し問題が多かったので、今回は有線の環境にも目を向けることにしました。
その為、自分でマイコン+シリアル変換モジュールを実装した有線通信用の基板を作ってみようかと思い付きました。

採用するマイコンについて調べる



Amazonでなんとなくマイコンの価格を調べた所、昔1000円くらいで買えたはずの互換ボードが3倍以上に値上がりしていることが判明。

400円程度で買えたProMicro互換ボードも約1400円という有様でした。

調べた所、そもそも使用されているチップの供給が安定しておらず、チップ自体の価格が高騰しているような状態でした。
ATmega系のマイコンは殆どが供給が安定しておらず、元々原価ギリギリで売っていたような互換ボードはチップの高騰に合わせて値段を上げざるを得なくなったようです。
発売から結構な年月が経っているのもあって、そもそも価格や供給が今後安定するのかどうかもよく分かりません。
実際、製品に使用するマイコンチップをATmega系マイコンから他のものに乗り換えたという話も聞く中で、新たに作るものにこれを採用するのはちょっと無いなという感じです。
某中華通販サイトでチップ単体購入すると偽物ばかり届くという情報もあった為、できることなら代替品となり得るマイコンを見つけておきたいと考えました。
その中で候補となったのは以下の2つです。

Raspberry Pi Pico (RP2040)

最近電子工作界隈でよく見掛けるマイコンボードです。
ProMicro互換品以下の価格でチップ自体の供給もかなり安定している為、用途によってはこちらに乗り換えていくことも可能そうです。
おまけに価格の割にチップの性能が異様に高いです。
等速で動作するGBエミュレータ等も作れるくらいには高性能なマイコンです。
Switch自動化程度であればそこまでチップの性能は必要としないので、少々オーバースペックなのは否めません。
Raspberry Pi Pico — スイッチサイエンス

CH552

Raspberry Pi Picoと同時期くらいに中国で発売された怪しいマイコンです。
新しめの中華製品等を分解すると時々見掛けます。
現在購入できるUSBマイコンの中ではぶっちぎりでチップの価格が安いです。
供給されている数も他のマイコンより圧倒的に多いようなのですが、国内ではこちらを使用しているボードを販売している所が殆どありません。
私がこのマイコンを調べ始めた時点ではスイッチサイエンスで個人の受託販売品が扱われているのみでした。
ProMicroCH552 — スイッチサイエンス

開発ボードが少ないという点でCH552は少し敷居が高いように感じましたが、元々自分で基板を作る予定だったのでプログラムさえ一度出来上がってしまえばあまり関係がありません。
PCからマイコン経由で操作する場合、マイコンは中継器でしかないので一度決められたプログラムを書き込んでしまえばそれ以降は何も弄る必要がないのです。
国内で買う場合でもそこまで高くはなかったので、ダメ元で上記のProMicroCH552を購入しました。

商品の到着後、早速プログラムを書いてみた所...


ものの1時間程度で実際に動くものができてしまいました。
チップの価格がちょっとあり得ないので正直あまり期待はしていなかったのですが、シリアル通信等色々検証してみても今まで使ってきたマイコンと同等の役割は果たせそうだった為、設計する基板にはこちらのチップを採用することに決めました。

シリアル変換ICを選定する



次はシリアル通信を行うチップの選定についてです。
現在出回っているシリアル変換ICは大体以下の3つです。

FT232RL

FTDI製のシリアル変換ICです。
発売されたのが15年くらい前だったりするので実は滅茶苦茶古いICです。
チップの供給がどうなっているのかは不明ですが、単価は発売当時よりかなり上がっているようです。(多分10倍くらい)
偽物が大量に出回っているので、現在これを採用するメリットは皆無です。
FTDI製に拘る場合はもう少し新しい製品を採用した方が絶対良いですね。
また、Amazonで販売されているシリアル変換モジュールでこれが採用されているものはほぼ偽物が使用されていると考えた方が良いです。
明らかに高価なものに関しては本物が使用されているかもしれませんが、購入する際は自己責任でお願いします。

CP2102N

シリアル変換モジュールで調べるとこちらが使用されている製品も多いです。
こちらに関しては偽物はほぼ見掛けませんね。
Amazonでシリアル変換モジュールを探す場合の安定択だと勝手に考えています。

CH340

CH552と同じメーカーから発売されているシリアル変換ICです。
安物のArduino Uno互換品(自動化には使用不可)で使われているので少しマイナスイメージがありそうですが、性能自体には問題ありません。
こちらが採用されたシリアル変換モジュールもAmazonや某中華通販サイト等で結構見掛けます。
モジュールでの価格はCP2102Nと同じくらいですが、チップ自体の価格はこっちの方が安いです。
価格が安く、外付け部品も殆どいらない上にマイコンとメーカーを揃えるのが少し面白そうなのでこちらを採用することにしました。

基板を設計してみる



実際に動作するプログラムさえできてしまえば後は適当に回路を書いて基板と部品を発注するだけです。
所詮はデジタル回路なのでノイズだとかそこら辺はそこまで考えずに組んでしまっても普通に動作するはずです。

そんな感じで発注したものが届いたら組み立てて動作確認を行います。
あっさりと書いていますが基板や部品が到着するまでに結構な時間が掛かってます...。

調子に乗って3Dプリンタでケースも作ってみました。
3Dモデリングは1度も触ったことがありませんでしたが、意外と簡単に作れて良かったです。(小並感)

公開したプログラム・基板


NX Macro Controller / Poke-Controller用ファームウェア

名前の通りです。
CH552-SERIALとかそこら辺に書き込んで使います。
github.com

CH552用Nintendo Switch自動化ライブラリ

NintendoSwitchControllみたいな記法でマクロを書けるライブラリです。(完全な互換性はありません...。)
github.com

CH552-SERIAL

CH552とシリアル変換モジュールを合体させた基板です。
これとダイソーとかに売ってるType-Cケーブルがあれば簡単に自動化ができます。
bzl.booth.pm

CH552-MCU

CH552単体の基板です。
CH552搭載基板はタクトスイッチを押しながらUSB接続を要求するものが多いですが、何度もやってると指が痛くなるのでスライドスイッチに変更したものを作りました。
USBデバイスエミュレートのプログラム開発時のデバッグ用基板として意外と使えました。
booth.pm

あとがき



ここまで読んでくださってありがとうございました。
SVでは乱数調整が難しそうなので、自動化の方面に力を入れて何かできたらなと考えています。
取り敢えずは昔公開したNX Macro Controllerの機能拡張とかそこら辺をメインに頑張っていきたいですね。
Poke-Controller用に書かれたPythonプログラムの実行、変数・IF文等の追加やC#スクリプトの実行機能等、考えていることは結構ありますが時間の確保が中々難しいです。
年末年始で一気に作業を進めて更新ができたら嬉しいですね。

また、CH552でプロコン+キーボードのエミュレートが可能ということも確認できている為、諸々検証を進めて問題がなさそうであればそちらも更新したいです。
振動検知等は現状無線でしかできなかった為、有線でもそれができるようになるかもしれません。(後はコントローラーの色の変更)

以上で今年のAdvent Calendarは終了です!
皆様、良いお年をお過ごしください。

【Nintendo Switch 自動化】画像認識を使用したマクロ実行環境の構築

私の製作したマイコンボードCH552-SERIALを使用して、NX Macro ControllerやPoke-Controllerの実行環境を構築する為のガイドです。
従来のマイコンとシリアル変換モジュールを配線する方法より多分安価で簡単です。
ハード側の環境構築のみになりますので、各種ソフトのインストール等はそのソフトのガイドを参照してください。

必要なもの


プログラムの書き込み



こちらから「CH55xSwitchSerialControl.ino.hex」をダウンロードします。
github.com

こちらからWCHISPToolをダウンロードします。
最新版でUIが大幅に変更されましたが、動作が不安定なので旧verのダウンロードリンクを載せています。
Download

「WCHISPTool_Setup.exe」を起動し、WCHISPToolをインストールして起動します。
また、起動後は画像の通りに設定を変更します。
「User File」は先程ダウンロードした「CH55xSwitchSerialControl.ino.hex」を参照するようにしてください。

CH552-SERIAL基板上のスイッチを押しながらType-Aオス端子側をPCに接続します。

WCHISPTool側に「MCU mode:CH552」といった表示がされたら、その下のDownloadボタンを押します。
特にエラーが出なければ書き込みは成功です。

以上の手順でNX Macro ControllerやPoke-ControllerでのSwitch自動化に使用できるマイコンが作成できます。
CH552-SERIALのType-Cメス端子とPCを接続し、Type-A端子をSwitchに接続すれば配線は完了です。

使用する自動化ツールのガイドに合わせてPC側の設定を行い、Switch側での動作が確認できれば導入は成功です。