Skip to content
svo edited this page Mar 14, 2015 · 1 revision

Introduction

This is a partially salvaged MicroDOS manual. MicroDOS is a CP/M-like system designed primarily to work within the constraints of a floppyless system with a RAM disk. It was however used with floppies as well.

Contents

The Manual Verbatim

             1. НАЗНАЧЕНИЕ ОПЕРАЦИОННОЙ СИСТЕМ  МикроДОС

     Операционная система (ОС) МикроДОС предназначена для более  эффектив-
ного применения БПЭВМ "Вектор-06Ц" при решении различных задач.  Совместно
с мощным прикладным программным обеспечением,  включающим компиляторы язы-
ков высокого уровня, средство организации баз данных, экранные редакторы и
т.п.,  ОС МикроДОС позволяет сократить затраты  по  созданию  программного
обеспечения на базе БПЭВМ "Вектор-06Ц". Применение резидентных команд Мик-
роДОС позволяет легко и просто управлять вычислительным  процессом.  В  ОС
МикроДОС для БПЭВМ "Вектор-06Ц" предусмотрены следующие резидентные коман-
ды:
        А - устанавливает 7-битовый код для обмена с консолью (КОИ-7);
        D - выводит  на  консоль   список   им н   файлов, находящихся в
            оглавлении диска;
        Е - удаляет имена указанных файлов из оглавления;
        К - устанавливает 8-битовый код для обмена с консолью (КОИ-8);
        О - изменяет количество системных дорожек на указанном диске;
        S - назначает ситемное дисковое устройство;
        U - изменяет текущий код пользователя;
        0 - устанавливает параметры ввода/вывода;
        1 - осуществляет запись файла из оперативной памяти на диск;
        2 - копирует файлы с магнитной ленты на диск;
        3 - записывает файлы с диска на магнитную ленту;
        5 - переименовыает файлы;
        8 - производит проверку электронного диска.
     В состав  МикроДОС для БПЭВМ "Вектор-06Ц" включены следующие транзит-
ные утилиты:
        FORMAT - форматирование гибких магнитных дисков;
        SYSGEN - копирование  операционной  системы  МикроДОС  на  гибкие
                 магнитные диски.
     Для БПЭВМ "Вектор-06Ц" предусмотрены два варианта операционной ситемы
МикроДОС:
        - первый  вариант  предусматривает   наличие  только  электронного
          диска  с  именем  только  дискового   устройства  А: .  Загрузка
          первого  варианта   ОС   МикроДОС   осуществляется    только   с
          магнитной ленты.
        - второй вариант предусматривает   наличие  накопителя  на  гибких
магнитных    дисках   с   именами  дисковых устройств А:  и В:  ,  а также
электронного диска с именем дискового устройства С: . Загрузка второго ва-
рианта  ОС  МикроДОС  может быть выполнена как с магнитной ленты,  так и с
гибкого магнитного диска с именем А: при условии наличия в ПЗУ БПЭВМ "Век-
тор-06Ц" загрузчика с гибкого магнитного диска (LOADOS).

                  2. ЗАГРУЗКА ОПЕРАЦИОННОЙ СИСТЕМ  МикроДОС

        2.1. Загрузка МикроДОС с магнитной ленты.
     Успешное завершение   загрузки   определяется   миганием   индикатора
РУС/ЛАТ. По окончании загрузки передачу управления МикроДОС производят од-
новременным нажатием клавиши СБР и БЛК.  Для передачи управления ОС Микро-
ДОС с автоматическим форматированием электронного диска необходимо удержи-
вая клавишу УС нажать и отпустить клавиши СБР и БЛК, затем отпустить УС.

     С манитной ленты возможна загрузка двух вариантов ОС МИкроДОС.

                                  - 2 -

        2.2. Загрузка МикроДОС с гибких магнитных дисков.
     Загрузка ОС  МикроДОС с гибких магнитных дисков производится одновре-
менным нажатием клавиш ВВОД и БЛК. При этом диск с ОС МикроДОС должен быть
расположен на дисковом устройстве с именем А:  .  Успешное завершение заг-
рузки определяется миганием индикатора РУС/ЛАТ. Передача управления Микро-
ДОС  осуществляется  одновременным нажатием клавиш СБР и БЛК или удерживая
клавишу УС нажать и отпустить клавиши СБР и БЛК,  затем отпустить УС  если
необходимо форматировать электронный диск.

                  3. ВЗАИМОДЕЙСТВИЕ ПОЛ ЗОВАТЕЛЯ С МикроДОС.

        3.1. Командные строки в МикроДОС.
     Пользователь общается с МикроДОС с помощью командных  строк,  которые
вводятся  пользователем с клавиатуры.  Нажатие клавиши ВК служит признаком
окончания ввода командной строки. По окончании ввода командной строки про-
исходит  выполнение  введ нной  команды.  Затем на экран выводится текущая
подсказка - приглашение пользователю вводить следующую командную строку, и
такой диалог пользователя с МикроДОС продолжается далее.
     До нажатия клавиши ВК пользователь может при необходимости  исправить
замеченные им ошибки в набранном тексте командной строки.
     Для редактирования командных строк используются следующие управляющие
символы:
        УС - Е - перейти в начало новой строки экрана;
        УС - Н - удалить последний введ нный символ с экрана;
        ЗБ     - удалить последний введ нный символ с экрана;
        <-     - удалить последний введ нный символ с экрана;
        УС - I - выполнение горизонтальной табуляции;
        УС - R - показать отредактированную командную строку;
        УС - Х - удалить командную строку с экрана;
        УС - ^ - удалить последнее введ нное слово с экрана.
     В момент выдачи подсказки содержимое буфера консоли оста тся неизмен-
ным до ввода первого печатного сивола с клавитуры,  который изменяет преж-
нее содержимое буфера консоли и начинает формирование его нового  содержа-
ния.
     В ответ на подсказку ОС можно продолжить работу с прежним  содержимым
консоли,  если  ввести управляющий символ УС-W.  При этом на экран консоли
будет выведено текущее содержимое буфера консоли,  а курсор будет располо-
жен после него.
     Основным элементом каждой командной строки является команда,  которая
состоит из имени и необязательных параметров. Имя в командной строке может
быть одним из следующих двух типов:
        - резервным словом (символом) самой МикроДОС;
        - названием   дискового    файла    типа     .СОМ   или     .SPR,
          содержащего   программу,  исполняемую  в   Области   Транзитных
          Программ (ОТП).
     Программы с  резервируемыми  в  МикроДОС  именами реализуют некоторые
основные функции ОС. Так как соответствующие им программные коды постоянно
находятся в оберсти оперативной памяти,  занимаемой ОС, то их называют ре-
зидентными утилитами.  Резидентные  утилиты  позволяют  управлять  работой
внешних  устройств  БПЭВМ (консоли,  печатающего устройства,  дисководов и
т.п.).
     Программа, оформленная в виде файла типа .СОМ,  по мере необходимости

                                  - 3 -
загружается в ОТП и выполняются нужные действия в соответствии с заданными
в  командной  строке  значениями параметров.  Поставляемые пользователю на
дискете с МикроДОС программы называются транзитными утилитами МикроДОС.
     Если первым символом строки является ";" (точка с запятой),  то такая
командая строка рассматривается интерпретатором команд МикроДОС  как  ком-
ментарий.
     Если первым символом командной строки является  символ  ":"  (двоето-
чие),  то вопрос в том, выполнять или не выполнять данную команду решается
интерпретатором в зависимости от успешного выполнения  предыдущей  команды
(код возврата).
     Указанная возможность условного выполнения команд позволяет пользова-
телю  разрабатывать  гибкие командные файлы,  которые в своей работе могут
оперативно учитывать изменение тех конкретных условий,  в которых они  вы-
полняются.

        3.2. Код пользователя

     При работе каждому пользователю присваивается числовой десятичный код
от 0 до 15,  называемый кодом пользователя,  такой,  что программам  этого
пользователя  на всех дисках БПЭВМ оказывается доступной только подобласть
данных с номером,  соответствующим этому коду (а также часть системной по-
добласти данных).  Важно то,  что осуществляется защита подобластей данных
от модификации - изменять или удалять  данные  каждый  пользователь  может
только в своей области данных.  Подобласть данных с номером 0 обладает не-
которыми особенностями,  из-за которых ее называют  системной  подобластью
данных.   айловая система обеспечивает открытие файлов в режиме только для
чтения в системной подобласти (если  указанный  файл  имеет  установленный
сиситемный  артибут) в том случае,  если в текущей подобласти пользователя
указанный файл отсутствует. Это позволяет использовать программы с систем-
ным атрибутом, находящиеся в подобласти пользователя 0 на системной дорож-
ке из любых подобластей пользователя, поэтому нет необходимости хранить их
в каждой подобласти пользователя.
     Изменять свой код пользователь может с помощью резидентной команды U,
указав новый (десятичный) код в качестве параметра вызова.

        3.3. Идентификация файлов
     Каждый файл идентифицируется с помощью имени файла.  В общем виде имя
файла зада тся как:
          V:ИМЯ.ТИП,
        где V:  - имя дискового устройства, на котором    расположен файл;
            ИМЯ - имя файла, состоящее максимум из 8 символов;
            ТИП - расширение имени файла (или  тип  файла),  состоящее  не
                  более чем из тр х символов.
     Имя дискового  устройства в имени файла можно не указывать.  Если имя
дискового устройства не указано,  то к имени файла МикроДОС  автоматически
приписывает имя зарегистрированного в данный момент дисковода.
     Для записи имени файла используется латинский алфавит, возможно также
применение  цифр  и некоторых специальных символов.  Внутри имени файла не
должно содержаться пробелов и символов табуляции.  В имени и типе файла не
разрешается использование следующих символов:  ">",  "<",  ".",  ",", ";",
":", "=", "?", "*", "[", "]".
     Имя и  тип  файла разделяются точкой.  Вместе они образуют полное имя
файла.

                                  - 4 -
     В различных командах,  когда,  например,  указывается группа файлов с
одинаковыми именами или одного типа,  и нужно провести одну и ту же опера-
цию со всеми этими файлами,  можно использовать так называемое неявное имя
файлов. Неявное имя включает в свой состав специальные символы ? и *.
     По неявному  имени выполняется обработка группы файлов,  полные имена
которых соответствуют заданному образцу.  В таком образце может  полностью
отсутствовать  собственное имя или тип файла,  либо часть символов в имени
и/или типе файла заменяется символами *  и  ?.  Зв здочка  может  заменять
несколько  или все символы в имени или типе файла,  а знак вопроса - ровно
один символ в той же позиции.
     При запросе  на групповой поиск по неявному имени файла МикроДОС про-
веряет на совпадение только те символы,  которые явно указаны в определ н-
ных позициях.
        Примеры:
        А>D *.СОМ        на  экран  выводится  список  файлов, тип которых
                        СОМ.
        А>D BAS.*        на  экран  выводится  список  файлов  всех  типов
                        c именем BAS
        А>D А*.*        на экран  выводится  список файлов,  имена которых
                        начинаются с символа А.
        А>D А?В.СОМ        на  экран  выводится список   файлов  типа  СОМ        с
                        тр хсимвольными    именами ,   начинающимися  с  А        и
                        кончающимися В.
        А>D А??.*        на экран выводится  список  файлов  произвольного
                        типа с именами из тр х   символов, начинающимися с
                        А.

        3.4. Атрибуты файлов

     С каждым файлом могут быть связаны определ нные характеристики, назы-
