remove
powerd by nog twitter
この解説はかなり前にかかれたものです。また間違い等ありえます。

公式の説明書(?)と見比べながら見てください。

「>」の記号は公式説明書からの引用の印です。


注!:間違っている可能性が意外に結構あるかもしれないので注意してください。


では、-----------------------------------------------

「繰り返し」では6つの変数が使われます。

TM_AD
TM_DT
TM_SIZE
xxxx
nn
y
の6つです。

▼20 で始まるコード
 例: 20-0000-2-03E7
 
 20で始まるコードは、
 TM_ADにxxxxを
 TM_DTにnnを
 TM_SIZEにyを
 代入するということです。
 (つまり           )
 (TM_ADの値をxxxxの値に   )
 (TM_DTの値をnnの値に    )
 (TM_SIZEの値をyの値に    )
 (書き換えるということです。 )
 
 >20: アドレス、データをセット
 というのは、そういう事です。たぶん。
 (このコードだけでは何の役にも立ちません。)
 
▼21(20で用意した TM_AD、TM_DT、TM_SIZE を使用)
 >21: コードを実行(xxxx = 繰り返し数, nn = 実行コード, y = 未使用)
 と、なっています。
 
 アドレスやデータは▼20の所でセットしてある(20-0000-2-03E7)ので
 何度でも実行だけをすることができる。
 
 実行前(こうなっていたとする):
 ┌────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                    
 │0000  00 00 00 00 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │ :      :          : 
 │ :      :          : 
 │                    
 
 21-0050-1-1 を実行してみる。
 一度目の実行:0000から2バイト分、03E7を入れる。
        (TM_AD) (TM_SIZE) (TM_DT)

 ┌────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                    
 │0000  E7 03 00 00 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │ :      :          : 
 │ :      :          : 
 │                    
 
 
 >コードを実行するたびにTM_SIZEをTM_AD(アドレス)に加算します
 つまり、
 実行前:TM_AD=0000 TM_SIZE=2なので
 二度目に実行する時はTM_AD=0002になっている。
 二度目の実行:0002から2バイト分、03E7に書き換える。
        (TM_AD)       (TM_DT)
 ┌────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                    
 │0000  E7 03 E7 03 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │ :      :          : 
 │ :      :          : 
 │                    
 
 
 これを▼21のコードで指定された回数だけ繰り返す。
 今回は 21-0050-1-1 なので 50h回、繰り返す。
 
 ▼20と▼21をあわせて書くと
 [20-0000-2-3E7,21-0050-1-1]  (あわせて書く必要はない。順番にやれば別々にコードを入れても動くようです。
でも、あわせたほうが良いと思う)

 0000から2バイトずつ、50回分、03E7(これはアドレスではなく数値)に 書き換える。
 (TM_AD) (TM_SIZE)  (0050) (TM_DT)                 (1)
 
 実際にやってみると、
 0000から009Fまでが E7 03 だけで埋め尽くされるのがわかると思います。
 
 もちろん、何バイトずつであっても良い。
 
 
 
 
 
 
 
 TM_SIZEを2、
 TM_DT(上のコードでは03E7)を1バイト分だけ(例えばBB)にしておいた場合は
 BB 00 BB 00 BB 00
 と、なります。(00BBをいれたのと同じ)



▼22(20で用意した TM_AD、TM_SIZE を使用)
 >22: 転送(xxxx = 転送元アドレス, nn = 繰り返し数, y = 未使用)
 アドレスとデータは▼20の所でセットしてある(20-0000-2-03E7)ので
 22の所で何度でも実行だけをすることもできる。
 
 実行前(こうなっていたとする):
 ┌───────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                       
 │0000  00 00 00 00 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │0030  00 00 00 00 00 …   … 00 00
 │0040  00 00 00 00 00 …   … 00 00
 │ :      :            : 
 │ :      :            : 
 │0500  01 02 01 05 1C …   … 22 20
 │0510  00 00 00 06 11 …   … 00 06
 │0520  07 08 B2 05 F2 …   … A0 66
 │0530  00 00 04 DC 00 …   … 10 15
 │0540  00 00 01 00 02 …   … 2A 38
 │ :      :            : 
 │ :      :            : 
 │  
 22-0500-1-20 を実行してみる。
 0500から 2バイト分 0000にコピー
      (TM_SIZE) (TM_AD)

 一度目実行後:
 ┌───────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                       
 │0000  01 02 00 00 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │0030  00 00 00 00 00 …   … 00 00
 │0040  00 00 00 00 00 …   … 00 00
 │ :      :            : 
 │ :      :            : 
 │0500  01 02 01 05 1C …   … 22 20
 │0510  00 00 00 06 11 …   … 00 06
 │0520  07 08 B2 05 F2 …   … A0 66
 │0530  00 00 04 DC 00 …   … 10 15
 │0540  00 00 01 00 02 …   … 2A 38
 │ :      :            : 
 │ :      :            : 
 │
 一度目が実行された後は
 >TM_SIZEをTM_AD,xxxxに加算
 されているので、二度目の実行は
 0502から 2バイト分 0002にコピー
 と、なる。
 二度目実行後:
 ┌───────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                       
 │0000  01 02 01 05 00 …   … 00 00
 │0010  00 00 00 00 00 …   … 00 00
 │0020  00 00 00 00 00 …   … 00 00
 │0030  00 00 00 00 00 …   … 00 00
 │0040  00 00 00 00 00 …   … 00 00
 │ :      :            : 
 │ :      :            : 
 │0500  01 02 01 05 1C …   … 22 20
 │0510  00 00 00 06 11 …   … 00 06
 │0520  07 08 B2 05 F2 …   … A0 66
 │0530  00 00 04 DC 00 …   … 10 15
 │0540  00 00 01 00 02 …   … 2A 38
 │ :      :            : 
 │ :      :            : 
 │
 
 これを▼22のコードで指定された回数だけ繰り返す。
 今回は22-0500-1-20 なので、20h回、繰り返す(▼21のコードと、繰り返し回数を書く位置が違うので注意!)。
 
 
 データセットのコードとまとめてかくと
 [20-0000-2-03E7,22-0500-1-20]
 0000に 2バイト ずつ、20回分、 0500からの値を コピー(転送)。
 (TM_AD) (TM_SIZE)    (20)           (22)
 
 このコードを実行した後は、こんな風になる
 実行回数は(20h=32回)
 ┌───────────────────────┐
 │    00 01 02 03 04 …   … 0E 0F
 │                       
 │0000  01 02 01 05 1C …   … 22 20
 │0010  00 00 00 06 11 …   … 00 06
 │0020  00 00 00 00 00 …   … 00 00
 │0030  00 00 00 00 00 …   … 00 00
 │0040  00 00 00 00 00 …   … 00 00
 │ :      :            : 
 │ :      :            : 
 │0500  01 02 01 05 1C …   … 22 20
 │0510  00 00 00 06 11 …   … 00 06
 │0520  07 08 B2 05 F2 …   … A0 66
 │0530  00 00 04 DC 00 …   … 10 15
 │0540  00 00 01 00 02 …   … 2A 38
 │ :      :            : 
 │ :      :            : 
 │
 (最初の方(0000辺り)を0500からの数値に置き換えたりすると、バグってリセットされやすいので注意。)
 (強制的にリセットされた場合は数値が全て00になったりするのでコードの効果はわかりにくい。   )
 
 
 
▼23
 説明が無いので具体的なことがわからない。
 [20-0000-2-03E7,23-0060-1-FF]
 これだと
 0000から60回、FFを入れていくってこと・・・かな?