HP 48 シリーズ

**HP 48 シリーズ**はヒューレット・パッカード社（HP社）が開発したプログラミング可能なグラフ関数電卓である。HP-28 シリーズの後継機種である。 

1990年～2003年の間に製造されていた。2003年に製造終了するとHP 49/50 シリーズに置き換えられた。

## 概要
HP 48 シリーズは逆ポーランド記法入力方式とRPL (Reverse Polish Lisp) プログラミング言語を搭載しており、1990年 - 2003年まで製造された。

HP-28 シリーズと比べて液晶画面の大型化（137×32画素 → 131×64画素）が行われている。さらにHP-28シリーズの欠点であった外部インターフェースの欠如も改善され、シリアル通信と赤外線通信が可能である。速度も向上し、機能も増えている。

シリーズ全機種として HP 48S, HP 48SX, HP 48G, HP 48GX, HP 48G+がある。
GモデルはSモデルの改良版を意味している。
Xの付いたモデルはスペシャルRAM（拡張メモリ）とROMカード（ソフトウェアアプリケーション）によって拡張できる。
SXとSモデルの内蔵メモリの容量は同一であるが、拡張性が異なる。
GXモデルはGモデルよりも内蔵メモリがさらに拡張されている。
G+モデルは内蔵メモリのみを搭載しており、スペシャルRAMやROMカードの拡張はできない。

なお、HP 48gII（2004年）はHP 48 シリーズではなく、HP 49g+に近い機種である。

HP 48シリーズのために開発されたハードウェアアーキテクチャはHP 38Gの元になった（ただし、HP 38GはHP 48 シリーズと大幅に異なるユーザーインターフェースを採用している）。HP 48 シリーズのハードウェアとソフトウェアの設計はHP社の他の電卓の影響を強く受けている。特にとHP-28 シリーズから強い影響を受けている。

HP 48シリーズはHP-28 シリーズのようなクラムシェル型のケース（折りたたみ式のケース）を採用しなかったため、片手で持ちやすくなった。しかしそれにより、機能数の多いHP 48シリーズの方がキー数が大幅に少なくなった。具体的には、HP 48 シリーズのキー数は49個であり、HP-28シリーズの72個（そのうち文字入力専用キーが35個）から大幅に減っている。その結果、少ないキーに多くの機能を割りあてる必要が生じたため、シフトキーが1種類から3種類（アルファベットキー、左シフトキー、右シフトキー）に増加している。

## モデル一覧／販売開始〜製造終了期間
最初のモデルHP 48SXは1990年3月6日に発売された。
* HP 48SX : 1990年〜1993年
* HP 48S : 1991年〜1993年
* HP 48GX (F1895A) : 1993年〜2003年
* HP 48GX ASEE : 1993年 ("1893 ASEE 1993 Shaping our world - Century II"と名付けられた記念モデル)
* HP 48G : 1993年〜2003年
* HP 48G+ (F1630A, F1894A) : 1998年〜2003年

## 技術仕様

### 全モデル共通仕様（一部Xモデルのみの仕様を含む）
* CPU : HP Saturn
* 画面解像度 : 131×64 画素
* 通信ポート : 4ピン RS-232 (シリアルポート)あるいは赤外線ポート（IrDAではない）
* データバス幅 : 8bit（外部アクセス時）
* 最大アドレス幅（4bit単位） : 20bit
* 論理アドレス空間 : 512KB
* 最大レジスタサイズ : 64bit (ワーキングレジスタとスクラッチレジスタ共通)
* 利用可能なカードポート数 : 2（Xモデルのみ）
* 拡張カードピン数 : 40（Xモデルのみ）