ваемые атрибутами файла.  Эти характеристики указывают множество операций,
которые разрешается выполнять над файлами.  Атрибут зада тся одной из букв
(D, R, S и W):
        D - указывает  на  несистемный   файл,  доступ  к  которому  имеет
            только   пользователь    с     соответствующим   кодом.  Этому
            пользователю резрешается   читать,  модифицировать  и  удалять
            данный файл;
        R - файл  с  этим  атрибутом    предназначен  только  для  чтения;
        S - указывает на системный   характер  файла, его  не  разрешается
            модифицировать, однако   читать  его  может любой пользователь        с
            любым кодом;
        W - файл для чтения и записи, его можно  модифицировать и удалять.

                         4. РЕЗИДЕНТН Е КОМАНД  МикроДОСF

        4.1.Команды управления работой дисковой системы

        УС - С            - выполнить "горячий   старт"  МикроДОС.  В этом
                          случае  выполнение     текущей  программы  прек-
                          ращается,  файл   консоли  вывода   закрывается,
                          выполняется    процедура  "горячего  старта"  из
                          базовой    системы   ввода/вывода   (СБВВ).   Ни
                          обращений  к  дискам, ни сброса дисковой системы

                                  - 5 -
                          не  происходит:  и  текущий  диск  и текущий код
                          пользователя остаются прежними.
        D [V:][ИМЯ]       -  вывести  на       экран        таблицу   им н        файлов        в
                          оглавлении диска  (или в  части оглавления)  для
                          текущей  области  пользователя. Имя  файла может
                          быть задано в неявном виде.
        Е [V:]ИМЯ.ТИП     -  удалить дисковый файл  (или группу файлов) из
                          текущей  области   пользователя  на  диске.  Имя
                          файла может быть задано в неявном виде.
        О [V:][<число>] - показать на экране (или  установить)  число сис-
                          темных дорожек на дисках.
                          <число> - число системных  дорожек   на  текущем
                                    диске  или на  диске  V:,    если  имя
                                    диска задано.
                                    Если <число>  не  указано,  то пользо-
                                    вателю  на  экран   выводится    число
                                    системных   дорожек   на     указанном
                                    диске.
                                    Если   <число>  указано,  то  для ука-
                                    занного  диска  устанавливается  число
                                    системных дорожек, равное    параметру
                                    <число>.
        SV:                - назначить   системным  дисковое  устройство с
                          указанным именем.
        U [<число>]        - установить   код    новой    текущей  области
                          пользователя на дисках.
                          <число> - десятичный   код  пользователя от 1 до
                                    15.  Если    <число> не  указанно,  то
                                    устанавливается        нулевой     код
                                    пользователя.

        4.2. Команды управления вводом/выводом на консоль

        УС - F            - закрыть файл,предназначенный для консоли. Ввод
                          УС-F отменит   выполненные ранее  предназначения
                          консоли.
        УС - Q            - возобновить приостановленный вывод на консоль.
                          Ввод управляющего  символа УС-Q возобновит вывод
                          информации   на консоль,        приостановленный
                          командой УС-S.
        УС - S            - приостановить вывод на консоль.
        УС - W            - вывести на  экран  содержимое  буфера консоли.
        <[V:] ИМЯ.ТИП     - переназначить консоль ввода к дисковому  файлу
                          ИМЯ.ТИП. Параметр V: указывает  имя    дискового
                          устройства, на котором расположен  файл ИМЯ.ТИП,
                          заменяющий  консоль    ввода. По   этой  команде
                          МикроДОС  начинает    читать  и  последовательно
                          выполнять командные  строки из  дискового  файла
                          V:ИМЯ.ТИП.
                          Пример,
                          <SAVE.CMD
                          По этой команде   МикроДОС  начинает  выполнение
                          команд,  расположенных    в  файле  SAVE.CMD  на

                                  - 6 -
                          текущем  диске. Ввод   из  файла  консоли  ввода
                          прекращается при достижении конца  файла консоли
                          ввода  или   при обнаружении  ошибки      обмена        с
                          диском, а также, если  выполняющаяся   программа
                          пользователя (вызванная   командой     из  файла
                          консоли ввода)   выда т  запрос  к  операционной
                          системе  о приостановке е  вывода на консоль - и
                          в этом  состянии программы пользователь введ т с
                          клавиатуры  управляющий символ УС-F,прекращающий
                          дальнейший  ввод из файла консоли.
        >[V:]ИМЯ.ТИП      - переназначить консоль вывода к дисковому файлу
                          ИМЯ.ТИП. V: - имя дискового устройства на  кото-
                          ром должен быть расположен файл  ИМЯ.ТИП.  Пере-
                          назначение  консоли вывода позволяет  копировать
                          в файл ИМЯ.ТИП  всю  информацию,  которая  будет
                          выводиться  на  консоль.  айл   консоли   вывода
                          закрывается при выполнении  команды УС-С или при
                          обнаружении  ошибки  обмена   с  диском, а также
                          если    осуществлена  приостановка   вывода   на
                          консоль  с помощью команды  УС-S и в  этом  сос-
                          тоянии  пользователем введ н управляющий  символ
                          УС-F,  требующий закрыть  файл  консоли  вывода.
        А                 - дальнейший  обмен  с  консолью  вести  в  коде
                          КОИ-7.
        К                 - дальнейший  обмен  с  консолью  вести  в  коде
                          КОИ-8.

        4.3. Команда управления работой печатающего устройства.

        УС-Р              - переключить(т.е. включить или выключить) режим
                          дублирования   консольного  вывода на печатающее
                          устройство.   Ввод   управляющего  символа  УС-Р
                          включает ражим  дублирования консольного  вывода
                          на печатающее  устройство. Повторный ввод коман-
                          ды УС-Р  выключает  режим дублирования  консоль-
                          ного  вывода на печатающее устройство. При даль-
                          нейшем вводе   команды  УС-Р  будет  происходить
                          включение или   выключение  режима  дублирования
                          консольного  вывода  на   печатающее  устройство        в
                          зависимости от того, включен  или выключен режим
                          дублирования.

        4.4. Команда фонового выполнения других команд

        УС -D     - перейти в фоновый режим для выполнения любой резидент-
                  ной команды, отличной от  УС-D. Команда  УС-D  позволяет
                  перейти в фоновый  режим, когда  транзитная    программа
                  ожидает ввода одного символа или целого буфера  консоли,
                  выполняемой  функциями  базовой  дисковой   операционной
                  системы (БДОС) МикроДОС с номерами 1 или 10.

        4.5. Дополнительные команды
        О<число><режим> - устанавливает       параметры      ввода/вывода.

                                  - 7 -
                          Режим  R  -   определяет   скорость   считывания
                          информации   с   магнитной  ленты.   <число>   -
                          скорость  считывания  в шестнадцатиричном  виде.
                          Стандартное  значение - 4В,  предельное значение
                          - 24.
                          Режим W - определяет   скорость   записи  инфор-
                          мации  на  магнитную   ленту. <число> - скорость
                          записи  в  шестнадцатиричном        виде.
                          Стандартное  значение    -     32,    предельное
                          значение - 18.
                          Режим Р -  устанавливает  цвет   отображения   и       и
                          цвет      фона. <число>  -  шестнадцатиразрядное
                          число,   старший   байт    которого   определяет
                          цвет   фона,  а  младший  байт  -   цвет   отоб-
                          ражения.
                          Режим   L  - устанавливает  тип  и  режимы печа-
                          тающего устройства:
                          0 - тип  принтера  ROBOTRON, печать       данных        в
                              коде КОИ-7;
                          1 - тип  принтера EPSON  FX-85,  печать   данных
                              в  коде        КОИ-7   (прописные  латинские        и
                              русские);
                          2 - тип  принтера   EPSON   FX-85,  печать  про-
                              писных и   строчных  символов  с  переключе-
                              нием    латинского   регистра   на   русский
                              (1ВН, 52Н, 1Н)   и  наоборот (1ВН, 52Н, 0Н);
                          3 - тип  принтера  ROBOTRON, печать       данных        в
                              коде КОИ-8. При  печати  символов   русского
                              алфавита   используется  временное  переклю-
                              чение  регистров    печатающего  устройства;
                          4 - тип принтера   EPSON  FX-85,  печать  данных
                              в коде КОИ-8;
                          9 - тип  принтера    EPSON FX-800,  печать  дан-
                              ных в  коде   КОИ-7  (  прописные  латинские        и
                              русские);
                          А - тип  принтера  EPSON    FX-800,  печать про-
                              писных и строчных  символов  с переключением
                              латинского регистра на русский.
                          С - тип принтера  EPSON   FX-800, печать  данных
                              в коде КОИ-8.
                          При запуске  системы   устанавливается  режим 2.
                          Режим  М   - устанавливает       режим   печати.
                          Старший  байт   параметра    <число>  определяет
                          размер  страницы   в    дюймах,   младший   байт
                          определяет  расстояние   между  строками в 1/216
                          дюйма.
                          Пример,
                          0 612 М
                          Размер  страницы  6  дюймов.   Расстояние  между
                          строками 1/12 дюйма (18/216=1/12).
        0 Х А             - выводит на  дисплей управляющую последователь-
                          ность 1ВН,Х.  Где  Х  - 1  байт  в      шестнад-
                          цатиричном  виде.

                                  - 8 -
                          Программой драйвера  вывода на  дисплей последо-
                          вательность воспринимается как  управляющая, при
                          этом на экран ничего не выводится.
                          Например:
                          0 62 А
                          Режим вывода   символов в инверсном изображении.

        1 [V:]ИМЯ.ТИП     -осуществляет запись файла из оперативной памяти
                          на  диск V: или на  текущий  диск,  если  V:  не
                          указано.  На  диске  файлу   присваивается   имя
                          ИМЯ.ТИП.
        2 N [V:]ИМЯ.ТИП - копирует  N файлов с именем ИМЯ.ТИП  с магнитной
                          ленты   на  диск.  Имя  файла  может быть задано        в
                          неявном виде.
                          Пример,
                          2 3 *.*
                          Копирует 3 первые файла  с магнитной ленты.
        3 [V:]ИМЯ.ТИП     - записывает файл с именем ИМЯ.ТИП  на магнитную
                          ленту с диска.
        5 [V:]И1.Т1 И2.Т2 - переименовать файл  с именем И1.Т1 на диске V:
                          или на текущем диске,  если V: не указано.  айлу
                          присваивается новое имя И2.Т2.
        8                - производит   проверку       электронного  диска        с
                          выводом  на экран  информации   о      сбоях  на
                          диске. При  обнаружении   сбоя   на   диске   на
                          экран выводится  код      ошибки, номер  дорожки        и
                          номер  сектора. Ошибка   2      указывает,   что
                          произошел  сбой  данного   сектора.       Ошибка        3
                          указывает  на  несовпадение  контрольных  сумм.

                             5. ТРАНЗИТН Е УТИЛИТ  МикроДОС

        5.1.  орматирование дисков.

     Утилита FORMAT.COM  предназначена для форматирования гибких магнитных
дисков.
     Предусмотерны шестнадцать  режимов  форматирования  гибких  магнитных
дисков с удвоеннной плотностью (объ м сектора - 1024,  512 и  256  Кбайт),
позволяющие  производить одностороннее и двухстороннее форматирование 40 и
80 дорожечных гибких магнитных дисков.

         ормат запуска на выполнение:
        FORMAT.COM [V:]
        V: - имя   дискового  устройства,  на  котором будет производиться
             форматирование  диска. Если V: не  указано, то  запрос  имени
             дискового   устройства   будет    осуществляться   программой
             FORMAT.COM в процессе выполнения.
     Выполнение программы начинается выводом на экран таблицы режимов фор-
