2007年11月20日火曜日

SysRPLを始めようと思っている人のために

SysRPLは、HP50gなどで使えるシステムプログラミング環境です。SysRPLに対して、通常のRPLプログラムは「UserRPL」と呼ばれる事が有ります。
SysRPLは、非常に強力な機能を持っていて、間違ったプログラムを作成、実行してしまうと、電卓のシステムそのものが破壊されてしまう場合がありますが、その分、UserRPLに較べて圧倒的なプログラム実行速度が得られるものです。

筆者もSysRPLを始めてみようと思っている一人ですが、始めるにあたって、必要な環境を調べてみました。基本的には、HP50g本体があれば、プログラムは作成可能のようです。しかし、必要なライブラリなどがあるので、それをwebから入手しておかないとなりません。

まず、SysRPLプログラムの基本情報が書かれている「HP 49g+ & 48gII_Advanced User's Reference Manual」が必要で、HPのサイトからPDFファイルを取り込めます。


HP 49g+ & 48gII_Advanced User's Reference Manual_English_E_F2228-90010.pdf


さらに、SysRPLの入門書「Programming in System RPL」があります。これもHPcalcからPDFファイルが取り込めます。


Programming in System RPL (PDF)



Programming in System RPL (Programs)


そして、初期段階では、次の「extable」というライブラリが必要です。


extable


これだけでSysRPLのプログラミングの基礎は試せる様になりました。しかし、これで十分という訳ではありません。あくまでも、サンプルのコードが実行出来るまでの準備です。SysRPLを極めるには、より多くの情報が必要になると思いますが、それをこの小文で述べるのは難しいことです。

(続きは文書置場にあります。興味のある方はどうぞ)

17 件のコメント:

kaak さんのコメント...

日本語で書かれたSysRPLの解説は今までないと思いますので貴重なものをありがとうございます。SysRPLを使うとHP50のすごさをあらためて実感します。

SysRPLのプログラムでちょっと便利なこととして、システムフラグの85にチェックを入れて SysRPL stk disp にすると、コンパイル後のプログラムが(短いものであれば)読めるようになります。

akatuki さんのコメント...

遅くなりました。
いや、コレはkaak様、コメントを戴きまして有難う御座居ます。こうしたコメントを戴きますと、大変励みになります。
同時に貴重な情報を戴きまして有難う御座居ました。早速試して見ましたが、これは便利です。

本来は、はるまき様の領分(?)かも知れませんが、現状では本業が忙しく少々時間が必要な御様子なので、その「下準備」として、先ずは入門環境の話題を書いてみました。いずれ、当方のSysRPLの勉強に進捗がありましたら、続きが書けるかも知れませんが、その頃には、はるまき様の方でも何か始まるかも知れませんね。

当方は未だSysRPLを始めたばかりなので、入門のサンプルコードを調べるのに四苦八苦しております。今回の文書にも誤りがあるかも知れません。それも含めまして、出来ましたら色々と御指導戴ければ幸いです。

はるまき さんのコメント...

