PDA

Просмотр полной версии : SjASMPlus Z80 кросс ассемблер



Страницы : 1 2 3 4 5 6 [7]

jerri
29.01.2019, 23:19
mastermind, а ты в нем серьезно ковырятся будешь или так слегка?
там есть пара моментов просто.

mastermind
29.01.2019, 23:28
jerri, На данный момент пока приоритет - "приведение в порядок" того что есть, далее видно будет. В любом случае, все "моменты" стоит записать в issues на гитхаб https://github.com/sjasmplus/sjasmplus/issues или хотя бы здесь в теме, чтобы не потерялись.

CityAceE
30.01.2019, 00:35
mastermind, спасибо! Буду ждать и надеяться :)

mastermind
03.02.2019, 02:52
Скажем так: вывод текста в .SNA не работает, rst 10h приведет к сбросу. Причина: неверные данные системных переменных.
Проверил.
При "device zxspectrum48" - работает. (тестировал на примере отсюда: http://zxpress.ru/book_articles.php?id=1150 )
При "device zxspectrum128" - да, нужно поправить.

- - - Добавлено - - -


Ну что ж.. 14 лет назад я зацепился за сабжевый компилятор, подумал "о, крутота какая, столько наворотов, макросы, макрооператоры, сохранялки всякие". Но потом сильно удивился не сумев в нём откомпилировать ни один свой код. Написал в этом же самом треде (https://zx-pk.ru/threads/447-sjasmplus-z80-kross-assembler.html?p=21716&viewfull=1#post21716), пожаловался на то, что сабж не умеет в Forward reference. Вот такой простейший кусок не компилится:

length equ end-start
org 8000h
start
ld bc,length
ret
end

Сие преспокойно компилилось в TASM, в z80asm, и в свежем rasm тоже компилится. Почему сабж до сих пор не умеет такого простого действия, как переменные (equ) с отсылкой на метки ниже? Ведь в конце уже первого прохода все смещения уже известны, а тут их аж 3... И сабж остаётся более ущербным в этом плане, чем древний спектрумовский tasm, которым я пользовался 25 лет назад.
Самое интересное что он при этом генерирует правильный код:

SjASMPlus Z80 Cross-Assembler v.20170908+dev
forw.asm(1): error: Forward reference
Pass 1 complete (1 errors)
Pass 2 complete (1 errors)
Pass 3 complete
Errors: 1, warnings: 0, compiled: 7 lines
На последнем проходе нет ошибки! (да, кривизна)
Результат:

01 04 00 C9
Эта проблема проявляется только при ссылке с одного EQU на другой. В остальных случаях (ссылка из операнда z80-директивы на EQU) ссылки вперед работают без ошибок.

Shiny
03.02.2019, 07:14
кстати, по 128. у .SNA по $C000 подключена не пойми какая страница - это норма или такой замудреный формат?

mastermind
03.02.2019, 15:58
кстати, по 128. у .SNA по $C000 подключена не пойми какая страница - это норма или такой замудреный формат?

В этом плане, если не ошибаюсь, все как надо: по C000 подключена та страница которая была последней включена директивой PAGE (или дефолтная - 7) + соответственно выставляется "состояние порта 7FFD" в заголовке SNA, см. http://speccy.info/SNA

Shiny
03.02.2019, 16:11
а page 0 в начале исподника не влияет, похоже.

mastermind
26.02.2019, 05:58
Хочется новую фичу! А именно, чтобы по какому-нибудь ключу он компилировал код, написанный для процессора Intel 8080 (он это и сейчас прекрасно делает), но чтобы в процессе компиляции он бы ругался в консоль на специфичные для Z80 команды. А то иной раз, например, вместо JP LABEL напишешь JR LABEL, а потом не можешь понять почему ничего не работает, хотя визуально всё отлично и скомпилировалось без ошибок. А проблема всего лишь в одной букве, которую сразу и не заметишь.
Это в принципе готово, код на github (https://github.com/sjasmplus/sjasmplus). В ближайшее время немного потестирую и сделаю релиз.

Black Cat / Era CG
26.02.2019, 16:08
О! Реквест. Есть такой ключик:
--exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)
и такая директива:
EXPORT label
The named label will be written to the export-file, in the form 'label: EQU value'. This way the export-file can be included in other sources.
А как бы сделать так, чтобы экспорт работал не в один файл, а в разные. Ну например, убрать его имя из ключей, и добавить первым параметров в директиву.

Shiny
26.02.2019, 17:41
Это в принципе готово, код на github. В ближайшее время немного потестирую и сделаю релиз.

А как режимы процессора будут переключаться?

mastermind
26.02.2019, 19:25
О! Реквест. Есть такой ключик:
--exp=<filename> Save exports to <filename> (see EXPORT pseudo-op)
и такая директива:
EXPORT label
The named label will be written to the export-file, in the form 'label: EQU value'. This way the export-file can be included in other sources.
А как бы сделать так, чтобы экспорт работал не в один файл, а в разные. Ну например, убрать его имя из ключей, и добавить первым параметров в директиву.

Сейчас так и есть: если не указывать --exp=... совсем, то экспорты пишутся в файл с тем же именем что и текущий исходник, но с расширением .exp. Так по крайней мере задумано, надо проверить как работает на практике.

- - - Добавлено - - -


А как режимы процессора будут переключаться?

--target=i8080

Black Cat / Era CG
26.02.2019, 20:09
Сейчас так и есть: если не указывать --exp=... совсем, то экспорты пишутся в файл с тем же именем что и текущий исходник, но с расширением .exp. Так по крайней мере задумано, надо проверить как работает на практике.
Не. Я имею в виду, чтобы из одного исходника можно было экспортить в разные файлы.

jerri
26.02.2019, 20:23
--target=i8080

а можно по псевдоперанду как

device zxspectrum48

например device i8080

Shiny
27.02.2019, 10:56
например device i8080

device Altair, ага xD

mastermind
27.02.2019, 19:55
а можно по псевдоперанду как

device zxspectrum48

например device i8080
Подумаю над этим, как это лучше сделать. Встречный вопрос потенциальным пользователям этой фичи (i8080):
В каком формате предполагается сохранять результат?
Например, есть "DEVICE ZXSPECTRUM48" (+ в моей версии синоним "PLAIN") - режим "эмуляции памяти", а есть "DEVICE NONE" (по умолчанию) - тупо пишет весь код подряд в файл.
При наличии первой директивы работает сохранение в sna, tap и т.п. Иначе только в виде raw/out. (что вообще довольно странная фича/идея на мой взгляд)
В режиме i8080 надо "эмулировать память"?

jerri
27.02.2019, 23:21
Подумаю над этим, как это лучше сделать. Встречный вопрос потенциальным пользователям этой фичи (i8080):
В каком формате предполагается сохранять результат?
Например, есть "DEVICE ZXSPECTRUM48" (+ в моей версии синоним "PLAIN") - режим "эмуляции памяти", а есть "DEVICE NONE" (по умолчанию) - тупо пишет весь код подряд в файл.
При наличии первой директивы работает сохранение в sna, tap и т.п. Иначе только в виде raw/out. (что вообще довольно странная фича/идея на мой взгляд)
В режиме i8080 надо "эмулировать память"?

на i8080 есть куча машин - тот же вектор и прочее
там свои форматы хранение и для них я снапшотов не видел
но для специалиста например я делаю так


device zxspectrum48
org 0
file_start:
dw start_prog
dw end_prog
disp #0000
start_prog:

;здесь код

end_prog
dw 0
end_file:

savebin "eliteline.rks",file_start,4+end_file-file_start


в принципе можно и чтото вроде PLATFORM i8080/Z80

mastermind
27.02.2019, 23:42
Ясно, все вручную через savebin. ОК.

Еще вопрос: кто-нибудь пользуется директивой FPOS?:

FPOS <position>
The FPOS directive makes it possible to set the file position to anywhere in the output file.

In combination with OUTPUT "<filename>",r it is possible to update existing files.

; This example will result in a file with a length of one byte:
BYTE 0
FPOS 0
BYTE 1
END
Есть мысль ее выпилить нафиг, возможно вместе с OUTPUT. (см. поиск по "FPOS" по теме). Вместо этого сделать чтоб SAVEBIN, SAVETAP, SAVETRD без параметров сохраняли только те области памяти в которые ассемблер что-то реально писал.

Shiny
28.02.2019, 08:00
Еще вопрос: кто-нибудь пользуется директивой FPOS?:

я не пользуюсь, так как не осилил документацию:v2_dizzy_facepalm:

shurik-ua
28.02.2019, 13:52
OUTPUT не надо выпиливать - я ею пользовался активно когда-то )

asve79
01.03.2019, 13:19
Ребят, что за ошибка стала появляться?
==
Over 20 defines nested
==

Что она означает?

Ругается в строке вызова макроса. Меняю на код, начинает ругаться на место вызова другого макроса...

mastermind
01.03.2019, 13:38
Вложенность define / макросов более 20 уровней. Это на какой версии? Свежая из гитхаба или нет?

asve79
01.03.2019, 14:17
Вложенность 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.

mastermind
02.03.2019, 00:28
Да, прям свежак.

Для воспроизведения проблемы проект 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'

Shiny
02.03.2019, 09:32
Кстати, а пробовал ли кто компилировать код по адресу 0? У меня со старой версии фигня вышла какая-то.

по текущей пожелания по .SNA : сделать опционально включенными прерывания. И установить BC=адресу запуска(тоже по выбору)

mastermind
03.03.2019, 23:36
Кстати, а пробовал ли кто компилировать код по адресу 0? У меня со старой версии фигня вышла какая-то.


# 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





по текущей пожелания по .SNA : сделать опционально включенными прерывания. И установить BC=адресу запуска(тоже по выбору)
Почему именно BC=адресу запуска? Это с чем-то связано? Можно в принципе сделать все что угодно (кастомизацию заголовка SNA как угодно), но сначала я хочу парсер радикально переделать.

- - - Добавлено - - -


Не. Я имею в виду, чтобы из одного исходника можно было экспортить в разные файлы.

Подробнее плз, зачем такое нужно? Что за юзкейс?
По мне так лучше поменьше в исходник таких вещей запихивать, наоборот лучше все что можно относительно вывода в файлы вынести в параметры ком. строки. (чтоб можно было менять эти параметры не правя исходник) А если нужно в разные файлы, так лучше и выводить из разных (т.е. разделить исходник).
Есть какая-то серьезная причина делать иначе?

Black Cat / Era CG
03.03.2019, 23:47
Чтобы можно было определенные результаты компиляции использовать извне, например.

mastermind
04.03.2019, 00:16
Чтобы можно было определенные результаты компиляции использовать извне, например.
Ну так директива EXPORT в нынешнем виде как раз и существует для этого. Для тех результатов (меток) что нужно использовать извне, она используется, для тех что не нужно - не используется.
Нужны еще какие-то "третьи" варианты? Для чего?

mastermind
04.03.2019, 06:33
Новый релиз: 20190304

Бинарники для винды и мака брать здесь: https://github.com/sjasmplus/sjasmplus/releases
Для Linux/Unix несложно собрать самостоятельно, инструкция в README (https://github.com/sjasmplus/sjasmplus/blob/master/README.md).
Для пользователей Arch Linux есть пакет в AUR (https://aur.archlinux.org/packages/sjasmplus/). (устанавливается, например, с помощью 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 (https://github.com/sjasmplus/sjasmplus/blob/master/ChangeLog.md):

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)


(https://github.com/sjasmplus/sjasmplus/blob/master/ChangeLog.md#fixed)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 (https://github.com/sjasmplus/sjasmplus/wiki#include-filename)
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)


(https://github.com/sjasmplus/sjasmplus/blob/master/ChangeLog.md#2017-03-11)
Кратко по-русски:

Добавлена опция --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

Bedazzle
04.03.2019, 10:45
Новый релиз: 20190304

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"

zebest
04.03.2019, 11:28
У мнУ на первом проверенном исходнике уже "застряло" :(

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, уточ нюю на всяк. случай

Shiny
04.03.2019, 12:42
Почему именно BC=адресу запуска? Это с чем-то связано? Можно в принципе сделать все что угодно (кастомизацию заголовка SNA как угодно), но сначала я хочу парсер радикально переделать.

при вызове из Basic LET A=USR ADR получается BC=ADR по адресу. Заголовок .SNA хотелось бы модифицировать, например включенные/запрещенные прерывания, цвет рамки.

- - - Добавлено - - -


INCHOB
а где прочитать про такую ?

mastermind
04.03.2019, 15:26
при вызове из Basic LET A=USR ADR получается BC=ADR по адресу. Заголовок .SNA хотелось бы модифицировать, например включенные/запрещенные прерывания, цвет рамки.
OK, в следующей версии будет BC=PC.

а где прочитать про такую ?
В документации: https://github.com/sjasmplus/sjasmplus/wiki#inchob-filenameoffsetlength

Shiny
04.03.2019, 15:36
OK, в следующей версии будет BC=PC
Вообще говоря, надо не устанавливать, а опционально. в .SNA фиг пойми что происходит - вызов из ROM и переход по адресу с непонятными значениями регистров.

mastermind
04.03.2019, 16:05
MAP 1
LENGTH_3:
W_AND:
_AND: #1
DC "AND"
W_THE:
_THE: #1
DC "THE"
W_OAK:
_OAK: #1
DC "OAK"


MAP-ы выпилены Vitamin-ом давно, см. тему с этого поста: https://zx-pk.ru/threads/447-sjasmplus-z80-kross-assembler.html?p=778111&highlight=map#post778111

Идем далее:)

Кто пользуется директивами MAP/ENDMAP и полями? Судя по документации, это какой-то треш,угар и содомия аналог структур для бедных.

Таки нужны они?

- - - Добавлено - - -


Вообще говоря, надо не устанавливать, а опционально.Пусть пока так будет (пока не сделаю кастомизацию значений заголовка SNA).

в .SNA фиг пойми что происходит - вызов из ROM и переход по адресу с непонятными значениями регистров.
Насколько я могу судить, ктото (Aprisobal?) просто вышел в дебаггер в эмуле с голым бейсиком и скопировал значения регистров.
По хорошему да, надо или разумные дефолты какие-то и/или кастомизацию всех значений. А на данный момент лучше всего не полагаться на начальные значения регистров в SNA.
Я пока особо не вникал в это, просто сделал чтоб стэк более менее нормально инициализировался в т.ч. в 128К чтобы можно было использовать RST #10 и вернуться в бейсик по RET.

Shiny
04.03.2019, 16:17
просто вышел в дебаггер в эмуле с голым бейсиком и скопировал значения регистров

что ж это за дебагер такой? (: значения разные. Кроме того, у .SNA стек указывает на стартовый адрес-1, если не ошибаюсь.это тоже неверно.

mastermind
04.03.2019, 16:28
У мнУ на первом проверенном исходнике уже "застряло" :(

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, уточ нюю на всяк. случай

Исправлено.

Новый релиз: 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 стек указывает на стартовый адрес-1, если не ошибаюсь.это тоже неверно.

Неверно по сравнению с чем?
SNA - формат для дампов памяти работающих программ, изначально подразумевается что никакую память портить нельзя, потому отчасти в 48К версии стек запихнули в экран.
Однако в данном случае мы этот формат используем совсем в других условиях: при ассемблировании точно известно какие области памяти используются, так что можно стек расположить заведомо там где нет кода. Как минимум такой подход гарантирует что ничего в коде не испорчено. Если это по каким-то причинам автору кода неудобно ("неверно"), ничего не мешает переставить SP куда нужно прямо в коде.

zebest
04.03.2019, 17:00
Исправлено.
ок. берем второй любой асм.

DUP 18
out (c),l
EDUP
есичо - последний EDUP - это 46-я строка
лог пожалуй под сполер)
---------- 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.

Bedazzle
04.03.2019, 17:03
MAP-ы выпилены Vitamin-ом давно, см. тему с этого поста: https://zx-pk.ru/threads/447-sjasmplus-z80-kross-assembler.html?p=778111&highlight=map#post778111

Таки нужны они?


У меня единственный исходник, я не гордый, могу переделать, если подскажете, как правильно.

Имеется несколько разнотипных блоков со структурами (плавающей длины).
И к этим структурам обращение по их порядковому индексу.

Например, текстовые сообщения 1, 2, 3, ...N
И дальше в данных используем не адрес, а номер сообщения.

mastermind
04.03.2019, 18:05
ок. берем второй любой асм.

DUP 18
out (c),l
EDUP
есичо - последний EDUP - это 46-я строка
лог пожалуй под сполер)
---------- 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.

Исправлено. См. новый релиз 20190304.2: https://github.com/sjasmplus/sjasmplus/releases

Fixed

Trailing whitespace after EDUP etc. was breaking things


- - - Добавлено - - -


У меня единственный исходник, я не гордый, могу переделать, если подскажете, как правильно.

Имеется несколько разнотипных блоков со структурами (плавающей длины).
И к этим структурам обращение по их порядковому индексу.

Например, текстовые сообщения 1, 2, 3, ...N
И дальше в данных используем не адрес, а номер сообщения.
А как по этому номеру ищется сообщение, если длина плавающая?

zebest
04.03.2019, 19:13
Исправлено. См. новый релиз 20190304.2
Неплохо. Но это явные ошибки.
Плохо, когда ошибок компиляции нет, но программа не работает. Вот и думай что хошь.
в аттаче компиленный код, один и тот же, но в разных версиях.
Если в двух словах - это тест(-ы) для проверки soft-core Z80. Наглядные. Насколько точно эмулятся команды в сравнении с "железным" ( ну или програмным:) процессором. Кстати, эти тесты криво работают на одном из попу лярных эмууулей, а именно Спекуляторе. Но это проблемы уже авторов сего. На остальных софтовых более менее. У меня их 100пицот тестов. Не суть.
Суть в том, что старая версия компилит правильно, как задумал автор, новая - впрочем сами смотрите.
Что-то сломано в SAVEТАР. Версия исключительно под Spectrum 48 с его contended памятию. Для пятногона это неактуально.

mastermind
04.03.2019, 19:46
Нв аттаче компиленный код, один и тот же, но в разных версиях.
Как это понимать с учетом того что в аттаче один файл? (FPGA48.tap размером 15113, выдает картинку ниже в Fuse) Что с чем сравнивать?
А исходники суперсекретны? В личку мне нельзя их?

- - - Добавлено - - -

https://i.imgur.com/PEGGDQk.png

Bedazzle
04.03.2019, 19:50
А как по этому номеру ищется сообщение, если длина плавающая?

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

zebest
04.03.2019, 19:57
блиииин, с именем файла закосячил, не тот прислал.
Ну да, в идеале тесты показывают 4 зеленых квадрата на бордюре.
если какая-то команда длиннее-короче по тактам в contended памяти, то картинка естественно рушится.
я не все команды так точно подгонял. Но в данном случае не важно.
если просто лоб-в-лоб сравнить два скомпиленных файла, то видно отличия в басик-заголовке. Скорее всего. Сами тесты вряд ли чем помогут. Но в личку могу.

Spectramine
04.03.2019, 20:11
Если в двух словах - это тест(-ы) для проверки soft-core Z80. Наглядные. Насколько точно эмулятся команды в сравнении с "железным" ( ну или програмным:) процессором. Кстати, эти тесты криво работают на одном из попу лярных эмууулей, а именно Спекуляторе. Но это проблемы уже авторов сего. .

У меня в 8м Спектакуляторе этот тест работает ок.

mastermind
04.03.2019, 20:37
MAP 0 - задаёт начальное значение
последующие #1 увеличивают на единицу.

Т.е. по метке MISERY можем узнать индекс.

Как MAP и # (FIELD) работают понятно. Вопрос не в этом, а в том какой смысл их так использовать, т.к.:
1. придуманы они были явно не для этого (а для того чтобы описывать что-то вроде структур с полями разного размера),
2. какой смысл в этих индексах в данном случае, как по ним искать адреса сообщений?

zebest
04.03.2019, 20:42
У меня в 8м Спектакуляторе этот тест работает ок.
этот и должен, этот самый простой.
на самом деле их не один десяток, в основном по группам.
http://s1.micp.ru/thumb/5BWks.jpg (http://micropic.ru/5BWks)
Есть который все-в-одном, но это давно было. Да и это не для эмулей рисовалось, а для проца T80 в ФПГА.
На твоем эмуле вроде все ровно, а вот Спекулятор неприятно удивил фейлом

Офтопик конечно, относительно топика, одно общее - все это компилилось в ужасме))
Нашел пак тестов, не все, но особо косячные которые были.вобщем надо ALL проверять.
в спекуляторе фейлится, в своем можешь проверить, как дОлжно быть. ну и в других.

http://rgho.st/8PwpRxmGK

Bedazzle
04.03.2019, 22:03
2. какой смысл в этих индексах в данном случае, как по ним искать адреса сообщений?

Есть блок сообщений (например, названия комнат, что выше приводил).
И есть карта комнат, в котрой прописаны индексы названий.
Процедура по индексу из карты, сканирует и ищет нужный блок с названием, плюс один по zero-termination.

Т.к. это дизасм, имеем то, что имеем. :)
По-правильному для данных нужен редактор, и бинарники инклудить. Но т.к. редактора нет, извращаемся исходниками. :)

