<< Вернуться к содержанию










                  Локальная сеть для ПЪЛДИН-601/601А

                                 U-LAN


                Руководство для потребителя и программиста











   Аннотация
   --------

   Предметом этой части руководства является 8-битовая часть
гетерогенной локальной сети.  Предполагается, что потребитель уже
знаком с персональным компьютером Пълдин-601/601А или с
некоторыми более новыми вариантами, а также и с операционной
системой UniDOS.  В этой части настоящего руководства, кроме
описания работы с 8-битовой частью, сделано и подробное изложение
архитектуры и идеологии сети.  Также подробно описана и концепция
для портов и каналов программ, посредством которых построен
транспортный интерфейс.






   При описании формата команд использованы следующие
общие конвенции:

   - при помощи символа вертикальная прерывная черточка '|'
     отделяются вариантные элементы;

   - квадратными скобками '[]' огораживается необязательный
     элемент;

   - фигурными скобками '{}' огораживается элемент, который
     может присутствовать один раз или более;

   - круглые скобки '()', если они употрелбены, представ-
     ляют обязательную часть формата команды;

   - отдельные элементы одной номанды или части одного
     элемента отделяются один от другого при помощи запятой
     или интервала;

   - для образования формата команд и имен файлов использо-
     ваны конвенции операционной системы UniDOS.



   Задание команд к UniDOS выполняется способом, определенным
для самой операционной системы и ввиду этого не является объектом
настоящего руководства.


   В тексте настоящего руководства использованы следующие
сохраненные торговые марки:

   - Пълдин-601, Пълдин-601А - сохраненная торговая марка
     содружества "Абакус";

   - UniDOS - сохраненная торговая марка НИПЛ "Програмно
     осигуряване";

   - APPLE DOS - сохраненная торговая марка  Apple Computer
     Inc;

   - IBM PC/XT - сохраненная торговая марка  International
     Business Machines Corp;

   - MS-DOS - сохраненная торговая марка Microsoft Corp.;

   - Правец 8 и Правец 16 - сохраненная торговая марка КМТ-
     Правец;

   - U-LAN - сохраненная торговая марка содружества "Информа-
     тика" - БАН.




СОДЕРЖАНИЕ
----------

1. УСТАНОВКА СЕТИ ........................................
 1.1. Установка сетевого контроллера .....................
 1.2. Установка сообщительного кабеля ....................

2. СТАРТ СЕТИ ............................................

3. ИСПОЛЬЗОВАНИЕ СЕТИ С UniDOS ...........................
 3.1. Изпользование дисководов сервера

4. АРХИТЕКТУРА СЕТИ ......................................

5. ОПИСАНИЕ ПРОТОКОЛА ....................................

6. ИСПОЛЬЗОВАНИЕ СЕТИ АССЕМБЛЕР-ом .......................
 6.1. Функции базового программного обеспечения ..........
 6.2. Описание транспортного контрольного блока ..........
  6.2.1. Описание полей контрольного блока ...............
  6.2.2. Описание полей слова канальной программы ........

7.  ДЕЙСТВИЯ ПРИ ОТКАЗЕ ТЕХНИЧЕСКИХ СРЕДСТВ ..............

ПРИЛОЖЕНИE ...............................................


   Локальная сеть U-LAN имеет широкую область приложения -
обучение, управление и др.  Локальная сеть работает с компьютерами
"Пълдин-601", "Пълдин-601А" под управлением операционной системы
UniDOS, "ПРАВЕЦ 82", "ПРАВЕЦ 8M", "ПРАВЕЦ 8A", "Apple II", "Apple
IIe" и другими совместимыми с ними под управлением операционной
системы Apple DOS 3.3, как и с компьютерами фамилии IBM PC/XT и
совместимыми под управлением операционной системы MS-DOS.


                 ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ
                 ---------------------------
сообщительная среда           - двухпроводная линия (скручен-
                                ная пара) или коаксиальный
                                кабель
скорость обмена               - 220 000 бита/сек
эффективная скорость          - 20 Kбайта/сек
общая длина линии             - до 600 м
максимальное число станций    - 63
протокол доступа              - МДОН/РК (CSMA/CD)


   U-LAN построена по магистральной топологии (типа общей
шины), при этом для сообщительной среды используется не-
экранизированный кабель витая пара (или коаксиальный кабель).

   Управление обменом распределено, т.е. не выделяется
