[表紙へ]
▼ 変更履歴

第1章 HP-42S

この章では、SwissMicros DM42の前身であるHP-42Sについて紹介します。
筆者はHP-42Sを所有していないので、そのエミュレーターFree42 2.5.17の画像を説明に使います。

Free42

電卓の左下にある[EXIT]の上にあるオレンジ色のキーは[SHIFT]キーです。

この記事を理解するには最低でも 4 Level RPN の知識が必要です。
ここではHP-42Sの紹介をしますが、概要の説明だけですので、詳細は「HP-42S 取扱説明書」をご覧ください。

目次

  1. 説明書
  2. 過去の名機
  3. 純粋な 4 Level RPN よりも進化した電卓
  4. 操作性
    1. メニュー表示による操作
    2. メニューの種類が多くて煩雑
    3. CATALOGメニューの[ FCN ]
    4. 有用なのかよく分からないCUSTOMメニュー
    5. 文字入力
  5. 計算機能
    1. 数値範囲が広い
    2. 複素数と複素行列に対応
    3. ソルバーと数値積分計算にプログラミング必須
    4. 行列とベクトルの計算が可能
    5. 統計計算機能は今となっては古さを感じる
    6. 使いやすい基数変換
    7. HP-42Sにない計算機能
  6. プログラミング
    1. HP-41シリーズのFOCAL言語の拡張
    2. レジスタと変数
    3. HP-41シリーズと互換性がある
    4. 簡単なプログラムの例
    5. プログラム空間
    6. グラフィックス
  7. プリンタ
  8. HP-42Sの欠点
  9. 総評

説明書

幸いにも日本語の説明書があります。

HP-42S 取扱説明書
HP-42S Owner's Manual (英語版取扱説明書)

横河ヒューレットパッカード時代(1963年〜1999年)に翻訳されたせいか比較的まともな翻訳です。
しかし、複雑な部分になると翻訳者の知識不足のせいか不自然な文章も見受けられます。

HP-42S Programming Examples and Techniques

上の資料は、英語版しかありません。 プログラミング例とより詳細なプログラミング技術について解説した資料です。
プログラミングの基礎は、「HP-42S 取扱説明書」に書かれていますので、さらに理解を深めたい人向けでしょう。

以上の説明書は、PDFファイルですが、紙の説明書をコピーしただけですので、検索機能は使えません。
そのため、紙の資料のように目次と索引を見て情報を探す必要があります。

▲目次へ

過去の名機

HP-42S(1988年〜1995年)は、旧ヒューレット・パッカード社(以後、HP)によって開発されたHP-41シリーズ(1979年〜1990年)の後継機です。 HP-41シリーズは、電卓で初めてアルファベット表示を可能にした機種でした。

HP-42Sは以下のような特徴を持っています。

  1. 多くの数学関数と各種計算機能(複素数、行列、ベクトル、方程式ソルバー、数値積分、基数変換、統計計算)
  2. 強力な複素数対応。複素数が指数関数、対数関数、三角関数、逆三角関数、双曲線関数、そして逆双曲線関数で使える。
  3. 関数電卓にしては強力なプログラミング機能
  4. HP-41シリーズとのプログラム互換性
  5. メニュー機能によってコマンドを1文字ずつ入力しなくても良い。
  6. 131×16画素液晶によって、スタックのX,Yレジスタを同時に表示できる。
  7. グラフィックス描画も可能(プログラムを組んだ時のみ)
  8. 小型な筐体(148×80×15mm)
  9. 評判の良いキータッチ

当時のHP関数電卓の中では、最も多機能な関数電卓でした(グラフ電卓のHP-28Cはより多機能であったが、筆者はグラフ電卓は、関数電卓ではないと認識している)

HP-42Sが生産終了した1995年は、Windows 95が発売された年であり、PCの普及が一般人にとっても本格化した時期です。 プログラマブル関数電卓はもはや主力商品ではなくなったのです。 HP-42Sの生産終了後、HP社はプログラマブル関数電卓としてHP-42Sの下位機種であるHP-32SIIだけを残しました(当時、グラフ電卓は複数機種残っていた)。

2001年頃にHP社のカーリー・フィオリーナCEOは、自社の電卓開発部門を閉鎖してしまいました。 そして、台湾Kinpo Electronicsに電卓の開発・製造を委託するようになったのです。 HP-32SIIの後継機種として開発されたHP 33sとHP 35sの完成度は低く、HP電卓のユーザーは非常に落胆したことでしょう。 2020年になった今でもHP-42SがHP電卓ユーザーの間で名機とされているのは、そう言った事情もあるのでしょう。

eBayでは、2020年3月現在でも高額でHP-42Sが取引されています。1988年発売当時 $120 だったのですが、それよりも高額な価格で売られているものが多いようです( The Inflation Calculator によると、1988年当時の$120は、2019年の$262.53に相当するそうですので、単純比較はできませんが)。

▲目次へ

純粋な 4 Level RPN よりも進化した電卓

HP-42Sは、基本的に4 Level RPNの電卓です。しかし、より進化した RPL言語 に似たところもあります。 それは、スタックに実数だけでなく、複素数、文字列、行列も置くことができることです。

