Texas Instruments TMS9900
Стиль этой статьи неэнциклопедичен или нарушает нормы литературного русского языка. |
TMS9900 | |
---|---|
Центральный процессор | |
| |
Производство | 1976 |
Производитель | |
Технология производства | N-MOP, 6 мкм |
Разъём |
|
Ядра |
Микропроцессор TMS9900, представленный в июне 1976, был одним из первых коммерчески доступных однокристальных 16-битных микропроцессоров. TMS9900 использовался, главным образом, в домашнем компьютере TI-99/4A.
История
[править | править код]TMS9900 был сконструирован как однокристальный вариант мини-компьютера серии TI-990, аналогично тому, как микропроцессор Intersil 6100 являлся однокристальной версией 12-битного мини-компьютера PDP-8, а микропроцессоры Fairchild Semiconductor 9440 и Data General mN601 являлись однокристальными версиями 16-битного мини-компьютера Data General Nova. TMS9900 отличался тем, что все его компоненты находились в одной микросхеме, в то время как существовавшие на тот момент 16-битные микропроцессоры National Semiconductor IMP-16 или DEC LSI-11 представляли собой набор из нескольких микросхем.
Архитектура
[править | править код]Особенность архитектуры TMS9900 — отсутствие встроенных регистров общего назначения и хранение их в оперативной памяти. TMS9900 имеет три встроенных 16-битных регистра — счётчик команд (PC), статусный регистр (ST), и регистр указателя рабочего пространства(WP)[1]. Регистр WP указывает на начальный адрес в оперативной памяти, начиная с которого хранятся 16 регистров общего назначения процессора (каждый шириной 16 бит). Такая архитектура позволяет выполнять быстрое переключение контекста. Например, при входе в подпрограмму вместо того, чтобы сохранять текущие значения регистров индивидуально, достаточно изменить содержимое регистра рабочего пространства.
При адресации памяти используется порядок байтов от старшего к младшему. TMS9900 — это классическая 16-битная машина с адресным пространством 216 байт (65536 байт или 32768 слов).
В процессоре нет концепции стека и нет регистра указателя стека. Вместо этого существуют инструкции переходов, которые сохраняют счётчик команд в регистр и изменяют регистр рабочего пространства. Имеются 16 аппаратных и 16 программных векторов прерываний, каждый из которых содержит пару значений счётчика программ PC и регистра рабочего пространства WP, так что переключение контекста регистров в момент прерывания выполняется автоматически.
Адресация и система команд
[править | править код]Система команд TMS9900 состоит из 72 команд длиной от одного до трёх машинных слов, всегда размещающихся в памяти по границе слова. Система команд является достаточно ортогональной, что означает, за несколькими исключениями, возможность использования в командах любых режимов адресации операндов.
Режимы адресации используются для определения места расположения операнда в памяти при выполнении команды на процессоре. В архитектуре процессора могут быть различные режимы адресации, такие как непосредственная (когда операнд задан непосредственно в команде), прямая или символическая (когда в команде указан адрес операнда), регистровая (когда операнд хранится в регистре), регистровая косвенная (когда адрес операнда хранится в регистре) с автоинкрементом или без него, индексная (когда к адресу операнда в команде прибавляется содержимое регистра) и адресация относительно счетчика команд.
Основные двухадресные команды, такие как сложение, вычитание, сравнение и пересылка, содержат поле режима адресации, состоящее из двух бит, и поле выбора регистра для операндов-источника и операндов-получателя, состоящее из четырех бит. В коде операции символический режим адресации представлен как индексный с установленным в 0 полем регистра, поэтому 0-й регистр рабочего пространства (WR0) не может использоваться для индексной адресации. В менее часто используемых двухадресных инструкциях, таких как XOR, операнд-получатель должен быть регистром рабочего пространства (или парой регистров в случае команд умножения и деления).
Режимы адресации включают непосредственную (команда содержит операнд), прямую или «символическую» (команда содержит адрес операнда), регистровую (операнд содержится в регистре рабочего пространства), регистровую косвенную (адрес операнда содержится в регистре рабочего пространства) с автоинкрементом или без него, индексную (к адресу операнда в команде прибавляется содержимое регистра рабочего пространства) и адресацию относительно счётчика команд.
Основные двухадресные команды (сложение, вычитание, сравнение, пересылка и т.д.) содержат 2-битное поле режима адресации и 4-битное поле выбора регистра для операнда источника и операнда получателя. В коде операции «символический» режим адресации представлен как индексный с установленным в 0 полем регистра, поэтому 0-й регистр рабочего пространства (WR0) не может быть использован для индексной адресации. В менее часто используемых двухадресных инструкциях, таких как XOR, операнд получатель должен быть регистром рабочего пространства (или парой регистров в случае команд умножения и деления).
Порядок выполнения команд обеспечивается группой из одной команды безусловного и двенадцати команд условного перехода. Адреса переходов задаются относительно счётчика команд со смещением от -128 до +127 машинных слов.
Для вызова подпрограмм используется команда BLWP (Branch and Load Workspace Pointer, перейти и загрузить регистр указателя рабочего пространства), которая загружает новые значения регистров WP и PC, и сохраняет предыдущие значения регистров WP, PC и ST во вновь назначенные регистры 13, 14 и 15. В конце подпрограммы команда RTWP (Return Workspace Pointer, вернуть регистр указателя рабочего пространства) восстанавливает значения регистров WP, PC и ST из регистров 13, 14 и 15. Используя команды BLWP и RTWP возможно осуществлять вложенные вызовы процедур несмотря на отсутствие стека. При этом, однако, программист должен явно назначать корректные области памяти для регистров рабочего пространства.
Система команд также содержит группу команд BL (Branch and Link, перейти и связать), которые сохраняют только регистр PC в регистр 11 и не изменяют регистр WP. В этом случае другая команда BL, используя регистр 11 как адрес перехода, может использоваться для возврата из подпрограммы. При этом вложенные вызовы подпрограмм типа BL невозможны.
TMS9900 имеет необычную и редко используемую команду X (eXecute, выполнить). Эта команда позволяет выполнить другую команду по указанному адресу, не прерывая выполнения программы, то есть, после выполнения команды управление передается на следующий после команды X адрес. Эта команда может использоваться для отладки (в качестве точки останова) и для создания интерпретаторов байт-кода.
Предположительно, по сравнению с Intel 8086, TMS9900 позволял создавать более компактные программы. Существенными недостатками были ограниченное адресное пространство, необходимость предварительного чтения слова из памяти при необходимости модификации только одного байта и потребность в быстрой оперативной памяти.
Реализация
[править | править код]TMS9900 был реализован по N-канальному МОП процессу с кремниевыми затворами[1], использовал три источника питания напряжением +5, -5 и +12 В и синхронизировался четырёхфазным тактовым сигналом максимальной частотой 3 МГц (длительность цикла 333 нс)[2], обычно формировавшимся генератором тактовых сигналов TIM9904 (также известным, как 74LS362) из опорной частоты 48 МГц.
Самые короткие команды выполнялись восемь тактов или 2,7 мкс (при условии отсутствия внешних циклов ожидания), большинство других требовали от 10 до 14 тактов (3,3—4,7 мкс). Дольше всего выполняющаяся инструкция (DIV) могла требовать до 124 тактов (41,3 мкс)[3].
Процессор был упакован в необычный для того времени 64-выводный корпус типа DIP. Сравнительно большое число выводов позволило раздельно вывести 15 линий шины адреса (так как доступ к памяти осуществляется словами, младший разряд не используется) и 16 линий шины данных без использования мультиплексирования (как сделано, например, в процессоре Intel 8086), сохранив простоту подключения внешней памяти. Вопреки используемому многими производителями соглашению, TI обозначила старшие разряды шин адреса и данных как «A0» и «D0». Все внутренние шины и АЛУ являются 16-битными.
Процессор может быть остановлен с переводом шины адреса в высокоимпедансное состояние для выполнения прямого доступа к памяти внешними устройствами. Обращения к памяти всегда 16-битные, с автоматическим предварительным чтением слова из памяти при необходимости модификации только одного байта.
Система аппаратных прерываний поддерживает 4-разрядный вход приоритета прерывания. Чтобы прерывание было выполнено, значение на этом входе должно быть больше, чем уровень приоритета, установленный в статусном регистре (биты 12-15). Дополнительно, вход /LOAD обеспечивает возможность немаскируемого прерывания с выделенным вектором[4].
Процессор TMS9900 также содержит 16-битный сдвиговый регистр (CRU) созданный для взаимодействия с устройствами ввода-вывода. Специальные команды процессора позволяют адресовать до 4096 однобитных портов ввода-вывода, а также выполнять операции ввода-вывода над группами от 1 до 16 портов.
Периферийные устройства с параллельными интерфейсами могут подключаться по методу отображения регистров ввода-вывода на память к обычным шинам адреса и данных.
Использование
[править | править код]TMS9900 применялся в домашних компьютерах TI-99/4 и TI-99/4A. Для удешевления стоимости производства, компания Texas Instruments сделала напрямую доступной процессору TMS9900 быструю оперативную память объёмом 128 16-битных слов. Остальная память, объёмом 16 Кб, была 8-битной и доступна процессору только косвенно, через контроллер дисплея, что значительно снизило производительность TI-99/4.
Позже Texas Instruments разработала более мощный и совершенный процессор TMS99000, использовавшийся в мини-компьютере 990/10A для снижения стоимости. Ко времени выхода 990/10A на рынок стал очевиден закат эры мини-компьютеров.
Варианты
[править | править код]Модель | Описание |
---|---|
TI990/9 | Ранняя многокристальная версия процессора для мини-компьютеров, 1974 |
TI990/10 | Многокристальная версия для мини-компьютеров, 1975 |
TI990/12 | Многокристальная версия, более быстрая чем 990/10. |
TMS9900 | Однокристальная версия, 1976. Использовалась в компьютере TI-99/4(A). |
TMS9940 | Микроконтроллер с 2 Кб ПЗУ, 128 байт ОЗУ, декрементатором, шиной CRU, 1979 |
TMS9980, TMS9981 | 8-битные версии TMS9900 |
TMS9985 | TMS9940 с 8 Кб ПЗУ, 256 байт ОЗУ, и 8-битной внешней шиной, около 1978 (не был выпущен) |
TMS9989 | Улучшенный вариант 9980, использовался в военной технике. |
TMS9995 | Улучшенный вариант TMS9985, без ПЗУ. Использовался в прототипе TI-99/8 и компьютере Geneve. |
TMS99000 | Улучшенный однокристальный вариант 9900, предназначенный для замены 990/10, 1981 |
TMS99105 | Возможность эмуляции дополнительных инструкций |
TMS99110 | Улучшенный 99105 |
Примечания
[править | править код]- ↑ 1 2 TMS9900 Microprocessor Data Manual. — Texas Instruments Inc., 1976. Архивировано 16 мая 2012 года. Архивированная копия . Дата обращения: 24 февраля 2013. Архивировано 16 мая 2012 года.
- ↑ TMS9900 Microprocessor Data Manual. — Texas Instruments Inc., 1976. Архивировано 16 мая 2012 года. Архивированная копия . Дата обращения: 24 февраля 2013. Архивировано 16 мая 2012 года.
- ↑ TMS9900 Microprocessor Data Manual. — Texas Instruments Inc., 1976. Архивировано 16 мая 2012 года. Архивированная копия . Дата обращения: 24 февраля 2013. Архивировано 16 мая 2012 года.
- ↑ TMS9900 Microprocessor Data Manual. — Texas Instruments Inc., 1976. Архивировано 16 мая 2012 года. Архивированная копия . Дата обращения: 24 февраля 2013. Архивировано 16 мая 2012 года.
Ссылки
[править | править код]- TMS9900 manuals and references, bitsavers.org
- The Inside Story of Texas Instruments’ Biggest Blunder: The TMS9900 Microprocessor, IEEE Spectrum, 22 Jun 2017 (англ.) (перевод)