| パラダイム | 手続き型 |
|---|---|
| 初登場 | 1979年 |
| タイピングの規律 | 静的、強い |
| プラットフォーム | TI-99/4、TI-99/4A |
| ライセンス | 独自 |
TI BASIC は、1979 年の Texas Instruments TI-99/4ホーム コンピュータとその改良版である 1981 年のTI-99/4Aに組み込まれた、 BASICプログラミング言語用のANSI準拠インタープリタです。
現代のマイクロコンピュータに搭載されているほとんどの BASIC とは異なり、TI BASIC はMicrosoft BASICに由来するものではなく、 ANSI とECMAによって策定されていた新しいMinimal BASIC標準に従ってTI が開発したインタープリタです。これは、1960 年代のオリジナルのDartmouth BASICに基づいています。TI BASIC と、より一般的な MS の変種との間には、微妙な違いも含め、多くの違いがあります。
Minimal BASIC には、現代の BASIC に一般的に見られる多くの機能が欠けており、Texas Instruments は後に、 BASIC ユーザーが利用できる機能を強化したTI Extended BASICカートリッジを導入しました。これには、他の BASIC に見られるさまざまな機能のほか、スプライト処理、サウンド、およびプラットフォームのその他の機能のための新しいシステム関数が含まれていました。
家庭用コンピュータでは一般的だったように、TI BASIC はプログラミングだけでなく、シンオペレーティング システムとしても使用されました。TI は、Minimal BASIC に加えて、テキスト、グラフィックス、テープやその他のファイル システムへの記録などの基本的なファイル操作のコマンドを追加しました。TI-99 プラットフォームの特性により、TI BASIC は、一般的なマシンの約半分という非常に遅いパフォーマンスで有名でしたが、逆に高い数値精度を誇っていました。
パフォーマンス
TI-99 は、もともとTI-990ミニコンピュータラインナップのローエンド モデルにシングル チップ中央処理装置(CPU) を提供するために構築された16 ビット設計のTMS9900 マイクロプロセッサをベースとしていました。TMS9900 はマイクロコンピュータでの使用にも適していましたが、当時は完全なコンピュータを構築するために必要な残りのサポート チップは必然的に8 ビットであり、これには TI の広範なそのようなチップ カタログが含まれていました。ミニコンピュータでは、16 ビット サポート システムは多数の個別のチップで構成されていましたが、これは低コスト製品には適していませんでした。そのため、TI はマシンを主に 8 ビットにして、さまざまなサポート チップをこの 8 ビットバスに接続し、TMS9900 がバスを 2 回読み取り、16 ビット値を生成するというソリューションを採用しました。[1]
TMS9900 の命令セット アーキテクチャは16 ビットのオペコードに基づいていたため、プログラムは通常 8 ビット マシンの 2 倍の大きさになります。メモリが高価だった時代には、これは大きなコストとなりました。これに対処するために、TI は独自の言語または中間表現である「グラフィック プログラミング言語」または GPL を備えた 8 ビット仮想マシンを作成し、プログラムをよりコンパクトな形式で記述できるようにしました。このアプローチの欠点は、すべての GPL 命令を 1 つ以上の基礎となる TMS9900 命令にオンザフライで変換する必要があることです。[2] GPL コード自体はマシンの 8 ビット側に格納されていたため、パフォーマンスがさらに低下しました。[3]
これらすべての理由から、マシンは理論上の能力よりもはるかに遅く動作した。これは特に BASIC で顕著だった。ユーザのプログラム内のすべての命令は 8 ビット メモリから読み込まれ、GPL で記述されたコードを使用して解釈され、その後再び 8 ビット バスを介して出力される必要があった。その結果、TI BASIC のパフォーマンスは低かった。当時の一般的なベンチマークでは、TI-99 は一般にCommodore PETやApple IIなどの 8 ビット マシンの半分の速度で動作した。[4]たとえば、 BASIC でByte Sieve を実行すると、TI BASIC では 3960 秒かかったが、明らかにはるかに遅いマシンであるApple II 上のApplesoft BASICでは同じテストに 2806 秒かかり、TI よりも約 30% 高速だった。[5]
TI BASICの要素
編集と実行
当時のほとんどの BASIC とは異なり、TI BASIC にはフルスクリーン エディタがありませんでした。代わりに、ユーザーが 1 行ずつ追加または編集できる行エディタが提供されました。各ステートメントの順序付けには、明示的な行番号が使用されました。より一般的な とは対照的に、即時モード>では、現在の新しい行を示すプロンプトが使用されました。[6]行番号の範囲は 1 から 32767 までで、その範囲外の行を入力すると "BAD LINE NUMBER" エラーが発生していました。[7]行入力は、即時モードでのみ使用可能な、昇順の行番号を入力する コマンド[8]と、既存のプログラムの番号を変更する コマンドによって支援されました。 [9]READYNUMBERRESEQUENCE
TI BASIC には、デバッグコマンドも多数含まれていました。 は、特定の行で実行を停止するBREAKのような動作をします。 とは異なり、即時モードへの終了は、 が出現した行ではなく、が参照する行で 発生します。たとえば、 は、プログラムが 130 行目に移動すると、即時モードに終了します。これは、たとえば、コードの途中に を挿入するのではなく、プログラムの先頭に を挿入して実行を制御する場合に使用できます。は、既存のブレークポイントをオフにしました。[10]さらに、 は現在実行中の行の行番号を山括弧で囲んで出力します。など、をオフにしました。[11]STOPSTOPBREAKBREAKBREAK 130BREAKUNBREAKTRACE<100><110>UNTRACE
声明
TI BASIC のANSI 互換ステートメントは です。これらのほとんどは、2 つの追加を除いて MS の対応するステートメントと同じように動作します。指定された「シード」値で乱数ジェネレーターを再起動し、配列の最初のエントリを 0 または 1 に設定しますが、MS は常にゼロベースです。この標準 set に、、およびが追加されました。[12]DATA, DEF, DIM, END, FOR..TO..STEP..NEXT, GOSUB, GOTO, IF..THEN..ELSE, INPUT, LET, NEXT, ON..GOSUB, ON..GOTO, OPTION BASE, PRINT, RANDOMIZE, READ, REM, RESTORE, RETURN, STOPRANDOMIZEOPTION BASECALLCLOSEDISPLAYOPEN
Minimal BASIC標準に従って、[13] IF文は分岐しか実行できず、当時の他のほとんどのBASICで一般的だった任意の文を実行することはできませんでした。たとえば、次のようなコードです。
100 X > 5の場合、「大きい」と印刷します
TI BASIC では無効です。代わりに、複数の行を使用して実行する必要があります。
100 IF X <= 5 THEN 300 200 「大きいです」と印刷
変換時にブール比較の意味が変わることに注意しないと、簡単にoff-by-oneエラーが発生する可能性があります。ただし、TI BASICは次のELSE句をサポートしていました。[14]
100 X > 5の場合は200、それ以外の場合は300
ステートメントPRINTでは、より一般的なカンマやセミコロンに加えて、コロンを使用して異なる行の項目を区切っていました。これにより、TI BASIC にはない概念であるステートメント区切り文字として使用できませんでした。[15]つまり、行には 1 つのステートメントしか含めることができません。BASIC インタープリタの動作方法により、GOTO-based ループはコードを 1 行に結合することで大幅に高速化でき、プログラム内で行番号を検索する必要がなくなります。この一見些細な機能の欠落により、コードが大幅に遅くなる可能性があり、この機能の追加は Extended BASIC の一部でした。
Minimal BASIC システムの拡張機能は、多くの場合、BASIC で直接表現されることはなく、CALLコマンドと一連の名前付き GPL ベースのサブルーチンを介してアクセスされました。たとえば、CALL CLEAR画面をクリアし、CALL KEYキーボードで現在押されているキーのキーコードを返します。言語が不足していたためPEEK、 BASIC 内で新しい CALLable コードを作成するための公式の方法POKE[16]はありませんでした。これを行うには、TI エディタ/アセンブラ、小さなアセンブラを含む TI ミニ メモリ カートリッジ、[17]、または Extended BASIC を使用する必要がありました。
機能
文字列の操作に、、、およびを使用していたMicrosoft BASIC とは異なり、TI BASIC では ANSI 準拠のおよびを使用しました。
LEFT$MID$RIGHT$INSTRSEG$POS
- アブソリュート
- 絶対値
- オーストラリア
- 文字列の最初の文字のASCII数値
- ATN
- アークタンジェント
- スイスフラン
- 数値をASCII文字の文字列に変換する
- コス
- 余弦
- 終了
- ファイルの終わりに達したかどうかをテストする
- 経験値
- 累乗
- 内部
- パラメータ以下の最大の整数
- レン
- 文字列の長さ
- ログ
- 自然対数
- POS
- ある文字列が別の文字列内で最初に出現する
- ラウンド
- 疑似乱数ジェネレータ
- セグメント$
- 文字列の部分文字列を返す
- シンガポール
- 符号関数
- 罪
- 正弦
- スクエア
- 平方根
- STR$
- 数値を文字列に変換する
- タン
- 正接
- ヴァル
- 文字列を数値に変換する
サブプログラム
CALLサブプログラムはステートメント (例)で呼び出されますCALL CLEAR。
CHARグラフィック文字の定義CLEAR画面をクリアしますCOLOR8文字の前景色と背景色を定義しますGCHAR画面から指定された位置の1文字を読み取りますHCHAR画面の位置に文字を書き込み、水平方向に繰り返しますJOYSTジョイスティックの位置を返しますKEY画面にエコーを表示せずにキーボードから読み取るSCREEN画面の色を変更しますSOUND音(周波数を使用)とノイズを作成しますVCHAR画面の位置に文字を書き込み、垂直方向に繰り返します
拡張BASIC
TI BASICはシステムの内部ROMにありました。1981年にTIはプラグインROMカートリッジをリリースし、既存のコードに追加機能を追加し、さまざまな方法で言語を改善しました。[18]拡張BASICとして知られ、プラットフォームへの追加として非常に期待されていました。[19]
変更点の 1 つに、1 行に複数のステートメントを記述できる機能の追加があります。複数のステートメントを使用するとパフォーマンスが向上する可能性があります。1 行に実装されたループははるかに高速に実行されます。さらに、ステートメントは複数の行にまたがるようになりました。基礎となる方言では、文字列の区切りにコロンがすでに使用されていたため、Extended BASIC では、この目的で 2 つのコロンが使用されました。紛らわしいことに、TI BASIC でも 2 つのコロンを含むステートメントが可能でした。たとえば、 ではPRINT "A"::"B""A"、空白行、そして "B" が出力されますが、Extended BASIC では、これらのステートメントにスペースを追加する必要がありました。PRINT "A": :"B"。[18]
IFもう一つの遅れた追加機能は、文が だけでなく任意の文を実行できるようになったことですGOTO。拡張 BASIC では、 のような単純な文を書くことができました。これは 節でも機能し、 のような文も書けるようになりました。[18]IF X>10 THEN X=X-1ELSEIF A=4 AND B=6 THEN R=10 ELSE PRINT "OOPS"
その他の追加機能にはACCEPT、、、、、、、、、およびを含むいくつかの新しいステートメントが含まれます。最後の3つのステートメントは構造化プログラミングに使用されIMAGE、名前付きサブルーチンの作成を可能にします。拡張BASICには、いくつかの新しい関数、特にCALLableルーチンも含まれていました。後者の中には、自動的に継続するモーションを作成するものを含むスプライトコマンドのライブラリがありました。[18]LINPUTON BREAKON ERRORON WARNINGSUBSUBENDSUBEXIT
音声合成
TI音声合成装置を装備すると、TI拡張BASICユーザーは、画面にテキストを書き込むのと同じくらい簡単に、定義済みの語彙から音声を生成することもできます。たとえば、次のテキスト行を入力すると、音声合成装置がコンピュータを識別します。[18]
電話して言ってください(「こんにちは、私は #TEXAS INSTRUMENTS# TI NINETY NINE FOUR の家庭用コンピューターです」)
複数語のフレーズは、この例のように # 記号で区切られます#TEXAS INSTRUMENTS#。音声合成装置に内蔵されている 338 語の語彙に含まれていない単語を使用すると、ゆっくりと単語を読み上げます。TI のターミナル エミュレータ II カートリッジは、テキスト読み上げ機能を提供しました。[18]
参考文献
引用
- ^ 「TI-99/4A の内部アーキテクチャ」 2000 年 8 月 16 日。
- ^ Nouspikel, Thierry. 「GPL: グラフィックプログラミング言語」 。 2020年8月2日閲覧。
- ^ 「私はTI-99/4aで育ち、基礎を学びました。それは素晴らしくシンプルな時代でした...」Hacker News 。 2020年8月2日閲覧。
- ^ ナイト、ダニエル (2016 年 1 月 10 日)。「1970 年代後半の家庭用コンピューターはどのくらい速かったのか?」ローエンド Mac。
- ^ ギルブレス、ジム; ギルブレス、ゲイリー (1983 年 1 月)。「エラトステネス再考: ふるいをもう一度通して」。バイト。pp. 283–325。
- ^ Guide1981、p. II-5。
- ^ Guide1981、p. II-8。
- ^ Guide1981、p. II-26。
- ^ Guide1981、p. II-27。
- ^ Guide1981、p. II-33。
- ^ Guide1981、p. II-36。
- ^ Guide1981、p. i.
- ^ Minimal BASIC (PDF) (技術レポート). ECMA. 1978 年 1 月.
- ^ Guide1981、p. II-51。
- ^ Guide1981、p. II-65。
- ^ ジェームズ・アバティエロ著『Exploit』
- ^ 「ミニメモリ」。
- ^ abcdef ショー1983.
- ^ Kaplan, Gary (1981 年 6 月). 「Extended BASIC Review」. TI 99er .
文献
- Shaw, Stephen (1983)。「Extended Basic」。Texas Instruments TI99/4A 入門。Phoenix Publishing。ISBN 978-0-946576-04-3。
- ユーザーズリファレンスガイド(PDF) . Texas Instruments. 1981.
外部リンク
- ClassicCmp.org の初心者向け BASIC
- ClassicCmp.org の TI-99/4A BASIC リファレンス カード
