PC-6601SRまでの機種(PC-6001, PC-6001mkII, PC-6601, PC-6601SR)のBASICコマンド一覧です。 PC-6001mkIISRのマニュアルをベースにしています。
[A] ABS ASC AUTO [B] BGM BLOAD BSAVE [C] CHR$ CIRCLE CLEAR CLOAD CLOAD* CLOAD? CLOSE CLS COLOR CONSOLE CONT COS CSAVE CSAVE* CSRLIN CVS [D] DATA DEF USR DEFFN DELETE DIM DSKF DSKI$ DSKO$ [E] END EOF ERASE ERR ERROR EXEC EXP [F] FIELD FILES FOR...TO...STEP-NEXT FRE [G] GET GET@ GOSUB-RETURN GOTO GRP$ [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(N66-BASIC) LIST V(N66-BASIC) LLIST LLIST L(N66-BASIC) LLIST V(N66-BASIC) LOAD LOC LOCATE LOF LOG LPOS LPRINT LSET [M] MENU MERGE MID$ MKS$ MON [N] NAME...AS NEW [O] OCT$ ON ERROR GOTO ON...GOSUB-RETURN ON...GOTO OPEN OUT [P] PAD PAINT PALET PEEK PLAY PLAY(N66-BASIC) POINT POKE POS PRESET PRINT PRINT# PRINT#(その他入出力) PSET PUT PUT@ [R] READ REM RENUM RESTORE RESUME RIGHT$ RND ROLL ROLL(関数) RSET RUN [S] SAVE SCREEN SCREEN(関数) SGN SIN SOUND SPACE$ SPC SQR STICK STOP STR$ STRIG STRING$ [T] TAB TALK TAN TIME [U] USR USR [V] VAL [W] WAIT WIDTH
10 FOR X=-2 TO 2
20 PRINT X:" のぜったいちは";ABS(X);" です。"
30 NEXT X
40 END
文字列の最初の文字のキャラクタコードを与えます。文字とキャラクタコードの対応については、資-4ページ資料2:キャラクタコード表を参照してください。
10 CLS: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 50
70 PRINT CHR$(X);" の キャラクタコードは";ASC(CHR$(X));" です。"
80 NEXT X
90 END
CHR$:指定したキャラクタコードに対応する文字を与えます。
キャラクタコード:キャラクタに割当てられたアスキー形式の0~255(10進)のコードをいいます。
AUTOコマンドは、指定された行番号を発生し、行の入力待ちになります。以後、RETURNキーの入力ごとに増分で指定された増分ずつ増加した行番号を自動的に発生します。行番号、増分ともに省略された場合には、10が省略値として選択されます。STOPキーまたはCTRL+Cを押すと、AUTOコマンドはその動作を中止し、BASICのコマンドレベルに戻ります。この時、最後に発生された行番号の行は格納しません。
プログラム中にすでに存在する行と同じ行番号が発生した場合には、行番号の直後にアスタリスク(*)を表示し、注意を促します。この時、文字を入力してRETURNキーを押すと、その行は新しい内容に入れ代わります。また、何も入れないで RETURNキーを押した場合には、その行を削除します。
100 rem **test**
110 print "auto"
120 end
130
list
100 rem **test**
110 print "auto"
120 end
コマンドレベル:OKが表示された状態です。
BGM文で0または1を指定することによって、後に実行するPLAY文を制御します。
・0を指定した場合
PLAY文の文字列が全て鳴り終るまで次の命令を実行しません。
10 BGM 0
20 PLAY "cdefgab"
30 PRINT "play end"
この場合、音楽が鳴り終ると、画面に"play end"と表示します。
・1を指定した場合
PLAY文の文字列が鳴っている最中に、次の命令を実行します。
10 BGM 1
20 PLAY "cdefgab"
30 PRINT "play end"
この場合、音楽が鳴っている最中に、画面に"play end"と表示され、その後も鳴り続きます。
10 SCREEN 2,2,2:CLS
20 A$="@10t240v14o5l8e-d-r4g-4e-d-r4g-4g-4e-d-r4g-4rg-4r4f4e-d-"
30 B$="@10t210v14o5l16r4b-8b-8r4b-8b-8r4b-8r8b-8r8b8b8r8"
40 C$="@5t120v13o4r8g-4.r8g-4.r8g-4e-4d-4.r8"
50 A1$="t120l16r8f8f8e-d-r8f8f8e-d-r8f8r8f8r8g-8g-8"
60 B1$="r8b8b8r4b8b8r4b8r8b8r8b-8b8"
70 C1$="d-4.r8d-4.r8d-4e-4g-4."
80 KANJI(100,100),5, "ふんじゃった!"
90 BGM1:PLAY A$,B$,C$:PLAYA1$,B1$,C1$
100 FOR N=1 TO 320
110 ROLL 3 : NEXT N
120 ROLL:END
ファイル名によって指定された、機械語プログラムをメモリ上に読み込みます(ロードします)。ロードされる領域は、BSAVEコマンドにより機械語プログラムをファイルに書き込む(セーブする)際に指定したものと同じです。
先頭アドレスを指定した場合には、セーブした時に指定した開始番地ではなく、先頭アドレスで与えた番地からロードし始めます。したがって、先頭アドレスをつけてロードするプログラムは、セーブした時と異なる番地にロードしても実行可能な性質を持っていなければなりません。
Rオプションを指定すると、プログラムをロード後、セーブした時に指定した開始番地から、プログラムの実行をただちに開始します。このとき、すでに開かれているファイルはその状態を保持します。先頭アドレスを指定した場合は、実行開始番地も先頭アドレスの番地になります。
10 CLEAR,&HDFFF:CLS
20 PRINT" がめん2に もじ(NEC)をかきます。"
30 PRINT" HIT ANY KEY!! "
40 IF INKEY$="" THEN 40
50 SCREEN 1,2,2:WIDTH40,20:CLS
60 BLOAD"NEC",R
70 LOCATE 0,17
80 END
注意:上記の例は35ページBSAVEの例と対応しています。BSAVEの例を実行してから、BLOADの例を実行してください。
BSAVE:メモリにある機械語プログラムをフロッピィディスクに書き込みます。
メモリ上にある機械語プログラムを、ファイル名で指定されたファイルに書き込みます(セーブします)。メモリ上の指定された先頭アドレス以後の連続する指定された長さの内容を、機械語プログラムとしてセーブします。
セーブされる機械語プログラムを先頭アドレスから実行できるようにしておくと、BLOADコマンドにより、プログラムのロードと実行が自動的に行えます。
注意:N66SR-BASICでは、グラフィック画面のデータをセーブすることができません。78ページのGET@を使用してください。
10 CLEAR ,&HCFFF
20 FOR I=&HD000 TO &HD02A
30 READ D$:D=VAL("&h"+D$)
40 POKE I,D:NEXT I
50 BSAVE"NEC",&HD000,43
60 END
70 DATA21,00,00,06,AA,36,4E,23,23,36
80 DATA45,23,23,36,43,23,23,36,20,23
90 DATA23,10,EE,21,01,00,06,E3,36,09
100 DATA23,23,36,0A,23,23,36,0C,23,23
110 DATA10,F2,C9
上記の例は、34ページのBLOADの例と対応しています。
BLOAD:機械語プログラムをフロッピィディスクからメモリへ読み込みます。
数式の値のキャラクタコードを持つ文字を与えます。数式の値が0~255の範囲にない場合は、?FC Errorになります。キャラクタコードと文字の対応については、資-4ページの資料2:キャラクタコード表を参照してください。
10 S=56:E=60
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
ASC:文字列の最初の文字のキャラクタコードを与えます。
グラフィック画面上の1点(x,y)を中心とし、半径で指定される大きさの円を描きます。
色は1≦c≦16のカラーコードで指定します。N66SR-BASICの場合、13≦c≦16のカラーコードを指定すると、パレットの色で円を描くことができます。省略した場合には、現在COLOR文で指定されているグラフィクスの色を用います。
ディスプレイモードとBASICモードによって指定できるカラーコードが異なりますので、資-54ページの資料17:カラーコードと色の関係を参照してください。
CIRCLEは通常円を描きますが、開始角度、終了角度を指定すると、指定された角度の範囲内のみに円弧を描きます。角度の指定の単位はラジアンで、省略値はそれぞれ0と2πです。
・開始角度、終了角度が負であった場合には、その絶対値をとり、正にした角度が用いられますが、その時、中心から半径が描かれますので扇形を描くことができます。
・開始角度、終了角度は、-2πから+2πの範囲内にないと?FC Errorとなります。
アスペクト比は(垂直方向の半径/水平方向の半径)で指定します。省略された場合には、約0.85に設定されます。アスペクト比が1より小さい場合には、半径は水平方向の半径が基準になります。また1より大きい場合には、半径は垂直方向の半径が基準になります。つまり半径が同じでもアスペクト比が1より小さいならば横長の楕円となり、1より大きいならば縦長の楕円となります。
中心座標は、STEPをつけて相対座標により指定することもできます。
注意:PC-8000シリーズのディスプレイをお使いの方は、16色グラフィックモード(SCREEN 2)のとき、アスペクト比を0.5に4色グラフィックモード(SCREEN 3)のとき、1.0にすると真円が描かれます。
5 REM***CIRCLE***
10 SCREEN 3,2,2:COLOR,13:PALET:CLS
20 Y=50:A=.175:P=12:C=14
30 FOR X=70 TO 570 STEP 100
40 CIRCLE(X,Y),40,C,,,A
50 PAINT(X,Y),C,C
60 C=C+1:IF C=17 THEN C=14
70 A=A*1.3:IF A>3.2THEN 110
80 NEXT
90 IF Y=50 THEN Y=150 ELSE Y=50
100 GOTO 30
110 P=P+1:IF P=17THEN P=13
120 K=K+1:IF K=17 THEN K=1
130 PALET P,K
140 FOR Z=0 TO 200:NEXT:GOTO 110
すべての数値変数を0に、文字変数を""(ヌルストリング)に初期化します。DEFEN文によって定義された情報も無効にします。
文字領域の大きさは、BASICが文字列処理のために用いるメモリ領域の大きさをバイト数で指定します。
メモリの上限は、BASICの使用するメモリの上限値を番地で指定します。指定された番地以降に置かれたデータや機械語プログラムはBASICによってクリアまたは破壊されることはありません。
なお、起動時またはリセット時における文字領域の大きさは、N60-BASIC モードでは50バイト、N66SR-BASIC、N66-BASIC、およびN60-拡張BASICモードでは300バイトです。
メモリの上限は、N60-BASICモードではFA00H、N66SR-BASIC、N66-BASICおよびN60拡張BASICではフロッピィディスクユニットのドライブ数と、起動時またはリセット時に指定したファイル数によって変化します。(資-25ページ資料10:メモリマップを参照してください。)
文字領域の大きさ、およびメモリの上限は省略すると直前のCLEAR文で指定した大きさのまま、あるいは起動時またはリセット時の状態のままです。
5 REM *** CLEAR[[m],n] ***
10 PRINT"ユーザメモリ は ";FRE(0)
20 PRINT"もじりょういき は";FRE(A$)
30 INPUT"もじりょういき の じょうげんは";M
40 CLEAR M
50 PRINT"のこり の ユーザメモリ は";FRE(0)
60 PRINT"もじりょういき は";FRE(A$)
70 END
FRE:メモリの未使用領域の大きさを与えます。
ヌルストリング:空白の意味です。
CLOADコマンドはプログラムをカセットテープから読み込む(ロードする)命令です。ファイル名を探している最中に別のファイル名のプログラムが見つかれば、Skip:<ファイル名>を画面に表示し、また、目的のプログラムが見つかればFound:くファイル名>を表示し、プログラムをロードします。
ファイル名は6文字以内で指定してください。ファイル名を省略すると、カセットテープから一番最初に読み込むことができるプログラムを読み込みます。
注意:CLOADを実行すると、CLOAD前にメモリ上にあったプログラムや変数は消去され、開いていたファイルがあれば、閉じられます。(NEW文と同一)
CSAVE:メモリにあるプログラムをカセットテープに書き込みます。
数値配列のデータをカセットテープから読み込みます(ロードします)。数値配列名は、配列の大きさが10より大きい場合には、DIM文によって、定義されていなければなりません。 また、配列の大きさはCSAVE*文を実行した時の大きさ以上にします。数値配列名はCSAVE*文で書き込んだ(セーブした)ときと同じでなくてもかまいません。
10 DIM X(10)
20 CLOAD*X
30 FOR I=1 TO10
40 PRINT I,X(I)
50 NEXT I
60 END
上記の例は52ページCSAVE*の例と対応しています。CSAVE*の例を実行してから、CLOAD*の例を実行してください。
CSAVE*:メモリ上にある数値配列の情報をカセットテープに書き込みます。
CLOAD?コマンドは現在メモリ上にあるプログラムとファイル名で指定されたカセットテープに書き込まれている(セーブされている)プログラムとを比較します。このときすべての内容が等しければBASICは“OK”と表示し、もしそうでなければ“Bad”と表示して実行を終了します。
この比較はメモリ上のプログラムが間違いなくカセットテープにセーブされているかを確認するためのものであり、一般に CSAVEコマンドに引き続いて行います。
CSAVE:メモリにあるプログラムをカセットテープに書き込みます。
指定されたファイル番号に対応するファイルを閉じます。以後、閉じられたファイル番号は異なるファイルを開くために利用できるようになります。また、閉じられたファイルは、同じあるいは異なったファイル番号によって再び開くことができます。
CLOSE文では、ファイル番号を複数指定することより、1度に複数のファイルを閉じることができます。また、ファイル番号が省略された場合には、その時に開いているファイルをすべて閉じます。指定できるファイル番号は、1から起動時またはリセット時に、How Many Files?で指定した数までです。
閉じられたファイルに対しては、再びOPENするまで入出力することができません。
CLOSE文は、ファイルがシーケンシャルファイルの出力用に開かれていた場合には、バッファに残っていたデータの掃き出しを行いますので、ファイルの出力処理を正しく終了するためには、必ずCLOSEを行わなくてはなりません。
END文、NEWコマンドは、自動的にすべてのファイルを閉じる処理を行います。 STOP文はファイルを閉じる作業は行いませんので注意してください。
10 OPEN "1:number2" FOR OUTPUT AS #1
20 A$="field no.1"
30 B=45678
40 C$="personal computer"
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 END
OPEN:ファイルを開きます。
シーケンシャルファイル:データの読み書きが順次的に行われるファイルです。
バッファ:必要な情報を一時的に蓄えたりするための領域です。
SCREEN文の第2パラメータで指定されている画面をクリアします。テキスト画面については、CONSOLE文によって指定されたスクロール範囲をクリアします。 また、テキスト画面、グラフィック画面でも、CLS文によってCOLOR文で指定された背景色で画面を塗り変えます。
10 SCREEN 1,1,1:CLS:WIDTH 80,25:COLOR 16
20 CONSOLE0,1,0:CLS
30 PRINT SPC(4);"X°","SIN(X)",,"COS(X)";
40 CONSOLE 1,24:COLOR 16,1:LOCATE 0,1
50 FOR I=-180 TO 180 STEP 6
60 J=I*3.1415927/180
70 PRINT SPC(4);I,SIN(J),,COS(J)
80 K=K+1:IF K=21 THEN 100
90 NEXT:CONSOLE0,24:END
100 PRINT SPC(10);"Hit any key to next"
110 I$=INKEY$:IF I$="" THEN 110
120 CLS:LOCATE 0,1:K=0:GOTO 90
テキスト画面:ディスプレイモード中のテキストモードの画面です。
グラフィック画面:ディスプレイモード中の16色グラフィックモード及び4色グラフィックモードの画面です。
テキスト画面の文字の色や背景の色、およびグラフィック画面のグラフィクスの色や背景の色を指定します。
グラフィクスの色とは、グラフィック画面に点や線を表示したりする時に使われる色のことです。BASICの種々のグラフィック命令(PSET、LINE、CIRCLE文など)で特別に色を指定しなかった場合、COLOR文で指定した文字またはグラフィクスの色を採用します。
背景の色とは、テキスト画面、グラフィック画面の地の色のことで、この命令実行後CLS文によって画面をクリアすると、この色によって画面が塗り変えられます。またPRESET命令を色指定なしで実行すると、この色が採用されることになります。
N66SR-BASIC以外のBASICモードでは、色の組み合わせを指定します。色の組み合わせは 資-54ページ資料17:カラーコードと色の関係を参照してください。
N66SR-BASICのディスプレイモードとCOLOR文の関係は次の通りです。
ディスプレイモード | 文字またはグラフィックスの色 | 背景の色 | |
---|---|---|---|
1 | テキストモード | 1~16 | 9~16 |
2 | 15色グラフィックモード | 1~16 | 1~16 |
3 | 4色グラフィックモード | 13~16 | 13~16 |
注意:N66SR-BASICの場合、13~16のカラーコードを指定すると、カラーコードの色でなく、パレットの色を設定します。(PALET文参照)
10 SCREEN 2,2,2:COLOR 1,1:CLS:K=2:R=80
20 FOR I=0 TO 360 STEP 24
30 A=I*3.1425927/180:B=(I+120)*3.1415927/180:C=(I+240)*3.1415927/180
40 AX=160+R*COS(A):AY=100+R*SIN(A)
50 BX=160+R*COS(B):BY=100+R*SIN(B)
60 CX=160+R*COS(C):BY=100+R*SIN(C)
70 LINE(AX,AY)-(BX,BY),K
80 LINE-(CX,CY),K:LINE-(AX,AY),K
90 PAINT(160,100),K,K
100 K=K+1:IF K=17THEN K=1
110 R=R-4: NEXT
注意:N60-BASICおよびN60-拡張BASICモードの場合は、使える色が9色で色の組み合せは2組しかありませんので、指定できる値の範囲は、それぞれ0≦f≦8、0≦b≦8、1≦c≦2になります。
画面のモード設定を行います。
スクロール開始行とスクロールの長さを指定することによって、画面上でスクロールする範囲を指定します。
CLSおよびPRINT CHRS(12)は、このスクロール範囲に対して実行します。
スクロール範囲の指定はディスプレイモードが1(テキストモード)の場合に有効となります。
ファンクションキー表示スイッチに1を指定した場合には、画面最下行にその時点でファンクションキーに登録されている文字列を表示し、0を指定した場合には表示しません。
ファンクションキーの表示はディスプレイモードが1(テキストモード)の画面に表示でき、画面ごとに設定できます。
キーのクリック音スイッチを1に指定すると、キーのクリック音が発生し、0を指定した場合には発生しません。
プリンタオプションは、PC-6001MKIISR専用プリンタ(PC-PR104)のみ作動します。プログラムリストをとる際、0を指定すると、従来どおりひらがなをカタカナに変換しますが、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 3
80 PRINT A$
90 NEXT I
100 END
注意:N60-BASICおよびN60-拡張BASICモードの場合には、スクロール開始行およびスクロールの長さの最大値がそれぞれ15、16-mになります。
CONTコマンドは通常デバッグのためSTOP文と共に用います。STOP文や STOPキー(CTRL-C)の入力によりプログラムの実行を停止し、ダイレクトモードで変数の値等を調べた後に、CONTコマンドによって実行を再開します。
ただし、実行停止中にプログラムの内容を変更した場合には、CONTコマンドによる継続実行はできません。
5 REM *** 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:GOTO10
デバッグ:プログラムにある誤りを検出して、訂正することをいう。
数式の値に対する三角関数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)
50 PRINT:NEXT I
60 END
SIN:正弦値(サイン)を与えます。
TAN:正接値(タンジェント)を与えます。
メモリ上にあるプログラムにファイル名をつけてカセットテープへ書き込みます(セーブします)。カセットテープ上にセーブされたプログラムは、CLOAD文を使って再びメモリ上に読み込む(ロードする)ことができます。
カセットテープ上にセーブされたプログラムは、ファイル名により区別します。このファイル名は最大6文字からなる文字列によって指定します。プログラムが正しくセーブされているかどうかはCLOAD?を使って確認できます。
注意
数値配列に代入されている数値情報をカセットテープに書き込みます(セーブします)。数値配列名は、配列の大きさが10より大きい場合には、DIM文によって定義していなければなりません。
セーブされた数値配列の情報は、CLOAD*によって再びメモリ上に呼び出すことができます。
10 DIM X(10)
20 FOR I=1 TO 10
30 X(I)=2^I
40 NEXT I
50 CSAVE*X
60 END
上記の例は42ページCLOAD*の例と対応しています。
現在のカーソルの行位置を与えます。値の範囲は、画面の最上行が0、最下行が25行モ ードのときは24、20行モードのときは19となります。
N66-BASICの場合には、最下行は19、N60-BASICおよびN60-拡張BASICモードの場合には、最下行は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$関数で文字型に変換されているデータを数値に戻します。
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 FIELDF#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
注意:上記の例は118ページMKS$の例と対応しています。MKS$の例を実行してから、CVSの例を実行してください。
MKS$:数値を5バイトの文字列に変換します。
ランダムファイル:ファイル内の任意の場所を指定して、他の場所には触れずに直接、読み 書きできるファイルです。
5 REM ***DATA***
10 SCREEN 1,1,1:COLOR16,1:CLS
20 INPUT"あさ=1,ひる=2,よる=3";A
30 ON A GOTO 50,60,70
40 GOTO 20
50 RESTORE 120:GOTO 80
60 RESTORE 130:GOTO 80
70 RESTORE 140:GOTO 80
80 READ A$
90 TALK A$
100 GOTO 20
110 END
120 DATA"f2 o hayo-."
130 DATA"f2 ^kox niciwa."
140 DATA"f2 ^kox baxwa."
READ:DATA文で指定しているデータを読み込み、変数に割り当てます。
RESTORE:READ文で読むDATA文の開始行番号を指定します。
USR関数(ユーザ関数)が呼び出す、機械語ルーチンの実行開始番地の設定を行います。開始番地はUSR関数の実行開始番地を指定します。
10 CLEAR ,&HDFFF
20 DEF USR=&HE000
30 FOR I=&HE000TO &HE01F
40 READ D$:D=VAL("&h"+D$)
50 POKE I,D:NEXT I
60 INPUT" もじれつを いれてください";A$
70 B$=USR(A$)
80 COLOR 11:PRINT B$
90 COLOR 16:END
100 DATAFE,03,C0,EB,56,23,23,7E,23,66
110 DATA6F,14,15,C8,7E,FE,61,DA,1C,E0
120 DATAFE,7B,D2,1C,E0,E6,DF,77,23,C2
130 DATA0C,E0
注意:上記の例は、英小文字で入力すると、英大文字となって画面に出力します。
DEFEN文によって、プログラム中で何度も使う演算と、演算で使う変数を関数としてあらかじめ定義しておくと、以降のプログラムでこの関数を呼び出すだけで演算結果を求めるこ とができます。
関数の名前はFNとこれに続く関数名を含めたもので、関数名は数値変数名と同じ規則でつけます。
引数はその関数が呼ばれた時に関数の定義式の中の同じ名前の変数に対応します。この変数名は関数を定義する時だけ有効となり、プログラム中に同一の変数名があっても影響を受けません。また、関数の定義式の中に引数以外の変数を使用している場合には、関数が呼ばれた時点で、その変数がもっている値を使用します。
関数定義式は、その関数の演算内容を記述する式で、1行の範囲に限ります。
DEFEN文は非実行文ですが、これによって定義される関数がプログラム中で呼ばれる前に実行していなければなりません。
5 REM *** DEF FN ***
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
指定された開始行番号から終了行番号までのプログラムを削除します。開始行番号だけを指定した場合は、その行だけを削除し、-(終了行番号)を指定した場合には、プログラムの先頭から(終了行番号)までを削除します。
DELETE 100 (行番号100を削除する。)
DELETE 100-150 (行番号100から行番号150までを削除する。)
DELETE -150 (プログラムの先頭から行番号150までを削除する。)
配列変数の添字の最大値を設定し、同時にメモリ上にその配列の領域を割り当てます。 DIM文で宣言せずに配列変数を用いた場合、その添字の最大値は10とみなします。もし、設定された最大値より大きい値の添字を用いた場合には、?BS Errorが起こります。
また、DIM文が実行された時点で、その配列のすべての要素は数値なら0、文字なら"" (ヌルストリング)に設定されます。
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 NEXT J
80 FOR I=0 TO 7
90 FOR I=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。,し,!
配列変数:7ページ「1-10-4 配列変数」を参照してください。
?BS Error(Bad Subscript Error):配列の添字が宣言した大きさを越えています。配列の添字の個数が宣言したときと違います。
<ドライブ番号>で指定されたディスクに関する情報を関数の値として返します。<機能>は値として返す情報の種類を指定します。<機能>として指定する値と、その時に返される関数の値の意味は次のようになっています。
省略された時:ディスクの残り容量をクラスタ単位で返す。
N60、N66-BASICモードでは、<機能>を指定することはできず、返される情報は指定したドライブの残りクラスタ数のみです。なお、1クラスタは8セクタです。
10 SCREEN 1,1,1:CLS
20 D=0:INPUT" DRIVE NO.";D
30 IF D=0 THEN END
40 PRINT"FREE AREA =";DSKF(D);"CLUSTER"
50 PRINT"TRACK =";DSKF(D,0);"/DRIVE"
60 PRINT"SECTOR =";DSKF(D,1);"/TRACK"
70 PRINT"CLUSTER =";DSKF(D,2);"VOLUME"
80 PRINT"DIRECTORY NO.=";DSKF(D,3);"TRACK" :PRINT
90 GOTO 20
ディレクトリ:1枚のディスクに記録されているすべてのファイルの名前、性格および格納位置の表です。
FAT:1枚のディスクの中の記憶場所の状態(どのクラスタが使用中か未使用か)を示す表
通常のファイル操作とは無関係に、フロッピィディスク上の指定したセクタから直接読み込みを行います。
DSKI$は、そのパラメータにより指定されたセクタ上に書かれているデータ256バイトを0番バッファに読み出すとともに、最初の255文字の文字列を関数の値として返します。
文字列の長さは255文字までなので、関数の値として256バイトのデータすべてを得ることはできません。そこで、通常のランダムアクセスの場合と同じようにFIELD文によって、0番バッファへ複数の文字列変数を割り当てることによりこれを解決することができます。
指定できる値の範囲は、ドライブ番号は1から接続しているドライブの数まで、トラック番号は0から79まで、セクタ番号は1から16までです。これらの値の範囲を越えて指定した 場合には、??DN Error または??TS Errorになります。但し、1Dのディスクドライブを使用の場合、トラック番号は0から34までしか指定できません。
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$の例と対応しています。 DSKO$の例を実行してから、DSKI$の例を実行してください。
??DN Error (Bad Drive Number Error):接続していないフロッピィディスクドライブ番号を指定しています。
??TS Error (Bad Track/Sector Error) :DSKI$関数やDSKO$文で、トラック番号またはセクタ番号の指定が間違えています。
通常のファイル操作とは無関係に、フロッピィディスク上の指定したセクタに0番のバッファの内容を書き込みます。したがってその前に、0番のバッファにデータをセットしてお くことが必要です。
0番バッファは、通常のディスクファイル操作の際には用いることはできませんが、DSKI$とDISKO$による直接操作の場合のみ、使用することができます。
バッファには、256文字分入りますが、1個の文字型変数に入る文字列の長さは255文字です。ランダムアクセスの場合と同じようにFIELD文により、0番バッファへ変数領域を割り当てます。そしてLSET、RSET文により、0番のバッファにデータをセットします。
指定できる値の範囲は、ドライブ番号は1から接続しているドライブの数まで、トラック番号は0から79まで、セクタ番号は1から16までです。これらの値の範囲を越えて指定した場合には、??DN Erorまたは??TS Errorになります。但し、1Dのディスクドライブ使用の場合、トラック番号は0から34までしか指定できません。
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
上記の例は、DSKI$の例と対応しています。
DSKI$:フロッピィディスクから直接読み込んだ内容を文字列として与えます。
プログラムの実行を終了し、すべてのファイルをクローズしてコマンドレベルに戻ります。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
シーケンシャルファイルの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
注意:上記の例は、141ページのPRINT#の例と対応しています。PRINT#の例を実行してから、EOFの例を実行してください。
指定した配列変数を消去します。以後、同一変数名の配列変数をDIM文で宣言することができます。もし、ERASE文を実行せずに同一変数名で宣言すると、?DD Errorになります。
また、その配列変数に割り当てられていたメモリエリアを、他の目的に使用することもできます。
10 ON ERROR GOTO 70
20 DIM A(100),B(30)
30 ERASE A
40 DIM A(60)
50 DIM B(20)
60 END
70 PRINT ERL;"ギョウニ DD ERROR ガ ハッセイ シマシタ。
80 RESUME NEXT
DIM:配列変数の要素の大きさを指定して配列を宣言し、メモリ領域を確保します。
?DD Error (Dupulicate Definition Error):すでに宣言された配列と同じ名前の配列をDIM文で再び宣言しています。
エラーが発生した時点で、システム変数ERRはエラーコードを、ERLはエラーの発生した行番号を持っています。エラーがダイレクトモードの実行によって生じた場合、ERLとして65535を持ちます。
一般に、ERR及びERLは ON ERROR GOTO文によって指定したエラー処理ルーチンにおいて、処理の流れを制御するために使います。
5 REM***ERL/ERR***
10 ON ERROR GOTO 100
20 INPUT" 3と2でわりきれる しぜんすうは";N
30 ERL=30
40 IF N=0 OR N<0 THEN ERROR 200
50 IF INT(N/3)<>(N/3) THEN ERROR 201
60 IF INT(N/2)<>(N/2) THEN ERROR 201
70 IF ERL<>30 THEN 20
80 COLOR10:PRINT"*** "N"は 6のばいすうです。"
90 COLOR 16:END
100 COLOR 11:IF ERR=200 THEN PRINT" しぜんすうとは せいのせいすうです。"
110 IF ERR=201 AND ERL=50 THEN PRINT"3でわりきれません。"
120 IF ERR=201 AND ERL=60 THEN PRINT"2でわりきれません。"
130 PRINT:COLOR 16:RESUME NEXT
整数表記の値は1から255までの範囲の数を指定します。資-1ページ資料1:エラーメッセージ表に記載しているエラーコードはBASICで定義しているエラーで、これらのエラーコードを指定すると対応するエラーメッセージが出力され、コマンドレベルに戻ります。
また、未定義のエラーコードのエラーをプログラム中で条件に応じてERROR文で発生させ、ON ERROR GOTO文によって指定したエラー処理ルーチン内で、ユーザが定義したエラーコードとして使用することができます。
10 SCREEN1,1,1:COLOR 16,1:CLS
20 INPUT "ERROR NO.(1-225)";E
30 IF 0<E AND E<256 THEN 40 ELSE 20
40 PRINT "RROT";E;"の シミュレートをします"
50 ERROR E
60 END
指定した番地から始まる機械語プログラムの実行を開始します。
機械語プログラムの実行後、N66SR-BASIC又はN66-BASICに戻るには、機械語プログラムの最後にRET(&HC9)命令を置きます。
10 CLEAR,&HDFFF:CLS:COLOR 11
20 PRINT" がめん2に もじ(NEC)を だします。"
30 PRINT" HIT ANY KEY":COLOR 16
40 IF INKEY$=""" THEN 40
50 SCREEN 1,2,2:WIDTH40,20:CLS
60 FOR I=&HE000TO &HE02A
70 READ D$:D=VAL("&h"+D$)
80 POKE I,D:NEXT I
90 EXEC &HE000
100 LOCATE 0,17:END
110 DATA21,00,00,06,AA,36,4E,23,23,36
120 DATA45,23,23,36,43,23,23,36,20,23
130 DATA23,10,EE,21,01,00,06,E3,36,09
140 DATA23,23,36,0A,23,23,36,0C,23,23
150 DATA10,F2,C9
数式の値に対する指数関数exの値を与えます。
10 FOR X=0 TO 5
20 PRINT "EXP(";X;")=";EXP(X)
30 NEXT X
40 END
5 REM *** 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
注意:上記の例は145ページのPUTの例と対応しています。PUTの例を実行してから、FIELDの例を実行してください。
ドライブ番号を指定すると、フロッピィディスクにセーブされているファイルの名前、種類と、その大きさを画面に表示します。ファイルの大きさは、クラスタ単位で表示します。クラスタについては、資-19ページ資料9:ディスクファイルの構造を参照してください。
指定できるドライブ番号は1から接続しているドライブの数までです。また、ドライブ番号を省略した場合には、ドライブ1を選択します。
ファイルの種類は、表示されるファイルの名前と拡張子との区切り文字によって表します。
10 INPUT "ドライブ NO.";D
20 CLS
30 PRINT"ドライブ"D" の FILES"
40 PRINT
50 FILES D
60 PRINT
70 END
添字変数はカウンタとして使用し、最初は初期値に設定されます。FOR文以降からNEXT文まで実行すると、カウンタ値はSTEP文で指定した増分だけ増減します。
次に、カウンタ値が終値に達していなければ、終値に達するまでFOR文以降からNEXT文までを繰り返し実行し、カウンタ値が終値に達したらNEXT文の次を実行します。
STEP文が省略された場合、増分+1とみなされます。また増分は負の値をとることもできます。
次の場合には、添字変数に初期値を設定してFOR文以降からNEXT文までの実行を1回だけ行ってから添字変数に増分を増減してNEXT文の次の文を実行します。
FOR~NEXTは入れ子構造にすることができます。これは1つのFOR~NEXTのなかにもう1つのFOR~NEXTを置くことができるということで、この場合、それぞれの添字変数は別のものを使用しなければなりません。また1つのFOR~NEXTは完全に他のFOR~NEXTの内部になければなりません。
10 FOR I=0 TO... 20 FOR J=1 TO 90 NEXTJ 100 NEXTI
1つのFOR文に対して複数のNEXT文があってもかまいませんが、正しくFOR文に対応していなければなりません。IF文中にNEXT文を使うときには、充分に気をつけてください。
10 FOR I=0 TO 50 STEP 10
20 PRINT I/10,I
30 NEXT I
40 END
BASICの利用可能なメモリ領域のうちの、未使用領域の大きさを与えます。機能が数値ならメモリの未使用領域の大きさ、文字なら未使用の文字領域の大きさを与えます。
5 REM *** FRE(X) ***
10 PRINT"ユーザメモリ は ";FRE(0)
20 PRINT"もじりょういき は";FRE(A$)
30 PRINT"もじりょういき の じょうげんは";M
40 CLEAR M
50 PRINT"のこり の ユーザメモリ は";FRE(0)
60 PRINT"もじりょういき は";FRE(A$)
70 END
CLEAR:変数の初期化およびメモリ領域の指定をします。
ファイル番号で指定したファイル中のデータを、対応するバッファ中に読み込みます。指定したファイルは、ランダムファイルとして、OPEN文によって開かれていなければなりません。
ファイル番号はOPEN文で指定したファイルの番号です。レコード番号で指定したレコード256バイトをバッファに読み込みます。レコード番号を省略した場合には、直前に行ったGET文、またはPUT文で指定したレコードの次のレコードを読み込みます。
GET文を行った後、INPUT#文などのシーケンシャルアクセス入力を行った場合には、バッファに入っているデータから入力を行いますので注意してください。
5 REM *** GET# ***
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
注意:上記の例は145ページのPUTの例と対応しています。PUTの例を実行してから、GETの例を実行してください。
PUT:バッファ中のデータをランダムファイルに書き込みます。
レコード:1回に入力あるいは出力される1組のデータを呼びます。1レコードの長さは256バイト、すなわち1セクタです。
(1)グラフィック画面上の2点(x1,1)と(x2,y2)を結ぶ線を対角とする四角形の領域のグラフイック情報を、配列変数名で指定された配列変数に書き込みます(セーブします)。
配列変数は、グラフィック情報を読み込むために用意する数値型の配列変数の名前です。
ただし、GET@文を実行する前にこの配列変数の大きさを、DIM文によって宣言しておかなければなりません。この配列変数の大きさは次の式によって計算し、N66SR-BASICの場合、()内の小数点以下を切り上げ、N60、N66-BASICの場合、()内の小数点以下を切り捨て、求められる値以上に定義します。なお、式中の(x1,y1)は左上の絶対座標、(x2,y2)は右下の絶対座標です。
N66SR-BASICの場合
N60,N66-BASICの場合
(2)画面上の2点(1,y1)と(x2,y2)を結ぶ線を対角線とする四角形の領域のグラフィク情報をフロッピィディスクにファイル名をつけて書き込みます。
STEPをつけると相対座標になります。
5 REM***GET@***
10 DIM D(60,60)
20 SCREEN 2,2,2:COLOR 2,1:CLS
30 FOR I=6 TO 36 STEP 6
40 CIRCLE(30,40),I,5 ,,,(9+I/50)
50 NEXT I
60 GET@(0,0)-(60,80),D
70 PUT@(70,0),D,PRESET
80 GOTO 80
PUT@:GET@文で書き込んだグラフィック情報を読み、画面上に表示します。
アクティブ画面: SCREEN文の第2パラメータで指定した画面です。
サブルーチンプログラムの先頭行番号をGOSUB文によってコールし、サブルーチンプログラム内のRETURN文によってGOSUB文の次の文へ戻ります。
サブルーチンプログラムとは、1つの独立したプログラムで、RETURNで終わっているものをいいます。サブルーチンプログラムは、GOSUB文によって、いつでも何度でも呼び出すことができます。
1つのサブルーチンプログラムから他のサブルーチンプログラムをコールすることもできます。これをサブルーチンの多重化と呼びます。サブルーチンの多重化はメモリのスタック領域の容量が許す限り行うことができます。もし、スタック領域がたりなくなった場合には、?OM Errorになります。
サブルーチンプログラムは必ずGOSUB文によってコールされなければなりません。もし、単独でサブルーチンプログラムを実行した場合、RETURN文を実行しようとして?RG Errorになります。
また、1つのサブルーチンプログラム内に複数のRETURN文があってもかまいませんが、正しくGOSUB文と対応していなければなりません。
10 S=0
20 FOR I=0 TO 5
30 INPUT"DATA";A
40 GOSUB100
50 NEXT
60 PRINT"ごうけい=";S,"へいきん=";S/5
70 END
100 S=S+A
110 RETURN
?OM Error (Out of Memory Error):プログラムが大きすぎてメモリが足りません。
サブルーチンが自分自身をコールしています。
?RG Error (Return without Gosub Error): GOSUB文がないのにRETURN文が使われています。
行番号で指定した行へジャンプします。
5 REM *** GOTO ***
10 INPUT"おなまえは ";N$
20 PRINT"1+1=";
30 INPUT C
40 IF C=2 THEN 70
50 PRINT N$;"さん もういちど がんばろう !"
60 GOTO 20
70 PRINT "よくできました。"
80 END
数式の値のセミグラフィックキャラクタコードを持つ文字を与えます。テキスト画面、グラフィック画面共に出力できます。WIDTHコマンドで行数を25にすると、セミグラフィックモード(2)を出力します。(資-4ページ資料2:キャラクタコード表参照)
数式の値が0~255の範囲にない場合は、?FC Errorになります。キャラクタコードと文字の対応については、資-4ページの資料2:キャラクタコード表(セミグラフィック)を参照してください。キャラクタコード表(テキスト)のキャラクタ文字を出力したいときは、CHR$関数で行ってください。
10 S=80:E=86:C=0
20 SCREEN 2,2,2:COLOR 16,1:CLS
30 PRINT SPC(4);"START CODE は";S
40 PRINT SPC(4);"END CODE は";E
50 FOR I=S TO E
60 PRINT"GRP$(";I;")=";GRP$(I)
70 C=C+1 :IF C=19 THEN GOSUB 110
75 NEXT:PRINT
80 INPUT" START&END CODE(0-255)";S,E
90 IF S>255 OR E>255 THEN 80 ELSE 20
100 END
110 CLS:C=0:RETURN
CHR$:指定したキャラクタコードに対応する文字を与えます。
数式の値を16進に変換して、その文字列を与えます。HEX$関数で変換された文字を数値に戻すには、VAL関数を使用します。
5 REM *** HEX$ ***
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
VAL:文字列の表わす数値に変換します。
OCT$:10進数を8進数に変換し、その文字列を与えます。
条件式が真(0以外)ならばTHEN以降の文を実行し、偽ならば次の文を実行します。
THEN以降の文がGOTO文の場合には、"THEN"または"GOTO"のいずれかを省略することができます。たとえば、IFA=5 THEN GOTO 30の場合には、
IF A=5 THEN 30
または
IF A=5 GOTO 30
とすることができます。
IF...THEN文においてTHENのあとに続けて別のIF文を置いて多重にすることができます。ただし、多重にできるのは1行に書ける範囲に限ります。
5 REM *** IF THEN ***
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
条件式には関係演算子や論理演算子がよく使用されます。7ページの1-11:式と演算を参照してください。
キーが押されていない状態(キーボードバッファが空)であれば、INKEY$関数はヌルストリング(空白)を返します。
キーが押されている状態(キーボードバッファが空でない)であれば、バッファの先頭から1文字取り出し、その文字を返します。 なお、CTRL+C、STOPキーは、INKEY$関数によって拾うことはできません。また、押されたキーは画面上には表示しません。
INKEY$では、プログラムは停止しませんので、キー入力待ちにするためには、次のようにしてください。
10 A$=INKEY$:IFA$=""THEN 10
5 REM *** INKEY$ ***
10 PRINT "Hit any key or return to end"
20 I$=INKEY$:IF I$="" THEN 20
30 IF ASC(I$)=13 THEN PRINT"おしまい !";END
40 IF ASC(I$)=20 THEN D$=INKEY$:GOTO 20
50 PRINT " キャラクターコード は";ASC(I$)
60 IF ASC(I$)>32 THEN PRINT "おした keyは '";I$;"'key です。"
70 PRINT :GOTO 10
I/Oポートアドレスで指定されたポートから1バイト(8ビット)のデータを読み取り、それを関数値として与えます。I/Oポートアドレスとして指定できる値の範囲は0から255(&HFF)までです。I/Oポートアドレスと装置との対応は、38ページの資料13:I/Oポートアドレスを参照してください。
5 REM *** INP ***
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
OUT:指定した出力ポートに情報を出力します。
INPUT文を実行すると、疑問符(?)と1文字分のスペースを画面に表示し、キー入力待ちの状態になります。プロンプト文がある場合には、プロンプト文と疑問符(?)と1文字分のスペースを画面に表示します。
データはRETURNキーを押すことによって入力し、変数に代入します。変数をカンマ(,)で区切って複数個指定した場合には、入力するデータもカンマで区切って変数の数だけ入力しなければなりません。もし、データの個数が変数の個数より少ない場合には、疑問符が2つ(??)と1文字分のスペースを表示し残りのデータの入力待ちになります。データの個数が変数の個数より多い場合には、"??Extra Ignored"と表示し、余分なデータを無視して次の文を実行します。
また、対応する変数とデータの型は一致していなければなりません。もし一致しなかった場合には、"?Redo from start"と表示して再びキー入力待ちになります。
データを入力する時にRETURNキーだけ押した場合には、何も行われなかったとみなし、変数の内容は、INPUT文を実行する直前と変わりません。
文字変数に文字列を入力する場合、特にカンマ(,)や文字列の前後の意味のある空白を入力する場合には、ダブルクォーテーション(")で文字列をくくります。この場合以外は文字列をダブルクォーテーションでくくる必要はありません。また、ダブルクォーテーションを 文字として入力することは、文字列をダブルクォーテーションでくくった場合にはできませんが、くくらなかった場合には文字列の最後の1文字をダブルクォーテーションにすることができます。
5 REM *** INPUT ***
10 CLS
20 INPUT "* あなた の おなまえは";N$
30 INPUT "*でんわ ばんごうは";T$
40 LOCATE12,8
50 PRINT"Name:";N$
60 LOCATE13,9
70 PRINT"Tel:";T$
80 END
PRINT:アクティブ画面に情報を表示します。
データを読み込む対象がシーケンシャルファイルであることと、疑問符(?)を表示しないことを除けば、INPUT文とほぼ同じです。
ファイル番号は、OPEN文によって、そのファイルをINPUTモードとしてオープンしたときに指定した番号です。
変数とデータの型は一致していなければなりません。また、変数の個数よりデータの個数の方が少ない場合には、??EF Errorになりますが、多い場合には残りのデータは無視します。
5 REM *** DINPUT# ***
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
上記の例は141ページのPRINT#の例と対応しています。PRINT#の例を実行してから、INPUT#の例を実行してください。
PRINT#:シーケンシャルファイルにデータを書き込みます。
??EF Error (Input Past End Eror):シーケンシャルファイルにおいて、全てのデータを読み込んでいるのにINPUT#命令で読み込もうとしています。
INPUT#文はINPUT文に似ていて、指定した変数へデータを入力しますが、入力機器番号を指定することによって入力機器を変えることができます。
入力機器と入力機器番号は次のように対応しています。
ディスクファイルのうち、シーケンシャルファイルからの入力もINPUT#文を使います。入力機器を指定する場合は、INPUT#のあとにマイナス(-)がつきますので気をつけてください。
変数と入力データの関係はINPUT文と同じです。変数の個数と型は、データの変数の個数と型に一致していなければなりません。
5 REM *** 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
PRINT#:情報を出力します。
数式の値を越えない最大の整数値を与えます。
5 REM *** INT(X) ***
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
「グラフィック画面上の(x,y)で指定された位置に漢字および文字を表示します。STEPをつけると相対座標による指定になります。(x,y)は漢字または文字列を表示しようとする左上の座標を指定します。
漢字の色は1≦c≦16のカラーコードで指定します。N66SR-BASICの場合、13≦c≦16のカラーコードを指定すると、パレットの色で漢字を表示することができます。漢字はディスプレイモードが15色または4色グラフィックモードの場合に表示できます。カラーコードは資料17:カラーコードと色の関係を参照してください。
内蔵漢字ROMの場合、漢字を表示するには資料3:漢字コード表を参照して漢字コードで指定します。漢字の他にキャラクタ文字も共に表示することができます。なお、N66SR-BASICの場合、キャラクタ文字も漢字と同じ16×16のドットで表示します。(資-4ページ資料2:キ ャラクタコード表参照) 拡張漢字ROMカートリッジ(PC-6601-01)を付けた場合はJISコードで指定します。詳しくは拡張漢字ROMカートリッジの取扱説明書を参照してください。
10 SCREEN 3,2,2:PALET:COLOR,1:ROLL:CLS
20 PALET 13,1:PALET 14,10:PALET 15,11
30 S=0:KN=0:C=2:Y=4:CN=32
40 FOR X=0 TO 620 STEP 20
50 IF C=4 THEN C=1
60 C=C+1:KN=KN+1:IF KN>1024 THEN 80
70 KANJI(X,Y),C,KN:GOTO 100
80 CN=CN+1:IF CN=255 THEN ROLL:END
90 KANJI(X,Y),C,CHR$(CN)
100 NEXT X
110 IF Y=184 THEN GOSUB 200:GOTO 40
120 IF S=1 THEN GOSUB 210 :GOTO 40
130 Y=Y+20 :GOTO 40
200 Y=-16:M=4
210 LINE(0,Y+20)-(639,Y+40),1,BF
220 FOR R=1 TO (20+M)/2:ROLL,2:NEXT
230 S=1:Y=Y+20:M=0:RETURN
ファンクションキーは5つあり、SHIFTキーを押した状態と合計10の文字列を記憶させておくことができます。
キー番号は1から10までで、6から10まではシフトモードです。
各ファンクションキーは最大8文字までの文字列およびコントロール文字などを記憶でき、キーボードから入力できない文字は、CHR$関数をプラス記号で継いで使います。たとえば、RUNを記憶させたければ、文字列は"RUN"+CHR$(13)とします。画面の最下行にファンクションキーの内容を表示すると、N66SR-BASIC、N66-BASICモードでは6文字、N60-BASICおよびN60拡張BASICでは5文字までしか表示しません。
5 REM *** KEY ***
10 KEY1,"CLOAD"
20 KEY3,"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
コントロール文字:コードの0~31のキャラクタで、文字ではなく、特殊な働きをするものです。
ファイル名で指定したファイルをフロッピィディスクから削除します。
削除するファイルはクローズ状態になっていなければなりません。もしオープン状態のファイルを削除しようとすると、??AO Errorとなります。また、1つのKILLコマンドでは1つのファイルしか削除できません。
KILLコマンドはすべてのディスクファイル(プログラム、ランダムデータ、シーケンシャルデータ)について使用できます。
ドライブの指定は、ファイル名の前にドライブ番号を含めることによって行います。省略した場合、ドライブ1を指定したとみなされます。
KILL "name"
??AO Error (File Already Open Error):オープンされているファイルを削除(KILL)しようとしています。
コピーモードは1か2の値をとり、それぞれ次のように働きます。省略した場合には1が選択されます。N60-BASICおよびN60-拡張BASICモードの場合には、コピーモードを省略します。
5 REM***LCOPY***
10 SCREEN 3,2,2:COLOR ,1:CLS
20 FOR I=1 TO 3
30 CIRCLE(I*100,100),30,I+1
40 PAINT(I*100,100),I+1,I+1
50 NEXT
60 READ A,B,C$
70 KANJI(60,40),2,A,B,C$
80 LCOPY2
90 END
100 DATA 86,938,"を コピーします。"
注意:BASICモードとLCOPY文が実行できるプリンタの関係は次の通りです。
コピー機能 | ||||
---|---|---|---|---|
N66SR-BASIC,N66-BASIC モードのLCOPY |
N60-BASICおよび N60-拡張BASICモードのLCOPY |
|||
1(200×320) | 2(400×320) | |||
プリンタ | PC-6021 | × | × | 〇 |
PC-2021 | 〇 | × | × | |
PC-8023C PC-8024 PC-8027 PC-8821 |
〇 | 〇 | × | |
PC-8822 PC-8824 PC-8825 PC-PR101 PC-PR103 PC-PR104 PC-PR201 PC-PR202 |
〇 | 〇 | × | |
PC-PR401 | 〇 | 〇 | 〇 | |
PC-PR402 | 〇 | × | 〇 | |
PC-6022 PC-6023 PC-8826 |
× | × | × |
文字列の左側から数式で指定した文字数の文字列を与えます。数式の値が文字列の総文字数以上の場合には、文字列のすべてを与えます。また、数式の値が0の場合にはヌルストリングを与えます。
LEFT$("ab",3) → ab
LEFT$("ab",0) → ""
10 CLS
20 N$="12345"
30 FOR I=1 TO 5
40 PRINT LEFT$(N$,I)
50 NEXT I
60 END
RIGHT$:文字列の右側から任意の長さの文字列を与えます。
表示(出力)されない文字や空白も文字数に数えます。つまり、キャラクタコードの0から255までのキャラクタはすべて文字として数えます。(資-4ページ資料2:キャラクタコード表参照)
5 REM *** LEN(X$) ***
10 INPUT "あなた の おなまえは";N$
20 PRINT "'";N$;"'は";LEN(N$);" もじです。"
30 END
LETは省略できます。つまり、式の値を変数名に代入するには、等号だけでもかまいません。式は数値でも文字列でもかまいませんが、変数の型と一致していなければなりません。もし、型が一致しない場合には?TM Errorになります。
5 REM *** LET ***
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
?TM Eror (Type Mismatch Eror):文字と数値をいっしょに取り扱っています。
ドライブ番号で指定された、フロッピィディスクにセーブされているファイルの名前、種類と、その大きさをプリンタに出力します。ファイルの大きさは、クラスタという単位で表示します。
指定できるドライブ番号は1から接続しているドライブの数までです。また、ドライブ番号を省略した場合には、ドライブ1が選択されます。
出力されるファイルの種類はFILESコマンドの場合と同じです。
10 INPUT "ドライブ NO.";D
20 PRINT
30 PRINT"ドライブ"D" の FILES をプリンタ に アウトプット します"
40 LFILES
50 PRINT
60 END
FILES:フロッピィディスクにセーブされているファイルの名前、種類、大きさを画面に表示します。
クラスタ:1トラック=2クラスタ=16セクタ クラスタ単位でファイルを管理します。(1クラスタ=8セクタ)
グラフィック画面上の2点(x1,y1)と(x2,y2)を結ぶ直線を描きます。(x1,y1)が省略された場合、その直前に実行されたグラフィック文の座標の値を採用します。直前に実行されたグラフィック文がLINE文の場合には終点の座標を採用します。また、STEPをつけると相対座標による指定になります。
引く線の色は1≦c≦16のカラーコードで指定します。N66SR-BASICの場合、13≦c≦16のカラーコードを指定しますと、パレットの色で線を描くことができます。省略された場合、現在COLOR文で指定されているグラフィクスの色が用いられます。BASICモード、ディスプレイモードによって指定できるカラーコードが異なりますので、資-54ページ資料17:カラーコードと色の関係を参照してください。
オプション機能は、BかBFのどちらかを指定することができます。BはBoxの意味で、(X1,y1)と(x2,y2)の2点を対角とする四角形の箱を描き、BFはBox Fillの意味でその四角形を塗りつぶします。
5 REM *** LINE ***
10 SCREEN 2,2,2:CLS:C=2
20 FOR X=0 to 319 STEP 4
30 LINE(X,0)-(319-X,199),C
40 NEXT:C=C+1:IF C=17 THEN C=1
50 FOR Y=0 TO 199 STEP 4
60 LINE(0,199-Y)-(319,Y),C
70 NEXT
80 C=C+1
90 GOTO 20
指定された開始行番号から終了行番号までのプログラムリストを画面に表示します。LISTコマンドは実行し終わると、いつでもコマンドレベルに戻ります。
5 REM *** LIST ***
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 GOTO20
70 LIST
80 LIST 70-
90 LIST -80
100 LIST 20-60
110 NEW
コマンドレベル:ダイレクトモードでキー入力(コマンド)待ちになっている状態。
指定された行番号が、参照されている文にある場合、その行の行番号を画面に表示します。参照する文とは、GOTO文、GOSUB文、ON...GOTO文、ON...GOSUB文、IF文、RESTORE文、(RUNコマンド)、(LISTコマンド)のことです。
行番号の指定を省略するとすべての行について行番号のリストを表示します。
10 INPUT"INPUT NO.":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:GOTO 10
70 END
LIST L
00010 - 00060
00020 -
00030 -
00040 -
00050 -
00060 -
00070 - 00050
OK
指定された変数名とその変数名が使われている行の行番号をすべて画面に表示します。
変数名を省略するとすべての変数名についてそれぞれ使われているすべての行番号のリストを表示します。
変数名は、頭から2文字までしか表示しません。オプション文字の"R"と"A"と"B"と“BF”、 NAME文とFIELD文とOPEN文の“AS”、OPEN文の“AP[PEND]”、およびPUT文の“X[OR]”も変数名として扱い表示します。
なお、配列の場合には、配列変数名の後ろにカッコをつけて、単純変数名と区別します。
10 INPUT"INPUT NO.":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:GOTO 10
70 END
LIST V
N - 00020 00030 00040 00050
指定された開始行番号から終了行番号までのプログラムリストをプリンタに出力します。LISTコマンドがプログラムリストを画面に表示するのに対し、LLISTコマンドがプログラムリストをプリンタに出力すること以外はLISTコマンドと同じです。
LIST:メモリにあるプログラムの全部または一部を画面に表示します。
指定された行番号が、参照されている文にある場合、その行の行番号をプリンタに出力します。LIST Lコマンドが画面に表示するのに対し、LLIST Lコマンドがプリンタに出力すること以外はLIST Lコマンドと同じです。
LIST L:指定した行番号を使用している行の行番号を画面に表示します。
指定された変数名とその変数名が使われている行の行番号をすべてプリンタに出力します。
LIST Vコマンドが画面に表示するのに対し、LLIST Vコマンドがプリンタに出力すること以外はLIST Vコマンドと同じです。
LIST V:指定された変数名が使われている行の行番号を画面に表示します。
ファイル名で指定されたプログラムファイルをフロッピィディスクからメモリ上に読み込みます。ロードするプログラムは、SAVEコマンドを使ってディスクにファイルされたものです。ロードを実行すると、開いているファイルをすべて閉じ、変数はその値が失われます。
Rオプションをつけると、ファイルは開かれたままで、プログラムをロードし、ただちに実行を開始します。
LOADコマンドは、指定されたファイルを見つけて、実際のプログラムのロードを開始するまでは、メモリ上のプログラムを保存します。
load "test"
Ok
SAVE:メモリにあるプログラムをフロッピィディスクにセーブします。
ファイル番号で指定されたファイルがランダムファイルの場合には、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
レコード番号:ランダムファイルの際、1回に入力あるいは出力される1組のデータを「レコード」と呼び、そのレコードを記録する場所に付けた番号をレコード番号といいます。
セクタ:1クラスタ=8セクタ。
カーソルを画面のキャラクタ座標(x,y)の位置へ移動します。
xは水平座標を表し、省略した場合は0とみなします。
yは垂直座標を表し、省略した場合は現在カーソルがセットされている行とみなします。
これらは共に画面の左上を(0,0)とするキャラクタ座標により指定します。
カーソルスイッチはカーソルの状態を決めるスイッチで、0だと表示しなくなり、1で表示します。N60、N66-BASICの場合、カーソルスイッチの指定はできません。
注意:書式のx座標、y座標の範囲は、N66SR-BASICの範囲です。N60、N66-BASICについては、19ページ「1-16-2 N60、N66-BASICの座標系」を参照してください。
5 REM *** LOCATE ***
10 A$="ABCDEFGH"
20 CLS:FOR I=1 TO 8
30 LOCATE 3+I,I-1:PRINT LEFT$(A$,I)
40 NEXT I
50 END
ファイル番号で指定されたファイルがシーケンシャルファイルの場合、LOC関数では、そのシーケンシャルファイルに対して最後に読み書きしたレコード番号を返しますが、ランダムファイルの場合、そのファイルの最大レコード番号を返します。
指定したファイルは OPEN文によってオープンされていなければなりません。ファイル番号はOPEN文で指定したファイルの番号です。
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 ASA$,14 AS T$
80 IF PR=<M THEN GET#1,PR
90 INPUT "なまえ ";X1$
100 INPUT "じゅうしょ";X2$
110 INPUT "でんわ ";X3$
120 LSET N$=X1$:LSET A$=X2$:LSET T$=X3$
130 PUT #1,PR
140 GOTO 20
注意:上記の例は77ページのGETの例と対応しています。
数式の値に対する自然対数(eを底数とする対数)log eXの値を与えます。
5 REM *** LOG ***
10 FOR I=10 TO 60 STEP 10
20 PRINT " LOG(";I;")=";LOG(I)
30 NEXT I
40 END
EXP:eに対する指数関数の値を与えます。
プリンタのヘッドの水平方向の位置を与えます。
ダミーは意味を持ちません。
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
PRINT:アクティブ画面に情報を表示します。
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 LSET N$=X1$:LSET A$=X2$:LSET T$=X3$
130 PUT #1,PR
140 GOTO 20
注意:上記の例は77ページのGETの例と対応しています。
RSET:バッファにデータを右づめで書き込みます。
メニュー画面に戻ります。本体背面のリセットボタンを押した状態と同様になります。
メモリ上のプログラムとファイル名により指定したプログラムファイルをフロッピィディスクから読み込みながら1つにして、メモリ上に置きます。ここで、指定されたファイルはアスキー型式でセーブされていなければなりません。そうでない場合には、エラーになります。
もし、ファイル中のプログラムと、メモリ中のプログラムに同一の行番号があった場合には、メモリ中の行をファイル中の行に置き換えます。
MERGEコマンドは実行を終了すると、常にコマンドレベルに戻ります。
アスキー型式:SAVE"ファイル名",A ... アスキー型式の意。
文字列の数式1で指定した位置から右側に数式2で指定した長さの文字列を与えます。
数式2を省略した場合、および文字列において数式1で指定された位置から数式2で指定した長さより文字数が少ない場合は、数式1で指定した位置より右側の文字列すべてを与えます。また、文字列の総文字数が数式1より小さい場合には、ヌルストリングを与えます。
5 REM *** MID$ ***
10 A$="ABC1234567890DEF"
20 PRINT MID$(A$,4,10)
30 END
MKS$関数は、数値データをランダムファイル・バッファに対してLSET文またはRSETき込むときに、5バイトの文字列に変換するために使用します。数値が持つ内部表現の値をそのまま対応する文字コードにすることによって数値から文字への変換を行います。
MKS$関数で文字に変換されているデータを数値に戻すにはCVS関数を使用します。
5 REM ***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 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
注意:上記の例は、54ページCVSの例と対応しています。
CVS:MKS$関数で変換された5バイトの文字型データを数値に変換します。
N66-BASICまたはN66SR-BASICモードから内蔵の機械語モニタに制御を移すためのコマンドです。機械語モニタのコマンドは付-22ページ付録2:機械語モニタを参照してください。モニタのBコマンドで、N66-BASICまたはN66SR-BASICモードに戻ります。
現在のファイル名で表されているディスク上のファイルを新しいファイル名に変更します。
ドライブの指定は、ファイル名中にドライブ番号を含めることによって行います。ドライブ番号を省略した場合、ドライブ1を指定したとみなします。
なお、ファイル名の変更を行うファイルは閉じた状態でなければなりません。
10 INPUT "ドライブ NO.";D$
20 CLS
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コマンドは、開かれているファイルがある場合は、それを自動的にすべて閉じます。
数式の値の範囲は-65535から65535までです。
5 REM ***OCT$***
10 FOR I=1 TO 16
20 DE$=RIGHT$( "+STR$(I),3)
30 OC$=RIGHT$( "+OCT$(I),3)
40 HE$=RIGHT$( "+HEX$(I),3)
50 PRINT "DECIMAL:";DE$,"OCTAL:";OC$,"HEX:";HE$
60 NEXT I
70 END
この命令を実行しておくと、エラーが発生したときに割り込みがかかり(エラー割込み機能)、指定された行番号つまりエラー処理ルーチンヘプログラムの制御が移ります。もし行番号の行が存在しなければ、?UL Errorが起こります。
通常、エラーが発生すると、BASICで用意しているエラーメッセージを表示し、プログラムの実行を終了し、コマンドレベルに戻ります。しかし、ON ERROR GOTO文を実行してあると、エラーが発生したときにBASICで用意しているエラー処理を行わず、行番号で指定したエラー処理ルーチンへジャンプします。
エラー割込み機能を禁止するには、ON ERROR GOTO 0を実行してください。その後のエラーはエラーメッセージを表示し、プログラムの実行を停止します。また、エラー処理ルーチンにON ERROR GOTO 0の文がある場合には、BASICはエラー割込みの原因となったエラーのエラーメッセージを表示し、プログラムの実行を停止します。すべてのエラー処理ルーチンにおいて、エラー回復処理を行わないエラー割込みが発生した場合には、ON ERROR GOTO 0を実行することをお勧めします。
注意:エラー処理サブルーチンの実行中にエラーが起きた場合には、それに対するエラーメッセージを表示し、実行は停止します。エラー処理サブルーチンの中ではエラー割込みは起こりません。
10 ON ERROR GOTO 80
20 READ A$
30 PRINT A$
40 GOTO 20
50 ON ERROR GOTO 0
60 END
70 IF ERR=4 THEN 80 ELSE 50
80 PRINT:PRINT "コレイジョウ データ ガ アリマセン"
90 RESUME 50
100 DATANEC ,PC,-****
数式の値によってどの行番号から始まるサブルーチンプログラムを呼び出すかを決定します。行番号の並びは、1から始まる数に対応します。たとえば数式の値が3の場合には、行番号の並びの3番目の行番号から始まるサブルーチンプログラムを呼び出します。数式の値が負になった場合には ?FC Errorになりますが、数式の値が0または行番号の並びの個数より大きい場合にはエラーにならず次の文を実行します。
5 REM *** ON GOSUB***
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
サブルーチンプログラム:RETURN文で終わっている1つの独立したプログラム。
?FC Error(Function Call Error):許されている範囲外の数を使っています。
数式の値によってプログラムのどの行番号ヘジャンプするかを決定します。行番号の並びは1から始まる数に対応します。たとえば、数式の値が3の場合には行番号の並びの3番目の行番号で指定した行にジャンプします。数式の値が負になった場合には、?FC Errorになります。また、数式の値が0または行番号の並びの個数より大きい場合には、エラーにならずに次の文を実行します。
5 REM ***ON GOTO***
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
ファイル名で指定したファイルを、指定したファイル番号で開きます。(オープンします。) 以後、オープンしたファイルへの入出力は、ファイル番号を指定することにより行います。モードは、シーケンシャルファイルへの入出力モードを指定します。モードには次の3種類があります。
INPUT、APPENDモードでは、指定されたファイルが存在しないと、?FF Errorとなります。
OUTPUTモードでは、常に指定した名前のファイルを新しく作り、同一名のファイルがあった場合には、前のファイルは削除します。
入出力モードはFORと共に省略できます。入出力モードを省略した場合、INPUT#文を使うとシーケンシャルファイルのINPUTモード、PRINT#文を使うとシーケンシャルファイルのOUTPUTモードとBASICが自動的に処理します。
ランダムファイルでは、入出力モードの指定を省略します。FIELD文が使われるとランダムファイルと自動的に処理します。ランダムファイルの場合、GET文で既存のファイルから読み込みを行うことを指示し、PUT文で新しくファイルを作り、書き込みを行うことを指示します。
ファイル番号は、1から15までの値を用いることができますが、起動時またはリセット時にHow Many Files?で指定したファイルの数を越えてはなりません。また、すでにオープンしているファイルが利用している番号を用いることはできません。
OPEN文は以後の入出力の際に用いるバッファ領域を確保し、ファイルを閉じるまでの間、そのバッファは指定したファイルへの入出力操作専用に用います。このバッファはファイル番号と同一の番号で参照します。
??FF Eror(File Not Found Error):指定されたファイルが見つかりません。
I/Oポートアドレスで指定されたポートに式で指定された値を出力します。指定できるI/Oポートアドレスおよび式の値の範囲は0から255(&HFF)までです。
I/Oポートアドレスと装置との対応は、資-38ページ資料13:I/Oポートアドレスを参照してください。
10 PRINT "ノイズのおとが きこえますか ?"
20 OUT&HA0,7:OUT&HA1,7
30 OUT&HA0,8:OUT&HA1,8
40 FOR I=0 TO 31
50 OUT&HA0,6:OUT&HA1,I
60 FOR J=1 TO 50:NEXT J
70 NEXT I
80 PRINT"とめるときは stopキーを おしてください。"
90 END
上記のプログラムを実行すると、“サー”というノイズ音を発生します。
INP:指定した入力ポートから値を与えます。
I/Oポート:CPUが周辺機器と信号を入出力するところ。
ジョイスティック端子2に接続したタッチパネルからの入力の有無を検出し、もし入力があれば、その入力座標を求める関数です。
機能は次のように対応しています。
10 SCREEN2,2,2:COLOR5:CLS
20 IF PAD(0)=0 GOTO 20
30 X=PAD(1)*320/256
40 Y=PAD(2)*200/256
50 PSET(X,Y),6:GOTO 20
(x,y)により指定した点を含む境界色で囲まれた領域を、指定した領域色で塗りつぶします。STEPをつけると相対座標となります。
領域色、境界色はともに1≦c≦16のカラーコードで指定します。N66SR-BASICの場合、13≦c≦16のカラーコードを指定すると、パレットの色で塗ります。領域色を省略した場合には、COLOR文で指定したグラフィクスの色を用います。境界色を省略した場合には領域色の指定と同じパレット番号及びカラーコードが境界色として用います。
BASIC モード、ディスプレイモードによって指定できるカラーコードが異なりますので資-54ページ資料17:カラーコードと色の関係を参照してください。
(x,y)は塗り始める座標を指定します。もしこの点が、既に指定した境界色と同じ色であった場合には、PAINT文は何の画面操作も行いません。
5 REM ***PAINT***
10 SCREEN 2,2,2:COLOR 3,5: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 5
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:NEXT C
N66SR-BASICには、13~16までのカラーパレットが用意されています。カラーパレットは、テキストモードでもグラフィックモードでも使えます。PALET文は、どのパレットにどの色を対応させるかを決めるものです。
パレット番号とは、ユーザのために用意された13から16までの4つのカラーパレットにつけられた固有の番号で、ユーザはそれぞれのパレットにどの色を持ってくるかをカラーコードによって指定します。(カラーコードは資-54ページの資料17:カラーコードと色の関係を参照してください。)
パレットの初期値(RESETボタン押下時又はSCREENモード変更時)は、下記のように設定されています。
SCREEN 1,2,3 | ||
---|---|---|
パレット番号 | 色 | カラーコード |
13 | 緑 | 13 |
14 | シアン | 14 |
15 | 黄 | 15 |
16 | 白 | 16 |
もし、カラーパレットを全く変更しなければ、カラーパレットとカラーコードは同じものとして使ってさしつかえありません。カラーパレットを変更すると、上記の表で示したカラーコードの色は変更したカラーパレットの色に変わります。
画面に表示している色及びこれから画面に対して行うすべてのグラフィック命令(PSET、LINEなど)におけるカラー表示は、カラーコード13~16を指定することによって、パレットの13~16に割り付けているカラーコードの色に設定されます。 プログラム中でカラーパレットを変更した場合は、困惑しないようにプログラム終了時にパレットを初期状態に戻しておくようにしてください。初期状態に戻すには、“PALET”と指定します。
10 CONSOLE 0,20,0,0
20 SCREEN 3,2,2:PALET:PALET 13,1:CLS
30 FOR I=14 TO 16
40 LINE(0,(I-13)*50)-STEP(639,15),I,BF
50 NEXT I
60 FOR J=1 TO 100:CO=1:P=13
70 P=P+1:IF P=17 THEN P=14
80 K=K+1:IF K=17 THEN K=1
90 PALET P,K:CO=CO+1:IF CO<6 THEN 70
100 NEXT:END
アドレスによって指定されたメモリ番地の内容を与えます。アドレスは0~65535(&H0~&HFFFF)の値で、もし小数点以下がある場合、整数化してから実行します。 与えられる数値は1バイトの整数です。
10 WIDH 80,25
20 INPUT " start address(hex) ";SA$
30 SA=VAL("&H"+SA$)
40 INPUT " end address(hex) ";EA$
50 EA=VAL("&H"+EA$)
60 CO=1
70 PRINT RIGHT$("000"+HEX$(SA),4);": ";
80 FOR I=SA TO SA+15
90 DA=PEEK(I)
100 PRINT RIGHT$("0"+HEX$(DA),2);" ";
110 NEXT I
120 SA=SA+16:NEXT
130 IF SA<=EA THEN 70
140 END
POKE:メモリ上に指定されたアドレス情報を書き込みます。
PLAY文は音楽を演奏する文です。新しいサウンドLSIを採用しているため、音色が設定でき、また、六重奏まで可能です。第1文字列~第3文字列はFM音源に対する文字列となり、第4文字列~第6文字列はPSG音源に対する文字列となります。
たとえば、次のようなPLAY文の場合
PLAY "c", "e",,"g"
ドとミの音がFM音源の音(この場合は、電子ピアノの音)で鳴り、ソの音が従来(N60、N66-BASICモード)のPSG音源の音で鳴ります。
第1文字列~第3文字列に対しては、“@”(アットマーク)を使って音色を設定できます。設定できる音色番号は、1~12、253~255で、それぞれの番号には次に示すような音色が対応しています。音色設定の初期値は、3(電子ピアノ)になっています。
音色番号 | 音色 |
---|---|
1 | ブラス |
2 | バイオリン |
3 | 電子ピアノ |
4 | エレクトリック・ブラス |
5 | 電子オルガン |
6 | パイプオルガン |
7 | フルート |
8 | オーボエ |
9 | クラリネット |
10 | ビブラフォン |
11 | ハープシコード |
12 | ベル |
253 | ユーザー設定1 |
254 | ユーザー設定2 |
255 | ユーザー設定3 |
たとえば、次のようなPLAY文の場合、
PLAY "@1c","e","@7g"
ブラスの音色でド、電子ピアノの音色でミ、フルートの音色でソの音が鳴ります。
音色番号の253~255は、自由に設定できる音色です。PLAY文を実行する前に必ずワークエリア内にPOKE文を使ってデータをセットしてください。セットしないと、?FC Error になります。
文字列は、音階を表すA~Gのアルファベットと、音の長さを表す数字が基本になり、その他に下表に示すものを指定できます。
文字 | 意味 | 設定値 | 初期値 |
---|---|---|---|
@x | 音色の設定 | 1≦x≦12 253≦x≦255 |
3 |
Mx | エンベロープ周期 | 1≦x≦65535 | 255 |
Sx | エンベロープ形状 | 0≦x≦15 | 0 |
Vx | 音の大きさ | 0≦x≦15 | 8 |
Lx | 音の長さ | 1≦x≦64 | 4 |
Ox | オクターブ | 1≦x≦8 | 4 |
Tx | テンポ | 32≦x≦255 | 120 |
Rx | 休符 | 1≦x≦64 | 4 |
Nx | 音階 | 0≦x≦96 | |
+,# | 音を半音上げる | | |
- | 音を半音下げる | | |
. | 付点 | | |
注意:この項のPLAY文の機能は、N66SR-BASIC以外のN60、N66-BASICでは使用できません。N60、N66-BASICモードを選択した場合は、次の項を見てください。
5 REM ***PLAY***
10 A$="@05o4ee8d8ccdde8d8c"
20 B$="o5gg8f8eed8c8d8e8c2"
30 C$="o4ee8f8ggaag8f8e"
40 D$="o4ee8f8ggaag2"
50 PLAY A$
60 PLAY B$
70 PLAY C$
80 PLAY D$
90 END
PLAY文は音楽を演奏する文で、三重奏まで可能です。文字列は音階を表すA~Gまでのアルファベットと、音の長さを表す数字が基本になっています。その他にオクターブ、音量、エンベロープの周期、形状、テンポなどの指定ができます。詳しくは、付-1ページ付録1:音のハイテクニックな命令を参照してください。
文字 | 意味 | 初期値 |
---|---|---|
Mx | エンベロープ周期の設定 (1≦x≦65535) | 255 |
Sx | エンベロープ形状の設定 (0≦x≦15) | 0 |
Vx | 音量の設定 (0≦x≦15) | 8 |
Lx | 長さの設定 (1≦x≦64) | 4 |
Ox | オクターブの設定 (1≦x≦8) | 4 |
Tx | テンポの設定 (32≦x≦255) | 120 |
Rx | 休符の設定 (1≦x≦64) | 4 |
+ | 音を半音上げる | |
- | 音を半音下げる | |
. | 付点 |
注意:テンポ(T)と長さ(L)は、その積(T×L)が9750を越えないように設定してください。
5 REM *** PLAY1 ***
10 A$="T200S14O5CDEFGEG"
20 B$="T200S14O5CCO4GGEEE"
30 C$="T200S14O5EFGAGBAGO6CCEECC"
40 PLAY A$,B$,C$
50 END
(x,y)により指定されたグラフィック画面上に表示されているドットの色を1≦c≦16のカラーコードで与えます。N66SR-BASICの場合、パレットが設定してあると、13≦c≦16の色はパレットの色に影響します。STEPをつけると相対座標となります。与えられるカラーコードはBASICモード、ディスプレイモードによって色が異なりますので資-54ページ資料17:カラーコードと色の関係を参照してください。
5 REM ***POINT***
10 SCREEN 2,2,2
20 COLOR,1
30 CLS
40 PSET(110,10),1
50 PSET(110,15),2
60 PSET(110,20),3
70 PSET(110,25),4
80 PSET(110,30),5
90 PSET(110,35),6
100 PSET(110,40),7
110 PSET(110,45),8
120 FOR I=10 TO 45 STEP 5
130 PRINT I:POINT(110,I)
140 NEXT
150 GOTO 150
指定されたメモリ上のアドレスに1バイト(8ビット)のデータを書き込みます。数式は書き込まれるデータで、0~255(&H0~&HFF)の値でなくてはいけません。もし小数点以下があると整数化してから実行します。
アドレスは2バイトの整数で、0~65535(&H0~&HFFFF)の値です。ただし、この命令は現在のメモリの内容を書き換えるため、不用意に使うとBASICが使っているワークエリアを壊してしまい、誤動作の原因となることもあります。使うときには、メモリマップなどで使用可能な領域かどうかを確認してください。(メモリマップの詳細は、資-25ページ資料10: メモリマップを参照)
POKE文の逆の働きをする関数としてPEEK関数を用意しています。これらPOKEとPEEK は、効率的なデータの格納や機械語サブルーチンの引数の受け渡しなどに役立ちます。
10 CLEAR ,&HDFFF
20 WIDTH 80,25
30 FOR ADD=&HE000TO &HE00F
40 POKE ADD,DA:DA=DA+1
50 NEXT ADD
60 FOR ADD=&HE000TO &HE00F
70 PRINT RIGHT$(" 0"+HEX$(PEEK(ADD)),4);
80 NEXT ADD
PEEK:メモリの指定されたアドレスの内容を与えます。
ダミーは定数でも変数でもかまいません。N66SR-BASICの場合、WIDTHコマンドで桁数を40にすると関数の値の範囲が0~39で、画面の左端が0、右端が39となり、桁数を80にすると関数の値の範囲が0~79で、画面の左端が0、右端が79となります。また、N66-BASICモードの場合、0~39となり、N60-BASICおよびN60-拡張BASICモードの場合、0~31となります。
5 REM ***POS***
10 CLS
20 FOR I=0 TO 16
30 LOCATE I*2,I,0:PRINT POS(X)
40 NEXT I
50 END
CSRLIN:現在のカーソルの行位置を与えます。
グラフィック画面上の(x,y)で指定したドットをリセットします。STEP をつけた場合は相対座標による指定となります。
つまり、(x,y)で指定したドットを、現在COLOR文で指定している背景の色で塗り変えます。
5 REM ***PRESET***
10 DIM K(750),L(750)
20 INPUT "50までの かずを いれてください。";A
30 SCREEN 2,2,2:CLS
40 FOR J=1 TO A
50 FOR I=1 TO 15
60 IJ=I+(J-1)*15
70 K(IJ)=INT(RND(1)*319)
80 L(IJ)=INT(RND(1)*199)
90 PSET(K(IJ),L(IJ)),I
100 NEXT I:NEXT J
110 COLOR 16: PRINT "ひょうじを おわりました。"
120 PRINT "このてんを けしていきます。"
130 FOR B=1 TO A*15
140 PRESET(K(B),L(B))
150 NEXT B:END
PSET:任意のドットの色を指定します。
5 REM ***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
INPUT:指定した変数へデータをキーボードから入力します。
ファイル番号はOPEN文によって、そのファイルをOUTPUTまたはAPPENDモードとしてオープンしたときに指定した番号です。式はファイルに書き込まれる数値または文字列です。
PRINT#文はPRINT文で画面へ表示するときと全く同じように書き込みますからデータがフロッピィディスクから正しく読み込むことができるように、下記を参照して適切に区切ってフロッピィディスクに書き込むように注意してください。
5 REM ***PRINT#1***
10 OPEN "データ" FOR OUTPUT 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
注意:上記の例は88ページのINPUT#の例と対応しています。
INPUT#:シーケンシャルファイルからデータを読み込みます。
OUTPUT:OPEN文の入出力モードに相当します。シーケンシャルファイルで新しくファイルを作り、書き込みを行うことを指示します。
APPEND:OPEN文の入出力モードに相当します。シーケンシャルファイルで既存のファイルの終わりに追加して書き込みを行うことを指示します。
PRINT#文は、PRINT文に似ていて情報データを出力しますが、出力機器番号を指定することによって出力機器を変えることができます。
出力機器と出力機器番号は次のように対応しています。
PRINT#-0 | ディスプレイ | |||
PRINT#-1 | カセットテープ | |||
PRINT#-2 | RS-232C | |||
PRINT#-3 | プリンタ |
PSET | グラフィック情報をそのまま表示します。 |
PRESET | グラフィック情報をリバース(逆)にして表示します。 |
OR | グラフィック情報と、すでにある画面上のグラフィック情報を1ドットごとにOR(論理和)し、その結果を画面に表示します。 |
AND | グラフィック情報と画面上のグラフィック情報を1ドットごとにAND(論理積)し、その結果を画面に表示します。 |
XOR | グラフィック情報と画面上のグラフィック情報を1ドットごとにXOR(排他的論理和)し、その結果を画面に表示します。 |
5 REM ***PUT@***
10 DIM D(32,32)
20 SCREEN 2,2,2:COLOR 2,1,1:CLS
30 FOR I=6 TO 36 STEP 6
40 CIRCLE(30,40),I,I/6,,,(.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 FOR I=1 TO 5000
140 NEXT I
150 END
GET@:アクティブ画面のグラフィック情報を書き込みます。
OR AND:論理演算
XOR:論理演算の一種で、X=YのときX XOR Y=0、X><YのときX XOR Y=1となります。
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
DATA:READ文で読み込む数値や文字列定数を格納します。
?SN Error (Syntax Eror):文字を書きまちがえています。
?OD Error (Out of Data Error):READ文を実行しようとしてもデータがありません。
RESTORE:READ文で読み込むデータの開始位置を指定します。
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 " ",も,ち,い,ま,す,。
新行番号とは、新しくつける行番号の最初の行番号で、省略した場合は10となります。現在の行番号は行番号のつけ替えを始める現在のプログラムの行番号です。省略値はそのプログラムの最初の行番号です。
RENUMコマンドは、また、GOTO、GOSUB、THEN、ON...GOTO、およびON...GOSUBおよびERL文などで参照している行番号の行が存在しない場合には、"Undefined line XXXXX in yyyyy"を表示します。この場合、N66SR-BASICでは誤った行番号(xxxxx)は RENUMコマンドによって変更しませんが、行番号yyyyyは変更します。N60、N66-BASICでは、誤った行番号xxxxxは RENUM コマンドによってスペース5桁におきかえ、行番号 yyyyは変更します。
RENUMコマンドをプログラム行の順序を変えるのに使うことはできません。たとえば、10、20、30の3つの行がある場合に、RENUM15、30とすることはできません。また、65530以上の行番号を発生することもできません。このような場合には、?FC Error となります。
?FC Error (Illegal Function Call Error):許されている範囲外の数を使っています。
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
READ:DATA文で指定しているデータを読み込み、変数に割り当てます。
DATA:READ文で読み込むデータを指定します。
プログラムの実行を再開する場所に応じて次のように3つの書式を選ぶことができます。
RESUMEまたはRESUME 0 | エラーの原因となった文のすぐ次の文から実行を再開します。 |
RESUME NEXT | エラーの原因となった文からプログラムの実行を再開します。 |
RESUME 行番号 | 行番号で指定した行から実行を再開します。 |
5 REM ***RESUME***
10 ON ERROR GOTO 70
20 READ A
30 PRINT A:
40 GOTO 20
50 ON ERROR GOTO 0
60 END
70 IF ERR=4 THEN 80 ELSE 50
80 PRINT:PRINT "コレイジョウ データ が アリマセン"
90 RESUME:50
100 DATA 0,1,2,3,4,5,6,7,8,9
文字列の右側から数式で指定した文字数の文字列を与えます。数式の値が文字列の総文字数以上の場合には、文字列のすべてを与えます。また、数式の値が0の場合にはヌルストリングを与えます。
RIGHT$("abc",4) → abc
RIGHT$("ab",0) →
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"
LEFT$:文字列の左側から任意の長さの文字列を与えます。
0以上1未満の乱数を与えます。発生する乱数は機能の値によって次のように異なります。
f>0 | 同一乱数系列の次の乱数を発生します。 |
f=0 | 1つ前に発生した乱数を与えます。つまり、同じ値を繰り返します。 |
f<0 | 新しい乱数系列を設定して乱数を発生します。(乱数の初期化) |
5 REM ***RND***
10 FOR I=1 TO 10
20 A=RND(1)
30 PRINT A,INT(A*10)
40 NEXT I
50 END
指定されたドット数だけ、グラフィック画面を上、下、左、右方向へスクロールさせます。
横のドット数を正の値で指定すると、左方向へスクロールし、負の値で指定すると、右方 向へスクロールします。縦のドット数を、正の値で指定すると上方向へスクロールし、負の値で指定すると下方向へスクロールします。ただし、640×200ドットの4色グラフィック画面の場合、横のスクロールは2ドット単位にスクロールしますので、横のドット数を320または-320にすると横に1回転します。
また、ROLLの座標系は、グラフィック座標系と異なり、Y座標が0~203になります。そのため、縦のドット数を204、または-204にすると縦に1回転します。
下記に図を使って示します。
上記のように、Y座標がグラフィック座標のY座標に4ドット追加されるため、COLOR文を変更した場合、グラフィック座標内の背景色と追加された4ドットの背景色が異なることがあります。第3パラメータに“Y”を入力すると、追加された4ドットの背景色はグラフィック座標内の背景色と同じ色になります。
この命令は漢字など日本語の文章を表示するときのスクロールに使うことができます。
ROLL文によって移動した(0,0)は、“ROLL”と指定すると初期状態に戻ります。
10 SCREEN 2,2,2:ROLL:PALET:CLS
20 CIRCLE(159,99),30,13
30 PAINT(159,99),13,13
40 CIRCLE(79,99),30,11
50 PAINT(79,99),11,11
60 CIRCLE(239,99),30,10
70 PAINT(239,99),10,10
80 FOR I=1 TO 204:ROLL 0,1:NEXT
90 FOR I=1 TO 204:ROLL 0,-1:NEXT
100 FOR I=1 TO 320:ROLL 1,0:NEXT
110 FOR I=1 TO 320:ROLL -1,0:NEXT
120 FOR I=1 TO 320:ROLL 1,0:NEXT
130 FOR I=1 TO 320:ROLL -1,-1:NEXT
140 FOR J=1 TO 1000:NEXT
150 END
Y座標の200~203への書き込み方
OUT &HCE,(200~203) POKE (0~319),(色指定)
上記のプログラムを指定します。ただし、ROLL文を実行するとクリアされます。()の中は範囲のいずれかを指定します。
ROLL文によって移動した、原点(0,0)のドット値を与えます。ドット値の範囲は、横0~319、縦0~203です。
10 SCREEN2,2,2:ROLL:PALET:CLS:I=I+1
20 CIRCLE(159,99),30,I+1
30 PALET(159,99),I+1,I+1
40 FOR J=1 TO 204
50 ROLL 0,1
60 GOSUB 110:NEXT
70 FOR J=1 TO 320
80 ROLL 1,0
90 GOSUB 110:NEXT
100 GOTO 10
110 X=ROLL(0)
120 Y=ROLL(1)
130 LINE(17*8,14*10)-STEP(8*7,10),1,BF
140 LOCATE17,14:PRINT X;",";Y
150 RETURN
FIELD文で定義した文字変数に該当する領域(フィールド)にデータを右づめで書き込みます。書き込むデータは文字型データでなければならず、数値データはMKS$によって文字型データに変換します。
文字列式の文字数がFIELD文で割り当てられた長さより短い場合は右づめにし、領域(フィールド)の左側は空白を満たします。また、文字列がフィールドより長い場合は、LSETと同様に文字列の右側の部分が失われます。
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 RSET N$=X1$:RSET A$=X2$:RSET T$=X3$
130 PUT #1,PR
140 GOTO 20
LSET:バッファにデータを左づめで書き込みます。
(1) メモリにあるプログラムの実行を開始します。開始行番号を指定すると、その行から実行を始めます。指定のない場合には、行番号の最も若い行から実行を始めます。プログラムの実行が終わるとコマンドレベルに戻ります。
(2) ファイル名で指定されるプログラムをフロッピィディスクからメモリにロード後、実行を開始します。
RUNコマンドを実行すると、開いているファイルをすべて閉じ、目的のプログラムをロードする前にメモリの内容をクリアします。しかし、Rオプションをつけた場合には、すべてのデータファイルは開いたままになります。
ファイル名で指定されるフロッピィディスク内のファイルに、指定したファイル名でプログラムを書き込みます(セーブします)。指定したファイル名と同じ名前のファイルがフロッピィディスクに存在する場合には更新し、存在しない場合には新しくファイルを作ります。
Aオプションを指定した場合には、プログラムはアスキー形式でセーブします。オプションの指定がない場合には、バイナリ形式でプログラムのセーブを行います。アスキー形式のセーブはバイナリ形式よりも多くのファイルスペースを必要としますが、セーブしたプログラムファイルを操作する場合には、アスキー形式でセーブされていることを必要とします。 たとえば、MERGEコマンドは、アスキー形式のファイルを必要とします。また、アスキー形式でセーブされたファイルは、データファイルとして読み出すことができます。
バイナリ形式:2進数で入出力します。
グラフィック画面に対しての種々のモードを設定します。
ディスプレイモードは3種類でそれぞれ次のような特徴があります。
ディスプレイモード | 文字 | 背景 | ||
---|---|---|---|---|
1 | テキスト(セミグラ)モード | 40文字×20行 80文字×20行 40文字×25行 80文字×25行 |
16色 | 8色 |
2 | 16色グラフィックモード | 320×200ドット (但し、文字は40文字×20行で表示) |
16色 | 16色 |
3 | 4色グラフィックモード | 640×200ドット (但し、文字は80文字×20行で表示) |
4色 | 4色 |
N66SR-BASICのページ数は2ページまでで、1ページ目と2ページ目のスクリーン構成の組合せは次の3種類です。
1ページ目 | 2ページ目 |
---|---|
テキストモード(SCREEN1) | テキストモード(SCREEN1) |
テキストモード(SCREEN1) | 16色グラフィックモード(SCREEN2) |
テキストモード(SCREEN1) | 4色グラフィックモード(SCREEN3) |
SCREEN文の初期状態(RESETボタン押下時)は、1ページ目2ページ目とも40文字×20行のテキストモードになっています。1ページ目はテキストモードと固定されていますが、SCREEN文のディスプレイモードを変更することによって、2ページ目の画面を16色グラフィックモード又は4色グラフィックモードにすることができます。
文字またはグラフィクスが有効になる画面はアクティブ画面と言い、文字やグラフィクスの命令を実行する画面を番号で指定します。但し、テキストモードの場合は文字又はセミグラフィック文字しか表示しません。
表示画面はビジュアル画面と言い、文字やグラフィクスを表示する画面を番号で指定します。また、プログラムの実行中以外の場合には、PAGEキーを押すことによりビジュアル画面を変えることができます。
指定できるアクティブ画面およびビジュアル画面の番号は1~2までです。
<SCREEN文を用いての初期化>
SCREEN文を用いてディスプレイモードを変更してもPALET、ROLL及び、WIDTHは、キー入力待ちの状態になるまで以前の状態が続行されます。プログラム中でこれらを変更する必要がある場合は、以下の様にしてください。
SCREEN 1,a,v:WIDTH40((40,20),(80,25)) SCREEN 1,a,v:PALET SCREEN 2,a,v:PALET SCREEN 2,a,v:ROLL
注意:N66-BASIC、N60-BASICおよびN60-拡張BASICモードの場合、ディスプレイモード、アクティブ画面およびビジュアル画面の番号は1から4までです。なお、画面1ではディスプレイモードは3および4に指定することはできず、アクティブ画面およびビジュアル画面の番号は、1から起動後に“How Many Pages?"で指定した数までです。
N66-BASIC、N60-BASICおよびN60-拡張BASICモードの場合のディスプレイモードについては資-54ページ資料17:カラーコードと色の関係を参照してください。
なお、関数のSCREENの場合は162ページを参照してください。
5 REM ***SCREEN***
10 INPUT"SCREEN NO.(2 OR 3)";S
20 IF S=2 THEN 400
25 IF S=3 THEN 600
26 IF S<>3 AND S<>4 THEN 10
400 SCREEN 2,2,2:CONSOLE 0,20,0,0:CLS
410 COLOR 1,1
420 FOR I=0 TO 90 STEP 6
430 COLOR(I+6)/6
440 LINE(I,I)-(319-I,199-I),,B:NEXT I
460 FOR I=0 TO 90 STEP 6
470 COLOR(I/6)/6
480 LINE(I,I)-(319-I,199-I),,BF
490 NEXT I
500 GOTO 500
600 SCREEN 3,2,2:CONSOLE 0,20,0,0:CLS:FOR I=1 TO 4:PALET I,I+1:NEXT
610 COLOR 1,1
620 FOR I=0 TO 90 STEP 6
630 COLOR(I+6)/6
640 LINE((I*2),I)-(639-(2*I),199-I),,BF
650 NEXT
660 FOR I=0 TO 90 STEP 6
670 COLOR(I+6)/6
680 LINE((I+2),I)-(639-(2*I),199-I),,BF
690 NEXT I
700 GOTO 700
(x,y)により指定された画面上に表示されているキャラクタコードを与えます。文字とキャラクタコードの対応については、資-4ページ資料2:キャラクタコード表を参照してください。上記の書式のx,y座標の範囲は、N6SR-BASICの範囲です。N60、N66-BASICの座標の範囲は、19ページ「1-16-2 N60、N66-BASICの座標系」を参照してください。
注意:N66SR-BASICでX≠Yのときは、約倍の処理時間がかかります。
5 REM ***SCREEN***
10 FOR I=0 TO 4
20 PRINT HEX$(SCREEN(I,0))
30 NEXT I
40 END
数式の値が正なら1、ゼロなら0、負なら-1を与えます。
5 REM ***SGN***
10 INPUT X,Y,Z
20 PRINT "X=";X,"Y=";Y,"Z=";Z
30 PRINT SGN(X*Y*Z)
40 END
数式の値に対する三角関数sin Xの値を与えます。
5 REM ***SIN(X)***
10 FOR I=0 TO 60 STEP 30
20 H=I*3.14159265/180
30 PRINT"X=";I;"゜";
40 PRINT SPC(8):PRINT " サイン のあたいは";SIN(H)
50 PRINT SPC(8):PRINT " コサイン のあたいは";COS(H)
60 PRINT SPC(5):PRINT " タンジェント のあたいは";TAN(H)
70 PRINT:NEXT I
80 END
COS:余弦値(コサイン)を与えます。
TAN:正接値(タンジェント)を与えます。
SOUND文は、サウンドLSIへ直接、データを書き込む命令です。指定されたレジスタに、数式で指定された値を設定します。
N66SR-BASICモードの場合、レジスタはR0~R178までありますが、新しいLSIには空きレジスタ(R43、R35など)があり、それらを指定しても何も行われません。
なお、N66SR-BASIC以外のBASICモードの場合、レジスタはR0~R15までしか使用できませんので注意してください。
R179以上のレジスタを指定した場合は、エラーになります。
詳細は、付-1ページの付録1:音のハイテクニックな命令を参照してください。
10 SOUND 7,7
20 FOR J=1 TO 10
30 FOR I=0 TO 15 STEP.5
40 PRINT I:SOUND 8,I
50 NEXT I
60 FOR I=15 TO 0 STEP -.5
70 PRINT I:SOUND 8,I
80 NEXT I
90 NEXT J
100 END
数式の数だけの空白をもった文字列を与えます。数式の値は0から255まで許されています。
5 REM ***SPACE$***
10 WIDTH 80,25
20 FOR I=-8 TO 8
30 A$=SPACE$(ABS(I*I))+"*"
40 PRINT A$
50 NEXT I
60 END
SPC:任意の数だけ空白を与えますが、PRINT文の出力文中でのみ使用することができます。
SPC関数はPRINT文の出力文中でのみ使用することができます。
ただし、N66SR-BASIC以外のBASICモードでは、LPRINTでも使用することができます。
数式の値は、0から255まで許されます。
5 REM ***SPC***
10 FOR I=1 TO 25
20 PRINT "さいとう";
30 PRINT SPC(I)
40 PRINT "たけし";
50 NEXT I
60 END
数式の値の平方根 を与えます。
5 REM *** SQR ***
10 FOR I=1 TO 9
20 PRINT " ルート";I;" は";SQR(I);" です。"
30 NEXT I
40 END
ジョイスティックまたはキーボードのカーソル移動キーの状態を与えます。機能は次のようになっています。
f=0 | キーボードのカーソルキー |
f=1 | ジョイスティック1のスティック |
f=2 | ジョイスティック2のスティック |
与えられる値は1から8までの数値で、その数値は方向を表します。
キーボードのカーソル移動キーの場合には、2、4、6、8方向は2つのキーを同時に押します。
2の方向[↑]と[→]、4の方向[↓]と[→]、6の方向[↓]と[←]、8の方向[↑]と[←]
5 REM ***STICK***
10 PRINT STICK(0)
20 PRINT STICK(1)
30 PRINT STICK(2)
40 GOTO 10
STRIG:ジョイスティックのトリガーボタンの状態を与えます。
STOP文はプログラムの実行を停止するためのもので、プログラム中のどこで使用してもかまいません。
STOP文を実行すると、次のメッセージを表示します。
Break in nn(nnは停止した行番号)
CONTコマンドによりプログラムの実行を再開できます。ただし、プログラムの実行停止中にプログラムの修正を行った場合には再開できません。
5 REM ***STOP***
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
CONT:STOP キーの入力、またはSTOP文によって停止したプログラムの実行を再開します。
5 REM ***STR$***
10 A=1984:B=12:C=7
20 PRINT STR$(A)+"年";STR$(B)+"月";STR$(C)"+"日"
30 END
VAL:文字列の表わす数値に変換します。
ジョイスティックのトリガーボタンまたはキーボードのスペースキーの状態を与えます。機能は次のようになっています。
f=0 | キーボードのスペースキー |
f=1 | ジョイスティック1のトリガーボタン |
f=2 | ジョイスティック2のトリガーボタン |
与える値は0か1で、トリガーボタンまたは、スペースキーを押していれば1、押していなければ0を与えます。
5 REM ***STRIG***
10 PRINT STRIG(0);
20 PRINT STRIG(1);
30 PRINT STRIG(2)
40 GOTO 10
STICK:ジョイスティックの状態を与えます。
文字列または数式によって与えた文字を、式で指定した数だけ与えます。
与える文字は、文字列または数式によって指定します。文字列の場合は、与える文字列の最初の一文字が有効です。数式の場合は、値が0から255の範囲に限られ、この値をキャラクタコードとみなし、対応する文字を採用します。
5 REM ***STRING$***
10 INPUT A$
20 L=LEN(A$)
30 PRINT STRING$(L+4,"♥")
40 PRINT "♥ ";SPC(LEN(A$)+1);"♥"
50 PRINT "♥ ";A$;" ♥"
60 PRINT "♥ ";SPC(LEN(A$)+1);"♥"
70 PRINT STRING$(L+4,"♥")
80 END
TAB関数はPRINT文の出力文中のみで使用できます。
ただし、N66SR-BASIC以外のBASICモードではLPRINT文中でも使用できます。
数式の値は、0から255(0が左端)までです。
5 REM ***TAB(X)***
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
男性または女性の声で音声を出力します。音声の文字列は、声の種類、発声速度の指定、固定語の指定、ローマ字表記のテキスト(文字列)から成り、その作り方は応用編「1-2 声を出してみよう」を参照してください。また、音声文字列の前につける制御文字列の3文字目を“#”にし、楽譜文字列を音声文字列のあとにコロン“:”で区切ってつけると、歌を歌います。(応用編「1-3 歌わせてみよう」参照)
N66-BASICの場合、How Many Pages?では画面を2以上に指定してください。TALK文では、VRAM用領域&H0~&H3FFFをワークエリアとして使用しており、そのエリアは画面数の最大画面番号の画面エリアになっています。したがって、How Many Pages?で指定した画面数の最大画面番号の画面エリアが失われます。
5 REM ***TALK***
10 INPUT "じこくを にゅうろく してください。(15:35のように)";A$
20 B=VAL(RIGHT$(A$,2))
30 A=VAL(LEFT$(A$,2))
40 IF B>59 THEN 80
50 IF A>0 AND A<12 THEN 90
60 IF A>=12 AND A<18 THEN 100
70 IF A>=18 AND A<25 THEN 110
80 TALK "f3 tadasiku iretekudasai":GOTO 10
90 TALK "f3 ohyayougozaimasu*":GOTO 120
100 TALK "f3 koxniciwa":GOTO 120
110 TALK "f3 koxbaxwa'"
120 END
数式の値に対する三角関数tan xの値を与えます。
5 REM ***TAN(X)***
10 FOR I=0 TO 60 STEP 30
20 H=I*3.14159265/180
30 PRINT "X=";I;"°"
40 PRINT SPC(5):PRINT "タンジェント のあたいは";TAN(H)
50 PRINT SPC(8):PRINT " サイン のあたいは";SIN(H)
60 PRINT SPC(8):PRINT "コサイン のあたいは";COS(H)
70 PRINT:NEXT I
80 END
SIN:正弦値(サイン)を与えます。
COS:余弦値(コサイン)を与えます。
(2/999)秒ごとに最下位の桁が2ずつ増えるタイマーですので、4行目が約1秒(1.02564秒)になります。これを補正して1秒を単位とするタイマーのプログラムを例に示します。ただし、TIME関数はハードウェアの影響を受けるため、正確なタイマーとして使用できません。
5 REM ***TIME***
10 CLS
20 REM WIDTH 40,20
30 X=TIME
40 Y=TIME-X
50 Z=INT(Y/999)
60 LOCATE 19,9,0:PRINT Z
70 GOTO 40
ユーザの作成した機械語関数ルーチン(USR関数)を呼び出します。USR関数は、あらかじめ、POKE文でメモリ中に準備し、またDEF USR文により、その実行開始番地を設定していなければなりません。
引数によりBASICから機械語ルーチンへの値の受け渡しをすることができます。
USR関数が呼び出され、対応する機械語ルーチンに制御が移った時、Aレジスタは、渡された引数の型を示す値を持っています。その値と意味は次のようになっています。
Aの値 | 引数の型 |
---|---|
2 | 2バイトの整数(2の補数表現) |
3 | 文字列型 |
4 | 単精度型 |
引数が文字列の場合には(DE)レジスタペアが4バイトから成るストリング・ディスクリプタを指しています。ストリング・ディスクリプタと呼ばれる領域は次のようになっています。
USR関数がBASICに値を返すにはFACで求めた関数値を設定することで行えます。通常返す値は、引数として渡した値と同じ型となります。
また機械語プログラムを作成する際には次の点に注意してください。
10 CLEAR,&HDFFF
20 DEF USR=&HE000
30 FOR I=&HE000 TO &HE01F
40 READ D$:D=VAL("&H"+D$)
50 POKE I,D:NEXT I
60 PRINT"アルファベットを こもじでにゅうりょくしてください。"
70 PRINT"にゅうりょくをおえたら リターンキーをおしてください。"
80 INPUT A$
90 B$=USR(A$):PRINT B$
100 PRINT "おおもじに なりましたね!":END
110 DATAFE,03,C0,EB,56,23,23,7E,23,66
120 DATA6F,14,15,C8,7E,FE,61,DA,1C,E0
130 DATAFE,7B,D2,1C,E0,E6,DF,77,23,C2
140 DATA0C,E0
実行後、英字を入力すると、CAPSキーに関係なく英字が表示されます。
POKE:メモリ上に指定されたアドレスに情報を書き込みます。
DEF USR:機械語で作られたユーザ関数の実行開始番地を定義します。
ユーザの作成した機械語関数ルーチン(USR関数)を呼び出します。USR関数はあらかじめメモリ内に準備されており、その実行開始番地が設定されていなければなりません。実行開始番地の設定は&HEAEB番地に開始番地の下位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
POKE:メモリ上に指定されたマドレスに情報を書き込みます。
文字列を数値に変換します。もし、文字列の最初の文字が+、-、&または数字以外ならば、VALの値は0になります。(N66SR-BASICの場合、文字列の最初のスペースも0になります。)また、文字列の途中で数値に変換できない文字がある場合には、その文字以後の文字列を無視します。(文中列中のスペースも無視します。)
10 FOR I=0 TO 15
20 PRINT "16しんの ";HEX$(I);" の 10しんすうは";VAL("&H"+HEX$(I))
30 NEXT I
40 END
STR$:数値を文字列に変換します。
WAIT文を実行すると、指定した入力ポートのビットパターンが指定した状態になるまでプログラムの実行を中断します。指定したポートから読み込んだデータと式2とのXORの結果を得、式1のANDが取られます。もしその結果が0(偽)なら、BASICはもう一度ポートの状態を読み込み同じ操作を繰り返します。もし結果が0でなければ(真)、プログラムの実行 は次の文に移ります。式2を省略した場合は0と見なします。
注意:WAIT文の実行により無限ループにはいってしまう場合があります。その場合はPC-6001MKISR本体の背面リセットボタンを押してください。
5 REM ***WAIT***
10 PRINT "この プログラムは、プリンタのじゅんびが"
20 PRINT "できるまで プログラムのじっこうを"
30 PRINT "ていしする プログラムです。"
40 PRINT "プリンタのじゅんびをしてください。"
50 WAIT &HC0,255,253
60 PRINT:PRINT "プリンタのじゅんびが できました。"
70 END
XOR:排他的論理和
AND:論理積
テキスト画面に表示する文字の行数と1行の桁数を指定します。
桁数は80、40どちらかを指定します。桁数を省略した場合、現在の桁数が採用します。行数は20、25どちらかを指定します。省略された場合、現在の行数を採用します。つまり、 テキスト画面におけるキャラクタ座標系は下図のようになります。
注意:グラフィック画面にもキャラクタ座標があります。ただし、キャラクタ座標は固定で変更することはできません。下記のような設定になっています。
16色グラフィックモードのキャラクタ座標 | 40文字×20行(固定) |
4色グラフィックモードのキャラクタ座標 | 80文字×20行(固定) |
5 REM ***WIDTH***
10 PRINT "ヒョウジ シタイ ガメン ノ コウセイハ "
20 PRINT "1.(80ケタ X 25ギョウ)"
30 PRINT "2.(80ケタ X 20ギョウ)"
40 PRINT "3.(40ケタ X 25ギョウ)"
50 PRINT "4.(40ケタ X 20ギョウ)"
60 INPUT A
70 ON A GOTO 90,100,110,120:GOTO 10
90 WIDTH 80,25:PRINT "(80ケタ X 25ギョウ)":GOTO 130
100 WIDTH 80,20:PRINT "(80ケタ X 20ギョウ)":GOTO 130
110 WIDTH 40,25:PRINT "(40ケタ X 25ギョウ)":GOTO 130
120 WIDTH 40,20:PRINT "(40ケタ X 20ギョウ)":GOTO 130
130 END
解説
数式の値の絶対値|X|を与えます。