Прокат экскаватора только с надежными машинами на сайте spectehnika71.ru


 

МОНИТОР -
управляющая программа микроЭВМ


     Основой программного обеспечения микроЭВМ, как бы его ядром, является управляющая программа МОНИТОР объемом 1 Кбайт. Несмотря на столь малый объем, в ней имеются директивы записи, чтения ОЗУ, пуска программ с задаваемого адреса, тестирования ОЗУ и индикаторов, записи и чтения программ с кассетного магнитофона с их верификацией. Имеется возможность пошаговой коррекции содержимого ОЗУ, можно осуществлять перемещение программ в новые адреса с коррекцией адресов программы, вычислять контрольную сумму, вставлять и удалять байты команд с коррекцией адресов остальной части программы. Минимизация объема МОНИТОРА достигнута прежде всего за счет того, что к наиболее часто используемым подпрограммам ввода/вывода в МОНИТОРе производится обращение не с помощью 3-байтной команды CALL ADR, а с помощью однобайтных команд RST0 - RST6.
     Встроенная в МОНИТОР программа часов, работающая в режиме прерывания по RST7 от внешнего датчика секунд, позволяет осуществить привязку выполнения программ к реальному времени.
     Хранится МОНИТОР в ПЗУ в области памяти 0000H-03FFH. Чтобы его запустить, достаточно произвести начальную установку микроЭВМ, нажав на кнопку "УСТ". При работе МОНИТОРА в ОЗУ лишь несколько ячеек используется для стека и хранения промежуточных результатов и данных.
     Коды МОНИТОРА приведены в таблице 5.

Таблица 5.

     При запуске МОНИТОРА происходит настройка указателя стека и затем на крайних справа индикаторах появляются две единички. Это означает, что микроЭВМ находится в ожидании ввода директивы с клавиатуры. Клавиатура имеет двойное функциональное назначение. После начальной установки каждая клавиша служит для ввода директивы, а после ввода директивы эти же шестнадцатиричные клавиши используются для ввода ее параметров. Директивы МОНИТОРА перечислены в таблице 4.

