К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.
- ↑ [https://web.archive.org/web/20140416182158/http://vak.ru/doku.php/proj/bk/1801vm-series Архивная копия от 16 апреля 2014 на Wayback Machine proj: bk:1801vm-series [vak.ru]]
- ↑ Speccy — наш выбор! — Показать сообщение отдельно — Цифровая археология: 1801 и все-все-все . Дата обращения: 22 августа 2015. Архивировано 4 октября 2015 года.
Ссылки[править | править код]
- О том, как найти ошибку в микропроцессоре, выпущенном тридцать пять лет назад
- Результат аппаратного реверс-инжиниринга К1801ВМ1 на Github
В статье не хватает ссылок на источники (см. рекомендации по поиску). |