[表紙へ]
▼ 変更履歴

newRPL Build 1089 レビュー

HP 39gs 上で newRPL が動作

newRPL は電卓用の OS です。HP 39gs/HP 40gs/HP 50g で動作します。
HP 50g で最後になった RPL言語 の実行環境の後継を目指しているようです。

前回の「 HP 39gs を newRPL 搭載電卓に改造 」において、HP 39gs で newRPL Build 1089 を使えるようになりました。
今回は newRPL について書いてみます。

しかし、newRPL は未だにベータ版なので未完成な面が多く、完全に調べる気はしませんでした。
オンライン説明書 も未完成すぎます。説明されていない機能が多く、関数の詳細説明がなかったり、未実装の関数が書かれていたりしています。
そのため、筆者が気になったところを中心にレビューを構成します。

目次

  1. newRPL の特徴
  2. newRPL Build 1089 にない機能
  3. GUI について
    1. 高速な操作
    2. Soft Menu の階層構造は、1つの階層構造に統合された
    3. 文字入力が楽になった
    4. 設定画面がなくなった
    5. CHOOSE ボックスがなくなった
  4. プログラムの実行速度
  5. PC と HP 39gs(newRPL) 間の通信
    1. 接続方法
    2. 全データのバックアップとリストア
    3. スタック上のオブジェクトの送受信
    4. Conn3x を接続できるように戻す方法
  6. 総評

newRPL の特徴

newRPL User Manual Introduction to newRPL によると、HP 50g(標準ROM) と比べて以下の変更点があるとのことです。

  1. 小数点に起因する整数と実数の差異はなくなった。
    HP 50g(標準ROM) の場合、小数点がある数値は実数、それ以外は整数だった。newRPL でその区別がなくなった。
    その代り、数値の末尾に小数点があるときは Approximate(おおよそ)、数値の末尾に小数点がないときは Exact(正確)という区別をするようになった。例えば、0.333. は Approximate であり、おおよその数値を示す。一方、0.333 は Exact であり、近似値ではないことを示す。
  2. 計算精度は可変。2,000桁まで可能(デフォルトは32桁)
  3. より柔軟なカスタムメニュー
  4. 変数へのより高速なアクセス
  5. LSTO命令を使ってコードのどこでもローカル変数を宣言可能
    HP 50g(標準ROM) のローカル変数作成命令(→)では、ローカル変数を定義できる場所が限られていた。
    LSTO命令によってその問題はなくなった。しかし、LSTO命令を実行することによって変数スコープが変化することがある。
  6. あらゆるプログラムはディレクトリを綺麗に保つためにサンドボックス化することが可能
    ローカル変数だけを使えば、グローバル変数にアクセスする必要がなくなり、 サンドボックス化 される。
    さらにディレクトリにグローバル変数を作ることもなくなるので、ディレクトリは綺麗になる。
  7. 可読性を向上するためにコンパイルされたコードの中に維持される持続性コメント(Persistent comments)
    HP 50g(標準ROM) のコメント(@)は、コードをプログラムオブジェクトにすると消えていた。
    newRPL の持続性コメント(@@)は、コードをプログラムオブジェクトに変換しても消えない。
  8. より高速なリスト処理。リストのために + と ADD の役目が入れ替わった。
    newRPL だと + は2つのリストの要素毎の加算。ADDは2つのリストの結合。このように役目が反転している。
  9. ユニコードテキストの全面サポート
  10. スタック操作において8レベルの Undo/Redo が可能
    STKPUSH などの命令でもスタック操作可能なはずだが、Build 1089 だと動作しない。実装されていない?
  11. 多くのキーボードショートカットが実用性を高める。
    ショートカットに依存しすぎていて、覚えることが多すぎる気もします。
  12. パワフルなエディタ
  13. フルクリップボードは、エディタやスタックの中のオブジェクトやテキストをコピー/カット/ペーストすることができる。
    スタックからのオブジェクトをエディタで使えるテキストへ変換することができる。 または、テキストをスタックへペーストすることができる。
  14. Soft Menu を使って、あらゆる変数の内容をテキストとして直接エディタへペーストできる。
  15. コマンド名の自動補完
  16. SDカードのアクセスは、HP 50g(標準ROM) よりも高速
    HP 39gs は、SDカードスロットを搭載していないので、この機能は使えない。
  17. 標準のSDカードだけではなく、SDHCカードも使用可能
    HP 39gs は、SDカードスロットを搭載していないので、この機能は使えない。
