PPC ROM

提供:Memorandum

< RPN電卓一覧へ戻る

HP-41シリーズのユーザコミュニティがハッキングにより創出した合成的プログラミング(Synthetic Programming)を、HP-41シリーズのユーザであれば誰でも実行できるようにするためのFOCALルーチンをまとめた同人モジュール。HP-41CXの拡張スロットに装着し、合成的プログラミングを実行する。1981年12月末にPPC ROM PROJECT名義で有償頒布された。PPCはPersonal Programming Centerの略で、1974年6月にRichard J. Nelsonが創設した、アメリカ・カリフォルニア州サンタアナを本拠とするHP製RPN関数電卓ユーザコミュニティの大手。モジュール背面に記されるパッケージ名称は〝PPC ROM〟。

その高性能と多機能っぷりから11年5ヶ月もの長期に渡り販売され続けたHP-41シリーズには、HPは勿論サードパーティからも多種多様なアプリケーションパックが市場に投入されたが、本モジュールはこれらと異なりアプリケーションソフトウェアではない。HP-41シリーズでプログラムを実行する際、内蔵ソフトウェアが抱えるバグを突いてOSを乗っ取り、ユーザがマニュアルの記載通りに使用していればアクセスできないはずの「OSだけが使用するメモリ空間」にアクセス、そこに記憶している内容をユーザの任意のものに書き換えることで、マニュアルに記載している関数や機能より高度かつ高機能に動かすための、122個のルーチン集である。よって、本モジュールはプログラミングをしないと機能せず、単体で挿してルーチンだけ実行しても何の意味も無い。液晶ディスプレイにNONEXISTENTと実行不能エラーを表示して停止するだけだ。

122個のルーチンにはHP-41シリーズ用数学・統計拡張モジュールHP-41シリーズ用財務・金融拡張モジュールを装着することで使用できる機能と類似するものも含まれるが、その大半は、通常のFOCALでは実行できない「あるレジスタ(またはスタック)に格納された数値/演算結果を、ユーザ(またはプログラマ)の任意の形式/場所で、閲覧/変換/移動/削除する」機能を提供するもので埋められている。各ルーチンには2レターコードが割り当てられており(例えば「高精度積分ルーチン」には積分:IntegrateからIG)、HP-41シリーズでプログラムを組むときや実行するときにプログラマがそれを指定することで本モジュールからルーチンを呼び出して適用する。現代なら差し詰め〝チートツール〟とでも言うのだろう。

同人モジュールなのでHP-41シリーズの製造元であるHPのサポートは皆無だが、電話帳にも喩えられるほど分厚い(492ページ)丁寧かつ詳細なマニュアルが附属しており、ルーチンの中身や使用法で迷うことは無い。実行できる内容も実行した結果も申し分無く、本モジュールを装着したHP-41CXは一介の関数電卓から高機能かつ多機能な数値解析システムへと進化する。

ebayをはじめとする中古市場やオークションサイトではHP-41シリーズ本体以上の高値で取引されるが、HP-41シリーズを使用するなら、それを押して購入すべきだろう。管理人は保有するHP-41CXの台数以上の個数を常に確保しており、4口ある拡張スロットの1口に本モジュールを装着している。

本モジュールのマニュアルの前言では、特長として下記が列挙されている。

  • 何百名ものユーザによってプログラムされ、文書化されている
  • 1バイトあたりの機能比が抜群
  • 非常に完全な技術的詳細
  • 追加ヘルプのための個人的な連絡先
  • ルーチンROM - アプリケーションプログラムROMではありません。これはプログラマのためのROMです
  • すべてのHP-41ユーザが合成的プログラミングのフルパワーを利用できる
  • オペレーティングシステムの拡張と強化プログラム
  • 最速の数値ソートルーチン
  • ブロック演算と行列演算の定義とプログラム化
  • 財務計算の機能拡張と精度向上
  • 称賛に値する積分プログラム
  • 大幅に拡張されたマルチプロット高解像度グラフィックプログラム
  • Viewフラグで設定したフラグの行列式の印刷
  • ブロックビューでのゼロデータのスキップ
  • XEルーチンによるHP-41の全ROMへのアクセス向上
  • IPルーチンとPSルーチンを使用したQUAD"ページ"切替によるメモリの拡張

頒布された経緯と背景 - バグから出た怒り

このような〝電卓向け〟の〝同人ソフトウェア〟というトリッキー極まりない際物が40年も前に頒布された経緯と背景は非常に興味深いため、以下に概略を記述する。

1970年代中盤になると、民生品向けに採用される程度に普及し始めた8ビットマイクロプロセッサを応用した製品として、個人でも購入できるコンピュータ=パーソナルコンピュータが製造・販売されるようになった。様々なメーカが市場に参入したが、成功と見做されるのは1977年に発売されたApple IIであろうか。しかし、Apple IIの当時の定価は最小構成でも1,298ドル(約354,000円)と高価で、購入できる層は非常に限定された。なによりOSやプログラミング環境を含むソフトウェアが未熟かつ高価だったことと、現代と比較すれば玩具同然のハードウェアスペックだったことも相俟って、多数に受け容れられる状況ではなかった。

HP-41シリーズの初代であるHP-41Cが295ドル(約65,000円)で発売された1979年当時、職務上必要であったり、趣味で欲したりするであろう、HPの本拠たるアメリカで年収五分位における中位年収層の平均年収は約50,000ドル=平均月収は約4,170ドル(約921,600円)であった。アメリカでの所得税等の非消費支出は収入の35%程度だそうなので、月収換算で約2,700ドル(約600,000円)になる。これほどの収入があれば個人でもHP-41Cが購入可能と考えられる。このような時代背景を考慮すると、電池で駆動する可搬型で、プログラミング環境と機能拡張のための外部インタフェースがオプションを購入せずとも実装済で、現代でも通用する精確な数値解析を含む演算が実行できる関数電卓として販売されたHP-41シリーズは、アッという間に多数のユーザを獲得し、熱狂させ、ハッキングを伴う同人活動が自然発生する必要条件を十分満たしていたと言えよう。

エンジニアや科学者に一大旋風を巻き起こしたHP-65の発売から約半年経った1974年6月に"HP-65 Users Club"として組織されたPPCは、HP-41シリーズが発売されたこの時期にハッキング活動量のピークを迎えていた。それまでもHP-41Cでは様々なバグの存在が指摘されていたが、このときPPCは、本来であればユーザが触れることすらできないはずの、マイクロプロセッサと内蔵ソフトウェアによる演算処理中の「OSだけが使用するメモリ空間」が、HP-41シリーズが内蔵している「FOCALプログラムやテキストファイルを作成・編集するエディタ機能」で直接覗ける(readできる)バグを発見した。

