ファミリーベーシック ステートメント(命令文)一覧|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 文字タブ、; は密着 PRINT
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 nCONT で再開可 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つで構文エラーを踏みます。

  1. 代入に LET は付けられないLET A=1?SN ERRORA=1 と書く(代入)。
  2. NEXT に変数を付けないNEXT I は構文エラー。NEXT 単独で書く(FOR ~ NEXT)。
  3. 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

✅ 実機確認 ・ 書式 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 句はないので、二択は別の IFGOTO + 行番号で書きます。複合条件は 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)

はたらき:指定回数の繰返しループです。im を代入してループを始め、NEXT に到達するたび is を加算、in を超えたら(s が負なら下回ったら)終了します。STEP 省略時は s = 1mn が同じなら 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 文はプログラムのどこに置いてもよく、まとめて末尾に置くのが流儀です。

実機観察READDATA 文の値を順番に取り出します。

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,123PEEK(&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 を使います。実際の色は CGSETPALET の組合せで決まります。

実機観察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 ONMOVE(動作開始)です。

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 を使います。一時停止 → 再開は CUTMOVE です。

実機観察:規格は「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 ONMOVE(動作開始)。POSITIONMOVE の順が必須です。

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 秒)止めます(途中でキーが押されると即解除)。PREPAUSE 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 SPRITESPRITE ONSPRITE n, x, y(表示)④ SPRITE n(消去)。静的なスプライトは SPRITE、動くスプライトは DEF MOVE + MOVE と使い分けます。

実機観察(8×8)SPRITE ONDEF SPRITESPRITE 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 した後の画面表示・スプライトの状態・発音をそのまま記録しています。INPUTKEY のように対話が必要なものは、キー操作を自動で送り込んで入力を組み立てて観察しました。色や字形の変化、PAUSE のブロッキング時間など、静止画では捉えきれない挙動は映像で確認しています。検証の詳細は連載で扱っています。

関連