WD16

Микропроцессор производства Western Digital
Вестерн Диджитал WD16
Микропроцессор WD16 в пяти 40-контактных корпусах, установленных на плате процессора Alpha Microsystems AM-100, которая подключается к шине S-100 .
Общая информация
Запущен1976 ; 49 лет назад ( 1976 )
Обычный производитель
Производительность
Макс. тактовая частота ЦП до 3,3 МГц
Ширина данных16
Ширина адреса16
Архитектура и классификация
Набор инструкцийPDP-11 нравится
Количество инструкций119
Физические характеристики
Упаковка
История
Преемникникто

WD16 — 16-разрядный микропроцессор , представленный Western Digital в октябре 1976 года. Он основан на чипсете MCP-1600 , универсальном дизайне, который также использовался для реализации низкоуровневого мини-компьютера DEC LSI-11 и процессора Pascal MicroEngine . Три системы различались в основном своим микрокодом , что давало каждой системе уникальную архитектуру набора инструкций (ISA).

WD16 реализует расширение архитектуры набора инструкций PDP-11 , но несовместим с машинным кодом PDP-11. [1] Набор инструкций и микрокодирование были созданы Диком Уилкоксом и Ричем Нотари. [2] WD16 является примером ортогональной архитектуры CISC . Большинство двухоперандных инструкций могут работать с памятью в памяти с любым режимом адресации, а некоторые инструкции могут приводить к десяти обращениям к памяти.

WD16 реализован в пяти 40-контактных DIP- корпусах. Максимальная тактовая частота составляет 3,3 МГц. Его интерфейс с памятью осуществляется через 16-битную мультиплексную шину данных/адреса. [3]

WD16 наиболее известен по использованию в процессорных платах Alpha Microsystems AM-100 и AM-100/T. [4] Прототип был продемонстрирован в 1977 году. [5] По состоянию на 1981 год насчитывалось не менее 5000 компьютеров Alpha Micro на базе WD16. [6] Еще в 1982 году компьютеры Alpha Micro на базе WD16 все еще характеризовались как «супермикро». [7] В июне 1982 года WD16 был заменен на Motorola 68000. [8]

Память

Форматы данных

Наименьшая единица адресуемой и записываемой памяти — 8-битный байт . Байты также могут храниться в нижней половине регистров R0 — R5. [9]

16-битные слова хранятся в порядке от младшего к младшему с младшими байтами по нижнему адресу. Слова всегда выравниваются по четным адресам памяти. Слова могут храниться в регистрах R0 — R7.

32-битные двойные слова могут храниться только в парах регистров, при этом младшее слово хранится в регистре с меньшим номером. 32-битные значения используются в инструкциях MUL, DIV и некоторых инструкциях поворота и арифметического сдвига.

Значения с плавающей точкой имеют длину 48 бит и могут храниться только в памяти. Этот формат находится на полпути между форматами с плавающей точкой одинарной и двойной точности. Они хранятся в необычном формате middle-endian, который иногда называют «PDP-endian». Значения с плавающей точкой всегда выравниваются по четным адресам. Первое слово содержит знак, показатель степени и старший байт мантиссы. Следующий по величине адрес содержит средние два байта мантиссы, а следующий по величине адрес содержит младшие два байта мантиссы. Полный формат выглядит следующим образом:

1. Знак 1 бит для всего числа, который равен нулю для положительного числа.

2. 8-битная экспонента с основанием 2 в записи с превышением 128 и диапазоном от +127 до -128. Единственное допустимое число с экспонентой -128 — это истинный ноль (все нули).

3. 40-битная мантисса с подразумеваемым старшим битом.

1514760
Адрес+0СЭкспонентаМантисса (высокая)
15870
Адрес+2Мантисса(середина)
15870
Адрес+4Мантисса(низкий)

Управление памятью

16-битные адреса WD16 могут напрямую обращаться к 64  КБ памяти. WD16 не предлагает никакого встроенного управления памятью или защиты. В приложении AM-100 последние 256 ячеек памяти отображаются в портовое пространство. [10] Поскольку большинство компьютеров AM-100 использовались как многопользовательские, память обычно расширялась за пределы 64 КБ с переключением банков . Хотя AM-100 можно было настроить для 22 пользователей и 512 килобайт оперативной памяти, [6] типичная конфигурация памяти для 9-пользовательского AM-100 могла быть в диапазоне 352 килобайт. [11] В 1981 году для AM-100/T был предложен дополнительный блок управления памятью AM-700, который позволял сегментировать память с шагом в 256 байт. [12]

Регистры ЦП

Регистры WD16
1 51 41 31 21 11 00 90 80 70 60 50 40 30 20 10 0(позиция бита)
Главные регистры
Р0Регистр 0 / Количество
Р1Регистр 1
Р2Регистр 2
Р3Регистр 3
Р4Регистр 4
Р5Регистр 5
Указатель стека
Р6 / СПРегистр 6 / Указатель стека
Счетчик программ
R7 / ПКРегистр 7 / Счетчик программ
Флаги статуса
 АЛУНЗВССлово состояния процессора