このバグを突いて、PPCの会員が「OSだけが使用するメモリ空間」を覗いたところ、HP-41シリーズは下記の挙動であると解析された。

HP-41シリーズに実装された命令には、ユーザが物理キーの押下かアルファベット文字列と  の組合せ入力で指示する演算命令(関数や機能)である「マクロな命令」と、それを内部で順番に実行するひとつひとつの手順(処理)である「ミクロな命令」がある。「ミクロな命令」は内蔵関数や機能で共通して使い回せる単位に分解されたものなので、必要な「ミクロな命令」を順番にひとつひとつ処理することで、内蔵されたりアプリケーションパックによって拡張されたりした多種多様な関数や機能である「マクロな命令」が実行される。つまり、「マクロな命令」は「ミクロな命令」の集合体である。HP-41シリーズで機能しているプログラミング言語の視点で整理すると、「ミクロな命令」と「マクロな命令」は低級言語(機械語)に、FOCAL高級言語に、それぞれ分類され、包含関係は「ミクロな命令」⊂「マクロな命令」⊂ FOCALとなる。

なぜこんな回りくどい実装なのか。その理由は、多種多様な関数や機能の中で同じ処理を共通化(ルーチン化)することで、可用性が広がるのと同時にソフトウェアが極小化でき、ひいては内蔵関数を増やせることが期待できるからだ。半導体が高価だった頃の常套手段である。HP-41シリーズでの実際の実装とは異なる代表例だが、乗算は被乗数を乗数回加算するものと定義されるので、マクロな命令である乗算  を、被乗数を乗数回だけ、ミクロな命令である加算  を繰り返す処理で実装する手法[1]がある。序説で言えば、最後の  を  で演算することになるが、どちらも結果は  が得られ同等である。即ち、乗算  という関数を実現するために、乗算専用の命令を別個で新規に作るのではなく、既存の加算  を再利用して同等の機能を実現している[2]。このように「実装する関数や機能をすべて個別に作り込む」のではなく「いくつか『使い勝手が良い』ミクロな命令だけを用意し、それらを再利用して組合せて新しい関数や機能を実現する」手法を積み重ねソフトウェアの規模を極力小さくすることで、ハードウェアとしてのROMの上限まで「『使い勝手が良い』ミクロな命令を組合せた新しい関数」を1個でも多く実装できる余地が生まれる[3]HP-35が、僅か7,680バイト(7.5kB)のROMに焼き込んだ、たった767個のミクロな命令を組合せて、四則演算     は当然として、度数法での三角関数    とその逆関数  、常用対数  、自然対数  とその逆関数  、逆数  、開平  、冪乗 [4]、円周率  を実装できたのは、こうした努力の賜物であり好例だろう。塵も積もれば山となる。般若経を解説する大智度論の教えそのままである。

ただし、容易に想像できるように、このような回りくどい形式で実装された関数や機能は、回りくどい演算手順で実行されることになるため、演算(処理)完了まで時間が掛かる。特に、電池で駆動させる可搬型関数電卓に実装できる程度の非力なマイクロプロセッサとメモリの組合せでは、演算桁数を多く(高精度に)設定すると、演算完了までの時間が秒単位で延びる。このことから、製品設計の最初で規定する「『使い勝手が良い』ミクロな命令」は、マイクロプロセッサやメモリなどハードウェアの仕様や実際の挙動と首っ引きして慎重に見極め取捨選択しなければならないことが判る。ソフトウェアとしては使い勝手が良くても、ハードウェアとしては煩雑な処理が強いられる命令を実装してしまうと、ただでさえ遅い演算(処理)完了時間が更に延びることになるため、ここはメーカの腕の見せ所だ。

実際のHP-41シリーズでは「スタックにプッシュされた数値の有無を確認する処理」、「スタックから数値をポップする処理」、「演算した結果をスタックXにプッシュする処理」、「スタックXにプッシュした数値を液晶ディスプレイに表示する処理」など、どの関数や機能でも実行される同じ処理が「ミクロな命令」として共通化されており、あらゆる関数を実行する際は、同じ「ミクロな命令」を呼び出す形となる。

HP-41シリーズでは、「ミクロな命令」は1個が1バイト(8ビット)でバイナリコード化されているため演算処理命令(バイト)と、「マクロな命令」はミクロな命令を処理する順番に並べたものであることから演算処理命令列(バイト列)と、それぞれ呼ばれる[5]

よって、HP-41シリーズの「OSだけが使用するメモリ空間」には、演算過程の中間値と、内蔵ソフトウェアから読み出されたバイト列が記憶されることになる。

例えば、ユーザが二項演算の加算を実行すべく、スタックXとスタックYに所望する数値をプッシュし  キーを押下したときを考える。ユーザには「スタックYとスタックXにプッシュした数値をポップし、加算を実行、その結果をスタックXに再度プッシュする」動作だけが見えているものの、「OSだけが使用するメモリ空間」にバイト列として記憶される内容は、「キーが押下されるのを待つ」バイトから始まり、 〜  の置数キーや ENTER キーが押下される度に「どのキーが押下されたか特定する」バイト、「そのキーに割り当てられている演算の種類や数値が何かを特定する」バイト、「入力された数値をスタックにプッシュする」バイト等、最初にユーザから何かしらキーインされた際に順番に処理すべきバイトが、内蔵ソフトウェアから処理する順番に呼び出され、バイト列として記憶される。マイクロプロセッサはバイト列を頭から順番に読み取って(デコードして)実行可能なプロセスに変換して実行することで、ユーザが加算したい数値がスタックXとスタックYにプッシュされる。

ここでユーザが加算  を押下すると、キーインされた関数や演算が加算  だと特定された後、「対象となる数値をスタックYとスタックXへ検索に行く」バイト、「検索した結果、スタックに数値が存在することを確認する」バイト、「スタックから数値をポップする」バイト、「数値を加算する」バイト、「演算結果をスタックXにプッシュする」バイト、「スタックXにプッシュした数値を液晶ディスプレイに表示する」バイト等、加算  を実行するために順番に処理すべきバイト列が、内蔵ソフトウェアから処理する順番に呼び出されて記憶され、先ほどと同様、マイクロプロセッサはそれを頭から順番にデコードして実行可能なプロセスに変換して実行、すべて走り切ることで、ようやく加算  が完了する。

つまり、HP-41シリーズで何かしらの関数や演算を実行するということは、スタックにプッシュした数値に対して、関数や演算ごとに内蔵ソフトウェアで設定されたバイト列を適用することである⸺このように解析されたのだ。

肝腎なのは、この挙動が加算  に限らずすべての関数や演算で同じであり、ユーザから指定された関数や演算によって内蔵ソフトウェアから呼び出されるバイト列だけが異なる、という点だ。これは、HP-41シリーズの演算処理手法や内容は、ミクロな命令であるバイトを組合せたマクロな命令であるバイト列で規定されており、内蔵関数やアプリケーションパックがもつ機能に応じてバイト列を変更することで、あらゆる演算を実行していることを意味している。