▲目次へ

newRPL Build 1089 にない機能

newRPL Build 1089 は、HP 50g(標準ROM) と比べて以下の機能を欠いています。
実用性という面では退化しています。

  1. CAS(数式処理システム) がない
  2. 数値微分がない(数値積分は NUMINT コマンドがある。ただし、数式をプログラムで記述する古い方式)
  3. グラフ描画機能がない(プログラムで描ける可能性はあるが筆者は試していない)
  4. 数式の教科書表示がない
  5. アプリケーション的機能(GUI的なソルバーや金融計算など)がない
  6. 設定画面がない
  7. CHOOSE ボックスがない
  8. ALGモード(中値記法)がない

ALGモードがない方が操作の一貫性が良くなるので、個人的には歓迎です。
しかし、それ以外の機能に関しては将来の更新で追加されることが期待されます。

▲目次へ

GUI について

GUI は退化面もありますが、改良された面もあります。

newRPL の GUI
Angle Indicator 角度単位を表示。角度単位の種類は、DEGREE, RADIAN, GRAD, DMS。
Autocompletion Area コマンドの自動補完を行う。写真では AT と入力した状態で ATANH が表示されている。
Command Line Editor コマンド・数値・数式・文字列・プログラムの入力と編集を行う。
Complex Mode 複素数モードかどうかの表示
Flag Indicators フラグ1〜6の状態表示。プログラムで使用する。
Menu 1 F1〜F6 キーと関連したメニュー
Menu 2 G〜L キーと関連したメニュー
SD Card Indicator SDカードの状態(HP 39gs では使えない)
Stack Area RPL言語でお馴染みのスタックを表示
▲目次へ

高速な操作

HP 50g(標準ROM) の OS は、Saturn CPU コードで書かれていたので、エミュレーターで ARM コードに変換して動作させていました。
一方、newRPL は、ARM コードで直接動作します。そのため、newRPL の動作は HP 50g(標準ROM) よりも圧倒的に高速化しています。
もっさりとした操作性の HP 50g(標準ROM) と違ってサクサクと操作できます。
さらに HP 50g(標準ROM) は起動に数秒かかりますが、newRPL は一瞬で起動します。

▲目次へ

Soft Menu の階層構造は、1つの階層構造に統合された

HP 50g(標準ROM) は、Soft Menu の階層構造を複数持っていました。
一方、newRPL は、Soft Menu を1つの階層構造に統合しています。
ただし、newRPL の方が機能が少ないからこそ可能だっただけのような気もします。

操作は Menu 1 と Menu 2 によって行います。

Menu 1 が主に操作する Soft Menu です。
newRPL の Soft Menu (Menu 1) の基本操作は、以下のようになります。

キー操作 機能
F1〜F6 Menu 1 の項目を実行する。下の階層があるときは、下の階層に行く。
F1〜F6 長押し Menu 1 に表示されている項目が関数・コマンドのとき、ヘルプを表示する。
P 最上位階層に移動
右シフトを押してから M 押下 上の階層に移動
右シフトを押してから 6 押下 Soft Menu の一部 UNIT を表示する

HP 50g(標準ROM) の場合、上の階層に移動する操作が面倒でした(メニュー項目から上移動の項目を選ばないといけない)。
そのため、newRPL は、HP 50g(標準ROM) よりも Soft Menu の階層移動が容易になっています。

前述の写真のように newRPL には、Menu 2 が追加されています。 これは Menu 1 の補助的な役目をします。

Menu 2 の基本操作は以下のようになります。

キー操作 機能
右シフトを押してから F1〜F6 Menu 1 の項目に下の階層があれば、下の階層を Menu 2 に表示する。
G〜L Menu 2 の項目を実行する。下の階層があるときは、下の階層に行く。
右シフトを押しながら M 押下 履歴に残った以前の Menu 2 を表示できる。Menu2 の履歴は8つまで。

Menu 2 の必要性ですが、Menu 1 で激しいメニュー階層内移動をするため、メニュー項目の表示を持続できる Menu 2 が必要だったのではないでしょうか。
ちなみに設定で Menu 1 と Menu 2 の役目を入れ替えることができます。

