Привет, все,
Это мой инструмент CAD для фотографирования риммов маски и извлечения битов, чтобы можно было восстановить содержимое ПЗУ.
Комплект клавиатуры в этом инструменте не являются дополнительными. Пожалуйста, прочитайте документацию по графическим интерфейсу ниже, прежде чем начать исследовать.
Если вы обнаружите, что этот инструмент будет полезным, пожалуйста, купите копию моей книги по эксплойтам микроконтроллера для себя или умного ученика.
-Травис Goodspeed

Gbrom-Tutorial учит вас, как начать с фотографий маски Gameboy ROM и пробивайте свой путь к точному изображению ПЗУ.
MyK82 ROM имеет завершенный свалку ROM из чипа MyK82 в карте Fortezza. Это преемник чипа Clipper, а репозиторий включает не только все биты ПЗУ, но и переселение для коррекции ошибок.
WERSI-SLM2-51173-это Z8 Z8 ROM из модуля Music Synthisize.
master - Улучшения производительности, избегая глубоких копий в списках. Правильное количество битов в строке состояния, а в строке состояния теперь используется шрифт с фиксированной шириной.
2024-08-18-Опция Gatorom SET SET теперь использует описательные имена FiilenEN. GUI теперь может экспортировать набор решенных результатов с помощью File/Export/SolversetBytes. Более четкий выбор прямоугольник. R и C теперь будут нарисовать правильный тип линии, когда пользователь смущает их. ^H теперь устанавливает домашнюю позицию. Ключи масштабирования и движения теперь работают во втором взгляде. Совершенно дублирующие линии теперь отбираются во время DRC с помощью V -ключа. Ряды и столбцы теперь хранятся в виде отсортированных списков вместо наборов. Ряды и столбцы теперь находятся в последовательном порядке в экспорте файла. Производительность повышается в битовой маркировке, маркировке фона и выравнивании. Универсальный бинар для macOS. Romalignertilting лучше работает для дизайнов с разрывом между банками. Выездные биты больше не проводятся во время перетаскивания, ускоряя регулирующие группы длинных линий.
2024-07-14-Исправляет сбой при удалении двойного выбранного предмета. Удалить и Backspace теперь удалите объекты, такие как D . Многочисленные разборщики. Декодирование теперь обновляется, так как пороговые значения декодирования изменяются.
2024-06-23-Решение правил Яры. Улучшения стабильности. Обновление перекрестия под углы выбранных линий. Пространство теперь повторяет последнюю строку, будь то строка или столбец. Можно выбрать несколько элементов, и Shift+D дублирует их. Выберите с Shift, чтобы добавить больше линий или CTRL (CMD на MacOS), чтобы удалить линии. Правое перетаскивание перемещает несколько строк, предварительно просмотр только соответствующие биты. Цвета перекрестия и выбора теперь выбираются. Фон больше не вылетел при увеличении.
2024-05-19-Нарушения ДРК теперь очищаются, когда биты вынуждены. Экспорт гистограммы для построения цветовых распределений в Gnuplot. Поддержка Уэйленда. Явная поддержка слов в CLI, GUI, решательном и основном декодерах. Решатель устанавливает, экспортируя все потенциальные решения в виде двоичных файлов. Ненадежный выравниватель устарел. GUI Solver. Дизассемблер вызывает Unidasm's Mame.
2024-01-28-Undo and Refo. Строки диалог. Ключ Backslash для видимости слоя. Надежный алгоритм выравнивания. Закрытие главного окна закрывает приложение.
2024-01-01-Исправляет ошибку шины в декодере Z8 при решении нечетных размеров. Режим словеса в Gatorom CLI. squeeze-lr режим теперь в графическом графическом графическом интерфейсе. Редактировать пункт меню, чтобы очистить все исправления. E выберет следующее нарушение DRC. Идеально вертикальные изображения больше не нарушают алгоритм выравнивания.
2023-12-07-выделение отбора. Строка/столбец считается в строке состояния. ASCII Solver. Исправляет несколько сбоев в решателе из неловких размеров ПЗУ. Декодирование Gatorom в графическом интерфейсе. Удаление избыточных декодеров. HEX Viewer и выделение выбранных байтов. Gatorom CLI теперь очень строго относится к выходу при незаконном доступе. Zilog Z8 ROM поддержка.
2023-09-13-опция CLI для отключения OpenGL. Поддержка печати. Рабочие окна сборка.
2023-08-06-OpenGL теперь функционален и дефолт. Gatorom включил для бит декодирования.
2023-07-20-Вторичная поддержка дисплея. Высокая выборка. Исправляет сбой при ударе по V после удаления линии.
2023-06-17-добавлен MacOS на x86_64 и ARM64.
2023-05-30-Первый выпуск Windows.
Этот инструмент работает в Windows, Linux, FreeBSD и MacOS, используя QT6 с расширением QTCharts.
Строительство инструмента проще всего от 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 мы также сделали несколько готовых выпусков.
Сначала используйте File/Open ROM, чтобы открыть изображение ПЗУ в качестве фотографии. Постарайтесь использовать несжатые форматы, но остерегайтесь того, что MacOS не любит файлы TIFF.
Удерживая клавишу управления (команда на macOS) во время катания на колесе мыши будет увеличиваться и уменьшаться. Вы также можете укоренить Zoom на дорожке. Перетаскивание со средней кнопкой будет сковольно, или прокрутите двумя пальцами, как любит вашу операционную систему.
По произвольному соглашению, биты должны быть в длинных столбцах с более короткими рядами. Если линии декодера видны, они должны быть в верхней части изображения. Не стесняйтесь сфотографировать его в одну сторону, затем поверните его для разметки.
Когда вы сохраняете свой проект, имя файла изображения будет расширено .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.
Когда вы впервые начинаете отмечать биты, программное обеспечение еще не будет знать порог между одним и нолью. Вы можете настроить это с помощью Choose Bit Threshold View / выберите.
Даже самые лучшие биты не будут идеально помечены, поэтому используйте SHIFT+F чтобы заставить битовые значения, где вы видите, что программное обеспечение неверно. SHIFT+A аналогичен и немного отмечает как неоднозначные или поврежденные. Меню DRC содержит проверки правил дизайна, которые будут выделять проблемы в вашем проекте, такие как слабые биты или сломанное выравнивание.
Если размещение многих строк становится утомительным, выберите группу с левой кнопкой мыши и дублируйте весь набор с помощью SHIFT+D . Затем вы можете перетащить его правой кнопкой мыши в новую позицию, оставив другую копию в исходной позиции. Если кадр падает для этого, используйте ключ TAB , чтобы временно скрыть все биты, что значительно ускоряет, перемещая много линий в плотных областях.
Перекрестные перекрестки приспосабливаются к вашей последней разместимой строке и столбце. Это должно позволить им немного наклоняться, чтобы соответствовать реальности ваших фотографий.
После того, как вы отметили биты и точечные проверки, что они точны с DRC, запустите файл/экспорт, чтобы сбрасывать их в ASCII для анализа с другими инструментами, такими как Gatorom, Bitviewer или Zorrom.
В дополнение к графическому интерфейсу, этот инструмент имеет интерфейс командной строки, который может быть полезен при сценариях. Используйте переключатель --help , чтобы увидеть последние параметры и переключатель --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.
Чтобы бежать без графического интерфейса, пропустите -platform offscreen . Если программа рушится в Wayland, Force xorg использует путем прохождения -platform xcb .
В Windows неловко для исполняемого файла иметь графический интерфейс, сохраняя при этом журнал в CLI. Мы решаем это, создав два исполняемых файла; Пожалуйста, используйте maskromtool.exe для графического интерфейса и 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 . Основные объекты данных используют систему координат QT с поплавками для лучшего, чем пикселя.
После загрузки рим -фотографии пользователь помещает столбцы и ряды на фотографию. Каждое пересечение столбца и строки считается немного, и настраиваемый порог цвета определяет значение этого бита. Там, где фотография неверно прочитана, вы также можете заставить бит до известного значения.
Как только все биты будут отмечены и выбран порог, программное обеспечение будет отмечать каждый световой бит как синий (0) и каждый темный бит как красный (1). Эти биты затем выровнены в связанные списки строк для экспорта в качестве ASCII, для использования в других инструментах.
Чтобы определить ошибки, набор проверки правил дизайна (DRC) будет критиковать открытый проект. В то время как основной интерфейс - это графический интерфейс, CLI также доступен для сценариев и тестирования.
В то время как несколько тысяч бит могут быть отмечены без ошибок, более крупным проектам неизбежно необходимо управлять своими ошибками.
Хорошим началом является использование проверок ДРК и тщательную конфигурацию порогов битов, пока не останется очевидных ошибок. Затем перейдите по проекту и нажмите клавишу tab , чтобы показать и скрыть аннотации, убедившись, что каждый бит распознается должным образом.
Когда этого недостаточно, например, для ПЗУ, которые составляют десятки или сотни килобитов, это помогает аннотировать один и тот же ПЗУ несколько раз, предпочтительно с разных фотографий. Конечно, ошибки будут произойти при аннотировании каждой фотографии, но они произойдут в разных местах. Затем вы можете использовать функцию --diff-ascii с выводом --export-ascii для сравнения изображений, согласования их различий, пока все файлы ваших проектов не согласятся.
Большинство ПЗУ можно прочитать, просто прочитав цвет одного пикселя в центре Бит. Для них алгоритм выборки Default будет работать просто отлично.

