ファミリーベーシック

ファミリーベーシックは、任天堂が1984年6月21日に発売したファミリーコンピュータ用の「プログラミング環境」である。BASIC言語を組み込んだロムカセットと、ファミコン本体のエキスパンドコネクタに接続する周辺機器としてのキーボード、プログラミング教本の3点がセットになっている。

1. 概要
-----

ロムカセットとキーボードの2点をファミコン本体に接続することにより、BASICの文法に基づいた簡単なゲームプログラムを自作することができるようになる。組み込まれているプログラミング言語の固有称は、ハドソン開発のHu-BASICを元に、任天堂、シャープとの3社共同開発だったことから頭文字を付け、「NS-Hu BASIC」とした。ただし、最終的にはファミコンに大幅に特化したため、パソコン用のHu-BASICとは大きく異なる。

プログラム実行のために使えるメモリ容量は1,982バイト、バージョンアップ版の「ファミリーベーシックV3」では4,086バイトであり、カートリッジ内にSRAMで実装され、乾電池によってバックアップすることが可能になっている。

キーボードの配列は、アルファベットに関しては現在のパソコンやタイプライターと同様のいわゆる「QWERTY配列」だったが、カナ配列に関しては現在のパソコンで主流のJISキーボードと異なり、五十音順に並んでいるこの配列は入門機、低価格帯で見られ、MSXではワークエリアの設定により選択、MZ-700や、MZ-1500等もこの配列となっている。}}。

2. ハードウェア
---------

2.1. 機能
-------

「ゲーム制作体験のためのBASIC」という方向性とそのハードウェア仕様によって、一般的なBASICとは異なる部分を多く含む。

メインモードであるGAME BASICモードでゲームプログラミングを行う。それ以外にも計算式入力による電卓機能の“カリキュレータボード”、音階入力による音楽制作機能の“ミュージックボード”、ワードプロセッサのような機能を持つ“メッセージボード”、バイオリズムに基づいた簡単な占いと生誕からの総経過日数の算出をする“占い”の4つの機能が内蔵された。

また、各モードに移行するイントロダクション画面もまるでコンピュータが話しかけてくれるような親しみやすい画面に作られている。

GAME BASICモードでは整数演算のみで小数点以下切り捨て、扱うことのできる整数の範囲も-32768から+32767まで、文字列の長さは31文字まで、ドット描画機能なしといった機能制限がある。その一方で、あらかじめ定義されているキャラクター群を自由に組み合わせることにより非常に簡単にスプライトキャラクターや背景画を作ることができ、煩雑で面倒になりがちな作業を一手に引き受ける簡易性がファミリーベーシックの大きな特徴となっている。ステートメントや関数など、必要となる標準的なBASIC言語命令も大方備わっている他、直線的な動きであれば簡単にスプライトキャラクターを定義し動かせる MOVE 命令など、独自の命令が多数備わっている。

プログラム自体はROMカートリッジに一時的に記録できる他、データの保存および保存したデータの読み込みにはカセットテープを使用する。テープへの読み書きには別売りの専用データレコーダもしくはモノラル録音再生のテープレコーダが必要となる。この機能は市販ゲームプレイ時にキーボードとデータレコーダを接続することで、自作ステージデータ、セーブデータの保存用ツールとして応用された。

データレコーダ対応ソフト
ロードランナー
ナッツ&ミルク
エキサイトバイク
レッキングクルー
マッハライダー
キャッスルエクセレント
アルカノイドII

3. バージョン
--------

4つのバージョンが存在することが確認されている。V1.0 のバージョンアップ版である V2.0A および V2.1A は出荷時期の違いによる差異であり、単体発売されていない。また、ROMカセットの色は黒が基本だが、V3.0 のみワインレッド色の外装で成型されている。

3.1. V1.0
---------

最初に発売されたバージョン。

3.2. V2.0A
----------

SCR$ 関数が追加。

3.3. V2.1A
----------

V2.0Aのバグが除かれたものとされる。

3.4. V3.0
---------

『ファミリーベーシックV3』として、1985年2月21日にカセットが単体発売された。メモリ容量拡張のためGAME BASICモードに完全に特化しており、イントロダクション画面なども省略され、直接BASICの画面が起動する。CRASH、AUTO、ON ERROR GOTO など多数の新規命令が追加。サンプルプログラムも4つのゲームが収録されており、BASICの命令によりRAMに呼び出すことができる。