更に、この挙動は演算だけに留まらず、装置の管理もまったく同じである。装着されたバッテリの電圧を監視し閾値以下となったらBATと警告を表示することや、4口ある拡張スロットに対してアプリケーションパックや周辺機器の装着有無を監視し、もし装着を検知したら、それらとの入出力や制御をすることも、内蔵ソフトウェア(やアプリケーションパックや周辺機器)から読み出したバイト列によって実行している。

と、いうことは⸺

「『OSだけが使用するメモリ空間』がエディタで覗ける(readできる)のであれば、このメモリ空間が記憶している演算処理命令(バイト)をエディタで書き換える(writeする)ことも可能なのでは?」

「もし書き換えが可能なら、演算処理命令列(バイト列)を変更できることになるので、演算処理の手法や内容、周辺機器の動作も、ユーザの任意のものに変更できるのでは?」

こう想定したPPC会員は更にハッキングを続け、遂に任意のバイトを書き換える(writeする)手順を確立。いざバイト列を書き換えてみたところ、ここでもうひとつ重要な動作仕様を発見する。OSやマイクロプロセッサがバイト列の真正性を確認しないのだ。

言い換えると、OSやマイクロプロセッサが処理する演算処理命令の組合せ=演算処理命令列が、内蔵ソフトウェアには存在しない、通常では考えられないとんでもないものであっても、OSやマイクロプロセッサは何の疑いもせず実行してしまう(どのようなバイト列でも「処理しなければならない」ものとして動いている)ことが判ったのだ。これにより、HPがHP-41シリーズで規定した仕様では不可能とされていた演算も実行できることが確認された。

尤も、HP-41シリーズが発売された1980年初頭の時点では、この仕様は已むを得なかったと考える。所謂メインフレームをはじめとする大型コンピュータに実装している数値演算プロセッサやOSならまだしも、乾電池で動く関数電卓が内蔵する非力な4ビットマイクロプロセッサとOSに演算処理命令列の真正性を確認する仕様を持たせること自体が明らかにオーバースペックで、持たせた場合は演算動作が遅くなるうえに消費電力が増えバッテリの消費を早めることが目に見えているからだ。それ以前に、関数電卓が内蔵するソフトウェアを外部からハッキングして演算処理命令を書き換えられる事態なんぞHPは想定すらしておらず、したがって、演算処理命令列の真正性はHPの製品開発体制内で担保されると判断したのだろう。インターネットの普及とともに大なり小なり殆どのコンピュータがネットワークを介して相互に接続される現代だと、OSやマイクロプロセッサがこのような動作仕様だったとしたら「とんでもない大穴が開いてるぞ! 脆弱性だ!」と大騒ぎになり、クラッカーの恰好の餌食となるだろうが、ネットワーク接続とは無縁なこの当時のコンシューマ向けコンピュータ製品では妥当だ。

こうしてHP-41シリーズは、ユーザコミュニティの手により、HPが指定した演算処理手法や内容の縛りから(半ば強引に)解放され、ユーザが任意に演算処理を操ることができる自由度を得ることになった[6]。この「HPが指示した演算処理命令(バイト)をユーザが書き換えることで、HPが指定した演算処理手法や内容とは異なる、ユーザが実行させたい新たな演算処理命令列(バイト列)をメモリ内で合成する」手順が合成的プログラミングと呼ばれ、ヘヴィユーザの間で急速に広まっていく。これらを組合せると、HPがマニュアルで公開している関数や機能より遥かに高度かつ高機能な演算やプログラミングが可能だからだ。本モジュールのマニュアルでは端的に下記のように説明している。

A "synthetic instruction" is any combination of HP-41C bytes that can not be entered into a program or manually executed using normal keystrokes. Various techniques have been developed that enable the construction of arbitrary byte sequences in program memory. When the 41C processor encounters a byte sequence, it must process it, whether it is a normal combination or not. The results of executing non-standard byte combinations often turn out to have useful, practical applications.

(「合成命令」は、通常のキーストロークではプログラムに入力したり手動で実行したりできない、HP-41Cのバイトの任意の組合せです。プログラムメモリ内に任意のバイト列を構成する様々な技法が開発されました。41Cプロセッサは、バイト列を検出すると、それが通常の組合せであるかどうかにかかわらず処理しなければなりません。非標準なバイト列の組合せを実行した結果は、多くの場合、有用で実用的なアプリケーションになります。)

だが同時にこの事実は「HPは意図的にHP-41シリーズのポテンシャルを大幅に絞ってやがる!」とも受け取られた。

プログラマはふだんから、そのプログラミング環境に用意されたミクロな命令を自由自在に組合せ、マクロな命令を実行するソースコードを書くのが仕事だ。それまでは、HPの御仕着せで自由度が少ない高級言語であるFOCALでしかHP-41シリーズのソースコードが書けないと思っていたところ、挙動の解析結果から、HPが規定したマクロな命令も内部ではミクロな命令の組合せで動いていて、しかも、HPの手によるミクロな命令の組合せ方は詰めが甘く見え、更に言えば、これら低級言語で構成されたマクロな命令をユーザの任意に変更できたり、ユーザが新規に任意のマクロな命令を作成できることが判ったのだから、バグによる僥倖とはいえ、怒るのは当然だろう。

FOCALとして規定・公開しているマクロな命令を、プログラマが欲する粒度のミクロな命令の組合せで動かしているなら、なぜミクロな命令をそのままユーザに使わせてくれないんだ!」

高級言語だけではなく低級言語も使えるようにしたほうが、木目細かなプログラミングが可能なことは知ってるはずだろ!」

「それに、折角のミクロな命令をこんな勿体無い使い方してるんじゃぁ、OSもメモリも、己が持っているはずの能力を完全に出し切れないじゃないか!」

「我々プログラマなら、HPよりも上手くミクロな命令を使い熟せて、OSとメモリの潜在能力を使い切れるぞ!」
[7]

本モジュールのマニュアルにある『合成的プログラミング入門』という章は、怒気を含んだ下記の文面で締め括られている。

In closing, it should be reemphasized that there is nothing magic about synthetic programming, despite its strange history and "exotic" creation techniques. Synthetic instructions are just instructions that didn't happen to find their way into the Owner's Manual. Their use should be embraced by all serious HP-41C/V programmers.

(最後に、その奇妙な歴史と「風変わりな」作成技法にもかかわらず、合成的プログラミングには何の魔法も無いことを再度強調しておきます。合成命令は、偶々、マニュアルに掲載されなかったにすぎません。HP-41C/Vに本気のプログラマは全員使用すべきです。)

