大家好,
這是我的CAD工具,用於拍攝面膜ROM並提取零件的照片,以便可以恢復ROM的內容。
該工具中的鍵盤快捷鍵是可選的。在開始探索之前,請閱讀下面的GUI文檔。
如果您發現此工具很有用,請為您自己或聰明的學生購買我的有關微控制器的書的副本。
- Travis Goodspeed

GBROM-TUTOIAL會教您如何從Gameboy的Mask ROM的照片開始,然後努力進行準確的ROM圖像。
MyK82 ROM在Fortezza卡中從Myk82芯片中保存了完整的ROM轉儲。這是快船芯片的後繼產品,存儲庫不僅包含所有ROM位,還包括重新校正的重新拍攝。
WERSI-SLM2-51173是來自音樂合成模塊的Zilog Z8 ROM。
master - 通過避免列表中的深層副本來改進性能。現狀欄中的適當位計數和狀態欄現在使用固定寬度字體。
2024-08-18- Gatorom的求解器設置選項現在使用描述性fiilenames。 GUI現在可以用文件/導出/求解程序導出一組解決的結果。更清晰的選擇矩形。現在,當用戶混淆它們時, R和C將繪製正確的行類型。 ^H現在設置了家庭位置。縮放和移動鍵現在在第二視圖中起作用。現在, V鍵在DRC期間淘汰了完美的重複線條。現在將行和列存儲為排序列表而不是集合。現在,在文件導出中,行和列的順序是一致的。性能在位標記,背景位標記和對齊方式中提高。 MacOS通用二進制。 Romalignertilting可以更好地適用於銀行之間差距的設計。在拖動過程中不再繪製視外位,從而加快了調整長線的調整組。
2024-07-14-刪除雙重選擇項目時修復了崩潰。刪除和backSpace現在刪除D多個拆卸器。現在,隨著解碼閾值的更改,解碼現在已更新。
2024-06-23- YARA規則解決。穩定性改進。十字準線更新到選定線的角度。現在空間重複最後一行,無論是行還是列。可以選擇多個項目,然後移動+D重複它們。選擇Shift以添加更多行或CTRL(MACOS上的CMD)以刪除行。右拖動移動多行,僅預覽相關位。現在可以選擇Crosshair和選擇顏色。放大時,背景不再是舖有瓷磚的。
2024-05-19-急診室違法行為被迫被強制清除。直方圖導出用於繪製GNUPLOT中的顏色分佈。支持Wayland。 CLI,GUI,求解器和基本解碼器中的明確單詞大小支持。求解器集,將所有潛在解決方案導出為二進製文件。不可靠的對準器已棄用。 GUI求解器。拆卸器呼籲Mame的Unidasm。
2024-01-28-撤消和重做。字符串對話。 backslash鍵,可見層。可靠的對齊算法。關閉主窗口關閉應用程序。
2024-01-01-解決奇數大小時,請在Z8解碼器中修復總線誤差。 Gatorom CLI中的詳細模式。現在在GUI解碼器中squeeze-lr模式。編輯菜單項以清除所有位修復。 E將選擇下一個剛果民主共和國違規行為。完美的垂直圖像不再破壞對齊算法。
2023-12-07-選擇亮點。排在狀態欄中的行/列計數。 ASCII求解器。從尷尬的rom尺寸中修復了求解器中的多次崩潰。 Gatorom在GUI中解碼。去除冗餘解碼器。十六進制的觀看器,並突出顯示選定字節。 Gatorom CLI現在非常嚴格地退出非法訪問。 Zilog Z8 ROM支持。
2023-09-13-禁用OpenGL的CLI選項。打印支持。工作窗口構建。
2023-08-06- OpenGL現在功能且默認。鱷魚包括用於位解碼的。
2023-07-20-輔助顯示支持。高采樣。刪除線路後撞擊V時修復崩潰。
2023-06-17-在X86_64和ARM64上添加了MacOS。
2023-05-30-第一個Windows版本。
該工具在Windows,Linux,FreeBSD和MACOS中使用QTCHARTS擴展名的QT6。
從CLI中構建該工具是最簡單的。在Debian Bullseye(11.x)中,
% sudo apt install make gcc g++ cmake git qt6-base-dev libqt6charts6-dev
qt6-translations-l10n linguist-qt6 qt6-l10n-tools qt6-tools-* qt6-image-formats-plugins
% git clone https://github.com/travisgoodspeed/maskromtool/
...
% cd maskromtool
% mkdir build; cd build
% cmake ..
% make -j 8 && sudo make install
在Windows和MacOS中,將QT用於開源安裝程序,確保包括圖表和圖像格式擴展名。然後打開CMakeLists.txt作為一個項目。然後, Ctrl+B將編譯maskromtool 。如果您對導入有問題,例如選擇錯誤的QT安裝,請刪除CMakeLists.txt.user並重新打開項目以重試。
為了方便Windows和Macos用戶,我們還製作了一些預製版本。
首先使用文件/打開ROM作為照片打開ROM圖像。嘗試使用未壓縮格式,但要注意MacOS不喜歡TIFF文件。
在滾動鼠標車輪時握住控制鍵(MACOS上的命令)將放大進出。您也可以在軌道墊上捏縮質。用中間按鈕拖動將鍋平移,或用兩個手指滾動作為操作系統喜歡。
按任意慣例,這些位應在較短的行中長列。如果可見解碼器線,則應該位於圖像的頂部。隨意拍照,然後將其旋轉以進行標記。
保存項目時,圖像的文件名將使用.json擴展。此分類和縮進的JSON文件應適用於版本控件,例如GIT存儲庫。
然後,這些鍵盤按鈕可提供您的大部分輸入。對於繪圖線,請先單擊一次作為開始位置,然後在鼠標在末端位置上方時按鍵。刪除項目或設置其位置將適用於最近放置的線路,除非您將盒子拖動以選擇一條線。
通過用左鼠標單擊拖動它來選擇一個項目,然後看著它變成綠色。最近放置的項目是自動選擇的。一些命令在多個選定的項目上使用;其他人只有一個。
您可以使用D刪除錯誤,也可以用S ,箭頭鍵或右鍵單擊阻力來調整其位置。在移動過程中,無關線的位可能被隱藏為性能, M鍵或釋放正確的鼠標按鈕將重新繪製它們。
在macOS上, ^表示命令,而不是ctrl。
Tab -- Show/Hide bits.
-- Show/Hide rows and columns.
^ -- Show/Hide background.
ALT -- Show/Hide crosshair.
R -- Draw a row from the last left-click position.
SHIFT R -- Repeat the last row.
C -- Draw a column from the last left-click position.
SHIFT C -- Repeat the last column.
SPACE -- Repeat the last row or column.
D -- Delete the selected objects.
SHIFT D -- Duplicate the selected lines.
S -- Set the selected object to the mouse position.
F -- Jump to the selected item.
ARROWS -- Move the selected items.
right-drag -- Move the selected items. (SHIFT or ^)
middle-drag -- Pan the view.
^ wheel -- Zoom.
Q -- Zoom to zero.
A -- Zoom in.
Z -- Zoom out.
H -- Jump to home position.
^H -- Set the home position.
SHIFT F -- Force a bit's value. (Again to flip.)
SHIFT A -- Force a bit's ambiguity. (Again to flip.)
M -- Remark all of the bits.
SHIFT M -- Update hex decoding and disassembly.
V -- Run the Design Rule Checks.
SHIFT V -- Clear the DRC violations.
E -- Jump to next violation.
^Z -- Undo
SHIFT ^Z -- Redo
^S -- Save changes.
當您首次開始標記位時,該軟件尚不知道一個和零之間的閾值。您可以使用View / Choose Bit Threshold進行配置。
即使是最好的位也不會完美地標記,因此請使用SHIFT+F強制鑽頭值,您可以看到軟件是錯誤的。 SHIFT+A是相似的,並且標記為模棱兩可或損壞。 DRC菜單包含設計規則檢查,這些規則檢查將突出項目中的問題,例如弱位或損壞的對齊。
如果放置許多行變得乏味,請選擇一個帶有左鼠標按鈕的組,然後用SHIFT+D重複整個集合。然後,您可以使用右鼠標按鈕將其拖動到新位置,將另一個副本留在原始位置。如果幀速率下降,請使用TAB鍵暫時隱藏所有位,這大大加速了在密集區域中移動許多線路。
十字準線將使自己調整為您最近放置的行和列。這應該讓他們傾斜一點以匹配您的照片的現實。
在標記了鑽頭並檢查它們是否與DRC準確的位置之後,運行文件/導出將它們轉移到ASCII中,以使用Gatorom,Bitviewer或Zorrom等其他工具來解析。
除GUI外,該工具還具有一個命令行接口,可用於腳本。使用--help Switch查看最新參數,如果您希望GUI不願意進行交互式使用,則--exit開關。
forum% maskromtool --help
Usage: maskromtool [options] image json
Mask ROM Tool
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt options.
-v, --version Displays version information.
-V, --verbose Print verbose debugging messages.
--stress Stress test bit marking.
-e, --exit Exit after processing arguments.
--disable-opengl Disable OpenGL.
--enable-opengl Enable OpenGL.
-d, --drc Run default Design Rule Checks.
-D, --DRC Run all Design Rule Checks.
--sampler <Default> Bit Sampling Algorithm.
--diff-ascii <file> Compares against ASCII art, for finding errors.
-a, --export-ascii <file> Export ASCII bits.
-o, --export <file> Export ROM bytes.
--export-histogram <file> Export histogram.
--export-csv <file> Export CSV bits for use in Matlab or Excel.
--export-json <file> Export JSON bit positions.
--export-python <file> Export Python arrays.
--export-photo <file> Export a photograph.
Arguments:
image ROM photograph to open.
json JSON lines to open.
要在沒有GUI的情況下運行,請-platform offscreen 。如果該程序在Wayland下崩潰,請通過-platform xcb強制XORG使用。
在Windows上,在保留CLI的登錄時擁有GUI的可執行文件很尷尬。我們通過產生兩個可執行文件來解決此問題。請使用maskromtool.exe進行GUI和maskromtoolcli.exe進行CLI。
一個單獨的可執行操作, gatorom包裹ROM位解碼器,而無需圖形。有關詳細信息,請參見Gatorom。
forum% gatorom
Usage: gatorom [options] bitstream
Gato ROM: A Decoder for Mask ROM Bits
Options:
-h, --help Displays help on commandline options.
--help-all Displays help, including generic Qt
options.
-v, --version Displays version information.
-V, --verbose Talk too much.
-w, --wordsize <8> Word size.bits
-r, --rotate <degrees> Rotates the image in multiples of 90
degrees.
--flipx Flips the bits along the X axis.
--flipy Flips the bits along the Y axis.
-i, --invert Inverts the bits.
-o, --output <out.bin> Output file.
--random Randomize a ROM for testing.
--Random Randomize a crazy ROM.
--rawwidth, --seanriddle <width> Width of a raw binary input, in Sean
Riddle's style.
-I, --info Info about input.
-d, --dis <arch> Disassemble.
--print Print with a GUI dialog.
--printpdf <file.pdf> Print to a PDF file.
--decode-tlcs47font Decodes as a TMP47C434N Font.
--decode-z86x1 Decodes as a Zilog Z86x1.
--decode-cols-downl-swap Decodes as a uCOM4 ROM.
--decode-cols-downr Decodes first down then right like a
Gameboy.
--decode-cols-downl Decodes first down then left.
--decode-cols-left Decodes left-to-right.
--decode-cols-right Decodes right-to-left.
--decode-squeeze-lr Decodes even bits from the left, odd bits
from right like in the TMS32C15.
-z, --zorrom Zorrom compatibility mode, with flipx
before rotation.
--leftbank Only the left half of the bits.
--rightbank Only the right half of the bits.
-a, --print-bits Prints ASCII art of the transformed bits.
-A, --print-pretty-bits Prints ASCII art with spaces.
--solve Solves for an unknown format.
--solve-bytes <bytes> Bytes as a hint to the solver.
0:31,1:fe,2:ff
--solve-ascii Look for ASCII strings.
--solve-string <bytes> Byte string as a hint to the solver.
31,fe,ff
--solve-yara <rule> Yara rule file.
--solve-set <prefix> Exports all potential solutions.
Arguments:
bitstream ASCII art of ROM to decode.
我已經圍繞QGraphicsScene設計了GUI。基礎數據對象使用QT坐標系,帶有浮子的精度優於像素的精度。
加載ROM照片後,用戶將列和行放在照片上。列的每個交叉點都被認為是一點,並且可配置的顏色閾值決定了該位的值。在誤讀照片的地方,您也可以將鑽頭強加於已知的價值。
一旦所有位都被標記並選擇了閾值,該軟件將標記為藍色(0)和每個深色位為紅色(1)。然後將這些位調整為用於ASCII的鏈接行列表,以用於其他工具。
為了識別錯誤,一組設計規則檢查(DRC)將批評開放項目。雖然主要接口是GUI,但也可以進行腳本和測試。
儘管可能沒有錯誤的標記可能會標記幾千位,但較大的項目將不可避免地需要管理他們的錯誤。
一個良好的開始是使用DRC檢查並仔細對位閾值進行配置,直到沒有明顯的錯誤仍存在為止。然後瀏覽項目並點擊tab鍵”以顯示和隱藏註釋,以確保正確識別每個位。
如果這是不夠的,例如對於數十千座的ROM,它有助於多次註釋相同的ROM,最好是從不同的照片中。當然,在註釋每張照片時會出現位錯誤,但是它們會在不同的地方發生。然後,您可以使用--diff-ascii功能與--export-ascii的輸出相比,比較圖像,調解它們的差異,直到所有項目文件都同意為止。
只需在位中心讀取單個像素的顏色,就可以閱讀大多數ROM。對於這些, Default採樣算法可以正常工作。

