シリアル化
v0.1.6から導入されたmulti adress writeを使用することで
既存のコードを短く纏めることが出来る
既存のコードを短く纏めることが出来る
multi adress write書式
32bit
0x4aaaaaaa 0xbbbbyyyy 0xdddddddd 0x00000000
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
(a:アドレス b:繰り返し回数 y:オフセット d:値)
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
(a:アドレス b:繰り返し回数 y:オフセット d:値)
16bit
0x8aaaaaaa 0xbbbbyyyy 0x1000dddd 0x00000000
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyy*2アドレスずつずらしながら値ddddを書き込む
yyyy*2アドレスずつずらしながら値ddddを書き込む
8bit
0x8aaaaaaa 0xbbbbyyyy 0x000000dd 0x00000000
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyyアドレスずつずらしながら値ddを書き込む
yyyyアドレスずつずらしながら値ddを書き込む
_C0 MANA 01-10
_L 0x20153000 0x0098967F
_L 0x20153750 0x0098967F
_L 0x20153EA0 0x0098967F
_L 0x201545F0 0x0098967F
_L 0x20154D40 0x0098967F
_L 0x20155490 0x0098967F
_L 0x20155BE0 0x0098967F
_L 0x20156330 0x0098967F
_L 0x20156A80 0x0098967F
_L 0x201571D0 0x0098967F
_L 0x20153000 0x0098967F
_L 0x20153750 0x0098967F
_L 0x20153EA0 0x0098967F
_L 0x201545F0 0x0098967F
_L 0x20154D40 0x0098967F
_L 0x20155490 0x0098967F
_L 0x20155BE0 0x0098967F
_L 0x20156330 0x0098967F
_L 0x20156A80 0x0098967F
_L 0x201571D0 0x0098967F
このコードをよく見るとアドレスの下三桁が
000,750,EA0と+750hになっていることがわかる。
よって、このコードはアドレス0153000から750hアドレスずつずらした
10個のアドレスが並んでるということになるので
000,750,EA0と+750hになっていることがわかる。
よって、このコードはアドレス0153000から750hアドレスずつずらした
10個のアドレスが並んでるということになるので
_C0 MANA 01-10
_L 0x40153000 0x000A01D4 ※1D4*4=750
_L 0x0098967F 0x00000000
_L 0x40153000 0x000A01D4 ※1D4*4=750
_L 0x0098967F 0x00000000
と表すことが出来る
このコードの利点はコードが短くなるだけではなく、例のような場合
bbbbの値がそのまま適用人数となるので、人数が増えたときのコード適用が
容易になる等が挙げられる
bbbbの値がそのまま適用人数となるので、人数が増えたときのコード適用が
容易になる等が挙げられる
ポインターコードのシリアル化
例:みんごる1の風
_C0 WIND DIRECTION 1-9HOLE
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000314
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000318
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x0000031C
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000320
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000324
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000328
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x0000032C
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000330
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000334
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000314
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000318
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x0000031C
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000320
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000324
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000328
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x0000032C
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000330
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020001 0x00000334
アドレスの右下部に注目すると+4hずつ増えているので、このコードは(アドレス4BF1B0に入っている値)-0x8800000+0x314から+4hアドレスずつずらした9個のアドレスが並んでるということになるので,下のようにまとめることが出来る。0x9sssssssのsssssssにはmulti adress writeの32bit時のように(ずれている分,ここでは4)÷4、sssssss=1になる。
_C0 WIND DIRECTION 1-9HOLE
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020009 0x00000314
_L 0x90000001 0x00000000
_L 0x604BF1B0 0xvvvvvv00
_L 0x00020009 0x00000314
_L 0x90000001 0x00000000
ポインターアドレスのシリアル化
下のように書き込むbit数,値,オフセットが変わらずポインターアドレスだけが+4hずつずれている場合まとめることができる。1人目のポインターとなりが2人目ポインターになっている時などに使うことができる。
_L 0x6aaaaaaa 0xvvvvvvvv
_L 0xqqq200nn 0x000iiiii
_L 0x90000000 0x00000000
aaaaaaaポインターアドレス,vvvvvvvv書き込む値,qqq=ポインターアドレスのオフセット÷4
nn=何ポインターアドレス分
_L 0x6aaaaaaa 0xvvvvvvvv
_L 0xqqq200nn 0x000iiiii
_L 0x90000000 0x00000000
aaaaaaaポインターアドレス,vvvvvvvv書き込む値,qqq=ポインターアドレスのオフセット÷4
nn=何ポインターアドレス分
例:
_L 0x60001000 0xvvvvvvvv
_L 0x00020001 0x0000iiii
_L 0x60001004 0xvvvvvvvv
_L 0x00020001 0x0000iiii
_L 0x60001008 0xvvvvvvvv
_L 0x00020001 0x0000iiii
↓
_L 0x60001000 0xvvvvvvvv
_L 0x00120003 0x0000iiii qqq=4÷4=001
_L 0x90000000 0x00000000
_L 0x60001000 0xvvvvvvvv
_L 0x00020001 0x0000iiii
_L 0x60001004 0xvvvvvvvv
_L 0x00020001 0x0000iiii
_L 0x60001008 0xvvvvvvvv
_L 0x00020001 0x0000iiii
↓
_L 0x60001000 0xvvvvvvvv
_L 0x00120003 0x0000iiii qqq=4÷4=001
_L 0x90000000 0x00000000