mastermind
04.03.2019, 22:42
Новый релиз v.20190304.3: https://github.com/sjasmplus/sjasmplus/releases

Fixed

Spaces in MACRO arguments caused trouble
SAVETAP: Fix tape header tag

Spectramine
04.03.2019, 22:43
Офтопик конечно, относительно топика, одно общее - все это компилилось в ужасме))
Нашел пак тестов, не все, но особо косячные которые были.вобщем надо ALL проверять.
в спекуляторе фейлится, в своем можешь проверить, как дОлжно быть. ну и в других.

Проверил, спасибо. Тест FPGA48all.tap, похоже, у меня (и в ZXMAK2) слегка косячит - левая цветная полоска мерцает, а в Fuse, SpecEmu и в онлайн-эмуле qaop/torinak она стабильна. Spectaculator его фейлит. Не подскажешь, как на реале?

UPD: разобрался, дело было в подключенном Кемпстон-джойстике, без него мерцания левой полоски нет.



Тест LD(IX+55),E.tap - во всех эмулях боковые полоски лажовые - правой нет, левая смещена влево на 2 знакоместа. На реале так же?

Ну и SpecEmu завалил предыдущий тест, к-рый осилил Spectaculator, квадраты дергаются.

mastermind
04.03.2019, 23:02
если просто лоб-в-лоб сравнить два скомпиленных файла, то видно отличия в басик-заголовке. Скорее всего. Сами тесты вряд ли чем помогут. Но в личку могу.
Отличался один байт в заголовке (спасибо C++-ной якобы "строгой" типизации %@#@%%@%#), поправил в последнем релизе. Работает вроде точно также, но отличаются и другие байты. Так что на исходник хотелось бы посмотреть.

- - - Добавлено - - -


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"


Ошибки касающиеся макросов - исправлено в последнем релизе.

- - - Добавлено - - -


Есть блок сообщений (например, названия комнат, что выше приводил).
И есть карта комнат, в котрой прописаны индексы названий.
Процедура по индексу из карты, сканирует и ищет нужный блок с названием, плюс один по zero-termination.

Т.к. это дизасм, имеем то, что имеем. :)
По-правильному для данных нужен редактор, и бинарники инклудить. Но т.к. редактора нет, извращаемся исходниками. :)
В приниципе то же самое (если я правильно понял) можно сделать с помощью макросов:


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

