GRASS ( GRAphics Symbiosis System ) は、2D ベクター グラフィックス アニメーションをスクリプト化するために作成されたプログラミング言語です。GRASSは構文がBASICに似ていますが、時間の経過に伴うスケーリング、変換、回転など、2D オブジェクト アニメーションを指定するための多数の命令が追加されています。 これらの機能は、 GRASS が作成されたVector General 3Dグラフィックス ターミナルによって直接サポートされていました。 GRASS は、コンピュータ グラフィックスという新しい媒体を試していた芸術コミュニティですぐに人気となり、ラリー キューバがスターウォーズ(1977) で「デス スターへの攻撃は容易ではない」というオリジナルのアニメーションを作成するために使用したことで最も有名です。
その後のMidway Gamesとの提携の一環として、この言語は Midway のZ80ベースの Z Box に移植されました。このマシンはラスター グラフィックスとスプライト形式を使用していましたが、これをサポートするには色の変化をアニメーション化するなど、大幅な変更が必要でした。このバージョンはZGRASSと呼ばれていました。
歴史
草
GRASS のオリジナル バージョンは、 1974 年にオハイオ州立大学の博士論文のためにTom DeFantiによって開発されました。 [1]これは、 Vector General 3DRディスプレイを駆動するPDP-11 /45上で開発されました。[1]名前が示すように、これは純粋なベクター グラフィックスマシンでした。GRASS には多数のベクター描画コマンドが含まれており、それらのコレクションを階層構造に整理して、さまざまなアニメーション効果をイメージの「ツリー」全体に一度に適用できます (配列に格納されます)。[1]
卒業後、デファンティはイリノイ大学シカゴ校サークル校に移った。そこで彼はダン・サンディンと合流し、サークル・グラフィックス・ハビタット(現在はエレクトロニック・ビジュアライゼーション・ラボラトリー、EVLとして知られる)を結成した。サンディンは1971年に大学に加わり、サンディン・イメージ・プロセッサ、IPを製作した。IPは2つのビデオ入力を受け取り、それらをミックスし、その結果に色を付け、テレビ出力を再現するアナログ・コンピュータだった。彼はそれをムーグ・シンセサイザーのビデオ版と表現した。[1]
DeFanti は既存の GRASS システムを IP への入力として追加し、 1970 年代中頃まで使用されたGRASS/Image Processor を作成しました。システムをより使いやすくするために、DeFanti と Sandin は既存の GRASS システムにあらゆる種類の「単発」コマンドを追加しましたが、これらの変更により言語はかなり特異なものになりました。1977 年に、Habitat の別のメンバーである Nola Donato が GRASS の制御構造の多くをより一般的な形式に再設計し、かなりクリーンなGRASS3が生まれました。[1]
ラリー・キューバのスターウォーズ作品は、 Vector General 3D端末で稼働する GRASS システムの半自動撮影に基づいています。VG3D には、コンピュータとやり取りすることなく、リアルタイムでスケーリング、回転などの基本的な変換を実行する内部ハードウェアがありました。GRASS 言語との非常に遅い通信が行われるのは、新しい風景が提示されるときだけです。これは、シーケンスで確認できます。映画の最初のセクションでは、デス・スターが非常に速く回転およびスケーリングされているのが示されますが、溝を下る飛行をシミュレートする後のセクションでは、GRASS「ツリー」から新しい風景をページインする必要があります。これらはグループで表示されます。
ZGRASSとUV-1
1977年、DeFantiはDave Nutting Associatesでチップ設計をしていたJeff Frederiksenを紹介された。NuttingはBallyのビデオゲーム部門Midwayから、標準化されたグラフィックスドライバチップの作成を請け負っていた。彼らは将来のアーケードゲームのほとんどと、後にAstrocadeとなる開発中のビデオゲームコンソールでそれを使用するつもりだった。MidwayはGRASS言語が彼らのシステムで動くのを見て非常に興味を持ち、DeFantiにそれをプラットフォームに移植するよう依頼した。Habitatの何人かとNuttingの一部がこのプロジェクトに取り組み、彼らはそれをZ Boxと呼んだ。そこで動くGRASS3がZGRASSとなった。[1]
Z-BoxはオリジナルのGRASSシステムとは異なりラスターグラフィックマシンであったため、GRASS3スタイルの大部分はZGRASSでも維持されていたが、ラスターイメージ専用のコマンドがいくつか追加されていた。これにはスプライトをシミュレートするための広範なビットブロック転送コマンドが含まれていたが、これはハードウェアには含まれていなかった。[1] この成果はMidwayからリリースされることはなかったが、Circleはこれを基にしてDatamax UV-1というマシンを製造した。
グラスRT/1
GRASS の最後のバージョンはRT/1で、これは GRASS を他のプラットフォームに移植したもので、言語を表示モデルから切り離し、他のプラットフォームに移植できるようにしたものです。MS-DOS、Microsoft Windows、OpenGLを使用するSGIプラットフォーム、HP-UX、AIX、Macintosh、Amigaのバージョンがありました。言語は以前のバージョンと似ているため、名前が変更された理由は不明です。
説明
- この説明は、オリジナルのBallyマニュアルとACMの説明に基づいています。[2]
Zgrass は BASIC コマンドの標準セットに基づいており、その構文のほとんどを使用しています。Zgrass が BASIC と異なるのは、すべてのコマンドが実際には関数であり、C プログラミング言語と同様に値を返すことです。明確な戻り値がない場合、関数は成功した場合は 1 を返し、失敗した場合は 0 を返すことが期待されます。たとえば、このコマンドはPRINT PRINT 10BASIC では無効ですが、Zgrass では が出力されます10 1。1 は second によって返された値でありPRINT、「文字列 '10' を正常に出力しました」という意味です。
Zgrass のプログラムは「マクロ」と呼ばれ、文字列として保存されます。これらの奇妙な点はどちらも意図的なものであり、Zgrass では任意の文字列をプログラムにすることができます。たとえば、はZgrass コードのスニペットを含む文字列を定義します ( Microsoft BASICMYBOX="BOX 0,0,100,100,2"のように変数に $ は必要ありません)。その時点から入力するだけで、内部のコマンドが実行されます。この機能は、BASIC の従来のコマンドの代わりに使用できますが、不明瞭な行番号ではなく、明確に定義された名前を持つという利点もあります。さらに、コマンドはメモリ内で文字列の形式で保持され、実行時に標準の文字列操作で操作できます。
MYBOXGOSUB
当時のBASICインタープリタのほとんどは、入力テキストをトークン化バージョンに変換し、各コマンドを 1 つの数字 (通常は 1バイト長) に置き換えました。これにより、文字列からコマンドを毎回継続的にデコードする必要がなくなったため、プログラムの実行速度が向上しました。Zgrass は文字列ベースのマクロを使用していたため、これが困難だったため、トークン化にはこだわりませんでした。代わりに、特定のマクロで使用できるコンパイラを組み込み、速度を何倍にも向上させました。プログラムは、コンパイルされたマクロとコンパイルされていないマクロの混合で構成されることが多かったです。
行番号は Zgrass ではオプションであり、通常は のターゲット行にのみ表示されますGOTO。ほとんどの BASIC インタープリタでは、コードの各行に行番号が必要ですが、これは「行エディタ」で行番号が使用されるためです。つまり、特定の行を編集する必要がある場合、その行を参照する唯一の方法は番号を使用することでした。Zgrass では、この必要性を排除する、より高度なフルスクリーン エディタを使用しました。Zgrass では、任意の文字列を「行番号」として使用できますGOTO 10。GOTO MARKERどちらも有効です。
Zgrass には、 命令を使用してSKIP、指定された行数だけ前方または後方に移動する名前のない分岐も含まれていました。行番号はオプションであり、異なるマクロが同じラベルを使用する可能性があるため、これは Zgrass では重要です。たとえば、 のバリエーションはLOOPSTART多くのコード ビットで見つかる可能性があり、その結果、GOTO LOOPSTART名前の衝突が発生する可能性があります。 を使用するとSKIP、この可能性を回避できます。
グラフィックス言語としての本来の目的に沿って、Zgrass には単純な描画のための多数のコマンドが含まれていました。Zgrass の座標系は、Nutting のグラフィックス チップの高解像度モードでは各ピクセルに 1 つのポイントがあり、320×202 のグリッドになります。Astrocade は、設計上、そのチップの低解像度モード (160×101 ディスプレイ) しか使用できませんでした。マッピングの問題が発生する可能性を回避するために、座標空間のゼロ ポイントは画面の中央に配置されました。有効な X 位置は -160 から 160、有効な Y 位置は -101 から 101 です。Astrocade で使用する場合は正の位置のみを使用しましたが、UV-1 では空間全体が使用できました。
配列はグラフィックスで広く使用されているため、Zgrass では配列関数のかなり完全なセットが追加されました。これには、ディスプレイの一部をビットマップとして配列に「キャプチャ」する機能が含まれており、その後、他のグラフィック項目と同様に操作できます。これにより、Zgrass は言語にスプライトのような機能を含めることができ、これは Nutting ハードウェアには直接含まれていなかった機能です。Astrocade には含まれていなかったもう 1 つの機能は、配列を適切な速度で処理する機能でした。そのため、UV-1 にはパフォーマンス向上のために Zilog 提供のFPUが含まれていました。
Zgrass には、マクロを通常どおりに実行したり、「フォアグラウンド」または「バックグラウンド」レベルで実行したりできる3 つの優先度 (レベルと呼ばれる) が含まれていました。これにより、アニメーション指向の言語で非常に便利な、シンプルな形式のマルチタスクが追加されました。ゲーム作成者は、バックグラウンドで実行されるマクロ セットにジョイスティック読み取りルーチンを配置できます。その後、現在の描画マクロが完了するたびに、ジョイスティックが自動的に読み取られます。フォアグラウンドに配置された関数は、どちらよりも先に実行され、タイマーやその他の「低遅延」のニーズによく使用されました。Zgrass には、TIMEOUT時間に基づいてマクロを呼び出す関数が含まれていたため、タイマーの実装が非常に簡単になりました。
Zgrass には、コマンド プロンプトを終了せずにディスクにアクセスできる、CP/M を「カバーする」一連のコマンドも含まれていました。マクロを名前付きファイルに簡単に保存し、同じ方法で読み込むことができるため、ディスクからさまざまなマクロを 1 つの大きなプログラムに読み込むことでプログラムを構築できます。コマンドは、保存するたびに自動的にバックアップ コピーも作成しました。同様の機能がコンパクト カセット ストレージでもサポートされていましたが、奇妙なことに構文が平行ではありませんでした。ディスク コマンドは のような D の何かでしたがDPUT、テープ コマンドは のような T の何かではなくTPUT、 のような TAPE の何かでしたPUTTAPE。
任意に選択されたモジュールから構成されるプログラムでは、Zgrass は BASIC よりも変数をより適切に制御する必要がありました。BASIC ではすべての変数が「グローバル」であるため、2 つのサブルーチンの両方が変数 を使用する場合I(これはループ インデックス変数として非常によく使用されます)、それらが互いの値を設定する可能性があり、デバッグが困難な問題につながります。Zgrass では、2 つのモジュールをロードするプログラマーは、両方がIループ カウンターとして使用されていることを簡単に見つけることができ、問題が発生する可能性があります。この問題に対処するために、Zgrass は小文字で名前が付けられた変数をそのマクロに対してのみローカルであると見なしました。そのため、Iと はiそれぞれグローバルとローカルの異なる変数でした。奇妙なことに、言語に付属する例ではこの機能が広く使用されていないため、この機能の存在を知らない新しいプログラマーを混乱させる可能性があります。
例
SINCURVE = [プロンプト「オフセットはいくらですか?」入力オフセットx = -160角度= 0ポイントオフセット+ x 、SIN (角度) * 80 、3角度=角度+ 2 IF ( x = x + 1 ) < 159 、SKIP -2 ]
このテキストは、コマンド プロンプトにSINCURVE入力するだけで、または他のマクロやプログラムから呼び出すことができる、という新しいマクロを作成します。SINCURVE は、2 つのローカル変数xとangle、およびグローバル変数OFFSET を使用します。
SINCURVE
PROMPT/ は、マクロを呼び出すときにユーザーがコマンド ラインに入力しても入力を求めない、INPUTオリジナルの BASIC の修正版です。この場合、入力するとプロンプトが表示され、プログラムは入力を待機しますが、入力するとプロンプトはスキップされ、OFFSET には自動的に 30 が割り当てられます。これにより、1 つのマクロを対話的に使用することも、プログラム内で関数として使用することもできます。
INPUTSINCURVESINCURVE 30
POINTは、Zgrass 言語に含まれる多くのグラフィック コマンドの 1 つの例です。POINTには、X と Y の位置、および色が必要です。この例では、ユーザーが指定した がOFFSET画面上の曲線の x 位置を移動し、Y 位置は三角関数によって指定され、表示用に適切に拡大されます (この場合は 80 倍)。色は最後の入力で指定され、この場合は 3 です。UV-1 は色レジスタを使用するため、3 は特定の色ではなく、現在のパレットから選択された色を意味します。
も同様に注目に値します。これは、テストの前にIF増分 を配置します。これは、BASIC では通常使用できない機能です。この場合、IF は、true の場合に を呼び出すように指示され、2 行戻ります。行番号ターゲットがないため、 の代わりに を使用できます。
(x=x+1)SKIP -2GOTO
注記
参考文献
引用
- ^ abcdefg デファンティ 1980.
- ^ デファンティ、フェントン&ドナート、1978年。
文献
- DeFanti, Thomas; Fenton, Jay; Donato, Nola (1978 年 8 月)。「BASIC Zgrass - Bally Home Library Computer 用の高度なグラフィックス言語」。コンピュータグラフィックスとインタラクティブ技術に関する第 5 回年次会議の議事録。第 12 巻。ACM SIGGRAPH コンピュータ グラフィックス。pp. 33–37。doi : 10.1145 /800248.807366。ISBN 9781450379083. S2CID 8014940。
- DeFanti, Thomas (1980 年 11 月)。「電子視覚化を容易にする言語制御構造」。BYTE。
