-
Готово субботнее обновление ZXAsm++. Исправил умножение в операциях (* не в начале строки тоже по ошибке считалась началом комментария в некоторых случаях), вообще подсчет выражений с более чем 1 операцией типа x+y*z. Добавил выборку из строки подстроки "stroka"[ n[,L] ], сравнение строк "s1" = "s2". Если есть желание можно качнуть весь EMuZWin 2.7 bld 2.6b - там я исправил расцветку строк, добавил в расцветку задний план.
Из запланированного осталось вроде только добавить более жесткий контроль хождения на втором и 3-ем (при наличии) проходе, чтобы компиляция шла по тем же веткам и использовались те же значения в DUP, FOR (а это я даже пока не знаю как сделать, чтобы подешевле вышло). Ну это на самом деле, не критично. Если код написан разумно, должно ходить по тем же веткам, никаких проблем. Зато двух-проходность полезна для подсчета ссылок вперед. (А трех-проходность позволяет оптимизировать переходы в дополнительных конструкциях типа IFcond)
-
Вот какую штуку вспомнил. Когда-то давно в своем асме и METAL'е делал макросы, которые формировали отнесенные на расстояние таблицы (обычно сразу по концу кода), и в эти таблицы заносили список адресов для модификации. Для создания перемещаемого кода. Т.е. пишется макрос типа
REF MACRO
@save_cur = .
.=next_free
DEFW @save_cur-2-start
.next_free=.
.=@save_cur
ENDM
(не точная копия, а идея - по памяти)
Далее, программа начинается с метки start,
а в конце кода пишется
next_free = .
И после каждого 2х-байтного адреса записывается обращение к REF, вроде:
JP @labelA : REF
В начале кода располагатся самомодификатор, котторый читает таблицу и настраивает код по месту выполнения.
Я к чему это все пишу. Добавил спец. форму присавивания . = #expr | $ = #expr (как было в моих прежних асмах), и сделал контроль определенности имен в ORG, .= expr, и в других местах _опциональным_ (в сегодняшнем обновлении будет). Чревато, но вообще-то программист должен быть как Господь Бог. Ограничения - это для юзеров (шутка, по умолчанию строгий контроль будет включен, отключается опцией).
-
Все, воскрсное обновление пошло. Экзешник тоже можно взять (окно меток улучшил, кнопка на настройках расцветки, чтобы все задние планы сделать одинаковыми. Да и там настройка для отмены жесткого контроля ссылок вперед есть). Надеюсь, основную массу багов повыловил в асме.
. = выражение работает, DEFS n[,...] тоже есть. Если что, пишите письма. Если есть желающие сделать оболочку для стандалонной версии компилятора - помогу (исходники все тоже выложил для асма), если есть желание встроить мой асм в другой эмуль - аналогично (можно его так в dll и оставить и юзать через точку входа, интерфейс простецкий).
-
Обновление http://bonanzas.rinet.ru/zx/ZXAsmPP.zip
Т.к. как я добавил 0-й проход для предварительного сканирования макросов (для возможности ссылаться на них независимо от того, выше они или ниже), то пришлось поправить работу с переменная=выражение и имя DEFINE строка: информация о таких именах тоже должна собираться на 0-м проходе. Немного улучшил диагностику в случае когда MACRO по ошибке закрыт например ENDP (пришлось лезть в код чтобы понять что случилось, добавил предупреждение на этот случай). Да, еще DEFG теперь можно несколько символов "в ряд" "рисовать", и числа тоже разрешаются (чтобы в шрифтах можно было задавать параметры, если они идут прямо вместе с символом.
-
В новом обновлении (вторник 7.02) только дополнения:директива ENCODE для кодирования символах в строках (можно русские буквы в любую 8-бит кодировку прямо комилировать), и связная директива CTEXT ... ENDTEXT для вставки произвольного текста (и правда, не всегда интересно текст держать и подготавливать отдельно, а эа директива еще и любимый спековский флажок в бите 7 ставит на последних символах строк).
-
Второе обновление за сегодня. Небольшие фиксы. И главное ORG в банк памяти заработал теперь.
-
Средовое обновление: исправлены IFM/IFP/IFPO/IFPE и добавлена директива DEFD (пакованные 16-ричные). Ну и по мелочи еще исправления (скорее улучшения, в условной компиляции, с '/' поборолся. Вот теперь думаю может зря я разрешил в идентификаторах '/' использовать, может все-таки запретить?).
-
Еще обновление ZXAsmPP: LOOP -> WHILE..EWHILE|EWHILEB , +EWHILEcond,
+LONGIFcond .. +LONGELSE +чуть более жесткий контроль зарезервированных слов чтобы не пытались превращаться в метку.
-
Народ! Скажите мне, кто эмулятором пользуется, по поводу кемпстон мыши в эмуляторе: кнопки левая и правая не перевернуты ? В унреале вроде ж наоборот по умолчанию ?
И нигде не нашел описания хоткеев в дебуггере :(
И вообще если кто работает в ZemuASMe - отзовитесь!
-
Все хоткеи в меню видны (Tools или контекстное на основной части окна). Я вообще стараюсь все сделать видимым, чтобы хотя бы про недокументированные фичи гору доков не делать). А, есть одна "скрытая" фича - хотя вроде и ее вносил в меню тулз: отключение всплывающих подсказок на тулбаре дебугера - клик по любой кнопке правой мышью. А то задалбливает, если мышкой работать. Всплывает, и всплывает все время. (Рисунки на кнопках и так вроде понятны, один раз всплывающее почитал - и отключить, чтобы не мешали. Правда в сеансе только запоминается. В реестре/ини принципиально не сохраняется эта настройка, а то получится примерно как Fast Tape. Если запоминать, потом народ будет в непонятках: "а где оно?").