матирования и сообщения:

        В БЕРИТЕ РЕЖИМ  ОРМАТИРОВАНИЯ ДИСКА -

     После выбора  режима  форматирования  на  экран  выводятся  возможные

                                  - 9 -
расположения секторов на дорожках диска и сообщение:

        В БЕРИТЕ КОД РАСПОЛОЖЕНИЯ СЕКТОРОВ НА ДОРОЖКЕ ДИСКА -

     Необходимо указать код расположения секторов на  дорожке  диска.  Для
обеспечения  оптимальных  скоростных  режимов  обмена  с  гибким магнитным
диском в режиме форматирования 1 (800 Кбайт)  рекомендуется  задавать  код
расположения секторов 2 или 3.
     После этого, если не был задан параметр V:, программа FORMAT.COM зап-
рашивает дисковое устройство, на котором будет выполняться форматирование:

        УКАЖИТЕ ИМЯ ДИСКОВОГО УСТРОЙСТВА (А,В) -

     Необходимо указать имя дискового устройства. Выводом на экран сообще-
ния:

        ВНИМАНИЕ! ИН ОРМАЦИЯ НА ДИСКЕ <V:> будет разрушена !!!
         ОРМАТИРУЕТСЯ ДИСК УСТАНОВЛЕНН Й В УСТРОЙСТВО <V:> (Y/X) ?

     программа FORMAT.COM  требует  подтверждения (Y) продолжения процесса
форматирования.
     В процесе  форматирования  информация о сбойных секторах выводится на
экран в виде:

        ОШИБКА ДИСКА ( ДОРОЖКА/СТОРОНА/СЕКТОР) - Х/Х/Х

        После окончания форматирования на экран выводится:

        ВСЕГО СЕКТОРОВ НА ДИСКЕ - <число секторов>
        ВСЕГО ОШИБОК НА ДИСКЕ - <число сбойных секторов>
         ОРМАТИРОВАТ  ЕЩ  (Y/X) ?

     Если ответить нет,  то программа FORMAT.COM заканчивает работу.  Если
ответить Y, то на экран будет выведено сообщение:

        ТОТ ЖЕ  ОРМАТ (Y/N) ?

     Ответ N  позволит продолжить выполнение программы с выбора нового ре-
жима форматирования.
     Ответ Y  оставляет  прежний режим форматирования и на экран выводится
запрос дискового устройства, на котором будет форматироваться диск.
     Таким образом,  одной командой FORMAT можно форматировать любое коли-
чество дисков, выбирая различные режимы форматирования.

        5.2. Копирование МикроДОС.

     Утилита SYSGEN.COM предназначена для записи МикроДОС на системные до-
рожки магнитного диска.
         ормат запуска на выполнение:

        SYSGEN [V:] ИМЯ.ТИП V1:<адрес>

    где,

                                  - 10 -
        ИМЯ.ТИП - имя и тип файла ОС МикроДОС;
        V:        - имя дискового  устройства,  на  который  записан  файл
                  ИМЯ.ТИП;
        V1:       -    имя    дискового   устройства        (А или В),  на        системные
                  дорожки     которого    должен    быть записан МикроДОС;
        <адрес> - шестнадцатиричное число, определяющее  адрес   начальной
                  загрузки  МикроДОС в   опреативную  память (для МикроДОС
                  <адрес> равен 100).
     Если не  указано V:,  то поиск файла осуществляется на текущем диске.
При выполнении программы SYSGEN.COM на экран выводятся седующие сообщения:

        ЗАПИСАТ   АЙЛ НА СИСТЕМН Е ДОРОЖКИ <V1:> (Y/N) ?

     Для записи МикроДОС на системные дорожки необходимо ответить Y.

        ЧИСЛО ДОРОЖЕК НА СОРОНЕ ДИСКА 80 (Y/N) ?

     Необходимо ответить Y,  если число дорожек 80 или N, если число доро-
жек 40. При ответе N на экран выводится:
        ТОГДА, 40 - ДОРОЖЕК
        ЧИСЛО СТОРОН ДИСКА - ДВЕ (Y/N) ?

     Необходимо ответить  Y,  если  гибкий магнитный диск форматирован как
двухсторонний или N,  если гибкий магнитный диск форматирован как односто-
ронний. При ответе N на экран выводится:

        ТОГДА, ДИСК ОДНОСТОРОННИЙ

     По окончании  записи МикроДОС на диск производится контрольное считы-
вание с выводом на экран результатов контрольного считывания. Прич м, зна-
ком  "+"  отмечаются  правильно считанные сектора,  а знаком "-" - сбойные
сектора.


        5.3. Программа вывода текстовых файлов на дисплей - TYPE

     Если у  пользователя  появляется  необходимость просмотреть текстовые
файлы,  хранящиеся на дискете,  можно воспользоваться программой TYPE. Эта
программа  выводит  заданный  в командной строке текстовый файл на консоль
пользователя в кодах ASCII.
              ормат команды:
                   TYPE B:<имя.тип>.

        5.4. Программа загрузки "Бейсик"-файлов - RUN

     Программные средства обмена между магнитной лентой и дискетой  позво-
ляют на диске сохранять файлы в формате бейсика (входящего в базовое прог-
раммное обеспечение). Сам "Бейсик" не имеет возможности загрузить програм-
му прямо с дискеты. Для запуска этих программ непосредственно с диска слу-
жит программа RUN. Имя запускаемой программы указывается в командной стро-
ке и должно обязательно иметь расширение BAS:

                   RUN C:FILE.BAS

                                  - 11 -

        5.5. Средства обмена информацией с магнитной лентой в форматах
                   загрузчика (ROM), монитора (MON), бейсика (BAS)

     Для обмена и хранения программного обеспечения ПК "ВЕКТОР-06Ц" разра-
ботан ряд программ, позволяющий в соответствующем формате осуществлять об-
мен файлами между дисками и магнитной лентой.
     Рассмотрим наиболее часто используемые программы этого пакета:
     SAVEROM - выгрузка файла с диска на ленту  в  формате  загрузчика  ПК
"ВЕКТОР-06Ц". Командная строка этой команды выглядит следующим образом:

                   SAVEROM FILE XXYY

     где XX  -  номер первого выгружаемого блока (1блок-256 байт),  а YY -
двухбитовое число. Если старший бит установлен в единицу, то выгрузка осу-
ществляется двойными блоками. В противном случае - одиночными. Установка в
еденицу младшего бита в дальнейшем не разрешит копировщику копировать дан-
ную  программу.  Оба  числа записываются в шестнадцатиричном виде как один
адрес (без пробела между ними).

     LOADROM -  загрузка программы с ленты на диск в формате загрузчика ПК
"ВЕКТОР-06Ц". Командная строка:

                   LOADROM FILE

     В обоих случаях FILE - это имя на диске.

     SAVEBAS - выгрузка с диска на ленту в формате Бейсика.
     Командная строка:
                   SAVEBAS FILE "имя программы на бейсике"

     LOADBAS -  загрузка программы,  написанной на языке Бейсик с ленты на
диск. Командная строка для загрузки:

                   LOADBAS FILE "имя программы на бейсике"

     Также как и для программы LOADROM, FILE - имя программы на диске. Имя
программы на Бейсике можно опускать, но двойные кавычки для синтаксиса ко-
манды обязательны.

     SAVEMON - выгрузка с диска на ленту в формате монитора-отладчика. Ко-
мандная строка:
                   SAVEMON FIE ADR "MON"

     где MON - имя программы в формате монитора,  ADR - адрес в ОЗУ компь-
ютера, куда монитор-отладчик будет загружать программу при считывании ее с
ленты.
     LOADMON - загрузка программы в формате монитора-отладчика на  диск  с
магнитной ленты. Командная строка:

                   LOADMON FILE "MON"

     Как и выше FILE - имя файла на диске. Имя "MON" допускается опускать,

                                  - 12 -
но наличие двойных кавычек обязательно.
     После загрузки с ленты все программыа выдают  краткую  характеристику
загруженной программы:  распределение в памяти (загрузчик и монитор),  имя
программы,  контрольную сумму.  При выгрузке на  ленту  программы  выводят
соответствующие  контрольные суммы файлов.  В случае ошибок - несовпадения
контрольной суммы,  отсутствия файла на  диске,  недостаточного  места  на
дискете - выдаются соответствующие предупреждающие сообщения.

        5.6. Многоцелевая сервисная программа - POWER

     Программа позволяет  расширить функции операционной системы CP/M Мик-
