コミュニティアイコン プチコン 非公式コミュニティ プレイ日記

アバター
Ryou Tanpo ◆AI5iRr9FjmkJ
2018/1/4 7:54 ネタバレ
DIRECT モード専用命令って解釈が特殊みたいだ。

試しに SLOT3 にプログラムを読み込んでから次を実行して比較してみてください。
RUN 3
RUN "3"

コメント

アバター
Ryou Tanpo 2018/1/4 7:57 ◆AI5iRr9FjmkJ
DIRECT モード専用命令のふしぎ

1. DIRECT モード専用命令では、数値と文字列は同等になる。
→ RUN と NEW は確認。
2. CLEAR というトークンが現れると、メモリがクリアされる (CLEAR の機能) がその後のトークンは全て無視される
→ CLEAR//@@@@@%%%1784993$$$!!!!
  こんなのもエラーにならないのかよ!!

全て最新の ver3.5.2 での情報です
アバター
はる 2018/1/4 8:18 ◆75Vh4SY8TdKS
自分(Ver. 3.5.2使い)は、
RUN マイナス値
をしてもエラーにならず、
RUN
と同じ扱いになりました。

↓共感数がバグっています。(1つ分足りません)
アバター
Ryou Tanpo 2018/1/4 9:41 ◆AI5iRr9FjmkJ
> はるさん
RUN のマイナス値は僕も調べていました、思い出させてくれてありがとうございます!

3. RUN にマイナス値を指定すると 0 を指定したことになる
アバター
あまさとしおん 2018/1/4 16:10 ◆mzDKTVUAtwqE
以前にwikiのここに書き加えてます
http://wiki.hosiken.jp/petc3gou/?cmd=read&page=Mame%2FReference%2FDirectModeOnly#Note

3号系列では昔っからずっとこうだよね(mkII以前は普通だった気がするけど)
アバター
あまさとしおん 2018/1/4 16:10 ◆mzDKTVUAtwqE
(でも負値の扱いは初耳だったわ)
アバター
TTcreation 2018/1/4 16:28 ◆Wxr8pfzFRun3
DIRECTモード専用命令は比較的強引な処理を行っていると聞いたことがあります。

EDITモードの命令ではマルチステートメントやQSPなどの機能(需要?)のために言語エンジンを固めてあるのですが、
DIRECTモード専用命令はそれを想定していないためにこのような現象が起こるようです。
アバター
TTcreation 2018/1/4 16:31 ◆Wxr8pfzFRun3
"mkll以前はCLEAR命令をEDITモードでも使用できたが、3号での仕様変更に伴いDIRECTモード専用命令になった"という歴史もありますし、
デベロッパ側としてもあまり複雑な記述を想定していない(想定する必要がない)のかもしれませんね。
アバター
Ryou Tanpo 2018/1/4 18:43 ◆AI5iRr9FjmkJ
> TTcreation さん
そうですね。例えば LIST 命令などはスロットを指定する際のコロンや ERR という独自のキーワードなどは通常のインタプリタでは解釈できないのでこのような DIRECT モード専用命令だけ強引な処理というふうになっているのでしょう。
アバター
TTcreation 2018/1/4 19:01 ◆Wxr8pfzFRun3
ERRはMkllの名残という可能性もありますね(当時はERRLINEは存在しませんでした)

コロンはLOAD/SAVE命令のファイル種別でも使用されているので、3号で追加された"種別や大きな分類"を示す形式なのかもしれません(GOTO、GOSUB、RESTOREもそうですね)
アバター
Ryou Tanpo 2018/1/4 19:11 ◆AI5iRr9FjmkJ
> TTcreation さん
LOAD/SAVE もそうですが、 GOTO などのラベル指定に使う 3: とかの方が近いかな…そこ突っ込んでもしょうがないけど

GOTO "3:@HOGEHOGE"
アバター
Ryou Tanpo 2018/1/4 19:12 ◆AI5iRr9FjmkJ
4. RUN / NEW では数値と文字列は同等だが、マイナス値を表した「文字列」では Out of range

