公式サイト

カテゴリー: BASIC

誰が読むのかBASIC講座(10かいめ)[入力させる]

ユーザーに数値や文字を入力させたいシーンもあるでしょう。BASICではデータをキーボードより入力させるINPUT命令、何らかのキーが押された事を検出するINKEY$関数があります。


INPUT命令

INPUT命令が実行されると入力待機の状態となり、値を入力して[Return(Enter)]キーを押すまで次のプログラム行に進みません。

INPUT <“プロンプト文字列”;> [入力変数1]<,入力変数2><,入力変数3>…

“プロンプト文字列”; の記述は省略すると「?(クエスチョンマーク)」のプロンプトが表示されます。入力変数は複数指定できます。複数指定すると、「,(カンマ)」で区切って指定数分入力することになります。

たとえば、以下のプログラムを実行すると、2つの数値を入力する事で、それらを掛け算した計算結果を出力してくれます。

10 INPUT "Input 2 values";A,B
20 PRINT A*B

INKEY$関数

INKEY$関数は、現在押されているキーボードの文字を返します。INPUTのように入力待機はしません。現在の入力文字を返して、すぐ次のプログラム行に進みます。何も入力されていないときはヌル文字(何もない事を示す空文字)を返します。

たとえば、以下のプログラムを実行すると、キーボードで入力した文字が素直にそのまま画面に出力されます。

10 A$=INKEY$
20 PRINT A$;
30 GOTO 10

厳密には・・・

先ほどは、便宜上「INKEY$関数は現在押されているキーボードの文字を返す」と説明しましたが、実を言うと厳密にはINKEY$を呼び出す毎に、システム内部のキー入力バッファより1個の入力文字をロードしているので、実際には現在のキー押下の状態を示しているわけではありません。その証拠に2個以上のキーを同時に押しているかの判断ができません(入力された順番で呼び出し順に取得されます)。

誰が読むのかBASIC講座(9かいめ)[文字列の変数を使う]

BASICには文字列を格納する変数もあります。

以前使った変数は数値を格納する「値型」というものでした。文字列を格納する変数は「文字列型」として「値型」とは区別されます。

値型変数と区別するために、変数名の後に $ を付ける事でその変数が文字列型の変数と識別されます。

10 A$="コノヤロウ"
20 PRINT A$

上記プログラムを実行すると

RUN
コノヤロウ
Ok

となります。


文字列の演算(つなぎ合わせる)

文字列は + 演算子でつなぎ合わせることができます。

10 A$="コノヤロウ"+"ナンダテメ"
20 PRINT A$
RUN
コノヤロウナンダテメ
Ok

したがって文字列型変数に対しても同じことができます。

10 A$="コノヤロウ"
20 B$="ナンダテメ"
30 C$=A$+B$
40 PRINT C$
RUN
コノヤロウナンダテメ
Ok

PRINT命令の小技(改行キャンセル)

ここまで散々使ってきたPRINT命令ですが、この命令は表示する文字列の末尾に改行が自動的に入ります。

10 PRINT "コノヤロウ"
20 PRINT "ナンダテメ"
RUN
コノヤロウ
ナンダテメ
Ok

ところが、プログラムの都合によっては、PRINTで表示させた文字の末尾に改行させずに続けて表示させたいシーンもありますよね。

このような時は、文字列の末尾に ; (セミコロン)を付加する事で、改行をキャンセルさせる事ができます。

10 PRINT "コノヤロウ";
20 PRINT "ナンダテメ"
RUN
コノヤロウナンダテメ
Ok

誰が読むのかBASIC講座(8かいめ)[制御(繰り返し)]

前回入力したプログラムはこんなのでした。

10 A=0
20 A=A+1
30 RRINT A
40 A=A+1
50 PRINT A
60 A=A+1
70 PRINT A
80 A=A+1
90 PRINT A

これを入力していて「同じ内容を何度も繰り返して入力するの面倒」だと思われた事かと思います。

特に上記の例だと20行~90行までは同じ内容の繰り返しです。

このような表記は繰り返し制御の構文(FOR~NEXT)を使うと便利です。

