Пятница, 15.12.2017, 09:13
БК-0010.01. Повесть о настоящем компьютере
Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Меню сайта
Категории каталога
Введение в руководство [2]
Введение [0]
Организация БК-0010 [1]
Раздел 1. Организация БК-0010
Работа с МСД [1]
Раздел 2. Работа с МСД
Системные регистры [1]
Раздел 3. Системные регистры
Системное ПО [1]
Раздел 4. Системное программное обеспечение БК-0010
Прерывания. Приоритет ЦП [1]
Раздел 5. Система прерываний БК-0010. Приоритет процессора
Командные прерывания [1]
Раздел 6. Командные прерывания
ЕМТ БК-0010 [1]
Раздел 7. командные прерывания ЕМТ БК-0010
Коды и ассемблер. Мнемокод. [1]
Раздел 8. Коды и ассемблер. Мнемокод. Формат команды
Способы адресации [1]
Раздел 9. Способы адресации
Команды процессора БК-0010 [1]
Раздел 10. Система команд процессора БК-0010
Псевдокоманды. Метки. Комментарии [1]
Раздел 11. Псевдокоманды ассемблера. Метки. Комментарии
Программирование на ассемблере [1]
Раздел 12. Программирование на ассемблере. Начало. Трансляция программ. Ошибки
Отладка программ [1]
Раздел 13. Отладка программ. Позиционно-независимое программирование. Компановка
Подпрограммы ПЗУ БК-0010 [1]
Раздел 14. Подпрограммы ПЗУ БК-0010
Системная область ОЗУ БК-0010 [1]
Раздел 15. Системная область ОЗУ БК-0010. Некоторые секретные сведения об авторе и МП-клубе
Повышение быстродействия БК-0010 [1]
Раздел 16. Вопросы повышения быстродействия БК-0010
Об использовании ПЗУ [1]
Раздел 17. Полезная подпрограмма. Об использовании ПЗУ
Загадочные регистры [1]
Раздел 18. Загадочные регистры
Штурм системной области [1]
Раздел 19. Продолжаем штурм системной области
Об автозапуске программ [1]
Раздел 20. Об автозапуске программ
Коварные программы [1]
Раздел 21. Коварные программы
Еще о системной области [1]
Раздел 22. О пользе плагиата, или еще о системной области
О псевдокомандах и компановке [1]
Раздел 23. Еще раз о псевдокомандах, метках и компановке
Тук-тук, кто в стеке живет? [1]
Раздел 24. Тук-тук, кто в стеке живет?
Фокал с позиций ассемблера [1]
Раздел 25. Взгляд на фокал с позиций ассемблера
Наш опрос
Оцените мой сайт
Всего ответов: 47
 Каталог статей
Главная » Статьи » ЕМТ БК-0010

ЕМТ БК-0010

В СПО БК-0010 имеется довольно много прерываний ЕМТ. Каждое из них имеет свой номер (только четный), выполняет определенные, иногда очень сложные, действия, и использует определенные регистры ЦП. Кроме регистров ЦП, могут использоваться и выделенные в системной области ячейки памяти, но знание их нужно только в отдельных случаях.
Рассмотрим конкретные ЕМТ, некоторые лишь кратко, некоторые, более нужные для практики, подробно. При указании на используемые регистры мы будем отмечать только их изменения, предполагая, что содержимое остальных регистров не меняется.

ЕМТ 4. Инициализация драйвера клавиатуры.
Устанавливаются вектора прерываний от клавиатуры, сбрасывается маска прерываний от клавиатуры, устанавливается режим передачи кодов клавиатуры по запросам рабочей программы и код 12 клавиши ввод. Содержимое R0 не сохраняется.
Пример использования: если по ходу программы мы запрещали прерывание от клавиатуры, то можем командой ЕМТ 4 снять запрет.

ЕМТ 6. Чтение кода с клавиатуры.
Совершенно аналогично команде фокала X FCHR[-1]: исполнение программы прерывается до нажатия клавиши.
Выход: после нажатия - код клавиши в младшем байте R0.
Примеры: чтение кода клавиши при останове программы; останов программы и ожидание инициативы.