Таблица 4. Директивы МОНИТОРа

     Все директивы МОНИТОРА задаются шестнадцатеричными цифрами и могут содержать дополнительно до трех параметров. Параметры также вводятся в виде шестнадцатиричных чисел. Их набирают после ввода директивы и контролируют по индикации на дисплее. Поскольку в МОНИТОРЕ на крайний справа индикатор выводится информация аккумулятора (адрес индикатора 9000Н), а на два других индикатора выводится информация из регистровой пары HL (адреса 9001Н, 9002Н), то в дальнейшем мы эти индикаторы так и будем называть: индикатор А, индикаторы HL.
     Структурно МОНИТОР состоит из двух частей по 512 байт каждая. Перечисленные в таблице директивы относятся к первой основной части МОНИТОРА 0000-01FFH. Вторая, вспомогательная часть МОНИТОРА содержит набор программ, обращение к которым производится с помощью директивы "7". В минимальном объеме МОНИТОР может быть размещен в одной микросхеме КР556РТ5.
     Знакомство с директивами МОНИТОРА начнем с директив работы с памятью.
     Директива "4" позволяет тестировать ОЗУ микроЭВМ. После нажатия клавиши "4" на индикаторах HL появляется код "С400Н", что означает: вся область ОЗУ от С000Н до C3FFH исправна. Тестирование ОЗУ производится последовательной записью в каждую ячейку сначала нулей и их чтением с проверкой на ноль, а затем записью единиц с проверкой считанных единиц. Если какая-то ячейка памяти неисправна, то адрес неисправной ячейки выводится на индикатор HL. Пользоваться этой директивой нужно осторожно, гак как после прохождения теста ОЗУ вся память заполняется единичками.
     Директива"1" позволяет осуществлять запись данных в ОЗУ с адреса С000Н. После нажатия на кнопку "1" на индикаторах HL появляется код "С000", а на индикаторе А -"00". Последующее нажатие на кнопки приводит к занесению данных в ячейки ОЗУ. Вводимые данные отображаются на индикаторе А, а на индикаторах HL выводятся адреса загружаемых ячеек памяти. Переход от ячейки к ячейке происходит автоматически, с задержкой порядка 1 с. Так, если после ввода директивы "1" оставить нажатой эту кнопку, то начиная с ячейки памяти с адресом С000Н и во все последующие ячейки будут записываться единицы.
     Директива "2" предназначена для просмотра содержимого ячеек памяти, начиная с адреса С000Н. После ввода директивы на индикаторах HL появляется адрес "С000", а на индикаторе А содержимое ячейки памяти С000Н. Нажатие на любую кнопку осуществляет автоматическое перелистывание ячеек памяти.
     Директива "0" аналогична директиве "1", однако отличается тем, что после нажатия кнопки "0" необходимо ввести параметр - адрес, начиная с которого будет осуществляться запись данных в ОЗУ. Нажав кнопку "0", вводится адрес ячейки памяти, который при вводе индицируется на индикаторе А, а затем, после ввода адреса, появляется уже на индикаторе HL. На индикаторе А высвечивается "00". После этого вводится новая информация в эти и последующие ячейки памяти.
     Директива "5" позволяет просматривать ячейки памяти ОЗУ с любого адреса. После нажатия кнопки "5" вводится адрес интересующей ячейки, который при вводе индицируется побайтно на индикаторе А, а затем выводится на индикаторы HL. На индикаторе А будет написано содержимое ячейки памяти. Следующие ячейки просматриваются нажатием на любую кнопку.
     Особое положение среди директив работы с памятью занимает директива "ШАГ НАЗАД", которая отсутствует в таблице 4. Дело в том, что все кнопки в микроЭВМ, кроме кнопки "ШАГ НАЗАД", имеют двойное функциональное назначение. После сброса каждая кнопка служит для ввода директив МОНИТОРА, а при исполнении директив это кнопки шестнадцатиричных цифр. Директива "ШАГ НАЗАД" имеет отдельную кнопку и может быть введена при исполнении перечисленных выше директив работы с памятью.
     Предположим, выполняется директива чтения памяти. На индикаторах HL - адрес "С00З", а на индикаторе А - содержимое этой ячейки - "22". После нажатия на кнопку "ШАГ НАЗАД" на индикаторе А появляются нули, и можно вводить новые данные в ячейку с адресом С00ЗН и последующие адреса. Аналогично применяется директива "ШАГ НАЗАД" при выполнении других директив работы с памятью.
     При работе с памятью полезной может оказаться директива вычисления контрольной суммы. Чтобы получить ее, необходимо нажать на кнопку "8", а затем ввести два параметра - начальный и конечный адрес области памяти, в которой находится контрольная сумма. Так, можно проверить ПЗУ, если задать начальный и конечный адрес МОНИТОРА. Контрольная сумма выводится на индикаторы HL и для МОНИТОРА составляет 0181H (0000H-01FFH) и 18CCH (0200H-03FFH).
     Теперь рассмотрим директивы ввода-вывода информации при работе с кассетным магнитофоном. Желательно, чтобы магнитофон имел счетчик ленты, по которому можно было бы найти начало записи. Идентифицировать же запись можно по выводимой при записи и чтении на индикатор HL контрольной сумме информации. Это как бы паспорт записи.
     При записи данных на ленту нажимают кнопку "9", а затем вводят два параметра - начальный и конечный адреса данных. После набора директивы перед вводом младшего байта конечного адреса включают на запись магнитофон и лишь затем вводят последний байт адреса. После этого начнется запись информации на ленту. Скорость записи фиксированная - 1500 бит/сек. При выполнении этой директивы на ленту последовательно записываются 256 байт 00, Е6 (байт синхронизации), младший байт начального адреса, старший байт начального адреса, младший байт конечного адреса и старший байт конечного адреса. Завершение выполнения директивы индицируется появлением на индикаторе HL контрольной суммы.
     Чтение данных с магнитной ленты в ОЗУ производится по директиве "А". Директива имеет один параметр - смещение. Если смещение равно 0000, то программа считается в адреса, из которых она была записана. Если запись считана верно, то на индикаторах HL выводится контрольная сумма, которая индицировалась при записи. Итак, чтение записи с магнитофона начинают нажатием кнопки "А" и вводом смещения. Перед вводом последнего полубайта смещения магнитофон включается на воспроизведение, и с началом записи (однотонное звучание) вводится последний полубайт смещения. Считывание записи завершается индикацией контрольной суммы данных, введенных в ОЗУ.
     Директив запуска программ две. С помощью директивы "6" осуществляется запуск программы с адреса С000Н, а с помощью директивы "7" программа может быть запущена с адреса, который вводится как параметр директивы. Нажав кнопку "7", набирают адрес пуска программы, контролируя ввод побайтно на индикаторе А. При правильном вводе адрес пуска выводится на индикатор HL. Затем можно вводить параметры запущенной программы. Пользуясь директивой "7", можно применять вспомогательные подпрограммы, входящие во вторую половину МОНИТОРА от 0200Н до 03FFH.
     С адреса 0200Н запускается программа копирования данных. Ее параметрами являются начальный и конечный адрес исходной программы, а также начальный адрес копии. Копирование с помощью этой программы производится как вверх, так и вниз относительно исходной программы и даже на перекрывающиеся области программ с затиранием исходной программы в перекрывающихся областях. Предположим, вам необходимо скопировать МОНИТОР с адреса 0100Н до 0120Н в новые адреса ОЗУ с С100Н до С120Н. В этом случае должна соблюдаться следующая последовательность нажатия клавиш:

7     0200     0100     0120     С100

     Копирование завершается с появлением двух единичек на индикаторе А. Это значит, что МОНИТОР ожидает ввода следующей директивы.
     Проверить копирование данных можно с помощью другой вспомогательной программы сравнения данных двух областей. Ее пусковой адрес 03В2Н. У этой программы три параметра: начальный и конечный адреса исходной программы и начальный адрес копии. В продолжение примера с копированием МОНИТОРА приведем последовательность нажатий на клавиши.

7     03В2     0100     0120     С100

     При совпадении исходной программы и копии на всех индикаторах появляются единички. При несовпадении эталона и копии высвечивается адрес с ошибкой копии. При этом возможно исправление ошибки и последующее сравнение данных.
     Чтобы скопированная программа могла быть запущена в новых адресах, ее нужно скорректировать с помощью вспомогательной программы-корректора. Ее пусковой адрес 025FH. У программы три параметра: начальный и конечный адреса исходной рабочей программы и начальный адрес корректируемой программы. Для нашего примера с МОНИТОРОМ это будет выглядеть так:

7     025F     0100     0120     С100

     Завершается работа программы появлением единичек на индикаторе А. Если скорректированная программа будет использоваться на другом компьютере, например, "МИКРО-80" в адресном пространстве, которое отсутствует в микроЭВМ минимальной конфигурации, для подготовки такой программы используется суперкорректор, запускаемый с адреса 02E5Н. Параметры суперкорректора: начальный, конечный адрес рабочей программы и начальный адрес подготавливаемой программы. Пример с МОНИТОРОМ - рабочая программа подготавливается для работы в F100-F120H:

7     02Е5     С100     С120     F100

     Завершается работа программы появлением единичек на индикаторе А. При отладке программ может возникать необходимость вставки или удаления отдельных байтов. Для этого можно использовать несколько программ.
     Программа вставки байта - пусковой адрес 035ЕН. Параметры программы: адрес того места программы, где необходимо вставить байт, и адрес конца программы. Программа удаления байта - пусковой адрес 0388Н. Параметры программы: адрес удаляемого байта и адрес конца программы. Программа завершается просмотром оставшейся части программы после адреса удаленного байта.
     Программа замены адресов - пусковой адрес 0309Н. После пуска программы вводятся начальный и конечный адреса рабочей программы, а затем старый и новый адреса. Завершается исполнение программы выходом в МОНИТОР и появлением единичек на индикаторе А.
     Завершим описание вспомогательных программ МОНИТОРА программой индикации регистров микропроцессора. Эта программа может использоваться при отладке, для чего в отлаживаемую программу с помощью программы вставки байта производится вставка трех байт CD  DD  03. После пуска отлаживаемой программы в требуемом месте программы происходит останов, а на индикаторах отображается содержимое регистров HL и ячейки памяти с адресом HL. При нажатии на любую клавишу происходит индикация остальных регистров, обозначение которых выводится на индикатор А в следующей последовательности: AF, ВС, DE. Затем происходит исполнение отлаживаемой программы.
     При нажатии кнопки "3" запускается директива тестирования дисплея микроЭВМ. После пуска директивы на всех индикаторах дисплея выводятся последовательно все шестнадцатиричные цифры от 0 до F.
     Как уже отмечалось, в МОНИТОР встроена программа часов, работающая в режиме прерывания, что позволяет привязывать программы к реальному времени.

     Сначала расскажем, что такое прерывание в микроЭВМ. Рассмотренные нами директивы МОНИТОРА исполняются в том порядке, в котором они расположены в памяти. Это значит, что никакое вмешательство пользователя не может воздействовать на ход выполнения программы, по которой уже начал работать процессор, кроме, конечно, сброса микроЭВМ в начальное положение. Система прерываний позволяет изменять ход выполнения программы на основании сигналов, поступающих в микропроцессор. После поступления прерывания выполнение основной программы прекращается и управление передается другой программе. Как только работа по другой программе завершится, будет осуществлен переход к прерванной программе и продолжится ее нормальное выполнение. Сигнал прерывания, поступающий в микропроцессор, асинхронный. В нашей микроЭВМ такими сигналами являются импульсы, поступающие каждую секунду от датчика времени, который выполнен на микросхеме К176ИЕ5, которая состоит из генератора импульсов частотой 32768 Гц и делителя с коэффициентом деления 215.
     В процессе обработки прерывания, запрос на которое уже, предположим, поступил от датчика секунд, можно выделить следующие этапы отработки прерывания.

  1. Вывод 14 микропроцессора КР580ВМ80А перешел в состояние логической 1, что означает наличие запроса на прерывание.
  2. Микропроцессор принял запрос на прерывание, и на его выводе 16 установился уровень логического нуля.

     Эти два события являются основными в рассматриваемой микроЭВМ.
     Когда на выводе 16 устанавливается логический ноль, микропроцессор игнорирует все запросы на прерывания, поступающие на его вход. В системе команд микропроцессора есть две специальные команды: запрета прерываний DI и разрешения прерываний EI. С помощью этих команд можно менять состояние вывода 16 микропроцессора. После сброса микропроцессора в начальное состояние вывод 16 переводится в состояние логического 0. Это означает, что после начальной установки микропроцессор игнорирует все запросы на прерывания. Единственный способ разрешить прерывание - это заставить микропроцессор выполнить команду EI.
     После выполнения этой команды на выводе 16 появится логическая 1. Именно поэтому после начальной остановки одной из первых в МОНИТОРЕ выполняется команда EI, разрешающая прерывание. После этого первый же секундный импульс установит уровень логического 0 на выводе 16 и микропроцессор не будет воспринимать запросы на прерывание. В этот же момент формируется из слова состояния управляющий сигнал "Подтверждение прерывания" - ППР. Однако поскольку не одно устройство ввода-вывода и памяти не активизировано этим сигналом, то на шине данных будет действовать код команды FFH (команда RST7) и определит адрес перехода 0038Н (подпрограмма прерывания) - программу часов. В нашей микроЭВМ организовано лишь одноуровневое прерывание по команде RST7.
     Итак, по адресу 0038Н осуществляется переход на подпрограмму часов, в которой программно организованы счетчики секунд, минут и часов. Ячейки памяти, в которых организованы эти счетчики, имеют адреса C3FDH, C3FEH и C3FFH. Завершается программа часов командой EI, и на выводе 16 микропроцессора снова устанавливается логическая 1. Прерванная программа продолжает работу.

     В МОНИТОРЕ имеется директива начальной установки времени. После нажатия кнопки "С" прерывания запрещаются. Затем следует набрать адрес ячейки памяти C3FDH и последовательно ввести значение секунд, минут и часов. После этого по сигналам точного времени нажать кнопку "УСТ", пустив тем самым часы, разрешив прерывания.
     Имеется в МОНИТОРЕ и директива индикации времени, для чего достаточно нажать кнопку "В". При этом на индикаторе HL выводятся часы и минуты, а на индикаторе А - секунды. Точность хода часов определяется стабильностью кварцевого генератора.
     В состав МОНИТОРА входит ряд подпрограмм ввода-вывода, которые могут быть использованы при составлении программ. Перечислим эти программы и правила обращения к ним.

  1. Подпрограмма записи байта на магнитофон, обращение с помощью команды RST1 (код CF). Код выводимого символа должен храниться в регистре "А".
  2. Подпрограмма ввода байта с клавиатуры - обращение с помощью команды RST2 (код D7). После возврата из подпрограммы код клавиатуры находится в регистре "А" микропроцессора.
  3. Подпрограмма задержки на секунду - обращение с помощью команды RST3 (код DF).
  4. Подпрограмма чтения клавиатуры (проверка активности клавиатуры) - обращение через RST4 (код Е7).
  5. Подпрограмма индикации содержимого регистров HL и А на индикаторах дисплея микроЭВМ - обращение через команду RST5 (код EF).
  6. Подпрограмма ввода двух байтов с клавиатуры в регистр DE - обращение через команду RST6 (код F7).
  7. Подпрограммы сравнения адресов, хранимых в регистровых парах DE и ВС, - пусковой адрес 0194Н и в регистровых парах HL и DE, - пусковой адрес 0259Н.
  8. Подпрограмма чтения байта с магнитофона - пусковой адрес 0128Н. После возврата из подпрограммы код считанного символа находится в регистре "А" микропроцессора.

     Эти подпрограммы помогут вам упростить разработку новых программ. Заметим, что для унификации обмена программ с "МИКРО-80" подпрограммы обслуживания кассетного магнитофона (записи и чтения байта) идентичны тем, что использованы в МОНИТОРЕ "МИКРО-80".
     Рассмотрим теперь пример, поясняющий применение приведенных подпрограмм. Предположим, что необходимо написать программу занесения констант в заданную область памяти. Входными параметрами этой программы являются начальный и конечный адреса области памяти, в которую заносится константа. Алгоритм этой программы представлен в виде структурной схемы на рисунке 4.

