HP 49/50 シリーズ

**HP 49/50 シリーズ**はヒューレット・パッカード(HP)社の製造したグラフ電卓である。普及したHP 48 シリーズの後継機種である。

製造期間は1999年〜2015年と長い。

HP 49/50 シリーズには4種類の電卓がある（HP 50gの色違い機種も含めると5種類）。これらの電卓は**ALG入力モード**（algebraic mode：中置記法による数式入力モード）と**[[逆ポーランド記法|RPN]]入力モード**を持っている。HP 48 シリーズはALG入力モードがなかった。しかし、本シリーズからRPN入力モードがデフォルトではなくなり、ALG入力モードがデフォルトになった。

内蔵の数式処理システム(CAS)を使って数値と記号の計算を実行できる。そのCASはHP 48 シリーズから継承した**ALG48**と***'を組合せて改良したものである。

[[RPL (プログラミング言語)]]を搭載したHP社電卓はこのシリーズが最後となる。

== HP 49G ==

1999年8月に販売開始された。'''HP 49G''' (F1633A, F1896A)は本体に伝統的な色を採用しなかった初のHP社の電卓である。メタリックブルーの色調に加えて、キーボードの材質はゴムであった。このゴムキーボードは従来のHP社電卓のキーボードのようなクリック感がない。さらにHP社の電卓の特徴であった大きな[ENTER]キーもなくなった。

HP 49GはHP 48 シリーズで利用できた強力なユーザーインターフェースと数学機能の多くを新しいHP 49G用のファームウェアに組み込んだ。HP 48 シリーズと違って電卓上でSysRPLと[[HP Saturn|Saturn]]アセンブリ言語を容易にデコンパイルあるいはコンパイルする機能も組込まれた（HP 48 シリーズの場合、SysRPLのコンパイルはPC上でするのが普通で、サードパーティのツールを使ったときだけ電卓上でSysRPLをコンパイルできた）。

HP 49Gは[[フラッシュメモリ]]を内蔵し、'''[[ファームウェア]]を更新できる最初のHP社の電卓'''であった。さらにHP 48 シリーズに付属していたソフトポーチの代わりにハードスライディングケースを採用した。

HP 49Gの最終公式ファームウェアは1.18であった。いくつかの非公式なファームウェアがHP 49Gの開発者によって公開され、非公式ファームウェアの最終バージョンは1.19-6であった。

この後、HP 49G上でその後継機種である'''hp 49g+'''と'''HP 50g'''のファームウェア（改造ファームウェアではあるが）をインストールできるようになった。

なぜそのようなことが可能になったかと言えば、ハッカーがhp 49g+とHP 50gのファームウェアを改造して、PCエミュレーター'''Emu48'''上で動作できるようにしたからである。Emu48はHP 48 シリーズからHP 49Gまでのハードウェアしか再現していないので、hp 49g+で追加された'''[[HP Saturn|Satrun+]]'''命令と[[ARMアーキテクチャ|'''ARM''']]命令を実行できない。そこでハッカーたちはhp 49g+とHP 50gのファームウェアからSaturn+命令とARM命令を削除し、'''Saturn'''命令だけに置換えた改造ファームウェアを作成した(HP 49G ROM 2.09など)。前述のようにEmu48はHP 49Gまでのハードウェアを再現しているので、Emu48用の改造ファームウェアを実機のHP 49Gに特殊な方法でインストールできるように修正すれば、実機のHP 49GにHP 49g+とHP 50gの改造ファームウェアをインストールすることができたのである。少なくともファームウェアバージョン2.09までは、実機のHP 49Gにインストールすることができた。

2003年にHP 49Gのファームウェアの[[数式処理システム|CAS]]のソースコードが[[GNU Lesser General Public License|LGPL]]ライセンスの下で公開された。このコードは対話型幾何学プログラムと後継機種hp 49g+と互換性のあるいくつかのコマンドを含んでいる。ライセンス制限のために再コンパイルされたファームウェアは再配布できない。

== hp 49g+ ==

2003年8月、ヒューレット・パッカード社は'''hp 49g+''' (F2228A)を販売開始した。この電卓はメタリックゴールドに着色され、HP 49Gとの後方互換性があった。HP 49Gで不評だったゴムキーに代わって、プラスチックキーが採用された（ただし、後述のHP 50gの項目で書かれているように押しやすいものではなかったようだ）。HP 49Gのハードスライディングケースは廃止され、かつてのHP電卓と同様のソフトポーチで電卓を保護するようになった。

設計・製造は台湾の '''Kinpo Electronics''' で行われた（2001年にHP社の電卓部門が閉鎖された。そのため、hp 49g+以降は設計も含めて Kinpo が行っている）。

