[ベクタースキャン] LLMでVectrexエミュレータを作ってみる

本件、どちらかというとコーディングエージェントの話です。

ちょっとやってみたいことがあってVectrexエミュレータを作れるかAIに相談したら「Pythonで行けるよ」と言われたのでClaude無料プランで壁打ちを始めたのが一週間くらい前のこと。しかし無料プランはすぐにリミットを使い果たす。Claude Codeを使ってみたかったので先週金曜日にお試しでProプラン(外税$20)を課金してみた。

Claudeは5時間ごとの区切りでレートリミットがあり(使わない場合でも溜まるとかはない)、さらに一週間の区切りで別のリミットがある。この5時間ごとのレートリミットが厳しくて、Claude Codeはプロンプト一発で30分くらい悩んだ末にリミットまで使い切ってしまうことも珍しくない。「Claude CodeはMAXプラン(外税$100から)じゃないと使い物にならない」と皆が言ってた理由を思い知る。

CPUと表示・音声・コントローラ周りを制御するVIA周りの最低限の部分は割とすぐ動いたのだが、画面描画が全然ダメで滅茶苦茶な絵しか出ない。そこから正しく描画させるのにめちゃくちゃ苦労する。他エミュレータのソースとかも参照させてみる。

Anthropicから「色々ゴタゴタがあったので課金枠をプレゼントするよ」って出てProプランだと$20.0分の枠をくれた、この追加分は通常のレートリミットとは別に使えるのだが早々に使い切ってしまう。

数日格闘して月曜に起動時の外枠と文字の塊らしきものが表示されて歓喜していたのだが、この辺りでついにClaudeの一週間のレートを使い切ってしまう。すなわち金曜まで課金しないとClaudeはマジで何も出来ない。

仕方がないので別口で課金しているGitHub Copilotにタッチ。使用するモデルはAutoモードだとSonnet4.6を使うけど、Claude Codeで嫌な目にあったのでGPT5.3-Codexにバトンタッチ。

GitHub Copilotのレートは月単位で毎月1日の日本時間9時(つまりはGMT+0)にリセット。見ていると使用枠は食いつぶしてるけどClaudeよりはマシな気がする。途中エンバグしまくって大変な目にあったけど、月の使用量を一日で20%くらい使ってなんとか表示が正常化出来た。

ここまで苦労した理由は、ラスタベースのハードだと普通は「メモリに書き込んだ内容」がほぼそのまま画面に出るんだけど、VectrexはベクターRAMに書き込んだ内容をベクタースキャンで描画する部分がデジタルとアナログのハイブリッド回路なのが原因。結果人間が見て調整するしかなかった。

これはラスタベースのハードでも「BGとスプライトのプライオリティが変」とかよく見る奴、この辺りはどちらかというとアナログ回路の話である。ポリゴン系ハードもベクターみたいな問題が出そうなんだけど、あちらは基本デジタルなんでマシなんだろうか。

Python+PyGameなのだが思ったより(正確には生成AIが想定してたより)速度が出ない。一部モジュールをCython化してもらって音無しで実機と同じ程度までは高速化したけどこれ以上は厳しそう。なので今回のアプローチはここまで。音声用のAY-3-8910コアも実装済みのはずなんだけど動作確認はしていない。

一応MineStormはそこそこ動くけど、2面から出てくる機雷を倒すと一時的に描画がおかしくなる問題を確認済み。Scrambleはなんかちらつきがひどいし、ArmorAttackに至っては起動しないという状態。ここら辺で嫌になってこれ以上の確認はしてない。全部のソフトで動作確認をするのってすごく大変。

結局最初の「やりたいこと」は出来てないので、また別の方法を考える必要がある。ただコーディングエージェントの勉強にはなったなと。Vectrexのハードに対する知見も得られた、このハードでゲームを作りこむのめちゃ厳しい。