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

2部 3.13 ステートメント

 3.13 ステートメント



ABS

機 能

<数式>の絶対値を返します。

書 式
ABS(<数式>)

文 例
PRINT ABS(-1.2)
【表示】1.2

ASC

機 能

<文字式>のキャラクタコードを返します。

書 式
ASC(<文字式>)

文 例
PRINT ASC("a")
【表示】97
解 説

指定した<文字式>がいくつかの文字からなる文字列の場合は、一番最初の文字のキャラクタコードが返されます。文字とキャラクタコードの対応については、キャラクタコード表を参照してください。

参 照
CHR$、キャラクタコード表


ATN

機 能

<数式>の逆正接(アークタンジェント)を計算します。

書 式
ATN(<数式>)

文 例
PRINT ATN(1)*4
【表示】3.1415926535898

AUTO

機 能

プログラム行の先頭に行番号を自動的に発生させます。

書 式
AUTO [<行番号>][,<増分>]

文 例
AUTO 1000,100
解 説

最初の行番号も番号の増加分も省略できますが、この場合は、自動的に10が採用されます。
例えば、

AUTO

行番号は10を先頭に20、30・・・・・・・・と付けられます。

AUTO 100

行番号は100を先頭に110、120・・・・・・・・と付けられます。

AUTO ,5

行番号は10を先頭に15、20・・・・・・・・と付けられます。

プログラム中にすでに存在する行と同じ行番号が発生した場合には、行番号の後にアスタリスク(*)が表示されます。このとき、何も入力しないでリターンキーを押せば、その行は前の内容のままです。

AUTO機能を中止したいときは、[CTRL]+[C]キーまたは[CTRL]+[STOP]キーを押します。


BASE

機 能

画面出力に関連するVRAM上のテーブルのアドレスを返します。

書 式
BASE(<数式>)

文 例
PRINT BASE(10)
解 説

カッコ内の数値で指定されたVRAM上のテーブルのアドレスを返します。MSX1では、VDPとしてTMS9918、MSX2ではV9938、MSX2+ではV9958を使っています。

参 照
VDP


BEEP

機 能

スピーカーを鳴らします。

書 式
BEEP
解 説
SET BEEP命令で設定した音色と大きさで、スピーカーを鳴らします。
次のように、PRINT命令でCHR$(7)を実行しても、BEEPと同じ結果が得られます。

PRINT CHR$(7)
参 照

コントロールコード表


BIN$

機 能

<数式>を2進数の文字列に変換します。

書 式
BIN$(<数式>)

文 例
PRINT BIN$(50)
【表示】110010
参 照

VALOCT$HEX$


BLOAD

機 能

機械語プログラム、または画面データファイルを読み込みます(ロードする)。

書 式
BLOAD<ファイルスペック>[,R][,<オフセット>]

文 例
BLOAD "A:DEMO",R
解 説

<ファイルスペック>で指定した機械語プログラムファイルをメモリ上にロードします。カセットファイルに対してはファイル名を省略することが出来ますが、ディスクファイルに対しては省略することはできません。<ファイルスペック>の中で<デバイス名>を省略すると現在選択されているディスクドライブ(カレントドライブ)とみなされます。カセットファイルを対象とする場合は"CAS:"とします。

<オフセット>を省略すると機械語プログラムはBSAVEでセーブするときに指定した<開始アドレス>からロードしますが、<オフセット>を指定した場合には、セーブの差異に指定されて開始アドレスに、<オフセット>を加えた番地からロードします。したがって、<オフセット>を付けてロードするプログラムは、リロケータブルな性質を持っていなければなりません。

Rオプションを指定すると、プログラムをロード後、BSAVEで指定しておいた実行開始アドレスから、ただちに実行されます。このとき、既に開かれているファイルがあればファイルは開かれたまま機械語プログラムが実行されます。

Sオプションを指定すると、ディスクファイルの内容がVRAMにロードされます。<オフセット>を省略する場合にはカンマ(,)も省略してください。

参 照
BSAVE


BSAVE

機 能

機械語プログラム、または画面データを保存(セーブ)します。