▲目次へ

文字入力が楽になった

HP 50g(標準ROM) の文字入力方法は、以下のようになっていました。

HP 50g(標準ROM) の文字入力方法
キー操作 機能
[ALPHA][1文字] アルファベット大文字を1つだけ入力
[ALPHA][左シフト][1文字] アルファベット小文字を1つだけ入力
[ALPHA][ALPHA] アルファベット大文字ロック
[ALPHA][ALPHA][左シフト][ALPHA] アルファベット小文字ロック
[ALPHA] ロック解除

newRPL の文字入力は以下のように単純化されています。

newRPL の文字入力方法
キー操作 機能
[ALPHA] アルファベット大文字ロック
[ALPHA][ALPHA] アルファベット小文字ロック
[ALPHA][ALPHA] ロック解除

その代わり、1文字だけ入力する機能はありません(さほど必要ないと思われる)。

さらにカーソルキーが点滅しながら以下の表示をすることによって、入力モードを分かりやすくしています。

カーソル表示 入力モード 説明
D Direct mode 数値、コマンドなどの入力
A Algebraic mode 数式入力
P Programming mode プログラムの入力
C Alphanumeric mode (Capital) 大文字の入力
L Alphanumeric mode (Lower) 小文字の入力
▲目次へ

設定画面がなくなった

HP 50g の設定画面
HP 50g(標準ROM) の設定画面

HP 50g(標準ROM) のような設定画面がなくなりました。
そのため、newRPL の場合、一部の設定をコマンドでやる必要があります(Soft Menu だけで可能な設定もあります)。

特に数値表示の書式設定はかなり面倒です。
例えば、デフォルトの数値表示に設定する場合、以下のコマンドが必要になります。

{ "#.12#." 1E-12 "#.12#.E*" 1E12 "#.12#.E*" } SETNFMT

書式設定をリスト { } で表現し、SETNFMT コマンドで設定します。
{ } 内の意味は、
「通常時は書式 "#.12#." で表示(12桁の指数なし)」
「数値が 1E-12 よりも小さいときは書式 "#.12#.E*" で表示(12桁の指数あり)」
「数値が 1E12 よりも大きいときは書式 "#.12#.E*" で表示(12桁の指数あり)」
という意味です。

上の書式設定は煩雑ですが、一部だけ設定することもできます。
しかし、設定を色々と変更した後でデフォルト設定に戻すときは上の操作が必要です。

▲目次へ

CHOOSE ボックスがなくなった

HP 50g の CHOOSE ボックス
HP 50g(標準ROM) の CHOOSE ボックス

HP 50g(標準ROM) の場合、CHOOSE ボックスがありました。 Soft Menu だと1項目に5文字しか表示できないので、その制約をある程度解決する手段でした。

しかし、newRPL は CHOOSE ボックスがありません。 そのため、Soft Menu だけで操作しないといけないのですが、項目名が長いときは何を表示しているのか分かり難くなります。

▲目次へ

プログラムの実行速度

以下の式をプログラムにしたものを使って、HP 50g(標準ROM) と HP 39gs(newRPL) の速度を比較します。

実行速度を測定するための数式

プログラムは以下のものを使います。数式はRPN的に書いています。
角度単位はラジアンです(実行前に要設定)。複素数モードはOFFにします。

      
        «
          0        @ Total
          0 10000  @ The beginning and the end of X
          FOR X
            X SIN
            X COS
            1
            +
            +
            X
            *
            →NUM
            +      @ Add 'X*(SIN(X)+COS(X)+1)' to the total
          NEXT
        »
      
    

測定結果は以下のようになりました。

実行環境 処理時間[秒] 結果 備考
HP 39gs(newRPL) 21 50004626.1234. 内部精度12桁
HP 39gs(newRPL) 27 50004626.12212445136. 内部精度32桁(デフォルト)
HP 50g(標準ROM) 355 50004626.1234 内部精度12桁

同じ内部精度12桁で比較すると、HP 39gs(newRPL) の方が HP 50g(標準ROM) よりも約17倍高速です。
しかし、思ったほどの差ではありませんでした。 というのも HP 39gs(newRPL) の方が圧倒的に有利なはずだからです。

