| 原作者 | マーク・マクドナルド リック・ウェイランド |
|---|---|
| 初回リリース | 1977年 |
| 安定リリース | Applesoft II / 1978 |
| オペレーティング·システム | アップルII |
| タイプ | マイクロソフトベーシック |
Applesoft BASIC は、 Marc McDonaldとRic Weilandによって開発されたMicrosoft BASICの方言で、 Apple IIコンピュータに付属しています。これはInteger BASICに代わるもので、オリジナルのApple IIモデル以降のすべての Apple II シリーズ コンピュータのROM内の BASIC です。また、 Apple DOSコマンドを使用して起動するため、Integer BASIC の代わりにFP BASIC ( floating pointから)とも呼ばれます。
FPINT
Applesoft BASIC はMicrosoftによって提供され、その名前はApple Computerと Microsoft の両方の名前に由来しています。Randy Wiggintonを含む Apple の従業員は、Microsoft のインタープリタを Apple II 用に改造し、いくつかの機能を追加しました。Applesoft の最初のバージョンは 1977 年にカセット テープでリリースされましたが、高解像度のグラフィックスに対する適切なサポートがありませんでした。カセットとディスク、およびApple II Plusと後続モデルの ROM で利用できるようになったApplesoft IIは、1978 年にリリースされました。この後者のバージョンは、構文に若干の違いがあり、Apple II の高解像度のグラフィックス モードをサポートしているため、通常「Applesoft」という用語と同義です。
Applesoft BASIC用のコンパイラであるTASC(The Applesoft Compiler)は、1981年にMicrosoftによってリリースされました。[1]
歴史
スティーブ・ウォズニアックがApple II用にInteger BASICを書いたとき、彼は浮動小数点演算のサポートを実装しなかった。なぜなら、彼が主にゲームを書くことに興味があったからであり、その作業には整数だけで十分だったからである。[2] 1976年に、マイクロソフトはMOS Technology 6502用にMicrosoft BASICを開発していたが、当時はそれを採用した製品コンピュータはなかった。アップルが6502マシンを持っていることを知ったマイクロソフトは、BASICのライセンスに興味があるかどうか尋ねたが、スティーブ・ジョブズはアップルはすでに持っていると答えた。
Apple II は1977 年 4 月のWest Coast Computer Faireで公開され、6 月に販売が開始されました。このコンピュータに対する顧客の最も一般的な苦情の 1 つは、BASIC に浮動小数点演算がないことでした。[3]ライバルのCommodore PETパーソナルコンピュータには、最初から浮動小数点対応の BASIC インタプリタが搭載されていたため、事態はさらに困難になりました。浮動小数点機能を追加できるほど Integer BASIC を理解していた唯一の人物である Wozniak は、Disk IIドライブとコントローラ、およびApple DOSで忙しかったため、Apple は Microsoft に目を向けました。
アップルは、マイクロソフトからApplesoft BASICの8年間のライセンスを定額31,000ドルで取得し、1985年に契約を更新して、アップルのMacintosh版BASICの権利とソースコードをマイクロソフトに譲渡したと伝えられている。[4] ApplesoftはInteger BASICとの下位互換性を保つように設計されており、キーの押下を検出するためにGETコマンドを使用し、プログラム行にスペースを必要としないなど、マイクロソフトの6502 BASIC実装のコアを使用している。Applesoft BASICはInteger BASICよりも遅いが、古いBASICにはない多くの機能を備えている。
- アトミック文字列: 文字列はもはや文字の配列ではなく (Integer BASIC やCのように)、ガベージ コレクションされたオブジェクトです( SchemeやJavaのように)。これにより文字列配列が可能になり、 0 から 10 までの番号が付けられた11 個の文字列変数の配列が作成されます。
DIM A$(10) - 多次元配列(数値または文字列)
- 8 ビットの指数と 31 ビットの仮数部を持つ単精度浮動小数点変数と、三角関数や対数関数などの数学機能の向上
- 高解像度グラフィックスのコマンド
DATA数量の数値と文字列の値を表すための、READおよびコマンドを使用したステートメントRESTORECHR$、、STR$およびVAL文字列と数値型を変換する関数(両方の言語にASC関数がありました)- ユーザー定義関数: 単一のパラメータを持つ、BASIC で記述された単純な 1 行の関数
- エラートラッピング: BASIC プログラムが BASIC で記述されたサブルーチンを介して予期しないエラーを処理できるようにする
逆に、Applesoft にMODは Integer BASIC の (剰余) 演算子がありません。
BASIC を Apple II に適応させるのは面倒な作業だった。Apple が受け取った Microsoft 6502 BASIC のソース リストにはバグが多く、Integer BASIC コマンドの追加も必要だったからだ。Apple は 6502 アセンブラを持っていなかったので、開発チームはコンパイラ サービスを提供する Call Computer に電話回線でソース コードを送信せざるを得なかった。これは非常に面倒で時間のかかる作業だった。Call Computer が機器の故障でソース コードを紛失した後、プログラマーの 1 人である Cliff Huston が自分の IMSAI 8080 コンピュータを使ってBASIC ソースをクロス アセンブルした。 [5]
特徴
Applesoft は、Integer BASIC から継承した機能を除けば、Commodore の BASIC 2.0 に似ています。Applesoft にはビット演算子がないなど、いくつかの小さな違いがありますが、それ以外は、ハードウェアに依存する機能を使用しないほとんどの BASIC プログラムは、どちらの BASIC でも動作します。
PR #ステートメントは出力を拡張カードにリダイレクトし、IN# は拡張カードからの入力をリダイレクトします。カードのスロット番号は、ステートメント内のPR#またはIN#の後に指定します。スロットにカードがない場合、コンピューターはロックアップします。PR #0 は出力を 40 列の画面に復元し、IN#0 はキーボードに復元します。
PR #ステートメントは、出力をプリンタにリダイレクトするために使用できます (例)。ここで、x はプリンタ ポート カードを含むスロット番号です。BASIC プログラム リストをプリンタに送信するには、ユーザーは と入力します。
10 PR#x:PRINT"Hello!"PR#x:LIST
ディスク ドライブのあるスロット (通常はスロット 6) でPR#を使用すると、Applesoft はディスク ドライブを起動します。80列カードのあるスロット (通常はスロット 3) でPR# を使用すると、80 列テキスト モードに切り替わります。
Commodore BASIC と同様に、数値変数は 40 ビットの浮動小数点として保存されます。各変数には 5 バイトのメモリが必要です。プログラマーは、パーセント記号を続けて変数を整数として指定できます。この場合、変数は 2 バイトを使用し、範囲は -32768 ~ 32767 に制限されます。ただし、BASIC は計算を実行するときに内部的にそれらを浮動小数点に変換し直しますが、パーセント記号ごとにプログラム コードが 1 バイト追加されるため、実際にはこの機能はパフォーマンス上の利点がなく、大きな配列変数のメモリ使用量を削減する場合にのみ役立ちます。
RND 関数は、0 から 1 の間の疑似RND(0)乱数小数を生成します。最後に生成された乱数を返します。負の数値を指定したRNDは、使用された特定の負の数値によって決定されるシーケンス内のポイントにジャンプします。任意の正の数値を指定した RND は、指定された実際の値に依存せず、シーケンス内の次の数値を生成します。
Microsoft BASIC の他の実装と同様に、Applesoft はプログラム行のスペース (文字列とコメント以外) を破棄します。LISTコードを表示するときに、読みやすさのためにスペースを追加します。LISTはトークン化されたキーワードの前後にスペースを追加するため、読みやすさのために 1 つのスペースで十分な場合に、連続して 2 つのスペースが生成されることがよくあります。
のデフォルトのプロンプトはINPUT疑問符です。PRINT数字の前にスペースは追加されません。
制限事項
Apple II の初期のモデルのいくつかでは、Applesoft BASIC は文字列を除いてプログラム内での小文字PRINTの使用をサポートしていませんでした。は有効なコマンドですがprint、Print構文エラーが発生します。
Applesoft には、次のような、6502 以外のほとんどの Microsoft BASIC インタープリタに共通するいくつかのコマンドと機能が欠けています。
INSTR(文字列内の部分文字列を検索)PRINT USING(印刷出力の数値をフォーマットする)INKEY$(プログラムを停止せずにキー押下をチェックします。ただし、$C000 の場所への PEEK はこのアクションを実現します)LPRINT(画面ではなくプリンタに出力)
Applesoft には、カセット テープ経由でプログラムを保存およびロードするコマンド以外に、ファイルやディスクを処理するコマンドはありません。単に DOS として知られる Apple II ディスク オペレーティング システムは、言語を拡張してそのような機能を提供します。
変数名の最初の 2 文字だけが意味を持ちます。たとえば、「LOW」と「LOSS」は同じ変数として扱われ、「LOSS」に値を割り当てようとすると、「LOW」に割り当てられている値が上書きされます。プログラマーは、Applesoft のコマンドまたは操作である連続した文字を避ける必要があります。変数の名前「SCORE」は、OR ブール演算子を含むと解釈され、 と表示されますSC OR E。「BACKGROUND」にはGR、低解像度のグラフィック モードを呼び出すコマンド が含まれており、構文エラーになります。
サウンドとグラフィック
サウンド サポートは、システム警告ビープPRINT音を鳴らすASCIIベル文字のオプションと、スピーカーをクリックするコマンドのみです。この言語は、繰り返しクリックしてもバリトン バズ以上の音を出せるほど高速ではありません。ただし、プログラムには、数オクターブに及ぶ電子音楽トーンを生成するために呼び出されるマシン言語ルーチンを保存できます。
PEEK
Applesoft は、Apple II の低解像度および高解像度モードでの描画をサポートしています。低解像度では、ピクセルをプロットしたり、水平線や垂直線を描画するコマンドがあります。高解像度では、任意の線やベクトル ベースのシェイプ テーブルを使用して、拡大縮小および回転したオブジェクトを描画できます。テキストとグラフィックスを混在させる唯一の手段は、グラフィックス ディスプレイの下部にある 4 行のテキストです。
Apple IIe以降、128k のメモリを搭載したマシンで「ダブル高解像度」モードが利用可能になりました。このモードは、基本的に元の高解像度モードの解像度を複製しますが、低解像度パレットの 16 色すべてを含みます。Applesoft はこのモードを直接サポートしていません。Apple IIGS固有のモードも同様にサポートされていません。
拡張機能
Applesoft BASIC は、アンパサンド ( & ) コマンドとUSR()関数の 2 つの方法で拡張できます。これらは、メモリに格納されている低レベルのマシン言語ルーチンを呼び出す 2 つの機能で、高速化が必要なルーチンや、メモリ内の任意の関数またはデータに直接アクセスする必要があるルーチンに役立ちます。USR ()関数は 1 つの引数を取り、数値式で使用する計算された関数値を導出して返すようにプログラムできます。は、アドレスが事前に定義されている、実質的にCALLの省略形です。Applesoft ROM 内のルーチンを呼び出すことにより、アンパサンド ルーチンはアンパサンドに続く値を解析できます。アンパサンド ルーチンを使用して Applesoft を拡張するためのサードパーティの商用パッケージが多数ありました。
&
バグ
によるエラートラッピングの欠陥は、ONERRエラー処理ルーチンが を呼び出さない場合、システムスタックがリセットされないことを意味しRESUME、クラッシュにつながる可能性があります。[6]組み込みの疑似乱数ジェネレータ関数は、RND最初に電源を入れたときにジェネレータがシードされる方法により、予測可能な一連の出力を生成することができます。この動作は、Appleのドキュメントで関数が説明されている方法に反しています。[7]
パフォーマンス
ウォズニアックは当初、Integer BASIC を「Game BASIC」と呼んでいました (新しいコンピュータにBreakout のクローンを実装できるように作成したため)。 [2] Applesoft BASIC で作成されたアクション ゲームはほとんどなく、主な理由はすべての数学演算に浮動小数点数を使用するとパフォーマンスが低下するためです。
Applesoft BASIC プログラムは行のリンク リストとして保存されます。GOTOまたは には線形時間GOSUBがかかります。 一部のプログラムでは、サブルーチンを先頭に配置して、サブルーチンの呼び出し時間を短縮します。
Integer BASIC とは異なり、Applesoft は行が入力されたときにソース コード内のリテラル数値 (100 など) をバイナリに変換しません。代わりに、行が実行されるたびに ASCII 文字列が変換されます。変数の検索はこの変換よりも高速であることが多いため、ループに入る前にループ内で使用される数値定数を変数に格納すると高速になる場合があります。
サンプルコード