この電卓の特徴は全面的に更新されたプロセッサ・アーキテクチャ、[[ユニバーサル・シリアル・バス|USB]]と[[IrDA]]赤外線通信（IrCOMMプロトコル）、SDCARDによるメモリ拡張、そして多少大きくなった画面（131×64画素 → 131×80画素）であるが、それ以外の改良もされている。

この電卓のシステムは新しく採用された[[ARMアーキテクチャ|ARM]]プロセッサー上で直接実行できない。しかし、今までのHP社電卓で使われてきた[[HP Saturn|Saturnプロセッサー]]の[[エミュレータ (コンピュータ)|エミュレーター]]を搭載しており、その上で実行できる。このことによって、hp 49g+はHP 49G用に書かれたプログラムのほとんどとバイナリレベルの互換性を維持している。それだけでなく、HP 48 シリーズとソースコードレベルの互換性がある。hp 49g+で初搭載された'''Saturnプロセッサーエミュレーター'''は'''Saturn+'''という拡張命令も持っている。

このようにARMプロセッサでSaturnをエミュレートするプラットフォームを'''[[HP Saturn|Apple シリーズ]]'''と称する。

ARMでSaturnをエミュレーションしているにもかかわらず、hp 49g+はあらゆる過去のHP社電卓よりも高速であった。HP 49Gに対する速度向上は処理内容に依存するものの約3～7倍である。ARM用に書いたプログラムを実行することすら可能であり、エミュレーションレイヤーを完全に迂回することもできる。GNU C compiler も利用可能である（後述の'''HPGCC'''を参照）。

== hp 48gII ==

2003年10月20日に発表された'''hp 48gII''' (F2226A)は名称から想像されるような[[HP 48 シリーズ]]の後継機種ではなかった。実際のところはARMプロセッサを搭載した'''hp 49g+'''の一種であった。しかし、メモリは削減され、SDメモリカードスロットもなくなり、CPUクロック周波数も低下、画面も小さくなり、ファームウェアも書き換えできなくなった。

名前から判断すると HP 48 シリーズに見えるが、'''HP 49/50 シリーズ'''なので、ALG入力モードとRPN入力モードを搭載している。

この電卓は計算機能を望んでいるが、多くのプログラムのインストールを望んでいないユーザーを狙ったように見える。'''hp 49g+の廉価版'''とも言える。

最初の2003年のバージョンは128KiB RAMを搭載し、単4電池3本で実行できた。

2007年の第2バージョン（Apple V2プラットフォームを搭載）は4つの単4電池を用い、256KiB RAMを搭載している。USBポートが追加され、改良されたキーボードも特徴である。

== HP 50g ==




'''HP 50g''' (F2229A)はHP 49/50 シリーズの'''最後の電卓'''である。最大の外観の変更は本体の色調である。伝統的なHP社電卓の外観に回帰している。本体全体に黒いプラスチックを使用し、白色、オレンジ色、黄色がシフトキーに使われている。黒い本体の表面は滑りにくくするためにhp 49g+よりもザラザラとしている。色違いの機種として、高いコントラストを強調した青と白の配色のものも存在した(NW240AA)。

HP 50gの形状と大きさは'''hp 49g+'''と同一である。しかし、hp 49g+は単4電池を3本使うのに対して、HP 50gは4本使用する。hp 49g+の全機能に加えて、HP 50gは[[HP 48 シリーズ|HP 48G シリーズ]]に搭載された完全な数式ライブラリも搭載している（hp 49g+でもファームウェア2.06以降から使用できる）。それだけでなく、ファームウェア 2.15/2.16（2015年の最新版）において、'''HP 48SX'''用の拡張カードで利用できた周期表ライブラリも搭載している。

HP 50gはhp 49g+の[[IrDA]]とUSBポートに加えて、3.3V TTLレベルの非同期シリアルポートが追加されている。hp 49g+と同様にIrDAの有効範囲は約10cmである。HP 50gのIrDA("user’s guide"上で"infrared port"と称されている)はUSBポートと非同期シリアルポートの間にあるが、黒い光沢のあるプラスチックに覆われていて存在が分かり難い。また、非同期シリアルポートは本当の[[RS-232]]ポートではない。異なる電圧レベルを使い非標準のコネクタを使うからである。RS-232機器との接続には外部変換アダプターが必要である。

hp 49g+で最も批判された特徴であるキーボードは、以前の問題を解決するために最後のhp 49g+で導入された新設計のものを使っている。

HP 50gの販売開始から1年後の2007年に登場した [[TI-Nspireシリーズ|TI-Nspire / TI-Nspire CAS]] はHP 50gを性能で圧倒した。販売開始から1年でHP 50gは完全に時代遅れになった。