このような経緯で広まった合成的プログラミングを、製造・開発元であるHPではその実行を禁止せず、ユーザの自己責任とした。「AYOR (At Your Own Risk) であれば、どうぞご勝手に。その代わり、これを実行した結果どうなろうと、HPに文句を言わないでね」と見逃したのだ[8][9]。先述した通り、合成的プログラミングは「OSだけが使用するメモリ空間」にもアクセスするため、例えば、HP-41シリーズが関数電卓として正常に駆動し続けるうえで変更してはならないバイト列を誤って書き換えると、いとも簡単に完全にロックされ、キーボードからのキーインを含め外部から何の操作も受け付けない状態に陥る。こうなると、バッテリパックを抜去し、メモリに記憶した内容が飛び工場出荷時の状態に戻るまで五体投地を数時間続けた後、バッテリパックを再度装着、電源を再投入し、無事に工場出荷時の状態で起動してくれるのを願うしかないのだが、合成的プログラミングを実行する度にドキドキしながらこの操作を繰り返さねばならないようでは、とてもではないが危なっかしくて、PPC会員は勿論、他のマニアや一般ユーザが気軽に使用できない。

そこでPPCはHPにHP-41シリーズに関する仕様や内部文書を開示を要望、合成的プログラミングがより安全に行えるよう、手順やソースコードをブラッシュアップし、アプリケーションパックとしてまとめることを企図した。これが本モジュールの製造名義でもあるPPC ROM PROJECTだ。当然、HPも当初は出し渋ったのだが、最終的にはPPCの熱意に負けて開示した[10]。だからといってHPが合成的プログラミングにお墨付きを与えた訳ではなく[9]、40年以上経った現在でもAYORで実行するものだが、開示されたこと自体が本モジュールの開発成功に大きく寄与したのは言うまでもない。

本モジュールのマニュアルの前言に

It took two years and two months to complete. The first year was spent in mastering the HP-41 system, and while we were "first in line" for HP's announced Custom ROM Program, we waited until we could utilize the full power of the HP-41 to produce as complete a programmer's ROM as possible.

(完成までに2年2カ月を要しました。最初の1年間はHP-41システムを習得するのに費やし、HPが発表した「カスタムROMプログラム」の「列の先頭」に居ましたが、HP-41をフル活用して、可能な限り完全なプログラマ向けROMを作成できるようになるまで待ちました。)

とある通り、このプロジェクトは作業期間が2年を越える膨大なものとなった。さりとて同人モジュールなので、頒布する期日にデッドラインが設定されているわけではないため、慌てず焦らず急ぎつつ、納得するまでチューニングし万全を期すことを選択しているのは流石だ。HPとの受託製造契約はいの一番に締結したものの、実際に製造する日までもいの一番である必要は無い、と極めて冷静である。

また、一介のユーザコミュニティが同人モジュールを製造・頒布できたのは、HP-41シリーズが爆発的に売れたことから様々なサードパーティがHPに対しHP-41シリーズ向けのアプリケーションソフトをリリースすることを希望したことを受け、HPがHP-41シリーズ向けのアプリケーションソフト用のカスタムROMを受託製造する「カスタムROMプログラム」を始めたからであると明記されているのも興味深い。

この「カスタムROMプログラム」を申し込んだサードパーティはかなりの数に上ったらしく、HPは途中でカスタムROMの受託製造費を大幅に値下げした[11]。カスタムROMの種類が多くとも、モジュールとしての製造総数が多ければ、製造コストが当初の見積りほど掛からなかいことが判ったからだ。本モジュールも製造時にHPから値下げを告げられたことから出資1口について2セット(2個のROM、2冊のポケットガイド、2冊の製本版マニュアル、2冊のルーズリーフ版マニュアル)頒布するよう方針を転換、完成した本モジュールを出資者へ送付する際は、PPCを主宰するRichard J. Nelsonが認めた

Because of the economics of numbers and a price reduction that HP made after the project started you actually have two ROMs and two sets of manuals. I believe that it is most fitting that if you "dispose" of one of your ROM's that you do so to another PPC Member, or to a person who joins PPC.

(規模の経済性と、プロジェクト開始後のHPの値下げにより、貴殿には2個のROMと2セットのマニュアルをお届けします。もし貴殿が、お届けしたROMのうち1個を「処分」するなら、他のPPC会員か、PPCに新規入会した方にするのが、最も適切であると考えます。)

という手紙も同梱した。全出資者に半額相当を返金する手間や送金手数料、PPCへの新規加入者を増やす施策などを考えると、当初の出資金額に見合う2セットを頒布して、1セットは受領した出資者の自由にしたほうが手っ取り早いと考えたのだろう。いかにも大量生産・大量消費を地で行くアメリカらしいマッチョなやり方である。

ちなみに、この手紙には

Your ROM's are serialized. The complete list of serial numbers (1A, 1B thru 2500A, 2500B)[12] are in the Manual in Appendix F on page 135. Serial numbers 1997A and 1997B "disappeared" in the packing process. If you ever see either of these ROM's let me know.

(貴殿のROMにはシリアル番号が付与されています。シリアル番号の完全なリスト(1A, 1B から 2500A, 2500B)[12]はマニュアル135ページの付録Fに掲載しています。シリアル番号1997Aと1997Bは梱包の過程で「消えて」しまいました。もしこれらのROMを見かけたら教えてください。)

ともあるので、本モジュールの製造に1口あたり95ドル(約22,000円)出資[13]した会員が約2,500名[14]居り、その全員に、数字は同じだが末尾だけAとBに分かれたROMを送付したことが判る。よって、本モジュールは少なくとも5,000個製造された[15]ことになる。同人ソフトウェアとしては異例の大量生産だ。裏を返せば、自分たちで計画した同人ソフトウェアの製造に対して2,500名近い会員から賛同を得られ総額237,500ドル(約5,230万円)もの資金を集めることができた当時のPPCは、相当な動員力と資金力を有する巨大なユーザコミュニティだったということになる。2020年代ではよく見掛ける、クラウドファウンティングで資金を集めてニッチなモノの開発・製造するプロジェクトと比較しても引けを取らないどころか凌駕している規模である。

HPとユーザコミュニティは「ズブズブの〝共犯関係〟」?

ここまでの経緯を追うと、大きな謎がひとつ残される。HPのバグ対応の奇妙さだ。

HP-35での手痛い実例を出すまでもなく、これまでHPは、内蔵ソフトウェアにバグが存在していることが判れば、可及的速やかにソフトウェアからそのバグを取り除き、その後の生産ではバグを取り除いたソフトウェアを焼き込んだROMに差し替える対応をしてきた[16]。これはユーザから指摘されたバグでも同様である。

