Просмотр полной версии : Как пользовться Alasm?
Здравствуйте,
Существует ли по Alasm какая-либо документация?
И еще общий вопрос: если я запускаю Alasm из-под эмулятора, то как вытащить из trd-образа файл с программой или наоборот записать туда, если у меня на ПК она хранится в текстовом файе?
Антон
то как вытащить из trd-образа файл с программой или наоборот записать туда
Поищи плагины для FAR, они позволяют производить различного рода махинации с образами дисков Спектрума.
Существует ли по Alasm какая-либо документация?
В комплекте с ассемблером разве нет доки? Я правда сам уже сто лет туда не заглядывал, но вот вроде припоминаю - был какой-то текстик с описаниями директив и калькулятора. :)
Существует ли по Alasm какая-либо документация?
Ну, вот ещё кое чего - http://www.zxpress.ru/article.php?id=2636
В комплекте с ассемблером разве нет доки? Я правда сам уже сто лет туда не заглядывал, но вот вроде припоминаю - был какой-то текстик с описаниями директив и калькулятора. :)
Что-то не видел. Там есть-какие-то исходники, но вот документаций не нашёл. Я ипользую alasm 5.08, скачанный в виде образа trd с Virtual TR-DOS.
Ну, вот ещё кое чего - http://www.zxpress.ru/article.php?id=2636
Спасибо за ссылку, хотя она про alasm 2.8, в то время как я использую 5.08. Различия:
1. Версия 5.08 не имеет команды HELP (или она как-то хитро вызывается), и список возможных команд я просто мутодом тыка определял, что было непросто, так как часть команд сразу выполняются, не ожидая нажатия Enter. Неужели в ходе многочисленных доработок потерялся встроенный HELP? При управлении из командной строки и при помощи клавиатурных сокращений он просто необходим.
2. Из всех перечисленных клавиатурных сокращений совпали только два: CS/I и SS/2.
3. Каманда Assemble почему-то сразу запускает программу.
Одним словом — тяжеловато разбираться... Откуда же Вы черпали знания?
Антон
Документация скрывается в исходнике al50help.H
▄███████ █████5.07▄███████ ▄█████▀▀ ███████▄
█████▀██ █████▄▄▄ █████▀██ ▄▄█████▀ ██ ██▀██
1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ
ALASM позволяет pаботать одновременно с несколькими текстами
в разных страницах памяти. Переход от редактирования одной
страницы к другой осуществляется командой paGe [страница]
либо по ssENTER (из списка).
Страницы нумеруются по маске максимального значения,
передаваемого в драйвер расширенной памяти.
Его младшие 3 бита соответствуют битам 0-2 порта #7FFD.
При запуске ассемблера проводится тест памяти по всем восьми
битам номера страницы драйвера. Его результаты выводятся на
экран в виде XXXX kB mask XX. Числа указывают, сколько памяти
доступно ассемблеру и какие биты номера страницы отвечают за
доступ. По этим битам маскируются операнды команд PAGE и др.
Стек при работе не должен быть выше #6dff!
2. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА
Выполнение команд может быть прервано нажатием BREAK.
Если в результате команды может быть потерян измененный
текст, то выдается запрос на его сохранение.
Quit [адрес][,страница]
Выход из ассемблера. Если параметры не заданы, происходит выход
типа RET, иначе JP по "адресу" в "страницу".
Debug
Вызов отладчика STS7.0.
Run [адрес][,страница]
Запуск программы. По умолчанию "адрес"=значение последней
директивы ORG, "страница"=0.
Work [drv:][filename[.ext]]
Загрузка файла в текущую страницу. По умолчанию расширение "H".
"filename" может представлять собой маску. В этом случае будет
загружен последний файл, который ей удовлетворяет.
Если "filename" не введен, пользователь
выбирает файл из каталога курсором.
Catalogue [drv:][mask]
Отображает каталог диска. По умолчанию mask="*.*" (все файлы).
Формат маски: знак "?" определяет, что в данной позиции может
находиться любой символ. Знак "*" определяет, что отсюда и далее
все символы произвольны. При достижении ограничителя ("." или
конец строки) предполагается, что дальше пробелы.
Catalogue C - полезно, чтобы увидеть параметры диска, не мотая
весь каталог
Name [newfilename[.ext]]
Переобозвать текущий текст.
Edit [дисковод:][имя файла]
Редактировать текст в текущей странице. Если задано
"имя файла", файл с таким именем загружается в текущую страницу.
Если же файл на диске не найден, в текущей странице создается
новый файл с введенным именем.
merGe [дисковод:]имя файла
Подгрузка файла формата ALASM в конец текущего файла.
counT арифметическое выражение
Считает выражение.
sYmbol [маска|=числовое выражение]
Список меток по маске или по значению. Работает только после
компиляции.
число - значение метки
NoDef - метка не была определена, но была использована
Macro - метка является именем макроса
Wrong - формат метки не определен из-за ошибок компиляции.
Assemble
Компилирует текст в текущей странице.
Save [+|!][drv:]
Запись на диск. При указании "+" на текущий или указанный
дисковод записываются все измененные файлы. При "!" вообще все.
Иначе только текущий.
Move
Выполнение TR-DOS'ной команды MOVE.
Портит память ниже #7400.
Info
Показывает номер версии, список системных страниц памяти и
список файлов в памяти. Видно признак измененности файла
'+', а также или счетчик ошибок данной страницы, или, если
их нет, первую строку текста.
Page [страница]
Указанная страница становится текущей.
driVe drv
Указанный дисковод становится текущим.
Jumb [+]
Без параметра сканирует текст в текущей странице с целью замены
директив "-" на "+" (эта операция автоматически производится при
загрузке каждого файла с диска). С параметром + сканирует все
тексты в памяти.
ssENTER
Выбор редактируемого файла из находящихся в памяти.
Ban [+]
Очистка страницы текста (или всех текстов).
Следующие команды оверлейные:
conFig
Настройки. Можно сохранить на диск в тело аласма.
impOrt [drv:][mask]
Конвертирует текстовые файлы во внутренний формат ALASM.
Опционально переводит токены в верхний регистр и режет строки по
двоеточию вне кавычек. Предлагается выбрать файл из
соответствующего маске списка.
В случае переполнения страницы оставшаяся
часть файла может быть импортирована в другую страницу.
eXport [+][drv:]
Записывает на диск текущий исходник (или все) обычным текстом.
3. КОМАНДЫ РЕДАКТОРА
В редакторе экран разбивается на окно
редактирования и строку статуса, где выводится номер страницы и
имя текущего файла, количество свободной памяти в этой странице,
объем содержимого кармана адрес текущей строки в тексте, размер
текста и текущий режим редактирования (Ins/Ovr).
Список команд редактора (кнопка Extend):
Quit - выход в меню.
Assemble, counT - как там.
Begin, End - в начало/конец текста.
Search [строка символов]
Поиск. Начинается с позиции, следующей за курсором и
продолжается до конца текста. Поиск может быть продолжен по
ssI, причем если командя дана в конце текста, поиск пойдет с
его начала. Если параметр "строка символов" не указан, будет
использована строка, введенная в прошлый раз.
sYmbol [начало имени метки]
Поиск определения метки. Предполагается, что метка находится в
начале строки.
Xreplace строка1÷строка2
Замена строка1 на строка2.
Y-заменить, N-искать дальше, G-заменить все, BREAK-прервать.
coDe XXX>[код символа]
Ввод в текст символа с произвольным кодом. XXX показывает код
символа под курсором.
Restore
Вставка содержимого кармана под курсор.
Флаг разрешения дополнения кармана сбрасывается.
Clear
Очистка кармана.
Ins/ovr
Вставка/замена. Состояние можно сохранить в конфиге.
Undo
Отмена изменения строки (действует только на текущую строку).
Обратима.
Labels
На экран выдаются все метки, стоящие в начале пустых строк.
Можно выбрать нужную метку или нажать BREAK.
Клавиши в режиме редактирования:
ssI - продолжение поиска
ssSP - удаление тек.строки. Строка переносится в карман
ssQ,E - Home,End
ssW - копирование тек.строки в карман. Если дополнение
кармана запрещено, то он очищается
csSP - табуляция или Rus/Lat (в конфиге можно сменить местами)
cs1 - Rus/Lat или табуляция
cs2 - вставка пробела в позицию курсора. Остальная часть
строки сдвигается вправо
ssENTER - то же, что и в меню
cs8 при вводе команд - вспоминает символы предыдущей команды
Режим вставки:
вставка символа производится со сдвигом остатка слова
вправо. Словом считается последовательность символов, не имеющая
более одного пробела подряд. Например, при вводе метки в строку
с мнемоникой, мнемоника не будет съезжать вправо.
влево - курсор помещается на первый непробел слева.
вправо - курсор помещается на первый непробел справа
или на следующую позицию табуляции, если строка справа пустая.
Еnter разрывает строку. Если справа от курсора строка
пустая, то после перехода на следующую курсор сдвигается на
одну табуляцию (8 символов) - столбец мнемоник. Если курсор в
8-й позиции, после разрыва сохраняется табуляция.
cs9 удаляет символ под курсором. Если строка справа пустая,
то производится склейка со следующей строкой (если результат не
длиннее 64 символов)
cs0 если нажат в начале строки - склеивает с предыдущей.
4. ДИРЕКТИВЫ АССЕМБЛЕРА
ORG адрес[,страница]
Установка адреса компиляции. По умолчанию параметр "страница"
старый, в начале компиляции =0.
метка EQU значение
Присваивает метке значение, эквивалентное параметру "значение".
DISP адрес
Установка адреса, в котором должна работать программа.
ENT
Присвоение адресу работы программы текущего адреса компиляции.
Пример:
SCREEN EQU #4000
ORG #8000
LD HL,BEGIN ;Пересылка в область экрана
LD DE,SCREEN ;и запуск программы ожидания
LD BC,END-BEGIN ;[A] прерываний
LDIR
CALL SCREEN
DI
HALT
BEGIN DISP SCREEN
MARKA DEC A
HALT
JP NZ,MARKA ;JP не случайно
RET
ENT
END
Текущее смещение компиляции (shift=org-disp) узнают так:
a ORG 0
ENT
shift ORG a+shift
DISP a
INCLUDE "drv:имя файла"[,страница]
Включение в компилируемый файл дополнительного исходника,
лежащего на диске под именем "имя файла". При этом указанный
файл загружается в страницу, определенную параметром "страница"
(по умолчанию - текущая). По окончании компиляции включенного
блока компиляция продолжается со строки, следующей после данной
директивы. Файл не будет загружаться с диска, если
он уже находится в необходимой странице. "" - любой файл.
Пример:
LDIR
INCLUDE "TOKENIZE",1
OTDR
INCLUDE "ALASM2"
HALT
Сначала будет откомпилирован LDIR, потом текст "TOKENIZE.H",
загруженный в страницу 1, потом OTDR, затем в тек.страницу
будет загружен и откомпилирован текст "ALASM2.H", после чего
с диска будет считан основной файл и компиляция продолжится
с команды HALT.
MAIN "имя файла"[,страница]
Указание основного файла компиляции. Директива MAIN должна быть
первой исполнимой директивой подчиненного файла.
Символы "." и "*" заменяйте на "?".
Пример:
MAIN "MAKE6?7",6
LDIR
После подачи команды ASSEMBLE компиляция передается
программе MAKE6*7, находящейся в странице 6,
затем находящийся в ней INCLUDE вызывает подчиненную
программу, состоящую из директивы MAIN и команды LDIR.
Во включаемых файлах MAIN игнорируется, поэтому после
ассемблирования LDIR происходит возврат назад и
продолжение компиляции.
INCBIN "дисковод:имя файла"[,длина]
Включение в компилируемую программу кодового блока с диска
размером "длина" байт или по умолчанию из данных каталога.
DUP число
Указывает начало блока, который необходимо компилировать
"число" раз подряд
EDUP
Указывает конец повторяемого блока. Возможна вложенная
конструкция.
Пример:
DUP 32
LDI
LD A,B
OR C
JR Z,$+3
LD (HL),D
EDUP
Блок между DUP и EDUP откомпилируется 32 раза
REPEAT
<тело>
UNTIL <выражение>
Компилирует <тело>, пока <выражение> не 0
DB байт[,список байт]
Пример:
DB "У",13,10,"попа",13,10,"была",13,10,"собака",13,10
DEFB "она съела",13,10,"попа факу..."
DW слово[,список слов]
Пример:
DW ALASKA,BUFFER,12,#BD15,32767,.NUMB1
DEFW 12345,34567
DS количество повторений[,список байт]
Список байт (по умолчанию нулевой байт) копируется в текущий
адрес компиляции. Число циклов = "количество повторений".
Пример:
DS 10,#E5
DEFS 32,#ED,#B0
DD [#]hexбайт[hexбайты]
Плотное хранение шестнадцатиричных чисел.
DD 1D4FDC,4223
эквивалентно
DB #1D,#4F,#DC,#42,#23
+<нечто>
ОПАСНО ПРИ ДЛИНЕ СТРОКИ=#2C..#2F!
При загрузке текста с диска он сканируется на наличие в нем "+"
в начале каждой строки. В процессе компиляции все встреченные
"+" будут заменены на "-", что заставит компилятор пропускать
строки при следующем ассемблировании.
Пример:
LD HL,#DB00
+SAVEADR
+ ORG #DB00,7
+ INCBIN "sts70r"
+ ORG SAVEADR
JP (HL)
отладчик загрузится только при первой компиляции
метка=выражение
(Пере)присвоение значения метке.
Пример:
SHLUSS=0
ORG 32768
DUP #4000
DEFW SHLUSS
SHLUSS=SHLUSS+1
EDUP
память выше #8000 заполнится увеличивающимися словами 0..16384
IF <выражение>
<тело1>
ELSE
<тело2>
ENDIF
Если <выражение>=0, то компилируется <тело1>, иначе <тело2>
IFN <выражение>
<тело1>
ELSE
<тело2>
ENDIF
То же, но наоборот.
Допускается вложенность условной компиляции (до 254)
LOCAL
<тело>
ENDL
Объявление локальных меток. Все метки в пределах этой
операторной скобки будут невидимы вне ее (кроме меток,
начинающихся с символа @ - это глобальные метки). Допускаются и
вложенные конструкции.
Если в пределах локальных меток определять метки с именами,
к которым обращались раньше этой конструкции, то такие метки
будут глобальными:
LD HL,LABEL
LOCAL
LABEL
ENDL
MACRO <имя_макросa>
<тело>
ENDM
Определение макроса.
В теле макроса:
\0..\9 - параметр номер 0,1,2,..9
\C - текущий символ
\N - перейти на следующий символ (ничего не выдает)
\S<char> - строка от текущего символа до символа <char>
\P - сдвинуть строку параметров на один параметр. Выдает
съеденный параметр.
\R - отменяет все \P.
<имя_макроса> [параметр1[,параметр2[...]]]
Использовать макрос.
Разделитель параметров - запятая
(заключенная в кавычки не считается).
MACRO DOWN
LOCAL
INC \C
LD A,\C
AND 7
JR NZ,LABEL
LD A,\N\C
SUB #E0
LD \C,A
SBC A,A
AND -8
ADD A,\R\C
LD \C,A
LABEL
ENDL
ENDM
Теперь мы можем процедуры DOWN HL и DOWN DE компилировать по их
именам - DOWN HL, DOWN DE и т.д.
Пользуясь условиями типа
IF " "-"\1 "
или
IF ?macroname\1-2
можмо определять макросы с переменным числом параметров.
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"
DISPLAY "Баран жевал "
DISPLAY /L,"травКу"
DISPLAY /A,/T,abc+xyz
эквивалентно
DISPLAY /A,"abc+xyz",abc+xyz
<unknown token> адрес[,страница]
Вызывает во время трансляции указанную процедуру.
При этом Post-метки еще не рассчитаны, а ALASM лежит в #8000.
Половинки IX и IY: HX,HY,LX,LY.
Можно: INF;SLI;OUT (C),0;EXA;EXD;JZ;JNZ;JC;JNC
LD L,0,H,'fnt и т.п.
5. Выражения
Считаются слева направо без приоритетов (кроме скобок).
a+b
a-b
a*b
a/b
a&b - AND
a|b - OR
a!b - XOR
a>b - циклич.сдвиг слова a на b бит вправо
a<b - влево
() - скобки (сначала рассчитываются они)
{a} - слово, находящееся в памяти по адресу a
a~ - инвертирование текущего результата
?метка - возвращ. 0, если метка определена, #ffff, если не
определена, и 1, если не определена, но к ней было уже
обращение. Если метка - название макроса, то 2.
'a - ст.байт a
.a - мл.байт a
%const двоичная
$$ - текущая страница кода
Как узнать страничку компилируемого исходника
и адрес компилируемой строки (из макроса нельзя)
ORG #C0E1,2
DISPLAY {$}-#C040,"/pg",.{$+2}
Как определить, не из mkace ли мы запущены
ORG #FF32,2
IF {4>4+{$}}-#BF43
make ;mkace!
ENDIF
Во всех операциях, кроме + и -, не допускается использование
меток, которые будут определены ниже (из-за однопроходности)
6. ОШИБКИ
0 синтаксическая
3 короткий переход вышел за границы
6 повторное описание метки
10 компиляция в ПЗУ
11 недопустимая операция
12 неправильная Macro операция
14 системного стека
15 диска
Ошибки времени заполнения:
wrong short - неверное короткое смещение
not defined - метка не определена
7. КОНФИГ
Load FONT codes -загрузка шрифта "FONT*" #9c40,#400(#8045,#3f0)
Start page
Страница, которая будет текущей при запуске ALASM
System page
Где лежит ALASM
Symbol list
Страницы, в которых хранятся метки, полученные при компиляции.
Если вам не нужно 4 страницы меток, ненужные занулите.
Заполнение начнется со страницы, указанной справа. Метки
закидываются от старших адресов к младшим
Post symbols
Страницы, в которых будет список почтовых меток компиляции.
После компиляции этот список не нужен.
Заполнение начнется со страницы, указанной справа.
Пост-символы закидываются от младших адресов к старшим
Pocket page
Страница буфера копирования. При компиляции очищается.
Можно совместить с Post
HImem driver
Установить драйвер расширенной памяти (#7000,#FF)
alasm64 .B - ALASM 64 симв.
alasm_64.C - ALASM
olasm_64.C - оверлеи
FONT64a .C
FONT64b .C - фонт (ц)Faster FIXED
alasm42 .B - ALASM 42 симв.
alasm_42.C
olasm_42.C
FONT42a .C
FONT42b .C - bold font
sts70r .C - debugger
gruzilka.B - загрузчик с диска B
128КDRV .C - драйвер памяти 128k
PENTDRV .C - Pentagon 512
P1MBDRV .C - Pentagon 1M
P4MBDRV .C - Pentagon 4M,без доработки платы only 2M (#FD,#AFF7)
ATMDRV .C - ATM 1M
PROFDRV .C - PROFI 1M
ZSKAY512.C - SCORP/KAY (видно 512k)
KAY1DRV .C - KAY 1M
SCORP1M .C - SCORP 1M
al50stri.H - формат ALASM
Fnt42Bld.H - конвертер фонта 6x7 из экрана в #3f0
REFNT42 .H - и наоборот
H_Search.B - выдиралка ALASMовских файлов с убитого диска
H_Search.W
Marazm.H, Humor.H, Humor.C
Примеры использования макроса RANDOM, позволяющего получить
псевдослучайное число в заданном диапазоне.
SNAKE.H
Игра во время ASSEMBLE.
BUILD+.H
Производит подсчет количества компиляций Вашего проекта и
позволяет вставить это число в программу.
SAVEOBJ3.H
Автоматизически записывает кодовые блоки с любым расширением
(кроме ".B"). Используется с RUN[CS/Enter], остальная информация
внутри. Вам не придется сохранять через STS!
SAVEBAS/.H
Позволяет создавать на диске бейсик-файл, содержащий в своем
теле написанный Вами кодовый блок.
НЕСОВМЕСТИМОСТИ с v4.44:
ORG без номера страницы продолжает компилировать в тек.стр.
Параметры макроса через \, а не :
DB """,0 считается DB """,0". Пишите DB 34,0 или DB """",0
Документация скрывается в исходнике al50help.H
Эх, просмотрел. Спасибо.
Лас: Огромное спасибо за выкладывание этого help'а :)
Антон
Powered by vBulletin® Version 4.2.5 Copyright © 2026 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot