ЮТ-88. Работа в МОНИТОРе-0.

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

МОНИТОР-0, который отвечает за работу компьютера в этой конфигурации, находится в ПЗУ в области памяти 0000H-03FFH. Чтобы его запустить, достаточно произвести начальную установку микроЭВМ, нажав на кнопку «СБРОС» (KEY[0] на плате DE1 или ‘ESC’ на клавиатуре PS/2). При этом это ПЗУ обязательно должно быть подключено, т.е. выключатель SW[2] на плате DE1 установлен в положение “1”.

При работе МОНИТОРа в ОЗУ лишь несколько ячеек используются для стека и хранения промежуточных результатов и данных. При запуске МОНИТОРа происходит настройка указателя стека и затем на крайних справа индикаторах появляются две единички. Это означает, что микроЭВМ находится в ожидании ввода директивы с клавиатуры. Как мы помним, в роли клавиатуры может выступать плата расширения (выключатель SW[1] в положении “0”) или клавиатура PS/2 (выключатель SW[1] в положении “1”).

Клавиатура имеет двойное функциональное назначение. После начальной установки каждая клавиша служит для ввода директивы, а после ввода директивы эти же шестнадцатеричные клавиши используются для ввода ее параметров.

Директивы МОНИТОРа перечислены в таблице:

Клавиша Параметры Описание
0 АДР Запись данных в ОЗУ с адреса АДР
1 Запись данных в ОЗУ с адреса C000H
2 Чтение данных из ОЗУ с адреса C000H
3 Тест индикации
4 Тест ОЗУ
5 АДР Чтение данных из ОЗУ с адреса АДР
6 Пуск программы с адреса C000H
7 АДР Пуск программы с адреса АДР
8 АДР1, АДР2 Контрольная сумма данных с АДР1 по АДР2
9 АДР1, АДР2 Запись данных на ленту с АДР1 по АДР2
A АДР Чтение данных с ленты со смещением, равным АДР
B Индикация времени
C АДР Установка времени с АДР C3FDH — сек.,C3FEH — мин., C3FFH — часы

 

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

В МОНИТОРе на крайний справа индикатор выводится информация аккумулятора (адрес индикатора 9000H), а на два других индикатора ― информация из регистровой пары HL (адреса 9001Н, 9002Н).

Директива «4»  позволяет тестировать ОЗУ микроЭВМ. После нажатия клавиши «4» на индикаторах HL появляется код С400, что означает: вся область ОЗУ от C000H до C3FFH исправна. Тестирование ОЗУ производится последовательной записью в каждую ячейку сначала нулей и их чтением с проверкой на ноль, а затем записью единиц с последующей проверкой качества записи. Если какая-то ячейка памяти неисправна, то ее адрес выводится на индикатор HL. Пользоваться этой директивой нужно осторожно, так как после прохождения теста ОЗУ все его ячейки заполнятся единичками.

Директива «1» позволяет осуществлять запись данных в ОЗУ с адреса C000H. После нажатия на кнопку «1» на индикаторах HL появляется код С000, а на индикаторе А ― «00». Последующее нажатие на кнопки приводит к занесению данных в ячейки ОЗУ. Вводимые данные отображаются на индикаторе А, а на индикаторах HL выводятся адреса загружаемых ячеек памяти. Переход от ячейки к ячейке происходит автоматически, с задержкой на 1с. Так, если после ввода директивы «1» оставить нажатой эту кнопку, то, начиная с ячейки памяти с адресом C000H, во все последующие ячейки будут записываться единицы.

Директива «2» предназначена для просмотра содержимого ячеек памяти, начиная с адреса C000H. После ввода директивы на индикаторах HL появляется адрес С000, а на индикаторе А ― содержимое ячеек памяти C000H. Нажав на любую кнопку, вы перейдете в режим автоматического перелистывания ячеек памяти.

Директива «0» аналогична директиве «1», однако отличается от нее тем, что после нажатия кнопки «0» необходимо ввести параметр ― адрес, начиная с которого будет осуществляться запись данных в ОЗУ. Адрес ячейки памяти при этом индицируется на индикаторе А, а затем, после ввода адреса, появляется уже на индикаторе HL. На индикаторе А высвечивается 00. После этого вводится новая информация в эти и последующие ячейки памяти.