специальный центральный компьютер (арбитр), который бы
управлял обменом. Трафик не отражается на неучаствующих в
нем станциях.

   Системное программное обеспечение разполагается на ПЗУ и
выполняется основным микропроцессором компьютера.  Интерфейсную
плату можно подключить в произвольное периферийное гнездо
персонального компьютера.

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


               ПРЕИМУЩЕСТВА ЛОКАЛЬНОЙ СЕТИ:
               ------------------------------
* низкая цена подключения персональных компьютеров к сети и
  малые требования к сообщительной среде;
* распределенное управление трафиком (отсуствие центрального
  компьютера) водит к более высокой надежности и полноценному
  использованию магистральной скорости;
* протокол МДОН/РК обеспечивает почти 100 % уплотнения сообщи-
  тельного канала при больших нагрузках;
* использование сети дает возможность уменьшения числа перифе-
  рийных устройств и увеличения эффективности их использования
  посредством обеспечения доступа к ним большего числа потре-
  бителей;
* минимально необходимым и достаточным условием для запуска
  сети является:
  - сетевой контроллер для каждого компьютера;
  - соединяющий кабель;
  - наличие хотя бы одного флоппи-дискового устройства для
    загрузки операционной системы.



1. УСТАНОВКА СЕТИ

1.1. Установка плат

   Сетевой контроллер можно поставить в компьютер на произвольный
разъем.  Если компьютер не оснащен дисководом, то загрузка
операционной системы произойдет по сети.

   Адресация отдельных компьютеров в сети производится
посредством номера, фиксированного для каждой сетевой
платы. Номер определяется через ПИС, расположенный в верх-
ней части сетевого контроллера, используя перключатели с
номерами с 1 по 6. Номер определяется двоично с 1 по 63.
Например, чтобы определить номера трех контроллеров 13, 33
и 61, нужно чтобы переключатели были поставлены следующим
образом:

        1 2 3 4 5 6 7 8
        ---------------
        0 0 1 1 0 1 X X          (13)

        1 0 0 0 0 1 X X          (33)
        1 1 1 1 0 1 X X          (61)

где:      0       положение 'OFF' переключателя
          1       положение 'ON' перключателя
          X       не имеет значения положение переключателя

   Каждая плата, включенная в сеть, должна иметь уникальный
номер. Включение контроллера с номером, который уже исполь-
зовался в сети, будет сигнализировано на экране одновремен-
но с включением компьютера в сеть сообщением:


   ДУБЛИРОВАННыЙ НОМЕР

   Это же сообщение появляется и при включении в сеть
контроллера с номером 0, так как номер 0 используется для
адресации всех станций.


1.2. Установка сообщительного кабеля

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

   Один шифтовый соединитель включается в гнездовой соеди-
нитель сетевого контроллера, а другой - в гнездовой соеди-
нитель распределительной коробки. Желательно, чтобы кабель
не был натянут, для избежания случайных отключений.

   Для установки локальной сети обращайтесь к производителю
или к специально уполномоченным лицам. Любой опыт изменения
конфигурации неуполномоченными лицами может привести к по-
вреждению.



2. СТАРТ СЕТИ

   Каждый компьютер после включения, если он не имеет дисковых
устройств, посылает запрос на загрузку UniDOS по сети.  Запрос
будет исполнен серверным компьютером (компьютер с дисководами, в
котором загружено специальное программное обеспечение для
обслуживание запросов на операции ввода/вывода к дискам).  Если
такого нет, компьютер работает как компьютер без дисководов.

   Если компьютер имеет дисковое устройство, производится попытка
загрузить операционной системы UniDOS с него.  Если в дисководе не
найдена дискета, посылается запрос на загрузку по сети.  Доступ к
дискам серверного компьютера осуществляется таким же способом, как
и с компьютера без собственного дискового устройства.

   Старт сети производится следующим основным способом:

   Сначала включается серверный компьютер, который загружает
UniDOS с собственного дискового устройства.  Только после этого
включаются компьютеры, неимеющие дисковых устройств.  Они
автоматически загружают UniDOS по сети.  Компьютеры с собственными
дисководами с дискетами операционной системы включаются в любое
время.


3. ИЗПОЛЬЗОВАНИЕ СЕТИ С UniDOS

   При активировании сетевого интерфейса на экране появляется
