драйвер обмена с телетайпом
Консоль, или пульт оператора, в современных МП системах реализуется, как правило, на базе алфавитно- цифрового или графического дисплея. Тем не менее применение в качестве консоли телетайпа имеет ряд достоинств.
Во-первых, в телетайпе наряду с клавиатурой и печатающим устройством имеются устройства ввода и вывода на пятидорожечную перфоленту (трансмиттер и перфоратор), что делает телетайп более универсальным, чем дисплей; во-вторых, телетайпы в настоящее время широко распространены и более доступны, чем дисплеи.При проектировании драйвера телетайпа возникает проблема, связанная с тем, что телетайп воспринимает символы, представленные в системе кодирования МТК-2 (международный телеграфный код), а для внутренних обменов в МП системе, как правило, используется система кодирования КОИ-7 (код обмена информацией). Для дисплеев этой проблемы нет, так как большинство дисплеев «понимает» КОИ-7. Решить эту проблему с помощью простого перекодирования, программа которого приведена в гл. 5, не удается, так как системы кодирования МТК-2 и КОИ-7 различаются не только значениями кодов одинаковых символов, но и структурой. В системе КОИ-7
Рис. 6.3. Таблицы перекодировки:
а — ЛАТ; 6 — РУС; в — ЦИФ (символ КТМ означает «Кто там?»)
каждый символ кодируется семибитным кодом, который однозначно определяет этот символ. В системе же МТК-2 символы кодируются пятибитными кодами, причем один код может соответствовать сразу трем символам, а конкретный символ определяется по текущему значению специального признака — управляющего регистра. Выделяют три управляющих регистра: цифровой (ЦИФ), латинский (ЛАТ) и русский (РУС). Каждый регистр в системе МТК-2 имеет свой уникальный десятичный код: (ЦИФ) = 27, (ЛАТ) = 31, (РУС) = 32. Кроме регистров, уникальные коды имеют управляющие символы «Перевод строки» (ПС) = 02, «Возврат каретки» (ВК) = 08 и «Пробел» (.—) = 04.
Для перекодировки символов из системы КОИ-7 в систему МТК-2 и обратно необходимо иметь три таблицы (рис. 6.3). Каждая таблица содержит 32 элемента (клет-
ки) с обозначениями в них символов соответствующего регистра. Значение любого символа в таблицах, выраженное в системе МТК-2, равно сумме соответствующих координатных индексов, расположенных в верхней строке и крайнем левом столбце каждой таблицы. Например, значение латинского символа Q равно 20 + 3=23. На языке ассемблера таблицы перекодировки имеют вид:
В этих таблицах значение символов представлено в системе КОИ-7, а значение символов в системе МТК-2 определяется порядковым номером соответствующего символа внутри таблицы.
Для управления обменом с телетайпом (как вводом, так и выводом) необходимо запоминать коды последнего
257
9.-1926
Рис. 6.4. Структура драйвера телетайпа
принимаемого и передаваемого регистра. Драйвер обмена с телетайпом состоит из пяти подпрограмм и имеет структуру, показанную на рис. 6.4. Как вводимые, так и выводимые символы подлежат перекодировке, которая выполняется соответствующими программами. Перекодировку символов из системы МТК-2 в систему КОИ-7 выполняет программа МТККОІ:
Вторым входным параметром программы является адрес ячейки памяти, в которой хранится код последнего принятого регистра. В начале программы по значению этого кода устанавливается в регистровой паре (Н, L) адрес соответствующей таблицы перекодировки (если задается некорректное исходное значение кода регистра или кода перекодируемого символа, то выполняется возврат из программы с установкой выходного параметра (А) = = 0FFH). После этого значение кода перекодируемого символа добавляется командой DAD В к адресу начала таблицы в регистровой паре (Н, L).
Полученная сумма является адресом ячейки памяти, где хранится код КОИ-7 перекодируемого символа. Если выбранное из таблицы значение кода является кодом управляющего регистра, оно записывается по адресу текущего регистра (второй входной параметр), и выполняется возврат из программы со значением выходного параметра (А) = 00. В противном случае в выходной параметр записывается код КОИ-7 перекодируемого символа.При перекодировке из системы КОИ-7 в систему МТК-2 для выбора таблицы перекодировки используется следующее правило: коды символов КОИ-7, значения которых лежат в диапазоне 41Н — 5АН, принадлежат таблице латинского регистра МТК-2, коды в диапазоне 61Н — 4АН — русского, коды в диапазоне 20Н — 39Н — цифрового. Исключение составляют управляющие символы ПС, ВК и пробела, которые присутствуют во всех таблицах, а также особые символы «Ю», «Э», «Ш», «Щ». На рис. 6.3 элементы, содержащие эти символы, отмечены звездочкой. Перекодировку из системы КОИ-7 в систему МТК-2 выполняет программа КОІМТК:
Программа, помимо перекодировки, записывает по адресу, содержащемуся во втором входном параметре, код соответствующего регистра МТК-2. В начале программы осуществляется селекция управляющих и особых символов, о которых речь шла выше. Селекция производится путем прямого сравнения. Если обнаруживается управляющий (безрегистровый) символ, в выходной параметр записывается код этого символа в системе МТК-2 и осуществляется возврат из программы. Если же обнаруживается особый символ «Ю», «Э», «Ш» или «Щ», то перед возвратом по адресу регистра (второй входной параметр) записывается код цифрового регистра. Затем, исходя из принадлежности кода символа к соответствующему диапазону, определяются адрес таблицы перекодировки и код регистра.
Если код перекодируемого символа не принадлежит ни одному из диапазонов значений, то в выходной параметр записывается признак несуществующего кода. В противном случае код регистра записывается по адресу, определяемому вторым входным параметром, а в соответствующей таблице путем последовательного сравнения производится поиск символа. При обнаружении элемента, содержащего код перекодируемого символа, индекс элемента, являющийся кодом этого символа в системе МТК-2, записывается в выходной параметр и выполняется возврат из программы.Устройство сопряжения и алгоритм обмена с телетайпом по' своей структуре аналогичны УС типа ИРПС (различаются только уровни напряжения в приемной и передающей цепях). Поэтому для ввода-вывода телеграфных посылок можно использовать подпрограммы драйвера ИРПС (ВВРПС и ВЫРПС):
Инициализация выполняется программой ИНТЛП, которая программирует УСАПП и обнуляет содержимое рабочих ячеек памяти, предназначенных для хранения кодов регистров. В этой программе инструкция режима отличается от инструкции режима в подпрограмме ИНРПС тем, что длина посылки устанавливается равной 5 битам, а длина стоп-бита — 1,5 бита, что соответствует правилам кодирования в системе МТК-2.
Процедура ввода символа с телетайпа, которую реализует программа ВВТЛП, заключается в следующем. Ввод телеграфной посылки осуществляется с помощью подпрограммы ВВРПС. После этого следует обращение к подпрограмме МТККОІ, которая перекодирует введенный символ в систему КОИ-7 и записыает код соответствующего регистра в рабочую ячейку РВВ. Если введенная посылка является кодом регистра, возврат из программы не производится и процедура ввода повторяется; в противном случае выполняется возврат из программы.
Вывод символа на телетайп выполняет подпрограмма ВЫТЛП. Символ, представленный в системе КОИ-7, с помощью подпрограммы КОІМТК перекодируется в систему МТК-2. Если в результате перекодировки образуется код текущего регистра, отличный от кода предыдущего регистра, соответствующего предыдущему выведенному символу, необходимо до вывода текущего символа выполнить вывод нового кода текущего ре
гистра. С этой целью в рабочей ячейке ПРВЫ сохраняется код предыдущего регистра, а в ячейку ТРВЫ записывается код регистра текущего символа. Если после возврата из подпрограммы КОІМТК содержимое указанных ячеек различается, ячейка ТРВЫ копируется в ячейку ПРВЫ, а затем ее содержимое с помощью подпрограммы ВЫРПС выводится на телетайп. Аналогичным образом вслед выводится сам символ. Если же содержимое ячеек ПРВЫ и ТРВЫ одинаково, вывод кода регистра не производится. Программы ВЫТЛП и ВВТЛП обеспечивают сохранение всех регистров МП, кроме аккумулятора.
6.5.