Bedazzle
04.03.2019, 23:09
В приниципе то же самое (если я правильно понял) можно сделать с помощью макросов:

хитрО.

Пришлось поменять строчки местами:



MAPPER_ROOM=0

MACRO MAP_ROOM L
L: EQU MAPPER_ROOM
MAPPER_ROOM = MAPPER_ROOM + 1
ENDM


но заработало.
Спасибо!

zebest
05.03.2019, 00:18
Проверил, спасибо. Тест FPGA48all.tap, похоже, у меня (и в ZXMAK2) слегка косячит - левая цветная полоска мерцает, а в Fuse, SpecEmu и в онлайн-эмуле qaop/torinak она стабильна. Spectaculator его фейлит. Не подскажешь, как на реале?

как на реале - точно не подскажу) Мои реальные компы - только клоны, неск. штук, там до фирменных таймингов далеко, а на Профи-ках -еще дальше... Цель всех именно этих тестов - добиться как можно более точной эмуляции\симуляции программно-аппаратной модели Т80 в ПЛИС хотя бы в сравнении с распространенными эмулями. Вобщем я рисовал тесты, чтобы в эталонных (на мой взгляд:) эмулях работали ровно, CpecEmu - один из эталонных, на нем и еще на каком-то отлаживал, ну и потом этот же тест запускался в ФПГА. Ну и по результатам теста Sorgelig допиливал процессор Т80. Сейчас он практически идеален.
На реале мои тесты тоже запускали, на паре фирменных резинок и на арлекине.



Тест LD(IX+55),E.tap - во всех эмулях боковые полоски лажовые - правой нет, левая смещена влево на 2 знакоместа. На реале так же?
про реал не скажу, но правой полоски не должно быть,, а вот левая в разных эмулях по разному вела себя, она и должна быть смещена, но там какой то явно видимое различие в эмулях было.


Ну и SpecEmu завалил предыдущий тест, к-рый осилил Spectaculator, квадраты дергаются.
ну тут ничего не скажу, все же SpecEmu был эталоном. такие явные различия надо проверять на реале.
да и мои под(д)елки - не идеальные, но свое предназначение они выполнили. Да и тут то всплыли только потому, что тап-ка попалась нерабочая именно на этом тесте. Я так думаю это будет на ЛЮБОМ асм-е. надо FPGA48all.tap за 13 августа найти исходник, на нем и пробовать компилить тогда уж.

Bedazzle
05.03.2019, 11:26
sjasmplus-win64-20190304.3

https://i.imgur.com/23LVMKO.png

Win7 машина, sjasmplus-win64-20190304 запускается без падений.

zebest
05.03.2019, 12:09
отличался один байт в заголовке (спасибо C++-ной якобы "строгой" типизации %@#@%%@%#), поправил в последнем релизе. Работает вроде точно также, но отличаются и другие байты. Так что на исходник хотелось бы посмотреть.
тот пример перепроверю, но сейчас другие компилил - вроде нормально запускаются.



тест FPGA48all.tap, похоже, у меня (и в ZXMAK2) слегка косячит - левая цветная полоска мерцает, а в Fuse, SpecEmu и в онлайн-эмуле qaop/torinak она стабильна.

Нашел архив с картинкой от 20 июля. Почемуу-то твоего эмуля там нет.
Скорее всего вторым "эталоном" или ZXMAK2 или Fuse был)
http://s2.micp.ru/2BpaX.jpg
Ах да, самая первая картинка - это MiSTer с железной эмуляцией проца от Sorgelig-a, фото с экрана монитора

ыыыыыы... немножко офф-а по тестам :)
искал разъемы под клавиатуру, наткнулся на знакомую картинку
https://www.bytedelight.com/?page_id=3457
бордюр конечно черный должен быть, но это особенности CMOS-процов, кто же знал, что ЭТО комуу-то понадобиЦЦа )
кстатида, Sorgelig учел мою просьбу, и у него можно выбирать тип процессора, мелочь, но приятно.

Spectramine
05.03.2019, 14:26
Нашел архив с картинкой от 20 июля. Почемуу-то твоего эмуля там нет.
Скорее всего вторым "эталоном" или ZXMAK2 или Fuse был)
Я уже разобрался: если выключить у меня в эмуле Кемпстон-джойстик, полоска слева не мерцает, там чтение из порта идет в коде.
Спасибо за тесты, они мне очень помогли :v2_thumb: .

- - - Добавлено - - -


Ну и SpecEmu завалил предыдущий тест, к-рый осилил Spectaculator, квадраты дергаются.

Разобрался - в SpecEmu квадраты дергаются при включенных Late Timings, с выключенными они стабильны. Однако я знаю как минимум один косяк таймингов SpecEmu - в SongInLines4 в 128 он виден вверху на красных полосках справа.

zebest
05.03.2019, 15:19
Разобрался - в SpecEmu квадраты дергаются при включенных Late Timings, с выключенными они стабильны.
Ну да, по дефолту как бы Early. Я конечно старался и так и так проверять, но в принципе это правильно, что из-за такта поддергивается. я так понимаю разницу early\late в +-1 такт. Поэтому у мну даже вариант теста есть, в количестве 4\5-х штук, так и подписанные -1,-2,-3 и +1. Видимо от какого то стабильного значения. и картинка ровная на двух значениях, -2\-3 и два других ожидаемо влево-вправо разбегаются. Но это на early, на late должно быть по другому.

mastermind
05.03.2019, 19:45
sjasmplus-win64-20190304.3

https://i.imgur.com/23LVMKO.png

Win7 машина, sjasmplus-win64-20190304 запускается без падений.

