IBM Personal Computer Basic (一般的にはIBM BASICと短縮される) は、IBMが1981年にIBM Personal Computer, Model 5150 (IBM PC) で最初にリリースしたプログラミング言語である。IBMは、PCとPCjrのためにMicrosoftからライセンスを受けたMicrosoft BASICインタプリタの4つの異なるバージョンをリリースした。それらは、Cassette BASIC、Disk BASIC、Advanced BASIC (BASICA)、Cartridge BASICとして知られている。Disk BASICとAdvanced BASICのバージョンは、IBM PC DOSからPC DOS 4まで含まれていた。 ANSI標準BASICの機能に加えて、IBMバージョンは、IBM PCラインのグラフィックスとサウンドハードウェアをサポートした。ソースコードは全画面エディタで入力でき、基本的なプログラムデバッグ用に提供された機能は非常に限られていた。IBMは1982年のPC DOS 1.10のリリースと同時に、PC用のMicrosoft BASICコンパイラバージョンもリリースした。

## 背景

IBMは、同社のメインフレーム用のBASICの独自バージョンをすでに持っていたにもかかわらず、IBMパーソナルコンピュータ用にMicrosoft BASICのライセンスを取得した。IBM PC開発者のドン・エストリッジは、「Microsoft BASICには世界中で何十万人ものユーザーがいました。それについてどう反論しますか?」と述べた。

## IBM Cassette BASIC

IBM Cassette BASIC は、初代IBM PCの 8 KBのBIOS ROMとは別に、32キロバイト (KB) の読み取り専用メモリ (ROM) で提供され、オペレーティングシステムを実行する必要はなかった。Cassette BASICは、フロッピーディスクドライブがインストールされていない場合や、電源投入時に起動コードが起動可能なフロッピーディスクを見つけられなかった場合に、INT 18h (英語版) を介して BIOS によって起動されるデフォルトのユーザーインターフェースを提供した。Cassette BASICという名前は、プログラムやデータを保存するためにフロッピーディスクではなくカセットテープを使用したことに由来している。Cassette BASICは、初代PCとXT、そしてPS/2ラインの初期モデルのROMに組み込まれていた。これは、IBMカセットテープインターフェース (英語版) へのプログラムの読出しと保存のみをサポートしており、初代モデル5150以降のモデルでは利用できない。5150のエントリーレベルバージョンには16KBのランダムアクセスメモリ(RAM)が搭載されていたが、これはCassette BASICを実行するのに十分であった。ただし、ディスクドライブを搭載していないPCはほとんど販売されていなかったため、Cassette BASICはほとんど使用されていなかった。Cassette BASICには3つのバージョンがある。C1.00 (16k-64kマザーボードを持つ初期のIBM PCにある)、C1.10 (それ以降のすべてのIBM PC、XT、AT、およびPS/2にある)、およびC1.20 (PCjrにある)。

## IBM Disk BASIC

IBM Disk BASIC (BASIC.COM) は、最初のIBM PC DOSに含まれていた。BASIC.COMは32 KBのCassette BASIC ROMを使用しているため、Compaq Portableのような互換性の高いPC互換機でも動作しなかった。Disk BASICという名前は、カセットテープと同様に、プログラムやデータを保存するためにフロッピーディスクを使っていたことに由来する。ディスクベースのコードは、ROM常駐コードの誤りを修正し、フロッピーディスクとシリアルポートのサポートを追加した。

Disk BASICは、バージョン番号の前にDという文字を使用していることで識別できる。ディスクのサポートとCassette BASICに欠けていたいくつかの機能が追加されているが、BASICAの拡張サウンド/グラフィック機能は含まれていない。Disk BASICの主な目的は、わずか48KBのメモリを持つIBM PC用の「軽量」バージョンとしてである。BASIC.COMはユーザーコードのために約23 KB の空き容量を持っていたのに対し、BASICAは約17 KBしか持っていなかった。1986年までに、すべての新しいPCは少なくとも256kで出荷され、3.00以降のDOSバージョンは、バッチファイルとの互換性のためにBASICA.COMと呼ばれる小さなスタブだけにDisk BASICを縮小した。このように余分なRAMがあっても、BASICは、Cassette BASIC、BASIC.COM、BASICAのいずれであっても、ユーザプログラムのために割り当てて管理できるのは61KB弱であった。

## IBM Advanced BASIC

IBM Advanced BASIC (BASICA.COM) も初代IBM PC DOSに搭載されており、Cassette BASICのROM常駐コードを必要とした。これは、ディスクファイルへのアクセス、ディスクへのプログラムの保存、PC内蔵スピーカーを使ったモノラルサウンド、ピクセルの設定や消去、線や円の描画、色の設定などを行うグラフィックス機能、通信やジョイスティックの押下などのイベント処理などの機能を追加したものである。BASICAは、IBM以外のコンピュータ (いわゆる「100%互換機」であっても) やそれ以降のIBMモデルでは、必要とされるROM BASICがないため動作しない。