実数と複素数 行列と文字列
実数と複素数 行列と文字列

純粋な4 Level RPNの場合、スタックに実数しか置けません。 HP-42Sのスタックは、RPL言語のスタックよりも扱えるオブジェクトの種類は少ないのですが、スタックに実数以外を置けるという点では似ています。

RPL言語でプログラミングできる最初の電卓は、グラフ電卓HP-28C(1987年〜1992年)でした。 後発のHP-42S(1988年〜1995年)がHP-28CのRPL言語の影響を受けたのかどうかはよく分かりません。

▲目次へ

操作性

前機種のHP-41シリーズになかった機能です。 HP-41シリーズの場合、キーに割当てられていないコマンドを実行するとき、[XEQ]キーを押してからコマンドを一文字ずつ入力する必要がありました。

一方、HP-42Sでは、メニューから選択するだけでコマンドを入力できるようになりました。 ただし、メニューを採用したHP電卓は、HP-42Sが最初ではなく、より古いHP-18C(1986年〜1988年)でも使われていました。

メニューとメニュー・キー

上の画像のようにメニューの選択肢の下に6つのキーが並んでいます。 メニュー表示中、これらのキーは、キーに印字された本来の役目をせず、メニューを選択するキーになります。 「HP-42S 取扱説明書」によると、「メニュー・キー」と称するようです。

メニューは1行だけとは限らず、2行以上あることもあります。 画面の左上に▼▲が表示されているときは、メニューが2行以上あるということです。 そのときは[▲][▼]で別の行を表示することができます。

メニューを表示している時にメニュー・キーの本来の機能を使いたいときはどのようにすればいいのでしょうか?
[SHIFT][TOP.FCN]と操作すると、メニューがメニュー・キーの本来の機能を表示するようになります。

メニューとメニュー・キー

[EXIT]キーを押すと、元のメニュー表示に戻ります。

▲目次へ

メニューの種類が多くて煩雑

メニューの種類は多いと言えます。以下のように17種類のメニューがあります。 「HP-42S取扱説明書」と同様にASSIGN機能はメニューに入れていません。

  1. ALPHAメニュー(ALPHAレジスタに文字を入力する)
  2. BASEメニュー(基数変換)
  3. CATALOGメニュー(コマンド一覧とプログラムや各種変数の一覧)
  4. CLEARメニュー(変数、プログラム、スタックのデータなどを消去する)
  5. CONVERTメニュー(角度単位、時間、座標系などの変換)
  6. CUSTOMメニュー(ASSIGN機能でよく使うコマンドをここに登録することができる)
  7. DISPメニュー(画面表示の設定)
  8. FLAGSメニュー(フラグ操作。フラグは電卓の設定を変えたり、単純な記憶装置として使用する)
  9. MATRIXメニュー(行列計算)
  10. MODESメニュー(角度単位、座標系を含む電卓の設定)
  11. PGM.FCNメニュー(プログラムで使用するコマンドを入力する)
  12. PRINTメニュー(印刷の設定)
  13. PROBメニュー(確率計算)
  14. SOLVERメニュー(方程式ソルバー)
  15. STATメニュー(統計計算)
  16. TOP.FCNメニュー(メニュー・キーの本来の機能を表示する)
  17. ∫f(x)メニュー(積分計算)

これらのメニューは階層化していることが多く、かなり煩雑です。 そのため、「HP-42S取扱説明書」P292からP309までメニュー・マップが掲載されています。

▲目次へ

CATALOGメニューの[ FCN ]

[SHIFT][CATALOG]を押すと、CATALOGメニューが表示されます。

CATALOGメニュー

FCN を選択すると、HP-42Sの多くのコマンドが表示されます。 しかし、CATALOGメニューの FCN は46行もあるので、[▲]あるいは[▼]キーで選択するのが大変です。 頭文字による頭出しはできません。せめてコマンドの種類ごとに分類してほしかったのですが。

▲目次へ

有用なのかよく分からないCUSTOMメニュー

CUSTOMメニューによく使うコマンドを18個まで登録できます。 登録するときは、[SHIFT][ASSIGN]で登録機能を起動します。

しかし、"An Alternative HP-42S/Free42 Manual Version 0.7 ─ January 2010"の"14. Comprehensive Command List"によると、HP-42Sには253のコマンドがあることになっています。 それに対して、18個しか登録できないCUSTOMメニューが有用なのかどうか微妙です。

限定的な操作しかしない人ならば有用と思われますが、そうでない場合は有用なのかどうかよく分からない機能です。

▲目次へ

文字入力

文字(英数字と記号)を入力するときは、[SHIFT][ALPHA]でALPHAメニューを表示します。

ALPHAメニュー

上の ABCDE を選択すると、次の画面に切り替わります。

文字選択

ここで文字を選択すると、ALPHAレジスタ(後述)に文字が一文字入力されます。 文字を選択する前に[SHIFT]を押すと小文字も入力できます。

最初のALPHAメニューの画像で[▲]あるいは[▼]キーを押すと、記号も入力できます。

記号入力

このように文字入力は少し大変です。

▲目次へ

計算機能

数値範囲が広い