ЕМТ 10. Чтение строки с клавиатуры.
Вход: R1 - адрес начала области ОЗУ, отведенной для записи вводимых с клавиатуры кодов символов. R2 - ограничители строки: мл. байт - длина строки в байтах (если 0, то 20000 байт); ст.байт - код символа-ограничителя (записывается в строку последним).
прерывание завершается после выполнения одного из 2 условий ограничения строки. При вводе возможны исправления клавишей забой. Вводимый с клавиатуры текст в процессе ввода отображается на экране, управляющие клавиши осуществляют соответствующие действия, и их коды также заносятся в ОЗУ, вместе с текстом.
Выход: R1 - адрес последнего введенного байта +1. R2 - разность между заданной длиной строки и введенной строкой.
Пример: ввод текста с клавиатуры при останове программы.

ЕМТ 12. Установка ключей клавиатуры.
Как известно, клавиши 0...9 БК-0010 по нижнему регистру (К1-К10) могут выдавать заранее заданные тексты. Для этого эти клавиши (ключи) нужно установить (запрограммировать).
Вход: R0 - номер программируемого ключа. R1 - начальный адрес зоны ОЗУ, в которой размещены коды символов текста ключа, причем первый байт текста должен соответствовать длине текста в байтах, и как символ не выводится. Для сброса ключа необходимо задать R1=0. Содержимое R0 не сохраняется.

ЕМТ 14. Инициализация драйверов.
Обеспечивает:

  • установку в исходное состояние всех рабочих ячеек ОЗУ системной области, кроме стека,
  • установку всех векторов прерывания,
  • очистку экрана,
  • установку исходных режимов дисплея,
  • очистку порта ввода-вывода,
  • начальную установку системных регистров,
  • установку начальной скорости тлг-обмена 9600 бод.
Содержимое R0-R4 не сохраняется.
Таким образом, драйверы БК-0010 приводятся в исходное состояние, как после включения питания и выхода в ПМ или МСД.
Предупреждение: поскольку содержимое стека сохраняется, то останов программы после данного прерывания может, в зависимости от содержимого ячеек, привести к переходу по адресу, который мы не ожидаем, например, к выходу в фокал со стиранием ОЗУ, или к выходу в ПМ (что мы уже использовали).

ЕМТ 16. Передача кодов драйверу дисплея.
Аналогична X FCHR[] фокала, приводит к отображению на экране символа или смене режимов, в зависимости от кодов. Коды тех или иных операций или символов могут быть легко установлены пользователем в фокале с использованием функции FCHR[код] или FCHR[-1], поэтому приводить их мы за недостатком места не будем.
Вход: код символа или операции - мл.Байт R0.
Пример: отображение на экране одного символа или переключение режимов дисплея (формат 32/64, уст.цвета, сброс экрана и т.п.).

ЕМТ 20. Отображение строки символов.
Вход: R1 - адрес начала зоны ОЗУ, в которой записаны коды выводимого на экран текста; R2 - ограничитель строки, совершенно аналогичный ЕМТ 10, причем, если применен символ- ограничитель, то он выводится последним.
В строке могут быть, кроме кодов символов, записаны и управляющие коды - они будут исполнены. Например, первым байтом текста можно записать 14 - код очистки экрана.
Выход: R1 - адрес последнего выведенного байта +1; R2 - разность между заданной длиной строки и выведенным числом байт.
Пример: вывод на экран текста и (или) исполнение нескольких управляющих кодов.

ЕМТ 22. Запись символа в служебную строку.
Запись символов производится по одному, в соответствии с режимом дисплея, установленным на момент записи (инв.Строки, формат 32/64, и т.п.). Режимы могут меняться от символа к символу. Управляющие коды, невозможные для исполнения в одной строке, не исполняются (перевод строки, сброс экрана и т.п.).
Вход: R0 - код символа; R1 - номер позиции в служебной строке, начиная с 0 (крайний левый символ), и с учетом формата 32/64: после ввода, например, 5 символов в формате 32, чтобы вывести последующий текст в формате 64, нужно не только переключить режим (код 233), но и удвоить позицию (т.е. выведение текста продолжить с позиции 10д).
Сброс служебной строки - по коду 0 в R0, при командах СТОП, РП, или УСТ.ИНД.
Предупреждение: как известно, при переключении режимов дисплея (граф,зап,стир,ису,блр,рус,лат) и следующим за ним прерыванием, например, от клавиатуры, в служебную строку выводятся слова- индикаторы. Они могут занимать правую часть строки, стирая размещенную там информацию, до 24д символов от правого края (в режиме 64), поэтому если возможна такая ситуация, занимать правую часть строки информацией пользователя не рекомендуется.
Примеры: выведение служебных сообщений программы,"марки фирмы", и фамилии автора, названия программы, индикация режимов ее работы.