Процессор содержит восемь 16-битных регистров общего назначения , от R0 до R7. Регистры могут использоваться для любых целей, за исключением следующих: Регистр R7 — это счетчик программ (PC). Хотя любой регистр может использоваться как указатель стека, R6 — это указатель стека (SP), используемый для аппаратных прерываний и ловушек. R0 — это счетчик для инструкций по передаче блока. [9]

Режимы адресации

Большинство инструкций выделяют шесть бит для указания каждого операнда. Три бита выбирают один из восьми режимов адресации, а три бита выбирают общий регистр. Кодировка шестибитного режима адресации операнда выглядит следующим образом: [9]

5320
РежимЗарегистрироваться


В следующих разделах каждый элемент включает пример того, как операнд будет записан на языке ассемблера. Rn означает один из восьми регистров, обозначаемых как R0 — R7.

Режимы адресации общих регистров

Следующие восемь режимов могут быть применены к любому общему регистру. Их эффекты при применении к R6 (указатель стека, SP) и R7 (счетчик программ, PC) изложены отдельно в следующих разделах.

КодИмяПримерОписание
ЗарегистрироватьсяРнОперанд находится в Rn
Регистрация отложена(Рн)Rn содержит адрес операнда
Автоинкремент(Рн)+Rn содержит адрес операнда, затем инкремент Rn
Автоинкремент отложен@(Рн)+Rn содержит адрес адреса операнда, затем увеличиваем Rn на 2
Автодекремент−(Рн)Уменьшить Rn, затем использовать результат как адрес операнда.
Автодекремент отложен@−(Рн)Уменьшить Rn на 2, затем использовать результат в качестве адреса операнда.
ИндексX(Рн)Rn+X — адрес операнда
Индекс отложен@X(Рн)Rn+X — адрес адреса операнда

В индексном и индексном отложенном режимах X — это 16-битное значение, взятое из второго слова инструкции. В двухоперандных инструкциях оба операнда могут использовать эти режимы. Такие инструкции имеют длину в три слова.

Операции автоинкремента и автодекремента в регистре выполняются на 1 в байтовых инструкциях, на 2 в словарных инструкциях и на 2 всякий раз, когда используется отложенный режим, поскольку величина, к которой обращается регистр, является указателем (словом).

Режимы адресации счетчика программ

Когда указан R7 (счетчик программ), четыре режима адресации естественным образом дают полезные эффекты:

КодИмяПримерОписание
27НемедленныйОперанд — это следующее слово инструкции.
37Абсолютный@#аАдрес операнда — это следующее слово инструкции.
67РодственникаАдрес операнда — это следующее слово инструкции, добавленное в ПК.
77Относительная отсрочкаАдрес адреса операнда — это следующее слово инструкции, добавленное к PC.

Существует только два распространенных варианта использования абсолютного режима, синтаксис которого сочетает в себе немедленный и отложенный режимы. Первый — доступ к зарезервированным ячейкам процессора по адресу 0000-003F. Другой — указание регистров ввода/вывода в пространстве порта, поскольку регистры для каждого устройства имеют определенные адреса памяти. Относительный режим имеет более простой синтаксис и более типичен для ссылки на переменные программы и назначения переходов. Программа, которая использует относительный режим (и относительный отложенный режим) исключительно для внутренних ссылок, является позиционно-независимой ; она не содержит никаких предположений о своем собственном местоположении, поэтому ее можно загрузить в произвольную ячейку памяти или даже переместить, без необходимости корректировать ее адреса для отражения ее местоположения. При вычислении таких адресов относительно текущего местоположения процессор выполняет перемещение на лету.

Непосредственный и абсолютный режимы — это просто автоинкремент и автоинкремент отложенного режима, соответственно, применяемые к PC. Когда вспомогательное слово находится в инструкции, PC для следующей инструкции автоматически увеличивается после вспомогательного слова. Поскольку PC всегда указывает на слова, операция автоинкремента всегда выполняется с шагом 2 .

Режимы адресации стека

R6, также пишется SP, используется как аппаратный стек для ловушек и прерываний. Соглашение, навязываемое набором режимов адресации, предоставляемых WD16, заключается в том, что стек растет вниз — в сторону меньших адресов — по мере помещения в него элементов. Когда режим применяется к SP или к любому регистру, который программист выбирает для использования в качестве программного стека, режимы адресации имеют следующие эффекты:

КодИмяПримерОписание
16Отсроченный(СП)Операнд находится на вершине стека.
26Автоинкремент(СП)+Операнд находится наверху стека, затем извлеките его
36Автоинкремент отложен@(СП)+Указатель на операнд находится наверху стека; извлеките указатель
46Автодекремент−(СП)Поместить значение в стек
66ИндексированныйX(СП)Операнд расположен на расстоянии X от вершины стека.
76Индексированный отложенный@X(СП)Указатель на операнд находится на расстоянии X от вершины стека.