だが、頒布開始が1981年12月末である本モジュールは、1979年7月1日発売のHP-41C1980年12月15日発売のHP-41CVは勿論、1983年10月1日発売のHP-41CXでも問題なく同等に機能する。即ち、HPは、HP-41シリーズが抱えるエディタ機能のバグを故意に取り除かず存置することで、すべてのHP-41シリーズで本モジュールが正常に機能するよう対応しているかに見えるのだ。

ではなぜHPはこのバグを取り除かず存置したのか。当時のHPが「折角『カスタムROMプログラム』を利用してまで製造した同人モジュールを『無かったこと』にするのは可哀想だし、ここまで育ったユーザコミュニティを大事にしたい」と考えたのか、「このバグを取り除いたソフトウェアを焼き込んだROMを実装したHP-41シリーズが市中に出回ることで、本モジュールが使える筐体と使えない筐体が併存すると判ったときの、ユーザコミュニティの対応が面倒だ」と考えたのか。はたまた逆に「ユーザコミュニティからの要請で、このモジュールが今後も多くのユーザで使えるよう、このバグだけは存置することに決めた」のか。

この謎が管理人の頭の片隅で深い眠りに就いていたあるとき、興味深い公式文書に出くわした。1949年〜1998年にHPが自社の技術開発情報をまとめ月刊誌として公開していたHP Journal1981年1月号にはHP 82153Aに関する技術解説記事が掲載されているが、その末尾にある謝辞に、当時のPPCがHP 82153Aの製品化前のテストに協力した旨が記されている[17]のを見つけたのだ。この記述は、世間一般のユーザには非公開の機密情報であろう、新しく発売されるHP-41シリーズ専用の周辺機器に関する内容を、大手のユーザコミュニティであるPPCにだけは事前に漏洩するどころか、あまつさえ、所属している有力な一部の会員にその製品のテスタとして参加を求め意見を聴取していたことを意味する。

これを素直な人が見たなら「へぇ〜。えらくオープンだな。数多居るHP電卓ユーザの代表として呼んだのだろけど、それぐらい、当時のHPとユーザコミュニティ(特にPPC)の間には信頼関係が成立していたのね」と受け取るのだろうが、俗世の濁りに染まった管理人の目には「おいおい、想像以上にズブズブの〝共犯関係〟じゃねーか。それに、協力を求めたのが『個人』じゃなくて『自社に好意を持っているユーザコミュニティ』というのもイヤラシイ。当然、事前に何かしらの契約書は交わすのだろうけど、そんなことをしなくとも、機密情報を集団に共有させれば自律的に会員相互が機密を漏洩させないか監視し合うだろうことを解ってやっている」と映り、頭の中で熟睡していた謎を叩き起こした。

有り体に言えば、この文書を目の当たりにしたことで、このバグを取り除かず存置した理由として先ほど挙げたいくつかのうち「ユーザコミュニティからの要請を受けて、このバグだけは存置することに決めた」線が濃く見えるようになってしまったのだ。

なにしろ、ユーザコミュニティに出入りするほどではない世間一般のHP-41シリーズユーザがマニュアルの記述に従って操作する限り、このバグを踏み抜くことは無いうえ、このバグが存在したとて、マニュアルに記載している仕様通りの演算が実行できることは明確になっている。つまり、このバグは世間一般のユーザに何の影響も無い、所謂 harmless issue (存在は認識しているが、存在していても無害なバグ)と言えるものだ。

よって、これまでHPが行ってきたバグ対応の過程を把握しているユーザコミュニティが、HPの機先を制して「我々は今後も、HP-41シリーズで合成的プログラミングを実行したいし、継続して本モジュールを使用できる環境を維持・拡大したいから、このバグは取り除かず、そのまま存置して欲しい」と要望、それを受諾したHPがこのバグを harmless issue に分類し、世間一般のユーザには勿論HP社内の他部署や上層部にもこのように説明もしくは説得することで、「このバグは取り除かず存置する」と決定するのは十分可能だと考えられる。更に、harmless issue を取り除くときに新しいバグを作り込んでしまう(ことで結果的に改修費用が増大する)可能性や、そもそも harmless issue を取り除くこと自体の費用対効果が薄い[18]ことも付言すれば、この説明や説得を補強できる。

謂わば、HPとユーザコミュニティの、ズブズブの〝共犯関係〟が、HP-41シリーズからこのバグを取り除かず存置させ続けたのではないだろうか。

元より、このバグが存外に根深く、下手するとソフトウェアを最初から作り直さなければならないぐらい、簡単に取り除けない類のものだった可能性も考えられるが、客観的な事実として、HP-41Cで指摘されたエディタ機能以外の13個のバグ[19]HP-41CXでは全て取り除かれていることから、その可能性は低いだろうことも、この線をより太くさせた。

本モジュールが5,000個以上も製造され[15]ユーザコミュニティの手に渡ったことがHPの対応を変えさせたのか、ユーザコミュニティとの〝共犯関係〟がこのバグを取り除かせなかったのか⸺謎は深まるばかり[20]だが、HPのRPN関数電卓ラインナップから去るその時まで、HP-41シリーズはこのバグを抱えたまま生産され続けたのは事実である。そのお陰で、現在流通しているすべてのHP-41シリーズで本モジュールが使用できるのだ。

時代の20年先を行っていたオープンソースプロジェクト

本モジュール開発当時の様子はマニュアルの前言に色濃く表れている。

Because of the nature of the PPC ROM PROJECT, this manual is somewhat unusual. This manual is the effort of over one hundred users who worked directly on it, and many hundreds of others who indirectly contributed to its completion.

(PPC ROM PROJECTの性質上、このマニュアルはやや特殊です。このマニュアルは、直接取り組んだ100名以上のユーザと、間接的に完成に貢献した数百名ものユーザの、努力の結晶です。)
This project is unique in the history of software projects. IBM and other large corporations have assigned multi-tens of programmers to a software project, but never before have over 100 programmers worked so long and so hard on a project--without compensation of any kind. The PPC ROM PROJECT is a community project in the true sense of the word. The project has always been completely public with month by month reports openly published for all to study and respond to.

(このプロジェクトは、ソフトウェアプロジェクトの歴史の中でも特異なものです。IBMをはじめとする大企業は何十名ものプログラマをひとつのソフトウェアプロジェクトに従事させたことはありますが、100名以上のプログラマが、これほど長時間、これほど懸命に、如何なる報酬も無しにプロジェクトに取り組んだことは、かつてありませんでした。PPC ROM PROJECTは本当の意味でのコミュニティプロジェクトです。​このプロジェクトは月例報告書によって常に完全に公開されており、すべての人が研究・対応できるようになっています。)

驚くことに、この内容は、1998年2月に成立したOpen Source Initiativeが提唱するオープンソースプロジェクトの精神そのままである。このような活動が1979年8月[21]に勃興した事実は、当時HP-41シリーズの登場がRPN関数電卓コミュニティでいかに衝撃的だったかを物語る証左だろう。それほどまでに当時のHP-41シリーズユーザは熱心かつ真剣に向き合っており、また、向き合わせるだけの魅力があったということだ。これには管理人も心から同意する。