サンプルプログラムとして収録されたのは、以下の4つである。GAME 1とGAME 2は、BGグラフィックをエディタで編集することで、簡単にステージを改造できる。

GAME 0 ハート GAME 1 ペンペン迷路 GAME 2 マリオワールド GAME 3 スターキラー

4. 問題点
------

頻繁な抜き差しによってファミコン本体のROMカセット接続部が緩んでいる場合、ベーシック用ROMカセットに指が触れた途端にフリーズしデータが失なわれる事態が頻発した。ベーシック用ROMカセットは一般的なゲームカセットに比べ約2倍の高さがあり、加えてバックアップ用の電池ケース部位がカセット上方にあり乾電池を入れている場合重心が非常に高くなることや、バックアップ用のスイッチが手動であり、これを操作するためにはカセットに触れる必要があることなどもデータ損失の誘引と考えられる。当時はロムカセット用の接点復活剤が普及していなかった。
キャラクタセットはROMにあらかじめ定義され変更できず、用意されたキャラクタの分割、反転などによってパーツ単位で再生成するなどの工夫を迫られ、ピクセル単位での描画機能はグラフィックスプレーンを持たずBGプレーンしかないファミコンの仕様と、そのパターンが前述のとおりROMに定義されている仕様から不可能であった。元々多くをROM上に置く設計であったため、本体側の主記憶も少なくカートリッジ上の物を足しても実際にプログラムを書き込める容量が少ないため、簡素なゲームプログラミングしかできなかった。4つのその他機能を排してゲームプログラミング用にメモリ容量を確保したV3に至っても機能的には十分ではなかった。そのためスタックエリアの一部、BASIC自身が使うワークエリアの一部、VRAMの一部まで活用された。さらにハードウェア的に改造を行い、メインメモリであるSRAMを大きな容量のものと交換する試みもユーザによって行われた。ワークエリアの書き換えによりBASICからも純正品と同じように4KiB弱まで利用でき、残りのエリアもバスに接続されていればCPUからは認識することが可能で、電池によってバックアップもされる。
素直に記述したBASICのプログラムでは遊べるゲームを作ることは困難であったが、コンシューマ機用のツールで削除されがちなPEEK、POKE、CALL などメモリに直接アクセス可能にする命令もあり、機械語を駆使してファミコンの機能を引き出したゲームも存在している。これに関しての詳細や応用の仕方はセット添付の取扱説明書や公式の解説書には書かれていないが、当時のファミコン雑誌やゲームプログラミング雑誌では、ファミリーベーシック自作ゲーム投稿コーナーなどでこれを用いた様々な応用法が紹介された。それら媒体や活用例の流布がコアなユーザーへ情報として伝わった。前述の通り公式に利用可能なメモリは少なく、プログラム自体も可読性よりも密度を重視したものが多く作られ、省略可能なセパレータ、スペース、命令、コメント、同一変数の使いまわしなど、削れるものは削りバイナリデータのベタ書きなど、処理を押し込む工夫が見られた。

5. その他
------

一部の企業からは非ライセンス商品として、ディスクシステムから起動するBASICが発売されていた。
北米向けにはキーボード内蔵の『Advanced Video System』が試作されたが結局発売されず、代わりに『Nintendo Entertainment System』が発売された。
ファミコンテレビC1用に、『PLAYBOX BASIC』というほぼ同機能のカートリッジソフトと、専用のキーボードがある。これにはメッセージボードがなく、代わりにバイオリズムが追加されている。
雑誌「マイコンBASICマガジン」ではプログラムリストが掲載されていたが、ファミリーベーシック用のプリンターは存在しないため、最初の頃は画面写真を繋いだものが掲載されていた。その後、パソコンにテープを読み込ませてデコードしプリントアウトするシステムを利用するようになり、掲載プログラムの可読性が向上した。
2021年12月開催の「RTA in Japan Winter 2021」では、ファミコン版の『ドラゴンクエストIII そして伝説へ…』のロムカセットに任意コードを入力するために使用された。これは、「Any％ 任意コード実行」と銘打たれた、バグ技、ショック技、チートツールを除いた外部ツールによる物理的・情報的干渉、それら全てが認められるレギュレーションで許される手段である。

6. 脚注
-----

6.1. 注釈
-------

6.2. 出典
-------

7. 関連項目
-------

データレコーダ
マイコンBASICマガジン
ファミリーコンピュータMagazine
ナビつき! つくってわかる はじめてゲームプログラミング