Хотя программные стеки могут содержать байты, SP всегда указывает на стек слов. Операции автоинкремента и автодекремента на SP всегда выполняются с шагом 2.

Набор инструкций

Большинство инструкций WD16 работают с байтами и словами. Байты указываются номером регистра, идентифицирующим младший байт регистра, или расположением в памяти. Слова указываются номером регистра или расположением в памяти младшего байта, которое должно быть четным числом. Все коды операций и адреса выражаются в шестнадцатеричном формате . [9]

Инструкции с двойным операндом

Старшие четыре бита определяют операцию, которую необходимо выполнить. Две группы по шесть бит определяют режим адресации исходного операнда и режим адресации целевого операнда, как определено выше. Эта группа инструкций занимает 75% доступных опкодов.

1512119865320
Код операцииИсточникЗарегистрироватьсяМесто назначенияЗарегистрироваться
Код операцииМнемоническийОперация
1000ДОБАВЛЯТЬДобавлять:Dest ← Dest + Src
2000СУБВычесть:Dest ← Dest - Src
3000ИИ:Dest ← Dest ∧ Src
4000БИКНемного ясно:Dest ← Dest ∧ (-1 - Src)
5000БИСНабор бит:Dest ← Dest ∨ Src
6000XORЭксклюзив или:Dest ← Dest ⊻ Src
9000КМПСравнивать:Set-flags(Src − Dest)
А000КУСОЧЕКТест бита:Set-flags(Dest ∧ Src)
Б000МОВДвигаться:Dest ← Src
С000ЦМПБСравнение байтов:Set-flags(Src − Dest)
Д000МОВБПереместить байт: Dest ← Src(Знак назначения регистра расширяется до битов 8-15)
Е000БИСББайт установки бита:Dest ← Dest ∨ Src

Некоторые двухоперандные инструкции используют режим адресации для одного операнда и регистр для второго операнда:

159865320
Код операцииРегИсточник/назначениеЗарегистрироваться

Старшие семь бит определяют операцию, которую необходимо выполнить, шесть бит определяют режим адресации операнда, а три бита определяют регистр или пару регистров. Если используется пара регистров (ниже записано как "Reg+1:Reg"), Reg содержит младшую часть операнда. Следующий по порядку регистр содержит старшую часть операнда (или остаток).

Код операцииМнемоническийОперация
7200ЛЕАЭффективный адрес загрузки:Reg ← ea(Dest)
73С0СПМJump: PC ← ea(Dest)(Это то же самое LEA PC,Dest, и имеет тот же код операции.)
7400ПЕПЕЛАрифметический сдвиг:if Src < 0 then Reg ← Shift-right(Reg, -Src) else Reg ← Shift-left(Reg, Src)
7800XCHОбмен:Reg ↔ Src
7A00АСХКАрифметический сдвиг комбинированный (32 бита):if Src < 0 then (Reg+1:Reg) ← Shift-right((Reg+1:Reg), -Src) else (Reg+1:Reg) ← Shift-left((Reg+1:Reg), Src)
7C00МУЛУмножить:(Reg+1:Reg) ← Reg × Src
7E00ДИВРазделять:Compute (Reg+1:Reg) ÷ Src; Reg ← quotient; Reg+1 ← remainder

Инструкции с одним операндом

Старшие десять бит определяют операцию, которая должна быть выполнена, причем бит 15 обычно выбирает адресацию байта или слова. Одна группа из шести бит определяет операнд, как определено выше.

1565320
Код операцииИсточник/назначениеЗарегистрироваться
Код операцииМнемоническийОперация
0BC0ТАМПОНПоменять местами байты слова:Dest ← (Dest × 256) ∨ (Dest ÷ 256)
8BC0ЮЗАОПоменять местами цифры байта:Dest ← (Dest × 16) ∨ (Dest ÷ 16)
0840КЛРПрозрачный:Dest ← 0
8840КЛРБ
0C00КОМДополнение:Dest ← (-1 - Dest)
8C00ГРЕБЕНЬ
0C80ИНКПриращение:Dest ← Dest + 1
8С80МККН
0CC0ДЕКАБРЬУменьшение:Dest ← Dest − 1
8CC0ДЕКБ
0C40ОТРИЦАТЕЛЬНЫЙОтрицать:Dest ← -Dest
8С40НЕГБ
0B00НАБОРНабор:Dest ← -1
8B00СЕТБ
0A80ТСТТест:Set-flags(Src)
8А80ТСТБ
0А00РОРПовернуть вправо:Dest:Cflag ← Rotate-right(Dest:Cflag, 1)
8А00РОРБ
0А40РОЛПоворот влево:Cflag:Dest ← Rotate-left(Cflag:Dest, 1)
8А40РОЛБ
0B80АСРАрифметический сдвиг вправо:Dest ← Dest ÷ 2, sign preserved
8Б80АСРБ
0AC0АМЖАрифметический сдвиг влево:Dest ← Dest × 2
8AC0АСЛБ
8Д80АЦПДобавить переноску:Dest ← Dest + Cflag
8DC0ЮБКВычесть перенос:Dest ← Dest - Cflag
0D00IW2Увеличить слово на 2:Dest ← Dest + 2
0DC0ТЖМППрыжок с трамплина:PC ← PC + (Dest), PC ← PC + @PC
0D80TCALLВызов по таблице:-(SP) ← PC, PC ← PC + (Dest), PC ← PC + @PC
0D40SXTЗнак продлен:if N flag = 1 then Dest ← -1 else Dest ← 0
8D00ЛСТССтатус процессора загрузки:PSW ← Dest
8Д40ССТССохранить статус процессора:Dest ← PSW

