-
Цитирую из описания аласма:
1. include "filename.ext",2048
Включение в компилируемую программу кодового блока с диска размером "длина" - очень нужно
2. DS количество повторений[,список байт]
Список байт (по умолчанию нулевой байт) копируется в текущий
адрес компиляции. Число циклов = "количество повторений".
- что-то похожее, думаю, уже есть ?
3. При загрузке текста с диска он сканируется на наличие в нем "+"
в начале каждой строки. В процессе компиляции все встреченные
"+" будут заменены на "-", что заставит компилятор пропускать
строки при следующем ассемблировании.
- не очень важно
4. LOCAL
<тело>
ENDL
Объявление локальных меток. Все метки в пределах этой
операторной скобки будут невидимы вне ее (кроме меток,
начинающихся с символа @ - это глобальные метки). Допускаются и
вложенные конструкции.
- это и есть аналог PROC ?
5. DISPLAY [/L,]["any text",][[/D|/H|/A,][/T,]выражение]
Отображает текст или числа в процессе ассемблирования. Ключи
/D, /H и /A устанавливают формат вывода для одного следующего
числа. Далее числа выводятся в текущей системе счисления. /D -
десятичное число, /H - шестнадцатиричное, /A - в обеих
системах.
/L указывает, что необходимо печатать не с новой строки.
/T выводит сначала само выражение, потом его значение.
Примеры:
DISPLAY "code size: ",/D,end-start
DISPLAY /A,"abc+xyz=",abc+xyz
DISPLAY "simple"," text"
6. Выражения
{a} - слово, находящееся в памяти по адресу a
$$ - текущая страница кода
Теперь проблемы, о которых говорил АлКо:
Во всех операциях, кроме + и -, не допускается использование
меток, которые будут определены ниже (из-за однопроходности)
- бывает, кстати. В emuZasme такого нет ?
-
Версию положил, можно брать. Сейчас между прочим почитаю и отвечу на пост. (А раньше нельзя было или хотя бы мылом? Теперь уже после драки придется смотреть).
-
1. у меня уже FILE "имя"[,start[,len]]. INCLUDE я оставил для включения куска сорцов как раньше. (Хм, рекомендую пока после INCLUDE ставить сразу метку.)
2. Есть DUP n ... EDUP, FOR i=val_list ... EFOR
3. насчет + - я не понял. Не дело асма менять исходник. По правилам, он должен работать в режиме read-only. Это железно.
4. PROC ... EPROC - Все то же и для того же. Опционально префиксом локальной метки может быть @, _, !, \, что-то еще не помню - в опциях асма. Локальные можно дублировать сколько угодно, и задавать направление для перехода.
5. Да это примерно то же что ERROR, вот только вывод числа я не предусмотрел. Ну можно сделать и DISPLAY, только формат попроще бы, типа
DISPLAY 'txt'[,#expr[,#passes]] (маска на каких проходах делать вывод, как в ERROR).
У меня двух-проходный, а если спользуется C-- -like, то еще делается и третий проход, не вижу с этим проблем. Скорость у меня получилась хорошая, 48К из дизассемблированного кода компилируется меньше секунды. Метки должны быть выше определены только в особых случаях: для повторителей в DEFB (#expr)n..., для ORG. Вроде еще для чего-то. Макросы должны быть выше определены, DEFINE's. Все остальное (вроде) может вниз ссылаться.
В общем все в правилах написано, должно соответствовать.
-
Сейчас положу первое обновление. И, эх, как всегда первый блин - комом, хоть что нибудь да не так. Не протестил EQU, пока исправлял одно, пропучтил другой. Сейчас так формально более ништяк. Ссылка на обновление ZXAsmPP.dll здесь, и потом будет здесь же (там только собранная dll, примерно 40К в архиве, если очень нужны и исходники, буду и их выкладывать туда же).
Тестировал я на реальном коде, и одновременно писал максиально нереальный (в смысле с использованием всех особенных штук). Так что эта версия асма должна быть уже повернее.
Хотя со скоростью зря я радовался. Поставил цикл FOR i=0 TO 255 а в нем вложенный FOR i=j TO 8 и там по IF #expr THEN macro1 ELSE macro2 EIF, и как... он задумалось... В итоге через полминуты все ОК, компилируется, но это что-меня не устраивает. Надо чего-то еще думать как это убыстрить. Может быть (если тормоза в этом) придется запретить вкладывать INCLUDE внутрь FOR/DUP.
-
Пол-минуты - это не время :) Будем тестить.
-
Скорость победил (новое лежит). Кажется, еще и проблемы с устойчивостью были. Возможно придется сам эмулятор пересобрать и переложить. Если та версия что лежит сейчас на выходе ругается (ругается или не ругается?).
Если письма пишите, пишите в поле subj что-нибудь конкретное и покороче. Типа EmuZWin - bla-bla-bla. А то я не знаю теперь, получил я письмо и убил его или оно просто еще не дошло.
-
Ах, да. Забыл убрать "запрет" на вложенные инклюды (хотя самые тормоза были не в этом, а вызове макросов). Впрочем, это (наверняка) не последний апдейт.
Вообще, убивает как тормозно работает куча во всех этих ЯВУ и как тормозно в частности работают huge strings. Впрочем, я избавился сейчас вообще от всех huge strings, добавил хэширование, специальные скоростные объекты для хранения таблиц имен, свой певдо-менеджер памяти (а чего там мелочиться освобождать ее кусочками, потом в этой куче только тормоза одни - проще выделять до опупения пока идет компиляция и ничего не освобождать, а по окончании разом все освободить, все быстрее будет).
Пишите письма. Я пошел сыну сказку читать, пора ему спатеньки.
-
вложенные инклюды - ерунда. Совсем забыл, что для DISPLAY я поменял число параметров в callback - функции для передачи сообщения (или не поменял? точно уже не вспомню), так что выклядываю уже и билд 2.6а версии 2.7 эмулятора в полном архиве, если что - берите опять метр. Заодно раскраска для некоторых директив в исходнике подпралена, и DISPLAY с END добавлены в покраску.
Готово, лежит.
-
Чёто KAY остался совсем без менюшки для выбора пути к ПЗУшке , и ещё желательно сделать отдельную мененюшку под его ПЗУшку с тыр дос .
И кстати переназначенные пути ПЗУшек то ли не сохраняются , толи обнуляются на дефолтные.
З.Ы. Лучше все настройки хранить в виде простого текстового файла.
-
Что касается моделей, то тут я пока остановился на Пентагоне со Скорпионом (и то у Скорпиона неверная тактовка, как мне пишут). Будет время (и место) - доведу до ума, и прочие модели и видеорежимы и hdd, и TR-DOS. А пока что воюю с компиляторами. Сейчас ZXAsm, потом возвращаюсь к Паскалю. Надолго это.