トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

3章 BASIC

 3.1 MSX BASIC

 MSXのシステムに標準で搭載される言語はBASICです。何度か拡張、改良され現在次のようなバージョンがあります。

MSX BASIC ver.1.0 MSX1のBASIC
MSX BASIC ver.2.0 MSX2のBASIC
MSX BASIC ver.3.0 MSX2+のBASIC
MSX Disk BASIC ver.1.0 MSX-DOS1下のDisk BASIC

 MSX BASIC ver 2.0ではMSX2で改良されたグラフィックス、バッテリーバックアップされたメモリの利用などのために機能が追加、拡張されています。
 MSX BASIC ver 3.0ではMSX2+で拡張されたグラフィックや、漢字処理機能をサポートするための機能が追加、拡張されています。

 3.2 BASICの動作モード

 MSX-DOSがないMSXのシステムでは、直接アプリケーションを実行する場合を除きBASIC、あるいはDisk BASICが起動します。MSX-DOSのプロンプトから「BASIC」と入力して起動することもできます。BASICは、ダイレクトモードとプログラムモードの2つの動作モードで実行されます。

3.2.1 ダイレクトモード

 BASICの命令文だけをキー入力すると、その文はリターンキーを押した後すぐに実行されます。これをダイレクトモードでの実行といいます。ダイレクトモードで入力された命令はメモリには記憶されません。

3.2.2 プログラムモード

 BASICの命令文の前に番号をつけてキー入力すると、その行はプログラム内の行として、番号とともにコンピュータのメモリに記憶されます。この番号のことを行番号といい、行番号の付いた命令文の集まりをプログラムといいます。プログラムはRUN命令やGOTO命令などを使って実行させることができます。これをプログラムモードでの実行といいます。

1.プログラムの作成

 プログラムとは、行の集まりです。行番号は0〜65529の整数で、できたプログラム行は行番号の小さい順に実行されます。BASICの命令はアルファベットの大文字で入力しても小文字で入力しても、自動的に大文字に変換されて処理されます。ただし、引用符(")で囲まれた文字や、REMやアポストロフィー(')に続くコメント文は、そのまま記憶されます。

2.プログラムの修正

 プログラムの修正は、以下のようにします。

■行の追加
 追加したい内容に、追加したい行番号つけて入力します。入力と同時に行は番号順に並べ換えられて記憶されます。

■行の削除
 削除したい行の行番号だけを入力すると、その行は削除されます。まとめて削除するときには、DELETE命令を使います。

■行の置き換え
 訂正したい行の行番号と新しい内容をキー入力してリターンキーを押せば、古い行の内容は自動的に新しいものに変わります。また、LIST命令を使ってプログラムを画面に表示し、カーソルを直したい所に移動して直接書き換えてからリターンキーを押しても、その行は訂正されます。
 MERGE命令によって、ファイルから新しい行を読み込むこともできます。

■行番号のつけかえ
 行番号をつけかえしたいときには、RENUM命令を使います。

 3.3 BASICの文法

3.3.1 BASICで使用できる文字と特殊記号

 MSX BASICで使用できる文字は、英文字(大文字・小文字)、数字、カナ文字、ひらがな、特殊記号、そしてグラフィック文字です。文字についての詳細は、巻末の「キャラクターコード表」を参照してください。また、漢字BASICのモードではシフトJISコードによって全角漢字を処理することができますが、この場合は半角ひらがなは扱いません。

1.特殊記号

 使用できる文字の中でも、特殊記号と呼ばれる文字はそれぞれ特別な意味を持っています。特殊記号のうち、演算子については、「式と演算」で説明します。

.(ピリオド)現在BASICが着目している行番号を表します。
例) プログラム実行中にエラーが発生したとき、
LIST.
 と入力すると、エラーの発生した行が表示される。
 
-(マイナス)数値の範囲を指定するときに使います。
例) LIST命令で表示する行の範囲を指定するとき、
LIST 100-200
 とすれば、100行から200行までが表示される。
 
:(コロン) マルチステートメントの区切りとして使います。
例) A=B+C:PRINT A
 
