N88-BASIC リファレンス

NEC PC-8800 シリーズの標準 BASIC「N88-BASIC」と、このエミュレータで使える命令の一覧です。

N88-BASICとは

N88-BASIC は、1980年代に人気のあった PC-8800 シリーズ(PC-8801 など)の標準 BASIC です。Microsoft BASIC 系のインタープリタで、電源を入れるとそのまま立ち上がり、行番号付きの命令を打ち込んで RUN するだけでプログラムが動きました。

雑誌に載ったプログラムリストを手で打ち込み、改造しながらプログラミングを覚える。そうした遊び方を、ブラウザの上で再現するのがこのエミュレータです。

このエミュレータについて

はじめてのプログラム

行番号を付けて入力すると、プログラムとして登録されます。番号を付けない命令は、その場で実行されます。

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

説明

プログラムを消去し、変数をクリアします。

例

NEW

DELETE

書式

DELETE [開始行][-[終了行]]

説明

指定した範囲の行を削除します。該当する行がないと Illegal function call になります。

例

DELETE 100-200
DELETE 50

RENUM

書式

RENUM [新しい先頭行][,[元の開始行][,増分]]

説明

行番号を振り直します。GOTO、GOSUB、THEN、ELSE、RESTORE、RUN、RESUME の飛び先も書き換えます。省略時は新しい先頭行=10、元の開始行=0、増分=10です。

例

RENUM
RENUM 1000,100,5

CONT

書式

CONT

説明

STOP、END、Esc で止めたプログラムを、止めた位置から再開します。止めた状態がないと Can't continue になります。

例

CONT

TRON / TROFF

書式

TRON
TROFF

説明

実行トレースの切り替えフラグを設定します。

例

TRON
TROFF

このエミュレータでは、フラグを立てるだけでトレース表示はしません。

CLEAR

書式

CLEAR [引数...]

説明

すべての変数と配列をクリアします。引数は読み飛ばします。

例

CLEAR

END / STOP / SYSTEM

書式

END
STOP
SYSTEM

説明

プログラムを終了します。STOP は Break in 行番号 と表示して止まり、CONT で再開できます。SYSTEM は END と同じ動作です。

例

100 IF A=0 THEN END

REM

書式

REM コメント
'コメント

説明

コメントです。実行されません。

例

10 REM ここから初期化

画面・文字

PRINT

書式

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 2

LOCATE

書式

LOCATE [x][,[y][,カーソル]]

説明

カーソルを桁 x、行 y に移します。左上が(0,0)です。第3引数が0ならカーソルを隠し、0以外なら表示します。

例

LOCATE 10,5
LOCATE ,,0

COLOR

書式

COLOR [文字色][,背景色]

説明

テキストの文字色と背景色を設定します。色コードは0〜7です(下の「色コード」を参照)。

例

COLOR 2
COLOR 7,1

WIDTH

書式

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 ,,1

KEY

書式

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,Y

LINE 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 500

FOR ... 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
WEND

GOTO

書式

GOTO 行番号

説明

指定した行へ飛びます。存在しない行を指定すると Undefined line number になります。

例

GOTO 100

GOSUB / RETURN

書式

GOSUB 行番号
RETURN [行番号]

説明

サブルーチンを呼び出します。RETURN で、呼び出した次の位置へ戻ります。RETURN に行番号を付けると、その行へ戻ります。

例

GOSUB 1000
...
1000 PRINT "SUB"
1010 RETURN

ON ... GOTO / GOSUB

書式

ON 式 GOTO 行番号[,行番号...]
ON 式 GOSUB 行番号[,行番号...]

説明

式の値が1なら1番目、2なら2番目の行へ飛びます。範囲外なら何もせず次の文へ進みます。

例

ON K GOSUB 100,200,300

ON ERROR GOTO

書式

ON ERROR GOTO 行番号

説明

エラーが起きたときの飛び先を設定します。飛び先では ERR でエラー番号、ERL でエラー行を調べられます。RESUME で戻ります。

例

10 ON ERROR GOTO 900
900 PRINT ERR;ERL:RESUME NEXT

