HP -41Cシリーズは、ヒューレット・パッカード社が1979年から1990年にかけて製造した、プログラム可能で拡張可能な連続メモリ搭載の携帯型RPN電卓です。初代モデルのHP-41Cは、英数字表示機能を備えた初の電卓でした。その後、メモリ容量と機能が向上したHP-41CVとHP-41CXが登場しました。


HP-41Cの英数字LCDスクリーンは、ポケット電卓の使い方に革命をもたらし、(当時としては)使いやすさと拡張性(キーボードに割り当てられていない機能をアルファベットで入力できる)を実現しました。英数字ディスプレイを使用することで、電卓はユーザーに何が起こっているかを伝えることができました。例えば、エラーメッセージを表示することができました。データエラーゼロ除算を試みた際に、単にゼロを点滅させるのではなく、ユーザーに引数()を具体的に求めることもできます。半径を入力してください単に疑問符を表示するのではなく、") と表示します。
初期の電卓では、利用可能な機能ごとにキーまたはキーの組み合わせが必要でした。HP -67には3つのシフトキー(金色の「f」、青色の「g」、黒色の「h」の接頭辞キー)がありましたが、競合するテキサス・インスツルメンツの電卓には2つ(2ndとINV)と50近いキー(TI-59には45)がありました。ヒューレット・パッカードは、1バイトのみの命令フォーマットに制約されていました。TI -59のプログラムのより柔軟なストレージフォーマットにより、より多くのキーを1つの命令に組み合わせることができました。最も長い命令では11回のキー操作が必要で、シフトキーを4回再利用していました。TI-59ではOp、キーの後に2桁の数字を使用してさらに40種類の機能にアクセスすることもできましたが、ユーザーはそれらのコードを覚えておく必要がありました。明らかに、電卓の命令を実行するためのより便利で柔軟な方法が必要でした。HP-41Cは比較的小さなキーボードで、シフトキーは1つだけでしたが、数百の機能を提供しました。キーに割り当てられていない関数はすべて、XEQキー(「エックスエーク・ティー」と発音し、「実行」を意味する)を介して呼び出すことができ、例えば階乗関数の場合は FACT のように、完全な文字列で指定できます。 XEQ
The calculator had a special user mode where the user could assign any function to any key if the default assignments provided by HP were not suited to a specific application. For this mode, the HP-41C came with blank keyboard templates; i.e. plastic covers with holes for the keys, so the user could annotate customized keys. Hewlett-Packard even sold a version of the calculator where hardly any keys had function names printed on them, meant for users who would be using the HP-41C for custom calculations only (thus not needing the standard key layout at all); this version of the calculator was colloquially known, within HP's Corvallis calculator team, as a "Blanknut" (because the development code name for the HP-41C's processor was known as the "coconut").[2]
Alphanumeric display also greatly eased editing programs, as functions were spelled out in full. Numeric-only calculators displayed programming steps as a list of numbers, each number generally mapped to a key on the keyboard, often via row and column coordinates. Encoding functions to the corresponding numeric codes, and vice versa, was left to the user, having to look up the function–code combinations in a reference guide. The busy programmer quickly learned most of the codes, but having to learn the codes intimidated the beginners. In addition to this, the user had to mentally keep function codes separate from numeric constants in the program listing.
The HP-41C displayed each character in a block consisting of 14 segments that could be turned on or off; a so-called fourteen segment display (similar to the much more common seven segment displays, which can be used to display digits only). The HP-41C used a liquid-crystal display instead of the ubiquitous LED displays of the era, to reduce power consumption.
While this allowed the display of uppercase letters, digits, and a few punctuation characters (the FOCAL character set), some designs needed to be twisted arbitrarily (e.g. to distinguish S from 5) and lowercase letters were unreadable (HP only provided display of lowercase letters a through e). HP's competitor Sharp, when introducing the PC-1211, used a dot matrix of 5×7 dots and displayed the characters in principle as we see them today on computer screens (and, in fact, many LCD screens on various embedded systems); this was later used by HP with the HP-71B handheld computer.
多くのユーザーがメモリ拡張のために4つのポートすべてを使用していたため、他のモジュールを挿入する余地がなくなっていました。そこでHPは、4倍のメモリ容量を持つクアッドメモリモジュールを設計し、利用可能な最大メモリ容量を提供するとともに、3つの空きポートを確保しました。HP -41CV(Vはローマ数字の5)はこのメモリモジュールをマザーボードに搭載し、HP-41Cの5倍のメモリ容量と4つの空きスロットを実現しました。
内部アーキテクチャの制約上、メモリの増設は不可能だったため、HPは二次記憶装置として機能する拡張メモリモジュールを設計した。このモジュール内のデータには直接アクセスできなかったが、メインメモリとの間でデータの転送は可能だった。電卓(およびユーザー)にとって、拡張メモリに格納されたデータは、現代のPC(ユーザー)におけるハードディスク上のファイルのような役割を果たしていた。
HP-41シリーズの最終モデルであるHP-41CXは、拡張メモリ、内蔵タイムモジュール、および拡張機能を備えていた。1983年に発売され、1990年に生産終了となった。
HP-41Cはキーストローク・プログラミングに対応しており、ユーザーが関心を持つ特定の課題を解決するために、一連のキーストロークを記憶して後で実行することができます。これらのキーストローク・プログラムは、キーボードで通常可能なあらゆる操作を実行できるだけでなく、条件分岐や無条件分岐、ループ命令も利用できるため、プログラムが反復的な操作を実行したり、意思決定を行ったりすることが可能です。
HP-41Cは間接アドレッシング(計算されたgoto)もサポートしており、これを用いることで汎用チューリングマシンを実装することが可能であるため、HP-41Cのプログラミングモデルはチューリング完全であると言える。間接アドレッシングとgotoの組み合わせは、容易にスパゲッティコードを生み出す原因となった。
プログラムのステップは1から番号が付けられますが、この番号付けには固有の意味はなく、プログラムの途中で新しい命令が追加または削除されると変更されます。特別なLBL命令を使用してラベルが作成され、ユーザーはそのラベルを参照してプログラムを起動したり、プログラム自体がGTO(無条件ジャンプ)命令またはXEQ(実行)命令のターゲットとして参照したりします。
以下は、1から69までの整数の階乗を計算するサンプルプログラムです(70!を計算するには、電卓の最大値である99より大きい指数が必要です)。整数はXレジスタに格納され、プログラム実行時に入力パラメータとして渡されます。このプログラムは2つのレジスタ、つまり約14バイトを使用します。
ステップ オペコード コメント
01 LBL'Fac ALPHA グローバルラベルにより、プログラムは 'XEQ Fac' から呼び出し可能になります 02 STO 00 入力パラメータXをレジスタ00に格納する03 1 Xに1を入力すると、スタックが 「持ち上げられる」か「押し込まれる」かがわかります。Y=入力パラメータ(現在は使用されていません) X=1 04 LBL 00 goto のローカルラベル 05 RCL 00 レジスタ00をXに呼び出し、スタックを持ち上げます。Z=入力パラメータ(現在は使用されていません) Y=1 または中間または最終の階乗 X = 入力パラメータ (N) から DSE コマンドの効果を引いた値 (-0, -1, ..., -(N-1)) 06 * XとYを乗算し、スタックを「ドロップ」または「ポップ」します。Y=入力パラメータ(使用しなくなりました) X=中間または最終階乗 07 DSE 00 レジスタ値が0の場合、レジスタ00をデクリメントし、次のコマンドをスキップします。 08 GTO 00 ローカルラベルへ移動 00 09 END プログラム終了 - X=最終階乗

