ファミリーベーシック 演算子・記法・実用パターン一覧|実機で確かめた辞典

ファミリーベーシック(Family BASIC)の 演算子(+ <> AND NOT など) と、変数名や1行の長さといった記法の制約、そして スプライトを動かすための実用パターン を1ページにまとめた辞典です。各項目は、できる限り エミュレータ上で実際に動かして 結果を確かめています。

ポイントは、マニュアルに書かれていない作法で AI が外しやすい こと。たとえば Family BASIC の 真偽値は 1 ではなく -1(真)と 0(偽)関係演算子の結果はそのまま数値として計算に使えるNOT AND OR を変数に続けるときはスペースが必須変数名は2文字まで——どれも一般的な BASIC や C の感覚で書くとズレる点です。下表から各項目へ飛んでください。

辞典シリーズ:この辞典は命令カテゴリごとに分かれています。総目次は ファミリーベーシック 命令・コマンド完全リファレンス(hub)から。

対応バージョンと凡例

演算子・記法・実用パターンは Family BASIC V2.0A / V2.1 で共通です(スプライト系の DEF SPRITE / DEF MOVE も V2.0A 以降)。本ページの「実機確認」は V2.0A(HVC-BS 相当)で観察した結果です。各エントリの先頭にマークを付けています。

  • ✅ 実機確認 … エミュレータで実際に動かし、画面表示まで観察したもの
  • 📖 規格 … マニュアル・仕様に基づく記述。本検証では未実行(挙動は規格ベース)

演算子

記号 名称 実機での注意 詳細
+ 加算 結果が ±32767 を超えると保証外 op-add
- 減算 単項マイナス -A も使える op-sub
* 乗算 オーバーフロー注意 op-mul
/ 除算 整数除算10/33(切り捨て) op-div
MOD 剰余 スペース不要(10MOD3 も可) op-mod
= 等しい 代入と等価判定で同じ記号 op-eq
<> 等しくない は不可。<> で書く op-ne
> 大なり 真は -1、偽は 0 op-gt
< 小なり 真は -1、偽は 0 op-lt
>= 以上 は不可。>= で書く op-ge
<= 以下 は不可。<= で書く op-le
NOT 論理否定 ビット反転NOT 0 = -1 op-not
AND 論理積 ビット単位の AND op-and
OR 論理和 ビット単位の OR op-or
XOR 排他的論理和 ビット単位の XOR op-xor

+加算

✅ 実機確認 ・ 構文 A + B

整数同士の加算。結果が -32768〜+32767 の範囲を超えると保証外(?OV ERROR になり得る)。

実機観察:整数 + 整数。2+35

10 PRINT 2+3
   5

-減算

✅ 実機確認 ・ 構文 A - B

二項演算(A から B を引く)。単項マイナス -A も使えます。マニュアルに明記はありませんが、B = -5 のような書き方が実機/エミュで動作することを検証済みです。

実機観察:整数 – 整数。負数も問題なく扱える。7-34

10 PRINT 7-3
   4

*乗算

✅ 実機確認 ・ 構文 A * B

整数乗算。オーバーフローに注意(16bit を超えると静かに桁あふれします。詳細はエラーコードページの ?OV を参照)。

実機観察:整数 × 整数。6*742

10 PRINT 6*7
   42

/除算

✅ 実機確認 ・ 構文 A / B

整数除算で、商の整数部分のみ。小数は切り捨てられます。B = 0 は不可?DZ ERROR)。余りは MOD 演算子で別途取得します。

実機観察:Family BASIC は整数のみなので結果は切り捨て(10/33)。

10 PRINT 20/4:PRINT 10/3
   5
   3

MOD剰余

✅ 実機確認 ・ 構文 A MOD B

A を B で割った余り。例:10 MOD 3 = 1文法上スペースは不要10MOD3 でも動きます)。ただし変数の隣に書く場合はスペースを空けるのが安全です(con-operator-spacing 参照)。

実機観察:MOD は剰余を返す。リテラル隣接でも詰めて書ける。

10 PRINT 10 MOD 3
   1

=等しい

✅ 実機確認 ・ 構文 A = B

代入と等価判定で同じ記号を使い、文脈で区別されます。

  • IF 文の中では等価判定:IF A=10 THEN ...
  • 文の先頭・代入文では代入:A=10

実機観察:比較演算子は真 = -1、偽 = 0 を返す。

10 PRINT 3=3:PRINT 3=4
  -1
   0

