ЮТ-88/ЮТ-УМ 02-89/Персональный компьютер ЮТ-88
Данный материал защищён авторскими правами!
Использование материала заявлено как добросовестное, исключительно для образовательных некоммерческих целей. Источник: http://retro.h1.ru/UT88/CPU/CPUmini.php |
«Хорошо бы собрать компьютер» — об этом наверняка мечтают многие из наших читателей. Но мечты оставались мечтами—повторить конструкции, которые предлагали журналы «Радио» или «Моделист-конструктор», начинающим радиолюбителям не по плечу — сложные схемы, детали, которых не достать, трудности с налаживанием…
Редакция и решила прийти мечтателям, конечно, деятельным, на помощь. По ее заказу в кружке радиоэлектроники при Раменском Доме пионеров под руководством кандидата технических наук, автора ряда изобретений В.БАРТЕНЕВА, был разработан персональный компьютер, который вы при желании сможете повторить. Дефицитных деталей в нем — минимум. Для удобства вся электронная схема разбита на модули, каждый из которых может работать «сам по себе» в качестве устройств программного управления, мощного программируемого микрокалькулятора или банка данных. В полном варианте микроЭВМ «ЮТ-88» по своим возможностям превосходит большинство популярных среди радиолюбителей компьютеров. А то, что собирать его вы будет постепенно, модуль за модулем, не только упростит сборку, но и позволит освоить программирование, познакомиться с устройством и принципами работы вычислительной техники. Словом, собрав «ЮТ-88», вы научитесь не только им полноценно пользоваться, но и самостоятельно разрабатывать любые собственные конструкции на микропроцессорах. Работа послужит вам хорошей школой в электронике и информатике.
Идеи, которые нашли отражение в нашей публикации, формировались у автора в процессе обсуждений со специалистами А. Блохиным, С. Аксеновым, И. Грищенко, А. Мышко, за что им благодарны и автор, и редакция.
Огромное спасибо и кружковцам Г. Бартеневу, А. Егорову, Р. Тайцлину, И. Басову, А. Чемелю, А. Дорошкевичу за помощь в макетировании компьютера и отладке программ.
ПЕРВЫЙ ШАГ — МИКРОЭВМ МИНИМАЛЬНОЙ КОНФИГУРАЦИИ
В самом общем виде компьютер, который мы предлагаем вам построить, можно представить в виде структурной схемы, изображенной на рисунке 1. В ней приведены три основных элемента—центральный процессор, память и устройство ввода/вывода. Эти три блока входят в состав любого компьютера.
Центральный процессор — самый сложный элемент. Он представляет собой программно-управляемое устройство, обрабатывающее информацию и осуществляющее обмен ею между основными компонентами ЭВМ. В качестве центрального процессора в нашем компьютере используем большую интегральную схему (БИС) микропроцессора КР580ВМ80А. Выбор наш не случаен. Этот микропроцессор, думаем, еще долгое время будет популярным среди радиолюбителей из-за большого объема программного обеспечения, разработанного под его систему команд. А наличие у него фиксированной и простой системы команд облегчает составление программ даже в машинных кодах. И, наконец, что очень важно, этот микропроцессор уже появился в продаже.
Память микроЭВМ состоит из постоянного запоминающего устройства (ПЗУ), допускающего только считывание хранимой информации, и оперативного запоминающего устройства (ОЗУ), работающего как в режиме чтения информации из ОЗУ, так и записи в него новых данных. Фактически память — это совокупность однотипных ячеек, в каждой из которых хранится закодированная информация. Единицей измерения ее объема является бит. Для хранения 1 бита достаточно иметь одноразрядную ячейку, в которую может быть записана 0 или 1. Разрядность ячейки памяти микроЭВМ определяется разрядностью шины данных микропроцессора (для микропроцессора КР580ВМ80А составляет 8 бит, или 1 байт).
Каждая ячейка памяти имеет свой номер — адрес. Число непосредственно адресуемых ячеек определяется разрядностью адреса, формируемого микропроцессором. В нашем случае это 16 разрядов, что позволяет иметь максимальный объем адресуемой памяти чуть больше 65 тысяч ячеек.
Устройства ввода/вывода включают в себя клавиатуру, дисплей и другие устройства, например, принтер. Информация между ними и микропроцессором передается через так называемые порты ввода/вывода. К микропроцессору КР580ВМ80А можно подключить в общей сложности 256 таких устройств.
Объем используемой памяти, число устройств ввода/вывода определяют конфигурацию компьютера, его возможности и стоимость. Так что мы вам предлагаем собрать компьютер, который имеет изменяемую конфигурацию. В своем минимальном исполнении, когда используется только процессорный модуль—это простая в изготовлении, дешевая одноплатная микроЭВМ на доступных микросхемах. Однако, несмотря на минимальный объем ОЗУ и ПЗУ, простейшие клавиатуру и дисплей, наш первый модуль поможет вам не только разобраться в работе микроЭВМ, но и научиться писать программы. Заметим, что это лишь наш первый этап в освоении компьютерной техники. Изготовив модуль и освоив его программирование, мы будем готовы сделать следующий шаг — расширить конфигурацию нашей микроЭВМ, добавив дисплейный модуль с полной клавиатурой и квазидиск произвольного объема.
Так, шаг за шагом, от простого к сложному, мы с вами пройдем путь от простейшей микроЭВМ к настоящему персональному компьютеру с мощным программным обеспечением на основе операционной системы СР/М.
БЛОК-СХЕМА МИКРОЭВМ
Давайте более подробно рассмотрим структурную схему на рисунке 1. Раскроем ее составные части.
Шины — это совокупность проводов, объединенных между собой по функциональному признаку. Восемь проводов образуют шину данных, шестнадцать — шину адреса, пять — шину управления. Такая архитектура позволяет легко наращивать различные периферийные устройства, присоединяя их к персональной ЭВМ.
Блок-схема первого модуля условно разбита на три блока:
- блок центрального процессора,
- блок памяти,
- блок интерфейса.
Такая разбивка его схемы на блоки сделана, исходя из удобства объяснения принципа работы отдельных узлов компьютера. Но, учитывая функциональную законченность каждого блока, вы можете использовать их по своему усмотрению в различных радиолюбительских конструкциях.
В состав блока центрального процессора на рисунке 1 входят микропроцессор и дополнительные элементы, обеспечивающие его работу, — генератор тактовых импульсов, формирователь сигналов шины данных и шины управления (системный контроллер), буфер шины адреса. Блок памяти, как сказано, состоит из ПЗУ и ОЗУ. Блок интерфейса — простейшая клавиатура с семнадцатью кнопками, дисплей на семисегментных индикаторах и схема сопряжения с кассетным магнитофоном.
В компьютере передаваемые сигналы представлены двумя уровнями напряжения—логическими «0» и «1». Сигнал, который вызывает выполнение некоторого действия, называют активным. Активное состояние может быть при логической единице либо при логическом нуле. В частности, на шине управления сигналы активны при уровне логического «0». Таких управляющих сигналов пять:
- ЧТЗУ — чтение памяти;
- ЗПЗУ — запись в память;
- ЧТВВ—чтение порта ввода/вывода;
- ЗПВВ—запись в порт ввода/вывода;
- ППР—подтверждение прерывания.
Шина управления используется лишь для вывода сигналов управления, то есть она однонаправленная. Основная причина введения активных сигналов низкого уровня (они помечены чертой сверху) состоит в простоте объединения их по ИЛИ. Кроме того, выходной каскад с таким сигналом большую часть времени находится в выключенном состоянии и потребляет меньше энергии от источника питания.
Как и шина управления, шина адреса лишь передает выходные сигналы микропроцессора. Отдельные линии шины адреса имеют обозначение от А0 до А15.
В отличие от шин управления и адреса, шина данных — двунаправленная. Передача данных здесь может производиться как от процессора, так и к процессору. Однако в каждый данный момент времени она осуществляется только в одном направлении. Отдельные линии шины данных обозначаются от D0 до D7.
По шинам компьютера информация передается в двоичном коде. Но его запись кодов требует много места и не всегда удобна. В дальнейшем мы будем пользоваться шестнадцатеричной формой представления кодированных сигналов, то есть системой счисления с основанием 16. В ней используются символы: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, Е и F.
Процедура преобразования двоичного числа в шестнадцатеричное проста. Разряды, начиная с младшего, разбиваются на группы по четыре. Каждой группе подбирается соответствующий шестнадцатеричный символ. В частности, диапазон адресов компьютера составляет 000016 — FFFF16 (в дальнейшем основание системы счисления мы указывать не будем, а в конце каждого кода будем добавлять букву Н, например: адресное пространство компьютера, составляет 0000H-FFFFH). Шестнадцатеричная форма записи очень проста, да и воспринимать ее легче, чем двоичную. На дисплее, после соответствующего преобразования в дешифраторе двоичного кода в шестнадцатеричный, будут индицироваться шестнадцатеричные цифры. Ввод же с клавиатуры производится в шестнадцатеричных цифрах, хотя затем код каждой нажатой шестнадцатеричной клавиши будет преобразован дешифратором в двоичный код, подаваемый на шину данных.
На рисунке 1 отсутствует один блок, о котором нельзя не упомянуть,—это блок формирования выборки кодов адреса. Все внешние устройства микроЭВМ могут быть подключены к микропроцессору только при выполнении двух условий: на них должен быть подан управляющий сигнал с шины управления и это устройство должно быть выбрано соответствующим адресом. Формирование сигналов выборки кода адреса (ВК) внешних устройств осуществляется дешифрацией сигналов шины адреса.
В нашем первом модуле применяются два способа ввода/вывода информации. Изолированный — для портов клавиатуры (А0Н) и схемы сопряжения с кассетным магнитофоном (А1H). Отображенный на память для портов дисплея с адресами: 9000Н (порт младшего байта дисплея), 9001Н, 9002Н (порты старших байтов дисплея). Как уже отмечалось, число изолированных портов ввода/вывода не превышает 256, и их адреса изолированы от адресного пространства памяти. В микропроцессоре КР580 имеется две команды ввода IN и вывода OUT, при выполнении которых данные из адресуемого порта загружаются в микропроцессор (ввод) или, наоборот, из микропроцессора передаются в адресуемый порт (вывод). Ввод/вывод, отображенный на память, характеризуется тем, что процессор обращается к портам как к ячейкам адресного пространства памяти и все команды, содержащие адреса портов, превращаются в команды ввода/вывода. В нашей микроЭВМ использованы оба эти способа.
ИСТОЧНИК ПИТАНИЯ
На нашей блок-схеме для простоты картины отсутствует связь модуля с источниками питания, тем не менее, нужно сказать и о них. Для питания нашей микроЭВМ необходимы три источника постоянного напряжения +5В, +12В и −5В. Пятивольтовый источник, наиболее мощный, должен обеспечивать ток до 1А. Ток потребления по цепям +12В не превышает 50 мА, а по цепям −5В −5 мА. Напряжение +12В, −5В используется для питания микропроцессора. Сборку микроЭВМ необходимо начинать с изготовления модуля питания. Его электрическая схема показана на рисунке 2.
Переменное напряжение (порядка 8—10 В) вторичной обмотки поступает на мостовой выпрямитель А1 и на два удвоителя напряжения на диодах VD1 —VD4. Выпрямленное напряжение сглаживается емкостью С2 и стабилизируется с помощью микросхемы DA2.
Увеличение нагрузочной способности стабилизатора достигается подключением внешнего транзистора VT1, установленного на радиаторе. С помощью потенциометра R2 устанавливается требуемое выходное напряжение. Выпрямленные и удвоенные напряжения положительной и отрицательной полярности сглаживаются соответственно емкостями С5 и С9. Положительное напряжение стабилизируется с помощью микросхемы DA3. Значение выходного напряжения +12В регулируется с помощью потенциометра R5. Отрицательное напряжение −5В снимается с параметрического стабилизатора на стабилитроне VD5.
В качестве трансформатора Т1 может быть использован любой понижающий трансформатор со вторичной обмоткой, обеспечивающей напряжение порядка 8—10 В и ток до 2А. Его можно изготовить и самостоятельно, намотав на сердечнике ШЛ16х32. Сетевая обмотка содержит 1350 витков провода ПЭВ-2 диаметром 0, 31 мм, вторичная обмотка содержит 50 витков того же провода диаметром 1, 5 мм.
ЭЛЕКТРИЧЕСКАЯ СХЕМА
Для удобства мы решили поместить электрическую схему первого модуля компьютера «ЮТ-88» на вкладке.
Блок центрального процессора выполнен на микросхемах DD1, DD2, DD5, DD6 и DD8. Микросхема DD1 -микропроцессор КР580ВМ80А. Микросхема DD2 КР580ГФ24 предназначена для формирования двух последовательностей тактовых импульсов с требуемыми временными и амплитудными параметрами.
Она содержит задающий генератор, стабилизированный внешним кварцевым резонатором ZQ1 с частотой 16 МГц. Кроме формирователя синхроимпульсов Ф1 и Ф2, микросхема DD2 содержит триггеры синхронизации сигналов начальной установки и готовности, а также схему формирования строба состояния STB, используемого для записи байта состояния при формировании сигналов шины управления.
Адресная шина (ША) подключается ко многим устройствам. Выходы же микропроцессора КР580ВМ80А выдерживают лишь нагрузку одного входа ТТЛ микросхем. Поэтому для повышения нагрузочной способности к шине адреса подключены буферные регистры DD5 и DD6 КР580ИР82. Микросхема КР580ИР82 представляет собой 8-разрядный регистр с управляемыми выходными формирователями. Запись информации происходит при наличии логической единицы на выводе 11 STB, а выдача информации — при подаче на вывод 9 ОЕ уровня логического нуля.
Увеличение нагрузочной способности двунаправленной шины данных выполнено с помощью микросхемы системного контроллера DD8 КР580ВК38. Она осуществляет формирование выходных сигналов не только шины данных, но и шины управления. Микросхема содержит двунаправленный магистральный формирователь, регистр состояния и схему формирования управляющих сигналов. Следующий блок микроЭВМ предназначен для кратковременного и долговременного хранения данных и программ. На схеме модуля «ЮТ-88» блок памяти представлен микросхемами ПЗУ КР556РТ5 (DD10, DD11) и микросхемами ОЗУ КР541РУ2 (DD13, DD14).
Микросхемы DD10, DD11 предназначены для хранения управляющей программы МОНИТОР. Подробно о содержимом ПЗУ будет рассказано в разделе, посвященном программному обеспечению микроЭВМ. Сейчас же рассмотрим, как происходит считывание информации с микросхем ПЗУ.
После нажатия на кнопку «УСТ» на шине адреса устанавливается адрес 0000Н, а на шине управления — сигнал ЧТЗУ, который после инвертирования элементом DD21.5 подается на вход уз микросхем ПЗУ. Дешифратор на микросхеме К155ИДЗ (DD7) вырабатывает сигналы выборки адреса, разбивая всю доступную область адресного пространства микроЭВМ на сегменты по 4 Кбайта каждый. При этом сигнал выборки сегмента адресного пространства 0000Н—0FFFH действует на выводе 1 микросхемы DD7 и после инвертирования элементом DD9.1 подается на входы V4 микросхем ПЗУ DD10 и DD11. Учитывая, что на два других входа V1, V2 выборки микросхемы DD10 подаются сигналы с адресной шины А11 и А9, информация с микросхемы DD10 будет считываться в области адресного пространства 0000Н—01FFH. В отличие от DD10 на вход выборки V2 микросхемы DD11 сигнал с адресной шины А9 подается после инвертирования элементом DD9.2, поэтому в области адресного пространства 0200H-03FFH информация будет считываться с микросхемы DD11.
Сигналы выборки сегментов адресного пространства 0000Н— 0FFFH, E000H-EFFFH и F000H-FFFFH вы используете при расширении конфигурации компьютера. Поэтому вместе с сигналами управления они выведены на внешний разъем.
Схема ОЗУ выполнена на микросхемах DD13, DD14 типа КР541РУ2, имеющих совмещенные вход и выход. Объем ОЗУ 1 Кбайт. При записи данных в ОЗУ общие выводы 11—14 микросхем действуют как входы. Чтобы избежать конфликта на внутренних выходных линиях памяти при вводе данных в ОЗУ, когда сигнал управления ЗПЗУ имеет уровень логического 0, внутренние выводы ОЗУ блокируются с помощью внутренних схем. Указанные внутренние выходы переводятся при этом в состояние высокого сопротивления. Во время выполнения операции записи данных в ОЗУ в состоянии логического 0 должны находиться как выводы WE разрешения записи, так и выводы 8 CS выбора микросхемы. При чтении данных из ОЗУ выводы 8 CS выбора микросхемы должны иметь состояние логического 0, а выводы 10 WE разрешения записи—состояние логической 1. Соответствующая схема, предназначенная для формирования требуемых управляющих сигналов, выполнена на DD9.4, DD12.1 и DD12.2. ОЗУ работает в адресном пространстве C000H-C3FFH.
В состав нашего первого модуля, помимо процессорного блока и блока памяти, входит блок интерфейса, с помощью которого осуществляется ввод и вывод данных. Ввод производится с клавиатуры или с кассетного магнитофона. Вывод — путем индикации на дисплее или записью их на кассетный магнитофон для долговременного хранения. Содержимое ячеек памяти с адресами 9000Н, 9001Н и 9002Н отображается на индикаторах в виде шестнадцатеричных цифр.
Программная реализация интерфейса с кассетным магнитофоном предельно упростила его сопряжение с микроЭВМ и обеспечила программную совместимость по вводу данных с кассетного магнитофона с микроЭВМ «Микро-80» и «РК-86».
Рассмотрим электрическую схему модуля в части блока интерфейса. В индикаторе ячейки памяти выполнены на регистрах DD18 и DD19 типа К155РП1. Каждая микросхема представляет собой восемь четырехразрядных ячеек, адресуемых независимо как при записи, так и при считывании из них данных. Входы дешифрации регистров при записи WA, WB подключены к адресам А0 и A1 шины адреса. Запись данных осуществляется подачей логического 0 на вход С1. Этот сигнал образуется с помощью элементов DD9.3, DD9.5 и DD12.3 объединением кода выборки адреса, соответствующего области адресов 9000Н— 9FFFH, дешифратора DD7 и управляющего сигнала ЗПЗУ. Входы дешифраторов чтения регистров DD18 и DD19 VA и VB подключены к старшим разрядам двоичного счетчика на микросхеме DD24 типа К155ИЕ5. Чтение данных производится при подаче на вход С2 логического нуля. Выходы 4-х разрядных регистров DD18 и DD19 выполнены на транзисторах с открытым коллектором и объединяются между собой.
В схему управления динамической индикацией входит генератор синхроимпульсов на элементах DD21.3, DD21.4, двоичный счетчик DD24 и дешифратор управляющих импульсов на микросхеме К155ИД4 (DD20). Двоичный код преобразуется в дешифраторе на микросхеме DD23 (К155РЕЗ) в специальный код семисегментного индикатора. Выводы DD23, идущие к сегментам, подключены через резисторы сопротивлением 1 кОм к шине питания +5 В. При этом на соответствующем разряде индикатора с общим катодом (например, АЛС324А или АЛС318) должен быть уровень логического нуля. Содержимое дешифратора (DD23) двоичного кода в семисегментный шестнадцатеричный приведено в таблице 2.
Таблица 2.
СОДЕРЖИМОЕ ДЕШИФРАТОРА К155РЕЗ (DD23)
Цифра индикатора | Адрес К155РЕЗ код на входе | Код ПЗУ |
0 | 00 | 3F |
1 | 01 | 06 |
2 | 02 | 5В |
3 | 03 | 4F |
4 | 04 | 66 |
5 | 05 | 6D |
6 | 06 | 7D |
7 | 07 | 07 |
8 | 08 | 7F |
9 | 09 | 6F |
А | 0А | 77 |
В | 0В | 7С |
С | 0С | 39 |
D | 0D | 5Е |
E | 0E | 79 |
F | 0F | 71 |
Клавиатура состоит из 17 кнопок, соединенных с дешифратором, на выходе которого формируется двоичный код нажатой клавиши. Дешифратор кода нажатой клавиши выполнен на микросхемах ПЗУ DD15 и DD 16 типа КР556РТ4. Содержимое этих микросхем приведено в таблице 3. Когда не нажата ни одна из клавиш, при поступлении сигнала выборки клавиатуры в виде логического нуля, обе микросхемы ПЗУ открываются, и поскольку по адресу FF в микросхемах ПЗУ написаны нули, то они и считаются на шину данных.
Таблица 3.
СОДЕРЖИМОЕ ПЗУ КЛАВИАТУРЫ
Адрес на входе | Содержимое ПЗУ (DD15) | Содержимое ПЗУ (DD16) |
FF | 0 | 7 |
FE | 0 | 8 |
FD | 1 | 9 |
FB | 2 | А |
F7 | 3 | В |
EF | 4 | С |
DF | 5 | D |
BF | 6 | E |
7F | 7 | F |
Все остальные адреса | 0 | 0 |
Код нулевой клавиши 10Н формируется вспомогательным логическим элементом 2И—НЕ с открытым коллектором микросхемы DD17. Аналогично формируется код клавиши «ШАГ НАЗАД». Коды остальных 15 клавиш формируются микросхемами DD15 или DD16. Причем при формировании кодов от «8» до «F» логическая единица в разряде D3 шины данных запрещает выборку микросхемы DD15. Две дополнительные клавиши могут быть задействованы при подключении их к выводам 4 микросхемы DD17 (код 20Н) или 10 микросхемы DD17 (код 40Н).
Для сопряжения с кассетным магнитофоном используется D — триггер DD4.2, информационный вход которого подключен к нулевому разряду шины данных, а выход через фильтр соединяется с входом кассетного магнитофона в режиме записи. В режиме воспроизведения выход кассетного магнитофона подключается к входу операционного усилителя DA1. Выход операционного усилителя через схему формирования импульсов положительной полярности и подключается к одному входу логического элемента DD12.4 с открытым коллектором. Второй вход этого логического элемента подключен к схеме объединения по ИЛИ на микросхеме DD22 управляющего сигнала ЧТВВ и сигналов выборки кода порта A1H с помощью дешифратора DD7 и инверсного адреса А0. Выход элемента DD12.4 подключен к нулевому разряду шины данных. Запись и чтение информации при работе с кассетным магнитофоном производится последовательным кодом, бит за битом.
В основу записи информации на магнитную ленту положен метод двухфазного кодирования. Формирование последовательности двухфазных кодов производится программно. На рисунке 3 показано, как выглядит последовательный двухфазный код после преобразования байта А5 (его двоичное представление 10100101). Запись байта при последовательном двухфазном кодировании начинается со старшего разряда. В середине передаваемого бита происходит изменение его значения на противоположное, причем изменение с «1» на «0» означает, что передан бит, равный 0, а обратное изменение с «0» на «1»—бит, равный единице. На границе двух одинаковых по значению смежных битов всегда происходит изменение значения двухфазного кода. На границе разных по значению смежных битов изменение двухфазного кода не происходит. Период следования информации Т выбирается из соображений надежности считывания информации. Если Т=0,66 мс, то скорость записи считывания равна 1500 бит/сек, что позволяет записать на одну сторону стандартной кассеты типа МК-60-2 до 256 Кбайт информации. Таким образом, интерфейс с кассетным магнитофоном представляет собой одноразрядный порт ввода-вывода.
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ
Ограниченный объем ПЗУ и ОЗУ в микроЭВМ минимальной конфигурации предъявляет особые требования к эффективности программного обеспечения, которое фактически ограничено программой МОНИТОР. Однако даже, несмотря на небольшой объем, МОНИТОР «ЮТ-88» даст вам возможность писать и отлаживать программы в машинных кодах, модифицировать их за счет вставки или удаления отдельных команд, пересылать отлаженные программы в новые адреса и корректировать их. При программировании в машинных кодах удается максимально приблизиться к аппаратным средствам микроЭВМ, учесть особенности микропроцессора и каждой отдельной команды и в результате получить предельно короткие и быстродействующие программы. Для программирования в машинных кодах требуются только карандаш и бумага. Составленную программу можно сразу с помощью МОНИТОРА загрузить в ОЗУ микроЭВМ и попробовать в работе. Используя при написании таких программ символическое обозначение команд в виде мнемоник языка Ассемблера с последующим ручным ассемблированием с помощью компактных табличных представлений команд/мнемоник-команд/кодов, удается по существу освоить программирование на языке Ассемблер.
Прежде чем перейти к рассмотрению директив МОНИТОРА, целесообразно познакомиться с системой команд и устройством микропроцессора КР580ИК80А в справочном листке «ЮТ-88»
Все команды микроЭВМ сведены в таблице . Выделим наиболее общие закономерности их использования.
- Арифметические и логические операции разрешены только между аккумулятором и байтом данных или между аккумулятором и любым регистром.
- Аккумулятор и регистровая пара HL являются единственными регистрами, которые могут быть непосредственно загружены в память.
- Аккумулятор является единственным регистром, который может быть инвертирован, сдвинут, косвенно загружен в память с использованием регистровых пар ВС и DE или использован в командах ввода/вывода (IN, OUT).
- Регистровая пара HL является единственной, содержимое которой может быть передано в счетчик команд (команда PCHL) или указатель стека (команда SPHL).
- Регистровая пара Н может использоваться как аккумулятор двойной длины при сложении 16 разрядных чисел (команда DAD).
- Содержимое регистровых пар HL и DE можно менять местами (команда HCHG).
- Отдельные команды могут применяться для специальных функций. Команды XRA А или SUB А обнуляют аккумулятор. Команды ANA А или ORA А очищают флаг переноса, а команда ADD А выполняет логический сдвиг аккумулятора влево.
- Команды увеличения (уменьшения) на 1 регистров INR (DCR) действуют на все флаги, за исключением флага переноса. Команды увеличения (уменьшения) на 1 регистровых пар INX (DCX) не оказывают влияния на флаги.
- В стек или из стека могут быть переданы только регистровые пары. Одной из таких регистровых пар является слово состояния микропроцессора, которое содержит аккумулятор (старший байт) и флаги (младший байт). Команды CALL и RET передают адрес в стек и обратно. При записи 16-разрядных адресов младший байт записывается первым.
Целесообразно также отдельно рассмотреть основные способы адресации данных в микроЭВМ. Предусмотрено 3 способа адресации: прямая, непосредственная и косвенная.
- Прямая адресация (из памяти или в память с конкретным адресом) может использоваться для работы с аккумулятором и регистрами HL. Адрес данных записывается во втором и третьем байте команды.
- Например:
- LDA С000Н
- Эта команда загружает А из ячейки памяти с адресом С000Н;
- STA 9000H
- Эта команда загружает ячейку памяти с адресом 9000H содержимым аккумулятора.
- LHLD С000Н
- Эта команда загружает регистр L из ячейки с адресом С000Н, а регистр Н из ячейки с адресом С001Н, то есть сначала младший байт, а затем старший байт.
- SHLD 9001H
- Эта команда загружает в ячейку памяти 9001H содержимое регистра L, а в ячейку памяти 9002Н регистра Н.
- Непосредственная адресация, то есть конкретное значение, записывается в байте, следующем за командой.
- Например:
- MVI A, 11H.
- Эта команда загружает в А значение 11H;
- LXI Н, 9001H
- Эта команда загружает в регистры H—L значение 9001H соответственно.
- Косвенная адресация (по адресу в регистровой паре HL, DE или ВС).
- Например:
- MOV А, М или MOV М, А.
- Команды загрузки регистра из ячейки памяти с адресом в регистровой паре HL или наоборот.
- LDAX D или LDAX В
- Команды загрузки аккумулятора из памяти по адресам в регистровых парах DE или ВС.
- STAX D или STAX B
- Команды загрузки памяти по адресу в регистровых парах DE или ВС содержимым аккумулятора.
Используя команды с разными способами адресации, приведем программу вывода единиц на все индикаторы:
- MVI A, 11H
- Занесение константы в аккумулятор 2-байтная команда
- STA 9000H
- Вывод «11» на правый индикатор 3-байтная команда
- LXI Н, 9001H
- Занесение адреса среднего индикатора в Н 3-байтная команда
- MOV М, А
- Вывод на средний индикатор «11» Однобайтная команда
- LXI D, 9002H
- Занесение адресалевого индикатора в DE 3-байтная команда
- STAX D
- Вывод «11» на левом индикаторе Однобайтная команда
Программа содержит шесть команд, и, чтобы ее записать в память, потребуется 13 ячеек памяти. Используя таблицу, находя в ней мнемоники каждой команды, определим соответствующие им коды.
MVI A, 11H 3Е 11 STA 9000H 32 00 90 LXI H, 9001H 21 01 90 MOV M, A 77 LXI D, 9002H 11 02 90 STAX D 12 </b>
Если эти коды записать в ОЗУ микроЭВМ, то в результате исполнения этой программы на всех индикаторах микроЭВМ высветятся единички.
МОНИТОР — УПРАВЛЯЮЩАЯ ПРОГРАММА МИКРОЭВМ
Основой программного обеспечения микроЭВМ, как бы его ядром, является управляющая программа МОНИТОР объемом 1 Кбайт. Несмотря на столь малый объем, в ней имеются директивы записи, чтения ОЗУ, пуска программ с задаваемого адреса, тестирования ОЗУ и индикаторов, записи и чтения программ с кассетного магнитофона с их верификацией. Имеется возможность пошаговой коррекции содержимого ОЗУ, осуществлять перемещение программ в новые адреса с коррекцией адресов программы, вычислять контрольную сумму, вставлять и удалять байты команд с коррекцией адресов остальной части программы. Минимизация объема МОНИТОРА достигнута, прежде всего, за счет того, что к наиболее часто используемым подпрограммам ввода/вывода в МОНИТОРе производится обращение не с помощью 3-байтной команды CALL ADR, а с помощью однобайтных команд RST 0—RST 6.
Встроенная в МОНИТОР программа часов, работающая в режиме прерывания по RST 7 от внешнего датчика секунд, позволяет осуществить привязку выполнения программ к реальному времени.
Хранится МОНИТОР в ПЗУ в области памяти 0000H-03FFH. Чтобы его запустить, достаточно произвести начальную установку микроЭВМ, нажав на кнопку «УСТ». При работе МОНИТОРА в ОЗУ лишь несколько ячеек используется для стека и хранения промежуточных результатов и данных.
Коды МОНИТОРА приведены в таблице 5. При запуске МОНИТОРА происходит настройка указателя стека, и затем на крайних справа индикаторах появляются две единички. Это означает, что микроЭВМ находится в ожидании ввода директивы с клавиатуры. Клавиатура имеет двойное функциональное назначение. После начальной установки каждая клавиша служит для ввода директивы, а после ввода директивы эти же шестнадцатеричные клавиши используются для ввода ее параметров. Директивы МОНИТОРА перечислены в таблице 4.
Таблица 5.
Коды Монитора
0000 31 EE C3 3E 11 C3 3B 00 C3 00 01 F7 EB C3 7D 00 0010 D5 AF 57 E7 07 C3 47 00 E5 F5 21 50 66 C3 56 00 0020 DF C3 5F 00 00 C3 00 C0 32 00 90 22 01 90 C9 00 0030 F5 D7 57 D7 5F F1 C9 00 C3 C1 00 FB 32 00 90 E7 0040 C6 F3 26 00 6F 6E E9 07 07 07 B2 57 32 00 90 E7 0050 B2 32 00 90 D1 C9 2B 7D B4 C2 56 00 F1 E1 C9 DB 0060 A0 C6 00 CA 5F 00 FE 80 CA 6E 00 E6 0F C9 2B 3B 0070 3B AF EF D7 77 DF 23 C3 71 00 21 00 C0 E7 7E EF 0080 23 C3 7D 00 F7 EB AF EF DF E9 21 00 C0 C3 71 00 0090 F3 F7 EB C3 71 00 AF 67 6F EF DF C6 11 FE 10 C2 00A0 97 00 C7 21 00 C0 AF 77 7E B7 C2 BB 00 3D 77 7E 00B0 3C C2 BB 00 23 7C E6 04 CA A6 00 7E EF E7 C3 A6 00C0 00 F3 F5 C5 D5 E5 21 E4 00 11 FD C3 06 03 1A 3C 00D0 27 12 BE C2 DE 00 AF 12 23 13 05 C2 CE 00 E1 D1 00E0 C1 F1 FB C9 60 60 24 C3 9A 01 C3 C2 01 C3 75 01 00F0 C3 F5 01 91 8A 7A 96 A3 0B 25 84 ED E7 EA F0 90 0100 C5 D5 F5 57 0E 08 7A 07 57 3E 01 AA D3 A1 CD 21 0110 01 3E 00 AA D3 A1 CD 21 01 0D C2 06 01 F1 D1 C1 0120 C9 06 1E 05 C2 23 01 C9 C5 D5 0E 00 57 DB A1 5F 0130 79 E6 7F 07 4F DB A1 BB CA 35 01 E6 01 B1 4F CD 0140 6E 01 DB A1 5F 7A B7 F2 63 01 79 FE E6 C2 57 01 0150 AF 32 FC C3 C3 61 01 FE 19 C2 30 01 3E FF 32 FC 0160 C3 16 09 15 C2 30 01 3A FC C3 A9 D1 C1 C9 06 2D 0170 05 C2 70 01 C9 C5 D5 E5 F5 F7 42 4B F7 2E 00 65 0180 0A D5 5F 16 00 19 D1 CD 94 01 03 C2 80 01 EF F1 0190 E1 D1 C1 C7 7A B8 C0 7B B9 C9 C5 D5 E5 F5 F7 42 01A0 4B F7 C5 AF 6F CF 2C C2 A5 01 3E E6 CF 78 CF 79 01B0 CF 7A CF 7B CF 0A CF CD 94 01 03 C2 B5 01 C1 C3 01C0 7D 01 C5 D5 E5 F5 F7 3E FF CD 28 01 67 CD EE 01 01D0 6F 19 44 4D C5 CD EE 01 67 CD EE 01 6F 19 EB CD 01E0 EE 01 02 CD 94 01 03 C2 DF 01 C1 C3 7D 01 3E 08 01F0 CD 28 01 C9 00 2A FE C3 3A FD C3 EF DF C3 F5 01 0200 CD 24 02 DA 0A 02 CD 0E 02 C7 CD 19 02 C7 1A 77 0210 CD 94 01 1B 2B C2 0E 02 C9 0A 77 CD 94 01 03 23 0220 C2 19 02 C9 F7 D5 F7 EB 22 F2 C3 E1 22 F0 C3 F7 0230 EB 22 F4 C3 7D 93 6F 7C 9A 67 22 F8 C3 4D 44 2A 0240 F2 C3 E5 09 22 F6 C3 2A F0 C3 4D 44 D1 2A F4 C3 0250 7D 91 7C 98 D8 2A F6 C3 C9 7C BA C0 7D BB C9 CD 0260 24 02 CD 66 02 C7 2A F4 C3 56 E5 CD B9 02 60 E3 0270 78 FE 03 C2 A5 02 23 4E 23 46 2B E5 2A F0 C3 79 0280 95 78 9C DA A3 02 2A F2 C3 7D 91 7C 98 DA A3 02 0290 2A F8 C3 7D 81 5F 7C 88 57 E1 73 23 72 23 33 33 02A0 C3 AB 02 E1 2B C1 23 05 C2 A6 02 5D 54 2A F6 C3 02B0 23 CD 59 02 EB C2 69 02 C9 01 06 03 21 D3 02 7A 02C0 A6 23 BE C8 23 0D C2 BF 02 0E 03 05 78 FE 01 C2 02D0 BF 02 C9 FF CD C7 C4 FF C3 C7 C2 E7 22 CF 01 C7 02E0 06 C7 C6 F7 D3 F7 EB 22 F0 C3 22 F4 C3 E5 F7 EB 02F0 22 F2 C3 22 F6 C3 F7 EB 22 FA C3 D1 7D 93 6F 7C 0300 9A 67 22 F8 C3 CD 66 02 C7 F7 D5 F7 EB 22 F2 C3 0310 F7 EB 22 FA C3 F7 EB 22 EE C3 E1 22 F0 C3 56 E5 0320 CD B9 02 60 E3 78 FE 03 C2 4A 03 23 5E 23 56 2B 0330 E5 2A FA C3 CD 59 02 C2 48 03 2A EE C3 EB E1 73 0340 23 72 23 33 33 C3 50 03 E1 2B C1 23 05 C2 4B 03 0350 5D 54 2A F2 C3 23 CD 59 02 EB C2 1E 03 C7 F7 EB 0360 22 F0 C3 4D 44 F7 6B 62 22 F2 C3 23 22 F6 C3 CD 0370 0E 02 AF 77 E5 23 22 F4 C3 21 01 00 22 F8 C3 CD 0380 66 02 E1 7E EF D7 77 C7 F7 EB 22 F0 C3 22 F4 C3 0390 4D 44 E5 F7 6B 62 22 F2 C3 E1 C5 03 CD 19 02 AF 03A0 77 2B 22 F6 C3 21 FF FF 22 F8 C3 CD 66 02 E1 C3 03B0 7D 00 F7 4B 42 F7 D5 F7 EB D1 0A BE C2 D4 03 79 03C0 BB C2 CF 03 78 BA C2 CF 03 3E 11 6F 67 EF C7 03 03D0 23 C3 BA 03 F5 7E EF D7 77 F1 C3 BA 03 C5 D5 E5 03E0 F5 7E EF E7 E3 3E AF EF E7 E3 69 60 3E BC EF E7 03F0 EB 3E DE EF E7 F1 E1 D1 C1 C9 FF FF FF FF FF FF |
Таблица 4.
Директивы МОНИТОРА
Клавиша директивы | Параметры директивы | Назначение |
0 | АДР | Запись данных в ОЗУ с адреса АДР |
1 | — | Запись данных в ОЗУ с адреса С000Н |
2 | — | Чтение данных из ОЗУ с адреса С000Н |
3 | — | Тест индикации |
4 | — | Тест ОЗУ |
5 | АДР | Чтение данных из ОЗУ с адреса АДР |
6 | — | Пуск программы с адреса С000Н |
7 | АДР | Пуск программы с адреса АДР |
8 | АДР1, АДР2 | Контрольная сумма данных с АДР1 по АДР2 |
9 | АДР1, АДР2 | Запись данных на ленту с АДР1 по АДР2 |
А | АДР | Чтение данных с ленты со смещением, равным АДР |
В | — | Индикация времени |
С | АДР | Установка времени с АДР C3FDH секунды, C3FEH минуты, C3FFH часы |
Все директивы МОНИТОРА задаются шестнадцатеричными цифрами и могут содержать дополнительно до трех параметров. Параметры также вводятся в виде шестнадцатеричных чисел. Их набирают после ввода директивы и контролируют по индикации на дисплее. Поскольку в МОНИТОРЕ на крайний справа индикатор выводится информация аккумулятора (адрес индикатора 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.
В процессе обработки прерывания, запрос на которое уже, предположим, поступил от датчика секунд, можно выделить следующие этапы отработки прерывания.
- Вывод 14 микропроцессора КР580ВМ80А перешел в состояние логической 1, что означает наличие запроса на прерывание.
- Микропроцессор принял запрос на прерывание, и на его выводе 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 выводятся часы и минуты, а на индикаторе А—секунды. Точность хода часов определяется стабильностью кварцевого генератора. В состав МОНИТОРА входит ряд подпрограмм ввода-вывода, которые могут быть использованы при составлении программ. Перечислим эти программы и правила обращения к ним.
- Подпрограмма записи байта на магнитофон, обращение с помощью команды RST1 (код CF). Код выводимого символа должен храниться в регистре «А».
- Подпрограмма ввода байта с клавиатуры — обращение с помощью команды RST2 (код D7). После возврата из подпрограммы код клавиатуры находится в регистре «А» микропроцессора.
- Подпрограмма задержки на секунду—обращение с помощью команды RST3 (код DF).
- Подпрограмма чтения клавиатуры (проверка активности клавиатуры)—обращение через RST4 (код Е7).
- Подпрограмма индикации содержимого регистров HL и А на индикаторах дисплея микроЭВМ — обращение через команду RST5 (код EF).
- Подпрограмма ввода двух байтов с клавиатуры в регистр DE — обращение через команду RST6 (код F7).
- Подпрограммы сравнения адресов, хранимых в регистровых парах DE и ВС пусковой адрес 0194Н и в регистровых парах HL и DE, пусковой адрес 0259Н.
- Подпрограмма чтения байта с магнитофона—пусковой адрес 0128Н. После возврата из подпрограммы код считанного символа находится в регистре «А» микропроцессора.
Эти подпрограммы помогут вам упростить разработку новых программ. Заметим, что для унификации обмена программ с «МИКРО-80» подпрограммы обслуживания кассетного магнитофона (записи и чтения байта) идентичны тем, что использованы в МОНИТОРЕ «МИКРО-80».
Рассмотрим теперь пример, поясняющий применение приведенных подпрограмм. Предположим, что необходимо написать программу занесения констант в заданную область памяти. Входным параметром этой программы являются начальный и конечный адреса области памяти, в которую заносится константа. Алгоритм этой программы представлен в виде структурной схемы на рисунке 4.
При написании программы удобно составить бланк (листинг), позволяющий представить программу в трех ракурсах: колонка адресов, колонка объектных кодов, колонка меток и мнемонических (ассемблерных) кодов, однозначно определяющих работу программы на уровне команд, и колонка комментариев. Подобная форма записи программ позволяет не только понять работу программы (колонка комментариев), но и разобраться в структуре программы (колонка меток и операций). Колонка кодов непосредственно может быть введена в ОЗУ микроЭВМ. Такой бланк изображен ниже:
Адреса | Коды | Метки | Мнемоника | Комментарий |
C000 | F7 | RST6 | ввод начального адреса в регистр DE | |
С001Н | ЕВ | XCHG | пересылка DE в HL | |
С002Н | F7 | RST6 | ввод конечного адреса в регистр DE | |
C003H | D7 | RST2 | ввод константы в регистр А | |
С004Н | 47 | MOV B.A | пересылка константы из А в В | |
С005Н | 70 | М: | MOV M,B | пересылка константы из В в ОЗУ |
С006Н | CD | CALL 0259 | обращение к подпрограмме сравнения адресов в HL и DE МОНИТОРА | |
С007Н | 59 | |||
С008Н | 02 | |||
С009Н | 23 | INX H | увеличение адреса на единицу HL = HL+1 | |
С00АН | C2 | JNZ M | проверка условия, если условие не выполняется, то переход на метку М | |
С00ВН | 05 | |||
С00СН | C0 | |||
C00DH | C7 | RST0 | выход в МОНИТОР по адресу 0000Н |
Для ввода кодов программы следует воспользоваться директивой «1». Затем проверить ввод директивой «2» и, наконец, осуществить пуск программы директивой «б». После нажатия кнопки «б» необходимо ввести начальный и конечный адрес ОЗУ, затем ввести константу. Окончание работы программы индицируется появлением единичек на правом индикаторе.
Проверить результат работы программы можно с помощью директивы «5», посмотрев ту область памяти, куда была занесена константа. Затем эту программу можно для дальнейшего использования сохранить, записав на ленту. Контрольная сумма этой программы 0800Н.
В качестве еще одного примера приведем игровую программу «Лабиринт». Распечатка этой программы приведена ниже. Дадим некоторые пояснения. «Лабиринт» — это поле 16х16 клеток, заполненное препятствиями. Координаты препятствий вводятся в виде отдельного набора данных с адреса С200Н. Вариант расположения препятствий приведен в виде распечатки игрового поля. Смысл игры заключается в следующем. Необходимо, мысленно представив поле размерами 16х16, пройти кратчайшим путем от нижнего правого угла (координаты FFH) к верхнему левому углу (00Н). Управление движением осуществляется с помощью четырех кнопок
- «1»—движение на одну клетку влево;
- «2»—движение на одну клетку вправо;
- «З»—движение на одну клетку вверх;
- «4»—движение на одну клетку вниз.
Каждый ход сопровождается коротким звуковым сигналом. Если на пути встречается препятствие, то сигнала не будет, но шаг засчитывается. Число шагов выводится на индикаторы HL, а координаты движения выводятся на индикатор А. Сигнализация о правильности хода в лабиринте производится с помощью магнитофона, включенного на запись (с остановленной лентой). Пуск программы осуществляется директивой «б» с последующим нажатием на любую клавишу.
СБОРКА И НАЛАЖИВАНИЕ МИКРОЭВМ
МикроЭВМ собрана на плате из фольгированного стеклотекстолита. Расположение микросхем показано на рисунке 5. Общий провод и цепь питания +5В выполнены печатным способом проводниками максимальной ширины, а остальные монтажные соединения — тонким изолированным проводом. В местах подключения печатных проводников к выводам питания микросхем подключаются блокировочные конденсаторы емкостью 0,22—0,68 Мкф. Для уменьшения паразитных связей и наводок монтажные провода надо прокладывать по кратчайшим путям между соседними соединяемыми выводами микросхем и не связывать в жгут. Удобно использовать обмоточный провод марки ПЭПЛОТ или ПЭВТЛК. Для соединения микроЭВМ с периферийными устройствами установите на плате разъем типа СНП34 или контактные штыри. Контактные штыри, подключенные к печатным проводникам платы общего провода, и +5В соединяются с клеммами источника питания проводами большого сечения.
В микроЭВМ можно применить любую клавиатуру, в которой каждая клавиша связана с контактами, работающими на замыкание. Можно, например, воспользоваться клавиатурой от микрокалькулятора. Возможно размещение клавиатуры на плате микроЭВМ. Для уменьшения количества соединительных проводов индикаторы дисплея постарайтесь разместить на монтажной плате. Возможны и другие варианты конструкции. Указанные на принципиальной схеме интегральные микросхемы серии К155 можно заменить их функциональными аналогами серий К133, К555, К531. Микросхемы буфера шины адреса КР580ИР82 можно заменить микросхемами К589ИР12 или двумя микросхемами К589АП16. ОЗУ можно собрать практически на любых статических микросхемах памяти. Если применяемые микросхемы ОЗУ имеют раздельные вход и выход, то эти выводы соединяют вместе.
Хотя наш первый модуль и отличается предельной простотой, однако наличие в нем тесной взаимосвязи между аппаратными средствами и программным обеспечением приводит к тому, что даже незначительная неисправность в аппаратуре или в программном обеспечении приводит к неработоспособности микроЭВМ.
Начать отладку микроЭВМ целесообразно с проверки омметром всех связей на монтажной плате и устранения выявленных дефектов монтажа. С особой тщательностью следует проверить наличие электрических связей между выводами питания микросхем и контактами источника питания. Щупами омметра касайтесь непосредственно выводов микросхем — это поможет вам обнаружить дефекты пайки. Затем проверяют наличие питающих напряжений на выводах микропроцессора и на других микросхемах модуля.
Следующий этап — проверка схемы формирования синхроимпульсов. Для этого вам потребуется осциллограф. Убедившись в наличии синхроимпульсов Ф1 и Ф2 на выводах микропроцессора, переходят к проверке функционирования блока центрального процессора при постоянно действующей на шине данных команде NOP (00Н). Код команды 00 принудительно подают на шину данных с помощью перемычек.
При этом на адресной шине должен происходить последовательный перебор всех адресов, который можно проконтролировать с помощью осциллографа. Сигналы на адресной шине в этом случае имеют форму симметричных прямоугольных импульсов, причем частота импульсов уменьшается вдвое при увеличении номера разряда на единицу. При правильной работе команды NOP переходят к проверке остальных блоков микроЭВМ. Для этого вывод 3 микросхемы DD2 соединяют с общим проводом и убеждаются в наличии высокого уровня на выводе 24 микропроцессора, что свидетельствует о нахождении его в состоянии ожидания. Нажав на кнопку «УСТ» проверяют на всех линиях шины адреса нулевого уровня, а на линиях шины данных двоичного кода 00Н 0001, записанного в нулевой ячейке МОНИТОРА (микросхема ПЗУ DD10).
Имитировать сигнал выборки индикатора можно, отключив провод от вывода 10 микросхемы DD12.3 и соединив его с общим проводом. На правом крайнем индикаторе появится код 31. Затем отключите провод от вывода 13 микросхем DD18 и DD19 — код 31 появится уже на среднем индикаторе. Припаяйте на место провод к выводу 13 и, отключив провод от вывода 14 микросхем DD18 и DD19, проследите за индикацией кода 31 на левом индикаторе. Затем припаяйте на место все отключенные от микросхем DD18 и DD19 провода, а микросхему DD10 выньте из панельки или отключите провод от ее 20-го вывода.
Отключив провод от вывода 8 микросхемы DD22, имитируют подачу сигнала выборки клавиатуры. Нажимая на различные клавиши, убеждаются в индикации на правом индикаторе кодов нажатых клавиш. Восстанавливают провод, подключенный к выводу 8 микросхемы DD22. Снимают перемычку, подключенную к выводу 3 микросхемы DD1. Вставляют в панельку микросхему ПЗУ DD10. Собирают на отдельной плате узел (рисунок 6.), с помощью которого проверяют поцикловое исполнение программы МОНИТОР микропроцессором. При однократном нажатии на кнопку «ШАГ» микропроцессор переходит в состояние ожидания, что позволяет на индикаторах дисплея контролировать считываемые из ПЗУ коды и их исполнение.
Для исключения влияния сигнала прерывания провод от вывода 14 микропроцессора (DD1) отключают.
Нажав кнопку «УСТ» и последовательно нажимая кнопку «ШАГ», контролируют выполнение первых команд МОНИТОРА. В частности, после девяти нажатий на правом индикаторе должны появиться две единички, при этом на адресной шине должен быть код адреса 9000Н, а на шине управления активен сигнал ЗПЗУ. При обнаружении несоответствий следует проверить, нет ли замыканий между линиями шины адреса, или шины данных, или другими сигнальными линиями.
После устранения обнаруженных неисправностей, добившись исполнения первых команд МОНИТОРА в шаговом режиме, отключают дополнительный узел. Подключают вывод 10 микросхемы DD12.3 к соответствующему проводу, отключив его от общего.
Переходят к проверке микроЭВМ в динамике. Нажав на кнопку «УСТ», убеждаются в появлении двух единичек на правом индикаторе. Затем нажимают клавишу «З» и проверяют прохождение теста индикации.
Нажав на клавишу «4», проверяют ОЗУ, затем проверяют работу директив с памятью, последовательно проверяя запись данных в ОЗУ с адреса С000Н (директива «1»), чтение данных из ОЗУ (директива «2»), запись данных в ОЗУ с любого адреса (директива «0») и чтение данных из ОЗУ с любого адреса (директива «5»). Если все эти директивы не выполняются, то набирают программу заполнения константой (она вводится с клавиатуры) адресного пространства, задаваемого также с клавиатуры.
Проверяют с помощью этой программы исполнение директивы пуска программы с любого адреса.
Восстановив провод, идущий к выводу 14 микропроцессора и нажав клавишу «В», проверяют индикацию времени, смену показаний на правом индикаторе каждую секунду. Проверяют директиву установки времени «С». Пуск часов производят по сигналам точного времени нажатием кнопки «УСТ». Затем переходят к проверке директив работы с кассетным магнитофоном.
Нажав на клавишу «9», а затем, набрав адреса D000H-DPFFH, наблюдают с помощью осциллографа непрерывную последовательность импульсов на выводе 9 микросхемы DD4.2. При этом тон фонограммы, которая записана на магнитофон, должен быть все время одним и тем же. Записанную на магнитофон информацию используют для проверки работы формирователя импульсов на микросхеме DA1.
Включив магнитофон на воспроизведение, проверяют с помощью осциллографа на выводе 6 микросхемы DA1 прямоугольную последовательность импульсов.
Затем проверяют запись и чтение программы занесения константы в задаваемое адресное пространство. Конечно, не всегда проверка микроЭВМ требует таких больших усилий. Как показывает опыт, если все детали исправны и при монтаже не было допущено ошибок, то микроЭВМ начинает работать сразу после сборки.
Для того чтобы вы могли убедиться в том, что собранный вами компьютер работает, мы предлагаем вам на выбор несколько простых, но увлекательных игровых программ
- Программа «Реакция» загружается директивой «1» с С000Н по C05DH. После пуска программы директивой «6» нажимают клавишу «0», затем испытуемый нажимает любую клавишу, при этом на всех индикаторах дисплея появляются «FF». Сразу после того, как цифры на индикаторе начинают бежать, испытуемый должен нажать на кнопку «УСТ». Индицируемый код на индикаторах и характеризует вашу реакцию. Чем он меньше, тем реакция быстрее.
C000 D7 FE 00 CA 27 C0 FE 01 CA 22 C0 FE 02 CA 21 C0 C010 FE 03 CA 31 C0 FE 04 CA 36 C0 FE 05 CA 3B C0 C3 C020 40 C0 06 0B C3 41 C0 06 0E C3 41 C0 06 07 C3 41 C030 C0 06 08 C3 41 C0 06 10 C3 41 C0 06 0D C3 41 C0 C040 06 0F 3E FF 21 FF FF EF DF 05 C2 47 C0 3E 00 21 C050 00 00 EF 23 00 00 C3 51 C0 00 C0 C3 10 C0 FF FF
- Программа «Гамма» загружается директивой ивой «1» с С000Н по С082Н. Пуск программы осуществляют директивой «7» с адреса С03ЕН. После ввода пускового адреса необходимо ввести длительность звучания нот и интервал пауз между нотами в виде двухразрядных шестнадцатеричных цифр в диапазоне от 01 — FFH. Прослушивают гамму, подключив вход магнитофона, включенного на запись к разъему интерфейса.
C000 00 00 00 D5 1E 01 21 C9 0C 7B D3 A1 CD 1D C0 2F C010 5F 00 7C B4 C2 09 C0 15 C2 06 C0 D1 C9 41 2B 05 C020 C2 1E C0 C9 21 CA 0C 2B 7D B4 C2 27 C0 C9 D5 21 C030 CA 0C 2B 7D B4 C2 32 C0 1D C2 2F C0 D1 C9 F7 0E C040 8B CD 03 C0 CD 2E C0 0E 7A CD 03 C0 CD 2E C0 0E C050 6C CD 03 C0 CD 2E C0 0E 65 CD 03 C0 CD 2E C0 0E C060 5A CD 03 C0 CD 2E C0 0E 4F 03 CD 03 C0 CD 2E C0 C070 0E 47 CD 03 C0 CD 2E C0 0E 44 CD 03 C0 CD 2E C0 C080 C3 3F C0 00 00 00 00 00 FF FF FF FF FF FF FF FF
- Программа «Крестики-нолики» загружается директивой «I» с С000Н по С065Н. Поле игры в виде 9 клеток пронумеровано так, как показано на схеме. После пуска программы директивой «б» на крайнем справа индикаторе появляется цифра «09»—это первый ход микроЭВМ, которая всегда ходит первая с центра. Место вашего нолика вы вводите с клавиатуры, указав номер клетки поля. Вы можете проиграть микроЭВМ, в этом случае на дисплее появляется код 73. В случае ничьей индицируется код «11».
C000 3E 09 32 00 90 D7 CD 1A C0 C3 47 C0 00 00 00 00 C010 7A CD 1A C0 7A CD 1A C0 C7 00 06 01 90 C2 22 C0 C020 3E 08 4F 32 00 90 D7 57 1E 04 79 93 CA 32 C0 F2 C030 35 C0 2E 08 85 6F 7A 95 CA 45 C0 00 00 26 73 7C C040 32 00 90 EF 76 79 C9 FE 01 CA 5E C0 FE 03 CA 5E C050 C0 FE 05 CA 5E C0 FE 07 CA 5E C0 C3 10 C0 79 CD C060 1A C0 90 C3 3D C0 FF FF FF FF FF FF FF FF FF FF
Нумерация клеток поля игры «Крестики-нолики».
01 02 03 08 09 04 07 06 05
- Игровая программа «Лабиринт» с C000H — C0FFH
C000 00 00 00 E7 C6 00 C2 0E C0 26 C2 C3 10 C0 26 C1 C010 2E FF 7D 32 F5 C0 32 F6 C0 32 00 90 11 00 00 EF C020 E7 3D CА 33 C0 FE 01 CА 42 C0 FE 02 CА 64 C0 C3 C030 52 C0 00 3А F6 C0 D6 10 32 F6 C0 DA 8E C0 C3 76 C040 C0 00 3А F6 C0 C6 10 32 F6 C0 DA 8E C0 00 C3 76 C050 C0 00 3A F6 C0 C6 01 32 F6 C0 CD C6 C0 DA 8E C0 C060 C3 76 C0 00 3A F6 C0 D6 01 32 F6 C0 CD C6 C0 DA C070 8E C0 C3 76 C0 00 6F 7E C6 00 C2 8E C0 00 3A F6 C080 C0 32 F5 C0 32 00 90 CD D5 C0 C3 9C C0 00 3A F5 C090 C0 32 F6 C0 32 00 90 F5 C3 A5 C0 00 3A F5 C0 C6 C0A0 00 CA B7 C0 F5 7B 3C 27 5F D2 AF C0 7A 3C 57 F1 C0B0 EB EF EB C3 20 C0 00 CD D5 C0 DF 00 DB A0 C6 00 C0C0 CA B7 C0 C3 03 C0 C9 C1 79 E6 10 CA D1 C0 37 78 C0D0 C9 37 3F 78 C9 D5 E5 1E 01 16 50 21 FF 00 7B D3 C0E0 A1 CD EF C0 2F 5F 2B 7C B5 C2 DE C0 E1 D1 C9 42 C0F0 05 C2 F0 C0 C9 D2 D2 21 C0 C2 3E FF EF E7 EF DF
- пример поля игры «Лабиринт» с C200H — C2FFH.
C200 00 00 01 01 01 01 01 01 01 01 01 01 01 01 01 01 C210 00 00 00 00 00 01 00 00 00 01 00 00 00 00 00 01 C220 01 00 00 00 01 00 00 01 00 00 00 01 00 00 00 01 C230 01 00 01 00 00 00 00 00 00 00 01 00 00 01 00 01 C240 01 00 00 00 00 01 00 00 00 00 01 00 00 00 00 01 C250 01 00 01 00 00 00 00 00 01 00 00 00 01 00 00 01 C260 01 00 00 00 00 01 00 00 00 00 00 00 00 00 00 01 C270 01 00 00 00 00 00 00 00 00 00 01 00 00 01 00 01 C280 01 00 01 00 00 01 00 01 00 01 00 00 01 00 00 01 C290 01 00 00 00 00 00 00 00 01 00 00 00 00 00 00 01 C2A0 01 00 00 01 00 00 00 01 00 00 00 01 00 01 00 01 C2B0 01 01 00 00 00 00 00 01 00 00 00 00 00 00 00 01 C2C0 01 00 00 00 00 00 00 00 00 01 00 00 00 01 00 01 C2D0 01 00 01 00 00 01 00 00 00 00 00 01 00 01 00 01 C2E0 01 00 00 01 00 00 00 01 00 00 00 00 00 00 00 00 C2F0 01 01 01 01 01 01 01 01 01 01 01 01 01 01 00 00
Отсканировано с журнала «ЮТ для умелых рук» № 2 1989 г.
Отредактировано Лесных Ю. И. 1999 г.