Содержание
Выбери опцию из списка, чтобы посмотреть способы отредактировать код/данные в эмуляторе FCEUX.
Hex Editor | Inline Assembler | ROM Data Editor |
Способ для тех, кто знает опкоды инструкций и может записывать код при помощи байтов.
Чтобы отредактировать код (и данные тоже), нужно знать его местоположение ROM File. Адрес в ROM File всегда отличается от адреса NES Memory, который ты видишь в Debugger'е.
Чтобы не вычислять самому адрес в ROM File и сразу перейти к адресу, где находится интересующая инструкция, нужно во время паузы эмулятора кликнуть правой кнопкой по серой полоске в окне Debugger'а слева от адреса инструкции. Автоматически откроется окно Hex Editor, и тебя перекинет на местоположение этой инструкции в ROM File.
Если правый клик находится на экране в том же месте, где откроется окно Hex Editor, то этот же правый клик сработает и на этом окне.
После перехода в ROM File ты увидишь байты #$C9 и #$FF, из которых состоит инструкция
Если эмулятор не находится на паузе, правый клик ни к чему не приведет.
Если окно Hex Editor было свернуто перед кликом, оно не развернется. После ручного разворачивания окна выяснится, что оно все же практически правильно перешло на нужный адрес в ROM File, нужно лишь прокрутить окно вверх на 1 строчку.
Если после клика ничего не произошло, проверь стоит ли эмулятор на паузе и развернуто ли окно Hex Editor.
Если кликнуть на адресах $0000-$7FFF, Hex Editor откроется в NES Memory, а не ROM File.
Чтобы отредактировать считываемые кодом данные, например данные таблицы из инструкции
Этот способ редактирования кода (но не данных) подходит для тех, кто не заучивает опкоды и хочет записывать инструкции текстом, а не байтами. Гораздо более удобный способ редактирования кода текстом - использовать другие ассемблеры, например ca65.
Окно будет полезно для редактирования адреса в инструкциях условного перехода при переходе в обратную сторону.
Окно Inline Assembler вызывается в Debugger'е левым кликом по серой полоске слева от адреса инструкции. Это работает только на адресах $8000-$FFFF и только во время паузы эмулятора.
Вверху окна показан начальный адрес вместе с инструкцией и ее байтами (этот текст можно выделять и копировать). По этому адресу будет начинаться перезапись инструкций. Синтаксис у вводимых инструкций точно такой же, как они выглядят в Debugger'е, за тем исключением, что не обязательно вводить инструкции и байты заглавными буквами, а также лишний ноль слева у байтов можно опускать.
При ошибке синтаксиса, а также если будет неправильно введен адрес для инструкции условного перехода из-за превышения лимита адреса, ты услышишь системный звуковой сигнал, а в названии окна будет сказано *Syntax Error*.
За 1 раз можно ввести 1 инструкцию, затем нажми клавишу Enter для подтверждения ввода. Введенная инструкция отобразится в списке, а вверху окна будет показан следующий доступный адрес, байты и сама инструкция.
Когда закончишь вводить инструкции, нажми кнопку Apply, а затем закрой окно и сверься с Debugger'ом.
После использования Inline Assembler изменения в ROM File не выделяются красным цветом, и эти изменения нельзя отменить через Ctrl + Z.
Кнопка Undo отменяет ввод инструкций по очереди, начиная с последней из списка. По-другому отредактировать список не получится.
Кнопка Save записывает изменения в файл ROM'а, как при сохранении через вкладку File в Hex Editor'е. Предварительно нужно нажать кнопку Apply, а затем подтвердить сохранение изменений.
Кнопка Save работает аналогично File -> Save Rom. Если нажать кнопку, то будут также сохранены и те изменения, которые ты делал до этого без сохранения. В то же время если сохраниться и закрыть окно, а затем снова открыть и внести другие изменения, но в этот раз не нажимая кнопку Save, то эти новые изменения не сохранятся при закрытии файла в эмуляторе.
Этот способ редактирования кода и данных является запасным, и в лучшем случае подходит для редактирования лишь одного-двух байтов. Гораздо удобнее пользоваться Hex Editor'ом и Inline Assembler'ом.
Окно ROM Data Editor открывается в Debugger'е кнопкой ROM Patcher. Предварительно желательно скопировать в буфер обмена адрес, по которому нужно отредактировать байты.
В окне ROM Data Editor вводишь адрес NES Memory в поле ввода вверху и жмешь кнопку Edit This Offset.
Если это адрес из ROM File, предварительно нужно поставить галочку .Nes File Address.
В поле Current Data отображены 8 байтов, которые находятся начиная с введенного адреса. Если требуется изменить лишь какой-то из этих байтов, можно скопировать всю строчку целиком, вставить в нижнее поле ввода, а затем подменить необходимый байт, например заменив #$FF на #$AA.
Всю строчку копировать не обязательно, достаточно было скопировать байты #$C9 и #$FF. Байты не обязательно записывать заглавными буквами.
В поле ввода помещается не более 30 символов, то есть максимум можно записать 15 байтов без пробелов.
В поле Current Data указан адрес $B000, а не $F000, потому что маппер NROM-128 дублирует адреса $8000-$BFFF и $C000-$FFFF.
Чтобы применить свои изменения, нажми кнопку Apply. Если все получилось, то в поле Current Data ты увидишь свои изменения. А чтобы сохранить изменения в файле без необходимости сохранять их через Hex Editor, нажми кнопку Save Rom File.
После использования ROM Data Editor изменения в ROM File не выделяются красным цветом, и эти изменения нельзя отменить через Ctrl + Z.