この電卓の入手性に関する告知は2006年9月にHP社によって行われた。公式な詳細はHP社のウェブページで以前まで参照できた。HP 50gは2015年に製造終了となった。これによって、[[HP-28 シリーズ|HP-28C]](1987年)から始まったRPL搭載のHP社電卓は28年に渡る歴史を終えた。

2013年から発売されている'''[[HP Prime]]'''はハードウェアアーキテクチャもプログラミング言語も操作性も完全に異なるものであり、HP 50gの後継とは言い難い。

== 技術仕様 ==

=== HP 49G ===
* 販売開始：1999年
* 製造終了：2003年
* 最終ファームウェア：正式版:HP49-C 1.18(2000年5月)。ベータ版:HP49-B 1.19-6(2001年10月)。PCエミュレータ用改造版:HP48-C 2.09(2006年6月)
* 画面サイズ：131×64画素
* CPU：Yorke 4 MHz ([[HP Saturn|Saturn]]コア)
* RAM：512 KiB
* フラッシュメモリ：2 MiB
* 入出力ポート：RS-232（2x5ピンの特殊コネクタ。プロトコルはKermitあるいはXModem）

=== hp 49g+ ===
* 販売開始：2003年
* 製造終了：？
* 最終ファームウェア：HP49-C 2.15 (2009年4月)
* 画面サイズ：131×80画素
* CPU：Samsung S3C2410X01 (ARM920Tコア) 75 MHz　※特殊なプログラムで203MHzまでオーバークロック可能
* RAM：512 KiB
* フラッシュメモリ：2 MiB
* 外部メモリ：1GBまでのSDCARD (2GBのSDCARDも使えなくはないが1GBしか認識しない)
* 入出力ポート：USBポート、IrDA

=== hp 48gII ===
* 販売開始：2003年
* 製造終了：？
* 最終ファームウェア：HP48-C 2.08（2006年。ただし、本機はフラッシュメモリがないので更新できない。）
* 画面サイズ：131×64画素
* CPU：Samsung S3C2410X01 (ARM920Tコア) 48 MHz　※特殊なプログラムで203MHzまでオーバークロック可能
* RAM：128 KiB (第1バージョン)、256 KiB (第2バージョン)
* フラッシュメモリ：なし
* 入出力ポート：USBポート、IrDA。第2バージョンは3.3V TTLレベル非同期シリアルポートが追加された。

=== HP 50g ===
* 販売開始：2006年
* 製造終了：2015年
* 最終ファームウェア：正式版:HP50-C 2.15(2009年)。HP社公式PCエミュレータ用:HP50-C 2.16(2012年)
* 画面サイズ：131×80画素
* CPU：Samsung S3C2410A (ARM920Tコア) 75 MHz　※特殊なプログラムで203MHzまでオーバークロック可能
* RAM：512 KiB
* フラッシュメモリ：2 MiB
* 外部メモリ：1GBまでのSDCARD (2GBのSDCARDも使えなくはないが1GBしか認識しない)
* 入出力ポート：USBポート、IrDA、3.3V TTLレベル非同期シリアルポート(4ピン特殊コネクタ)
* 備考：PCとHP 50gをUSB接続するためのソフトウェアは[[Microsoft Windows XP|Windows XP]]までしか対応していない。

== プログラミング ==




***RPL**についての詳細は[[RPL (プログラミング言語)]]を参照のこと。''

HP 49/50 シリーズは**RPL**と呼ばれる代数的かつスタックベースな[[プログラミング言語]]をサポートしている。RPL (Reverse Polish Lisp) は[[逆ポーランド記法]] (Reverse Polish Notation) と[[LISP|Lisp]]言語を組合せた言葉である。しかし、実際の文法は[[Forth]]言語に近い。

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

最上位レベル言語の**UserRPL**は電卓に内蔵の後置記法操作(RPN操作)のシーケンスで構成されており、ループや条件分岐も使える。UserRPLの各コマンドはスタックに積まれた引数を確認し、不正な引数であればエラーを返す。

UserRPLの下位レベル言語は**System RPL** (SysRPL) である。System RPLのコマンドのほとんどは引数確認をしない。引数の型は特定の型だけを受け付ける。そのことによって、System RPLはUser RPLよりも格段に高速に動作する。その反面、不正な引数を渡すと電卓をクラッシュさせてしまう。付け加えると、System RPLはUser RPLで使えない多くの拡張コマンドを利用できる。[[HP 48 シリーズ]]と違って、PCソフトウェアなしでもSystem RPLのプログラムを作成可能である（PCソフトウェアを使っても良い）。内蔵コンパイラ**MASD**のおかげである。MASDは[[HP Saturn|Saturn]]アセンブリ言語（hp 49g+とHP 50gの最新ファームウェアが必要）と**ARMv4T**アセンブリ言語を電卓上でコンパイルできる。多くのツールがプログラマーのために存在し、HP 49/50 シリーズを強力なプログラミング環境にしている。

