Из дистрибутива ALASM v4.44bf by Alem, Stall Edition Вместо эпиграфа: Поспешишь - людей насмешишь. ... Перебивается под: Ария, "Мания величия" +------+ | +------+ +------- +---+---+ +------+ | +------+ +------+ | | | | | +------- | | -------+ | | | ·· Version: 4.44bugfix ·· ·· STALL EDITION ·· [+] новое, [!] фикс, [*] изменено, [-] выкинуто Отличия версии 4.44bugfix от 4.44 (29.6.2) [!] Исправлен глюк версии 4.44! При склейке строк по cs/0 асм портил текст и сбрасывался. Блин! И все из-за одной строчки, которая почему-то исчезла в неизвестном направлении. Эх, Цап-Цап. Спасибо Alone Coder'у, кроме него никто не заметил или не удосужился сообщить. Отличия версии 4.44 от 4.43 (xx.xx.xx-24.06.02) [!] INCBIN не смертельно глючил с файлами, имеющими длинну, кра- тную 256 байтам - неправильно устанавливалось #5cf4 (Sergius Puzzler) [+] Команда EXA = EX AF,AF' (AlCo+Mey) [!] ENDM в начале строки не справлялся со своими обязанностями (Sergius Puzzler) [+] Теперь во всех командах (где на то есть смысл) можно задать через запятую список параметров: LD A,B,C,D POP HL,DE JP C,#1234,#1234 и так далее. (AlCo, Antipod) [!] fix Hsearcher! Раньше в найденном файле в дескрипторе уста- навливалась неправильная дорожка (elph, dman) [*] в 42символьной версии курсор подрос на 1 пиксель (AlCo) [!] в строке статуса отмечается флаг измененности текста [+] теперь грузится последний из одноименных файлов (AlCo) [-] DEFM боле нету. [+] Но есть DD! DD #112233445566 эквивалентно DB #11,#22,#33,#44,#55,#66 [+] в конфиге можно выбрать громкость beepа (0-off,1-min..4-max) (Antipod) [+] По ext/l можно перейти к одной из меток текущего файла (мет- ка должна стоять в строке первой и единственной) (AlCo) [*] команды Run и Symbol теперь работают только после успешной компиляции [!] после поиска метки заменялись только метки (AlCo) [*] После компиляции выдается информация вида: Symbols:#0000 Post:#0000 Macro:#0000 [!] возможно исправил глюк с дисководами (при выборе дисковода принудительно заношу #83 в соответствующую ему ячейку в ра- йоне #5cc8..#5ccb если там не #1b) [*] скорость компиляции немного увеличена (5-15%) за счет опти- мизции доступа к 64к меток (например у меня исходы этого аласма компилятся в v4.43 27 секунд, а в v4.44 21 секунду.) Таким образом скорость компиляции снова близится к скорости авторской версии 4.1) [*] в калькуляторе двоичное значение разделяется символом '_' [+] в редакторе: ext/U - Undo строки --- В архиве находятся: * al64_444.B - пусковик ALASMа, 64 символа в строке * al64_444.C - сам ALASM * al64_444.O - оверлеи: help, import, export, config * FONT64a .C - мой стандартный фонт * FONT64f .C - фонт (ц) Faster * al42_444.B - пусковик ALASMа, 42 символа в строке * al42_444.C * al42_444.O * FONT42a .O - font * FONT42b .O - bold font * sts6.2 .C - debuger * alasm444.W - этот текст * AL444nfo.H - краткий перечень директив и команд * 128КDRV .C - драйвер памяти для Spectrum 128k * PENTDRV .C - для Pentagon 512 * P1MBDRV .C - для Pentagon 1024 (#7FFD) * ATMDRV .C - для ATM-Turbo * PROFDRV .C - для PROFI * SCORPDRV.C - для SCORPION * KAY1DRV .C - для KAY * 128KDRV .H - исходники драйверов памяти * PENTDRV .H * P1MBDRV .H * ATMDRV .H * PROFDRV .H * SCORPDRV.H * KAY1DRV .H Приложение: * ALstring.H - формат текста аласма (в виде порипанного из само- го аласма исходника) * BUILD# .H - считает количество компиляций и записей проекта * SAVEOBJ .H - макрос сохранения кодовых блоков * SAVEBAS .H - генератор бэйсиковских загрузчиков * H_Search.B - выдиралка ALASMовских файлов с убитого диска (по- фиксена) * H_Search.W - описание выдиралки * Fnt42bld.H - конвертер 42х символьного фонта из экранного формата * file_id .diz Краткое описание функциональных возможностей. - 1. РАСПРЕДЕЛЕНИЕ ПАМЯТИ ------------------------------------- ALASM позволяет pаботать одновременно с несколькими текстами, расположенными в разных страницах памяти пользователя. Переход от редактирования одной страницы к другой осуществляется вводом команды paGe [страница] из рабочей строки асемблера либо по команде SS/ENTER, которая позволяет удобно выбирать нужный файл из появляющегося списка. Количество текстов, которые может обрабатывать ALASM, зависит только от объема памяти компьютера. Страницы в ассемблере нумеруются по маске максимального зна- чения, передаваемого в драйвер расширенной памяти. При этом его младшие 3 бита соответствуют битам, передаваемым в порт #7FFD. При запуске ассемблера проводится тест памяти по всем восьми битам номера страницы драйвера. Его результаты выводятся на экран в виде XXXX kB mask XX. Числа указывают, сколько памяти доступно ассемблеру на Вашем компьютере и какие биты номера страницы отвечают за доступ. По этим битам маскируется операнд команды PAGE и других команд. Стек для нормальной работы ALASM и оверлеев не должен быть выше #5fff !!! - 2. КОМАНДЫ СРЕДЫ АССЕМБЛЕРА --------------------------------- Список этих команд может быть получен на экране нажатием клажиши "H" (HELP). Выполнение любой команды может быть прервано нажатием BREAK. Если в результате выполнения команды может быть потерян текст, то, если он был изменен, выводится запрос на его сохране- ние: File changed. Save(Y/N)? В систему команд среды ассемблера входят: - Help Вывод на экран списка команд, доступных в ассемблере и редакторе. Данная команда является оверлейной, поэтому при необходимости выведется запрос на подгрузку oверлея: Load overlay (Y/N)? - Quit [адрес][,страница] Выход из ассемблера. В случае, если параметры не заданы, проис- ходит выход через дно стека, в противном случае осуществляется безусловный переход по указанному адресу в указанную страницу. - Debug Выход в отладчик STS. При отсутствии в странице 7 монитора выдается соответствующее сообщение. - Run [адрес][,страница] Запуск программы. По умолчанию параметр "адрес" принимает значение последней директивы ORG, а параметр "страница" - 0. - Work [drv:][filename[.ext]] Загрузка файла в текущую рабочую страницу. По умолчанию задается расширение "H". "filename" может представлять собой маску. В этом случае будет загружен первый файл, который ей удовлетворяет. В случае, если параметр "filename" не введен, то пользователю предоставляется возможность выбрать файл из каталога текущего или указанного диска. - Catalogue [drv:][mask] По умолчанию задается "*.*" (все файлы). Выводит на экран каталог диска. Формат маски определяется следующим образом: знак "?" определяет, что в данной позиции может находиться любой символ. Знак "*" определяет, что, начиная с данной позиции, все символы могут принимать произвольные значения. При достижении ограничителя (символ "." или конец строки) предполагается, что остальная часть строки заполнена символами "ПРОБЕЛ". - Name [newfilename[.ext]] Сменить имя файла в текущей странице на новое. - Edit [дисковод:][имя файла] Переход к редактированию файла в текущей странице. В случае, если задан параметр "имя файла", файл с таким именем загружа- ется в текущую страницу. Если же файл на диске не найден, в текущей странице создается новый файл с введенным именем. - Merge [дисковод:]имя файла Подгрузка текстового файла формата ALASM в конец текущего файла. - counT арифметическое выражение Производит вычисление указанного арифметического выражения. Ре- зультат вычислений выводится в десятичной, шестнадцатиричной, бинарной системах, а также в ascii. - sYmbol [маска|-|числовое выражение] Позволяет выводить на экран список меток по маске, неопределен- ных меток, а также меток по их значению. Команда выполняется только в случае, если до этого была произ- ведена компиляция. В качестве атрибута метки могут выводиться следующие сообщения: число - Значение метки, определенное при компиляции; NoDef - Метка не была определена, но была использована; Macro - Метка представляет собой имя блока макроопределения; Wrong - Формат метки не определен вследствие ошибок компиляции. - Assemble Производит компиляцию текста в текущей странице, начиная с пер- вой строки. По окончании компиляции на экран выводится сообщение: Symbols: AAAAA-BBBBB-CCCCC где: AAAAA - адрес последней записи в POST SYMBOLS PAGES (растет снизу вверх) BBBBB - в SYMBOL LIST PAGE (растет сверху вниз); CCCCC - в MACRO PAGE. - Save [+][drv:] Запись на диск отредактированного текста. При указании параметра "+" на текущий или указанный дисковод записываются все файлы, у которых установлен маркер изменения. В противном случае на диск записывается текущий файл. - Info Выдает на экран номер версии, список номеров системных страниц памяти и файлов, находящихся во всей памяти компьютера. Кроме того, выводится признак измененности файла '+', а также или счетчик ошибок данной страницы предыдущей компиляции, или, если оных не оказалось, первую строку текста. (Отрубается в конфиге) - paGe [номер страницы] Переход к странице, указанной в качестве параметра "страница". До следующего изменения параметра команды PAGE указанная страни- ца становится текущей и все команды для текущих страниц будут выполняться над ней. - driVe drv: Указанный дисковод становится текущим - Jumb [+] Без параметра производит сканирование текста в текущей странице с целью замены директив "-" на "+" (эта операция автоматически производится при загрузке каждого файла с диска). С параметром [+] производится сканирование всех текстов, найденных в памяти. - SS/ENTER Выбор редактируемого файла из находящихся в памяти. - Ban [+] Эта команда предназначена для очистки страницы текста. Следующие команды являются, как и HELP, оверлейными: - conFig Ввод этой команды в рабочей строке ассемблера позволит Вам перейти в режим SETUP, в котором можно изменять конфигурацию текущего сеанса работы и сохранить ее на диск непосредственно в тело al42_443.C (или al64_443.C в 64 символьной версии) Параметры конфигурации переустанавливаются сразу же после их изменения. - impOrt [drv:][mask] Производит конвертирование текстовых файлов во внутренний формат ALASM. При импортировании опционально производится перевод токенов в верхний регистр и разрыв строк по двоеточию вне "строк". После ввода команды предлагается выбрать файл из соответствующего маске списка. Затем необходимо указать номер страницы, куда будет импортирован файл. Если страница содержит измененный файл, ALASM предложит его записать. В случае перепол- нения страницы оставшаяся часть файла может быть импортирована в другую страницу. - eXport [+][drv:] Производит запись на диск текущего или всех исходников в формате обычного текста. Код конца строки - #0d,#0a - 3. КОМАНДЫ РЕДАКТОРА ---------------------------------------- При входе в окно редактирования экран разбивается на две части: окно редактирования и информационная строка, в которой отображается номер страницы текущего файла, его имя, количество свободной памяти в этой странице, количество байт, перенесенных в карман (если это число не равно 0), адрес текущей строки в тексте, размер текста и текущий режим редактирования (Ins/Ovr). В процессе редактирования пользователю доступны сервисные команды обслуживания текста, однако в отличие от среды ассембле- ра, результат их выполнения не отображается на экране в виде текстового сообщения, а контролируется самим пользователем. Список команд редактора асемблера ALASM: - Quit Выход из редактора в среду асемблера. - Begin Переход к началу текста. - End Переход к концу текста. - Search [строка символов] Поиск строки символов по тексту. Поиск начинается с позиции, следующей за текущей позицией курсора и продолжается до конца текста. При остановке поиска он может быть продолжен путем ввода комбинации SS/I, причем если такая командя дана за концом пос- ледней строки текста, поиск будет начат с его начала. Если пара- метр "строка символов" не указан, то будет использована строка, введенная в предыдущий раз. - sYmbol [имя метки] Поиск описания метки по тексту. При поиске предполагается, что первый символ имени метки находится в нулевой позиции. - Xreplace строка1Ўстрока2 Замена строка1 на строка2. Выдается запрос "REPLACE(Y/N/G)?" Y-заменить, N-искать дальше, G-заменить все. - coDe XXX>[код символа] Ввод в текст символа с произвольным кодом. XXX показывает код символа под курсором. - Restore Копирование содержимого кармана в позицию курсора. После этой операции сбрасывается флаг разрешения дополнения кармана. - Clear Очистка кармана. - Ins/ovr Смена режима редактирования: вставка/замена. - Undo Отмена изменения строки (действует только на текущую строку) - Labels На экран выдаются все 'главные' метки - метки, стоящие в начале пустых строк :) Далее можно выбрать нужную метку или нажать бре- ак. Клавиши в режиме редактирования: SS/I - продолжение поиска; SS/Q - удаление текущей строки. При выполнении этой команды удаляемая строма автоматически переносится в карман, но _только_в_том_случае_, если он не был занят другой информацией; SS/W - вставка пустой строки. Текущая строка сдвигается вниз; SS/E - копирование текущей строки в карман. После этой команды курсор перемещается на следующую строку; CS/SP - табуляция или rus/lat (в конфиге можно сменить местами) CS/1 - Rus/Lat или табуляция (настраивается в конфиге) CS/2 - вставка пробела в позицию курсора. Остальная часть строки сдвигается вправо; SS/EN - на экран выводится список файлов, в котором с помощью курсора выбырается нужный для редактирования; Особенности редактора версии 4.44 1. Режим вставки: - вставка символа производится со сдвигом остатка слова вправо. Словом считается последовательность символов, не имеющая более одного пробела подряд. Например, при вводе метки в строку с мнемоникой, мнемоника не будет сьезжать вправо. - при перемещении влево (cs/5) курсор помещается на первый непробел слева. - при перемещении вправо (cs/8) курсор помещается на первый непробел справа или на следующую позицию табуляции если строка справа пустая. - Еnter разрывает строку. Если справа от курсора строка пус- тая, то после перехода в следующую строку курсор сдвигается на одну табуляцию (8 символов) - столбец мнемоник. - cs/9 удаляет символ под курсором. Если строка справа пустая, то производится склейка со следующей строкой (если результирую- щая строка не длиннее 64 символов) - cs/0 удаляет символ слева от курсора. Если нажат в начале строки - склеивает с предыдущей. 2. В режиме замены никакой склейки и разрезки нет. Режимы Ins/Ovr меняются через Ext/I 3. В 42-символьной версии для редактирования доступны строки длинной 64 символа. - 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 --- INCLUDE "дисковод:имя файла"[,страница] Включение в компилируемый файл дополнительного текстового блока, записанного на диске под именем "имя файла". При этом указанный файл загружается в страницу, определенную параметром "страница" (по умолчанию - текущая). По окончании компиляции включенного блока компиляция продолжается со строки, следующей после данной директивы. Особенностью данной директивы является то, что файл, указанный в ней, не будет загружаться с диска, если он уже нахо- дится в необходимой странице. Пример: 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 --- DEFM "строка символов"[,"строка символов"] Резервирование строки символов. --- 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 количество повторений[,список байт] Список байт (по умолчанию - 0) копируется в текущий адрес компи- ляции. Число циклов равно параметру "количество повторений". Пример: DS 10,#E5 DEFS 32,#ED,#B0 --- +<директива ассемблера> При загрузке текста с диска он сканируется на наличие в нем указателей "+" в начале каждой строки. В процессе компиляции все встреченные указатели "+" будут заменены на "-", что ука- жет компилятору на отсутствие необходимости компиляции строки при следующем ассемблировании. Пример: LD HL,#DB00 +SAVEADR + ORG #DB00,7 + INCBIN "sts7.5a" +ORG SAVEADR JP (HL) ;основной файл отладчика будет загружен только при первой ком- ;пиляции текста, содержащего эти команды. --- метка=выражение Переприсвоение значения уже существующей метки. Пример: SHLUSS EQU 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 Если выражение <выражение>=0, то компилируется <тело2>, иначе <тело1> Допускается вложенность условной компиляции (максимально возможная - 254-я вложенность) --- LOCAL <тело> ENDL Объявление локальных меток. Все метки в пределах этой операторной скобки будут невидимы вне ее (кроме меток, начинающихся с символа @ - это глобальные метки). Допускаются и вложенные конструкции. Если в пределах локальных меток определять метки с именами, к которым обращались раньше этой конструкции, то такие метки будут глобальными: LD HL,LABEL LOCAL LABEL ENDL --- MACRO <имя_макросa> <тело> ENDM Определение макроса. В теле макроса могут быть использованы следующие дополнительные команды: :0 .. :9 - параметр номер 0,1,2,...9. :C - текущий символ :N - перейти на следующий символ (ничего не выдает) :R - установить указатель на начало строки параметров :S - строка от текущего символа до символа (сделано также само, как и в TASM4.12) --- <имя_макроса> [параметр1[,параметр2[...]]] Запустить макрос в действие. Если параметр не заключен в кавычки, то все пробелы около него удаляются при передаче макросу (сделано для того, чтобы меньше на стеке мусорить). Разделителем параметров служит исключительно запятая (запятая, заключенная в кавычки не считается разделителем). Пример использования макросов: MACRO DOWN LOCAL INC :C LD A,:C AND 7 JR NZ,LABEL LD A,:N:C SUB #E0 LD :C,A JR NC,LABEL LD A,:R:C SUB 8 LD :C,A LABEL ENDL ENDM Теперь мы можем процедуру DOWN HL и DOWN DE скомпилировать по их именам - DOWN HL, DOWN DE и т.д. --- 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 --- Половинки IX и IY адресуются как HX и HY, LX и LY. Также компилируются недокументированные команды типа INF. - 5. Калькулятор ---------------------------------------------- Выражение расчитывается слева направо без приоритетов (кроме скобок). Могут присутствовать операторы: a+b - сложение a-b - вычитание a*b - умножение a/b - деление a&b - операция AND a|b - операция OR a!b - операция XOR a>b - циклический сдвиг слова a на b позиций вправо a