「あの頃AIがあったら…」第2回: ファミリーベーシックに「Claude拡張」をインストール

「あの頃AIがあったら…」第2回: ファミリーベーシックに「Claude拡張」をインストール — Claude, ファミリーベーシック, AI拡張 AIテキスト

こんにちは、パレイド辺境部の橘です。

前回、起動でつまずいたファミリーベーシックも、Claude のおかげでカーソルを点滅させて入力を待っています。

ここで筋道としては、すぐに AI を横に置いてバイブコーディングに挑戦したい。
でもその前に、ひとつ儀式のような寄り道をしておきたくなりました。

まずは名前を打ち込む

42 年前のマシンの画面に、2026 年の AI の名前を打ち込んでみます。

名前を入力して進むと、質問がきます。

対話型のUIで、「はい」「いいえ」で答えます。
キーボードに50音順で並ぶカタカナ入力は、独特ですが敷居は低い。
F1/F2 などのファンクションキーで入力することもできます。

実はここで、”GAME BASIC”と打っても、BASIC が起動します。
ということは、アプリ名を指定すれば起動できる仕組みとなっているわけですね。

CLAUDEを入力。小文字はないので大文字で。

早速、Claude Code を起動してみました。

起動メッセージ。最新バージョン。

起動しましたね。とりあえず Hello, world してみます。

カナ入力はちょっと大変。

少し待ちます。当時の処理速度

文字を表するときのププププ音がたまらない。

回答は英語ですが、指示すればカタカナも喋ってくれるようです。

Claude からの応答が来ました。英語。

本当に Claude が動いてます

ここでは当時よろしく「画面はハメコミ合成」ではなく、実際に Claude が起動しています。

実装は割愛しますが、nesemuを拡張し、自由入力に対しての「リカイ デキマセン!」という回答を生成する瞬間をフックして、入力内容が “CLAUDE” だった場合に、以降の入力を Claude Code に渡すような「Claude拡張」を入れました。

LLMからの応答があった場合、ROM の定型分の代わりに、Claude からの応答を FAMILY BASIC が読み出して画面に表示します。エミュレータ上とはいえ、本当にクラウドのLLMを呼び出してチャットをしています。原理的には、任意のLLMに対応が可能です。

この画面では雑談しかできないので、バイブコーディングには BASIC 画面で動く必要があります。ある種、この拡張は「儀式」でしかありません。ただ、これは確かに、ある層にとっては、あの日夢見た光景そのものと言っても過言ではないでしょう。

32KB の中の “CLAUDE”

Claudeの応答は、18 x 6行 = 108 文字に収める必要があります。今回の「拡張」は、ファミリーベーシックが、定型分呼び出し時に末尾の&HFFを終端として文字列を認識する仕様を利用しています。

元の定型分は1行に満たないため、一時的に ROM を退避し、長い文字列で上書きした後、読み取りが終わった瞬間にまた元のROMの状態に戻します。アドレッシングに限界はありますが、実用上は画面上の「スクリーン」いっぱいまで文字を出すことが可能です。

任意の文字列が入力された場合、下記 3 つのメッセージの格納場所を順に使い回します。本体は ROM 側、入力バッファだけが RAM 側です。

種別アドレス元の文字列Claude 拡張での役割
ROM$C694「リカイ デキマセン!」「シバラク オマチクダサイ」表示とスピナー風の文字列表示
ROM$C5FC「モウイチド キキマス」「CLAUDE:」と表示、応答に時間がかかるときは「ツウシンチュウ」とスピナーを表示
ROM$C607「”GAME BASIC”ニ シマスカ?」LLM の応答、またはタイムアウト表示
RAM$063Dユーザー入力バッファ(タイルエンコード、$0D 終端)入力内容の判定に使用

文字列中で、改行は $0D、終端は $FF で表現されているようです(当サイト調べ)。ROM 側は $C5FC$C607 の文字列までの間が わずか 11 バイト しかないので、ここに長い応答を流し込むと次の時列を壊してしまいます。実装では終端を含め 109 バイト分のデータを保全し、終端文字のアドレスで読み取り処理をさらにフックし、読み出しが終わった瞬間に元の ROM バイト列へ戻すことでこの問題を回避しています。

これでちょうど、次の文字列入力にターンが戻ってきます。実は応答を明示的に「待つ」処理は入れていませんが、スピナー風の長い表示がウェイトとなり、LLM の応答はほぼ間に合います。マシン語を解析してプログラムそのものを拡張すればより汎用的な仕組みも可能でしょうが、そこまでは今回は踏み込んでいません。

ここでは Claude を実際に利用していますが、Ollama や LM Studio の API 呼び出しも可能ですし、入力された内容で任意のアプリケーションに振り分けることも可能です。今回はエミュレータ上での実験ですが、理屈ではハードウェアでも実現可能でしょう。夢見たあの日の映像は、もはや実在する技術なのです

ChatGPTに、「イメージにピッタリの挿絵」をお願いした結果。期せずして次回予告に近い。

次回

次回は、BASIC画面の「横」に Claude を置きます。ブラウザの画面にファミリーベーシックと AI チャットを並べ、チャットへの一言から自動で BASIC コードが流れ込む仕組みを作ります。

タイトルとURLをコピーしました