シリアル化



v0.1.6から導入されたmulti adress writeを使用することで
既存のコードを短く纏めることが出来る

multi adress write書式


32bit 
0x4aaaaaaa 0xbbbbyyyy 
0xdddddddd 0x00000000
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyy*4アドレスずつずらしながら値ddddddddを書き込む
(a:アドレス b:繰り返し回数 y:オフセット d:値)

16bit
0x8aaaaaaa 0xbbbbyyyy 
0x1000dddd 0x00000000 
アドレスaaaaaaaからbbbb個のアドレスになるように
yyyy*2アドレスずつずらしながら値ddddを書き込む

8bit
0x8aaaaaaa 0xbbbbyyyy 
0x000000dd 0x00000000 
アドレスaaaaaaaからbbbb個のアドレスになるように
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個のアドレスが並んでるということになるので

_C0 MANA 01-10
_L 0x40153000 0x000A01D4 ※1D4*4=750
_L 0x0098967F 0x00000000

と表すことが出来る

このコードの利点はコードが短くなるだけではなく、例のような場合
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になる。

_C0 WIND DIRECTION 1-9HOLE
_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 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






| 新しいページ | 編集 | 差分 | 編集履歴 | ページ名変更 | アップロード | 検索 | ページ一覧 | タグ | RSS | ご利用ガイド | 管理者に問合せ |
@wiki - 無料レンタルウィキサービス | プライバシーポリシー