特集
ソフトウェア編
MSX BASIC仕様
基本はビジネス仕様BASIC
ハードウェア編でも書いたように、MSXにはCRTCに9918、PSGに8910が使用されるため、システムソフトウェアとなるBASICもこれらの機能をサポートしています。MSX BASICの基本となったのはマイクロソフト社のVer4.5ビジネス仕様BASICで、これは14桁の倍精度演算がデフォルトとなっているものです。従って関数演算もすべて倍制度の14桁の結果が戻されます。また演算は整数演算を除いてBCD(2進化10進)演算で行われ、バイナリー演算のような誤差を生じないのが大きな特徴です。
整数型も用意され-32768~32767までの整数を高速に扱うことができます。
演算子には、単項演算子に-、NOT。二項演算子に+、-、*、/、AND、ORがあります。またプリフィックスには&H(16進数)、&O(8進数)の他に&Bが追加されています。関数にもBIN$というものがありますが、これらは2進数を直接扱えるものです。
拡張性と互換性を最優先
MSXでは互換性と拡張性が重視されますが、このためBASICの先頭部分にはCP/MでのBIOSと同じ“ROMOS”が置かれます。これはBASIC内部の機械語エントリーアドレスをまとめたもので、これを利用することにより機械語プログラムの開発が簡易になり、将来に渡ってプログラムの互換性を保つことが可能になります。
またMSXマシン本体および拡張カートリッジの拡張に備え、BASICの主要な部分には多くのフックが設けられています。これにより、コマンドを追加したり、コマンドの実行内容を入れ替えたりすることが可能になります。これら“ROMOS”やフックアドレスの内容は、アスキー誌上などで公開することになっています。
ディスクBASICも勿論供給されますが、これはROMカートリッジにインターフェイスと共に収められた製品として販売されることになると予想されます。
また、マイクロソフト社では、MSX BASICのBASICコンパイラも供給する予定で計画を進めており、さらに高度な利用が可能になることが期待できるという、低価格帯のホームパーソナルコンピュータとしては贅沢ともいえる内容となっています。
MSX BASIC命令の種類
MSXコンピュータに搭載される予定のMSX BASICの命令と関数を以下に掲載します。但し、これらは83年6月時点での仕様で、命令の種類や機能について最終仕様とは異なる場合が十分考えられます。ご注意下さい。また、ディスクBASICの仕様については掲載していません。なおBASICの詳細についても、最終仕様が決定次第アスキー誌上などでお知らせする予定です。
表には、各々の命令・関数について簡単に解説してあります。これらは、追加された命令・関数や演算精度などを除いてN-BASICなど現行のマイクロソフト社製BASICとほぼ同じ機能を持っています。
各命令・関数の表記で、< >は必要なパラメータ、〔 〕は省略可能、|は2つのパラメータの内どちらかを与える場合をそれぞれ示しています。
コマンド
AUTO
書式 | AUTO 〔<開始行番号>〔,<増分>〕〕 |
機能 | 行番号を自動的に発生する。 |
CONT
書式 | CONT |
機能 | 中断したプログラムの実行を再開する。 |
DELETE
書式 | DELETE 〔<始点行番号>〕〔-<終点行番号>〕} |
機能 | プログラムを部分的に削除する。 |
LIST/LLIST
書式 | LIST 〔<始点行番号>〕〔-<終点行番号>〕 LLIST 〔<始点行番号>〕〔-<終点行番号>〕 |
機能 | プログラムリストを画面/プリンタに出力する。 |
NEW
書式 | NEW |
機能 | プログラムを消去し、すべての変数を初期化する。 |
RENUM
書式 | RENUM 〔<新行番号>〕〔,〔<旧行番号>〕〔,<増分>〕〕 |
機能 | プログラムの行番号を付け直す。 |
RUN
書式 | RUN 〔<行番号>〕 |
機能 | プログラムの実行を開始する。 |
SAVE/LOAD/MERGE
書式 | SAVE <デバイス・ディスクリプタ> LOAD <デバイス・ディスクリプタ> MERGE <デバイス・ディスクリプタ> |
機能 | 指定されたデバイスに対しプログラムのロード/セーブ/マージを行う。この時、データはすべてアスキー・モードで行われる。 |
BLOAD/BSAVE
書式 | BSAVE <デバイス・ディスクリプタ>,<開始アドレス>,<終了アドレス>〔,<実行開始アドレス>〕 |
機能 | 指定されたデバイスに機械語データをSAVEする。実行開始アドレスが省略された場合は開始アドレスが実行開始アドレスとなる。 |
書式 | BLOAD <デバイス・ディスクリプタ>〔,R〕〔,<オフセット>〕 |
機能 | 指定されたデバイスから機会度データをLOADする。Rオプションが指定された場合にはLOAD終了後BSAVEで設定されているアドレスから実行を開始する。 |
CSAVE/CLOAD
書式 | CSAVE <ファイル名>〔,S〕 |
機能 | Sオプションが付かない場合は現在のプログラムをカセットにセーブする。Sオプションが付いた場合には画面の内容がセーブされる。 |
書式 | CLOAD <ファイル名> |
機能 | カセットからプログラムまたは画面データをロードする。 |
TRON/TROFF
書式 | TRON/TROFF |
機能 | プログラムのトレースを開始/中断する。 |
標準ステートメント(ファイル関係も含む)
CLEAR
書式 | CLEAR 〔<文字列領域の大きさ>〔,<メモリ上限アドレス>〕 |
機能 | すべての変数を初期化し、文字列領域、ユーザーエリアの大きさを設定する。 |
DATA
書式 | DATA <定数のリスト> |
機能 | READ分で読み込まれる数値定数または文字定数を格納する。 |
DIM
書式 | DIM <添字付き変数のリスト> |
機能 | 配列変数の要素の大きさを宣言する。 |
DEFINT/SNG/DBL/STR
書式 | DEFINT <変数名の範囲> DEFSNG <変数名の範囲> DEFDBL <変数名の範囲> DEFSTR <変数名の範囲> |
機能 | 変数の型を整数/短精度/倍精度/文字型と宣言する。 |
DEFFN
書式 | DEF FN<名前>〔(<引数のリスト>〕)=<関数の定義式> |
機能 | ユーザ定義関数の設定。 |
END
書式 | END |
機能 | プログラムの実行を終了する。 |
ERROR
書式 | ERROR <整数式> |
機能 | エラー発生のシミュレート。 |
FOR~NEXT
書式 | FOR <変数名>=<初期値> TO <終値>〔 STEP <増分>〕 NEXT 〔<変数名>〔,<変数名>…〕 |
機能 | FOR文からNEXT文までの一覧の命令を指定回数だけ繰り返して実行する。 |
GOSUB~RETURN
書式 | GOSUB <行番号> RETURN 〔<行番号>〕 |
機能 | サブルーチンの呼び出し/復帰。 |
GOTO
書式 | GOTO <行番号> |
機能 | 指定した行への分岐。 |
IF~THEN/IF~GOTO
書式 | IF <式> THEN <ステートメント>|<行番号> IF <式> GOTO <行番号> |
機能 | 式の値によって条件判断を行う。 |
INPUT
書式 | INPUT 〔“<プロンプト文字列>”;〕<変数のリスト> |
機能 | 指定した変数に値を入力する。 |
KEY/KEY LIST
書式 | KEY (<式>),<文字式> |
機能 | プログラマブル・ファンクションキーと設定をする。 |
書式 | KEY LIST |
機能 | プログラマブル・ファンクションキーの内容を表示する。 |
LINEINPUT
書式 | LINE INPUT 〔“<プロンプト文字列>”;〕<文字変数のリスト> |
機能 | 1行を単位とした文字列を入力する。 |
LET
書式 | 〔LET〕 <変数名>=<式> |
機能 | 変数に値を代入する (LETは省略可能)。 |
MAXFILES
書式 | MAXFILES=<式> |
機能 | 一度にオープンすることのできるファイルの数を設定する。式の値は0から15までであり、0の場合はLOAD/SAVEのみとなる。 |
ON ERROR GOTO
書式 | ON ERROR GOTO <行番号> |
機能 | エラー処理ルーチンの開始行番号を定義する。 |
ON GOTO/GOSUB
書式 | ON <式> GOTO <行番号のリスト> ON <式> GOSUB <行番号のリスト> |
機能 | 式の値によって、指定されたいくつかの行に分岐する。 |
~ON/OFF/STOP
書式 | KEY 〔(<式>)〕 <ON|OFF|STOP> |
機能 | ファンクションキーによる割り込みの可否を設定する。 |
書式 | STRIG〔(<式>)〕 <ON|OFF|STOP> |
機能 | ジョイスティックのトリガによる割り込みの可否を設定する。 |
書式 | STOP <ON|OFF|STOP> |
機能 | ストップキーによる割り込みの可否を設定する。 |
書式 | SPRITE <ON|OFF|STOP> |
機能 | スプライトパターンの衝突(重なり)による割り込みの可否を設定する。 |
書式 | INTERVAL <ON|OFF|STOP> |
機能 | インターバルタイマによる割り込みの可否を設定する。 |
ON~GOSUB
書式 | ON KEY GOSUB <行番号> |
機能 | ファンクションキーによる割り込みルーチンの開始行を定義する。 |
書式 | ON STOP GOSUB <行番号> |
機能 | ストップキーによる割り込みルーチンの開始行を定義する。 |
書式 | ON STRIG GOSUB <行番号> |
機能 | ジョイスティックのトリガーによる割り込みルーチンの開始行を定義する。 |
書式 | ON SPRITE GOSUB <行番号> |
機能 | スプライトパターンの衝突による割り込みルーチンの開始行を定義する。 |
書式 | ON INTERVAL =<インターバル時間> GOSUB <行番号> |
機能 | インターバルタイマによる割り込みルーチンの開始行を定義する。 |
OPEN
書式 | OPEN <デバイス・ディスクリプタ>〔FOR INPUT|OUTPUT〕AS 〔#〕<ファイル番号> |
機能 | 各デバイスをオープンする。デバイス・ディスクリプタは次の通り。 KYBD:キーボード CAS:カセット CRT:CRTディスプレイ LPT:プリンタ |
OUT
書式 | OUT <整数式1>,<整数式2> |
機能 | 整数式1で指定されるアドレスのポートに、整数式2の値を入力する。 |
POKE
書式 | POKE <メモリのアドレス>,<整数式> |
機能 | 指定されたアドレスに整数式の内容を書き込む。 |
PRINT
書式 | PRINT <変数のリスト> LPRINT <変数のリスト> |
機能 | 画面/プリンタに変数等の内容を出力する。 |
PRINT/LPRINT USING
書式 | PRINT USING <書式制御文字列>;<変数のリスト> LPRINT USING <書式制御文字列>;<変数のリスト> |
機能 | 画面/プリンタに指定された書式で変数等の内容を出力する。 |
PRINT#/INPUT#
書式 | PRINT #<ファイル番号>,<変数のリスト> INPUT #<ファイル番号>,<変数のリスト> |
|機能|指定されたファイルに対して入出力を行う。
READ
書式 | READ <変数のリスト> |
機能 | DATA分の定数を変数に読み込む。 |
REM
書式 | REM <文字列> |
機能 | プログラムに注釈を入れる。 |
RESTORE
書式 | RETORE <行番号> |
機能 | READ文で読むDATA文の先頭行番号を指定する。 |
RESUME
書式 | RESUME RESUME 0 RESUME NEXT RESUME <行番号> |
機能 | エラー処理終了後、プログラムの実行を指定位置から再開する。 |
STOP
書式 | STOP |
機能 | プログラムの実行を中断し、コマンド待ちの状態に戻る。 |
TIME
書式 | TIME=<式> |
機能 | 内部時計をセットする。内部時計は1/60秒ごとに1ずつカウントアップされる。 |
グラフィック・サウンド関係ステートメント
BEEP
書式 | BEEP |
機能 | 内蔵ブザーを鳴らす。 |
CIRCLE
書式 | CIRCLE (<X座標>,<Y座標>),<半径>〔,<カラー>〕〔,<始点位置>〕〔,<終点位置>〕〔,<縦横比>〕 |
機能 | 指定したパラメータにより円を描く。 |
CLS
書式 | CLS |
機能 | 画面を消去する。 |
COLOR
書式 | COLOR 〔<フォアグラウンド>〕〔,<バックグラウンド>〕〔,<ボーダ>〕 |
機能 | フォアグラウンド、バックグラウンド、ボーダの色を指定する。 デフォルトは15,5,4。またカラーコードは次の通り。 0 透明 1 黒 2 緑 3 ライトグリーン 4 ダークブルー 5 ライトブルー 6 ダークレッド 7 シアン 8 赤 9 ライトレッド 10 ダークイエロー 11 ライトイエロー 12ダークグリーン 13 マゼンダ 14 グレー 15 白 |
DRAW
書式 | DRAW <文字式> |
機能 | 文字式で示されるグラフィック・マクロランゲージに従い図形を描く。 |
GET/PUT
書式 | GET (<X1座標>,<Y1座標>)-(<X2座標>,<Y2座標>),<配列名> PUT (<X座標>,<Y座標>),<配列名>〔,<オプション>〕 |
機能 | グラフィックスクリーンのパターンを配列に取り込む/書き込む。 オプションはPSET,PRESET,AND,OR,XOR |
LINE
書式 | LINE (<X座標>,<Y座標>)〔-(<X座標>,<Y座標>)〕〔,<カラー>,<BIBF>〕 |
機能 | 指定されたカラーで線または四角を描く。 |
LOCATE
書式 | LOCATE <X座標>,<Y座標>〔,<カーソルスイッチ>〕 |
機能 | カーソルを指定された座標に移動させる。 |
PUT SPRITE
書式 | PUT SPRITE <スプライト面番号>〔,(<X座標>,<Y座標>)〕〔,<カラーコード>〕〔,<スプライト番号>〕 |
機能 | 指定されたスプライトパターンを表示する。この時X座標の値は-32~255、Y座標の値は-32~191。ただしY座標の値が209の時は指定されたスプライトを消去、また208の時は指定された面以降のスプライトを消去する。 |
PAINT
書式 | PAINT (<X座標>,<Y座標>)〔,<カラー>〕〔,<境界色>〕 |
機能 | 指定された範囲内の塗りつぶしを行う。 |
PLAY
書式 | PLAY <文字列>,<文字列>,<文字列> |
機能 | ミュージック・マクロランゲージに従い音を出す。 |
PSET/PRESET
書式 | PSET (<X座標>,<Y座標>)〔,<カラー>〕 PRESET (<X座標>,<Y座標>) |
機能 | 指定された座標に点を描く/点を消す。 |
SCREEN
書式 | SCREEN 〔<モード>〕〔,<オプション>〕 |
機能 | スクリーンモードを設定する。モード・オプションの値は次の通り。 モード: 0 テキスト・モード 1 ハイレゾリューションモード 2 マルチカラー・ローレゾリューション・モード オプション: テキストモード 0 ファンクションキーを表示しない。 1 ファンクションキーを表示する。 グラフィックモード 0 8×8の標準スプライト 1 8×8の拡大スプライト 2 16×16の標準スプライト 3 16×16の拡大スプライト |
SPRITE$
書式 | SPRITE$(<式>)=<文字列> |
機能 | スプライトパターンを定義する。式の値及び文字列の長さは次の通り。 SCREENのオプションの値 0または1:式は256以下、文字列の長さは8文字 2または3:式は64以下、文字列の長さは32文字 |
VPOKE
書式 | VPOKE <VRAMアドレス>,<整数式> |
機能 | VRAMに直接性数式の内容を書き込む。この時VRAMアドレスは0~16383、変数式は0~255の範囲でなければならない。 |
~ ON/OFF
書式 | CLICK <ON|OFF> |
機能 | キーを押した時にクリック音を出すか否かを設定する。 |
書式 | MOTOR <ON|OFF> |
機能 | カセットテープレコーダのモータを動かすか否かを設定する。 |
書式 | SOUND <ON|OFF> |
機能 | PSGの出力をカセット出力に出すか否かの設定。 |
SOUND
書式 | SOUND <式1>,<式2> |
機能 | 式1で示されるPSGのレジスタに式2の内容を書き込む。 |
WIDTH
書式 | WIDTH <式> |
機能 | テキスト・モードにおける横方向の文字数を設定する。 |
関数
BIN$
書式 | BIN$(<式>) |
機能 | 式の値を2進数に相当する文字列に変換する。 |
POINT
書式 | POINT (<X座標>,<Y座標>) |
機能 | 指定した座標の色を返す。 |
VPEEK
書式 | VPEEK (<VRAMアドレス>) |
機能 | 指定したVRAMアドレスの内容を返す。アドレスの範囲は0~16383。 |
STICK
書式 | STICK (<式>) |
機能 | 式で示されるジョイスティックの方向を返す。式の値は0~3で0の場合はカーソルを示す。また返す値は次の通り。![]() |
STRIG
書式 | STRIG (<式>) |
機能 | 式で示されるジョイスティックのボタンの状態を返す。式の値は0~3で0の場合はスペースバーを示す。ボタンが押されている場合は0を返し、そうでない場合は-1を返す。 |
PDL
書式 | PDL (<式>) |
機能 | 式で示されるパドルの状態を返す。式の値が1または2の場合はポート1につながっているパドル、3または4に場合はポート2に接続されているパドルの状態を返す。 |
PAD
書式 | PAD (<式>) |
機能 | タッチパッドの状態を返す。式の値が0の時はタッチパッドが押されている(-1)か否か(0)を返し、1の時は押されている場所のX座標、2の時は押されている場所のY座標を返す。また式の値が3の時はパッド上のスイッチが押されている(-1)か否か(0)を返す。 |
PLAY
書式 | PLAY (<式>) |
機能 | 式で示されるチャンネルがPLAY命令を実行中(演奏中)か否かを返す。演奏中の場合は-1、そうでない場合は0、式の値は0~3の範囲であり、3の場合はすべてのチャンネルについて調べる。 |
TIME
書式 | TIME |
機能 | 内部時計の値を返す。 |
算術関数・文字関数・特殊関数
ABS(数式) | 絶対値を与える。 |
ASC(文字式) | 文字のコードを返す。 |
ATN(数式) | 逆正接の値を返す。 |
CHR$(数式) | コードに対応する文字を返す。 |
COS(数式) | 余弦の値を与える。 |
EXP(数式) | eを底とした指数関数の値を与える。 |
ERR/ERL | エラーコード及びその行番号を返す。 |
FRE(0)/FRE("") | メモリの未使用領域の大きさを返す。引数によりテキストエリア、文字領域の残りを現す。 |
INKEY$ | キーボードが押されていればその文字を、押されていなければヌルストリングを返す。 |
INP(数式) | 指定したポートの値を返す。 |
INSTR(〔<数式>,〕<文字列1>,<文字列2>) | 文字列1の中から文字列2を捜してその位置を返す。 |
INT(数式) | 小数点以下を切り捨てた値を返す。 |
LEFT$(<文字列>,<数式>) | 文字列の左側から指定した長さの文字列を返す。 |
LEN(<文字列>) | 文字列の長さを返す。 |
LOG(数式) | 自然対数の値を与える。 |
LPOS(数式) | プリンタバッファ内のプリントヘッドの位置を返す。 |
MID$(<文字列>,<数式1>〔,<数式2>〕) | 文字列の任意の位置から任意の長さの文字列を返す。 |
PEEK(数式) | メモリ上の指定したアドレスの内容を返す。 |
POS(数式) | 画面上でのカーソルの水平位置を返す。 |
RIGHT$(<文字列>,<数式>) | 文字列の右側から指定した長さの文字列を返す。 |
RND(数式) | 乱数の値を与える。 |
SGN(数式) | 値の正負の符号を返す。 |
SIN(数式) | 正弦の値を返す。 |
SPACE$(数式) | 指定した長さの空白の文字列を返す。 |
SQR(数式) | 平方根の値を与える。 |
STR$(数式) | 数値をそれを表す文字列にして返す。 |
STRING$(<数式1>,<数式2>|<文字列>) | 任意の文字を任意の長さの文字列にして返す。 |
TAB(数式) | カーソルのある行の任意の位置まで空白を出力する。 |
TAN(数式) | 正接の値を与える。 |
USR(数式) | DEFUSRで指定した機械語サブルーチンをコールする。 |
VAL(<文字列>) | 文字列の表す値を返す。 |
VARPTR(<変数名>|#<ファイル番号>) | 変数またはファイルの格納されているメモリアドレスを返す。 |
月刊ASCII1983年8月号(通巻74号)P118~121 特集記事より転載