暫存器表
一次看完目前 bank 的全部 256 個位元組。左邊那一欄是列標籤(00:、10:…),
上面那一列是欄標籤,兩者相加就是位移。

讀出來的顏色是有意義的
| 看到的 | 意思 |
|---|---|
| 一般亮字 | 讀到的值 |
暗掉的 00 | 值就是 0。刻意畫暗,因為 00 在暫存器裡到處都是,全部同樣亮會看不見真正在變的東西 |
-- | 還沒讀過,不是 0。沒讀過和讀到 0 是兩件事,混在一起會讓人對著一個從未取得的值下判斷 |
| 綠底 | 剛剛變過。過幾秒會自己熄掉 |
標題列上的東西
SET >、Poll >、BANK -- >、SLAVE 0x58 > 都可以點,等同於下對應的指令。
右上角的箭頭是把目前快照匯出到 logs/。
就地編輯
把游標移到任何一格,直接輸入新的十六進位值再按 Enter,就會對那個位移寫入。
等同於下 wr <位移> <值>。
設定視窗
F4 開啟這個面板的設定:要顯示哪一個掛載、欄數、以及輪詢範圍。

比對與寫回 dump 檔
dump diff <檔案> 把存好的 dump 檔拿去跟晶片目前的值逐位元組比對;dump load <檔案>
反過來,把檔案寫回晶片。視窗版從 ☰ → Tab 選單的 Compare with dump file… 與
Load dump file… 進入,終端機版直接下指令,兩者送出的是同一條指令。
接受的檔案:dump all 寫出的 logs/dump_*.txt、監看觸發存下的 dump、以及 dump snap
的輸出,三種格式都讀得進來。檔內的 -- 表示「這格不比/不寫」,可以自己手動改成 --
排除會自己變動的暫存器。檔案格式有任何違規,整份拒絕並回報行號。
表單

- File:直接打路徑,或按
Browse...選檔(起始目錄logs\)。路徑含空白時,表單會試著轉成 8.3 短路徑,轉不出來就在表單內報錯、不送出。 - Address:要比對/寫入的那顆晶片的 7-bit 位址(兩位十六進位,可寫成
58或0x58),預設是這個面板掛載的位址。 檔頭位址與 Address 不同時(例如拿別顆晶片的 dump 來比),第一次按送出不會執行,表單內會提示file is addr 0x51, not 0x58 - Enter again to compare(Load 是... to load);確認這真的是你要的, 不改任何欄位再按一次才會送出。改了 File 或 Address 就要重新確認。終端機版沒有這道提示,直接下指令時 位址不符會被拒絕,要明確帶<位址>(目標晶片的位址):拿 0x51 的 dump 去比位址 0x58 的晶片就是dump diff <檔案> 58。 - Raw(只有 Load):不看 regdef,把檔內所有非
--的位元組都寫進晶片——即使已載入 regdef, RO/WO/W1C/W0C/RSVD 的暫存器也照寫(寫 W1C/W0C 位元會清掉狀態)。沒有載入對應的 regdef 時必須開啟; 有 regdef 時除非你就是要全寫,否則不要開。

比對結果
結果視窗只在你自己下的 dump diff(cmd> 打字、選單、表單)完成後彈出;監看觸發的 do dump diff ... 與
Plugin 送出的不會彈(結果仍寫進 Log)。視窗標題是 dump diff 0x58 vs <檔名>,下一行是摘要(MATCH/DIFF),
再往下只列出有差異的列:上一行是晶片現在的值(不同的格子標色),下一行 gold 是檔案裡的值。
- MATCH:沒有任何差異、也沒有讀不到的格子。檔內
--的格子算「略過」,會在摘要附上略過數。 - DIFF:至少有一格不同。
- unreadable:晶片那格讀不到。讀不到不算相同也不算不同,所以只要有 unreadable 就不會是 MATCH。
- volatile 的暫存器一律略過:已載入的 regdef 把某個暫存器標成
volatile(計數器、狀態、中斷旗標—— 它自己會變)時,那個暫存器的格子不論晶片讀到什麼都算「略過」,不會讓比對變成 DIFF。Log 會多一行dump diff: skipped N volatile byte(s)告訴你略過了幾個。沒有載入 regdef 時沒有任何格子被這樣略過。


比對時照常把晶片的即時值另存一份 logs/dump_*_allbanks.txt 當追溯證據,Log 會印出路徑。
多 bank 的檔案依檔頭的 bank_reg/mask 逐 bank 讀;單 bank 的檔只比對目前的 bank。
Batch 的結束碼(--cmd "dump diff <檔案>"):全部相符 0;有差異或讀不到 64;
檔案打不開或格式/參數錯誤 2。
寫回
dump load 預設只寫可寫的暫存器:有 regdef 時只寫 RW,檔內的 -- 與 RO/WO/W1C/W0C/RSVD 一律略過
(regdef 沒有定義的格子照寫),bank 切換用的暫存器本身也不寫。沒有 regdef 就必須加 raw。
標了 volatile 的暫存器也會略過(它的值自己會變,把一個舊值寫回去沒有意義);Log 與確認視窗都會說略過了幾個,
確認視窗第二行會多一個 volatile 類別。
⚠ raw 不看 regdef:除了 -- 與 bank 切換暫存器,檔內每個位元組都會被寫入,包含
RO/WO/W1C/W0C/RSVD 與 volatile——即使 regdef 已載入。寫 W1C/W0C 位元會清掉狀態、寫 WO 可能觸發動作。
只在你確定整份檔都該寫回時才用。
不帶 force 時指令不會執行,而是先跳出確認視窗,告訴你要寫幾個位元組到哪個位址、
略過幾個。按 Write 才寫,Cancel(預設)或 Esc 取消。

- 中途寫入失敗就立刻停止、不重試,Log 會說停在哪個 bank 與位移。
- 不做寫後回讀;要驗證,接著對同一個檔跑
dump diff。 - Batch、監看的
do與 Lua 腳本沒有人可以確認,不帶force一律被拒絕;要寫就明確帶force。 這是刻意的:force就是「我知道這會寫進晶片」。 dump load的 Batch 結束碼:成功0;被拒絕(沒帶force需要確認、檔案或參數有問題、位址/bank 不符、 沒有 regdef 又沒帶raw)2;寫入中途失敗=錯誤碼的絕對值(例如rc=-41就是41)。
終端機版

終端機版沒有滑鼠點擊的標題列 chip,同樣的事情用指令做:bank、poll、
addr、dump snap。
相關指令
rd、wr、rd16、wr16、set、clr、dump、dump diff、dump load、bank、bank reg
——用法見指令參考。