ON KEY、ON COM、ON STOP、ON TIMER などのイベント割り込みは未対応で、読み飛ばします。

RESUME

書式

RESUME
RESUME 0
RESUME NEXT
RESUME 行番号

説明

エラー処理から戻ります。RESUME と RESUME 0 はエラーを起こした文をやり直します。NEXT は次の文から、行番号を付けるとその行から再開します。

例

RESUME NEXT

ERROR

書式

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 A

DEFINT / DEFSNG / DEFDBL / DEFSTR

書式

DEFINT 文字範囲[,...]
DEFSNG ...
DEFDBL ...
DEFSTR ...

説明

頭文字の範囲で、変数の既定の型を決めます。

例

DEFINT A-Z
DEFSTR S

OPTION BASE

書式

OPTION BASE 0|1

説明

配列の添字の下限を設定します。

例

OPTION BASE 1

SWAP

書式

SWAP 変数,変数

説明

2つの変数の値を入れ替えます。

例

SWAP A,B

DATA / 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 1234

MID$ (代入)

書式

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,BF

CIRCLE

書式

CIRCLE (x,y),半径[,色[,開始角[,終了角[,縦横比]]]]

説明

円、円弧、楕円を描きます。角度はラジアンです。縦横比の既定は0.5です(画面のドットが縦長のため、これで円に見えます)。

例

CIRCLE (320,100),80,2
CIRCLE (320,100),80,6,0,3.14159

PAINT

書式

PAINT (x,y)[,塗り色[,境界色]]

説明

指定した点から、境界色で囲まれた領域を塗りつぶします。境界色を省略すると、塗り色と同じになります。

例

CIRCLE (320,100),80,2
PAINT (320,100),6,2

PALETTE

書式

PALETTE
PALETTE パレット番号,色コード

説明

パレット番号に色コードを割り当てます。引数なしなら初期状態に戻します。値は0〜7です。

例

PALETTE 1,6
PALETTE

DRAW

書式

DRAW "コマンド"

説明

受け付けるだけで、何もしません。

例

DRAW "U10R10"

音

PLAY

書式

PLAY "MML文字列"

説明

MML(ミュージック・マクロ・ランゲージ)で書かれた楽譜を演奏します。使えるコマンドは、下の「PLAY のMML」を参照してください。

例

PLAY "T120 O4 CDEFGAB>C"

SOUND

書式

SOUND 周波数,長さ

説明

指定した周波数(Hz)の音を鳴らします。長さは約1/55秒単位です。周波数が20未満だと鳴りません。

例

SOUND 440,55

BEEP

書式

BEEP

説明

ビープ音(約1000Hz)を鳴らします。

例

BEEP

ファイル

SAVE

書式

SAVE "ファイル名"

説明

プログラムを保存します。保存先はブラウザ内(localStorage)です。

例

SAVE "GAME"

LOAD

書式

LOAD "ファイル名"[,R]

説明

プログラムを読み込みます。,R を付けると、読み込み後にそのまま実行します。見つからないと File not found になります。

例

LOAD "GAME"
LOAD "GAME",R

MERGE

書式

MERGE "ファイル名"

説明

保存済みのプログラムを、現在のプログラムに合流させます。同じ行番号は上書きされます。

例

MERGE "SUB"

FILES

書式

FILES

説明

保存済みのファイル名の一覧を表示します。

例

FILES

KILL

書式

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 #1

WRITE

書式

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 などで指定した型になります。指定がなければ単精度実数です。

エラー一覧

番号メッセージ
1NEXT without FOR
2Syntax error
3RETURN without GOSUB
4Out of DATA
5Illegal function call
6Overflow
7Out of memory
8Undefined line number
9Subscript out of range
10Duplicate Definition
11Division by zero
12Illegal direct
13Type mismatch
14Out of string space
15String too long
17Can't continue
18Undefined user function
19No RESUME
20RESUME without error
22Missing operand
26FOR without NEXT
29WHILE without WEND
30WEND without WHILE
52Bad file number
53File not found
54Bad file mode
62Input past end
76Path not found

エラーは Syntax error in 100 のように、行番号付きで表示されます。ON ERROR GOTO で処理できます。