また、

We believe in true personal computing and that a so-called higher level language is not always the path to greater computing power. We want to manage our always-too-small memory in ways we think are best. We prefer a flexible operating system that allows us to control our programming environment, and we want a well thought out operating system that can be altered if we wish.

(私たちは真のパーソナルコンピューティングを信じており、所謂高級言語が、より大きな演算能力への道とは限らないと考えています。私たちは、いつも小さ過ぎるメモリを、最善と考える方法で管理したいのです。私たちは、プログラミング環境を制御できる柔軟なオペレーティングシステムを好みますし、必要に応じて変更できる、よく考えられたオペレーティングシステムを使いたいのです。)
The routines in the PPC ROM express these interests and concerns. Much of the work that went into the ROM is original and makes a contribution to the Art[22].

(PPC ROMに焼き込まれたルーチンは、こういったことに関心と興味を示しています。これらルーチンの多くはオリジナルであり、プログラム術[22]へ貢献します。)

の二文には、HP-41シリーズのソフトウェア開発者に対する猛烈な怒りと強烈なアンチテーゼが込められていて清々しい。

「あなたがたが作った高級言語であるFOCALとOSでは、ハードウェアの能力を十分に生かし切れない。FOCALを動かすための低級言語であるバイトを適切に組み直すだけで、ここまで高機能な演算とプログラミングが可能であることを、我々は証明した。もしあなたがたがHP-41シリーズでの『ユーザが実行できるプログラミング環境』としてFOCAL程度のものを提示すればユーザが納得すると考えているなら、それはおかしい。ユーザはそこまで馬鹿ではない」
「我々が作ったルーチンは、ユーザによるプログラミングに使われたがっていることを確信できる。翻って、あなたがたが作ったFOCALのルーチンは、そこまでユーザに求められているだろうか?」

そう述べているのと同義だからだ。凄まじいまでのhacker spiritsの発露である。

ユーザコミュニティの熱気が作らせた

現代ではまったく見られなくなったが、1980年代前半ぐらいまで、日本で販売されていた電化製品の取扱説明書には、その製品の回路図が記載されており、回路図だけを集めた書籍も販売されていた。半導体の集積回路化がそこまで進んでおらず、ほぼ全てがディスクリートで設計・構成されていたため、故障して修理を依頼するとフィールドエンジニアが現地に足を運び、その場で取説に記載された回路図を読んで故障箇所を特定、異常と判定した部品を交換して復旧させるために必要だというのもあるが、電化製品の生命線である回路図が不特定多数へ公開されることにそこまで神経質になる必要もなかった、長閑な時代だったからだ。管理人も小学生だったころに家にあったブラウン管アナログカラーテレビのディスクリート回路図に魅せられ、故障時には家に呼び付けられた電器屋のオヤジがそれを読み、壊れたトランジスタを特定後、半田鏝で剥がして交換し復旧させているのを目撃している。

アメリカでも同じ状況だったかまでは調べ切れてないが、HPは電化製品を含む電気機器を対象とした測定機の開発・製造が出自なので、ユーザコミュニティの熱意に負けて詳細仕様の公開に踏み切った判断は理解できる。「マニアは中身の詳細を知りたいだろう」と。その裏には、アメリカという国の根幹に常に流れるDIY精神があるとはいえ、HP-41シリーズの部品はほぼ全てが集積回路化され、それらは市販されていなかった[23]ので、1980年代であれば「製品仕様を公開したとて容易に真似できるものではない」うえ「公開することでユーザの裾野が更に広がり、それが拡販にも繋がる」という自信あってこその対応だという想像もつく。

これが2020年代である現代となると、ライトユーザの安価な設備投資でも、ROMに焼かれたソフトウェアを吸い出せたり、空のROMにソフトウェアを書き込めたり、マイクロプロセッサや液晶ディスプレイやキーボード用スイッチが安価で入手できることから、「製品のクローンを安易に作成できてしまう」可能性が高い。もし現代のHPがユーザコミュニティから同様の要請を食らったら、特許や実用新案が引っ掛かったり、競合他社に剽窃される可能性を考えたりで、仕様や回路図を公開せず[24]門前払いするだろう。

このような世情の変化を踏まえると、同人とはいえ本モジュールが頒布されるまでに至った事実は、40年前という時間軸を考慮しても非常に画期的かつ重要な出来事であったかが解る。〝電卓向け〟の〝同人ソフトウェア〟なんぞ、後にも先にも、本モジュール以外に見たことが無い。当時のユーザコミュニティが持つ熱気が作らせたのだろう。とりもなおさず、この出来事から、当時のHP-41シリーズのユーザコミュニティが如何に広大だったかを窺い知ることもできる。

ちなみに、1979年の日本では、それまで部品を個別の集めるか半完成品のキットでしか売られておらず「マイクロコンピュータ(マイコン)」と呼ばれていたところに、日本電気株式会社から初めて完成品の「パーソナルコンピュータ(パソコン)」がPC-8001と名付けられ本体価格168,000円で発売されている。この年の大卒平均初任給は109,500円だったので、PC-8001は勿論、HP-41Cですら高価だと感じたことだろう。日本でのHP-41シリーズの販売実績は公開されておらず不明だが、HP製品の日本での総販売代理店でありHPと横河電機製作所の合弁企業であった横河・ヒューレット・パッカード株式会社(YHP)は、HP-41シリーズの国内販売にあたり500ページ超のマニュアルを日本語に翻訳してから販売していることから、それなりに売れてはいたようだが。