意味わかんない、統一しないのかね…
アバター
はる 2018/1/5 8:24 ◆75Vh4SY8TdKS





どうやら、
文字列ではないプラス値の場合か、
文字列であるマイナス値の場合は、

-2³¹より小さい数字を表した文字列、
指数表記、数値を表していない文字列、inf(無限大)やnan(非数)、
定数リテラル、システム変数、関数で、

Illegal function call
になるようです。

意外にも"&B0"等の10進数以外の表記は大丈夫でした。
普通に示した番号が実行されます。

文字列ではないマイナス値は、
どんなのでもいいみたいです。
ふざけて、
RUN - ИUЯ
とやってもエラーにならずにSLOT0が実行されましたw



2³¹についての話


FORMAT$関数やRND関数は2³¹より大きい数が入力されると、
Overflow
になったりするので、
プチコンにとって2³¹は何かの境目なのかもしれません。
アバター
Ryou Tanpo 2018/1/5 9:13 ◆AI5iRr9FjmkJ
RUN / NEW についての挙動をまとめました。入力した命令と、実際に消去されようとした SLOT だけ記載します。

NEW 0 → 0
NEW 3 → 3
NEW 4 → Out of range (範囲外)
NEW -3 → 0 (マイナス数値はゼロになる)
NEW &B01 → 1 (2進数はOK)
NEW &B11 → 3 (同様)
NEW &B100 → Out of range (10進数で4に相当するため)
NEW &B02 → 0 (こんな2進数リテラルはありえない、通る!!)
NEW &B2 → Illegal function call (こんな2進数もありえない、通らない!!)
NEW &B11111111111111111111111111111111 (2進数で表した-1、10進数はマイナス値はゼロになるが、2進数ではダメ)
NEW &H02 → 2 (16進数もOK)
NEW &H40000000 → Out of range (10進数で1073741824に相当する)
NEW &HFFFFFFFF → Out of range (16進数の-1だが、2進数と同様にダメ)
NEW 1+1 → 1(式の場合は最初のオペランドだけが評価される)
NEW 3-2 → 3 (同様)
NEW 2+"AAA" → 2 (同様)
NEW 2+///@@@$$$$$ → 2 (もはや無視されている)
NEW 3*9-TIYR[JD([96#%-]@IDW2$DSDぶはは → 3 (同様、無視されている)
NEW . → Illegal function call (通常のプログラムでは小数点のみはゼロとなる)
NEW 1.0 → Illegal function call (そもそも小数がダメ)
アバター
Ryou Tanpo 2018/1/5 9:28 ◆AI5iRr9FjmkJ
続き

NEW "0" → 0 (文字列は数値とに変換される)
NEW "1" → 1(同様)
NEW "3" → 3 (同様)
NEW "-1" → Out of range (10進数値ではOKだったマイナス値は文字列ではエラー)
NEW "1+1" → Illegal function call
NEW "9" → Out of range
NEW "&B11" → 3 (2進数を表した文字列でも可能)
NEW "&H02" → 2 (16進数の文字列も可能)
NEW "&B02" → Illegal function call (ありえない2進数だが文字列ではない NEW &B02 は通ってしまう。)
NEW "&B2” → Illegal function call (こちらもありえない2進数だが、NEW &B2 は通らなかった)
アバター
Ryou Tanpo 2018/1/5 9:29 ◆AI5iRr9FjmkJ
2進数リテラルで 2 が出てくるってありえないけど
NEW &B02 → 0
NEW &B2 → Illegal function call
NEW "&B02" → Illegal function call
NEW &B2" → Illegal function call
どういうことなのかさっぱり。
アバター
Ryou Tanpo 2018/1/6 17:57 ◆AI5iRr9FjmkJ
NEW だけ書いていますが RUN も全く同じです

コメントを書く

この投稿にはコメントできません。

- WEB PATIO -