この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "ROM-BASIC"
ROM-BASIC(ロムベーシック)はROMモードBASICとも呼ばれ、8ビットパーソナルコンピュータのほとんどと、初期の16ビットパーソナルコンピュータに搭載されていた、ROMに書き込まれたスタンドアロンBASICである。
ROM-BASICという概念は、コンパクトカセットやフロッピーディスクなどの補助記憶装置に格納した処理系をシステム起動時にロードして使用する方式と対立していう場合と、フロッピーディスクを利用できるように機能拡張したDISK-BASICと対立していう場合とがある。 マイクロコンピュータにおけるBASICの実装は、最初期には処理系を紙テープに格納して起動時にロードして使用する形態であったが、すぐに数KBのROMに格納して電源投入と共に使用できる形態となった。著名なものはApple IIの整数型BASICと、引き続きMicrosoftがApple II向けに開発した10KByte BASICがある。日本ではTK-80等のキットのオプションとしてROM-BASICのキットが販売され、次いでPC-8001がROM-BASICを標準搭載して販売された。以後はパーソナルコンピュータがROM-BASICを搭載し、補助記憶装置としてデータレコーダを接続してオーディオ用コンパクトカセットでプログラムのセーブやロードを行う使用方法となった。そして、外部補助記憶装置としてフロッピーディスクを接続する時には、その入出力機能を拡張したDISK-BASICを使用するという形態が暫く続いた。 ROM-BASICは、プログラムを編集する、プログラムをコンパクトカセットにセーブ・ロードする、プログラムを実行・停止するという、OSのごく基本的な機能も備えており、CP/MやMS-DOS等のOSが普及する以前にはごく簡便なOSとしての役割も担った。 一方で、パーソナルコンピュータにサウンド機能やグラフィック機能を備えたものでは、それをサポートする命令も備えていた。 なお、ROM-BASICを搭載しているからという理由ではなく、メモリへの配置の都合で、0番地から配置されたうえで、切り替える方法を持たない機種では、同じ領域を使用するCP/Mなど、先頭部分のアドレスを使用するプログラムの使用には制限が発生する。バンク切り替えなどにより、これらのページを変更できる実装の場合はその限りではない。 多くの機種ではROMはメモリ空間に直接マッピングされたが、クリーン設計思想で作られていたシャープのX1に用意されていたオプションボードであるCZ-8RB01は、ROM-BASICでありながら直接マッピングされるわけではなく、拡張ボード上のROMからIPLが読み込みを行い、RAMにBASICを展開する形になっている。そのため、起動後はRAM上のBASICやモニタ部分の書き換えも可能になっており、標準添付のCZ-8CB01と同じように使用することが可能である。同社MZ (コンピュータ)でも同様の仕組みが存在し、サードパーティーのROMボードが存在する。これらの機種では補助記憶装置からのシステムの読み込みを必要とし、こういったボードが装備されていないシステムでは、コールドスタートに際して本体にROM-BASICを内蔵した機種と比較し、時間が掛かった。 PC-9800シリーズでは後年までROM-BASICが搭載され続け、起動可能だったが、標準でカセットインターフェースを搭載した機種は皆無で、比較的初期の機種に限り、別売りの拡張ボードとしてサポートされた程度だった。
概要
メリット
起動時にOSやBASICの処理系をロードする時間を要さず、すぐに使用を開始できる。
ROM内部に置かれたサブルーチンをアプリケーション、システムなどからコールすることによって、あらかじめ持っている機能であればスクラッチから書かずとも、それを流用することができる。但し、その場合ROMバージョンが変わっても影響を受けないようにテーブルジャンプ方式とするなどエントリアドレスが固定されている必要がある。
デメリット
メリットで挙げたサブルーチンのエントリやデータの受け渡し方法がメーカーによって公開されていることはまれで、サードパーティーのソフトウェア開発業者などが解析した結果をドキュメント化して出版したものを入手して参照するか、自力でROM内部をリバースエンジニアリングせざるを得なかった。当然バグフィックスが行われるなどで、ROMのリビジョンが変わってしまうと使えなくなる可能性があった。
互換性維持のために、実用にならない状況にあっても、後継機もまた同じプログラムを本体に持ち続けなければならない。
ROM-BASICでサポートされていた外部記憶装置はオーディオ用コンパクトカセットを流用したデータレコーダであり、読み書きの速度は300?1600bpsであり、主記憶を越える量のデータの取り扱いに対して低速であった。また、シーケンシャルデバイスであるため、外部記憶装置からの特定のデータの呼び出しなどは実用的ではなかった。