プログラム電卓

プログラム電卓（プログラムでんたく）は、コンピュータのようにプログラムを格納し、プログラム制御によって自動的に複雑な計算を行うことができる電卓である。プログラムは、細長い磁気カードやROMカートリッジにセーブしたり、バッテリーバックアップされたRAMに格納しておいたりする。BASICなどの高水準言語でプログラミングできるものはポケットコンピュータなどとも呼ばれる。 1990年代初め以降、プログラム電卓はグラフ電卓へと進化している。ドットマトリクス方式の液晶ディスプレイが安価に大量生産できるようになるまでは、プログラム電卓のディスプレイ部分は1行の数字または英数字しか表示できないものだった。 なお、「プログラマブル電卓」という異称もある。 プログラム電卓は、プログラムを書いて格納することができ、複雑な手続きを自動化したり、難しい問題を解いたりできる。 元々は各電卓独自のコマンド言語によるプログラミングだったが、ハッカーが電卓の主要インタフェースを迂回する方法を発見してアセンブリ言語でプログラムを書くようになり、TIを代表とする電卓メーカーがネイティブモードのプログラミングをサポートしはじめた。まず、そのようなコードを利用可能にするフックを公開し、後に通常のユーザインタフェースで直接そのようなプログラムを扱えるよう機能を整えていった。 電卓向けのプログラムはインターネット上に多数存在する。そういったプログラムをPCにダウンロードし、専用のリンクケーブルや赤外線リンクやメモリカード経由で電卓にアップロードすることができる。また、エミュレータを使えばPC上で直接実行できる。 それを利用してプログラム電卓向けに他のプログラミング言語のインタプリタやコンパイラのプログラムを書くことも可能である。例えば、TI-83やTI-84には BBC Micro のBASICが既に移植されており、他にもFORTRAN、AWK、Pascal、REXX、Perl、Common Lisp、Python、tcl、UNIX上の各種シェルなどの移植が議論されている。 プログラム電卓向けのソフトウェアとしては、数学や科学に関連した問題を解くものや、ゲーム、デモなどがある。その多くは一般ユーザーが作り、フリーウェアやオープンソースとして公開しているが、教育および科学技術計算市場向けの有償ソフトウェアも存在する。 グラフ電卓は表示画面が大きいため、スクロールしなくてもソースコードを複数行表示でき、単なるプログラム電卓よりもプログラミングが容易である。 キーストローク方式 初期のプログラミング電卓は、非常に単純なプログラミング言語を採用しており、実際にキーを押下する順序を記録する方式や複数のキーストロークをバイトコードのようなものに変換して記録する方式がある。条件分岐と間接アドレッシングが可能であれば、このような方式でもチューリング完全なプログラミングが可能である。キーストローク方式でチューリング完全なプログラム電卓としては、カシオのFX-602Pシリーズ、HP-41、TI-59（英語版） などがある。キーストローク方式のプログラム電卓は2012年現在も販売されており、HP 35s、カシオのfx-5800Pなどがある。 BASIC BASICは、デスクトップコンピュータやポケットコンピュータで広く採用されたプログラミング言語である。シャープ、カシオ、TIなどがプログラム電卓やポケットコンピュータのプログラミング言語として採用した。これらのBASICの方言はキーストローク方式の長所も取り入れた電卓向けに最適化されたものである。したがって、一般的なBASICとの共通点は少ない。 RPL RPLはヒューレット・パッカードがプログラム電卓向けに採用した、逆ポーランド記法順などを特徴とする言語である。1987年リリースのHP-28Cから導入した。 アセンブリ言語 初期のプログラム電卓では機械語を直接使うことはできなかったが、ハッカーがインタプリタのインタフェースを迂回する方法を発見し、アセンブリ言語で直接プログラミングできるようになった。最初にこの技法が使われるようになったのは TI-85 で、モード切替にプログラミング上の欠陥があったためである。TI-83でも同様の技法が使われるようになると、TIとHPは愛好家がそのようなニーズを持っていることを把握するようになり、アセンブリ言語用ライブラリを開発したり、開発者向けの詳細文書を公開したりするようになった。携帯型ゲーム機のゲームと似たようなゲームがプログラム電卓（特にグラフ電卓）ですぐさま開発されるようになった。TIはTI-83やTI-89で正式にアセンブリ言語をパッケージとしてサポートするようになった。HPは2012年現在の最上位機種 HP 50g でアセンブリ言語を内蔵している。カシオはPB-1000（英語版）でアセンブリ言語を搭載し、PB-1000Cでは搭載CPUのアセンブリ言語ではなく情報処理技術者試験のCASLを搭載していた。 その他 gcc開発スイートはHPおよびTIの一部機種にも対応しており、PC上でC、C++、Fortran 77、アセンブリ言語などを使ってプログラム電卓向けのソフトウェアを開発し、電卓にアップロードして使うことができる。 電卓上またはPC上でコンバータ、インタプリタ、コードジェネレータ、マクロアセンブラ、コンパイラなどを開発するプロジェクトがいくつかある。言語としては、FORTRAN、BASIC、AWK、C言語、COBOL、REXX、Perl、Python、Tcl、Pascal、Delphi、各種シェル（DOS、OS/2のバッチやWindowsのシェル、Unix系のシェルなどがある。 プログラム電卓の重要な機能の1つとして、プログラムを永続的にセーブしておける機能がある。この機能がないと、電池を入れ替えたときなどにプログラムが消えてしまう。プログラム電卓内に電池を取り外しても内容が消えないメモリを搭載する方式と別の周辺機器を接続する方式がある。複数のセーブ手段を備える場合もある。 磁気カードリーダ/ライタ 初期のプログラム電卓はオプションの永続的セーブ手段として磁気カードリーダを採用していた。入力したプログラムを細長い磁気カードにセーブする。磁気カードとそのリーダは小型で持ち運びが容易である。しかし、一般に非常に高価だった。磁気カードを採用していた最後の機種としてHP-41CとTI-59（英語版）がある。 バッテリーバックアップ式メモリ 主電源を切ってもメモリの内容が消えないようバッテリーバックアップを行う方式で、HPが最初に採用し continuous memory と名付けた。これは電池交換の際でもプログラムが失われないようになっている。なお、メモリ容量が増えてくると、完全なバッテリーバックアップは困難になってきた。そのため、電池交換にかける時間を2分以内などと制限する方式、電池を2つ搭載して一度に1つしか交換できないとする方式などが登場した。 カセットテープ コンパクトカセットは磁気カードよりも安価で単純なセーブ手段である。例えばカシオは FA-1 というインタフェースモジュールを発売し、プログラム電卓と一般的なカセットデッキを接続可能とした。周波数偏移変調でデジタルデータを音響信号に変換して録音する。シャープとHPは、電卓に直接接続可能なマイクロカセットを使った専用レコーダーを発売した。こちらの方が信頼性が高く便利だったが、カシオの方式よりも高価だった。 フロッピーディスク フロッピーディスクは適度に安価であり取扱いもし易く便利なセーブ手段である。例えばヒューレット・パッカードはHP-ILインターフェースを使用してフロッピーディスクドライブを接続可能とした。このフロッピーディスクドライブ(HP 9114A/B)を利用すると3.5インチ2DDフロッピーディスクにセーブすることが可能である。HP-ILを採用していた機種としては、HP-41C、HP-71B、HP-75C/D等がある。 PCとの接続 プログラムやデータはパーソナルコンピュータに転送でき、PC上でセーブできる。PCとの接続手段としては登場年代順に、RS-232、IrDA、USB などがある。PCを所有していることが前提だがケーブルだけで済むので安価であり、カセットテープよりも高速である。初期の例としてはカシオのFX-603PとFA-6インタフェースがある。この場合プログラムやデータはプレーンテキストとして転送されるので、セーブできるだけでなく、PC上のテキストエディタで編集も可能である。 フラッシュメモリ 最近ではフラッシュメモリなどの不揮発性メモリを挿入するスロットを備えているものもある。 1980年代、ハイエンドの電卓としてプログラム電卓とポケットコンピュータが存在しており、両者はよく似ている。例えば、どちらも非構造化BASICでプログラミング可能で、ほとんど例外なくQWERTY配列のキーボードを備えている。 しかし、次のような差異がある。 BASIC搭載のプログラム電卓には電卓型のキーパッドもあり、関数電卓のように扱えるモードを備えている。 ポケットコンピュータは、オプションで別のプログラミング言語を提供することが多い。例えばカシオ計算機のAI-1000（日本国外ではPB-2000）には、C、BASIC、Prolog(AI-1000のみ)、アセンブラ、(PB-2000のみ)LISPが提供されている。 メーカーは両方の機器を製品として取り揃えていることが多かった。カシオは、当初は型番において、プログラム電卓に "fx-" をつけ、ポケットコンピュータには "pb-" をつけていた（後にFX型番でもフルキーで電卓モードなしのポケコンも出している）。シャープはBASIC搭載の全ての製品をポケットコンピュータとして販売していた。 カシオ計算機 FX-502P、FX-602P、FX-603P、FX-702P（英語版）、FX-850P（英語版）、Casio 9850 シリーズ（英語版）、Casio 9860 シリーズ（英語版）、Casio ClassPad 300 ヒューレット・パッカード HP-10Cシリーズ、HP-25、HP-28 シリーズ、HP 35s、HP-41C、HP 48 シリーズ、HP-65、HP 49/50 シリーズ、HP 38G、HP Prime シャープ PC-1401（英語版）、PC-1403（英語版） テキサス・インスツルメンツ TI-58 C（英語版）、TI-59（英語版）、TI-66、TI-84 Plus シリーズ、TI-Nspireシリーズ、TI-89 シリーズ、TI-92シリーズ Elektronika （ソ連・ロシアのブランド） B3-21、B3-34（英語版）、MK-61、MK-52（英語版）、MK-85、MK-90、MK-92、MK-98、MK-152、MK-161 Sinclair （英国） Sinclair Cambridge Programmable TI-59 HP-41CX と周辺機器（磁気カードリーダ/ライタとサーマルプリンタ） ソビエト連邦で開発されたプログラム電卓（写真はMK-52（英語版））は宇宙開発でも使われた。 FX-602P TI-Nspire CX CAS HP 50g で数式エディタを使っているところ Casio ClassPad 300 はタッチスクリーン式の電卓である。 Sinclair Cambridge Programmable