HP 50g と HP 39gs は、どちらも CPU は同じ Samsung S3C2410A (ARM920Tコア) を搭載しています。
HP 50g(標準ROM) は、最大クロック周波数が75MHzです(HP 39gs(標準ROM) も同様)。

しかし、HP 39gs(newRPL) はオーバークロックによって最大192MHzまで向上しています。
さらに HP 50g (標準 ROM) は、Saturn CPU エミュレーターと RPL インタープリターが足かせになっているので、非常に不利です。

以上のことから何十倍も高速なことを期待していたのですが、そこまでの差はありませんでした。
とは言っても HP 39gs(newRPL) の方が圧倒的に高速なのも事実です。

▲目次へ

PC と HP 39gs(newRPL) 間の通信

HP 39gs(newRPL) と PC が接続されている様子

newRPL Desktop Build 1089 はエミュレーター兼PC接続ソフトです(Windows 専用)。

newRPL Desktop Build 1089

このソフトウェアによって、USB ケーブルを経由して HP 39gs(newRPL) と PC を接続できるのです。
HP 39gs(newRPL) は、SDカードが使えないので、USB通信が重要になります。

▲目次へ

接続方法

前回 HP USB Drivers をインストールしたので、HP 39gs(newRPL) を USB ケーブルで PC に接続しても newRPL Desktop と接続できません。 なぜなら、HP 39gs(newRPL) は PC 接続ソフト Conn3x で識別できる 'HPx9G+ DEVICE' というデバイスになっているからです。 newRPL で識別できる「USB入力デバイス」にしないといけません。

以下のような手順が必要です(Windows 7 の場合)

  1. Windows PC 上でデバイスマネージャーを開く。
    デバイスマネージャー
  2. ユニバーサル シリアル バス コントローラー の中に表示されている 'HPx9G+ DEVICE' をダブルクリックする。
    HPx9G+ DEVICE in USB Controller
  3. プロパティが表示されるので、ドライバータグの「ドライバーの更新(P)」ボタンを押す。
    HPx9G+ DEVICE のプロパティ HPx9G+ DEVICE のプロパティ・ドライバータグ
  4. 「ドライバーソフトウェアの更新」が表示される。「ドライバー ソフトウェアの最新版を自動検索します(S)」を押す。
    ドライバーソフトウェアの更新 ドライバーソフトウェアを更新中
  5. しばらくすると「ドライバーソフトウェアが正常に更新されました。」と表示されるので、[閉じる]を押す。
    ドライバーソフトウェアが正常に更新されました

この時点で Conn3x と HP 39gs(newRPL) は接続できなくなります。
デバイスマネージャーに 'HPx9G+ DEVICE' は表示されなくなり、ヒューマン インターフェース デバイスの中に「USB入力デバイス」が表示されます。これが HP 39gs(newRPL) です。
「USB入力デバイス」が複数表示されているときに HP 39gs(newRPL) を判別する方法は、後述します。

デバイスマネージャーがUSB入力デバイスを表示している
  1. newRPL Desktop の Hardware メニューから 'USB Connections...' を選択する。
    Hardware メニュー
  2. 表示される [Select a USB Device] を押す。
    Select a USB Device
  3. 接続している HP 39gs(newRPL) が 'newRPL Calc' として表示される。それを選択すると、[Cancel] が [OK] に変わるので、[OK] を押す。
    接続している HP 39gs(newRPL) が表示されている
  4. [Select a USB Device] が表示されていたところに HP 39gs(newRPL) のシリアル番号とOSのビルド番号が表示される(シリアル番号は何故か文字化けしている)。
    HP 39gs(newRPL) のシリアル番号とビルド番号が表示

これで HP 39gs(newRPL) とPCの接続ができました。

▲目次へ

全データのバックアップとリストア

接続後、newRPL Desktop Build 1089 は、HP 39gs(newRPL) の全データのバックアップとリストアが可能です。

Remote USBARCHIVE to file...

バックアップファイルの拡張子は .nrpb のファイルとして保存されます。 一部のデータだけをバックアップすることは Build 1089 だとできないようです。

▲目次へ

スタック上のオブジェクトの送受信

接続後、HP 39gs(newRPL) と newRPL Desktop の間でスタックのオブジェクトを送受信できます。
これによってプログラムやデータの転送などを行えます。