HP-42Sは、1×10 -499 から9.99999999999×10 499 までというかなり広い範囲の数値を扱えます。 精度は、表示12桁(内部15桁)です。

現在の日本の関数電卓は、浮動小数点の指数部が2桁しかないものが多いのです。

▲目次へ

複素数と複素行列に対応

HP-42Sは、複素数と複素行列に対応しています。 HP-42Sは、指数関数、対数関数、三角関数、逆三角関数、双曲線関数、そして逆双曲線関数でも複素数が使用可能です。 ただし、ガンマ関数に複素数を使うことはできません。

2020年3月現在、HP-42S並みに複素数の対応が良い関数電卓はもはや存在しないでしょう。 日本の関数電卓は、複素数モードでも複素数の四則演算ができる程度です。

2020年3月現在、グラフ電卓でもここまで複素数の対応が良いものは、CAS(数式処理システム)付きのものに限られます。 TI-Nspire CX CAS は、HP-42Sと同等の複素数の機能を持っています。 HP Prime は、ガンマ関数でも複素数を使えるので、HP-42Sより良いと言えます。 しかし、 TI-84 Plus CE CASIO fx-CG50 のようなCASなしグラフ電卓は、指数関数と対数関数だけで複素数が使える程度です。 つまり、HP-42Sは、現在の下手なグラフ電卓よりも複素数の対応が良いのです。

複素数の入力方法は少し変わっています。 Yレジスタに実部、Xレジスタに虚部をそれぞれ入力してから[SHIFT][COMPLEX]と操作すると、複素数が作成されます。

実部と虚部がX,Yレジスタに入っている 作成された複素数
Y:が実部、X:が虚部 作成された複素数

複素行列の場合も同様にYレジスタに実部行列、Xレジスタに虚部行列をそれぞれ作成してから[SHIFT][COMPLEX]と操作すると、複素行列が作成されます。

▲目次へ

ソルバーと数値積分計算にプログラミング必須

HP-42Sは、数式を記述することができません。 そのため、ソルバーや数値積分を使うときにプログラムによって数式を表現する必要があります。
例えば、f(x) = x 2 + 4x + 3 を表現したプログラムは、以下のようなプログラムになります。

00 { 23-Byte Prgm }
01▸LBL "FX"
02 MVAR "X"
03 RCL "X"
04 X↑2
05 RCL "X"
06 4
07 ×
08 +
09 3
10 +
11 END

上のプログラムの意味は、 4 Level RPN の知識があれば、おおよそ分かるはずです。 LBL "FX"はプログラムのグローバル・ラベルです。プログラムは、グローバル・ラベル名で識別されます。 MVAR "X"はソルバーや数値積分機能に"X"が数式の変数であることを知らせるための命令です(本来はメニュー表示用の命令です)。 RCL "X"は、変数Xの内容をXレジスタへコピーするという意味です(変数XとXレジスタは、別物です)。

では、f(x) = 0 になるxをソルバーで求めてみましょう(右辺は必ず0にしないといけない)。 [SHIFT][SOLVER]でソルバーが起動します。

ソルバー起動時の画面

FX を選択すると、前述のプログラム"FX"が選択され、画面が切り替わります。

Xの初期値を入力する画面

ソルバーは、2つの初期推定値を必要とします(二分法で求解?)。
ここでは10と入力してからメニューの X を選択します。

Xの1つ目の初期推定値として10が入力された画面

2つ目の初期推定値は、-10とします。-10と入力してからメニューの X を選択します。

Xの2つ目の初期推定値として-10が入力された画面

さらにメニューの X を選択すると、求解が始まります。

Xの解が-1になっている

これで変数Xの解の一つが-1であると分かりました。 2つの初期推定値を-1.1と-10にすれば、もう一つの解である-3も求まります。

数値積分機能については省略しますが、プログラムで数式を表現するのは一緒です。

▲目次へ

行列とベクトルの計算が可能

ここでは例として3×3行列を作成します。
最初にYレジスタに行数、Xレジスタに列数を入れます。

X,Yレジスタに3,3が入っている

[SHIFT][MATRIX]でMATRIXメニューを表示します。

MATRIXメニューを表示

メニューの NEW を選択すると、行列がXレジスタに生成されます。

Xレジスタに3x3行列が生成された

行列に値を入れます。メニューの EDIT を選択して、編集モードに入ります。

マトリクス・エディターが起動

画面の左上に1:1と表示されているのは、「1行目の1列目の要素」という意味です。 メニューの は、行移動です。 は、列移動です。 数値を入れたい行列要素に移動して、数値を入力してから[ENTER]を押して確定します。 あるいは数値を入れてからメニューの を選択しても確定します。

このように行列の編集機能は、表示装置の制約もあって分かりやすいとは言えないものです。 [EXIT]を押すと、編集モードから抜けて、元のメニューが表示されます。

行列の大きさはメモリがなくなるまで大きくすることが可能です。 "An Alternative HP-42S/Free42 Manual Version 0.7 ─ January 2010"によると、HP-42Sの実機で29×29が最大だそうです。 エミュレータFree42は、より大きなメモリを搭載しているので、さらに大きな行列も作成可能です。