<>等しくない

✅ 実機確認 ・ 構文 A <> B

記号は使えません<> で書きます。代替表記はありません。

実機観察<> は不等で真。

10 PRINT 3<>4:PRINT 3<>3
  -1
   0

>大なり

✅ 実機確認 ・ 構文 A > B

左辺が右辺より大きい場合に真。

実機観察:より大きい。真は -1、偽は 0

10 PRINT 5>3:PRINT 3>5
  -1
   0

<小なり

✅ 実機確認 ・ 構文 A < B

左辺が右辺より小さい場合に真。

実機観察:より小さい。真は -1、偽は 0

10 PRINT 3<5:PRINT 5<3
  -1
   0

>=以上

✅ 実機確認 ・ 構文 A >= B

記号は使えません>= で書きます。

実機観察:以上。真は -1、偽は 0

10 PRINT 5>=5:PRINT 4>=5
  -1
   0

<=以下

✅ 実機確認 ・ 構文 A <= B

記号は使えません<= で書きます。

実機観察:以下。真は -1、偽は 0

10 PRINT 5<=5:PRINT 6<=5
  -1
   0

NOT論理否定

✅ 実機確認 ・ 構文 NOT X(略号 NO.

ビット単位の反転(16 ビット整数全体を反転)。例:NOT 11B'1111 1111 1111 0100' = -12。関係結果(-1 または 0)に対して使うと論理 NOT として機能します。変数を続ける場合は要スペースcon-operator-spacing 参照)。

実機観察:NOT は全ビット反転。NOT 0 = -1NOT (-1) = 0

10 PRINT NOT 0:PRINT NOT -1
  -1
   0

AND論理積