С этим не знаю что делать. Под рукой есть только Винда 10 в виртуалке и Wine. (компилирую я в линуксе с помощью кросс-компилятора mingw) И там и там работает. А 32-битная версия работает?

Bedazzle
05.03.2019, 21:20
А 32-битная версия работает?

sjasmplus-win32-20190304.3
тоже валится

sjasmplus-win32-20190304
работает

zebest
05.03.2019, 21:20
А 32-битная версия работает?
32-x битная под ХР точно работает.
ну и по тап-ке
http://s1.micp.ru/LI0pz.jpg
Различие в лоадере явно видно, твой последний - слева.
Но тем не менее компиленный файл работает правильно.

mastermind
05.03.2019, 23:18
sjasmplus-win32-20190304.3
тоже валится

sjasmplus-win32-20190304
работает

Обновил немного gcc, пересобрал либы, пересобрал sjasmplus. Выложил новые архивы на место прежних: https://github.com/sjasmplus/sjasmplus/releases/tag/20190304.3
А что в том окошке на скриншоте, если ткнуть "view problem details"?

Bedazzle
05.03.2019, 23:34
А что в том окошке на скриншоте, если ткнуть "view problem details"?

да как обычно, не сильно внятно

https://i.imgur.com/qljApQJ.png
https://i.imgur.com/KKE8Q6I.png

Попробовал простейший код, компилится без проблем.



DEVICE ZXSPECTRUM48

ORG #5D91
START:
ret

SAVEBIN "_hello.bin", START


На большом проекте по всей видимости, где-то валится на макросах или инклудах.


P.S.
Нашёл ещё - файлик savetap_test.asm из набора sjasm-1.10.1 тоже валит компиляцию.
положил сюда (https://pastebin.com/QwGBWn9g)

mastermind
06.03.2019, 01:23
32-x битная под ХР точно работает.
ну и по тап-ке
http://s1.micp.ru/LI0pz.jpg
Различие в лоадере явно видно, твой последний - слева.
Но тем не менее компиленный файл работает правильно.
Разобрался. Это ни на что не влияет - "new" "намусорил" (не обнулил точнее) в выделенный буфер. Эта часть данных загрузчика (https://github.com/sjasmplus/sjasmplus/blob/master/resources/SaveTAP_ZX_Spectrum_128K.txt) не используется, т.к. нет использованных 128К страниц и соответствующие поля не заполняются. (в старой версии обнулялось, т.к. память выделялась по-другому)
Программа же для 48К? А "device zxspectrum128" используется? Зачем?

Чтоб соответствовало поведению предыдущих версий и чтоб не мусорило в тапки, будет обнуление в следующих версиях.

- - - Добавлено - - -


На большом проекте по всей видимости, где-то валится на макросах или инклудах.
А, я думал что он в принципе валится на Вин7. ОК, будем разбираться. Исходники в личку могут сильно ускорить процесс.


Нашёл ещё - файлик savetap_test.asm из набора sjasm-1.10.1 тоже валит компиляцию.
положил сюда (https://pastebin.com/QwGBWn9g)
Спасибо, смотрю.


; store BASIC
savetap "output.tap",BASIC,"tstSAVETAP", bas.line10, bas.total, 10
; store SCREEN$
savetap "output.tap",CODE,"intro", screen, screen.len
; store CODE
savetap "output.tap",CODE,"demo", demo, demo.len
; store CHARS
savetap "output.tap",CHARS,"t$", chars, chars.len, 't'
; store HEADLESS
savetap "output.tap",HEADLESS, (screen + $1800), 32, 66 ; custom flag
Это что за директивы? Документация знает только про "SAVETAP <filename>,<startadressofprogram>" ( https://github.com/sjasmplus/sjasmplus/wiki#savetap-filenamestartadressofprogram )


- - - Добавлено - - -

Новый релиз v.20190306: https://github.com/sjasmplus/sjasmplus/releases

Fixed

SAVETAP: zero-fill allocated memory buffer before using it
Fixed a crash in EDUP

Bedazzle
06.03.2019, 08:03
Это что за директивы? Документация знает только про "SAVETAP <filename>,<startadressofprogram>"

это в версии 1.10 было впилено


Новый релиз v.20190306

во, другое дело, перестал крашиться, компилит
:)))

asve79
06.03.2019, 08:25
Хотел задать еще один вопрос.


При компиляции, при некоторых ошибках все равно создается бинарь. В чем фишка?

Вот например:


SjASMPlus Z80 Cross-Assembler v.20190304+++WiP
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
main.asm(114): error: Label not found: main.sockets.sent
Pass 3 complete
Errors: 1, warnings: 0, compiled: 5152 lines


При этой ошибке создается бинарик. Да и код завершения компирятора = 0, что "все норм".

asve79
06.03.2019, 10:27
Какие-то чудеса стали происходить с "Over 20 defines nested"

Добавил код в макрос:


XOR A
LD (filename-1),A ;type 0 - file
_fentry filename-1 ;Copen file

Снова получил ошибку

SjASMPlus Z80 Cross-Assembler v.20190306
main.asm(113): error: Over 20 defines nested

В этой строке вызывается

_ifenterput ekcm_nc

Сам макрос заменил чтобы имена агрумента и параметра не совпадали.

MACRO _fentry fname
LD HL,fname
CALL fs.fentry
ENDM

И все равно падает.

Убрал уже вызов _fentry - все равно падает.

zebest
06.03.2019, 10:52
[QUOTE]Программа же для 48К? А "device zxspectrum128" используется? Зачем?/QUOTE]
Да, все мои поделки для 48 режима, ну или бинарники для РК. Но как бы для моих целей не было разницы, какой девайс выставлять. Компилило с ь и работало одинаково.впредь буду знать

mastermind
06.03.2019, 14:51
При этой ошибке создается бинарик. Да и код завершения компирятора = 0, что "все норм".
Да, известная проблема, с этим делом полный "разброд и шатание". Записал в баги чтоб не забыть разобраться с этим: https://github.com/sjasmplus/sjasmplus/issues/8

- - - Добавлено - - -


Какие-то чудеса стали происходить с "Over 20 defines nested"

Добавил код в макрос:


XOR A
LD (filename-1),A ;type 0 - file
_fentry filename-1 ;Copen file

Снова получил ошибку

SjASMPlus Z80 Cross-Assembler v.20190306
main.asm(113): error: Over 20 defines nested

В этой строке вызывается

_ifenterput ekcm_nc

Сам макрос заменил чтобы имена агрумента и параметра не совпадали.

MACRO _fentry fname
LD HL,fname
CALL fs.fentry
ENDM

И все равно падает.

Убрал уже вызов _fentry - все равно падает.

Непонятна связь этой строчки с остальным кодом:

_ifenterput ekcm_nc

Вот такой код успешно ассемблируется:

module fs
fentry equ 0
endmodule

filename db "asdf.ghj"

MACRO _fentry fname
LD HL,fname
CALL fs.fentry
ENDM

XOR A
LD (filename-1),A ;type 0 - file
_fentry filename-1 ;Copen file

; _ifenterput ekcm_nc

SjASMPlus Z80 Cross-Assembler v.20190306
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
Pass 3 complete
Errors: 0, warnings: 0, compiled: 20 lines

Что я делаю не так?

asve79
06.03.2019, 15:08
Что я делаю не так?

Таак...
Вот хороший вопрос. )
Этот модуль из другого кода норм компилируется.

==
Для воспроизведения проблемы проект git@github.com:asve79/z80-ftp.git ветка wc_plugin.
1. Зайти в каталог: cd z80-ftp
2. Скачать зависимости: ./get_depencies.sh
3. Запустить сборку: ./_make.sh
==

- - - Добавлено - - -

Нашел косяк!

в файле fs.mac ф-ция была определена так:


MACRO _mkfile filestruct
LD HL,filestruct
CALL fs.mkfile
ENDM

Она вызывалась также с аргументом filestruct, на этом и падало.

переделал на


MACRO _mkfile fstruct
LD HL,fstruct
CALL fs.mkfile
ENDM

И все полетело

В гите пока нерабочая версия, которая падает.

- - - Добавлено - - -

Выдвину предположение, что твой фикс на устранения зацикливания при одинаковом аргументе и параметре, работает только на 1 один случай в коде. Если их больше 1 то падает.

