ハウディY'all、
これは、マスクROMの写真を撮り、ビットを抽出するための私のCADツールであり、ROMの内容を回収できるようにします。
このツールのキーボードショートカットはオプションではありません。探索を開始する前に、以下のGUIドキュメントをお読みください。
このツールが便利であることがわかった場合は、自分や賢い学生のためにマイクロコントローラーエクスプロイトに関する私の本のコピーを購入してください。
-Travis Goodspeed

Gbrom-Tutorialは、GameboyのマスクROMの写真から始めて、正確なROM画像への道を進める方法を教えてくれます。
MyK82 ROMは、FortezzaカードのMyK82チップからROMの完成したダンプを保持しています。これはクリッパーチップの後継であり、リポジトリにはすべてのROMビットだけでなく、エラー修正のための再撮影も含まれます。
Wersi-SLM2-51173は、音楽合成モジュールのZilog Z8 ROMです。
master - リストの深いコピーを避けることによるパフォーマンスの改善。ステータスバーの適切なビットカウントとステータスバーは、固定幅フォントを使用するようになりました。
2024-08-18-Gatoromのソルバーセットオプションは、記述的なfiilenamesを使用するようになりました。 GUIは、ファイル/エクスポート/ソルバーセットバイトで一連の解決された結果をエクスポートできるようになりました。より明確な選択長方形。 RとC 、ユーザーがそれらを混乱させるときに正しい行タイプを描画します。 ^H今、家の位置を設定します。ズームとムーブメントキーは、2番目のビューで機能するようになりました。 DRC中にVキーによって完全に複製された線がculされました。行と列は、セットの代わりにソートされたリストとして保存されます。行と列は、ファイルのエクスポートで一貫した順序になりました。ビットマーキング、バックグラウンドビットマーキング、アライメントでパフォーマンスが向上します。 macOSのユニバーサルバイナリ。 RomalignerTiltingは、銀行間のギャップを備えたデザインに適しています。ドラッグ中にビット外のビットは描画されなくなり、長い線の調整グループが高速化されます。
2024-07-14-二重選択アイテムを削除するときにクラッシュを修正します。 dを削除し、 Dのようなオブジェクトを削除するようになりました。複数の分解者。デコードのしきい値が変更されると、デコードが更新されました。
2024-06-23-ヤラルール解決。安定性の改善。選択した行の角度に更新されます。スペースは、行であろうと列であろうと、最後の行を繰り返します。複数のアイテムを選択でき、Shift+Dがそれらを複製します。シフトで選択して、より多くのラインまたはCtrl(MACOSのCMD)を追加してラインを削除します。右ドラッグは複数の行を移動し、関連するビットのみをプレビューします。クロスヘアと選択の色が選択可能になりました。ズームアウトすると、背景はタイル張りになりません。
2024-05-19-DRC違反は、ビットが強制されたときにクリアされました。 gnuplotの色分布をプロットするためのヒストグラムエクスポート。ウェイランドのサポート。 CLI、GUI、ソルバー、および基本デコーダーでの明示的なワーデーションサポート。ソルバーセットは、すべての潜在的なソリューションをバイナリファイルとしてエクスポートします。信頼できないアライナーが非推奨されています。 GUIソルバー。分解者は、MameのUnidasmに呼びかけます。
2024-01-28-元に戻してやり直します。文字列ダイアログ。レイヤーの可視性のバックスラッシュキー。信頼できるアライメントアルゴリズム。メインウィンドウを閉じると、アプリケーションが閉じられます。
2024-01-01-奇数サイズを解くときにZ8デコーダーのバスエラーを修正します。 Gatorom Cliの冗長モード。 GUIデコーダーでsqueeze-lrモード。メニュー項目を編集して、すべてのビット修正をクリアします。 E次のDRC違反を選択します。完全に垂直な画像は、アライメントアルゴリズムを破壊しなくなりました。
2023-12-07-選択ハイライト。ステータスバーの行/列カウント。 ASCIIソルバー。厄介なROMサイズからソルバーの複数のクラッシュを修正します。 GUIでのゲータムデコード。冗長デコーダーの削除。 HEXビューアーと選択したバイトのハイライト。 Gatorom CLIは現在、違法アクセスを終了することに非常に厳しいものです。 Zilog Z8 ROMサポート。
2023-09-13-OpenGLを無効にするCLIオプション。印刷サポート。ワーキングウィンドウビルド。
2023-08-06-OpenGLは機能的でデフォルトになりました。 Gatoromはビットデコードに含まれています。
2023-07-20-セカンダリディスプレイサポート。背の高いサンプリング。ラインを削除した後、 Vを打つときにクラッシュを修正します。
2023-06-17- x86_64およびarm64にmacosを追加しました。
2023-05-30-最初のWindowsリリース。
このツールは、QTCharts拡張機能でQT6を使用して、Windows、Linux、FreeBSD、およびMacOSで機能します。
ツールの構築は、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のコマンド)を保持します。トラックパッドでピンチズームもできます。中央のボタンでドラッグすると、オペレーティングシステムが好きなように2本の指でスクロールします。
任意の慣習により、ビットは短い行の長い列にある必要があります。デコーダーラインが表示されている場合、それらは画像の上部にあるはずです。 1つの方法で写真を撮ってから、マークアップのために回転させてください。
プロジェクトを保存すると、画像のファイル名は.jsonで拡張されます。このソート付きおよびインデントされたJSONファイルは、GITリポジトリなどのバージョン制御での使用に適している必要があります。
これらのキーボードボタンは、入力のほとんどを提供します。線を描くには、最初に1回クリックして開始位置として選択し、マウスが端の位置の上にあるときにキーを押します。アイテムの削除またはその位置の設定は、ボックスをドラッグして行を選択しない限り、最近配置されたラインに適用されます。
左マウスのクリックでドラッグしてアイテムを選択し、緑色に変わるように監視します。最近配置されたアイテムは自動的に選択されます。一部のコマンドは、複数の選択されたアイテムで動作します。他の人だけ。
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.
最初にビットをマークし始めると、ソフトウェアは1つとゼロのしきい値をまだ把握していません。 View / Choose Bit Thresholdを選択してこれを構成できます。
最高のビットでさえすべてが完全にマークされているわけではないので、 SHIFT+Fを使用して、ソフトウェアが間違っていることがわかるビット値を強制します。 SHIFT+Aは似ており、曖昧または破損していると少しマークします。 DRCメニューには、弱いビットや壊れたアライメントなど、プロジェクトの問題を強調するデザインルールチェックが含まれています。
多くの線を退屈にする場合は、左マウスボタンを使用したグループを選択し、セット全体をSHIFT+Dで複製します。その後、右のマウスボタンで新しい位置にドラッグして、別のコピーを元の位置に残すことができます。フレームレートがこのためにドロップする場合は、 TABを使用してすべてのビットを一時的に非表示にします。
十字線は、最近配置された列と列に適応します。これにより、写真の現実に合わせて少し傾けるようになります。
BITSとSPOTがDRCで正確であることを確認した後、ファイル/エクスポートを実行してASCIIにダンプして、Gatorom、BitViewer、Zorromなどの他のツールで解析します。
GUIに加えて、このツールには、スクリプトに役立つコマンドラインインターフェイスがあります。 --helpスイッチを使用して、最新のパラメーターと、インタラクティブな使用のために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を持つことは厄介です。 2つの実行可能ファイルを作成することでこれを解決します。 GUIにはmaskromtool.exeを使用し、CLIにはmaskromtoolcli.exe使用してください。
別の実行可能ファイル、 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ですが、CLIはスクリプトとテストにも利用できます。
数千ビットはエラーなしでマークされる可能性がありますが、大規模なプロジェクトは必然的に間違いを管理する必要があります。
良いスタートは、DRCチェックを使用し、明らかなエラーが残っていないまでビットしきい値の慎重な構成を使用することです。次に、プロジェクトをナビゲートし、 tabを押して注釈を表示して非表示にし、各ビットが適切に認識されていることを確認します。
数十キロビットまたは数百キロビットのROMの場合など、それが不十分な場合、同じROMに複数回、できれば異なる写真から注釈を付けるのに役立ちます。もちろん、各写真に注釈を付ける際にビットエラーが発生しますが、それらはさまざまな場所で発生します。次に、 --export-asciiの出力に対して--diff-ascii機能を使用して画像を比較し、すべてのプロジェクトファイルが同意するまで違いを調整できます。
ほとんどのROMは、ビット中心にある単一のピクセルの色を読むだけで読むことができます。それらの場合、 Defaultサンプリングアルゴリズムは正常に機能します。