脚注

  1. 使用するマイクロプロセッサとプログラミング言語に依存するものの、乗算させる処理で、プログラミング言語に規定された乗算関数を使用せず、被乗数を乗数回加算する形で実装すると、コンパイル後のバイナリコードが小さくなるうえ処理速度が向上することが結構ある。マイクロプロセッサやプログラミング言語では、基本的な機能である加算と減算は単純な処理だが、その応用である乗算と除算は複雑な処理で、かつ、処理完了までのステップ数が多くなることが理由だ。コンパイル後のバイナリコードを焼き付けるROMの容量が非常に小さいハードウェア環境や、ミリ秒どころかマイクロ秒単位で演算が完了すること自体がミッションの成否を分けるため全体の処理性能をカリカリにチューンしなければならない宇宙開発(特に宇宙機)等では現代でも使われる手法である。
  2. 1976年3月に発売され現在も製造され続けている超有名8ビットマイクロプロセッサZ80は、実行できる算術演算命令が加算ADDと減算SUBのみである。したがって、Z80に乗算や除算をさせる場合はソフトウェアで実装するしかないのだが、Z80がデフォルトでアクセスできるメモリ空間はROMとRAMを合わせて64kB(65,536バイト)と狭小だ。よって、Z80のソフトウェアはこのような書き方のオンパレードとなる。乗算は本文と同じ実装が殆ど、除算は被除数から除数を減算できた回数(と、それによって生じた剰余)を得る実装が基本だ。ちなみに222関数を実装したHP-41CXの内蔵ソフトウェアは20kB(20,480バイト)のROMに焼き込まれ、RAMは2,233バイト(1レジスタが7バイトで319レジスタ)=2kBちょっとである。
  3. ソフトウェアのダイエットと言えば、管理人の世代は漏れなく購入することが義務(?)であろうドラゴンクエストシリーズの第1作「ドラゴンクエスト」が、僅か64kBのROMにプログラム・キャラクタ・音楽のすべてを収めるべく、ゲーム内で使う片仮名を20個に制限したことが有名だ。1986年5月27日発売のソフトウェアですらこのような状況だったということは、それ以前に発売されたHP-41シリーズのソフトウェア開発では、プログラム関数電卓として使い勝手が良く、かつ、ソフトウェアのダイエットに繋がるミクロな命令を、如何に設定するかが何より重要な課題だったかが判る。ちなみにドラゴンクエストで使える片仮名は「イ・カ・キ・コ・シ・ス・タ・ト・ヘ・ホ・マ・ミ・ム・メ・ラ・リ・ル・レ・ロ・ン」で、これらと濁点「゛」と音引き「ー」の組合せが許容された。なお、平仮名は全文字が許容されたようだ。
  4. 歴代のHP製RPN関数電卓でHP-35だけ、冪乗のスタック配置が逆である。例えば  を演算させる場合、他機種のように  であれば  ENTER   とRPNらしく素直に入力できるが、本機では  ENTER   と羃指数を先に入力する必要がある。これは、本機の命令数の制約から常用対数  の逆関数である10の冪乗  の実装が見送られたため、スタックXの真数を演算する際にキーイン数が最小となる    で済むよう、敢えて入れ替えたといわれている。
  5. For the most part, instruction codes are not handled by the CPU as individual binary bits, but are grouped to gether into groups of 8 bits called "bytes". A byte is the smallest unit of program code over which the user has keyboard control. Many 41C instructions are represented as a single byte, and the remainder as multibyte groups; none are coded with fewer than 8 bits. (殆どの場合、CPUは命令コードを個々のバイナリビットとして扱わず、「バイト」と呼ばれる8ビットのグループにグループ化して扱います。バイトはユーザがキーボードで制御できるプログラムコードの最小単位です。多くの41C命令は1バイトで表現され、残りは複数バイトのグループで表現されます。8ビット未満でコード化されたものは有りません。)
  6. Richard J. Nelsonによるマニュアルの前言にはIt is true that PPC members have mastered the HP-41 all by themselves. It is also true, however, that while those wild and weird synthetic programmers were exploring the 41 system, HP was quietly cheering and applauding their effort. (PPC会員がHP-41を独力でマスタしたのは事実です。しかし、このような荒唐無稽で奇妙な合成プログラマたちが41のシステムを探求している間、HPは静かに彼らの努力を応援し、拍手を送っていたこともまた事実です。) とある。どうやら当時のHPはユーザコミュニティによるハッキングを、疎ましいので止めさせたい行為ではなく、自社のソフトウェアを無償でデバッグしてくれる有り難い行為だと考えていたようだ。40年以上前のHPとユーザコミュニティの関係性が解る、貴重な記述である。
  7. HPが指定した演算処理手法や内容が手緩く、実装次第ではHP-41シリーズ用数学・統計拡張モジュールHP-41シリーズ用財務・金融拡張モジュールを購入せずとも大抵の演算が可能だと判ったのだから、ある意味で当然の反応と言えよう。ただ、演算時間から見ると痛し痒しである。例えば、数多ある円周率の近似値を得る公式の1つとして有名なライプニッツの公式の演算で比較する。本文でも触れた、本モジュールに収録されている高精度積分ルーチンIGロンベルグ法による数値解析だが、演算桁数を小数点第4位までに設定すると49秒掛かって3.1416+00を、第6位までに設定すると89秒掛かって3.141593+00を、それぞれ出力することが、本モジュールのマニュアルに明記されている。これに対し、HP-41シリーズ用数学・統計拡張モジュールが内蔵している数値積分INTG合成シンプソン⅓法による数値解析だが、演算時間と演算結果を実機で確認すると、で演算すると9秒3.141592614が、で演算すると26秒3.141592653が、それぞれ得られる。両者を比較すると、演算精度はどちらも問題無いが、演算速度はHP-41シリーズ用数学・統計拡張モジュールが倍以上速い。即ち、演算精度と演算時間を天秤にかけた結果、当時のHPは「『演算時間が長い』のはユーザにデメリットで、マーケティングからも製品のメリットを覆い隠してしまう」と、数値積分をアプリケーションパックとして切り出す判断をしたと考えられる。だが、プログラマからすれば「単体でそのポテンシャルが有るなら、演算時間が多少長くても、高精度な演算結果が得られる機能が欲しい!」と考えるのも解る。マーケティングとエンジニアリングでどうバランスするか、難しい話である。
  8. Richard J. Nelsonはマニュアルの前言でAlso, there was no reason to restrict these instructions from being placed into the ROM--at PPC's risk, of course. (また、これらの命令をROMに入れることを制限する理由はありません⸺勿論、PPCのリスクで。) と、本モジュールの製造と使用の危険性はPPCが負っていたことを述べている。
  9. 9.0 9.1 Richard J. Nelsonもマニュアルの前言でIt is not possible for HP to endorse or approve synthetic instructions. (HPが合成的命令を推奨したり承認したりすることは有り得ません。)と強い調子で明記している。
  10. Richard J. Nelsonはマニュアルの前言でFormally, informally, officially, and unofficially, HP personal assisted where they could. (公式、非公式、正式、略式に、HPは可能な範囲で個人的に支援しました。) と謝意を述べている。
  11. HP-41CXで記載したように、HP-41Cを発売した当初のHP純正アプリケーションパックの定価は75ドルか45ドルであったところ、1980年12月15日にHP-41CVを発売したと同時に、75ドルのものは45ドルに、45ドルのものは30ドルに、それぞれ一斉に値下げしたが、このとき同時に「カスタムROMプログラム」による受託製造費も値下げした。アプリケーションパックがバカ売れしていたところに「カスタムROMプログラム」の受注も加わったことでモジュールとしての製造総数が積み増しされ、結果として、製造コストが半減したからだ。「規模の経済」(和製英語でいうスケールメリット)を地で行く好例であろう。
  12. 12.0 12.1 管理人は13個のPPC ROMを所有しているが、この形式のシリアル番号が刻まれたものは8個(末尾Aが6個、末尾Bが2個)ある。即ち、それ以外の5個は追加で製造されたものとなる。
  13. この金額はかなり高い。HP-41CXで記載したように、HP-41Cを発売した当初のHP純正アプリケーションパックの定価は75ドルか45ドルだったが、1980年12月15日にHP-41CVを発売したと同時に、75ドルのものは45ドルに、45ドルのものは30ドルに、それぞれ一斉に値下げしている。本モジュールの製造・販売が企画された1979年8月時点ではHP-41CVが発売されてないため、このときユーザが持っていたであろうアプリケーションパックに対する相場感は75ドルか45ドルだったはずだ。よって、出資額は相場より20〜50ドル高いことになる。ユーザコミュニティだけでの話とはいえ、それでも2,500口が埋まったのだから、HP-41シリーズに対する当時の熱狂ぶりと期待感の大きさが判る。
  14. マニュアルの該当ページを確認すると、1名義で2口・3口・4口・5口と出資した会員が結構居ることが判る。よって、出資者の総数は2,500名を割る。最多は1名義で10口。7口出資した名義もある。
  15. 15.0 15.1 ここに依ると、最初に製造した5,000個は1981年末に全出資者へ送付している。その後、本モジュールが評判となり、出資しなかったことを後悔したPPC会員が続出したため、PPCは追加での製造を決断。PPCは概ね250個単位でHPに発注し、1982年末までにトータルで5,600〜5,650個を(即ち、1年間で600〜650個を追加で)製造・送付している。なお、1983年以降も追加製造は続いており、製造総数は詳らかでない。
  16. 真のHP製RPN関数電卓マニアは「ある機種で内蔵ソフトウェアROMが差し替えられたことが判っている場合、すべてのROMバージョンの本体を所有する」のが大前提で、「HP-41シリーズHP-71のアプリケーションパックでROMのバージョン違いが存在する場合も、すべてのROMバージョンを揃える」とのこと。とてもではないが、管理人はHP-35以外の機種でそこまでするつもりはない。そもそも重大なバグを抱えた内蔵ソフトウェアROMを実装した本体は殆ど市場に出回らない=摘出されたバグは即改修され入手困難=市場に出ると異常に高値で取引されることもある。稀に、その貴重性をあまり理解してないセラーが「バグばかりだから」と極端な安値で出品すると争奪戦になる。
    管理人も、13個のバグをすべて含む最初期のソフトウェアROMが実装された、1979年第32週(8月5日〜11日)製造のHP-41Cを所有しているが、これは偶々eBayに「170ドルで即落札」という異常な安値で出品されていたのを見つけ、その場で応札したからだ。このようにRPN関数電卓マニアは、日々のeBay巡回が欠かせない。
  17. 14ページにSpecial thanks goes to the PPC (a user's group) for help in testing the product, especially to Jake Schwartz for suggestions leading to the paper keyboard layout. (製品のテストに協力してくれたPPC(ユーザグループ)、特に紙のキーボードの配置につながる提案をしてくれたJake Schwartzに特別な感謝を捧げます。)とある。「紙のキーボード」とは、各物理キー毎に振られたバーコードを本体の外形に合わせて配置し印刷したもので、Jake Schwartzは2023年現在もPPCに所属する超古参会員だ。テストに参加していたであろう1980年末頃はHP-41シリーズのソフトウェアの全貌を把握し終えており本モジュールの開発で忙しかっただろうが、一般ユーザは決して触れることができない、製品化される前の試供品のテストに参加できたのだから、ユーザコミュニティとしても鼻高々だっただろう。
  18. このような harmless issue への対応は、費用対効果を何よりも重視する外資系企業では特にありがちな、極めて現実的な内容だ。管理人も日々頻繁に見掛ける。稀に、他の重要なバグと一緒に改修されることもあるが、やっつけ仕事なので、正しく改修されていないこともよく経験する。
  19. HP-41CVのROMはHP-41Cまったく同じである。
  20. もし当時の関係者にインタビューできたら、HPとユーザコミュニティでは公式見解が異なるのではないだろうか。
  21. Richard J. Nelsonはマニュアルの前言にIn the August, 1979, FPC JOURNAL (V6N5P27c), I proposed that we take on a routines ROM. In late August of 1979 I sent a formal letter to Hewlett-Packard which stated in part: "PPC would like to purchase an 8K HP-41C Custom ROM. Please consider this as a formal "Letter of Intent". Enclosed is a check (PPC #999) for $1,000.00 as a deposit." (1979年8月のFPC JOURNAL (V6N5P27c)で、私はルーチンROMの開発を提案しました。1979年8月下旬、私はHPに次の内容を認めた正式な文書を送付しました:「PPCはHP-41Cの8kBカスタムROMの購入を希望します。この手紙を正式な『合意文書』と見做してください。手付金として1,000ドルの小切手を同封します。」) と、PPC ROM PROJECTが1979年8月にスタートしたことを明記している。
  22. 22.0 22.1 この文でのartの語義は「技術・要領・コツ」だが、わざわざ"the Art"と定冠詞+大文字で記しているのは、数学者・計算機科学者であり「アルゴリズム解析の父」と呼ばれるDonald Knuthが1968年からライフワークとして出版しているアルゴリズム解説書The Art of Computer Programming (TAOCP)から来ていると想像される。1974年、氏のそれまでの様々な偉業に対し「コンピュータ界のノーベル賞」と位置付けられるチューリング賞授与されたが、その1つに「TAOCPの出版」が挙げられるほど、この業界では影響力が大きく、今なお必読の書とされる。尤も、原著である英語版はもとより、日本語訳版で読んでも、内容を理解するのは難しい。行間と意図を読み取り、想像力を働かせ、脳をフル回転させる必要がある。ただ、読んでいて面白いのは確かだ。
  23. 1987年12月31日以前に発売した機種に対してはHPが修理サービスを提供しており、また、ユーザでも簡単に開腹できたため、ユーザがAYORでDIYで修理したい場合、HPに問合せることで、そのための保守部材であるLSIを含む部品の入手は可能だったようだ。1988年1月1日以降に発売した機種からは「購入後1年未満で故障した製品には同等以上機種の新品と交換、購入後1年経過後は修理サービス提供なし」へ製品保証内容が変更され修理サービスが提供されなくなり、保守部材も市販されなかったようだ。詳細はHP-28Sを参照のこと。
  24. 尤も、ユーザ自身がAYORで製品の中身を解析し公開すること自体は避けられず、また、そうするよう仕向けたとしか思えない製品をHPが販売したことはある。さもなければ、ユーザコミュニティによるもう1つの偉業と言って然るべき同人プロジェクトであるWP 34Sは産まれなかっただろう。