ファミリーベーシック エラーコード一覧|?SN・?OV・?IL を実機で確かめた辞典
ファミリーベーシック(Family BASIC)でプログラムを打つと、?SN ERROR のように 2文字のコードでエラーが返ります。本ページは、その全エラーコードを一覧にし、エミュレータ上で実際に発生させてメッセージと挙動を確かめた辞典です。
ポイントは、マニュアルの記述と実機が食い違うエラーがあること。たとえば配列の範囲外アクセスはマニュアルなら ?SO のはずが実機では ?IL で返り、16bit を超える乗算は ?OV を出さず静かに桁あふれします。AI(LLM)に Family BASIC を書かせると、まさにこの食い違いで間違えます。下表から各コードへ飛んでください。
辞典シリーズ:この辞典は命令カテゴリごとに分かれています。総目次は ファミリーベーシック 命令・コマンド完全リファレンス(hub)から。
対応バージョンと凡例
エラーコード自体は Family BASIC V2.0A / V2.1 / V3 で共通です。本ページの「実機確認」は V2.0A(HVC-BS 相当)で観察した結果です。各エントリの先頭にマークを付けています。
- ✅ 実機確認 … エミュレータで実際に発生させ、画面表示まで観察したもの
- 📖 規格 … マニュアル記載のエラー。発生条件が特殊で本検証では未発火(挙動は規格ベース)
エラーコード早見表
| コード | 意味 | 実機での注意 | 詳細 |
|---|---|---|---|
?SN |
文法エラー(Syntax error) | 最頻出。LET・全角記号・綴り違いで出る |
SN |
?NF |
NEXT without FOR | FOR と対応しない NEXT | NF |
?RG |
RETURN without GOSUB | GOSUB なしの RETURN | RG |
?OD |
Out of DATA | DATA を読み切った後の READ | OD |
?IL |
Illegal function call | 配列範囲外もここに来る(?SO でなく) |
IL |
?OV |
Overflow | 乗算では出ず静かに wrap。代入経路で出る | OV |
?OM |
Out of memory | 2KB ユーザ領域を超過 | OM |
?UL |
Undefined line number | 存在しない行への分岐 | UL |
?SO |
Subscript out of range | 実機では ?IL として出ることがある |
SO |
?DD |
Duplicate Definition | 同じ配列を2度 DIM | DD |
?DZ |
Division by zero | 0 除算 | DZ |
?TM |
Type mismatch | 数値変数に文字列、$ の付け忘れ |
TM |
?ST |
String too long | 文字列が31文字超過 | ST |
?FT |
Formula Too complex | 式の入れ子が深すぎる | FT |
?CC |
Can’t continue | 編集後の CONT 不可 | CC |
?MO |
Missing operand | 実機では ?SN として出ることがある |
MO |
?TP |
Tape read ERROR | LOAD 中のテープ読取り失敗 | TP |
マニュアルと実機が食い違うエラー(先に知っておきたい3つ)
この辞典の一番の発見です。AI にコードを直させるとき、この3つでよく的を外します。
- 配列の範囲外は
?SOではなく?IL—DIM A(3):PRINT A(10)は実機で?IL ERROR。 - 桁あふれは
?OVを出さず静かに wrap —PRINT 30000*2は-5536(16bit signed の折り返し)。エラーにならないぶん、バグに気づきにくい。 - オペランド不足は
?MOではなく?SN—PRINT 1+は?SN ERROR。?MOはマニュアル上のコードで、この経路では発火しない。
各エラーの詳細
SN|構文エラー
✅ 実機確認 ・ コード SN ・ メッセージ Syntax error
原因:予約語の綴り違い、引数不足、引用符の閉じ忘れ、, ; : の使い違いなど。最も頻出するエラーです。
対処:該当行を LIST で見直して再入力する。
実機観察:Family BASIC は LET キーワードを持ちません。LET を付けた代入は ?SN ERROR になります。
10 LET A=1
?SN ERROR IN 10
NF|NEXT without FOR
✅ 実機確認 ・ コード NF ・ メッセージ NEXT without FOR
原因:NEXT 文に対応する FOR が見つからない。多重ループのネスト崩れ、GOTO で FOR を飛び越えた場合などが典型。
対処:FOR〜NEXT のペアを見直す。
10 NEXT
?NF ERROR IN 10
RG|RETURN without GOSUB
✅ 実機確認 ・ コード RG ・ メッセージ RETURN without GOSUB
原因:GOSUB を通らずに RETURN を実行した。プログラムが上から落ちてきて(フォールスルー)RETURN に到達した場合など。
対処:GOSUB / RETURN のペアを見直す。
10 RETURN
?RG ERROR IN 10
OD|Out of DATA
✅ 実機確認 ・ コード OD ・ メッセージ Out of DATA
原因:DATA 文の値の数より READ の回数が多い。RESTORE せずにループで READ を繰り返した場合など。
対処:DATA を増やすか、RESTORE で読み出し位置を巻き戻す。
10 READ A:READ B:READ C
20 DATA 1,2
?OD ERROR IN 10
IL|不正な関数呼び出し
✅ 実機確認 ・ コード IL ・ メッセージ Illegal function call
原因:引数の型や範囲が不正。負数の平方根、文字列を期待する関数に数値を渡した、など。
対処:関数の引数を見直す。
実機観察:配列の範囲外アクセスもこの ?IL で報告されます(マニュアルの想定する ?SO ではありません)。
10 DIM A(3):PRINT A(10)
?IL ERROR IN 10
OV|オーバーフロー
✅ 実機確認 ・ コード OV ・ メッセージ Overflow
原因:整数16ビット(-32768〜+32767)の範囲を超える計算結果。
対処:計算順序を変える、中間値を分割する。
実機観察:乗算では ?OV は出ず、16bit で静かに wrap します。30000*2 は 60000 ではなく -5536(折り返し)。?OV は代入時など別経路で発生する可能性があります。エラーが出ないぶん、桁あふれのバグは見つけにくくなります。
10 PRINT 30000*2
-5536
OM|メモリ不足
📖 規格 ・ コード OM ・ メッセージ Out of memory
原因:プログラム本体+変数+DATA などが 2KB のユーザ領域(実質 約1.95KB)を超えた。
対処:コードを短縮、変数を減らす、不要な配列を削除する。容量に余裕がほしい場合は RAM 4KB の V3 が選択肢になります。
UL|行番号が存在しない
✅ 実機確認 ・ コード UL ・ メッセージ Undefined line number
原因:GOTO GOSUB IF などで指定した分岐先の行番号がプログラム中にない。
対処:行番号を見直す、対象行を追加する。
10 GOTO 999
?UL ERROR IN 10
SO|添字範囲外
✅ 実機確認 ・ コード SO ・ メッセージ Subscript out of range
原因:DIM で確保したサイズを超える添字でアクセスした。
対処:DIM のサイズを増やす、添字を見直す。
実機観察:このケースは実機では ?IL ERROR(Illegal)として報告されることを確認しました(IL 参照)。
10 DIM A(3):PRINT A(10)
?IL ERROR IN 10
DD|配列の二重定義
✅ 実機確認 ・ コード DD ・ メッセージ Duplicate Definition
原因:同じ配列を DIM で2回宣言した。
対処:DIM を1回にまとめる、CLEAR で初期化してから再定義する。
10 DIM A(3):DIM A(3)
?DD ERROR IN 10
DZ|ゼロ除算
✅ 実機確認 ・ コード DZ ・ メッセージ Division by zero
原因:/ 除算の右辺が 0。
対処:除数が 0 にならないよう IF で事前にチェックする。
10 PRINT 1/0
?DZ ERROR IN 10
TM|型の不一致
✅ 実機確認 ・ コード TM ・ メッセージ Type mismatch
原因:数値変数に文字列を代入、数値関数に文字列を渡したなど。$ 付きと $ なしの変数の混同が典型。
対処:変数名と用途の整合を確認する。
10 A=1:A=A+"X"
?TM ERROR IN 10
ST|文字列が長すぎる
📖 規格 ・ コード ST ・ メッセージ String too long
原因:連結や LEFT$ / MID$ の結果が31文字を超過した。
対処:文字列を分割する、LEN で事前に長さをチェックする。
FT|式が複雑すぎる
📖 規格 ・ コード FT ・ メッセージ Formula Too complex
原因:式の入れ子が深すぎる、( ) が異常に多い。
対処:中間変数に分割する。
CC|CONT で継続できない
✅ 実機確認 ・ コード CC ・ メッセージ Can’t continue
原因:STOP やエラーで停止したあとにプログラムを編集すると、CONT(続行)ができなくなる。
対処:RUN でやり直す。
実機観察:発火条件は「プログラムを1行でも変更すると CONT は使えない」。STOP で停止(BREAK IN 10)→ プロンプトで新規行 5 を入力(=プログラム改変)→ CONT を打つと ?CC ERROR。手で再現しづらいエラーですが、キー操作を自動で送り込んで確実に発火させられました。
10 PRINT "A":STOP:PRINT "B"
A
BREAK IN 10
OK.
5
CONT
?CC ERROR
MO|オペランド不足
✅ 実機確認 ・ コード MO ・ メッセージ Missing operand
原因:関数や文の必須引数が省略されている。
対処:引数を補う。
実機観察:オペランドのない式(1+ で終わる)は、実機では ?SN ERROR(構文エラー)として報告されます。?MO はマニュアル上のコードで、この経路では発火しません。
10 PRINT 1+
?SN ERROR IN 10
TP|テープ読取りエラー
📖 規格 ・ コード TP ・ メッセージ Tape read ERROR
原因:LOAD 中にデータ破損・音量不足・速度ずれなどが検出された。
対処:テープを巻き戻して再 LOAD、データレコーダの音量を調整する。
どうやって確かめたか
各エラーは、Family BASIC のエミュレータに上記のコードを流し込み、RUN した後の画面表示をそのまま記録しています。手で再現しづらい ?CC のようなエラーも、キー操作を自動で送り込んで発生条件を組み立てて観察しました。検証の詳細は連載で扱っています。
関連
- 辞典の総目次:ファミリーベーシック 命令辞典
- 制作の物語(hub):命令・コマンド完全リファレンス
- 他カテゴリ:ステートメント/関数/演算子・記法/エラーコード/システム・メモリ/仕様・文字コード