Короткие немедленные инструкции с одним операндом

Старшие семь битов и биты 5 и 4 определяют операцию, которую необходимо выполнить. Одна группа из трех бит определяет регистр. Четырехбитное поле счетчика содержит небольшой немедленный или счетчик. Во всех случаях к этому полю добавляется единица, что делает диапазон от 1 до 16.

159865430
Код операцииРегОпСчитать
Код операцииМнемоническийОперация
0800АДДИДобавить немедленно:Reg ← Reg + Count + 1
0810СУБИВычесть немедленно:Reg ← Reg - Count - 1
0820БИКИНемного ясности немедленно:Reg ← Reg ∧ (-1 - (Count+1))
0830МОВИДвигайтесь немедленно:Reg ← Count + 1
8800ССРРМножественный поворот вправо:Reg:C-flag ← Rotate-right(Reg:C-flag, Count+1)
8810SSLRПоворот влево, множественный:C-flag:Reg ← Rotate-left(C-flag:Reg, Count+1)
8820ССРАМножественный арифметический сдвиг вправо:Reg:C-flag ← Arithmetic-shift-right(Reg, Count+1)
8830SSLAМножественный арифметический сдвиг влево:C-flag:Reg ← Arithmetic-shift-left(Reg, Count+1)
8E00СДРРДвойной поворот вправо множественный (33 бита):Reg+1:Reg:C-flag ← Rotate-right(Reg+1:Reg:C-flag, Count+1)
8E10SDLRДвойной левый поворот множественный (33 бита):C-flag:Reg+1:Reg ← Rotate-left(C-flag:Reg+1:Reg, Count+1)
8E20СДРДвойной арифметический сдвиг вправо, кратный (32 бита):Reg:Reg+1:C-flag ← Arithmetic-shift-right(Reg:Reg+1, Count+1)
8E30СДЛАДвойной арифметический сдвиг влево, кратный (32 бита):C-flag:Reg:Reg+1 ← Arithmetic-shift-left(Reg:Reg+1, Count+1)

Инструкции с плавающей точкой

Старшие восемь бит определяют операцию, которую необходимо выполнить. Две группы по четыре бита определяют исходный и целевой режим адресации и регистр. Если поле I = 0, назначенный регистр содержит адрес операнда, эквивалент режима адресации (Rn). Если поле I = 1, назначенный регистр содержит адрес адреса операнда, эквивалент режима адресации @0(Rn).

158764320
Код операциияСРегяДРег
Код операцииМнемоническийОперация
Ф000ФАДДПлавающая надстройка:Dest ← Dest + Src
Ф100ФСУБПлавающее вычитание:Dest ← Dest - Src
Ф200ФМУЛЬПлавающее умножение:Dest ← Dest × Src
Ф300ФДИВПлавающий разрыв:Dest ← Dest ÷ Src
Ф400ФЦМППлавающий Сравнить:Dest - Src

Коды операций F500 - FFFF были сопоставлены четвертому микрому для реализации еще одиннадцати инструкций с плавающей точкой. Нет никаких доказательств того, что этот четвертый микром когда-либо производился. Когда стандартный процессор WD16 выполняет коды операций F500 - FFFF, зарезервированная ловушка кода операции берется, загружая ПК с 001A.

Инструкции по передаче блока

Старшие десять бит определяют операцию, которую необходимо выполнить. Две группы по три бита определяют исходный и целевой регистры. Во всех случаях исходный регистр содержит адрес первого слова или байта памяти, подлежащего перемещению, а целевой регистр содержит адрес первого слова или байта памяти для получения перемещаемых данных. Количество перемещаемых слов или байтов содержится в R0 как беззнаковое целое число. Диапазон счетчика составляет от 1 до 65536. Эти инструкции полностью прерываемы.

