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と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+で追加されたSatrun+命令と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のソースコードが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プロセッサー上で直接実行できない。しかし、今までのHP社電卓で使われてきたSaturnプロセッサーのエミュレーターを搭載しており、その上で実行できる。このことによって、hp 49g+はHP 49G用に書かれたプログラムのほとんどとバイナリレベルの互換性を維持している。それだけでなく、HP 48 シリーズとソースコードレベルの互換性がある。hp 49g+で初搭載されたSaturnプロセッサーエミュレーターはSaturn+という拡張命令も持っている。
このようにARMプロセッサで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 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 CAS はHP 50gを性能で圧倒した。販売開始から1年でHP 50gは完全に時代遅れになった。
この電卓の入手性に関する告知は2006年9月にHP社によって行われた。公式な詳細はHP社のウェブページで以前まで参照できた。HP 50gは2015年に製造終了となった。これによって、HP-28C(1987年)から始まったRPL搭載のHP社電卓は28年に渡る歴史を終えた。
2013年から発売されているHP Primeはハードウェアアーキテクチャもプログラミング言語も操作性も完全に異なるものであり、HP 50gの後継とは言い難い。
プログラミング.
"RPLについての詳細はRPL (プログラミング言語)を参照のこと。"
HP 49/50 シリーズはRPLと呼ばれる代数的かつスタックベースなプログラミング言語をサポートしている。RPL (Reverse Polish Lisp) は逆ポーランド記法 (Reverse Polish Notation) と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はSaturnアセンブリ言語（hp 49g+とHP 50gの最新ファームウェアが必要）とARMv4Tアセンブリ言語を電卓上でコンパイルできる。多くのツールがプログラマーのために存在し、HP 49/50 シリーズを強力なプログラミング環境にしている。
hp 49g+とHP 50gのSaturnアセンブリ言語、ARMアセンブリ言語、そしてC言語はPC上のコンパイラでもコンパイルできる。
HP 49/50 シリーズでPPL言語（用の言語）をプログラミングすることはできない。
HPGCC for the 49g+/50g.
HPGCCはGNU GPL下で配布されている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（非営利的ソフトウェアに対する例外を伴う）でリリースされたとしても配布することだけが可能である。
（※）以上はによるが、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プロセッサーの本当のエミュレーションが可能である（Emu48の場合、hp 49g+/HP 50gのファームウェアのSaturn+命令とARM命令を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をエミュレーションしている。