Quantcast
Channel: 高機能電卓の情報
Viewing all articles
Browse latest Browse all 149

HP50g : SysRPLで配列を扱うためのメモ

$
0
0
SysRPLにも配列(行列、ベクトル)を確保するためのコマンドがいくつかあります。まずは「^MAKEARRY 」というコマンドを使ってみようと思いました。

HP49G Entry Reference
https://staff.fnwi.uva.nl/c.dominik/hpcalc/entries/hp49g/entries.pdf

には、SysRPLの多くのコマンドが掲載されています。しかし、これに従ってコードを書いてみたのですが、なかなかうまく動いてくれません。(注意 ! このコードは確実に暴走します)

!NO CODE
!RPL
::
  { 3 } %2.3 ^MAKEARRY
;
@

ホトホト困り果て、調べてみた所、どうやら足りないモノがあった模様。

HP49G SYSRPL ^MAKEARRY HELP - compgroups.net
http://compgroups.net/comp.sys.hp48/hp49g-sysrpl-makearry-help/123989

によると、「If the command start with ^, add FPTR2」とあります。^MAKEARRYの様にキャレットで始まるコマンドを使う場合、FPTR2 を付けよ、という具合らしい。エェッー、そんなん聞いていないヨ !!
そんな具合で、取り敢えず「配列を作る(だけの)」プログラムは、こんな具合になりました。

!NO CODE
!RPL
::
  { 3 } %2.3 FPTR2 ^MAKEARRY
;
@

  1. { 3 } で作成する配列の大きさを指定し、
  2. 各要素の初期値を %2.3 (実数値の2.3) として、
  3. FPTR2 ^MAKEARRY で配列を作成します。

これで作成できるのは配列と言っても「ベクトル(1次元配列)」です。大きさの指定を変える事で行列(2次元配列)も作成できます。

配列を作る命令語には、ほかに「^XEQ>ARRY」などがあります。^XEQ>ARRYは、スタックから、配列の大きさと構成する要素を取り出して配列を構成します。キャレットが付いているので「FPTR2」を忘れずに。
配列の要素取り出しには「GETATELN」、要素設定には「PUTEL」があり、この辺りのコードを使った習作を示しておきます。

!NO CODE
!RPL
::
    %0 %1 %2 %3 %4 { %5 } FPTR2 ^XEQ>ARRY
    DUP
    #4 SWAP GETATELN DROP
    %5 %* #3 PUTEL
;
@

無事に実行が終わると [0. 1. 15. 3. 4.] というベクトルがスタックに残っている筈です。

大して長いコードではないのですが、勉強しながらの作業なので暴走させる事もしばしばです。

今回は、リセットが効かない暴走を経験しました。リセットを掛けようとON+[F3], ON+[F1]+[F6] を押しても、反応がないのです。画面の下、4/5が真っ黒くろすけになって、動きがないのですね。これはコマッタ。

Educalc.netに「電池抜きリセット」(電池を全て取り外し、15分以上放置新聞)というTipsが出ていたので、藁をもすがる思いで試したのですが、電源を入れても同様の状態です。ウーム !?
検索していたら、「FlashROM更新とセルフテストメニューの呼び出し」という話題が見つかって、「そうだ、コレだ」と試してみる事にしました。ON+[F3]が効かないので、電池を入れる前に「+」、「-」キーの両方を押しておき、押しながら電池を装填するという奇っ怪な技でメニューの呼び出しに成功し、セルフテストも一通り問題ない事が確認できました。ハードウェアはイカれていない様子。そこで判ったのは「SysRPLの暴走で、FlashROMが書き換わってしまった」という可能性です。
現在、最新のROMは2.15で、これは一度書き込んでいるので、手元にイメージはあります。早速、SDカードによるFlashROMの書き込みを行い、ようやく復旧したという次第です。ヨカッタ、ヨカッタ。



Viewing all articles
Browse latest Browse all 149

Trending Articles