Директива «5» позволяет просматривать ячейки памяти ОЗУ с любого адреса. После нажатия кнопки «5» вводится адрес интересующей ячейки, который сначала индицируется побайтно на индикаторе А, а затем выводится на индикаторы HL. На индикаторе А будет написано содержимое ячейки памяти. Следующие ячейки просматриваются нажатием на любую кнопку.

Особое положение среди директив работы с памятью занимает директива «Шаг назад». Она отсутствует в таблице. Дело в том, что все кнопки в микроЭВМ, кроме кнопки «Шаг назад», имеют двойное функциональное значение. После сброса каждая кнопка служит для ввода директив МОНИТОРа, а при исполнении директив это кнопки шестнадцатеричных цифр. Директива «Шаг назад» имеет отдельную кнопку (KEY[3] или ‘TAB’ на клавиатуре PS/2) и может быть введена при исполнении перечисленных выше директив работы с памятью. Предположим, выполняется директива чтения памяти. На индикаторах HL ― адрес «С003», а на индикаторе А ― содержимое этой ячейки― «22». После нажатия на кнопку «Шаг назад» на индикаторе А появляются нули и можно вводить новые данные в ячейку с адресом С003Н и последующие адреса. Аналогично применяется директива «Шаг назад» при выполнении других директив работы с памятью.

Директива «8» вычисляет контрольную сумму области памяти. После нажатия кнопки «8» надо ввести два параметра ― начальный и конечный адрес области памяти, в которой находится контрольная сумма.

При записи данных на ленту используют директиву «9», а затем вводят два параметра ― начальный и конечный адрес данных. После набора директивы перед вводом младшего байта конечного адреса включают на запись магнитофон и лишь затем вводят последний байт адреса. После этого немедленно начинается запись информации на ленту. Скорость записи фиксированная― 1500 бит/с. При выполнении этой директивы на ленту последовательно записываются 256 байт 00, Е6 (байт синхронизации), младший байт начального адреса, старший байт начального адреса, младший байт конечного адреса и старший байт конечного адреса. Завершение выполнения директивы индицируется появлением на индикаторе HL контрольной суммы.

Чтение данных с магнитной ленты в ОЗУ производится по директиве «А». Директива имеет один параметр ― смещение. Если смещение равно 0000, то программа считывается в адреса, из которых она была записана. Если запись считана верно, то на индикаторах HL выводится контрольная сумма, которая индицировалась при записи. Итак, чтение записи с магнитофона начинают нажатием кнопки «А» и вводом смещения. Перед вводом последнего полубайта смещения магнитофон включается на воспроизведение, и с началом записи (однотонное звучание) вводится последний полубайт смещения. Считывание записи завершается индикацией контрольной суммы данных, введенных в ОЗУ. Она должна совпадать с контрольной суммой индицируемой до этого при записи.

Директив запуска программ две. С помощью директивы «6» осуществляется запуск программы с адреса C000H, а с помощью директивы «7» программа может быть запущена с адреса, который вводится как параметр директивы. Нажав кнопку «7», набирают адрес пуска программы, контролируя ввод побайтно на индикаторе А. При правильном вводе адрес пуска выводится на индикатор HL. Затем можно вводить параметры запущенной программы если таковые имеются.

Пользуясь директивой «7», можно применять вспомогательные подпрограммы, входящие в Монитор-0 от 0200Н. до 03FFH, а также запустить МОНИТОР-F полной конфигурации с адреса F800H.

С адреса 0200Н запускается программа копирования данных. Ее параметрами являются начальный и конечный адреса исходной программы, а также начальный адрес копии. Копирование с помощью этой программы производится как вверх, так и вниз относительно исходной программы и даже на перекрывающиеся области программ с затиранием исходной программы в этих областях. Предположим, что необходимо скопировать Монитор-0 с адреса 0100Н до 0120Н в новые адреса ОЗУ с С100Н до С120Н. В этом случае должна соблюдаться следующая последовательность нажатия клавиш:

7 0200 0100 0120 С100

Копирование завершается с появлением двух единичек на индикаторе А. Это значит, что МОНИТОР ожидает ввода следующей директивы.

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

7 03B2 0100 0120 С100

При совпадении исходной программы и копии на всех индикаторах появляются единички. При несовпадении эталона и копии высвечивается адрес с ошибкой копии. При этом возможно исправление ошибки и последующее сравнение данных.

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

7 025F 0100 0120 С100

Завершается работа программы появлением единичек на индикаторе А.

