Вложенность define / макросов более 20 уровней. Это на какой версии? Свежая из гитхаба или нет?
Вид для печати
Вложенность define / макросов более 20 уровней. Это на какой версии? Свежая из гитхаба или нет?
Да, прям свежак.
Для воспроизведения проблемы проект git@github.com:asve79/z80-ftp.git ветка wc_plugin.
Перед запуском билза ./_make.sh нужно выполнить ./get_depencies.sh
Сейчас ругается так:
==
**** Compile wc_ftp ****
SjASMPlus Z80 Cross-Assembler v.2019xxyy-WiP
main.asm(640): error: Over 20 defines nested
==
Причем у меня там явно нет вложенности 20. Может быть 3.
Проблема была из за того что параметр макроса и аргумент одинаковы. Это вызывало бесконечную рекурсию. Древний баг. В последнем коммите исправлено.
Код:MACRO _mkfile filestruct ; параметр 'filestruct'
LD HL,filestruct ; здесь происходила бесконечная замена 'filestruct' на 'filestruct'
CALL fs.mkfile
ENDM
Код:_mkfile filestruct ; и параметру 'filestruct' выше присваивается значение аргумента='filestruct'
Кстати, а пробовал ли кто компилировать код по адресу 0? У меня со старой версии фигня вышла какая-то.
по текущей пожелания по .SNA : сделать опционально включенными прерывания. И установить BC=адресу запуска(тоже по выбору)
Код:# org0.asm:
lab1:
jp lab1
$ sjasmplus --raw --lst=org0.lst org0.asm
# org0.lst:
1 0000 lab1:
2 0000 C3 00 00 jp lab1
3 0003
# org0.out (hex):
00000000 C3 00 00
Почему именно BC=адресу запуска? Это с чем-то связано? Можно в принципе сделать все что угодно (кастомизацию заголовка SNA как угодно), но сначала я хочу парсер радикально переделать.Цитата:
по текущей пожелания по .SNA : сделать опционально включенными прерывания. И установить BC=адресу запуска(тоже по выбору)
- - - Добавлено - - -
Подробнее плз, зачем такое нужно? Что за юзкейс?
По мне так лучше поменьше в исходник таких вещей запихивать, наоборот лучше все что можно относительно вывода в файлы вынести в параметры ком. строки. (чтоб можно было менять эти параметры не правя исходник) А если нужно в разные файлы, так лучше и выводить из разных (т.е. разделить исходник).
Есть какая-то серьезная причина делать иначе?
Чтобы можно было определенные результаты компиляции использовать извне, например.
Новый релиз: 20190304
Бинарники для винды и мака брать здесь: https://github.com/sjasmplus/sjasmplus/releases
Для Linux/Unix несложно собрать самостоятельно, инструкция в README.
Для пользователей Arch Linux есть пакет в AUR. (устанавливается, например, с помощью yaourt -S sjasmplus)
- - - Добавлено - - -
Отправил pull-request в репо Homebrew: https://github.com/Homebrew/homebrew-core/pull/37576
Пользователям Маков и всем заинтересованным в распространении данной софтины, стоит зайти на репо sjasmplus (--> https://github.com/sjasmplus/sjasmplus ) и ткнуть в правом верхнем углу "Star", "Watch" или "Fork" если это кому нужно. Это может повысить вероятность включения пакета с нулевой, т.к. админы Homebrew по этим показателям оценивают популярность софта. (на данный момент тамошний бот ругается что GitHub repository not notable enough (<30 forks, <30 watchers and <75 stars) )
Что нового (ниже на русском), ChangeLog:
Added
- New option: --output-dir
- Smart positioning of stack in 128K .sna snapshots
- --raw option without a parameter enables generation of default *.out files
- --lst and --sym now also work as expected without parameters
- New option --target=i8080 to restrict instruction set to be compatible with i8080
- --labels to dump UnrealSpeccy-compatible labels without polluting the source code with external file names (via the existing directive)
Fixed
- RST 10h calls in 128K .sna snapshots
- Writing to address 0xFFFF was broken
- ORG was broken if DISP was active
- No more "Forward reference" error messages in EQU/DEFL
- Fixed .(expression) prefix (acts like DUP/REPT for a single line)
- Fixed include search order, including angle bracketed includes as documented
- Fixed infinite recursion in macro expansion when a parameter and substitution are the same
- HIGH(expr) / LOW(expr) / NOT(expr) now do not require the argument to be separated by whitespace
- INCBIN, INCTRD, INCHOB & INCLUDELUA now use the same file path resolution mechanism as INCLUDE
- Fixed per file output of exports by default (unless overriden by --exp)
Кратко по-русски:
- Добавлена опция --output-dir для принудительного вывода выходных файлов в заданную директорию.
- "Умное" расположение стека при создании 128К .sna (в т.ч. для решения проблемы в данной теме описанной, с выводом по RST #10)
- *.out по умолчанию не создаются, опция --raw без параметра включает вывод *.out (с параметром работает как и раньше)
- --lst и --sym теперь можно указывать без параметра, имена файлов генерируются автоматически на основе имени первого исходного файла.
- --target=i8080 - для генерации кода, совместимого с i8080.
- --labels (с параметром или без) - для вывода файла меток (для UnrealSpeccy и т.п.), теперь можно не засорять исходники вещами которым там не место, типа имен файлов меток ;)
- "Ссылки вперед" в EQU/DEFL теперь работают без ошибок.
- Префикс .(выражение) не работал (работает как DUP/REPT) для одной строки - исправлено.
- Порядок поиска инклюдов приведен в порядок.
- Исправлена упомянутая несколькими постами выше проблема с зацикливанием разворачивания макросов.
- HIGH(выражение) / LOW(выражение) / NOT(выражение) можно теперь использовать без пробела перед скобкой
- INCBIN, INCTRD, INCHOB & INCLUDELUA теперь ищут файлы по той же логике что и INCLUDE
- экспорты пишутся теперь как задумано, по умолчанию в файлы с именами соответствующими именам исходников верхнего уровня. (если не использована опция --exp)
Тестирование приветствуется. Баги, реквесты и предложения лучше всего писать сюда (можно на русском): https://github.com/sjasmplus/sjasmplus/issues
1.07 собирает исходник без проблем. Подсовываю новую версию, вываливаются ошибки.
https://i.imgur.com/ZPgkPER.png
https://i.imgur.com/p1ahJAj.png
Код:MACRO PACKEXITS exit1, exit2
DB (exit1 << 4) | exit2
ENDM
Код:MAP 1
LENGTH_3:
W_AND:
_AND: #1
DC "AND"
W_THE:
_THE: #1
DC "THE"
W_OAK:
_OAK: #1
DC "OAK"
У мнУ на первом проверенном исходнике уже "застряло" :(
и лог компиляцииКод:jp pe,FastLDIR_Loop
---------- Capture Output ----------
> "D:\Program Files\Crimson Editor SVN286M\sjasmplus-win32-1.07-rc7\sjasmplus.exe" kva4bis.asm
SjASMPlus Z80 Cross-Assembler v.20190304
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
kva4bis.asm(757): error: Label not found: pe
Pass 3 complete
Errors: 1, warnings: 0, compiled: 1004 lines
> Terminated with exit code 1.
Причем pe - это не метка как бы :) Код для Z80, уточ нюю на всяк. случай