Вложенность 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, уточ нюю на всяк. случай
OK, в следующей версии будет BC=PC.
В документации: https://github.com/sjasmplus/sjasmpl...meoffsetlengthЦитата:
а где прочитать про такую ?
MAP-ы выпилены @Vitamin-ом давно, см. тему с этого поста: https://zx-pk.ru/threads/447-sjasmpl...map#post778111
Таки нужны они?
- - - Добавлено - - -
Пусть пока так будет (пока не сделаю кастомизацию значений заголовка SNA).
Насколько я могу судить, ктото (Aprisobal?) просто вышел в дебаггер в эмуле с голым бейсиком и скопировал значения регистров.Цитата:
в .SNA фиг пойми что происходит - вызов из ROM и переход по адресу с непонятными значениями регистров.
По хорошему да, надо или разумные дефолты какие-то и/или кастомизацию всех значений. А на данный момент лучше всего не полагаться на начальные значения регистров в SNA.
Я пока особо не вникал в это, просто сделал чтоб стэк более менее нормально инициализировался в т.ч. в 128К чтобы можно было использовать RST #10 и вернуться в бейсик по RET.
Исправлено.
Новый релиз: 20190304.1 https://github.com/sjasmplus/sjasmplus/releases
Fixed
- SNA: Set BC=PC to match ZX Basic's USR behavior
- Condition codes were not entirely case-insensitive
- - - Добавлено - - -
Неверно по сравнению с чем?
SNA - формат для дампов памяти работающих программ, изначально подразумевается что никакую память портить нельзя, потому отчасти в 48К версии стек запихнули в экран.
Однако в данном случае мы этот формат используем совсем в других условиях: при ассемблировании точно известно какие области памяти используются, так что можно стек расположить заведомо там где нет кода. Как минимум такой подход гарантирует что ничего в коде не испорчено. Если это по каким-то причинам автору кода неудобно ("неверно"), ничего не мешает переставить SP куда нужно прямо в коде.
ок. берем второй любой асм.
есичо - последний EDUP - это 46-я строкаКод:DUP 18
out (c),l
EDUP
лог пожалуй под сполер)
6+
---------- Capture Output ----------> "D:\Program Files\Crimson Editor SVN286M\sjasmplus-win32-1.07-rc7\sjasmplus.exe" FPGA48_uncont1.asm
SjASMPlus Z80 Cross-Assembler v.20190304.1
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
FPGA48_uncont1.asm(46): error: Unrecognized instruction: E
Pass 3 complete
Errors: 198, warnings: 0, compiled: 19470 lines
> Terminated with exit code 1.[свернуть]
У меня единственный исходник, я не гордый, могу переделать, если подскажете, как правильно.
Имеется несколько разнотипных блоков со структурами (плавающей длины).
И к этим структурам обращение по их порядковому индексу.
Например, текстовые сообщения 1, 2, 3, ...N
И дальше в данных используем не адрес, а номер сообщения.
Исправлено. См. новый релиз 20190304.2: https://github.com/sjasmplus/sjasmplus/releases
Fixed
- Trailing whitespace after EDUP etc. was breaking things
- - - Добавлено - - -
А как по этому номеру ищется сообщение, если длина плавающая?
Неплохо. Но это явные ошибки.
Плохо, когда ошибок компиляции нет, но программа не работает. Вот и думай что хошь.
в аттаче компиленный код, один и тот же, но в разных версиях.
Если в двух словах - это тест(-ы) для проверки soft-core Z80. Наглядные. Насколько точно эмулятся команды в сравнении с "железным" ( ну или програмным:) процессором. Кстати, эти тесты криво работают на одном из попу лярных эмууулей, а именно Спекуляторе. Но это проблемы уже авторов сего. На остальных софтовых более менее. У меня их 100пицот тестов. Не суть.
Суть в том, что старая версия компилит правильно, как задумал автор, новая - впрочем сами смотрите.
Что-то сломано в SAVEТАР. Версия исключительно под Spectrum 48 с его contended памятию. Для пятногона это неактуально.
Как это понимать с учетом того что в аттаче один файл? (FPGA48.tap размером 15113, выдает картинку ниже в Fuse) Что с чем сравнивать?
А исходники суперсекретны? В личку мне нельзя их?
- - - Добавлено - - -
https://i.imgur.com/PEGGDQk.png
MAP 0 - задаёт начальное значение
последующие #1 увеличивают на единицу.
Т.е. по метке MISERY можем узнать индекс.
Код:MAP 0
NONAME: #1
ZTERM
SOTHIC: #1
GETWORD W_THE
GETWORD W_SOTHIC
GETWORD W_COMPLEX
ZTERM
MISERY: #1
GETWORD W_THE
GETWORD W_ROOM
GETWORD W_OF
GETWORD W_MISERY
ZTERM
TROLLW: #1
GETWORD W_TROLLWYND
ZTERM
блиииин, с именем файла закосячил, не тот прислал.
Ну да, в идеале тесты показывают 4 зеленых квадрата на бордюре.
если какая-то команда длиннее-короче по тактам в contended памяти, то картинка естественно рушится.
я не все команды так точно подгонял. Но в данном случае не важно.
если просто лоб-в-лоб сравнить два скомпиленных файла, то видно отличия в басик-заголовке. Скорее всего. Сами тесты вряд ли чем помогут. Но в личку могу.
Как MAP и # (FIELD) работают понятно. Вопрос не в этом, а в том какой смысл их так использовать, т.к.:
1. придуманы они были явно не для этого (а для того чтобы описывать что-то вроде структур с полями разного размера),
2. какой смысл в этих индексах в данном случае, как по ним искать адреса сообщений?
этот и должен, этот самый простой.
на самом деле их не один десяток, в основном по группам.
http://s1.micp.ru/thumb/5BWks.jpg
Есть который все-в-одном, но это давно было. Да и это не для эмулей рисовалось, а для проца T80 в ФПГА.
На твоем эмуле вроде все ровно, а вот Спекулятор неприятно удивил фейлом
Офтопик конечно, относительно топика, одно общее - все это компилилось в ужасме))
Нашел пак тестов, не все, но особо косячные которые были.вобщем надо ALL проверять.
в спекуляторе фейлится, в своем можешь проверить, как дОлжно быть. ну и в других.
http://rgho.st/8PwpRxmGK
Есть блок сообщений (например, названия комнат, что выше приводил).
И есть карта комнат, в котрой прописаны индексы названий.
Процедура по индексу из карты, сканирует и ищет нужный блок с названием, плюс один по zero-termination.
Т.к. это дизасм, имеем то, что имеем. :)
По-правильному для данных нужен редактор, и бинарники инклудить. Но т.к. редактора нет, извращаемся исходниками. :)
Новый релиз v.20190304.3: https://github.com/sjasmplus/sjasmplus/releases
Fixed
- Spaces in MACRO arguments caused trouble
- SAVETAP: Fix tape header tag
Проверил, спасибо. Тест FPGA48all.tap, похоже, у меня (и в ZXMAK2) слегка косячит - левая цветная полоска мерцает, а в Fuse, SpecEmu и в онлайн-эмуле qaop/torinak она стабильна. Spectaculator его фейлит. Не подскажешь, как на реале?
UPD: разобрался, дело было в подключенном Кемпстон-джойстике, без него мерцания левой полоски нет.
Тест LD(IX+55),E.tap - во всех эмулях боковые полоски лажовые - правой нет, левая смещена влево на 2 знакоместа. На реале так же?
Ну и SpecEmu завалил предыдущий тест, к-рый осилил Spectaculator, квадраты дергаются.
Отличался один байт в заголовке (спасибо C++-ной якобы "строгой" типизации %@#@%%@%#), поправил в последнем релизе. Работает вроде точно также, но отличаются и другие байты. Так что на исходник хотелось бы посмотреть.
- - - Добавлено - - -
Ошибки касающиеся макросов - исправлено в последнем релизе.
- - - Добавлено - - -
В приниципе то же самое (если я правильно понял) можно сделать с помощью макросов:
Код:MSGINDEX=0
MACRO N L
MSGINDEX = MSGINDEX + 1
L EQU MSGINDEX
ENDM
LENGTH_3:
W_AND:
N _AND
DC "AND"
W_THE:
N _THE
DC "THE"
W_OAK:
N _OAK
DC "OAK"
Код:$ sjasmplus --lst --lstlab file.asm
$ cat file.lst
01 0000 MSGINDEX=0
02 0000 MACRO N L
03 0000~ MSGINDEX = MSGINDEX + 1
04 0000~ L EQU MSGINDEX
05 0000 ENDM
06 0000
07 0000 LENGTH_3:
08 0000 W_AND:
09 0000 N _AND
10 0000 41 4E C4 DC "AND"
11 0003 W_THE:
12 0003 N _THE
13 0003 54 48 C5 DC "THE"
14 0006 W_OAK:
15 0006 N _OAK
16 0006 4F 41 CB DC "OAK"
17 0009
Value Label
------ - -----------------------------------------------------------
0x0003 MSGINDEX
0x0000 X LENGTH_3
0x0000 X W_AND
0x0001 X _AND
0x0003 X W_THE
0x0002 X _THE
0x0006 X W_OAK
0x0003 X _OAK
как на реале - точно не подскажу) Мои реальные компы - только клоны, неск. штук, там до фирменных таймингов далеко, а на Профи-ках -еще дальше... Цель всех именно этих тестов - добиться как можно более точной эмуляции\симуляции программно-аппаратной модели Т80 в ПЛИС хотя бы в сравнении с распространенными эмулями. Вобщем я рисовал тесты, чтобы в эталонных (на мой взгляд:) эмулях работали ровно, CpecEmu - один из эталонных, на нем и еще на каком-то отлаживал, ну и потом этот же тест запускался в ФПГА. Ну и по результатам теста Sorgelig допиливал процессор Т80. Сейчас он практически идеален.
На реале мои тесты тоже запускали, на паре фирменных резинок и на арлекине.
про реал не скажу, но правой полоски не должно быть,, а вот левая в разных эмулях по разному вела себя, она и должна быть смещена, но там какой то явно видимое различие в эмулях было.
ну тут ничего не скажу, все же SpecEmu был эталоном. такие явные различия надо проверять на реале.
да и мои под(д)елки - не идеальные, но свое предназначение они выполнили. Да и тут то всплыли только потому, что тап-ка попалась нерабочая именно на этом тесте. Я так думаю это будет на ЛЮБОМ асм-е. надо FPGA48all.tap за 13 августа найти исходник, на нем и пробовать компилить тогда уж.
sjasmplus-win64-20190304.3
https://i.imgur.com/23LVMKO.png
Win7 машина, sjasmplus-win64-20190304 запускается без падений.
тот пример перепроверю, но сейчас другие компилил - вроде нормально запускаются.
Нашел архив с картинкой от 20 июля. Почемуу-то твоего эмуля там нет.
Скорее всего вторым "эталоном" или ZXMAK2 или Fuse был)
Скрытый текст
http://s2.micp.ru/2BpaX.jpg[свернуть]
Ах да, самая первая картинка - это MiSTer с железной эмуляцией проца от Sorgelig-a, фото с экрана монитора
ыыыыыы... немножко офф-а по тестам :)
искал разъемы под клавиатуру, наткнулся на знакомую картинку
https://www.bytedelight.com/?page_id=3457
бордюр конечно черный должен быть, но это особенности CMOS-процов, кто же знал, что ЭТО комуу-то понадобиЦЦа )
кстатида, Sorgelig учел мою просьбу, и у него можно выбирать тип процессора, мелочь, но приятно.
Я уже разобрался: если выключить у меня в эмуле Кемпстон-джойстик, полоска слева не мерцает, там чтение из порта идет в коде.
Спасибо за тесты, они мне очень помогли :v2_thumb: .
- - - Добавлено - - -
Разобрался - в SpecEmu квадраты дергаются при включенных Late Timings, с выключенными они стабильны. Однако я знаю как минимум один косяк таймингов SpecEmu - в SongInLines4 в 128 он виден вверху на красных полосках справа.
Ну да, по дефолту как бы Early. Я конечно старался и так и так проверять, но в принципе это правильно, что из-за такта поддергивается. я так понимаю разницу early\late в +-1 такт. Поэтому у мну даже вариант теста есть, в количестве 4\5-х штук, так и подписанные -1,-2,-3 и +1. Видимо от какого то стабильного значения. и картинка ровная на двух значениях, -2\-3 и два других ожидаемо влево-вправо разбегаются. Но это на early, на late должно быть по другому.
32-x битная под ХР точно работает.
ну и по тап-ке
http://s1.micp.ru/LI0pz.jpg
Различие в лоадере явно видно, твой последний - слева.
Но тем не менее компиленный файл работает правильно.
Обновил немного gcc, пересобрал либы, пересобрал sjasmplus. Выложил новые архивы на место прежних: https://github.com/sjasmplus/sjasmpl...tag/20190304.3
А что в том окошке на скриншоте, если ткнуть "view problem details"?