1565320
Код операцииСРегДРег
Код операцииМнемоническийОперация
0E00МБВУПереместить блок слов вверх:(DReg) ← (SReg), SReg ← SReg + 2, DReg ← DReg + 2, R0 ← R0 - 1, until R0 = 0
0E40МБВДПереместить блок слов вниз:(DReg) ← (SReg), SReg ← SReg - 2, DReg ← DReg - 2, R0 ← R0 - 1, until R0 = 0
0E80МББУПереместить блок байтов вверх:(DReg) ← (SReg), SReg ← SReg + 1, DReg ← DReg + 1, R0 ← R0 - 1, until R0 = 0
0EC0МББДПереместить блок байтов вниз:(DReg) ← (SReg), SReg ← SReg - 1, DReg ← DReg - 1, R0 ← R0 - 1, until R0 = 0
0F00МБВАПереместить блок слов по адресу:(DReg) ← (SReg), SReg ← SReg + 2, R0 ← R0 - 1, until R0 = 0
0F40МБВАПереместить блок байтов по адресу:(DReg) ← (SReg), SReg ← SReg + 1, R0 ← R0 - 1, until R0 = 0
0F80МАБВПереместить адрес в блок слов:(DReg) ← (SReg), DReg ← DReg + 2, R0 ← R0 - 1, until R0 = 0
0FC0МАББПереместить адрес в блок байтов:(DReg) ← (SReg), DReg ← DReg + 1, R0 ← R0 - 1, until R0 = 0

Инструкции по отделению

Старший байт инструкции определяет операцию. Младший байт — это смещение знакового слова относительно текущего положения счетчика программ. Это позволяет осуществлять прямые и обратные переходы в коде. Максимальный диапазон переходов составляет +128, -127 слов от кода операции перехода.

В большинстве инструкций ветвления выбор перехода зависит от состояния кодов условий. Инструкции ветвления обычно предшествует инструкция CMP с двумя операндами (сравнение) или BIT (тест бита) или инструкция TST с одним операндом (тест). Арифметические и логические инструкции также устанавливают коды условий. В отличие от процессоров Intel в архитектуре x86 , инструкции MOV также устанавливают их, поэтому инструкция ветвления может использоваться для перехода в зависимости от того, было ли перемещенное значение нулевым или отрицательным.

15870
Код операцииКомпенсировать
Код операцииМнемоническийСостояние или операция
0100БРФилиал всегдаPC ← PC + (2 × Sign-extend(Offset))
0200БНЕВетвь, если не равноZ = 0
0300БЭКВетвь, если равноZ = 1
0400БГЕПереход, если больше или равно(N ⊻ V) = 0
0500БЛТВетвь, если меньше(N ⊻ V) = 1
0600БГТВетвь, если больше(Z ∨ (N ⊻ V)) = 0
0700БЛЕПереход, если меньше или равно(Z ∨ (N ⊻ V)) = 1
8000БПЛВетвь, если плюсN = 0
8100ИМТВетвь, если минусN = 1
8200БХИВетвь, если выше(C ∨ Z) = 0
8300БЛОСФилиал, если ниже или такой же(C ∨ Z) = 1
8400БВКВетвление, если переполнение устраненоV = 0
8500БВСВетвление, если установлено переполнениеV = 1
8600BCC или BHISРазделение, если перенос чистый, или разделение, если выше или равноC = 0
8700БКС или БЛОРазделение, если набор для переноски, или разделение, если нижеC = 1

Ограниченный диапазон инструкций ветвления означает, что по мере роста кода целевые адреса некоторых ветвлений могут стать недостижимыми. Программист менял однословную инструкцию Bcc на двухсловную инструкцию JMP. Поскольку JMP не имеет условных форм, программист менял Bcc на противоположный смысл, чтобы выполнить ветвление вокруг JMP.

1598650
Код операцииРегКомпенсировать
Код операцииМнемоническийОперация
7600СОБSubtract One and Branch: Reg ← Reg - 1; if Reg ≠ 0 then PC ← PC - (2 × Offset)

SOB (Subtract One and Branch) — еще одна инструкция условного перехода. Указанный регистр уменьшается на 1, и если результат не равен нулю, выполняется обратный переход на основе 6-битного смещения слова.

Инструкции подпрограммы

159865320
Код операцииРегИсточникЗарегистрироваться
Код операцииМнемоническийОперация
7000JSRПерейти к подпрограмме:-(SP) ← Reg; Reg ← PC; PC ← Src

JSR вызывает подпрограмму. Группа из шести бит определяет режим адресации. Инструкция JSR может сохранять любой регистр в стеке. Программы, которым не нужна эта функция, указывают PC в качестве регистра ( JSR PC, address), а подпрограмма возвращает значение с помощью RTN PC. Если бы подпрограмма была вызвана, например, с помощью JSR R4, address, то старое значение R4 было бы сохранено наверху стека, а адрес возврата (сразу после JSR) был бы в R4. Это позволяет подпрограмме получить доступ к значениям, закодированным в строке, путем указания (R4)+ или к указателям в строке, путем указания @(R4)+. Автоинкрементация перемещается мимо этих данных к точке, в которой возобновляется код вызывающей стороны. Такая подпрограмма указала бы RTN R4возврат к своей вызывающей стороне.

Форму JSR PC,@(SP)+можно использовать для реализации сопрограмм . Первоначально адрес входа сопрограммы помещается в стек, и с этого момента JSR PC,@(SP)+инструкция используется как для вызова, так и для оператора возврата. Результатом этой инструкции JSR является обмен содержимым PC и верхнего элемента стека, что позволяет двум процедурам обмениваться управлением и возобновлять работу, когда каждая из них была завершена предыдущей заменой.