41 シリーズで使用されるプログラミング言語は、それまでのすべてのプログラム可能な HP 電卓で使用されていたキーストローク プログラミング言語のバージョンですが、41 シリーズ モデルで利用可能なさまざまなテクノロジー、プログラミング関連の使いやすさと拡張性機能 (特にキーボード オーバーレイ、完全に再マッピング可能なキーボード、プログラムの保存と共有のための I/O 機能、および英数字のサポート) により、一部のユーザーは言語に新しい名前を提案し、その結果、「Forty One Calculator Language」の「FOCAL」が勝つ競争が行われました。[ 3 ] [ 4 ] [ 5 ] FOCAL という名前はすでにDigital Equipment Corporationによって使用されていたため、この名前は HP によって正式に採用されることはありませんでした。
HP-41C を中心に大規模なユーザー コミュニティが構築されました。世界中の愛好家が新しいプログラミング方法を見つけ、独自のソフトウェア (コード解読ゲーム[ 6 ]やHunt the Wumpus [ 7 ]のバージョンなど) や拡張モジュールを作成し、クロック速度を上げました (オーバークロックを参照)。これらの活動のほとんどは、PPC クラブとその会長である Richard J. Nelson によって調整されました。PPC クラブはPPC Journalを発行し、HP-41C 用に高度に最適化された低レベル プログラム集である PPC ROM を作成しました。
コミュニティの発見の一つは、FOCAL命令の一部がメモリに複数バイトとして格納されているため、プログラムエディタのバグを利用してキーに奇妙な機能を割り当てることが可能であるということだった。最も重要な機能はバイトジャンパーまたはバイトグラバーとして知られており、プログラミング命令を部分的に実行し、通常では許可されない方法で編集する手段だった。結果として得られる命令の使用は合成プログラミングと呼ばれた。
合成命令を用いることで、ユーザーはオペレーティングシステム用に予約されたメモリや特殊なステータスフラグにアクセスし、マシンを完全にロックするなど、非常に奇妙な操作を行うことができた。音を生成したり、文字を表示したり、オペレーティングシステムが公式にはサポートしていないアニメーションを作成したりすることも可能だった。システムフラグは、ブール演算の手法への低レベルなショートカットとしても利用された。ヒューレット・パッカードは合成プログラミングを公式にはサポートしていなかったが、それを阻止する措置も講じず、最終的にはユーザーグループ向けに内部ドキュメントを提供することさえあった。
BYTE誌は1980年12月号で、HP-41Cを「これまでで最も多機能なマシン」と評した。著者はHPのドキュメントを「業界最高レベル」と称賛し、この電卓はTI-59よりも「プログラミングとデバッグがはるかに簡単」だと報告した。英数字表示のおかげで「HP-41Cは前機種よりもプログラミングと使用がはるかに楽しい」と述べ、著者は「完全な」ポケットコンピュータではないかもしれないと結論付けた。[ 6 ]次の号では、別の著者が「HP-41Cは…コンピュータの境界線に最も近いプログラマブル電卓の一つである。コンピュータの専門用語で説明できるほど近い」と書き、カードリーダーのシンプルさと信頼性、HP-67およびHP-97ソフトウェアとの互換性を称賛した。このレビューでは、ガード桁 がないため計算の不正確さが批判された。 「世界で最も高性能な電卓が、7桁か8桁以上の小数点以下の精度で結果を出せないというのは、どこか不条理だ」[ 8 ]ヒューレット・パッカード社は、この不正確さは有限精度を持つあらゆるコンピュータの算術演算に内在するものだと反論した。[ 9 ]