書 式
BSAVE<ファイルスペック>,<開始アドレス>,<終了アドレス>[ [,<実行開始アドレス>|[,S] ]

文 例
BSAVE "B:DEMO",&HA100,&HA2FF
解 説

<開始アドレス>から<終了アドレス>までのメモリ上に置かれている機械語プログラムを、<ファイルスペック>で指定したファイルにセーブします。

<ファイルスペック>の中の<デバイス名>を省略した場合、カレントドライブにセーブされます。カセットファイルの場合は"CAS:"としてください。

<実行開始アドレス>を指定しておくと、BLOADでRオプションを指定して、プログラムのロード後に自動的に<実行開始アドレス>から実行させることができます。

Sオプションを指定すると、画面データをディスクファイルとしてセーブすることができます。


CALL

機 能

拡張ステートメントを呼び出します。

書 式
CALL<拡張ステートメント名>[(<引数>[,<引数>・・・])]
解 説
拡張ROMカートリッジなどで供給される拡張ステートメントを呼び出します。CALLは_(アンダースコア)で代用することができます。


CALL AKCNV 【2+】

機 能

<文字列>中の全ての文字を全角文字に変換して<文字変数>に代入します。

書 式
CALL AKCNV(<文字変数,<文字列>)

文 例
10 CALL AKCNV(A$,"ABC漢字イロハ")
20 PRINT A$
【表示】ABC漢字イロハ
解 説

半角文字(カタカナ、英数字等)を全角の文字に変換します。もともと全角の文字はそのままです。


CALL ANK 【2+】

機 能

漢字ドライバを終了します。

書 式
CALL ANK

文 例
CALL ANK
解 説

漢字モードを終了し、ANKモードとなります。ただし、漢字ドライバ用に確保されたメモリは解放されません。


CALL CLS 【2+】

機 能

漢字モードの画面をクリアします。

書 式
CALL CLS

文 例
CALL CLS
解 説

漢字モードでは通常のCLSは使えません。漢字モード以外でもCALL CLSは有効です。


CALL FORMAT 【Disk】

機 能

フロッピーディスクをフォーマット(初期化)します。

書 式
CALL FORMAT

文 例
CALL FORMAT
解 説

Disk BASICやMSX-DOSで使用できるように、ディスクを初期化します。実行するとドライブ名をきいてくるので、指定します。間違って既に使用しているディスクをフォーマットしてしまうと、その中のデータは完全に失われてしまいます。十分注意してください。


CALL JIS 【2+】

機 能

<文字列>の最初の2バイトを16進4桁のJISコードに変換して<文字変数>に代入します。

書 式
CALL JIS(<文字変数>,<文字列>)

文 例
10 CALL JIS(A$,"漢字")
20 PRINT A$
【表示】3441

CALL KACNV 【2+】

機 能

<文字列>中の半角文字に変換できる文字をすべて半角文字に変換して<文字変数>に代入します。

書 式
CALL KACNV(<文字変数>,<文字列>)

文 例
解 説
参 照
10 CALL KACNV(A$,"10人のプログラマー")
20 PRINT A$
【表示】10人ノプログラマー

CALL KANJI 【2+】

機 能

漢字ドライバを起動します。

書 式
CALL KANJI[n]

文 例
CALL KANJI3
解 説

nは0、1、2、3のうちどれか1文字で、漢字フォントとSCREENのインタレースモードを指定します。省略すると0とみなされます。

モード文字の大きさ表示文字数
(全角X×Y)(最大横×縦)
KANJI016×1632×13
KANJI112×1640×13
KANJI216×1632×24
KANJI312×1640×24

CALL KANJI(またはCALL KANJI0)はフォントをMSXの標準漢字ROMから取って表示します。

CALL KANJI1はフォントをMSXの標準漢字ROMからとり、横16ドットを12ドットに圧縮して表示します。ただし、松下電器の仕様による12ドットフォントROMがシステムに存在する場合はこれを表示します。

CALL KANJI2はCALL KANJI(またはCALL KANJI0)と同じですが、インタレースモードが使用され縦方向の表示文字数が増加します。

CALL KANJI3はCALL KANJI1と同じですが、インタレースモードが使用され縦方向の表示文字数が増加します。

MSX標準の日本語フロントエンドプロセッサ(以下、MSX-JE)があれば、このステートメントの実行時またはシステムの立ち上げ時に組み込まれます。直接入力モード(ANK)と間接入力モード(漢字)は、[CTRL]+[SPACE]もしくは[GRAPH]+[SELECT]によって切り替えられます。MSX-JEが存在しないときは、単漢字変換機能が使用できます。

MSX起動後の一番最初のCALL KANJIの実行時には注意が必要です。その時点でのHIMEM(CLEAR文による)の設定はキャンセルされ、全ての変数およびソフトウェアスタック(FOR/NEXT、GOSUB/RETURN用)がクリアされます。これは漢字ドライバのワークエリア(もしあればMSX-JEも)を確保する処理が行われるからです。2回目以降の実行は問題なく行われます。

CALL KANJI命令などを実行し、漢字表示ができる状態を「漢字モード」と呼びます。さらに漢字モードでかつSCREEN文で0もしくは1が設定されている状態を「漢字テキストモード」と呼び、漢字モードでかつSCREEN文で2以上の画面モードが設定されている状態を「漢字グラフィックモード」と呼びます。

BASICのコマンド待ちの状態では漢字テキストモードになっており、漢字の入出力が可能です。漢字グラフィックモードではプログラムによる漢字の出力のみが可能です。

漢字モードにおけるWIDTH

■漢字テキストモード
 CALL KANJI実行後のWIDTHはANKモードでのWIDTHをもとに、以下のように決定されます。CALL KANJI実行後に直接SCREEN文やWIDTH文で指定することもできます。

1.ANKモードでSCREEN 0を使用していた場合。

KANJI0かKANJI2
ANKモードでのWIDTHの値の4/5が漢字テキストモードでのWIDTHになります。
KANJI1かKANJI3
ANKモードでのWIDTHの値がそのまま漢字テキストモードでのWIDTHになります。

2.ANKモードでSCREEN 1を使用していた場合。

KANJI0かKANJI2
ANKモードでのWIDTHの値がそのまま漢字テキストモードでのWIDTHになります。
KANJI1かKANJI3
ANKモードでのWIDTHの値の5/4が漢字テキストモードでのWIDTHになります。

■漢字グラフィックモード
 常に表示できる最大に設定されます。

WIDTHによるSCREENモードの選択

KANJI0かKANJI2
WIDTHが26から32の時は256ドットモード(VDPのGRAPHIC 4モード)が、33から64の時は512ドットモード(VDPのGRAPHIC 6モード)が選択されます。
KANJI1かKANJI3
WIDTHが26から40の時は256ドットモード(VDPのGRAPHIC 4モード)が、41から80の時は512ドットモード(VDPのGRAPHIC 6モード)が選択されます。

CALL KEXT 【2+】

機 能

<機能>が0なら<文字列>中の半角文字だけを、1なら全角文字だけを抜き出して<文字変数>に代入します。

書 式
CALL KEXT(<文字変数>,<文字列>,<機能>)

文 例
10 CALL KEXT(A$,"今月ハ良イ天気デス",0)
20 PRINT A$
【表示】ハイデス

CALL KINSTR 【2+】

機 能

漢字を含む文字列を検索します。

書 式
CALL KINSTR(<数値変数>[,<数式>],<文字列1>,<文字列2>)

文 例
10 CALL KINSTR(A,"A 亜 B","B")
20 PRINT A
【表示】3
解 説

<文字列1>の中から<文字列2>を探しだし、見つかればその位置を、見つからなければ0を<数値変数>に代入します。<数式>は探し始める位置を文字数を単位として指定するもので、省略した場合は1とみなされます。


CALL KLEN 【2+】

機 能

漢字を含む文字列の文字数を返します。

書 式
CALL KLEN(<数値変数>,<文字列>[,<機能>])

文 例
10 CALL KLEN(A,"今日ハ良イ天気です")
20 PRINT A
【表示】9
解 説

<機能>が0(もしくは省略)の時は<文字列>の全体の文字数を、1のときは<文字列>中の半角文字数を、2のときは<文字列>中の全角文字数を<数値変数>に代入します。


CALL KMID 【2+】

機 能

漢字を含む文字列の一部を取り出します。

書 式
CALL KMID(<文字変数>,<文字列>,<数式1>[,<数式2>])

文 例
10 CALL KMID(A$,"今日はヨい天気です",3,3)
20 PRINT A$
【表示】はヨい
解 説

<文字列>中の<数式1>番目の文字から<数式2>文字分だけ抜き出して<文字変数>に代入します。<数式2>が省略された場合は<数式1>番目の文字から終わりまで全ての文字が代入されます。


CALL KNJ 【2+】

機 能

漢字コードに相当する漢字を獲得します。

書 式
CALL KNJ(<文字変数>,<文字列>)

文 例
10 CALL KNJ(A$,"3441")
20 PIRNT A$
【表示】漢
解 説

<文字列>で指定される4桁の漢字コードに相当する漢字1文字を<文字変数>に代入します。漢字コードが8000H未満であればJIS、それ以上の場合はシフトJISとみなします。


CALL KTYPE 【2+】

機 能

文字のタイプを調べます。

書 式
CALL KTYPE(<数値変数>,<文字列>,<数式>)

文 例
10 CALL KTYPE(T,"コレハ漢字",4)
20 PRINT T
【表示】1
解 説

<文字列>中の<数式>番目の文字のタイプを<数値変数>に代入します。タイプは、0=半角、1=全角です。


CALL MEMINI 【2】

機 能

メモリディスクで使うメモリの上限を指定します。

書 式
CALL MEMINI(<メモリディスクの上限>)

文 例
CALL MEMINI(&H7000)
【表示】27904 bytes allocated
解 説

範囲は、0〜&H7FFFです。初期状態では、&H7FFFが指定されています。
CALL MEMINI命令が実行されると、メモリディスクに割り当てられたメモリの量が表示されます。


CALL MFILES 【2】

機 能

メモリディスク中のファイル名を表示します。

書 式
CALL MFILES

文 例
CALL MFILES

CALL MKILL 【2】

機 能

メモリディスク内のファイルを削除します。

書 式
CALL MKILL(<ファイル名>)

文 例
CALL MKILL("SAMPLE")

CALL MNAME 【2】

機 能

メモリディスク内のファイル名を付け替えます。

書 式
CALL MNAME(<新ファイル名>AS<旧ファイル名>)

文 例
CALL MNAME("TEST" AS "TEST.AA")

CALL PALETTE 【2+】

機 能

カラーパレットの初期化または設定を行います。

書 式
CALL PALETTE[(<パレット番号>,<赤輝度>,<緑輝度>,<黄輝度>)]

文 例
CALL PALETTE(15,4,4,4)
解 説

CALL KANJIステートメントにより画面を漢字テキストモードにしたときに、パレットを変更するために使用します。漢字モードでないときでも使用できます。
パラメータをすべて省略した場合は、パレットを初期状態にします。パラメータが指定された場合、<パレット番号>で指定されたパレットを<赤輝度>、<緑輝度>、<青輝度>の色に設定します。なお、パレット番号や各輝度を省略することはできません。


CALL SJIS 【2+】

機 能

<文字列>の最初の2バイトを16進4桁のシフトJISコードに変換して<文字変数>に代入します。

書 式
CALL SJIS(<文字変数>,<文字列>)

文 例
10 CALL SJIS(A$,"漢字")
20 PRINT A$
【表示】3441

CALL SYSTEM 【Disk】

機 能

MSX-DOSを起動します。

書 式
CALL SYSTEM

文 例
CALL SYSTEM
解 説

SYSTEMコマンドを実行すると、DOSに戻る前にすべてのファイルは閉じられ、メモリ中のプログラムやデータは失われます。
この命令が実行できるのは、MSX-DOSからDisk BASICを起動した場合だけです。そうでない場合は、「Illegal function call」エラーになります。


CDBL

機 能

<数式>の値を倍精度実数に変換します。

書 式
CDBL(<数式>)

文 例
PRINT CDBL(1/3)
【表示】.33333333333333

CHR$

機 能

<数式>のキャラクターコードを持つ文字を返します。

書 式
CHR$(<数式>)

文 例
PRINT CHR$(65)
【表示】A
解 説

<数式>は0〜255の範囲でなければなりません。文字とキャラクターコードの対応についてはキャラクターコード表を参照してください。

参 照
ASCキャラクターコード表


CINT

機 能

<数式>の小数点以下を切り捨てて、実数に変換します。

書 式
CINT(<数式>)

文 例
PRINT CINT(123.45678)
【表示】123
解 説

<数式>の値が-32768〜32767の範囲外のときは、「Overflow」エラーになります。


CIRCLE

機 能

グラフィック画面に円や楕円を描きます。

書 式
CIRCLE[STEP](X,Y),<半径>[,<カラーコード>][,<開始角度>][,<終了角度>][,<比率>]

文 例
CIRCLE(128,96),50,1
解 説

SCREEN2以上の画面で円を描きます。中心座標はX軸方向に255(SCREEN 6、7では511)、Y軸方向に191(SCREEN 5以降では211)ありますので、その範囲内の数値を指定できます。また、STEPを用いて中心を指定することもできます(STEPを用いた指定の方法についてはLINE命令を参照)。
色を指定すると、その色で円が描かれます。色の指定を省略すると、COLORで指定された前景色が用いられます。

弧と扇形
CIRCLE(128,96),50,1,3/4*3.14,1/4*3.14
のように、円の開始角度(3/4*3.14)と終了角度(1/4*3.14)を指定すれば、その範囲の弧が描かれます。それぞれにマイナス記号をつけると、扇形が描かれます。開始角度、終了角度の指定は、-2πから2πの範囲内で行います。
楕円
CIRCLE(128,96),50,1,,,0.8
のように、最後に比率(0.8)を指定すれば、楕円が描かれます。比率は「垂直方向の半径/水平方向の半径」の値で指定します。値が1より小さいと横に平べったい楕円となり、1より大きいと縦に細長い楕円となります。

参 照

SCREENCOLOR


CLEAR

機 能

変数の初期化と使用するメモリ領域の大きさを指定します。

書 式
CLEAR[<文字列領域の大きさ>[,<メモリの上限>]]

文 例
CLEAR 200,&HD000
解 説

CLEARを実行すると、すべての変数が初期化され、DEF命令(DEF FN、DEFINT/SGN/DBL/STR)の定義は無効になります。初期化されると、数値変数は0に、文字変数はヌル(何も文字が代入されていない状態)になります。
また、

CLEAR 300,&HD000

のような指定では、変数の初期化のほかに、文字変数の内容をしまっておく文字列領域の大きさ(この場合、300)と、BASICが使用するメモリの上限(この場合、&HD000)を設定することができます。文字列領域の大きさは、メモリの許す限りの値まで指定できます。省略したときは200になります。また、メモリの上限は&H831F〜&HF380の範囲で指定できます。しかし、Disk BASICなどのワークエリアを壊さないように注意しなければなりません。メモリの上限をを設定するときは、文字列領域の大きさを省略できません。メモリの上限については、「4.2 ユーザーエリアの詳細」を参照して下さい。

参 照

FRE


CLOAD

機 能

カセットテープのプログラムをロードします。

書 式
CLOAD[<ファイルスペック>]

文 例
CLOAD "TEST"
解 説

カセットテープにCSAVEでセーブされたプログラムをロードします。
CLOADが実行されると、<ファイルスペック>で指定されたファイル名のプログラムをカセットテープ上で探します。探している最中に別のプログラムを見つけると「Skip:ファイル名」と画面に表示され、指定されたプログラムが見つかると「Found:ファイル名」と表示してロードを開始します。
CLOADの後ろに指定するファイル名を省略することもできます。省略したときは、CLOADが実行されて最初にみつけたプログラム(CSAVEでセーブされたもの)をロードします。CLOAD命令を実行すると、そのときメモリ上にあったプログラムは無くなってしまうので注意してください。また、CLOADで、SAVE命令によってセーブされたプログラムをロードすることはできません。

参 照
CSAVELOAD


CLOAD?

機 能

カセットテープのプログラムとメモリ上のプログラムを比較します。

書 式
CLOAD?[<ファイルスペック>]

文 例
CLOAD? "TEST"
解 説

メモリ上にあるプログラム(LIST命令で画面に表示されるもの)と、カセットテープにセーブされたプログラムが同じかどうか調べます。同じであれば「Ok」と表示され、違っていると「Veriffy error」と表示されます。CLOAD命令は、普通CSAVE命令を実行した後に、セーブが正しく行われたかどうかを確認するために使われます。
CLOAD?の後ろに指定するファイル名を省略することもできます。省略したときは、CLOAD?が実行されて最初に見つけたプログラム(CSAVEでセーブされたもの)を比較します。

参 照

CSAVELOAD


CLOSE

機 能

ファイルを閉じます。

書 式
CLOSE [[#]<ファイル番号>[,[#]<ファイル番号>]・・・]

文 例
CLOSE #1
解 説

<ファイル番号>に対応するファイルを閉じます。指定した<ファイル番号>は、以降のOPEN文で指定するとこができるようになります。また、いったん閉じたファイルをもう一度開くときには、他のファイルが使っていない<ファイル番号>ならば、どの<ファイル番号>でも指定することができます。
CLOSEでは、<ファイル番号>を複数指定することにより、一度に複数のファイルを閉じることができます。また<ファイル番号>を省略すると、そのとき開いているファイルをすべて閉じます。
閉じたファイルに対しては、再びOPEN文で開くまで入出力を行うことはできません。CLOSE文は、ファイルが出力用にオープンされていた場合には、バッファに残っていたデータの掃き出しを行うので、ファイルへの出力処理を正しく終了するためには、必ずCLOSE文を実行しなくてはなりません。
END文、NEW文を実行すると、自動的にすべてのファイルが閉じられますが、STOP文はファイルを閉じないので注意する必要があります。

参 照

OPENENDNEW


CLS

機 能

画面に表示されている文字や絵を消します。

書 式
CLS

文 例
CLS
解 説

CLSは、KEY ON指定で表示されているファンクションキーの内容を除いて、文字、点、線、絵など画面に表示されているものをすべて消します。
また、CLSが実行されると、テキスト画面の場合、カーソルは画面一番上の左端に移動しますがグラフィック画面ではLP(最終参照点)は変化しません。
CLSは漢字モードでは使用できません。(Illegal function callになる)。漢字モードで画面を消すときはCALL CLS命令を使います。

参 照

COLORCALL CLS


COLOR

機 能

画面の色を指定します。書式1以外は全てMSX2以降専用です。

書 式1
COLOR[<前景色>][,<背景色>][,<周辺色>]

書 式2

COLOR=(<パレット番号>,<Rコード>,<Gコード>,<Bコード>)

書 式3
COLOR=RESTORE
書 式4
COLOR[=NEW]

文 例1
COLOR 1,5,8
解 説1

色は、それぞれ以下の0〜15(SCREEN6では0〜3)までの値で指定します。

0透明(周辺色と同じ色)8
19明るい赤
210
3明るい緑 11明るい黄
4暗い青 12暗い緑
5明るい青 13
6暗い赤 14
7水色 15
電源投入時には、COLORは「COLOR 15,4,7」に設定され、SCREEN文を実行したときには、カラーパレットは上記のように設定されています。
SCREEN 8以外では、書式2のCOLOR=を使ってこれらの色を512色の中から選んで自由に設定することができます。
なお、プログラム中でグラフィック画面を指定すると、それまでテキストモードで使われていた色がそのまま使われています。
SCREEN 8の色は、0〜255が使えます。

00000000    8ビットの色コード
GGGRRRBB    Green、Red、Blueの各ビット

例えば、明るい緑は&B11100000(=224)、暗い紫なら&B00000101(=5)などとなります。
SCREEN 10では0〜15、SCREEN 11、12では0〜255が使えます。SCREEN 10ではYJK/RGB混在モードのRGB部分のみの指定なので、SCREEN 7以下のカラーパレットの指定と全く同じと考えることができます。SCREEN 11以降ではカラーコードはVRAMの値と考えることができますが、YJK方式の性格上これを単純に解釈することはできません。詳しくはV9958のYJKモードに関する記述を参照してください。

前景色
テキスト画面(SCREEN 0および1のテキストモード)の文字の色や、グラフィック画面の点や線の色です。ただし、グラフィック画面で点や線などを描くときには、各命令で色の指定を行うことができます。各命令で色を指定すると、その指定の方が優先されます。前景色だけを変えるには例えば、次のように指定します。
COLOR 9
背景色
テキスト画面やグラフィック画面の地の色のことです。テキスト画面では、命令実行後に指定した背景色に変えられます。グラフィック画面では、SCREENかCLSを実行した後に背景色が変えられます。背景色だけを変えるには、例えば、次のように指定します。
COLOR ,4
周辺色
画面上下のBASICで使えない部分のことです。周辺色だけを変えるには、例えば、次のように指定します。
COLOR ,,13


図2.10 画面色

文 例2
10 SCREEN 5
20 COLOR= (0,0,7,7)
解 説2

SCREEN 6では0〜3、SCREEN 8以外では0〜15のパレットに色を割り当てます。上の例ではパレット0に0、7、7、つまり

&B000 &B111 &B111
  RRR   GGG   BBB  (RGB各3ビット、0〜7の値)

の結果として明るい水色を割り当てています。割り当てた後は、書式1にしたがって色を設定します。
初期状態では、書式1で説明したカラー番号とパレット番号が同じになるように設定してあります。

文 例3
COLOR=RESTORE
解 説

VRAM上のパレットテーブルの情報にしたがってパレットを設定します。

文 例4
COLOR=NEW
解 説

パレットを初期状態にセットします。=NEWは省略してもかまいません。

参 照

CALL KANJICLSSCREENVRAMマップV9958


COLOR SPRITE

機 能

スプライトの1ライン毎の色を決めます。

書 式1
COLOR SPRITE$(<プレーン番号>)=<文字式>

文 例1
COLOR SPRITE$(0)=CHR$(1)+CHR$(7)
解 説

スプライトの色も実際には、パレット番号で指定します。この例ではプレーン0の1ライン目を黒に、2ライン目を水色にしています。スプライトの1ライン毎に色をつけられるのは、SCREENモード4以降の時だけです。色コードについてはCOLORを参照してください。なお色コードが15を超える場合、上位4ビットは次のような意味を持ちます。

bit732ドット左シフト表示。
bit6PUT SPRITEを実行したとき連続したプレーンを同時に動かす。このとき重なった部分の色コードはORされて表示され、衝突は検出されない*。
bit5衝突を検出しない。
bit4未使用。

  • bit6がONのときは表示が複雑になります。詳しくは「第4部 VDP」を参照して下さい。
すべてのSPRITE$をSTRING$(32,255)とし、スプライト面0が&B00000111(水色)、スプライト面1が&B01001000(bit6がONされた赤)のとき。
図2.11 bit6がONの時のスプライト

bit6がONのスプライト面が連続していると、1つのPUT SPRITE命令でそれらを動かすことができます。


図2.12 bit6がONの時のPUT SPRITE命令

SCREEN 8のスプライトだけは次のような16色に固定されます。

表2.7 SCREEN 8のスプライト色

カラー番号01234567
暗い青暗い赤暗い紫暗い緑暗い水色暗い黄色灰色
カラー番号89101112131415
肌色水色黄色
書 式2

COLOR SPRITE(<プレーン番号>)=<式>

文 例2
COLOR SPRITE(1)=15

プレーン1全体を白にします。

参 照
COLORSPRITE


CONT

機 能

停止したプログラムの実行を再開します。

書 式
CONT

文 例
CONT
解 説

プログラムの実行停止後、「CONT」と入力すると、停止した次の文から実行が再開されます。プログラムの実行停止は、[CTRL]+[STOP]キー入力やプログラム文中のSTOP文やEND文によるものでなければなりません。またINPUT$関数のキー入力待ちを[CTRL]+[STOP]キーで止めた場合は、CONTはできません。
実行停止中にLIST命令やPRINT命令などを実行することはできますが、プログラムそのものの変更を行ったときは、CONTによる実行の再開はできません。

参 照
STOPEND


COPY 【2】【Disk】

機 能

ファイルやVRAMの内容、配列をコピーします。書式1以外は全てSCREENモードが5以降で有効なのでMSX2以降専用です。パラメータに<ファイルスペック>を含む書式は全てDisk BASICでのみ有効です。論理演算子としては、AND、OR、XOR、PSET、PRESETが指定可能です。

書 式1
COPY<ファイルスペック1> [TO <ファイルスペック2>]
書 式2
COPY (<ソース座標1>)-(<ソース座標2>)[,<ソースページ>] TO (<デスティネーション座標>)[,<デスティネーションページ>][,<論理演算子>]
書 式3
COPY (<ソース座標1>)-(<ソース座標2>)[,<ソースページ>] TO <ファイルスペックまたは配列名>
書 式4
COPY <ファイルスペックまたは配列名>[,<方向>] TO (<デスティネーション座標>)[,<デスティネーションページ>][,<論理演算子>]
書 式5
COPY <配列名> TO <ファイルスペック>
書 式6
COPY <ファイルスペック> TO <配列名>
書 式7
COPY SCREEN [<モード>]

文 例1
COPY "A:SAMPLE.DAT" TO "SAMPLE.BAK"
解 説1

<ファイルスペック1>を<ファイルスペック2>で指定したドライブへ、指定したファイル名でコピーします。このCOPYコマンドはディスク装置間のみで有効です。
指定の方法は4種類あります。

<ファイルスペック1>だけを指定した場合
COPY "B:SAMPLE.DAT"
この場合、SAMPLE.DATは、カレントドライブに同じ名前(SAMPLE.DAT)でコピーされます。
<ファイルスペック2>でドライブ名だけを指定した場合
COPY "A:SAMPLE.DAT" TO "B:"
この場合、SAMPLE.DATは、ドライブBに同じ名前でコピーされます。
<ファイルスペック2>でファイル名だけを指定した場合
COPY "B:SAMPLE.DAT" TO "SAMPLE.BAK"
この場合、SAMPLE.DATは、カレントドライブにSAMPLE.BAKという名前でコピーされます。
<ファイルスペック2>でドライブ名とファイル名とを指定した場合
COPY "A:SAMPLE.DAT" TO "B:SAMPLE.BAK"
この場合、SAMPLE.DATは、ドライブBにSAMPLE.BAKという名前でコピーされます。

文 例2
10 SCREEN 5
20 COPY(10,10)-(100,120),1 TO (30,30),0,XOR
解 説2

VRAM上の長方形の領域を他の領域にコピーします。ページを省略した場合はそれぞれアクティブページとみなされます。論理演算子を省略した場合はPSETとみなされます。
COPY命令で画面範囲外にコピーした場合、スプライトが表示されてしまうことがあります。例えば、

COPY(0,0)-(255,39) TO (0,211)

を実行すると画面データをスプライトなどのデータエリアに書いてしまうので、スプライトのゴミが表示されてしまいます。VDP(V9938、V9958)はハードウェアスクロールの機能を持っており、COPY文では、その機能を十分生かすために画面表示範囲外に画面データをコピーできるようになっています。したがって、画面表示範囲外に画面データをコピーするときには、スプライトをVDP命令で消して下さい。VDPレジスタのR#8のbit1を1にすると、スプライトの表示が禁止されます。具体的には、以下の命令を実行します。

VDP(9)=VDP(9) OR 2
文 例3
10 SCREEN 8
20 DIM B%(327)
30 COPY(100,100)-(120,130),0 TO B%
解 説3

VRAM上の長方形の領域の内容を配列やファイルにコピーします。配列の場合は必要な大きさ以上のものを確保しておかなければなりません。必要なバイト数Nは次のように計算されます。

N=INT(X*Y/K+5)

ただしXは横、Yは縦のドット数、Kは定数で、

SCREEN 5と7では2
SCREEN 6では4
SCREEN 8以降では1

として求め、次に配列の型によって

整数型 (N+1)\2
単精度型 (N+3)\4
倍精度型 (N+7)\8

として最低限必要な要素数が得られます。文例3のケースでは

N=INT((120-100+1)*(130-100+1)/1+5):N=656
(N+1)\2=328

からDIM B%(327)となります。

文 例4
10 SCREEN 7
20 COPY "TEST",1 TO (100,100),1,AND
解 説4

ファイルまたは配列の内容を画面に転送します。方向はデータを書き込む向きで、

0左上から右下
1右上から左下
2左下から右上
3右下から左上

のどれかです。

文 例5
10 DIM A%(100)
20 COPY A% TO "TEST"
解 説5

配列の内容をファイルにセーブします。

文 例6
10 DIM A%(100)
20 COPY "TEST" TO A%
解 説6

ファイルから配列に内容をコピーしてきます。ファイルはもともと書式3や書式5で作ったものでなければならず、配列は十分な大きさでなければなりません。

文 例7
10 SCREEN 8
20 COPY SCREEN
解 説7

外部ビデオ信号をデジタル化し、VRAMに送ります。<モード>は0なら通常で、1ならインタレースモードです。この機能は画像取り込み装置がつながっている場合にのみ有効です。どのスクリーンでどのモードで取り込みができるかはその取り込み装置の性能に依存します。

参 照
SET PAGELINE


COS

機 能

<数式>の余弦(コサイン)を計算します。

書 式
COS(<数式>)

文 例
PRINT COS(3.14159)
【表示】-.99999999999649

CSAVE

機 能

メモリ上にあるプログラムをカセットテープにセーブします。

書 式
CSAVE<ファイル名>[,<ボーレート>]

文 例
CSAVE "TEST"
解 説

メモリ上にあるプログラム(LIST命令で画面に表示されるもの)を、カセットテープに保存します。
ファイル名の後ろに次のように指定すれば、セーブするときの早さを指定することができます。指定できるのは1か2です。

CSAVE "TEST",1

2と指定すると1の倍の速さでセーブされますが、カセットレコーダの性能によってはうまくセーブできないことがあります。このセーブの速さは、SCREEN命令でも指定でき、CSAVEで省略されたときには、SCREEN命令の指定が使われます。
うまくセーブされたかどうかは、CLOAD?命令で確認してください。セーブされたプログラムは、CLOAD命令を使ってロードすることができます。
CSAVEとSAVEとの違いについては、SAVE命令を参照してください。

参 照
CLOADCLOAD?SAVE


CSNG

機 能

<数式>の値を単精度実数に変換します。

書 式

CSNG(<数式>)

文 例
PRINT CSNG(123.45678)
【表示】123.456

CSRLIN

機 能

テキスト画面のカーソルの行位置を返します。

書 式
CSRLIN

文 例
A=CSRLIN
解 説

CSRLINは、現在カーソルが何行目にあるのかを、一番上の行を0とした値で調べます。
CSRLINは、テキスト画面でのみ使うことができます。

参 照

POS


CVI、CVS、CVD

機 能

文字列を数値データに変換した値を返します。

書 式
CVI(<2バイト文字列>)
CVS(<4バイト文字列>)
CVD(<8バイト文字列>)

文 例
PRINT CVI(A$)
解 説

ディスク上のランダムファイルから読み込んだ数値データは文字型になっているため、これらの関数を使って数値型に変換しなければなりません。CVIは2文字(2バイト=16ビット)の文字列を整数値に、CVSは4文字の文字列を単精度実数値に、CVDは8文字の文字列を倍精度実数値にそれぞれ変換します。
この変換は、例えば、CVIの場合、次のように行われます。
A$="90"の場合、すなわちA$=CHR$(&H39)+CHR$(&H30)の場合には、CVI(A$)の値は、キャラクターコードを数値データとみなし、&H3039(=12345)となります。
CVS、CVDの場合は、各キャラクターコードを正規化された浮動小数点形式の数値データとみなします。


DATA

機 能

READ文で読み込むためのデータをプログラム中に用意します。

書 式
DATA<定数>[,<定数>・・・]

文 例
10 READ A,B
20 DATA 1,2
解 説

<定数>は文字型か数値型で、READ文でそのデータを読み込む変数の型と一致していなければなりません。この例では数値型の変数AおよびBに、それぞれ1と2という数値が代入されます。
DATA文中のデータは、1行に収まる範囲内でいくつでもカンマで区切って記述することができます。DATA文中のコロン(:)は引用符に囲まれていない限りマルチステートメントの区切りと解釈されます。DATA文はREAD文によって読み込まれない限り何の働きもしません。

参 照
READRESTORE


DEF FN

機 能

計算式を定義します。

書 式
<名前>[<引数>[,<引数>[,<引数>・・・])]=<関数の定義式>

文 例
10 DEF FN A(X)=X*X*3.14
20 FOR I=10 TO 20 STEP 5
30 PRINT FN A(I)
40 NEXT
【表示】314
        706.5
        1256
解 説

10行で円の面積を出す計算式をFN A(X)として定義し、その式を30行でIという変数を使って値を変えながら呼び出しています。
DEF FNは、名前(上の場合A)で、計算式を定義しておくことができます。名前は英字で始まる2文字以内の英数字でつけます。名前の次にカッコで囲んだ変数(上の場合X)を指定して、計算式(上の場合X*X*3.14)を定義します。カッコ内の変数と計算式の中の変数は対応しています。
定義した計算式は「FN 名前(変数)」という形で呼び出せます。定義を行ったときの変数は仮のものなので、呼び出すときにはカッコ内でそのときどきで必要な変数(上の場合I)に変えて指定することができます。


DEFINT / SNG / DBL / STR

機 能

変数の型を宣言します。

書 式
DEFINT <文字の範囲>[,<文字の範囲>・・・]
DEFSNG <文字の範囲>[,<文字の範囲>・・・]
DEFDBL <文字の範囲>[,<文字の範囲>・・・]
DEFSTR <文字の範囲>[,<文字の範囲>・・・]

文 例
10 DEFINT A,B
20 DEFSTR C-E
30 A=3.12:B=0.33
40 C="3.12":D="0.33":E="ABC"
50 PRINT A,B
60 PRINT C,D,E
【表示】  3       0
        3.12     0.33     ABC
解 説

この例では変数A、Bを整数型に、変数C、D、Eを文字型に宣言しています。変数の指定は、英字1字(例 A)あるいは英字1字-英字1字(例 A-Z)という形で行います。型は以下のように設定されます。

DEFINT 整数型
DEFSNG 単精度実数型
DEFDBL 倍精度実数型
DEFSTR 文字型

型宣言が行われていない変数は、すべて倍精度実数とみなされます。また、DEF命令での型宣言よりも、型宣言文字での指定の方が優先されます。

参 照

CLEAR


DEF USR

機 能

機械語プログラムの実行開始番地を指定します。

書 式
DEF USR[<番号>]=<開始番地>

文 例
DEF USR2=&HE000
解 説

USRを使って呼び出す機械語プログラムの、実行開始番地(&HE000)を指定します。DEF USRの次には、複数の機械語プログラムを使うときに区別するための番号(2)を付けます。指定できるのは、0から9までの値です。

参 照
CLEARUSR、「5章 マシン語とのリンク


DELETE

機 能

指定されたプログラム行を削除します。

書 式
DELETE<行番号の範囲>

文 例
DELETE 50-100
解 説

行番号の指定の方法によって、さまざまな形の削除が行えます。以下に、その例を示します。

DELETE 10
行番号10の行を削除します。

DELETE -100
プログラムの先頭から行番号100までの行を削除します。

参 照

LISTMERGENEWRENUM


DIM

機 能

配列変数を使うことを宣言し、それをメモリ領域に割り当てます。

書 式
DIM<変数名>(<添字の最大値>[,<添字の最大値>・・・])

文 例
DIM A(11),B%(100),C$(2,3)
解 説

DIMは、使用する配列変数の最大値を設定し、同時にメモリ上にその配列の領域を確保します。設定できる最小の値は0,最大の値はメモリ容量が許す範囲です。設定を行わない場合は、値は10(要素数は添字0〜10で11個)とみなされます。
不要になった配列変数は、ERASE命令で削除できます。また、宣言してある配列変数は、CLEAR命令かERASE命令を実行しないと再宣言できません。

参 照
ERASECLEAR


DRAW

機 能

グラフィック画面に図形を描きます。

書 式
DRAW<文字式>

文 例
10 SCREEN 2
20 A$="A0C15S4BM150,80L40D12R8U6R24D6R8U12"
30 B$="BM134,86F12D8L32U8E12"
40 C$="C8BM132,92L4G4D4F4R4E4U4H4"
50 DRAW "XA$;":DRAW "XB$;"
60 DRAW XC$
70 GOTO 70
【表示】☏
解 説

各文字変数に代入された文字式が、50行の指定で実行されて、画面に電話器が描かれます。
DRAWでの指定は次のような形で行います。

DRAW "文字式"
DRAW 文字変数
DRAW "X文字変数;"

文字式は、線を描くための情報で記号と数値でできていて、DRAWに続けて引用符で囲んで指定します。文字変数を使って指定するときは、あらかじめその文字変数に、線を描くための情報(文字式)を代入しておきます。文字変数を用いるときには、"X文字変数;"と指定しても(50行)、単に文字変数だけ指定しても(60行)、結果は同じです。
指定する記号には、移動、回転、色、サイズの4種類のものがあります。

表2.8 DRAW文の指定一覧

記号数値意 味 備考



U 距離上へ移動 U10 距離は画面の1点を単位とする(単位はサイズ命令で変更可能)斜め方向と上下左右方向で同じ距離を指定しても、画面上での実際の移動距離は異なる。
D 下 〃 D5
L 左 〃 L8
R 右 〃 R12
E 右上 〃 E7
F 右下 〃 F20
G 左下 〃 G15
H 左上 〃 H40
M 座標
(X,Y)
(X,Y)まで描画M100,100Xの前に+か-をつけると相対座標指定
B なし移動のみ BM50,50U〜Mまでの記号につけて用いる。
N なしLP移動しないNL10 U〜Mまでの記号につけて用いる。



A 0〜390度単位で回転A1U12L4D120〜270度の回転。指定し直すまで有効。


C 0〜255色指定C8D10色コードの範囲は画面モードによる。




S1〜255移動距離の単位S20U12L4D12省略値は4で、これが画面1ドット分。

■数値変数の指定
なお、次の形式で数値変数も指定できます。

DRAW "=変数名;"

例えば

10 SCREEN 2
20 A=10:B=120
30 DRAW "BM=A;,=B;U20"
40 GOTO 40

というプログラムは(100,120)の位置まで線を引かずに移動し、そこから上に20点分の線を引くというものです。

参 照
COLOR


DSKF 【Disk】

機 能

フロッピーディスクの残り容量をクラスタ単位で返します。

書 式
DSKF(<ドライブ番号>)

文 例
PRINT DSKF(1)
解 説

<ドライブ番号>で指定されたフロッピーディスクの残り容量をクラスタ単位で返します。1クラスタは以下の通りです。

メディア サイズ
フロッピーディスク 1024バイト
RAMディスク* 512バイト(2Mバイトまで)
1024バイト(2M〜4Mバイト)
ハードディスク 可変〔ハードディスクの初期化(領域確保)のとき、指定する領域の大きさにより1Kバイト、2Kバイト、4Kバイト、8Kバイト、16Kバイト、32Kバイト、64Kバイトから選択する。〕
  • MSX-DOS2のRAMDISKコマンドで設定するもの。

END

機 能

プログラムを終了します。

書 式
END

文 例
10 PRINT "ハルガ"
20 END
30 PRINT "コナイ"
40 END
解 説

END命令はプログラムを終了させます。プログラム内にいくつ置いてもかまいません。
また、プログラムの最後のEND(この場合、40行)は省略してもかまいません。
上の例では、20行にENDがあるので、その後の行は実行されず、「コナイ」は表示されません。


EOF

機 能

ファイルが終了したかどうかを調べます。

書 式
EOF(<ファイル番号>)

文 例
IF EOF(1) THEN CLOSE1
解 説

EOFは、ファイル番号で指定されたファイルが終わったかどうか調べるもので、終わっていればー1を、まだ途中であれば0を結果として返します。EOFに続くカッコ内の数値は、指定したファイルのファイル番号で、OPEN命令で指定されているものと対応しています。調べるファイルは、OPEN命令のINPUTモードで開かれていなければなりません。

参 照
OPENINPUT#

ERASE

機 能

配列変数を削除します。

書 式
ERASE<配列変数名>[,<配列変数名>・・・]

文 例
ERASE A
解 説

DIMで指定した配列変数を削除し、割り当てられたメモリを使えるようにします。

参 照
DIM


ERL、ERR

機 能

エラーコードやエラーの起こった行番号を調べます。

書 式
ERR
ERL

文 例
10 ON ERROR GOTO 40
20 A%=A%+10
30 GOTO 20
40 IF ERR<>6 THEN 80
50 PRINT ERL;"ギョウデエラーハッセイ"
60 A%=0:PRINT "ショリシマシタ"
70 RESUME
80 ON ERROR GOTO 0
解 説

40行で発生したエラーコードが6かどうかの判定を行い、6なら50行でエラーの発生した行番号を表示し、60行でエラーに対する処理を行っています。
このように、ERLやERRを用いると、エラーが発生したとき、エラーの起こった行番号(ERL)やエラーコード(ERR)を知ることが出来ます。
ERLやERRは普通、ON ERROR GOTO命令でジャンプするエラー処理の操作で使われます。ダイレクトモードでエラーが発生したときには、ERLの値は65535となります。

参 照
ON ERROR GOTOERROR


ERROR

機 能

プログラムをエラー状態にします。

書 式
ERROR<エラーコード>

文 例
ERROR 23
解 説

ERRORで0から255までの値を指定することによって、プログラムをエラー状態にすることができます。メッセージが用意されているエラーコードを指定すると、画面に対応するエラーメッセージが表示されます。
エラーコード23、26〜49、60〜255にはメッセージが定義されていないので、ON ERROR GOTO文と併せて独自のエラー処理を行うこともできます。

参 照
ON ERROR GOTO、[エラーメッセージ表]


EXP

機 能

自然対数の底「e」の<数式>乗を計算します。

書 式
EXP(<数式>)

文 例
PRINT EXP(1)
【表示】2.7182818284588

FIELD

機 能

ランダム入出力バッファ中に変数領域を割り当てます。

書 式
FIELD[#]<ファイル番号>,<フィールド幅>AS<文字変数>[,<フィールド幅>AS<文字変数>]・・・

文 例
FIELD#1, 15 AS A$, 10 AS B$
解 説

<ファイル番号>とはOPEN文で開いたファイルにつけた番号のことで<フィールド幅>とは<文字変数>に割り当てられる文字数のことです。また<文字変数>はランダムファイルをアクセスするとき使われる変数名です。
FIELD文は、GET文によるランダム入出力用バッファへのデータの読み込み、あるいはPUT文によるランダム入出力用バッファからのデータの書き出しを可能にするためにGET、PUT文の前に実行されなければなりません。
例えば、

FIELD1, 15 AS A$, 10 AS B$

では、ランダム入出力用バッファ中の最初の15文字(バイト)をA$という文字変数に割り当て、次の10文字がB$に割り当てられます。

FIELD文は、実際にはランダム入出力用バッファにデータを置くことはせず、これはLSET、RSET文で行われます。

FIELD文で割り当てられる総バイト数は、OPEN時に決めたレコード長を越えることはできません。万一、越えた場合には、「Field overflow」エラーが生じます。

なお、1つのファイル番号に対して、何回かに分けてFIELD文を実行してもかまいません。このとき、以前に実行されたFIELD文も、その効力を保持します。FIELD文は、実行するたびに最初の1文字からバッファを定義するため、同一データに対し複数の領域を定義する効果をもちます。

FIELD文で定義した文字変数は、ランダム入出力用バッファ中の対応するデータを指していますが、FIELD文の実行後に入力関係の文、または代入文の左辺で使用すると、その変数は文字列の記憶領域に移り、ランダム入出力用バッファからは消えてしまうので注意する必要があります。


FILES、LFILES

機 能

フロッピーディスクの中のファイル名を表示します。

書 式
[L]FILES [<ファイルスペック>]

文 例
FILES "*.BAS"
LFILES "B:"
解 説

<ファイルスペック>で指定されたファイルのファイル名を表示します。指定ファイルがフロッピーディスク中になければ、「File not found」エラーが生じます。
<ファイルスペック>が省略された場合は、現在選択されているディスクドライブ中の全ファイル名を表示します。
指定するファイル名には、疑問符(?)を含むことができ、ファイル名や、拡張子中の1文字の代わりをすることができます。また、ファイル名、拡張子の文字中にアスタリスク(*)を用いると、任意のファイル名、または拡張子の代わりとすることができます。
<ファイルスペック>で、ディスクドライブが指定されていれば、そのディスクドライブ中の指定ファイルが出力され、そうでないときは、現在選択されているディスクドライブ(カレントドライブ)が使用されます。
LFILESは出力先がプリンタであることを除き、FILESとまったく同じです。


FIX

機 能

<数式>の値の小数点以下を取り去った値を計算します。

書 式
FIX(<数式>)

文 例
PRINT FIX(-1.2)
【表示】-1
解 説

<数式>の値が正のときはINTと同じですが、負のときは以下のようになります。

結果意味
FIX(-1.2)-1小数点以下切り捨て
INT(-1.2)-2-2.3を超えてない最大の整数

FOR〜NEXT

機 能

FORからNEXTまでの間で指定された操作を、指定された回数だけ繰り返します。

書 式
FOR<変数名>=<初期値>TO<終値>[STEP<増分>]

文 例
10 FOR I=0 TO 10 STEP 2
20 PRINT I
30 PRINT "ループ"
40 NEXT I
50 END
解 説

FORで繰り返しの回数を指定し、FORとNEXTの間の操作をその回数だけ繰り返し行います。FORの次に「I=0」の形で、繰り返しの初期値(0)を設定します。TOの次で繰り返しの最終値(10)を設定します。最後にSTEPに続けて初期値と最終値との間の増分(2)を指定します。
プログラムの実行がNEXT(40行)まで来ると、変数Iが増分だけ増やされます。そして、最終値を越えていなければFOR(10行)に戻ります。したがって、初期値が最終値よりも大きく設定されているときも、FOR文からNEXT文までのプログラムは一度実行されます。
このプログラムでは、10行の指定で、Iが0、2、4、6、8、10と増えますので、20行と30行は6回実行され、「ループ」は変数Iの値とともに6回表示されます。Iが最終値10と同じになったところでプログラムの実行はFOR〜NEXTから出て、NEXTの次の行に移ります。
FOR〜NEXTのSTEP以下は省略することができます。省略したときは増分は+1になります。


FRE

機 能

メモリの未使用領域の大きさを返します。

書 式
FRE(<引数>)

文 例1
PRINT FRE(0)
解 説1

引数が数値の場合は、BASICが使っていないメモリの大きさ(ユーザーエリアの未使用領域)がバイト数で返されます。引数は、数値であれば何でもかまいません。

文 例2
PRINT FRE("A")
解 説2

引数が文字列の場合は、まず文字領域の整理が行われ、それから未使用の文字領域の大きさがバイト数で出されます。この引数は、文字列であれば何でも(空文字でも)かまいません。

参 照
CLEAR、[メモリマップ]


GET

機 能

ランダムファイルから、ランダム入出力用バッファに1レコードを読み込みます。

書 式
GET [#]<ファイル番号>[,<レコード番号>]

文 例
GET #1,1
解 説

<ファイル番号>は、そのファイルをOPEN文によって開いたときに指定した番号です。<レコード番号>が省略された場合には、直前のGET、PUT文で参照されたレコードの次のレコードがバッファに読み込まれます。レコード番号として指定可能な最大の数は、4,294,967,295です。


GET DATE

機 能

<文字変数>に現在の日付を代入します。

書 式
GET DATE <文字変数>[,A]

文 例
GET DATE A$
解 説

現在の日付を指定した<文字変数>に代入します。オプションのAを付けると、アラームの設定された日付が代入されます。日付は、「85/04/03」のように年月日がスラッシュで区切られ、月日が1桁の場合は04のように2桁となります。


GET TIME

機 能

<文字変数>に現在の時刻を代入します。

書 式
GET TIME <文字変数>[,A]

文 例
GET TIME T$
解 説

現在の時刻を指定した<文字変数>に代入します。オプションのAを付けると、アラームの設定された時刻が代入されます。時刻は、「11:20:03」のように時分秒がコロン(:)で区切られ、時刻が1桁の場合は03のように2桁となります。


GOSUB

機 能

指定したサブルーチンを呼び出します。

書 式
GOSUB<行番号>

文 例
10 GOSUB 30
20 END
30 PRINT "ココカラサブルーチン"
40 PLAY "CDE"
50 PRINT "GOSUBノツギノギョウヘモドル"
60 RETURN
解 説

GOUSUB命令で指定した行で始まるサブルーチンを呼び出します。呼び出されたサブルーチンは、RETURN命令によってGOSUBの次の文または行に戻ります。サブルーチンとは、GOSUBで指定する行から、RETURNの行までの独立した1つのプログラムです。

参 照
RETURNGOTO


GOTO

機 能

指定した行にジャンプします。

書 式
GOTO<行番号>

文 例
10 PRINT "10ギョウデス":GOTO 30
20 PRINT "20ギョウデス":END
30 PRINT "30ギョウデス"
40 GOTO 20
【表示】10ギョウデス
        30ギョウデス
        20ギョウデス
解 説

10行で、30行に飛ぶように指定しているので、20行のEND命令を飛び越して30行が実行されます。そのあと、40行から20行にジャンプして、プログラムは終了します。

参 照
ON GOTOON GOSUBGOSUB


HEX$

機 能

<数式>の数値を16進数の文字列に変換します。

書 式
HEX$(<数式>)

文 例
PRINT HEX$(12)
【表示】C
参 照

VALBIN$OCT$STR$


IF〜THEN〜ELSE、IF〜GOTO〜ELSE

機 能

条件判断を行い、その結果に応じた操作を行います。

書 式
IF<条件>THEN<文または行番号>[ELSE<文または行番号>]
IF<条件>GOTO<行番号>[ELSE<文または行番号>]

文 例
10 A=A+1
20 PRINT A
30 IF A=20 THEN PRINT "ハタチ" ELSE 10
40 END
解 説

IFに続けて条件を指定します。その条件が満たされた(0以外の値を取る)ときはTHEN以下の指定が実行され、条件が満たされない(0を値として取る)ときはELSE以下の指定が実行されます。
ELSE以下の指定は省略することができます。その場合、条件が満たされなかったときは次の行が実行されます。
THEN、ELSEの後ろの指定は、文でも行番号でもかまいません。THENの後ろに行番号を指定する場合、THENの代わりにGOTOを使って、IF〜GOTO〜ELSEという形にすることもできます。
条件には、以下のような比較演算子と論理演算子とが使えます。論理演算子は、複数の条件を指定するときに用います。
比較演算は条件が成立したときには「-1」、成立しないときには「0」を値として返します。

表2.9 比較演算

比較演算子意味
式1=式2式1が式2と等しい IF A$="y"
式1<>式2式1が式2と等しくないIF A<>0
式1<式2式1が式2より小さいIF A<10
式1>式2式1が式2より大きいIF A>B
式1<=式2
(式1=<式2)
式1が式2と等しいか、小さいIF A<=B+1
式1>=式2
(式1=>式2)
式1が式2と等しいか、大きいIF A>="Z"

表2.10 論理演算

論理演算子意味
NOTIF NOT (A=1) Aが1でなければTHEN以下を実行
ANDIF A=0 AND B=3Aが0でBが3のときのみTHEN以下を実行
OR IF A<0 OR B=0 Aが0より小さいか、Bが0のときにTHEN以下を実行


INKEY$

機 能

キーが押されていればその文字を、押されていなければ空文字(ヌル)を返します。

書 式
INKEY$

文 例
10 A$=INKEY$
20 IF A$='"' THEN 10
30 PRINT A$;"=";HEX$(ASC(A$))
40 GOTO 10
解 説

このプログラムを実行すると、キーボードから打ち込まれた文字と、その文字のアスキーコードが画面に表示されます。
INKEY$は、[CTRL]+[C]と[CTRL]+[STOP]以外のコントロール文字も読み取ります。

参 照
INPUTLINE INPUTINPUT$、[キャラクターコード表]


INP

機 能

指定した入力ポートからデータを獲得します。

書 式
INP(<ポート番号>)

文 例
A=INP(15)
解 説

カッコ内のポート番号(15)で指定された入力ポートから1バイトのデータを読み取り、その値をAに代入します。ポート番号に関しては、巻末の「I/Oマップ」を参照して下さい。
INP関数は、ハードウェアと非常に密着した関数で、他のMSX機種では返す値が違う場合もあります。MSXの互換性を維持するため、広く公表するプログラムには使用しないでください。

参 照
OUTWAIT


INPUT

機 能

キーボードから入力されるデータを指定した変数へ代入します。

書 式
INPUT["<プロンプト文>";]<変数名>[,<変数名>・・・]

文 例
10 INPUT"データ";A
20 PRINT A * A:GOTO 10
解 説

INPUT命令を実行すると、疑問符(?)が画面に表示され、プログラムはキーボードからのデータ入力待ちになります。何か数値を入力するとその数値は?に続いて画面に表示され、その値が指定された変数Aに代入されます。
引用符(")で囲まれた文字列(上の例の場合"データ")は、プロンプト文と呼ばれるもので、これを指定していれば、?の前にその文字列が表示されて、メッセージの役割を果たします。
変数は、カンマ(,)で区切って複数個指定することもできます。この場合、入力するデータもカンマで区切って、変数の数だけ入力しなければなりません。入力するデータの個数が足りないと、「??」と表示されて入力待ちとなり、個数が多いと「?Extra ignored」と表示され、余分に入力されたデータは無視されます。また、対応する変数の型とデータの型は、一致していなければなりません。型が違っていた場合には、「Redo from start」と表示されて再び入力待ちとなります。


INPUT #

機 能

ファイルからデータを読み込みます。

書 式
INPUT #<ファイル番号>,<変数>[,<変数>・・・]

文 例
INPUT #1,A,B
解 説

あらかじめOPEN文でINPUTモードを指定して開いておいたファイルからデータを読み込み、変数にセットします。INPUT #文はデータを読み込む対象がファイルであることを除けば、INPUT文とほぼ同じです。
<ファイル番号>は、OPEN文で指定した番号です。
INPUT #文で読み込むデータは、PRINT #文で書き出した各データと対応した順に読み込まれます。したがって<変数>の型はファイルから入力するデータの型と対応していなくてはなりません。
ファイル中のデータのうち、先に続くスペース、ラインフィードは無視され、スペース、ラインフィード以外の最初の文字がデータの始まりとされます。データは、スペース、キャリッジリターン、ラインフィード、カンマによって区切られていなければなりません。
ファイル中のデータが文字列型の場合には、最初の文字が引用符(")であると、その文字型データは、最初の引数から次の引用符までの間に読み込まれた文字で構成されれているとみなされます。したがって、引用符で囲まれた文字列中には、引用符を文字として入れることはできません。最初の文字が引用符以外のときは、文字列は、囲まれていないものとして扱われ、カンマ、キャリッジリターン、ラインフィード、または255文字の読み込み終了によって区切られます。数値、または文字型データの読み込み中に、ファイルの終わり(EOF)に達したときは、そのデータ項目はそこで区切られます。

参 照
INPUTOPENPRINT #


INPUT$

機 能

指定されたファイルから指定された長さの文字を獲得します。

書 式
INPUT$(<文字列>[,[#]<ファイル番号>])

文 例
WD$=INPUT$(6,#2)
解 説

<ファイル番号>で指定されたファイルから<文字数>分の文字列を読み出します。
INPUT$は、[CTRL]+[STOP]、[CTRL]+[C]を除くすべての文字をそのまま読み出すので、INPUT文やLINE INPUT文では入力することのできないラインフィードコードやリターンコードも入力することができます。
#のあとの数値は、読み出すファイルのファイル番号で、OPEN命令で指定されたものと対応しています。ファイル番号が省略された場合には、キーボードから入力されたデータを読み出しますが、INPUT命令と異なり、入力された文字は画面に表示されません。
[CTRL]+[STOP]でこの入力を中断した場合、CONTは実行できません。
カッコ内の最初の数値は、読み出す文字数を指定しています。キーボードからの入力を読み出す場合、INPUT$は指定された文字数の文字が入力されるのを待ち続けますが、すでにキーボードバッファに入力済みのデータがあるときには、バッファの中の文字から先に読み出します。

参 照
OPENINPUTLINE INPUT


INSTR

機 能

ある文字列の中から指定された文字列を捜し、見つかった位置を返します。

書 式
INSTR([<数式>,]<文字列1>,<文字列2>)

文 例
10 A$="SUPER MSX"
20 PRINT INSTR(A$,"M")
30 END
【表示】7
解 説

引数の最初の文字列(A$)の中から、2番目の文字列(「M」)をさがします。この例の場合、「M」はA$の頭から数えて7番目にあたるので、結果は7になります。
指定された文字列が見つからなかったときは、結果は0になります。また、INSTR(6,A$,"M")のように、最初に数値を入れて、さがし始める位置を指定することもできます。


INT

機 能

<数式>以下の最大の整数を返します。

書 式
INT(<数式>)

文 例
PRINT INT(-1.2)
【表示】-2
解 説

<数式>の値が正のときはFIXと同じですが、負のときは異なります。FIXを参照して下さい。


INTERVAL ON/OFF/STOP

機 能

ON INTERVAL GOSUB命令の設定を実行するかどうかを決定します。

書 式
INTERVAL ON
INTERVAL OFF
INTERVAL STOP

文 例
ON INTERVAL=100 GOSUB 100:INTERVAL ON
解 説

INTERVAL ONは、ON INTERVAL GOSUBの設定を実行するように指定し、以後、指定した時間ごとにサブルーチンにジャンプします。INTERVAL OFFは、設定によるジャンプを禁止します。INTERVAL STOPは、設定によるジャンプを一時止め、後でINTERVAL ONが指定されると直ちにジャンプを実行します。

参 照
ON INTERVAL GOSUB


KEY

機 能

ファンクションキーの内容を定義します。

書 式
KEY<キー番号>,<文字列>

文 例
KEY 1,"LOAD"
解 説

数値はファンクションキーの番号に対応させるため、1〜10までの値でなければなりません。定義できる文字列は、最大15文字までの文字およびコントロール文字です(コントロール文字は、CHR$を使って表現します)。一度定義したファンクションキーの内容は、あらたに定義し直すか、一旦電源を切って再び電源を入れるまで変わりませんので注意してください。

参 照
CHR$KEY LISTKEY ONKEY OFF


KEY LIST

機 能

ファンクションキーの内容を画面に表示します。

書 式
KEY LIST

文 例
KEY LIST
解 説

[F1]〜[F10]までのすべてのファンクションキーの内容を画面に表示します。
電源投入時には、ファンクションキーの内容は以下のように設定されています。

F1 "color"
F2 "auto"
F3 "goto"
F4 "list"
F5 "run"+CHR$(13)
F6 "color 15,4,7"+CHR$(13)
F7 "cload"+CHR$(34) (MSX2+では"load"+CHR$(34))
F8 "cont"+CHR$(13)
F9 "list."+CHR$(13)+CHR$(31)+CHR$(31)
F10CHR$(12)+"run"+CHR$(13)
参 照

KEYKEY ONKEY OFF


KEY(n) ON/OFF/STOP

機 能

ファンクションキーが押されたときに特別な処理を行うかどうかを決定します。

書 式
KEY(<キー番号>)ON
KEY(<キー番号>)OFF
KEY(<キー番号>)STOP

文 例
10 ON KEY GOSUB 40,60
20 KEY(1) ON:KEY(2) ON
30 GOTO 30
40 PRINT "F1ガオサレマシタ"
50 KEY(1) STOP:RETURN
60 PRINT "F2ガオサレマシタ"
70 RETURN
解 説

この命令は、ON KEY GOSUBによって定義された処理のサブルーチンの実行を許可するか(ON)、禁止するか(OFF)、一時停止するか(STOP)を決定します。
カッコ内の数値は、ファンクションキーのキー番号に対応しています。例えば、KEY(1) ON を実行すると、[F1]を押すごとに、ON KEY GOSUBにより定義されている処理のサブルーチンが呼び出されます。サブルーチンが実行されている間は、KEY(1) STOP が自動的に実行されるので、サブルーチンの実行が終わるまでは、多重にサブルーチンが呼び出されることはありません。KEY(2) OFF を実行すると、[F2]を押しても、用意された処理のサブルーチンは実行されません。KEY(3) STOP を実行すると、[F3]を押しても、用意された処理のサブルーチンは実行されませんが、再びKEY(3) ON を実行することによって、処理が実行されます。この命令は、KEY(3) ON の状態でのみ有効です。
上のプログラムでは、[F1]に関して、一旦KEY ONしていますが(20行)、その処理のサブルーチンでKEY STOPしているので(50行)、一度[F1]キーが押されてしまうと、2度目からは「F1ガオサレマシタ」というメッセージは表示されません。

参 照
ON KEY GOSUB


KEY ON/OFF

機 能

ファンクションキーの内容を画面の下部に表示するかしないかを設定します。

書 式
KEY ON
KEY OFF

文 例
KEY ON
KEY OFF
解 説

KEY ONを実行すると、ファンクションキーの内容が画面の最下行に表示されます。普通の状態では[F1]〜[F5]までが、シフトキーを押しているときは[F6]〜[F10]までが表示されます。
KEY OFFを実行すると、ファンクションキーの表示がとりやめられます。KEY ON/OFF は SET SCREEN 命令により、初期状態を登録することができます。

参 照
KEYKEY LIST


KILL

機 能

ファイルを消去します。

書 式
KILL<ファイルスペック>

文 例
KILL "A:SAMPLE.BAK"
解 説

<ファイルスペック>で指定したファイルを消去します。ファイルスペックの指定には、ワイルドカード(?や*)を使うことができますが予想外のファイルまで消去してしまわないよう十分注意が必要です。また、ファイルスペック中で、ドライブ名が指定されてない場合は、自動的に現在選択されているドライブ(カレントドライブ)とみなされます。開いているファイルに対してKILLコマンドを実行すると、「File still open」エラーとなります。


LEFT$

機 能

<文字列>の左側から指定された数の文字列を返します。

書 式
LEFT$(<文字式>,<数式>)

文 例
10 A$="SUPER HOME COMPUTER"
20 B$=LEFT$(A$,5)
30 PRINT B$:END
【表示】SUPER
解 説

与えられた文字列(A$)の左側から、数値(5)で指定された数の文字を取り出します。
指定した数が、文字列の総文字数より大きいときは、文字列がそのまま取り出されます。


LEN

機 能

<文字式>で指定された文字列の総文字数を返します。

書 式
LEN(<文字式>)

文 例
10 A$="SUPER HOME COMPUTER"
20 PRINT LEN(A$)
30 END
【表示】19
解 説

LEN はコントロールコードや空白も文字として数えます。


LET

機 能

変数に値を代入します。

書 式
[LET]<変数名>=<式>

文 例
10 LET A=10
20 B = 20
30 PRINT A;B
【表示】10 20
解 説

代入するものは、文字列でも数値でも構いません。LETは省略できるので、普通は使いません。


LINE

機 能

グラフィック画面に数値や四角を描きます。

書 式
LINE[ [STEP](X1,Y1)]-[STEP](X2,Y2)[,<カラーコード>][,B[F]][,<論理演算子>]

文 例
10 COLOR 15,4,7:SCREEN 2
20 LINE(88,56)-(168,136),6,BF
30 LINE(128,76)-(108,116),15
40 LINE -STEP(40,-25),15
50 LINE -STEP(-40,0),15
60 LINE -STEP(40,25),15
70 LINE -(128,-76),15
80 GOTO 80
解 説

10行でグラフィック画面を指定してから、20行で赤く塗りつぶされた四角を描き、30行から70行でその四角の中に星を描いています。
LINEは、(X1,Y1)で指定した視点と(X2,Y2)で指定した終点とを結ぶ直線を引きます。X軸方向には、SCREEN 2〜5および8以降では255、SCREEN 6と7は511まで、Y軸方向には、SCREEN 2〜4では191、SCREEN 5以降では211までありますので、0からこの値の範囲の点を指定すると、画面に線が描かれます。
色を指定すると、指定した色で線が引かれます。省略した場合は、COLORで指定している前景色が使われます。色と指定する値との対応については、COLORを参照してください。
<カラーコード>の後にBを指定すると、(X1,Y1)から(X2,Y2)を結ぶ線を対角線にした四角が描かれます。BFを指定したときには、四角の中が指定された色で塗りつぶされます(20行参照)。LINEの最後に<論理演算子>を指定すると、LINEの色を次のように操作することができます。ただしこの指定ができるのは、SCREEN 5以降に限られます。
Cを指定色、SCをLINEの下になる色としたときは、

AND C AND SC
OR C OR SC
XOR NOT(C) AND SC
PSET C
PRESET NOT(C)
TAND C AND SC(C=0ならC=SC)
TOR C OR SC(C=0ならC=SC)
TXOR NOT(C) AND SC(C=0ならC=SC)
TPSET C(C=0ならC=SC)
TPRESETNOT(C) (C=0ならC=SC)
が実際の色となります。
(X1,Y1)を省略して-(X2,Y2)だけが指定されると、最終参照点から(X2,Y2)までを結んだ線が引かれます(70行参照)。最終参照点というのは、線や点などを描くのに1番最後に指定された点のことです。
もう1つのLINEの指定は、STEPを用いたものです。STEPをつけて指定された点は、最終参照点からカッコの中で指定した値の分だけ移動した点を示します。例えば、最終参照点が(100,100)であったとすると、STEP(20,-30)というのは、(120,70)の点を指すことになります。したがって、STEPを用いて引かれる線は、最終参照点とそこからの距離によって指定される点とを結んだものになります。(40、50、60行参照)。
80行で80行自身にジャンプしているのは、グラフィック画面では、プログラムの実行が終わると直ちにテキスト画面に移ってしまうからです。これについてはSCREENを参照してください。
参 照
SCREENCOLOR


LINE INPUT

機 能

キーボードから入力される1行全体の文字列をそのまま文字変数に代入します。

書 式
LINE INPUT["<プロンプト文>";]<文字型変数名>

文 例
10 LINE INPUT"データ";A$
20 PRINT A$
30 GOTO 10
解 説

LINE INPUT命令を実行すると、プログラムはキーボードからの入力待ちの状態になります。このとき、疑問符(?)は表示されません。以降、何かデータを入力すると、リターンキーを押すまでに入力された文字データが画面に表示され、それがそのまま文字型変数に代入されます。キーボードから入力できる文字列の長さは、254文字以内です。また、LINE INPUT命令では、カンマ(,)や引用符(")もデータとして入力できます。
なお、INPUT命令同様、引用符(")を用いてプロンプト文を指定することができます。

参 照
INPUT


LINE INPUT #

機 能

1行単位のデータをファイルから文字列変数へ読み込みます。

書 式
LINE INPUT #<ファイル番号>,<文字列型変数名>

文 例
LINE INPUT #1,A$
解 説

あらかじめOPEN文でINPUTモードを指定して開いておいたファイルからキャリッジリターンコード+ラインフィードコードで区切られている1行単位(255文字以内)のデータを指定した文字変数に読み込みます。
SAVE文でアスキー形式のプログラムファイルを作成した場合、一行一行はキャリッジリターンコード(CHR$(13))とラインフィードコード(CHR$(10))とで区切られて書き出されています。また、PRINT#文で作成したファイルにはPRINT#文を実行するごとに数値や文字列の並びがキャリッジリターンコード+ラインフィードコードで区切られて書き出されています。LINE INPUT#文はこれらのファイルからキャリッジリターンコード+ラインフィードコードにはさまれているデータを読み込むときに使います。
<ファイル番号>はOPEN文で指定した番号です。

参 照

OPENCLOSEPRINT#LINE INPUT


LIST、LLIST

機 能

メモリにあるプログラムを画面に表示、プリンタに印刷します。

書 式
[L]LIST[<行番号1>][-[<行番号2>]]

文 例
LIST 100-200
解 説

行番号1と同じか行番号1以上で最も近い番号の行から、行番号2または行番号2以下で最も近い番号の行までのプログラムを画面に表示(LLISTはプリンタに印刷)します。

LIST
プログラムの先頭から最後までが表示されます。
LIST 50
行番号50の行のみ表示されます。
LIST -100
プログラムの先頭から100行目までが表示されます。
LIST 200-
プログラムの200行目から最後までが表示されます。

LISTの機能を中断したいときは[STOP]キーを押して下さい。[STOP]キーをもう一度押せば表示を再開します。また、LISTの機能を終了したいときは、[CTRL]+[STOP]キーを押して下さい。
LISTの代わりにLLISTを用いれば、プログラムをプリンタに印刷することができます。


LOAD

機 能

プログラムをメモリ上に読み込みます(ロードする)。

書 式
LOAD<ファイルスペック>[,R]

文 例
LOAD "A:TEST"
解 説

LOADコマンドは<ファイルスペック>で指定したプログラムをメモリ上にロードします。LOAD文を実行すると、LOAD文実行前にメモリ上にあったプログラムは消去されます。また、すべての開いているファイルは閉じられ、変数の値は初期化されます。
<ファイルスペック>のデバイス名を省略すると、カレントドライブからロードします。
また、ファイル名はカセットファイルに対して用いる時のみ省略でき、この場合はLOAD"CAS:"とします。ディスクファイルの場合はプログラムのセーブ形式が、バイナリでもアスキーでもかまいませんが、カセットファイルではアスキー形式でセーブしたものに限られます。カセット上のバイナリ形式のプログラム(CSAVEしたもの)はCLOADでのみロードすることができます。
Rオプションをつけるとファイルは開いたままで、プログラムをロード後、ただちに実行を開始します。
LOADは、指定されたファイルを見つけてプログラムのロードを開始するまでは、メモリ上のプログラムを保存しています。

参 照
SAVECLOAD


LOC

機 能

ファイル中の現在の位置を返します。

書 式
LOC(<ファイル番号>)

文 例
IF LOC(1) > 50 THEN STOP
解 説

ランダムファイルを指定したときは、LOC関数は、最後に読んだり書いたりしたレコード番号を値として返します。ただし、オープン直後はLOC関数の値は0になっています。
シーケンシャルファイルを指定したときは、そのファイルがオープンされてから読み出されたり書き込まれたデータのバイト数を返します(ただし256バイトを1単位とする)。ファイルをシーケンシャル入力モードでオープンした場合は、BASICは最初のセクタを自動的に読むので、そのファイルを読む前でもLOC関数の値は256となります。


LOCATE

機 能

テキスト画面のカーソル位置を指定します。

書 式
LOCATE[<X座標>][,<Y座標>][,<カーソルスイッチ>]

文 例
LOCATE 10,12
解 説

カーソルを指定する位置へ移動します。(10,12)なら、画面の左側から11桁目、上から13行目の位置を意味しています(0から指定するため)。LOCATE命令でカーソル位置を指定してから、PRINTやINPUTを実行すると、その位置に文字や?が表示されます。指定された位置が画面の範囲を超えていると、横、縦とも、それを超えない最大の値に設定し直されます。
<カーソルスイッチ>は、0なら入力待ちの時のみカーソルを表示、0以外なら常に表示となります。LOCATEは、テキスト画面および漢字グラフィックモードでのみ使うことができます。


LOF

機 能

指定されたファイルの大きさを返します。

書 式
LOF(<ファイル番号>)

文 例
IF NM%>LOF(1) THEN PRINT"INVALID ENTRY"
解 説

指定されたファイルの実際の大きさをバイト単位で返します。


LOG

機 能

<数式>の自然対数を返します。

書 式
LOG(<数式>)

文 例
PRINT LOG(10)
【表示】2.302585092994

LPOS

機 能

プリンタのヘッドの位置を調べます。

書 式
LPOS(<式>)

文 例
A=LPOS(0)
解 説

現在のプリンタのヘッド位置を調べ、その結果をAに代入します。LPOSによって得られる値は、プリンタバッファ上のプリンタヘッドの位置なので、必ずしも実際の(物理的な)プリンタヘッドの位置とは限りません。カッコ内の数値は形式的なものなので、何であっても構いません。

参 照
LPRINTWIDTH


LPRINT

機 能

プリンタに文字列や数値を印刷します。

書 式
LPRINT[<式>・・・]

文 例
10 A$="ABC":A=123
20 LPRINT A$,A
30 LPRINT "DEF"
解 説

LPRINTに続けて指定された数値(この場合、45)や文字列(DEF)をプリンタに出力します。また、数値変数(A)や文字変数(A$)が指定されると、それらの変数に代入されている数値や文字列がプリンタに出力されます。
LPRINT命令は、出力先がプリンタであることを除けば、その機能や使い方はPRINT命令と全く同じですので、そちらを参照して下さい。

参 照
PRINTPRINT USINGLPRINT USING


LPRINT USING

機 能

文字列や数値を指定した書式でプリンタに印刷します。

書 式
LPRINT USING<書式>;<式>・・・
解 説
LPRINT USINGを実行すると、引用符(")で囲まれた書式にしたがって、指定された文字列や数値が編集され、その結果がプリンタに出力されます。
LPRINT USING命令は、出力先がプリンタであることを除けば、その機能や使い方はPRINT USING命令と全く同じですので、そちらを参照して下さい。
参 照
PRINT USINGLPRINT


LSET、RSET

機 能

ランダム入出力用バッファにデータを転送します(PUTコマンドのための準備)。

書 式
LSET<文字型変数>=<文字式>
RSET<文字型変数>=<文字式>

文 例
LSET D$=MKI$(D)
解 説

<文字式>の文字が、FIELD文で指定された文字より短い場合は、LSET文では左詰め、RSETでは右詰めでフィールド内を埋め、余分な所は空白で満たされます。逆にFIELD文での割り当てより長い場合は、LSET文、RSET文両方とも文字列の右側が失われます。また、数値データを扱うときは、あらかじめそれらを文字型データに変換しておかねばなりません。それらについては、MKI$、MKS$、MKD$の各関数を参照して下さい。
LSET文、RSET文はFIELD文で定義されていない文字型変数についても、そのフィールド内で左詰めないし右詰めをすることができます。これは、プリント出力の構成に際して利用することができます。


MAXFILES

機 能

使用するファイルの数を定義します。

書 式
MAXFILES=<ファイル数>

文 例
MAXFILES=3
解 説

OPEN文で開いて使用するファイルの数を定義します。以降、指定したファイルを同時に開いて使用することができます。定義しないときは、MAXFILES=1に設定されています。<ファイル数>は0〜15の範囲を持つ式で、ファイル1個について267バイトのファイルコントロールブロック領域が確保されます。MAXFILES文を実行すると、変数がすべて初期化され、現在オープンしているファイルはクローズされます。また、以前の変数の型宣言などは無効になります。

参 照
CLEAROPEN


MERGE

機 能

アスキー形式で保存されているプログラムをメモリ上のプログラムにマージ(混合)します。

書 式
MERGE<ファイルスペック>

文 例
MERGE "CAS:TEST"
解 説

メモリ上のプログラムに<ファイルスペック>で指定したプログラムファイルを混合して1つのプログラムにし、メモリ上に置きます。<ファイルスペック>で指定するファイルはSAVE"",A文を使ってアスキー形式でセーブされていなければなりません。そうでない場合には、ドライブ名を指定していればエラーとなり、CAS:を指定していればテープが回り続けます。<ファイルスペック>のデバイス名を省略すると、カレントドライブが使用されます。ファイル中のプログラムと、メモリ中のプログラムに同一行番号があった場合には、ファイル中の行でメモリ中の行を置き換えます。MERGEコマンドは実行を終了すると、コマンドレベルにもどります。

参 照
SAVELOAD


MID$

機 能

文字列の中から指定された数の文字列を取り出します。

書 式
MID$(<文字列>,<式1>[,<式2>])

文 例
10 A$="SUPER HOME COMPUTER"
20 PRINT MID$(A$,7,4)
30 END
【表示】HOME
解 説

文字列(A$)の左から数えて7番目の文字から、4つの文字を取り出します。取り出したい文字数(この場合は4)が省略されたときや、文字列の残りの文字数よりも大きいときは、指定した位置以降のすべての文字列が取り出されます。

参 照
LEFT$RIGHT$MID$


MID$

機 能

文字変数の一部を他の文字列と置き換えます。

書 式
MID$(<文字変数>,<式1>[,<式2>])=<文字列>

文 例
10 A$="SUPER HOME COMPUTER"
20 MID$(A$,7,4)="ホーム"
30 PRINT A$:END
【表示】SUPER ホーム COMPUTER
解 説

文字列(A$)の左から数えて7番目から4文字を、右辺の文字列("ホーム")と置き換えます。この代入文を実行しても、もとの文字列の長さは変わりません。また、文字数(4)を省略すると<文字列>の文字数と見なされます。

参 照
MID$


MKI$、MKS$、MKD$

機 能

各数値を内部表現に対応したキャラクタコードに変換します。

書 式
MKI$ (<整数表記>)
MKS$ (<単精度表記>)
MKD$ (<倍精度表記>)

文 例
RSET A$=MKI$(123)
解 説

ランダムファイルでは、文字データしか扱えないので、数値データは文字型データに変換してディスクに書き込み、読み出す際は逆に文字型データを数値型データに変換します。MKI$は整数値を2バイトの文字列に、MKS$は単精度数値を4バイトの文字列に、そしてMKD$は倍精度数値を8バイトの文字列にそれぞれ変換します。
数値から文字への変換は数値が持つ内部表現(2進数表現)の値をそのままそれに対応するキャラクターコードにすることによって行われます。この逆の動作をする関数としてCVI、CVS、CVD関数が用意されています。


MOTOR

機 能

カセットレコーダのモーターをON、OFFします。

書 式
MOTOR[ONまたはOFF]

文 例
MOTOR ON
解 説

リモート端子のあるカセットレコーダを接続したときに、モーターのON、OFFを行って、カセットテープの早送り、巻き戻しができるようにします。MOTOR ONと指定するとモーターがONになり、MOTOR OFFとするとOFFになります。MOTORとだけ指定すると、現在モーターがONならOFFに、OFFならONになります。


NAME 【Disk】

機 能

ファイルの名前を変更します。

書 式
NAME<ファイルスペック>AS<ファイル名>

文 例
NAME"TEST.BAS" AS "TEMP.BAS"
解 説

変更しようとするファイルは存在しているものでなければなりません。また、付けようとする名前と同じファイルは存在していてはなりません。ドライブ名を省略すると、カレントドライブ(現在選択されているドライブ)が選択されます。NAMEコマンドが実行されると、そのファイルの名前は変更されますが、ファイルの存在する位置や、占有する大きさなどは変化しません。


NEW

機 能

メモリにあるプログラムを削除し、すべての変数を初期化します。

書 式
NEW

文 例
NEW
解 説

NEWを実行すると、メモリにあるプログラムはすべて削除され、定義されている変数はすべて初期化され、開かれているファイルはすべて閉じられます。

参 照
DELETEERASE


OCT$

機 能

<数式>の数値を8進数の文字列に変換します。

書 式
OCT$(<数式>)

文 例
PRINT OCT$(100)
【表示】144
参 照

BIN$HEX$


ON ERROR GOTO

機 能

エラーが起こったときにジャンプする行を指定します。

書 式
ON ERROR GOTO <行番号>

文 例
10 ON ERROR GOTO 60
20 A$=INKEY$
30 IF A$="Y" THEN 80
40 A%=A%+100
50 GOTO 20
60 PRINT "ショリ":A%=0
70 RESUME
80 ON ERROR GOTO 0
解 説

10行で、エラーが起こったとき60行にジャンプするように指定してあるので、40行のA%が32767を超えて「OverFlow」エラーが起きると60行にジャンプし、A%に0を代入します。
あらかじめ、エラーを処理する部分をプログラム中に入力しておき、プログラムの最初にON ERROR GOTOでその部分の最初の行を指定しておけば、エラーが起きたときに、エラー処理用の指定が実行されます。エラー処理用の指定の最後にはRESUME命令を置くと、エラー処理を終了させ、もとのプログラムを再開させることができます(70行参照)。
ON ERROR GOTO 命令は、他のON ERROR GOTO命令、RUN、CLEAR、NEWが実行されるまで有効ですので、そのままプログラムを終了すると、ダイレクトモードでタイプミなどをしても、再びエラー処理用の行へジャンプし、プログラムが実行されていしまいます。したがってプログラムの終了直前には、ON ERROR GOTOの指定を無効にする、ON ERROR GOTO 0を実行するようにしてください(80行参照)。

参 照
RESUMEERLERROR


ON GOTO、ON GOSUB

機 能

<式>で指定されたいずれかの行にジャンプします。

書 式
ON<式>GOSUB<行番号>[,<行番号>・・・]
ON<式>GOTO<行番号>[,<行番号>・・・]

文 例1
10 INPUT "1 カ 2 ヲ オシテクダサイ";A
20 ON A GOTO 100,200
30 GOTO 10
100 PRINT "100ギョウニジャンプシマシタ":END
200 PRINT "200ギョウニジャンプシマシタ":END
文 例2
10 INPUT "1 カ 2 ヲ オシテクダサイ";A
20 ON A GOSUB 100,200
30 GOTO 10
100 PRINT "100ギョウニジャンプシマシタ":RETURN
200 PRINT "200ギョウニジャンプシマシタ":RETURN
解 説

ON と GOTO、あるいはON と GOSUBの間の値(A)に応じて、GOTO、GOSUBの後ろで指定した行にジャンプします。ON GOTOは指定した行にジャンプし、ON GOSUBは指定した行で始まるサブルーチンにジャンプします。(GOSUB参照)。
GOTO、GOSUBの後ろの指定は、左から1、2、3、・・・という数に対応していて、例えば、上の例では、1が押されれば100行に、2が押されれば200行にジャンプします。
対応する行番号がないとき(上の例では0や3以上の数値を入力した場合)は、次の命令が実行されます。負の数が指定されたときは、Illegal function callエラーとなります。

参 照

GOTOGOSUB


ON INTERVAL GOSUB

機 能

指定した時間ごとにサブルーチンの呼び出しを行うように設定します。

書 式

ON INTERVAL=<時間>GOSUB<行番号>

文 例
10 ON INTERVAL=600 GOSUB 40
20 INTERVAL ON
30 GOTO 30
40 PRINT"*";
50 RETURN
解 説

INTERVAL で指定する時間は、1から65535までの数値で、単位は1/60秒です。ON INTERVAL GOSUB命令は、設定を行うだけです。設定後にINTERVAL ONを指定して初めて、指定した時間がた経つとサブルーチンにジャンプします。サブルーチンから戻るには、RETURN命令を使います。また、RETURNに戻り先の行番号を指定することもできます。
RETURN命令が実行されるまでは、INTERVAL STOPが実行されたときと同じ状態になっているので、多重にインターバル割り込みがかかることはありません。
上のプログラムは10秒ごとに「*」を表示するものです。10行で、ON INTERVALで指定した時間(600)ごとに、GOSUBで指定された行(40行)にジャンプするように設定しています。

参 照
INTERVAL ONINTERVAL OFFINTERVAL STOP


ON KEY GOSUB

機 能

ファンクションキーが押されたときにジャンプする行を指定します。

書 式
ON KEY GOSUB[<行番号>][,<行番号>・・・]

文 例
10 ON A GOSUB 40,60
20 KEY(1)ON:KEY(2)ON
30 GOTO 30
40 PRINT "F1ガ オサレマシタ"
50 RETURN
60 PRINT "F2ガ オサレマシタ"
70 RETURN
解 説

ファンクションキーが押されたときに、呼び出すサブルーチンの行番号を指定します。
ON KEY GOSUBに続く行番号(40と60)が、実際に処理を行うサブルーチンの先頭行で、指定されたファンクションキー([F1]と[F2])が押されたときには、プログラムの実行はここに移ります。
行番号の並びの順序は、ファンクションキーのキー番号に対応しています。ファンクションキーは[F1]から[F10]まであるので、最大10個の行番号が並べられます。
呼び出されたサブルーチンは、GOSUB命令同様、RETURN命令によってジャンプした次の行に戻ります。また、RETURNに戻り先の行番号を指定することもできます。ただし、この命令は、ファンクションキーが押されたときの処理の定義を行うだけで、これだけでは処理は実行されません。上のプログラムでも、20行が実行されて、初めて40行と60行が実行されています。詳しくは、KEY(n) ON/OFF/STOPを参照して下さい。

参 照

KEY(n) ONKEY(n) OFFKEY(n) STOP


ON SPRITE GOSUB

機 能

スプライトパターンが重なったときにジャンプする行を指定します。

書 式
ON SPRITE GOSUB<行番号>

文 例
10 SCREEN 1,1
20 SPRITE$(0)=STRING$(8,CHR$(&B11111111))
30 ON SPRITE GOSUB 90
40 PUT SPRITE 0,(100,100),1,0
50 SPRITE ON
60 X=255
70 PUT SPRITE 1,(X,100),6,0
80 X=X-1:GOTO 70
90 REM SUB
100 X=255
110 RETURN
解 説

30行で、スプライトのパターンが重なったときには、90行にジャンプするように指定しています。
ON SPRITE GOSUBを実行しておき、SPRITE ONを実行すると、画面上でスプライトパターンが重なったときに、ON SPRITE GOSUBで指定した行(90)へジャンプします。ジャンプした行以降で、スプライトが重なったときの処理を行ったあとは、RETURNで元の行へ戻ります。また、RETURNに戻り先の行番号を指定することもできます。
なお、SCREEN 4以降のスプライトで特殊なカラーコードを持つものは衝突しても割り込みを起こしません。詳しくはCOLOR SPRITE文を参照してください。

参 照

SPRITE ONSPRITE OFFSPRITE STOP


ON STOP GOSUB

機 能

[CTRL]+[STOP]キーが押されたときにジャンプする行を指定します。

書 式

ON STOP GOSUB<行番号>

文 例
ON STOP GOSUB 100
解 説

[CTRL]+[STOP]キーが押されると、プログラムの実行は100行以降に移ります。ON STOP GOSUBは、[CTRL]+[STOP]キーが押されたときに、分岐するサブルーチンの行番号を指定するものです。ON KEY GOSUBに続く行番号(この場合、100)が、実際に処理を行うサブルーチンの先頭行になります。呼び出されたサブルーチンは、GOSUB命令同様、RETURN命令によってジャンプした次の行に戻ります。また、RETURNに戻り先の行番号を指定することもできます。ON KEY GOSUBの説明を参照して下さい。

参 照
ON KEY GOSUBSTOP ONSTOP OFFSTOP STOP


ON STRIG GOSUB

機 能

ジョイスティックのトリガボタンが押されたときにジャンプする行を指定します。

書 式

ON STRIG GOSUB<行番号>[,<行番号>・・・]

文 例
ON STRIG GOSUB,100,200
解 説

ポート1に接続されているジョイスティックのトリガボタン1が押されたらプログラムの実行を100行以降に移し、ポート2に接続されているジョイスティックのトリガボタン1が押されたらプログラムの実行を200行以降に移します。
この命令は、ジョイスティックのトリガボタンが押されたときに、分岐するサブルーチンの行番号を指定するものです。ON STRIG GOSUBに続く行番号(この場合、100と200)が、実際に処理を行うサブルーチンの先頭行で、指定されたトリガボタンが押されたときには、プログラムの実行はここに移ります。
行番号は最大5個まで指定することができ、左側から順に以下のトリガボタンと対応しています。

行番号意味
1番目キーボードのスペースキー
2番目ポート1に接続されているジョイスティックのトリガボタン1
3番目ポート2に接続されているジョイスティックのトリガボタン1
4番目ポート1に接続されているジョイスティックのトリガボタン2
5番目ポート2に接続されているジョイスティックのトリガボタン2

ただし、ジョイスティックによっては、トリガボタン2のないものもあります。
呼び出されたサブルーチンは、GOSUB命令同様、RETURN命令によってジャンプした次の行に戻ります。また、RETURNに戻り先の行番号を指定することもできます。ただし、この命令は、ジョイスティックのトリガボタンが押されたときの処理の定義を行うだけで、これだけでは処理は実行されません。STRIG(n) ON/OFF/STOP を参照して下さい。

参 照

STRIG(n) ONSTRIG(n) OFFSTRIG(n) STOPON KEY GOSUB


OPEN

機 能

ファイルを開きます。

書 式
OPEN<ファイルスペック>[FOR<モード>]AS#<ファイル番号>[LEN=<レコード長>]

文 例
OPEN "SAMPLE.DAT" FOR OUTPUT AS #1
解 説

OPEN文は、ファイルを使用するにあたってバッファエリアを割り当て、アクセスモードを決定します。一度ファイルをオープンすると、以降は、<ファイル番号>でデータのやりとりを行います。以下の命令や関数を使用する前には、あらかじめOPEN文を実行しておくことが必要です。

EOFFIELD
GETINPUT#
INPUT$(n,#m)LINE INPUT#
LOCLOF
PRINT#PRINT#USING
PUTVARPTR(#n)

<ファイルスペック>でドライブ名を省略したときは、現在のディスクドライブが使用されます。
<モード>はファイルに対するアクセスモードを決定するもので、次の4種類があります。

FOR INPUT 既存のシーケンシャルファイルから入力を行う。
FOR OUTPUT 新しくシーケンシャルファイルを作り出力を行う。
FOR APPEND 既存のシーケンシャルファイルに新たなデータを追加出力する。
<モード>省略ランダムファイルに対して入出力を行う。

<ファイル番号>は、1から15までの値を用いることができますが、MAXFILES文で指定した数を超えて指定することはできません。また、既にオープンされているファイルが使用している番号を用いることはできません。
シーケンシャル入力モードおよび追加モードでは、指定されたファイルが存在しないと、「File not found」エラーとなります。シーケンシャル出力モードでは、常に指定された名前のファイルを新しく作り、同一名のファイルがあった場合にはそのファイルは削除されます。ランダム入出力モードでファイルが存在しない場合には新たに作られます。<レコード長>は、ランダム入出力モードでファイルをオープンしたときの、レコード長を設定するものです。これは1から256の範囲で、省略した場合は256に設定されます。シーケンシャル入力、あるいはランダム入出力モードを指定する場合には、1つのファイルを複数のOPEN文により開くことができます。この場合、異なるファイル番号により指定することになりますが、シーケンシャル出力モードを指定する場合には、1つのファイルを複数のOPEN文により開くことはできません。

■ファイルの指定
OPENに続く<ファイルスペック>で、そのファイルを操作する場所とファイル名を指定します。ディスクファイル以外では次の7つがあります。

カセットレコーダ“CAS:ファイル名(6文字以内)”と指定する
メモリディスク “MEM:ファイル名”と指定する
ディスプレイのテキスト画面“CRT:”と指定する
ディスプレイのグラフィック画面“GRP:”と指定する
プリンタ“LPT:”と指定する
コンソールデバイス“CON:”と指定する
ヌルデバイス“NUL:”と指定する

コンソールデバイスはキーボードからの読み込み、画面への書き込みに使用します。例えば、

COPY "TEST.DOC" TO "CON"

とすると、TEST.DOCの内容を画面に表示します。
ヌルデバイスは実際には何もしません。出力文字は無視され、入力は常にエンドオブファイル([CTRL]+[Z])となります。
ファイル名が必要なのは、ディスクファイルおよび、CAS:やMEM:だけです。

参 照

CLOSEINPUT#PRINT#MAXFILESINPUT$EOF


OUT

機 能

指定した出力ポートにデータを送ります。

書 式
OUT<ポート番号>,<式>

文 例
OUT &H22,&H80
解 説

&H22のポート番号で指定された出力ポートへ、&H80というデータを送ります。ポート番号に関しては、I/Oマップを参照してください。
OUTは、ハードウェアと非常に密着した命令で、各々のMSXで異なる動作をする場合があります。MSXの互換性を維持するため、広く公表するプログラムには使用しないでください。

参 照

INP


PAD

機 能

タッチパネルの状態を調べます。

書 式
PAD(<数式>)

文 例
X=PAD(1)
解 説

ポート1に接続されたタッチパネルが押されていたら、その点のX座標を変数Xに代入します。
PADに続くカッコ内には、0から19まで値が入ります。PAD命令を実行すると、指定によって、以下の結果が返されます。

数値意味出される値
0、4タブレットのデータが有効かどうかを調べる 有効=-1
無効=0
1、5タブレットが押されている点のX座標を調べる X座標
2、6タブレットが押されている点のY座標を調べる Y座標
3、7タブレット上のスイッチが押されているかどうかを調べる 押されている=-1
押されていない=0
*8 ライトペンのデータが有効かどうかを調べる 有効=-1
無効=0
*9 ライトペンのX座標を調べる X座標
*10 ライトペンのY座標を調べる Y座標
*11 ライトペンのスイッチが押されているかどうかを調べる 押されている=-1
押されていない=0
*12、*16マウスまたはトラックボールのデータを与える 常に-1
*13、*17マウスまたはトラックボールのX座標を調べる X座標
*14、*18マウスまたはトラックボールのY座標を調べる Y座標
*15、*19マウスまたはトラックボールのデータを与える 常に0

注意

0〜3または12〜15はポート1に接続された装置を、4〜7または16〜19はポート2に接続された装置を調べます。ただし、*のついた装置(8〜19)はMSX BASIC ver 2.0以降で有効です。
どの周辺装置も座標を調べる前にはそのデータが有効かどうかを確認しなければなりません。それぞれPAD(0)または(4)、PAD(8)、PAD(12)またはPAD(16)を実行して、その値が-1であったら他のデータを調べて下さい。

参 照

STRIGPDL


PAINT

機 能

グラフィック画面の、指定された境界色でかこまれた部分を指定された色で塗りつぶします。

書 式

PAINT[STEP](X,Y)[,<領域色>][,<境界色>]

文 例
10 SCREEN 3
20 CIRCLE(128,96),50,11
30 PAINT(128,96),6,11
40 GOTO 40
解 説

(128,96)を中心点にして、黄色で書かれた円の中を赤で塗ります。
PAINTの指定は次の形で行います。

PAINT(X,Y)、領域色、境界色

PAINTは(X,Y)で指定した位置を含む境界色で囲まれた領域を、領域色で塗りつぶします。色の指定については、COLORを参照してください。
(X,Y)の指定はSTEPを使って行うこともできます。STEPについては、LINEを参照してください。
境界色はSCREEN 3および5以上でだけ使えます。SCREEN 2や4では、領域色と同じ色で囲まれた領域が、領域色で指定した色で塗られます。例えば、上の例をSCREEN 2で行うと次のようになります。

10 SCREEN 2
20 CIRCLE(128,96),50,11
30 PAINT(128,96),11
40 GOTO 40

領域色の指定を省略すると、COLORで指定している前景色が使われます。境界色の指定を省略すると、領域色で指定したものと同じ色が使われます。PAINTを実行したときに、指定した境界色(SCREEN 2の場合には領域色)で囲まれた領域がないと、画面一面が指定した領域色で塗りつぶされます。

参 照

SCREENCOLOR


PDL

機 能

パドルの状態を調べます。

書 式
PDL(<パドル番号>)

文 例
X=PDL(2)
解 説

例ではポート2に接続されたパドルの状態を調べ、その結果を変数Xに代入します。
PDLに続くカッコ内には、1から12までの値が入ります。数値が奇数(1、3、5、7、9、11)ならば、ポート1に接続されたパドルが指定され、偶数(2、4、6、8、10、12)ならば、ポート2に接続されたパドルが指定されます。
PDL命令を実行すると、パドルの状態がその回転の度合いによって、0〜255の間の値で得られます。

参 照

PADSTRIG


PEEK

機 能

メモリ上に指定された番地の内容を読み出します。

書 式
PEEK(<番地>)

文 例
A=PEEK(&HA000)
解 説

例ではカッコ内で指定された番地(&HA000)のメモリの内容が、数値としてAに代入されます。読み込み番地は、-32768〜65535の範囲の数値で指定します(数値が負の場合は、その値に65536を加えれば実際の番地を知ることができます)。読み込まれるデータは、0〜255の値を持つ数値です。

参 照
POKE、メモリマップ


PLAY

機 能

音楽を演奏します。

書 式
PLAY<文字式1>[,<文字式2>][,<文字式3>]

文 例
10 PLAY "O4L4T180V8"
20 PLAY "GAGAGGE2"
30 PLAY "EFEFEECR"
40 PLAY "E2CDE2CD"
50 PLAY "EFGGDEDR"
60 PLAY "GAGAGGE2"
70 PLAY "EFEFEECR"
80 PLAY "A2GEGGEC"
90 PLAY "EEDDC2"
解 説

指定された記号にしたがって、音楽を演奏します。10行では、演奏のためのテンポ(はやさ)や音量、音階の音域などを指定しています。
文字式は、音楽を演奏するための記号を組み合わせたもので引用符で囲みます。文字変数で指定するときは、その文字変数に演奏用の記号を代入しておきます("X文字変数;")と指定しても、単に文字変数だけを指定しても、結果は変わりません)。記号には音の高さ、音の長さ、速さ(テンポ)、音の大きさ、音色の指定の5種類があります。
PLAYでは、3つのチャンネルを使うことができ、最大3重和音まで出すことができます。文字式1、文字式2、文字式3はそれぞれチャンネル1、2、3に対応しています。文字式に何も指定しなければ、そのチャンネルからは音がでません。
以下で、各記号についての解説を行います。

PLAY "C","E","G"

■音の高さ

A〜G音の高さを音階名で表現する。A〜Gの後ろに#、+をつけると半音上がり、-を付けると半音下がる。
O1〜8音階の音域を1〜8の数値で指定する。初期値はO4。例えば、O5はO4より1オクターブ上の音階を指す。
N0〜96音の高さを0〜96の数値で表現する。N1はO1のC#と同じ高さ、N96はO8のBと同じ。N0はR(休符)と同じ。

図2.13 音の高さ

PLAY "CDE"
PLAY "O3CDEO4CDEO5CDE"
PLAY "N36N38N40"

■音の長さ

L1〜64音の長さを1/数値音にする。L1は全音符(4拍)、L2は2分音符(2拍)、L64は64分音符(1/16拍)。1音だけ長さを変えるときは、音階名のうしろに数値だけをつける。
.(ピリオド)音階名、休符の後ろに付けて音の長さを1.5倍する。
R数値休符を指定する。数値の指定の方法は、Lのときと同じ。数値を省略するとR4とみなされる。

PLAY "L2CEGL4CEGL8CEG"
PLAY "L4CEGCE8G"
PLAY "L4CD.E..F..."
PLAY "CR4DR2E"

■速さ(テンポ)

T32〜255テンポを指定する。数値で1分間に演奏する4分音符の数を指定する。初期値はT120

PLAY "T64CEGT128CEG"

■音の大きさ

V0〜15音量を指定する。数が大きいほど音も大きくなる。

PLAY "V2CV4DV6EV8FV10G"

■音色

S0〜15音量変化の波を指定する。Vとは一緒に指定できない。数値に対応する波形は次の図の通り。

図2.14 エンベロープ形状

10 FOR J=8 TO 14
20 PLAY "S=J;M1000CDE"
30 NEXT

M1〜65535 音量変化の波の周期を指定する。

図2.15 エンベロープ周期

10 FOR J=100 TO 3000 STEP 100
20 PLAY "S8M=J;CDE"
30 NEXT

O、L、T、Vの指定は、次に別の値で指定が行われるまで有効です。またVを指定すると、そのチャンネルのSやMの指定はキャンセルされます。

■数値指定での指定
なお、次の形式で数値変数も指定できます。

<記号>=数値変数;

10 FOR J=1 TO 64
20 PLAY "L=J;CDE"
30 NEXT

表2.11 マクロ一覧

記号 意 味 備 考
音程A〜G ラ〜ソ 音階名 PLAY"CDE"
#、+ シャープ 半音上げるPLAY"CD#"
- フラット 半音下げるPLAY"CD-"
O数値オクターブ音域指定。範囲は1〜8(省略値4)PLAY"O5C"
N数値音程 すうちの範囲は0〜96で半音ずつ上がる。0は休符PLAY"N36"
音長L数値音符長 範囲は1〜64(省略値4)。再指定までの音符長PLAY"L4C"
数値 音符長 音符の後の数値は、その音の長さだけ指定PLAY"C32"
. 符点 A〜G、N、Rの後に付けて長さを1.5倍するPLAY"C4."
R数値休符長 Lと同じ指定だが休符は別に管理されるPLAY"CR8"
速さT数値テンポ 範囲は32〜255(省略値120) PLAY"T64"
音量V数値音量 範囲は0〜15 PLAY"V8C"
音色S数値波形 範囲は0〜15。Vと一緒には指定できない PLAY"S10"
M数値周波数 範囲は1〜65535。Sとともに用いる PLAY"M10"


PLAY

機 能

音楽を演奏中かどうかを調べる関数です。

書 式
PLAY(<ボイスチャンネル番号>)

文 例
10 A$="O4L4T120V4"
20 PLAY A$,A$,A$
30 PLAY "C","E","G"
40 PLAY "C","F","A"
50 PLAY "B","A","G"
60 IF PLAY(0)=0 THEN 30
70 GOTO 60
解 説

PLAY(数値)は、各チャンネルで、指定した音楽を演奏中かどうかを調べます。演奏中であると-1、そうでなければ0が与えられます。
上のプログラムはまず10行で音階の音域、音の長さなどの設定を行って20行でそれを3つのチャンネルで実行させています。30行から50行で音を出し、60行で演奏が終わったかどうかを調べて、終わっていたら30行にジャンプします。70行で60行にジャンプしているのは、PLAYの値が0になるのを待つためです。プログラムでは、50行に続いて60行がすぐ実行されるのですが、演奏は続いているので、1度だけ60行で調べてもPLAYの値は-1で、30行へのジャンプが行われなくなってしまうからです。
PLAYの指定は次の形で行います。

PLAY(チャンネル)
チャンネルは0〜3の値で指定します。

0チャンネル1、2、3(どれかが演奏中であれば-1となる)
1チャンネル1
2チャンネル2
3チャンネル3


POINT

機 能

グラフィック画面上の指定した点の色を調べます。

書 式
POINT(X,Y)

文 例
10 R=RND(-TIME)
20 C=INT(RND(1)*15+1)
30 COLOR ,C,C
40 SCREEN 2
50 A=POINT(128,96)
60 SCREEN 1
70 PRINT A
80 END
解 説

POINTは、指定した座標の色を調べて、カラー番号で返します。ただし、スプライトの色は調べることができません。
上のプログラムは乱数を使って画面の色を変え、50行でその色を調べています。そのあと60行で画面を切り替え、70行でカラー番号を表示しています。

参 照

COLOR


POKE

機 能

メモリ上の指定された番地にデータを書き込みます。

書 式
POKE<番地>,<データ>

文 例
POKE &HA000,57
解 説

書き込み番地は、-32768〜65535の範囲の数値で指定します(数値が負数の場合は、その値に65536を加えれば実際の番地を知ることができます)。書き込むデータは、0〜255の値を持つ数値です。
この命令は、現在のメモリ内容を書きかえてしまうため、不用意に使うとエラーやシステムの暴走の原因になることがあります。使うときには、メモリマップなどで使用できる領域かどうかを確認してください。
上の例では、メモリ上の&HA000番地に57というデータを書き込みます。

参 照
CLEARPEEK、メモリマップ


POS

機 能

テキスト画面上のカーソルの水平位置を調べます。

書 式
POS(<式>)

文 例
10 FOR I=10 TO 99
20 A=POS(0)
30 IF A>12 THEN PRINT
40 PRINT I;
50 NEXT
解 説

POSはカーソルが左から何桁目にあるかを、一番左の位置を0とした値で調べます。引き数は仮のものなので、どんな数値でもかまいません。POSは、テキスト画面でのみ使うことができます。
上のプログラムは、単に10から99までの値を画面に表示するものですが、20行でPOSを使ってカーソルの水平位置を調べ、30行で、その値が12を越えたら改行を行うように指示しています。

参 照
CSRLIN


PRINT

機 能

テキスト画面に文字列や数値を表示します。

書 式
PRINT[<式>・・・]

文 例
10 A$="ABC":A=123
20 PRINT A$,A
30 PRINT A$;A
40 PRINT
50 PRINT 456"DEF";
60 PRINT "IIII"
【表示】
ABC          123
ABC 123

 456 DEFIIII
解 説

PRINTに続けて数値(456)や文字列(DEF、IIII)を指定すると、その数値、文字列が画面に表示されます。また、数値変数(A)や文字変数(A$)が指定されると、それらの変数に代入されている数値(123)や数値(ABC)が画面に表示されます。PRINTだけを指定すると(40行)改行が行われます。
数値を表示する場合、その後ろに必ず空白が1つ入ります。また、数値の前には符号用の桁が用意されて、プラスのときには空白、マイナスのときにはマイナス符号が表示されます。
複数のデータを表示する場合、それらの区切りとして、カンマ(,)、セミコロン(;)、空白が使えます。カンマを使うと(20行)、PRINTの後ろの奇数番目のデータは画面の一番左の列に表示され、偶数番目のデータは15桁目に表示されます。ただし上の例の場合、2番目のデータが数値なので見かけ上は16桁目に表示されます。
区切りにセミコロンあるいは空白を使うと(30行、50行)、PRINTの後ろのデータがつながって画面に表示されます。一番最後のデータの後ろにセミコロンを置くと、次のPRINT文のデータが前のデータにつながって表示されます(50行と60行)。
PRINTの省略形として?(疑問符)を使うことができます。


PRINT #

機 能

シーケンシャルファイルにデータを出力します。

書 式
PRINT #<ファイル番号>,[<式>・・・]

文 例
PRINT #1,A$
解 説

<ファイル番号>は、そのシーケンシャルファイルが出力モードとしてオープンされたときに指定された番号です。
<式>は、ファイルに書き込まれる数値式または文字式です。
PRINT#文は画面に出力するのと同じものをファイルに出力します。そのため、データを読むときに正しく入力できるように、書き込むデータを適切に区切る必要があります。シーケンシャルファイルに対するデータの出力にも、PRINT# USING文が用意してあります。カンマ(,)は省略できません。

参 照
OPENCLOSEINPUT #LINE INPUT #INPUT$PRINT# USINGPRINTLPRINT


PRINT USING

機 能

文字列や数値を指定した書式でテキスト画面に表示します。

書 式
PRINT USING<書式>;<式>・・・

文 例
10 A$="ABCDE":B$="ZYXWV"
20 A=123.45:B=-98.765
30 'モジレツ
40 PRINT USING "!";A$,B$
50 PRINT USING "& &";A$
60 PRINT USING "@ MNL @";A$,B$
70 'スウチ
80 PRINT USING "+####.####";A,B
90 PRINT USING "####.###-";B
100 PRINT USING "**##.###";B
110 PRINT USING "\\##.###";B
120 PRINT USING "**##.###";A
130 PRINT USING "####.###";A
140 PRINT USING "####.###^^^^";A
150 PRINT USING "##";A
160 PRINT USING "ゴウケイ###.###";B
【表示】
AZ
ABC
ABCDE MNL ZYXWV
 +123.4500  -98.7650
  98.765-
*-98.765
-\98.765
*123.450
  123.450
 123.450E+00
%123
ゴウケイ -98.765
解 説

PRINT USINGの後ろに指定した、書式文字列でセミコロン(;)以下の文字列や数値を編集して表示します。
複数のデータを表示するときには、カンマ(,)かセミコロンで区切ります。カンマで区切ってもセミコロンで区切っても同じです。
書式には、文字列を編集するものと数値を編集するものとがあります。以下に書式として使う記号を説明します。

■文字列を編集するもの
! 文字列の左側1字を表示する。
&空白&文字列の左側から、指定した空白の数+2文字を表示する。
@ @を指定した文字列で置き換える。
■数値を編集するもの
# 数値を#で指定した桁数だけ表示する。
. 小数点の位置を指定する。
+- 数値に正負符号を付ける。書式の左端に付けると、数値の前に、右端に付けると数値の後ろに正負符号を付ける。
** 書式の左端を**にしておくと、数値の整数部の桁数が書式の指定より小さいときに、小さい分だけ*が表示される。
\\ 書式の左端を\\にしておくと、数値の直前に\が付けられる。\\は指数形式の書式指定をしているときには使えない。
**\ 書式の左端を**\にしておくと、数値の直前に\が付けられ、整数部の桁数が書式の指定より小さいときに、小さい分だけ*が表示される。**\は指数形式の書式指定をしているときには使えない。
,,を整数部の#と#の間、あるいは小数点の左側に置いたときには、整数部が3桁毎にカンマで区切られて表示される。小数点より右に置いた時には、数値の右にカンマが付けられる。カンマ(,)は指数形式の書式指定をしているときには使えない。
^^^^ ^^^^を#の後ろに付けると、数値が指数形式で表示される。書式に+または-を指定していない場合、数値が正なら数値の前に空白が1つ、負なら数値の前に-が表示される。
% 表示しようとする編集済みの数値が書式で指定した桁数より大きいと、数値の前に%が付けられる。

書式の中にこれらの記号以外の文字を置くと文字の位置に応じて数値の前や後ろにその文字が表示されます(160行参照)。


PRINT# USING

機 能

指定されたファイルに指定した書式でデータを書き出します。

書 式
PRINT#<ファイル番号>,USING<書式>;<式>・・・

文 例
10 OPEN"CRT:"FOR OUTPUT AS #1
20 A=123:B=-45
30 A$="SUPER"
40 PRINT #1,USING"####.##-";A;B
50 PRINT #1,USING"@ MSX";A$
60 CLOSE
解 説

PRINT# USINGを実行すると、書式文字列にしたがって、指定された文字列や数値が編集され、その結果がファイルに書き出されます。PRINT# USINGは、データを指定された書式にしたがって出力することを除けば、その機能はPRINT#と同じです。また、書式を使った編集方法は、PRINT USINGと同じですので、そちらを参照してください。

参 照
PRINT#PRINT USING


PSET、PRESET

機 能

グラフィック画面上に点を描いたり(PSET)、描いてある点を消したり(PRESET)します。

書 式
PSET[STEP](X,Y)[,<カラーコード>][,<論理演算子>]
PRESET[STEP](X,Y)[,<カラーコード>][,<論理演算子>]

文 例
10 SCREEN 3
20 X=INT(RND(1)*255)
30 Y=INT(RND(1)*192)
40 C=INT(RND(1)*15+1)
50 PSET(X,Y),C
60 FOR I=0 TO 100:NEXT
70 PRESET(X,Y)
80 GOTO 20
解 説

PSETは、(X,Y)で指定した位置にCで指定された色の点を描きます(色の指定を省略すると、COLOR命令で指定した前景色が使われます)。
PRESETで色の指定を省略すると、指定した位置に描かれている点を消します(このとき背景色以外の色を指定すると、その色で点が描かれてしまいますので注意してください)。これらの指定にはSTEPを使うこともできます。STEPについてはLINEを参照してください。また、色コードの後には<論理演算子>を指定できる場合があります。これについてもLINEを参照してください。

参 照
COLORLINE


PUT 【Disk】

機 能

ランダム入出力バッファ中のデータをランダムファイルへ出力します。

書 式
PUT[#]<ファイル番号>[,<レコード番号>]

文 例
PUT#1,1
解 説

<ファイル番号>で指定されたファイルに対するバッファの内容を書き出します。指定されたファイルは、ランダムアクセスのモードでオープンされていなければなりません。
<レコード番号>は、1から4,294,967,295までが有効で、バッファ中のデータが指定されたレコードに書き込まれます。<レコード番号>が省略された場合には、直前のGET文、PUT文で参照されたレコードの次のレコードに書き込まれます。
なお、書き出すデータはあらかじめFIELD文、LSET文、RSET文により準備しておかねばなりません。
バッファの最後を越えてリードまたはライトしようとすると「Field overflow」エラーとなります。


PUT KANJI 【2】

機 能

グラフィック画面に漢字を表示します。

書 式
PUT KANJI[(X,Y)],<漢字コード>[,<カラーコード>[,<論理演算子>[,<モード>]]]

文 例
10 SCREEN 5:X=0:Y=0:I=&H2121
20 PUT KANJI(X,Y),I
30 X=X+16:IF X=256 THEN X=0 ELSE 50
40 Y=Y+16:IF Y=208 THEN A$=INPUT$(1):CLS:Y=0
50 I=I+1
60 IF (I AND 255 OR 128)=128 THEN I=I+160
70 IF I=&H2820 THEN I=&H3020
80 IF I<&H4F53 THEN 20
90 END
解 説

<漢字コード>はJIS漢字コードで、MSX2では&H2121から&H4F53、MSX2+では&H2121から&H737Cの値を取ります。<論理演算子>についてはLINEを参照してください。<モード>は0〜2で次のような意味を持ちます。

016×16ノーマル(省略値)
1偶数ラインだけを縦8ドットで表示
2奇数ラインだけを縦8ドットで表示
モード1とモード2はインタレースモードで使います。漢字ROMがシステムにない場合は何も表示しません。PUT KANJIはSCREEN 5以降でのみ有効です。
この例では、漢字ROMに入っている文字を順に画面に表示します。途中、余分な空白部分は飛ばしています。
参 照
LINESCREEN


PUT SPRITE

機 能

スプライトパターンを画面に表示します。

書 式
PUT SPRITE<スプライト面番号>[,[STEP](X,Y)][,<カラーコード>][,<スプライトパターン番号>]

文 例
10 SCREEN 1,2
20 SPRITE$(0)=STRING$(32,CHR$(&B11111111))
30 PUT SPRITE0,(100,100),1,0
40 END
解 説

このプログラムはSPRITE$命令によってスプライトパターン番号0に定義されている四角い模様を、スプライト面0番を使って、画面の(100,100)の位置に、黒で表示します。なお、プログラムが終わってもスプライトは画面から消えません。スプライトを消すには、Y座標に209か208(SCREEN 4以降では217か216)を指定してPUT SPRITEを実行するか、SCREEN命令の第2パラメータで再度スプライトの大きさを指定します。スプライト面番号は0〜31の値で指定します。1つのスプライト面には、1つのパターンだけしか表示できません。すでにパターンが表示してある面を指定すると、先に表示されていたパターンは消されます。
スプライト面の0〜31は同時に表示できますが、横方向に5つ以上(SCREEN 4以降では9つ以上)のパターンが並ぶと、5つ以降(SCREEN 4以降では9つめ以降)のパターンは画面から消えます。
(X,Y)で、パターンを表示する位置を指定します。Xは-32〜255の値を、Yは-32〜191の値(SCREEN 4以降では〜211)を指定します。STEPをつけて位置を指定することもできますが、これについてはLINEを参照してください。(X,Y)を省略すると、そのスプライト面で使われている値が使われます。この(X,Y)はスプライトパターン左上隅の位置を指しています。
パターンが同じ位置に重なると、スプライト面番号の小さい方のパターンが手前に重なって表示されます。
Yに208(SCREEN 4以降では216)を指定すると、そのスプライト面以降のパターンが画面から消されます。Yに209(SCREEN 4では217)を指定すると、指定したスプライト面に表示されていたパターンが消されます。
色は、表示するパターンの色で0〜15の値で指定します。省略するとCOLOR文で指定している前景色となります。カラー番号と色との対応については、COLORを参照してください。またSCREEN 4以降の各スプライト面では、1ライン毎に色を付けることができます。これについては、COLOR SPRITEを参照してください。
スプライト番号は、SPRITE$で指定した番号です。

参 照
COLORCOLOR SPRITESPRITE$SCREEN


READ

機 能

DATAで用意した数値や文字のデータを読み込み、変数に代入します。

書 式
READ<変数>[,<変数>・・・]

文 例
10 READ A$,A,B$,B
20 PRINT B$,B,A$,A
30 DATA アカクラ,3.5
40 DATA ザオウ,2.3
解 説

30行、40行のデータをREADで読み込み、「アカクラ」をA$、3.5をA、「ザオウ」をB$、2.3をBにそれぞれ代入しています。
READは、行番号の小さいDATAのデータから順に読み込み、指定した変数に代入していきます。DATAは、READで読み出される数値や、文字を用意します。これらの数値や文字のことをデータといいます。データは、1行では255文字以内で、カンマ(,)で区切って指定します。データを複数行指定することもできますが、その場合もそれらのデータは連続したものと見なされます。データは、整数、単精度実数、倍精度実数、文字定数のどれでもかまいませんが、READ文で指定する変数の型とそれぞれ対応していなくてはなりません。データとして、文字列の先頭や最後に空白、ピリオド(.)、カンマ(,)があるときには、その文字列を引用符(")で囲みます。

参 照
DATARESTORE


REM

機 能

プログラム中に注釈を入れます。

書 式
REM[<注釈文>]

文 例
REM MSX
解 説

REMに続く文字列は、プログラム中の注釈になるだけで、プログラムの実行には全く関係しません。プログラムを見やすくする覚え書きとして使用して下さい。REMの代わりにアポストロフィ(')を用いることもできます。例えば、上の例を、

'MSX

としても、かまいません。


RENUM

機 能

プログラムの行番号を付け直します。

書 式
RENUM[<新行番号>][,<旧行番号>][,<増分>]

文 例
RENUM 200,100,20
解 説

旧行番号が100のところから行番号の付けかえが行われます。新しい行番号の最初の番号は200で、以後20ずつ増えた行番号が付けられます。新行番号の最初の番号(この場合、200)、新行番号の増加分(この場合、20)とも、省略すると10が採用されます。行番号の付けかえを始めるところ(この場合、100)を指定しないと、そのプログラムの先頭から新しい番号に変わります。
例えば、

RENUM

プログラム全体の行番号を付けかえます。新しい行番号は10から始まり、20、30・・・と付けられます。

RENUM 100,50

行番号50に新しい行番号として100が付けられ、以降110、120・・・と付け直されます。

RENUM 100,,100

プログラム全体の行番号を付けかえます。新しい行番号は100から始まり、200、300・・・と付けられます。

RENUMは、GOTO、GOSUB、THEN、ELSE、ON〜GOTO、ON〜GOSUB、ERLなどで使われている行番号も、新しい行番号に合わせて変更します。


RESTORE

機 能

READで読むDATAを指定します。

書 式
RESTORE[<行番号>]

文 例
10 RESTORE 50
20 READ A$,A
30 PRINT A$,A
40 DATA アカクラ,3.5
50 DATA ザオウ,2.3
解 説

RESTOREで行番号(50)を指定し、READでどのDATAから読み始めるかを決めます。これにより、A$には「ザオウ」、Aには2.3が代入されます。
行番号が省略されると、READはプログラムの最初のDATAから読み始めます。

参 照
READDATA


RESUME

機 能

エラー処理を終了し、元のプログラムの実行を再開します。

書 式
RESUME[0]またはNEXTまたは<行番号>

文 例
RESUME 100
解 説

ON ERROR GOTOでジャンプしたエラー処理の操作を終了し、元のプログラムの100行から再び実行を再開します。RESUME 0と指定すると、エラーが発生した行からプログラムが再開されます。この場合、0は省略できます。RESUME NEXTと指定すると、エラーが発生した次の行からプログラムが再開されます。

参 照
ON ERROR GOTO


RETURN

機 能

サブルーチンから戻ります。

書 式
RETURN[<行番号>]

文 例
10 GOSUB 40
20 GOSUB 60
30 END
40 PRINT"40ギョウ"
50 RETURN
60 PRINT"60ギョウ"
70 RETURN 30
解 説

サブルーチンを終了し、そのサブルーチンを呼び出した次の行に戻ります。また、上の70行のように、RETURNの後ろに行番号を指定して、復帰する行を指定できます。上のプログラムが実行される順番は、10、40、50、20、60、70、30行となります。
なお、サブルーチンの中でCLEAR命令やMAXFILES命令等を使うと、RETURNによる復帰ができなくなりますので注意してください。

参 照
GOSUBON GOSUB


RIGHT$

機 能

文字列の右側から指定された数の文字列を取り出します。

書 式
RIGHT$(<文字列>,<数式>)

文 例
10 A$="SUPER HOME COMPUTER"
20 PRINT RIGHT(A$,8)
30 END
【表示】COMPUTER
解 説

カッコ内の文字列(A$)の右側から、数値(8)で指定された数の文字列を取り出します。指定した数が文字列の総文字数より大きいときは、文字列がそのまま取り出されます。

参 照
LEFT$MID$


RND

機 能

<数式>によって指定された0以上1未満の乱数を発生します。

書 式
RND(<数式>)

文 例
PRINT RND(1)
【表示】.748299301545582
解 説

<数式>が正のときは、同じ乱数の並びの新しい乱数を返します。
<数式>が0のときは、同じ乱数の並びの前回使った値を返します。
<数式>が負のときは、その値に対応した固有の乱数の並びを作ります。
RNDの乱数の並びは、プログラムが実行されるたびに同じものが使われますが、RND(-TIME)を1度先頭に用いれば、毎回別の乱数の並びを作ることができます。


RUN

機 能

メモリにあるプログラムの実行を開始します。あるいはフロッピーディスクからファイルをメモリにロードし、そのプログラムを実行します。

書 式
RUN[<行番号>]またはRUN"<ファイルスペック>"[,R]

文 例
RUN"NEWFILE"
解 説

<行番号>を指定すると、その行から実行が始まります。指定のない場合には、最も若い行番号から実行が始まります。
<ファイルスペック>が指定されると、指定されたプログラムがロード後、実行を開始します。<ファイルスペック>中でデバイス名を省略すると、カレントドライブからロードされます。RUNコマンドを実行すると、すべての開いているファイルは閉じ、目的のプログラムをロードする前にメモリの内容がクリアされます。Rオプションを付けた場合には、すべてのデータファイルは開いたままになります。


SAVE

機 能

メモリのBASICプログラムを保存(セーブ)します。

書 式
SAVE<ファイルスペック>[,A]

文 例
SAVE"A:COM2",A
解 説

<ファイルスペック>で指定されるファイルにプログラムを書き込みます。デバイス名を省略すると、現在使用しているディスクドライブ(カレントドライブ)に出力されます。フロッピーディスクに保存する場合は、ファイル名は8文字以下で、拡張子は3文字以内で指定します。もし指定したファイル名がすでにディスク上に存在する場合は、古いファイルは消去され、新しいものに変更されます。
Aオプションが指定された場合には、プログラムはアスキー形式で保存され、オプションの指定がない場合には、内部表現形式(バイナリ形式)に圧縮されてプログラムの保存が行われます。アスキー形式の保存は、内部表現形式よりも、多くのディスクスペースを必要としますが、保存されたプログラムのファイルにロード以外の操作を加える場合には、アスキー形式でなければ実行できません。また、アスキー形式で保存されたファイルは、データファイルとして読み出すこともできます。
カセットファイルに対しての保存では、内部表現(バイナリ)形式ではCSAVE、アスキー形式ではSAVEと使い分けますが、ディスクに対してはSAVE" "で内部表現形式、SAVE" ",Aでアスキー形式というように、オプションによって使い分けます。

参 照
LOADCSAVEMERGE


SCREEN

機 能

画面やスプライトの大きさなどについての設定を行います。

書 式
SCREEN[<画面モード>][,<スプライトサイズ>][,<キークリックスイッチ>][,<カセットボーレート>][,<プリンタオプション>][,<インタレースモード>]

文 例
SCREEN 1,2
解 説

使用する画面を32×24文字のテキストモードに設定し、スプライト模様の大きさを16×16に設定します。最初の値(1)が画面モードを、カンマに続く次の値(2)がスプライトの大きさを設定しています。
設定を行うには、以下の項目で説明している値をSCREENに続けて指定します。

■画面モード
12の画面モードのうちのどれを使うかを指定します。画面の指定をしてSCREENを実行すると、今まで表示されていた画面が消えて、新しい設定となります。ただし、SCREEN 10以上のモードでは互いに切り替えても画面の初期化はしません。SCREEN 9は日本語バージョンでは使えません。BASICをスタートしたときには、32×24文字の画面が自動的に選ばれています。

モード意味
0 40×24(または80×26)文字のテキストモード
1 32×24文字のテキストモード
2 256×192点の高解像度グラフィックモード
3 64×48ブロックの低解像度グラフィックモード
4 256×192点の高解像度グラフィックモード
5 256×212点のビットマップグラフィックモード
6 512×212点のビットマップグラフィックモード
7 512×212点のビットマップグラフィックモード
8 256×212点のビットマップグラフィックモード
9 日本語バージョンにはない
10 256×212点のRGB、YJK混在モード、グラフィックルーチン処理あり
11 256×212点のRGB、YJK混在モード、グラフィックルーチン処理なし
12 256×212点のYJKモード

0、1のテキストモードではプログラムのリストを表示させたりできますが、線や絵を描くことはできません。2以降ではこれとは逆になります。0のテキストモードでは、スプライトを表示することはできません。また、2以降の画面を指定しても、プログラムが終了するとすぐにテキストモードに戻ってしまします。2以降の画面を表示し続けたいときには、例えば、次のように指定します。

10 SCREEN 2
20 GOTO 20

このプログラムを実行すると、2の画面が表示され続けます。
それぞれのモードで使える色は、次のようになります。

0 16パレット中の2色
1 16パレット中の3色
2〜5,716パレット
6 4パレット
8 256色固定
10,110〜15のパレットおよびYJK
12 YJK
1つのパレットには、512色の中から1色を選んで割り当てることができます。パレットの割り当てについては、COLOR=を参照してください。
MSX2+ではスクリーン10、11、12が追加されています。10、11はRGB、YJK混在モードですが、10の場合はLINE文等のグラフィック命令を実行する場合に、RGB上の命令として処理し、アトリビュートビットのON/OFF等が考慮されます。11、12ではそのような処理は一切ありません。YJK方式についてはVDPの表示モードに関する記述を参照してください。
またスプライトはSCREEN 4以降では1ライン毎に色を付けることができ、水平線上に8つまで並べて表示することができます(COLOR SPRITE参照)。

■スプライトの大きさ
スプライトを画面に表示するときの大きさを設定します。また、SPRITE$でスプライトを作るときには、ここでの設定と同じ大きさにします(SPRITE$参照)。BASICをスタートさせた時点では、自動的に0が設定されています。

08×8の点でスプライトを作る
18×8の点のスプライトを縦横2倍にして表示する
216×16の点でスプライトを作る
316×16の点のスプライトを縦横2倍にして表示する

画面モードを変えずに、スプライトの大きさだけを設定するには、例えば、次のように指定します。このときスプライトの座標データ等は初期化されます。

SCREEN ,2

SCREENでは、他に3番目、4番目、5番目、6番目の値を設定することによって、以下のような設定を行うことができます。

表2.12 SCREEN文の3〜6番目のパラメータ

意味指定する値備考
3番目キーを押したときに音を出すか出さないかを設定する0=音を出さないBASICスタート時には1に設定されている
1=音を出す
4番目プログラムをカセットにセーブするときのボーレート設定1=1200bpsBASICスタート時には1に設定されている
2=2400bps
5番目つながっているプリンタがMSX標準のものかどうかの設定0=MSX標準0以外を指定すると、グラフィック文字は空白、ひらがなはカタカナに置き換えて印字される。
0以外=MSX標準以外
6番目インタレースモードの設定0=通常 MSX2以降のみ可能。モード1は同じページの内容をインタレース表示。モード2は2つのページの内容を同一ライン上に交互に表示。モード3は2つのページの内容をインタレース表示。モード2と3はディスプレイページが奇数でなくてはならない。
1=インタレース
2=Even/Odd交互
3=Even/Oddインタレース

参 照

COLORCOLOR SPRITECSAVESPRITE$


SET ADJUST 【2】

機 能

画面の表示位置を上下左右に調整します。

書 式
SET ADJUST(<X座標>,<Y座標>)

文 例
SET ADJUST(4,4)
解 説

調整した値はバッテリーバックアップされたSRAMに記憶されます。X、Yはそれぞれ-8〜+7の値です。


SET BEEP 【2】

機 能

BEEP音を設定します。

書 式
SET BEEP<音色>,<大きさ>

文 例
SET BEEP 2,2
解 説

設定した値はバッテリーバックアップされたSRAMに記憶されます。<音色>、<大きさ>はそれぞれ0〜3の値です。


SET DATE 【2】

機 能

<日付>を現在の日付として設定します。

書 式
SET DATE <日付>[,A]

文 例
SET DATE "90/01/01"
解 説

設定した値はバッテリーバックアップされたSRAMに記憶されます。オプションのAを付けると、この日付にアラームが設定されます。<日付>は、「85/04/03」のように年月日をスラッシュで区切ります。月日が1桁の場合は04のように2桁とします。
アラームの設定日時になったときに、何が起こるかは各機種によって異なります。


SET PAGE

機 能

VRAM上でページングを行います。

書 式
SET PAGE <ディスプレイページ>,<アクティブページ>

文 例
SET PAGE 0,1
解 説

<ディスプレイページ>とは実際にモニタに表示されるページで、<アクティブページ>はデータが書き込まれるページです。ページを切り替えてもその内容は初期化されません。ページはSCREEN 5と6では0〜3、SCREEN 7以上では0〜1が使用できます。

参 照

SET PASSWORD 【2】

機 能

パスワードを設定します。

書 式
SET PASSWORD<パスワード>

文 例
SET PASSWORD "sesame"
解 説

電源ONのとき<パスワード>を入力しなければそのシステムが使えないようにします。<パスワード>は6文字以内です。なお設定したパスワードを忘れてしまったときなどは、[GRAPH]キーと[STOP]キーを押しながらリセットします。この設定はSRAMに記憶されますが、SET PROMPTやSET TITLEで設定するのと同じ場所を使っているのでこれらの設定とは共存できません。最後に設定したものだけが有効となります。設定したパスワードを無効にするときは、

SET TITLE""

を実行します。詳しくはSET TITLEを参照して下さい。


SET PROMPT 【2】

機 能

プロンプトを設定します。

書 式
SET PROMPT<プロンプト>

文 例
SET PROMPT"Ready"
解 説

BASICのプロンプト「Ok」を好きなように変更します。<プロンプト>は6文字以内です。この設定はSRAMに記憶されますが、SET PASSWORDやSET TITLEで設定するのと同じ場所を使っているのでこれらの設定とは共存できません。最後に設定したものだけが有効となります。プロンプトの設定が無効になった場合は、プロンプトは「Ok」となります。


SET SCREEN 【2】

機 能

現在のWIDTH、SCREENの各パラメータを初期値として登録します。

書 式
SET SCREEN

文 例
SET SCREEN

SET SCROLL 【2+】

機 能

ハードウェアスクロールを行います。

書 式
SET SCROLL [<X座標>][,<Y座標>][,<左端マスク>][,<2ページ連続>]

文 例
SET SCROLL 100,100,1,1
解 説

MSX2+専用命令で、V9958のハードスクロールをサポートします。<X座標>は0〜511、<Y座標>は0〜255です。<左端マスク>が1なら画面の左端8ドット分は表示せず、0なら表示します。<2ページ連続>が1なら連続する2ページ(例えば、0、1)を横につながった1ページとして処理し、0なら単独ページ内のスクロールだけとします。2ページ連続の表示を行うときは表示ページが奇数ページでなくてはなりません。ハードスクロールはSCREEN 1以降、2ページ連続の表示はSCREEN 5以降でのみ可能です。


SET TIME 【2】

機 能

<時刻>を現在の時刻として設定します。

書 式
SET TIME <時刻>[,A]

文 例
SET TIME"14:50:30"
解 説

設定した値はバッテリーバックアップされたSRAMに記憶されます。オプションのAを付けると、この時刻にアラームが設定されます。<時刻>は、「11:20:03」の用に時分秒をコロンで区切ります。時刻が1桁の場合は03の用に2桁にします。
アラームの設定日時になったときに、何が起こるかは各機種によって異なります。


SET TITLE 【2】

機 能

初期画面のタイトルと色を設定します。

書 式
SET TITLE<タイトル>[,<色番号>]
文 例
SET TITLE"MSX2+!"
解 説
<タイトル>は6文字以内で、ちょうど6文字のときには何かキーを押すまでタイトルのままになります。<色番号>は1〜4です。
番号
1
2
3
4オレンジ
この設定はSRAMに記憶されますが、SET PASSWORDやSET PROMPTで設定するのと同じ場所を使っているのでこれらの設定とは共存できません。最後に設定したものだけが有効となります。
PASSWORD、PROMPT、TITLEの機能を使わないときは、

SET TITLE""

を実行して下さい。


SET VIDEO 【2】

機 能

スーパーインポーズのモードを設定します。

書 式
SET VIDEO<モード>[,<YM>[,<CB>]]

文 例
SET VIDEO 2
解 説

<モード>は

0内部同期、コンピュータ画面
1外部同期、コンピュータ画面
2外部同期、スーパーインポーズ
3外部同期、外部ビデオ画面
となっています。
<YM>はモニタの画面密度で、0がノーマル、1がハーフトーンです。<CB>はVDPのカラーバスのモードで、0が出力、1が入力モードとなります。
この命令は、スーパーインポーズ機能が無い機種では無意味です。

参 照

SGN

機 能

<数式>の符号を調べ、正の数なら1、0なら0、負の数なら-1を返します。

書 式
SGN(<数式>)

文 例
PRINT SGN(20)
【表示】1

SIN

機 能

<数式>の正弦(サイン)を計算します。

書 式
SIN(<数式>)

文 例
PRINT SIN(3.1415927/2)
【表示】1

SOUND

機 能

PSGに直接指定して音を出します。

書 式
SOUND<レジスタ番号>,<データ>

文 例
10 'チャンネルA
20 SOUND 0,254
30 SOUND 1,0
40 SOUND 8,8
50 'チャンネルB
60 SOUND 2,250
70 SOUND 3,0
80 SOUND 9,16
90 'チャンネルC
100 SOUND 6,4
110 SOUND 10,4
120 'キョウツウ
130 SOUND 7,&B011100
140 SOUND 11,172
150 SOUND 12,13
160 SOUND 13,12
解 説

このプログラムは、チャンネルA、Bから音を出し、チャンネルCからはノイズを出すものです。チャンネルAとCの音量は一定ですが、チャンネルBでは波形によって音量が変わるように指定しています。音を止めるには、[CTRL]キーを押しながら[STOP]キーを押すか、次のように打ち込んでそれぞれリターンキーを押します。

SOUND 8,0      チャンネルAの音が止まる。
SOUND 9,0      チャンネルBの音が止まる。
SOUND 10,0     チャンネルCの音が止まる。

SOUNDでは、A、B、Cの三つのチャンネルごとに細かな指定をして、各自あるいは同時に音を出すことができます。指定は次の形で行います。

SOUND レジスタ番号,データ
レジスタ(SOUND用の特別のメモリ)は0〜13まであり、番号に応じてそれぞれの機能を持っているので、SOUNDでは行わせたい機能に応じてレジスタを選択します。
データは、それぞれのレジスタの情報となるものです。データはレジスタごとに1つずつ指定します。
3つのチャンネルで使うレジスタを機能別に示します。

表2.13 SOUND命令のレジスタ番号

チャンネル周波数ノイズ周波数チャンネル設定音量波形周期波形形状
A0678 1113
112
B2679 1113
312
B467101113
512
SOUNDで音を出すときに必ず指定しなくてはならないのは、チャンネル設定、音量、それに周波数またはノイズ周波数です。
次に各レジスタの機能をまとめてみます。
表2.13 SOUND命令のレジスタ番号
レジスタ機能
0、1 チャンネルAの周波数を2つのレジスタを使って指定する
2、3 チャンネルBの周波数を2つのレジスタを使って指定する
4、5 チャンネルCの周波数を2つのレジスタを使って指定する
6 ノイズの周波数を指定する
7 どのチャンネルから音あるいはノイズを出すかを指定する
8、9、10音量の指定と、波形を使うかどうかの指定を行う
11、12 波形の周期を2つのレジスタを使って指定する
13 波形の形状を指定する

■周波数の設定
各チャンネルの周波数 に対応するレジスタの値 ( ) は、次のようにして求められます。

周波数
例えば、440Hzの周波数を出したときは、先の式のに440をあてはめます。
約254
このの値を256で割った答えがレジスタ1、3、5の値、余りがレジスタ0、2、4の値になります。

254/256・・・答 (この場合、0) レジスタ1、3、5への値
・・・余り(この場合、254)レジスタ0、2、4への値

余りを求めるにはBASICのMODを使って次のように指定すると簡単です。

PRINT 254 MOD 256

また、の値が32767を越える場合には、次のように指定します。(例えば、32768)。

PRINT 32768-INT(32768/256)*256

チャンネルAにこれらの周波数を指定するときは、次のようにします。

SOUND 0,254
SOUND 1,0

データが0のときにも、前に指定した値が残っていることがあるので、必ず指定を行うようにします。

■ノイズ周波数の設定

ノイズ周波数に対応するレジスタの値(は、次のようにして求めます。

ノイズ周波数(Hz)
レジスタ6に指定する値
30KHzのノイズを出力するには、上の式のに30をあてはめて、
約4
レジスタ6へ入れる値は、4となります。SOUNDで指定するには次のように行います。

SOUND 6,4

レジスタ6は、三つのチャンネルで共通です。

■チャンネルの設定
どのチャンネルから音あるいはノイズを出すのかを指定します。指定はチャンネルに対応するビットを0にします。


図2.16 SOUND文のチャンネル設定

例えば、チャンネルAから音とノイズを出し、チャンネルBから音を出すという指定をするときの値は&B110100となります。
SOUNDで指定すると、次のようになります。

SOUND 7,&B110100

レジスタ7のチャンネル指定の場合、このように2進数で指定した方がわかりやすく簡単です。

■音量設定
音量の設定では、音の大きさと音量を波形に応じて変化させるかどうかの指定を行います。
音量は、0〜15の値で指定します。15のとき最大音量となり、0のときには、音がでません。
音量を波形で変化させるときには16を指定します。
チャンネルBで波形変化を行うには、次のように行います。

SOUND 9,16

■波形周期の設定


図2.17 波形周期の設定

波形の周期は次のようにして求めます。

音が増加・減少する周期(秒)
周期

例えば、音の波が減少して0になるまでの時間を2秒にするとします。そのときに指定する値は次のようになります。

約14000

この値を256で割ったときの答えがレジスタ12への値、余りがレジスタ11への値です。

14000/256・・・答 (この場合、54) レジスタ12への値
・・・余り(この場合、176) レジスタ11への値

余りを求めるにはBASICのMODを使って次のように指定すると簡単です。

PRINT 14000 MOD 256

また、の値が32767を越える場合には、次のように指定します。(例えば、32768)。

PRINT 32768-INT(32768/256)*256

この値をSOUNDで指定するには、次のように行います。

SOUND 11,1764
SOUND 12,54

波形の周波数は三つのチャンネルで共通のレジスタに指定します。

■波形の形状の設定

波形の形には次の図のようなものがあります。


図2.18 波形形状の設定

この中から選んで値を指定します。値12の波形を指定するには、次のように行います。

SOUND 13,12

波形の形は三つのチャンネルで共通のレジスタに指定します。


SPACE$

機 能

指定した数の空白からなる文字列を作ります。

書 式
SPACE$(<数式>)

文 例
10 A$="MSX"
20 B$=SPACE$(5)
30 PRINT A$+B$+A$:END
【表示】MSX     MSX

SPC

機 能

指定した数だけ空白を表示します。

書 式
SPC(<数式>)

文 例
PRINT SPC(10);"TEST"
解 説

TABの場合は画面の左端から数えて空白を表示しますが、SPCは指定された位置から空白を表示します。SPCで指定できる値は、0から255です。

参 照
SPACE$TAB


SPRITE$

機 能

スプライトで表示するパターンを定義します。

書 式
SPRITE$(<スプライトパターン番号>)

文 例1
10 SCREEN 1,0
20 FOR I=1 TO 8
30 READ A$:B$=B$+CHR$(VAL("&B"+A$))
40 NEXT I
50 SPRITE$(0)=B$
60 PUT SPRITE0,(128,96),3,0
100 DATA 00010000
110 DATA 00111000
120 DATA 01111100
130 DATA 11111110
140 DATA 11111110
150 DATA 00010000
160 DATA 00010000
170 DATA 00010000
解 説

SPRITE$の指定は次の形で行います。

SPRITE$(スプライト番号)=文字列データ

スプライト番号は、SCREENでスプライトサイズを0か1に指定しているときには0〜255、スプライトサイズを2か3に指定しているときには0〜63の値を付けます。
スプライトのパターンは、SCREENのスプライトサイズの指定を0か1にしているときは8×8の点、2か3にしているときには16×16の点で作ります。例えば、上の例では、10行でSCREEN 1,0と指定しているので、スプライトは、8×8の大きさになります。
スプライトのパターンを定義するときには、上の例のように0と1とで表したDATAを使うとわかりやすいものになります。1のところが画面に表示される部分で、0のところは表示されません。パターンの定義は、1バイトずつ行われます。
100行から170行は、1行が1バイト分になっているので、上から順番に文字変数に代入していき、8つとも代入されると、その文字変数の値はスプライトのパターンを表すものとなります。
上の例では30行でデータ文から、A$に値を読み込み、さらにA$の値が表すキャラクターコードの文字をB$に入れています。この行でA$を、"&B"+A$として2進数として扱うのは、100行から170行で指定しているデータが2進数に相当するものだからです。20行の指定でB$には100行から170行の8列のデータが入れられます。このB$の値がスプライトのパターンを表すものです。50行で、スプライト番号0番としてB$の値を定義しています。60行のスプライトの表示の方法については、PUT SPRITEを見てください。
上の例の10行をSCREEN 1,1の用に変えると、表示されるスプライトが倍の大きさになります。

文 例2
10 SCREEN 1,3
20 FOR I=1 TO 16
30 READ D$
40 A$=A$+CHR$(VAL("&B"+LEFT$(D$,8)))
50 B$=B$+CHR$(VAL("&B"+RIGHT$(D$,8)))
60 NEXT I
70 SPRITE$(0)=A$+B$
80 PUT SPRITE0,(128,96),8
100 DATA 0000000000011110
110 DATA 0000100000101001
120 DATA 0001011110101101
130 DATA 0001111111111001
140 DATA 0011111011111111
150 DATA 0001111111111000
160 DATA 0000001111111000
170 DATA 0000011111110000
180 DATA 0000001111100010
190 DATA 0000000111100100
200 DATA 1100001111100100
210 DATA 0011111111110010
220 DATA 0000001111110010
230 DATA 0000001111110010
240 DATA 0000000111111100
250 DATA 0000011111110000

このように、SCREENのスプライトサイズの指定が2か3とすると、16×16の点でスプライトのパターンを作ることができます。このとき注意しなくてはならないのが、データを代入していく順番です。
データは、まず左側の8つ(1バイト)が上から順番に、一番下まで定義されます。この時点で16個のデータ(1バイト単位で)が定義されたことになります。次に、今度は右側の8つが上から順番に、一番下まで定義されます。これで合計32個のデータが定義され、16×16のパターンを定義したことになります。そのため文字変数は、左側用のもの(A$)と右側用(B$)のもの2つ用意されています。70行でこれらのデータを合わせて、1つのパターンをスプライトとして定義しています。
SCREEN 4以降のSPRITEでは、1ライン毎に色を付けることができます。これについてはCOLOR SPRITEを参照してください。

参 照

COLOR SPRITEPUT SPRITE


SPRITE ON/OFF/STOP

機 能

スプライトのパターンが重なったときにジャンプするかどうかを決定します。

書 式
SPRITE ON
SPRITE OFF
SPRITE STOP

文 例
10 SCREEN 1,1
20 SPRITE$(0)=STRING$(8,CHR$(&B11111111))
30 ON SPRITE GOSUB 90
40 PUT SPRITE 0,(100,100),1,0
50 SPRITE ON
60 X=255
70 PUT SPRITE 1,(X,100),6,0
80 X=X-1:GOTO 70
90 REM SUB
100 X=255:SPRITE OFF
110 RETURN
解 説

50行でSPRITE ONが指定してあるので、最初にパターンが重なったときには、30行の指定によって90行へジャンプします。100行でSPRITE OFFが指定してあるので、以後ジャンプは行われません。このプログラムを終了するには、[CTRL]キーを押しながら[STOP]キーを押します(スプライトパターンを消すには、画面モードかスプライトモードを指定したSCREEN命令を実行してください)。
SPRITE ONを指定すると、以後スプライトのパターンが重なったときには、ON SPRITE GOSUBで指定した行へジャンプします。
SPRITE OFFを指定すると、以後のスプライトパターンが重なっても、ジャンプは起こりません。
SPRITE STOPを指定すると、以後スプライトのパターンが重なったときのジャンプを一時停止し、SPRITE ONが指定されると直ちにジャンプします。
SCREEN 4以降のSPRITEで、COLOR SPRITEによって特殊なカラー番号を指定しておくと、その色の部分は割り込みを起こさないようにすることができます。このやり方については、COLOR SPRITEを参照してください。

参 照
COLOR SPRITEON SPRITE GOSUB


SQR

機 能

<数式>の平方根(ルート)を返します。

書 式
SQR(<数式>)

文 例
PRINT SQR(2)
【表示】1.414213562373

STICK

機 能

ジョイスティックがどの方向に押されているかを調べます。

書 式
STICK(<ジョイスティック番号>)

文 例
10 PRINT STICK(0):GOTO 10
解 説

STICKに続くカッコ内の数値には、0か1か2が入り、それぞれ次のように、何の方向を調べるかを指定します。

番号意味
0 カーソルキー
1 ポート1に接続されたジョイスティック
2 ポート2に接続されたジョイスティック

STICK命令の実行によって得られる数値は、0から8までの9つで、それぞれ以下の図に示された方向と対応しています。

0はジョイスティックがどの方向にも向いていない(またはカーソルキーが何も押されていない)ことを示しています。


図2.19 STICK命令で得られる値


STOP

機 能

プログラムの実行を停止します。

書 式

STOP

文 例
10 PRINT "ハルガ "
20 STOP
30 PRINT "キタ"
40 END
解 説

プログラムの実行を停止して、直接命令が入力できる状態にします。STOPはプログラムのどこにおいてもかまいません。STOP命令が実行されると、「Break in xxxx」(xxxxはSTOPされた行番号)と画面に表示されます。END命令と異なり、オープンされたファイルがあってもクローズはされません。プログラムを再開するにはCONT命令を実行します。

参 照

CONT


STOP ON/OFF/STOP

機 能

[CTRL]+[STOP]キーが押されたときにON STOP GOSUB文で指定された行に分岐するかどうかを決定します。

書 式

STOP ON
STOP OFF
STOP STOP

文 例
STOP ON
解 説

この命令は、ON STOP GOSUBによって定義された処理のサブルーチンの実行を許可するか(ON)、禁止するか(OFF)、一時停止するか(STOP)を決定します。
STOP ONを実行すると、[CTRL]+[STOP]キーを押すごとに、ON STOP GOSUBにより定義されている処理のサブルーチンが呼び出されます。
STOP OFFを実行すると、[CTRL]+[STOP]キーを押しても、用意された処理のサブルーチンは実行されず、プログラムの実行が停止します。
STOP STOPを実行すると、[CTRL]+[STOP]キーを押しても、用意された処理のサブルーチンは実行されませんが、再びSTOP ONを実行することによって、処理が実行されます。
この命令はON KEY(n) GOSUB命令とKEY(n) ON/OFF/STOP命令の関係と同じです。
STOP ON/STOPの状態では、プログラムによっては実行を停止できなくなるので、注意して下さい。

参 照

ON STOP GOSUB


STR$

機 能

数値を文字列に変換します。

書 式

STR$(<数式>)

文 例
10 A=123:B=-45
20 C=A+B
30 C$=STR$(A)+STR$(B)
40 PRINT C,C$:END
【表示】78         123-45
解 説

<数式>の数値を10進数の文字列に変換します。文字列に変換された「123」と「-45」は、もう数値ではないので、+によって加算されても「78」にはならず、「123-45」という文字列になります。

参 照
VALSTRING$


STRIG

機 能

ジョイスティックのトリガボタンが押されたかどうか調べます。

書 式

STRIG(<ジョイスティック番号>)

文 例
10 PRINT "スペースキーヲオシテクダサイ"
20 A=STRIG(0)
30 IF A THEN BEEP
40 GOTO 20
解 説

スペースキーが押されると、-1が変数Aに代入されて30行が実行され、ビープ音が鳴ります。
STRIG命令は、指定したジョイスティックのトリガボタンまたはスペースキーが押されたかどうかを調べ、押されていれば-1を、押されていなければ0を返します。
STRIGに続くカッコ内には、0から4までの数値が入り、それぞれ以下に示すトリガボタンと対応しています。

番号意味
0 トリガボタンのかわりにスペースキーを使う
1 ポート1に接続されたジョイスティックのトリガボタン1
2 ポート2に接続されたジョイスティックのトリガボタン1
3 ポート1に接続されたジョイスティックのトリガボタン2
4 ポート2に接続されたジョイスティックのトリガボタン2

ただし、ジョイスティックによってはトリガボタン2のないものもあります。

参 照

ON STRIG GOSUBSTRIG ON/OFF/STOP


STRIG(n) ON/OFF/STOP

機 能

ジョイスティックのトリガボタンが押されたときに、ON STRIG GOSUB文によって指定された行に分岐するかどうかを決定します。

書 式

STRIG(<ジョイスティック番号>)ON
STRIG(<ジョイスティック番号>)OFF
STRIG(<ジョイスティック番号>)STOP

文 例

 STRIG(0) ON

解 説
キーボードのスペースキーが押されると、ON STRIG GOSUBによって指定された行番号以下の処理を実行します。この命令は、ON STRIG GOSUBによって定義された処理のサブルーチンの実行を許可するか(ON)、禁止するか(OFF)、一時停止するか(STOP)を決定します。
カッコ内の数値は、以下のようにジョイスティックのトリガボタンに対応しています。
番号意味
0 キーボードのスペースキー
1 ポート1に接続されているジョイスティックのトリガボタン1
2 ポート2に接続されているジョイスティックのトリガボタン1
3 ポート1に接続されているジョイスティックのトリガボタン2
4 ポート2に接続されているジョイスティックのトリガボタン2

ただし、ジョイスティックによってはトリガボタン2のないものもあります。
STRIG ONを実行すると、指定されたトリガボタンが押されるごとに、ON STRIG GOSUBにより定義されている処理のサブルーチンが呼び出されます。
STRIG OFFを実行すると、指定されたトリガボタンが押されても、用意された処理のサブルーチンは実行されません。
STRIG STOPを実行すると、指定されたトリガボタンが押されても、用意された処理のサブルーチンは実行されませんが、再びSTRIG ONを実行することによって、処理が実行されます。

参 照
ON STRIG GOSUBKEY ON/OFF/STOP


STRING$

機 能

<式2>で指定された文字だけでできた文字列を作ります。

書 式
STRING$(<式1>,<式2>)

文 例
10 A$=STRING$(10,"*")
20 PRINT A$:END
【表示】**********
解 説

<式2>で指定した文字を<式1>に指定した数だけ連ねた文字列を作ります。<式2>の文字は0〜255までの数値でも構いません。この場合は、対応するキャラクターコードが使用されます。


SWAP

機 能

2つの変数の値を交換します。

書 式

SWAP<変数>,<変数>

文 例
10 A=12:B=34
20 PRINT "A=";A,"B=";B
30 SWAP A,B
40 PRINT "A=";A,"B=";B
50 END
【表示】A=12           B=34
        A=34           B=12
解 説

行番号30の実行により、変数Aと変数Bの値が入れ替わります。変数の型は、文字型でも数値型でも構いませんが、2つの変数の型は同じでなければいけません。


TAB

機 能

指定された桁まで空白を表示します。

書 式

TAB(<数式>)

文 例
PRINT TAB(10);"TEST"

解 説

指定した桁まで空白を出力します。指定した桁から表示を行いたいときに、PRINTやLPRINTなどの命令の中で使います。指定できるのは、0から255までの値です。
現在の出力位置がすでに指定された桁位置よりも大きいときは、何も出力しません。

参 照

SPC


TAN

機 能

<数式>の正接(タンジェント)を計算します。

書 式

TAN(<数式>)

文 例
PRINT TAN(3.14159/4)
【表示】.99999867320603

TIME

機 能

時間を計ります。

書 式
TIME[=<数式>]

文 例
10 CLS:TIME=0
20 LOCATE 0,12:T%=TIME/60:PRINT T%
30 IF T%=60 THEN PRINT "1 プンケイカ" ELSE 20
40 END
解 説

TIMEは初期値を与えると、1/60秒ごとにその値を1つずつ増やしていきます。そのため、プログラム内の適当な場所にTIME=0を置いて、最後にTIMEの値を調べれば、その間のプログラムの実行時間を計ることができます。TIMEに与える初期値は、0から65535までの値であれば、0でなくてもかまいません。また、フロッピーディスクを使用している間などはTIMEの値は更新されません。
上のプログラムでは、実行後の経過秒数が画面に表示されます。60秒経つと「1プンケイカ」と表示されて、プログラムは終了します。
なお、上のプログラムの20行でT%としているのは、TIMEの値を60で割ったときの余りを捨てるためです。
バッテリーバックアップされている時計の時刻や日付については、GET DATE、GET TIME
、SET DATE、SET TIMEを参照してください。

参 照

GET DATEGET TIMEON INTERVAL GOSUBSET DATESET TIME


TRON、TROFF

機 能

プログラムの実行状態を追います。

書 式

TRON
TROFF

解 説

TRONを実行させてからプログラムを実行させると、以後実行されたプログラムの行番号がカギカッコ([])つきで画面に表示されます。もとの状態に戻すときは、TROFFを用います。


USR

機 能

機械語で作られたプログラムを呼び出します。

書 式

USR[<番号>](<引数>)

文 例
I=USR3(J)
解 説

ユーザーの作成した機械語プログラムを呼び出します。機械語プログラムは、あらかじめメモリ中に準備されていなければならず、またDEF USR命令により、その実行番地が指定されていなければなりません。
<番号>はDEF USR命令により定義された番号に対応しており、0から9が使えます。省略した場合は0とみなされます。カッコ内の引数は、BASICから機械語プログラムへ値を引き渡すためのものです。

参 照
DEF USR


VAL

機 能

文字列を数値に変換します。

書 式

VAL(<文字式>)

文 例
10 A$="123":B$="-45"
20 C$=A$+B$
30 A=VAL(A$):B=VAL(B$)
40 C=A+B
50 PRINT C$,C:END
【表示】123-45        78
解 説

カッコ内の文字列を数値に変換しています。AとBはそれぞれ「123」と「-45」が数値に変わったものなので、加算によってCは78という数になります。

参 照
STR$


VARPTR

機 能

変数の格納されているメモリ番地、ファイルに割り当てられているファイルコントロールブロックの開始番地を求めます。

書 式
VARPTR(<変数名>)
VARPTR(#<ファイル番号>)

文 例1
PRINT HEX$(VARPTR(A))
解 説1

<変数名>で指定した変数のデータが格納されている変数領域のメモリ番地を求めます。このとき指定されている変数には値が代入されていなければなりません

文 例2
BVAD=VARPTR(#1)
解 説2

指定した<ファイル番号>に割り当てられているファイルコントロールブロックの開始番地を得ます。

参 照

メモリマップ

VDP

機 能

VDP(TMS9918、V9938、V9958)のレジスタへデータを書き込んだり、レジスタからデータを読み出したりします。

書 式
VDP(<レジスタ番号>)

文 例
VDP(1)=&HE1
解 説

VDP(ビデオディスプレイプロセッサ)のレジスタ1に、&HE1というデータを書き込みます。
読み書きできる範囲は次の通りです。

レジスタ0〜7(R/W)ステータスレジスタ0(R)レジスタ8〜(R/W)
MSX 0〜78
MSX2 0〜789〜24(R8〜R23)
MSX2+0〜789〜24、26〜28(R8〜R27)

参 照

BASE


VPEEK

機 能

VRAM上の指定した番地の内容を読み出します。

書 式
VPEEK(<番地>)

文 例
PRINT VPEEK(0)
解 説

読み出すデータを指定する番地は、SET PAGE命令で指定したページからのオフセットで、0〜&HFFFF(65535)の値です。返される値は0〜255です。詳しくはVRAMマップを参照して下さい。

参 照
SET PAGEVPOKE


VPOKE

機 能

VRAM上の指定した番地データを書き込みます。

書 式
VPOKE<番地>,<データ>

文 例
VPOKE 0,65
解 説

データを書き込む番地は、SET PAGE命令で設定したページからのオフセットで、0〜&HFFFF(65535)の値です。書き込む値は0〜255です。詳しくはVRAMマップを参照して下さい。

参 照
SET PAGEVPEEK


WAIT

機 能

入力ポートに指定した値が入るまで、プログラムの実行を中断します。

書 式
WAIT<ポート番号>,<式1>[,<式2>]

文 例
WAIT 1,&H22,&H22
解 説

<ポート番号>で指定した入力ポートから読み込んだデータと<式2>とのXORの結果を、<式1>でANDした結果が真になるまで、プログラムの実行を中断します。<式2>が省略されたときは、「0」が適用されます。ポート番号に関しては、I/Oマップを参照してください。
WAITは、ハードウェアと非常に密着した命令で、各々のMSXでは異なる動作をする場合があります。MSXの互換性を維持するため、広く公表するプログラムには使用しないでください。


WIDTH

機 能

1行に表示する文字数を設定します。

書 式
WIDTH<桁数>

文 例
WIDTH 30
解 説

テキストモードで画面に表示する、1行の文字数を30文字に設定します。40×24のモードでは1〜40、32×24のモードでは1〜32、80×26のモードでは1〜80、までの値を指定できます。
文字数の設定は、各テキストモードでそれぞれ行います。例えば、32×24のテキストモードで、上の例のように30文字の設定を行っても、40×24のテキストモードでの設定は変わりません。
BASICをスタートした時点では、40×24のテキストモードで39文字、32×24のテキストモードで29文字が自動的に設定されます。

WIDTHステートメントは漢字モードの時には以下のように動作します。

漢字テキストモードの場合

■KANJI0かKANJI2の場合
<桁数>の指定は26から64が有効です。

■KANJI1かKANJI3の場合
<桁数>の指定は26から80が有効です。

上記以外の値が指定されると「Illegal function call」となります。

漢字グラフィックモードの場合

常に「Illegal function call」となります。

参 照

CALL KANJISCREENSET SCREEN