сообщение:

   U-LAN 1.0 - СТАНЦИЯ НОМЕР NN

   где NN - номер вашего компьютера (см.  1.1).

   Сразу после своего активирования базовое сетевое програм-
мное обеспечение проводит серию тестов работоспособности
контроллера, и если обнаружит дефект платы или неисправность
в соединении к сообщительной среде, выводит на экран сообще-
ние

   ДЕФЕКТ #N

   где N - 1, 2 или 3.  После появления этого сообщения рабо-
та с сетью этого компьютера невозможна до удаления дефекта и
нового активирования базового сетевого программного обеспече-
ния.

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



3.1. Изпользование дисководов сервера

   Дисковые устойства серверного компьютера доступны с любого
подключенного к локальной сети компьютера как блоковые устройства
с именами C:  (первое дисковое устройство сервера) и D:  (второе
дисковое устройство сервера, если такое существует).

   Это означает, что возможно выполнение команд UniDOS над
файлами, находящиеся на дисководах сервера, например команда

   copy c:\common\datafile.* a:

   производит копирование всех файлов по именем DATAFILE (с любым
расширением имени), находящиеся в поддиректории COMMON корневой
директории дискеты, которая поставлена в первом дисководе
серверного компьютера, на дискету в первом дисководе компьютера, с
которого выдается команда.

   Точно также возможно выполнение "внешних" команд (программных
файлов), расположеные на дисках сервера, например командой

   d:unied a:myfile.txt

   инициируется выполнение системного редактора UniED операционной
системы UniDOS, находящегося на втором диске сервера, и в качестве
параметра ему задается текстовой файл MYFILE.TXT с дискеты в
первом дисководе компьютера, с которого выдается команда.



4. АРХИТЕКТУРА СЕТИ

   Целостное управление обмена информации между станциями
децентрализованно - каждая станция может самостоятельно
осуществить сетевую операцию без посредничества . Управление
сетевыми операциями динамично при этом управляющей станцией
является та, которая была инициатором сетевой операции.
В любое время может быть только одна управляющая станция.
Она сохраняет свои права до окончания сеанса связи, который
может быть с максимальной продолжительностью около 3 сек
(длина переброшенного блока может быть до 64 Кбайтов).
Затем сообщительная среда освобождается и управление берется
станцией, которая первой успеет получить доступ к линии.
При одновременных запросах к доступу, вопрос о приоритете
решается на базе номеров станций. Этот подход обеспечивает
эффективное использование сообщительной среды, а при большом
числе запросов (большом трафике), коэффициент полезного
исползования близок к 100%.


   Этот подход решает также и другую проблему - независимость
сообщительной среды от медленных периферийных устройств.
Например, если читается файл с дискового устройства другой
станции, то он читается по секторам, при этом каждый сектор
посылается посредством отдельной сетевой операции. В паузах,
между обменом отдельных секторов, сообщительная среда осво-
бождается для других сетевых операций.

   Характерно для сети введение управляющего сигнала, кото-
рый посылается в начале каждого сеанса. При помощи апаратных
средств сигнал распознается и интерпретируеся как запрос на
прерывание, посылаемая микропроцессору, при этом генерируется
только одно прерывание за сеанс. Таким образом достигается
независимость незанятых в информационном потоке компьютеров
и обеспечивается прозрачность системного программного обес-
печения по отношению к потребительскому программному обес-
печению. Это означает, что при обращении к данной станции,
если в ней выполняется какая-нибудь программа, то ее выпол-
нение прерывается на момент и после обслуживания прерывания
восстанавливается  опять и так как время обслуживания
прерывания достаточно мало, потребитель почти его не
замечает.

   Каждая сетевая операция производит обмен информацией
парой процессов (исключение составляют сетевые операции,
ориентированные ко всем станциям), протекающих в двух
станциях, участниках сеанса. Чтобы осуществить диалог между
собой, процессы обмениваются сообщениями. Процесс получает
или посылает сообщения через логические (программно-органи-
зованные) интерфейсы, названные портами. Порты делятся на
обслуживающие и заказывающие. Таким образом, процесс как
объект, представляется совокупностью портов, через которые
он взаимодействует с другими процессами в сети. При этом
порты создаются по заказу текущего процесса.

   Из всего этого следует, что для того чтобы мог обменять