FOR <変数>=<初期値> TO <終値> (STEP <変化量>)

<繰り返す構文>

NEXT <変数>

for変数の初期値から終値までのカウント分構文を繰り返します。変化量のデフォルトは1です

以下に上記のプログラムをFOR~NEXTを利用して書き換えたプログラムを示します。

10 A=0
20 FOR I=0 TO 3
30 A=A+1
40 PRINT A
50 NEXT I

FORで指定した変数Iの初期値0からTOで指定した終値までのカウント数は4なので、30~40行を4回繰り返します。

ところで、このプログラムは変数Aの値を1から4まで1づつ加算させるのが目的でした。FOR~NEXTの特徴をうまく使えばもっとこのプログラムを簡略化できます。

10 FOR A=1 TO 4
20 PRINT A
30 NEXT A

ここまで理解できたら少し遊んでみましょう

10 FOR A=1 TO 4 ←ここの数値を大きくするといくらでも繰り返しできます
20 PRINT A
30 NEXT A

たとえば、TO 4 を TO 100 にすると100までカウントアップ!。

10 FOR A=1 TO 100
20 PRINT A
30 NEXT A

誰が読むのかBASIC講座(7かいめ)[変数を使う]

「変数」は、数値や文字の「入れもの」だと思ってください。

例えば以下のように入力してみてください

A=5
B=4
PRINT A+B

上記コマンドを実行すると

 9
Ok

と出力されたと思います。これは以下のように動作しています。

A=5 ・・・ Aという変数(いれもの)に5を入れて

B=4 ・・・ Bという変数(いれもの)に4を入れて

PRINT A+B ・・・ A+B(つまり5+4)の演算結果を出力した

ということになります。

変数の値(入れた数値)はプログラム中で自由に変更できます。変数同士、またはほかの数値同士を演算させたりもできます。

以下のプログラムではAの値を1づつ加算させて変化させた値を表示していきます。

10 A=0
20 A=A+1
30 RRINT A
40 A=A+1
50 PRINT A
60 A=A+1
70 PRINT A
80 A=A+1
90 PRINT A

誰が読むのかBASIC講座(6かいめ)[保存したプログラムを読み込む]

SAVEコマンドでプログラムを保存しておけば、再度MSXを起動したときに以前に入力したプログラムをそこから読み込むことができます。

blueMSXの場合は、保存時の仮想ディスクを[ディスクドライブA]に挿入します。

仮想ディスクを挿入したら、FILESコマンドで収録ファイルを確認します。

上の例ではMUSIC.BASとGRAPH01.BASの2つのファイルが保存されていますね。

 今回はMUSIC.BASを読み込みます。以下コマンドです。
LOAD ”MUSIC.BAS”

読み込んだらLISTコマンドでプログラムが読み込まれていることを確認します。

保存していたプログラムを読み込むことができました。

誰が読むのかBASIC講座(5かいめ) [プログラムの入力と保存と実行]

ここまででは、PRINT や CLS、 PLAYといった命令を、ひとつだけ実行するやりかたでしたが、これらを順番にならべて自動的に実行させることができます。これが「プログラミング」です。

順番に実行させるためには、BASICでは行頭に「行番号」を入力します。
[行番号][スペース][命令]
これはBASICならではのプログラミング作法です。

以下のように入力してみてください。尚、行末では必ず[Enter(Return)]を押して改行します。([Enter(Return)]を押すことでその行のプログラムがRAMに記録されます)。

10 CLS
20 PRINT "PLAYING MUSIC"
30 PLAY "GCAFECDR4GCABO5CDC"
40 END

このプログラムは以下の様にふるまいます

画面を消去→画面にPLAYING MUSICとメッセージを表示→音楽を演奏→プログラムを終了する

 行番号を記述したプログラム入力では、記述しただけでは実行はされません。実行の方法は後述しますが、MSX BASICでは実行する前に必ず入力したプログラムをメディアに保存するのが鉄則と認識しておいたほうが良いです。なぜなら実行させたプログラムが意図せぬ不具合で暴走して保存する操作ができなくなり、あとでプログラムを全て打ち込み直すという不幸にみまわれる可能性があるからです。
 プログラムを保存する方法は、BlueMSXでは仮想フロッピーディスクもしくは仮想カセットテープ(※なつかしー^-^)への保存が可能です。今回は使い勝手の良いフロッピーを使いましょう。

