ファミリーベーシック ステートメント(命令文)一覧|PRINT・FOR・GOTO を実機で確かめた辞典
ファミリーベーシック(Family BASIC)でプログラム本体に書く命令文(ステートメント)の総覧です。PRINT で表示し、FOR ~ NEXT で繰り返し、GOTO で分岐する——プログラムを組み立てる骨格となる命令を、エミュレータ上で実際に動かして挙動を確かめた辞典としてまとめました。
ファミベの BASIC は一般的な BASIC と似て非なる方言です。LET は使えず、NEXT I のような変数付き NEXT は構文エラーになり、PRINT のタブ幅も独特です。本ページは各命令を実機の出力付きで載せているので、「ファミリーベーシック {命令} 使い方」で調べたときに、その命令の振る舞いへ直接着地できます。下表から各命令へ飛んでください。
辞典シリーズ:この辞典は命令カテゴリごとに分かれています。総目次は ファミリーベーシック 命令・コマンド完全リファレンス(hub)から。
対応バージョンと凡例
ここに載せた命令は、特記なき限り Family BASIC V2.0A / V2.1 で共通です。本ページの「実機確認」は V2.0A(HVC-BS 相当)で観察した結果です。各エントリの先頭にマークを付けています。
- ✅ 実機確認 … エミュレータで実際に実行し、画面表示まで観察したもの
- 📖 規格 … マニュアル記載の命令。発生条件が特殊・直接観察が難しく本検証では未収録(挙動は規格ベース)
ステートメント早見表
| 命令 | はたらき | 実機での注意 | 詳細 |
|---|---|---|---|
| 代入(=) | 変数に値を入れる | LET は使えない(?SN) |
代入 |
PRINT |
画面に表示 | , は 8 文字タブ、; は密着 |
|
INPUT |
キーボードから入力 | プロンプトに ? が自動付加 |
INPUT |
LINPUT |
1 行まるごと入力 | ? を付けない/, : も取り込む |
LINPUT |
CLEAR |
変数・配列を全クリア | 引数ありは別命令(メモリ上限変更) | CLEAR |
DIM |
配列を宣言 | サイズは添字の最大値(0 始まり) | DIM |
GOTO |
無条件ジャンプ | 行番号は定数のみ | GOTO |
GOSUB |
サブルーチン呼出 | 末尾に必ず RETURN |
GOSUB |
RETURN |
サブルーチンから戻る | GOSUB なしだと ?RG |
RETURN |
IF ~ THEN |
条件分岐 | ELSE がない |
IF ~ THEN |
FOR ~ NEXT |
回数ループ | NEXT I は不可、NEXT 単独 |
FOR ~ NEXT |
ON ~ GOTO |
計算分岐 | インデックスは 1 始まり | ON ~ GOTO |
STOP |
一時停止 | BREAK IN n、CONT で再開可 |
STOP |
END |
終了 | CONT 不可 |
END |
SWAP |
2 変数を交換 | 同じ型同士のみ | SWAP |
REM |
コメント | ' で代用可、: で続けられない |
REM |
READ |
DATA を読む | 読み切ると ?OD |
READ |
DATA |
データを並べる | , : は " で囲む |
DATA |
RESTORE |
読み位置を巻き戻す | 同じ DATA を再読込 | RESTORE |
CALL |
マシン語呼出 | 上級者向け | CALL |
POKE |
メモリ書込 | システム予約領域は不可 | POKE |
LOCATE |
カーソル移動 | x=0-27、y=0-23 | LOCATE |
COLOR |
セルの配色指定 | 文字色でなくパレット番号 | COLOR |
CGEN |
キャラ組合せ切替 | 起動時は CGEN2 | CGEN |
CLS |
画面消去 | スプライトは消えない | CLS |
CGSET |
パレットセット選択 | 省略時 m=1, n=1 | CGSET |
PALET |
パレット色を再定義 | 4 色(0-3F)を指定 | PALET |
DEF MOVE |
動きを定義 | 8 パターンまで登録 | DEF MOVE |
MOVE |
動きを開始 | 並列実行、次の文へすぐ進む | MOVE |
CUT |
動きを止める | 表示は残る(要追加検証) | CUT |
ERA |
動きを止め消す | 画面からも消える | ERA |
POSITION |
初期座標を与える | MOVE の前に実行 |
POSITION |
KEY |
F キーに文字列定義 | 押下で一気に展開 | KEY |
KEYLIST |
F キー定義を表示 | 確認用 | KEYLIST |
PAUSE |
一時停止(時間指定) | n 省略でキー待ち | PAUSE |
SYSTEM |
システム画面へ戻る | モード切替専用 | SYSTEM |
VIEW |
BG GRAPHIC を表示 | 引数なし | VIEW |
BEEP |
単音を鳴らす | 引数なし | BEEP |
PLAY |
MML でメロディ | シャープは前置 #C、ブロッキング |
PLAY |
DEF SPRITE |
スプライトを定義 | 8×8 か 16×16 の 2 種 | DEF SPRITE |
SPRITE |
スプライトを表示 | 座標なしで非表示 | SPRITE |
SPRITE ON |
スプライト面 ON | 起動直後は OFF | SPRITE ON |
SPRITE OFF |
スプライト面 OFF | 全消去 | SPRITE OFF |
他の BASIC とつまずきやすい3つ(先に知っておきたい)
ファミベは方言です。他言語の感覚で書くと、この3つで構文エラーを踏みます。
- 代入に
LETは付けられない —LET A=1は?SN ERROR。A=1と書く(代入)。 NEXTに変数を付けない —NEXT Iは構文エラー。NEXT単独で書く(FOR ~ NEXT)。- MML のシャープは前置 —
PLAY "C#"は誤りで、#Cと書く。><でのオクターブ移動も不可(PLAY)。
各ステートメントの詳細
代入(=)
✅ 実機確認 ・ 書式 変数 = 式
はたらき:文の先頭で 変数 = 式 と書いて値を代入します。数値変数(A, X1 等)には数値式、文字列変数(末尾 $)には文字列式を入れます。型が合わないと ?TM ERROR。未初期化の変数は数値 = 0、文字変数 = 空文字列("")として扱われるので、明示的な初期化は不要です。
制約:代入文は行番号の直後(行頭)から書きます。A = B = 0 のような複数代入はできません。複数の変数をまとめて初期化したいときはマルチステートメント(:)で A = 0: B = 0 と並べます。
LET は使えない:一般的な BASIC で許される LET A = 10 は、ファミベでは ?SN ERROR(構文エラー)になります。他方言の感覚で LET を付けないよう注意してください。
実機観察:代入は 変数 = 式 の形のみ。LET キーワードはありません。
10 A=5:PRINT A
5
✅ 実機確認 ・ 書式 PRINT [式 [{,|;} 式...]] [{,|;}] ・ 略号 ? または P.
はたらき:画面に計算結果や数値・文字を表示します。表示する値は複数指定でき、区切り記号で並べ方が変わります。
区切り記号:
– カンマ ,:次の値を 8 文字間隔のタブ位置に揃えて出力。
– セミコロン ;:次の値を密着して出力。
– 末尾の , または ;:改行を抑制する(無ければ自動改行)。
出力フィールド:画面幅 28 文字を 8 + 8 + 8 + 4 の 4 ブロックに分けて表示します(ブロック先頭は 0, 8, 16, 24)。数値は符号用に前後 1 文字分のスペースが入り、PRINT(引数なし)は空行を出力します。
実機観察(カンマ):カンマ区切りは次の値を 8 文字間隔のタブ位置に揃えます(画面幅 28 = 8+8+8+4 ブロック)。
10 PRINT "A","B","C","D","E"
A B C D
E
実機観察(セミコロン):セミコロンは値どうしを密着して出力します。
10 PRINT "A";"B";"C"
20 PRINT 1;2;3
ABC
1 2 3
実機観察(文字列):文字列リテラルを渡すと改行付きで 1 行に表示します。
10 PRINT "HELLO"
HELLO
INPUT
✅ 実機確認 ・ 書式 INPUT ["文字列";] 変数 [, 変数...] ・ 略号 I.
はたらき:キーボードから数値や文字を入力して変数に代入します。プロンプト文字列を指定すると、その後ろに ? が自動表示されます。? を出したくなければ、文字列と変数を ,(カンマ)または : で区切ります。
注意:変数を複数指定するとユーザは , で区切って一度に入力します。入力値の数は変数の数と一致させる必要があります。数値変数に文字列を入れた場合は 0 が代入されます(再入力要求にはなりません)。数値型と文字列型を混ぜないようにします。
実機観察:INPUT は NAME? のプロンプトでブロッキング入力待ちになります(プロンプト文字列の後に ? が自動付加)。HELLO と打って RETURN で確定すると BASIC が続行し、HI HELLO を表示します。
10 INPUT "NAME";A$
20 PRINT "HI ";A$
NAME?HELLO
HI HELLO
LINPUT
✅ 実機確認 ・ 書式 LINPUT ["文字列";] 文字変数 ・ 略号 L.IN.
はたらき:キーボードから改行までの 1 行分を、ひとつの文字列として取り込みます。文字列専用(数値変数には使えません)で、メッセージや 1 行コメントの入力に向きます。
INPUT との違い:, や : をそのまま入力できます(INPUT はこれらを区切りとして扱う)。また LINPUT はプロンプト後に ? を自動付加しません。「何でもよい 1 行入力」が必要なら LINPUT、区切り文字で項目を分けたいなら INPUT、と使い分けます。
実機観察:LINPUT は改行までを 1 つの文字列として読みます。プロンプト MSG の直後から入力が始まり、画面は MSGTEST になります。なお [ ] ブラケットは Family BASIC の表示文字セットに含まれず、画面上では空白として描画されます(PRINT "[" "]" を打っても見た目は空白)。
10 LINPUT "MSG";A$
20 PRINT "[";A$;"]"
20 PRINT " ";A$;" "
MSGTEST
MSGTEST
CLEAR(変数初期化)
✅ 実機確認 ・ 書式 CLEAR ・ 略号 CLE.
はたらき:メモリ上のすべての変数および配列をクリアします(数値型 → 0、文字列型 → "")。
注意(同名・別動作):CLEAR(引数なし)は変数初期化ですが、CLEAR アドレス(引数あり)はメモリ上限変更という別の動作です。同じ命令名でも引数の有無で挙動が完全に異なります。変数だけを消したいなら引数なしの CLEAR、最初から実行し直すなら RUN(こちらはプログラムも実行されます)。
実機観察:CLEAR(引数なし)は変数・配列を全部 0/空文字列に戻します。
10 A=99:B$="X":CLEAR:PRINT A:PRINT "["+B$+"]"
10 A=99:B$="X":CLEAR:PRINT A
:PRINT " "+B$+" "
0
DIM
✅ 実機確認 ・ 書式 DIM 配列名(n1[, n2])[, 配列名(n1[, n2])...] ・ 略号 D.
はたらき:配列を宣言します。1 つの DIM 文で複数の配列をカンマ区切りで宣言できます。宣言時に要素はクリアされ(数値配列は 0、文字列配列は "")、初期化は不要です。
サイズの数え方:サイズは「添字の最大値」で、要素数-1 ではありません。DIM A(10) は A(0)〜A(10) の 11 要素になります(0 から数える)。2 次元配列まで対応(3 次元以上は不可)。同じ配列を 2 度 DIM すると ?DD ERROR、添字が範囲外なら ?SO ERROR です。配列は使う前に必ず DIM が必要で、整数 1 要素 = 2 バイトのメモリを消費します。
実機観察:DIM A(n) は A(0)〜A(n) の n+1 要素を 0 で初期化します。
10 DIM A(3):A(1)=7:PRINT A(0);A(1);A(2);A(3)
0 7 0 0
GOTO
✅ 実機確認 ・ 書式 GOTO 行番号 ・ 略号 G.
はたらき:指定した行番号へ無条件にジャンプします。最も基本的な制御構造です。行番号は定数のみで、式や変数では指定できません(動的ジャンプは ON ~ GOTO を使う)。飛び先の行が存在しないと ?UL ERROR。
使い分け:単純な分岐は GOTO、条件付きは IF ~ THEN GOTO、多分岐は ON 文、サブルーチン呼出は GOSUB。ファミベ BASIC は構造化制御が乏しいので、GOTO は必須の道具です。
実機観察:GOTO は指定行へジャンプします。
10 PRINT "A":GOTO 30
20 PRINT "B"
30 PRINT "C"
A
C
GOSUB
✅ 実機確認 ・ 書式 GOSUB 行番号 ・ 略号 GOS.
はたらき:指定行のサブルーチンを呼び出し、RETURN 文が実行されたら呼出元の次の文に戻ります。複数回の呼出やネスティング(サブルーチン内サブルーチン)もメモリの範囲内で可能です。
注意:サブルーチンの最後には必ず RETURN を書きます。GOSUB 文 → メイン本体終了 → そのままサブルーチンへ流れ込む事故を防ぐため、メイン部の最後に STOP / END を置くのが流儀です。伝統的にはメインを 100-999、サブルーチンを 1000-1999, 2000-2999… に置きます。
実機観察:GOSUB は指定行を呼び出し、RETURN で呼出元の次に戻ります。
10 GOSUB 100:PRINT "AFTER":END
100 PRINT "SUB":RETURN
SUB
AFTER
RETURN
📖 規格 ・ 書式 RETURN [行番号] ・ 略号 RE.
はたらき:サブルーチンの実行を終え、呼出元に戻ります。サブルーチンの末尾に必ず書きます。
動作:引数なしは通常の戻り(GOSUB の次の文へ)。引数を付けると指定行に戻ります(通常と違う場所へ戻る珍しい使い方)。対応する GOSUB がない状態で実行すると ?RG ERROR(RETURN without GOSUB)になります。
IF ~ THEN
✅ 実機確認 ・ 書式 IF 式 THEN {行番号|文} / IF 式 GOTO 行番号 ・ 略号 IF.-T.
はたらき:条件分岐です。式が真(≠ 0)なら THEN 以降を実行し、偽(= 0)なら同じ行の残りを実行せず次の行へ進みます。真偽値は 真 = -1, 偽 = 0 です。
3 通りの等価な書き方:THEN 行番号 = THEN GOTO 行番号 = GOTO 行番号 は同じ意味です。
IF X = 10 THEN 500
IF X = 10 THEN GOTO 500
IF X = 10 GOTO 500
THEN の後ろに直接文を書く形式(IF A = 0 THEN PRINT "ZERO")も使えます。ELSE 句はないので、二択は別の IF か GOTO + 行番号で書きます。複合条件は AND / OR で連結します(例: IF X > 0 AND X < 10 THEN ...)。真偽が -1/0 なので IF X(X が 0 でなければ真)も書けます。
実機観察(偽):条件が偽(= 0)のとき THEN 以降を飛ばします。
10 IF 3>5 THEN PRINT "NO":REM does nothing
20 PRINT "DONE"
10 IF 3>5 THEN PRINT "NO":RE
M DOES NOTHING
DONE
実機観察(真):条件が真(≠ 0)のとき THEN 以降を実行します。
10 IF 5>3 THEN PRINT "YES"
YES
FOR ~ NEXT
✅ 実機確認 ・ 書式 FOR i = m TO n [STEP s] … NEXT ・ 略号 F.-TO-ST.(FOR-TO-STEP), N.(NEXT)
はたらき:指定回数の繰返しループです。i に m を代入してループを始め、NEXT に到達するたび i に s を加算、i が n を超えたら(s が負なら下回ったら)終了します。STEP 省略時は s = 1。m と n が同じなら 1 回だけ実行します。
NEXT に変数を付けない:一般的な BASIC で許される NEXT I は、ファミベでは構文エラー(?SN ERROR)になります。NEXT のみで書いてください。NEXT に対応する FOR がないと ?NF ERROR(NEXT without FOR)です。範囲は m ≤ n かつ STEP > 0(または m ≥ n かつ STEP < 0)になるようにします。
実機観察:FOR/NEXT の基本ループ。NEXT に変数指定を付けると ?SN ERROR になるので、NEXT 単独で書きます。
10 FOR I=1 TO 5
20 PRINT I
30 NEXT
1
2
3
4
5
ON ~ GOTO / GOSUB
✅ 実機確認 ・ 書式 ON 式 {GOTO|GOSUB|RETURN|RESTORE} 行番号, 行番号, ... ・ 略号 O.
はたらき:式の値によって複数の行番号にジャンプする計算分岐(switch / case 相当)です。式の値が 1 → 1 番目の行番号、2 → 2 番目… と飛び分けます。インデックスは 1 始まりで、値が 0 または範囲外(リスト数を超える)なら何も飛ばずに次の行へ進みます。小数なら整数部を使います。GOTO / GOSUB / RETURN / RESTORE の 4 種と組み合わせられます。
等価表現:ON X GOTO 1000, 2000, 3000 は以下と等価です。
IF X = 1 THEN 1000
IF X = 2 THEN 2000
IF X = 3 THEN 3000
実機観察:ON 式 GOTO n1,n2,... は式の値で n 番目の行へ飛びます(1 始まり)。
10 ON 2 GOTO 100,200,300
100 PRINT "ONE":END
200 PRINT "TWO":END
300 PRINT "THREE":END
TWO
STOP
✅ 実機確認 ・ 書式 STOP ・ 略号 STO.
はたらき:実行中のプログラムを STOP の位置で停止します(BREAK と同等)。BREAK IN <行番号> のメッセージを表示し、停止後は CONT で再開できます(END と違う点)。デバッグや一時停止に使います。
実機観察:STOP で停止すると BREAK IN <行番号> が表示されます。
10 PRINT "BEFORE":STOP:PRINT "AFTER"
BEFORE
BREAK IN 10
OK.
END
✅ 実機確認 ・ 書式 END ・ 略号 E.
はたらき:プログラムの実行を終了し、コマンドモード(READY 表示)に戻ります。STOP と違い CONT での継続はできません(?CC ERROR になる)。メイン部の最後に END を入れて、サブルーチンに流れ込まないようにするのが流儀です。
実機観察:END で正常終了します(BREAK メッセージなし)。
10 PRINT "DONE":END:PRINT "NEVER"
DONE
SWAP
✅ 実機確認 ・ 書式 SWAP 変数A, 変数B ・ 略号 SW.
はたらき:2 つの変数の内容を交換します(SWAP A, B で A と B が入れ替わる)。両変数の型は同じである必要があり(数値同士、文字列同士)、異種型ペアはエラーになります。配列要素も指定でき(SWAP A(I), A(J))、ソート系のアルゴリズムで重宝します。古典的な「temp 経由スワップ」が不要になります。
実機観察:SWAP A, B は A と B の値を入れ替えます。
10 A=1:B=2:SWAP A,B:PRINT A;B
2 1
REM
✅ 実機確認 ・ 書式 REM コメント ・ 略号 '(シングルクォート)または REM.
はたらき:プログラムにコメントを入れます。REM 以降、行末まではコメントとして無視され(実行されない)、255 文字まで書けます。: で区切って後ろに別の文を書くことはできません(REM の後ろは全部コメント)。
' 形式:シングルクォート ' でも代用できます。行内にコメントを残したいときは :REM ... または :'... の形にします。プログラム冒頭にプログラム名を REM で書くのが流儀です。
実機観察:REM 以降は実行されません。
10 REM THIS IS A COMMENT
20 PRINT "X"
X
READ
✅ 実機確認 ・ 書式 READ 変数 [, 変数, ...] ・ 略号 REA.
はたらき:DATA 文に並べた値を順番に読んで変数に入れます。内部の「DATA ポインタ」が READ のたび 1 つ進みます。全 DATA を使い切ると ?OD ERROR(Out of DATA)。数値変数には数値、文字列変数には文字列を読み(型不一致は ?TM ERROR)、読み直しは RESTORE 文で行います。DATA 文はプログラムのどこに置いてもよく、まとめて末尾に置くのが流儀です。
実機観察:READ は DATA 文の値を順番に取り出します。
10 READ A,B,C:PRINT A;B;C
20 DATA 10,20,30
10 20 30
DATA
📖 規格 ・ 書式 DATA 定数 [, 定数, ...] ・ 略号 D.
はたらき:READ で読み込むデータを並べます。DATA 文自体は実行されるステートメントではなく(到達しても何もしない)、READ によって順番に読み込まれます。行のどこに置いても構いません。
値の表記:
– 数値:範囲は -32768〜+32767、" で囲まない。
– 文字列:" で囲むか、空白なしで直接書く(例: DATA ABC,DE)。,(カンマ)・:(コロン)は区切りと混同されるので使えず、含めたい場合は " で囲みます(例: DATA "ABC,DE")。
例: DATA ABC, DE, : ,F は 4 つの文字列 "ABC", "DE", "", "F" になります(DATA "ABC", "DE", "" ,"F" と同じ意味)。" 囲みなしの文字列は前後の空白がトリミングされます。数値と文字列は混在させない方が安全です。
RESTORE
✅ 実機確認 ・ 書式 RESTORE [行番号] ・ 略号 RES.
はたらき:READ 用の DATA ポインタを指定行(省略時は最初の DATA 文)に戻します。これで同じ DATA を 2 度読めます。行番号を指定すると、その行以降の DATA から読み始めます(指定行に DATA 文が無くても、その行以降の最初の DATA から)。DATA をループで複数回使うときに必須です。
実機観察:RESTORE は READ 用ポインタを先頭に戻します。
10 READ A:RESTORE:READ B:PRINT A;B
20 DATA 7
7 7
CALL
📖 規格 ・ 書式 CALL アドレス ・ 略号 CA.
はたらき:指定アドレス(&H0000–&HFFFF)に格納されたマシン語ルーチンを呼び出します。戻り値はマシン語側の責任です。マシン語サブルーチンは事前に POKE 等で配置するか、ROM 内ルーチンを使います。CLEAR(システムコマンド版)でメモリ上限を縮めて確保した領域に置けば、BASIC とは別に保護されます。
位置づけ:通常の BASIC コーディングでは出番が少なく、高速化や PPU(画面表示チップ)の直接操作が必要なときに使う上級機能です。
POKE
✅ 実機確認 ・ 書式 POKE アドレス, データ [, データ, ...] ・ 略号 PO.
はたらき:メモリの指定アドレスに 1 バイト(0〜255)を書き込みます(読み出しは PEEK)。複数データを指定すると連続バイトを書き込めます(1 つずつ POKE するより高速)。
注意:書き込めるのはメモリマップで「使用可能」とされた範囲のみです。&H7000–&H703F のシステム予約領域は POKE 不可、&H7600– の BASIC プログラム本体を上書きすると暴走の可能性があります。スプライトの直接配置やマシン語コード書込などに使います。
実機観察:POKE addr,value でメモリ書き込み、PEEK(addr) で読み戻し。POKE &H7100,123 → PEEK(&H7100) で 123 が返ります。BASIC ユーザ領域(&H7100 付近)は安全に POKE できます。
10 POKE &H7100,123
20 PRINT PEEK(&H7100)
123
LOCATE
✅ 実機確認 ・ 書式 LOCATE x, y ・ 略号 LOC.
はたらき:バックグラウンド面のカーソル位置を (x, y) に動かします。続く PRINT 文等の出力はここから始まります。x = 0-27(28 列)、y = 0-23(24 行)で、左上が (0, 0)、右下が (27, 23) です。画面サイズは 28 × 24 文字。
実機観察:LOCATE x,y はカーソルを (x,y) に動かします。x は列(0-27)、y は行(0-23)。
10 LOCATE 10,5:PRINT "X"
20 LOCATE 3,15:PRINT "HELLO"
X
HELLO
COLOR
✅ 実機確認 ・ 書式 COLOR x, y, n ・ 略号 COL.
はたらき:指定位置 (x, y) のセルに BG パレット番号 n(0-3)を割り当てます。x = 0-27、y = 0-23。文字色そのものではなくセル単位の配色属性を変える点に注意してください。既存の文字色を変えつつ、新規 PRINT 出力にも適用されます。大きな範囲を指定したいときは複数の COLOR を使います。実際の色は CGSET と PALET の組合せで決まります。
実機観察:COLOR x,y,n は (x,y) のセルに BG パレット番号 n(0-3)を割り当てます(色の差は映像で確認)。
10 CLS
20 LOCATE 5,5:PRINT "ABCD"
30 COLOR 5,5,1
40 COLOR 6,5,2
50 COLOR 7,5,3
ABCD
CGEN
✅ 実機確認 ・ 書式 CGEN n ・ 略号 CGE.
はたらき:バックグラウンド面とスプライト面に割り当てるキャラクタの組み合わせ(CGEN テーブル A/B)を 4 通り(n=0,1,2,3)から切り替えます。
| n | バックグラウンド | スプライト | 説明 |
|---|---|---|---|
| 0 | A | A | 両方アニメ |
| 1 | A | B | 標準(V3 系) |
| 2 | B | A | 入替 |
| 3 | B | B | 両方文字 |
デフォルトは CGEN2(起動直後の状態)。文字主体の表示は CGEN2、グラフィック主体は CGEN1 / CGEN3 などを使います。(CTRL)+(D)で CGEN は 2 の組合せに再設定されます。
実機観察:CGEN n でキャラクタジェネレータを切り替えると、同じ文字でも字形が変わります(差は映像で確認)。
10 CGEN 0:PRINT "A"
20 CGEN 1:PRINT "A"
30 CGEN 2:PRINT "A"
A
A
A
CLS
✅ 実機確認 ・ 書式 CLS ・ 略号 CL.
はたらき:バックグラウンド面(BG GRAPHIC を含む)のテキスト画面をすべてクリアします。スプライトはクリアされません(消すには SPRITE OFF)。(CTRL)+(L)と等価です。画面更新の前に CLS で初期化します。
実機観察:CLS は画面を消去します。実行後は CLS 前の出力が見えなくなります。
10 PRINT "BEFORE"
20 CLS
30 PRINT "AFTER"
AFTER
CGSET
📖 規格 ・ 書式 CGSET [m][, n] ・ 略号 CG.
はたらき:表示に使う BG とスプライトのパレットセットを選びます。m は BG 用パレットの組合せ(0 or 1)、n はスプライト用パレットの組合せ(0, 1, 2)。両方ともデフォルトは 0 ですが、引数を省略すると m=1, n=1 になります。
位置づけ:画面構築の最初に CGSET でパレットを選び、その後 PALET で個別色を調整、DEF SPRITE / DEF MOVE で「何番のパレットを使うか」を指定して描画します。
PALET
✅ 実機確認 ・ 書式 PALET[B|S] n, C1, C2, C3, C4 ・ 略号 PAL.B, PAL.S
はたらき:配色(パレット)番号 n(0-3)の 4 色を、マスタパレットの色コード(各 &H00〜&H3F)で再定義します。サフィックスで対象が変わります:PALET.B はバックドロップ(全画面背景色)、PALET.S はスプライト用、無印は通常の BG 用パレットです。引数は固定で 4 色(C1, C2, C3, C4 必須)。
色コードの一例:
| 色コード | 色 | 色コード | 色 |
|---|---|---|---|
| 00 | 黒 | 30 | 白 |
| 04 | 青 | 32 | 灰 |
| 06 | 紫 | 33 | (中間色) |
| 08 | 赤 | 36 | 灰青 |
| 0C | 茶 | 38 | 緑 |
例: PALET 3, &H30, &HC, &H1A, &H12 はパレット 3 を 白・茶・(&H1A)・(&H12) に再定義します。同じスプライトでも n を変えれば色違いが作れます。
実機観察:PALETB n,C1,C2,C3,C4 は BG パレット n(0-3)の 4 色をマスタテーブルのコード(0-3F)で指定します(色変化は映像で確認)。
10 PALETB 0,&H0F,&H16,&H27,&H30
20 PRINT "PALET SET"
PALET SET
DEF MOVE
📖 規格 ・ 書式 DEF MOVE(n) = SPRITE(A, B, C, D, E, F) ・ 略号 DE.M.
はたらき:アニメキャラクタの動きを動作番号 n(0-7、最大 8 パターン)に登録します。各パターンは 6 要素で構成します。
- A(0-15):アニメキャラクタの種類
- B(0-8):動きの方向(8 方向 + 静止。0=静止)
- C(1-255):動きの速さ(C×1/30 秒、C=1 で約 0.03 秒。1=最高速、255=最低速、0 は表示しない)
- D(1-255):動きの全体距離(255 で動き続ける)
- E(0-1):0=バックドロップの後ろ、1=スプライト面(背景の手前)
- F(0-3):配色(パレット)番号
アニメキャラクタの種類(A):
| A | キャラ | A | キャラ |
|---|---|---|---|
| 0 | マリオ | 8 | スターキラー |
| 1 | レディ | 9 | スターシップ |
| 2 | ファイターフライ(ハエさん) | 10 | 爆発 |
| 3 | アキレス | 11 | ニタニタ |
| 4 | ペンペン(ペンギンさん) | 12 | レーザー(8×8 単タイル) |
| 5 | ファイアーボール | 13 | シェルクリーパー(カメさん) |
| 6 | 車 | 14 | サイドステッパー(カニさん) |
| 7 | スピナー | 15 | ニットピッカー(トリさん) |
実行順序は DEF MOVE(定義)→ POSITION(初期位置)→ SPRITE ON → MOVE(動作開始)です。
MOVE
✅ 実機確認 ・ 書式 MOVE n0 [, n1, ..., n7] ・ 略号 M.
はたらき:DEF MOVE で定義した動作番号 n0..n7 のスプライトを動かし始めます(同時に最大 8 個)。あらかじめ SPRITE ON で表示状態にしておく必要があります。動作中の SPRITE は BASIC プログラムと並列に動き、MOVE 文は処理を止めず次の文へすぐ進みます。位置を取りたいときは POSITION / XPOS / YPOS を使います。
実機観察:DEF MOVE(0)=SPRITE(A,B,C,D,E,F) で動作 0 を登録、POSITION で初期座標、MOVE 0 で動き始めます。観察結果として、(1) B=3 = 右方向で x が増え y は固定、(2) C=8 で約 30 フレーム(約 0.5 秒)あたり 4 ドット ≈ 8 フレーム(約 0.13 秒)で 1 ドット(「C=1 最高速、255 最低速」と整合)、(3) MOVE で動くスプライトは画面に出すスプライトの一覧表(OAM)の中で静的な SPRITE とは別の枠を使い、互いに衝突しない、(4) 3 ポーズのタイル(8×8 ドットの画像片)が 30 フレーム(約 0.5 秒)毎に切替わり歩行アニメを構成、(5) 右方向では MOVE がタイルの並べ替えと左右反転を内部処理していることが分かりました(内訳は連載で)。
10 SPRITE ON
20 DEF MOVE(0)=SPRITE(0,3,8,100,1,0)
30 POSITION 0,50,100
40 MOVE 0
(no output)
CUT
✅ 実機確認 ・ 書式 CUT n0 [, n1, ..., n7] ・ 略号 CU.
はたらき:MOVE で動き始めたアニメキャラクタを停止します。規格上は CUT してもキャラクタは画面に表示されたまま(位置固定)とされ、完全に消すには ERA または SPRITE OFF を使います。一時停止 → 再開は CUT → MOVE です。
実機観察:規格は「CUT しても表示は残る」としますが、この検証ではスプライトが画面から消えてしまい ERA と区別がつきませんでした。要追加検証です(FOR の待機時間や CUT 後の待ち時間で挙動が変わる可能性)。
10 SPRITE ON
20 DEF MOVE(0)=SPRITE(0,3,8,100,1,0)
30 POSITION 0,50,100
40 MOVE 0
50 FOR I=0 TO 300:NEXT
60 CUT 0
(no output)
ERA
✅ 実機確認 ・ 書式 ERA n0 [, n1, ..., n7] ・ 略号 ER.
はたらき:MOVE で動いているキャラクタを停止し、スプライト面から消去します。CUT(停止のみ)との違いは画面からも消える点で、位置情報も失われます。一時停止だけなら CUT、全消去は SPRITE OFF を使います。
実機観察:ERA n は停止に加えてスプライトを画面から消します(画面に出すスプライトの一覧表(OAM)から消えたことで確認)。なお同じテストコードで CUT でもスプライトが画面から消え、この検証ペアでは両者の差が見えませんでした(CUT が「残す」のは規格上の記述で、実機検証は要追加)。
10 SPRITE ON
20 DEF MOVE(0)=SPRITE(0,3,8,100,1,0)
30 POSITION 0,50,100
40 MOVE 0
50 FOR I=0 TO 300:NEXT
60 ERA 0
(no output)
POSITION
📖 規格 ・ 書式 POSITION n, X, Y ・ 略号 POS.
はたらき:MOVE で動き始める前に、動作番号 n(0-7)のアニメキャラクタの初期座標を与えます。座標系は 256 × 256 ドット(画面は 256 × 240)、デフォルトは X=120, Y=120(画面中央)です。
実行順序:DEF MOVE(定義)→ POSITION(初期位置、省略時 120,120)→ SPRITE ON → MOVE(動作開始)。POSITION → MOVE の順が必須です。
KEY
✅ 実機確認 ・ 書式 KEY ファンクションキー番号, 文字列 ・ 略号 K.
はたらき:F1〜F8 を押したときに挿入される文字列(最大 15 文字)を再定義します。文字列に CHR$(13)(改行)を含めれば「自動実行マクロ」化できます(例: KEY 1, "SAVE M" + CHR$(13))。GAME BASIC 起動時のデフォルトは F1=LOAD(M)、F2=PRINT、F3=GOTO、F4=CHR$(M)、F5=SPRITE、F6=CONT(M)、F7=LIST(M)、F8=RUN(M) です((M) は M キー=キャリッジリターン押下相当)。
実機観察:KEY n,"文字列" で F1〜F8 に任意の文字列を割り当てます。KEY 1,"HELLO" の後、INPUT 待ち中に F1 を 1 回押すだけで HELLO が一気に入力バッファへ展開され、続く RETURN で確定 → A$ に HELLO が入ります。
10 KEY 1,"HELLO"
20 INPUT "X";A$
30 PRINT A$
X?HELLO
HELLO
KEYLIST
📖 規格 ・ 書式 KEYLIST ・ 略号 KL.
はたらき:現在のファンクションキー(F1〜F8)の割当一覧を画面に表示します。KEY で何を設定したかの確認用です。
PAUSE
✅ 実機確認 ・ 書式 PAUSE [n] ・ 略号 PA.
はたらき:プログラムを約 n×1/60 秒(PAUSE 60 で約 1 秒)だけ停止します。n を省略するとキー入力があるまで停止します。n を指定しても途中でキー入力があれば即解除されます。フレーム同期や遅延処理、「キー押下待ち」に使います。
実機観察:PAUSE n はおよそ n×1/60 秒(PAUSE 60 で約 1 秒)止めます(途中でキーが押されると即解除)。PRE → PAUSE 30(約 0.5 秒)→ POST で、最終画面に PRE と POST が両方並び、PAUSE が正常に経過したことが分かります(PAUSE 中の中間状態は検証の仕組みの制約で直接は捕捉できないため、ブロッキング時間は映像で確認)。
10 PRINT "PRE":PAUSE 30:PRINT "POST"
PRE
POST
SYSTEM
📖 規格 ・ 書式 SYSTEM ・ 略号 S.
はたらき:GAME BASIC モードで SYSTEM を入力すると、起動時のシステム画面(4 ボード選択画面)に戻ります。「1 → BASIC」を選んで再入場するとプログラムは保持されています。通常のコーディングでは使わず、モード切替時の専用命令です。
VIEW
✅ 実機確認 ・ 書式 VIEW ・ 略号 V.
はたらき:BG GRAPHIC 面で描いた絵をバックグラウンド面へコピー(複写)して表示します。起動直後は BG GRAPHIC で描いた絵が表示されないので、VIEW で現在の内容をコピーして見せます(バックグラウンド面のパレットコードは 1=CGSET 1, 1 で表示)。
実機観察:VIEW は引数なし。ここでは構文エラーにならないことだけを確認しています(BG GRAPHIC を描いていないので見た目の変化はありません)。
10 VIEW
20 PRINT "VIEW DONE"
VIEW DONE
BEEP
✅ 実機確認 ・ 書式 BEEP ・ 略号 B.
はたらき:「ピー」という音を 1 回鳴らす単音(システム音)です。PAUSE / IF ~ THEN と組み合わせると待機時の通知音に使えます。単発の確認音は BEEP、メロディは PLAY と使い分けます。
実機観察:BEEP は引数なしで 1 回鳴る単音です。本検証では APU(音源チップ)の発音を 3 フレーム(約 0.05 秒)間隔で覗いたところ、どのチャンネルの発音も捉えられませんでした——BEEP は非常に短い(数フレーム以下=0.1 秒未満)ためこの間隔で取りこぼした可能性が高く、耳では確かに鳴っているので音は映像の音声トラックで確認します。
10 BEEP
(no output)
PLAY
✅ 実機確認 ・ 書式 PLAY ストリングデータ [, ストリングデータ, ストリングデータ] ・ 略号 PL.
はたらき:MML 形式の文字列でメロディを演奏します。引数を ,(カンマ)で区切ると最大 3 つで 3 重音(チャンネル A/B/C)を同時演奏できます。
MML 主要コマンド:
| コマンド | 意味 | 範囲 |
|---|---|---|
T n |
テンポ設定 | T1-T255(高い数=遅い) |
O n |
オクターブ設定 | O0-O5(00=低音, 05=高音) |
M n |
エンベロープ MOD 設定 | M0/M1 |
Y n |
デューティ効果(音色) | Y0=12.5%, Y1=25%, Y2=50%, Y3=75% |
V n |
ボリューム / エンベロープ長さ | V0-V15(V0=音なし) |
R 音価 |
休符 | R0-R9 |
| 音名 + 音価 | 音符 | C, D, E, F, G, A, B + 音価(0-9) |
# + 音名 |
シャープ(半音上) | 例: #C = ド# |
音名と半音:ド C、ド#(=レ♭)#C、レ D、レ#(=ミ♭)#D、ミ E、ファ F、ファ#(=ソ♭)#F、ソ G、ソ#(=ラ♭)#G、ラ A、ラ#(=シ♭)#A、シ B。
シャープは前置:# は音名の前に置きます(#C)。C#(後置)は誤りです。フラット記号は存在せず、等価なシャープで書きます(レ♭ は #C、-D のような書き方は不可)。
音価(0-9):音名の後に 0-9 を付けて長さを指定します。0=32 分音符、1=16 分音符、2=8 分音符、3=付点 16 分、4=4 分音符、5=付点 4 分、6=2 分音符、7=付点 2 分、8=全音符、9=付点全音符。休符 R0-R9 も同じ表です(例: R4 = 4 分休符)。
デフォルト:T4, M0, V15, O3(テンポ 4、波形 0、最大音量、オクターブ 3)。音価指定がない場合は前と同じ音価を継続します。各音の前に空白を入れず、詰めて書きます。
実機観察(ブロッキング):PLAY 文はブロッキングで、発音中は次の文へ進みません。PRE → 演奏終了 → POST の順で表示されます。
10 PRINT "PRE":PLAY "CDEFG":PRINT "POST"
PRE
POST
実機観察(仕様外文字):MML に仕様外の文字を渡すとエラーになります。
10 PLAY "X"
?SN ERROR IN 10
実機観察(オクターブ):PLAY "CDEFGABO4C" で C メジャースケール(1 オクターブ上昇)。オクターブ変更には > < ではなく O n(例: O4)を使います——他言語 MML の > < 記法は ?SN ERROR になります。
10 PLAY "CDEFGABO4C"
(no output)
実機観察(休符):PLAY "R" は休符。指定した長さぶん無音で時間が経過します。
10 PLAY "R"
(no output)
DEF SPRITE
✅ 実機確認 ・ 書式 DEF SPRITE n, (A, B, C, D, E) = 文字式 ・ 略号 DE.SP.
はたらき:スプライト面に表示するスプライト n(0-7、最大 8 個)を定義します。5 つのパラメータと文字式(キャラクタコード列)で構成します。
- A(0-3):パレットコード
- B(0 or 1):サイズ(0 = 8×8 ドット 1 文字、1 = 16×16 ドット 4 文字)
- C(0-1):表示優先順位(0=バックグラウンドより後ろ、1=スプライト面=通常)
- D(0-1):X 軸の反転(0=通常、1=左右反転)
- E(0-1):Y 軸の反転(0=通常、1=上下反転)
サイズと文字式:
| B | サイズ | 文字数 | 並び順 |
|---|---|---|---|
| 0 | 8×8 ドット | 1 文字 | CHR$(n) 単独 |
| 1 | 16×16 ドット | 4 文字 | 左上→右上→左下→右下 |
16×8 や 8×16 の横長/縦長スプライトはサポートされていません。文字式はキャラクタコードを CHR$() で文字に変換して + で連結するか(例: CHR$(64)+CHR$(65)+CHR$(66)+CHR$(67))、"DEFG" のように文字列リテラルでも書けます。反転(D, E)は同じスプライトを左右・上下に使い回すのに便利ですが、4 文字構成では組合せが複雑になります。DEF SPRITE で定義 → SPRITE で表示、の 2 段階で使います。
実機観察(16×16):B=1 は 16×16 ドット(CHR$ 4 つ = 8×8 ドットのスプライト 4 枚)。SPRITE 0,120,100 のとき (120,100)=左上、(128,100)=右上、(120,108)=左下、(128,108)=右下と並びます。タイル(8×8 ドットの画像片)どうしの間隔は 8 ドットです。
10 SPRITE ON
20 DEF SPRITE 0,(0,1,1,0,0)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
30 SPRITE 0,120,100
(no output)
実機観察(X 反転):D=1 は左右反転フラグで、画面に出すスプライトの一覧表(OAM)に左右反転の印が立ちます(内訳は連載で)。ただしフラグのみだと各 8×8 ドットのタイルがその場で反転するだけで、タイルの位置(左上/右上…)は入れ替わらないため、16×16 全体としては正しく反転しません。完全な左右反転にはタイル並べ替え+フラグの両方が必要です。
10 SPRITE ON
20 DEF SPRITE 0,(0,1,1,1,0)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
30 SPRITE 0,120,100
(no output)
実機観察(Y 反転):E=1 は上下反転フラグで、画面に出すスプライトの一覧表(OAM)に上下反転の印が立ちます(内訳は連載で)。X 反転と同様、フラグのみだと各タイルがその場で上下反転し、完全な反転には上下行のタイル並べ替えも必要です。
10 SPRITE ON
20 DEF SPRITE 0,(0,1,1,0,1)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
30 SPRITE 0,120,100
(no output)
SPRITE
✅ 実機確認 ・ 書式 SPRITE n [, x, y] ・ 略号 SP.
はたらき:DEF SPRITE で定義済のスプライト n を画面の (x, y) に表示します。x, y を省略すると非表示になります。同じ番号で再度位置を指定すれば移動表示になります。x = 0-255(横)、y = 0-255(縦、表示有効範囲は 5-225 程度)です。スプライトのライフサイクルは ① DEF SPRITE ② SPRITE ON ③ SPRITE n, x, y(表示)④ SPRITE n(消去)。静的なスプライトは SPRITE、動くスプライトは DEF MOVE + MOVE と使い分けます。
実機観察(8×8):SPRITE ON → DEF SPRITE → SPRITE n,x,y で表示。B=0 は 8×8 ドット(CHR$ 1 つ)。画面に出すスプライトの一覧表(OAM)を見ると、1 スプライトでも 4 枠が確保され、実体は 1 枠(指定座標)だけで、残り 3 枠は画面の隅に空白タイルで駐車されます——Family BASIC はスプライト番号ごとに常に 16×16 ぶん(8×8 ドットのスプライト 4 枚)を予約しています。
10 SPRITE ON
20 DEF SPRITE 0,(0,0,1,0,0)=CHR$(0)
30 SPRITE 0,120,100
(no output)
実機観察(非表示):SPRITE n を座標なしで実行するとスプライト n が非表示になります。観察では表示 → SPRITE 0 後に画面に出すスプライトの一覧表(OAM)から消え、4 枠とも画面外へ退避します。
10 SPRITE ON
20 DEF SPRITE 0,(0,1,1,0,0)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
30 SPRITE 0,120,100
40 SPRITE 0
(no output)
実機観察(2 個同時):スプライト 0 と 1 を別パレット(A=0 と A=1)・別座標で同時表示。画面に出すスプライトの一覧表(OAM)に 8 件(2 スプライト × 4 タイル)が出て、DEF SPRITE の A 引数がそのままスプライトのパレット番号に反映されます。各スプライトには配色(パレット番号)・表示優先・左右反転・上下反転の情報が記録されます(内訳は連載で)。
10 SPRITE ON
20 DEF SPRITE 0,(0,1,1,0,0)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
30 DEF SPRITE 1,(1,1,1,0,0)=CHR$(0)+CHR$(1)+CHR$(2)+CHR$(3)
40 SPRITE 0,80,100
50 SPRITE 1,160,100
(no output)
SPRITE ON
📖 規格 ・ 書式 SPRITE ON ・ 略号 SP.O.
はたらき:スプライト面(バックグラウンドより前)の表示を有効化します。起動直後はスプライト面 OFF(見えない状態)で、DEF SPRITE / DEF MOVE で定義しても SPRITE ON しないと表示されません。画面初期化の早い段階で SPRITE ON しておき、一度 ON にしたら OFF まで維持します。
SPRITE OFF
📖 規格 ・ 書式 SPRITE OFF ・ 略号 SP.OFF.
はたらき:スプライト面に表示されているすべてのスプライトを非表示にします。スプライト定義(DEF SPRITE)や DEF MOVE の内容自体は消えず、SPRITE ON で再表示できます。シーン切替やゲームオーバー画面での清掃に使います。
どうやって確かめたか
各命令は、Family BASIC のエミュレータに上記のコードを流し込み、RUN した後の画面表示・スプライトの状態・発音をそのまま記録しています。INPUT や KEY のように対話が必要なものは、キー操作を自動で送り込んで入力を組み立てて観察しました。色や字形の変化、PAUSE のブロッキング時間など、静止画では捉えきれない挙動は映像で確認しています。検証の詳細は連載で扱っています。
関連
- 辞典の総目次:ファミリーベーシック 命令辞典
- 制作の物語(hub):命令・コマンド完全リファレンス
- 他カテゴリ:ステートメント/関数/演算子・記法/エラーコード/システム・メモリ/仕様・文字コード