Для диффузионных ПЗУ, чьи кусочки были слишком задержлены, центр бита не имеет уникального цвета, но он окружен немного более темными линиями. Wide алгоритм займет самый темный цвет в каждом канале после отбора проб ширины размера шириной, и Tall делает то же самое, но вертикально.

Патчи и улучшения для маскируемого инструмента ROM являются наиболее приветствующимися, но, пожалуйста, не спамите трекер проблемы с запросами функций. Запросы на привлечение должны быть отправлены через страницу GitHub, и они не должны запутывать проект с зависимостью от сторонних библиотек.
Код написан на консервативном диалекте C ++, с минимальным использованием расширенных функций. Я пытался тщательно прокомментировать код и определения класса.
Gatorom включен в качестве декодера командной строки, который решает для аранжировки битов. Пожалуйста, смотрите его собственный файл Readme для документации CLI, особенно для методов решателя, которые еще не поддерживаются в графическом интерфейсе.
Отдельно Gatorom используется в качестве библиотеки для декодирования в графическом интерфейсе Maskromtool. Используйте редактирование/декодирование, чтобы определить стиль декодирования и представление/Hexpreview, чтобы увидеть живое декодирование битов в шестнадцатеричную.

Из декодера вы можете выделить шестигранные байты и использовать представление/выделение шестигранного выбора для визуализации выбранных байтов. Здесь мы видим первые три слова Myk82 ROM, которые упаковывают 32 бита в каждую позицию. Разборка также доступна, когда unidasm From Mame находится на пути.

Также поддерживается сценарий, в котором простые маски или правила Yara описывают ожидаемое прошивку. Все совпадения перечислены, и, прыгая между ними, вы можете быстро расшифровать изображения, которые не используют взаимодействие, изменение строк или другие осложнения.

Зором Джона МакМастера - отличный декодер и вдохновение для библиотеки декодирования в этом инструменте.
Ромпа Адама Лори может быть самым первым инструментом маркировки, который будет открыт.
Bitract Chris Gerlinsky - это еще один инструмент с открытым исходным кодом для маркировки битов, а BitViewer - его подходящий инструмент для декодирования битов для байтов.
Декод PLA Питера Боша - это немного маркировок, используемый для извлечения старого Intel Microcode. Смотрите его Hardwear.io Talk с 2020 года для более подробной информации.