規則正しく並んでいる複数のポインターに対してシリアル化っぽいことをしたい。
シリアル化+比較でorの条件もつけたい。
しかし、これ以上フラグに入れる場所が無いのでどうしたものか。
という悩みを改善すべくMLA,MLO,MLE,PMA,PMO,PMEを纏めることにした。
これにより多重シリアルや、シリアル内での柔軟な比較が可能になる予定。
_CN0 変更元サンプル
_MLA 0x40000000 0x0000AAAA 0x0000BBBB
_MLO 0x00000000 0x00000001 0x00000002
_MLE 0x00000000 0x00000003 0x00000000
_PIN 0x00000000 0x0000CCCC 0x00000000
_PTR 0x00000000 0x0000DDDD 0x00000000
_PMA 0x10000000 0x0000EEEE 0x000000FF
_PMO 0x00000000 0x00000001 0x00000002
_PME 0x00000000 0x00000003 0x00000000
↓
_CN0 変更後サンプル
_VOF 0x00000000 0x00000002 0x00000001 //ValueOffset = 2*1
_NWR 0x40000000 0x0000AAAA 0x0000BBBB
_PIN 0x00000000 0x0000CCCC 0x00000000
_PTR 0x00000000 0x0000DDDD 0x00000000
_PWR 0x10000000 0x0000EEEE 0x000000FF
_MLS 0x00000000 0x00000001 0x00050003 //AddressOffset=1 上5行を3回ループ
代わりに下記を追加予定
_MLS 上何行を何回ループするか + AddressOffset
_AOF AddressOffset _MLSと設定が同じ場合には不要
_VOF ValueOffset 0の場合は不要
_POF PointerOffset 0の場合は不要
_CPY 0x20000000 0x00001010 0x00000000
_PST 0x20000000 0x00001000 0x00000000
_MLS 0x00000000 0x00000001 0x00020004 5bytecopy?
配列ポインタですがPTRでは使えないようでした。
_CN0 TEST動作OK
_NWR 0x80000000 0x00001010 0x08801000
_NWR 0x80000000 0x00001014 0x08801004
_NWR 0x80000000 0x00001018 0x08801008
_NWR 0x80000000 0x0000101C 0x0880100C
_OFF 0x00200000 0x00000004 0x00000000
_PIN 0x80000000 0x00001010 0x00000000
_PWR 0x20000000 0x00000000 0x00000001
_MLS 0x00000000 0x00000000 0x00030004
_CN0 TEST2 X
_NWR 0x80000000 0x00001010 0x08801000
_NWR 0x80000000 0x00001014 0x08801004
_NWR 0x80000000 0x00001018 0x08801008
_NWR 0x80000000 0x0000101C 0x0880100C
_NWR 0x80000000 0x00001020 0x08801010
_PIN 0x80000000 0x00001020 0x00000000
_OFF 0x00200000 0x00000004 0x00000000
_PTR 0x80000000 0x00001010 0x00000000
_PWR 0x20000000 0x00000000 0x00000001
_MLS 0x00000000 0x00000000 0x00030004
なのでMLSの説明も「上L行をv回追加で実行」という微妙な表現に。
ループ回数指定が0と1の時で同じになりますが、最後のループを飛ばすフラグを次で付けることにします。
_CN0 TEST2 X
_NWR 0x80000000 0x00001010 0x08801000
_NWR 0x80000000 0x00001014 0x08801004
_NWR 0x80000000 0x00001018 0x08801008
_NWR 0x80000000 0x0000101C 0x0880100C
_NWR 0x80000000 0x00001020 0x08801010
_PIN 0x80000000 0x00001020 0x00000000 Base=08801010
_OFF 0x00200000 0x00000004 0x00000000 PoinerOffset=4
_PTR 0x80000000 0x00001010 0x00000000 Pointer=08801010+1010+4*i=08802020+4*iでエラー
_PWR 0x20000000 0x00000000 0x00000001 エラーが出ているので書き込み停止
_MLS 0x00000000 0x00000000 0x00030004 3行上に戻って4回追加でループ
一度エラーが出たら次のPINまでポインター系は飛ばす仕様なのでずっとエラーです。
多分こんな感じのを意図していると予想。
_CN0 TEST3
_NWR 0x80000000 0x00001010 0x08801000
_NWR 0x80000000 0x00001014 0x08801004
_NWR 0x80000000 0x00001018 0x08801008
_NWR 0x80000000 0x0000101C 0x0880100C
_NWR 0x80000000 0x00001020 0x08801010
_PIN 0x80000000 0x00001020 0x00000000 Base=08801010
_OFF 0x00200000 0x00000004 0x00000000 PointerOffset=4
_PTR 0x80000000 0x00000000 0x00000000 Pointer=08801010+0+4*i
_PWR 0x40000000 0x00000040 0x000003E7 読み込んで+40に書き込み
_MLS 0x00000000 0x00000000 0x00040004 4行上に戻って4回追加でループ
08801000+40から4刻みで1+4回3E7を書き込み。