БK 0010-01, БК 11М, БК11М+,МС 0511 (УКНЦ)х3, Atari 65XE, Commodore 64, AMIGA 500 (HDD), ZX EVO
@Alex_K, @Vslav, интересную особенность заметил в микрокоде ВМ2, но пока подробно в этом не разбирался.
В режимах HALT и USER по разному анализируется ситуации при выборке следующей команды, когда адресация регистра-источника модифицирует R7, и когда регистр приемник использует R7. Хотя, казалось бы, какая разница, какой режим, HALT или USER.
Это при выборке следующей команды или предвыборке следующей команды? Какие типы адресаций - 67 и 77? Если используется 67 или 77, то по идее процессор может использовать предвыбранную команду в качестве индексного значения для адресации. Да, и в режиме HALT с запрещёнными прерываниями CPC и CPSW не обновляются.
А, вот, наверное, с этим и связано.
- - - Добавлено - - -
Пока еще не разбирался.
Но там два условия, обозначенных признаками RI0 и RI2:
RI0 - dd использует R7 (любая адресация, с использованием R7)
RI2 - ss модифицирует R7 (любая адресация по (R7), либо индексная адресация)
T.e. ss = (R7), (R7)+, -(R7), @(R7)+, @-(R7), X(Rn), @X(Rn)
Коротко об интересном.
В процессоре ВМ2 дофигищи 16-битных регистров. Гораздо больше, чем доступно посредством инструкций PDP-11.
Если бы микрокод был другим, то, я думаю, процессор мог быть гораздо интереснее и богаче по возможностям.
Интересно, что на шину X АЛУ может выставляться один из 16 регистров,
А на шину Y АЛУ может выставляться один из 32 регистров/констатнт/частей слова инструкции:
В списке нет, например, PC2, который может читаться только на шину X АЛУ.Код:0 - R0 1 - R1 2 - R2 3 - R3 4 - R4 5 - R5 6 - R6 7 - PC1 8 - EA1 9 - EA2 10 - нет регистра 11 - RS 12 - PSW 13 - ACC 14 - RA 15 - BRD 16 - IR & 0x000F 17 - IR & 0x003F 18 - 0x0001 (если ALT_CNST=0 (байтовый инкремент))), 0x0002 (если ALT_CNST=1 (словный инкремент)) (константа автоинкремента при формировании исполнительного адреса) 19 - 0x0002 20 - 0x0000 21 - 0x0004 22 - CPSW 23 - BIR 24 - IR & 0x00FF с расширением знака до 16 бит 25 - 0x0000 (если PSW3=0), 0xFFFF (если PSW3=1) (флаг N) 26 - PSW0 & 0x0001 (флга C) 27 - 0x0000 28 - выбор константы вектора прерывания 29 - 0x0014 30 - PC 31 - PC
- - - Добавлено - - -Код:0 - R0 1 - R1 2 - R2 3 - R3 4 - R4 5 - R5 6 - R6 7 - PC1 (если RA_FR1 = 0) или PC2 (если RA_FR1 = 1) 8 - EA1 9 - EA2 10 - нет регистра 11 - RS 12 - PSW 13 - ACC 14 - нет регистра 15 - BRD
Кроме того, есть запись результата обратно в регистр, который выставлялся на X или на Y:
Обратная запись для X:
Код:0 - R0 1 - R1 2 - R2 3 - R3 4 - R4 5 - R5 6 - R6 7 - PC2 8 - EA1 9 - EA2 10 - EA_CTLD (счетчик для расширенной арифметики) 11 - RS 12 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW. 13 - ACC 14 - нет регистра 15 - BRD (если QD_SWAP=1, то QSWP=1) (обмен байт при обращении по нечетному адресу)
Обратная запись для Y:
Код:0 - R0 1 - R1 2 - R2 3 - R3 4 - R4 5 - R5 6 - R6 7 - PC2 8 - EA1 9 - EA2 10 - EA_CTLD (счетчик для расширенной арифметики) 11 - RS 12 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW. 13 - ACC 14 - нет регистра 15 - BRD (если QD_SWAP=1, то QSWP=1) (обмен байт при обращении по нечетному адресу) 16 - R0 17 - R1 18 - R2 19 - R3 20 - R4 21 - R5 22 - CPSW 23 - R7 24 - EA1 25 - EA2 26 - EA_CTLD (счетчик для расширенной арифметики) 27 - RS 28 - PSW (если /NA0=1, то запись и в PSW4), (если операция со словом (BYTE=0), то запись в PSW4 и PSW8). Работа с константой (PL8=1) блокирует WR_PSW. 29 - ACC 30 - PC 31 - PC
Краткое описание ядра и основного цикла процессора 1801ВМ2.
Описание составлено исключительно по оригинальной потранзисторной схеме @Vslav'a, за которую ему огромная благодарность.
Все сигналы имеют те же наименования, что и на транзисторной схеме Vslav'a. За исключением сигналов NA0..NA5 (адрес следующей микрокоманды), и сигналов PL0..PL36 (выход ПЛМ микрокоманд), которые при описании микрокоманды и адреса микрокоманды приведены в инверсном виде, что более точно отражает суть информации, заложенной в них. Кроме того, добавлено некоторое количество сигналов, не именованых на схеме Vslav'а.
В данном описании будет рассмотрено ядро процессора на примере простейшего цикла выборки команды типа регистр-регистр. Прерывания, таймауты шины и прочие тонкости пока что не рассматриваются.
Основным времязадающим и управляющим узлом процессора является микропрограммный автомат, который непосредственно управляет АЛУ и блоком ввода-вывода. Управление АЛУ синхронное, т.е. можно сказать, что АЛУ является частью микропрограммного автомата. Управление блоком ввода-вывода асинхронное.
Каждая инструкция процессора выполняется как минимум за две микрокоманды. Первой из которых всегда является команда выборки и преддекодирования инструкции. Цикл микрокоманды равен 4-м тактам входной частоты процессора CLCI. В дальнейшем тактом будет называться один цикл CLCI, а полутактом - половина цикла CLCI. Цикл АЛУ в большинстве случаев также выполняется за 4 такта синхронно с микророграммным автоматом. АЛУ используется как для выполнения математическо-логических операций, так и для вычисления исполнительного адреса. Цикл чтения шины AD блока вввода-вывода, при отсутствии задержек доступа к внешнему устройству, выполняется за 8 тактов. Исключение составляет недокументированный режим чтения шины с опережающим RPLY, который выполняется за 6 тактов, и рассматриваться здесь не будет.
Для выполнения простейшей инструкции процессора требуется две микрокоманды (8 тактов), и один один цикл ввода (8 тактов). Блок ввода-вывода работает в параллель с микропрограммным автоматом, поэтому общее время выполнения простейшей инструкции также составляет 8 тактов.
Микропрограммный автомат может приостанавливаться в некоторых случаях. Чаще всего это происходит, когда буферный регистр инструкции (BIR) еще не содержит действительных данных. Выполнение микропрограммы приостанавливается, пока блок ввода-вывода не прочитает с шины слово инструкции и не обновит BIR.
Микропрограмма находится в ПЛМ микрокоманд, и состоит из 198-ми записей, которые, в свою очередь, условно обьединены примерно в 64 микрокоманды. Та или иная запись выбирается в зависимости от условий, передаваемых в ПЛМ в виде адреса инструкции (16 бит), получаемого с преддекодера адреса микрокоманды (6 бит) и двух трехбитных модификаторов RI0,RI1,RI2 и IX0,IX1,IX2. Преддекодер для упрощения пока что не рассматриваем.
В зависимости от входных данных, выбирается одна или несколько записей ПЛМ, которые обьединяются по логическому ИЛИ (OR), и поступают на выход матрицы в виде сигналов PL0..PL36. В сигналах PL закодированы следующие данные:
1. Номер регистра для шины X АЛУ.
2. Номер регистра или константы для шины Y АЛУ.
3. Математическо-логическая функция для АЛУ.
4. Функция сдвига для АЛУ.
5. Тип операции ввода-вывода.
6. Группа модификаторов, влияющих на выполнение команды.
Трехбитный модификатор выборки микрокоманды RI имеет многофункциональное назначение. В микрокоманде выборки слова инструкции значение следующее:
RI0 - поле dd инструкции использует R7 (любая адресация, с использованием R7)
RI1 - HALT-режим (PSW[8]=1)
RI2 - поле ss модифицирует R7 (адресация (R7), (R7)+, -(R7), @(R7)+, @-(R7), X(Rn), @X(Rn))
Другие значения поля RI будут рассмотрены в отдельной главе.
Трехбитный модификатор выборки микрокоманды IX может меняться для каждого шага микрокоманды и означает:
IX0 - идентификатор словной двухоперандной инструкции записи
IX1 - двухоперандная инструкция использующя R7, выполнено условие условного перехода, или RCMD (требует уточнения)
IX2 - некоторые двухоперандные инструкции
Кроме того, блок преддекодера выдает следующие сигналы, влияющие на исполнение микрокоманд:
DC_RTT - инструкция RTT
DC_FB - инструкция работает с байтом, а не словом
DC_MOP0 и DC_MOP1 - кодирует тип цикла инструкции:
Часть сигналов PL, получаемых с выхода ПЛМ микрокоманд используется для выбора режима работы микрокоманды. Большинство же запоминаются в регистре слова микрокоманды (REG_MCMD_WORD), и доступны в виде PLM0..PLM36. Часть сигналов инвертируется.Код:DC_MOP1 DC_MOP0 Операция ввода-вывода Цикл памяти 0 0 IO_RD, IO_IN, IO_WR RMW 0 1 IO_WR W 1 0 IO_RD, IO_IN R 1 1 NOWRA -
Диаграммы работы микропрограммного автомата, АЛУ и блока ввода-вывода на примере выполнения простейшей инструкции типа регистр-регистр.
Слева пример с нулевой задержкой памяти, справа пример с задержкой памяти на 2 такта:
Для каждой инструкции выполняется микрокоманда с адресом 0x01 (выборка инструкции), и микрокоманда исполнения самой инструкции.
Для наглядности приведен только один цикл АЛУ, и один цикл блока ввода-вывода.
Код:Полутакт: 7 - Готовы сигналы PL с ПЛМ микрокоманд. Модификатор микрокоманды SET_CEND, означающий выборку следующей инструкции. Адрес микрокоманды 0x01. 8 - Начало микрокоманды. Регистр BIR (буферный регистр инструкции) содержит действительны данные, поэтому безо всякой задержки запускается конвейер преддекодера инструкции. 9 - Данные с преддекодера инструкций выставляются на шину PLD. 10 - Данные с преддекодера инструкций стабильны и могут быть защелкнуты в регистре инструкций. Они содержат слово инструкции, адрес первой микрокоманды инструкции, модификаторы IX, RI. В соответствии с микрокомандой на шину X АЛУ выдается PC2 (опережающий счетчик команд), а на шину Y АЛУ выдается константа 0x0002. 11 - В соответствии с микрокомандой формируется операция ввода-вывода IO_RD (чтение шины AD), IO_IN (данные предназначены для BIR), IO_RCD (сохранять данные также в BRD (буферный региср данных) 12 - RA (регистр адреса) = PC2. Запросить цикл шины IO_RD. Блок ввода-вывода свободен, поэтому сразу начинается операция ввода. На шину адреса выставляется регистр адреса RA, в котором содержится значение опережающего счетчика команд PC2. 13 - PC=PC1=PC2 (действие операции IO_RCD). 16 - PC2=PC2+2 (результат работы АЛУ). Выставляется сигнал SYNC (адрес выставлен на шине). Сразу получаем в ответ сигнал AR (подтверждение получени адреса). В этом же полутакте начинается исполнение следующей микрокоманды, собственно и выполняющей инструкцию. 18 - Выставляется сигнал DIN (ввод информации с шины). 20 - Получено подтверждение RPLY. 22 - Данные на шине AD стабильны, и начинают записываться в регистры BIR и BRD. 24 - Начало следующей микрокоманды, извлекающей инструкцию из регистра BIR. 26 - Снимается сигнал DIN. Шина AD может быть освобождена. 28 - В ответ внешнее устройство снимает SYNC, AR и RPLY. Возможна новая операция ввода-вывода.
Последний раз редактировалось Titus; 18.11.2020 в 21:52.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)