роДОС. Несколько общих замечаний по работе с POWER:
     1. В качестве разделителя везде используется 'ПРОБЕЛ'.
     2. Для выхода на подсказку POWER (A0=) в любой момент
        нажмите АР2.
     3. При использовании нескольких ключей разделители не нужны.
     4. При выводе на дисплей:
                  - нажатие 'ПРОБЕЛа'     - построчный вывод;
                  - нажатие 'ВК'          - постраничный вывод;
                  - любая другая клавиша - без остановок
                                           ( до нажатия 'ПРОБЕЛа' );
                  - нажатие клавиш  0...9 - управление скоростью вывода.

        ?        - вывод перечня команд

        CHECK        - подсчет контрольных сумм указанных файлов и   общей
                     контрольной суммы

        CM               - сравнение двух областей памяти
                         A0=CM 5500 6000 7200

        COPY [KEY]     - копирование файлов
                         ключи: RРО "КОПИРОВАТ  ? (Y/N)"
                                     (для каждого файла).
                                V - проверка.
                                T - если  все   файлы  не  помещаются,  то
                                    COPY прерывается.
                                M - помещает в каталоги пометки  исходного
                                    (<) и конечного (>) диска
                                    (т.е. откуда/куда копировалось).
                                Q - позволяет копировать на  тот же диск с
                                    переименованием  (устанавливается  для
                                    каждого копирования).

                         Если файл существует, выдается сообщение:
                         FILE EXISTS,<B>ACUP, <O>VERVRITE, <S>KIP:
                         B - создать файл типа .BAK;
                         O - переписать;
                         S - не копировать (обойти).

        DIR [KEY]      - показать оглавление диска
                         вхождение каждого ключа опционально:
                         U- оглавление всех областей пользователя;

                                  - 13 -
                         X- оглавление всех дисков;
                         N- число колонок каталога на экране.

        DISK                 - информация об организации диска.

        DS                 - просмотр и заполнение памяти
                         A0=DS ADR
                         изменение вида вводимой информации:
                         .A - ввод в ASCII, .H - HEX,
                         .D - десятичный, .B - двоичный.
                         В  столбце  ASCII  -  C означает, что старший бит
                         =1, а ^ означает, что это управляющий символ.

        DUMP ADR1 ADR2
                         DUMP - вывод текстового файла(с форматированием);
                         DUMPX -  ASCII+HEX;
                         DUMPH -  HEX;
                         DUMPA -  ASCII.
                         DUMP и DUMPA     останавливают     вывод  ,  если
                         встречают ^Z (EOF).
                         при   повторном    вызове DUMP можно использовать
                         неполное задание границ массива:
                            DUMP ADR,N -  N байт от ADR
                            (по молчанию N=128, ADR - следующий)
                            DUMP,,   - всю оставшуюся память.

        ERA               - стирание (удаление) файлов
                         ERA [R]  -"стирать ?(Y/N)" - для каждого файла.

        EXIT               - выход в операционную систему.

        FILL ADR1 ADR2 BYTE         - заполнение   памяти константой BYTE

        GO               - запуск программы
                         A0=GO FILE.TYP ADR PARAM
                         ADR   - адрес запуска
                         PARAM - параметры, адрес  который  передается  в
                                 программу через регистровую пару HL.

        GROUP               - список групп (блоков) данного файла.

        JP/EX               - передача управления по адресу
                         A0=JP ADR PARAM - оканчивается выходом в систему.
                         A0=EX ADR PARAM - оканчивается возвратом в POWER.

        LOAD/SAVE      - A0=LOAD TEST.COM ADR
                            SAVE TEST.COM ADR - если  TEST.COM   был  заг-
                            ружен LOAD;
                            SAVE TEST.COM   ADR NSEC /дес.число секторов/.
                            между LOAD и SAVE нельзя использовать команды,
                            выводящие нумерованный каталог.

        LOG               - информация о состоянии программы POWER

                                  - 14 -
                         параметры   по   умолчанию  могут устанавливаться
                         после A0=  , или после любой команды.
                         A0=[RV2]
                         A0=DIR [RV2]

        MOVE 100 3FFF 4100  - перемещение области памяти.

        READ/WRITE     - прямой доступ к диску
                           ДИСК <-> ПАМЯТ 
                         A0=READ 2 10 5000 14
                         /дорожка - сектор - адрес - число секторов/
                         (адрес по умолчанию 80h, число секторов -1)
                         A0=WRITE A:2 18 4000
                            ДИСК <-> ЭКРАН
                         A0=READ 2 10 <вид чтения> N
                                      виды чтения:  X  - HEX+ASCII
                                                    XH - HEX
                                                    XA - ASCII

        READGR/WRITEGR   - обмен  с   диском  (  с использованием  номеров
                         групп блоков)
                         A0=READGR 5 4000 8
                         /5 - номер группы HEX, 8 - число секторов (дес.)/
                         можно выводить и на дисплей (см. READ).

        RECLAIM        - восстановление стертых файлов
                         A0=RECAIM   /перечисляет все стертые файлы/
                         A0=RECAIM  FILE.TYP  /восстанавливает файл/

        REN               - переименование
                         MOVE.COM=NEW NAME: *.BAK   /имя оставить/
                         MOVE.COM=MOVE.BAK
                         групповое переименование
                         NEW NAME:*.BAK  /все файлы получат тип .вак/

        RESET            - сброс диска(аналогично ^C, но для одного диска)
                         A0=RESET D , где D = A,B,C...P

        RUN              - загрузка и передача управления другой программе
                         A0=RUN B:WM B:TEKST
                         авторестарт   - A0=[$]

        SEARCH           - поиск   символа, байта или текста в обл. памяти
                         A0=SEARCH 4000 6000 "???TEST" C3 ? ?
                         ( ? - любой символ ).

        SET              -установка старшего бита в коде символа имени или
                         типа файла
                         A0=SET [-NUMBER.CHAR]   (NUMBER=1-8, CHAR=R...R/O
                         S...SYS, X...EXTRA)
                         A0=SET  /показать текущую установку/
                         A0=SET [+NUMBER]  - сброс  SET'A
                         применение: A0=COPY [-3]

                                  - 15 -
                         /копирование файлов с 3-им битом=1/

        SETDIR/SETSYS/SETRO/SETWR     - установка аттрибутов файла

        SIZE             -  определение размеров файлов (с текущей суммой)

        SORT             - сортировка каталога
                         SORT 0 - несортированный каталог
                         SORT 1 - по именам
                         SORT 2 - по именам и системные в конце
                         SORT 3 - по типам
                         SORT 4 - по типам и системные в конце

        SPEED               - установка скорости вывода на дисплей
                         A0=SPEED N   /N=0...9/

        STAT               - информация о заполнении диска

        TEST               - тестирование диска
                         A0=TEST    /кроме 0 и 1 дорожек/
                         A0=TEST S  /вместе с 0 и 1 дорожкой/

        TYPE/TYPEX/TYPEH/TYPEA
                       - вывод текстового файла на терминал (см. DUMP)
                         ^K - переход к след. файлу (если задана группа)

        USER/XUSER     - использование областей пользователя
                         XUZER       - область, куда собираются копировать
                         A0-2=       -   готов копировать из 0 обл. во 2-ю
                         <C>OPY - копирование
                         <M>OVE - перенесение  (убрать из исходн. области)

             настройка программы   P O W E R

        настраиваемая область:           100 - 2FF   /4 сектора/
        длина строки дисплея:            118h - 01 - 40 символов
                                         FF - 64        "
                                         00 - 80        "
        размер экрана:                   105h - 00 - вывод без остановок
         (в строках)                     24 - экран ВТА2000-30 (дес.)
        гудок при ошибке:                112h - 00 - есть
                                         FF - нет
        формат DIR                       10Eh - 00 - формат CP/M
                                         01 - формат PW без номеров
                                         02 -    - " -   с номерами
        Авто УС+С                        116h - 00 - нет
                                         01 - есть ^C после команды
        DIR [X]                          160h - 00 - огл.всех зарег.дисков
                                         01 - DIR A
                                         02 - DIR A и B
        Авто-BACKUP                      16Eh - 00 - автоматич. .BAK
                                         FF - запрашивает
        Авторестарт  PW                  2F0h - FF - нет

                                  - 16 -
                                         00 - есть с активизир. диска
                                         01 - есть с A:
                                         02 - есть с B:
                                                и   т. д.
        место для нового имени PW:    02F1h - 02EFh.

             2.2.  Макроассемблер - MAC

     Основное назначение  программы MAC - преобразование некоторого специ-
ального текстового файла в файл, пригодный для дальнейшей отладки и форми-
рования  рабочей  программы.  Текстовый  файл на языке ассемблера (это от-
носится и к другим языкам) должен быть выдержан в  соответствии  со  всеми
принятыми ограничениями и условностями данного языка.
     Входной файл должен иметь расширение - MAC.  Если  таковой  файл  уже
есть, то его преобразование инициализируется следующей командной строкой:
                   MAC FILE [ $ [PY] [HY] [SY] ],
     где выражением  после  символа "$" определяются устройства на которые