hp 49g+とHP 50gのSaturnアセンブリ言語、ARMアセンブリ言語、そして[[C言語]]はPC上のコンパイラでもコンパイルできる。

HP 49/50 シリーズでPPL言語（[[:en:HP_Prime|HP Prime]]用の言語）をプログラミングすることはできない。

== HPGCC for the 49g+/50g ==
**HPGCC**は[[GNU General Public License|GNU GPL]]下で配布されている[[GNUコンパイラコレクション|GCC]]コンパイラの実装の一つである。HPGCCの主な対象はARMを搭載したhp 49g+/HP 50gである。HPGCCの以前のバージョンは他のARM搭載HP社電卓もサポートしていた（hp 48gII/hp 39g+/HP 39gs/HP 40gs）。しかし、それを求める人が少ないことや互換性の問題が原因で削除された。正式には、HPGCCは[[クロスコンパイラ]]である。ARM搭載HP電卓用のコードをコンパイルするが、HPGCCはPC上で動作する。

HPGCCの最新バージョンは初期バージョンから多くの改良がなされている。最も注目するべき点は、コンパイルされたコードはデフォルトでARMの**Thumb**命令(ARM縮小命令)になることである。その結果、わずかな性能低下を伴うが、コードサイズは大幅に縮小される。[[米国国家規格協会|ANSI]] C言語のほとんどを実装しているだけでなく、デバイス固有のライブラリもあるので、電卓のRPNスタック、メモリ、[[圧電素子|ピエゾ素子]]ブザーのようなものを扱うことができる。

GCCコンパイラ自体は[[フリーソフトウェア財団]]の資産であり、その財団はGCCを利用したできた成果物に対して特定のライセンス制限を課していないと宣言している。しかしながら、HPGCCに含まれている[[ライブラリ]]は、HPGCCでコンパイルされたプログラムを実際の電卓で実行するために必要なルーチンも含んでいる。HPGCCのライブラリは改変GPLライセンスの下でリリースされている。他の多くのプラットフォームのGCCがライブラリに対してGPLより制限の緩いライセンスを使っているのとは対照的である。

このようにHPGCCのライブラリ(改変GPL)とリンクした全てのプログラムはGPL（非営利的ソフトウェアに対する例外を伴う）でリリースされたとしても配布することだけが可能である。

**（※）**以上は[[:en:HP_49/50_series|英語版]]によるが、HPGCCの改変GPL(modified GPL)がどのようなものかは不明である。通常のGPLはソースコードの開示請求に応じれば販売も可能なので、そこのところが異なるのかもしれない。

== エミュレータ ==
HP49Gの[[エミュレータ]]がいくつか存在する。

**Emu48**はHP 49G用のROM 2.09（前述のように正式なものではない）があれば、hp 49g+とHP 50gのほとんどの機能をエミュレーションできる。しかし、ARMコードは実行できない。HP 49G用のROM 2.09がまだ入手できるのかどうかは不明である。

**x49gp**というARMベースのエミュレーターがリリースされている。hp 49g+/HP 50gの[[ARMアーキテクチャ|ARMプロセッサー]]の本当のエミュレーションが可能である（Emu48の場合、hp 49g+/HP 50gのファームウェアのSaturn+命令とARM命令を[[HP Saturn|Saturn]]命令に置換えた改造ROMイメージが必要だった）。HPGCC2とHPGCC3でコンパイルしたプログラムも実行できる。このエミュレータはソースコードのコンパイルが必要なため導入が難しい上に[[Linux]]と[[macOS]]だけで利用できる。

2012年にヒューレット・パッカード社はWindows向けに公式エミュレータ**"HP 50g Virtual Calculator"**をリリースした。ファームウェアバージョンは2.16までリリースされた、実機は2.15までだったので、公式エミュレーターのファームウェアの方がバージョン番号が大きい。

[[スマートフォン]]用にもHP 49/50 シリーズのエミュレーターが存在する。

**m48**というスマホアプリはHP 49Gをサポートしている。その後継アプリの**m48+**はhp 49g+もサポートしている。

**HP50g'''というスマホアプリは名前の通り、HP 50gをエミュレーションしている。

## 関連項目
* HP-28 シリーズ（RPL搭載電卓の最初のもの）
* HP 48 シリーズ（HP 49/50 シリーズの前シリーズ）
* HP 38G（HP 48 のハードを元にして作られた教育向け電卓）
* HP 39/40 シリーズ（HP 49/50 シリーズと並行で販売された教育向け電卓）
* HP Saturn（HP 49/50 シリーズのCPU）
* HP Prime（HP 49/50 シリーズが生産終了後、唯一残ったHP社のグラフ電卓）

## 出典