ЕМТ 24. Установка координат курсора.
Совершенно аналогична по действию X FK[x,y] фокала, но в зависимости от режима дисплея производится установка как символьного, так и графического курсора. Под координатами (0,0) понимается, как и в фокале, левая верхняя точка экрана, ниже служебной строки.
Вход: R1 - координата х; R2 - координата y.

ЕМТ 26. Чтение координат курсора.
Чтение координат курсора, которые он занимает на данный момент. Чтение, как и в случае ЕМТ 24, возможно в любом режиме (символьном или графическом).
Ввыход: R1 - координата х; R2 - координата y.

ЕМТ 30. Формирование точки по координатам.
Правила записи или стирания точки совершенно аналогичны таковым для функции FT[коп,x,y] фокала. Предварительная установка графического режима не требуется. Предварительно с помощью соответствующих команд можно установить цвет (яркость) точки и (или) фона.
Вход: R0 - код операции (1-запись точки, 0-стирание); R1 - координата x; R2 - координата y.

ЕМТ 32. Формирование вектора по координатам.
Совершенно аналогично правилам для фунции FV[коп,x,y] фокала.
началом вектора считается конец предыдущего вектора или последняя сформированная точка.
Вход: R0 - код операции (1-запись вектора,0-стирание); R1 - координата x конца вектора; R2 - координата y.

ЕМТ 34. Чтение слова состояния дисплея.
Как известно, дисплей в БК-0010 имеет множество режимов. Их включение отображается в виде слова состояния, имеющего следующий формат:
разряд соответствующий режим дисплея
00 режим '32'
01 инверсия экрана
02 режим 'рп'
03 рус.Регистр
04 подчеркивание
05 инверсия символа
06 инд.Су
07 бл.Ред.
08 граф.
09 зап.
10 стир.
11 режим '32' в служ.Строке
12 подчерк.В служ.Строке
13 инв.Символа в служ.Строке
14 гашение курсора
15 не используется

При этом действует правило: если в данном разряде 1, режим включен, если 0 - выключен (или включен альтернативный режим, например, лат/рус, 32/64).

Ясно, что, прочитав слово состояния, можно определить, какие режимы дисплея включены на данный момент.
Выход: R0 - слово состояния дисплея.
Пример: до установки формата 32/64 по разряду 11 слова состояния дисплея установить, какой режим уже включен, и в зависимости от этого выдать или не выдавать код переключения режима (233). То же самое относится и к прочим режимам.

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

ЕМТ 36. Работа с магнитофоном.
Обеспечивает управление двигателем магнитофона, чтение и запись информации, фиктивное чтение.
Вход: R1 - адрес блока параметров.
Блоком параметров
называется выделенная зона ОЗУ с предварительно занесенной туда информацией. Блок параметров может быть размещен в любом месте ОЗУ, но в системной области предусмотрена специальная зона (ячейки 320...370), Для записи блока параметров команды ЕМТ 36. В дальнейшем мы будем рассматривать содержимое именно этих ячеек, помня при этом, что, при условии соблюдения того же формата, блок параметров может быть размещен, начиная с любого адреса. Содержимое блока параметров лучше рассматривать побайтно. Формат блока параметров:
адрес байта содержимое байта
320 команда
321 ответ
322,323 адрес начала массива на запись или чтение
324,325 длина массива на запись
326...345 имя массива на запись или чтение
346,347 адрес текущего (последнего, считанного с мл) массива
350,351 длина текущего массива
352...371 имя текущего массива