mastermind
07.03.2019, 00:59
Выдвину предположение, что твой фикс на устранения зацикливания при одинаковом аргументе и параметре, работает только на 1 один случай в коде. Если их больше 1 то падает.
Нет, я тот фикс случайно выпилил в процессе другого фикса :( (т.к. чиню пока подобные глюки "тупо в лоб" - пока парсер нормально не перепишу)
В репо на github уже исправлено, сейчас сделаю релиз.

- - - Добавлено - - -

Новый релиз: v.20190306.1


Сборки для Windows и macOS: https://github.com/sjasmplus/sjasmplus/releases
Arch Linux: AUR (https://aur.archlinux.org/packages/sjasmplus/)

Инструкции по сборке для остальных версий Linux/Unix: https://github.com/sjasmplus/sjasmplus/blob/master/README.md
Документация: https://github.com/sjasmplus/sjasmplus/wiki



Fixed

Fixed some problems with MACRO arguments parsing

Sayman
07.03.2019, 13:02
А меня интересует, когда можно будет пихать условия внутрь макросов?
например:


MACRO call_sys reg_c, reg_hl
IF reg_hl
ld hl,reg_hl
ENDIF

ld c,reg_c
rst 0x10

ENDM

mastermind
07.03.2019, 16:44
А меня интересует, когда можно будет пихать условия внутрь макросов?
например:


MACRO call_sys reg_c, reg_hl
IF reg_hl
ld hl,reg_hl
ENDIF

ld c,reg_c
rst 0x10

ENDM

В чем предполагаемый смысл данной конструкции? Чтоб второй параметр макроса был опциональным? (но "IF reg_hl" эквивалентно "IF (reg_hl != 0)")

Sayman
07.03.2019, 17:19
В чем предполагаемый смысл данной конструкции? Чтоб второй параметр макроса был опциональным? (но "IF reg_hl" эквивалентно "IF (reg_hl != 0)")
во1х, да, смысл именно такой, только чтобы любой аргумент был опциональным. Аргумент может быть пустым. Есть и более сложные варианты. Как пример, движок wolf48, там алоний напрудил с макросами какую-то лютость. которую ужасм не переваривает. Хотя уже есть вариант, где макросы удалены, но хотелось бы видеть в работе макросы с условиями, которых сейчас нет.
во2х, все эти варианты я пару лет назад пробовал - ошибки компиляции.

Bedazzle
12.03.2019, 23:21
А в будущем планируется добавить расширенный набор команд Next (http://devnext.referata.com/wiki/Extended_Z80_instruction_set) ?

mastermind
13.03.2019, 16:17
А в будущем планируется добавить расширенный набор команд Next (http://devnext.referata.com/wiki/Extended_Z80_instruction_set) ?

Он нужен?
Тогда будет.
Лучше всего сюда записать реквест, чтоб не потерялось: https://github.com/sjasmplus/sjasmplus/issues

zebest
13.03.2019, 16:53
[QUOTE]Он нужен?
Тогда будет. /QUOTE]
Вот когда будет опенсорс - тогда может и нужен, а в таком виде - нет. Одни завтраки

Shiny
13.03.2019, 19:31
Есть прекрасный эмулятор 6502. Для него даже есть набор инструкций 65816.


К чему это я?

к тому, что можно решить такую проблему.

asve79
06.04.2019, 15:08
Закрыл фича-реквест на гитхабе по-поводу добавления системной переменной для определения ОС на которой запускается эмулятор. Что бы, например, изменять пути к подгружаемым файлам. Сначала я согласился с тем, что можно использовать пути в параметрах запуска самого компилятора через -i. Это да, здорово, когда названия всех файлов уникальны, а что делать если названия будут совпадать? Так или иначе, не всегда бывает удобно держать все названия файлов уникальными, поэтому все-таки переменная отражающая ОС компилятора была бы все-таки полезна.

mastermind
06.04.2019, 17:21
Ответил. (https://github.com/sjasmplus/sjasmplus/issues/10#issuecomment-480501163)

- - - Добавлено - - -

Просьба к пользователям sjasmplus прокомментировать вопросы (https://github.com/sjasmplus/sjasmplus/issues/11):

В параметра запуска asm-а есть возможность запуска с опцией конвертации кода из cp1251 в cp866, но в настоящее время все больше систем используют UTF-8, поэтому приходится дополнительно морочиться с кодировкой в редакторах. Да, многие из них позволяют менять кодировку, но это лишнее нажатие дополнительных кнопок.
Было бы здорово, если бы появилась опция конвертирования UTF8->cp866.
Вопросы над которыми надо подумать всвязи с этим:

1. Синтаксис ключа командной строки и директивы. На данный момент включение перекодировки (cp1251->cp866) сделано довольно странно. См. документацию по директиве ENCODING (https://github.com/sjasmplus/sjasmplus/wiki#encoding-windos) и ключу --dos866 (https://github.com/sjasmplus/sjasmplus/wiki#command-line).
2. Стоит ли делать автодект кириллицы в UTF8 и ПО УМОЛЧАНИЮ перекодировать ее в cp866? (в этом случае, естественно д.б. опция для отключения этой функции)
3. Нужно ли определять BOM (https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8), насколько это распространено/используется?

NEO SPECTRUMAN
06.04.2019, 20:17
См. документацию по директиве ENCODING

сделано довольно странно
ну encoding на вид
именно когда нам нужно получить строку из байтов для самого спектрумовского кода в нужной кодировке
там же и примеры кода с DB

а для чего
--dos866

нужно проверить все 4 комбинации и глянуть для чего они изначально задумівались

- - - Добавлено - - -


Стоит ли делать автодект кириллицы в UTF8 и ПО УМОЛЧАНИЮ перекодировать ее в cp866?
Если так делать
то при компиляции нужно обязательно вывести
что произведена перекодировка
чтоб не наступать ВНЕЗАПНО на грабли

- - - Добавлено - - -



ENCODING "WIN"
db "абвг"

ENCODING "DOS"
db "абвг"
компилит так

E0 E1 E2 E3
A0 A1 A2 A3

но в какой кодировке должен быть сам исходник по идеи должно быть все равно (нужно чтоб было)

без dos866

db "абвг"
db "абвг"


E0 E1 E2 E3
E0 E1 E2 E3

с включенным --dos866

db "абвг"
db "абвг"


A0 A1 A2 A3
A0 A1 A2 A3

тоесть --dos866 нужен
чтоб поменять кодировку всех текстовых строк
кодировка которіх не указана

если кодировка стоит
--dos866 ничего не меняет

то есть при --dos866

ENCODING "WIN"
db "абвг"

ENCODING "DOS"
db "абвг"
компилит так же

E0 E1 E2 E3
A0 A1 A2 A3



а вопрос видимо про то что сорец нужно переваривать в любом формате
написанном в любом блокноте от виндовс15


но в настоящее время все больше систем используют UTF-8,
возможно он просто хочет поддержку
ENCODING "UTF-8"

если так
то это только опционально через
--utf8 или ENCODING "UTF-8"
пушо может легко накрытся обратная совместимость
тк по дефолту другая кодировка всегда была...

zebest
16.04.2019, 19:41
забавный косяк год назад обнаружил, у чехов то же самое.

ex af, af' :ex af, af'
надеюсь на первый взгляд ничего предосудительного ?))

mastermind
16.04.2019, 20:07
забавный косяк год назад обнаружил, у чехов то же самое.

ex af, af' :ex af, af'
надеюсь на первый взгляд ничего предосудительного ?))
Я сейчас занят тотальной переделкой парсера. Большинство подобных багов будут исправлены как побочный эффект.

zebest
16.04.2019, 21:12
хорошо бы, я надеялся за год само исправится, а сегодня вот на глаза попалось - перепроверил.

Shiny
17.04.2019, 08:36
а что за косяк?

zebest
17.04.2019, 09:35
В две строки такая конструкция прекрасно работает ( что я и сделал). В одну строку, через разделение двоеточиями - надо думать что не работает . После апострофа двоеточие не канает.

Black Cat / Era CG
17.04.2019, 09:37
А там можно не писать апостроф совсем.

NEO SPECTRUMAN
17.04.2019, 09:38
Ну и нефик использовать команды типа ld 1,a,c,d,(hL),(ix+16),3 :v2_tong2:
(не смог даже рассмотреть что это двоеточие а не комент (1 пиксель разницы))

zebest
17.04.2019, 09:56
нее, с запятыми я точно конструкции не собираю. авот елси у мну в кривом коде 320 похожих строк

out (c),0:out (c),a: out (c),b: out (c),d: out (c),e: out (c),h: out (c),l: out (c),l: RET m:RET m:RET m: out (c),a:out (c),d: nop:nop: nop:nop:nop: nop:nop:nop: nop:nop:nop: nop:nop:nop: DEC DE ; 35 nop + 2 out = 164!!!


то как то в столбЕк их собирать не комильфо
кстатида, еще один из неприятных косяков (фич?) - ограничение на количество конструкций в строке (256 символов/байтов? вроде как). В прекраснейшем ассемблере такого нет, и если из него импортировать длинные строки - то можно сломать голову, почему элементарное не компилиЦЦа, причем без объявления войны, молча, без всяких ашыбак:((((

NEO SPECTRUMAN
17.04.2019, 14:24
а еще ADD A,(HL)
легким движением руки
превращается в
ADD A
ADD (HL)

кстате запрет компилировать несуществующие инструкции
скомпилит это нормально?

Shiny
18.04.2019, 15:03
Ну и нефик использовать команды типа ld 1,a,c,d,(hL),(ix+16),3 :v2_tong2:
(не смог даже рассмотреть что это двоеточие а не комент (1 пиксель разницы))

не слушайте гуру, он вас плохому научит xD

кстати, я тоже встал на грабли, написав в исходнике EXA вместо понятной команды, и долго тупил, почему какой-то ассемблер не понимает exa (:

SAVC
22.05.2019, 18:28
SjASM скомпилил исходник с несуществующей меткой, поставив вместо неё адрес $0000, не выдав ошибки.
После исправления xy2str на xy2scr всё заработало.
Ошибку смотри в строке 34
69076
69077
69078

NEO SPECTRUMAN
22.05.2019, 19:22
$0000, не выдав ошибки.
прогнал через 3 sjasm-a включая последний с этой темы v.20190306.1
везде метка не найдена
закидуй сджасм свой сюда

zebest
23.05.2019, 09:40
не выдав ошибки.
ну у меня то этот пример ошибку то выдает, хотя и честно дальше компилит в SNA, который естесТвенно работает неправильно. Это да, это сбивает с толку.
Как-то неаккуратненько, доктор (с)

Bedazzle
23.05.2019, 10:17
SjASM скомпилил исходник с несуществующей меткой, поставив вместо неё адрес $0000, не выдав ошибки.


Три разных версии.
Что я делаю не так?

https://i.imgur.com/XhelKtW.png

https://i.imgur.com/g4xARTp.png

https://i.imgur.com/mkDShsx.png

zebest
23.05.2019, 16:54
69083
да хоть четыре. Вопрос в том, что ужасм плюет на эту ошибку и как ни в чем не бывало компилит SNA
Ну может для кого то это и нормально, чО....

NEO SPECTRUMAN
23.05.2019, 16:58
Ну может для кого то это и нормально, чО....
про ошибку итак предупреждены
в чем проблема?

сразу можно проверить то что есть
не пытаясь сутками заставить оно компилировать...

или надо кричать
"у вас нечетное количество пробелов перед командой
компиляция немедленно прекращена"?
как делают это некоторые...

SAVC
24.05.2019, 06:36
Сейчас перепроверил - действительно, выдаёт ошибку.. что-то я перепутал, видимо.. но SNA компилит.
SjASM версии 1.07 RC build (02-04-2008)

jerri
24.05.2019, 10:36
69083
да хоть четыре. Вопрос в том, что ужасм плюет на эту ошибку и как ни в чем не бывало компилит SNA
Ну может для кого то это и нормально, чО....

sjasm все делает правильно.
у меня может быть 5-10 несуществующих меток
но они могут и в неиспользуемом коде быть.
Или ты сразу фигачиш только то что нужно?

NEO SPECTRUMAN
24.05.2019, 12:01
ну до
к примеру єто может быть jumptable с еще ненаписанными процедурами
а те что уже есть уже можно проверять отлаживать

zebest
24.05.2019, 13:43
Или ты сразу фигачиш только то что нужно?
ну даа, вы то профи, а мы так, чисто "helloworld!" написать, самомодифицирующийся, и лишнего не бывает, ну максимум заглушки с ret или метки c equ.
Да и при выводе ошибки компилятором я ожидаю от него как минимум прекращения компиляции, ну деревня саморощенная, че с нас взять...
"Ну может для кого то это и нормально, чО...." (с)

jerri
24.05.2019, 16:40
zebest, если компилятор от меня будет каждый раз требовать исправление очередной ошибки, то это неправильный компилятор.
а так все просто
я компилю
смотрю ошибки
потом правлю если они критические
снова компилю
ошибок нет - запускаю.
и снова по кругу.
п вот править каждую ошибку отдельно это гемор.

NEO SPECTRUMAN
27.05.2019, 14:21
ну даа, вы то профи, а мы так, чисто "helloworld!" написать, самомодифицирующийся, и лишнего не бывает, ну максимум заглушки с ret или метки c equ.
Да и при выводе ошибки компилятором я ожидаю от него как минимум прекращения компиляции, ну деревня саморощенная, че с нас взять...
"Ну может для кого то это и нормально, чО...." (с)

А ВОТ И ИМЕННО ОНО!!!

l1 Jp l1
Unrecognized instruction: Jp l1
в 2-х из 3-х сджасмах...
(команда с большой буквы
быстро правил jr не меняя регистра)

тот компилер которые переваривает
экспортирует список меток которые чета не берет анриал...


после такого просто опускаются руки...
А ТЕ Б**** САМОМОДИФИЦИРУЮЩЕЙСЯ ХЕЛОУВОРЛД :mad:
НАХ МНЕ ЭТО НАДО?

NEO SPECTRUMAN
27.06.2019, 02:44
--target=i8080
было бы полезней --target=6502
под 8080 прекрасно пишется и так
каких z80 команд у него нет намного проще запомнить
чем выучить те что у 8080 есть по его мнемоникам...

а вот под 6502 я толкового компилятора так и не нашел...



или полегче
например так
--target=gameboy
к примеру ида дизасмит геймбой в формате какого то rgbasm-а
но бгмерскость этого асма такая
что на попытки заставить эту херню компилировать надизасменное ушли сутки...


а потом еще оказалось что оно еще и HALT компилит "как лучше"
а в итоге получается "как всегда"
...
что их потом все нужно заменять на db $76
чтоб получить бинарник совпадающий с оригиналом...

Shiny
05.07.2019, 16:02
было бы полезней --target=6502
а вот под 6502 я толкового компилятора так и не нашел...

--target=gameboy


Какой ты нудный (: TASM с кучей таблиц справится. naken assembler умеет работать со многими процессорами - указывай тип и компилируй.

Если нужно 6502, то по мне удобны atasm, xasm, acme.

NEO SPECTRUMAN
05.07.2019, 17:21
Какой ты нудный (:
а он умеет делоть lua? как нет?
ато полет моей развернутой фантазии как правило тяжело написать ручками...

Shiny
05.07.2019, 22:04
а он умеет делоть lua? как нет?

ну и запрос у вас вздохнул ужасм и завис.

Shiny
15.07.2019, 08:46
ужасм понимает LD a,"0", но не понимает LD (HL),"0" по крайней мере в моей версии. Это исправлено, или нет ?

Demige
23.07.2019, 15:00
Как можно определить текстовый блок? Чтобы каждую строку не писать "db".

Shiny
23.07.2019, 16:07
в смысле "определить"? incbin, не?

Shadow Maker
23.07.2019, 16:45
Как можно определить текстовый блок? Чтобы каждую строку не писать "db".
Непонятно, что ты хочешь. Как ассемблер определит, что у тебя блок кончился? Везде где я знаю сделано через db.
Только в голову приходит как Дима сказал напиши свой текст в файл и делай incbin этого файла

Shiny
23.07.2019, 17:10
del

Demige
23.07.2019, 20:27
Нет. Incbin не подходит. Мне нужно обширные текстовые блоки и чтобы я мог пользоваться указателями на них. По одному их инклудить и перед каждым ставить метку это неудобно и файлов будет очень много.

Как должно выглядеть? Ну почему бы и не так:


textpointer dtext
asdfjkasjf;jk
asfkljkl;j;a
asdfkl;jkl;j
endtext

Shadow Maker
24.07.2019, 01:16
Нет. Incbin не подходит. Мне нужно обширные текстовые блоки и чтобы я мог пользоваться указателями на них. По одному их инклудить и перед каждым ставить метку это неудобно и файлов будет очень много.

Как должно выглядеть? Ну почему бы и не так:


textpointer dtext
asdfjkasjf;jk
asfkljkl;j;a
asdfkl;jkl;j
endtext

Так не получится из-за того, как работает интерпретатор. Ну давай я тебе за минуту конвертор напишу на php который текстовые блоки на db "xxxxx" поразбивает :) Больше нечем помочь.

NEO SPECTRUMAN
30.07.2019, 19:31
кстате
поругаюсь еще и здесь
про мерское :mad:

error: [LUA] Maximum size of Lua script is 32768 bytes

или должно хватить всем?

Destr
08.10.2019, 07:47
А есть возможность в макросе передав рег-пару обращатся и к её-же половинкам?
А то дич какая-то, передавать приходится аж три аргумента (рег пара и её регистры отдельно чтоб юзать их)

Mick
10.01.2020, 09:07
Народ, а насколько возможно переделать Sjasm под другие процы типа мотороловских 6800 или наших 1801ВМ1 и так далее. Вроде исходники ассемблера есть. Никто не заморачивался этим вопросом?

Bedazzle
10.01.2020, 12:03
Народ, а насколько возможно переделать Sjasm под другие процы типа мотороловских 6800 или наших 1801ВМ1 и так далее. Вроде исходники ассемблера есть. Никто не заморачивался этим вопросом?

Если спрашивать, то в этой ветке (https://zx-pk.ru/threads/30314-sjasmplus-ot-z00m.html).

tae1980
02.02.2020, 22:57
Киньте, плз, пример файла с метками для Унреала "user.l". Или его описание.
Работаю с другим ассемблером, но хотелось бы что бы мониторе Унреала были метки. Думаю можно будет "подделать" файл с метками.

- - - Добавлено - - -

если это он, то нашел.
====
0000 START
0008 ERROR-1
0010 PRINT-A-1
0018 GET-CHAR
001C TEST-CHAR
0020 NEXT-CHAR
0028 FP-CALC
====

Spectramine
02.02.2020, 23:00
Киньте, плз, пример файла с метками для Унреала "user.l". Или его описание.
Работаю с другим ассемблером, но хотелось бы что бы мониторе Унреала были метки. Думаю можно будет "подделать" файл с метками.

- - - Добавлено - - -

если это он, то нашел.
====
0000 START
0008 ERROR-1
0010 PRINT-A-1
0018 GET-CHAR
001C TEST-CHAR
0020 NEXT-CHAR
0028 FP-CALC
====
Это он, но это формат меток для ПЗУ, для ОЗУ другой:
05:0000 L4000
02:0001 L8001
00:0002 LC002
03:0C00 P3CC00
04:0D01 P4CC00

т.е. страницапамяти:смещениеот ачаластраницы метка

tae1980
02.02.2020, 23:16
т.е. страницапамяти:смещениеот �ачаластраницы метка
А если используем только нижние 64 кб то же нужно указывать номер страницы?

tae1980
02.02.2020, 23:47
Да.
Понял. Спасибо!

Dart Alver
01.03.2020, 23:55
А есть у кого-нибудь в заначке 1.07 RС8 ?
Решил тут перекомпилить BGE, на новых изменениях RC6 и RC7 глючат, хочу RC8 попробовать, а нету ))
Пытался было расхваленное новьё запустить, так оно что местное, что чешское, вообще со старыми текстами не совместимое, даже хрен поймёшь что за ошибки такие космические выдаёт.

zebest
02.03.2020, 00:40
71672

Dart Alver
02.03.2020, 01:26
Забавно, значит уже в RC8 pentagon1024 зачем-то изъяли из девайсов )) Впрочем это фигня, но проблема не решилась, какой-то косяк с комбинацией ORGшек, INCBINов и DISPов обрезает последний INCBIN.
Чтож, ладно - пойдём длинным путём ))

Oreanor
04.08.2020, 11:57
Помогите нубу, плз!
Пытаюсь освоиться в среде Sublime + Z80Asm + sjasmplus.
Не получается нормально возвращаться в бейсик после выполнения программы.
Делаю буквально следующий код:

device zxspectrum48
org 60000

ld a,65
rst 16
ret

savetap "example.tap", 60000
savesna "example.sna", 60000

Компилирую - и что снапшот, что тап делают то что нужно, но выдают на выходе что-то вроде "3456 Nonsense in basic", либо не выходят вовсе, подвисают. Я как-то порчу SP или PC? Или что я делаю не так?

Black Cat / Era CG
04.08.2020, 13:07
HL' надо сохранять и восстанавливать на выходе.

Oreanor
04.08.2020, 14:05
спасибо, попробую!

Black Cat / Era CG
04.08.2020, 16:12
Можно не сохранять, а просто на выходе туда записывать нужное значение. Оно фиксированное, но какое не очень помню.

- - - Добавлено - - -

Во. HL'=10072(#2758)

Oreanor
04.08.2020, 17:33
да, и еще прерывания разрешить понадобилось


LD HL,10072
EXX
EI

Так работает.

Вот тут совсем разжёвано: https://zx-pk.ru/threads/15546-vozvrat-v-bejsik.html

Black Cat / Era CG
04.08.2020, 17:46
да, и еще прерывания разрешить понадобилось
Ну это само собой, они же активно используются Бейсиком. Еще и вернуть родной обработчик надо, если использовался свой. А зачем в него возвращаться?

Oreanor
04.08.2020, 17:50
может и незачем. так привычнее как-то для тестов, отработала процедурка - вернись взад.
Меня теперь больше беспокоит, как настроить сохранение кусочков кода без ненужных вот этих обвесов в виде бейсико-кодовых загрузчиков.
SAVETAP сохраняет бейсик-загрузчик, который загружает кодовый загрузчик, который загружает уже код (еще и без хэдера :().
Почитал доки, но так и не понял, можно ли без этого - мне б просто кодовый блок, который я могу ручками загрузить, как мне надо и запустить когда надо. Три команды на бейсике я и сам напишу.
SAVESNA еще хуже, весь дамп памяти вываливает.

а, вот, SAVETRD вроде бы подходит.

Dart Alver
04.08.2020, 20:51
Меня теперь больше беспокоит, как настроить сохранение кусочков кода без ненужных вот этих обвесов в виде бейсико-кодовых загрузчиков.

Непонятное беспокойство. ))


SAVETAP сохраняет бейсик-загрузчик, который загружает кодовый загрузчик, который загружает уже код (еще и без хэдера ).

Не знаю как в этой ветке (никогда не пользовался SAVETAP), а в соседней SjASMPlus от z00m (https://zx-pk.ru/threads/30314-sjasmplus-ot-z00m.html?p=1074443&viewfull=1#post1074443) у SAVETAP дофига вариантов помимо основного:


SAVETAP <filename>,BASIC,<fileintapeheader>,<start>,<length>[,<autorunline>[,<lengthwithoutvars>]]

SAVETAP <filename>,CODE,<fileintapeheader>,<start>,<length>[,<customstartaddress>[,<optional3rdparam>]]

SAVETAP <filename>,NUMBERS,<fileintapeheader>,<start>,<length>[,<variableletter(A..Z)>]

SAVETAP <filename>,CHARS,<fileintapeheader>,<start>,<length>[,<variableletter(A..Z)>]

SAVETAP <filename>,HEADLESS,<start>,<length>[,<customblockflag(0..255)>]

Append the tape header or block of data to the end of the standard tape file for emulators of ZX-Spectrum

Но тоже не пользовался )))