作成した行列は、すぐに変数に保存するべきです。 スタックに置いた行列は、わずかな操作ミスで失われてしまうことが多いからです。

以上のようにして行列を2つ以上作成して、スタックに行列を置くと、通常の4 Level RPNのように行列同士の四則演算が可能です。 それ以外にもMATRIXメニューから逆行列( INV )、行列式( DET )、転置( TRAN )などの操作が可能です。 MATRIXメニューの SIMQ は、行列を使って連立一次方程式を解く機能です。

MATRIXメニューが表示されている状態で[▼]キーを押すと、MATRIXメニューの2行目の機能が表示されます。

MATRIXメニューの2行目

DOT CROSS UVEC がベクトルの計算です。それぞれ内積、外積、単位ベクトルとなります。 これらの計算をするときのみ、1行だけの行列と1列だけの行列は、どちらもベクトルとして扱われます。 そのため、内積と外積を計算するときに2つのベクトルとして1行だけの行列と1列だけの行列が混在していても計算できます。

▲目次へ

統計計算機能は今となっては古さを感じる

統計計算機能は、表形式で入力することができない古い方式です。 データを入れる毎に13個の総和レジスタ(後述)が更新され、入力したデータは毎回捨てられます。 そのため、入力済みのデータを後で確認することができません。

データは2変量まで入力することができます。 統計計算の最初に[SHIFT][CLEAR]でCLEARメニューを出し、 CLΣ を選択して全ての総和レジスタを初期化する必要があります。 1変量の場合はYレジスタに0を入れ、Xレジスタだけに値を入れます。 2変量の場合はYレジスタとXレジスタに値を入れます。 そして、[Σ+]キーを押せば、データ入力ができます。そして、Xレジスタに入力した回数が表示されます。

入力を間違えた場合、修正が困難になることがあります。HP-42Sは入力されたデータを毎回捨てるからです。 入力を間違えた直後に何も操作をしていなければ、 [SHIFT][LAST x][SHIFT][Σ-]と操作して修正できます(入力前のXレジスタの値は、LAST xレジスタに残っている。入力前のYレジスタの値は、スタックにそのまま残っているので、この操作で修正できる)。
しかし、何回も前に入力したデータが間違えていた場合、間違えたデータを覚えておかないと修正できません。 間違えて入力してしまった値をX,Yレジスタに入力してから[SHIFT][Σ-]を押すと修正ができます。

データを入力してから[SHIFT][STAT]でSTATメニュー(統計メニュー)を表示します。

STATメニュー

統計計算機能で求められる値は、合計( SUM )、平均( MEAN )、加重平均( WMN )、標本の標準偏差( SDEV )です。 母集団の標準偏差は直接求めることができません。母集団の標準偏差を求めるときは、入力したデータの平均を求め、それを[Σ+]キーで統計データへ加えてから標本標準偏差を求める機能( SDEV )を実行します。

回帰分析 (説明書の「曲線当てはめ」。上のメニューの CFIT のこと)は、4種類(直線、e指数曲線、対数曲線、べき乗曲線)あります。

以上のように最低限の統計計算機能はあります。 しかし、HP-42Sの統計計算機能は今から見ると古くて扱いにくいものです。 入力したデータを確認できないというのは今となっては実用性が低いと言えるでしょう。

▲目次へ

使いやすい基数変換

基数変換は使いやすいと思います。 [SHIFT][BASE]でBASEメニューが表示されます。

BASEメニュー

BASEメニュー起動時は、10進数表示( DECM )になっています(選択されているので、 DEC■ と表示されている)。 HEXM (16進数)、 OCTM (8進数)、あるいは BINM (2進数)を選択すると、Xレジスタに表示されている数値がすぐさま選択した進数で表示されます。単純明快で操作も簡単です。 2進数表示にしたとき、最大36桁もありますので、1行で表示できないときがあります。そのときは[SHIFT][SHOW]と操作すると、全桁を表示できます。

BASEメニューの A...F は、16進数のAからFを入力するのに使用します。 A...F を選択すると、メニューにAからFが表示されます。

BASEメニューの LOGIC は、論理演算の機能を表示します。

LOGICメニュー

各選択肢は、 AND (論理積)、 OR (論理和)、 XOR (排他的論理和)、 NOT (論理否定)、 BIT? (Xレジスタで指定されたYレジスタのビットが1かどうか?)、 ROTXY (Yレジスタの値をXレジスタで指定されただけ回転)です。 論理演算をするとき、数値は36bitとして扱われます。そのため、負数は36bitの2の補数になります。

HP-42Sの基数変換機能は、多機能ではないのですが、基数変換が容易にできて使いやすいと言えます。

▲目次へ

HP-42Sにない計算機能

微分、総和、総乗(総積)の機能はない

HP-42Sは、数値微分(d/dx)、数式の総和(Σ)、数式の総乗(Π)の機能を持っていません。 数式の総和(Σ)は、統計計算の総和ではないことにご注意ください。 どうしてもこれらの機能を実現したいときはプログラムを組むしかありません。

単位換算機能はない

