ALASM

Материал из SpeccyWiki
Перейти к: навигация, поиск

ALASM - ассемблер, написанный Alem'ом (Харьков) в 1996 году.

Единственный теневой многооконный (т.е. несколько исходников могут находиться в памяти одновременно) ассемблер для ZX Spectrum. Поддерживает разные модели памяти и разные размеры шрифта. Однопроходный. Во время ассемблирование возможно выполнение как процедур пользователя, так и сложных вычислений на директивах ассемблера. Поддерживает систему макросов TASM (расширяя её). Скорость ассемблирования примерно равна скорости STORM.

Для ALASM существует ряд утилит, в том числе поиск исходников на убитом диске и автосборщики программ (SAVEOBJ, SAVEBAS, mRIP, m2hrust, mkace).

Об ALASM'е

ALASM обладает одним из самых плотных форматов текста (наряду со STORM) и одним из самых быстрых компиляторов (опять-таки, вместе со STORM).

Как известно, на ZX существует только два ассемблера, позволяющие одновременно редактировать целое семейство исходников. ALASM один из них. Причём, в отличие от второго (XAS) здесь число этих исходников ограничено только размером памяти - от одного на 48k до десятков. В XAS - ровно два. Я должен заметить, что работа над большой программой существенно замедляется вплоть до невозможности, если приходится постоянно перегружать её, программы, исходные тексты.

В этом смысле ALASM незаменим.

ALASM совместим с отладчиком STS на уровне текстов (может напрямую грузить дизассемблированные листинги) и на уровне меток (STS показывает первые 16k меток скомпилированной программы). По поводу меток стоит заметить, что ALASM может хранить их до 64k (это очень много). В силу этого обстоятельства некоторые программы можно собрать ТОЛЬКО в ALASM - такого количества меток, по моим данным, на ZX нет больше нигде.

ALASM поддерживает вложенную (это редкость в ассемблерах на ZX) условную компиляцию IF0/IFN, вложенную подкомпиляцию текстов INCLUDE (это ещё бОльшая редкость), вложенные директивы повтора фрагментов DUP (за счёт уникальной возможности переопределения меток эта функция особенно гибка), макросы MACRO с переменным числом параметров, локальными метками LOCAL и хитрыми иероглифами анализа строки (которые мощны, мо освоил их, пожалуй, только сам автор ;)) и директивы DISPLAY для вывода сообщений и вычислений во время сборки. Кроме того, во время трансляции можно вызывать процедуры пользователя (например, чтобы подставить в собираемую программу текущую дату).

ALASM может напрямую компилировать во все страницы, в бейсик-область, в область #5bxx и даже в атрибуты. Известно, что компиляция со смещением не всегда удобна при отладке. Между прочим, в ALASM разрешена конструкция, позволяющая делать вложенные DISP.

По синтаксису ALASM позволяет больше, чем все остальные ассемблеры на ZX (и при этом может всё, что возможно на других ассемблерах - например, игра SNAKE by RST7 под ALASM тоже есть).

Энтузиасты ;) снабдили ALASM возможностью автозагрузки-компиляции-запуска одним нажатием кнопки (загрузчик называется mkace) и несколькими способами сохранения собранных программ на диск (SAVEOBJ*, SAVEBAS*, mrip*, m2hr*). SAVEOBJ - серьёзнее аналогичных встроенных директив других ассемблеров тем, что позволяет сохранить несколько блоков (например, страниц). mrip и m2hr вообще являются упаковщиками, т.е. собирают готовую к распространению программу.

Редактор ALASM достаточно специфичен - в сущности, это два редактора. Режим Overwrite, обычный для большинства ZX ассемблеров, ввёл ALEM с самых первых версий. Режим Insert - плод фантазии Capry, занимавшегося пакетом с 2001 по 2002 год. Они не похожи на средний "текстовый редактор", но на практике оба нужны.

Поскольку Capry бдительно следил за пожеланиями пользователей, редактор получил несколько необычных встроенных возможностей:

  • ассемблирование двумя кнопками;
  • калькулятор без выхода в меню;
  • отмена изменений в строке;
  • автотабуляция при вводе;
  • выход после компиляции на ошибочную строку;
  • список меток-закладок для быстрого и наглядного перехода к нужной метке (это помимо поиска МЕТКИ - вещи опять-таки уникальной)...

Шрифт 6x6 показывает 30 строк. Это приятно :)

Есть дополнительные возможности и снаружи: можно вывести список меток по маске и метку по адресу (SYMBOL), запустить программу с совершенно произвольной точки, сбросить флаг повторной компиляции всех текстов в памяти (JUMB +) и т.п. Некоторые из них - ещё авторские.

ALASM может подгружать при ассемблировании кодовые файлы (и исходники) по маске и с любым расширением. Загружаемые же в меню тексты выбираются, естественно, из каталога. Тексты можно экспортировать: например, для печати.

ALASM пользуется полной 866 кодовой таблицей - вы с лёгкостью напишете программу с сообщениями на русском языке. Можно вводить любые символы.

Если не считать ассемблеров, хранящих текст текстом, ALASM единственный, чей формат документирован. Кроме того, исходники самого ALASM открыты.

Последняя версия ALASM на сегодняшний день (v5.09) содержит несколько огрех по мелочам, но ВСЕ они документированы.

Версии

  • Последняя авторская версия - 4.1 (1998).
  • 4.2 (KVA, 1999?) - добавлены макросы и условная компиляция.
  • 4.3 (LAS, 2000?) - добавлен ряд второстепенных функций.
  • 4.4x (Capry, с 2001 по 2003) на основе 4.2 - увеличен объём памяти под метки до 64 КБ, переход по меткам, множество других полезных доработок.
  • 4.5x, 5.xx (Alone Coder, с 2005) - расширение синтаксиса, автосборщики, исправление глюков, ускорение.

Есть данные, что существовала версия 5.0 (на основе 4.4x) с музыкой (авторы - Anomal Zone). Также были сведения об авторской версии 4.2, написанной вскоре после 4.1. В официальной версии 5.09 есть опциональная поддержка текстового режима ATM Turbo 2. Существует вариант версии 5.09 под 80 символов на строку и нестандартный текстовый режим ZX Evolution, автор Lord Vader.[1]

Исходники ALASM (а также исходники STS) распространяются в комплекте с самой программой. Alem долгое время не распространял исходники, поэтому Capry дизассемблировал ALASM перед тем, как производить доработки, и существующие исходники восходят к исходникам Capry, а не к авторским.

Ссылки