BASICで使用できる文字は、英文字(大文字・小文字)、数字、カナ文字、ひらがな、特殊記号、そしてグラフィック文字です。文字についての詳細は、巻末の「キャラクターコード表」を参照してください。漢字BASICのモードではシフトJISコードによって全角漢字を処理することができますが、この場合は半角ひらがなは扱いません。使用できる文字の中でも、特殊記号と呼ばれる文字はそれぞれ特別な意味を持っています。特殊記号のうち、演算子については、「式と演算」で説明します。現在BASICが着目している行番号を表します。プログラム実行中にエラーが発生したとき、LIST.と入力すると、エラーの発生した行が表示される。数値の範囲を指定するときに使います。100-200とすれば、100行から200行までが表示される。マルチステートメントの区切りとして使います。データを複数個指定するときに、その区切りとして使います。PRINT命令で使われた場合には、偶数番目のデータは左から15桁目に表示されます。データを複数個指定するときに、その区切りとして使います。PRINT命令で使われた場合には、データは前のデータに続いて表示されます。REM命令の代わりに用いて、注釈文を作ります。PRINT命令の代わりに用います。プログラムを見やすくするために、文中に好きなだけ空白を入れることができます。予約語(巻末の「予約語表」参照)の中には空白を入れることはできません。文字定数(「定数」参照)の中の空白は文字としての意味を持っています。文中の空白はプログラムの実行には影響を与えませんが、メモリには空白も記憶されます。↓BASICで扱うデータは、次のように分類することができます。BASICで扱うデータ1.文字列255文字以内の文字をつないだデータです。文字列には、BASICで使用できる文字ならばどれでも使うことができますが、文字列を算術演算に使うことはできません。数値は算術演算を行うことができるデータです。数値には整数型と実数型とがあり、数値の取る値はそれぞれで異なります。3.整数-32768から+32767までの整数です。整数型の数値を使う演算は実行時間が短くてすみます。実数には有効桁数によって、単精度実数と倍精度実数とがあります。BASICでは、実数を使った演算は全て倍精度実数に変換して行われ、結果も倍精度実数で得られますが、単精度実数として記憶したり、結果を単精度実数で受け取ることもできます。有効桁6桁の実数です。単精度実数で表せる数値は-9.99999E+62から9.99999E+62で、指数の範囲はE+62〜E-64までです。有効桁14桁の実数です。倍精度実数で表せる数値は-9.9999999999999E+62から+9.9999999999999E+62で、指数の範囲はE+62〜E-64までです。数値型データは必要に応じて、その型を他の型に変換することができます。型の変換は、次の規則にしたがって行われます。数値を異なる型の数値変数に代入する場合、数値は代入先の変数の型に変換される。精度の異なる数値を使った演算では、精度の低い方から高い方に変換されて演算が行われる。論理演算の場合、扱われる数値は全て整数型に変換され、結果は整数で得られる。実数が整数に変換される場合は、小数点以下は切り捨てられる。単精度実数型変数に代入すると、変数の値は有効数字6桁に直されたものになる。元の倍精度実数型の7桁目以降は、四捨五入される。文字型と数値型のデータの変換は、VAL、STR$関数を使う。定数とは、それぞれに固有の値を持ったデータのことです。定数の書き方は、先に述べたデータの型によって異なります。文字定数は、文字列を引用符(")で囲んで表します。文字列の長さは255文字以内でなければなりません。数字を引用符で囲むと文字列とみなされ、算術演算に用いることはできません。整数型の定数には、以下の4つの形式があります。1.10進形式-32768〜+32768までの整数です。負の整数の場合、数値の前に必ずマイナス符号(-)をつけなければなりませんが、プラス符号は省略できます。-32768〜+32768までの実数の後ろに%をつけると、小数点以下は切り捨てられて整数型の定数とみなされます。先頭に&Oをつけて8進数(0〜7)を並べたものです。範囲は&O0〜&O177777までですが、&O177777〜&O100000までは負の数、-1から-32768に対応します。先頭に&Hをつけて16進数(0〜9、A〜F)を並べたものです。範囲は&H0〜&HFFFFまでですが、&HFFFF〜&H8000までは負の数で、-1から-32768に対応します。先頭に&Bをつけて0と1を並べたものです。範囲は&B0〜&B1111111111111111までですが、&B1111111111111111〜&B1000000000000000までは負の数で、-1から-32768に対応します。10進数では-218468進形式、16進形式、2進形式で入力された数値は、PRINTやLPRINT命令で出力すると、10進形式で表示されます。10進以外の形式で出力するときは、それぞれOCT$、HEX$、BIN$を使って文字列として出力します。単精度実数の定数には、以下の3つの形式があります。6桁以内の実数あるいは整数と、Eを使った指数表示の組み合わせ(Eの範囲はE-64からE+62)。最後に!をつけた数値(数値が6桁を超えていると、7桁目が四捨五入される)。倍精度実数の定数には、以下の3つの形式があります。7桁以上の実数あるいは整数と、Eを使った指数表示の組み合わせ(Eの範囲はE-64からE+62)Eの代わりにDを使うこともできる。最後に#をつけた数値(数値が14桁を超えていると、15桁目が四捨五入される)。変数は、プログラム中で使うデータを格納するものでメモリ中に用意され、英字1文字あるいは英数字2文字からなる変数名がついています。変数に値を与える場合、変数の型は、それに代入されるデータの型と一致していなければなりません。変数に値を代入する前は、数値変数は0、文字変数はヌル(文字が何も入力されていない状態)であるものと見なされます。代入するデータの型に応じた変数の型は、変数名の最後に型宣言文字をつけることによって区別されます。型宣言文字の種類は以下の4つです。文字型この型宣言文字を用いることにより、変数名が同じであっても別の変数として扱うことができます(例えば、A$、A!など)。型宣言文字を省略すると、#(倍精度実数型)がついているとみなされます。変数の型はプログラム中で、DEFINT・SNG・DBL・STR命令を使用してグローバルに宣言することも可能です。この場合でも型宣言文字による指定は優先します。配列変数は、同じ性質を持つ複数個のデータの集まりで、X(1)、X(2)のように、変数名の後にカッコで番号をつけた形で用います。カッコの番号は添字といい、配列の中の何番目の要素であるかを表します。添字は常に0から始まります。配列を使うには、あらかじめDIM命令によって配列を宣言し、変数の名前とそこに入る要素の最大数を決めます。DIM命令を省略して配列を使用すると、添字の最大値は自動的に10に設定されます。複数の添字を持つ配列変数を使うこともできます。複数の添字を使った場合、配列は添字の個数に応じた次元になり、例えば、X(0,1,5)のように用います。配列の次元は、いくつ添字を指定するかによって決まります。次元は、理論的には255次元までとれることになっていますが、実際には1行の長さで指定できないので、もっと少なくなります。BASICにはBASIC自身が専用の目的のために持っている変数(システム変数)があります。システム変数は以下の9つです。1/60秒ごとに値が増える変数で、時間を計ることができる。この変数には0〜65535の値を代入することもできる。割り込みが禁止されている期間中は値が変化しないので、フロッピーディスクのアクセスなどがあるときは注意が必要。エラーが発生したとき、エラーが発生した行番号を値として持つ。この変数に値を代入することはできない。エラーが発生したとき、エラーの原因を表すエラーコードを値として持つ。この変数に値を代入することはできない。画面出力に関連するテーブルのアドレスを値として持つ。定義したスプライトパターンを値として持つ。VDPレジスタのデータを値として持つ。画面上のカーソルの垂直方向の位置を値として持つ。プリンタのヘッドの水平位置を値として持つ。画面上のカーソルの水平方向の位置を値として持つ。以下に、書く変数が使用するメモリの大きさを示します。各変数の領域がメモリ上に確保されるのは、変数に値を代入した時点、あるいはDIM命令で配列を宣言したときだけです。式とは、演算(計算)の手順を示すものであり、定数や変数を演算子(計算に使う特殊記号のこと)で結んだものです。式の演算結果は1個の数値または文字列になり、単に数値や文字だけのものも式と呼びます。これらの演算について説明します。算術演算子には次のようなものがあります。算術式の中に文字定数や文字変数が入ってはいけません。X+Y、X-Y演算子の優先順序も、この順番になります。順序を変更したいときにはカッコ(())を使えば、カッコ内の演算子は他の演算子より先に実行されます。1.\とMOD整数の割り算は/の代わりに\によって行えば、割り切れなかった場合に答の小数点以下が切り捨てられます。扱う数値が実数の場合は、演算が実行される前に小数点以下が切り捨てられます。余りを求めたいときにはMODを用います。この場合も、扱う数値が実数の場合は、演算が実行される前に小数点以下が切り捨てられます。zero」というエラーメッセージが表示され、プログラムを中断します。0に対しての負のべき乗を行った場合も同様です。3.オーバーフロー(桁あふれ)代入や演算の結果が、その変数の型の中で扱える範囲を超えた場合、桁あふれが起こります。この場合、「Overflow」というエラーメッセージが表示され、プログラムを中断します。関係演算子は、2つの数値または2つの文字列を比較するときに用います。関係演算の結果は、真(-1)、偽(0)で出され、IF命令などでプログラムの流れを変えるのに用いられます。以下に、関係演算子の意味と例をあげます。論理演算子は複数の条件を調べたり、ビット操作やブール演算を行ったりするのに用います。論理演算の結果は、ビットごとに0または1で返されます。各論理演算の内容を以下に示します。論理演算IF命令では、これらの論理演算を使って、複数の条件を判断することができます。関数とは、指定された数値に対して、ある決まった演算を行うもので、その演算の結果を返すものです。BASICには、関数として、SINやSQRなどの数値を扱うものや、CHR$やLEFT$などの文字列を扱うものなどがあります。最初から定義されたものではなく、ユーザーが自由に定義できる関数(DEFFN、DEFUSR)もあります。文字列は、演算子「+」を使ってつなげることができます。文字列も、数値の比較に使われるものと全く同じ関係演算子(=、<、>、<>、><、<=、=<、=>、>=)を用いて比較することができます。文字列の場合、それぞれの文字列の先頭から1文字ずつ文字を比較します。両者が全く同じ文字列の場合は、その2つの文字列は等しくなりますが、1文字でも違った場合は、その文字のキャラクタコードの大きい方の文字列が大きくなります。文字列の一方が短くて比較が途中で終わった場合は、短い文字列の方が小さくなります。">"PEN""cm">"CM""BASIC"="BASIC"文字列を比較することによって、文字列の内容を調べたり、文字をアルファベット順に並べ換えたりすることができます。演算は次の順位によって行われます。↓プログラムがダイレクトモードでの命令を実行しているときに、エラーが発生した場合、実行は中断され、エラーメッセージが画面に表示されます。YYYYという形で表示されます。このときXX・・・・・はエラーメッセージで、YYYYはエラーが見つかった行番号です(必ずしもエラーの原因となる行番号ではありませんので注意して下さい)。エラーメッセージ一覧」を参照してください。↓MSXの画面は次のものがあります。画面モードテキスト画面は主に文字や数を表示するための画面で、リストやメッセージを表示することができます。テキスト画面には最大横80×縦24文字表示できるモードと、最大横32×縦24文字表示できるモードがあります。グラフィック画面は点や線を描くための画面で、細かい点や線が描ける高解像度グラフィックモードと、4×4ドットのブロック単位で絵を描く低解像度グラフィックモードと画面の1ドット毎に色をつけることができるビットマップグラフィックモードがあります。BASICではこれらの12の画面のどれを使うかを、SCREEN命令を使って指定します。SCREEN命令でバッテリーバックアップされたメモリに記憶させておくことができます。各画面の色はCOLOR命令を使って変えることができます。0は横40×縦24キャラクタ)、ver.2.0では0〜8、ver.3.0では0〜12(ただし、9は使用できない)です。文字を表示するための画面です。1行の文字数はWIDTH命令を使って変えることができません。LOCATE命令での位置指定は、横(X軸方向)が0〜79(32×24の画面では、0〜31)、縦(Y軸方向)が0〜23の値で指定できます。10,10■テキストモード(縦80×横24)最大80×24文字を表示できます。1文字の大きさは、横6×縦8ドットです。この画面では、ひらがなの右側が欠けて表示されます。40以下のときは文字の大きさが2倍になります。テキストモード(80×24)■テキストモード(縦32×横24)最大32×24文字を表示できます。1文字の大きさは、横8×縦8ドットです。この画面では、スプライト機能を使うことができます。点や線、絵を描くための画面です。スプライト機能を使うこともできます。グラフィック画面はプログラム中だけで使うことができます。プログラムの実行が終わると、画面は自動的にテキスト画面に戻ります(SCREEN参照)。グラフィック画面で文字を表示するには、OPEN命令で"GRP:"を指定してから、PRINT#命令を使って行いますが漢字グラフィックモードでは普通のPRINT文でも可能です。グラフィック画面でどの位置に点を表示するかなどの指定は、横(X軸方向)が0〜511、縦(Y軸方向)が0〜211までの値で行います。2と4)横256個×縦192個のドットを使うことができる画面です。細かい点や線を描くことができます。横方向の8ドットごとに、2色までの色を使えます。3)横64×縦48のブロックの画面で、点を描単位が4×4ドットになっています。この1ブロックごとに色を付けることができます。6と7では512)×縦212個のドットを使うことができる画面です。細かい点や線を描くことができます。1ドット毎に16のパレットから選んだ色が使えます。8では各ドットに256の固定色から選んだ色を使います。BASICでは、基本的には次の16色の色を使うようになっています。色の指定は、それぞれのカラー番号で行います。指定の方法は、それぞれの命令を参照してください。各カラー番号がこのように決まっているとき、「カラーパレットが初期状態にある」と言います。カラーパレットを上記以外の色にするときは、COLOR=を使ってパレットを変更します。COLOR=(8,7,7,0)とすることによってパレット8は、明るい黄色になります。6では、0〜3、それ以外では0〜15のパレットが使えます。8では、パレットは使いません。カラー番号は次のように固定した色を意味しています。対応する緑、赤、青の明るさ例えば、&B11100000なら明るい緑になります。BASICには、解説した4つの画面のほかにスプライト面というものがあります。スプライト面は、0番から31番までの32枚があり、1枚の面に1個のすスプライトパターンを表示することができます。スプライト面は、普通の画面の前に重ねてある面と考えることができます。スプライト面にパターンを表示すると、そのパターンが元の画面の絵や文字の上に重なって見えます。2つ以上のスプライトパターンを重ねると、スプライト面番号の小さいほうのパターンが手前に見え、立体的なパターンのようになります。0以外のモードを使っているときに使うことができます。スプライトパターンの大きさは、8×8ドット、あるいは16×16ドットです。8×8のときは、256個、16×16のときは64個までのパターンを定義しておくことができます。4以降では8つ)だけが表示されます。スプライトを表示するには、以下の手順で行います。SCREENでスプライトパターンの大きさを決める。SPRITE$でスプライトパターンを定義する。SPRITEで各プレーンの色を定義する。SPRITEで、スプライト面にパターンを表示する。このほかに、スプライトに関する命令として、以下のものがあります。パターンが重なったときに、指定した行にジャンプする。GOSUBで指定された行へジャンプするかどうかを決める。↓ファイルとは、意味を持つ情報の集まりです。カセットテープに保存したプログラムやデータは、ファイルとして扱われます。他の周辺装置への出力も、まとまったデータを送るという意味で、ファイルというとらえかたで扱うことができます。1.ファイル番号プログラム中でファイルを扱うときには、まずOPEN命令でファイルの使用開始を宣言し、ファイルに対して番号を割り当て、また、番号と対応した入出力用の領域を確保しなければなりません。この番号をファイル番号と呼びます。その後のファイルへの入出力は、すべてこのファイル番号によって指定されたファイルに行われます。2.ファイルを扱う場所ファイルを操作する場所(ファイルの入出力の対象となる場所)には、以下の5つがあります。出力のみ3.ファイル名ファイル名とは、ファイルにつける名前のことです。ファイル名を必要とするのは、カセットテープやメモリディスクへの入出力を行う場合で、その他の場合は省略できます。カセットテープで使えるファイル名は、6文字で、メモリディスクでは8文字です。6(または8)文字より小さい場合は、あいた部分には空白があてはめられます。6(または8)文字より大きい場合は、先頭から6(または8)文字がファイル名とみなされ、それ以降の文字は無視されます。ファイル名の中に、コロン(:)を用いてはなりません。↓プログラムの実行中に、何か特別なことが起きたとき、現在実行中の処理を一時中止して、その特別な事柄に対応した処理を先に実行させることを、割り込みといいます。ファンクションキーが押されたときに対応する処理を実行するようにあらかじめ指定しておくと、プログラムの実行中にファンクションキーが押された時点で割り込みがかかり、そのとき実行していた処理を中断して指定された処理を優先的に実行したあと、中断されていた処理が再開されます。BASICが用意している割り込みを、優先順に示します。ドライブ名の指定に誤りがある。ディスクのフォーマットが正常でない。OPENされたモードに対して、正常な入出力を行っていない。ファイル名が適当でない。オープンしていないファイル番号を指定した。指定したファイル番号がMAXFILES文で指定した数を越えている。セクタ番号に誤りがある。CONTコマンドでプログラムの実行を再開できない。エラーが発生して終了したプログラムは再開できない。プログラムの一部を書き換えたり、CLEAR文などを実行すると、次に実行すべき個所へのポインタが壊れて再開ができない。INPUT$関数を中断した場合再開できない。カセットレコーダ、プリンタなどへの入出力中にエラーが発生した。アスキー形式のプログラムファイルをロードあるいはマージ中にプログラム以外のデータ(行番号がないもの)があった。ディスクの空き領域がない。ディスクのデータ入出力中に何らかの障害が起きた。ディスクが入っていない。ディスクが書き込み禁止状態なのに書き込もうとした。0による除算を行おうとした。0に対して負のべき乗を行った。FIELD文で定義したフィールドサイズの合計が256バイトを越えた。NAME文で指定したファイル名が、既にディスク上に存在している。OPEN文で指定したファイル番号が、他のファイルで使用中である。指定されたファイルが見つからない。OPEN文で開いていないファイルに対して入出力を行おうとした。ファイルがまだクローズされていない。BASICにはない)をダイレクトモードで実行しようとした。ステートメントや関数の使い方が誤っている。引数等が指定可能な範囲を超えている。ふぃある中のデータをすべて読み込んだ後、更に入力文を実行した。読み終わっているかどうかはEOF関数で調べる。BASIC内部でエラーが発生した。入力されたデータが許される文字数を超えた。文中に必要なパラメータが欠けている。NEXT文に対するFOR文がない。エラー処理ルーチンにRESUME文がない。READ文で読み出せるデータがない。プログラムが大き過ぎる、配列が大き過ぎるなどの原因でメモリが足りなくなった。文字整数用のメモリが足りなくなった。CLEAR文で対応する。演算結果や入力された数値が、方に応じた許容範囲を超えた。配列変数を2重に定義しようとした。NAMEを異なるディスク間で行おうとした。エラー処理ルーチン以外でRESUME文を使用した。GOSUB文とRETURN文が正しく対応していない。シーケンシャルファイルに対してランダム入出力を行おうとした。指定した文字式が複雑すぎる。文字列が255文字より長い。指定した配列変数の添え字の値が、DIM文で定義した配列変数が添え字の最大値より大きい。文の書き方を誤っている。カッコが対応していない、綴りが違う、記号が足りない等。ファイル数が、112を超えた。数値型と文字型のデータを混用している。GOTO文、GOSUB文等で指定した行番号がない。削除しようとした行がない。FN文で定義していないユーザー定義関数を使用した。メッセージが定義されていないエラー。カセットにセーブされたプログラムがメモリ上のプログラムと内容が異なる。Perl5.008007。