N60-BASICはMicrosoft BASICにNEC独自の拡張を行ったものである。 PC-6001シリーズのBASICはN60、N60m、N66といったように機種毎に拡張されたものが使用されている。 N60m-BASICはTALK文の仕様以外はほぼN66-BASICとほぼ同じである。 同様にN66SR-BASICは画面、サウンド周り以外はN66-BASICとほぼ同じである。 コマンド名にN60EXと付いている場合はN60-EXTEND BASIC以降に対応していると意味になる。 同様にN66と付いている場合はN60m, N66-BASIC以降、N66SRと付いている場合はN66SR-BASICに対応している意味となる。 なお、N60-BASICに関しては初代PC-6001のものと、それ以降のものでは画面仕様が異なることに留意。 |
N60/N66-BASIC簡易リファレンス | |||
---|---|---|---|
コマンド | |||
表記 | 凡例 | 使用例 | 説明 |
AUTO N60EX | AUTO [行番号][,増分] | AUTO 100,5 | 先頭に自動的に行番号を発生させる(増分を省略した場合は10) |
DELETE | DELETE 行番号[,[行番号2]][,...] DELETE [行番号][-[行番号2]] | DELETE 10,100 DELETE 100-200 | 指定した行番号を削除する 指定した範囲の行番号を削除する |
LIST | LIST {[行番号] | [.]} LIST [行番号][,[行番号2]][,...] LIST [行番号][-[行番号2]] | LIST LIST 10,100 LIST 100-200 | メモリ上のプログラムを表示する 指定した行番号を表示する 指定した範囲の行番号を表示する |
LLIST | LLIST {[行番号] | [.]} LLIST [行番号][,[行番号2]][,...] LLIST [行番号][-[行番号2]] | LLIST LLIST 10,100 LIST 100-200 | メモリ上のプログラムをプリンタに出力する 指定した行番号をプリンタに出力する 指定した範囲の行番号をプリンタに出力する |
LIST L N66 only | LIST L[,行番号] | LIST L,10 | 指定した行番号が使われている行の行番号を表示する |
LIST V N66 only | LIST V[,変数名] | LIST V,Z | 指定した変数名が使われている行の行番号を表示する |
LLIST L N66 only | LLIST L[,行番号] | LLIST L,10 | 指定した行番号が使われている行の行番号をプリンタに出力する |
LLIST V N66 only | LLIST V[,変数名] | LLIST V,Z | 指定した変数名が使われている行の行番号をプリンタに出力する |
RENUM N60EX | RENUM [新行番号][,旧行番号] | RENUM 1000,10,100 | 新行番号を先頭に行番号をつけ直す |
NEW | NEW | NEW | プログラムを全て消去し、変数を初期化する |
CLEAR | CLEAR [文字列領域サイズ][,BASIC使用上限アドレス] | CLEAR 32767,&hf0fb | 変数を初期化し、領域サイズとBASIC使用上限アドレスを設定する |
CONT | CONT | CONT | STOPキーやSTOP,ENDで終了したプログラムの実行を再開する |
RUN | RUN {[行番号] | "[ファイル装置番号:]ファイル名"} | RUN 100 | 指定した行番号からプログラムを実行する(行番号を省略した場合は先頭から、ファイル名を指定した場合は読み込んで実行する) |
CSAVE | CSAVE "ファイル名" | CSAVE "test" | カセットテープにプログラムを保存する |
CSAVE* | CSAVE* 数値配列名 | CSAVE* X | カセットテープに数値配列情報を保存する |
CLOAD | CLOAD ["ファイル名"] | CLOAD "test" | カセットテープからプログラムを読み込む(ファイル名を省略した場合は最初に見つかったプログラムを読み込む) |
CLOAD* | CLOAD* 数値配列名 | CLOAD* X | カセットテープからCSAVE*で保存された数値配列情報を読み込む |
CLOAD? | CLOAD? ["ファイル名"] | CLOAD? "test" | カセットテープのプログラムを照合する(ファイル名を省略した場合は最初に見つかったプログラムを照合する) |
LCOPY | LCOPY [コピーモード] | LCOPY | 画面の情報をプリンタに出力する・コピーモード(N60、N60EXでは省略) |
SAVE N60EX | SAVE "[ファイル装置番号:]ファイル名"[,A] | SAVE "1:test.bas" | 記録メディアに[ASCII形式で]プログラムを保存する |
LOAD N60EX | LOAD "[ファイル装置番号:]ファイル名"[,R] | LOAD "1:test.bas" | 記録メディアからプログラムを読み込む(Rを付加した場合は実行も行う) |
BSAVE N60EX | BSAVE "[ファイル装置番号:]ファイル名",開始アドレス,サイズ | BSAVE "1:test.bin",&hd000,&h1000 | 記録メディアにマシン語ファイルを保存する |
BLOAD N60EX | BLOAD "[ファイル装置番号:]ファイル名"[,開始アドレス][,R] | BLOAD "1:test.bin",&hd000 | 記録メディアからマシン語ファイルを読み込む(Rを付加した場合は実行も行う) |
FILES N60EX | FILES [ファイル装置番号] | FILES 1 | 記録メディアにあるファイル一覧を出力する |
LFILES N60EX | LFILES [ファイル装置番号] | LFILES 1 | 記録メディアにあるファイル一覧をプリンタに出力する |
KILL N60EX | KILL "[ファイル装置番号:]ファイル名" | KILL "1:test.bas" | 記録メディア上のファイルを削除する |
NAME N60EX | NAME "[ファイル装置番号:]旧ファイル名" as "[ファイル装置番号:]新ファイル名" | NAME "1:test.bas" as "1:test2.bas" | 記録メディア上のファイル名を変更する |
MERGE N60EX | MERGE "[ファイル装置番号:]ファイル名" | MERGE "1:test.bas" | 記録メディア上のASCII形式ファイルとメモリ上のプログラムをマージする |
MON N66 | MON | MON | モニタコマンドモード ※にする |
EXEC | EXEC 開始アドレス | EXEC &H1234 | マシン語プログラムを実行する |
MENU N66SR | MENU | MENU | メニュー画面に戻る |
[戻る] | |||
ステートメント:プログラム制御 | |||
表記 | 凡例 | 使用例 | 説明 |
END | END | END | プログラムを終了する |
STOP | STOP | STOP | プログラムを一時停止する |
REM N66SR | {REM | '} [注釈] | REM TEST | 注釈を入れる(実行には無関係) |
FOR...TO...STEP〜NEXT | FOR 変数=開始値 TO 終了値 [STEP 増分]〜NEXT [変数][,変数2][,...] | FOR I=0 TO 10 STEP 2〜NEXT I | FORからNEXTまでの処理を繰り返す |
GOSUB | GOSUB 行番号 | GOSUB 1000 | サブルーチンを呼び出す |
RETURN | RETURN [行番号] | RETURN | サブルーチンから復帰する |
GOTO | GOTO 行番号 | GOTO 1000 | 指定した行番号から実行する |
IF...THEN | GOTO | IF 論理式 {THEN 文 | GOTO 行番号} | IF A=0 {THEN END | GOTO 10} | 論理式の条件判断をする |
ON...GOTO | ON 式 GOTO 行番号[,行番号2][,...] | ON A GOTO 100,200 | 式の値に応じて指定された行番号へ分岐する |
ON...GOSUB | ON 式 GOSUB 行番号[,行番号2][,...] | ON A GOSUB 100,200 | 式の値に応じて指定された行番号のサブルーチンを呼び出す |
ON ERROR GOTO N66SR | ON ERROR GOTO 行番号 | ON ERROR GOTO 100 | エラー発生時の分岐処理ルーチンを指定する ※エラーメッセージ一覧 |
RESUME N66SR | RESUME {[0] | NEXT | 行番号} | RESUME 100 | エラー処理を終了し、実行を再開する0 : エラー原因になった行から再開する(0を省略しても同じ) |
WAIT N60EX | WAIT ポート番号,式1[,式2] | WAIT 1,&H80 | ポートをモニタし、指定された値になるまでプログラムの実行を停止する |
[戻る] | |||
ステートメント:変数関連 | |||
表記 | 凡例 | 使用例 | 説明 |
INPUT | INPUT [文字列{; | , }]変数[,変数2][,...] | INPUT "X=";X | キーボードから入力した値を変数に代入する |
LET | LET 変数=式 | LET A=1 | 変数に値を代入する(LETは省略できる) |
DATA | DATA 定数[,定数][,...] | DATA "TEST",765 | READで読み込むデータを定義する |
READ | READ 変数[,変数][,...] | READ A$,B | DATAで定義したデータを変数に代入する |
RESTORE | RESTORE [行番号] | RESTORE 1000 | READで読み込むDATAの先頭行を設定する |
DEF FN | DEF FN関数名(パラメータ[,パラメータ2[,...]])=定義式 | DEF FNTEST(X,A,B)=X^2+AX+B | ユーザ定義関数を定義する |
DIM | DIM 変数名(最大値1[,最大値2][,...])[,...] | DIM A(100,10),B$(100) | 配列変数の定義をする |
ERASE N60EX | ERASE 変数名[,変数名2[,...]] | ERASE A,B$ | 配列変数を消去する |
[戻る] | |||
ステートメント:マシン語関連 | |||
表記 | 凡例 | 使用例 | 説明 |
DEF USR | DEF USR[番号]=アドレス | DEF USR1=&HD000 | USRで呼び出すマシン語サブルーチンを定義する |
POKE | POKE アドレス,数式 | POKE &HD000,&HC9 | 指定したアドレスに値を書き込む |
[戻る] | |||
ステートメント:画面関連 | |||
表記 | 凡例 | 使用例 | 説明 |
CLS | CLS | CLS | 画面を消去する |
LOCATE | LOCATE X,Y[,カーソル表示] | LOCATE 10,10 | 指定した位置にカーソルを移動する |
PRINT | ? [式[{, | ;}式2[,...]]] | PRINT "HELLO,WORLD" | 画面上に表示する ※ | |
COLOR | COLOR [テキスト/グラフィック色][,バックグラウンド色][,色の組み合せ] | COLOR 1,1,1 | テキスト/グラフィックとバックグラウンド及び組み合わせを指定する ※ |
PALET N66SR | PALET [パレット番号,カラーコード] | PALET 13,1 | カラーパレットを変更する(パレット番号:13〜16) ※ |
CONSOLE | CONSOLE [スクロール開始行][,[スクロール行の長さ]][,[ファンクションキー表示モード]][,[キークリック音モード]][,[プリンタオプション N66SR]] | CONSOLE 0,20,1,0 | テキスト画面を設定する |
SCREEN | SCREEN 画面モード[,アクティブページ][,ディスプレイページ] | SCREEN 2 | 画面のモードを設定する ※ |
WIDTH N66SR | WIDTH 画面サイズ | WIDTH 80 | 画面桁数を設定する(40/80) |
CIRCLE | CIRCLE [STEP](X,Y),半径,[カラーコード],[開始角度],[終了角度],[比率] | CIRCLE(0,0),100,2 | 円を描画する |
GET@ | GET@(X1,Y1)-{(X2,Y2) | STEP(X,Y)},配列変数 | GET@(0,0)-(15,15),A% | 画面上のグラフィックパターンを配列変数に読み込む |
PUT@ | PUT@(X1,Y1)-{(X2,Y2) | STEP(X,Y)},{配列変数 | KANJI(漢字コード)}[,条件][,フォアグラウンドカラー][,バックグラウンドカラー] | PUT@(0,0),A%,PSET PUT@(0,0),KANJI(&K2033) | GET@で取り込んだパターンや指定した漢字を表示するPSET : そのまま描画する |
LINE | LINE{(X1,Y1) | STEP(X1,Y1)}-{(X2,Y2) | STEP(X2,Y2)}[,カラーコード][,{B | BF} | LINE(0,0)-(100,100),4,BF | 直線(B:四角形,BF:塗りつぶした四角形)を描画する |
PAINT | PAINT{(X,Y) | STEP(X,Y)}[,領域カラーコード][,境界カラーコード] | PAINT(100,100),5,2 | 指定した境界色で囲まれた領域を塗る |
PSET | PSET{(X,Y) | STEP(X,Y)}[,カラーコード] | PSET(100,100),2 | 指定した座標にドットを表示する |
PRESET | PRESET{(X,Y) | STEP(X,Y)}[,カラーコード] | PRESET(100,100),2 | 指定した座標のドットを消去する |
KANJI N66 | KANJI {(X,Y) | STEP(X,Y)}[,カラーコード],漢字コード1[,...] | KANJI(100,100),2,777 | 漢字を表示する |
ROLL N66SR | ROLL X,Y | ROLL 0,1 | グラフィック画面を縦横にスクロールさせる |
[戻る] | |||
ステートメント:サウンド関連 | |||
表記 | 凡例 | 使用例 | 説明 |
SOUND | SOUND レジスタ,データ | SOUND 15,10 | サウンドLSIを制御する ※ |
PLAY | PLAY 文字列1[,文字列2[,文字列3][,...,文字列6 N66SR]]] | PLAY "O3CDEFGAB" | MML ※の文法に従って演奏する(N66SRでは文字列1〜3はFM音源、文字列4〜6はPSG音源) |
BGM N66SR | BGM 制御モード | BGM 1 | PLAY文の実行を制御する・制御モード |
TALK N66 | TALK 制御文字列 | TALK "F42." TALK "M2 KOXNICIWA." | 音声を出力する ※ |
[戻る] | |||
ステートメント:ディスク関連 | |||
表記 | 凡例 | 使用例 | 説明 |
OPEN N60EX | OPEN ファイル名 [FOR モード] AS #ファイル番号 | OPEN "test.bas" FOR INPUT AS #1 | 指定したファイルをファイル番号でOPENするINPUT : 入力モード |
CLOSE N60EX | CLOSE #ファイル番号1[,#ファイル番号2][,...] | CLOSE #1 | 指定したファイル番号のファイルをCLOSEする |
FIELD N60EX | FIELD #ファイル番号,フィールド幅 as 文字変数[,フィールド幅] [as ....] | FIELD #1,128 as TEST$,64 | ランダムファイルバッファにフィールド変数を割り当てる |
GET N60EX | GET #ファイル番号[,数式] | GET #1,10 | ファイルからデータをファイルバッファに読み込む |
PUT N60EX | PUT #ファイル番号[,数式] | PUT #1,10 | ファイルバッファのデータをファイルに書き込む |
INPUT # | INPUT #ファイル番号 | 入力機器番号,変数名1[,変数名2] | INPUT #1,A,B | シーケンシャルファイル中のデータを読み込んで変数に代入する(LINEを付加した場合はコンマなどを無視して代入)・入力機器番号(-nで指定) |
PRINT # | PRINT #ファイル番号 | 出力機器番号,式[;式2[,...]] | PRINT #1,A;B | ファイルにデータを書き込む・出力機器番号(-nで指定) |
DSKO$ N60EX | DSKO$(ファイル装置番号,ヘッド番号,トラック番号,セクタ番号) | DSKO$(1,1,2,3) | ファイル装置に直接256bytesの文字列を書きこむ |
LSET N60EX | LSET 文字変数=文字列 | LSET A$="TEST" | ランダムファイルバッファのフィールドに左詰めで文字列を代入する |
RSET N60EX | RSET 文字変数=文字列 | RSET A$="TEST" | ランダムファイルバッファのフィールドに右詰めで文字列を代入する |
[戻る] | |||
ステートメント:その他 | |||
表記 | 凡例 | 使用例 | 説明 |
ERROR N66SR | ERROR エラー番号 | ERROR 19 | 指定したエラー番号のエラーを発生させる ※エラーメッセージ一覧 |
KEY | KEY 番号,文字列 | KEY 1,"TEST" | 指定した番号のファンクションキーに文字列を設定する |
LPRINT | LPRINT [式[{, | ;}式2[,...]]] | LPRINT A$ | プリンタに出力する |
OUT | OUT ポート番号,数式 | OUT &HD0,10 | ポートに値を出力する |
[戻る] | |||
文字列関数 ※ | |||
表記 | 凡例 | 使用例 | 説明 |
ASC | ASC(文字列式) | ASC("TEST") | 文字列先頭のキャラクタコードを返す |
VAL | VAL(文字列式) | VAL("123") | 文字列を数値に変換する |
CHR$ | CHR$(数式) | CHR$(41) | 指定したキャラクタコードの文字を返す |
GRP$ N66SR | GRP$(数式) | GRP$(41) | 指定したセミグラフィックキャラクタコードの文字を返す |
STR$ | STR$(数式) | STR$(A) | 数値を文字列に変換する |
STRING$ N66SR | STRING$(式,[文字列 | 数式}) | STRING$(10,"=") | 指定した文字数だけ追加した文字列を返す |
SPACE$ N66SR | SPACE$(数式) | SPACE$(A) | 指定した長さの空白文字列を返す |
SPC | SPC(数式) | SPC(A) | 指定した長さの空白を返す(出力文字式内でのみ使用) |
TAB | TAB(数式) | TAB(A) | 指定した位置まで空白を返す(出力文字式内でのみ使用) |
DATE$ N66SR | DATE$ | DATE$="10/01/01" | 日付文字列変数を操作する |
TIME$ N66SR | TIME$ | TIME$="12:34:56" | 時刻文字列変数を操作する |
HEX$ N60EX | HEX$(数式) | HEX$(255) | 10進数を16進数文字列に変換する |
OCT$ N66SR N60EX | OCT$(数式) | OCT$(255) | 10進数を8進数文字列に変換する |
LEN | LEN(文字列式) | LEN(A$) | 文字列の文字数を返す |
LEFT$ | LEFT$(文字列式,式) | LEFT$(A$,2) | 文字列の左側から式で指定した桁数の文字列を返す |
MID$ | MID$(文字列式,式1[,式2])[=文字列] | MID$(A$,2,1) | 文字列の式1で指定した位置から式2で指定した桁数の文字列を返す(=文字列を指定した場合はその文字列と置換する) |
RIGHT$ | RIGHT$(文字列式,式) | RIGHT$(A$,2) | 文字列の右側から式で指定した桁数の文字列を返す |
[戻る] | |||
数値関数 ※ | |||
表記 | 凡例 | 使用例 | 説明 |
INT | INT(数式) | INT(A) | 数式の整数値を返す(数式の値を超えない整数値) |
SGN | SGN(数式) | SGN(A) | 数式の符号を返す |
RND | RND(数式) | RND(A) | 0以上1未満の乱数を返す正数: 次の乱数を発生する(省略した場合も同様) |
[戻る] | |||
数学関数 | |||
表記 | 凡例 | 使用例 | 説明 |
ABS | ABS(数式) | ABS(-1000) | 絶対値を返す |
SIN | SIN(数式) | SIN(3.14) | 正弦(サイン)の値を返す |
COS | COS(数式) | COS(3.14) | 余弦(コサイン)の値を返す |
TAN | TAN(数式) | TAN(3.14) | 正接(タンジェント)の値を返す |
EXP | EXP(数式) | EXP(1) | 自然対数の低(e)に対する指数関数の値を返す |
LOG | LOG(数式) | LOG(1) | 自然対数の値を返す |
SQR | SQR(数式) | SQR(2) | 平方根の値を返す |
[戻る] | |||
その他関数 | |||
表記 | 凡例 | 使用例 | 説明 |
DSKF N60EX | DSKF(ファイル装置番号) | DSKF(1) | 指定したファイル装置の残り容量(クラスタ)を返す |
DSKI$ N60EX | DSKI$(ファイル装置番号,ヘッド番号,トラック番号,セクタ番号) | DSKI$(1,1,2,3) | ファイル装置から直接読み込んだ256bytesの文字列を返す |
LOC N60EX | LOC(ファイル番号) | LOC(1) | 指定したファイル番号の論理的位置を返す |
LOF N60EX | LOF(ファイル番号) | LOF(1) | 指定したファイル番号の総レコード数を返す |
EOF N60EX | EOF(ファイル番号) | EOF(1) | シーケンシャルファイルの終わりを検出する |
FRE | FRE(機能) | FRE(0) | 使用可能なメモリサイズを返す(機能指定が数値ならメモリ未領域が、文字なら未使用文字列領域のサイズが返される) |
INKEY$ | INKEY$ | INKEY$ | 押されたキーの値を返す |
STICK | STICK(機能) | STICK(0) | ジョイスティックの方向を返す0:キーボードのカーソルキー |
STRIG | STRIG(機能) | STRIG(0) | ジョイスティックのトリガーボタン状態を返す0:キーボードのスペースキー |
PAD N60EX | PAD(機能) | PAD(0) | タッチパネルからの入力の有無を検出して、入力座標を返す0:入力の有無を検出し、入力がない時は0、ある時は1を返す |
SCREEN | SCREEN(X,Y) | SCREEN(10,10) | 指定した位置のアスキーコードを返す |
ROLL N66SR | ROLL(機能) | ROLL(0) | ROLL文によって何ドットスクロールしたかを返す0:横のスクロール値(0〜319) |
CSRLIN | CSRLIN | CSRLIN | 現在のカーソル行位置を返す |
POS | POS(番号) | POS(0) | 現在のカーソル桁位置を返す(番号指定は無視される) |
POINT | POINT{(X,Y) | STEP(X,Y)} | POINT(100,100) | 指定した座標のカラーコードを返す |
LPOS | LPOS(番号) | LPOS(0) | プリンタのヘッド位置を返す(番号指定は無視される) |
INP | INP(ポート番号) | PORT(100) | 指定したポート番号の入力値を返す |
PEEK | PEEK(アドレス) | PEEK(&HD000) | 指定したアドレスの値を返す |
USR | USR番号(式) | I=USR1(TEST) | マシン語関数を呼び出す |
TIME | TIME | TIME | 電源ON時からのタイムカウンタを返す |
ERR N66SR | ERR | ERR | 発生したエラーのエラーコードを返す |
ERL N66SR | ERL | ERL | エラーの発生した行番号を返す |
[戻る] |
※ モニタコマンド
D[adr1,adr2] : Dump(メモリをダンプする)
(adr1,adr2 : 開始アドレス、終了アドレス)
Q[adr1,adr2] : Query(メモリをASCIIでダンプする)
(adr1,adr2 : 開始アドレス、終了アドレス)
G[adr] : Go(メモリの内容を実行する)
S[adr] : Set(メモリを編集する)
M[adr1,adr2,adr3] : Move(メモリの内容を移動する)
(adr1,adr2,adr3 : 開始アドレス、終了アドレス、移動先アドレス)
F[adr1,adr2,d : Fill(メモリの範囲置換)
(adr1,adr2,d : 開始アドレス、終了アドレス、値)
X[register] : eXemine(レジスタの操作)
R[offset] : Read(カセットテープからデータを入力する)
(offset : 送信されたデータのアドレスに加算するアドレス値)
W[adr1,adr2] : Write(カセットテープへデータを出力する)
(adr1,adr2 : 開始アドレス、終了アドレス)
L[offset] : Load(RS-232Cからデータを入力する)
(offset : 送信されたデータのアドレスに加算するアドレス値)
P[adr1,adr2] : Punch(RS-232Cへデータを出力する)
(adr1,adr2 : 開始アドレス、終了アドレス)
C : Copy(モニタ使用中の出力をプリンタに切り換える)
E : Echo(入出力データの内容を同時に画面表示する)
B : Break(BASICに戻る)
(R : NEWで消去したBASICプログラムを復元する)
(G : モニタからBASICプログラムを実行する)
※ PRINT書式
; : 式を続けて表示する(A;B)
例 1;2
1 2
, : 式をTABで区切って表示する(A,B)
例 1,2
1 2
※ カラーコード
PC-6001シリーズの色指定は複雑である
SCREENで設定されるモードで変わるが、文字とグラフィックで指定できる色が異なる場合があるため注意が必要
また、PC-6001初代とそれ以降のN60-BASIC modeでは色指定が異なるので、更に注意が必要
(恐らくあらゆるBASICの中で一番ややこしいのがこれである…)
初代では白は薄い緑っぽい白で、緑もちょっと薄かったりと全体がいわゆるパステルカラーっぽい発色である
デフォルトでは文字白の背景緑となり、もう1つのセットでは文字マゼンタ、背景赤となる
SCREEN 4では白が白というよりは絶妙な滲みが出て何とも言えない味がある
・N60-BASIC (PC-6001)
SCREEN 1 (テキストモード:32文字×16行) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック |
|
1,2 | 1 | 白、背景緑 | |
2 | 緑、背景白 | ||
3 | マゼンタ、背景赤 | ||
4 | 赤、背景マゼンタ |
SCREEN 2 (セミグラフィックモード:64×48) | |||
---|---|---|---|
組み合わせ | コード | テキスト | グラフィック 背景 |
1 | 0 | 白、背景緑 | 黒 |
1 | 白、背景緑 | 緑 | |
2 | 緑、背景白 | 黄 | |
3 | マゼンタ、背景赤 | 青 | |
4 | 赤、背景マゼンタ | 赤 | |
5 | ― (COLOR 4と同じ) | 白 | |
6 | ― | シアン | |
7 | ― | マゼンタ | |
8 | ― | 橙 | |
2 | 0 | 赤、背景マゼンタ | 黒 |
1 | 赤、背景マゼンタ | 白 | |
2 | マゼンタ、背景赤 | シアン | |
3 | 緑、背景白 | マゼンタ | |
4 | 白、背景緑 | 橙 | |
5 | ― (COLOR 4と同じ) | 緑 | |
6 | ― | 黄 | |
7 | ― | 青 | |
8 | ― | 赤 |
SCREEN 3 (カラーグラフィックモード:128×192) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 1 | 緑 | |
2 | 黄 | ||
3 | 青 | ||
4 | 赤 | ||
2 | 1 | 白 | |
2 | シアン | ||
3 | マゼンタ | ||
4 | 橙 |
SCREEN 4 (フルグラフィックモード:256×192) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 0 | 白、背景緑 | |
1 | 緑、背景白 | ||
2 | 0 | 黒、背景白 | |
1 | 白、背景黒 |
・N60-BASIC (PC-6001mk2以降), N60-EXTEND BASIC
SCREEN 1 (テキストモード:32文字×16行) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック |
|
1 | 1 | 白 | |
2 | 白反転 | ||
3 | 緑 | ||
4 | 緑反転 | ||
2 | 1 | 緑 | |
2 | 緑反転 | ||
3 | 白 | ||
4 | 白反転 |
SCREEN 2 (セミグラフィックモード:64×48) | |||
---|---|---|---|
組み合わせ | コード | テキスト | グラフィック 背景 |
1 | 0 | 白 | 黒 |
1 | 白 | 緑 | |
2 | 白反転 | 黄 | |
3 | 緑 | 青 | |
4 | 緑反転 | 赤 | |
5 | 白 | 白 | |
6 | 白反転 | シアン | |
7 | 緑 | マゼンタ | |
8 | 緑反転 | 橙 | |
2 | 0 | 緑 | 黒 |
1 | 緑 | 白 | |
2 | 緑反転 | シアン | |
3 | 白 | マゼンタ | |
4 | 白反転 | 橙 | |
5 | 緑 | 緑 | |
6 | 白反転 | 黄 | |
7 | 白 | 青 | |
8 | 白反転 | 赤 |
SCREEN 3 (カラーグラフィックモード:128×192) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 1 | 緑 | |
2 | 黄 | ||
3 | 青 | ||
4 | 赤 | ||
2 | 1 | 白 | |
2 | シアン | ||
3 | マゼンタ | ||
4 | 橙 |
SCREEN 4 (フルグラフィックモード:256×192) | |||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 0 | 黒 | |
1 | 緑 | ||
2 | 0 | 黒 | |
1 | 白 |
・N66-BASIC(N60m-BASIC), N66SR-BASIC
N66SR-BASICでは色の組み合わせは不要になり、カラーコードの13〜16がPALET文で色の変更ができるようになった
N66 : SCREEN 1 (テキストモード:40文字×20行) N66 : SCREEN 2 (セミグラフィックモード:80×40) |
|||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック |
背景 |
1 | 1 | 黒 | 黒 |
2 | 橙 | 赤 | |
3 | 青緑 | 緑 | |
4 | 黄緑 | 黄 | |
5 | 青紫 | 青 | |
6 | 赤紫 | マゼンタ | |
7 | 空色 | シアン | |
8 | 灰 | 白 | |
9 | 黒 | ― | |
10 | 赤 | ― | |
11 | 緑 | ― | |
12 | 黄 | ― | |
13 | 青 | ― | |
14 | マゼンタ | ― | |
15 | シアン | ― | |
16 | 白 | ― | |
2 | 1 | 黒 | 黒 |
2 | 橙 | 橙 | |
3 | 青緑 | 青緑 | |
4 | 黄緑 | 黄緑 | |
5 | 青紫 | 青紫 | |
6 | 赤紫 | 赤紫 | |
7 | 空色 | 空色 | |
8 | 灰 | 灰 | |
9 | 黒 | ― | |
10 | 赤 | ― | |
11 | 緑 | ― | |
12 | 黄 | ― | |
13 | 青 | ― | |
14 | マゼンタ | ― | |
15 | シアン | ― | |
16 | 白 | ― |
N66 : SCREEN 3 (15/8色グラフィックモード:160×200) N66SR : SCREEN 1 (テキスト・セミグラフィックモード:40/80文字×20/25行) N66SR : SCREEN 2 (15色グラフィックモード:320×200) |
|||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 1 | 黒 | |
2 | 青紫 | ||
3 | 橙 | ||
4 | 赤紫 | ||
5 | 青緑 | ||
6 | 空色 | ||
7 | 黄緑 | ||
8 | 灰色 | ||
9 | 黒 | ||
10 | 青 | ||
11 | 赤 | ||
12 | マゼンタ | ||
13 | 緑 N66SR:PALET | ||
14 | シアン N66SR:PALET | ||
15 | 黄 N66SR:PALET | ||
16 | 白 N66SR:PALET | ||
2 | 1 | 緑 | |
2 | 黄 | ||
3 | 青 | ||
4 | 赤 | ||
5 | 白 | ||
6 | シアン | ||
7 | マゼンタ | ||
8 | 橙 |
N66SR-BASICの4色グラフィックモードはPALETで色を変更できる
N66 : SCREEN 4 (4色グラフィックモード:320×200) N66SR : SCREEN 3 (4色グラフィックモード:640×200) |
|||
---|---|---|---|
組み合わせ | コード | テキスト グラフィック 背景 |
|
1 | 1 | 黒 | |
2 | 青 | ||
3 | 赤 | ||
4 | マゼンタ | ||
2 (N66SR-BASICのデフォルト配色) |
1 | 緑 | |
2 | シアン | ||
3 | 黄 | ||
4 | 白 | ||
3 | 1 | 黒 | |
2 | 青紫 | ||
3 | 橙 | ||
4 | 赤紫 | ||
4 | 1 | 青緑 | |
2 | 空色 | ||
3 | 黄緑 | ||
4 | 灰 | ||
5 | 1 | 緑 | |
2 | 黄 | ||
3 | 青 | ||
4 | 赤 | ||
6 | 1 | 白 | |
2 | シアン | ||
3 | マゼンタ | ||
4 | 橙 |
※ サウンドLSI操作
AY-3-8910、N66SR-BASICの場合はYM2203のレジスタを操作する
レジスタ(AY-3-8910) : 0(R0)〜15(R15)
R0.R1 : Ch.A 周波数
R2.R3 : Ch.B 周波数
R4.R5 : Ch.A 周波数
R6 : Noise 周波数
R7 : Ch. 設定
R8 : Ch.A 音量
R9 : Ch.B 音量
R10 : Ch.C 音量
R11,R12 : エンベロープ周期
R13 : エンベロープ形状
R14 : I/O ポート A
R14 : I/O ポート B
データ : 0〜255
※ MML構文
C,D,E,F,G,A,B : 音階(音階のあとに音長指定可能)
+ #: 半音上げる
- : 半音下げる
Ln : 音長指定(初期値4 : 1〜64 /「.」も使用可能)
Rn : n分休符(音長指定は同じ)
Tn : テンポ指定(初期値120 : 32〜255)
On : オクターブ指定(初期値4 : 1〜8)
Vn : 音量指定(初期値8 : 0〜15)
@n N66SR : 音色の設定(初期値3 : 1〜12,253〜255)
Nn N66SR : 音階指定(0〜96)
Sn : ソフトウェアエンベロープの種類を指定(初期値0 : 0〜15)
Mn : ソフトウェアエンベロープの周期を指定(初期値255 : 1〜65535)
※ TALK構文
TALK {f | m}{num}{space | # | num}[発声文字列]
引数 1 : 女声 | 男声
引数 2 : 発声速度(2[速い]〜6[遅い])
引数 3 : 発声指定
space : 発声文字列を使用
(ローマ字を使用するが、ち→[ci]、つ→[cu]、っ→[q]、ん→[x]、てぃ→[ti]、とぅ→[tu]、などというように一部標準のものとは異なる
# N66SR : 音階をつけて発声
(発声文字列に「:」を付けてMMLとほぼ同じ構文で指定)
num : 固定文字列を使用(指定に関わらず女声となる)
数字 | 固定文字列 |
---|---|
0 | 終わりました |
1 | お待ち下さい |
2 | 故障中です |
3 | いらっしゃいませ |
4 | ありがとうございました |
※ 定数型・変数型
(N6x-BASICでは数値型に整数や単精度などの型がない)
A$ : 文字列型(A$="TEST")
&O : 8進数形式(&O777、&127)
&H : 16進数形式(&HFFFF)
※ 演算子
+ : 加算・結合(A+B、A$+B$)
- : 減算(A-B)
* : 乗算(A*B)
/ : 除算(A/B)
\ N66SR : 整数除算(A\B)
MOD N66SR : 整数の剰余(A MOD B)
^ : べき算(A^B)
= : 等号・代入(A=3、A=B+C)
> < : 不等号・比較(A>3、A<=2)
NOT : 否定(NOT 2)
AND : 論理積(2 AND 1)
OR : 論理和(2 OR 1)
XOR N66SR : 排他的論理和(2 XOR 1)
IMP N66SR : 包含(1 IMP 0)→XORの否定
N60-BASICは他のMicrosoft系BASICとエラーメッセージの表示に違いがある。 下記にその一覧を記す。 | |||
エラーメッセージ一覧 | |||
---|---|---|---|
番号 | 表示 | 英語表記 | 意味 |
― | ?Extra Ignored | ― | INPUT文で指定した変数の数より、多いデータを入力している |
1 | ?NF Error | NEXT without FOR | NEXTに対応したFORがない |
2 | ?SN Error | SyNtax error | コマンド、またはステートメントの書き方が間違っている |
3 | ?RG Error | RETURN without GOSUB | RETURNに対応したGOSUBがない |
4 | ?OD Error | Out of Data | READに対応したDATAがない |
5 | ?FC Error | illegal Function Call | 関数やステートメントの引数が間違っている |
6 | ?OV Error | OVerflow | 値が許容範囲を超えた |
7 | ?OM Error | Out of Memory | メモリが不足している |
8 | ?UL Error | Undefined Line number | 未定義の行番号を指定した |
9 | ?BS Error | suBScript out of range | 配列の添字が指定した範囲外 |
10 | ?DD Error | Duplicate Definition | 配列やユーザ関数が二重宣言された |
11 | ?/0 Error | division by zero | 除算の分母が0 |
12 | ?ID Error | Illegal Direct | ダイレクトモードで使えないステートメントを使った |
13 | ?TM Error | Type Mismatch | 変数または定数の型が合わない |
14 | ?OS Error | Out of String space | 変数領域が不足している |
15 | ?LS Error | String too Long | 文字定数または文字変数が256文字を超えた |
16 | ?ST Error | String formula Too complex | 文字式が複雑すぎる |
17 | ?CN Error | CaN't continue | CONTによるプログラムの再開ができない |
18 | ?UF Error | Undefined user Function | 未定義関数を参照した |
19 | ?NR Error | No Resume | エラー処理にRESUMEがない |
20 | ?RW Error | Resume Without error | エラー処理でないのにRESUMEが使用された |
21 | ?UE Error | Unprintable Error | エラーメッセージの定義されていないエラー |
22 | ?MO Error | Missing Operand | 必要なオペランドが不足している |
23 | ?BO Error | line Buffer Overflow | 行入力バッファが許容範囲を超えた |
24 | ?NA Error | feature Not Available | 使用不可能な機能を使用しようとした |
25 | ?DB Error | Disk BASIC feature | ディスクBASICコマンドが実行された |
26 | ?FN Error | FOR without NEXT | FORに対するNEXTがない |
27 | ?TR Error | Tape Read error | テープ読み込みエラー |
28 | ?FD Error | File Data error | データの構成が不適当 |
― | ?UE Error | Undefined Error | 未定義エラー |
50 | ??FO Error | FIELD Overflow | FIELDの長さが256文字を超えている |
51 | ??IE Error | Internal Error | 内部エラー |
52 | ??BN Error | Bad file Number | 使用されたファイル番号は使用できない |
53 | ??FF Error | File not Found | 指定したファイルが存在しない |
54 | ??AO Error | file Already Open | 指定したファイルが既にOPENされている |
55 | ??EF Error | input past End | シーケンシャルファイルにおいて、全てのデータを読み込んでいるのにINPUT#命令で読み込もうとしている ランダムファイルにおいて、GET文で指定したレコード番号はファイルの大きさを超えている |
56 | ??NM Error | bad file NaMe error | ファイル名の中にコントロール文字などのファイル名に使用できない文字が含まれている ファイル名がヌルストリングになっている |
57 | ??DS Error | Dicect Statement in file | ASCII形式のファイル中にダイレクトステートメントが存在する |
58 | ??SP Error | Sequential after PUT | PUT文を実行した後、シーケンシャル入出力を行おうとした |
59 | ??SQ Error | SeQuential I/O only | シーケンシャル入出力以外の入出力命令を実行した |
60 | ??CF Error | Close File number | 指定したファイルがCLOSEされている |
61 | ??FW Error | File Write proctected | ファイルへの書き込みが保護されている |
62 | ??DO Error | Disk Offline | ディスク装置が接続されていない |
63 | ??DM Error | Disk not Mounted | ディスクがマウントされていない |
64 | ??IO Error | disk I/O error | ディスク装置エラー |
65 | ??FE Error | File already Exists | 指定したファイルは既に存在している |
66 | ??BM Error | Bad file Mode error | 中間言語形式のファイルをマージ(MERGE)しようとしている |
67 | ???? Error | 未定義エラー | |
68 | ??DF Error | Disk Full | ディスク容量が一杯である |
69 | ??AT Error | bad Allocation Table | 異常なアロケーションテーブルがある |
70 | ??DN Error | bad Drive Number | OPENされていないドライブ番号が使用された |
71 | ??TS Error | bad Track/Sector | 異常なトラックもしくはセクターがある |
72 | ??DR Error | Disk Read error | ディスク読み込みエラー |
73 | ??RD Error | Rename across Disks | 異なるディスク装置へのリネームを行おうとした |