К1801ВМ1 — однокристальный 16-разрядный микропроцессор (ОМП).

Предназначен для обработки цифровой информации в системах управления техпроцессами в контрольно-измерительной аппаратуре и системах связи, а также решения в составе ЭВМ инженерно-технических и экономических задач. Система команд К1801ВМ1 весьма близка к архитектуре PDP-11 и в большинстве случаев совместима с ней, но не является её точной копией.

Состав микросхемы

В состав микросхемы входят следующие основные функциональные блоки: 16-разрядный операционный блок, выполняющий операции формирования адресов команд и операндов, логические и арифметические, хранения операндов и результатов. Блок микропрограммного управления, вырабатывающий последовательность микрокоманд на основе кода принятой команды. В нём закодирован полный набор микрокоманд для всех типов команд. Блок прерываний, организующий приоритетную систему прерываний ОМП. Выполняет приём и предварительную обработку внешних и внутренних запросов на прерывание вычислительного процесса. Интерфейсный блок, выполняющий обмены информацией между ОМП и устройствами, расположенными на системной магистрали. Осуществляет арбитраж при операциях прямого доступа к памяти. В интерфейсном блоке формируется последовательность управляющих сигналов системной магистрали. Блок системной магистрали, связывающей внутреннюю магистраль ОМП с внешней. В нём производится управление усилителями приёма и выдачи информации на совмещённые выводы адресов и данных. Схема тактирования, обеспечивающая синхронизацию внутренних блоков. См. Раздел: Структурная схема

Основные параметры Разрядность 16 двоичных разрядов Представление чисел дополнительный код с фиксированной запятой Система команд безадресная, одноадресная, двухадресная Виды адресации регистровая, косвенно—регистровая, автоинкрементная, косвенно-автоинкрементная, косвенно-автодекрементная, индексная, косвенно-индексная Число регистров общего назначения 8 Число линий запросов на прерывания 4 Системная магистраль МПИ с совмещёнными шинами для передачи адреса и данных Адресное пространство 64К байт Тактовая частота до 5 МГц Максимальное быстродействие выполнения команд сложения в составе ЭВМ при регистровом методе адресации до 500 тыс. операций/с Потребляемая мощность до 1,2 Вт

Назначение выводов proj: bk:1801vm-series [vak.ru] Вывод Обозначение Тип вывода Функциональное назначение выводов 1 CLC Вход Синхронизация 2 SACK Вход/выход Подтверждение захвата ПДП 3 DMGI Вход Вход предоставления ПДП 4 DMGO Выход Выход предоставления ПДП 5 DMR Вход Требование ПДП 6 SP Вход Недокументированная функция — внешний источник частоты для таймера. Соединить с +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 имеют дополнительное специальное назначение, но все операции с ними происходят так же, как и с любым другим регистром