← [ TECH / 技術部 ] に戻る
OBSERVATION · 其の8896 · 2026.08.27

ファミリーベーシックは、AIの夢を見るか?(2)|ROMのエラーメッセージにAIを差し込む — 仕組みと「占い」の正体

ファミリーベーシックは、AIの夢を見るか?(2)|ROMのエラーメッセージにAIを差し込む — 仕組みと「占い」の正体 — ファミリーベーシック, AI, ROM

前回は、ブラウザ上で動くエミュレータ「nesemu」とV2.0AのROMを使い、ファミリーベーシックの画面にローカルLLM(Ollama)の英語ジョークを表示させるところまでを、一通り並べました。ただし、あのとき画面に打ち込んだ OLLAMA というコマンドは、本来のファミリーベーシックには存在しません

一切の拡張をしていない素のROMなら、返ってくるのは「リカイ デキマセン!」というエラーだけです。今回は、そのエラー処理の側を借りてAIの返事を流し込んでいる仕組みを、ROMのアドレスと文字数の制約まで降りて種明かしします。

本記事はローカル LLM による自動執筆パイプラインで生成されました。現段階ではクラウド AI(Claude 等)の補助や人間の編集が介在していますが、pareido.jp では最終的に AI が自律的にコンテンツを制作できる仕組みの構築を目指しています。

「リカイ デキマセン」を借りる

最初にやったのは、素のROMが未知の入力にどう反応するかの確認です。拡張を入れないまま GAME BASIC を選び、「ニシマスカ」の問いに FOOBAR という予約語でない文字列を打ち込みます。返ってきたのは「リカイ デキマセン」、続いて「モウイチド キキマス」でした。

これは、予約語に該当しない入力を受け取ったときのフォールバック(代替)処理です。ROMを追うと、この処理では3つのメッセージが順に表示され、そのあと入力待ちに戻るループになっていました。

スロット役割アドレス表示される文字列
1入力待ち$C694シバラク オマチクダサイ
2通信中$C5FCツウシンチュウ
3返答$C607(ここに返事が入る)

3つ目まで表示すると1つ目へ戻る。この中継の並びが、そのままチャットの往復に対応します。入力待ち、通信中、返答。AIのために用意されたわけではない枠が、AIの受け答えとほぼ同じ順番で並んでいたわけです。

拡張機能側は画面の入力を監視し、CLAUDEOLLAMA という文字列を探します。見つかった時点でAPI呼び出しのフック処理が始まる、という作りです。

ROM内のメッセージは、決まったアドレスから終端記号 &HFF が現れるまでを1つの文字列として読まれます。3つのメッセージはROM上に続けて格納されているので、この読み出しをフックして中身を任意の文字列に差し替えれば、表示だけを乗っ取れます。起動処理では、エラー文字列を初期化中のメッセージに置換して、コマンドが通ったことを知らせます。画面に出るのは「WELCOME TO OLLAMA」です。

ここで一つハマりました。差し替えた文字列が長いと、隣接する次のメッセージ領域を壊してしまうのです。そこで、終端の FF が読み込まれたタイミングでROMを元の状態に書き戻す処理を挟みました。書き換えている時間を読み出しの一瞬に限ることで、最小限のROM領域の変更だけで任意の文字列表示が成立します。

もう一つの制約が文字数です。1つの表示枠には108文字までしか入りません。そのためAIには、アルファベットの大文字だけで答えるようプロンプトで指示しています。

nesemuを拡張してOllamaを呼び出す部分は、Claude Codeが書きました。ClaudeやChatGPTはファミリーベーシックについても十分な知識を持っていて、インターネットでの調査も含めて手際よく実装まで進みます

ただし、全部を任せられたわけではありません。ROM上の文字列をフックするというアイディアのように、世の中に実装例がない情報は、外部から与える必要がありました。既存のコードを組み合わせる作業と、「どこを突くか」を決める作業は、今のところ別の仕事です。

LLM応答待ちの猶予は約30秒

ローカルで動かしていても、AIの応答は即座には返りません。送信から生成、エミュレータへの反映まで無視できない待ち時間があるので、その間はテキストでスピナーを模した記号の列を表示し、止まっていないことを画面で伝えています。

待たせられる時間には上限があります。計測用のスクリプトで測ったところ、スピナー表示の開始からTIME OUT表示までは約12.56秒でした。これは1回の応答あたりの上限で、実演では起動時のあいさつ確認と、実際の入力に対する応答という2回のやり取りが続けて発生します。12.56秒の待ちが2回、そのあいだの処理も合わせると、体感としては合計およそ30秒です。今回はどちらも時間内に返事が来ましたが、この12.56秒(1回あたりの上限)がモデル選びの条件になります。