初期のスペースシャトルミッション9回で使用されたHP-41Cが、ワシントンDCの国立航空宇宙博物館に展示されている。HP-41Cは、燃料消費による重心の変化を計算するなど、日常的だが必要な計算を実行する目的で、特別なハードウェア構成(ベルクロストリップの追加、試作タイムモジュール、より大きなビープ音、およびガス放出によって汚染を引き起こす可能性のある部品の除去)を備えて、初期のシャトルミッションに搭載された。HP-41Cはまた、メインコンピューターが故障した場合に備えて、再突入のための点火時間を決定するなど、通常はメインのオンボードコンピューターによって実行される計算を処理するようにプログラムされていた。[ 10 ] [ 11 ]
電卓の機能は、本体上部にモジュールを追加することで拡張できた。メモリを増設するためのスロットが4つ用意されており、工学、測量、物理学、数学、金融、ゲームなどを網羅したプログラムがプリインストールされたソリューションパックも追加できた。そのため、HP-41はユーザーの個人的なニーズに合わせてカスタマイズすることができた。ハードウェアの拡張機能としては、感熱式プリンター、磁気カードリーダー(コンバーターソフトウェアを介してHP-67と互換性あり)、バーコードリーダーなどがあった。
拡張モジュールによって、マシンに新しい命令を追加することもできます。41シリーズの標準数学関数セットは、当時のHP製電卓(特にHP-34CとHP-15C)の機能と比較すると、やや制限されていました。標準関数セットには、積分や平方根の計算機能がなく、行列や複素数もサポートされていませんでした。これらの追加機能は、拡張モジュールによって追加することができました。
インターフェースループと呼ばれる別のモジュールを使用すると、より多くの周辺機器を接続できました。例えば、大型プリンタ、マイクロカセットテープレコーダー、3 1/2インチフロッピーディスクドライブ、RS-232通信インターフェース、ビデオディスプレイインターフェースなどです。インターフェースループは、HP-71B、HP-75、HP-110コンピュータでも使用できました。