對於擴散的rom,其位有點太延遲了,鑽頭的中心沒有獨特的顏色,但被稍微暗的線所包圍。在對寬度的大小進行採樣之後, Wide算法將在每個通道中採用最黑色的顏色,而Tall尺寸相同但垂直。

最歡迎對Mask ROM工具的補丁和改進,但請不要使用功能請求垃圾郵件跟踪器。拉請請求應通過GITHUB頁面提交,並且它們不應將項目與第三方庫的依賴關係糾纏在一起。
該代碼用C ++的保守方言編寫,最少使用高級功能。我試圖徹底評論代碼和類定義。
Gatorom作為命令行解碼器包括為求解位安排的命令行解碼器。請參閱其自己的讀數文件中的CLI文檔文件,特別是對於GUI中尚未支持的求解器方法。
另外,Gatorom被用作在Maskromtool GUI中解碼的庫。使用編輯/解碼來定義解碼樣式和視圖/Hexpreview,以查看將鑽頭實時解碼到十六進制。

從解碼器中,您可以突出顯示十六進製字節,並使用視圖/突出顯示六角選擇來可視化所選字節。在這裡,我們看到了Myk82 ROM的前三個單詞,該單詞將32位包裝到每個位置。當MAME的unidasm在路徑中時,也可以使用拆卸。

還支持腳本求解器,其中簡單的掩碼或Yara規則描述了預期的固件。所有匹配都列舉了,通過在它們之間跳躍,您可以快速破譯不使用交錯,行反轉或其他並發症的圖像。

約翰·麥克馬斯特(John McMaster)的佐羅姆(Zorrom)是一個出色的解碼器,也是該工具中解碼庫的靈感。
亞當·勞裡(Adam Laurie)的Rompar可能是開源的第一個標記工具。
克里斯·格林斯基(Chris Gerlinsky)的Bitract是用於位標記的另一個開源工具,BitViewer是他的匹配工具,用於將位解碼為字節。
彼得·博世(Peter Bosch)的PLA解碼是用於提取舊英特爾微型碼的位標記工具。有關更多詳細信息,請參閱2020年的Hardwear.io Talk。