AR-DSコードタイプ 6/ 9/16(土) 10:48:10 以下の解説はhttp://gscentral.org/bb/viewtopic.php?t=3456&postdays=0&postorder=asc&start=125 にkenobi氏が掲載している解析結果を基に作成しました。 -AR-DSにはDxレジスタと呼ばれる記録領域があり、それぞれワード値を格納している。 Dx1 コード繰り返し回数 Dx2 次に実行されるコード Dx3 コード実行フラグ Dx4 'Dx data' Dx3が0のときは、実行フラグを操作するコード以外はスキップされる。 Dx3が1のときは、コードリスト上の全てのコードが実行される。 -AR-DSでは、一度オフセットを設定すると、以下のコードはアドレスにオフセットが 加算された状態で実行される。(一部例外あり) -コードの形式 [0]XXXXXXX YYYYYYYY アドレスXXXXXXXXにワード値YYYYYYYYを書き込む [1]XXXXXXX 0000YYYY アドレスXXXXXXXXにハーフワード値YYYYを書き込む。 [2]XXXXXXX 000000YY アドレスXXXXXXXにバイト値YYを書き込む。 [3]XXXXXXX YYYYYYYY XXXXXXXに格納されているワード値 > YYYYYYYYのとき実行フラグをゼロにセット。 すなわち小さい時実行。 [4]XXXXXXX YYYYYYYY XXXXXXXに格納されているワード値 < YYYYYYYYのとき実行フラグをゼロにセット。 すなわち大きい時実行。 [5]XXXXXXX YYYYYYYY XXXXXXXに格納されているワード値 != YYYYYYYYのとき実行フラグをゼロにセット。 [6]XXXXXXX YYYYYYYY XXXXXXXに格納されているワード値 == YYYYYYYYのとき実行フラグをゼロにセット。 [7]XXXXXXX ZZZZYYYY (XXXXXXXに格納されているハーフワード値 AND (NOT ZZZZ) > YYYYのとき実行フラグをゼロにセット。すなわち小さい時実行。 [8]XXXXXXX ZZZZYYYY (XXXXXXXに格納されているハーフワード値)AND (NOT ZZZZ) < YYYYのとき実行フラグをゼロにセット。すなわち大きい時実行。 [9]XXXXXXX ZZZZYYYY (XXXXXXXに格納されているハーフワード値) AND (NOT ZZZZ) != YYYYのとき実行フラグをゼロにセット。 [A]XXXXXXX ZZZZYYYY (XXXXXXXに格納されているハーフワード値) AND (NOT ZZZZ) == YYYYのとき実行フラグをゼロにセット。 [B]XXXXXXXX 00000000 XXXXXXXに格納されているワード値をオフセットとして以下のコードのアドレスに加算する。 [C]0000000 YYYYYYYY D1,D2コードとセットで使用され、CコードとDコードの間のコードを(YYYYYYYY + 1)回実行する。 D0000000 00000000 実行フラグを一段階前の状態に戻す。(一段階前の状態が存在しないときは実行フラグを1にセット)。 D1000000 00000000 Cコードによって指定された繰り返し回数 > 0 のとき繰り返し回数を1減らし、Cコード以下のコードを再度実行する。 D2000000 00000000 Cコードによって指定された繰り返し回数 > 0 のとき繰り返し回数を1減らし、Cコード以下のコードを再度実行する。 オフセットや、実行フラグなどのデータををリセットする。 D3000000 XXXXXXXX オフセットをXXXXXXXXにセットする。 D4000000 XXXXXXXX ワード値XXXXXXXX を 'Dx data' に加算する。 D5000000 XXXXXXXX ワード値XXXXXXXX を 'Dx data'に格納する。 D6000000 XXXXXXXX 'Dx data'の値をワード値としてXXXXXXXXにストア。オフセットに4を加算。 D7000000 XXXXXXXX 'Dx data'の値をハーフワード値としてXXXXXXXXにストア。オフセットに2を加算。 D8000000 XXXXXXXX 'Dx data'の値をハーフワード値としてXXXXXXXXにストア。オフセットに1を加算。 D9000000 XXXXXXXX XXXXXXXXに格納されているワード値を'Dx data'に格納する。 DA000000 XXXXXXXX XXXXXXXXに格納されているハーフワード値を'Dx data'に格納する。 DB000000 XXXXXXXX XXXXXXXXに格納されているバイト値を'Dx data'に格納する。 (AR-DSのv1.02ではバグがあるため正常に動作しない) 023FE4D8 0A000003 DBコードのバグフィックス。 DC000000 XXXXXXXX オフセットにワード値XXXXXXXXを加算。 [E]XXXXXXX YYYYYYYY XXXXXXXに以下のコードで示されるYYYYYYYYバイトの値を書き込む。 書き込む値が4バイト以上ならばstrで処理され、3バイト以下ならstrbで処理される。 [F]XXXXXXX YYYYYYYY オフセットからアドレスXXXXXXX へ YYYYYYYYバイトコピーする。