К1801ВМ1

К1801ВМ1 — однокристальный 16-разрядный микропроцессор (ОМП).
Предназначен для обработки цифровой информации в системах управления техпроцессами в контрольно-измерительной аппаратуре и системах связи, а также решения в составе ЭВМ инженерно-технических и экономических задач. Система команд К1801ВМ1 весьма близка к архитектуре PDP-11 и в большинстве случаев совместима с ней, но не является её точной копией.
Состав микросхемы
В состав микросхемы входят следующие основные функциональные блоки:
- 16-разрядный операционный блок, выполняющий операции формирования адресов команд и операндов, логические и арифметические, хранения операндов и результатов.
- Блок микропрограммного управления, вырабатывающий последовательность микрокоманд на основе кода принятой команды. В нём закодирован полный набор микрокоманд для всех типов команд.
- Блок прерываний, организующий приоритетную систему прерываний ОМП. Выполняет приём и предварительную обработку внешних и внутренних запросов на прерывание вычислительного процесса.
- Интерфейсный блок, выполняющий обмены информацией между ОМП и устройствами, расположенными на системной магистрали. Осуществляет арбитраж при операциях прямого доступа к памяти. В интерфейсном блоке формируется последовательность управляющих сигналов системной магистрали.
- Блок системной магистрали, связывающей внутреннюю магистраль ОМП с внешней. В нём производится управление усилителями приёма и выдачи информации на совмещённые выводы адресов и данных.
- Схема тактирования, обеспечивающая синхронизацию внутренних блоков.
См. Раздел: Структурная схема
Основные параметры
| Разрядность | 16 двоичных разрядов |
|---|---|
| Представление чисел | дополнительный код с фиксированной запятой |
| Система команд | безадресная, одноадресная, двухадресная |
| Виды адресации | регистровая, косвенно—регистровая, автоникрементная, косвенно-автоникрементная, косвенно-автодекрементная, индексная, косвенно-индексная |
| Число регистров общего назначения | 8 |
| Число линий запросов на прерывания | 4 |
| Системная магистраль | МПИ с совмещёнными шинами для передачи адреса и данных |
| Адресное пространство | 64К байт |
| Тактовая частота | до 5 МГц[1] |
| Максимальное быстродействие выполнения команд сложения в составе ЭВМ при регистровом методе адресации | до 500 тыс. операций/с |
| Потребляемая мощность | до 1,2 Вт |
Назначение выводов[2]
| Вывод | Обозначение | Тип вывода | Функциональное назначение выводов |
|---|---|---|---|
| 1 | CLC | Вход | Синхронизация |
| 2 | SACK | Вход/выход | Подтверждение захвата ПДП |
| 3 | DMGI | Вход | Вход предоставления ПДП |
| 4 | DMGO | Выход | Выход предоставления ПДП |
| 5 | DMR | Вход | Требование ПДП |
| 6 | SP | Вход | Недокументированная функция — внешний источник частоты для таймера[3]. Соединить с +5V |
| 7 | SEL1 | Выход | Выборка первого регистра ввода-вывода |
| 8 | SEL2 | Выход | Выборка второго регистра ввода-вывода |
| 9-20, 22-25 | AD0-AD15 | Вход/Выход | Разряды адреса данных |
| 21 | GND | - | Общий |
| 26 | PA1 | Вход | Номер процессора |
| 27 | PA0 | Вход | Номер процессора |
| 28 | BSY | Выход | Сигнал занятости канала |
| 29 | DCLO | Вход | Авария источника питания |
| 30 | ACLO | Вход | Авария сетевого питания |
| 31 | IRQ1 | Вход | Первый запрос радиального прерывания «Пульт» |
| 32 | IRQ2 | Вход | Второй запрос радиального прерывания (вектор 100) |
| 33 | IRQ3 | Вход | Третий запрос радиального прерывания (вектор 270) |
| 34 | INIT | Вход/Выход | Установка исходного состояния |
| 35 | VIRQ | Вход | Требование векторного прерывания |
| 36 | IAKO | Выход | Предоставление прерывания |
| 37 | DOUT | Выход | Вывод данных (запись данных) |
| 38 | DIN | Выход | Ввод данных (чтение данных) |
| 39 | RPLY | Вход/Выход | Синхронизация пассивного устройства (ответ) |
| 40 | WTBT | Выход | Вывод байта (запись/байт) |
| 41 | SYNC | Выход | Синхронизация активного устройства (обмен) |
| 42 | Ucc | - | Напряжение Питания |
Подробное описание выводов
Структурная схема
1 34 30 29 35 31 32 33
| | | | | | | |
CLC| | ACLO| DCLO| VIRQ| IRQ1| IRQ2| IRQ3|
| INIT| | | | | | |
\|/ | \|/ \|/ \|/ \|/ \|/ \|/
| \|/ | | | | | |
|___|___| /|\ |_|_____|_____|_____|_____|_____|_|
|схема | | | Блок |
|такти- | | | Прерываний |
|рования| | |_______________|_________________|
|___|___| | |
| | /|\
/|\ | |
| | |
|___________________________________|____________________________________
| | | |
| \|/ \|/ | \|/
| | | | |
|________|_______|________| |________|________| | |______|_____|
| Блок микропрограммного | | Операционный | | | | IAKO
| управления | | Блок | | | -->>>--36
|___________|_____________| |________|________| | | |
| | | | | SP
\|/ \|/ | | --<<<--27
/|\ /|\ | | |
| | | | | SP
|____________|____________| | | -->>>--26
| | | |
\|/ | | | RPLY
| | | --<<<--39
|_____________|_____________| | | |
| | | | | SYNC
| Системная ----<<<---| | -->>>--41
| магистраль | | |
| ----<<<--------- | DOUT
|_|_______|_______|_______|_| | бЛОК -->>>--37
| | | | | управления |
\|/ \|/ \|/ \|/ | системной | DIN
/|\ /|\ /|\ /|\ | магистралью-->>>--38
| | | | | и |
AD0| AD11| AD12| AD15| | регистрами | WTBT
|-------| |-------| | ввода\ -->>>--40
| | | | | вывода |
| | DMR
| --<<<--5
| |
| | SACK
| --<<<--2
| |
| | DMGO
| -->>>--4
| |
| | SP
| --<<<--3
| |
| | SEL1
| -->>>--7
| |
| | SEL2
| -->>>--8
| |
| | BSY
| -->>>--28
|____________|
Команды
Код команды указан восьмеричным числом. Именно такой вид удобен для наглядного восприятия команд данного процессора.
| Обозначение команды | Код команды | Команда |
|---|---|---|
| HALT | 000000 | Остановка |
| WAIT | 000001 | Ожидание |
| RTI | 000002 | Возврат из прерывания |
| BPT | 000003 | Командное прерывание для отладки |
| IOT | 000004 | Командное прерывание для ввода-вывода |
| RESET | 000005 | Сброс внешних устройств |
| RTT | 000006 | Возврат из прерывания |
| JMP | 0001DD | Безусловный переход по абсолютному адресу, закодированному в DD. Например последовательность
000137 JMP @#7000 007000 указывает процессору взять адрес из ячейки, следующей за командой перехода, и перейти по указанному адресу (в данном случае это восьмеричный адрес 7000). |
| RTS | 00020R | Возврат из подпрограммы |
| JSR | 004RDD | Обращение к подпрограмме |
| EMT | 104000-104377 | Командное прерывание для системных программ. Например, EMT 16 имеет код 104016. Для всех EMT-команд прерывание имеет один и тот же вектор, по адресу которого должна находиться подпрограмма, выделяющая номер (в нашем примере это 16) из команды и находящая по зашитой в ПЗУ таблице адрес подпрограммы, обслуживающей конкретную EMT-команду. |
| TRAP | 104400-104777 | Командное прерывание. Например, TRAP 4 имеет код 104404. Для всех TRAP-команд прерывание имеет один и тот же вектор, по адресу которого должна находиться подпрограмма, выделяющая номер (в нашем примере это 4) из команды и находящая по зашитой в ПЗУ таблице адрес подпрограммы, обслуживающей конкретную TRAP-команду.
Никакой принципиальной разницы между EMT и TRAP нет. Принято команду ЕМТ использовать в системных программах (для компьютера БК — это монитор и система диагностики), а команду TRAP — в программах пользователя. |
| NOP | 000240 | (10100000) Нет операции |
| CLC | 000241 | (10100001) Очистка флага С (carry = перенос) |
| CLV | 000242 | (10100010) Очистка флага V (oVerflow = переполнение) |
| CLZ | 000244 | (10100100) Очистка флага Z (zero = ноль) |
| CLN | 000250 | (10101000) Очистка флага N (negative = отрицательное значение) |
| CCC | 000257 | (10101111) Очистка всех разрядов |
| SEC | 000261 | (10110001) Установка флага C (carry = перенос) |
| SEV | 000262 | (10110010) Установка флага V (oVerflow = переполнение) |
| SEZ | 000264 | (10110100) Установка флага Z (zero = ноль) |
| SEN | 000270 | (10111000) Установка флага N (negative = отрицательное значение) |
| SCC | 000277 | (10111111) Установка всех разрядов |
Фактически вышеприведённые команды с кодами от 240 до 277 представляют собой единственную команду изменения флагов в слове состояния процессора, в двоичном виде записываемую как 101PNZVC, где 101xxxxx — код команды, P — состояние, в которое должны быть переведены флаги (0 или 1), и N,Z,V,C — маска, указывающая, какие из флагов должны быть затронуты операцией (1) или проигнорированы (0). Так, команда с кодом 263 (10110011) установит в 1 одновременно флаги C и V. Таким образом, команда с мнемоникой NOP и кодом 240 является частным случаем данной команды и содержит маску флагов, согласно которой ни один из них не должен измениться. Соответственно, к такому же эффекту приводит и команда с кодом 260 (10110000) | ||
| SWAB | 0003DD | Перестановка местами старшего и младшего байтов в 16-разрядном слове, на которое указывает значение DD. |
| BR | 000400 | Безусловный переход по смещению относительно ячейки, следующей за командой. Например, код 000400 означает переход на ячейку, следующую за командой BR, код 000401 — перепрыгнуть через одну 16-разрядную ячейку, 000402 — через две и т. д. Строго говоря, эту команду и все команды перехода по смещению, лучше рассматривать в двоичном или шестнадцатиричном виде. Тогда она будет иметь вид 1NNNNNNNN(bin) или 1NN(hex), где N — значение смещения. То есть команда записывается в старшем байте слова, а смещение — в младшем. Отрицательные значения смещения записываются в дополнительном коде. Это значит, что смещение −1 будет закодировано как FF (hex), и команда будет иметь вид 1FF (hex) или, что то же самое, 777 (oct). При коде 777 будет произведён переход на одну 16-разрядную ячейку назад, то есть на саму команду BR, и произойдёт зацикливание. При коде 776 — на 2 ячейки назад, 775 — на три. и т. д. |
| BNE | 001000 | Переход по смещению, если не равно. Код команды — 2NN (hex) — см. описание команды BR. Переход срабатывает, если флаг Z процессора равен 0.
Адрес Команда Текст программы на ассемблере 1000: 020104 CMP R1,R4 1002: 001001 BNE MET 1004: 010102 MOV R1,R2 1006: 010103 MET: MOV R1,R3 Здесь команда сравнения CMP производит сравнение содержимого регистров общего назначения R1 и R4 и устанавливает флаги процессора C, V, Z, N согласно результатам сравнения, а команда BNE осуществляет переход на +1 шестнадцатиразрядное слово вперёд, если флаг Z=0. |
| CLR(B) | *050DD | Очистка битов слова, на которое указывает DD. Команда 0050DD имеет мнемонику CLR, а 1050DD мнемонику CLRB. |
| COM(B) | *051DD | Инвертирование битов слова, на которое указывает DD. |
| INC(B) | *052DD | Прибавление 1 в слове, на которое указывает DD. |
| DEC(B) | *053DD | Вычитание 1 из слова, на которое указывает DD. |
| NEG(B) | *054DD | Изменение знака |
| ADC(B) | *055DD | Прибавление переноса |
| SBC(B) | *056DD | Вычитание переноса |
| TST(B) | *057DD | Проверка слова и установка флагов процессора C, V, Z, N по результатам такой проверки. |
| ROR(B) | *060DD | Циклический сдвиг вправо |
| ROL(B) | *061DD | Циклический сдвиг влево |
| ASR(B) | *062DD | Арифметический сдвиг вправо |
| ASL(B) | *063DD | Арифметический сдвиг влево |
| MARK | 0064NN | Восстановление указателя стека (УС) |
| SXT | 0067DD | Расширение знака |
| MTPS | 1064DD | Запись слова состояния процессора (ССП) |
| MFPS | 1067DD | Чтение ССП |
| MOV(B) | *1SSDD | Пересылка |
| CMP(B) | *2SSDD | Сравнение |
| BIT(B) | *3SSDD | Проверка разрядов |
| BIC(B) | *4SSDD | Очистка разрядов |
| BIS | *5SSDD | Логическое сложение |
| XOR | 074RDD | Исключающее ИЛИ |
| ADD | 06SSDD | Сложение |
| SUB | 16SSDD | Вычитание |
| BR | 0004XXX | Ветвление безусловное |
| BNE | 0010XXX | Ветвление, если не равно 0 |
| BEQ | 0014XXX | Ветвление, если равно 0 |
- — Старший разряд кода этих команд является признаком байтовой команды. Если он равен 0, то команда производит операции с 16-разрядными словами, находящимися по чётным адресам. Если же этот разряд установлен в 1, то команда работает с байтами, расположенными по произвольному адресу, при этом младший байт 16-разрядного слова имеет чётный адрес, а старший — нечётный.
Методы адресации
Операнд задаётся значениями SS (source — источник) и DD (destination — приёмник), при этом первая цифра задаёт режим адресации, а вторая — номер регистра общего назначения процессора. Например, если SS = 27, то 2 — это метод адресации, а 7 — номер регистра.
Процессор имеет 8 шестнадцатиразрядных регистров: R0, R1, R2…R7. При этом R0-R5 используются для хранения операндов команд. Регистры R6 и R7 имеют дополнительное специальное назначение, но все операции с ними происходят так же, как и с любым другим регистром
Регистр R6 выполняет роль указателя стека (SP, Stack Pointer) и содержит адрес вершины стека. Запись в стек обычно производится с применением автодекрементного способа адресации, а чтение — автоинкрементного. При выполнении ряда операций (обработке аппаратных и программных прерываний, а также вызове подпрограмм и возврате из них) процессор изменяет значение этого регистра определённым образом.
Регистр R7 является счётчиком команд (PC, Program Counter) и содержит адрес следующей команды, которую должен выполнить процессор. Запись числа в R7 равносильна переходу по указанному адресу.
Методы адресации:
| Цифра | Метод | Пояснение | Примеры |
|---|---|---|---|
| 0 | Регистровый | Операндом является содержимое регистра. Например, команда 10304 (1SSDD) копирует содержимое регистра R3 в регистр R4 и записывается как MOV R3, R4. | 10102 MOV R1, R2 |
| 1 | Косвенно-регистровый | Регистр содержит адрес операнда | 005011 CLR (R1)
005011 CLR @R1 |
| 2 | Автоинкрементный | регистр содержит адрес операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 (для команд над словами) или на 1 (для байтовых команд) | 005022 CLR (R2)+ |
| 3 | Косвенно-автоинкрементный | регистр содержит адрес адреса операнда. Содержимое регистра после его использования в качестве адреса увеличивается на 2 | 005032 CLR @(R2)+ |
| 4 | Автодекрементный | содержимое регистра уменьшается на 2 (для команд над словами) или на 1 (для байтовых команд) и используется как адрес операнда | 005042 CLR -(R2) |
| 5 | Косвенно-автодекрементный | содержимое регистра уменьшается на 2 и используется как адрес адреса операнда. | 005052 CLR @-(R2) |
| 6 | Индексный | содержимое регистра складывается с числом, записанным после команды, и полученная сумма используется в качестве адреса операнда | 005062 CLR 2(R2) 000002 |
| 7 | Косвенно-индексный | содержимое регистра складывается с числом, записанным после команды и полученная сумма используется в качестве адреса адреса операнда | 005072 CLR @22(R2) 000022 |
При адресации через регистр РС данные способы адресации называются специальным образом:
| Способ адресации | Код | Пояснение | Примеры |
|---|---|---|---|
| непосредственный | 27 | Операнд хранится в слове, следующем за командой. Фактически это автоинкрементный способ адресации с использованием регистра PC, то есть PC содержит адрес операнда, а это всегда адрес ячейки, следующей за командой. После происходит инкремент регистра на 2, что в случае использования PC равносильно «перепрыгиванию» на следующий адрес, через ячейку с данными, и число, хранящееся в ней, не исполняется как команда. | 012703 MOV #21, R3 000021 012700 MOV #IN,R0 xxxxxx IN: |
| абсолютный | 37 | адрес операнда хранится в слове, следующем за командой | CLR @#7000 JMP @#BEN |
| относительный | 67 | содержимое РС складывается со словом, записанным в памяти за командой, и полученная сумма используется как адрес операнда. | JMP TV CLR 5554 |
| косвенно-относительный | 77 | содержимое РС складывается со словом, следующим за командой, полученная сумма используется как адрес адреса операнда. | CLR @MET INC @15342 |
См. также
Примечания
- ↑ Дшхунян В.Л., Борщенко Ю.И., Науменко В.Р., Рыжов А.А., Романец В.Ю., Бурмистров И.А., Соловьев К.М. Однокристальные микропроцессоры комплектов БИС серии К1801 // "Микропроцессорные средства и системы" : журнал. — 1984. — № 4. — С. 12.
- ↑ Архивная копия от 16 апреля 2014 на Wayback Machine proj: bk:1801vm-series [vak.ru]
- ↑ Speccy — наш выбор! — Показать сообщение отдельно — Цифровая археология: 1801 и все-все-все. Дата обращения: 22 августа 2015. Архивировано 4 октября 2015 года.
Ссылки
- О том, как найти ошибку в микропроцессоре, выпущенном тридцать пять лет назад
- Результат аппаратного реверс-инжиниринга К1801ВМ1 на Github