HP-41拡張モジュールを使用することで、HP-41プログラマブル電卓のユーザーは、その機能を拡張することができました。HP-41の背面には、最大4つの拡張モジュールを取り付けるスペースがありました。
HP-41は、拡張モジュールに対応していた同世代の電卓の中で唯一の機種ではなかった。TI -58とTI-59も、差し込み式のROMモジュールを備えていた。しかし、HP-41のモジュールははるかに汎用性が高かった。

メモリモジュールは電卓にRAMメインメモリを追加し、より多くのプログラミングステップやデータレジスタを可能にした。
オリジナルのHP-41Cは、それぞれ7バイトのレジスタが63個搭載されたメインメモリを備えていました。各レジスタには、数値、6文字の文字列、またはFOCAL言語で記述された最大7つのプログラムステップ(プログラムステップは可変バイト数を使用)を格納することができました。
各メモリモジュールは64個のレジスタを追加し、電卓には最大4個まで搭載できたため、合計319個のレジスタが使用可能になった。当時としては膨大な容量(2キロバイト強)であったが、拡張スロットはすべて使用されていた。ユーザーグループは、2つのメモリチップを1つのモジュールに統合する方法を見つけ出し、2つの拡張スロットを解放した。HPは、4つのメモリチップすべてを1つのスロットに搭載できるモジュール、いわゆるクアッドメモリモジュールを設計した。後のHP-41CVには、このクアッドモジュールが内蔵されていた。
ROMベースのアプリケーションモジュール「pac」は、最大4キロバイトの読み出し専用メモリ(一部は最大8キロバイトだったが、これらは単に同じ筐体内に2つの独立した4Kモジュールが搭載されていただけだった)を追加した。ほとんどのモジュールには、HP-41Cのプログラミング言語であるFOCALで記述された数十個のプログラムが格納されていた。
ROMモジュール内のプログラムは、広く普及しているXEQ関数を使用して、ユーザープログラムから呼び出すことができた。プログラムコードでは、XROMROMプログラムを呼び出す際にXEQは「 」と表記された。


