to Spectre:
я не кодер, но чисто на пользовательском уровне твои предложения в духе: " а почему бы в ZASMe не сделать поддержку особенностей ALASMA, т.к. мне трудно исходник переделывать ".
Улавливаешь? ;)
Вид для печати
to Spectre:
я не кодер, но чисто на пользовательском уровне твои предложения в духе: " а почему бы в ZASMe не сделать поддержку особенностей ALASMA, т.к. мне трудно исходник переделывать ".
Улавливаешь? ;)
Замечу, что в SjASM'e есть LOW <выражение> и HIGH <выражение>Цитата:
Сообщение от Bulba
Так и есть.Цитата:
Сообщение от Spectre
Полную совместимость SjASM <--> Alasm не сделать - Alasm'у не хватает множество операторов SjASM'a, SjASM'у нехватает некоторых операторов и директив Alasm'а. Так что стоит всем успокоится по этому поводу и начать перегонять свои исходники в SjASM.Цитата:
Сообщение от elf/2
Да, конечно, это хороший вариант, и тут даже мне больше бы не пришлось делать новых версий - кому что надо делал бы в плагине. Но то состояние, в котором сейчас находится асм, меня вполне устраивает и ради этого я и начинал разработку модификации.Цитата:
Сообщение от elf/2
На всякий процитирую себя:
Ну что ж, вперёд, друзья.Цитата:
SjASM (..Plus) проект с открытыми исходниками и любой человек, знающий Си может туда добавить свою директиву/функцию и пр. и отправить мне изменённый код, который я сравню со старым с помощью UltraCompare для вставки и анализа изменений, и с удовольствием впишу его в соавторы.
Да я знаю, речь то была не об SjAsm, а об ограниченном Alasm ;) Перед релизом исходников приходится делать версии и под ZX-ассемблеры, каким бы удобным не был SjAsm :)Цитата:
Сообщение от aprisobal
... Ay_Emul: Silent now...
Да, по мне это пока единственный _существенный_ недостаток SjAsm, правда с этим можно жить, можно привыкнуть.Цитата:
Сообщение от Spectre
Если речь о логических выражениях, то в SjAsm используется 0 и 255 для результата, а IF действительно проверяет "ноль-не ноль".Цитата:
Сообщение от Spectre
... Ay_Emul: Silent now...
Любая просьба к автору любой утилиты выглядит как "мне без ... трудно работать, а не сделаешь ли это?". Например, в sjasm v1.03 появился счетчик скомпилированных строк, неужели кому-то трудно было каждый раз вручную считать их количество? ;)Цитата:
Сообщение от Producer
Обнаружил злостный глюк в sjasme!!!
на макросах виснет!
и ещё код
----
org #8000
ret
org #8080
ret
----
генерирует код длиной всего 2 байта вместо #81 байт
Также хотелось бы автоматом генерить ini файл для bin2sna.
Да это глюк последней версии. Я даже рад, что ты это заметил - значит мой труд+труд Kurles'a не прошёл даром и ассемблер кто-то использует.Цитата:
Сообщение от Doctor Max
Это же кросс-ассемблер! Тут ORG нужен, чтобы просто указывать адреса для меток.Цитата:
Сообщение от Doctor Max
А для твоего случая в ассемблере добавлен ключ -m, включающий поддержку памяти спектрума+доп. директивы(SAVESNA...) и программирование на sjasm ничем не будет отличаться от alasm/zasm/storm...
В ассемблер уже встроен генератор снапшотов - SAVESNA <filename>,startaddressЦитата:
Сообщение от Doctor Max
Да, да, да!!! Ваш труд даром не проходит! Вот и Бульбе асм понравился.Цитата:
Сообщение от aprisobal
Пытаюсь начинать использовать! Но ХОЧУ макросы!!!
Вообще, это моя первая попытка пользовать кросс-асм. До этого писал либо на реале либо в эмуле. А сейчас попробовал рекомендуемую связку CrimsonEditor+SjASM и протащился. Планирую переделать под него проекты Global Tracker и Global Commander. Надо бы конвертер Аласмовских текстов написать. А то менять . на low и ' на high забипаешься. А в Sjasm как я понимаю, не получится сделать аналог . и '
Это же кросс-ассемблер! Тут ORG нужен, чтобы просто указывать адреса для меток.
Ну, мне как-то более привычно как на спекки. Какой ORG поставил - туда и скомпилилось. Чтоб потом захрустил это дело и телемаркет.
А для твоего случая в ассемблере добавлен ключ -m, включающий поддержку памяти спектрума+доп. директивы(SAVESNA...) и программирование на sjasm ничем не будет отличаться от alasm/zasm/storm...
Тем не менее отличается.
А, точно-точно! Ну тогда для какой-нить другой проги полезно было б...
Например для сборки релиза. С загрузчиком и т.п. Эх! мечта!!! Нажал на кнопочку - и релиз готов! Лафаа-а-а-а ;)
Можно кстати если уж так хочется бинарник непрерывный бинарник, сделать таким образом:
ORG #CE00
DS #CE20-$
ORG #CE20
Да, мне тоже пришло в голову то же самое. Видимо, так и придется делать. Но мне привычней чтоб компилер сам это делал.. Ну не знаю! Привык я так просто!!! :)Цитата:
Сообщение от Shadow Maker
А чем ключ -m не подходит?Цитата:
Сообщение от Doctor Max
так что с ключем, что без - результат одинаковый.Цитата:
Сообщение от aprisobal
зыж когда можно ждать багфикса с макросами?
Не может быть такого - ключ -m включает режим поддержки памяти спектрума, т.е. какой ORG укажешь, туда и будет записывать. Конечно, в файле *.out будет всё в каше, но на то он и файл этот. Чтобы сохранить блоки памяти используй SAVEBIN/SAVEHOB, а для снапшота SAVESNA.Цитата:
Сообщение от Doctor Max
Новая версия с багфиксом и множеством новшеств должна скоро выйти.
хм, действительно. но вообще-то я ожидал, что .out будет вести себя как память на спектруме.Цитата:
Сообщение от aprisobal
Жду с нетерпением!!!Цитата:
Сообщение от aprisobal
могу поделиться своим конвертором alsm->text. его потом можно с помощью регулярных выражений привести к нужному видуЦитата:
Сообщение от Doctor Max
Если это имеет преимущества перед открыть через xLook и пересохранить по Shift+F2, то неплохо бы.Цитата:
Сообщение от elf/2
[OFF]Цитата:
Сообщение от nyuk
в новом xLook'е можно будет входить в файлы разных zx asm'ов по enter'у и копировать сорцы как текст
[/OFF]
ближе к теме: кто-нибудь (Spectre?) может сформулировать что на что надо заменять при конвертации и при каких условиях?
Менять IF/IFN.Цитата:
Сообщение от elf/2
MAIN, MACRO, DISPLAY убирать или комментировать.
Операции:
a+b
a-b
a*b
a/b
a&b - AND
a|b - OR
a!b - XOR
a>b - циклический сдвиг слова a на b бит вправо
a<b - циклический сдвиг слова a на b бит влево
() - скобки (сначала рассчитываются они)
{a} - слово, находящееся в памяти по адресу a
a~ - инвертирование текущего результата
?метка - возвращает 0, если метка уже определена, #ffff, если не
определена, и 1, если не определена, но к ней было уже
обращение. Если метка - название макроса, то 2.
'a - старший байт a
.a - младший байт a
Дополняйте дальше...
Вышла новая версия SjASMPlus - 1.05. В ней переписана процедура чтения файлов, добавлено множество полезных директив и пр. Подробнее см. первый пост темы.
Также поддерживается запись директив с начала строки. Если программа будет ругаться на ваш исходник, из-за того, что метка==директива, то прошу пинать не меня, а Сергея Бульбу ;)
О найденных багах сообщайте, плз, по ЛС.
Убирать уже не надо. MACRO работает, а DISPLAY добавился в новой версии(by Kurles^HS^CPU).Цитата:
Сообщение от Spectre
понял...Цитата:
Сообщение от Spectre
на что менять и при каких условиях? я же сам ни за что не догадаюсьЦитата:
Сообщение от Spectre
а можно при анонсе новой версии дублировать ссылку на download? чтобы на первый пост не листать...Цитата:
Сообщение от aprisobal
При компиляции вложенного примера frost4k выдает ошибку:Цитата:
Сообщение от aprisobal
Работает конечно, но все равно для примера некрасиво.Код:frost10.asm line 2332: Label not found: E
frost10.asm line 2367: Label not found: E
После переименования метки NOTE ошибка исчезла.
Ок.Цитата:
Сообщение от nyuk
И ещё:
Цитата:
Сообщение от aprisobal
Такая ссылка пойдёт(чтобы сразу и изменения видели)? http://zx.pk.ru/showpost.php?p=5889&postcount=1Цитата:
Сообщение от elf/2
Спасибо за нахождение бага.Цитата:
Сообщение от nyuk
Всем: скачайте, плз, заново ассемблер: http://zx.pk.ru/showpost.php?p=5889&postcount=1. Спасибо.
если только вместе с http://zx.pk.ru/attachment.php?attachmentid=421Цитата:
Сообщение от aprisobal
мы же тебе верим :) arisobal плохого не сделает...
Ура! Свершилось! SjASM проверен на большом проекте!
Сегодня успешно были сконверчены исходники Global Tracker 1.2.
После незначительной правки все успешно скомпилилось!
кол-во строк: 11132
Кстати, при формировании .sna нужно туда засунуть системные переменные. Я решил эту проблему INCBIN'ом , но хотелось бы чтоб асм это делал. Вот!
Системные переменные для .sna. Адрес - #5c00
СпасибоЦитата:
Сообщение от Doctor Max
Выложена новая версия - 1.05 RC1. [...вырезано...]
Тебе спасибо!Цитата:
Сообщение от aprisobal
вылетает по экзепшену при INCLUDE :(
a+b, a-b, a*b, a/b, a&b (AND), a|b (OR) все нормально;Цитата:
Сообщение от elf/2
Менять:
IF на IFN, IFN на IF;
a!b (XOR) на a^b;
a>b (циклический сдвиг слова a на b бит вправо) вроде на a>>b или a>>>b (надо проверять);
a<b (циклический сдвиг слова a на b бит влево) аналогично;
Вот это надо добавить в sjasm:
{a} - слово, находящееся в памяти по адресу a;
a~ (инвертирование текущего результата) - такого в sjasme'е я не видел;
'a - старший байт a (high a);
.a - младший байт a (low a);
?метка - возвращает 0, если метка уже определена, #ffff, если не определена, и 1, если не определена, но к ней было уже обращение. Если метка - название макроса, то 2;
Вместо EQU можно писать label=5;
Дополняйте кто может...
Я над этим уже думал. <'a> - в принципе реализуемо, в отличие от <.a>, т.к. <.> при работе с метками уже используется для обозначения принадлежности к какому-либо модулю.Цитата:
Сообщение от Spectre
Не забывай, что sjasm в отличии от :), двухпроходной, и все арифмитические операции выполняются на втором проходе, т.ч. метка "ещё не определённой" быть не может %)Цитата:
Сообщение от Spectre
Такой синтаксис даже оригинальный sjasm 0.39 понимает.Цитата:
Сообщение от Spectre
Цитата:
Сообщение от Spectre
Ты немного не так понял. При помощи ? мы проверяем существует ли такая метка в листинге программы. Делается это для таких случаев:Цитата:
Сообщение от Kurles
;memdriver
IF ?memdriver
...
ENDIF
То есть если раскомментировать слово memdriver, то будет компилироваться кусок в IF:ENDIF.
Имхо такие символы как ' и . не надо добавлять, т.к. в других асмах спековских совсем по-другому - STORM: [ и ]Цитата:
Сообщение от Kurles
Вышла новая версия - 1.05 RС2. [...вырезано...]
В этой версии появилась возможность писать команды через запятую типа LD A,B,H,L,A,0 и т.п. Пока это только для LD,INC,DEC,CALL,DJNZ,JP,JR. А что делать с AND,CP,XOR,OR и др., в которых поддерживается запись вида XOR A,B (XOR B) или OR A,C (OR C)? Ведь если написать XOR A,B,A,C,A,D, то получим XOR B,C,D, а должно быть XOR A,B,A,C,A,D как в спековских асмах.
Видимо, отменить xor a,b вместо xor b и т.д. как несуществующие в мануалах по Z80 =)Цитата:
Сообщение от aprisobal
В SjASM'e скобки {..} являются синонимами (..) и [..]. В других асмах такого не замечал. Всем: как считаете, сделать функцию скобок {..} (будет работать только с ключом -m) такой же как в аласме?Цитата:
Сообщение от Spectre
Видимо, выбросить все нестандартно-гореизобретательские фишки из съясма стоит. А вот совместимость со спековыми асмами - всегда хорошо. Может быть, даже стоит сделать (в далёком будущем) наборы парсеров для разных спековских асмов. =)Цитата:
Сообщение от aprisobal
Нет смысла.Цитата:
Сообщение от lvd
есть дурное предложение: воспользоваться идеями Metal'а разработанного Владимиром Кладовым.Цитата:
Сообщение от aprisobal
т.е. всевозможные скобки {}, [], () могут находиться в строке в области метки. Скобки должны быть парными. Разрешается делать отступ на произвольное число пробелов. При этом скобки являются аналогом LOCAL/ENDLOCAL и возможны переходы на скобки, например:
"DJNZ {" - переход на начало цикла
"JR C, }}" - выход из цикла 2й степени вложенности
Плюсы:
1. лучше видна структура программы за счет парности скобок и отступов для вложенных блоков
2. упрощается повторное использование кусков кода за счет отсутсвия проблем с использованием уже существующих меток
3. нет нужды каждый раз придумывать имена меток для начала/конца циклов (типа: next_*, loop, endLoop)
4. в правильных редакторах возможен folding, т.е. свертывание блока кода в одну строку
Минусы:
1. непривычно
2. надо серьезно переделывать парсер
3. не портируемо
Тогда и вообще нет смысла подгонять под особенности, например, аласма с его if/ifn, etc.Цитата:
Сообщение от aprisobal
В SjASM уже похожее есть:Цитата:
Сообщение от elf/2
Код:Temporary labels
----------------
To keep the number of used labels
reasonable it is possible to use numbers
as labels. These labels can only be
used as labels to jump to. To jump
to these labels, use the number
followed by an 'F' for forward branches
or a 'B' for backward branches.
Temporary labels should not be used within macro's.
Example:
ADD A,E
JR NC,1F
INC D
1 LD E,A
2 LD B,4
LD A,(DE)
OUT (152),A
DJNZ 2B
А мы и не подгоняем. Только добавляем полезные директивы типа DISPLAY.Цитата:
Сообщение от lvd