будут выводится выходные файлы.  Всего после преобразования получается три
файла:
        FILE.PRN - файл для печати;
        FILE.HEX - HEX-файл (стандартный шестнадцатиричный формат фирмы
                    INTEL. Этот файл может быть преобразован в файл с
                    исполняемым машинным кодом;
        FILE.SYM  -  файл символьных меток;
     значение Y в командной строке может принимать значение:
     X, P,  A, B, C, Z. В каждой из трех пар символов, следующих за симво-
лом "$" Y может принимать свое значение.  Первая буква каждой пары говорит
о файле (P-PRN,  H-HEX,  S-SYM).  Вторая буква говорит об устройстве, куда
будет выводиться соответствующий файл.
     Соответствие букв устройствам следующее:
        X    -        дисплей;
        P    -        печатающее устройство;
        A-C  -        дисковое устройство (A:, B:, C:);
        Z    -        пустое устройство;
     По умолчанию  подразумевается,  что файлы будут выводиться на текущее
дисковое устройство.
     Дополнительно после символа "$" можно указывать
        AX   - определяет     имя    диска, на котором расположен исходный
файл   (     файл  с расширением "ASM").  Здесь "X" представляет собой имя
диска (вводится без двоеточия);
       +-LX, - определяет имя диска  на   котором расположены библиотечные
файлы,   содержащие    определения используемых в исходном файле макросов.
здесь  "X"  представляет собой имя диска или специальный символ.  Параметр
"+L" указывает на то,  что исходные строки,  прочитанные из  библиотечного
файла,  необходимо  распечатывать на консоли.  Параметр "-L" установлен по
умолчанию и используется для подавления такого рода печати;
       +-M   - управляет    распечаткой макросов в выходном файле  печати;
(   в    файле с расширением ".PRN").  Если указан параметр "+M",  то  все
макростроки по мере их обработки выводятся в файл печати.  Если указан па-
раметр "-M", то макросы в файл печати не выводятся;
       +-Q   - управляет    выводом   имен  типа LOCAL в файл таблицы имен
(  файл  с   расширением ".SYM").  Если указан параметр +Q,  то все  имена
типа  LOCAL  выдаются в файл таблицы символов.  Параметр "-Q" используется

                                  - 17 -
для подавления вывода в файл таблицы символов;
       +-S   - используется   для    указания , необходимо ли  добавитьа в
файл    печати   таблицу символов (содержимое файла с расширением ".SYM").
если указан параметр "+S",  то таблица символов добавляется в файл печати.
Если указан параметр "-S", то в файл печати ничего не добавляется;
       +-1 - используется в  процессе ассемблирования для задания вывода в
файл печати результатов первого прохода ассемблирования. Если указан пара-
метр "+1",  то в файл печати выдаются результаты первого прохода ассембли-
рования,  которые впоследствии могут быть использованы  для  отладки  мак-
росов. Параметр "-1" установлен по умолчанию и используется для подавления
вывода в файл печати результатов первого прохода ассемблирования.
     Макросредства данного  ассемблера включают в себя удобные для пользо-
вателя управляющие структуры,  операторы.  Допускается использовать доста-
точно сложные арифметические выражения. Рассмотрим некоторые из них:
        -    -        унарный минус (отрицательное целое число);
        +    -        сложение;
        -    -        вычитание правого операнда из левого;
        *    -        умножение;
        /    -        деление правого операнда на левый;
        MOD  -        получение остатка от деления (модуль);
        LOW  -        выделение младших 8-и бит 16-разрядного значения;
        HIGH -        выделение старших 8-и бит 16-разрядного значения;
        SHR  -        сдвиг левого операнда вправо на число разрядов,
                      указанное правым операндом;
        SHL  -        сдвиг влево (см. SHL);
        EQ   -        равенство. Истина, если операнды равны друг другу;
        NE   -        неравенство. Истина, если не равны друг другу;
        LT   -        истина, если левый операнд меньше правого;
        LE   -        истина, если левый операнд меньше или равен правому;
        GT   -        истина, если левый операнд больше правого;
        GE   -        истина, если левый операнд больше или равен правому;
             Побитовые логические операции:
        NOT  -        инвертирование битов операнда;
        AND  -        логическое  "и"  левого операнда с правым;
        OR   -        логическое "или" левого операнда с правым;
        XOR  -        исключающее"или" левого операнда с правым;
             Операции выполняются в соответствииа со следующими
        приоритетами:
             LOW, HIGH
             *, /, MOD, SHR, SHL
             Унарный минус
             +, -
             EQ, NE, LT, LE, GT, GE
             NOT
             AND
             OR,XOR
     Сначала вычисляются части  выражения,  включающие  операции,  которые
имеют  в  выражении более высокий приоритет.  Приоритет может быть изменен
путем заключения в скобки частей выражениям которым  необходимо  предоста-
вить более высокий приоритет.
     Все знаки операций,  кроме +,  -, * и /, должны быть отделены от опе-
рандов по крайней мере одним пробелом.
     В макроассемблере MAC допускаетсяа использовать различные  псевдоопе-

                                  - 18 -
рациим такие как:
        ORG  -          установка текущего значение программного счетчика;
        DB   -          определение байтов в памяти;
        DW   -          определение адресов в памяти;
        DS   -          резервирование памяти;
        EQU  -          определение символьных выражений;
        SET  -          в отличие от EQU, допускается переопределение
                        выражения в других строках исходного текста;
     Допускается также  использование  конструкций условного ассемблирова-
ния,  что дает возможность быстро перетранслировывать программные продукты
для различных конфигураций вычислительной системы.  Наиболее общее выраже-
ние такой конструкции:
             IF   <условие>
             ...
             ELSE
             ...
             ENDIF
             При необходимости определять большие регулярные массивы в
        MAC есть специальное средство - REPT. Например, массив состоящий
        из 256 элементовм каждый элемент которого на 1 больше предыдущего,
       можно определить следующим образом:
             X        SET        0
                REPT        256
                DB        X
             X        SET        X+1
                ENDM
     Для читаемости  программы программист в исходном тексте программы мо-
жет использовать макроопределения. Использование макроопределений позволя-
ет  сократить размеры исходного текста.  Макроопределение состоит из заго-
ловка и тела макроопределения. Заканчивается макроопределение словом ENDM:
        имя        MACRO [параметр1][,параметр2][,...]
             <тело макроопределения>
             ENDM
     Использование макроопределения заключается в том,  что отпадает необ-
ходимость писать в исходном тексте программы на ассемблере часто повторяю-
щиеся совокупности строк.  В текст вставляется лишь имя макроопределения с
указанием конкретных параметров.  Ассемблер в этом месте генерирует после-
довательность строк, составляющих тело макроопределения, подставляя в нуж-
ных местах конкретные параметры.
     Если приходится часто пользоваться определенным набором  макроопреде-
лений, рекомендуется пользоватьсяа псевдооперацией MACLIB. Для этого необ-
ходимо часто используемые макроопределения собрать в один файл типа "LIB".
А  в  файл,  где необходимо использовать этот набор макроопределений,  по-
местить строку :
             MACLIB <имя файла>
     Этот прием позволяет в значительной степени сократить размер исходных
текстов  программ,  улучшить их читаемость,  сократить время на разработку
программы.


        Назначение и условия применения макроассемблера.

     Макроассемблер -  это  компилятор с символического машинно-ориентиро-

                                  - 19 -
ванного языка  (языка  ассемблера).  Макроассемблер  преобразует  исходную
программу,  написанную на языке макроассемблера,  в перемещаемый модуль. В
дальнейшем с помощью компоновщика L80 модуль может быть скомпонован  (один
или с другими модулями) в программу, готовую к выполнению.
     Применение макросредств позволяет наиболее часто встречающиеся участ-
ки программы оформлять в виде макрокоманд.
     Использование макроассемблера значительно облегчает  написание  прог-
рамм и позволяет наиболее эффективно использовать все ресурсы ЭВМ.

        Характеристики.

     Макроассемблер находится  на  диске  в формате CP/M-80 в виде файла с
именем M80.СOM.  файл M80.СOM занимает на диске 18 кбайт, а в процессе ра-
боты  M80 использует всю оперативную память,  предоставляемую операционной
системой CP/M-80.
        Обращение, входные и выходные данные.

     Обращение к M80 осуществляется посредством задания  с  консоли  соот-
ветствующей командной строки. Подробное описание способов обращения к M80,
а также входных и выходных данных приводится в подразделах 6.1 - 6.4.

        Элементы и основные конструкции языка.

        Символы.

     Все сложные элементы языка M80 формируются из  символов.  В  качестве
символов могут использоваться:
     - буквы латинского алфавита от A до Z;
     - цифры от 0 до 9;
     - специальные символы + - , : ; ( ) ' пробел $ #  ;
     - в комментариях можно использовать любые  печатные
       символы кода, принятого в CP/M-80.

        Числа, константы и строки.

     Числа - это беззнаковые 16-битные величины.  Число всегда вычисляется
в системе счисления по умолчанию, если оно не задано в специальном виде:
      "цифра"["цифра"...]B     - двоичное;
      "цифра"["цифра"...]      - десятичное;
      "цифра"["цифра"...]O     - восьмеричное;
      "цифра"["цифра"...]Q     - восьмеричное;
      "цифра"["цифра"...]H     - шестнадцатеричное;
      X' "цифра"["цифра"...] ' - шестнадцатеричное.
     По умолчанию все числа считаются в десятичной системе счисления. Этот
режим  можно  изменить.  С помощью псевдокоманды .RADIX (п.  4.4.19) Можно
выбрать любое основание системы счисления  от  2  до  16.  Eсли  основание
системы счисления больше 10,  то к цифрам от 0 до 9 добавляются буквы от A
до F. Eсли первый символ числа не цифра, то перед ним должен стоять 0. Пе-
реполнение  при вычислении числа игнорируется и значащими являются младшие
16 бит.
     Символьная константа  -  это строка,  содержащая один или два символа
кода, принятого в CP/M-80, в апострофах.
     Значением символьной константы,  содержащей один символ, является ве-

                                  - 20 -
личина численного значения соответствующего  кода,  принятого  в  CP/M-80.
Например, значением константы 'A' будет 41h.
     Значением символьной константы,  содержащей два символа,  будет двух-
байтовое число, причем в старшем байте будет значение первого символа, а в
младшем байте - значение второго символа.  Например,  значением  константы
"AB" будет число 41h*256+42h.
     Строка - это набор символов,  заключенных в  кавычки  или  апострофы.
Kавычки  также могут быть элементом строки,  но при этом они должны удваи-
ваться. Например, предложение
     DB "я""иду""гулять"
запомнит строку
     я"иду"гулять
     Eсли между кавычками стоит 0 символов,  то такая строка будет  пустой
строкой.

        Символические имена.

     Символические имена  могут  содержать  любое количество символов,  но
значащими являются первые 6 символов.  В именах допустимы следующие симво-
лы:
     буквы от A до Z ,  цифры от 0 до 9,  $,  ., ?, @ символическое имя не
может начинаться с цифры.
     При обработке имен буквы из нижнего регистра  переводятся  в  верхний
регистр.  Eсли символическое имя заканчивается ##,  то оно рассматривается
как внешнее (п.4.4.9 Псевдокоманда EXT/EXTRN).

        Выражения.

        Aрифметические и логические операции.

     В выражениях допустимы следующие операции, приведенные в порядке убы-
вания приоритета их выполнения.
     NUL
     LOW,HIGH
     *,/,MOD,SHR,SHL
     унарный минус
     +,-
     EQ,NE,LT,LE,GT,GE
     NOT
     AND
     OR,XOR
     Для изменения  порядка  выполнения операций надо использовать скобки.
При вычислении выражений сначала выполняются операции, имеющие более высо-
кий приоритет. Все подвыражения, содержащие операции с более высоким прио-
ритетом, вычисляются в первую очередь.
     Все операции,  кроме  +,-,*,/,  должны  быть отделены от операндов по
крайней мере одним пробелом.  Oперации выделения байта (HIGH,LOW) выделяют
старшие или младшие 8 бит из абсолютной 16-битной величины. Eсли в качест-
ве операнда используется перемещаемая величина,  то HIGH и LOW интерпрети-
руются как операции, работающие с адресом ноль.

        Абсолютные и перемещаемые имена.


                                  - 21 -
     Все символические имена,  используемые в качестве операндов в выраже-
ниях,  есть либо абсолютные имена,  либо перемещаемые имена.  Перемещаемые
имена подразделяются на программные перемещаемые имена, перемещаемые имена
данных и COMMON .
     Все символические имена, Aссемблированные для псевдокоманд ASEG, CSEG
(по умолчанию) или DSEG,  относятся к абсолютным, перемещаемым программным
или перемещаемым данным соответственно. Kоличество имен COMMON в программе
зависит от числа блоков COMMON,  поименованных в программе с помощью псев-
докоманды COMMON.  Два символических имени COMMON считаются разными,  если
они присутствуют в разных блоках COMMON.
     При любой операции,  кроме сложения и вычитания,  оба операнда должны
быть Aбсолютными.
     Для сложения применяются следующие правила:
     1) по крайней мере один из операндов должен быть абсолютным;
     2) "Aбсолют."  + "Перемещ." = "Перемещ." Для вычитания действуют пра-
вила:
     1) "перемещ." - Aбсолют. = "Перемещ.";
     2) "Перемещ." - "Перемещ." ="Aбсолют.".
     Причем в 2) оба имени должны быть перемещаемыми именами одного типа.
     Для каждого промежуточного шага при вычислении выражения  должны  вы-
полняться  вышеуказанные правила,  иначе будет выдано сообщение об ошибке.
Например,  если FOO,  BAZ и ZAZ - три символических перемещаемых имени, то
выражение:
     FOO + BAZ - ZAZ
     выработает сообщение  об  ошибке,  т.к.  На первом шаге будут склады-
ваться два перемещаемых имени. Этого можно избежать, используя скобки:
     FOO + (BAZ - ZAZ)

        Внешние ссылки.

     Кроме того,  символическое имя может быть внешним (EXTRN) или  нет  .
Внешнее имя ассемблируется в 2 байта. При использовании внешних имен в вы-
ражениях должны выполняться следующие правила:
     1) EXTRN допустимы только при сложении и вычитании;
     2) если в выражении используется имя типа EXTRN,  то результат всегда
будет EXTRN;
     3) при  сложении  любой  операнд  (но не оба одновременно) может быть
EXTRN;
     4) при вычитании только первый операнд может быть EXTRN.

        Синтаксис ассемблерных предложений.

     Ассемблерная программа  состоит  из  последовательности  предложений.
Каждое предложение имеет следующую структуру:
     ["метка"[:]] ["оператор"] ["операнды"] [;"примечания"]
     совсем необязательно, чтобы предложение начиналось с колонки номер 1.

        METKA.

     Метка - это символическое имя, после которого следует двоеточие. Если
метка присутствует,  то она должна быть первым элементом предложения. Зна-
чение метки есть текущее значение счетчика адреса.  Если после метки стоят
два двоеточия, то такая метка объявляется внутренней (PUBLIC) и к ней мож-

                                  - 22 -
но обращаться из другой программы.

        Оператор.

     Следующим элементом после метки или первым, если метки нет, идет опе-
ратор. В качестве оператора может быть:
     1) мнемокод Intel-8080;
     2) макровызов;
     3) псевдокоманда;
     4) выражение.
     Если в поле оператора стоит выражение, то ассемблер рассматривает его
как псевдокоманду DB.

        Операнды и примечания.

     Следующим элементом  предложения являются операнды.  В зависимости от
оператора в поле операндов может быть один, два или несколько операндов.
     В качестве  операндов  можно  использовать мнемокоды команд микро эвм
Intel-8080.  При этом следует учитывать,  что допустимым  операндом  будет
только первый байт команды.
     Пример.
     MVI A,JMP
     ADI CPI
     MVI B,RNZ
     CPI INX H
     ACI LXI B
     MVI C,MOV A,B
     если в операнд будет включено более одного байта (CPI 5,  LXI  B,LAM,
JMP A5), то будет выдано сообщение об ошибке.
     Примечания, если они присутствуют, являются последним элементом пред-
ложения. Примечания всегда начинаются с символа ; и заканчиваются символом
CR.  В примечаниях могут употребляться все допустимые символы принятого  в
CP/M-80 кода.

        Псевдокоманды.

        Псевдокоманды перемещения.

     Отличительной особенностью  макроассемблера  M80 является создание им
перемещаемых модулей. Перемещаемость модуля облегчает его отладку и тести-
рование, позволяет компоновать программу из нескольких модулей, написанных
на разных языках.  Кроме того,  программу можно разбить на сегменты и ука-
зать,  какие сегменты должны размещаться только в озу (сегменты данных), а
какие могут быть занесены в пзу (сегменты, содержащие программу). Эти сег-
менты  создаются  с  помощью псевдокоманд DSEG и CSEG.  Псевдокоманда ASEG
используется при создании неперемещаемых (абсолютных) кодов. Псевдокоманда
COMMON создает общие области данных для каждого поименованного в программе
блока COMMON.
     Для каждого  сегмента  программы  ASEG,  CSEG или DSEG заводится свой