Вот по этим-то адресам и заносим мы необходимые данные в фокале или МСД при работе с магнитофоном. Ясно теперь, почему, например, длина имени файла не может превышать 16д символов - это связано с установленным форматом блока параметров ЕМТ 36.
Ряд параметров имеет отдельные дополнительные ячейки хранения, в которых дублируется нужная информация.
Для адреса и длины текущего массива это, например, ячейки 264 и 266 (с которыми мы уже знакомы), Для байта ответа - 301, и т.д.
Причина этого в том, что при переполнении стека он может "расти вниз", стирая блок параметров. Но важная информация при этом будет "спасена".

Команда блока параметров задает режим магнитофона и БК-0010 для исполнения ЕМТ 36.
Байт команды может принимать значения:
0 - стоп двигателя магнитофона
1 - пуск двигателя магнитофона
2 - запись массива на мл
3 - чтение массива с мл
4 - фиктивное чтение массива

Отметим, что при исполнении команд 2,3,4 двигатель магнитофона включается и выключается автоматически, предварительная подача команд 0,1 не нужна.

Байт ответа может, в зависимости от результата операции, принимать значения:
0 - операция завершена без ошибок
1 - имя массива, прочитанное с мл, не совпадает с заданным
2 - ошибка контрольной суммы
3 - не используется
4 - останов по клавише стоп

Теперь должно быть ясно, как, например, считать массив с МЛ, пользуясь ЕМТ 36.
Задаем команду на чтение: пишем 3 по адресу 320. Задаем адрес размещения массива, для чего пишем, например, 1000, по адресу 322. Длину не задаем. Вводим имя массива, например, при помощи команды ЕМТ 10, с адреса 326, длиной 20, символ-ограничитель - ввод (код 12). Заносим в R1 адрес 320. Выполняем ЕМТ 36. После возврата из прерывания проверяем байт ответа, и если надо, выводим на экран прочитанное имя массива (например, командой ЕМТ 20, адрес 352, длина 20), а если надо, то, в зависимости от ответа - сообщение об ошибке или прерывании по команде оператора.

Теперь вы можете представить, от каких сложностей избавляют вас команды работы с магнитофоном МСД или операторы группы LIBRARY фокала: ведь они все это делают сами! Но при этом накладывается ряд ограничений: например, невозможно считать массив, не зная его имени. Знание системных программ позволяет обойти эту трудность. Правда, для решения приведенной задачи недостаточно только знания командных прерываний, нужно знать еще подпрограммы драйвера магнитофона, как минимум. Но, к примеру, составить блок автокопирования заданной программы в кодах, как это делается иногда в фокале, вы уже сможете. Если нужно выполнить не чтение массива, а иную команду, действия аналогичны описанным: после записи соответствующей команды и других необходимых данных в блок параметров, а его адреса - в R1, выполняется ЕМТ 36.

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

ЕМТ 40. Инициализация драйвера тлг-канала.
Вход: R0 - номер скорости обмена. Возможны следующие скорости:
номер скорость обмена, бод
0 9600
1 4800
2 2400
3 1200
4 600
5 300
6 150
7 75
10 50

ЕМТ 42. Передача байта на линию.
вход: R0 - мл.байт на передачу.

ЕМТ 44. Прием байта с линии.
выход: R0 - мл.байт с линии.

ЕМТ 46. Передача массива по линии.
вход: R1 - адрес массива; R2 - длина массива.

ЕМТ 50. Прием массива с линии.
вход: R1 - адрес ОЗУ для массива; R2 - длина массива в байтах.

На этом рассмотрение системы прерываний ЕМТ БК-0010 завершено. Дальнейшую информацию можно получить, исследуя структуру МСД при помощи дизассемблера.

Content-Disposition: form-data; name="sort" 50
Категория: ЕМТ БК-0010 | Автор: ЗАЛЬЦМАН Ю.А., МП-КЛУБ, г.АЛМА-АТА
Просмотров: 965 | Рейтинг: 0.0/0 |

Всего комментариев: 0
Имя *:
Email *:
Код *:
Используются технологии uCoz
Форма входа

Поиск
Друзья сайта
Статистика