GBS-Control 技適問題なく、なるべく安く

自分用メモです。そういうことにしておいてください。

序章

 アーケードゲーム基板や古の家庭用ゲーム機、オールドパソコン等様々な分野で利用されている海外製アップスケーラーであるGBS8x00シリーズですが、ここ数年GBS-Controlなる代替ファームウェアが流行しています。(私も、2020年頃に知人から教えてもらいました。)

 私が関わっている気がする某所の録画設備などでは、あまり使用していません。が、コストパフォーマンスを考えると2024年9月末現在でも前述の用途ではかなり良い選択肢であると思います。

 そのため、このファームウェアを使用した様々な派生商品が存在しています。

 しかし、これらは正直なところかなり値段が「盛られている」ため、今回はなるべくやす~く、かつ技適問題もなく使えるようにしていきます。

 また、上記完成品よりは安い、GBSボード上の制御部へソケットで直接嵌合するモジュールも販売されているようですが、値段を考えるとトータルでは上記の完成品と大差なくなってしまいます。後述のWiFi問題の関連で公式Wikiから非推奨とされている方式ですので、今回はパスして自作していきます。

コスト重視で安く仕上げたい

 ゴールとしては、今回はナムコSystem 2×6基板の15kモードを現代のLCDへ映す目的で調整していきます。なお、GBS-ControlのWeb UIは後述の問題でまともに使えません。今後の課題ですね。

 さて、公式Wikiに記載のあるESP8266搭載ボードは技適の問題があるため、別のものを探すことになります。

 せっかくコスパよいボードを使うのですから、ここはなるべく安く行きましょう。ESP8266搭載品ということでESP-WROOM-02Dを使用します。記事公開時点でまさかの300円台です。やっす。

 こちらのモジュール、Flashの容量が公式で使用しているものの半分(2MB)しかありません。
 今回のゴールに必要な機能は動きましたが、付加価値であるOTA等は恐らく動かないでしょう。※どうせ無線は使い物にならないからいいかなって・・・。

ピンアサインの変更

Arduino IDEにて、ボードとしてGeneric ESP8266 Moduleを選択します。

GBS-Control公式のコードのままではピン指定の差分によりコンパイルが通りません。

以下にフォーク版を作っています。適当に活用してください。(最新への追従は保証しません)

https://github.com/ntsklab/gbs-control

Arduino IDE設定

 書き込み設定は以下です。Flash sizeの指定はハイライトしているものを、Crystal Frequencyは26MHz、Reset Methodはno dtrまたはその下のno sync的なやつを選びましょう。他は公式手順通りです。(適当でもある程度動くと思う

ハードウェア組み立て

 ピンアサインは以下です。ESPの電源は適当にボードの3.3vなどから取ってください。配線材は適当にGBSボードに付属してくる電源線とかを切って使いましょう。
 コストカットなのか、中の導体部が被覆のサイズと比較して謎に細いため、結果としてESP-WROOM-02Dへのはんだ付けがかなりやりやすいです。低品質を逆手に取っていく。
 UEWとかよりはんだ付けしやすいので、ピッチの割には楽なんじゃないかなと思います。

To GBS
SDA : IO4
SCL : IO5
Debug : IO16

Etc
EN : Pull Up
RST : Pull Up

以下2つはオプション(めんどいので試してない。)
To OLED
SDA : IO2
SCL : IO12

To Rotary Encoder
A : IO14
B : IO13
Push : IO0

 ESP8266は起動時/reset時にいくつかのピンの状態を読み込み、ブートモードを変更します。今回は、それぞれ以下の通りとします。

IO15 : Pull Down固定
IO0 : Hi-Z or Pull Up(flashから起動)/ GND(flashへ書き込み)
(R/Eを実装する場合、内蔵ボタンでboot切り替えが実現可能。R/Eを実装しない場合は適当にタクトスイッチつけるなりしてください。今回は適当なワイヤを一時的にはんだ付けしました)
IO2 : Pull Up固定(このピンはOLEDを実装する場合、ソフトウェアSDAとしても使用されます)

よしなに線をつなぎます。

書き込みと起動

IO0をGNDへ落としながら電源投入
→Arduino IDEから書き込み

以上で完成です。IO0をGNDから外し、GBSボードの電源を再投入します。
繋いだままのシリアル通信へ、「GBSボードと会話できませんよ」的なエラーが出なければOKです。

 全機能のチェックはしていないですが、上記対応+公式WikiにあるハードウェアMod(C11除去)でSystem 2×6の映像はしっかりと映るようになりました。
 Flash sizeの指定が公式と違ったことから分かる通り、恐らくWebUI経由のOTAは動かないでしょう。試してませんが。

Post by @nt776@sv1.in-deep.blue
View on Mastodon

WiFi、WebUIについて

 映像機器を繋がずにスマートフォンなどからssid: gbscontrolへ接続、192.168.4.1等へアクセスすればWebUIが無事表示されるはずです。

 しかし、その状態でGBSボードへ目的のゲーム機などをつなぐと、途端にWebUI右上に赤いWiFi切断マークが表示されてしまいます。

 公式Wikiによると、NTSC信号を処理する際に出るノイズがESP-WROOM-02Dが用いている2.4GHz帯へ悪影響を与えているようです。(こわ。)
 GBSボードからモジュールを離す、WiFiチャンネルを変更するなどで解決できるとありますが、少なくともこちらの手元では全く解決していません。

 そのため、解像度の設定や画像位置周りなど、調整に少し苦労することになります。ゲーム機などをGBSボードから外すと操作が効く+外して少しの間はGBS-ControlファームがSyncを受けている(と思っている)状態が続くため、その状態を利用して解像度変更等を行うことになるかと思います。

 また、代替手段としてシリアルポート経由である程度設定変更を行うことができる?ようです。こちらはドキュメント化されていないので、今後もし必要になった調査予定です。

今後

基板起こして適当にJLCへ発注したので、これがうまく動けば某店でも活用していきたいですね。

Post by @nt776@sv1.in-deep.blue
View on Mastodon

 また、ESP-WROOM-02Uを使用すれば、アンテナが外付け化ができます。もしかするとWiFi問題はこれで解決できるかもしれませんね。(コストはちょっと上がりますが。。)これも今後、試してみたいです。