N88-BASIC リファレンス
NEC PC-8800 シリーズの標準 BASIC「N88-BASIC」と、このエミュレータで使える命令の一覧です。
N88-BASICとは
N88-BASIC は、1980年代に人気のあった PC-8800 シリーズ(PC-8801 など)の標準 BASIC です。Microsoft BASIC 系のインタープリタで、電源を入れるとそのまま立ち上がり、行番号付きの命令を打ち込んで RUN するだけでプログラムが動きました。
雑誌に載ったプログラムリストを手で打ち込み、改造しながらプログラミングを覚える。そうした遊び方を、ブラウザの上で再現するのがこのエミュレータです。
このエミュレータについて
- ブラウザだけで動く N88-BASIC 風のインタープリタです。実機の ROM は使っていません。
- 実機の完全な再現ではありません。
SCREENやDRAWのように、受け付けるだけで何もしない命令があります。 SAVE "A"とLOAD "A"は、ファイルではなくブラウザ内(localStorage)に保存されます。- 画面上部の「保存(.bas)」「読込」で、PC 上の
.basファイルとやり取りできます。 - 画面をクリックするとキー入力を受け付けます。Esc か Ctrl+C で実行を中断できます。カーソルキーで過去の行へ移動し、書き換えて Enter を押すと再入力できます。F1〜F10 はファンクションキーです。
はじめてのプログラム
行番号を付けて入力すると、プログラムとして登録されます。番号を付けない命令は、その場で実行されます。
10 FOR I=1 TO 10
20 PRINT "HELLO ";I
30 NEXT I
RUN
グラフィックも少ない行数で描けます。
10 CIRCLE (320,100),80,2
20 PAINT (320,100),6,2
プログラムの編集・実行
RUN
書式
RUN [行番号]
RUN "ファイル名"説明
プログラムを実行します。行番号を指定すると、その行から実行します。ファイル名を指定すると、保存済みのプログラムを読み込んで実行します。実行前に変数はクリアされます。
例
RUN
RUN 100
RUN "MAZE"LIST
書式
LIST [開始行][-[終了行]]説明
プログラムを画面に表示します。範囲を省略すると全体を表示します。
例
LIST
LIST 100-200
LIST -50
LIST 300-LIST 100 は100行目だけを表示します。
NEW
書式
NEW説明
プログラムを消去し、変数をクリアします。
例
NEWDELETE
書式
DELETE [開始行][-[終了行]]説明
指定した範囲の行を削除します。該当する行がないと Illegal function call になります。
例
DELETE 100-200
DELETE 50RENUM
書式
RENUM [新しい先頭行][,[元の開始行][,増分]]説明
行番号を振り直します。GOTO、GOSUB、THEN、ELSE、RESTORE、RUN、RESUME の飛び先も書き換えます。省略時は新しい先頭行=10、元の開始行=0、増分=10です。
例
RENUM
RENUM 1000,100,5CONT
書式
CONT説明
STOP、END、Esc で止めたプログラムを、止めた位置から再開します。止めた状態がないと Can't continue になります。
例
CONTTRON / TROFF
書式
TRON
TROFF説明
実行トレースの切り替えフラグを設定します。
例
TRON
TROFFこのエミュレータでは、フラグを立てるだけでトレース表示はしません。
CLEAR
書式
CLEAR [引数...]説明
すべての変数と配列をクリアします。引数は読み飛ばします。
例
CLEAREND / STOP / SYSTEM
書式
END
STOP
SYSTEM説明
プログラムを終了します。STOP は Break in 行番号 と表示して止まり、CONT で再開できます。SYSTEM は END と同じ動作です。
例
100 IF A=0 THEN ENDREM
書式
REM コメント
'コメント説明
コメントです。実行されません。
例
10 REM ここから初期化画面・文字
書式
PRINT [式[;|,式...]]
PRINT USING 書式;式[;式...]
PRINT #ファイル番号,式...説明
画面に文字や数値を表示します。; で区切ると続けて表示し、, で区切ると次のタブ位置に移ります。末尾に ; か , を付けると改行しません。TAB(n) と SPC(n) が使えます。数値の前には符号用の空白が入ります。PRINT USING は書式を指定して表示します。# を付けるとファイルに書き出します。
例
PRINT "HELLO"
PRINT A;B
PRINT "X=";X,"Y=";Y
PRINT TAB(10);"RIGHT"
PRINT USING "###.##";3.14159? と書くと PRINT の省略形として扱われます。
LPRINT
書式
LPRINT [式...]説明
プリンタに出力する命令です。このエミュレータにはプリンタがないので、何も出力しません。
例
LPRINT "TEST"CLS
書式
CLS [n]説明
テキスト画面を消去します。n が2以上のときは、グラフィック画面も消去します。
例
CLS
CLS 2LOCATE
書式
LOCATE [x][,[y][,カーソル]]説明
カーソルを桁 x、行 y に移します。左上が(0,0)です。第3引数が0ならカーソルを隠し、0以外なら表示します。
例
LOCATE 10,5
LOCATE ,,0COLOR
書式
COLOR [文字色][,背景色]説明
テキストの文字色と背景色を設定します。色コードは0〜7です(下の「色コード」を参照)。
例
COLOR 2
COLOR 7,1WIDTH
書式
WIDTH 桁数[,行数]説明
テキスト画面の大きさを変えます。桁数は80か40です。行数は25か20です。
例
WIDTH 80,25
WIDTH 40,20桁数に80と40以外を指定すると Illegal function call になります。
CONSOLE
書式
CONSOLE [,,ファンクションキー表示]説明
第3引数が0以外ならファンクションキー表示行を出し、0なら隠します。第1、第2引数は読み飛ばします。
例
CONSOLE ,,0
CONSOLE ,,1KEY
書式
KEY 番号,"文字列"説明
ファンクションキー(1〜10)の表示ラベルを設定します。KEY LIST、KEY ON、KEY OFF は何もしません。
例
KEY 1,"LIST"SCREEN
書式
SCREEN [引数...]説明
受け付けるだけで、何もしません。実機プログラムを読み込んでもエラーにならないようにするためです。
例
SCREEN 3,0,0入力
INPUT
書式
INPUT ["プロンプト";]変数[,変数...]
INPUT ["プロンプト",]変数
INPUT #ファイル番号,変数...説明
キーボードから値を入力します。プロンプトの後が ; なら ? が付き、, なら付きません。型に合わない入力をすると ?Redo from start と表示して入力し直しになります。# を付けるとファイルから読み込みます。
例
INPUT A
INPUT "NAME";N$
INPUT "X,Y";X,YLINE INPUT
書式
LINE INPUT ["プロンプト";]文字列変数
LINE INPUT #ファイル番号,文字列変数説明
1行をそのまま文字列として入力します。カンマや引用符も区切りになりません。
例
LINE INPUT "TEXT";T$制御構造
IF ... THEN ... ELSE
書式
IF 条件 THEN 文[:文...][ELSE 文[:文...]]
IF 条件 THEN 行番号
IF 条件 GOTO 行番号説明
条件が0以外(真)なら THEN 以降を実行します。ELSE があれば、偽のときにそちらを実行します。行番号だけを書くと、その行へ飛びます。
例
IF A>10 THEN PRINT "BIG" ELSE PRINT "SMALL"
IF X=0 THEN 500FOR ... NEXT
書式
FOR 変数=開始 TO 終了 [STEP 増分]
NEXT [変数[,変数...]]説明
NEXT までを、変数を開始値から終了値まで変えながら繰り返します。STEP を省略すると増分は1です。NEXT の変数名は省略でき、カンマ区切りで複数を閉じることもできます。
例
FOR I=1 TO 10
PRINT I
NEXT I
FOR J=10 TO 0 STEP -2:NEXT開始値が終了値を超えている場合も、ループを0回実行して飛ばします。
WHILE ... WEND
書式
WHILE 条件
...
WEND説明
条件が真の間、WEND までを繰り返します。
例
WHILE I<10
I=I+1
WENDGOTO
書式
GOTO 行番号説明
指定した行へ飛びます。存在しない行を指定すると Undefined line number になります。
例
GOTO 100GOSUB / RETURN
書式
GOSUB 行番号
RETURN [行番号]説明
サブルーチンを呼び出します。RETURN で、呼び出した次の位置へ戻ります。RETURN に行番号を付けると、その行へ戻ります。
例
GOSUB 1000
...
1000 PRINT "SUB"
1010 RETURNON ... GOTO / GOSUB
書式
ON 式 GOTO 行番号[,行番号...]
ON 式 GOSUB 行番号[,行番号...]説明
式の値が1なら1番目、2なら2番目の行へ飛びます。範囲外なら何もせず次の文へ進みます。
例
ON K GOSUB 100,200,300ON ERROR GOTO
書式
ON ERROR GOTO 行番号説明
エラーが起きたときの飛び先を設定します。飛び先では ERR でエラー番号、ERL でエラー行を調べられます。RESUME で戻ります。
例
10 ON ERROR GOTO 900
900 PRINT ERR;ERL:RESUME NEXTON KEY、ON COM、ON STOP、ON TIMER などのイベント割り込みは未対応で、読み飛ばします。
RESUME
書式
RESUME
RESUME 0
RESUME NEXT
RESUME 行番号説明
エラー処理から戻ります。RESUME と RESUME 0 はエラーを起こした文をやり直します。NEXT は次の文から、行番号を付けるとその行から再開します。
例
RESUME NEXTERROR
書式
ERROR 番号説明
指定した番号のエラーを意図的に起こします。
例
ERROR 5変数・データ
LET
書式
[LET] 変数=式説明
変数に値を代入します。LET は省略できます。
例
A=10
LET B$="ABC"DIM
書式
DIM 配列(要素数[,要素数...])[,...]説明
配列を宣言します。要素番号は0から要素数までです。OPTION BASE 1 で下限を1にできます。
例
DIM A(10)
DIM M(7,7),N$(20)ERASE
書式
ERASE 配列[,配列...]説明
配列を削除します。
例
ERASE ADEFINT / DEFSNG / DEFDBL / DEFSTR
書式
DEFINT 文字範囲[,...]
DEFSNG ...
DEFDBL ...
DEFSTR ...説明
頭文字の範囲で、変数の既定の型を決めます。
例
DEFINT A-Z
DEFSTR SOPTION BASE
書式
OPTION BASE 0|1説明
配列の添字の下限を設定します。
例
OPTION BASE 1SWAP
書式
SWAP 変数,変数説明
2つの変数の値を入れ替えます。
例
SWAP A,BDATA / READ / RESTORE
書式
DATA 定数[,定数...]
READ 変数[,変数...]
RESTORE [行番号]説明
DATA に並べた定数を、READ が先頭から順に読み出します。RESTORE で読み出し位置を先頭に戻します。行番号を付けると、その行以降の DATA から読みます。データが尽きると Out of DATA になります。
例
10 READ A,B$
20 DATA 100,"HELLO"DEF FN
書式
DEF FN名(引数[,引数...])=式説明
ユーザー定義関数を作ります。FN名(値) で呼び出します。
例
10 DEF FNSQ(X)=X*X
20 PRINT FNSQ(5)RANDOMIZE
書式
RANDOMIZE [式]説明
乱数の種を設定します。式を省略すると、現在時刻を使います。
例
RANDOMIZE
RANDOMIZE 1234MID$ (代入)
書式
MID$(文字列変数,開始[,長さ])=文字列説明
文字列変数の一部を、別の文字列で置き換えます。
例
A$="HELLO":MID$(A$,1,1)="J"グラフィック
PSET / PRESET
書式
PSET [STEP](x,y)[,色]
PRESET [STEP](x,y)[,色]説明
点を描きます。PSET の色の既定は7(白)、PRESET は0(黒、点を消す)です。STEP を付けると、直前の点からの相対座標になります。
例
PSET (320,100),2
PRESET (320,100)LINE
書式
LINE [(x1,y1)]-(x2,y2)[,色[,B|BF[,スタイル]]]説明
直線を描きます。B を付けると四角形の枠、BF を付けると塗りつぶした四角形になります。始点を省略すると、直前の点から描きます。スタイルは16ビットのパターンです。
例
LINE (0,0)-(639,199),7
LINE (100,50)-(300,150),2,B
LINE (100,50)-(300,150),4,BFCIRCLE
書式
CIRCLE (x,y),半径[,色[,開始角[,終了角[,縦横比]]]]説明
円、円弧、楕円を描きます。角度はラジアンです。縦横比の既定は0.5です(画面のドットが縦長のため、これで円に見えます)。
例
CIRCLE (320,100),80,2
CIRCLE (320,100),80,6,0,3.14159PAINT
書式
PAINT (x,y)[,塗り色[,境界色]]説明
指定した点から、境界色で囲まれた領域を塗りつぶします。境界色を省略すると、塗り色と同じになります。
例
CIRCLE (320,100),80,2
PAINT (320,100),6,2PALETTE
書式
PALETTE
PALETTE パレット番号,色コード説明
パレット番号に色コードを割り当てます。引数なしなら初期状態に戻します。値は0〜7です。
例
PALETTE 1,6
PALETTEDRAW
書式
DRAW "コマンド"説明
受け付けるだけで、何もしません。
例
DRAW "U10R10"音
PLAY
書式
PLAY "MML文字列"説明
MML(ミュージック・マクロ・ランゲージ)で書かれた楽譜を演奏します。使えるコマンドは、下の「PLAY のMML」を参照してください。
例
PLAY "T120 O4 CDEFGAB>C"SOUND
書式
SOUND 周波数,長さ説明
指定した周波数(Hz)の音を鳴らします。長さは約1/55秒単位です。周波数が20未満だと鳴りません。
例
SOUND 440,55BEEP
書式
BEEP説明
ビープ音(約1000Hz)を鳴らします。
例
BEEPファイル
SAVE
書式
SAVE "ファイル名"説明
プログラムを保存します。保存先はブラウザ内(localStorage)です。
例
SAVE "GAME"LOAD
書式
LOAD "ファイル名"[,R]説明
プログラムを読み込みます。,R を付けると、読み込み後にそのまま実行します。見つからないと File not found になります。
例
LOAD "GAME"
LOAD "GAME",RMERGE
書式
MERGE "ファイル名"説明
保存済みのプログラムを、現在のプログラムに合流させます。同じ行番号は上書きされます。
例
MERGE "SUB"FILES
書式
FILES説明
保存済みのファイル名の一覧を表示します。
例
FILESKILL
書式
KILL "ファイル名"説明
ファイルを削除します。
例
KILL "GAME"NAME
書式
NAME "旧名" AS "新名"説明
ファイルの名前を変えます。
例
NAME "A" AS "B"OPEN / CLOSE
書式
OPEN "ファイル名" [FOR INPUT|OUTPUT|APPEND] AS [#]番号
CLOSE [[#]番号[,...]]説明
データファイルを開きます・閉じます。CLOSE に番号を付けないと、開いているファイルをすべて閉じます。ファイルへの書き出しは PRINT #、WRITE #、読み込みは INPUT #、LINE INPUT #、INPUT$ で行います。
例
OPEN "DATA" FOR OUTPUT AS #1
PRINT #1,"ABC"
CLOSE #1WRITE
書式
WRITE [#番号,]式[,式...]説明
カンマ区切りで書き出します。文字列は引用符で囲みます。
例
WRITE #1,A,B$何もしない命令
その他の命令
書式
AUTO / CALL / CHAIN / EDIT / FIELD / GET / PUT / MOTOR / BLOAD / BSAVE / TERM / COM / WAIT / OUT / DEF SEG説明
実機にある命令のうち、構文だけ受け付けて何もしないものです。読み込んだプログラムがエラーで止まらないようにしています。
POKE と PEEK は、64KB のメモリ領域を模擬して読み書きできます。
関数
数値関数
| 関数 | 説明 |
|---|---|
ABS(x) | 絶対値 |
SGN(x) | 符号(正=1、0=0、負=-1) |
INT(x) | x以下の最大の整数(負数は小さい方へ丸める) |
FIX(x) | 小数部を切り捨てた整数(0に向かって丸める) |
CINT(x) | 整数に丸める |
CSNG(x) | 単精度に変換 |
CDBL(x) | 倍精度に変換 |
SQR(x) | 平方根(負数だと Illegal function call) |
SIN(x) | 正弦(ラジアン) |
COS(x) | 余弦(ラジアン) |
TAN(x) | 正接(ラジアン) |
ATN(x) | 逆正接(ラジアン) |
EXP(x) | eのx乗 |
LOG(x) | 自然対数(0以下は Illegal function call) |
RND[(x)] | 0以上1未満の乱数。RND(0) は直前の値、負数は種を再設定します |
文字列関数
| 関数 | 説明 |
|---|---|
LEN(s$) | 文字列の長さ |
ASC(s$) | 先頭文字の文字コード |
CHR$(n) | 文字コードnの文字(0〜255) |
STR$(x) | 数値を文字列にする(正数には先頭に空白が付く) |
VAL(s$) | 文字列を数値にする(&H の16進表記も可) |
LEFT$(s$,n) | 左からn文字 |
RIGHT$(s$,n) | 右からn文字 |
MID$(s$,開始[,長さ]) | 開始位置(1始まり)から指定した長さ |
INSTR([開始,]s$,t$) | s$の中でt$が最初に現れる位置(なければ0) |
SPACE$(n) | 空白n個 |
STRING$(n,文字) | 文字をn個並べる |
HEX$(n) | 16進文字列 |
OCT$(n) | 8進文字列 |
BIN$(n) | 2進文字列 |
KANJI$(n) | JISコードnの漢字(2バイト文字) |
入力・状態
| 関数 | 説明 |
|---|---|
INKEY$ | 押されているキーを1文字返す。押されていなければ空文字列 |
INPUT$(n[,#ファイル番号]) | n文字を、キーボードまたはファイルから読む |
TIME$ | 現在時刻(HH:MM:SS) |
DATE$ | 現在日付(YY/MM/DD) |
CSRLIN | カーソルの行位置 |
POS(0) | カーソルの桁位置 |
POINT(x,y) | グラフィック画面の点の色コード |
PEEK(a) | メモリの1バイトを読む |
EOF(n) | ファイルの終端なら-1、そうでなければ0 |
ERR | 直近のエラー番号 |
ERL | 直近のエラーが起きた行番号 |
FRE(60000を返す)、VARPTR、INP、LOC、LOF、LPOS は、固定値(0か60000)を返すだけです。
付録
色コード
| コード | 色 | 見本 |
|---|---|---|
| 0 | 黒 | |
| 1 | 青 | |
| 2 | 赤 | |
| 3 | マゼンタ | |
| 4 | 緑 | |
| 5 | シアン | |
| 6 | 黄 | |
| 7 | 白 |
青=1、赤=2、緑=4 のビットの組み合わせです。グラフィック画面は 640×200 ドットで、8色まで使えます。テキスト画面は 80桁×25行です。
PLAY のMML
| コマンド | 意味 |
|---|---|
C D E F G A B | 音階。直後に + か # で半音上げ、- で半音下げ。続けて数字で音長(例: C8)。. で付点 |
R | 休符。音長も指定できる(例: R4) |
On | オクターブ(1〜8、初期値4) |
< > | オクターブを下げる・上げる |
Ln | 音長の既定値(初期値4=4分音符) |
Tn | テンポ(32〜255、初期値120) |
Vn | 音量(0〜15、初期値8) |
Nn | 音の高さを番号で指定。0は休符 |
音色は矩形波のみです。M、S、X、Q、Y、Z は読み飛ばします。大文字小文字、空白は区別しません。
PLAY "T120 O4 L8 CDEFGAB>C"演算子
| 種類 | 演算子 |
|---|---|
| 算術 | + - * / \(整数除算) MOD ^(べき乗) |
| 比較 | = <> < > <= >=(真は-1、偽は0) |
| 論理 | NOT AND OR XOR EQV IMP |
| 文字列 | +(連結) |
16進数は &H1F、8進数は &O17 と書きます。1行に複数の文を書くときは : で区切ります。
変数の型
| 末尾 | 型 |
|---|---|
% | 整数 |
! | 単精度実数 |
# | 倍精度実数 |
$ | 文字列 |
末尾の記号を省くと、DEFINT などで指定した型になります。指定がなければ単精度実数です。
エラー一覧
| 番号 | メッセージ |
|---|---|
| 1 | NEXT without FOR |
| 2 | Syntax error |
| 3 | RETURN without GOSUB |
| 4 | Out of DATA |
| 5 | Illegal function call |
| 6 | Overflow |
| 7 | Out of memory |
| 8 | Undefined line number |
| 9 | Subscript out of range |
| 10 | Duplicate Definition |
| 11 | Division by zero |
| 12 | Illegal direct |
| 13 | Type mismatch |
| 14 | Out of string space |
| 15 | String too long |
| 17 | Can't continue |
| 18 | Undefined user function |
| 19 | No RESUME |
| 20 | RESUME without error |
| 22 | Missing operand |
| 26 | FOR without NEXT |
| 29 | WHILE without WEND |
| 30 | WEND without WHILE |
| 52 | Bad file number |
| 53 | File not found |
| 54 | Bad file mode |
| 62 | Input past end |
| 76 | Path not found |
エラーは Syntax error in 100 のように、行番号付きで表示されます。ON ERROR GOTO で処理できます。