2020年3月現在、市販されている関数電卓の多くが単位換算機能を搭載しています。
例えば、ヤードポンド法とメートル法を相互に変換する機能は良く使われているでしょう。

しかし、HP-42Sはそのような単位換算機能はありません。 [SHIFT][CONVERT]で表示できるCONVERTメニューは、角度単位の変換、数値と時分秒の変換、座標系の変換、整数部と小数部の抽出などが可能なだけでいわゆる単位換算ではありません。

科学定数機能はない

2020年3月現在、市販されている関数電卓の多くが多くの科学定数を搭載しています。 しかし、HP-42Sは科学定数を搭載していません。

▲目次へ

プログラミング

ここではプログラミング機能の概要を紹介しますが、プログラミングができるようになるほどの説明はしません。

HP-41シリーズのFOCAL言語の拡張

HP-42Sのプログラミング言語は、HP-41シリーズのFOCALと呼ばれた言語の拡張版です(DEC社のFOCAL言語とは別物)。 それなのに何故かHP-42Sのプログラミング言語に名称が付いていません。

基本的にはキーストローク言語の一種です。キー操作の手順を記述するようにプログラミングを行います。 しかし、条件分岐命令やループ命令なども用意されているので、単純にキー操作を再生するよりも高度なことができます。

プログラムを表示している

キーストローク言語のプログラムは、横に短くなり、縦に長くなるという性質がありますので、2行表示のHP-42Sでプログラミングをするのは少しやり難いのですが、短いプログラムならばこれで十分にプログラミングできます。

▲目次へ

レジスタと変数

レジスタ(固定的に存在する記憶領域)と変数(生成・削除可能な記憶領域)として以下のものがあります。

  1. スタックレジスタ(4 level stack)
  2. 記憶レジスタ(Storage registers)
  3. 総和レジスタ(記憶レジスタの一部)
  4. ALPHAレジスタ(文字列専用)
  5. 変数

これらの記憶領域は、全てグローバルです。つまり、複数のプログラムが共有することになります。 ローカルな記憶領域はありません。

スタックレジスタ

4 Level RPNで必須の4段スタックです。X,Y,Z,Tレジスタによって構成されるRPN電卓の中心的な存在です。 実数、複素数、文字列(6文字まで)、行列が格納できます。

記憶レジスタ

初期設定では、R00〜R24(25個)として存在するレジスタです。制約が多くて扱い難いレジスタです。 行列を代入することはできません。文字列は6文字まで代入できます。

複素数を代入するときは、記憶レジスタを複素数形式にする必要があります(HP-42S取扱説明書P98からP99参照)。 ただし、複素数形式にしたときは、文字列の代入ができなくなります。

HP-42Sでは1列しかない特殊な行列(REGS)として実装されています。 記憶レジスタの数を0個にすることもできれば、25個よりも増やすこともできます。 メモリ容量があれば、理論上はR9999まで増やせます。 しかし、HP-42Sではメモリが少ないので、そこまで増やすことはできません(エミュレータFree42は可能)。 直接アクセスできるのはR99までです。R100以上は間接指定という手間のかかる方法を行わないと使えないので、 R100以上はプログラム向けの記憶領域となります(キー操作でも使えなくはないがお勧めしない)。

総和レジスタ

記憶レジスタの一部です。 初期設定では、R11からR23までの13個が統計計算で使用する総和レジスタとして使われます。 HP-41シリーズと総和レジスタの数が異なりますので、初期設定の場合、HP-41シリーズとの互換性を損ねることがあります。 互換性の件については後述します。

ALPHAレジスタ

44文字まで格納できる文字列専用のレジスタです。1つしかありません。 取り扱いにかなりクセのあるレジスタです。

[SHIFT][ALPHA]と操作すると、表示されます。44文字を全部見たいときは[SHIFT][SHOW]と操作します。 ALPHAレジスタを表示している状態で[ENTER]を押すと、最後尾にカーソル( _ )が表示されて編集可能になります。

ALPHAレジスタを編集している様子

編集といってもカーソル移動ができません。カーソルは常に文字列の最後尾に位置します。 そのため、最後の文字を削除する、あるいは最後尾に文字を追加することしかできません。

カーソルが表示されていない状態で[←](CLEAR)キーを押すと、文字列が全部消えてしまいます。 文字列が消えてしまうと、元に戻すことはできません。

ASTO命令(ALPHAレジスタ表示中に[STO]を押す)によって、ALPHAレジスタの先頭6文字だけをスタックレジスタ、記憶レジスタ、あるいは変数に保存することができます。 なぜなら、1つのスタックレジスタ、1つの記憶レジスタ、あるいは1つの変数は、それぞれ6文字しか記憶できないからです。

そのため、6文字より長い文字列を保存するときは複数の記憶レジスタや変数に分割して保存します。 ASHF命令を使うと、ALPHAレジスタの先頭6文字を捨てて、文字列を6文字分前に詰めることができます。 ですから、ASTOで先頭の6文字を保存してからASHFで先頭の6文字を捨てれば、次の6文字を保存できる状態になります。 それを繰り返して長い文字列を保存することが可能です。 もちろん、このようなことを行うのはキー操作ではあまり現実的でなく、プログラム向けの機能でしょう。

