Home > スポンサー広告 > TempAR - 0xD0コード

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

コメント: -

Home > スポンサー広告 > TempAR - 0xD0コード

Home > TempAR Usage > TempAR - 0xD0コード

TempAR - 0xD0コード


今まで有効な使い道がいまいち分かってなかったので
コードタイプ「0xD0」を使っていなかったのだが
少しテストしてみたらやっと理解できた。


Type 0xD0
Terminator
D0000000 00000000

Loads the previous execution status.
If none exists, the execution status stays at 'execute codes'.


Loads the previous execution status. の意味を今まで間違えて捉えていた。


■0xD0なし

1 条件式1
_M 0x9A000000 0x00000001 # if Pad = SELECT only

2 条件式2
_M 0x9A000000 0x00000008 # if Pad = START only

3 実行式1
_M 0x08801000 0x00000001 # store 08801000 = 00000001
_M 0xD2000000 0x00000000
■0xD0あり

1 条件式1
_M 0x9A000000 0x00000001 # if Pad = SELECT only

2 条件式2
_M 0x9A000000 0x00000008 # if Pad = START only

_M 0xD0000000 0x00000000 # Loads the previous execution status.

3 実行式1
_M 0x08801000 0x00000001 # store 08801000 = 00000001
_M 0xD2000000 0x00000000


コードは1-2-3の順に処理されるが、処理の際、
実行ステータスのtrue/falseで実行するか無視されるかが決まる。
条件式を満たせばtrueで条件式を満たさなければfalse。
条件式を単純に並べた場合、上から処理して途中で満たさないものがあれば
falseになり、次の行からは処理が実行されず、行だけを進める。

上記の例では、STARTとSELECTが押されていないと実行式1で実行されないが
STARTとSELECTの同時押しではだめで、STARTとSELECTがそれぞれ
単独で押されて、かつ同時押しされていない状態にしないといけない。
つまり実際には不可能。(同時押ししたい場合はマスクを使う)

0xD0なしの場合は、条件式2でfalseになっているので実行式1は当然書き込まない。
0xD0ありの場合は、条件式2の1つ前の条件式1のステータスをロードするので
SELECTさえ押されれば、実行式1で書き込みが達成される。

ここまではコードの説明通りなので使い始めてすぐに理解できていた。

では次のような式になっていた場合はどうだろうか。

条件式1
条件式2
条件式3

パッド分岐1
実行式1

0xD0

パッド分岐2
実行式2

0xD0

パッド分岐3
実行式3

0xD2


条件式1-2-3を全て満たしている状態でパッド分岐させたい場合には
分岐の直前に0xD0を挟めば分岐2が目的通りに動くところまでは理解できる。

分岐3は0xD0が「1つ前の実行ステータスをロード」ということから考えると
パッド分岐1の時のステータスをロードしているように思えるが実が違う。
条件式3のステータスをロードしているようだ。

「1つ前の実行ステータス」とある通り式では無く、どうやら実行ステータススタック
みたいなものを想像すれば良いみたいだ。


条件式1
条件式2
条件式3

パッド分岐1

0xD0 分岐1のステータスをリムーブし、1つ前(条件式3)の実行ステータスをロード
パッド分岐2

0xD0 分岐2のステータスをリムーブし、1つ前(条件式3)の実行ステータスをロード
パッド分岐3
0xD2


リムーブ(除去、MTGでよく出てくる単語)という表現が適当かは分からないが、
そう捉えると分かりやすい。
違う言い方をすると、0xD0がORで、使わない場合がAND。
0xD0を使えば、並列で条件式が組めるのでコード短縮に役立つ。

…自分みたいな無駄に長い変態コードを作る人にとっては\( ̄∇ ̄|||)/



関連記事
スポンサーサイト

コメント: -

Home > TempAR Usage > TempAR - 0xD0コード

Return to page top

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。