Если скорректированная программа будет использоваться на другом компьютере, например «MИKPO-80», в адресном пространстве, которое отсутствует в микроЭВМ минимальной конфигурации, то для ее подготовки используется суперкорректор, запускаемый с адреса 02Е5Н. Параметры суперкорректора: начальный и конечный адреса рабочей программы. Пример с МОНИТОРОМ ― рабочая программа подготавливается для работы в F100H ― F120H:

7 02Е5 С100 С120 F100

Завершается работа программы появлением единичек на индикаторе А.

При отладке программ может возникать необходимость вставки или удаления отдельных байтов. Для этого можно использовать несколько программ.

Программа вставки байта ― пусковой адрес 035ЕН. Параметры программы: адрес того места программы, где необходимо вставить байт, и адрес конца программы.

Программа удаления байта ― пусковой адрес 0388Н. Параметры программы: адрес удаляемого байта и адрес конца программы. Программа завершается просмотром оставшейся части программы после адреса удаленного байта.

Программа замены адресов ― пусковой адрес 0309Н. После пуска программы вводятся начальный и конечный адреса рабочей программы, а затем старый и новый адреса. Завершается исполнение программы выходом в Монитор-0 и появлением единичек на индикаторе А.

Завершим описание вспомогательных программ Монитора-0 программой индикации регистров микропроцессора. Эта программа может использоваться при отладке, для чего в отлаживаемую программу с помощью программы вставки байта производится вставка трех байт CD DD 03. После пуска в требуемом месте отлаживаемой программы происходит остановка, а на индикаторах отображается содержимое регистров HL и ячейки памяти с адресом HL. При нажатии на любую клавишу индицируется содержимое остальных регистров. Выводится оно на индикатор А в следующей последовательности: AF, ВС, DE. Затем происходит исполнение программы.

Директива «3» запускает тестирования дисплея микроЭВМ. После пуска директивы на всех индикаторах дисплея выводятся последовательно все шестнадцатеричные цифры от 0 до F. В Монитор-0  встроена программа часов, работающая в режиме прерывания, что позволяет привязывать программы к реальному времени. Для включения прерываний выключатель SW[6] устанавливается в положение “1”.

В Мониторе имеется директива «С» начальной установки времени. После нажатия кнопки «С» прерывания запрещаются. Затем следует набрать адрес ячейки памяти C3FDH и последовательно ввести значение секунд, минут и часов. После этого по сигналам точного времени надо нажать кнопку «Уст» (KEY[0] или ‘ESC’ на клавиатуре PS/2), пустив тем самым часы и разрешив прерывания.

Имеется в МОНИТОРе и директива «В» индикации времени. При этом на индикаторе HL выводятся часы и минуты, а на индикаторе А ― секунды.

Дополнительную информацию можно найти в журнале ЮТ-88 или в книге В.Г Бартенева и Б.Е.Алгинина “От самоделок на логических элементах до микроЭВМ”.

Для минимальной конфигурации было разработано и опубликовано в журнале несколько программ. Эти программы были записаны на ПЗУ встроенной в проект по адресам с 0200 до 23FF. Для включения этого ПЗУ в область памяти выключатель SW[4] должен быть переведен в положение «1».

Программа «Реакция» может быть загружена из встроенного ПЗУ командой

7 0200 2000 205F С000

(перед этим не забудьте подключить это ПЗУ выключателем SW[4]) или загружена с магнитофона директивой «1» с адреса C000H по C05DH. После пуска программы директивой «6» нажмите клавишу «0», а затем еще раз на любую клавишу, при этом на всех индикаторах дисплея появляется «FF». Сразу после того, как цифры на индикаторе начинают бежать, вы должны нажать на кнопку «СБРОС». Цифра на дисплее индикатора охарактеризует вашу реакцию. Чем она меньше, тем реакция лучше.

Программа «Гамма» может быть загружена из встроенного ПЗУ командой

7 0200 2060 20EF С000

или загружена с магнитофона директивой «1» с C000H по С082Н. Пуск программы осуществляют директивой «7» с адреса С03ЕН. После ввода пускового адреса необходимо ввести длительность звучания нот и интервал пауз между нотами в виде 2-разрядных шестнадцатеричных цифр в диапазоне от 01-FFH. Прослушивают гамму через магнитофонный интерфейс.

Программа «Крестики-нолики» может быть загружена из встроенного ПЗУ командой

