HP-28 シリーズ

HP-28 シリーズは、ヒューレット・パッカードが1986年から1992年まで製造していたグラフ電卓かつプログラム電卓である（発売開始は1987年）。HP-28 シリーズは記号的に方程式を解く機能を持った最初の電卓である。HP-28 シリーズによって採用されたメニュー駆動式のRPL (Reverse Polish LISP) プログラミング言語インタフェースは、同社のHP 48 シリーズへと発展した。

 概要 
HP-28シリーズの電卓は、360°開閉可能なフリップオープン式のクラムシェル型のケースを共用している。左のフリップにはアルファベット順に並べた英字キーボードが、右のフリップには典型的な関数電卓のキーがレイアウトされている。表示装置には横137×縦32ドットのドットマトリックス液晶を使用し、通常23桁×4行の情報（3行のスタック／コマンド行と1行のソフトキーラベル行）が表示されている。

HP-28シリーズは、2機種3バージョンのモデルが製造された。HP-28C(1BB/1CC)、HP-28S(2BB)である。バージョンは、 #10d SYSEVAL で確認することができる。「Evaluation of System Objects」 : Hewlett-Packard HP-28S Advanced Scientific Calculator Reference Manual 1988, Edition 4, 126

HP-28Cは1986年に製造が始まり（そのため、最初のマニュアルの印刷年が1986年になっているhttp://www.thimet.de/CalcCollection/Calculators/HP-28SC/Contents.htm）、1987年に発売された。2KバイトのRAMが使用可能であり、最初のCAS(数式処理システム)搭載電卓であった。HP Calculators (http://h20331.www2.hp.com/Hpsub/cache/392617-0-0-225-121.html) HP-28Cには1BBと1CCの2つのバージョンがあった。 HP-28CはCPUとして、Saturn（クロック周波数 640kHz）を搭載していた。

HP-28Sは1988年にリリースされた。HP-28Sは、変数、関数およびプログラムをファイリングするためのディレクトリシステムを搭載し、RAMの容量も32Kバイトに増加した。HP-28Sは2BBのバージョン1つのみである。HP28S Syseval Entries - Luc.Pauwels (http://users.skynet.be/luc.pauwels/luc/HP28/hardware/syseval/) HP-28SはSaturnをコアにしたより強力なカスタムチップ Lewis（クロック周波数 1MHz）を搭載していた。

HP-28シリーズの欠点として、入出力端子の欠如が挙げられる。すなわち、数式やプログラムを電卓本体のキーパッドを使ってしか入力できず、入力した情報を外部の記録媒体にバックアップすることもできない。
また、このモデル（および同じクラムシェル型ケースを採用しているHP-19シリーズ）は、複数の設計上の問題を抱えている。それは、乾電池ケースの中で3本の単5形乾電池を支えるばねが強すぎることと、ケース上の切欠きに嵌める電池ケース蓋の端が薄いために、電池の交換の際などに蓋を開け閉めする間、蓋に圧力がかかり折れやすいことである。蓋の端は堅い金属でできているが、ケースのプラスチック製の切欠きはひび割れたり、壊れたりする傾向があり、注意深く機器を扱う必要がある。

 プログラミング 
詳細はRPL (プログラミング言語)参照

HP-28 シリーズではRPLによるプログラミングが可能である。RPLは非常に強力なプログラミング言語であり、例えば、APLのシミュレーションが可能なほどである。「コンピュータ言語APLのポケコンHP-28S上でのシュミレーション」 :  中野嘉弘 北海道情報大学紀要 1990, 創刊号, 155-187

 プログラム例 
（例） 0 以上 253 以下の指定した整数の階乗を計算するプログラムの例を示す。
    << → N << 1 1 N FOR I I * NEXT >> >>

 解説
 01: <<     : プログラム開始(BEGIN)
 02: → N    : Nをローカル変数として定義する。
              スタックから一つ取り出す。（スタックは一段下降）
              取り出した値をNに代入する。
 03: <<     : プログラム開始(BEGIN) --- ローカル変数の適用範囲（スコープ）の開始位置を示す。
 04: 1      : スタックに1を置数する。（スタックは一段上昇） --- 計算結果の初期値
 05: 1      : スタックに1を置数する。（スタックは一段上昇） --- ループ変数Iの開始値
 06: N      : スタックにNの値を置数する。（スタックは一段上昇） --- ループ変数Iの終了値
 07: FOR I  : Iをループ変数とする。
              スタックから二つ取り出す。（スタックは二段下降）
              取り出した値をループ変数Iの開始値と終了値とする。
              NEXTまでを繰り返す。
 08: I      : スタックにループ変数Iの値を置数する。（スタックは一段上昇）
 09: *      : スタックから二つ取り出す。（スタックは二段下降）
              取り出した値の積を計算し、その値をスタックに置数する。（スタックは一段上昇）
 10: NEXT   : ループ変数Iを1増加する。
              ループ変数Iの値が終了値N未満ならばFORの直後の命令(08:)に戻る。
              ループ変数Iの値が終了値N以上ならば、次の命令(11:)へ進む。
 11: >>     : プログラム終了(END) --- ローカル変数の適用範囲（スコープ）の終了位置を示す。
 12: >>     : プログラム終了(END)

このプログラムを実行するには、例えば、
    << → N << 1 1 N FOR I I * NEXT >> >> ENTER
    'FACT' STO
として、入力したプログラムを変数(ここではFACT)に格納しておく。その後、
    6 FACT
等とすると、プログラムが実行され、
    720
のように実行結果が第一スタックに表示される。

 脚注 

28