Небольшая новость:
- выставил более-менее оптимальные настройки для ИДЫ
- некоторые куски кода она всё равно не брала, пришлось переделать скрипт не под AnalyzeArea, а под MakeCode, т.е. теперь я задавал каждую строчку кода, а не блок
- ИДА создавала лишний код в том месте, где должны быть данные, из-за того, что на это место ссылалась команда LEA. Убрал галочку "Create function if data xref data -> code32 exists", теперь лишний код не создаётся. И пришлось ещё отключить автоанализ, от него тоже были проблемы
- теперь все строки кода (их адреса) в ИДЕ совпадают со строками кода от моего анализатора, не больше и не меньше
Выгрузил в .asm и в который раз столкнулся с двумя неприятностями:
1. Все известные мне ассемблеры превращают команды типа
ADD #imm, Dn
в
ADDI #imm, Dn
и остальные подобные команды. Из-за этого опкод искажается, а если там на самом деле были данные, то будет ошибка.
Как решить эту неприятность?
2. Проблема только с GNU Assembler. Он оптимизирует запись .l в Dn в MOVEQ, если это возможно, т.е. команду
MOVE.L #$00000011,D0
он превратит в
MOVEQ #$11,D0
Вторая команда короче, из-за чего всё сдвигается. А жалко, т.к. GAS имхо самый функциональный ассемблер. Либо надо немного пропатчить оригинальный ром, там таких команд немного.
Собрал под Asm68k, правда, тот не понял размерность команды MOVE USP, но это мелочь. Сравнил полные дизасмы с оригинальным файлом: кроме опкодов xxxI команд, различий больше нет.
Т.е. теперь есть такой проект ИДЫ, который я хотел, с которым можно работать. Осталось разобраться с incbin и можно будет приступать.
Хотел выложить проект ИДЫ, но архив idb большой - больше мегабайта, не хочется каждый раз его выкладывать. А если делать Dump to IDC, возникают косяки с настройками и автоанализом
![Грустный :(](//www.emu-land.net/forum/Smileys/default/sad.gif)