SAVETRD лучший вариант если под тырдос. Там в последних версиях тоже починили и расширили.

Но если для дела благого и памяти сохранения вам понадобится например упаковать скомпилированный код а потом использовать распаковщик, то выбор только SAVEBIN и внешняя обработка... ))

Oreanor
04.08.2020, 21:39
шикарно, получилось как хотел! спасибо за подсказку:

EMPTYTAP "SNAKE.TAP"
SAVETAP "SNAKE.TAP",CODE,"snake",63000,$-MAIN

DragonsLord
12.03.2021, 22:07
По какому такому волшебному измышлению в режиме device zxspectrum128 в последний слот ставится по умолчанию 7 страница? Ну, и соответственно и снапшот отписывается с 7 страницей.

В оригинальном 128к в последнем слоте всегда по умолчанию 0 страница. ИСПРАВЬТЕ!

Dart Alver
14.03.2021, 15:20
По какому такому волшебному измышлению в режиме device zxspectrum128 в последний слот ставится по умолчанию 7 страница? Ну, и соответственно и снапшот отписывается с 7 страницей.

В оригинальном 128к в последнем слоте всегда по умолчанию 0 страница. ИСПРАВЬТЕ!
Врят-ли исправят - эта ветка редко обновляется, соседняя версия (https://zx-pk.ru/threads/30314-sjasmplus-ot-z00m.html) её уже довольно значительно перегнала - дублировать смысла нет.
А тут пока только PAGE 0 спасёт наверное ))