информацию с другими процессами в сети, процесс должен
назначить (открыть) соответветствующие порты. Каждая
станция может иметь одновременно до 128 открытых обслу-
живающих и 128 запрашиваюших портов.

   Каждый порт характеризуется соответствующей таблицей
управления транспортом сообщения, названная контрольным
блоком (UTCB - U-Lan Transport Control Block).

   Чтобы назначить данный порт необходимо инициализировать
соответствующие элементы его таблицы (UTCB) и обратиться к
соответствующей функции (функция 'START') базового
программного обеспечения сети. Механизм назначения и осво-
бождения портов, как и структура UTCB описаны в главе 6
настоящего руководства.

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


   0, 1              для загрузки (boot) UniDOS по сети
   2..7              зарезервированные
   8, 9              для использования UniDOS-ом
   10..31            зарезервированные

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



5. ОПИСАНИЕ ПРОТОКОЛА

   Перед началом передачи, каждая станция прослушивает сеть
за 3 ms. Если не регистрирует чужую передачу, она передает
свой собственный номер. В случае, если она не получит обратно
тотже номер (что означает одновременную передачу нескольких
станций), она переходит к логарифмически тактованному методу
доступа CSMA/CD, при чем она оказывается с более низким
приоритетом и остается выжидать. В случае, если получит
обратно свой собственный номер, она получает доступ к
сообщительной среде.

   Сообщение начинается сигналом прерывания, последованным
заглавной частью сообщения следующего вида:

 <# получателя> <# подателя> <# порта> <длина> <тип>

(длина - 2 байта, а остальные элементы - по 1 байту).

После этого станция ожидает получить один байт "код
ошибки". Если он не будет получен, операция повторяется
8 раз. Если код ошибки - 0, операция считается успешной,
а если он не 0 - станция прекращает операцию и возвращает
код ошибки потребителю. (Исключение представляет передача
ко всем станциям, при которой станции не посылают отрица-
тельных ответов).

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


   Если блок данных не принят правильно, целый сеанс
повторяется снова.



6. ИЗПОЛЬЗОВАНИЕ СЕТИ АССЕМБЛЕР-ом

6.1. Функции базового программного обеспечения


         Наименование  Номер функции

          INSTALLED            0
          INIT                 1
          START                2
          STOP                 3
          WHOAMI               4
          ECHO                 5
          ECHOPORT             6


   Вызов интерфейса транспортного уровня производится загрузкой в
аккумуляторе A номера функции, загрузкой остальных параметров,
если и как функция их требует, и выполнением инструкции

         INT $71


   Описание парметров функций
   --------------------------

   INSTALLED
   Параметры: Нет
   Функция:   Проверяет активизирован ли транспортный интерфейс
   Результат: Аккумулятор A содержит $FF, если активизирован.

   INIT
   Параметры: Нет
   Функция:   Закрывает все порты, которые ожидают
              получение данных и сообщает об этом по сети.
   Результат: Номер станции возвращается в аккумуляторе A.


   START
   Параметры: Адрес контрольного блока (UTCB) в регистре X.
   Функция:   Открывает порт, т.е. стартирует обмен данных
              по указанной в контрольном блоке канальной
              программе и параметрам: партнер в обмене,
              номер порта. Смотри описание ТСВ.
   Результат: Код ошибки записывается в контрольный блок.

   STOP
   Параметры: Аккумулятор B содержит номер порта.
   Функция:   Закрывает порт, т.е. прекращает выполнение
              канальной программы.
   Результат: Код ошибки возвращается в аккумуляторе A.

   WHOAMI
   Параметры: Нет
   Функция:   Возвращает собственный номер станции.
   Результат: Номер станции возвращается в аккумуляторе A.

   ECHO
   Параметры: Старший байт регистра X содержит номер сетевой
              станции.
   Функция:   Проверяет активность указанной станции.
   Результат: Код ошибки возвращается в аккумуляторе A.

   ECHOPORT
   Параметры: Старший байт регистра X содержит номер сетевой
              станции, а младший - номер порта.
   Функция:   Проверяет активность указанного порта
              указанной станции.
   Результат: Код ошибки возвращается в аккумуляторе A.


6.2. Описание транспортного контрольного блока

   UTCB содержит описание параметров порта и адрес канальной