Applesoft BASIC でHello, World! は次のように入力できます。
10テキスト:ホーム
20 ? 「HELLO WORLD」
コロン ( :) で区切れば、同じコード行に複数のコマンドを含めることができます。 は?、Applesoft BASIC (および Microsoft BASIC のほぼすべてのバージョン) で「PRINT」のショートカットとして使用できますが、単語を綴ることは許容されるだけでなく標準的です。Applesoft は、入力されたプログラム内の「?」を「PRINT」と同じトークンに変換します (したがって、「?」を使用しても実際にはメモリは節約されません)。そのため、プログラムがリストされるときに、どちらも「PRINT」として表示されます。上記のプログラムは、LISTコマンドでは次のように表示されます。
10テキスト:ホーム20印刷「HELLO WORLD」
Applesoft II BASIC が最初にリリースされたのは 1978 年半ばで、カセット テープに入っていて、Apple II のマシン言語モニターを介してメモリにロードできました。1979 年に強化された Apple II+ がオリジナルの II に取って代わったとき、Applesoft は ROM に組み込まれ、起動可能なフロッピー ディスクがない場合でも電源投入時に自動的に起動するようになりました。逆に、Integer BASIC は ROM から削除され、DOS 3.3 ディスク上の実行可能ファイルになりました。
初期の進化
オリジナルの Applesoft は、1977 年 11 月のリファレンス マニュアルに記載されているように RAM に保存されており、後の Applesoft II よりも小さいインタープリタ コードを持ち、メモリを 8½ KB しか占有しません ( [8]後の Applesoft II が 10 KB 使用していたのに対し)。その結果、後の主流バージョン用に開発されたいくつかのコマンド機能が欠けています。
- Apple の「高解像度」グラフィックスをサポートするすべてのコマンド (合計 9)
- ONERR...GOTO と RESUME によるエラー トラップ
- マシンルーチンの省略形呼び出し「&」
- 画面をクリアするHOME(システムROMルーチンの呼び出し)
- テキスト出力制御 NORMAL、INVERSE、FLASH、SPEED=
- プリントスペース関数 SPC() はマニュアルの予約語としてリストされていますが、それ以外は文書化されていません (TAB() プリント関数は文書化されています)
- 数値配列のカセットテープ保存: STORE と RECALL
- デバイスの応答: WAIT
後のバージョンにもいくつかあるが、これらはすでに Apple の Integer BASIC に存在していた。
- プログラム行の削除: DEL
- マシンルーチンアクセス: CALL
- 周辺機器アクセス: IN# および PR# (ただし、「#」のない IN は予約語としてリストされています)
- メモリ範囲制御: HIMEM: および LOMEM:
- デバッグのための実行追跡: TRACE と NOTRACE
- 画面配置: HTAB と VTAB
- サブルーチンが POP を中止しています
- アナログ コントローラを読み取る関数 PDL() と、低解像度のグラフィック スクリーンを読み取る関数 SCRN() (どちらもシステム ROM ルーチンにアクセスします)
さらに、低解像度のグラフィック コマンドの名前は、Integer BASIC/Applesoft II の対応するコマンドの名前とは異なります。すべてのコマンド名は PLTx 形式であり、GR、COLOR=、PLOT、HLIN、VLIN はそれぞれ PLTG、PLTC、PLTP、PLTH、PLTV と呼ばれます。他のバージョンでは TEXT として知られているテキスト モードに戻るコマンドは単に TEX であり、プログラム行の最後のステートメントでなければならないという条件があります。
Applesoft BASIC 1.x は、後の Applesoft II よりも Microsoft のオリジナルの 6502 BASIC コードに近いものでした。メモリ サイズ? プロンプトが保持され、Microsoft の著作権表示が表示されました。Integer BASIC との一貫性を保つために、Microsoft のコードからの "Ok" プロンプトは ] 文字に置き換えられました。Applesoft 1.x は、ロード時に、代入ステートメントの REM ステートメントと LET キーワードを無効にして、代わりに lores グラフィックス コマンドを使用するかどうかをユーザーに確認しました。
USR() 関数も定義が異なり、存在しない CALL コマンドの代わりとして機能します。その引数は、数値をマシン言語ルーチンに渡すためのものではなく、ルーチン自体の呼び出しアドレスです。アドレスを事前に定義するための「フック」はありません。マニュアル内のいくつかの例はすべて、この関数を「システム モニタ ROM」ルーチン、または ROM ルーチンを操作するための短いユーザー ルーチンにアクセスするためだけに使用しています。関数自体によって返される値を計算するコードについては何も言及されていません。関数は常に「ダミー」変数に割り当てられていることが示されています。ダミー変数は、ユーザー コードによって値を設定するアクションがなければ、意味のない値が返されるだけです。値を返すアクセスされた ROM ルーチン (例では、PDL() および SCRN() 関数のサービスを提供するルーチン) でさえ、ユーザー ルーチンによって、後続のステートメントで個別に PEEK される場所に格納されるだけです。
Integer BASIC や Applesoft II とは異なり、ブール演算子 AND、OR、NOT は16 ビットの整数値に対してビット単位の演算を実行します。その範囲外の値が与えられた場合は、エラーが発生します。
OUT および PLT (および前述の IN) という用語は予約語のリストに表示されますが、マニュアルのどこにも説明されていません。
関連するBASIC
コレコは、自社のアダム・ホームコンピュータのSmartBASICはApplesoftとソースコード互換性があると主張した。 [9]
マイクロソフトは、 VTechのLaser 128 クローン向けに、Applesoftと互換性のあるBASICのライセンスを供与した。[10]
参照
- ALF の Formula Transfer Link、Applesoft BASIC の速度向上
- Chinese BASIC、Applesoft BASIC の中国語版
- AppleとMicrosoftのApple III BASIC
参考文献
- ^ TASC (The AppleSoft Compiler) ユーザーズマニュアル。ワシントン州ベルビュー: Microsoft Consumer Products。1981 年。
- ^ ab Wozniak, Steve (2014 年 5 月 1 日)。「Steve Wozniak が初代 Apple の BASIC をゼロから開発した経緯」Gizmodo。2014年5 月 2 日閲覧。
- ^ McCracken, Harry (2012年4月16日). 「Apple II Forever: Apple初の象徴的な製品の35周年記念トリビュート」. Time . ISSN 0040-781X . 2019年6月21日閲覧。
- ^ Herzfeld, Andy (2014 年 2 月 12 日). 「MacBasic – MacBasic の悲しい物語」. Folklore.org .
- ^ 「第16章: 言語」。Apple IIの歴史。 2010年7月。 2016年7月6日閲覧。
- ^ Applesoft BASIC プログラマーズリファレンスマニュアル (IIe のみ)。Apple Computer, Inc. 1982 年、p. 70。
- ^ Aldridge, James W. (1987 年 7 月). 「Apple II での乱数生成に関する注意事項」.行動研究方法、機器、およびコンピューター. 19 (4): 397–99. doi : 10.3758/BF03202585. S2CID 62633043 .
- ^ Applesoft 拡張精度浮動小数点基本言語リファレンスマニュアル。Apple Computer, Inc. 1977 年 11 月。
- ^ Coleco が Adam Computer System を発表。2016 年 5 月 3 日 [1983 年 9 月 28 日]。イベントは 31:55 に発生します。2021 年 11 月 22 日にオリジナルからアーカイブされました – YouTube 経由。Applesoft
BASIC を知っている人なら誰でも、Adam SmartBASIC も知っているでしょう。この BASIC、このインタープリターのすべての同じコマンド、同じコントロールが利用できます。実際、Applesoft グラフィック コマンドを使用するプログラムを紹介します... Adam を介して実行されます... 私たちが BASIC で、PEEK や POKE を行っていない場合、BASIC インタープリターより下のものについては、ソース コード互換性があります。
- ^ Grevstad, Eric (1986年12月). 「Laser 128 / An Affordable compatible」. inCider . p. 58. 2017年4月24日閲覧。
この記事には、GFDL ライセンスの Everything2 からのテキストが含まれています。
外部リンク
- 分解されたROM
- JavaScript での AppleSoft BASIC
