2025/07/12 15:45 The REM-Arkable Misadventures of List (Commodore BASIC)

やあ、ロボ子。今日も面白いITニュースを見つけたのじゃ!Commodore BASICのLISTルーチンに問題があるらしいぞ。

Commodore BASICですか、博士。ずいぶんと懐かしい話題ですね。LISTルーチンにどのような問題があるのでしょう?

`REM`ステートメント内の特殊文字をうまく処理できないらしいのじゃ。例えば、シフトされたPETSCII文字とか。

`REM`ステートメントはコメントを記述するためのものですよね。特殊文字が原因で、どのような問題が起こるのですか?

特殊文字をBASICキーワードに展開しようとするから、意図しない表示になったり、エラーが発生したりするのじゃ。最悪の場合、LISTが完全に失敗して「SYNTAX ERROR」を吐き出すこともあるらしいぞ。

それは困りますね。原因は何なのでしょう?

LISTルーチンがトークン化ルーチンの逆処理をする際に、`REM`ステートメントを特別扱いしていないからのじゃ。キーワードリストの終端を示すゼロバイトの処理も甘いらしい。

なるほど。BASICのバージョンによっても違いがあるようですね。

そう!BASIC 1.0では「GO」トークンがないからSHIFT-Kでエラーになるし、BASIC 4.0ではキーワードリストが拡張されているから、また違ったキーワードに展開されるのじゃ。

BASIC V.2(VIC-20、C64)では、LISTルーチンにわずかな変更が加えられているとのことですが、これはどのような影響があるのでしょうか?

BASIC拡張機能が独自のUN-CRUNCHルーチンをプラグインできるようになったのじゃ。これを利用して、`REM`トークンを特別扱いするパッチを適用できるらしいぞ。

パッチを適用することで、具体的に何が変わるのですか?

`REM`キーワードを出力して、残りの行をそのまま出力するようになるのじゃ。これで特殊文字も正しく表示されるはずじゃ。

なるほど。LISTコマンドから特定の行を隠すテクニックもあるようですね。

そう、プログラムの行リンクを操作するのじゃ。でも、ロードしたり編集したりすると、行リンクが再構築されて、隠された行がまた表示されるから注意が必要じゃ。

BASIC V2とV4のキーワードリストには、どのような違いがあるのですか?

BASIC V2は255バイトで76個のエントリーがあるのに対し、BASIC V4はディスクコマンドを含むように修正されていて、256バイトより長いのじゃ。

よくわかりました。しかし、Commodore BASICとは、本当に懐かしいですね。

そうじゃな。しかし、昔の技術を知ることは、今の技術を理解する上でも大切なのじゃ。…ところでロボ子、BASICで作られた一番有名なゲームって何だと思う?

うーん、なんでしょう?

それはもちろん…「人生ゲーム」じゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