программы (последовательность слов управления транспортным
процессом).  После открытия порта (первым вызовом функции START с
параметром этот контрольный блок) системное программное
обеспечение начинает выполнять слова канальной программы, которые
должны быть расположены последовательно в памяти.  Для изменения
последовательного ряда выполнения команд канальной программы
предусмотрена команда перехода в канальную программу.

   Поля в UTCB становятся доступными в ассемблеровской
программе псевдокомандами:

                        section 0
        IOError         ds      1
        Host            ds      1       ;*
        Port            ds      1       ;*
        FirstCtrlWord   ds      2       ;*
        CurrentCtrlWord ds      2
        TimeLeft        ds      2
        ErrorHandler    ds      2       ;*
        NextUTPB        ds      2
                        ends

   Аналогично описание UTCW:

                        section 0
        Command         ds      1       ;*
        BufferAddr      ds      2       ;*
        BufferLength    ds      2       ;*
        ReceivedLength  ds      2
        TimeOut         ds      2       ;*
        UserService     ds      2       ;*
                        ends

   (звездочкой отмечены поля, значения которых задаются
потребителем).

   Адрес данного элемента UTCB получается как сумма началь-
ного адреса UTCB и соответствующего сдвига (IOError, Host,...).


Пример:
------
   Если хотим проверить код ошибки, то нужно исследовать
содержание клетки памяти с адресом UTCB1+IOError, где UTCB1
- адрес соответствующего контрольного блока.


6.2.1. Описание полей контрольного блока

   В IOError после выполнения каждой операции записывается
код ошибки. Коды - (шестнадцатеричные):

     0 - нет ошибки, успешно закончена операция
   $41 - указанная станция не отвечает (TimeOut)
   $42 - опыт открытия порта, который уже открыт
   $43 - обращение к порту (в указанной станции), который
         не открыт
   $44 - коммуникационный процесс прекращен из-за закрытия
         соответствующего порта указанной станции
   $45 - порт указанной станции занят
   $46 - сообщение очень длинное и его получение отброшено
   $47 - несогласованость между сетевыми операциями в
         коммуникирующих портах двух станций
   $80 - (как и каждая большая чем $80, т.е. с поднятым
         старшим битом) коммуникационный процесс не окончен
         - показывает, что канальная программа выполняется

   Host содержит номер станции, с которой должен быть
выполнен обмен. Номер 0 означает произвольную станцию. Для
обслуживающих портов после первого получения данных в Host
записывается номер станции, из которой получены данные.

   Port - номер порта, с которым обмениваются данные.
Порты с четными номерами - обслуживающие, это означает, что
при открытии они не связываются с определенной станцией
(Host = 0), а станция, с которой будут обмениваться данными
определяется при первом обмене. В случае ошибки при обмене
данных, по умолчанию (при отсутствии подпрограммы для
обработки ошибок ErrorHandler) они не закрываются, а восстанавли-
ваются в свое исходное состояние, и их канальная программа
обычно заканчивается логически командой восстановления
(Reset). Порты с нечетными номерами - запрашивающие. Каждый
порт с нечетным номером осуществляет обмен с обслуживающим
портом с номером на единицу меньшим чем его, в указанной
станции (или станциях). При возникании ошибки выполнение
канальной программы такого порта прекращается (по умолчанию)
и порт закрывается.

   FirstCtrlWord - адрес первого слова канальной программы порта.

   CurrentCtrlWord во время выполнения содержит адрес выполняемого
в данный момент слова канальной программы порта.

   TimeLeft содержит остающееся время для выполнения
текущего слова канальной программы в условных единицах.
Если значение - 0, время не ограничено. В противоположном
случае при уменьшении значения до 0 возникает ошибка $41
(TimeOut).

   ErrorHandler - адрес ассемблеровской подпрограммы, которая
вызывается в случае возникания ошибки при выполнении канальной
программы.  Она должна сохранить только содержание использованного
до нее стека и вернуть в флаг переноса (C) должно ли прекратиться
выполнение канальной программы (CLC) или может продолжать (SEC).
Подпрограмма может модифицировать UTCB и канальную программу
произвольным способом с целью справиться с возникшей ошибкой
(например она может переправить указатель CurrentCtrlWord к
другому слову канальной программы).  Возвращение из этой
подпрограммы должно произойти инструкцией RTS.  В случае, что
заданный адрес подпрограммы - 0, выполнение канальной программы
прекращается.

    Замечание:
    ----------
   При невозможности продолжить выполнение канальной программы
