ファミリーベーシック エラーコード一覧|?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つでよく的を外します。

  1. 配列の範囲外は ?SO ではなく ?ILDIM A(3):PRINT A(10) は実機で ?IL ERROR
  2. 桁あふれは ?OV を出さず静かに wrapPRINT 30000*2-5536(16bit signed の折り返し)。エラーにならないぶん、バグに気づきにくい。
  3. オペランド不足は ?MO ではなく ?SNPRINT 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 が見つからない。多重ループのネスト崩れ、GOTOFOR を飛び越えた場合などが典型。

対処FORNEXT のペアを見直す。

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*260000 ではなく -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 のようなエラーも、キー操作を自動で送り込んで発生条件を組み立てて観察しました。検証の詳細は連載で扱っています。

関連