7 0200 20F0 215F С000

или загружена с магнитофона директивой «1» с C000H по С065Н. Поле игры в виде 9 клеток пронумеровано так, как показано на схеме.

01 02 03
08 09 04
07 06 05

 

После пуска программы директивой «6» на крайнем справа индикаторе появляется цифра «09» — это первый ход микроЭВМ, которая всегда начинает первой и ходит с центра. Место вашего нолика вы вводите с клавиатуры, указав номер клетки поля. Сначала вы можете и проиграть микроЭВМ, в этом случае на дисплее появится код «73». В случае ничьей индицируется код «11».

Программа «Лабиринт». «Лабиринт» — это поле размером 16 х 16 клеток, заполненное препятствиями. Координаты препятствий вводятся в виде отдельного набора данных с адреса С200Н. Смысл игры заключается в следующем. Необходимо, мысленно представив поле размером 16 х 16, пройти кратчайшим путем от нижнего правого угла (координаты FFH) к верхнему левому углу (00Н). Управление движением осуществляется с помощью четырех кнопок: «1» — движение на одну клетку влево; «2» — движение на одну клетку вправо; «3» — движение на одну клетку вверх; «4» — движение на одну клетку вниз. Каждый ход сопровождается коротким звуковым сигналом. Если на пути встречается препятствие, то сигнала не будет, но шаг засчитывается. Число шагов выводится на индикаторы HL, а координаты движения выводятся на индикатор А. Сигнализация о правильности хода в лабиринте производится с помощью магнитофонного интерфейса. Программа может быть загружена из встроенного ПЗУ командой

7 0200 2160 225F С000

или загружена с магнитофона директивой «1» с адреса C000H. Кроме того, карта лабиринта должна быть загружена с адреса С200Н с магнитофона директивой «1» или из встроенного ПЗУ командой

7 0200 2260 235F С200.

Пуск программы осуществляется директивой «6» с последующим нажатием на любую клавишу.

Библиотека программ математических функций

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

Для работы программы используются ячейки памяти с адресами С361— C37F. В них заносятся исходные данные, промежуточные вычисления и окончательный результат. Исходные данные записываются в форме однобайтных и двухбайтных чисел с фиксированной запятой в прямом коде. Знак числа записывается в старшем разряде. Если в нем записан “0”, то число положительное, а если “1”— отрицательное. У двухбайтного числа в 15-м разряде записывается бит знака, а в 14-м — бит переполнения. Диапазон представления чисел однобайтных от FFH до 7FH или от —127 до + 127, а двухбайтных — от BFFFH до 3FFFH (от -16 383 до +16 383).

Для чисел с плавающей запятой используются трехбайтные числа. Первый их байт определяет порядок, второй и третий — мантиссу. Двоичное число, представляемое в формате с плавающей запятой, можно вычислить по формуле:

D = (-1)s * 2e (-1)p * f

где Р — значение знакового бита порядка, S—бит знака (если S=0 — число положительное, а если S = 1 — отрицательное), е — значение порядка, f — значение мантиссы.

Порядок показывает число двоичных позиций, на которые нужно сдвинуть мантиссу, чтобы число в ячейках памяти было представлено в форме нормализованного числа, которое меньше единицы, с первым значащим разрядом после запятой. Если знак порядка “0”, то мантисса сдвигается влево, а если знак порядка “1”, то вправо. Диапазон представления чисел в этом случае составляет от 10-35 до 1035.

Подпрограммы делятся на основные и обслуживающие. Знакомство с библиотекой мы начнем с последних.

Нормализация мантиссы.

Первая обслуживающая подпрограмма—нормализация мантиссы. Трехбайтное число из ячеек памяти С371Н, С372Н, С373Н извлекается и нормализуется путем поразрядного сдвига мантиссы. При этом сдвиг мантиссы на 1 бит вправо сопровождается увеличением порядка на единицу, а сдвиг мантиссы на 1 бит влево — уменьшением порядка на единицу. В результате нормализации в исходные ячейки памяти записывается число, у которого 14-й разряд мантиссы равен нулю, а 13-й—единице. Пусковой адрес подпрограммы 092DH.

Нормирование двух чисел.

