ファミリーベーシック 演算子・記法・実用パターン一覧|実機で確かめた辞典
ファミリーベーシック(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/3 は 3(切り捨て) |
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+3 は 5。
10 PRINT 2+3
5
-減算
✅ 実機確認 ・ 構文 A - B
二項演算(A から B を引く)。単項マイナス -A も使えます。マニュアルに明記はありませんが、B = -5 のような書き方が実機/エミュで動作することを検証済みです。
実機観察:整数 – 整数。負数も問題なく扱える。7-3 は 4。
10 PRINT 7-3
4
*乗算
✅ 実機確認 ・ 構文 A * B
整数乗算。オーバーフローに注意(16bit を超えると静かに桁あふれします。詳細はエラーコードページの ?OV を参照)。
実機観察:整数 × 整数。6*7 は 42。
10 PRINT 6*7
42
/除算
✅ 実機確認 ・ 構文 A / B
整数除算で、商の整数部分のみ。小数は切り捨てられます。B = 0 は不可(?DZ ERROR)。余りは MOD 演算子で別途取得します。
実機観察:Family BASIC は整数のみなので結果は切り捨て(10/3 は 3)。
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 11 → B'1111 1111 1111 0100' = -12。関係結果(-1 または 0)に対して使うと論理 NOT として機能します。変数を続ける場合は要スペース(con-operator-spacing 参照)。
実機観察:NOT は全ビット反転。NOT 0 = -1、NOT (-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文字目以降は無視(ABC は AB 扱い) |
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+1、X<=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)=0、NOT(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 つの操作が両方必要です。
- 4タイルの L/R 列を入れ替える:
CHR$(t1)+CHR$(t2)+CHR$(t3)+CHR$(t4)(右向き) →CHR$(t2)+CHR$(t1)+CHR$(t4)+CHR$(t3)(左向き) - 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 に引き継ぐ ERA→POSITION→MOVEの 3 ステップ でキャラクタを引き継ぐ- 同じスプライト番号を使わず、複数の動作番号を渡り歩く
どうやって確かめたか
各項目は、Family BASIC のエミュレータに上記のコードを流し込み、RUN した後の画面表示をそのまま記録しています。演算子と記法の制約は実際に発火させて確認しました。スプライト系の実用パターン(DEF SPRITE / DEF MOVE)は規格・マニュアルに基づくパターン解説で、本ページでは実行画面までは観察していません。検証の詳細は連載で扱っています。
関連
- 辞典の総目次:ファミリーベーシック 命令辞典
- 制作の物語(hub):命令・コマンド完全リファレンス
- 他カテゴリ:ステートメント/関数/演算子・記法/エラーコード/システム・メモリ/仕様・文字コード