Так уж сложилось, что отдельной темы для
armpc на форуме нет. А пакет время от времени обновляется, и обновления остаются многими незамеченными.
ARM Patch Compiler - набор для компиляции патчей. Делал я его для себя, делал так, как удобно работать мне.
В качестве компилятора в пакете используется
FASMARM. Обновления и исходники можно взять на
http://arm.flatassembler.net/ (следует учесть, что компилятор в armpc может отличаться от того, что на официальном сайте).
Дальше пойдёт набор бессвязных фактов
- Многие не знают, но fasmarm вполне можно использовать и вне armpc, он даёт на выходе бинарник.
-
make.bat с давних пор нужно передавать максимум
два параметра - имя исходника и
имя raw/cxc файла. Базовый адрес передавать не нужно, он определяется автоматически.
Если внутри make.bat указать полное имя наиболее часто используемого raw/cxc файла, при запуске make.bat достаточно указать только имя исходника. - Файл
x.inc содержит описания макросов.
ADR и
MOVL - это не команды, это макросы. Некоторые ключевые слова в x.inc заменяются на макросы (
code16, code32, ldr, org), поэтому комплияция со включением x.inc и без него даёт разный результат.
- Макросы в fasmarm, в отличие от команд, регистрозависимы. Макросы
ldr/code16/code32/movl продублированы и в верхнем регистре, а вот
org нет. Поэтому если вы собираете патч, используйте
org, а если вы хотите получить простой бинарник, вам нужен
ORG.
- В исходниках можно использовать переменные системного окружения (свойства системы, дополнительно, переменные среды). Для себя я добавил переменную FASMINC, в значении которой указал полный путь к каталогу, где лежит armpc (помните, для вступления действия в силу иногда может потребоваться перезагрузка). Так можно компилировать исходники, лежащие в любых папках, без указания полного пути к x.inc.
Код:
include "%fasminc%\x.inc"
FAR+ARMPCМало кто использует
FAR Manager в повседневности, а вот я в нём постоянно. И компиляцию запускаю из FAR так, как мне удобно. А конкретней - простое нажатие
enter на исходнике собирает патч для z610, нажатие
ctrl+pgdn выдаёт меню со списком прошивок, для которых будет собираться патч. Делается оно легко:
f9 -> commands -> file associatoins -> ins -> маска файла *.asm -> описание какое вам нужно -> нужная команда на выполнение для
enter и
ctrl+pgdn.
У меня команды выглядят примерно так:
Код:
make.bat "!.!" C702_R3EF001
или для ручного ввода имени таргета:
Код:
make.bat "!.!" !?$armpc$target?Z610_R6DA001!
Нужно учесть, что если для типа файла есть только одно действие (как у меня на enter), то оно выполняется молча, а если несколько разных (ассоциация с *.asm добавлена несколько раз, команды на выполнение для ctrl+pgdn отличаются), то показывается меню.
В последней версии armpc компилятор чуть поправлен:
- теперь он понимает
movs/cmps/adds и прочие "s" в thumb безо всяких макросов (arm режим в патчах используется нечасто, но кто-то мог допустить ошибку, убирая s у арм-команд);
-
ldr и
adr работают с адресами без скобок, макрос для этого больше не нужен;
-
du в качестве аргумента должны подаваться строки в
utf8 (т.е. сам исходник при этом должен быть сохранен в utf8 без
BOM).
BOM - специальный маркер, позволяющий другим приложениям однозначно идентифицировать этот файл. В частности сохранить файл с BOM или без BOM можно во встроенном редакторе FAR и в notepad.
Скачать текущую версию маска файла *.asm -
[ Редактировано den_po в 28.5.15 13:50 ]