Рис. 4. Структурная схема алгоритма программы копирования константы
Рис. 4. Структурная схема алгоритма программы копирования константы

     При написании программы удобно составить бланк (листинг), позволяющий представить программу в трех ракурсах: колонка адресов, колонка объектных кодов, колонка меток и мнемонических (ассемблерных) кодов, однозначно определяющих работу программы на уровне команд, и колонка комментариев. Подобная форма записи программ позволяет не только понять работу программы (колонка комментариев), но и разобраться в структуре программы (колонка меток и операций). Колонка кодов непосредственно может быть введена в ОЗУ микроЭВМ. Такой бланк изображен ниже:

     Для ввода кодов программы следует воспользоваться директивой "1". Затем проверить ввод директивой "2" и наконец осуществить пуск программы директивой "б". После нажатия кнопки "б" необходимо ввести начальный и конечный адрес ОЗУ, затем ввести константу. Окончание работы программы индицируется появлением единичек на правом индикаторе.
     Проверить результат работы программы можно с помощью директивы "5", посмотрев ту область памяти, куда была занесена константа. Затем эту программу можно для дальнейшего использования сохранить, записав на ленту. Контрольная сумма этой программы 0800Н.

     В качестве еще одного примера приведем игровую программу "Лабиринт". Распечатка этой программы приведена ниже. Дадим некоторые пояснения. "Лабиринт" - это поле 16х16 клеток, заполненное препятствиями. Координаты препятствий вводятся в виде отдельного набора данных с адреса С200Н. Вариант расположения препятствий приведен в виде распечатки игрового поля. Смысл игры заключается в следующем. Необходимо, мысленно представив поле размерами 16х16, пройти кратчайшим путем от нижнего правого угла (координаты FFH) к верхнему левому углу (00Н). Управление движением осуществляется с помощью четырех кнопок:

  • "1" - движение на одну клетку влево;
  • "2" - движение на одну клетку вправо;
  • "З" - движение на одну клетку вверх;
  • "4" - движение на одну клетку вниз.

     Каждый ход сопровождается коротким звуковым сигналом. Если на пути встречается препятствие, то сигнала не будет, но шаг засчитывается. Число шагов выводится на индикаторы HL, а координаты движения выводятся на индикатор А. Сигнализация о правильности хода в лабиринте производится с помощью магнитофона, включенного на запись (с остановленной лентой). Пуск программы осуществляется директивой "б" с последующим нажатием на любую клавишу.