### HP 48S/HP 48SX 仕様
* CPUクロック周波数 : 2 MHz
* メモリクロック周波数 : 2 MHz
* CPUコード名 : Clarke (Saturn 1LT8 core)
* 通信プロトコル : シリアル通信はKermitプロトコル、赤外線通信は独自方式
* 内蔵ROM : 256 KB
* 内蔵RAM : 32 KB
* 拡張カード1枚当たりの最大追加メモリ : 128KB (48SXのみ)
* ROMバージョン : A, B, C, D, E, F,  J

### HP 48G/HP 48GX/HP 48G+ 仕様
* CPUクロック周波数 : 3.68 ～ 4 MHz (一般的には4 MHzとされている)

* メモリクロック周波数 : 2 MHz
* CPUコード名 : Yorke (Saturn 1LT8 core)
* 通信プロトコル : シリアル通信はKermitあるいはXmodemプロトコル、赤外線通信は独自方式
* 内蔵ROM : 512 KB
* 内蔵RAM : 32 KB (48G) または 128 KB (48G+/48GX)
* 拡張カードポート1の最大追加メモリ : 128KB（48GXのみ）
* 拡張カードポート2の最大追加メモリ : 4 MB (48GXのみ。一度にアクセスできるのは128 KBだけでバンク切替が必要)
* ROMバージョン : K, L, M, P, R

英語版記事によると、温度に従ってCPUクロック周波数が変化するという主張がある。

HP 48G シリーズ設計チームの技術者の一人であるデイヴ・アーネットによると、4MHz CPUのクロック周波数は2種類あるという。一つは仕様に近くだいたい3.93～3.94 MHz付近であり、拡張可能モデル(48GX)のために用意された。もう一つは仕様よりもわずかに低く、拡張不能モデル(48G)に使われた。最終的には、拡張不能モデル(48G)も改良されて4 MHzに近いクロックのCPUを装備するようになった。温度の影響はほとんど無視できるとのことである。

以上のCPUクロック周波数のことは英語版記事によるが、出典が不明確である。

## プログラミング
**''RPL**についてはRPL (プログラミング言語)を参照*

HP 48 シリーズは[[スタック]]ベース[[プログラミング言語]]*'RPL**をサポートしている。RPL (Reverse Polish Lisp) は[[逆ポーランド記法]] (Reverse Polish Notation) と[[LISP|Lisp]]言語を組合せた言葉と考えられる。ただし、実際の文法は[[Forth]]に似ている。

RPLはスタックベースプログラミング言語にリストと関数の概念を追加しており、評価していないコードを引数として関数に渡すことができる。あるいは、関数が終わる時にスタック上に評価していないコードを置いてそのコードを呼び出し元に返すこともできる。

RPLは2つに分類できる。**User RPL**と**System RPL'''である。

User RPLはユーザーが電卓上で直接プログラミングできる。

System RPLは外部のコンパイラが必要である。このコンパイラはサードパーティのユーティリティを使えば、電卓上で実行できるかもしれないが、通常はPC上で実行する。

2つの言語は低レベルな操作ができるかどうかで異なる。

User RPLは引数チェックをしないコマンドを隠蔽している。その結果として電卓をクラッシュさせることはない（それゆえにSytem RPLよりも低速度である）。

一方でSystem RPLのプログラムが不正な引数でコマンドを実行すると、たいていの場合、電卓がクラッシュし、メモリの完全リセットが必要になる。

HP 48 は機械語で直接プログラムすることも可能である。

## エミュレーター
* Emu48 for Windows
* X48 for Mac OS X, POSIX (unix/linux)
* m48 – HP48 emulator for the iPhone, based on Emu48
* Droid48 – HP48 Emulator for Android OS, based on X48
* An HP48 emulator – decompiler for Unix/Linux or Windows (using Cygwin) by Paul Courbis

## 関連項目
* HP Saturn（HP 48 シリーズのCPU）
* RPL (プログラミング言語)

## 外部リンク
* The Museum of Hewlett-Packard Calculators: HP 48S/SX
* The HP48 Goodies Page
* The HPCALC.org web site
* HP48 FAQ (including program list)

## 出典