BlueMSXのメニューより
[ファイル]→[ディスクドライブA]→[新規ディスクイメージを挿入] をクリックします。

仮想フロッピーディスクとして保存するファイル名を指定し、「開く」をクリックすると指定した場所とファイル名で、ディスクイメージファイルが作成されます。

仮想フロッピーディスクの準備ができたら、次はディスクのフォーマットです。フォーマットとは外部記憶装置の区画整理みたいなものと現段階では認識してください。新しいディスクは最初にフォーマットしないと使用できません。
BASICシステム上で以下のコマンドを入力します

CALL FORMAT

入力すると Drive name? (A,B) という応答が表示されます。

ここではフォーマットするフロッピードライブを尋ねられていますので、Aを入力することになります。

次に
1- 1Side, double track
2- 2Side, double track
と尋ねられますが、これは(片面倍精度ディスク)か(両面倍精度ディスク)のどちらかを尋ねられています。

2の両面倍精度で良いので、2を入力します

Strike a key when ready(準備ができたらキーを押してね) と尋ねられました。[Enter(Return)]等を押せば、フォーマット処理がはじまります。フォーマット処理中は画面が固まったままになりますが、しばらく(数分かかると思います)待つと、Format Compleat OK と出て、フォーマットが完了します。

仮想フロッピーディスクのフォーマットが完了しました。次に先程入力したプログラムを保存しましょう。以下の様に入力します。

SAVE "MUSIC01.BAS"

OKと表示されたなら仮想フロッピーディスクへの保存が成功した事になります。保存されたファイルの存在を確認してみましょう。以下の様に入力します

FILES

このコマンド(FILES)はディスクに保存されているファイルを一覧表示します。現時点では先程保存した”MUSIC.BAS”のみがディスクに収録されているので、このような表示になりました。

保存がされていることが確認できたので、さっそく入力したプログラムを実行しましょう。以下のように入力します。

RUN

無事実行されたでしょうか?
もしも Syntax Error in ~ とか Illigal Function Code in ~といった表示が出た場合、それはプログラムにバグ(異常)があるという事になるので、入力を間違っていないか確認してみてください。入力済みのプログラムを再度表示するには以下コマンドを入力します

LIST

LISTで表示されたプログラムに訂正箇所がある場合は、カーソルキー(↑↓→←)で、白い箱(カーソル)を訂正箇所まで動かします。文字を上書きするならそのまま入力しますが、文字を挿入したい場合は[Insert(INS)]キーを押して挿入モードに切り替えます(カーソルの高さが低くなります)。挿入モードから上書きモードに戻すときは、もう一度[Insert(INS)]キーを押します。

訂正したら、必ずその行ごとに[Enter(Return)]キーを押します(この操作がその行のプログラムをメモリへ保存する操作となります)。このとき、行の桁位置は問いません。

誰が読むのかBASIC講座(4かいめ)[音楽の演奏]

音楽を奏でてみましょう。MSXには3音ポリのPSGシンセサイザーが搭載されています。容易に音を出力させることができる命令があります。以下構文を入力して[Enter(Return)]を押下してください。

PLAY "CDEFGAB"

「ド-レ-ミ-ファ-ソ-ラ-シ-」が演奏されたと思います。

PLAY構文に続く””(ダブルコーテーション)でかこまれた部分に音楽演奏記号を記述することで音楽を奏でる事ができます。これをMML(Music Macro Langage)と言います。

MMLについて

まず、音階を示す記号は以下です

Cドの音を出す
Dレの音を出す
Eミの音を出す
Fファの音を出す
Gソの音を出す
Aラの音を出す
Bシの音を出す

上記の音階記号を修飾する記号が以下です