15320
Код операцииРег
Код операцииМнемоническийОперация
0018РТНВозврат из подпрограммы:PC ← Reg; Reg ← (SP)+
0028ПРНТИзвлечь стек и вернуть:SP ← SP + (2 × @SP), PC ← Reg; Reg ← (SP)+

PRTN удаляет ряд параметров из стека и возвращается. PRTN — это ответ WD16 на сложную инструкцию MARK PDP-11. В отличие от MARK, PRTN выполняется в программном пространстве и может использовать любой регистр в качестве регистра связи. Для этого объяснения в качестве связи будет использоваться R5. Сначала вызывающий помещает R5 в стек. Затем в стек может быть помещено любое количество аргументов-слов. Затем вызывающий помещает количество слов-аргументов + 1 в R5. Вызывающий выполняет инструкцию, JSR R5,addressкоторая помещает количество слов-аргументов + 1 в стек, помещает адрес возврата в R5 и переходит к подпрограмме. После выполнения своего кода подпрограмма завершается с помощью PRTN R5. PRTN удваивает число на вершине стека и добавляет его к SP, удаляя параметры. Затем PRTN продолжает, возвращаясь к вызывающему с эквивалентом RTN R5, загружая R5 в PC и выталкивая R5.

Инструкции по единому регистру

Эти инструкции имеют 13-битный код операции и трехбитный аргумент регистра.

15320
Код операцииРег
Код операцииМнемоническийОперация
0010ИАКПодтверждение прерывания:Interrupt acknowledge state code, Reg ← Bus read
0020МСКОМаскировка:(002E) ← Reg, Mask out state code

Подразумеваемые инструкции параметров

