Skip to Content
面板暫存器表

暫存器表

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

暫存器表面板,16×16 的位元組格線,左側列標籤為橙色
視窗版

讀出來的顏色是有意義的

看到的意思
一般亮字讀到的值
暗掉的 00值就是 0。刻意畫暗,因為 00 在暫存器裡到處都是,全部同樣亮會看不見真正在變的東西
--還沒讀過,不是 0。沒讀過和讀到 0 是兩件事,混在一起會讓人對著一個從未取得的值下判斷
綠底剛剛變過。過幾秒會自己熄掉

標題列上的東西

SET >、Poll >、BANK -- >、SLAVE 0x58 > 都可以點,等同於下對應的指令。 右上角的箭頭是把目前快照匯出到 logs/。

就地編輯

把游標移到任何一格,直接輸入新的十六進位值再按 Enter,就會對那個位移寫入。 等同於下 wr <位移> <值>。

設定視窗

F4 開啟這個面板的設定:要顯示哪一個掛載、欄數、以及輪詢範圍。

F4 開啟的暫存器表設定浮動視窗
F4:暫存器表設定

比對與寫回 dump 檔

dump diff <檔案> 把存好的 dump 檔拿去跟晶片目前的值逐位元組比對;dump load <檔案> 反過來,把檔案寫回晶片。視窗版從 ☰ → Tab 選單的 Compare with dump file… 與 Load dump file… 進入,終端機版直接下指令,兩者送出的是同一條指令。

接受的檔案:dump all 寫出的 logs/dump_*.txt、監看觸發存下的 dump、以及 dump snap 的輸出,三種格式都讀得進來。檔內的 -- 表示「這格不比/不寫」,可以自己手動改成 -- 排除會自己變動的暫存器。檔案格式有任何違規,整份拒絕並回報行號。

表單

Compare with dump file 表單,File 欄位填入 logs\golden.txt,Address 為 58
Compare:選檔、確認位址
  • 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 時除非你就是要全寫,否則不要開。
Load dump file 表單,Raw 選為 on
Load:Raw 開啟

比對結果

結果視窗只在你自己下的 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 時沒有任何格子被這樣略過。
比對結果視窗:MATCH 255/256,1 skipped,no differences
MATCH
比對結果視窗:DIFF,3 格不同,列出晶片值與 gold 值
DIFF:只列有差異的列

比對時照常把晶片的即時值另存一份 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 取消。

Load registers 確認視窗:write 255 bytes to 0x58, 1 bank;skip 1;Write 與 Cancel 兩個按鈕,Cancel 為預設
Load 的確認視窗
  • 中途寫入失敗就立刻停止、不重試,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 ——用法見指令參考。