v0.1.6から導入されたmulti adress writeを使用することで
既存のコードを短く纏めることが出来る
既存のコードを短く纏めることが出来る
multi adress write書式
32bit
0x4aaaaaaa 0xbbbbyyyy 0xdddddddd 0x00000000
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
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
このコードをよく見るとアドレスの下三桁が
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
と表すことが出来る
このコードの利点はコードが短くなるだけではなく、例のような場合
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
アドレスの右下部に注目すると+4hずつ増えているので、
このコードは(アドレス4BF1B0に入っている値)-0x8800000+0x314から+4hアドレスずつずらした
9個のアドレスが並んでるということになるので下のようにまとめることが出来る。
0x9sssssssのsssssssにはmulti adress writeの32bit時のように(ずれている分,ここでは4)÷4、sssssss=1になる。
このコードは(アドレス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
ポインターアドレスのシリアル化
下のように書き込むbit数,値,オフセットが変わらずポインターアドレスだけが+4hずつずれている場合まとめることができる。
1人目のポインターとなりが2人目ポインターになっている時などに使うことができる。
1人目のポインターとなりが2人目ポインターになっている時などに使うことができる。
_L 0x6aaaaaaa 0xvvvvvvvv _L 0xqqq200nn 0x000iiiii _L 0x90000000 0x00000000
aaaaaaaポインターアドレス,vvvvvvvv書き込む値,qqq=ポインターアドレスのオフセット÷4
nn=何ポインターアドレス分
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