Game Boy Rom Disassssembler.
Требуется Python v3.6 или более поздней версии.
Файлы сборки, сгенерированные MGBDIS, предназначены для сборки RGBDS V0.6.0 или более поздней версии.
Разобрать ПЗУ:
./mgbdis.py some-game.gb
Вывод по умолчанию в каталоге disassembly . Вы можете проверить результат разборки, make созданный файл game.gb (или game.gbc ):
cd disassembly && make
Существует также ряд параметров, доступных для управления форматированием и стилем инструкции сгенерированного кода сборки. Вы можете просмотреть их, работая:
./mgbdis.py -h
Файлы символов позволяют указать, где в ПЗУ находятся код, данные, тест и тестирование и изображения.
Инструкции CPU Game Boy (SM83) имеют разные длины, и данные могут быть чередованы с кодом в ПЗУ, поэтому невозможно всегда точно определить, где начинается и останавливается инструкция. Определение блоков кода в файле символов может помочь избежать проблем с MGBDI, пытающимися разобрать в середине инструкции.
Если у вас нет файла символов, вы можете попробовать генерировать один с моим эмулятором Game Boy - избитая умирающая луна. Вы можете использовать веб -демонстрацию, либо есть сборки для Windows и MacOS. Он может генерировать файл символа с определениями блоков кода на основе адресов инструкций, которые фактически были выполнены во время игры в игру, избегая проблем выравнивания инструкций.
Чтобы использовать файл символов с MGBDI, он должен существовать в том же каталоге, что и ROM, и иметь одинаковое имя, за исключением того, что измените расширение на .sym
Все значения (за исключением ширины изображения) должны быть в шестнадцатеричной. Записи начинаются с номера банка, за которым следует адрес в памяти.
Типы блоков могут быть .image с .data магистралей .code .text
Добавление метки для некоторого кода:
03:47f2 Read_Joypad_State
Добавление метки для 512 байтов данных:
0d:4800 Level_Data
0d:4800 .data:200
Добавление метки для 16 байтов текста:
00:3d00 Character_Name
00:3d00 .text:10
Метка .image Magic позволяет определить блоки по 1 или 2 бита на данные о пиксельной плите в ПЗУ. Изображения выводятся в виде файлов PNG в каталоге /gfx разборки и преобразуются обратно в данные плитки 1BPP или 2BPP с помощью MakeFile с использованием RGBGFX. Если метка указана по адресу блока изображения, она будет использоваться для имени файла PNG.
Длина блока в байтах должна быть кратна 16, поскольку каждая плитка требует 16 байтов данных изображения.
Ширина изображения в пикселях может быть указана в виде десятичного числа, префиксированного w Значение ширины должно быть кратно 8, а комбинация длины блока и ширины изображения должна привести к прямоугольному изображению без каких -либо пустых плиток. Ширина изображения по умолчанию составляет 128 пикселей, или если длина блока указывает нечетное количество плиток, то будет генерировать изображение с одной строкой плиток.
Палитра представляет собой значение размером с байт, которое выбирает оттенки серого для использования при генерации изображения. Он использует тот же формат, что и регистр BGP в 0xFF47 . Значение может быть указано в шестнадцатеричном префиксе с p . Палитра по умолчанию - E4 .
По умолчанию это обрабатывать его как 2 бита на данные о пиксельной плитки. Вариант 1bpp может быть предоставлен для обработки данных как 1 бит на данные о пиксельной плите.
Добавление метки для 1280 байтов данных плитки с шириной 128 пикселей и палитры 0xe4:
02:791a Title_Screen_Tile_Data
02:791a .image:500:w128,pe4
Получающееся изображение:
Пример для данных 1BPP плитки:
05:4000 Font
05:4000 .image:200:w128,1bpp
Получающееся изображение:
NOP после STOP и HALT , поэтому Disassassembler выведет их в качестве байтов данных, если инструкция не сопровождается NOP в исходном ПЗУ. Использование --disable-halt-nops с MGBDIS для обучения RGBDS отключить вставку автоматических инструкций NOP после инструкций HALT .