счетчик адреса,  который приостанавливает отсчет при смене типа сегмента и
возобновляет отсчет, когда снова встречается соответствующий сегмент. Зна-
чение счетчика адреса в любом сегменте можно изменить с помощью  псевдоко-
манды ORG .

                                  - 23 -
     По умолчанию всегда действует псевдокоманда CSEG.

        ASEG.

     формат псевдокоманды:
     ASEG
     ASEG устанавливает значение счетчика адреса на абсолютный  сегмент  в
памяти.  Значение счетчика будет продолжением предыдущего ASEG (по умолча-
нию 0),  если после ASEG не стоит ORG. Действие ASEG эквивалентно действию
CSEG при ключе /P в компоновщике L80 [3].

        COMMON.

     формат псевдокоманды:
     COMMON /"имя блока"/
     COMMON устанавливает  счетчик адреса на адрес выбранного общего блока
памяти. Для совместимости с оператором COMMON в фортране этот адрес всегда
указывает на начало области.  Если "имя блока" опущено или состоит из про-
белов, то блок COMMON считается пустым.

        CSEG.

     формат псевдокоманды:
     CSEG
     CSEG устанавливает значение счетчика адреса на смещение  относительно
начала  сегмента  памяти,  содержащего коды команд.  Значение адреса будет
соответствовать значению предыдущего CSEG (по умолчанию  0),  если  только
после CSEG не стоит псевдокоманда ORG.  Для ассемблера CSEG является псев-
докомандой по умолчанию.

        DSEG.

     формат псевдокоманды:
     DSEG
     DSEG устанавливает значение счетчика адреса  на  относительный  адрес
сегмента памяти, содержащего данные. Значение адреса будет соответствовать
адресу последнего DSEG (по умолчанию 0), если не было псевдокоманды ORG.

        DB - определить байт.

     формат псевдокоманды:
     DB "выражение" [,"выражение"...] или
     DB "строка" ["строка"...]
     Аргументами для  DB  могут  быть выражения или строки.  DB запоминает
значения выражений или символов в строках в последовательных адресах памя-
ти,  начиная  с адреса,  указанного в счетчике адреса.  Значение выражения
должно помещаться в одном байте.  Если старший байт результата 0 или  255,
то сообщение об ошибке не выдается. В противном случае выдается ошибка A.
     В выражениях не могут присутствовать  строки,  содержащие  более  2-х
символов.  Старший бит каждого байта, отведенного под соответствующий сим-
вол, равен нулю.
     Примеры:
     0000' 41 42 DB 'AB'

                                  - 24 -
     0002' 42 DB 'AB' AND 0FFH
     0003' 41 42 43 DB 'ABC'

        DC - определить символ.

     формат псевдокоманды:
     DC "строка"
     DC запоминает символы,  заданные в "строке", последовательно, начиная
с адреса,  указанного в счетчике адреса. В отличие от DB в байте, содержа-
щем последний символ строки,  в  старшем  разряде  стоит  1.  Если  строка
пустая, то выдается сообщение об ошибке.

        DS - определить область.

     формат псевдокоманды:
     DS "выражение"
     DS резервирует область памяти. Значение выражения показывает, сколько
байтов должно быть зарезервировано. Все имена, присутствующие в выражении,
должны  быть  определены к моменту вычисления выражения при первом проходе
макроассемблера.  В противном случае при первом проходе появится флаг V, а
при  втором проходе - флаг U.  Если при втором проходе флаг U не появится,
то все равно в модуле может быть ошибка, т.к. DS обрабатывается при первом
проходе.

     DW - определить слово.

     формат псевдокоманды:
     DW "выражение"[,"выражение"...]
     DW последовательно записывает значения выражений в ячейки памяти, на-
чиная с адреса,  содержащегося в счетчике адреса.  Значения выражений есть
двухбайтовые величины.

        END.

     формат псевдокоманды:
     END ["выражение"]
     Оператор END указывает на конец программы. Если присутствует "выраже-
ние",  то оно указывает на стартовый  адрес  программы.  Если  "выражение"
отсутствует, то компоновщику L80 стартовый адрес не передается .
     Примечание.
     Если ассемблерная  программа  является основной программой при компо-
новке,  то в ней должен быть указан стартовый адрес.  В  противном  случае
компоновщик  L80 выдаст сообщение об ошибке "нет стартового адреса".  Если
же ассемблерная программа является подпрограммой по отношению к программе,
написанной,  например,  на фортране, то стартовый адрес можно не задавать,
т.к. Он будет задан в основной программе.

        ENTRY/PUBLIC.

     формат псевдокоманды:
     ENTRY "имя"[,"имя"...] или
     PUBLIC "имя"[,"имя"...]
     ENTRY или  PUBLIC объявляют все имена,  присутствующие в списке,  как

                                  - 25 -
внутренние,  доступные извне.  После этого к таким именам можно обращаться
из других программ.  Все имена в списке ENTRY/PUBLIC должны быть определе-
ны,  иначе будет сообщение об  ошибке  U.  Имена,  объявленные  ENTRY  или
PUBLIC,  заносятся  в  список глобальных имен и используются компоновщиком
L80 при удовлетворении внешних ссылок [3].

        EQU.

     формат псевдокоманды:
     "имя" EQU "выражение"
     По команде EQU символическому имени присваивается значение выражения.
Если "выражение" имеет тип EXTRN, то выдается сообщение об ошибке.

        EXT/EXTRN.

     формат псевдокоманды:
     EXT "имя"[,"имя",...] или
     EXTRN "имя"[,"имя",...]
     EXT или EXTRN объявляют указанные имена внешними (EXTRN),  т.е. Опре-
деленными в другой программе.  Если имя,  указанное в списке, определено в
данной программе, то будет выдано сообщение об ошибке M. Если имя заканчи-
вается двумя знаками числа (##), то оно также объявляется как внешнее.

        INCLUDE.

     формат псевдокоманды:
     INCLUDE "имя файла"
     Три псевдокоманды INCLUDE,  $INCLUDE и MACLIB эквивалентны. Псевдоко-
манда INCLUDE позволяет включать в текст исходной программы программы, за-
писанные в других файлах. "Имя файла" - это имя файла, содержащего включа-
емую программу. Тип файла должен быть MAC.
     файл, присутствующий в псевдокоманде INCLUDE,  открывается и трансли-
руется в текущую программу сразу же за псевдокомандой INCLUDE.
     При выводе  листинга в каждой строке,  содержащей элемент включенного
файла, сразу же после кода команды стоит знак "+".
     Вложение псевдокоманд INCLUDE не допускается.  Если файл, указанный в
INCLUDE,  не существует,  то будет выдано сообщение об ошибке 'V' и данная
псевдокоманда игнорируется.

        NAME.

     формат псевдокоманды:
     NAME ('имя программы')
     NAME задает имя программы. Значащими в "имени" являются только первые
шесть знаков.  Имя программы можно задать и с помощью псевдокоманды TITLE.
Если в программе отсутствуют NAME и TITLE, то в качестве имени берется имя
исходного файла.

        ORG - задать счетчик адреса.

     формат псевдокоманды:
     ORG "выражение"
     Счетчику адреса присваивается значение выражения. Все имена в выраже-

                                  - 26 -
нии должны быть определены при первом проходе.

        PAGE.

     формат псевдокоманды:
     PAGE ["выражение"]
     Псевдокоманда PAGE дает указание ассемблеру начать новую страницу вы-
вода листинга. Если в псевдокоманде присутствует "выражение", то оно зада-
ет  число  строк  на странице.  Это число должно быть в диапазоне от 10 до
255. По умолчанию это число равно 50.

        SET.

     формат псевдокоманды:
     "имя" SET "выражение"
     SET осуществляет то же действие,  что и EQU,  но имя в  псевдокоманде
SET может быть определено ранее.  Тогда после выполнения SET имя будет пе-
реопределено.

        SUBTTL.

     формат псевдокоманды:
     SUBTTL "текст"
     Эта псевдокоманда выводит подзаголовок после  заголовка,  выведенного
псевдокомандой  TITLE.  Длина  "текста"  не должна превышать 60 знаков.  В
программе может быть любое количество SUBTTL.

        TITLE.

     формат псевдокоманды:
     TITLE "текст"
     TITLE задает заголовок программы,  который будет печататься в  первой
строке каждой страницы.  В тексте программы может быть только одна псевдо-
команда TITLE иначе будет сообщение об ошибке Q.  Если не задана псевдоко-
манда NAME,  то первые шесть символов заголовка зададут имя модуля. Если в
программе нет ни NAME,  ни TITLE,  то имя модуля будет  создано  из  имени
исходного файла.

        .COMMENT.

     формат псевдокоманды:
     .COMMENT "разделитель""текст""разделитель"
     Первый символ, идущий после .COMMENT и отличный от пробела, считается
разделителем. Текст после разделителя считается примечAниями и может зани-
мать произвольное количество строк. Примечания заканчиваются, когда встре-
чается второй разделитель - тот же самый символ, который был использован в
качестве первого разделителя.

        .PRINTX.

     формат псевдокоманды:
     .PRINTX "разделитель""текст""разделитель"
     Первый символ после .PRINTX,  отличный от пробела, считается раздели-

                                  - 27 -
телем.  Текст,  идущий после разделителя, во время трансляции выводится на
терминал до тех пор,  пока не встретится второй разделитель - тот же самый
символ.
     Примечание.
     .PRINTX выводит листинг при каждом  проходе  ассем-
блера, поэтому, если листинг нужен только при одном  ка-
ком-либо проходе, то следует использовать  псевдокоманды
IF1 или IF2.

        .RADIX.

     формат псевдокоманды:
     .RADIX "выражение"
     По умолчанию система счисления для всех констант - десятичная.  Псев-
докоманда .RADIX позволяет изменить основание системы счисления по умолча-
нию.  Основание системы счисления должно быть в диапазоне от 2 до 16. "Вы-
ражение" в .RADIX всегда в  десятичной  системе  счисления  независимо  от
основания системы счисления, действующей в данный момент.

        .REQUEST.

     формат псевдокоманды:
     .REQUEST "имя файла"[,"имя файла"...]
     Эта псевдокоманда  передает  запрос компоновщику L80 на поиск неудов-
летворенных внешних имен в файлах,  указанных в  списке.  Имена  файлов  в
списке не должны содержать типов файла и ссылок на диски.  L80 ведет поиск
файла с заданным именем и с типом - REL на диске по умолчанию .

        Условные псевдокоманды.

     Список условных псевдокоманд

  IF/IFT "выражение"    истина, если "выражение" не 0
  IFE/IFF "выражение"   истина, если "выражение" есть 0
  IF1                   истина при первом проходе
  IF2                   истина при втором проходе
  IFDEP "символ"        истина, если "символ"  определен
                        или объявлен EXTERNAL
  IFDEF "символ"        истина, если "символ" не опреде-
                        лен и не объявлен EXTERNAL
  IFB "аргумент"        истина,  если  "аргумент"   есть
                        пробел аргумент  должен  быть  в
                        угловых скобках
  IFNB "аргумент"       истина, если "аргумент" не  про-
                        бел. Используется  для  проверки
                        отсутствия некоторых параметров.
                        Аргумент должен быть  в  угловых
                        скобках
  IFIDN "аргумент1",    истина, если строка  "аргумент1"
        "аргумент2"     идентична  строке   "аргумент2".
                        Аргументы должны быть в  угловых
                        скобках
  IFDIF "аргумент1",    истина, если строка  "аргумент1"

                                  - 28 -
        "аргумент2"     отличается от строки "аргумент2"

  все условные псевдокоманды имеют следующий формат:

     IF XXX [аргумент]
     .
     .
     [ELSE
     .
     .
     ]
     ENDIF
     Допускается вложение условных псевдокоманд, т.е. Псевдокоманда внутри
псевдокоманды.  Во избежание ошибок все  аргументы  условных  псевдокоманд
должны быть известны при первом проходе.  Для IF, IFT, IFF и IFE выражения
должны содержать только определенные символы и все выражения  должны  быть
абсолютными.

        ELSE.

     В каждой  условной псевдокоманде может присутствовать также псевдоко-
манда ELSE,  которая позволяет производить генерацию кодов, если проверяе-
мое условие есть ложь. Для каждого IF допускается только один ELSE, и каж-
дый ELSE соответствует последнему открытому IF.

        ENDIF.

     Каждая псевдокоманда IF должна иметь соответствующую ей псевдокоманду
ENDIF, заканчивающую условие.

        Псевдокоманды, управляющие выводом листинга

     Выводом листинга  в файл можно управлять с помощью двух псевдокоманд:
.LIST и .XLIST.Если листинг не выводится,  то данные псевдокоманды игнори-
руются.
     По умолчанию  действует  псевдокоманда  .LIST,   инициирующая   вывод
листинга. Если встречается псевдокоманда .XLIST, то вывод листинга прекра-
щается, пока не встретится псевдокоманда .LIST.
     Вывод условных блоков, имеющих значение ложь, управляется тремя псев-
докомандами: .SFCOND, .LFCOND и .TFCOND.
     .SFCOND      подавление вывода условных блоков, вы-
                  численное   значение   которых    есть
                  "ложь";
     .LFCOND      восстановить  вывод  условных  блоков,
                  имеющих значение "ложь";
     .TFCOND      управлять  выводом  условных   блоков,
                  имеющих значение "ложь", в зависимости
                  от ключа /X (подраздел 5.3).

     Вывод таблицы перекрестных ссылок управляется псевдокомандами .CREF и
.XCREF. Если кросс-средства не используются (см.Подраздел 5.3 И раздел 4),
то эти псевдокоманды игнорируются.  Условие по  умолчанию  -  .CREF.  Если
встречается  псевдокоманда .XCREF,  то вывод перекрестных ссылок прекраща-

                                  - 29 -
ется до тех пор, пока снова не встретится псевдокоманда .CREF.
     Вывод расширений MACRO/REPT/IRP/IRPC управляется тремя псевдокоманда-
ми:
     .LALL, .SALL, .XALL
     .LALL   выводит полный макротекст для всех расшире-
             ний;
     .SALL   выводит  только  сгенерированные  объектные
             коды;
     .XALL   выводит сгенерированные  объектные  коды  и
             соответствующий им текст (условие по  умол-
             чанию).

        Перемещение перед загрузкой.

     С помощью двух псевдокоманд:  .PHASE  и  .DEPHASE  некоторые  участки
программ  могут  находиться в одной области,  а выполняться лишь в другой,
заданной, области.
     Псевдокоманда .PHASE обозначает начало такого участка, а псевдокоман-
да .DEPHASE - конец участка.

     Пример.
     0000'                 .PHASE
     0100  CD 0106   F00:  CALL BAZ
     0103  C3 0007         JMP Z00
     0106  C9        BAZ:  RET
     0007' C3 0005   Z00:  JMP 5
     Все метки внутри блока .PHASE получают абсолютные значения в  зависи-
мости от значения счетчика адреса .PHA- SE.  Коды,  однако,  загружаются в
текущую область памяти (T.Е.  С 0000' в этом примере).  Позже их можно пе-
реслать по адресу 100H и выполнить.

        Макрокоманды и блоки.

     Макросредства ассемблера  MACRO включают в себя три макрокоманды пов-
торения (REPT, IRP, IRPC) и операцию макроопределения (MACRO). Каждая мак-
рокоманда должна заканчиваться псевдокомандой ENDM.

        Терминология.

     Для описания макрокоманд используются следующие термины:
     1) "фор.Пар." - формальный параметр все  формальные
        параметры  являются  допустимыми  символическими
        именами, которые появляются в теле макрорасшире-
        ния;
     2) "список форм.Пар." - Список формальных  парамет-
        ров, разделенных запятыми;
     3) "список арг." - Список  аргументов,  разделенных
        запятыми. Список аргументов  всегда  заключен  в
        угловые скобки. Если в угловых скобках нет  сим-
        вола или между двумя запятыми  нет  символа,  то
        это нулевой аргумент в списке. При вложении  уг-
        ловых скобок (скобки в скобках) каждый  внутрен-
        ний уровень скобок удаляется  при  использовании

                                  - 30 -
        соответствующего аргумента.  Строка  в  кавычках
        является допустимым аргументом;
     4) "список пар." - Список  параметров,  разделенных
        запятыми.

        Блок REPT-ENDM.

     формат макрокоманды:
     REPT "выражение"
     .
     .
     ENDM
     Вычисляется значение  "выражения"  и группа предложений,  заключенная