変数

名前の付いた記憶領域です。7文字までの名前が付けられます。 実数、複素数、文字列(6文字まで)、行列が格納できます。 メモリの空きがある限り、変数を作ることができます。

▲目次へ

HP-41シリーズと互換性がある

HP-42Sは、HP-41シリーズのプログラムを実行することができます。 しかし、HP-42Sの設定によっては互換性を保てないことがあります。

HP-41シリーズの場合、R11からR16までの6個だけが総和レジスタです。 HP-42SはR11からR23までの13個が総和レジスタですので、R17からR23までが統計計算に使われることは、HP-41シリーズのプログラムにとって想定外です。 そのため、HP-41シリーズのプログラムが統計計算を行い、かつR17からR23までの1つでも使用している場合、誤動作します。 HP-42Sは、統計計算を行うときにR11からR16だけでなく、R17からR23も自動的に更新するからです。

これを回避するためには、統計計算をリニアモードにする必要があります。[SHIFT][STAT][▼] LINΣ と操作します。 リニアモードにするとHP-42Sは、R17からR23までのレジスタを使用しなくなります。 その代わり、統計計算の回帰分析で直線しか使えなくなります。 リニアモードを解除するときは、[SHIFT][STAT][▼] ALLΣ と操作します。

記憶レジスタの数の設定によってもHP-41シリーズのプログラムが動作しない可能性があります。 ただし、HP-41シリーズでも記憶レジスタの数を変更することは可能ですので、記憶レジスタの数に配慮するのはユーザーの責任となります。

▲目次へ

簡単なプログラムの例

最初にXレジスタの値を半径として、円の面積を求めるプログラムを紹介します。

00 { 13-Byte Prgm }
01▸LBL "CIRCLE"
02 X↑2
03 PI
04 ×
05 END

このプログラムは、LBL命令を除けば、キー操作で計算するのと同じ手順を記述しているだけです。 キーストローク(打鍵)言語と言われるのはそのためです。

LBL命令はラベルを指定する命令です。 ラベルとは、プログラムの名前を決定したり、分岐命令の分岐先を指定するための命令です。 ラベルには2種類あって、ローカル・ラベルとグローバル・ラベルがあります。 これらの区別は命名規則だけで決定します。

このように分かり難い区別になっています(大文字と小文字でローカル・ラベルになる範囲が異なる)。 ローカル・ラベルはプログラムの外部からは参照できません。 一方、グローバル・ラベルは他のプログラムから参照することが可能です。 そのため、グローバル・ラベルの付いたプログラムは別のプログラムから呼び出されることができます。

グローバル・ラベルの付いていないプログラムは、[XEQ]キーで実行できません([R/S]でしか実行できない)。 また、プログラムを複数作ったときに名前がないと混乱の元です。プログラムの先頭にグローバル・ラベルを付けるべきでしょう。

上の"CIRCLE"プログラムで半径4cmの円の面積を求めてみましょう。 [4][XEQ] CIRCLE と操作します。 答えは、50.2654824574[cm 2 ]となります。

上のプログラムはキー操作を再生しているだけなので、あまりプログラム的ではありません。
条件分岐を使った簡単なプログラムを紹介します。

00 { 37-Byte Prgm }
01▸LBL "ODDEVEN"
02 2
03 MOD
04 X=0?
05 GTO 00
06 GTO 01
07▸LBL 00
08 "EVEN"
09 AVIEW
10 GTO E
11▸LBL 01
12 "ODD"
13 AVIEW
14▸LBL E
15 END

Xレジスタに入っている数値が奇数(ODD)なのか偶数(EVEN)なのかを表示するだけのプログラムです。 Xレジスタに数値を入れてから[XEQ] ODDEV で実行できます。

MODは、Yレジスタ÷Xレジスタを計算したときの余りを求める命令です。 このプログラムの場合、実行前にXレジスタに入っていた値を2で割った余りを求めています。 求められた余りはXレジスタに入ります。

X=0?は、Xレジスタの値が0かどうかを調べて、0ならば次の命令を実行し、そうでないときは次の次の命令を実行します。 Xレジスタが0のとき(偶数のとき)は、GTO 00命令によってLBL 00へ分岐します。 そうでないとき(奇数のとき)は、GTO 01命令によってLBL 01へ分岐します。

LBL 00に分岐すると、"EVEN"(偶数)という文字列が登場します。 HP-42Sは、文字列に遭遇するとスタックではなくALPHAレジスタに文字列を入れます。 そのため、ALPHAレジスタの内容を表示するためにAVIEW命令を実行します。 最後にGTO Eを実行して、LBL Eへ無条件分岐します。 そして、END命令で終了します。

LBL 01に分岐した時も類似の動作ですので、省略します。

LBL 00, LBL 01, LBL E は、全てローカル・ラベルですので、他のプログラムから参照することはできません。 ただし、別のプログラムからプログラムの途中を実行させたいときは、わざとプログラムの途中にグローバル・ラベルを挿入することもありえます。

▲目次へ

プログラム空間

