見出し画像

GAME言語 - TinyBASICからC言語への橋渡し

ちょうどApple][を使い始めた頃、ASCII誌では毎月のようにTinyBASICを移植する記事があふれていました。その中でTinyBASICをBASICとして移植するのではなく、多くの予約語を記号で表し独自の仕様で作り直したGAMEⅢという言語が発表されました。最初のバージョンは6800を対象としたインタプリタで、6502ユーザとしては指をくわえて見ていることしかできませんでしが、程なく6502仲間であるPET向けや8080へも移植され、さらにコンパイラも開発されました。

「GAME」という名のプログラミング言語

主な仕様をざっくりと説明すると

  • 変数はA-Zのみ。

  • 型としては16ビットの整数なのだが、ポインタとしても使える。

  • プログラムカウンタは”#”。#={行番号}でGOTO。!={行番号}でGOSUB。

  • ループ変数に”@”。”?”を使って入出力。

  • 他にも”=”、”>”、”*”、”’”などにも独自の役割を与えている。

  • A(0)とすると変数Aに入っている値をメモリアドレスと解釈して、そのアドレスを指す先の2バイトを読み書きできる。A:0)なら1バイト。

  • 配列は無いが変数をポインタとして使える機能を使って、自分でメモリを管理して配列のように使う。

以下に記事のPDFがあるようなので、こちらも参考に。

超CPU GAME - TOK2

http://www43.tok2.com/home/cmpslv/Manual/GAME%20(J)(1979)(Ascii).pdf

GAME65 - TOK2

http://www43.tok2.com/home/cmpslv/Manual/GAME65%20(J)(1979)(Ascii).pdf

基本的にはBASICの亜流で行番号を使って実行順序を管理することも同じですが、プログラムのパースが楽になるという以上に、複雑になる文字列処理や配列などのメモリ管理をザックリ削ったことで、言語自身がコンパクトになり、コンパイラも開発されたので、結果的に最も手軽に高速でプログラムを実行できる処理系になりました。

変数の値をポインタとして扱うというのはC言語を知っている人にとってはあたりまえの事ですが、高級言語であるにも関わらず裸のメモリアドレスを使うというのはBASICしか知らない人にとっては馴染みが無かったかもしれません。とはいえ当時はみんなでまずBASIC「を」書いている状態だったので、自分でメモリを管理できるのはむしろ好都合でした。

PETに移植されたので同じ6502であるApple][で動くのも、もうすぐかなと待ちわびていたのですが、なかなかリリースされません。1980年に入った頃、遂にGAME APPLEが発表されました。単なる移植だけではなくグラフィック命令のサポートも行われ、コンパイラも使えるようになっていました。さらに革命的なのがハイレゾグラフィック画面にテキストを表示するスーパーテキストという機能が組み込まれたことです。これでJ-PLUSでなくてもカナが表示できるようになったり、なんと、ひらがなも使えるのです。言ってみればPCGというかキャラジェネのデータを自由に書き換えられるというか、後のDOS/Vのグラフィック画面を使った日本語化と同じような仕組みです。

この機能を駆使すればコンパイルも出来るので充分なパフォーマンスがあり、機械語を使わなくても高速なゲームを書くこともできます。コンパイラも良くできていて、掛け算をするにしても被乗数によって足し算で済ますか、シフト演算だけで行けるか、それでも駄目なら普通に計算するかなどを切り分けていてこだわりを感じました(こだわりといえば初期のPythonインタプリタもメモリ管理の実装で、これと似たような状況に応じた判断が組み込まれていて感心したものです)。

かなり端折りましたが、GAME APPLEの登場で少なくとも整数BASICはお役御免となりました。無印Appleだったのにも関わらず拡張スロットにあった10KBASICをメインボードにお引越しさせてしまった覚えがあります。どうしても使いたい時はLanguageSystemにお任せです。

8080への移植に関しては、いろいろと資料が残っているようです。68系からの移植だったので、多少苦労したようです。

GAME80コンパイラ解説 (2003/08/05)

GAME86 Compiler for MS-DOS 1.00C

Game80 Compiler

今でも8bitCPUボードやエミュレータで動作させるべくGAME言語を使う人もいるようです。

あとやはり名前は大事です。言語の名前がGAMEなので検索で探すのは厳しいです。もう少しいろいろ探してみようと思います。

いいなと思ったら応援しよう!