между REPT и ENDM,  повторяется полученное число раз. "Выражение" не может
содержать внешние или неопределенные имена.
     Пример.
     X   SET   0
         REPT  10   ; генерирует DB 1 - DB 10
     X   SET   X+1
         DB    X
         ENDM
     4.5.3. Блок IRP - ENDM
     формат макрокоманды:
     IRP "фор.Пар.",<Список арг.>
     .
     .
     .
     ENDM
     Число аргументов  в  списке  определяет,  сколько раз будет повторена
группа предложений,  заключенная между IRP и ENDM.  При каждом  повторении
вместо всех вхождений формального параметра подставляется очередное значе-
ние из списка аргументов.  Если список аргументов  пуст  (<>),  то  группа
предложений  обрабатывается  1 раз и формальный параметр удаляется из всех
вхождений.
     Пример.
     IRP  X, <1,2,3,4,5,6,7,8,9,10>
     DB   X
     ENDM
результат будет аналогичен предыдущему примеру.

        Блок IRPC - ENDM.

     формат макрокоманды:
     IRPC "фор.Пар.",Строка (или "строка")
     .
     .
     .
     ENDM
     Количество знаков  в  строке  указывает,  сколько раз будет повторена
группа предложений между IRPC и ENDM.  В данном случае угловые скобки нео-
бязательны.  При  каждом  повторении  вместо  формального  параметра будет
подставляться очередной знак из строки.
     Пример.

                                  - 31 -
     IRPC  X, 0123456789
     DB    X+1
     ENDM
результат аналогичен двум вышеприведенным примерам.

        MACRO.

     формат макрокоманды:
     "имя" MACRO "список форм.Пар."
     .
     .
     .
     ENDM
     С помощью  MACRO пользователь может создавать свои макрокоманды и по-
мещать их в различные участки программы.
     "Имя" -  это символическое имя,  по которому впоследствии будут вызы-
вать данную макрокоманду.
     "Cписок форм.Пар." - Это список параметров,  которые будут изменяться
(замещаться фактическими  параметрами)  при  каждом  вызове  макрокоманды.
Предложения между MACRO и ENDM составляют тело макрокоманды.
     форма обращения к макрокоманде следующая:
     "имя" "список пар."
Где
     "имя" - это имя присвоенное MACRO в  макроопределе-
             нии;
     "список пар." - Это список фактических  параметров,
                     которые при вызове макрокоманды за-
                     менят  соответствующие   формальные
                     параметры.
     Если число фактических параметров превышает количество формальных па-
раметров, то лишние фактические параметры игнорируются. Если же число фак-
тических  параметров  меньше  числа формальных параметров,  то вместо недо
стающих фактических параметров будут подставлены нули.
     Пример.
     F00  MACRO  X
     Y    SET    0
          REPT   X
     Y    SET    Y+1
          DB     Y
          ENDM
          ENDM
     При обращении F00 10 эта  макрокоманда  сгенерирует
те же предложения, что и в предыдущих примерах.

        EXITM.

     Псевдокоманда EXITM используется для завершения REPT/IRP/IRPC или вы-
зова MACRO.  При выполнении EXITM макрорасширение немедленно выводится,  а
все оставшееся расширение или повторение не генерируется.  Если блок,  со-
держащий EXITM, входит в другой блок, то внешний уровень продолжает расши-
ряться.

        LOCAL.

                                  - 32 -

     формат макрокоманды:
     LOCAL "список фор.Пар."
     Эта псевдокоманда допустима только внутри макроопределения MACRO. При
выполнении LOCAL ассемблер создает уникальное символическое имя для каждо-
го формального параметра из списка и подставляет потом  это  символическое
имя  при каждом вхождении данного формального параметра в макрорасширение.
Обычно,  эти уникальные символические имена используются для задания меток
внутри MACRO. Это исключает возможность появления многократно определенных
меток при неоднократных вызовах данной макрокоманды.  Символические имена,
создаваемые  при помощи LOCAL,  находятся в диапазоне от ..0001 До ..FFFF.
Поэтому пользователю в своих программах следует избегать имен типа ..NNNN.
Если в макрокоманде есть LOCAL,  то LOCAL должна быть в первом предложении
макроопределения.

        Специальные макрооператоры и формы.

     &     амперсенд используется для конкатенации  тек-
           ста или символических имен. формальный  пара-
           метр, представляющий собой строку в  апостро-
           фах, не будет заменен в расширении, если  пе-
           ред ним не будет стоять амперсанд. Для  обра-
           зования символического имени из текста и фор-
           мального параметра между ними надо  поставить
           &;
     пример.
     ERG   MACRO   X
     ERROR&X: PUSH  BX
              MVI   BX,'&X'
              JMP   ERROR
              ENDM
     В этом примере вызов ERG A создаст следующую после-
довательность едложений:
     ERROR&A: PUSH B
              MVI  B,'A'
              JMP  ERROR
     примечание.
     Два символических имени считаются одинаковыми,  если одно имя отлича-
ется  от другого только наличием амперсанда.  Так символическое имя ERRORA
эквивалентно имени ER- ROR&A.
     ;;    Если в макрокоманде перед комментариями стоят
           две точки с запятой, то  эти  комментарии  не
           появляются в макрорасширениях даже, если есть
           указание .LALL;
     $     ссылка на текущее значение счетчика адреса;
     !     символ, стоящий после восклицательного  знака
           вводится литерально;
     NUL   это оператор, возвращающий значение "истина",
           если его аргумент есть нуль.  Остаток  строки
           после NUL рассматривается  как  аргумент  для
           NUL. Условие IF NUL аргумент будет  "ложным",
           если при расширении первый  символ  аргумента
           будет отличен от точки с  запятой  или  "CR".

                                  - 33 -
           Этот оператор рекомендуется использовать  для
           проверки наличия нулевых параметров в  услов-
           ных псевдокомандах IFB и IFNB;
     %     этот оператор может использоваться  только  в
           аргументе макрокоманды. % Преобразует  следу-
           ющее за ним выражение  (обычно  символическое
           имя) в число в текущей системе счисления.  Во
           время макрорасширения полученное  число  под-
           ставляется в формальный параметр. Использова-
           ние % позволяет вызывать макрокоманду с  чис-
           лом (обычно макровызов - это вызов с  текстом
           из аргументов).  Выражение,  следующее  за  %
           должно удовлетворять тем же требованиям,  что
           и в псевдокоманде DS.
     Пример.
     Нормально LB,  являющееся аргументом для MACLAB, должно было подстав-