✅ 実機確認 ・ 構文 A AND B(略号 A.

ビット単位の AND。IF 文での条件結合に頻出します。関係式の結果(-1 / 0)に対して AND すると論理 AND として機能します。

実機観察:AND は両方真(-1)のとき -1

10 PRINT (3=3) AND (5=5):PRINT (3=3) AND (3=4)
  -1
   0

OR論理和

✅ 実機確認 ・ 構文 A OR B

ビット単位の OR。inclusive or(両方真でも真)です。

実機観察:OR はどちらか真なら -1

10 PRINT (3=3) OR (3=4):PRINT (3=4) OR (3=5)
  -1
   0

XOR排他的論理和

✅ 実機確認 ・ 構文 A XOR B(略号 XO.

ビット単位の排他的論理和。「同じ値だと 0、異なるとき 1」。

実機観察:XOR は片方だけ真のとき -1

10 PRINT (3=3) XOR (3=4):PRINT (3=3) XOR (5=5)
  -1
   0

記法の制約

項目 制約 実機での注意 詳細
変数名 英字 + 英数字の最大2文字 3文字目以降は無視ABCAB 扱い) con-variable-name
行番号 0〜65535 下限は 0(1始まりではない) con-line-number
1行の長さ 255桁まで : 連結も含めて255 con-line-length
演算子のスペース 変数 × 論理演算子は必須 NOT/AND/OR/XOR を変数に続けるとき con-operator-spacing

変数名は2文字まで

✅ 実機確認

変数名は 英字または英字 + 数字の最大2文字です。

  • 1文字目:英字必須
  • 2文字目:英字または数字(省略可)
  • 3文字以上の変数名は使えない
  • 文字列変数は末尾に $ を付ける(例:A$, X1$

実機観察:実機では ABC=42:PRINT ABC がエラーにならず 42 を出力します。3文字目以降は無視されて AB として扱われると推測されます(両方とも AB を参照しているので同じ値が見える)。

10 ABC=42:PRINT ABC
   42

行番号は 0〜65535

📖 規格

行番号の範囲は 0〜65535

  • 0 が下限である点に注意(一般 BASIC で 1 始まりが多いのと異なる)
  • 上限 65535 を超える行番号は使えない(16 ビット符号なし整数の最大値)
  • 行番号は昇順に並べる必要がある

1行は255桁まで

📖 規格

1行の桁数の上限は 255桁

  • 1行に書ける文字数の上限。マルチステートメント(: 連結)も含めて 255
  • 長い行はこの制限に注意

論理演算子の前後はスペース

✅ 実機確認

変数と論理演算子(NOT / AND / OR / XOR)を続けて書く場合は、間にスペースが必要です。スペースが必須なのは 変数 × 論理演算子 の間のみで、それ以外(記号形の演算子、リテラル隣接、算術演算子 MOD)は詰めて書いても動きます。

安全側のルール(AI に書かせるなら推奨)

  • 常にスペースを入れるのが最も安全(可読性も上がる)
  • 詰めて書くのは入力短縮目的のとき(BASIC コーディングの慣習)

実機観察:リテラル隣接なら MOD の前後にスペース不要。

10 PRINT 10MOD3
   1

実機観察:変数 + 論理演算子の間にはスペースが必要。詰めると別の識別子扱いになります。

10 X=0:PRINT NOT X
  -1

実用パターン(スプライト等)

パターン 内容 詳細
関係演算子を値として使う 真 = -1, 偽 = 0 を計算に流用 idiom-relational-value
真偽値は -1 と 0 16ビット整数(C 系の 1/0 と異なる) idiom-boolean
16×16スプライトの組み立て 4タイルの並び順と左右反転 idiom-sprite-composition
マリオのポーズを並べる DEF SPRITE 入門 idiom-pose-mario
左右に動かす STICK 入力ループ idiom-pad-lr
歩行アニメ SWAP + 複数 DEF SPRITE idiom-walk-anim
8方向に動かす DEF MOVE の基本 idiom-move-8dir
MOVE をパッドで操作 方向切替パターン idiom-move-pad
ジャンプ軌道 複数 MOVE 連鎖 idiom-jump-chain

関係演算子の結果を値として使う

✅ 実機確認

関係式は真のとき -1、偽のとき 0 を返す(整数として)ので、これを使ってトリッキーな代入ができます。例:A = X - (X>0) で「X>0 なら A=X-(-1)=X+1X<=0 なら A=X-0=X」。

AI に書かせると可読性が低くなりがちなので、IF-THEN を優先することを推奨します。

実機観察:比較式は -1(真)または 0(偽)を返すので、乗算で条件付き加算を表現できます。

10 PRINT (5>3)*10:PRINT (3>5)*10
  -10
   0

真偽値は -1 と 0

✅ 実機確認

真偽値は -1(真)/ 0(偽)の16ビット整数です。

  • 関係式の結果は -1(16進数で 0xFFFF)または 0
  • NOT は全ビット反転なので NOT(-1) = 0NOT(0) = -1(= 0xFFFF)になる
  • これによりビット論理演算子がそのまま「論理演算子」として使える
  • 一般的な BASIC 同様の流儀(C 系の 1/0 と異なる点に注意

実機観察:Family BASIC の真偽値は -1(真)と 0(偽)。

10 PRINT -1:PRINT 0:PRINT 5>3:PRINT 5<3
  -1
   0
  -1
   0

16×16スプライトの組み立て

📖 規格

DEF SPRITE で 16×16 スプライトを作るときの 4タイル(タイル=8×8ドットの画像片。それを4枚並べる)の並び順(AI が押さえておくべき必須知識):

DEF SPRITE n, (A, B, C, D, E) = CHR$(t1) + CHR$(t2) + CHR$(t3) + CHR$(t4)
                                      ↓        ↓        ↓        ↓
                                   左上     右上     左下     右下
  • B 引数 = 1(16×16 サイズ)で、4 つの 8×8 タイルを 2×2 に並べる
  • 連続する 4 コード(コード=絵柄の番号。例:0,1,2,3)が 1 つのポーズ を構成する
  • キャラクタテーブル(絵柄の格納場所)A の各セルが「コード範囲 + 絵柄」を示す

左右反転(X 反転=左右を反転させるスイッチ)のルール — AI が外しやすい中核:同じキャラを左右両向きで使いたい場合、2 つの操作が両方必要です。

  1. 4タイルの L/R 列を入れ替えるCHR$(t1)+CHR$(t2)+CHR$(t3)+CHR$(t4)(右向き) → CHR$(t2)+CHR$(t1)+CHR$(t4)+CHR$(t3)(左向き)
  2. DEF SPRITE の D 引数(X 反転フラグ=左右を反転させるスイッチ)を 1 に設定DEF SPRITE n, (A, B, C, 1, E) = ...

両方やらないと:

  • L/R 入れ替えだけ:タイル位置は左右逆になるが、各タイル内部の絵は右向きのまま → 顔が後ろを向いた変な絵
  • X 反転フラグだけ:各タイル内部は反転するが、配置は元のまま → 顔が左にあるが体が右側を向いた、つなぎ目がずれた絵

マリオのポーズを並べる(DEF SPRITE 入門)

📖 規格

16×16 ドットのスプライトを定義して画面に配置する基本パターン。

  • CGSET 1, 0(CGSET=キャラクタテーブル=絵柄の格納場所を切り替える命令)でキャラクタセットを選択(キャラクタテーブル A を使う)
  • DEF SPRITE n, (パレット, サイズ, 優先度, X反転, Y反転) = CHR$(...)
  • サイズ 0 = 8×8(CHR$ × 1 個)、サイズ 1 = 16×16(CHR$ × 4 個)
  • 4 個の並びは「左上、右上、左下、右下」
  • X 反転 = 1 で左右反転(歩行アニメの左向きに使える)
  • SPRITE n, X, Y で画面に配置(省略すれば非表示)

コントローラで左右に動かす(STICK 入力ループ)

📖 規格

STICK(0) でコントローラの方向を取得し、スプライト座標を更新するメインループ。

  • STICK の値はビットフラグ:0=なし, 1=右, 2=左, 4=下, 8=上
  • 画面端の処理(ワープ) を忘れずに(X > 250 / X < 5)
  • メインループは GOTO で回す
  • 押されていない(S = 0)ときは更新しない(IF S = 0 THEN 60

歩行アニメ(SWAP + 複数 DEF SPRITE)

📖 規格

6 つのスプライト定義を切り替えて歩行アニメーションを実現する完全なゲームループ。

  • SPRITE ON で画面にスプライトを表示開始
  • 複数の DEF SPRITE で歩行パターン(右向き 2 フレーム + 左向き 2 フレーム + 立ち)を定義
  • SWAP 命令でスプライト番号を入れ替えてアニメーション
  • PAUSE 5 で 5 フレーム(約0.08秒)待ってアニメーション速度を調整
  • 右方向と左方向で異なるスプライトセットを使い分ける
  • SPRITE n(座標なし)でそのスプライトを非表示 にする

8方向に動かす(DEF MOVE の基本)

📖 規格

DEF MOVE は 16 種類のプリセットキャラクタを自動アニメーション付きで動かす命令。DEF SPRITE より簡単にキャラクタを表示・移動できます。

  • DEF MOVE(n) = SPRITE(A, B, C, D, E, F) でキャラクタの種類と動きを定義
  • n: 動作番号(0〜7)
  • A: キャラクタ種類(0〜15、プリセット)
  • B: 方向(0=静止, 1〜8=8 方向)
  • C: 速さ(1=最高速, 255=最低速)
  • D: 全移動量(1〜255、0 だと表示されない)
  • E: 配色番号(0〜3)
  • F: 表示の優先度(0=BG の手前, 1=BG の後ろ)
  • MOVE n[, n, ...] で動作を開始。同時に 8 個まで
  • MOVE(n) 関数-1 = 動作中, 0 = 停止中

コントローラで MOVE を操作(方向切替パターン)

📖 規格

STICK(0) で方向を取得し、DEF MOVE の方向を動的に切り替える。

  • 方向ごとに DEF MOVE を事前定義し、入力に応じて切り替える
  • ERA M でキャラクタを消し、POSITION + MOVE で新しい方向に再配置
  • MOVE(M) = -1 で動作完了を待つ
  • XPOS(n), YPOS(n) で現在座標を取得
  • STICK 値 1=右, 2=左, 4=下, 8=上 → 対応する DEF MOVE 番号にマップ

ジャンプ軌道(複数 MOVE 連鎖)

📖 規格

複数の MOVE を連鎖してジャンプ軌道を表現する。

  • 方向 3(右)→ 方向 2(右上)→ 方向 4(右下)を連鎖 してジャンプ軌道を作る
  • 各 MOVE の完了を MOVE(n) = -1 で待ってから次の MOVE に引き継ぐ
  • ERAPOSITIONMOVE の 3 ステップ でキャラクタを引き継ぐ
  • 同じスプライト番号を使わず、複数の動作番号を渡り歩く

どうやって確かめたか

各項目は、Family BASIC のエミュレータに上記のコードを流し込み、RUN した後の画面表示をそのまま記録しています。演算子と記法の制約は実際に発火させて確認しました。スプライト系の実用パターン(DEF SPRITE / DEF MOVE)は規格・マニュアルに基づくパターン解説で、本ページでは実行画面までは観察していません。検証の詳細は連載で扱っています。

関連