HP-42Sの1つのプログラムは、1つのプログラム空間に入っています。
[SHIFT][CATALOG]と操作してから PGM を選択すると、プログラム・カタログが表示されます。 プログラム・カタログは、グローバル・ラベルと名無しプログラム空間を表示します。

プログラム・カタログに[.END.][ABC][END][XYZ]が表示されている様子

.END. END は、名無しのプログラム空間(グローバル・ラベルが存在しない)です。
.END. はプログラム・メモリの末尾にある名無しのプログラム空間という意味です。
メモリの末尾にない名無しのプログラム空間は、 END と表示されます。

ABC XYZ は、グローバル・ラベルです。 最も右に表示される XYZ が先頭にあるグローバルラベルです。

つまり、下図のように並んでいます。

LBL "XYZ"
:
END
:
END
LBL "ABC"
:
END
:
.END.

ここで問題があります。1つのプログラム空間内に複数のグローバル・ラベルが設定されているとき、 プログラム・カタログは、複数のグローバル・ラベルを連続的に並べて表示してしまいます。 そのため、プログラム・カタログが以下のような表示をしているとき、各項目がグローバル・ラベルなのかプログラム空間なのかを判別することはできません。

プログラム・カタログに[DX][CX][BX][AX]が表示されている様子

上の画像の場合、1つのプログラム空間内に"AX", "BX", "CX", "DX"というグローバル・ラベルが存在するのかもしれません。 もちろん、それぞれが独立したプログラム空間の可能性もあります。 もしかしたら2つのプログラム空間にそれぞれ2つのグローバル・ラベルが存在するのかもしれません。 このように各項目がグローバル・ラベルなのかプログラム空間なのかを明確に判別できない欠点があります。

筆者の私見ですが、1項目=1プログラム空間として表示するべきだったのです。 そして、1つのプログラム空間を選択したとき、その空間にグローバル・ラベルが2つ以上あれば、それらのグローバル・ラベルが表示されるという動作の方が良かったのではないでしょうか。その場合、手順が1つ増えますが、1項目=1プログラム空間になる利点の方が大きいでしょう。

新しいプログラム空間の作成方法は、2つあります。

  1. [SHIFT][GTO][.][.]と操作すると、プログラム・メモリの末尾にプログラム空間が作成される。
  2. あるプログラム空間のEND命令の後ろにEND命令を挿入すると、挿入した場所にプログラム空間が作成される。

あるプログラムから別のプログラムを呼び出したいとき、プログラム内でXEQ命令を使います。 グローバル・ラベルが付いているプログラムのみ呼び出せます。 呼び出されたプログラムがENDあるいはRTNで終了すると、呼び出したプログラムに戻ってきます。

注意するべきは、今時のプログラミング言語だと当然であるローカル変数に相当するものがないので、 プログラム空間が別でもスタックレジスタ、記憶レジスタ、総和レジスタ、ALPHAレジスタ、そして変数は、複数のプログラムで共同使用することになります。 そのため、別のプログラムを呼び出すようなプログラムを書くときは、レジスタや変数を他のプログラムと共同使用しても問題がないようにプログラミングする必要があります。

▲目次へ

グラフィックス

HP-42Sは、131×16画素、かつ2値白黒のドットマトリクス液晶画面を有しています。 それを利用して、グラフを描画したり、ビットマップグラフィックスを表示することが可能です。 ただし、キー操作でグラフィックスを表示することはできません。

グラフ描画

「HP-42S 取扱説明書」P154に掲載されている"DPLOT"プログラムを実行したときの画面です。

DPLOTでグラフを描画した画面

f(x) = sin(X)を描画しています。 DPLOTを動作させるためには、DPLOTとは別に関数を表現したプログラムを用意する必要があります。

00 { 8-Byte Prgm }
01▸LBL "SIN"
02 SIN
03 END

非常に簡単なプログラムですが、DPLOTはXレジスタにf(x)のxの値を置いてからこの関数を呼ぶので、これで十分です。 筆者は角度単位をRADに設定してから以下のような操作で実行しました。

[XEQ] DPLOT [1] YMAX [+/-] YMIN [0] AXIS [SHIFT][π][2][×] XMAX [+/-] XMIN [R/S] "SIN" [R/S]

つまり、YMIN=-1, YMAX=1, AXIS=0, XMIN=-2π, XMAX=2πでsin(x)を描画したのです。

DPLOTは、PIXEL機能(PIXEL命令)を使用してグラフを描画します。 「HP-42S 取扱説明書」P135にPIXEL機能の説明があります。

ALPHAレジスタを使ったビットマップ描画

「HP-42S 取扱説明書」P139に掲載されている"SMILE"プログラムを実行した画面です。

SMILEを実行した様子

AGRAPH命令を使って、ビットマップ画像を表示できます。 ビットマップのデータは、ALPHAレジスタに入れるという奇妙な仕様です。 ALPHAレジスタに入れた文字コードをビットマップとして扱うからです。 文字コードは8bitです。最上位ビットが下で最下位ビットが上になります。つまり1つの文字コードを縦8画素に使います。 ALPHAレジスタの最大文字数が44文字ですので、AGRAPH命令一回につき横44画素×縦8画素のビットマップの描画ができます。 ALPHAレジスタにXレジスタの値を文字コードとして追加するXTOA命令も用意されているので、文字が割当てられていない文字コードもALPHAレジスタに入力できます。