лятся вместо Y,  являющегося аргументом MACRO.  % Преобразует LB в число и
вместо Y подставляется уже число.  Без %  результат трансляции был бы 'ER-
ROR LB'.
     MACLAB MACRO Y
     ERR&Y: DB 'ERROR &Y',0
            ENDM
     MACERR MACRO X
     LB     SET 0
            REPT X
     LB     SET LB+1
            MACLAB %LB
            ENDM
            ENDM
     после макровызова MACERR  3 получим:
     ERR1: DB 'ERROR 1',0
     ERR2: DB 'ERROR 2',0
     ERR3: DB 'ERROR 3',0
     TYPE  оператор TYPE возвращает байт, который описы-
           вает две характеристики аргумента:  перемеща-
           емость и является ли аргумент внешним (EXTRN)
           или нет. Аргументом для TYPE может быть любое
           выражение (строковое, числовое,  логическое).
           Если выражение неверно, то TYPE вернет  ноль.
           Структура  возвращаемого   байта   следующая:
           младшие два  бита  определяют  перемещаемость
           аргумента следующим образом:
           0  абсолютный;
           1  программный перемещаемый;
           2  данных перемещаемый;
           3  COMMON перемещаемый.
           Старший бит (80H) - бит EXTRN. Когда  выраже-
           ние содержит внешний символ, то бит равен  1.
           Бит определенности - (20H).  Когда  выражение
           определено, то этот бит равен 1. Если же  вы-
           ражение не определено или содержит EXTRN,  то
           этот бит  равен  0.  TYPE  обычно  используют
           внутри макрокоманд, когда  необходимо  прове-

                                  - 34 -
           рить тип аргумента.


        Обращение к компилятору.  Входные  и  выходные данные.

     Исходными данными для компилятора является файл,  содержащий програм-
му,  написанную на макроассемблере, и имеющий тип MAC. В результате работы
компилятор создает файл типа REL,  содержащий модуль в перемещаемой форме.
Кроме  того,  по желанию пользователя может быть создан файл с листингом и
файл перекрестных ссылок.
     Загрузка и  запуск  макроассемблера осуществляются одной из следующих
команд пкк :
     M80                                                               (1)
     M80 "командная строка"                                            (2)
     в режиме (1) м80 выводит на экран * и ждет ввода командной строки.
В режиме (2) командная строка вводится сразу после имени м80.
     формат командной строки:
     ["имя 1"][,"имя 2"]="имя 3"
     где
     "имя 1" - имя файла, в который будет записан перемещаемый модуль;
     "имя 2" - устройство, на которое будет выводиться листинг. Таким
     устройством может быть консоль (TTY:), логическое устройство LST: или
     файл на диске. В последнем случае в качестве "имя 2" задается имя
     файла на диске;
     "имя 3" - имя файла, содержащего исходный текст программы.
     Если "имя 1" и "имя 2" опущены,  то по умолчанию берется имя файла  с
исходным текстом.  Тип файла в "имя 1" всегда REL,  в "имя 2",  если задан
файл,  всегда PRN,  A в "имя 3" всегда MAC.  Если  перемещаемый  модуль  и
листинг не нужны, то слева от знака равенства надо поставить запятую.
Примеры:
     *=SOURCE.MAC          Tранслировать программу SOURCE.MAC и помес-
                           тить об'ектный код в файл SOURCE.REL;
     *,LST:=TEST           Tранслировать программу TEST.MAC и вывести
                           листинг на устройство LST;
     *SMALL,TTY:=TEST      транслировать программу TEST.MAC, об'ектный
                           файл записать в SMALL.REL, а листинг вывес-
                           ти на консоль.
        Kлючи компиляции
     В командной строке может быть задано несколько ключей,  которые будут
влиять на формат выводимого листинга.
     Ключ                  действие
     ----                  --------
      /о                   печатать в листинге все адреса и т.П. В
                           восьмеричной системе счисления
      /н                   печатать в листинге все адреса и т.П. В
                           шестнадцатеричной системе счисления
                           (действует по умолчанию)
      /X                   подавить вывод листинга условий, значение кото-
                           рых есть "ложь"
      /р                   создать об'ектный файл
      /L                   создать файл с листингом
      /с                   создать файл перекрестных ссылок
       пример.

                                  - 35 -
       *=TEST/L/P          оттранслировать файл TEST.MAC. Об'ектный файл
                           выводить в файл TEST.REL, а листинг - в файл
                           TEST.LST.
        формат листинга
     На каждой странице листинга первые две строки содержат:
     [TITLE текст]    MACRO    PAGE X [-Y]
     [SUBTITLE текст]
     где
     TITLE текст - текст, заданный псевдокомандой TITLE;
     X - основной номер страницы. Он увеличивается только при появлении из
исходного  файла  символа подачи новой страницы.  Когда печатается таблица
символов X=S;
     Y - младший номер страницы.  Он увеличивается при появлении псевдоко-
манды PAGE или при заполнении текущей страницы;
     SUBTITLE текст - текст, заданный псевдокомандой SUBTITLE.
     После вывода этих двух строк выводится одна пустая  строка,  а  затем
очередная строка программы. Строка программы имеет вид:
     [CRF#]  [ERROR]  LOC#M  !XX!XXXX! ......     Исходный текст
     Если выводится таблица перекрестных ссылок, то первый элемент в стро-
ке - номер для таблицы, после него стоит символ табуляции.
     ERROR - это флаг ошибки, если в строке есть ошибка. Если в строке нет
ошибки,  то вместо ERROR стоит пробел. Если таблица перекрестных ссылок не
создается, то флаг ошибки стоит в первой колонке.
     LOC#M - значение счетчика адреса,  которое в зависимости от ключей /м
или /0 представляет собой шестнадцатеричное число,  содержащее 4 цифры,или
восьмеричное число,  содержащее 6 цифр. Символ после числа - это индикатор
перемещаемости:
     '  программный перемещаемый;
     "  данных перемещаемый;
     !  COMMON перемещаемый;
пробел  абсолютный;
     *  внешний.
     Далее печатаются  три пробела,  после которых идет код коман- и опе-
рандов (если они есть у данной команды). Если строка листинга появилась из
файла,  включенного по псевдокоманде INCLUDE, то после кодов идет буква C.
Если строка содержит макрорасширение (MACRO,  REPT,  IRP,  IRPT), то после
кодов стоит знак "+". Остаток строки содержит исходный текст.
     В конце листинга выводится таблица символических имен.  Сначала в ал-
фавитном порядке печатаются имена всех макрокоманд,  после этого выводятся
все символические имена программы.  После каждого символического имени вы-
водится знак табуляции,  а затем печатается значение символического имени.
Если имя типа PUBLIC,  то после его значения печатается буква I. Далее пе-
чатается один из следующих знаков:
     U       имя неопределено;
     C       имя блока COMMON;
     *       внешнее имя;
  "пробел"   абсолютное имя;
     '       программный относительный;
     "       данных относительный;
     !       COMMON относительный.
        Сообщения об ошибках
     Сообщения об ошибках индицируются одной буквой (флагом) в первой  ко-
лонке листинга.  Если файл с листингом не выводится на консоль, то ошибоч-

                                  - 36 -
ные строки все равно выводятся.
     флаг    значение
     ----    ---------
      а      ошибка в аргументе.
             Неправильный формат аргумента псевдокоманды или аргумент
             вне допустимых границ
      C      ошибка условного вложения.
             ELSE без IF; ENDIF без IF; два ELSE на один IF
      D      многократно определенное символическое имя
      E      ошибка при использовании EXTRN
             недопустимое использование символического имени, об'явленного
             EXTRN
      M      Многократно определенное символическое имя.
      N      Ошибка в числе.
             Неверное задание числа (например 8Q).
      O      Неверный код операции или ошибочный синтаксис ENDM, LOCAL вне
             блока; SET, EQU или MACRO без имени; неверный синтаксис в ко-
             де команды; неверный синтаксис в выражении.
      P      Ошибка фазы.
             Значение  метки или имени в EQU изменилось при втором проходе
      Q      Вопрос.
             Обычно  означает, что строка окончена неверно. Это предупреж-
             дение о возможной ошибке.
      R      Перемещение.
             Недопустимое использование перемещения в выражении.
      U      Неопределенное символическое имя.
      V      Ошибка значения.
             При первом проходе псевдокоманда не может получить необходи-
             мого    определенного значения. Если символ, встретившийся в
             псевдокоманде, определен ниже, то при втором проходе  ошибка
             выдаваться не будет.
     кроме флагов компилятор выдает следующие сообщения об ошибках:
     'NO END STATEMENT ENCOUNTED ON INPUT FILE'
        нет оператора END;
     'UNTERMINATED CONDITIONAL'
        по меньшей мере один условный блок не завершен до конца файла;
     'UNTERMINATED REPT/IRP/IRPC/MACRO'
        по меньшей мере один блок не завершен;
     [XX] [NO] FATAL ERROR(S) [,XX WARNINGS]
        количество серьезных ошибок и предупреждений.
        Это сообщение всегда выводится на консоль и в файл с листингом.

        Программа вывода перекрестных ссылок.
     Для создания листинга с перекрестными ссылками сначала компилятор м80
должен создать специальный файл.  MACRO создает этот файл, если задан ключ
/C.  При  задании  ключа /C вместо файла типа .LST компилятор создает файл
типа .CRF.  После того,  как M80 закончит трансляцию, надо загрузить прог-
рамму CREF.
     После загрузки CREF выводит на экран запрос * и ждет ввода  командной
строки. формат командной строки для CREF:
     * лист.файл = исх.файл
по умолчанию тип исходного файла - .CRF
после   этого CREF создает файл типа .PRN, содержащий таблицу перекрестных

                                  - 37 -
ссылок.
     Листинг такого файла отличается от стандартного следующим:
     - каждое предложение начинается с номера;
     - в конце листинга в алфавитном порядке печатаются все символические
       имена с номерами тех строк, где они встретились. Номер строки, в
       которой данное символическое имя определено, отмечается знаком #.


   ENDM
результат будет аналогичен предыдущему примеру.

        Блок IRPC - ENDM.

     формат макрокоман

Control Sequences

          ТАБЛИЦА УПРАВЛЯЮЩИХ ПОСЛЕДОВАТЕЛЬНОСТЕЙ ДЛЯ ДРАЙВЕРА КОНСОЛИ

 ╔════════════════════╤═══════════════════════════════════════════════════════╗
 ║   Коды             │          Выполняемая функция                          ║
 ╠════════════════════╪═══════════════════════════════════════════════════════╣
 ║  07                │ Звонок                                                ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  08                │ Курсор на позицию влево                               ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  09                │ Табуляция                                             ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0A                │ Перемещение курсора в начало следующей строки ( со    ║
 ║                    │ скроллингом)                                          ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0D                │ Перемещение курсора в первую позицию текущей строки   ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  18                │ Kурсор на позицию вправо                              ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  19                │ Курсор на позицию вверх                               ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1А                │ Kурсор на позицию вниз                                ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0E                │ Hабор символов, соответствующим пропистным и строчным ║
 ║                    │ буквам русского алфавита                              ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0F                │ Полный набор символов знакогенератора КОИ-8           ║
 ║  1B 5B             │                                                       ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 5C             │ Набор символов КОИ-7                                  ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 3A             │ Включить курсор                                       ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 3B             │ Отключить курсор                                      ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 36             │                                                       ║
 ║  1B 62             │ Включение режима вывода символов в негативе           ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 37             │                                                       ║
 ║  1B 61             │ Выключение режима вывода символов в негативе          ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0C                │ Стирание экрана                                       ║
 ║  1F                │                                                       ║
 ║  1B 45             │                                                       ║
 ║  1B 4A             │                                                       ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  0B                │ Курсор перемещается в верхний левый угол              ║
 ║  1B 48             │                                                       ║
 ╟────────────────────┼───────────────────────────────────────────────────────╢
 ║  1B 59 20h+Y 20h+X │ Прямая адресация курцора в точку с координатами X,Y   ║
 ╚════════════════════╧═══════════════════════════════════════════════════════╝
Clone this wiki locally