カードリーダーは、2本の磁気ストライプが付いた小型の長方形プラスチックカードの読み書きができる装置だった。カードリーダーはメモリの内容を磁気カードにコピーし、後でそのデータをメモリに読み戻すことができた。
HP-41Cは不揮発性メモリ(電源を切ってもユーザープログラムやデータが消去されない)を搭載していたため、永続的な記憶装置は必ずしも必要ではなく、カードリーダーはオプションだった。
各カードには112バイトのストリップが2つ格納されており、16個のデータレジスタ、または最大112個のプログラムステップを保存できた。この容量制限のため、一般的なプログラムを保存するには5枚以上の磁気カードが必要だった。マシンの319個のメモリレジスタと内部データの完全なバックアップには、11枚の磁気カードが必要だった(各カードを2回挿入する必要があった)。
このカードリーダーは、旧型HP-67の磁気カードを読み取ることができた。HP-67とHP-41は同じプログラミングモデルとオペレーションスタックを共有しているため、HP-67のプログラムはHP-41Cの命令に変換された。ただし、一部の命令はHP-67固有のものであり、カードリーダーはHP-67をエミュレートするための追加命令を提供した。
磁気カードは書き込み禁止にすることができ、プログラムを非公開として保存することができた。一度読み込んだプログラムは、ソースコードを表示することができなかった。このため、磁気カードはプログラム配布の最適な選択肢となった。
しかし、電動モーターは電卓の電池に大きな負担をかけ、ブランクカードの価格はユーザーの財布にさらに大きな負担をかけた。
タイムモジュールにはリアルタイムクロックが搭載されました。このクロックにより、プログラム内で現実世界の時間を利用できるようになりました。ユーザーはアラームを設定し、それに基づいてユーザープログラムを呼び出すことができました。アラームによって電卓の電源をオンにすることができたため、日中の特定の時間に実行され、次のアラームが鳴るまで電源をオフにするプログラムを作成することが可能でした。HP-41は研究室でデータ収集装置としてよく使用されていたため、この機能により、監視対象機器から毎日特定の時間にデータを読み取ることができ、読み取りの合間に常に電源を入れておく必要がなくなり(バッテリー容量の節約にもつながりました)。
HP-41CXには時刻モジュールが内蔵されていた。
このプリンターは感熱紙のロールを使用して、最大24文字の行を印刷しました。感熱紙は青みがかった印刷物を生み出しましたが、過度の熱によって印刷が消えたり、紙全体が青くなったりすることがあり、やや不安定な点がありました。
このプリンタには、文字の形状をデザインしたり、個々のピクセルをオン/オフしたりできるグラフィック機能がいくつか備わっていた。しかし、バッファメモリにはグラフィックモードで一行全体を印刷するのに十分な情報を保持できず、行間隔を変更することもできなかったため、水平モードで連続したグラフィックを印刷することは不可能だった。それでも、このプリンタには、狭いプリンタ用紙に関数を垂直方向にグラフ化できる印刷ユーティリティがいくつか搭載されていた。
前述のプリンターの代わりに、このモジュールを使用して赤外線インターフェースを備えたサーマルプリンター、具体的にはHP 82240AおよびHP 82240Bを接続することができます。これにより、ケーブルを使用せずに外出先で印刷することが可能になります が、プリンター自体にもバッテリーが必要です。

光学式読み取り装置は、太いペンのような形状のバーコードリーダーで、HP独自の標準バーコードを読み取り、電卓のメモリに読み込むように設計されていました。HPのソリューションブックなどに印刷されたバーコードには、プログラム、数値または英字の定数、さらにはキー入力(キーボードを使わずに電卓を操作できる)などが含まれており、キーボードの故障が疑われる電卓の診断に役立ちました。
拡張機能モジュールには、キーへの機能のプログラムによる割り当て、メモリの再分割など、ユーザーから長らく要望されていた多くの機能が追加されました。
しかし、最も重要な新機能は拡張メモリの管理でした。HP-41Cは理論上最大1024個のレジスタにアクセスできましたが、初期設計ではメインメモリは319個のレジスタに制限されていました。拡張機能モジュールは、マシンの利用可能なアドレス空間に追加のメモリバンクを管理するための命令を追加しました。このメモリはユーザープログラムから直接アクセスできなかったため、プログラムまたはデータを含む名前付きファイルのセットとして扱われました。プログラムとデータレジスタは、拡張メモリとメインメモリ間でコピーでき、メインメモリでは通常どおりアクセスできました。
拡張メモリにはASCIIファイルも保存でき、基本的なテキストエディタも追加された。
拡張機能モジュールには、124個の拡張メモリレジスタが含まれていました。さらに拡張メモリモジュールを追加することで、レジスタ数を増やすことができました。HP-41CXには、拡張機能モジュールが標準装備されていました。