PC のクリップボードと newRPL Desktop のスタック間でテキストのやりとりもできます(下画像の Level 1 は、スタックのレベル1のこと)。

newRPL Desktop の Stack メニュー

スタック上のオブジェクトの送受信方法には、2つの方法があります。

USBSEND だけを使う方法

  1. 送信側のスタックレベル1に送信したいオブジェクトを置く
  2. 送信側で System>USB>USBSEND を実行
  3. 受信側のスタックレベル1に送信されたオブジェクトが到着する
  4. 送信側のスタックレベル1に USBSEND の戻り値が入る(成功した場合、1)

手軽に使える方法ですが、プログラムオブジェクト(« » で囲まれたオブジェクト)の送信に難点があります。
プログラムオブジェクトに対して USBSEND を実行すると、送信側でプログラムを実行してからスタックレベル1を送信するという動きになります。
つまり、プログラムの戻り値だけを送信することになります。

そのため、プログラムオブジェクトの送信を行うために工夫が必要です。
この方法でプログラムオブジェクトを送信するには、Prog>Text>→STRコマンドで文字列化してから送信する必要があります。
もちろん受信側で Prog>Text>STR→ コマンドを実行して、テキストをプログラムオブジェクトに変換する必要があります。

受信側で USBRECV をする方法

  1. 送信側のスタックレベル1に送信したいオブジェクトを置く
  2. 受信側のスタックレベル1に受信待ち制限時間を秒単位で表現した数値を置く
  3. 受信側で System>USB>USBRECV を実行(上の待ち時間だけ通信を待ち続ける)
  4. 送信側で System>USB>USBSEND を実行
  5. 受信側のスタックレベル2に送信されたオブジェクトが到着し、レベル1にUSBRECVの戻り値が入る(成功した場合、1)
  6. 送信側のスタックレベル1に USBSEND の戻り値が入る(成功した場合、1)

この方法の場合、プログラムオブジェクトをそのまま送信できます(少なくとも Build 1089 では可能)。

▲目次へ

Conn3x を接続できるように戻す方法

HP 39gs(newRPL) と PC接続ソフト Conn3x を接続しないとファームウェアの更新ができません。 そのため、Conn3x と接続できるように設定を戻す必要があります。

  1. デバイスマネージャーのヒューマン インターフェース デバイスの中の「USB入力デバイス」をダブルクリックして、プロパティを表示します。
    デバイスマネージャーに「USB入力デバイス」が表示されている

    「USB入力デバイス」が複数表示されているとき、プロパティの詳細タブの「バスによって報告されるデバイスの説明」を選択して、「newRPL Calc」と表示されれば、newRPL 電卓ということになります。
    newRPL Calc
  2. プロパティの「ドライバー」タブを押す。
    USB入力デバイスのプロパティの「全般」タブ
  3. 「ドライバーを元に戻す(R)」を押す。
    プロパティの「ドライバーを元に戻す(R)」
  4. 「はい」を押す。
    「ドライバーパッケージを戻す」ダイアログ
  5. プロパティを閉じる。

これで HP 39gs(newRPL) は、Conn3x と接続できるようになります。

▲目次へ

総評

newRPL Build 1089 の機能数は HP 50g(標準ROM) から大幅に少なくなっています。
特に CAS(数式処理システム)がないため、実用性は大きく見劣りします。

その代わり、高速化や内部精度を始めとする電卓の基本的な作りは改良されています。
さらにこのページに書いていない多くの細かい改良があります。

将来のバージョンアップに期待と言ったところでしょうか。 しかし、newRPL の開発元の HPGCC3.org が将来の計画を明らかにしておらず、いつになったら newRPL が完成するのかは不明です。 SOURCEFORGE によると、ソースコードのコミットは2019年3月現在でも行われています。

newRPL の将来に関して心配なことがあります。

  1. 動作対象ハードウェアがいずれも生産終了になっている。
  2. 動作対象ハードウェアの画面解像度が低い。HP 39gs/HP 40gs は、131×64 画素。HP 50g でも 131×80 画素にすぎない。
  3. CAS の実装をどうするのか?
以上の問題から newRPL の発展が阻害される可能性もあります。
▲目次へ

[表紙へ]