DragonsLord
27.03.2021, 16:53
А тут пока только PAGE 0 спасёт наверное
В том и прикол, что не спасает.
Мож я и юзаю ТУ версию? Хм... Нет, проверил, у моего асм'а в два раза больше exe'шник, чем тот от чехов. Мой мне Алоний дал.
ИСПРАВЬТЕ, блин!!! У меня проект из за этого не опознаёт мышь! Фиг запустишь.

mastermind
27.03.2021, 23:02
DragonsLord, Так о какой версии идет речь? (номер версии есть при запуске в первой строке) В моих (см. последнюю: https://github.com/sjasmplus/sjasmplus/releases/tag/20190306.1 ) вроде это должно работать как задумано - в заголовке SNA выставляется установленная в ассемблере страница.

DragonsLord
27.03.2021, 23:37
Последняя официальная версия установлена (не чешская поделка).
SjASMPlus Z80 Cross-Assembler v1.07 RC7 (build 02-04-2008)
7 страница воткнута по дефолту в 128к режиме. Рука/лицо!
Это фиаско, братан. Мышку то я придумал, как отвесить, но гиморойчик то не только у меня может случится по этому поводу.

Чешская вообще ничего не умеет. На одном исходнике Алония выдаёт около 50 ошибок компиляции. ЛОЛ.


В моих (см. последнюю:
А ты кто? Скажите ещё и третья версия существует компилятора... :eek_std:

Короче, я понял - никто ничего не починит. Продолжаем ездить на машине без одного колеса...

mastermind
28.03.2021, 06:21
DragonsLord, да, можно сказать что "версии три." То что ты используешь - это то на чем давным давно закончил Aprisobal. После его исходники еще дорабатывал Vitamin и позже я. Полистай хотя бы последние пару десятков страниц этой темы. И я и он дорабатывали прежде всего с целью привести код в удобоваримое состояние (там адский спагетти-код), чтобы далее можно было уже как-то его развивать. Но тем не менее я по ходу дела некоторые усовершенствования по возможности делал. Ссылку на последнюю стабильную версию я тебе дал выше. Что в ней изменилось по сравнению с "v1.07 RC7" можешь посмотреть в ChangeLog (https://github.com/sjasmplus/sjasmplus/blob/master/ChangeLog.md) или ранее в этой теме.
По поводу проблемы дефолтной страницы: да, это, похоже еще из оригинальный версии тянется (см. тут (https://zx-pk.ru/threads/447-sjasmplus-z80-kross-assembler.html?p=176636&highlight=%d1%81%d1%82%d1%80%d0%b0%d0%bd%d0%b8%d1% 86%d0%b0#post176636)). В репо я уже поправил, на днях сделаю сборку. Пока используй `PAGE 0`, в моей версии, по крайней мере, это работает, я проверил.

Чехи начали заниматься sjasmplus-ом позже, но, к сожалению, взяли за основу древнюю версию Aprisobal-я и начали инкрементально добавлять фичи и править баги. Так что та ветка сильно разошлась с этой. (разные приоритеты/направления) Я давно не смотрел ту ветку, но насколько понимаю, она бурно и стабильно развивается, добавлено много чего нового и интересного вроде поддержки CPU ZX-Next, исправлены какие-то старые баги не исправленные "здесь" и т.п.

DragonsLord
28.03.2021, 13:08
У чехов exe в два раза меньше, чем последний официал.
О каком "развитиии" может идти речь? Дегресс я бы сказал :biggrin:

Я сижу на том асме, на котором сидит Алоний. Чтобы не было разночтений, потому что мы перекидываем исходники друг-другу туда-сюда. Если Алоний не юзает твою версию, значит на то есть причины в которые мне лень вдаваться. Доверимся профессионалу :tongue:

Но всё равно, спасибо за участие и за труды.

mastermind
28.03.2021, 14:46
Какой неожиданный переход от эмоционального выкрика "ИСПРАВЬТЕ!" до "нет, нет, никакие исправленные версии мне не подходят и вдаваться лень". :D

Dart Alver
28.03.2021, 15:43
Чешская вообще ничего не умеет. На одном исходнике Алония выдаёт около 50 ошибок компиляции. ЛОЛ.
У них несколько более детальные требования к исходнику и больший выхлоп инфы по процессу компиляции. Как правило выдаётся куча предупреждений на подозрение в ошибки, но код компилируется как нужно. Чтобы не было лишних сообщений, там ставят спец-отметки в комментах. Может не так привычно, зато больше шансов выявить ошибку.


У чехов exe в два раза меньше, чем последний официал.
О каком "развитиии" может идти речь? Дегресс я бы сказал
Ну меньший exe при том же и даже большем функционале, это скорее плюс )))


Я сижу на том асме, на котором сидит Алоний. Чтобы не было разночтений, потому что мы перекидываем исходники друг-другу туда-сюда. Если Алоний не юзает твою версию, значит на то есть причины в которые мне лень вдаваться.

Это довод ! Тут уже не поспоришь. ))