ビットが少し遅れすぎている拡散ROMの場合、ビットの中心には独自の色がありませんが、わずかに暗い線に囲まれています。 Wideアルゴリズムは、幅のサイズ相当のビットをサンプリングした後、各チャネルで最も暗い色を取り、 Tall同じで垂直に同じことをします。

Mask ROMツールのパッチと改善は大歓迎ですが、機能リクエストで問題トラッカーをスパムしないでください。プルリクエストは、GitHubページを介して送信する必要があります。また、サードパーティライブラリに依存関係を持つプロジェクトを巻き込むべきではありません。
このコードは、高度な機能を最小限に抑えて、C ++の保守的な方言で記述されています。コードとクラスの定義に徹底的にコメントしようとしました。
Gatoromは、ビットアレンジメントを解決するコマンドラインデコーダーとして含まれています。特にGUIでまだサポートされていないソルバーメソッドについては、CLIドキュメントについては、独自のREADMEファイルをご覧ください。
それとは別に、GatoromはMaskromTool GUI内でデコードするためのライブラリとして使用されます。編集/デコードを使用してデコードスタイルを定義し、/hexpreviewを表示して、ビットのライブデコードをヘキサデシマルに表示します。

デコーダーから、16進バイトを強調表示し、[16進]の選択/ハイライト選択を使用して、選択したバイトを視覚化できます。ここでは、各位置に32ビットを詰めるMyK82 ROMの最初の3つの単語が表示されます。 Mameのunidasmパスにある場合にも、分解が利用できます。

スクリプト化されたソルバーもサポートされており、単純なマスクまたはヤラのルールでは、予想されるファームウェアを説明しています。すべての一致は列挙されており、それらの間をジャンプすることにより、インタールービング、列の反転、またはその他の合併症を使用しない画像をすばやく解読できます。

John McMasterのZorromは優れたデコーダーであり、このツールのデコードライブラリのインスピレーションです。
Adam LaurieのRomparは、オープンソースを使用する最初のビットマーキングツールかもしれません。
Chris GerlinskyのBitRactは、ビットマーキング用のもう1つのオープンソースツールであり、BitViewerはビットをバイトに解読するための彼のマッチングツールです。
Peter BoschのPLAデコードは、古いIntelマイクロコードを抽出するために使用されるビットマーキングツールです。詳細については、2020年の彼のhardwear.ioの話を参照してください。