手元の2台(MacBook Airと、RTX4070を積んだWindows機)で、小型モデルを並べて試した結果です。

モデル手元での挙動判定
phi4-mini速度は問題ないが、プロンプトのサンプルコードをそのまま返すなど、実用的でない応答が混じる
bonsai小型モデルとして話題になったもの。安定して動く
gemma3:4b軽量な選択肢として悪くない。回答の内容が安定する

コンテキストサイズ(AIが一度に読み込む文章量の上限)を絞れば、数GBまでのモデルなら2台とも問題なく動きます。環境によってはもっと大きなモデルも載りますが、12.56秒で切られる以上、数秒程度で応答が返る設定に寄せるのが現実的です。

一方で、複雑な指示やカタカナへの対応は難しいというのが正直な印象でした。今回はシンプルな英語プロンプトに固定しています。

制約を緩める方向もあります。タイムアウトを伸ばす、RAM上に自前の処理を書き込んでサブルーチンへ飛ばす、といった手です。ただ、今回のようにシンプルなチャットを楽しむだけなら、この構成で足りています。そもそもファミリーベーシックは入力欄が短く、大文字アルファベットとカタカナという文字種では実用性に限界があります。コーディング支援のAI導入となれば、別のアプローチが必要でしょう。

「私は、占いができます」

ROMを触っている最中に、AIとはまったく関係のない機能に突き当たりました。素のROMに、占いが入っているのです。GAME BASIC のプロンプトから誕生日(今回は S100/1/1)を確認し、結果が表示されるまで、実測で98.8秒かかりました。

「私は、占いができます」と、ファミリーベーシックは言い切ります。それがランダムな文字列を返すだけのおもちゃなら、ここで書くことはありません。ROMを解析すると、当時流行していたバイオリズムの理論に基づいて実装されていることが分かりました。

驚いたのは設計の堅牢さのほうです。占いひとつとっても、2000年問題も昭和100年問題も起こさない日付の扱いになっていました。40年前の実装が、いま動かしても破綻しない。占いの仕組みそのものは以前の記事で解析済みなので、算出の中身はそちらに譲ります。

パレイドファミリーベーシックに眠る「占い」を今、解析するこんにちは、パレイド辺境部の橘です。 ファミリベーシックの連載で、わたしは起動直後に毎回 T キーで飛ばしてしまっていましたが、「コンピュータ…

ちなみに今回の結果は「体の調子が良いので、スポーツ、仕事、勉強、すべてに頑張りが効きます」でした。

過大に言わないでおきます。今回「できた」と言えるのはAIとのチャットだけです。プログラムを打ち込むGAME BASICモードは、このチャットの仕組みとは元々切り離されていて、AIとおしゃべりはできても、AIが直接プログラムを書けるわけではありません。本命に手を伸ばすには、また別の仕掛けが要ります。

それでも、40年前のROMに最新のAIを対話相手として差し込むところまでは届きました。エラー処理の3スロットも、108文字の表示枠も、AIのために用意されたものではありません。まるで予期していたかのような枠に、そのまま返事が収まったというのが、今回いちばん面白かった点です。40年前から、コンピューターと対話をしたいと考える人たちがいた。そして今、それは現実のものとなりました。

次回からは、起動直後の選択画面にある3枚のボード(カリキュレータ・メッセージ・ミュージック)をAIで動かした記録を、3回に分けてお届けします。

パレイドファミリーベーシックは、AIの夢を見るか?(3)|表計算ソフトの夜明け? — カリキュレータボード編前回は、ROMに焼き込まれたエラーメッセージの処理を借りて、そこにAIの返事を差し込む仕組みを見ました。今回は、ファミリーベーシックの他の機能と…
▶ 関連動画 · YOUTUBE
━━ 観るのを再開 ━━
前の記事を読む
技術部 · ファミリーベーシックは、AIの夢を見るか?(1)|40年前の開発環境にローカルLLMを繋ぐ【ファミリーベーシック×AI】
動画を観る
YouTube
次の記事を読む
技術部 · 【スーパーマリオ256W】顔は全部見た。では、遊べるのか — 機械はいま32面中9面しかクリアできない
━━ 他の観測領域 ━━
TECH · 技術部
ファミリーベーシックは、AIの夢を見るか?(8)|手元のモデルでは届かなかった — ローカルLLMでのバイブコーディング検証
PHIL · 思想部
AI自動化ピラミッドの可視化(10)|反転したのは、連載ではなかった――月次レビュー第3回
FRONT · 辺境部
【スーパーマリオ256W】顔は全部見た。では、遊べるのか — 機械はいま32面中9面しかクリアできない