(когда после окончания ErrorHandler флаг переноса - 0 )
запрашивающие порты закрываются, а обслуживающие стартируют вновь.
Если в таком случае необходимо закрыть обслуживающий порт,
ErrorHandler должна направить поле CurrentCtrlWord к слову
канальной программы с кодом операции DONE и вернуться с флагом
переноса - 1 (SEC).

   UTCB содержит еще одно двухбайтовое поле со служебным
содержанием, которое программа не должна менять.


6.2.2. Описание полей словом канальной программы

   COMMAND содержит код сетевой операции:

NOP   = 0 - пустая операция
            используется при модифицировании команд 1 и 2
SEND  = 1 - засылка данных
RCVE  = 2 - получение данных
        3 - зарезервирован
SKIP  = 4 - пустая операция
            используется при модифицировании команды 5
JMP   = 5 - переход к слову канальной программы
            используется, когда следующее логически слово
            не следует физически в памяти
RESET = 6 - рестарт канальной программы
DONE  = 7 - прекращение выполнения канальной программы

   При кодах операции NOP, SEND и RCVE длина слова - 11
байтов, при SKIP и JMP - 3 байта, а при RESET и DONE слово
состоит только из кода операции (длина 1 байт).

   BufferAddr - адрес буфера, содержащий данные для засылки или
в котором будут получены, если их получаем.

   BufferLength - длина данных, которые должны быть посланы, или
максимальная длина данных, которые могут быть получены в
этом буфере.

   В ReceivedLength записывается действительная длина полученных
данных (только для команд получения). Она может быть от 0
до BufferLength включительно.

   TimeOut задает максимальное время для выполнения этого
слова канальной программы в условных единицах. Значение 0
означает неограниченное время.

   UserService задаeт адрес потребительской подпрограммы, которая
будет вызвана перед засылкой или после получения данных.  Она
может не сохранять состояние процессора, но при использовании
UniDOS или других системных функции должны быть учтены особенносты
работы резидентных программ (так как она выполняется во время
обработки прерывания для засылки или получения данных).  При
возвращении из этой подпрограммы (инструкцией RTS) флаг переноса
(C) указывмает как нужно продолжить выполнение:
   C=0 означает, что можно перейти к выполнению следующего слова
канальной программы, а
   C=1, когда команда текущего слова - NOP или SEND, означает, что
нужно выждать и вызвать вновь эту подпрограмму, а когда команда -
RCVE означает, что выполнение канальной программы должно быть
прекращено.
   Если такая подпрограмма не является необходимой, UserService
должен быть 0.

   С целью облегчения программиста на ассемблере рекомендуется
использование следующих дефиниций:

        _ULan           =       $71

        ; функция (в A)

        F_Installed     =       0
        F_Init          =       1
        F_Start         =       2
        F_Stop          =       3
        F_WhoAmI        =       4
        F_Echo          =       5
        F_EchoPort      =       6

        ; команды контролната дума

        C_Nop           =       0
        C_Send          =       1
        C_Rcve          =       2
        C_Skip          =       4
        C_Jmp           =       5
        C_Reset         =       6
        C_Done          =       7

        ; коды ошибок

        E_NoError       =       0
        E_TimeOut       =       $41
        E_AlreadyUsed   =       $42
        E_PortNotUsed   =       $43
        E_PortClosed    =       $44
        E_PortBusy      =       $45
        E_DataTooLong   =       $46
        E_OutOfSequence =       $47
        E_Working       =       $80

        ;---------------------------------------
        ; описание контрольного блока

                        section 0
        IOError         ds      1
        Host            ds      1
        Port            ds      1
        FirstCtrlWord   ds      2
        CurrentCtrlWord ds      2
        TimeLeft        ds      2
        ErrorHandler    ds      2
        NextUTPB        ds      2
                        ends

        ; описание контрольного слова

                        section 0
        Command         ds      1
        BufferAddr      ds      2
        BufferLength    ds      2
        ReceivedLength  ds      2
        TimeOut         ds      2
        UserService     ds      2
                        ends




------------------------> К О Н Е Ц <------------------------