,(カンマ)データを複数個指定するときに、その区切りとして使います。PRINT命令で使われた場合には、偶数番目のデータは左から15桁目に表示されます。
例) INPUT A,B,C
 
;(セミコロン)データを複数個指定するときに、その区切りとして使います。PRINT命令で使われた場合には、データは前のデータに続いて表示されます。
例) INPUT A;B;C
 
'(アポストロフィ)REM命令の代わりに用いて、注釈文を作ります。
  例) 'コノキ゛ョウハ コメントテ゛ス
 
?(疑問符) PRINT命令の代わりに用います。
例) ? 25*12
 
 (空白) プログラムを見やすくするために、文中に好きなだけ空白を入れることができます。ただし、予約語(巻末の「予約語表」参照)の中には空白を入れることはできません。また、文字定数(「定数」参照)の中の空白は文字としての意味を持っています。文中の空白はプログラムの実行には影響を与えませんが、メモリには空白も記憶されます。

3.3.2 BASICで扱うデータ

 BASICで扱うデータは、次のように分類することができます。

図2.2 BASICで扱うデータ

1.文字列
 255文字以内の文字をつないだデータです。文字列には、BASICで使用できる文字ならばどれでも使うことができますが、文字列を算術演算に使うことはできません。

2.数値
 数値は算術演算を行うことができるデータです。数値には整数型と実数型とがあり、数値の取る値はそれぞれで異なります。

3.整数
 -32768から+32767までの整数です。整数型の数値を使う演算は実行時間が短くてすみます。

4.実数
 実数には有効桁数によって、単精度実数と倍精度実数とがあります。MSX BASICでは、実数を使った演算は全て倍精度実数に変換して行われ、結果も倍精度実数で得られますが、単精度実数として記憶したり、結果を単精度実数で受け取ることもできます。

5.単精度実数
 有効桁6桁の実数です。単精度実数で表せる数値は-9.99999E+62から9.99999E+62で、指数の範囲はE+62〜E-64までです。

6.倍精度実数
 有効桁14桁の実数です。倍精度実数で表せる数値は-9.9999999999999E+62から+9.9999999999999E+62で、指数の範囲はE+62〜E-64までです。

 また、数値型データは必要に応じて、その型を他の型に変換することができます。型の変換は、次の規則にしたがって行われます。

  • 数値を異なる型の数値変数に代入する場合、数値は代入先の変数の型に変換される。
  • 精度の異なる数値を使った演算では、精度の低い方から高い方に変換されて演算が行われる。
  • 論理演算の場合、扱われる数値は全て整数型に変換され、結果は整数で得られる。
  • 実数が整数に変換される場合は、小数点以下は切り捨てられる。このとき、切り捨てた結果が整数型で扱える範囲(-32768〜32767)を超えていればエラーとなる。
  • 倍精度実数型変数を単精度実数型変数に代入すると、変数の値は有効数字6桁に直されたものになる。元の倍精度実数型の7桁目以降は、四捨五入される。
  • 文字型と数値型のデータの変換は、VAL、STR$関数を使う。

 3.4 定数

 定数とは、それぞれに固有の値を持ったデータのことです。定数の書き方は、先に述べたデータの型によって異なります。