150
Код операции
Код операцииМнемоническийОперация
0000НОПНет операции:Do nothing
0001ПЕРЕЗАГРУЗИТЬПерезагрузить:Transmit reset pulse to I/O devices
0002ИЭНРазрешение прерывания:I2 ← 1
0003ИДСОтключение прерываний:I2 ← 0
0004ОСТАНОВИТЬОстановка:Executes the selected halt option
0005XCTВыполнить отдельную инструкцию:PC ← (SP)+, PS ← (SP)+, set trace flag, execute opcode, -(SP) ← PS, -(SP) ← PC, trace flag reset, If no error PC ← (0020) else PC ← (001E)
0006БПТЛовушка точки останова:-(SP) ← PS, -(SP) ← PC, PC ← (002C)
0007ВиДиОжидание прерывания:Enable interrupts (I2 ← 1). Bus activity ceases.
0008РСВКОтвет от руководителя (B или C):REST, SP ← SP + 2, RTT
0009РРТТВосстановление и возвращение из ловушки:REST, RTT
000АСОХРАНЯТЬСохранить регистры:-(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0
000БСАВССохранить статус:SAVE, -(SP) ← (002E), (002E) ← (002E) ∨ Mask, MSKO, IEN. Note Mask is stored in the second word of instruction.
000СОТДЫХВосстановить регистры:R0 ← (SP)+, R1 ← (SP)+, R2 ← (SP)+, R3 ← (SP)+, R4 ← (SP)+, R5 ← (SP)+
000DРРТНВосстановить и вернуть:REST, PC ← (SP)+
000EРСТСВосстановить статус:(002E) ← (SP)+, MSKO, REST, RTT
000ФРТТВозвращение из ловушки:PC ← (SP)+, PS ← (SP)+

Звонки руководителя

Эти инструкции используются для реализации вызовов операционной системы (супервизора). Все они имеют шестибитный аргумент регистра. SVCB и SVCC разработаны таким образом, чтобы аргумент операционной системы мог использовать большинство режимов адресации, поддерживаемых собственным набором инструкций.

15650
Код операцииАрг
Код операцииМнемоническийОперация
0040СВКАРуководитель Звонок А:-(SP) ← PS ,-(SP) ← PC, PC ← (0022) + Arg × 2, PC ← (PC)
0080СВЦБВызов супервайзера B:TMPA ← SP, -(SP) ← PS, -(SP) ← PC, TMPB ← SP, -(SP) ← TMPA, -(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0, R1 ← TMPB, R5 ← Arg × 2, PC ← (0024)
00С0SVCCРуководитель Звонок C:TMPA ← SP, -(SP) ← PS, -(SP) ← PC, TMPB ← SP, -(SP) ← TMPA, -(SP) ← R5, -(SP) ← R4, -(SP) ← R3, -(SP) ← R2, -(SP) ← R1, -(SP) ← R0, R1 ← TMPB, R5 ← Arg × 2, PC ← (0026)

Операции условно-кодового типа

1543210
Код операцииНЗВС
Код операцииМнемоническийОперация
0030ЛКККоды условий нагрузки:Load according to N, Z, V, C bits

Четыре кода состояния в слове состояния процессора (PSW) следующие:

Прерывания

WD16 имеет три типа прерываний: невекторные, векторные и halt. Невекторные и векторные прерывания включаются и выключаются инструкциями IENи IDS. Halt не может быть отключен.

Невекторное прерывание (NVI) имеет приоритет над векторными прерываниями. NVI используется только для двух вещей: сбой питания и линейный тактовый сигнал. (Линейный тактовый сигнал обычно представляет собой вход с частотой 50 или 60 Гц, используемый для квантования времени и отсчета времени .) При получении NVI нажимаются PS и PC. Проверяется статус сбоя питания. Если это сбой питания, WD16 перейдет по адресу, сохраненному в 0014. Если это не сбой питания, то предполагается такт линейных тактовых сигналов, и WD16 перейдет по адресу, сохраненному в 002A.

Поддерживается шестнадцать векторов прерываний. При получении векторного прерывания выдвигаются PS и PC. Во время подтверждения прерывания WD16 принимает четырехбитный номер прерывания, предоставленный прерывающим устройством. Адрес таблицы векторов прерываний извлекается из 0028, и к нему добавляется номер прерывания, указывая на одно из 16 слов в таблице. Смещение слова извлекается из таблицы и добавляется к его собственному адресу таблицы. Результат загружается в PC, вызывая переход к процедуре обслуживания прерываний . То, какие одновременные прерывания будут приняты, определяется 16-битной маской приоритета прерываний , которая в основном реализуется с помощью внешнего оборудования. WD16 сохраняет текущую маску приоритета в 002E, передавая маску напрямую оборудованию. Маска обрабатывается с помощью инструкций MSKO, SAVSи RSTS. Если требуется более 16 векторных прерываний, их можно инициировать через NVI и отправлять с помощью IAKинструкции.

Halt — это немаскируемое прерывание, которое может использоваться для переключения программиста или других целей в зависимости от того, как настроены его перемычки. Хотя halt может изменить адрес выполнения и не маскируется разрешением прерывания, его нельзя использовать как типичное немаскируемое прерывание, поскольку PC не нажат. В зависимости от перемычек линия halt может даже не останавливаться. Если инструкция HALTвыполнена, она может быть очищена линией halt, опять же, в зависимости от перемычек.

Зарезервированные ячейки памяти с низким объемом

Ячейки памяти между 0000 и 003F имеют фиксированные функции, определяемые процессором. Все адреса ниже являются адресами слов. [9]

ВекторСостояние
0000-0010R0 - R5, SP, PC и PS для опций включения/остановки
0012ошибка шины ПК
0014невекторное прерывание питания сбой ПК
0016опция включения/остановки питания восстановление питания ПК
0018ошибка четности ПК
001Азарезервированный код операции ПК
001Снезаконный формат кода операции ПК
001ЕОшибка XCT ПК
0020XCT трассировка ПК
0022Адрес таблицы SVCA
0024ПК СВК
0026ПК SVCC
0028адрес таблицы векторных прерываний (I0)
002Аневекторное прерывание (I1) ПК
002СБПТ ПК
002ЕМаска прерывания приоритета ввода-вывода
0030-003СБлокнот с плавающей точкой
003ЕОшибка с плавающей точкой ПК

Производительность

Скорость процессора WD16 зависит от тактовой частоты, конфигурации памяти, кода операции и режимов адресации. Время выполнения инструкции может включать до трех компонентов: выборку/выполнение самой инструкции и время доступа к источнику и месту назначения. Последние два компонента зависят от режима адресации. Например, при частоте 3,3 МГц инструкция вида ADD  x (R m ), y (R n ) имеет время выборки/выполнения 3,3 микросекунды плюс время источника 2,7 микросекунды и время назначения 3,0 микросекунды, что в итоге составляет 9,0 микросекунд. Регистр-регистр ADD R m ,R n выполняется за 3,3 микросекунды. Плавающая точка значительно медленнее. Плавающая инструкция сложения с точностью один с половиной (48 бит) обычно занимает от 54 до 126 микросекунд. Точность WD16 представляет собой компромисс между традиционными плавающими числами одинарной и двойной точности. [9]

Для сравнения, самым быстрым компьютером PDP-11 в то время был PDP-11/70. Инструкция вида ADD  x (R m ), y (R n ) имеет время выборки/выполнения 1,35 микросекунды плюс время источника и назначения по 0,6 микросекунды каждое, что составляет общее время инструкции 2,55 микросекунды. Любой случай, когда адресуемая память не была в кэше, добавляет 1,02 микросекунды. Регистр-регистр ADD R m ,R n может быть выполнен из кэша за 0,3 микросекунды. [13] Плавающая инструкция сложения одинарной точности, выполняемая сопроцессором FP11-C, может иметь время в диапазоне от 0,9 до 2,5 микросекунд плюс время выборки операндов, которое может составлять до 4,2 микросекунд. [14]

Инструкции по передаче блоков WD16 примерно вдвое увеличивают скорость перемещений и ввода-вывода блоков. Перемещение слова с помощью MOV (R1)+,(R2)+, SOB R0,loopинструкций занимает 9,6 микросекунд на итерацию. MBWU R1,R2Эквивалент занимает 4,8 микросекунд на итерацию.

Ассоциация пользователей компьютеров провела ряд тестов на системе на базе AM-100T стоимостью 35 680 долларов США (что эквивалентно 131 941 доллару США в 2023 году). Они обнаружили, что их тест, связанный с процессором, был выполнен за 31,4 секунды на AM-100T по сравнению с 218 секундами для средней однопользовательской системы в ценовом диапазоне от 15 000 до 25 000 долларов США. [15] В группе многопользовательских компьютеров стоимостью от 25 000 до 50 000 долларов США AM-100T оказался в «верхней трети» по скорости. [16]

Тест Creative Computing Benchmark за май 1984 года поставил WD16 (в приложении AM-100T) на 34-е место из 183 протестированных машин. Прошедшее время составило 10 секунд, по сравнению с 24 секундами для IBM PC . [17]

Эмулятор

Virtual Alpha Micro — это эмулятор WD16 с открытым исходным кодом. Написанный на языке C, он эмулирует процессор WD16 и аппаратную среду Alpha Micro AM-100. Автор утверждает, что он работает на Linux (включая Raspberry Pi), Windows и Macintosh, хотя двоичные файлы не предоставляются. Он будет запускать операционную систему Alpha Micro (AMOS) и все связанные с ней программы. В 2002 году Alpha Micro предоставила ограниченное разрешение на распространение двоичных файлов AMOS 4.x или 5.0, включая руководства, только для любительского использования. [18]

Смотрите также

Архитектура PDP-11

Ссылки

  1. ^ Флистра, Дэниел (апрель 1977 г.). «Новая система для любителей поддерживает разделение времени» (PDF) . Байт . 2 (4) : 142–144 . Проверено 21 ноября 2022 г.
  2. ^ Уилкокс, Дик ( январь 1977 г.). «16-битный микроконтроллер типа PDP-11 для шины S-100». Журнал компьютерной гимнастики и ортодонтии доктора Доббса . 2 (1): 3–7 . Получено 14 июня 2022 г.
  3. ^ Руководство пользователя микропроцессора MCP-1600 (PDF) . Western Digital. 1975. Получено 28 апреля 2022 г.
  4. ^ Стэн, Вьет (май 1983 г.). «Битва дисковых операционных систем» (PDF) . Компьютеры и электроника . 21 (5): 19 . Получено 8 июня 2023 г. .
  5. ^ Крейг, Джон (апрель 1977 г.). «Вокруг отрасли» (PDF) . Kilobaud: The Small Computer Magazine (4): 10. Получено 23 ноября 2022 г.
  6. ^ ab Kee, Hank (август 1981 г.). "Alpha Micro System Revisited" (PDF) . Microsystems . 2 (4): 26 . Получено 1 марта 2022 г. .
  7. ^ Фокс, Том (январь 1982 г.). «Бизнес-системы для '82». Interface Age . 7 (1): 75. Получено 3 ноября 2022 г.
  8. ^ "Alpha Microsystems делает рекордные продажи". InfoWorld . 4 (44): 11. 8 ноября 1982 г. Получено 3 ноября 2022 г.
  9. ^ abcdef "Справочное руководство программиста микрокомпьютера WD16" (PDF) . Western Digital . Получено 10 декабря 2021 г. .
  10. ^ "Техническое руководство для AM-100" (PDF) . Alpha Microsystems . Получено 19 декабря 2021 г. .
  11. ^ "Alpha Micro AM100". Музей устаревших компьютеров . Получено 19 декабря 2021 г.
  12. ^ Управление памятью с помощью контроллера разделов памяти (PDF) (ред. A01). Alpha Micro. Октябрь 1981 г. стр.  139–155 . Получено 14 июня 2022 г.
  13. ^ PDP-11/70 Processor Handbook (PDF) . ДЕКАБРЬ 1976. Приложение C, Синхронизация инструкций.
  14. ^ Справочник процессора DEC PDP-11, 1975, страницы 379-391, Временные характеристики инструкций FP11-C
  15. ^ "Alpha Micro AM-100T". Отчет Ассоциации пользователей компьютеров по результатам сравнительного анализа . 3.2 (6): 9. Ноябрь 1980. Получено 3 ноября 2022 .
  16. ^ "12 Issue Summary". Ассоциация пользователей компьютеров: Benchmark Report . 3.2 (14): 4. Июнь 1982. Получено 3 ноября 2022 .
  17. ^ Ahl, David H. (май 1984). "Creative Computing Benchmark". Creative Computing Magazine . 10 (5): 6. Получено 2 ноября 2022 г.
  18. ^ Ноэль, Майк. "VAM Virtual Alpha Micro" . Получено 13 июля 2022 г.
  • Фотографии АМ-100 и АМ-100Т
Взято с "https://en.wikipedia.org/w/index.php?title=WD16&oldid=1259326007"