ご無沙汰しております。
こちらの思惑は関係なく、突っ走ってくださいな(^^;

最近、SysRPLをちょいちょい弄ってみましたが、今後はどうするか未定です。速いのは速いのだけど、今の自分の使い方だとUserRPLで十分で・・・(オイ

とか考えているうちに、全く別の事にはまっています。これまたそのうち、ですが、なにぶん趣味ペースで、需要も今以上に無い(と思われる)ネタですので・・・(^^;

それではまた。

akatuki さんのコメント...

遅くなりました(こればっか)。
はるまき様、コメント有難う御座います。
当方も少しかじり始めた程度で停滞しておりますが、少し新しい情報でも溜まってきましたら上げようか、などと考えております。
後、誤りなどがありましたら御指摘戴けると幸いです。

別の事、と申しますと、やはり「touchkeysip」の事でしょうか ?

はるまき さんのコメント...

いやいや、あれは連休中にちょっとした暇つぶしをしてたら出来てしまったので、なんか勿体無くてアップしただけです(汗

はまっているのは、電卓でもiPAQでもない事でして、ウチの「雑記」向きの話です。

ところで、SysRPLだとグラフィックの描画も早くなるんでしょうか?そうだとしたらそっち方面から攻めていきたいなぁ。

akatuki さんのコメント...

> はまっているのは、電卓でもiPAQでもない事でして、ウチの「雑記」向きの話です。

という事は、釣りの話なのでしょうか ?

> ところで、SysRPLだとグラフィックの描画も早くなるんでしょうか?そうだとしたらそっち方面から攻めていきたいなぁ。

ウーム、未だそこまでやっていないんですよ ... その内にでも試してみたいものです。

kaak さんのコメント...

はるまきさん、akatukiさん、こんにちは
横から失礼します。
グラフィックはあまり扱っていないのでよくわかりませんが、原則としてループがある等で実行するコマンドの数が多い場合にはUserRPLとSysRPLの速度差は大きくなります。逆にループがなくコマンドの数も多くない場合には速度差はあまりありません。
グラフィックとは具体的にはどのような場合でしょうか?

SysRPLでなければできないことはあると思います。例えばカーソルキーを押し続けると画面で十字マークが動き続けるというのはSysRPLでは作れますがUserRPLでは作れないと思います。

はるまき さんのコメント...

kaakさん

グラフィック関係で遅いと感じるのは、例えばARCで0~2πで円を描画したときとか、一つの円だけでも描画が一周するまで時間がかかりますよね。アニメーションを作ったりするとき、こんな描画が含まれると数枚のgrobオブジェクトの生成でも結構時間がかかるわけです。

想像では、ARCの例でいくと、内部的には1ピクセル単位の描画コマンドを引数チェックしながら一周分ループさせているのかな?と勝手に考えています。

最近、電卓方面では、いろいろな物理現象の時間変化をアニメーションで動かしてみたりして遊んでいるので、この辺が気になっているのです。もっと速く処理してくれないかなぁ?って。

複雑な描画が増えて遅くなると、電池が勿体無いと言うか・・・(笑)

akatuki さんのコメント...

kaak様、はるまき様、いらっしゃい(笑)。
いや、これは、いつの間にやら話が進んでいますね。

「progsysrpl.pdf」の4ページには「入門コード」が出ていますが、同様の動作をするUserRPLの方では0.0156秒掛かる所、SysRPLでは0.0019秒の速さと出ていましたから、単純に書き換えをするだけでもかなり早くなりそうな感じがします(楽天的過ぎるか)。

少なくとも、ONキーによる割り込みを監視しなくても良い分は早くなりそうな気がしますが、どうなんでしょうね。

kaak さんのコメント...

HP50にemacs, Nosy, extable をインストールするとUserRPLコマンドの中身がSysRPLやアセンブラでどのように書かれているかがわかります。

ARCの中身は次のようになっています。
::
CK4&Dispatch
# 2111
PTR 2F11E
# 5B11
PTR 2F11F
;

中心の座標を複素数、半径、角度を実数で入力する場合は # 2111 になるので PTR 2F11E が実行されます。
したがって

::
PTR 2F11E
;

とすると変数チェックが省かれて速くなります。ARCをたくさん実行する場合にはこれだけでも速くなります。

ただし問題点が2つあります。その一つは、PTR 2F11E というのはSysRPLの本に書かれていないので(書かれていれば PTR 2F11E というアドレスではなくコマンド名が表示されます)、ROMバージョンが変わると動かなくなる可能性があります。

もう一つは、変数チェックが省かれているので、他のタイプの変数を入力するとハングします。したがって上記のようにして作ったコマンドを直接使うのは大変危険で、他のプログラムの出力で複素数、実数が出力されることがわかっているものに対して使わなくてはなりません。
またARCを一度実行するだけなら速度の違いはわずかで目に見える違いにはなりません。

Emacs等をインストールすると PTR 2F11E の中身をさらに見ることができます。これを見て不要なものを省けば速くなるはずですが、実際に見てみると意外に長いプログラムなのでちょっと大変そうです。一からSysRPLでプログラムを作ったほうが楽かもしれません。

長々と書きましたが、結局解決法を提示できずすみません。

akatuki さんのコメント...

kaak様。
ウーム、コレは当方の様な若造には未だ、敷居が高いものですが、大いに参考になります。有難う御座います。

以前、48SXを使っていた頃に、GROBを使ったアニメーションを作った事がありましたが、確かに、元になる絵を作るのに時間が掛かっていたものでした(当時はSysRPLを知らなかったので、UserRPLで作成していたのです)。

はるまき さんのコメント...

なるほど、Emacsとかで見ることができるのですね。キーボード慣れしていたので、電卓でEmacsって何を??と思っていたのですが。

調べてみると、ARMの上にSaturnエミュレーターが被さって、その上にSysRPLなのですね。とことん速さを追求するならアセンブラかCになってくるのか。

おっしゃるとおり、1から作るのが早そうな気がしてきました。せっかくLinux環境に戻ってきたこともあるし、HPGCCかアセンブラでも試してみようかな。SysRPLはコマンドが多すぎてイマイチ把握しきれないし、ARM系のアセンブラなら覚えると他のデバイスに流用できそうな気が・・・。

それではまた!

kaak さんのコメント...

速度は ARMアセンブラ≒HPGCC > Saturnアセンブラ(別名 ML) > SysRPL > UserRPL となります。(ARMアセンブラはHPGCCよりわずかに速い)

コマンドARCを速くしたいのでしたら、HPGCCが一番近道かもしれません。ARCでしたらHP50g内蔵のコマンドを使わずにプログラムできそうですし(内蔵コマンドはHPGCCでは使えない)、ARMアセンブラよりやさしそうです。

ただし、ARMアセンブラやHPGCCで作ったプログラムを動かすエミュレータが無いので開発は少し不便です。debug4x, HPuserEdit 等のエミュレータはSaturnCPUをエミュレートしているので Saturnアセンブラ, SysRPL, UserRPL 以外は動きません。ARMアセンブラ等が動くエミュレータの開発プロジェクトはありますが(sourceforge.net で HP49g+ 等で検索すると見つかる)、どこまで出来ているかは知りません。

これは調べていないので正しいかどうかわかりませんが、もしかするとHPGCCで書いた絵を通常のHP50で使う画面(PICT等)に保存できないかもしれません。一般にHPGCCと通常のHP50gで使うデータのやり取りは非常に制限されています。

Saturnアセンブラ、SysRPLであればエミュレータはあるし、PICT等の制限はありません。どうすれば良いか難しいですね。

速くするまったく別の方法としてオーバークロック(CPUの速度を上げる)を使う方法もあります。hpcalc.orgでoverclockで検索すれば見つかります。これは確実に速くなります。ただし速くした分、消費電力も増えるので電池の点からは良くないですね。

Stepney さんのコメント...

akatuki様
お久しぶりです。

私もSysRPLに関する情報を求めて、右側の「文書置き場」の5番「SysRPLを始めようと思っている人のために」を読もうと思ったのですが、「Google 権限が必要です」という画面が表示され、開くことが出来ませんでした。
5番の他にも同様のことが起こったのが、3番、7番、8番、9番でした。

私の環境が悪かったのかも知れませんが、akatuki様の方では開くのか少し確認をお願い出来ないでしょうか。

akatuki さんのコメント...

Stepney 様。

コレは申し訳ない。暫く「当方の文書」は放置新聞だったため、権限とか、ろくに見ていなかったのでした。
早速、全ての文書を公開状態にしたので、御確認戴き渡く。(HP35Sの再帰処理、いうのは「ネタ」ですから、あんまり本気に取り組まないでネ)

Stepney さんのコメント...

akatuki様
件の文書ですが、無事開くことが出来ました。
これで、念願だったSysRPLのプログラミングも実現出来そうです。
ありがとうございました。

akatuki さんのコメント...

いえいえ、遅くなってしまい、申し訳ない。

最近、当方もSysRPLの勉強を怠っているので、なかなか耳が痛いのですが、入門用の文書であり、此処から先が結構大変だと思います。

お互い、地道に研究を進めましょう。