Black Cat / Era CG
28.03.2021, 18:40
Если Алоний не юзает твою версию, значит на то есть причины в которые мне лень вдаваться. Доверимся профессионалуОн долго писал на Аласме, на Сжасм пересел вынужденно по сути, и не так уж и давно, поэтому какую версию ему дали, на ту и подсел, а теперь исходниками оброс, никак уже.

DragonsLord
28.03.2021, 21:00
Какой неожиданный переход от эмоционального выкрика "ИСПРАВЬТЕ!" до "нет, нет, никакие исправленные версии мне не подходят"
А что дёргаться то? Сказано же русским языком: "нет релиза с исправлением" :biggrin:

DragonsLord
08.04.2021, 20:31
Интересно девки пляшут. Оцифровали мне все мои старые диски. Так ни один проект не запускается под Ureal. И знаете почему? А потому что это чудовище ставит последней банкой в 128 конфигурацию - 7 банк!!! Как тебе такое, Илон Маск?! Рука/лицо...
:v2_dizzy_facepalm:

Shadow Maker
08.04.2021, 22:00
Интересно девки пляшут. Оцифровали мне все мои старые диски. Так ни один проект не запускается под Ureal. И знаете почему? А потому что это чудовище ставит последней банкой в 128 конфигурацию - 7 банк!!! Как тебе такое, Илон Маск?! Рука/лицо...
:v2_dizzy_facepalm:
Какое из них? Почему не используешь версию от mastermind? И что ж за проблема-то такая кроме DEVICE ZXSPECTRUM128 написать еще и PAGE 0?

DragonsLord
08.04.2021, 22:09
Я про Анрил говорю, а не про ассемблер. Просто абсолютно похожий трабл. Видимо это болезнь всех системописателей. Запускаешь на анриле образ trd, всё сбрасывается после запуска любой проги. Открываю дебагер, в последний слот вписана 7 страница, хотя прога 48к. На Spin они же все прекрасно запускаются и работают, потому что он не пытается маниакально переключить верхнюю банку на 7.
:v2_dizzy_facepalm:

А что касается трика писать PAGE 0 предыдущей строкой перед выпиской снапшота, так это НЕ работает, хотя везде написано, что типа должно.

jerri
08.04.2021, 22:57
Интересно девки пляшут. Оцифровали мне все мои старые диски. Так ни один проект не запускается под Ureal. И знаете почему? А потому что это чудовище ставит последней банкой в 128 конфигурацию - 7 банк!!! Как тебе такое, Илон Маск?! Рука/лицо...
:v2_dizzy_facepalm:

это прописано в снапе.

goodboy
08.04.2021, 23:33
Запускаешь на анриле образ trd, всё сбрасывается после запуска любой проги. Открываю дебагер, в последний слот вписана 7 страница, хотя прога 48к.
это особенность 128ого бейсика (у него на прерываниях висит подмена страниц)
надо или переключать ПЗУ или обходить/заглушать проверки

mastermind
08.04.2021, 23:39
А что касается трика писать PAGE 0 предыдущей строкой перед выпиской снапшота, так это НЕ работает, хотя везде написано, что типа должно.
Не "перед выпиской снапшота", а в самом начале исходника, после строки DEVICE... (или хотя бы перед кодом который д.б. в нулевой странице).

хотя прога 48к.
В этом случае вообще в sjamplus лучше использовать DEVICE ZXSPECTRUM48 (https://github.com/sjasmplus/sjasmplus/wiki#real-device-emulation-mode).

Shadow Maker
09.04.2021, 00:27
Я про Анрил говорю, а не про ассемблер. Просто абсолютно похожий трабл. Видимо это болезнь всех системописателей. Запускаешь на анриле образ trd, всё сбрасывается после запуска любой проги. Открываю дебагер, в последний слот вписана 7 страница, хотя прога 48к. На Spin они же все прекрасно запускаются и работают, потому что он не пытается маниакально переключить верхнюю банку на 7.
У тебя просто Спин в 48 режиме, запусти в 128 режиме и то же самое получишь, я думаю. Дело не в анриле.


А что касается трика писать PAGE 0 предыдущей строкой перед выпиской снапшота, так это НЕ работает, хотя везде написано, что типа должно.
Но ведь я сказал "кроме DEVICE ZXSPECTRUM128 написать еще и PAGE 0", а не перед сохранением снапшота...

DragonsLord
09.04.2021, 01:41
это прописано в снапе
Читай внимательно, я не про снапшот писал.


это особенность 128ого бейсика (у него на прерываниях висит подмена страниц)
надо или переключать ПЗУ или обходить/заглушать проверки
Вот нашёо у себя в блокнотике запись:

>>Переход 128->48
LD IY,#5C3A
RES 4,(IY+1)

Так норм? Это то что надо?


Не "перед выпиской снапшота", а в самом начале исходника, после строки DEVICE
Никак оно не работает, хоть где пиши.


В этом случае вообще в sjamplus лучше использовать DEVICE ZXSPECTRUM48
Вот такие приколы приводят частенько к полному вывешиванию машины. А особенно, если сразу после подпирать директивой PAGE 0. Я пока писал 3D под движок Алония столько глюков насмотрелся. Unreal может на 15МГц растактовки не успевать инициализировать мышку, или углы. Такие жесткачи...
:v2_dizzy_facepalm:

- - - Добавлено - - -


У тебя просто Спин в 48 режиме
Спин в режиме Пентагон 128. Ровно в таком же, как и Анрил.

mastermind
09.04.2021, 02:17
Никак оно не работает, хоть где пиши.

device zxspectrum128
page 0
org 0xc000
start:
ret
savesna "sna.sna", start
-->

$ hexdump -s 49181 -n 1 sna.sna
000c01d 0010
000c01e
(см. https://speccy.info/SNA )

Вот такие приколы приводят частенько к полному вывешиванию машины.
Какие приколы? При DEVICE ZXSPECTRUM48 SAVESNA создает стандартный 48К снапшот. О какой машине речь? О каком-то конкретном эмуляторе? Эмулятор при загрузке 48К снапшота должен 48К машину эмулировать.

DragonsLord
09.04.2021, 02:54
Конкретно Анрил болт кладёт на то что он якобы "должен" и делает, как он хочет. И как я уже сказал, если трогать разгон по тактам, глючит ещё сильнее, до полной неработоспособности.

Bedazzle
09.04.2021, 10:55
Конкретно Анрил болт кладёт на то что он якобы "должен" и делает, как он хочет. И как я уже сказал, если трогать разгон по тактам, глючит ещё сильнее, до полной неработоспособности.

А как связана настройка анрила с оффтопом в теме ужасма?

DragonsLord
09.04.2021, 16:31
Тем, что и тот и тот ставят в верхний банк 7 страницу по не понятным причинам и оба баг репорта написал я.


А как связана настройка анрила с оффтопом в теме ужасма?
Так исторически сложилось :cool_std:

crushers[4ePT]
11.04.2021, 14:24
Вопрос к знатокам sjasm, есть ли возможность передавать аргумент макроса как параметр для функции lua?
Примерно вот так:


demo MACRO message
LUA ALLPASS
convert(message)
ENDLUA
ENDM
...
далее по коду использование
...
demo "тестовое сообщение"

IanPo
27.04.2021, 10:15
Извините, если тупой вопрос ( ипользую UnrealSpeccy 0.38.3 by SMT, Dec 22 2016 и SjASM ):
если задать директиву ZXSPECTRUM128, то файл с кодом из созданного TRD не грузится в память в Unreal (гружу из Basic48 randomize usr 15619:rem:load"name"CODE 32768). Почему?
А с ZXSPECTRUM48 грузится.

EMPTYTRD "name.trd"
SAVETRD "name.trd","name.C",$8000,$-START

Unreal в режиме Pentagon128

SAVC
18.06.2021, 19:59
При попытке скомпилировать строку вида LD H,high(graph) выдаёт сообщение об ошибке.
75636
75637
https://cloud.mail.ru/public/VS3o/ZGnXTLECL

Dart Alver
18.06.2021, 20:24
При попытке скомпилировать строку вида LD H,high(graph) выдаёт сообщение об ошибке.
Х.з. Для начала попробуй поставить пробел и убрать скобки.

SAVC
18.06.2021, 21:09
Пробовал писать LD H,high graph
Компилирует значение 0.

- - - Добавлено - - -

В другом проекте подобная же конструкция работает нормально. Со скобками.

Dart Alver
18.06.2021, 21:11
ну да, аргумент для high - без скобок должен быть, но тогда не находит метку graph

Выражение может и в скобках вроде как (по крайней мере в зумовской версии), но пробел быть обязан.
С меткой х.з., у него org неправильный, но вроде всё равно какой-то адрес должен был бы подставиться. А - а, наверно под машиной zx48 он не компилирует в область пзу.

- - - Добавлено - - -


В другом проекте подобная же конструкция работает нормально. Со скобками.
Ну значит проблема только в ORG

SAVC
18.06.2021, 21:17
Исправил ORG. Спасибо, в соседней ветке вы мне здорово помогли. Но здесь не помогает.
https://cloud.mail.ru/public/UqTm/Vc3h2NUAg

Dart Alver
18.06.2021, 21:26
Но здесь не помогает.
Ну х.з. я отказался от RC7, когда он начал компилировать чушь при очередной доработке исходников. Проще оказалось перейти на зумовскую версию, чем найти причину кучи внезапных ошибок ))

mastermind
19.06.2021, 01:36
Ну х.з. я отказался от RC7
Это очень древняя версия, в первом посте есть ссылка на гитхаб, где есть более свежие релизы основанные на ней. Вот здесь версия посвежее: https://github.com/sjasmplus/sjasmplus/releases/tag/20190306.1

См. ChangeLog: https://github.com/sjasmplus/sjasmplus/blob/master/ChangeLog.md

HIGH(expr) / LOW(expr) / NOT(expr) now do not require the argument to be separated by whitespace