Как включить файл, заданный в качестве параметра макроса в ca65
Я пытаюсь написать макрос ca65, который должен включать файл, указанный в качестве параметра макроса. ca65 — ассемблер компилятора cc65.
Хотя я научился работать с командой .incbin:
.macro includethis4 filename
.incbin .concat (filename, ".", "i") ;this works
.endmacro
includethis4 "dummyfile" ;this works!
Я получаю сообщение об ошибке «Ошибка: ожидается строковая константа» при использовании .include вместо .incbin
.macro includethis3 filename
.include .concat (filename, ".", "i") ;this fails
.endmacro
includethis3 "dummyfile" ;this fails!
Мне ясно, что .include и .incbin делают разные вещи; .include включает файл в исходный код и анализирует его, а .incbin добавляет содержимое файла в выходные данные. Для моего приложения мне нужен .include.
Использование .include с объединенной строкой работает вне макроса:
.include .concat ("dummyfile", ".", "i") ;this works
Та же строка с константной строкой по-прежнему вызывает сообщение «Ошибка: ожидается строковая константа» при использовании в макросе, даже если макрос не имеет параметров:
.macro includethis2
.include .concat ("dummyfile", ".", "i") ;this fails
.endmacro
includethis2 ;this fails
Мой тестовый файл «dummyfile.i» был пуст, поэтому побочных эффектов от включенного файла быть не могло. Команда для сборки моих примеров была
ca65 testmacroinc.s
Мои вопросы:
- почему это работает с .incbin, но не с .include?
- как я могу достичь функциональности
.include .concat (filename, ".", "i")
внутри макроса?