ここに発表したプログラムは基本的に対応機種で示したとおりに動作しますが、一部の PB-100 にそのままでは動作しないものがあります.
原因は初期出荷バージョンのバグで、後期に出荷されたものは改善されています. また、初期出荷バージョンの中にも何種類かあるようです.
現在のところ、初期・後期の見分け方やバグの全容は確認できておりません. そのために連絡が来次第、個別に対処している状況です.
以下に連絡を頂戴したタイトルについて解決法を紹介します.
SGN
に絡む異常動作
タイトル | 異常動作の原因ヶ所 | 解決法 |
---|---|---|
Mr.T | 10行の;S=S+3-4*SGN S | ;S=-4*SGN S+S+3 に変更 |
トロネコの大冒険 4(Version 1.2.1まで), 1.3.0以降では不要になりました | 10行の;G=G+3-4*SGN G | ;G=-4*SGN G+G+3 に変更 |
「Mr.T」、「トロネコの大冒険 4」とも、赤池 将樹氏より異常動作の原因ヶ所と解決法を頂きました.次にメールの該当部分をご紹介いたします.
(D はキー入力毎に、0,3,2,1,0,3という循環になるところを、) run モードで D=D+3-4*SGN D
を繰り返したところ、0,3,1,-1,7,5,3という循環になりました。
D=(D+1)*SGN (3-D
は大丈夫でした。
多分バグで計算の順番を間違えるのだろうと思い、以下の数式を試しました。
D=D+3-4*SGN (D)
D=(D+3)-4*SGN D
D=D+3+(-4*SGN D)
D=3+D-4*SGN D
全てダメでした。
D=-4*SGN D+D+3
としたところちゃんと動作しました。
元の式から1ステップ損をしてしまいますが、これなら0,3,2,1,0の循環になりました。 どうも D+3
の D が無視されてしまっているようです。
試しに SGN D
の部分を本来の動作通りになるように0または1にして式を入力するとちゃんとした結果が出てきます。
そうなると式の中に SGN
が入ることでおかしくなるのかと思い、以下の式を試しました。
E=0
D=D+3-4*SGN E
これで E が本来の通りの動作をするように0または1を代入しながら式を入力しましたが、0,3,1,-1,7,5,3 になってしまいました。
D=-4*SGN E+D+3
でちゃんと動作しました。
やはり式の中における SGN
の位置によって D=D+3
の D が無視されてしまうようです。
SGN
を駆使してリストを圧縮するテクニックは(おそらく)後年になって出てきたものなので、今まで知られていなかったのでしょう.
今後、SGN
を使うときは残りステップに気を配るなど注意が必要です.
このほかの異常動作
初期出荷バージョンの異常動作については、ポケコンジャーナル誌に関連する投稿がありますので紹介します.
(PB-100の)中でもいくつか細かいヴァージョンがあり、詳しいことは不明です.具体的には、「
10 VAC :PRINT A
」というプログラムで異常動作するかしないかなどです. 最旧のものは異常動作をしてリセットするまで復旧しません.
また、VAC
による異常動作については以下の記事がありました。
旧PBは(PB-100を含むバージョン1機)、
VAC
の直後に「配列変数」及び「END,INPUT,PRINT,SET,RETURN
以外の命令」を置くことはできません.
例 VAC :Z(1)=0:C=0
→ 異常動作をする VAC :C=0:Z(1)=0
→ 正常動作をする
関連情報
私のPB-100は初期のものですが、
10 VAC:FOR I=0 TO 10:NEXT I
などのように、VAC
の後にループを作ると暴走します.