▲目次へ

プリンタ

感熱式プリンタHP 82240AあるいはHP 82240Bが使用できます。 筆者はこれらのプリンタを持っていないので、使用レポートはできません。 これらのプリンタは既に製造が終わっていますが、eBayで中古品が入手できるようです(2020年3月現在)。 ヤフオクやメルカリでもたまに見かけることがあります。

57mm幅の感熱紙があれば、今でも使用可能です。 MoHPCの HP Forum によれば、58mm幅でも使えるそうです。

HP-42Sとプリンタ間の通信は赤外線方式です。HP-42Sからプリンタへの一方向通信です。 そのため、HP-41シリーズのようなHP-IL(有線インターフェース)と違ってプリンタの接続が検出できません。 ですので、プリンタ機能のON/OFFをするのは使用者の責任になります。

[SHIFT][PRINT][▲] PON と操作するとプリンタ出力を有効にできます。
[SHIFT][PRINT][▲] POFF と操作するとプリンタ出力が無効になります。

▲目次へ

HP-42Sの欠点

主な欠点は3つあります。

データを外部出力できない

HP-42Sはプログラミングが重要ですが、それにも関わらず、データの外部出力ができません。 PCに接続することもできませんし、データを保存する外部メモリのようなものもありません。 HP-42S最大の欠点でしょう。

プリンタがあれば、レジスタや変数の一覧とプログラムを印字することはできます。 プログラムの保存はプリンタでするしかなかったと言えるでしょう(あるいは手書き)。

文字入力が不便

前機種のHP-41シリーズは、キーボードにアルファベットが印刷されていて、キーによって直接文字入力が可能でした。
しかし、HP-42Sはメニューから文字を選択する方式になったので、文字入力が不便になりました。

CPUが遅い

下の動画をみて下さい。HP-42Sがグラフ描画を行う動画です。前述のDPLOTを使っています。

凄まじい遅さです。グラフ描画に約53秒もかかっています。
HP-42SのCPU "HP Saturn (Lewis)"は、クロック周波数1MHzに過ぎません。 多機能な関数電卓としてはあまりにもCPUの速度は低いと言えます。

その他の欠点

その他の欠点と言えそうなものを列挙します。

  1. ソルバーと数値積分で使う数式をプログラムでしか表現できない。
  2. 数値微分(d/dx)、数式の総和(Σ)、数式の総乗(Π)がない。
  3. 統計データを表形式で扱えない。
  4. プログラム・カタログの表示でグローバル・ラベルとプログラム空間の区別が明確にできない。
  5. 単位換算機能がない。
  6. 科学定数機能がない。

これらについて欠点と見なすかどうかは個々人によると思われます。

▲目次へ

総評

HP-42Sのことを調べて、やはりHPの電卓は難しいと感じました( HP 50g ほどではないが)。 そもそも 4 Level RPN という時点で敷居が高いのですが、メニューが多くてどの機能がどこにあるのかを把握するだけで大変です。 さらにソルバーや数値積分を使うときはプログラミングが必須です。これが難易度に拍車をかけています。 今時のグラフ電卓やプログラミング関数電卓は、プログラミングはオマケなのですが、HP-42Sは必須なのです。

複素数の対応が良いのはさすが名機です。 指数関数、対数関数、三角関数、逆三角関数、双曲線関数、そして逆双曲線関数で複素数が使えるのです。しかも複素行列まで扱えます。 2020年3月現在、関数電卓でHP-42Sほど複素数に対応しているものはないようです。 グラフ電卓でもHP-42S並みに複素数に対応したものはCAS(数式処理システム)付きのものに限られます。

HP-42Sのプログラミング機能は、関数電卓としては高機能です(グラフ電卓用の RPL言語 には全く敵わないが)。 HP-42Sは、変数を動的に生成・削除可能です。変数名は7文字まで可能です。しかも変数に実数、複素数、文字列(6文字まで)、そして行列まで入れることができます。 現在の関数電卓にここまで強力な変数機能を持ったものはないでしょう。 現在のグラフ電卓ですらCASなしのものですと、変数名に1文字しか使えないというものもあります( TI-84 Plus CE CASIO fx-CG50 )。

一方、HP-42Sには古いと感じる面もあります。 2020年3月現在、 CASIO fx-JP700 , Canon F-789SG , SHARP EL-509T , TI-36X Pro のような低価格な関数電卓でも数値微分(d/dx)、数式の総和(Σ)、そして数式の総乗(Π)の機能を持っています。それらの機能はHP-42Sにありません。 これらの機種は統計データを表形式で編集でき、回帰分析の種類も多様です。HP-42Sは統計データを表形式で編集できず、回帰分析の種類も最小限です。

とはいえ、HP-42Sは現在の関数電卓より優れた機能も多く、1988年に発売されたことを考えるとよくできているのではないでしょうか。 残念ながら筆者は実機を持っていないので、評判の良いキータッチについては分かりません。

▲目次へ
[ 第2章 SwissMicros DM42 へ ]

[表紙へ]