PC-6001mkIIまでの機種(PC-6001, PC-6001mkII, PC-6601)のBASICコマンド一覧です。 PC-6601のマニュアルをベースにしています。
[A] ABS ASC [B] BLOAD BSAVE [C] CHR$ CIRCLE CLEAR CLOAD CLOAD* CLOAD? CLOSE CLS COLOR CONSOLE CONT COS CSAVE CSAVE* CSRLIN CVS [D] DATA DEFFN DELETE DIM DSKF DSKI$ DSKO$ [E] END EOF EXEC EXP [F] FILES FIELD FOR…TO…STEP ~ NEXT FRE [G] GET GET@ GOSUB ~ RETURN GOTO [H] HEX$ [I] IF…THEN INKEY$ INP INPUT INPUT# INPUT# INT [K] KANJI KEY KILL [L] LCOPY LEFT$ LEN LET LFILES LINE LIST LIST L LIST V LLIST LLIST L LLIST V LOAD LOC LOCATE LOF LOG LPOS LPRINT LSET [M] MERGE MID$ MKS$ MON [N] NAME…AS NEW [O] ON…GOSUB ~ RETURN ON…GOTO OPEN OUT [P] PAD PAINT PEEK PLAY POINT POKE POS PRESET PRINT PRINT# PRINT# PSET PUT PUT@ [R] READ REM RENUM RESTORE RIGHT$ RND RSET RUN [S] SAVE SCREEN(コマンド) SCREEN(関数) SGN SIN SOUND SPC SQR STICK STOP STR$ STRIG [T] TAB TALK TAN TIME USR VAL
絶対値を与えます。
10 FOR X=-5 TO 5
20 PRINTX;" の ぜったいちは";ABS(X);" です。"
30 NEXT X
40 END
run
-5 の ぜったいちは 5 です。
-4 の ぜったいちは 4 です。
-3 の ぜったいちは 3 です。
-2 の ぜったいちは 2 です。
-1 の ぜったいちは 1 です。
0 の ぜったいちは 0 です。
1 の ぜったいちは 1 です。
2 の ぜったいちは 2 です。
3 の ぜったいちは 3 です。
4 の ぜったいちは 4 です。
5 の ぜったいちは 5 です。
Ok
文字列の最初の文字のキャラクタコードを与えます。
文字列の最初のキャラクタコードを与えます。文字とキャラクタコードの対応については、付録5 キャラクタコード表を参照してください。
10 PRINT"B の アスキーコードは ";ASC("B");" です。"
20 PRINT"BIG を ASC(X$) をつかって あらわすと、"
30 PRINT"これも ";ASC("BIG");" です。"
40 PRINT:PRINT" Hit any key !"
50 IF INKEY$=""THEN 50
60 FOR X=48 TO 57
70 PRINT CHR$(X);" の アスキーコードは";ASC(CHR$(X));" です。"
80 NEXT X
90 END
run
B の アスキーコードは 66 です。
BIG を ASC(X$) をつかって あらわすと、
これも 66 です。
Hit any key !
0 の アスキーコードは 48 です。
1 の アスキーコードは 49 です。
2 の アスキーコードは 50 です。
3 の アスキーコードは 51 です。
4 の アスキーコードは 52 です。
5 の アスキーコードは 53 です。
6 の アスキーコードは 54 です。
7 の アスキーコードは 55 です。
8 の アスキーコードは 56 です。
9 の アスキーコードは 57 です。
Ok
機械語プログラムをフロッピィディスクからメモリへロードします。
ファイル名によって指定された、機械語プログラムファイルをメモリ上に読み込みます。ロードされる領域は、BSAVEコマンドによりファイルをセーブする際に指定したものと同じです。
先頭アドレスが指定された場合には、セーブした時に指定された開始番地ではなく、先頭アドレスで与えられた番地からロードし始めます。したがって、先頭アドレスをつけてロードするプログラムは、セーブした時と異なる番地にロードされても実行可能な性質を持っていなければなりません。
Rオプションを指定すると、プログラムをロード後、セーブした時に指定された開始番地から、プログラムの実行をただちに開始します。この時、既に開かれているファイルはその状態を保持します。先頭アドレスが指定されている場合は、実行開始番地も先頭アドレスの番地になります。
10 INPUT "ドライブ NO.";D$
20 CLS
30 FILES VAL(D$)
40 PRINT:F$=""
50 INPUT "ロード したい きかいご の ファイルめい";F$
60 IF F$="" THEN END
70 F$=D$+":"+F$
80 A$="":INPUT "ロード したい せんとう アドレス(HEX)";A$
90 IF A$<>"" THEN A=VAL("&h"+A$)
100 R$="":INPUT "RUN しますか (y/n)";R$
110 IF R$="y" GOTO 140
120 IF A$="" THEN BLOAD F$:GOTO 20
130 BLOAD F$,A:GOTO 20
140 IF A$="" THEN BLOAD F$,R
150 BLOAD F$,A,R
メモリにある機械語プログラムをフロッピィディスクにセーブします。
メモリ上にある機械語プログラムを、ファイル名で指定されたファイルに書き込みます。メモリ上の指定された先頭アドレス以後の連続する指定された長さの内容が、機械語プログラムとしてセーブされます。
セーブされる機械語プログラムは先頭アドレスから実行できるようにしておくと、BLOADコマンドにより、プログラムのロードと実行が行なえます。
10 CLS
20 INPUT "ドライブ NO.";D$
30 FILES VAL(D$)
40 PRINT:F$=""
50 INPUT "セーブ したい きかいご の ファイルめい";F$
60 IF F$="" THEN END
70 F$=D$+":"+F$
80 A$="":INPUT "セーブ したい せんとう アドレス(HEX)";A$
90 A=VAL("&h"+A$)
100 E$="":INPUT "セーブ したい おわりの アドレス(HEX)";E$
110 E=VAL("&h"+E$):L=E-A+1
120 BSAVE F$,A,L:GOTO 20
指定したキャラクタコードに対応する文字を与えます。
数式の値のキャラクタコードを持つ文字を与えます。数式の値が0~255の範囲にない場合は、?FC Errorになります。キャラクタコードと文字の対応については、付録5 キャラクタコード表を参照してください。
10 S=56:E=65
20 PRINT "さいしょ の アスキーコードは";S
30 PRINT "さいご の アスキーコードは";E
40 PRINT
50 FOR I=S TO E
60 PRINT "CHR$(";I;")=";CHR$(I)
70 NEXT I
80 END
run
さいしょ の アスキーコードは 56
さいご の アスキーコードは 65
CHR$( 56)=8
CHR$( 57)=9
CHR$( 58)=:
CHR$( 59)=;
CHR$( 60)=<
CHR$( 61)==
CHR$( 62)=>
CHR$( 63)=?
CHR$( 64)=@
CHR$( 65)=A
Ok
円(楕円)を描きます。
(x, y)を中心とし、半径で指定される大きさの円を描きます。STEPをつけると相対座標になります。
円の色を指定すると、指定された色で円を描きます。省略された場合には、現在COLOR文で指定されているグラフィックスの色が用いられます。ディスプレイモードによって指定できるカラーコードが異なりますので付録7 カラーコードと色の関係を参照してください。
CIRCLEは通常円を描きますが、開始角度、終了角度を指定すると、指定された角度の範囲内のみに円弧を描きます。角度の指定の単位はラジアンで、省略値はそれぞれ、0と2πです。開始角度、終了角度が負であった場合には、その絶対値をとり、正にした角度が用いられますが、その時、中心から半径が描かれますので扇形を描くことができます。開始角度、終了角度は、-2πから+2πの範囲内にないと?FC Errorとなります。
アスペクト比は(垂直方向の半径/水平方向の半径)で指定します。省略された場合には、0.85ぐらいに設定されます。
アスペクト比が1より小さい場合には、半径は水平方向の半径を意味します。また1より大きい場合には、半径は垂直方向の半径を意味します。つまり半径が同じでもアスペク卜比が1より小さいならば横長の惰円となり、1より大きいならばたて長の楕円となります。
中心座標は、STEPをつけて相対座標により指定することもできます。
10 SCREEN 3,2,2:COLOR 16,1,1:CLS
20 FOR I=1 TO 16
30 C=I:IF C=1 OR C=9 THEN C=11
40 X=INT(RND(1)*640):IF X<40 OR X>279 THEN40
50 Y=INT(RND(1)*400):IF X<40 OR X>159 THEN40
60 R=INT(RND(1)*40):IF R<20 THEN60
70 CIRCLE(X,Y),R,C
80 NEXT I
90 END
変数の初期化およびメモリ領域の指定をします。
すべての数値変数をOに、文字変数を“”(ヌルストリング)に初期化します。DEFFN文によって定義された情報も無効にします。
文字領域の大きさは、BASICが文字列処理のために用いるメモリ領域の大きさをバイト数で指定します。
メモリの上限は、BASICの使用するメモリの上限値を番地で指定します。指定された番地以降に置かれたデータや機械語プログラムはBASICによってクリアまたは破壊されることはありません。
なお、起動時またはリセット時における文字領域の大きさは、N60-BASICモードでは50バイト、N66-BASIC、およびN60-拡張BASICモードでは300バイトです。メモリの上限は、N60-BASICモードではFAOOH、N66-BASICおよびN60-拡張BASICではミニディスクユニットのドライブ数と、起動時またはリセット時に指定したファイル数によって変化します。(メモリマップを参照してください)
文字領域の大きさ、およびメモリの上限は省略すると直前のCLEAR文で指定した大きさのまま、あるいは起動時またはリセット時の状態のままです。
10 PRINT"ユーザメモリ は ";FRE(0)
20 PRINT"もじりょういき は";FRE(A$)
30 INPUT"もじりょういき の じょうけんは";M
40 CLEAR M
50 PRINT"のこり の ユーザメモリ は";FRE(0)
60 PRINT"もじりょういき は";FRE(A$)
70 END
run
ユーザメモリ は 11654
もじりょういき は 300
もじりょういき の じょうげんは? 500
のこり の ユーザメモリ は 11454
もじりょういき は 500
Ok
プログラムをカセットテープからメモリへロードします。
CLOADコマンドプログラムをカセットテープから読み込む命令です。ファイル名は6文字以内で指定してください。ファイル名を省略するとカセットテープから一番最初に読み込むことができるプログラムを読み込みます。
CSAVE*コマンドでセーブされた数値配列の情報をロードします。
数値配列のデータをカセットテープから読み込みます。数値配列名は、配列の大きさが10より大きい場合には、DIM文によって、定義されていなければなりません。また、配列の大きさはCSAVE*文を実行した時の大きさ以上にします。数値配列名はCSAVE*文で書き込んだ時と同じでなくてもかまいません。
10 DIM X(15)
20 CLOAD*X
30 FOR I=1 TO 15
40 PRINTI,X(I)
50 NEXT I
60 END
カセットテープにセーブしたプログラムとメモリにあるプログラムを比較します。
CLOAD?コマンドは現在メモリ上にあるプログラムとファイル名で指定されたカセットテープにセーブされているプログラムを比較します。この時すべての内容が等しければBASICは“Ok”と表示し、もしそうでなければ“Bad”と表示して実行を終了します。
この比較はメモリ上のプログラムが間違いなくカセットテープにセーブされているかを確認するためのものであり、一般にCSAVEコマンドに引き続いて行ないます。
ファイルを閉じます。
指定されたファイル番号に対応するファイルを閉じます。以後、指定されたファイル番号は異なるファイルを開くために利用できるようになります。また、閉じられたファイルは、同じあるいは異なったファイル番号によって再び開くことができます。
CLOSE文では、ファイル番号を複数指定することにより、一度に複数のファイルを閉じることができます。また、ファイル番号が省略された場合には、その時に開いているファイルをすべて閉じます。指定できるファイル番号は、1から起動時またはリセット時に、How Many Files?で 指定した数までです。
クローズしたファイルに対しては、再びオープンするまで入出力を行なうことはできません。
CLOSE文は、ファイルがシーケンシャルファイルの出力用にオープンされていた場合には、バッファに残っていたデータの掃き出しを行ないますので、ファイルへの出力処理を正しく終了するためには、必ずクローズを行なわなくてはなりません。
END文、NEWコマンドは、自動的にすべてのファイルを閉じる処理を行ないます。STOP文はファイルを閉じる作業は行ないませんので注意してください。
10 OPEN"1:number2: FOR OUTPUT AS #1
20 A$="フィールド ナンバー 1"
30 B=45678
40 C$="パーソナル コンピュータ"
50 PRINT #1,A$;",";B
60 PRINT #1,C$
70 CLOSE 1:OPEN"1:number2" FOR INPUT AS #1
80 INPUT #1,X$,Y,Z$
90 PRINT "x$=["X$"]"
100 PRINT "y=["Y"]""
110 PRINT "z$=["Z$"]"
120 CLOSE:END
現在のアクティブ画面をクリアします。
SCREEN文の第2パラメータで指定されている画面をクリアします。
なお、テキスト画面がクリアされる時は、CONSOLE文によって指定されたスクロール範囲をクリアします。
最下行がファンクションキー表示を消して(CONSOLE文の第3パラメータが0)いて、かつ、スクロール範囲外の時にはCLS文を実行するとスクロール範囲と最下行をクリアします。
スクロール範囲だけクリアしたい時には、PRlNT CHR$(12)を実行してください。
10 SCREEN3,2,2:CLS
20 FOR I=1 TO 16
30 X1=INT(RND(1)*320)
40 Y1=INT(RND(1)*200)
50 X2=INT(RND(1)*320)
60 Y2=INT(RND(1)*200)
70 COLOR I
80 LINE(X1,Y1)-(X2,Y2),,B
90 NEXT I
100 PRINT "Hit any key to clear"
110 I$=INKEY$:IF I$=""THEN110
120 GOTO 10
画面の文字やグラフィックスの色を指定します。
テキスト画面の文字の色や背景の色、色を指定します。
グラフィックスの色とは、グラフィック画面に点や線を表示したりする時に使われる色のことです。BASICの種々のグラフィック命令(PSET、LINE、CIRCLE文など)で特別に色を指定しなかった場合、文字またはセミグラフィックスの色が採用きれます。
背景の色とは、グラフィック画面の地の色のことで、この命令実行後CLS命令によって画 面をクリアすると、この色によって画面が塗り変えられます。また今後PRESET命令を色指定なしで実行すると、この色が採用されることになります。
色の組み合わせは付録7 カラーコードと色の関係を参照してください。
ディスプレイモードとCOLOR文の関係は次の通りです。
ディスプレイモード | 文字またはグラフィックスの色 | 背景の色 | 色の組み合わせ | |
---|---|---|---|---|
1 | 文字モード | 1~16 | 1~8 | 1~2 |
2 | セミグラフィックモード | 1~16 | 1~8 | 1~2 |
3 | 15色グラフィックモード | 1~16(1~8) | 1~16(1~8) | 1~2 |
4 | 4色グラフィックモード | 1~4 | 1~4 | 1~6 |
10 SCREEN 3,2,2:CLS
20 FOR I=0 TO 15
30 COLOR I+1
40 LINE(20*I)-STEP(19,199),,BF
50 NEXT I
60 END
画面のモード設定を行います。
テキスト画面のモード設定を行ないます。
スクロール開始行とスクロールの長さを指定することによって、画面上でスクロールする範囲を指定します。
CLSおよびPRINT CHR$(12)は、このスクロール範囲に対して実行されます。
スクロール範囲の指定はディスプレイモードが1(文字モード)または2(セミグラフィックモード)の場合に有効となります。
ファンクションキー表示スイッチに1を指定した場合には、画面最下行にその時点でプログラマブル・ファンクションキーに登録されている文字列を表示し、0に指定した場合には表示しません。
ファンクションキーの表示はディスプレイモードが1(文字モード)または2(セミグラフイックモード)の画面に表示でき、画面ごとに設定できます。
キーのクリック音スイッチを1に指定すると、キーのクリック音が発生し、0を指定した場合には発生しません。
10 CLS
20 CONSOLE 0,8,0:A$="ABCDEFG"
30 FOR I=1 TO 7
40 PRINT LEFT$(A$,I)
50 NEXT I
60 CONSOLE 7,8,1
70 FOR I=1 TO 7
80 PRINT A$
90 NEXT I
100 END
STOPキーの入力、またはSTOP文によって停止したプログラムの実行を再開します。
CONTコマンドは通常デバックのためにSTOP文と共に用いられます。STOP文や(STOP)キー(CTRL-C)の入力によりプログラムの実行を停止し、ダイレクトモードで変数の値等を調べたり変更した後に、CONTコマンドによって実行を再開します。
ただし、実行停止中にプログラムの内容を変更した場合には、CONTコマンドによる継続実行はできません。
10 FOR I=1 TO 7
20 PRINT "♥♣♦♠";
30 NEXT I:PRINT
40 PRINT:PRINT" Hit STOP key or CTRL-C !"
50 PRINT" Type CONT and hit RETURN !"
60 FOR I=0 TO 500:NEXTI
70 PRINT:GOT010
余弦(コサイン)を与えます。
数式の値に対する三角関数cos xの値を与えます。
10 FOR I=0 TO 60 STEP 30
20 H=I*3.14159265/180
30 PRINT"X=";I;"゜";
40 PRINT SPC(3):PRINT "コサイン のあたいは";COS(H)
70 PRINT:NEXT I
80 END
run
X= 0゜ コサイン のあたいは 1
X= 30゜ コサイン のあたいは .8660254
X= 60゜ コサイン のあたいは .5
Ok
メモリにあるプログラムをカセットテープにセーブします。
メモリ上にあるプログラムにファイル名をつけてカセットテープへ書き込みます。
カセットテープ上にセーブされたプログラムは、ファイル名により区別されます。このファイル名は最大6文字からなる文字列によって指定します。
list
10 A=10:B=50:C=25
20 PRINT A
30 PRINT B
40 PRINT A;B;C
50 END
Ok
csave"sample"
Ok
メモリ上にある数値配列の情報をカセットテープにセーブします。
数値配列に代入されている数値情報をカセットテープに書き込みます。数値配列名は、配列の大きさが10より大きい場合には、DIM文によって定義されていなければなりません。
10 dim x(15)
20 for i=1 to 15
30 x(i)=2^i
40 next i
50 csave*x
60 end
現在のカーソルの行位置を与えます。
現在のカーソルの行位置を与えます。N66-BASICモードの場合には値の範囲は、0~19となります。なお、画面の最上行が0、最下行が19となっています。また、N60-BASICおよびN60-拡張BASICモードの場合には、0~15の数値となり、画面の最上行が0、最下行が15となっています。
10 CLS
20 Y=INT(RND(1)*100)
30 IF Y>19 THEN 20
40 X=INT(RND(1)*100)
50 IF X>39 THEN 40
60 LOCATE X,Y
70 PRINT POS(0);CSRLIN
80 END
MKS$関数で変換された5バイトの文字列データを数値に変換します。
フロッピィディスク上のランダム・ファイルから読み込んだデータは、文字型になっています。MKS$関数で文字型に変換されているデータを数値に戻します。
10 OPEN "しょうひん" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/8)+1
60 LR=R-(PR-1)*8
70 FIELD#1,(LR-1)*32 AS D$,22 AS S$,5 AS T$ ,5 AS N$
80 IF PR>M THEN PRINT "ERROR":GOTO 30
90 GET #1,PR
100 PRINT "しょうひんめい: "S$
110 PRINT "たんか :"CVS(T$)
120 PRINT "すうりょう :"CVS(N$)
130 PRINT
140 GOTO 30
READ文で読み込む数値や文字列定数を格納します。
DATA文は非実行文でブログラム中のどこに置いてもかまいません。1つのDATA文には1 行(71文字)に入るだけのデータをセットすることができます。また、1つのプログラム内には、任意の数のデータ文を置くことができます。
READ文はDATA文の行番号の小さい方から順番にDATA文中のデータを読み込みます。
DATA文中の数値または文字列定数は、READ文で読み込まれる場合にREAD文で指定される変数の型と一致しなければなりません。
データはコンマ(,)で区切ります。文字列定数でコンマ(,)やピリオド(.)、または文字列の先頭または最後が意味のある空白である場合には、その文字列定数をダブルクォーテーション(")でくくる必要があります。
RESTORE文によってREAD文で読み込むDATA文を行単位で指定することができます。
10 FOR I=1 TO 3
20 READ A$,B$,C
30 PRINT A$;B$;C
40 NEXT I
50 END
60 DATA"PC-6001 ","89,800 ",75
70 DATA"PC-6022 ","39,800 ",50
80 DATA"PC-6023 ","79,800 ",25
run
PC-6001 89,800 75
PC-6022 39,800 50
PC-6023 79,800 25
Ok
ユーザによって作られた関数を定義します。
関数の名前はFNとこれに続く関数名を含めたもので、関数名は数値変数名と同じ規則でつけます。
引数はその関数が呼ばれた時に関数の定義式の中の同じ名前の変数に対応します。この変数名は関数を定義する時だけ有効となり、プログラム中に同ーの変数名があっても影響を受けません。また、関数の定義式の中に引数以外の変数が使われている場合には、関数が呼ばれた時点で、その変数がもっている値が使われます。
関数定義式は、その関数の演算内容を記述する式で、1行の範囲に限られます。
DEFFN文は非実行文ですが、これによって定義される関数がプログラム中で呼ばれる前に実行されていなければなりません。
10 DEF FNA(X)=2*X^2
20 DEF FNB(X)=-2*X^2
30 DEF FNC(X)=2*X^3
40 FOR X=-1 TO 2
50 PRINT"*** X=";X;" ***"
60 PRINT FNA(";X;")=";FNA(X)
70 PRINT FNB(";X;")=";FNB(X)
80 PRINT FNC(";X;")=";FNC(X)
90 NEXT X
100 END
run
*** X=-1 ***
FNA(-1)= 2
FNB(-1)=-2
FNC(-1)=-2
*** X= 0 ***
FNA( 0)= 0
FNB( 0)= 0
FNC( 0)= 0
*** X= 1 ***
FNA( 1)= 2
FNB( 1)=-2
FNC( 1)= 2
*** X= 2 ***
FNA( 2)= 8
FNB( 2)=-8
FNC( 2)= 16
Ok
プログラムを部分的に削除します。
指定された開始行番号から終了行番号までのプログラムを削除します。開始行番号だけを指定した場合は、その行だけ削除します。
list
10 OPEN "データ" FOR INPUT AS #1
20 IF EOF(1) THEN END
30 INPUT #1,N,R
40 PRINT "SQR("N" )="R
50 GOTO 20
Ok
delete20-40
Ok
list
10 OPEN "データ" FOR INPUT AS #1
50 GOTO 20
Ok
配列変数の要素の大きさを指定して配列を宣言し、メモリ領域を確保します。
配列変数の添字の最大値を設定し、同時にメモリ上にその配列の領域を割り当てます。
DIM文で宣言せずに配列変数を用いた場合、その添字の最大値は10とみなされます。
もし、設定された最大値より大きい値の添字が用いられた場合には、?BS Errorが起こります。
また、DIM文が実行された時点で、その配列のすべての要素は数値ならO、文字なら“”(ヌルストリング)に設定されます。
10 DIM A$(3,7)
20 CONSOLE,,1,1
30 FOR J=0 TO 3
40 FOR I=0 TO 7
50 READ A$(J,I)
60 NEXT I
70 HEXT J
80 FOR I=0 TO 7
90 FOR J=0 TO 3
100 PRINT A$(J,I);
110 FOR K=0 TO 100:NEXT K
120 NEXT J
130 NEXT I
140 END
150 DATA わ," ",6," ",う,て," ",く
160 DATA た,P,0,の,た,゛,よ,ね,し,C,0
170 DATA き,゛,す,ろ," ",は,-,1,ょ,い
180 DATA 。,し,!
run
わたしは PC-6001 のきょうだいです。 よろしくね !
Ok
フロッピィディスクの空容量をクラスタ単位で与えます。
ドライブ番号で指定されたフロッピィディスクの残り容量をクラスタ単位で返します。指定できるドライブ番号の範囲は、1から接続しているドライブの数までです。なお、1クラスタは8セクタです。
10 INPUT "ドライブ NO.";D
20 F=DSKF(D)
30 S=F*8
40 PRINT "フリー クラスタ すう=";F
50 PRINT "フリー セクタ すう=";S
60 END
フロッピィディスクから直接読み込んだ内容を文字列として与えます。
通常のファイル操作とは無関係に、フロッピィディスク上の指定したセクタから直接読み込みを行ないます。
DSKI$は、そのパラメータにより指定されたセクタ上に書かれているデータ256バイトを0番バッファに読み出すとともに、最初の255文字の文字列を関数の値として返します。
文字列の長さは255文字までなので、関数の値として256バイトのデータすべてを得ることはできません。そこで、通常のランダムアクセスの場合と同じようにFIELD文により、0番バッファへ複数の文字列変数を割り当てることによりこれを解決することができます。
指定できる値の範囲は、ドライブ番号が1から接続しているドライブの数まで、トラック番号は0から34まで、セクタ番号は1から16までです。これらの値の範囲を超えて指定した場合には、??DN Errorまたは??TS Errorになります。
10 INPUT "ドライブ NO.";D
20 INPUT "トラック NO.";T
30 INPUT "セクタ NO.";S
40 INPUT "キーワード";X$
50 D$=DSKI$(D,T,S)
60 IF X$=LEFT$(D$,LEN(X$)) GOTO 90
70 PRINT "ちがって います。"
80 END
90 PRINT "あって います。"
100 END
フロッピィディスクに情報を直接書き込みます。
通常のファイル操作とは無関係に、フロッピィディスク上の指定したセクタに直接書き込みを行ないます。この文は、既存のディスクファイルを壊す恐れがありますので、ディスクおよびファイルの構成を正しく理解した上で使用してください。
DSKO$は、指定されたセクタに、0番バッファの内容256バイトを書き込みます。0番バッファは、通常のディスクファイル操作の際には用いることはできませんが、DSKI$とDSKO$による直接操作の場合のみ、使用することができます。書き込むデータの準備は、ランダムアクセスの場合と同じようにFIELD文により、0番バッファへ変数領域を割り当てた後、LSET、RSET文により行ないます。
指定できる値の範囲は、ドライブ番号が1から接続しているドライブの数まで、トラック番号が0から34まで、セクタ番号が1から16までです。これらの値の範囲を超えて指定した場合には、??DN Errorまたは??TS Errorになります。
10 INPUT "ドライブ NO.";D
20 INPUT "トラック NO.";T
30 INPUT "セクタ NO.";S
40 INPUT "キーワード";X$
50 FIELD#0,255 AS W$
60 LSET W$=X$
70 DSKO$ D,T,S
80 END
プログラムの終了を宣言します。
プログラムの実行を終了し、すべてのファイルをクローズしてコマンドレベルに戻ります。END文はプログラムの実行を終了させたい所に置けばよく、また、いくつ置いてもかまいません。プログラムの最後のEND文は省略することができますが、この場合、ファイルのクローズは行なわれません。
10 INPUT"INPUT NO.(1 OR 2)";N
20 IF N=1 THEN PRINT"おしまい !":END
30 IF N=2 THEN PRINT"とまっちゃった。":STOP
40 GOTO 10
run
INPUT NO.(1 OR 2)? 1
おしまい !
Ok
ファイルの終わりを検出します。
シーケンシャルファイルのINPUTモードの時にファイル番号で指定されたファイルが終わりに達したかどうかを調べる関数です。関数の値として終わりに達していれば真(-1)、そうでなければ偽(0)を返します。ファイル番号で指定されたファイルは入力INPUTモードでオープンされていなければなりません。
10 OPEN "データ" FOR INPUT AS #1
20 IF EOF(1) THEN END
30 INPUT #1,N,R
40 PRINT "SQR("N" )="R
50 GOTO 20
機械語プログラムを実行します。
指定した番地から始まる機械語プログラムの実行を開始します。機械語プログラムの実行後N66-BASICに戻るには、機械語プログラムの最後にRET(&HC9)命令を置きます。
10 SCREEN 3,2,2:CLS
20 FOR I=2 TO 16
30 X1=INT(RND(1)*320)
40 Y1=INT(RND(1)*200)
50 X2=INT(RND(1)*320)
60 Y2=INT(RND(1)*200)
70 C=I:IF C=9 THEN C=2
80 COLOR C,1,1
90 LINE(X1,Y1)-(X2,Y2),,BF
100 NEXT I
110 PRINT "Hit any key to clear"
120 IN$=INKEY$:IF IN$="" THEN 120
130 EXEC&H1DF8:GOTO 20
eに対する指数関数の値を与えます。
数式の値に対する指数関数eの値を与えます。
10 FOR X=0 TO 8
20 PRINT "EXP(";X")=";EXP(X)
30 NEXT X
40 END
run
EXP( 0)= 1
EXP( 1)= 2.7182818
EXP( 2)= 7.3890561
EXP( 3)= 20.085537
EXP( 4)= 54.59815
EXP( 5)= 148.41316
EXP( 6)= 403.42879
EXP( 7)= 1096.6332
EXP( 8)= 2980.958
Ok
バッファに変数領域を割り当てます。
ファイルバッファをランダムファイルのバッファとして使用するために、ファイルバッファの中に文字変数の領域を割り当てます。
GET文、PUT文を使ってランダムファイルの入出力を行なう前に必ず、FIELD文が実行されていなければなりません。
ファイル番号は、OPEN文によってファイルをオープンしたときに指定した番号です。
領域の大きさは文字変数に割り当てる文字数です。1つのバッファには文字数の合計が256文字までならば、いくつの文字変数を割り当ててもかまいません。また、1つのバッファに対して、何回かに分けてFIELD文を実行してもかまいません。
FIELD文で指定した変数は、FIELD文を実行した時点で、指定した文字数のヌルキャラクタ(アスキーコードが0のキャラクタ)がセットされます。また、この変数をINPUT文、LET文の左辺で使用しないでください。もし使用すると、その変数は、一般の文字変数領域に登録され、FIELD文でのバッファの割り当てが無効となり、正しいファイルの入出力が行なわれなくなります。
10 OPEN "じゅうしょ" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/4)+1
60 LR=R-(PR-1)*4
70 REM *** FIELD ***
80 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
90 IF PR>M THEN PRINT "ERROR":GOTO 30
100 GET #1,PR
110 PRINT "なまえ : ";N$
120 PRINT "じゅうしょ: ";A$
130 PRINT "でんわ : ";T$
140 PRINT
150 GOTO 30
フロッピィディスクにセーブされているファイルの名前、種類、大きさを画面に表示します。
ドライブ番号で指定された、フロッピィディスクにセーブされているファイルの名前、種類と、その大きさを表示します。ファイルの大きさは、クラスタ単位で表示されます。クラスタについてはマイクロフロッピィディスクの構造を参照してください。
指定できるドライブ番号は1から接続しているドライブの数までです。また、ドライブ番号が省略された場合には、ドライブ1が選択されます。
ファイルの種類は、表示されるファイルの名前と、拡張子との区切り文字によって表されます。区切り文字が空白の場合には、そのファイルは、アスキーセーブされたプログラムファイル、またはOPEN文によって作られた、BASICのデータファイルであることを示します。区切り文字が、ピリオドの場合には、バイナリセーブによって作られたBASICプログラムファイル、アスタリスクの場合には、BSAVEコマンドによって作られた機械語プログラムファイルであることを表します。
10 INPUT "ドライブ NO.";D
20 CLS
30 PRINT"ドライブ"D" の FILES"
40 PRINT
50 FILES D
60 PRINT
70 END
FOR文からNEXT文までを条件に従って繰り返し実行します。
添字変数はカウンタとして使われ、最初は初期値に設定されます。FOR文以降からNEXT文まで実行されると、カウンタ値はSTEPオプションで指定された増分だけ増減されます。
次に、カウンタ値が終値に達していなければ、終値に達するまでFOR文以降からNEXT文までを繰り返し実行し、カウンタ値が終値に達したらNEXT文の次の文を実行します。
STEPオプションが省略された場合、増分は+1とみなされます。また増分は負の値をとることもできます。
次の場合には、添字変数に初期値を設定してFOR文以降からNEXT文までの実行を1回だけ行なってから添字変数に増分を増減してNEXT文の次の文を実行します。
FOR~NEXTは入れ子構造にすることができます。これは1つのF0R~NEXTのなかにもう1つのFOR~NEXTを置くことができるということで、この場合、それぞれの添字変数は別のものを使わなければなりません。また1つのF0R~NEXTは完全に他のFOR~NEXTの内部になければなりません。
1つのFOR文に対して複数のNEXT文があってもかまいませんが、正しくFOR文に対応していなければなりません。IF文中にNEXT文を置く時には、充分に気をつけてください。
10 FOR I=0 TO 100 STEP 10
20 PRINT I/10,I
30 NEXT I
40 END
run
0 0
1 10
2 20
3 30
4 40
5 50
6 60
7 70
8 80
9 90
10 100
Ok
メモリの未使用領域の大きさを与えます。
BASICの利用可能なメモリ領域のうちの、未使用領域の大きさを与えます。機能が数値ならメモリの未使用領域の大きさ、文字なら未使用の文字領域の大きさを与えます。
10 PRINT"ユーザメモリ は ";FRE(0)
20 PRINT"もじりょういき は";FRE(A$)
30 INPUT"もじりょういき の じょうけんは";M
40 CLEAR M
50 PRINT"のこり の ユーザメモリ は";FRE(0)
60 PRINT"もじりょういき は";FRE(A$)
70 END
run
ユーザメモリ は 11654
もじりょういき は 300
もじりょういき の じょうげんは? 500
のこり の ユーザメモリ は 11454
もじりょういき は 500
Ok
データをランダムファイルからバッファに読み込みます。
ファイル番号で指定されたファイル中のデータを、対応するバッファ中に読み込みます。
指定されたファイルは、ランダムファイルとして、OPEN文によってオープンされていなければなりません。ファイル番号はOPEN文で指定したファイルの番号です。レコード番号で指定されたレコード256バイトがバッファに読み込まれます。レコード番号が省略された場合には、直前に行なわれたGET文、またはPUT文で指定されたレコードの次のレコードが読み込まれます。
GET文を行なった後で、INPUT#文などのシーケンシャルアクセス入力を行なった場合には、バッファに入っているデータから入力が行なわれますので注意してください。
10 OPEN "じゅうしょ" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/4)+1
60 LR=R-(PR-1)*4
70 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
80 IF PR>M THEN PRINT "ERROR":GOTO 30
90 REM *** GET ***
100 GET #1,PR
110 PRINT "なまえ : ";N$
120 PRINT "じゅうしょ: ";A$
130 PRINT "でんわ : ";T$
140 PRINT
150 GOTO 30
アクティブ画像のグラフィック情報をセーブします。
①画面上の2点(x1, y1)と(x2, y2)を結ぶ線を対角とする四角形の領域のグラフィック情報を、配列変数名で指定された配列変数にセーブします。
配列変数名は、グラフィック情報を読み込むために用意する数値型の配列変数の名前です。
ただし、GET〔@〕文を実行する前にこの配列変数の大きさを、DIM文によって宣言しておかなければなりません。この配列変数の大きさは次の式によって計算し、()内の小数点以下を切り捨て、求められる値以上に定義します。なお、式中の(x1, y1) は左上の絶対座標、(x2, y2) は右下の絶対座標です。
②画面上の2点(x1, y1)と(x2, y2)を結ぶ線を対角線とする四角形の領域のグラフィック情報をフロッピィディスクにファイル名をつけてセーブします。
STEPをつけると相対座標になります。
10 DIM D(20,20)
20 SCREEN 3,2,2:COLOR 2,1,1:CLS
30 FOR I=6 TO 36 STEP 6
40 CIRCLE(30,40),I,16,,,(.9+I/50)
50 NEXT I
60 GET@(0,0)-(60,80),D
70 PUT@(70,0),D,PRESET
80 GOTO 80
サブルーチンのコール、およびサブルーチンからのリターンを行ないます。
行番号から始まるサブルーチンプログラムをGOSUB文によってコールし、サブルーチンプログラム内のRETURN文によってGOSUB文の次の文へリターンします。
サブルーチンプログラムとは、1つの独立したプログラムで、RETURN文で終わっているものをいいます。サブルーチンプログラムは、GOSUB文によって、いつでも、何度でもコールすることができます。
1つめサブルーチンプログラムから他のサブルーチンプログラムをコールすることもできます。これをサブルーチンの多重化と呼びます。サブルーチンの多重化はメモリのスタック領域の容量が許す限り行なうことができます。もし、スタック領域がたりなくなった場合には、?OM Errorになります。
サブルーチンプログラムは必ずGOSUB文によってコールされなければなりません。もし、単独でサブルーチンプログラムを実行した場合、RETURN文を実行しようとして?RG Errorになります。
また、1つのサブルーチンプログラム内に複数のRETURN文があってもかまいませんが、正しくGOSUB文と対応していなければなりません。
10 S=0
20 FOR I=1 TO 5
30 INPUT"DATA";A
40 GOSUB 100
50 NEXT
60 PRINT "ごうけい=";S,"へいきん=";S/5
70 END
100 S=S+A
110 RETURN
Ok
run
DATA? 4
DATA? 5
DATA? 3
DATA? 6
DATA? 7
ごうけい= 25 へいきん= 5
Ok
指定した行へジャンプします。
行番号で指定した行へジャンプします。
10 INPUT"おなまえは ";N$
20 PRINT"1+1=";
30 INPUT C
40 IF C=2 GOTO 70
50 PRINT N$;"さん もういちど がんばろう !"
60 GOTO 20
70 PRINT "よくできました。"
80 END
run
おなまえは ? いさむ
1+1=? 3
いさむさん もういちど がんばろう !
1+1=? 2
よくできました。
Ok
10進数を16進数表示の文字列に変換します。
数式の値を16進に変換して、その文字列を与えます。HEX$関数で変換された文字列を数値に戻すには、VAL関数を使用します。
10 CLS
20 INPUT " スタート アドレス";S
30 INPUT " エンド アドレス";E
40 FOR I=S TO E STEP 8
50 PRINT HEX$(I);":";:FOR B=0 TO 7
60 PRINT " ";RIGHT$("0"+HEX$(PEEK(I+B)),2);
70 NEXT B:PRINT:NEXT I
run
スタート アドレス? &H4000
エンド アドレス? &H4050
4000: 0F 0F 0F 0F 0F 0F 0F 0F
4008: 0F 0F 0F 0F 0F 0F 0F 0F
4010: 0F 0F 0F 0F 0F 0F 0F 0F
4018: 0F 0F 0F 0F 0F 0F 0F 0F
4020: 0F 0F 0F 0F 0F 0F 0F 0F
4028: 0F 0F 0F 0F 0F 0F 0F 0F
4030: 0F 0F 0F 0F 0F 0F 0F 0F
4038: 0F 0F 0F 0F 0F 0F 0F 0F
4040: 0F 0F 0F 0F 0F 0F 0F 0F
4048: 0F 0F 0F 0F 0F 0F 0F 0F
4050: 0F 0F 0F 0F 0F 0F 0F 0F
Ok
条件判断を行ない、真ならTHENのあとの文を実行します。
条件式が真(0以外)ならばTHEN以降の文を実行し、偽ならば次の行を実行します。
THEN以降の文がGOTO文の場合には、“THEN”または“GOTO”のいずれかを省略することができます。たとえば、IF A=5 THEN GOT0 30の場合には IF A=5 THEN 30 または IF A=5 GOTO 30 とすることができます。
IF..THEN文においてTHENのあとに続けて別のIF文を置いて多重にすることができます。ただし、多重にできるのは1行に書ける範囲に限られます。
10 INPUT"INPUT NO.";N:PRINT
20 IF N=1 THEN PRINT"ABC"
30 IF N=2 THEN PRINT"DEF"
40 IF N=3 THEN PRINT"GHI"
50 IF N=4 GOTO 70
60 PRINT:GOTO10
70 END
run
INPUT NO.? 1
ABC
INPUT NO.? 2
DEF
INPUT NO.? 3
GHI
INPUT NO.? 4
Ok
キーが押されていればその文字を、押されていなければヌルストリングを与えます。
ヌルストリングを与えます。
なお、CTRL-C、STOPキーはINKEY$関数によって拾うことはできません。
また、押されたキーは画面上には表示されません。
10 PRINT"HIT any key or return to end "
20 I$=INKEY$:IF I$=""THEN20
30 IF ASC(I$)=13 THEN PRINT"おしまい !":END
40 PRINT" アスキーコードは";ASC(I$)
50 IF ASC(I$)>32 THEN PRINT"おした keyは'";I
60 PRINT:GOTO10
指定した入力ポートから値を与えます。
I/Oポートアドレスで指定されたポートから8ビットのデータを読み取り、それを関数値として与えます。I/Oポートアドレスとして指定できる値の範囲は0から255(&HFF)までです。I/Oポートアドレスと装置との対応は、I/Oポートアドレスを参照してください。
10 CLS
20 PRINT "ポート #","バイト"
30 CONSOLE 1,19
40 FOR C=100 TO 175 STEP 5
50 PRINT C,INP(C)
60 NEXT C
70 CONSOLE 0,20
80 END
指定した変数へデータをキーボードから入力します。
INPUT文が実行されると、疑問符(?)と1桁のスペースが画面に表示され、プログラムはキーボードからの入力待ちの状態になります。プロンプト文がある場合には、プロンプト文と疑問符(?)と1桁のスペースが画面に表示されます。
データはRETURNキーを押すことによって入力され、変数に代入されます。変数をコンマ(,)で区切って複数個指定した場合には、入力するデータもコンマで区切って変数の数だけ入力しなければなりません。もし、データの個数が変数の個数より少ない場合には、疑問符が2つ(??) と1桁のスペースが表示され残りのデータの入力待ちになります。データの個数が変数の個数より多い場合には、"?Extra Ignored"と表示し、余分なデータを無視して次の文を実行します。
また、対応する変数とデータの型は一致していなければなりません。もし、一致しなかった場合には、"?Redo from start"と表示して再び入力待ちになります。
データを入力する時にRETURNキーだけ押した場合には数値変数には0、文字変数にはヌルストリングが代入されます。なお、複数個のデータを入力する時に、RETURNキーだけまたは途中でRETURNキーを押すと、残りのすべての変数には0またはヌルストリングが代入されます。
文字変数に文字列を入力する場合、特にコンマ(,)や文字列の前後の意味のある空白を入力する場合には、ダブルクォーテーション(")で文字列をくくります。この場合以外は文字列をダブルクォーテーションでくくる必要はありません。また、ダブルクォーテーションを文字として入力することは、文字列をダブルクォーテーションでくくった場合にはできませんが、くくらなかった場合には文字列の最後の1文字をダブルクォーテーションにすることができます。
10 CLS
20 INPUT "* あなた の おなまえは";N$
30 INPUT "* でんわ ばんごうは";$
40 LOCATE12,8
50 PRINT"Name:";N$
60 LOCATE13,9
70 PRINT"Tel:";T$
80 END
シーケンシャルファイルからデータを読み込みます。
データを読み込む対象がシーケンシャルファイルであることと、疑問符(?)が表示されないことを除けば、INPUT文とほぼ同じです。
ファイル番号は、OPEN文によって、そのファイルをINPUTモードとしてオープンしたときに指定した番号です。
変数とデータの型は一致していなければなりません。また、変数の個数よりデータの個数の方が少ない場合には、??EF Errorになりますが、多い場合には残りのデータは無視されます。
10 OPEN "データ" FOR INPUT AS #1
20 IF EOF(1) THEN END
30 INPUT #1,N,R
40 PRINT "SQR("N" )="R
50 GOTO 20
データを指定した変数へ入力します。
INPUT#文はINPUT文に似ていて、指定した変数へデータを入力しますが、入力機器番号を指定することによって入力機器を変えることができます。
入力機器と入力機器番号は次のように対応しています。
INPUT#-0 ... キーボード
INPUT#-1 ... カセットテープ
INPUT#-2 ... RS-232C
ディスクファイルのうち、シーケンシャルファイルからの入力もINPUT#文を使います。入力機器を指定する場合は、"INPUT#"のあとにマイナス(-)がつきますので気をつけてください。変数と入力データの関係はINPUT文と同じです。変数の個数と型は、データの変数の個数と型に一致していなければなりません。
10 DIM A$(2),B$(2),C$(2)
20 PRINT " キーボードから もじを 3かい INPUT してください。"
30 FOR I=0 TO 2
40 INPUT#-0,A$(I)
50 NEXT I:PRINT
60 PRINT " *がめんに ひょうじ します。"
70 PRINT "hit any key or RETURN to END"
80 IN$=INKEY$:IF IN$=""THEN80
90 IF ASC(IN$)=13 THEN END
100 FOR I=1 TO 3
110 PRINT#-0,I;" ";A$(I-1)
120 NEXT I
130 END
数式の値を超えない最大の整数値を与えます。
数式の値を超えない最大の整数値を与えます。
10 INPUT "ステップは";H
20 FOR I= -1 TO 1 STEP H
30 PRINT"*** X=";I;" ***"
40 PRINT"INT(";I;")=";INT(I)
50 PRINT:NEXT I
60 END
run
ステップは? 0.5
*** X=-1 ***
INT(-1)=-1
*** X=-.5 ***
INT(-.5)=-1
*** X= 0 ***
INT( 0)= 0
*** X= .5 ***
INT( .5)= 0
*** X= 1 ***
INT( 1)= 1
Ok
漢字を画面に表示します。
(x, y)で指定された位置に漢字および文字を表示します。STEPをつけると相対座標による指定になります。
漢字の色はカラーコードで指定します。漢字はディスプレイモードが15色または4色グラフィックモードの場合に表示できます。カラーコードは付録7 カラーコードと色の関係を参照してください。
内蔵漢字ROMの場合、漢字を表示するには付録6 漢字コード表を参照して漢字コードで指定します。漢字の他にキャラクタ文字も共に表示することができます。
拡張漢字ROMカートリッジを付けた場合はJISコードで指定しますが、詳しくは拡張漢字ROMカートリッジの取扱説明書を参照してください。
10 SCREEN 3,2,2:KN=0:C=1
20 FOR N=1 TO 11
30 COLOR,1,1:CLS
40 FOR Y=0 TO 199 STEP 20
50 FOR X=0 TO 319 STEP 32
60 IF C=16 THEN C=1
80 C=C+1:KN=KN+1:IF KN=1025 THEN 140
90 IF C=9 THEN C=C+1
100 KANJI(X,Y),C,KN
110 NEXT X
120 NEXT Y
140 NEXT N
150 END
ファンクションキーの内容を定義します。
ファンクションキーは5つあり、シフトモードを加えると合計10の文字列を記憶させておくことができます。
キー番号は1から10までで、6から10まではシフトモードです。
各ファンクションキーは最長8文字までの文字列およびコントロール文字などを記憶でき、キーボードから入力できない文字は、CHR$関数をプラス記号で継いで使います。たとえば、RUN[RETURN]を記憶させたければ、文字列は"RUN"+CHR$(13)とします。
画面の最下行にファンクションキーの内容を表示すると、N66-BASICモードでは6文字、N60-BASICおよびN60-拡張BASICでは5文字までしか表示されません。
10 KEY1,"CLOAD"
20 KEI3,"CSAVE"
30 KEY4,"RUN"+CHR$(13)
40 PRINT"Hit any key to back !"
50 IN$=INKEY$:IF IN$="" THEN 50
60 KEY1,"color"
70 KEY3,"goto"
80 KEY4,"list"
90 END
フロッピィディスクにセーブされているファイルを削除します。
ファイル名で指定したファイルをフロッピィディスクから削除します。
削除するファイルはクローズ状態になっていなければなりません。もしオープン状態のファイルを削除しようとすると、??AO Errorとなります。また、1つのKILLコマンドでは1つのファイルしか削除できません。
KILLコマンドはすべてのディスクファイル(プログラム、ランダムデータ、シーケンシャルデータ)について使用できます。
ドライブの指定は、ファイル名の前にドライブ番号を含めることによって行ないます。省略された場合、ドライブ1が指定されたとみなされます。
画面の情報をプリンタに出力します。
コピーモードは1か2の値をとり、それぞれ次のように働きます。省略された場合には1が選択されます。N60-BASIC およびN60-拡張BASICモードの場合には、コピーモードを省略します。
f = 1→ 200×320ドットでプリンタにコピーします。
f = 2→ 400×320ドットでプリンタにコピーします。
10 SCREEN1,1,1:COLOR16,1,1:CLS:C=1
20 A$="ABCDEFGHIJKLMNOP"
30 FOR I=1 TO 16
40 COLOR C:LOCATE 10,I-1
50 PRINT LEFT$(A$,I)
60 C=C+1:IF C=5 then C=1
70 NEXT I:PRINT
80 PRINT SPC(8);"Hit any key to LCOPY !"
90 IN$=INKEY$:IF IN$=""THEN 90
100 LCOPY 2
110 END
(注) BASICモードとLCOPY文が実行できるプリンタの関係は次のとおりです。
プリンタ | コピー機能 | ||
N66-BASICモードのLCOPY | N60-BASICおよび、N60-拡張BASICモードのLCOPY | ||
1 (200×320) | 2 (400×320) | ||
PC-6021 | × | × | ○ |
PC-2021 | ○ | × | × |
PC-8023 | ○ | ○ | × |
PC-8021 / 8022 | ○ | ○ | × |
(注)LPRINT文でプリンタに出力できないコード、または、他のコードに変換されて出力されるコードがあります。
09(16進数) ... いくつかのスペースコード20(16進数)に変換されて出力されます。
14(16進数) ... 出力されません。
86~9F, E0~FF(16進数) ... それぞれA6~BF, C0~DF(16進数)に変換されて出力されます。つまりBASICのひらがなコードはカタカナコードに変換されて出力されます。
これらのコードを出力する場合は次のようにします。
10 A=255-&H14
20 B=2 AND (INP(&HC0))
30 IF B=0 THEN 20
40 OUT &H91,A
50 OUT &H93,1
60 OUT &H93,0
70 END
LPRINT文の最後にセミコロン(;)がないときは自動的に0D(16進)、および0A(16進)の2つのコードが出力されます。このコードはキャリッジリターンとラインフィードに相当しますので、このコードをプリンタに出力したくない時はLPRINT文の最後にセミコロン(;)をつけます。ただし、ダイレクトモードやプログラムの実行終了後ではセミコロン(;)をつけても上記の2つのコードは出力されます。
文字列の左側から任意の長さの文字列を与えます。
文字列式の左側から数式で指定した文字数の文字列を与えます。数式の値が文字列式の総文字数以上の場合には、文字列式のすべてを与えます。また、数式の値がOの場合にはヌルストリングを与えます。
10 CLS
20 N$="1234567890"
30 FOR I=1 TO 10
40 PRINT LEFT$(N$,I)
50 NEXT I
60 END
1
12
123
1234
12345
123456
1234567
12345678
123456789
1234567890
Ok
文字列の文字数を与えます。
表示(出力)されない文字や空白も文字数に数えます。つまり、キャラクタコードの0から255までのキャラクタはすべて文字として数えられます。
10 INPUT "あなた の おなまえは";N$
20 PRINT "'";N$;"'は";LEN(N$);" もじです。"
30 END
run
あなた の おなまえは? ほそかわ ゆうこ
'ほそかわ ゆうこ'は 8 もじです。
Ok
変数に値を代入します。
LETは省略できます。つまり、式の値を変数名に代入するには、等号だけでもよいのです。
式は数値でも文字列でもかまいませんが、変数の型と一致していなければなりません。もし、型が一致しない場合には?TM Errorになります。
10 LET A=987
20 LET B=.56
30 C=A+B
40 PRINT"A =";A
50 PRINT"B =";B
60 PRINT"A+B=";C
70 END
run
A = 987
B = .56
A+B= 987.56
Ok
フロッピィディスクにセーブされているファイルの名前、種類、大きさをプリンタに出力します。
ドライブ番号で指定された、フロッピィディスクにセーブされているファイルの名前、種類と、その大きさをプリンタに出力します。ファイルの大きさは、クラスタという単位で表示されます。
指定できるドライブ番号は1から接続しているドライブの数までです。また、ドライブ番号が省略された場合には、ドライブ1が選択されます。
出力されるファイルの種類はFILESコマンドの場合と同じです。
10 INPUT "ドライブ NO.";D
20 PRINT
30 PRINT"ドライブ"D" の FILES を プリンタ に アウトプット します"
40 LFILES D
50 PRINT
60 END
指定された2点間に直線を引きます。
2点(x1, y1)と(x2, y2)を結ぶ直線を描きます。(x1, y1)が省略された場合、その直前に実行されたグラフィック文の座標の値を採用します。直前に実行されたグラフィック文がLINE文の場合には終点の座標を採用します。また、STEPをつけると相対座標による指定になります。
引く線の色はカラーコードで指定します。省略された場合には、現在COLOR文で指定されているグラフィックスの色が用いられます。ディスプレイモードによって指定できるカラーコードが異なりますので付録7 カラーコードと色の関係を参照してください。
オプション機能は、BかBFのどちらかを指定することができます。BはBoxの意味で、(x1, y1)と(x2, y2)の2点を対角とする四角形の箱を描き、BFはBoxFillの意味でその四角形を塗りつぶします。
10 SCREEN 3,2,2:CLS
20 COLOR1,1,1
30 FOR I=0 TO150 STEP10
40 COLOR(I+10)/10
50 LINE(I,I)-(319-I,199-I),,B
60 NEXT I
70 FOR I=0 TO150 STEP10
80 COLOR(I+10)/10
90 LINE(I,I)-(319-I,199-I),,BF
100 NEXT I
110 END
メモリにあるプログラムの全部または一部を画面に表示します。
指定された開始行番号から終了行番号までのプログラムリストを画面に表示します。LISTコマンドは実行し終わると、いつでもコマンドレベルに戻ります。
開始行番号が省略された場合は、最も若い行番号のプログラム行より表示が始まります。表示はプログラムの終わり、または[STOP]キーの入力により終わります。開始行番号のみが指定された場合には、その指定された行だけが表示されます。最初の行番号とそれに続くハイフンまでが指定された場合は、その行番号から始まり、それよりも大きい行番号の行すべてが表示されます。ハイフンとそれに続く終了行番号だけが指定された場合には、プログラムの始めからその行番号までの行が表示されます。両方の行番号がハイフンでつながれて指定された場合には、その範囲のすべての行が表示されます。
10 CLS
20 PRINT" 1=LIST 2=LIST 70- 3=LIST -80"
30 PRINT" 4=LIST 20-60 5=NEW":PRINT
40 INPUT "INPUT NO.";A
50 ON A GOTO 70,80,90,100,110
60 GOT020
70 LIST
80 LIST 70-
90 LIST -80
100 LIST 20-60
110 NEW
指定した行番号が使われている行の行番号を画面に表示します。
行番号で指定された行が、参照されている文のある行の行番号を画面に表示します。参照する文とは、GOTO文、GOSUB文、ON...GOTO文、ON...GOSUB文、IF文、RESTORE文、(RUNコマンド)、(LISTコマンド)のことです。
行番号の指定を省略するとすべての行について行番号のリストを表示します。
list
10 INPUT " INPUT NO.(1-3)";A
20 ON A GOTO 40,50,60
30 GOTO 10
40 PRINT "A=1":GOTO 10
50 PRINT "A=2":GOTO 10
60 PRINT "A=3":GOTO 10
Ok
list L
00010 - 00030 00040 00050 00060
00020 -
00030 -
00040 - 00020
00050 - 00020
00060 - 00020
Ok
指定された変数名が使われているすべての行の行番号を画面に表示します。
指定された変数名とその変数名が使われている行の行番号をすべて画面に表示します。
変数名を省略するとすべての変数名についてそれぞれ使われているすべての行番号のリストを表示します。
変数名は、頭から2文字までしか表示されません。オプション文字の、“R”と“A”と“B”と“BF”、NAME文とFIELD文とOPEN文の“AS”、OPEN文の“AP[PEND]”、およびPUT文の“X [OR]”も変数名として扱われて表示されます。
なお、配列の場合には、配列変数名の後ろにカッコをつけて、単純変数名と区別します。
list
10 OPEN "データ" FOR INPUT AS #1
20 IF EOF(1) THEN END
30 INPUT #1,N,R
40 PRINT "SQR(";N;" )=";R
50 GOTO 20
Ok
list v
AS - 00010
N - 00030 00040
R - 00030 00040
Ok
メモリにあるプログラムの全部または一部をプリンタに出力します。
指定された開始行番号から終了行番号までのプログラムリストをプリンタに出力します。LISTコマンドがプログラムリストを画面に表示するのに対し、LLISTコマンドがプログラムリストをプリンタに出力すること以外は同じです。
指定した行番号が使われている行の行番号をプリンタに出力します。
行番号で指定された行が、参照されている文のある行の行番号をプリンタに出力します。LISTLコマンドが画面に表示するのに対し、LLISTLコマンドがプリンタに出力すること以外は同じです。
指定された変数名が使われているすべての行の行番号をプリンタに出力します。
指定された変数名とその変数名が使われている行の行番号をすべてプリンタに出力します。
LISTVコマンドが画面に表示するのに対し、LLISTVコマンドがプリンタに出力すること以外は同じです。
プログラムをフロッピィディスクからメモリへロードします。
ファイル名で指定されたプログラムファイルをフロッピィディスクからメモリ上に読み込みます。ロードを実行すると、開いているファイルをすべて閉じ、変数はその値が失なわれます。Rオプションをつけると、ファイルは開かれたままで、プログラムをロードし、ただちに実行を開始します。
LOADコマンドは、指定されたファイルを見つけて、実際のプログラムのロードを開始するまでは、メモリ上のプログラムを保存します。
入出力したレコード番号を与えます。
ファイル番号で指定されたファイルがランダムファイルの場合には、LOC関数は、そのランダムファイルに対して最後に読み書き(GET、PUT) したレコード番号を返します。
ファイル番号で指定されたファイルが、シーケンシャルファイルの場合には、そのファイルがオープンされてから、読み書きされたレコード数を返します。
指定されたファイルは、OPEN文によってオープンされていなければなりません。ファイル番号はOPEN文で指定したファイルの番号です。
10 INPUT "データ ファイルめい";F$
20 OPEN F$ FOR INPUT AS #1
30 IF EOF(1) GOTO 60
40 INPUT #1,D$
50 GOTO 30
60 S=LOC(1)
70 PRINT "しょよう セクタ すう="S
80 PRINT "しょよう クラスタ すう="INT(S/8)+1
90 END
カーソルの位置を指定します。
カーソルを文字またはセミグラフィックモードの画面のキャラクタ座標(x,y)の位置へ移動します。xは水平座標を表し、yは垂直座標を表します。これらは共に画面の左上を(0, 0)、N66-BASICモードの場合は右下を(39, 19)、N60-BASICおよびN60-拡張BASICモードの場合は、右下を(31, 15)とするキャラクタ座標により指定します。詳しくは、第3部文法編1-15画面上の座標系を参照してください。
10 A$="ABCDEFGHIJKLMNOPQ"
20 CLS:FOR I=1 TO 16
30 LOCATE 3+I,I-1:PRINT LEFT$(A$,I)
40 NEXT I
50 END
ファイルの総レコード数を与えます。
ファイル番号により指定されたファイルがディスクファイルの場合には、LOC関数はそのファイルの大きさをセクタ数で返します。この値は、ファイルがランダムファイルならば、そのファイルの最大レコード番号に相当します。
指定したファイルはOPEN文によってオープンされていなければなりません。ファイル番号はOPEN文で指定したファイルの番号です。
10 OPEN "じゅうしょ" AS #1
20 REM *** LOF ***
30 M=LOF(1)
40 R=0:INPUT "レコード NO.";R
50 IF R=0 THEN END
60 PR=INT((R-1)/4)+1
70 LR=R-(PR-1)*4
80 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
90 IF PR=<M THEN GET#1,PR
100 PRINT "なまえ : ";X1$
110 PRINT "じゅうしょ: ";X2$
120 PRINT "でんわ : ";X3$
130 RSET N$=X1$:RSET A$=X2$:RSET T$=X3$
140 PUT #1,PR
150 GOTO 30
自然対数を与えます。
数式の値に対する自然対数(eを底数とする対数)log e xの値を与えます。
10 FOR I=10 TO 90 STEP 10
20 PRINT " LOG(";I;")=";LOG(I)
30 NEXT I
40 END
run
LOG( 10)= 2.3025851
LOG( 20)= 2.9957323
LOG( 30)= 3.4011974
LOG( 40)= 3.6888795
LOG( 50)= 3.912023
LOG( 60)= 4.0943446
LOG( 70)= 4.2484952
LOG( 80)= 4.3820266
LOG( 90)= 4.4998097
Ok
現在のプリンタのヘッド位置を与えます。
プリンタのヘッドの水平方向の位置を与えます。
ダミーは意味を持ちません。
10 PRINT LPOS(X)
20 LPRINT "abcdefg";
30 PRINT "at 30:";LPOS(X)
40 LPRINT "hijklmnop";
50 PRINT "at 50:";LPOS(X)
60 LPRINT "qrs"
70 PRINT "at 70:";LPOS(X)
80 END
プリンタに情報を出力します。
指定した式の値や文字列をプリンタに出力します。式が省略されている場合は改行のみを行ないます。式の値や文字列を表示する領域は、あらかじめ各行を14文字ごとに分割して定められており、区切り記号にコンマを使うと次の領域の始めから、また、セミコロンを使うと直前にプリントしたもののすぐ後ろに続いて次の値や文字列が出力されます。
式の最後にセミコロンおよびコンマを指定すると改行動作をおこさず、その行で次のLPRINT文による出力を続行します。
注意:変数と"で囲まれた文字列との区切りに限って","または";"を省略することができ、このときはセミコロンと同様の働きをします。
また、数値の前に符号のための桁を確保します。
数値の絶対値が100000000以上または0.01未満になると指数形式で出力されます。
10 A=123:B=456
20 A$="dog":B$="cat"
30 LPRINT A,B
40 LPRINT A;B
50 LPRINT A,B,78,91
60 LPRINT A$;B$
70 LPRINT
80 LPRINT A;B;A$" and "B$
90 END
バッファにデータを左づめで書き込みます。
Left Setの意味でランダムファイルのバッファのFIELD文で定義した文字変数に該当する領域にデータを書き込みます。書き込むデータは文字型データでなければならず、数値データはMKS$によって文字型データに変換します。
文字列式の文字数がFIELD文で割り当てられた長さより短い場合は左づめにし、領域(フィールド)の右側を空白で満たします。また、文字列がフィールドより長い場合は、右側の部分が失われます。
10 OPEN "じゅうしょ" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/4)+1
60 LR=R-(PR-1)*4
70 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
80 IF PR=<M THEN GET#1,PR
90 PRINT "なまえ ";X1$
100 PRINT "じゅうしょ";X2$
110 PRINT "でんわ ";X3$
120 REM *** LSET ***
130 LSET N$=X1$:LSET A$=X2$:LSET T$=X3$
140 PUT #1,PR
150 GOTO 20
プログラムを合成します。
メモリ上のプログラムとファイル名により指定したプログラムファイルをフロッピィディスクから読み込みながら1つにして、メモリ上に置きます。ここで、指定されたファイルはアスキー型式でセーブされていなければなりません。そうでない場合には、エラーになります。
もし、ファイル中のプログラムと、メモリ中のプログラムに同一の行番号があった場合には、メモリ中の行をファイル中の行で、置き換えます。
MERGEコマンドは実行を終了すると、常にコマンドレベルに戻ります。
10 CLS
20 PRINT "プログラム 1"
30 PRINT
プログラム名"pgm1"
40 PRINT "この プログラム は"
50 PRINT "マージ ぶん の"
60 PRINT "れいだいです。"
70 END
プログラム名"pgm2"
Ok
load"pgm1"
Ok
merge"pgm2"
Ok
list
10 CLS
20 PRINT "プログラム 1"
30 PRINT
40 PRINT "この プログラム は"
50 PRINT "マージ ぶん の"
60 PRINT "れいだいです。"
70 END
Ok
文字列の任意の位置から任意の長さの文字列を与えます。
文字列式の数式1で指定された位置から右側に数式2で指定された長さの文字列を与えます。数式2を省略した場合、および数式2の値が文字列式の数式1で指定された位置より右側の文字数より大きい場合には、数式1で指定された位置より右側の文字列を与えます。また、文字列式の総文字数が数式1より小さい場合には、ヌルストリングを与えます。
10 A$="ABC1234567890DEF"
20 PRINT MID$(A$,4,10)
30 END
数値を5バイトの文字列に変換します。
MKS$関数は、数値データをランダム・ファイル・バッファに対してLSET文またはRSET文で書き込む時に、5バイトの文字列に変換するために使用します。数値が持つ内部表現の値をそのまま対応する文字コードにすることによって数値から文字への変換を行ないます。MKS$関数で文字に変換されているデータを数値に戻すにはCVS関数を使用します。
10 OPEN "しょうひん" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/8)+1
60 LR=R-(PR-1)*8
70 FIELD#1,(LR-1)*32 AS D$,22 AS S$,5 AS T$,5 AS N$
80 IF PR=<M THEN GET#1,PR
90 INTPU "しょうひんめい";X1$
100 INPUT "たんか ";X2
110 INPUT "すうりょう ";X3
120 LSET S$=X1$:LSET T$=MKS$(X2):LSET N$=MKS$(X3)
130 PUT #1,PR
140 GOTO 20
内蔵の機械語モニタに制御を移します。
N66-BASICモードから内蔵の機械語モニタに制御を移すためのコマンドです。機械語モニタのコマンドを参照してください。Bコマンドで、BASICモードに戻ります。
ファイルの名前を変えます。
現在のファイル名で表されているディスク上のファイルを新しいファイル名に変更します。ドライブの指定はファイル名中にドライブ番号を含めることによって行ないます。ドライブ番号を省略した場合、ドライブ1が指定されたとみなされます。
なお、ファイル名の変更を行うファイルはクローズされた状態でなければなりません。
10 CLS
20 INPUT "ドライブ NO.";D$
30 FILES VAL(D$)
40 PRINT:F1$=""
50 INPUT "げんざい の ファイルめい";F1$
60 IF F1$="" THEN END
70 INPUT "あたらしい ファイルめい ";F2$
80 F1$=D$+":"+F1$
90 F2$=D$+":"+F2$
100 NAME F1$ AS F2$
110 GOTO 20
メモリにあるプログラムを抹消し、すべての変数をクリアします。
NEWコマンドは、コマンドレベルにあるとき新しいプログラムを入力する前に、メモリにあるプログラムを抹消し、すべての変数をクリアするために実行します。NEWコマンドの実行が終わると、いつもコマンドレベルに戻ります。
NEWコマンドは、開かれているファイルがある場合は、それを自動的に全て閉じます。
list
10 PRINT "A=5 B=7 "
20 PRINT "A+B=12 A*B=35"
30 PRINT "NEW コマント゛"
40 END
Ok
run
A=5 B=7
A+B=12 A*B=35
NEW コマント゛
Ok
run
Ok
list
Ok
指定されたいずれかのサブルーチンをコールします。
数式の値によってどの行番号から始まるサブルーチンプログラムをコールするかを決定します。
行番号の並びは、1から始まる数に対応します。たとえは、数式の値が3の場合には、行番号の並びの3番目の行番号から始まるサブルーチンプログラムをコールします。
数式の値が負になった場合には?FC Errorになりますが、数式の値がOまたは行番号の並びの個数より大きい場合にはエラーにならず次の文を実行します。
10 INPUT " INPUT NO.(1-3)";A
20 ON A GOSUB 40,50,60
30 GOTO 10
40 PRINT "A=1":RETURN
50 PRINT "A=2":RETURN
60 PRINT "A=3":RETURN
run
INPUT NO.(1-3)? 1
A=1
INPUT NO.(1-3)? 2
A=2
INPUT NO.(1-3)? 3
A=3
INPUT NO.(1-3)?
指定されたいずれかの行へジャンプします。
数式の値によってプログラムのどの行番号へジャンプするかを決定します。行番号の並びは1から始まる数に対応します。たとえば、数式の値が3の場合には行番号の並びの3番目の行番号で指定した行にジャンプします。
数式の値が負になった場合には、?FC Errorになります。また、数式の値が0または行番号の並びの個数より大きい場合には、エラーにならずに次の文を実行します。
10 INPUT " INPUT NO.(1-3)";A
20 ON A GOTO 40,50,60
30 GOTO 10
40 PRINT "A=1":GOTO10
50 PRINT "A=2":GOTO10
60 PRINT "A=3":GOTO10
run
INPUT NO.(1-3)? 1
A=1
INPUT NO.(1-3)? 2
A=2
INPUT NO.(1-3)? 3
A=3
INPUT NO.(1-3)?
ファイルを開きます。
ファイル名で指定されたファイルを、指定されたファイル番号でオープンします。以後、オープンされたファイルへの入出力は、ファイル番号を指定することにより行ないます。
モードは、シーケンシャルファイルへの入出力モードを指定します。モードには、次の3種類 があります。
INPUT 既存のファイルから読み込みを行なうことを指示します。
OUTPUT 新しくファイルを作り、書き込みを行なうことを指示します。
APPEND 既存のファイルの終わりに追加して書き込みを行なうことを指示します。
INPUT、APPENDモードでは、指定されたファイルが存在しないと、?FF Errorとなります。
OUTPUTモードでは、常に指定された名前のファイルを新しく作り、同一名のファイルがあった場合には、前のファイルは削除されます。ランダムファイルでは、モードの指定を省略します。モードはFORと共に省略し、モードが省略されると、INPUT#文が使われたらシーケンシャルファイルのINPUTモード、PRINT#文が使われたらシーケンシャルファイルのOUTPUTモード、FIELD文が使われたらランダムファイルとBASICが自動的に処理します。
ファイル番号は、1から15までの値を用いることができますが、起動時またはリセット時にHow Many Files?で指定したファイルの数を超えてはなりません。また、既にオープンされているファイルが利用している番号を用いることはできません。
OPENは以後の入出力の際に用いるバッファ領域を確保し、ファイルが閉じられるまでの間、そのバッファは、指定したファイルへの入出力操作専用に用いられます。このバッファはファイル番号と同一の番号で参照されます。
指定した出力ポートに情報を出力します。
I/Oポートアドレスで指定されたポートに式で指定された値を出力します。指定できるI/Oポートアドレスおよび式の値の範囲は0から255(&HFF)までです。I/Oポートアドレスと装置との対応は、I/Oポートアドレスを参照してください。
10 OUT&HA0,7:OUT&HA1,7
20 OUT&HA0,8:OUT&HA1,8
30 FOR I=0 TO 31
40 OUT&HA0,6:OUT&HA1,I
50 FOR J=1 TO 50:NEXT J
60 NEXT I
70 PRINT"STOPキー を おしてください。"
80 END
タッチパネルからの入力の有無を検出して、入力座標を与えます。
ジョイスティック端子2に接続したタッチパネルからの入力の有無を検出し、もし入力があれば、その入力座標を求める関数です。
機能は次のように対応しています。
f=0 → 入力の有無を検出します。入力がない時は0、ある時は1を与えます。
f=1 → PAD(0)=1の時、そのx座標を与えます。与える値の範囲は0から255までです。
f=2 → PAD(0)=1の時、そのy座標を与えます。与える値の範囲は0から255までです。
10 REM *** PAD ***
20 SCREEN 3,2,2:COLOR5,1:CLS
30 IF PAD(0)=0 GOTO 30
40 X=PAD(1)*320/256
50 Y=PAD(2)*200/256
60 PSET(X,Y),5:GOTO 30
指定された境界色で囲まれた領域を指定された色で塗りつぶします。
(x, y)により指定された点を含む境界色で囲まれた領域を、指定された領域色で塗りつぶします。STEPをつけると相対座標となります。
領域色、境界色はともにカラーコードで指定します。領域色が省略された場合には、現在COLOR文で指定されているグラフィックスの色が用いられます。境界色が省略された場合には、以前にPAINT文で指定した色が境界色として用いられます。ディスプレイモードによって指定できるカラーコードが異なりますので付録7 カラーコードと色の関係を参照してください。(x, y)は塗り始める座標を指定します。もしこの点が、既に指定された境界色と同じ色であった場合には、PAINTは何の画面操作も行ないません。
10 SCREEN 3,2,2:COLOR 3,,1:CLS
20 FOR I=1 TO 8
30 X1=INT(RND(1)*319)
40 X2=INT(RND(1)*319)
50 Y1=INT(RND(1)*199)
60 Y2=INT(RND(1)*199)
70 LINE(0,Y1)-(319,Y2),8
80 LINE(X1,0)-(X2,319),8
90 LINE(X1,Y1)-(X2,Y2),8,B
100 NEXT I
110 FOR C=1 TO 2
120 FOR I=1 TO 16
130 X1=INT(RND(1)*319)
140 Y1=INT(RND(1)*199)
150 PAINT(X1,Y1),I,8
160 NEXT I
170 NEXT C
メモリの指定されたアドレスの内容を与えます。
アドレスによって指定されたメモリ番地の内容を与えます。アドレスは0~65535(&H0~&HFFFF)の値でなければならず、もし小数点以下がある場合、整数化してから実行します。
与えられる数値は1バイトの整数です。
10 FOR I=1 TO 80
20 C=PEEK(&HFB3C+I)
30 IF C<32 OR C>253 GOTO 50
40 PRINT CHR$(C);
50 IF (I AND 7)=0 THEN PRINT
60 NEXT I
70 END
音声を発生します。
PLAY文は音楽を発生する文で、三重奏まで可能です。ボイス文字列は、音階を表すA~Gまでのアルファベットと、音の長さを表す数字が基本になっています。その他にオクターブ、音量、エンベロープの周期の形状、テンポなどの指定ができます。詳しくは第3部文法編の1-18サウンドを参照してください。
文字 | 意味 | 例 |
---|---|---|
Mx | エンベロープ周期の設定 (1≦x≦65535) | M500 |
Sx | エンベロープ形状の設定 (0≦x≦15) | S13 |
Vx | 音量の設定 (0≦x≦15) | V10 |
Lx | 長さの設定 (1≦x≦64) | L8 |
Ox | オクターブの設定 (1≦x≦8) | O5 |
Tx | テンポの設定 (32≦x≦255) | T120 |
Rx | 休符の設定 (1≦x≦64) | R8 |
+ | 音を半音上げる | F+ |
- | 音を半音下げる | B- |
10 A$="T200S14O5CDEFGEG"
20 B$="T200S14O5CCO4GGEEE"
30 C$="T200S14O5EFGAGBAGO6CCEECC"
40 PLAY A$,B$,C$
50 END
指定した座標のドットの色を与えます。
(x, y)により指定された画面上に表示されているドットの色をカラーコードで与えます。STEPをつけると相対座標となります。与えられるカラーコードはディスプレイモードによって色が異なりますので付録7 カラーコードと色の関係を参照してください。
10 SCREEN 3,2,2
20 COLOR,1
30 CLS
40 PSET (110,10),2
50 PSET (110,21),3
60 PSET (110,32),4
70 FOR I=10 TO 43 STEP11
80 PRINTI:POINT(110,I)
90 NEXT I
100 GOTO 100
メモリ上に指定されたアドレスに情報を書き込みます。
指定されたメモリ上の番地に、1バイト(8ビット)のデータを書き込みます。
数式は書き込まれるデータで、0~255(&H0~&HFF)の値でなければなりません。もし小数点以下があると整数化してから実行されます。
アドレスは2バイトの整数で、0~65535(&H0~&HFFFF)の値です。
ただし、この命令は現在のメモリの内容を書き換えてしまうため、不用意に使うとBASICが使っている作業領域を壊してしまい誤動作の原因となることもあります。使う時には、メモリマップなどで使用可能な領域かどうかを確認してください。
POKE文の逆の働きをする関数としてPEEK関数というものも用意されています。これらPOKEとPEEKは、効率的なデータの格納や機械語サブルーチンの引数の受け渡しなどに役立ちます。
10 CLEAR300,&HD000:RESTORE
20 READ AD$:BD=VAL("&H"+AD$):AD=BD
30 FOR I=1 TO 41
40 READ NO$:NO=VAL("&H"+NO$)
50 POKE AD,NO
60 AD=BD+I
70 NEXT I
80 PRINT " HIT any key !"
90 IN$=INKEY$:IF IN$=""THEN90
100 EXEC BD:PRINT:GOTO80
110 DATA D400
120 DATA3e,00,32,58,fa,3e,50,cd
130 DATAc7,26,3e,4f,cd,c7,26,3e
140 DATA4b,cd,c7,26,3e,45,cd,c7
150 DATA26,3e,ec,cd,c7,26,3e,de
160 DATAcd,c7,26,3e,fd,cd,c7,26
170 DATAc9
カーソルの水平位置を与えます。
ダミーは定数でも変数でもかまいません。N66-BASICモードの場合には、関数の値の範囲が0~39で、画面の左端が0、右端が39となっています。また、N60-BASICおよびN60-拡張BASICモードの場合には、0~31で、画面の左端が0、右端が31となります。
10 CLS
20 FOR I=0 TO 16
30 LOCATE I*2,I:PRINT POS(X)
40 NEXT I
50 END
任意のドットの色を背景の色にします。
(x, y)で表わされるドットをリセットします。STEPをつけた場合は相対座標による指定となります。
つまり、(x, y)で指定されたドットを、現在COLOR文で指定されている背景の色で点を塗り変えます。
10 SCREEN 3,2,2:COLOR1,1:CLS
20 FOR C=1 TO 16
30 COLOR ,C
40 PRESET(C*20,C*10)
50 NEXT C
アクティブ画面に情報を表示します。
指定した式の値や文字列を画面に表示します。式が省略されている場合は改行のみを行ないます。式の値や文字列を表示する領域は、あらかじめ各行を14文字ごとに分割して定められており、区切り記号にコンマを使うと次の領域の始めから、またセミコロンを使うと直前にプリ ントしたもののすぐ後ろに続いて次の値や文字列が表示されます。
式の最後にセミコロン及びコンマを指定すると改行動作をおこさず、その行で次のPRINT文による出力を続行します。
変数と"で囲まれた文字列との区切りに限って","、または";"を省略することができ、このときはセミコロンと同様の働きをします。
数値の前に符号のための桁を確保します。数値の絶対値が100000000以上または0.01未満になると指数形式で表示されます。
この命令"PRINT"の簡略形として疑問符(?)を使用することができます。
数値を表示する場合に、その数値が現在のカーソルの位置より後方に表示しきれない時、表示すると次の行にわたるような時には改行して表示します。
10 A=123:B=456
20 A$=""せんとう":B$="へいわ"
30 PRINT A;B:789
40 PRINT A,B,789
50 PRINT A$;B$
60 PRINT A;B,A$;" と "B$
70 END
シーケンシャルファイルにデータを書き込みます。
ファイル番号は、OPEN文によって、そのファイルをOUTPUTまたはAPPENDモードとしてオープンしたときに指定した番号です。
式はファイルに書き込まれる数値式または文字式です。
PRINT#文はPRINT文で画面へ表示する時とまったく同じように書き込みます。ですから、 これらのデータがフロッピィディスクから正しく読み込むことができるように、適切に区切ってフロッピィディスクに書き込むように注意してください。
①式の並びにおいて、数値式はセミコロンで区切るようにしてください。たとえば、
PRINT#1,A;B;C;X;Y;Z
もし区切り記号にコンマを使うと、プリント領域の問に挿入される余分な空白もフロッピィディスクに書き込んでしまいます。
②同様の理由で、式の並びの中の文字式もセミコロンで区切ってください。ただし、ディスク上に文字式を正しく書き込むためには、式と式の間に独立した区切り記号を入れてください。
例をあげると、A$="PC-"そして、B$="6601"のときの次の文、
PRINT#,A$;B$
はフロッピィディスクにPC-6601と書き込みます。これは区切り記号がありませんから2つの別の文字列として読み込むことはできません。この問題を解決するには、次のようにPRINT#文中に区切り記号”,”を入れてください。
PRINT#1,A$;",";B$
これによってフロッピィディスクに書き込まれるイメージは
PC-,6601
となり、2つの文字変数として読み込むことができます。
もし、文字列それ自身がデータとしてコンマ、セミコロン、意味のあるはじめの空白、キャリッジリターン、またはラインフィードなどを含む場合は、別のダブルクォーテーションCHR$(34)で囲んでディスクに書き込んでください。
たとえば、A$="NEC,PC-"でコンマが含まれている場合には、
PRINT#1,CHR$(34);A$;CHR$(34);CHR$(34);B$;CHR$(34)
とします。フロッピィディスクには次のように書き込まれます。
"NEC,PC-""6601"
10 OPEN"データ" FOR OUTOUT AS #1
20 FOR I=1 TO 10
30 N=INT(RND(1)*1000)
40 R=SQR(N)
50 PRINT #1,N;R
60 NEXT I
70 CLOSE #1
80 END
情報を出力します。
PRINT#文は、INPUT文に似ていて、情報を出力しますが、出力機器番号を指定することによって出力機器を変えることができます。
出力機器と出力機器番号は次のように対応しています。
PRINT#-0 ... ディスプレイ
PRINT#-1 ... カセットテープ
PRINT#-2 ... RS-232C
PRINT#-3 ... プリンタ
PRINT#-4 ... ボイスシンセサイザー(PC-6053)
ディスクファイルのうち、シーケンシャルファイルへの出力もPRINT#文を使います。出力機器を指定する場合は、"PRINT#"のあとにマイナス(-)がつきますので気をつけてください。
情報(データ)の出力方法はPRINT#文と同じですのでPRINT#文を参照してください。
10 DIM A$(2),B$(2),C$(2)
20 PRINT " キーボードから もじを 3かい INPUT してください。"
30 FOR I=0 TO 2
40 INPUT#-0:A$(I)
50 NEXT I:PRINT
60 PRINT " *がめんに ひょうじします。"
70 PRINT "hit any key or RETURN to END"
80 IN$=INKEY$:IF IN$=""THEN80
90 IF ASC(IN$)=13 THEN END
100 FOR I=1 TO 3
110 PRINT#-0,I;" ";A$(I-1)
120 NEXT I
130 END
任意のドットの色を指定します。
(x, y)の位置に任意の色の点を描きます。STEPをつけると相対座標による指定となります。
点の色はカラーコードによって指定します。省略された場合には、現在COLOR文で指定されているグラフィックスの色が用いられます。指定できるカラーコードはディスプレイモードによって色が異なりますので付録7 カラーコードと色の関係を参照してください。
10 SCREEN 3,2,2:COLOR,1:CLS
20 FOR C=1 TO 16
30 PSET(C*20,90),C
40 NEXT C
バッファ中のデータをランダムファイルに書き込みます。
ファイル番号で指定されたファイルに、対応するバッファの内容を書き込みます。指定されたファイルは、ランダムファイルとしてOPEN文でオープンされていなければなりません。ファイル番号はOPEN文で指定したファイル番号です。バッファ中のデータ256バイトは指定されたレコードに書き込まれます。レコード番号が省略された場合には、直前に行なわれたGET文、またはPUT文で指定されたレコードの次のレコードに書き込まれます。
10 OPEN "じゅうしょ" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/4)+1
60 LR=R-(PR-1)*4
70 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
80 IF PR=<M THEN GET#1,PR
90 PRINT "なまえ ";X1$
100 PRINT "じゅうしょ";X2$
110 PRINT "でんわ ";X3$
120 LSET N$=X1$:LSET A$=X2$:LSET T$=X3$
130 REM *** PUT ***
140 PUT #1,PR
150 GOTO 20
GET〔@〕文でセーブされたグラフィック情報をロードします。
① GET[@]文によって配列にセーブしたグラフィック情報を画面上の任意の位置に表示します。
配列変数名は表示したいグラフィックパターンがセーブされている数値配列変数名です。
②GET[@]文によってフロッピィディスクにセーブしたグラフィック情報を、フロッピィ ディスクからロードして画面上の任意の位置に表示します。
条件とは、グラフィック情報を画面に表示する際、いろいろな機能を指定できるもので、次 のものが用意されています。
PSET グラフィック情報をそのまま表示します。
PRESET グラフィック情報をリバース(逆)にして表示します。
OR グラフィック情報と、既にある画面上のグラフィック情報を1ドットごとにOR (論理和)し、その結果を画面に表示します。
AND グラフィック情報と画面上の情報をドットごとにAND (論理積)し、その結果を画面に表示します。
XOR グラフィック情報と画面上の情報をドットごとにXOR (排他的論理和)し、その結果を画面に表示します。
10 DIM D(20,20)
20 SCREEN 3,2,2:COLOR 2,1,1:CLS
30 FOR I=6 TO 36 STEP 6
40 CIRCLE(30,40),I,16,,,(.9+I/50)
50 NEXT I
60 GET@(0,0)-(60,80),D
70 PUT@(70,0),D
80 PUT@(90,20),D,OR
90 PUT@(110,40),D,AND
100 PUT@(130,60),D,XOR
110 PUT@(150,80),D,PSET
120 PUT@(170,100),D,PRESET
130 GOTO 130
DATA文に格納してあるデータを読み込み、変数に割り当てます。
READ文はいつでもDATA文と組み合わせて使います。READ文はDATA文のデータを1対1対応の方法で変数に割り当てていきます。READ文の変数は数値変数でも文字変数でもかまいませんが、読み出された値と変数の型が一致していなければなりません。もし、型が一致しない場合には?SN Errorになります。
1つのREAD文が1つまたはそれ以上のDATA文を参照したり、また、いくつかのREAD文が1つのDATA文を参照することができます。DATA文が複数ある場合には順番に参照します。もし、READ文の変数がDATA文のデータの個数より多い時には?OD Errorになります。READ文で指定された変数がDATA文のデータの個数よりも少ない場合には、次のREAD文が、読まれなかった残りのデータを読みます。もし、それ以上READ文がない場合には、残りのデータは無視されます。
いくつかあるDATA文のうち任意のDATA文のデータを読み出したり、繰り返し同じデータを読み出したりしたい時にはRESTORE文を使います。
10 READ A,B,C,D,E,F,G,H,I,J
20 AV=(A+B+C+D+E+F+G+H+I+J)/10
30 PRINT "へいきん=";AV
40 END
50 DATA 11,18,4,6,8,3,15,14,2,5
run
へいきん= 8.6
Ok
プログラムに注釈を入れます。
REM文は非実行文であり、プログラムの実行に影響を与えずコメント行とすることができます。プログラムリストでは入力した内容がそのまま出力されます。また、REM文はGOTO文、GOSUB文の飛先として使うことは可能です。
REM文の行はコロンも注釈文中の文字とみなされるのでコロンで区切って他の文を続けることはできません。
10 REM rem ぶん の れい
20 FOR I=1 TO 38
30 READ A$
40 PRINT A$;:FOR J=0 TO 50:NEXT J
50 NEXT I
60 END
70 DATA R,E,M,ふ,゛,ん,は," ",フ,゜
80 DATA ロ,ク,゛,ラ,ム,に," ",ち,ゅ,う,し
90 DATA ゃ,く,を," ",つ,け,る,と,き,に
100 DATA " ",も,ち,い,ま,す,。
run
REMぶんは プログラムに ちゅうしゃくを つけるときに もちいます。
Ok
プログラムの行番号を整理します。
新行番号は、新しくつける行番号の最初の行番号で、省略した場合は10です。現在の行番号は行番号のつけ替えを始める現在のプログラムの行番号です。省略値はそのプログラムの最初の行番号です。
RENUMコマンドは、また、GOTO、GOSUB、THEN、ON...GOTO、およびON...GOSUBなどで参照している行番号の行が存在しない場合には、“Undefined line xxxxx in yyyyy”が表示されます。この場合、誤った行番号 xxxxx はRENUMコマンドによってスペース5桁におきかえられ、行番号(yyyyy)は変更されます。
RENUMコマンドをプログラム行の順序を変えるのに使うことはできません。たとえば、10、20、30の3つの行がある場合に、RENUM15,30とすることはできません。また、65530以上の行番号を発生することもできません。このような場合には、?FC Errorとなります。
1 REM
2 REM
10 SCREEN 3,2,2:CLS
20 IF PAD(0) THEN 40
30 GOTO 20
40 PSET((PAD(1)),(PAD(2))),4:GOTO 20
renum
Ok
10 REM
20 REM
30 SCREEN 3,2,2:CLS
40 IF PAD(0) THEN 60
50 GOTO 40
60 PSET((PAD(1)),(PAD(2))),4:GOTO 40
READ文で読み込むデータを指定します。
READ文で読むDATA文を指定します。行番号が省略されると、次にくるREAD文はプログラム中の最初のDATA文から読み始めます。行番号を指定すると、指定された行のDATA文から読み始めます。
10 RESTORE:READ A,B,C,D,E,F,G
20 PRINT A,D,F
30 RESTORE 100
40 READ A$,B$,C$,D$,E$,F$,G$
50 PRINT A$;B$;C$;D$;E$;F$;G$
60 END
70 DATA 1,4,6
80 DATA 2,5,3
90 DATA 7,8,9,0
100 DATA P,C,-
110 DATA 6,0,0,1
120 DATA A,B,C,D,E,F,G
run
1 2
3
PC-6001
Ok
文字列の右側から任意の長さの文字列を与えます。
文字列式の右側から数式で指定した文字数の文字列を与えます。数式の値が文字列式の総文字数以上の場合には、文字列式のすべてを与えます。また、数式の値がOの場合にはヌルストリングを与えます。
10 FOR I=1 TO 5
20 READ X$
30 IF RIGHT$(X$,2)="fe" OR RIGHT$(X$,2)="ce" THEN PRINT X$;" ";
40 NEXT I
50 END
60 DATA "boy","piano","voice","desk","knife"
run
voice knife
Ok
0から1の間の乱数を与えます。
0以上1未満の乱数を与えます。発生する乱数は機能の値によって次のように異なります。
f > 0 → ...... 同一乱数系列の次の乱数を発生します。
f = 0 → ...... 1つ前に発生した乱数を与えます。つまり、同じ値を繰り返します。
f < 0 → ...... 新しい乱数系列を設定して乱数を発生します。
10 FOR I=1 TO 10
20 A=RND(1)
30 PRINT A,INT(A*10)
40 NEXT I
50 END
バッファに右づめで書き込みます。
Right Setの意味でランダムファイルのバッファのFIELD文で定義した文字変数に該当する領域にデータを書き込みます。書き込むデータは文字型データでなければならず、数値データはMKS$によって文字列型データに変換します。
文字列式の文字数がFIELD文で割り当てられた長さより短い場合は右づめにし、領域(フィールド)の左側の空白を満たします。また、文字列がフィールドより長い場合は、左側の部分が失われます。
10 OPEN "じゅうしょ" AS #1
20 M=LOF(1)
30 R=0:INPUT "レコード NO.";R
40 IF R=0 THEN END
50 PR=INT((R-1)/4)+1
60 LR=R-(PR-1)*4
70 FIELD#1,(LR-1)*64 AS D$,20 AS N$,30 AS A$,14 AS T$
80 IF PR=<M THEN GET#1,PR
90 PRINT "なまえ ";X1$
100 PRINT "じゅうしょ ";X2$
110 PRINT "でんわ ";X3$
120 REM *** RSET ***
130 RSET N$=X1$:RSET A$=X2$:RSET T$=X3$
140 PUT #1,PR
150 GOTO 20
プログラムの実行を開始します。
①メモリにあるプログラムの実行を開始します。行番号を指定すると、その行から実行が始まります。指定のない場合には、行番号の最も若い行から実行が始まります。プログラムの実行が終わるとコマンドレベルに戻ります。
②ファイル名で指定されるプログラムをフロッピィディスクからメモリにロード後実行を開始します。
RUNコマンドを実行すると、すべての開いているファイルは閉じ、目的のプログラムをロードする前にメモリの内容をクリアします。しかし、Rオプションをつけた場合には、すべてのデータファイルは開いたままになります。
10 PRINT SPC(4);"NEC パソコン "
20 PRINT SPC(2);"インフォメーション センター"
30 PRINT
40 PRINT" みなとく ";
50 PRINT" しば 5-33-1"
60 PRINT
70 PRINT SPC(3);"(03) 452-8000"
80 END
メモリにあるプログラムをフロッピィディスクにセーブします。
ファイル名で指定されるフロッピィディスク内のファイルにプログラムを書き込みます。指定したファイル名と同じ名前のファイルが存在する場合には、更新され、存在しない場合には新しくファイルが作られます。
Aオプションが指定された場合には、プログラムはアスキー型式でセーブされます。オプションの指定がない場合には、バイナリ型式でプログラムのセーブが行なわれます。アスキー型式のセーブはバイナリ型式よりも多くのファイルスペースを必要としますが、セーブされたプログラムファイルを操作する場合には、アスキー型式でセーブされていることを必要とします。たとえば、MERGEコマンドは、アスキー型式のファイルを必要とします。また、アスキー型式でセーブされたファイルは、データファイルとして読み出すことができます。
画面のモード選択を行います。
グラフィック画面に対しての種々のモードを設定します。 ディスプレイモードは4種類でそれぞれ次のような特徴があります。
1 | 文字モード | 40文字×20行 | 15色 |
2 | セミグラフィックモード | 80文字×40ドット | 15色 |
3 | 15色グラフィックモード | 160文字×200ドット | 15色、8色 |
4 | 4色グラフィックモード | 320×200ドット | 4色 |
なお、画面1ではディスプレイモードを3および4にすることはできません。
文字またはグラフィックスが有効になる画面はアクティブ画面と言い、文字やグラフィックスの命令を実行する画面を番号で指定します。
表示される画面はビジュアル画面と言い、表示する画面を番号で指定します。また、プログラムの実行中以外の場合には、ビジュアル画面をPAGEキーを押すと変えることができます。
指定できるアクティブ画面およびビジュアル画面の番号は1から起動またはリセット後に、"How Many Pages?"で指定した数までです。たとえば、画面数を2に指定した場合、指定できる画面番号は1または2です。
N60-BASICおよびN60-拡張BASICモードの場合のディスプレイモードについては付録1 N66-BASICとN60-BASICの違いを参照してください。 なお、関数のSCREENの場合はSCREEN(関数)を参照してください。
10 INPUT"SCREEN NO.(3 or 4)";S
20 IF S<3 OR S>4THEN 10
30 SCREEN S,2,2:CLS
40 COLOR1,1,1
50 FOR I=0 TO 90 STEP 6
60 COLOR(I+6)/6
70 LINE(I,I)-(319-I,199-I),,B
80 NEXT I
90 FOR I=0 TO 90 STEP 6
100 COLOR(I+6)/6
110 LINE(I,I)-(319-I,199-I),,BF
120 NEXT I:GOTO10
指定した位置のアスキーコードを与えます。
(x, y)により指定された画面上に表示されているキャラクタのアスキーコードを与えます。 なお、コマンドのSCREENはSCREEN(コマンド)を参照してください。
10 FOR I=0 TO 4
20 PRINT HEX$(SCREEN(I,0))
30 NEXT I
40 END
符号を調べ、正なら1、ゼロなら0、負なら-1を与えます。
数式の値が正なら1、ゼロなら0、負なら-1を与えます。
10 INPUT X,Y,Z
20 PRINT "X=";X,"Y=";Y,"Z=";Z
30 PRINT SGN(X*Y*Z)
40 END
run
? -1,0,2
X=-1 Y= 0
Z= 2
0
Ok
正弦(サイン)を与えます。
数式の値に対する三角関数sin xの値を与えます。
10 FOR I=0 TO 60 STEP 30
20 H=I*3.14159265/180
30 PRINT"X=";I;"゜";
40 PRINT SPC(3):PRINT " サイン のあたいは";SIN(H)
70 PRINT:NEXT I
80 END
run
X= 0゜ サイン のあたいは 0
X= 30゜ サイン のあたいは .5
X= 60゜ サイン のあたいは .8660254
Ok
サウンドLSIに直接命令を与えます。
SOUND文は、PC-6601本体内に実装されているサウンドLSIに直接呼びかける文です。指定されたレジスタに、数式で指定された値を代入します。レジスタは全部で16個あり、それぞれのレジスタは以下の表のとおりです。詳しくは第3部文法編の1-18 サウンドを参照してください。
ビット | |||||||||
B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 | ||
レジスタ | |||||||||
R0 | チャンネルA周波数 | 8BIT FT A | |||||||
R1 | 4BIT CT A | ||||||||
R2 | チャンネルB周波数 | 8BIT FT B | |||||||
R3 | 4BIT CT B | ||||||||
R4 | チャンネルC周波数 | 8BIT FT C | |||||||
R5 | 4BIT CT C | ||||||||
R6 | ノイズ周波数 | 5BIT NP | |||||||
R7 | チャンネル設定 | ~IN/OUT | ~NOISE | ~TONE | |||||
IOB | IOA | C | B | A | C | B | A | ||
R8 | チャンネルA音量 | M | L3 | L2 | L1 | L0 | |||
R9 | チャンネルB音量 | M | L3 | L2 | L1 | L0 | |||
R10 | チャンネルC音量 | M | L3 | L2 | L1 | L0 | |||
R11 | エンベロープ周期 | 8BIT FT | |||||||
R12 | 8BIT CT | ||||||||
R13 | エンベロープ形状 | E3 | E2 | E1 | E0 | ||||
R14 | I/Oポート Aデータ | 8BITパラレルI/OポートA | |||||||
R15 | I/Oポート Bデータ | 8BITパラレルI/OポートB |
10 FOR I=1 TO 3
20 SOUND 7,7
30 FOR J=8 TO 15
40 FOR K=0 TO 15
50 SOUND J,K
60 NEXT K
70 FOR K=15 TO 0 STEP -1
80 SOUND J,K
90 NEXT K,J,I
100 END
任意の数だけ空白を与えます。
SPC関数はPRINT文やLPRINT文など出力文中でのみ使用することができます。
数式の値は、0から255まで許されます。
10 PRINT "ABC";
20 PRINT SPC(3);
30 PRINT "DEF";
40 PRINT "ABC";
50 PRINT TAB(3);
60 PRINT "DEF";
70 END
平方根(ルート)を与えます。
数式の値の平方根√xを与えます。
10 FOR I=1 TO 9
20 PRINT " ルート";I;" は";SQR(I);" です。"
30 NEXT I
40 END
run
ルート 1 は 1 です。
ルート 2 は 1.4142136 です。
ルート 3 は 1.7320508 です。
ルート 4 は 2 です。
ルート 5 は 2.236068 です。
ルート 6 は 2.4494897 です。
ルート 7 は 2.6457513 です。
ルート 8 は 2.8284271 です。
ルート 9 は 3 です。
Ok
ジョイスティックの状態を与えます。
ジョイステックまたはキーボードのカーソルキーの状態を与えます。機能は次のようになっています。
f=0 → キーボードのカーソルキー
f=1 → ジョイスティック1のスティック
f=2 → ジョイスティック2のスティック
与えられる値は1から8までの数値で、その数値は方向を表わしています。
10 PRINT STICK(0);
20 PRINT STICK(1);
30 PRINT STICK(2)
40 GOTO 10
プログラムの実行を停止して、コマンド待ちになります。
STOP文はプログラムの実行を停止するためのもので、プログラム中のどこで使用してもかまいません。
STOP文を実行すると、次のメッセージが表示されます。 Break in 口口(口口は停止した行番号)
CONTコマンドによりプログラムの実行を再開できます。ただし、プログラムの実行停止中にプログラムの修正を行なった場合には再開できません。
10 INPUT"INPUT NO.(1 OR 2)";N
20 IF N=1 THEN PRINT"おしまい !":END
30 IF N=2 THEN PRINT"とまっちゃった。":STOP
40 GOTO 10
run
INPUT NO.(1 OR 2)? 2
とまっちゃった。
Break in 30
Ok
数値を文字列に変換します。
数式によって指定された値を文字列に変換します。
10 A=1983:B=8:C=20
20 PRINT STR$(A)+"年";STR$(B)+"月";STR$(C)"+"日"
30 END
run
1983年 8月 20日
Ok
ジョイスティックのトリガーボタンの状態を与えます。
ジョイスティックのトリガーボタンまたはキーボードのスペースキーの状態を与えます。機能は次のようになっています。
f=0 → キーボードのスペースキー
f=1 → ジョイスティック1のトリガーボタン
f=2 → ジョイスティック2のトリガーボタン 与えられる値は0か1で、トリガーボタンまたは、スペースキーが押されていれば1、押されていなければ0を与えます。
10 PRINT STRIG(0);
20 PRINT STRIG(1);
30 PRINT STRIG(2)
40 GOTO 10
現在のカーソルがある行の先頭から任意の位置まで空白を与えます。
TAB関数はPRINT文やLPRINT文など出力文中のみで使用されます。
数式の値は、0から255(0が左端)まで許されます。
10 FOR I=1 TO 7
20 IF 8-I=4 THEN 110
30 IF 8-I>I THEN 50
40 GOTO80
50 PRINT TAB(I);CHR$(49+I)
60 PRINT TAB(8-I);CHR$(49+I)
70 GOTO120
80 PRINT TAB(8-I);CHR$(49+I);
90 PRINT TAB(I);CHR$(49+I)
100 GOTO 120
110 PRINT TAB(I);CHR$(49+I)
120 NEXT I
130 END
音声を出力します。
男性または女性の声で音声を出力します。
音声の文字列は、声の種類、声の大きさ、および30音節以内の言葉から成り、その作り方は第3部文法編の1-19 音声合成を参照してください。
なお、TALK文では、N66-BASICがVRAM用領域&H0~&H3FFFをワークエリアとして使用していますので、TALK文実行時にそのエリアのデータが失なわれることを覚えておいてください。&H0~&H3FFFのエリアはHow Many Pages?で指定した画面数の最大画面番号の画面エリアです。そのため、How Many Pages?では画面数を2以上に指定してください。
10 TALK "f2 o +hayo-."
20 TALK "f2 ^kox niciwa."
30 TALK "f2 ^kox banwa."
40 TALK "m2 sayoo' na'ra."
50 A$="saita/saita/cyuriqpu no hanaga."
60 B$="cdercderge8e8dcded"
70 TALK "f2#+A$+":"+B$
80 END
正接(タンジェント)を与えます。
数式の値に対する三角関数tan xの値を与えます。
10 FOR I=0 TO 60 STEP 30
20 H=I*3.14159265/180
30 PRINT"X=";I;"゜";
40 PRINT SPC(3):PRINT "タンジェント のあたいは";TAN(H)
70 PRINT:NEXT I
80 END
run
X= 0゜ タンジェント のあたいは 1
X= 30゜ タンジェント のあたいは .57735027
X= 60゜ タンジェント のあたいは 1.7320508
Ok
BASICが組み込み関数として用意していない三角関数のうち、いくつかは用意された関数を使って作り出すことができます。以下の数式を参考にしてDEFFN文で定義してください。
目的とする関数 | 組み込み関数からの誘導式 |
---|---|
セカント | SEC(X)=1/COS(X) |
コセカント | CSC(X)=1/SIN(X) |
コタンジェント | COT(X)=1/TAN(X) |
ハイパーボリック・サイン | SINH(X)=(EXP(X)-EXP(-X))/2 |
ハイパーボリック・コサイン | COSH(H)=(EXP(X)+EXP(-X))/2 |
ハイパーボリック・タンジェント | TANH(X)=-EXP(-X)/(EXP(X)+EXP(-X))*2+1 |
ハイパーボリック・セカント | SECH(X)=2/(EXP(X)+EXP(-X)) |
ハイパーポリック・コセカント | CSCH(X)=2/(EXP(X)-EXP(-X)) |
ハイパーボリック・コタンジェント | COTH(X)=EXP(-X)/(EXP(X)-EXP(-X))*2+1 |
ハイパーボリック・アークサイン | ARCSINH(H)=LOG(X+SQR(X*X+1)) |
ハイパーボリック・アークコサイン | ARCCOSH(X)=LOG(X+SQR(X*X-1)) |
ハイパーボリック・アークタンジェント | ARCTANH(X)=LOG((1+X)/(1-X))/2 |
ハイパーボリック・アークセカント | ARCSECH(X)=LOG((SQR(-X*X+1)+1)/X) |
ハイパーボリック・アークコセカント | ARCCSCH(X)=LOG((SGN(X)*SQR(X*X+1)+1)/X) |
ハイパーボリック・アークコタンジェント | ARCCOTH(X)=LOG((X+1)/(X-1))/2 |
たとえば、sec(x)の定義は次のようになります。
DEFFN SEC(X) = 1/COS(X)
(2/975)秒ごとに最下位の桁が2ずつ増えるタイマーを与えます。
(2/975)秒ごとに最下位の桁が2ずつ増えるタイマーですので、4桁目が約1秒(1.02564秒)になります。これを補正して1秒を単位とするタイマーのプログラムを例に示します。
ただし、TIME関数はハードウェアの影響を受けるため、正確なタイマーとして使用できません。
10 CLS
20 X=TIME
30 Y=TIME-X
40 Z=INT(Y/975)
50 LOCATE 19,9:PRINT Z
60 GOTO 30
機械語で作られたルーチンを呼び出します。
作成した機械語関数ルーチン(ユーザ関数)を呼び出します。ユーザ関数はあらかじめメモリ内に準備されており、その実行開始番地が設定されていなければなりません。実行開始番地の設定は&HFAEB番地に開始番地の下位8ビット、&HFAEC番地に上位8ビットをPOKE文で書き込むことによって行ないます。
引数によりBASICから機械語ルーチンへの値の受け渡しをすることができます。引数の値の範囲は-32768から32767の間です。機械語プログラム中で引数の値を受けとるには、&H741番地をコールするとDEレジスタに値が代入されます。
BASICにデータを引き渡すには、ABレジスタにデータをロードした後、&HD16番地にジャンプさせます。
10 CLEAR 300,&HDFDF
20 POKE&HFAEB,&HE0
30 POKE&HFAEC,&HDF
40 FORI=&HDFE0 TO &HDFF3
50 READ D$:D=VAL("&h"+D$)
60 POKE I,D:NEXT I:PRINT "?";
70 A$=INKEY$:IFA$=""GOTO70
80 A=ASC(A$):IFA=13 THEN END
90 A=USR(A)
100 PRINT CHR$(A);:GOTO 70
110 DATA cd,41,07,7b,fe,61,38,06
120 DATA fe,7b,30,02,d6,20,47,af
130 DATA cd,16,0d,c9
文字列の表わす数値に変換します。
文字列を数値に変換します。もし、文字列の最初の文字が+、-、&または数字以外ならば、VALの値は0になります。また、文字列の途中で数値に変換できない文字がある場合には、その文字以後の文字列を無視します。文字列中のスペースも無視します。
10 FOR I=0 TO 15
20 PRINT "16しんの ";HEX$(I);" の 10しんすうは";VAL("&H"+HEX$(I))
30 NEXT I
40 END
run
16しんの 0 の 10しんすうは 0
16しんの 1 の 10しんすうは 1
16しんの 2 の 10しんすうは 2
16しんの 3 の 10しんすうは 3
16しんの 4 の 10しんすうは 4
16しんの 5 の 10しんすうは 5
16しんの 6 の 10しんすうは 6
16しんの 7 の 10しんすうは 7
16しんの 8 の 10しんすうは 8
16しんの 9 の 10しんすうは 9
16しんの A の 10しんすうは 10
16しんの B の 10しんすうは 11
16しんの C の 10しんすうは 12
16しんの D の 10しんすうは 13
16しんの E の 10しんすうは 14
16しんの F の 10しんすうは 15
Ok
解説
数式の値の絶対値|x|を与えます。