MBASICパラダイム命令型
設計者マイクロソフト
開発者マイクロソフト
影響を受けた言語BASIC
プラットフォームCP/M
ウェブサイト ⇒www.microsoft.com
テンプレートを表示
MBASIC(エムベーシック)は、CP/M向けのMicrosoft BASICである。MBASICは、マイクロソフトの最初の製品であるAltair BASICインタプリタの子孫である。MBASICは、Osborne 1に同梱されていた2つのバージョンのBASICのうちの1つである。「MBASIC」という名前は、BASICインタプリタのディスクファイル名 MBASIC.COM に由来する。
動作環境MBasic 5.21をZ80上のCP/Mシステム上で動作させ、当時としては典型的なモノクロモニタに表示させたもの。
MBASIC バージョン5では、最低28 kB のRAMと最低1台のディスクドライブを備えたCP/Mシステムが必要だった。
ホームコンピュータメーカーがそのコンピュータ固有のハードウェア機能を使用するためにカスタマイズしたMicrosoft BASIC-80とは異なり、MBASICは全ての入出力をCP/Mのシステムコールのみに依存していた。使用可能なのはCP/Mのコンソール(スクリーンとキーボード)、ラインプリンタ、ディスクデバイスのみだった。
カスタマイズされていない状態のMBASICには、グラフィックス、カラー、ジョイスティック、マウス、シリアル通信、ネットワーク、サウンド、リアルタイムクロックなどの機能はなかった。MBASICはホストのCP/Mの機能に完全には対応していなかった。例えば、フロッピーディスク上のファイルを整理するためのCP/Mのユーザ領域に対応していなかった。CP/Mシステムは一般的にシングルユーザでスタンドアローンであったため、ファイルやレコードのロックや、いかなる形態のマルチタスクにも対応していなかった。これらの制限を除けば、MBASICは、当時、BASICの強力で有用な実装であると考えられていた。 MBASICはインタプリタである。プログラムのソースはトークン化された形でメモリに格納され、BASICのキーワードを1バイトのトークンに置き換えることで、メモリ容量を節約し、実行を高速化した。行番号を先頭に書いた行はプログラムテキストとして保存され、行番号を先頭に書かないBASIC文はコマンドとして直ちに実行される。プログラムは編集のために画面に表示したり、圧縮されたバイナリ形式またはプレーンなASCIIテキストとしてディスクに保存したりすることができた。ソースの各行は行番号で識別され、GOTOやGOSUBの転送先として使用することができる。ソースの編集には行編集コマンドのみが提供されていた[1]。プログラムをプレーンテキストとして保存し、フル機能のテキストエディタで編集することがしばしば行われた。 プログラムテキスト、変数、ディスクバッファ、そしてオペレーティングシステム(CP/M)自体も、全てIntel 8080プロセッサの64キロバイトのアドレス空間を共有しなければならなかった。通常、MBASICを最初に起動したときには、64キロバイトのRAMを搭載したマシンであっても、プログラムやデータに使用できるメモリは32キロバイト以下になる。 REM キーワードやアポストロフィを先頭にしたコメント行をプログラムのテキストに配置することがはできたが、貴重なメモリスペースを占有してしまうため、ユーザがコメントをあまり残さないようになった。より大きく複雑なプログラムを実行できるようにするために、MBASICの後のバージョンでは、プログラムテキストの一部を読み込んでプログラム制御下で実行できるようにする関数が追加された( CHAIN
機能
言語システム
MBASICの特に優れた点は、シンタックスエラーやランタイムエラーのようなエラーメッセージが全文表示されることだった。MBASICには、実行時に行番号を表示する"trace"機能もあった。これは通常のプログラム出力と同じ画面スペースを占有するが、無限ループのような状態を検出するのに役立った。 データは、シーケンシャルファイル(CP/Mの規約により、各行の最後がCRLFで区切られている)として、または固定レコード長のランダムアクセスファイルとして、ディスクへの読み取り・保存ができ、十分な能力を持ったプログラマであれば、データベースタイプのレコード操作に使用することができる。 浮動小数点数のためのMicrosoft Binary Format MBASICには以下のデータ型があった。 文字列演算子には、部分文字列の選択、連結、代入、文字列が等しいかどうかのテストなどがある。 上記のデータ型の配列は7次元まで使用できる。関数や演算子は配列では動作しない。例えば、配列の代入はできない。当時の他のBASICの実装とは異なり、MBASICは行列演算、複素数、金融計算用の十進数(BCD)データ型に対応していない。典型的なCP/Mシステムには浮動小数点演算ハードウェアがなかったため、浮動小数点演算は全てソフトウェアで行われた。内蔵の数学関数(三角関数、対数、指数、平方根)は単精度の結果しか得られなかった。ソフトウェアによる疑似乱数発生器が提供されていた。これは、ユーザが入力したシード値から、ゲームやシミュレーションに有用な数列を得るものである。MBASICには代入文のための LET キーワードがあったが、なくても代入できた。 マイクロコンピュータにおけるのBASICの初期のバージョンでは、1文字または2文字の変数名しか使用できず、複雑なプログラムでは変数の意味を思い出すのが困難となった。MBASICバージョン5では、40文字までの識別子を使用できるようになり、プログラマは変数に読みやすい名前を付けることができるようになった。 MBASICの制御構造には、条件判定の IF...THEN...ELSE... 、 WHILE...WEND ループ、 GOTO 、 GOSUB があった。 CASE はなかったが、 ON...GOTO... による多方向分岐があった。サブルーチンには引数がなく、全ての変数はグローバル変数だった。MBASICは構造化プログラミングを必須としていなかったので、容易にスパゲッティコードとなってしまった。 1970年代後半から1980年代前半の8ビットコンピュータのBASICについての議論は、メモリへの直接読み書きのためのPEEKとPOKEの重要性への言及が不可欠である。これらのシステムには通常、メモリ保護機能がなかったため、プログラマはOSの一部の通常の方法では利用できない機能にアクセスすることができた。これにより、ユーザプログラムによってシステムがハングアップする可能性も高くなった。例えば、CP/Mプログラマは、(システムBIOSが対応していれば)BASIC がコンソールデバイスをシリアルポートに切り替えるために POKE 関数を使用した。リアルタイムクロックを持つマシンでは、時刻を取得するためにPEEK命令を使用していた。 より複雑な操作のために、MBASICはBASICプログラムから呼び出すことができるユーザ定義の関数を仕様できるようにした。これは通常メモリの予約領域に配置されたり、一連の機械語コード(オペコード)として文字列定数にPOKEされたりする。また、MBASICには、8080のハードウェア入出力ポートに直接読み書きするINP命令とOUT命令もある。少なくともOsborne 1では、全てのI/O命令はシステムで使用するためにプリエンプションされていたが、この命令は周辺機器を制御するために使用することができる。 PEEKやPOKE、機械語のユーザ関数を利用したMBASICプログラムは、そのままでは異なる機種間の移植性がなかった。 CP/M用のMicrosof BASIC-80の他に、ISIS-II マイクロソフトは、MBASICと同様のソース言語を使用するCP/M BASICコンパイラ・BASCOMを販売した。MBASICでデバッグされたプログラムはBASCOMでコンパイルすることができた。プログラムのテキストがメモリに残らず、コンパイラのランタイム要素がインタプリタよりも小さかったため、ユーザデータに使用できるメモリが増えた。また、実際のプログラム実行速度は約3倍に向上した。 開発者たちは、人気はあったが遅くてぎこちないCBASIC
ファイルと入出力
変数とデータ型
8ビット 文字列データ。文字列長は0から255文字。
16ビット 整数
32ビット 浮動小数点数(単精度)
64ビット 浮動小数点数(倍精度)
制御構造
PEEK、POKE、ユーザ関数
MBASICの後継
BASCOM