Вторая обслуживающая подпрограмма производит относительное нормирование двух чисел. Это требуется, например, для сложения чисел в формате с плавающей запятой, когда необходимо, чтобы числа имели равные порядки. Подпрограмма извлекает из ячеек памяти С371Н, С372Н, С373Н первое число, а из ячеек памяти С374Н, С375Н, С376Н второе и сравнивает их порядки по абсолютному значению. Больший порядок записывается вместо меньшего, а число с меньшим порядком сдвигается вправо без округления на величину, равную разности этих порядков. Пусковой адрес подпрограммы 0877Н.

Передача в регистры

Третья обслуживающая подпрограмма , предназначена для передачи трехбайтного числа из памяти в регистры А — В — С. Начальный адрес трехбайтного числа должен находиться в регистровой паре HL. Пусковой адрес 0А8СН. Четвертая обслуживающая подпрограмма пересылает из регистров А — В — С три байта в ОЗУ по начальному адресу в регистровой паре HL. Пусковой адрес 0А92Н.

Арифметические операции

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

Слагаемые находятся по адресам С371Н и С374Н, результат размещается в ячейке ОЗУ С374Н. Пусковой адрес 0849Н.

Сложение двухбайтных чисел со знаком.

Слагаемые находятся по адресам С372Н, С373Н (первое слагаемое) и по адресам С375Н и С376Н, сумма размещается в ячейки ОЗУ С375Н и С376Н. Пусковой адрес 08DDH.

Сложение трехбайтных чисел с плавающей запятой.

Первое слагаемое заносится в ячейки С371Н, С372Н, С373Н, а второе слагаемое в ячейки С374Н, С375Н, С376Н, результат сложения помещается в ячейки с адресами С374Н, С375Н, С376Н. Пусковой адрес 0987Н.

Умножение двухбайтных чисел со знаком.

Сомножители находятся в памяти по адресам С372Н, С373Н и С375Н, С376Н. Произведение заносится в ячейки С375Н, С376Н. Пусковой адрес 0994Н.

Умножение трехбайтных чисел с плавающей запятой.

Сомножители заносятся в ячейки памяти С371Н, С372Н и С373Н, а также С374Н, С375Н и С376Н. Произведение находится в ячейках С374Н, С375Н и С376Н. Пусковой адрес 09ЕСН.

Деление двухбайтных чисел с фиксированной запятой.

Делимое и делитель находятся в памяти по адресам С375Н, С376Н, С372Н, С373Н. Частное в ячейках С375Н и С376Н. Пусковой адрес 09F9H.

Деление чисел с плавающей запятой.

Делимое находится в адресах С374Н, С375Н, С376Н, делитель в адресах С371Н, С372Н, С373Н. Частное заносится в адреса С374Н, С375Н, С376Н. Пусковой адрес OA6FH.

Показательная функция.

Показатель степени заносится в ячейку С364, а основание степени в ячейки памяти С371Н, С372Н, С373Н. Результат записывается в ячейки памяти С374Н, С375Н, С376Н. Пусковой адрес 0В08Н.

Логарифмическая функция (натуральный логарифм).

Аргумент заносится в ячейки ОЗУ С361Н. С362Н, С363Н, а значение функции записывается в ячейки ОЗУ С368Н, С369Н, С36АН. Пусковой адрес ОВ6ВН.

Тригонометрические функции

SIN X С361Н, С362Н, С363Н, а значение функции С355Н, С366Н, С367Н. Пусковой адрес ОС87Н.

COS X С361Н, С362Н, С363Н, а значение функции С365Н, С366Н, С367Н. Пусковой адрес 0D32Н.

TG X С361Н, С362Н, С363Н, а значение функции в ячейки С374Н, С375Н, С376Н. Пусковой адрес 0Е47Н.

CTG X С361Н, С362Н, С363Н, а значение функции заносится по адресам С374Н, С375Н, С376Н. Пусковой адрес 0F61H.

ARC TG X С361Н, С362Н, С363Н, а значение функции С365Н, С366Н, С367Н. Пусковой адрес ОЕ75Н.

ARC SIN X С361Н, С362Н, С363Н, а значение функции С365Н, С366Н, С367Н. Пусковой адрес 0D47H.

ARC COS X С361Н, С362Н, С363Н, а значение функции в ячейки С365Н, С366Н, С367Н. Пусковой адрес 0Е40Н.

ARC CTG X С361Н, С362Н, С363Н, а значение функции в ячейки ОЗУ С365Н, С366Н, С367Н. Пусковой адрес 0F8FH.

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

Leave a Reply