拡張メモリモジュールは、HP-41Cにメモリ容量を追加するものでした。ただし、拡張機能モジュールが搭載されているか、HP-41CXバージョンの電卓が必要でした。
各モジュールは238個の拡張メモリレジスタを追加しました。拡張メモリモジュールは最大2つまで挿入でき、合計で124 + 2*238 = 600個のレジスタになります。メインメモリの319個のレジスタに加えると、このメモリはマシンのアドレス指定可能な1024個のレジスタのほぼすべてをカバーし、合計919個のレジスタ、つまり6433バイトになります。
HP-ILに関するメイン記事をご覧ください。
HP-41CX がユーザーの間で根強い人気を博していることから、SwissMicros は2015 年にID-1クレジットカード (88 mm × 59 mm × 7 mm)とほぼ同じサイズの小型電卓を製造しました。DM41と名付けられたこの電卓は、 ARM Cortex-M0ベースのNXP LPC1115プロセッサ上のエミュレータで、拡張メモリとリアルタイムクロックを備えたオリジナルの HP-41CX ファームウェアを実行します。[ 12 ]オリジナルとは異なり、横長のフォームファクタ (Hewlett-Packard のVoyager シリーズでおなじみ) を採用しています。キー配列が変更され、ドットマトリクスディスプレイ、切り替え可能なクロック速度、およびSilicon Labs CP2102コンバータチップ[ 13 ]をベースにした USB ( Mini-B ) [ 14 ]シリアルインターフェースを備え、バックアップ目的で PC などとデータを交換したり、アプリケーション (PC ベースのエミュレータなど) と通信したり [ 13 ]、ファームウェアを更新したりできます。2015年12月、SwissMicros はHP Voyager シリーズの電卓とほぼ同じサイズの電卓であるDM41Lを発表しました。USB Mini-B コネクタは引き続き付属しています。2020 年 9 月以降、後継機種であるDM41Xも提供されており、機能範囲が拡張され、従来のデザインはクラシックなオリジナルバージョンに非常に近いものとなっています。
エミュレートされた HP-41 ハードウェアに基づくクローンに加えて、HP-41 シリーズの実際のハードウェア クローンが少なくとも 1 つ存在します。これは、Systemyde のMonte Dalrympleによって作成された HP41CL HP-41 シリーズ CPU ボード アップグレードです。 [ 15 ] HP41CL は、 FPGA上に実装されVerilog RTLでコーディングされた CPU を含む、HP-41 CPU ボード上のコンポーネントをゼロから再設計したものです。[ 16 ] HP41CL アップグレード ボードは、互換性のある CPU ボード コネクタと別の CPU ボードも備えた HP-41 を持っていることを前提として、HP-41 シリーズ CPU ボードのドロップ イン 交換品として作られています。[ 17 ]このアップグレードには、600 を超えるレジスタ拡張メモリと 320 を超えるプラグイン モジュール イメージが付属しています。[ 15 ]これは、HP41CL には 1024 ページを超える 4K ワードのフラッシュ メモリが内蔵されており、そのうち 500 ページ以上が HP-41 ソフトウェアでプリロードされていること、およびアップグレード ボードが 128 ページの RAM を提供し、カスタムMMUを介してユーザーが利用できるようになっているため可能になります。[ 15 ]さらに、HP41CL アップグレード ボードの「NEWT」 CPU 設計により「ターボ」モードが提供され、ユーザーは電卓を約 50 倍高速化できます。[ 15 ]また、HP41CL は HP-41 シリーズ バスとの完全な互換性を維持しているため、ほとんどのプラグイン モジュールは完全な下位互換性で引き続き使用できます。[ 15 ]さらに、Systemyde は HP-41 互換のタイマー モジュール クローンとGPS受信機インターフェース モジュールも製造しています。[ 18 ]さらに、空きモジュールスロットがあれば、オプションのRS-232全二重シリアルコネクタ(2.5mmステレオジャックの物理インターフェース付き)が利用可能です。[ 19 ]

ポケット電卓としては珍しく、1989年に生産が中止されてから30年以上経った今でもファンがいる。そのため、Windows、Mac OS、Unix系、Pocket PC、Palm OS、Apple iOS、Androidなど、さまざまなオペレーティングシステム用のエミュレータープログラムが利用可能である。[ 20 ]
HP Key Notes
の1982年6月~8月号では、
41
で使用されるキーストロークコードの「言語名を当てよう」コンテストが行われた
。FOCAL(
Forty
-
One
Calculator
Language
)
が
優勝作品だった。宣伝不足のため広く認知されてはいないが、標準的なキーストローク言語の一般的な名称となるはずだったし、今後そうなる可能性もある。[...]
[...] フォーティワン計算機言語 [...]