3.4.1 文字定数

 文字定数は、文字列を引用符(")で囲んで表します。文字列の長さは255文字以内でなければなりません。また、数字を引用符で囲むと文字列とみなされ、算術演算に用いることはできません。

"THANK YOU"
"3.14159265"

3.4.2 整数型定数

 整数型の定数には、以下の4つの形式があります。

1.10進形式
 -32768〜+32768までの整数です。負の整数の場合、数値の前に必ずマイナス符号(-)をつけなければなりませんが、プラス符号は省略できます。また、-32768〜+32768までの実数の後ろに%をつけると、小数点以下は切り捨てられて整数型の定数とみなされます。

0
-123
3875.6%

2.8進形式
 先頭に&Oをつけて8進数(0〜7)を並べたものです。範囲は&O0〜&O177777までですが、&O177777〜&O100000までは負の数、-1から-32768に対応します。

&O012345   10進数では5349
&O177777   10進数では-1

3.16進形式
 先頭に&Hをつけて16進数(0〜9、A〜F)を並べたものです。範囲は&H0〜&HFFFFまでですが、&HFFFF〜&H8000までは負の数で、-1から-32768に対応します。

&H100      10進数では256
&HFFFF     10進数では-1

4.2進形式
 先頭に&Bをつけて0と1を並べたものです。範囲は&B0〜&B1111111111111111までですが、&B1111111111111111〜&B1000000000000000までは負の数で、-1から-32768に対応します。

&B01100100            10進数では100
&H1010101010101010    10進数では-21846

 8進形式、16進形式、2進形式で入力された数値は、PRINTやLPRINT命令で出力すると、10進形式で表示されます。10進以外の形式で出力するときは、それぞれOCT$、HEX$、BIN$を使って文字列として出力します。

3.4.3 単精度実数型

 単精度実数の定数には、以下の3つの形式があります。

  1. 6桁以内の実数。
  2. 6桁以内の実数あるいは整数と、Eを使った指数表示の組み合わせ(Eの範囲はE-64からE+62)。
  3. 最後に!をつけた数値(数値が6桁を超えていると、7桁目が四捨五入される)。
1.23
-7.06E+06
3.14!

3.4.4 倍精度実数型

 倍精度実数の定数には、以下の3つの形式があります。

  1. 7桁以上の実数。
  2. 7桁以上の実数あるいは整数と、Eを使った指数表示の組み合わせ(Eの範囲はE-64からE+62)Eの代わりにDを使うこともできる。
  3. 最後に#をつけた数値(数値が14桁を超えていると、15桁目が四捨五入される)。
12345678
-1.5670D-12
246.876#

 3.5 変数

 変数は、プログラム中で使うデータを格納するものでメモリ中に用意され、英字1文字あるいは英数字2文字からなる変数名がついています。変数に値を与える場合、変数の型は、それに代入されるデータの型と一致していなければなりません。変数に値を代入する前は、数値変数は0、文字変数はヌル(文字が何も入力されていない状態)であるものと見なされます。

3.5.1 変数の型

 代入するデータの型に応じた変数の型は、変数名の最後に型宣言文字をつけることによって区別されます。型宣言文字の種類は以下の4つです。

%整数型
!単精度実数型
#倍精度実数型
$文字型

 この型宣言文字を用いることにより、変数名が同じであっても別の変数として扱うことができます(例えば、A$、A!など)。なお、型宣言文字を省略すると、#(倍精度実数型)がついているとみなされます。

 変数の型はプログラム中で、DEFINT・SNG・DBL・STR命令を使用してグローバルに宣言することも可能です。この場合でも型宣言文字による指定は優先します。

3.5.2 配列変数

 配列変数は、同じ性質を持つ複数個のデータの集まりで、X(1)、X(2)のように、変数名の後にカッコで番号をつけた形で用います。カッコの番号は添字といい、配列の中の何番目の要素であるかを表します。添字は常に0から始まります。

 配列を使うには、あらかじめDIM命令によって配列を宣言し、変数の名前とそこに入る要素の最大数を決めます。DIM命令を省略して配列を使用すると、添字の最大値は自動的に10に設定されます。

 複数の添字を持つ配列変数を使うこともできます。複数の添字を使った場合、配列は添字の個数に応じた次元になり、例えば、X(0,1,5)のように用います。配列の次元は、いくつ添字を指定するかによって決まります。次元は、理論的には255次元までとれることになっていますが、実際には1行の長さで指定できないので、もっと少なくなります。

3.5.3 システム変数

 MSX BASICにはBASIC自身が専用の目的のために持っている変数(システム変数)があります。システム変数は以下の9つです。

■TIME 1/60秒ごとに値が増える変数で、時間を計ることができる。この変数には0〜65535の値を代入することもできる。ただし、割り込みが禁止されている期間中は値が変化しないので、フロッピーディスクのアクセスなどがあるときは注意が必要。
■ERL エラーが発生したとき、エラーが発生した行番号を値として持つ。この変数に値を代入することはできない。
■ERR エラーが発生したとき、エラーの原因を表すエラーコードを値として持つ。この変数に値を代入することはできない。
■BASE(n)画面出力に関連するテーブルのアドレスを値として持つ。
■SPRITE$(n)定義したスプライトパターンを値として持つ。
■VDP(n) VDPレジスタのデータを値として持つ。
■CSRLIN 画面上のカーソルの垂直方向の位置を値として持つ。
■LPOS(n) プリンタのヘッドの水平位置を値として持つ。
■POS(n) 画面上のカーソルの水平方向の位置を値として持つ。

 以下に、書く変数が使用するメモリの大きさを示します。各変数の領域がメモリ上に確保されるのは、変数に値を代入した時点、あるいはDIM命令で配列を宣言したときだけです。

1.変数

■整数型 5バイト
■単精度実数型7バイト
■倍精度実数型11バイト
■文字型 6+(文字数)バイト

2.配列変数

■整数型 5+2×(要素数)+2×(次元数)+1バイト
■単精度実数型5+4×(要素数)+2×(次元数)+1バイト
■倍精度実数型5+8×(要素数)+2×(次元数)+1バイト
■文字型 5+3×(要素数)+2×(次元数)+1+(各要素に含まれる文字列の総文字数)バイト

 3.6 式と演算

 式とは、演算(計算)の手順を示すものであり、定数や変数を演算子(計算に使う特殊記号のこと)で結んだものです。式の演算結果は1個の数値または文字列になり、単に数値や文字だけのものも式と呼びます。

"BASIC"
10+3/5
2
A+B/C-D

 MSX BASICの演算は、次の5つに分けられます。

  • 算術演算
  • 関係演算
  • 論理演算
  • 関数
  • 文字列演算

 以下にこれらの演算について説明します。

3.6.1 算術演算

 算術演算子には次のようなものがあります。なお、算術式の中に文字定数や文字変数が入ってはいけません。

表2.4 算術演算

演算子演 算
^ 指数演算 X^Y
- マイナス符号 -X
*、/かけ算、割り算 X*Y、X/Y
+、-足し算、引き算 X+Y、X-Y

 演算子の優先順序も、この順番になります。順序を変更したいときにはカッコ(())を使えば、カッコ内の演算子は他の演算子より先に実行されます。

1.\とMOD
 整数の割り算は/の代わりに\によって行えば、割り切れなかった場合に答の小数点以下が切り捨てられます。扱う数値が実数の場合は、演算が実行される前に小数点以下が切り捨てられます。また、余りを求めたいときにはMODを用います。この場合も、扱う数値が実数の場合は、演算が実行される前に小数点以下が切り捨てられます。

PRINT 10\3
【表示】3         (10/3-3 余り 1)
PRINT 10\2.5
【表示】5         (10/2-5 余り 0)
PRINT 13.3 MOD 4
【表示】1         (13/4-3 余り 1)

2.0でのわり算
 数値を0で割ったときには、「Division by zero」というエラーメッセージが表示され、プログラムを中断します。0に対しての負のべき乗を行った場合も同様です。

3.オーバーフロー(桁あふれ)
 代入や演算の結果が、その変数の型の中で扱える範囲を超えた場合、桁あふれが起こります。この場合、「Overflow」というエラーメッセージが表示され、プログラムを中断します。

3.6.2 関係演算子

 関係演算子は、2つの数値または2つの文字列を比較するときに用います。関係演算の結果は、真(-1)、偽(0)で出され、IF命令などでプログラムの流れを変えるのに用いられます。以下に、関係演算子の意味と例をあげます。

表2.5 関係演算

関係演算子内容
= 等しい X-Y
<>、>< 等しくない X<>Y、X><Y
< 小さい X<Y
> 大きい X>Y
<=、=< 小さいか等しい X<=Y、X=<Y
>=、=> 大きいか等しい X>=Y、X=>Y

IF X=0 THEN 100
(もしXが0だったら、100行にジャンプせよ)
IF A+B<>0 THEN X=A+B
(もしA+Bが0でなかったら、XにA+Bの値を代入せよ)

3.6.3 論理演算

 論理演算子は複数の条件を調べたり、ビット操作やブール演算を行ったりするのに用います。論理演算の結果は、ビットごとに0または1で返されます。各論理演算の内容を以下に示します。

図2.3 論理演算

 IF命令では、これらの論理演算を使って、複数の条件を判断することができます。

IF X<0 OR 99<X THEN 100
(Xが負または99より大きければ、100行にジャンプする)
IF 0<X AND X<100 THEN X=0
(Xが正でしかも100より小さければ、Xに0を代入する)
IF NOT(A=0) THEN 20
(Aが0でなければ、20行へジャンプする)

3.6.4 関数

 関数とは、指定された数値に対して、ある決まった演算を行うもので、その演算の結果を返すものです。
 MSX BASICには、関数として、SINやSQRなどの数値を扱うものや、CHR$やLEFT$などの文字列を扱うものなどがあります。また、最初から定義されたものではなく、ユーザーが自由に定義できる関数(DEFFN、DEFUSR)もあります。

3.6.5 文字列演算

1.文字列の連結
 文字列は、演算子「+」を使ってつなげることができます。

A$="ABC":B$="DEF":C$=A$+B$:? C$
【表示】ABCDEF

2.文字列の比較
 文字列も、数値の比較に使われるものと全く同じ関係演算子(=、<、>、<>、><、<=、=<、=>、>=)を用いて比較することができます。
 文字列の場合、それぞれの文字列の先頭から1文字ずつ文字を比較します。両者が全く同じ文字列の場合は、その2つの文字列は等しくなりますが、1文字でも違った場合は、その文字のキャラクタコードの大きい方の文字列が大きくなります。また、文字列の一方が短くて比較が途中で終わった場合は、短い文字列の方が小さくなります。

"AB"<"BC"
"BC">"AAA"
"CAT"<"CATS"
"PEN ">"PEN"
"cm">"CM"
"BASIC"="BASIC"

 文字列を比較することによって、文字列の内容を調べたり、文字をアルファベット順に並べ換えたりすることができます。

3.6.6 演算の優先順位

 演算は次の順位によって行われます。

  1. カッコで囲まれたもの
  2. 関数
  3. 指数(べき乗)
  4. マイナス符号(-)
  5. *、/
  6. \
  7. MOD
  8. +、-
  9. 関係演算子(=、<、>など)
  10. NOT
  11. AND
  12. OR
  13. XOR
  14. IMP
  15. EQV

 3.7 エラーメッセージ

 プログラムがダイレクトモードでの命令を実行しているときに、エラーが発生した場合、実行は中断され、エラーメッセージが画面に表示されます。
 エラーメッセージは、ダイレクトモードでは、

XX・・・・・・

 プログラムモードでは、

XX・・・・・・ in YYYY

 という形で表示されます。このときXX・・・・・はエラーメッセージで、YYYYはエラーが見つかった行番号です(必ずしもエラーの原因となる行番号ではありませんので注意して下さい)。エラーメッセージの内容については、「3.14 エラーメッセージ一覧」を参照してください。

 3.8 画面モード

 MSXの画面は次のものがあります。

図2.4 画面モード

 テキスト画面は主に文字や数を表示するための画面で、リストやメッセージを表示することができます。テキスト画面には最大横80×縦24文字表示できるモードと、最大横32×縦24文字表示できるモードがあります。

 グラフィック画面は点や線を描くための画面で、細かい点や線が描ける高解像度グラフィックモードと、4×4ドットのブロック単位で絵を描く低解像度グラフィックモードと画面の1ドット毎に色をつけることができるビットマップグラフィックモードがあります。

 MSX BASICではこれらの12の画面のどれを使うかを、SCREEN命令を使って指定します。BASIC起動時には、自動的に32×24文字のテキストモードが選択されますが、MSX BASIC ver.2.0以降ではどのモードで立ち上がるかをSET SCREEN命令でバッテリーバックアップされたメモリに記憶させておくことができます。各画面の色はCOLOR命令を使って変えることができます。使用できる画面はMSX BASIC ver.1.0では0〜3(ただしSCREEN 0は横40×縦24キャラクタ)、ver.2.0では0〜8、ver.3.0では0〜12(ただし、9は使用できない)です。

1.テキスト画面
 文字を表示するための画面です。1行の文字数はWIDTH命令を使って変えることができません。ファンクションキーを表示しているときは、画面の一番下の行は使えません(KEY ON/OFF 参照)。

 LOCATE命令での位置指定は、横(X軸方向)が0〜79(32×24の画面では、0〜31)、縦(Y軸方向)が0〜23の値で指定できます。

LOCATE 10,10

■テキストモード(縦80×横24)
 最大80×24文字を表示できます。1文字の大きさは、横6×縦8ドットです。この画面では、ひらがなの右側が欠けて表示されます。WIDTH 40以下のときは文字の大きさが2倍になります。

図2.5 テキストモード(80×24)

■テキストモード(縦32×横24)
 最大32×24文字を表示できます。1文字の大きさは、横8×縦8ドットです。この画面では、スプライト機能を使うことができます。

図2.6 テキストモード(32×24)

2.グラフィック画面
 点や線、絵を描くための画面です。スプライト機能を使うこともできます。グラフィック画面はプログラム中だけで使うことができます。プログラムの実行が終わると、画面は自動的にテキスト画面に戻ります(SCREEN参照)。

 グラフィック画面で文字を表示するには、OPEN命令で"GRP:"を指定してから、PRINT#命令を使って行いますが漢字グラフィックモードでは普通のPRINT文でも可能です。

 グラフィック画面でどの位置に点を表示するかなどの指定は、横(X軸方向)が0〜511、縦(Y軸方向)が0〜211までの値で行います。

PSET(100,100)

■高解像度グラフィックモード(SCREEN 2と4)
 横256個×縦192個のドットを使うことができる画面です。細かい点や線を描くことができます。横方向の8ドットごとに、2色までの色を使えます。

図2.7 高解像度グラフィックモード

■低解像度グラフィックモード(SCREEN 3)
 横64×縦48のブロックの画面で、点を描単位が4×4ドットになっています。この1ブロックごとに色を付けることができます。

図2.8 低解像度グラフィックモード

■ビットマップグラフィックモード(SCREEN 5以降)
 横256個(SCREEN 6と7では512)×縦212個のドットを使うことができる画面です。細かい点や線を描くことができます。1ドット毎に16のパレットから選んだ色が使えます。ただしSCREEN 8では各ドットに256の固定色から選んだ色を使います。

 3.9 カラー番号

 MSX BASICでは、基本的には次の16色の色を使うようになっています。色の指定は、それぞれのカラー番号で行います。指定の方法は、それぞれの命令を参照してください。

表2.6 カラー番号

カラー番号カラー番号
0透明(周辺色と同じ色) 8
19明るい赤
210
3明るい緑 11明るい黄
4暗い青 12暗い緑
5明るい青 13
6暗い赤 14
7水色 15

 各カラー番号がこのように決まっているとき、「カラーパレットが初期状態にある」と言います。カラーパレットを上記以外の色にするときは、COLOR=を使ってパレットを変更します。例えば、

COLOR=(8,7,7,0)

 とすることによってパレット8は、明るい黄色になります。SCREEN 6では、0〜3、それ以外では0〜15のパレットが使えます。ただしSCREEN 8では、パレットは使いません。カラー番号は次のように固定した色を意味しています。

&B00000000      カラー番号を2進数で表したもの
  GGGRRRBB      対応する緑、赤、青の明るさ

例えば、&B11100000なら明るい緑になります。

 3.10 スプライト機能

 MSX BASICには、解説した4つの画面のほかにスプライト面というものがあります。スプライト面は、0番から31番までの32枚があり、1枚の面に1個のすスプライトパターンを表示することができます。

 スプライト面は、普通の画面の前に重ねてある面と考えることができます。スプライト面にパターンを表示すると、そのパターンが元の画面の絵や文字の上に重なって見えます。また、2つ以上のスプライトパターンを重ねると、スプライト面番号の小さいほうのパターンが手前に見え、立体的なパターンのようになります。

 スプライト機能は、SCREEN 0以外のモードを使っているときに使うことができます。


図2.9 スプライト

 パターンの大きさは、8×8ドット、あるいは16×16ドットです。8×8のときは、256個、16×16のときは64個までのパターンを定義しておくことができます。また、パターンは同時に32個まで表示できますが、横方向に5個(SCREEN 4以降では9個)以上重なると、スプライト番号の小さいパターン4つ(SCREEN 4以降では8つ)だけが表示されます。

 スプライトを表示するには、以下の手順で行います。

  1. SCREENでスプライトパターンの大きさを決める。
  2. SPRITE$でスプライトパターンを定義する。
  3. SCREEN 4以降であればCOLOR SPRITEで各プレーンの色を定義する。
  4. PUT SPRITEで、スプライト面にパターンを表示する。

 このほかに、スプライトに関する命令として、以下のものがあります。

ON SPRITE GOSUB パターンが重なったときに、指定した行にジャンプする。
SPRITE ON/OFF/STOP ON SPRITE GOSUBで指定された行へジャンプするかどうかを決める。

 3.11 ファイル

 ファイルとは、意味を持つ情報の集まりです。カセットテープに保存したプログラムやデータは、ファイルとして扱われます。また他の周辺装置への出力も、まとまったデータを送るという意味で、ファイルというとらえかたで扱うことができます。

1.ファイル番号
 プログラム中でファイルを扱うときには、まずOPEN命令でファイルの使用開始を宣言し、ファイルに対して番号を割り当て、また、番号と対応した入出力用の領域を確保しなければなりません。この番号をファイル番号と呼びます。その後のファイルへの入出力は、すべてこのファイル番号によって指定されたファイルに行われます。

2.ファイルを扱う場所
 ファイルを操作する場所(ファイルの入出力の対象となる場所)には、以下の5つがあります。

ファイルを扱う所指定の方法なされる操作
カセットレコーダ"CAS:ファイル名"入出力を行う
メモリディスク "MEM:ファイル名"入出力を行う
テキスト画面 "CRT:"出力のみ
グラフィック画面"GRP:"出力のみ
プリンタ "LPT:"出力のみ

3.ファイル名
 ファイル名とは、ファイルにつける名前のことです。ファイル名を必要とするのは、カセットテープやメモリディスクへの入出力を行う場合で、その他の場合は省略できます。カセットテープで使えるファイル名は、6文字で、メモリディスクでは8文字です。6(または8)文字より小さい場合は、あいた部分には空白があてはめられます。6(または8)文字より大きい場合は、先頭から6(または8)文字がファイル名とみなされ、それ以降の文字は無視されます。また、ファイル名の中に、コロン(:)を用いてはなりません。

 3.12 割り込み

 プログラムの実行中に、何か特別なことが起きたとき、現在実行中の処理を一時中止して、その特別な事柄に対応した処理を先に実行させることを、割り込みといいます。

 例えば、ファンクションキーが押されたときに対応する処理を実行するようにあらかじめ指定しておくと、プログラムの実行中にファンクションキーが押された時点で割り込みがかかり、そのとき実行していた処理を中断して指定された処理を優先的に実行したあと、中断されていた処理が再開されます。

 以下に、MSX BASICが用意している割り込みを、優先順に示します。

1. ファンクションキー割り込み ON KEY GOSOUB
2. ストップキー割り込み ON STOP GOSUB
3. スプライトの衝突割り込み ON SPRITE GOSUB
4. ジョイスティックのトリガ割り込みON STRIG GOSUB
5. インターバルタイマ割り込み ON INTERVAL GOSUB

 2部 3.13 ステートメント

※長いので分割

 3.14 エラーメッセージ一覧

メッセージエラーコード説明
Bad drive name 62ドライブ名の指定に誤りがある。
Bad FAT 60ディスクのフォーマットが正常でない。
Bad file mode 61OPENされたモードに対して、正常な入出力を行っていない。
Bad file name 56ファイル名が適当でない。
Bad file number 52オープンしていないファイル番号を指定した。指定したファイル番号がMAXFILES文で指定した数を越えている。
Bad sector number 63セクタ番号に誤りがある。
Can't CONTINUE 17CONTコマンドでプログラムの実行を再開できない。エラーが発生して終了したプログラムは再開できない。プログラムの一部を書き換えたり、CLEAR文などを実行すると、次に実行すべき個所へのポインタが壊れて再開ができない。INPUT$関数を中断した場合再開できない。
Device I/O error 19カセットレコーダ、プリンタなどへの入出力中にエラーが発生した。
Direct statement in file 57アスキー形式のプログラムファイルをロードあるいはマージ中にプログラム以外のデータ(行番号がないもの)があった。
Disk full 66ディスクの空き領域がない。
Disk I/O error 69ディスクのデータ入出力中に何らかの障害が起きた。
Disk offline 70ディスクが入っていない。
Disk write protect 68ディスクが書き込み禁止状態なのに書き込もうとした。
Division by zero 110による除算を行おうとした。0に対して負のべき乗を行った。
FIELD overflow 50FIELD文で定義したフィールドサイズの合計が256バイトを越えた。
File already exists 65NAME文で指定したファイル名が、既にディスク上に存在している。
File already open 54OPEN文で指定したファイル番号が、他のファイルで使用中である。
File not found 53指定されたファイルが見つからない。
File not OPEN 59OPEN文で開いていないファイルに対して入出力を行おうとした。
File still open 64ファイルがまだクローズされていない。
Illegal direct 12ダイレクトモードでは実行できないステートメント(実際にはMSX BASICにはない)をダイレクトモードで実行しようとした。
Illegal function call5 ステートメントや関数の使い方が誤っている。引数等が指定可能な範囲を超えている。
Input past end 55ふぃある中のデータをすべて読み込んだ後、更に入力文を実行した。読み終わっているかどうかはEOF関数で調べる。
Internal error 51BASIC内部でエラーが発生した。
Line buffer overflow 25入力されたデータが許される文字数を超えた。
Missing operand 24文中に必要なパラメータが欠けている。
NEXT without FOR 1 NEXT文に対するFOR文がない。
No RESUME 21エラー処理ルーチンにRESUME文がない。
Out of DATA 4 READ文で読み出せるデータがない。
Out of memory 7 プログラムが大き過ぎる、配列が大き過ぎるなどの原因でメモリが足りなくなった。
Out of string space 14文字整数用のメモリが足りなくなった。CLEAR文で対応する。
Overflow 6 演算結果や入力された数値が、方に応じた許容範囲を超えた。
Redimensioned array 10配列変数を2重に定義しようとした。
Rename across disk 71NAMEを異なるディスク間で行おうとした。
RESUME without error 22エラー処理ルーチン以外でRESUME文を使用した。
RETURN without GOSUB 3 GOSUB文とRETURN文が正しく対応していない。
Sequential I/O only 58シーケンシャルファイルに対してランダム入出力を行おうとした。
String formula too complex16指定した文字式が複雑すぎる。式を分解する。
String too long 15文字列が255文字より長い。
Subscript out range 9 指定した配列変数の添え字の値が、DIM文で定義した配列変数が添え字の最大値より大きい。
Syntax error 2 文の書き方を誤っている。カッコが対応していない、綴りが違う、記号が足りない等。
Too many files 67ファイル数が、112を超えた。
Type mismatch 13数値型と文字型のデータを混用している。
Undefined line number8 GOTO文、GOSUB文等で指定した行番号がない。削除しようとした行がない。
Undefined user function18DEF FN文で定義していないユーザー定義関数を使用した。
Unprintable error 23,26〜49,72〜255メッセージが定義されていないエラー。
Verify error 20カセットにセーブされたプログラムがメモリ上のプログラムと内容が異なる。