BASICAのバージョンはそれぞれのDOSと同じで、v1.00から始まりv3.30で終わった。BASICAの初期のバージョンはサブディレクトリをサポートしておらず、いくつかのグラフィックコマンドの機能が若干異なっていた。例として、LINE文を使用して画面外に続く線を描画した場合、BASIC 1.xはそれらの線を最も近い隣接する線と交差させるだけであるが、BASIC 2.x以降では、それらの線は画面外に出てしまい、交差されない。BASIC 1.xのPAINTコマンドは、指定された座標から塗りつぶしを開始し、上下方向に交互に外側に展開するのに対し、BASIC 2.xでは開始座標より下のすべてを塗りつぶし、終了後にその上のすべてを塗りつぶす。BASIC 1.xのPAINTコマンドはまた、システムスタックをストレージに使用しており、複雑な領域を塗りつぶすときにOVERFLOWエラーが発生する可能性がある。これを解決するために、CLEAR文を使用してBASICのスタックを拡張することができる (128 バイトがデフォルトサイズ)。BASIC 2.xはペイント時にスタックを使用しないので、この問題は起こらない。

Compaq BASIC 1.13はPC用の最初のスタンドアロンBASIC (Cassette BASICの実行を必要としない) であり、IBM BASICA 1.00と1.10以外のBASICの唯一のバージョンであるFCBを使用し、交差する線を含むオリジナルのLINE文を含んでいた (Compaq BASIC 1.13 のPAINT文は、新しい塗りつぶしアルゴリズムを使用し、スタックを使用しない、以降のすべてのバージョンの BASICA/GW-BASICと同様に動作した)。

PC DOSの初期バージョンには、BASICAゲームのDONKEY.BASを含む、PCの機能を示すいくつかのサンプルBASICプログラムが含まれている。

GW-BASICは、プログラムにCassette BASICコードが含まれていることを除いてBASICAと同じであり、これによりIBM以外のコンピュータや、ROMにCassette BASIC が含まれていない後の IBMモデルでも動作するようになった。

## IBM PCjr Cartridge BASIC

BASICのROMカートリッジバージョンは、1984年に出荷されたIBM PCjrでのみ利用可能で、そのマシンで可能な追加のグラフィックモードとサウンド機能をサポートしている。これはAdvanced BASICのスーパーセットである。Cartridge BASICは、PCjrの最初の128KBのメモリ内でのみ動作し、拡張RAMでは動作しない。つまり、DEF SEG機能を利用して&H1FF0以上のメモリセグメントをポイントすることはできない。

Cartridge BASICは、DOSプロンプトでBASICAと入力することで起動する。逆に、IBM BASICAバージョン2.1以降では、PCjrを検出すると実行を拒否するが、パッチを適用してこれを回避できる。

## 操作

Cassette BASICは、PCやPCjrが起動可能なディスクやカートリッジなしで起動されたときにロードさる。Disk BASICとAdvanced BASICは、メモリの割り当てを制御するためのオプションのパラメータと一緒に、コマンド名 (BASICとBASICA) がDOSコマンドプロンプトで入力されるとロードされる (代わりにCartridge BASICを起動するPCjrを除く)。ロードされると、サインオン識別メッセージにプログラムのバージョン番号が表示され、フルスクリーンのテキストエディタが起動する (右の画像を参照)。ファンクションキーには、画面下部に表示される共通のコマンドが割り当てられている。コマンドを入力してプログラムをロードしたり保存したり、式を入力して直接 (即時) モード (英語版) で実行したりすることができる。入力行が数字で始まる場合、言語システムは次のテキスト行をプログラムソースの一部として保存するので、プログラマは各文の前に行番号を入力してプログラム全体を一行ずつ入力することができる。画面上にリスト出力される場合、行は行番号の昇順で表示される。表示されているプログラムソースコードの行を変更するには、カーソルキーでその行にカーソルを移動し、画面上のテキストを上書きする。プログラムソースはトークン化された形式で内部的に保存され、予約語は1バイトのトークンに置き換えられ、スペースと実行時間を節約する。プログラムは、コンパクトなトークン化された形式で保存することも、オプションで他のプログラムで表示および編集できるDOS ASCIIテキストファイルとして保存することもできる。他のほとんどのDOSアプリケーションと同様に、IBM BASICはテキストモードのプログラムであり、ウィンドウ、アイコン、マウスサポート、カットアンドペースト編集のための機能はない。

## 遺産

1983年に発売されたGW-BASICは、IBM社以外のMS-DOSコンピュータで配布されていたディスクベースのMicrosoft製品であり、IBM Cassette BASICを搭載していないコンピュータでもBASICAのすべてのグラフィックスモードと機能をサポートしている。

MS-DOSおよびPC DOSバージョンのBASICAの後継は、1991年に発売されたQBasicである。これは、Microsoft QuickBASICコンパイラの簡略版である。QBasicはインタプリタであり、ソースファイルをコンパイルすることはできないのに対し、QuickBASICは .EXE 実行ファイル形式でプログラムをコンパイルして保存することができる。