MML記号説明使用例
+直前に記述された音階を半音上げる(#)C+ (ドの#になる)
直前に記述された音階を半音下げる(♭)E- (ミの♭になる)
L音符の長さを指定するL8 (以降の音が8分音符になる)
R休符を入れるR16 (16分休符が入る)
. (ピリオド)付点音符にするL4C. (付点4分音符でドの音を出す)
Oオクターブを指定する(1~8)(未指定ではO4)CDEFGABO5C
(ドレミファソラシドを演奏)
V音量を指定する(0~15)V5CV10CV5CV10CV5CV10CV5CV10C
(アクセント奏法)
Tテンポを指定する(32~255)BPMT180CDEFGABO5C
(早いテンポでドレミファソラシド)

サンプルコード カエルのうた

PLAY "CDEFEDCR4EFGAGFER4CR4CR4CR4CR4L16CR16CR16DR16DR16ER16ER16FR16FR16L4EDCR4"

カエルのうたが演奏されましたか?

MSXは3音ポリフォニック(厳密にいえば、オシレータ×3でそれぞれ独立のエンベローブがあり、ノイズも1系統付加されている)なので、3つまでの音を同時にならせます。方法は、PLAY構文を「,」(カンマ)で区切って三つのMMLを記述すると、それぞれ並行して演奏されます。

サンプルコード (I → Ⅳ →V→I の和音進行)

PLAY "L1CFGG","L1EABO5C","L1GO5CDE"

誰が読むのかBASIC講座(3かいめ)[画面の文字を消去]

前回までのコマンド操作で画面がごちゃごちゃしてきたので、一旦キレイにしましょう。画面上の文字をクリアするコマンドがあります。以下のように入力して[Enter(Return)]キーを押します。

CLS

画面がすっきりしました。

CLS (クリアスクリーン)

現在の画面に表示されているテキストをすべて消去する

誰が読むのかBASIC講座(2かいめ)[計算した数値を表示]

前回のPRINT構文はテキストを表示させるだけでした。

数式を記述すると、その演算結果を表示させることもできます。数式を記述する場合、””では囲まずに記述します。

以下の構文を入力し、Enter(Return)キーを押してください。

PRINT 1+1

1+1の演算結果である「2」が表示されたと思います。

ちなみに四則演算の記号はプログラミングの世界ではたいてい以下の表記となります。

四則演算子プログラミング言語で使われる四則演算子
++
×*(アスタリスク)
÷/(スラッシュ)

演算子は他にもありますが、慣れてから追々説明していこうと思っているのであせらずに( ^^) _旦~~

多項演算も可能です。

カッコを使うこともできますが、入れ子の時でも大かっこ[]は使わず、すべて中かっこ()を使います。

小数点も使えます。(以上をふまえたサンプルが以下)

PRINT 1+((1*20)/2)-1.5

1+{(1×20)÷2}-1.5

の計算ができていますね。

誰が読むのかBASIC講座(1かいめ)[文字を表示]

いきなりですがMSXBASIC講座を開設致します。

パソコンをお持ちの方はMSXエミュレータである「BlueMSX」あたりをインストールすると良いでしょう。

BlueMSX公式→http://bluemsx.msxblue.com/jindex.htm

BlueMSXダウンロード→http://bluemsx.msxblue.com/download.html

スマホの方は「fMSX」が良いでしょう

fMSX(GooglePlay)→https://play.google.com/store/apps/details?id=com.fms.fmsx&hl=ja&gl=US

画像はBlueMSXです。ウィンドウの左上にある丸い大きなボタンをクリックするとMSXエミュレータが起動し、BASICシステムが起動します。

まずはプログラミングの定番。Hello Worldをやってみましょう。画面に「Hello BASIC World」と表示するプログラムです。以下のようにタイプしてEnter(Return)キーを押します。

PRINT "HELLO BASIC WORLD"

問題なければ、入力したコマンドのすぐ下の行にHELLO BASIC WORLDが表示されるはずです。

このようにPRINT構文では””で囲ったテキストを画面に表示させることができます。

Algorithm Biorhytm 's musics are legacy electronic sounds and performance.