ブログトップ

電子工作やってみたよ

HP15C 石取りゲームのソフト、やっと解りました。

HP15C 石取りゲームの動作 やっと解りました。
延べ2週間 いろいろな手で考えました。
最初の表はやっと解ったことを、プログラムリストに細かく記入しました。
たぶんこのリスト数か月後にみたら私自身でも解らなくなるのじゃないかな。
ひとかたまりの動作をやる中で同じところを数値を変えながら何度も通過するのでステップ送りで見ながらやっても理解できなくなりました。
その次の表はステップ送りしながら、スタックおよびレジスタの数値を記入したものです。

HP15C石取りゲーム

01 LBL A ----------- スタート
02 5 ---------------- 逆表示 BLISSをR3にセット
03 5
04 1
05 7
06 8
07 STO 3
08 3 ---------------- 逆表示 1.LOSE をR4にセット
09 5
10 0
11 7
12 .
13 1
14 STO 4
15 1 ------------------- 残数の初期値 15を R0にセット
16 5
17 STO 0
18 FIX 0 -------------- 少数以下の表示を無くす
19 CHS --------------- マイナス表示にして人間の手番を教える
20 R/S ---------------- 最初の人間側の手入力待ち  (1 ~ 3)
21 ENTER
22 LBL B
23 1 ------------------ 人間側処理フラグ  1⇒R2
24 STO 2
25 R↓
26 LBL C
27 STO -0 ----------- 残数から人間あるいはHPの手番を引く
28 RCL 0
29 X=0 --------------- 残数R0がゼロならば終了
30 GTO 2
31 STO *2 ------------ 残数に極性R2(1又は-1)を掛けてR2にしまう
32 RCL 2 ------------- (HPと人間は共用)
33 R/S ---------------- 人間側 1~3の数値を入力 HP側では入力せず(R/S)を押す
34 X<>Y
35 TEST 3 ( X>=0 )
36 GTO D -------------- HP側の処理では LBLD へ行く
37 X<>Y
38 GTO B -------------- 人間側の処理では LBLB へ行く
39 LBL D
40 1 -------------------- 以後HP側の処理をするので -1 ⇒ R2 へ入れる
41 CHS
42 STO 2
43 0------------------ HP側処理カウンターをゼロとしここから 必勝ポイントを探す 
44 STO 1 ------------ カウンタが-1,-2,-3にて残数が4の倍数(4n-1)になるかチェック
45 LBL E
46 RCL 1 -------------HP側処理カウンターが3であれば-1,-2,-3の3回のチェックで
47 3 ------------------ 必勝ポイントがなかったので LBL1 へ行く
48 TEST 5 ( X=Y )
49 GTO 1
50 1 ----------------- HP側処理カウンターを プラス1する
51 STO +1
52 CHS -------------- 現在の表示残数から1を引く (-1を加算する)
53 RCL 0
54 +
55 RCL 1 ----------- (表示残数-1)からHP側処理カウンターの値を引く
56 -
57 4 ----------------- 上記値が4の倍数でなければ LBLE へ戻り
58 / ------------------ 再度HP側処理カウンターを変えた数で4の倍数かをチェックする
59 FRAC
60 TEST 0 ( X<>0 )
61 GOTO E
62 RCL 1 ----------- 4の倍数であれば、その時のHP側処理カウンターの値が
63 GTO C ----------- HPの引く手(1~3)となる, その値を持って LBLC へ戻る
64 LBL 1
65 1 ----------------- HP側処理カウンターを-1,-2,-3に変えても4の倍数(4n-1)が見つからなかったので
66 GTO C ----------- 1をHPの引手として LBLC へ戻る
67 LBL 2
68 RCL 2 ------------- 勝負がついたらここにくる
69 TEST 2 ( X<0 ) --- R2の値をみてHPの勝ちか人間の勝ちかを判断する。
70 GTO 3
71 RCL 3 --------------BLISSを表示
72 GTO 5
73 LBL 3
74 RCL 4 -------------- I.LOSSを表示
75 FIX 1
76 LBL 5
77 R/S

一つの手の処理に数値を変えて同一場所を何度も通過するので、追いかけるのが難しい

使用レジスタ
R 0 現在の残数
R 1 HP側のカウンターの数( 1, 2, 3 この中で4の倍数にあたるとこれがHP側の手となる)
R 2 HP側(+1)あるいは人間側(-1)

R 3 55178
R 4 3507.1



初期値や引く数などを変えてその時のスタックやレジスタの変化を細かく書いていき、どのような動作をするのか、調べていきました。

c0335218_19351617.jpg










この逆ポーランド法のソフトはCPUのアッセンブラ言語と言った感じでしょうか。
人間コンパイラが数式からソフトを作るのはそれほどの苦労もなくできると思いますが、
プログラムから元の式を復元するのは、なんの情報も無くては、かなり厳しいですね。
この次は、同じ動作をするプログラムをステップの制約をなくして、
いかにわかりやすく出来るか挑戦してみようかな。
でもこういうのって作り直すと余計に解りにくくなることが多いんですよ。
これ私だけですか。
ネットで見ると、C言語で10行足らずで出来ていますね。
この電卓やアーキテクチャできたのは、40年くらい昔でC言語は未だ出来ずBASICもやっとできたくらいでしょうか。
いまさらこんな事やって何になるの、なんて言わないでください。
私にとっては十分 ボケ防止のやくにたっているのですから。



追記 
ネットに上げると写真のリストは見にくい感じですね。
スキャナーでやり直してみましょうか。
結局 テキスト入力でプログラムとコメント入力しました。また調査します。


トラックバックURL : https://telmic.exblog.jp/tb/25891250
トラックバックする(会員専用) [ヘルプ]
※このブログはトラックバック承認制を適用しています。 ブログの持ち主が承認するまでトラックバックは表示されません。
Commented by 菅原 at 2016-08-13 16:15 x
スタックマシンの解析は面倒なので、それなら「最初から作ってしまえ」になりがちと聞きました。確かにFORTHなんかだと、使い捨てだったような...
Cの開発は1978年、例のK&Rの日本語版が出たのが1981年でしたね。翻訳は石田先生だっと思ったな。
C自体はシンプルですけど、c++になってシンプルさが失せてしまったのが残念。LINUXの世界にいるので、もっぱらC#とPythonで遊んでます。
Commented by telmic-gunma at 2016-08-13 19:26
> 菅原さん
そうそう GAME言語なんかも使い捨てソフトをつくるのに具合がいい、なんて言われていましたね。
私の考えでは「使い捨てソフト」と言うのは ほめ言葉と思います。
その場で必要なものをすぐ作ってすぐ役に立たせることができるなんて、すごくいいことだとおもうのですが。
HP電卓の逆ポーランド法も使い捨てプログラムという見方をすれば、今の自分に必要なものを自分でチョコチョコと
作ってすぐ役にたてるということで、電卓本来の役目にぴったりのような気がしますがいかがでしょうか。
話変わって、 私のHP電卓病 ますます重症になってきたみたい。 重症というか依存症なのかな。
次の次くらいのブログに書きますね。
名前
URL
削除用パスワード

※このブログはコメント承認制を適用しています。ブログの持ち主が承認するまでコメントは表示されません。

by telmic-gunma | 2016-08-11 20:35 | HP電卓 | Trackback | Comments(2)