TI-990 - TI-990
В TI-990 была серия 16 бит миникомпьютеры продан Инструменты Техаса (TI) в 1970-х и 1980-х годах. TI-990 был заменой более ранних миникомпьютерных систем TI, TI-960 и TI-980. У него было несколько уникальных функций, и его было легче программировать, чем его предшественники.
Функции
Рабочие места
В TI-990 регистры хранятся в памяти и обращаются к ним через аппаратный регистр, называемый указателем рабочего пространства. Концепция рабочего пространства заключается в том, что основная память была основана на новых микросхемах полупроводниковой оперативной памяти, разработанных TI, и работала с той же скоростью, что и процессор. Это означало, что не имело значения, были ли «регистры» реальными регистрами в ЦП или представлены в памяти. Когда указатель рабочей области загружается с адресом памяти, этот адрес является источником «регистров».
В 990 есть три аппаратных регистра; указатель рабочего пространства (WP), счетчик программ (ПК) и регистр состояния (ST). Переключение контекста влекло за собой сохранение и восстановление только аппаратных регистров.
Расширенная операция
TI-990 имел возможность расширять операции за счет использования подключаемого оборудования. Если оборудование отсутствует, прерывания ЦП позволяют программному обеспечению выполнять функцию. Код операции (XOP) позволял подключать к системе 15 устройств. Хотя устройство 15 по соглашению зарезервировано для использования в качестве входа системного вызова для пользовательских программ для запроса системных услуг.
Ортогональный набор инструкций
TI-990 использовал довольно ортогональный набор команд. Основные форматы инструкций позволяли использовать инструкции из одного, двух и трех слов. ЦП модели 990/12 допускал команду из четырех слов с операциями расширенного режима.
Архитектурные детали
Общий реестр режимы адресации
(R - общий регистр, от 0 до 15.)
- 0. Регистр - значение в регистре или из него: OPR R; R содержит операнд
- 1. Косвенный регистр - регистр используется как адрес памяти для чтения или записи: OPR * R; R содержит адрес
- 2. Проиндексировано: OPR @MEM (R); R содержит значение индекса, R0 не используется при индексировании и допускает прямую адресацию памяти
- 3. Автоинкремент: OPR * R +; R содержит адрес адреса, затем увеличивает R на длину типа операнда
Некоторые регистры имеют особые применения, которые ограничивают их использование, регистр и способы их использования:
- R0 - счетчик сдвига, счетчик расширенного режима, с плавающей запятой AC-0
- R1 - с плавающей запятой AC-1
- R2 - плавающая точка AC-2
- R3 - с плавающей запятой AC-3
- R11 - указатель XOP (режим ядра), обратная связь
- R12 - базовый адрес CRU (режим ядра)
- R13 - Указатель сохраненной рабочей области
- R14 - Счетчик сохраненной программы
- R15 - Сохраненный статус
Инструкция TI-990
Наборы команд 990/4, 990/5, 990/9 состояли из 69 инструкций, 990/10 - 72 инструкции, 990 / 10A - 77 инструкций, а 990/12 - 144 инструкции. Инструкции разделены на типы, имеющие схожие характеристики.
Первая часть слова определяет операцию, которую необходимо выполнить, оставшиеся две части предоставляют информацию для поиска операндов.
- MOV (переместить слово)
- MOVB (переместить байт)
- А (добавить слово)
- AB (добавить байт)
- S (вычесть слово)
- SB (вычесть байт)
- C (сравнить слово)
- CB (сравнить байт)
- SZC (установить нули соответствующее слово)
- SZCB (установить нули в соответствующий байт)
- SOC (установить соответствующее слово)
- SOCB (установить соответствующий байт)
Первая часть слова определяет операцию, которая должна быть выполнена, вторая часть - относительное смещение, куда идти, для инструкций JMP или относительное смещение для адресации битов CRU.
- JMP (безусловный прыжок)
- JLT (переход, если меньше нуля)
- JLE (перейти, если меньше или равно нулю)
- JEQ (прыгать, если ноль)
- JHE (переход, если логически больше или равно нулю)
- JGT (переход, если больше нуля)
- JNE (прыжок, если не равен нулю)
- JNC (прыгать, если несёт чистый)
- JOC (прыжок, если установлен перенос)
- JNO (переход при сбросе переполнения)
- JOP (переход при нечетной четности - актуально только после операций с байтами)
- JL (переход, если логически меньше нуля)
- JH (переход, если логически больше нуля)
- SBO (установить бит CRU в единицу)
- SBZ (установить бит CRU в ноль)
- TB (тестовый бит CRU)
Одна часть слова определяет операцию, вторая часть предоставляет регистр, третья часть предоставляет информацию для поиска второго операнда.
- КОК (сравните соответствующие)
- CZC (сравните соответствующие нули)
- XOR (исключающее или)
- XOP (расширенная операция)
Первая часть слова определяет операцию, которая должна быть выполнена, вторая часть - разрядность операции, третья часть предоставляет информацию для определения местоположения второго операнда.
- LDCR (загрузить CRU)
- STCR (магазин CRU)
Первая часть слова определяет выполняемую операцию, вторая часть - это счетчик сдвига, третья часть определяет регистр для сдвига.
- SRA (сдвиг вправо арифметика)
- SRL (сдвиг вправо логический)
- SLA (сдвиг влево)
- SRC (сдвиг вправо по кругу)
Первая часть определяет операцию, которая должна быть выполнена, вторая часть предоставляет информацию для поиска второго операнда.
- BLWP (указатель ветвления и загрузки рабочей области)
- Б (филиал)
- X (выполнить)
- CLR (чистое слово)
- NEG (отрицание дополнения до двух)
- ИНВ (дополнение до единицы)
- INC (приращение)
- INCT (увеличение на два)
- DEC (декремент)
- DECT (уменьшение на два)
- BL (ветка и ссылка)
- ABS (абсолютное значение)
- SWPB (байты подкачки)
- SETO (установить слово в единицы)
- LDS (дальний источник, 990/10, 990 / 10A, 990/12)
- LDD (междугородний пункт назначения, 990/10, 990 / 10A, 990/12)
- BIND (ответвление непрямое, 990 / 10A, 990/12)
- MPYS (со знаком, 990 / 10A, 990/12)
- DIVS (разделение со знаком, 990 / 10A, 990/12)
- AR (добавить реальное, 990/12)
- CIR (преобразовать целое число в действительное, 990/12)
- SR (вычесть действительное, 990/12)
- MR (действительное умножение, 990/12)
- DR (действительное деление, 990/12)
- LR (действительная нагрузка, 990/12)
- STR (магазин реальный, 990/12)
- AD (добавить двойной, 990/12)
- CID (преобразовать целое в двойное, 990/12)
- SD (вычесть двойное, 990/12)
- MD (умножить дважды, 990/12)
- DD (двойное деление, 990/12)
- LD (двойная нагрузка, 990/12)
- STD (магазин двойной, 990/12)
Слово определяет операцию, которую нужно выполнить.
- IDLE (процессор простаивает)
- RSET (сброс процессора)
- RTWP (возврат указателя рабочей области)
- CKON (часы включены)
- CKOF (часы выключены)
- LREX (загрузить ПЗУ и выполнить)
- EMD (выполнение микродиагностики, 990/12)
- EINT (разрешить прерывание, 990/12)
- DINT (запретить прерывание, 990/12)
- CRI (преобразовать вещественное число в целое, 990/12)
- CDI (преобразовать двойное в целое, 990/12)
- NEGR (отрицать реальное, 990/12)
- NEGD (отрицательное двойное, 990/12)
- CRE (преобразовать действительное в расширенное целое, 990/12)
- CDE (преобразовать двойное в расширенное целое, 990/12)
- CER (преобразование расширенного целого числа в действительное, 990/12)
- CED (преобразовать расширенное целое в двойное, 990/12)
- XIT (выход с плавающей запятой - nop, 990/12)
Первая часть определяет операцию, вторая часть определяет регистр или маску. Третья часть, если присутствует, определяет непосредственный операнд во втором слове.
- LIMI (загрузка маски прерывания немедленно)
- LI (загрузка немедленно)
- AI (добавить немедленно)
- ANDI (и немедленно)
- ORI (или немедленно)
- CI (немедленное сравнение)
- STWP (сохранить указатель рабочей области)
- STST (статус магазина)
- LWPI (немедленная загрузка указателя рабочей области)
- BLSK (немедленная отправка ссылки push в стек, 990/12)
Одна часть слова определяет операцию, вторая часть предоставляет регистр, третья часть предоставляет информацию для поиска второго операнда.
- MPY (беззнаковое умножение)
- DIV (беззнаковое деление)
Первая часть определяет операцию, вторая часть определяет файл карты (0 = ядро, 1 = пользователь), а третья определяет регистр. Эта инструкция поддерживается в 990/10, 990 / 10A и 990/12.
- LMF (загрузить файл карты)
Первое слово - это код операции; первая часть второго слова - это поле счетчика байтов, вторая часть - операнд-адресат, а третья часть - операнд-источник. Эти инструкции поддерживаются 990/12.
- NRM (нормализовать)
- RTO (правильный тест для своих)
- LTO (оставил тест на единицы)
- CNTO (считайте единицы)
- BDC (преобразование из двоичного в десятичное)
- DBC (преобразование из десятичного в двоичное)
- SWPM (обменять несколько)
- XORM (xor несколько)
- ORM (или несколько)
- ANDM (и несколько)
- SM (вычесть кратное)
- AM (добавить несколько)
Первая часть первого слова - это код операции, вторая часть первого слова указывает регистр контрольной точки; первая часть второго слова - это поле счетчика байтов, вторая часть - операнд-адресат, а третья часть - операнд-источник. Эти инструкции поддерживаются на 990/12.
- SNEB (строка поиска для не равного байта)
- CRC (вычисление циклического избыточного кода)
- TS (перевести строку)
- CS (сравнить строку)
- SEQB (строка поиска для равного байта)
- MOVS (переместить строку)
- MVSR (переместить строку в обратном порядке)
- MVSK (переместить строку из стека)
- POPS (извлечь строку из стека)
- PSHS (поместить строку в стек)
Первое слово - это код операции; первая часть второго слова - это поле счетчика байтов, вторая часть - счетчик сдвига, а третья часть - исходный операнд. Эти инструкции поддерживаются 990/12.
- SRAM (сдвиг вправо арифметическое кратное)
- SLAM (сдвинуть влево арифметическое кратное)
Первое слово - это код операции; первая часть второго слова - это поле позиции, а вторая часть - исходный операнд. Эти инструкции поддерживаются 990/12.
- TMB (тестовый бит памяти)
- TCMB (бит проверки и очистки памяти)
- TSMB (проверить и установить бит памяти)
Первая часть первого слова - это код операции, вторая часть первого слова указывает ширину; первая часть второго слова - позиция, вторая часть - исходный операнд. Эта инструкция поддерживается на 990/12.
- IOF (обратный порядок полей)
Первая часть первого слова - это код операции, вторая часть первого слова указывает ширину; первая часть второго слова - это позиция, вторая часть - операнд-адресат, а третья часть - операнд-источник. Эти инструкции поддерживаются 990/12.
- INSF (вставить поле)
- XV (значение извлечения)
- XF (поле извлечения)
Первое слово - это код операции; первая часть второго слова - это поле значения, вторая часть - регистр, а третья часть - относительное смещение. Эти инструкции поддерживаются 990/12.
- SRJ (вычесть значение из регистра и перейти)
- ARJ (добавляйте ценность, чтобы зарегистрироваться и прыгать)
Первая часть слова - это код операции, а вторая часть - спецификация регистра. Эти инструкции поддерживаются 990/12.
- STPC (хранить ПК в реестре)
- LIM (загрузка маски прерывания из регистра)
- LST (регистр состояния загрузки)
- LWP (указатель рабочей области загрузки)
- LCS (магазин управления загрузкой)
Первое слово - это код операции; первая часть второго слова - это операнд назначения, а вторая часть - операнд источника. Эта инструкция поддерживается на 990/12.
- MOVA (адрес переезда)
Первое слово - это код операции; первая часть второго слова - это поле кода условия, вторая часть - операнд назначения, а третья часть - операнд источника. Эти инструкции поддерживаются 990/12.
- SLSL (логический адрес списка поиска)
- SLSP (физический адрес списка поиска)
Первая часть первого слова - это код операции, вторая часть первого слова определяет длину назначения; первая часть второго слова определяет длину источника, вторая часть - операнд-адресат, а третья часть - операнд-источник. Эта инструкция поддерживается на 990/12.
- EP (повышенная точность)
Пример программирования на языке ассемблера
Полный "Привет, мир! "программа на ассемблере TI-990 для работы под DX10:
IDT 'HELLO' TITL 'HELLO - hello world program' * DXOP SVC, 15 Определение SVCTMLUNO EQU 0 Терминал LUNO * R0 EQU 0R1 EQU 1R2 EQU 2R3 EQU 3R4 EQU 4R5 EQU 5R6 EQU 6R7 EQU 7R8 EQU 8R9 10R 9R10 EQU 11 12R13 EQU 13R14 EQU 14R15 EQU 15 * DATA WP, ENTRY, 0 * * Рабочая область (на 990 мы можем "предварительно загрузить" регистры) * WP DATA 0 R0 DATA 0 R1 DATA> 1600 R2 - Конец программы SVC DATA> 0000 R3 - Открытие кода операции ввода-вывода DATA> 0B00 R4 - Запись кода операции ввода-вывода DATA> 0100 R5 - Закрытие кода операции ввода-вывода DATA STRING R6 - Адрес сообщения DATA STRLEN R7 - Длина сообщения DATA 0 R8 DATA 0 R9 DATA 0 R10 DATA 0 R11 DATA 0 R12 DATA 0 R13 DATA 0 R14 DATA 0 R15 * * Терминальный блок SVC * TRMSCB BYTE 0 Код операции SVC (0 = I / O) TRMERR BYTE 0 Код ошибки TRMOPC BYTE 0 I / O OP CODETRMLUN BYTE TMLUNO LUNOTRMFLG DATA 0 FlagsTRMBUF DATA $ - $ Адрес буфера TRMLRL DATA $ - $ Длина логической записиTRMCHC DATA $ - $ Количество символов * * Сообщение * ТЕКСТ СТРОКИ 'Hello world!' BYTE> D,> ASTRLEN EQU $ -STRING EVEN PAGE * * Запись основной программы * ENTRY MOVB R3, @ TRMOPC Установить открытый код операции в SCB SVC @TRMSCB Открыть терминал MOVB @ TRMERR, R0 Проверить наличие ошибок JNE EXIT MOVB R4, @ TRMOPC Set запись кода операции MOV R6, @ TRMBUF Установить адрес буфера MOV R7, @ TRMLRL Установить длину логической записи MOV R7, @ TRMCHC и количество символов SVC @TRMSCB Написать сообщение MOVB @ TRMERR, R0 Проверить на наличие ошибки JNE CLOSECLOSE MOVB R5, @ TRMOPC Установить код операции закрытия SVC @TRMSCB Закрыть терминал EXIT SVC R2 Выйти из программы * END
Вы можете попробовать это на себе на симуляторе TI-990. Sim990 Дэйва Питтса имитирует TI-990 и включает комплекты программного обеспечения для собственных операционных систем (включая DX10).
Следующая программа представляет собой автономную версию, которая печатается на последовательном терминале, подключенном к адресу CRU 0. Она иллюстрирует связь ввода-вывода CRU и рабочего пространства для подпрограммы PRINT.
IDT 'HELLO' TITL 'HELLO - hello world program' * R0 EQU 0R1 EQU 1R2 EQU 2R3 EQU 3R4 EQU 4R5 EQU 5R6 EQU 6R7 EQU 7R8 EQU 8R9 EQU 9R10 EQU 10R11 EQU 11R12 EQU 12R13 EQU 15 RQU 14 EQU 15 ** биты * TRMCRU EQU> 0 Адрес оконечного устройства XMIT EQU 8DTR EQU 9RTS EQU 10WRQ EQU 11RRQ EQU 12NSF EQU 13 * PAGE ** Основная запись программы * ENTRY LWPI WP Загрузить указатель рабочего пространства BLWP @PRINT Вызов нашей процедуры печати DATA STRING DATA STRLEN IDLE * WP BSS 32 Основное рабочее пространство программы ** Сообщение * ТЕКСТ СТРОКИ 'Hello world!' BYTE> D,> ASTRLEN EQU $ -STRING EVEN PAGE ** Распечатать сообщение * PRINT DATA PRWS, PRENTPRENT EQU $ MOV * R14 +, R2 Получить адрес буфера MOV * R14 +, R1 Получить длину сообщения SBO DTR Включение готовности терминала SBO RTSPRI010 LDCR * R2 +, 8 Отправить символ TB WRQ Подождать, пока не будет выполнено JNE $ -2 SBZ WRQ DEC R1 JGT PRI010 RTWP * PRWS DATA 0,0,0,0,0,0,0,0 DATA 0,0,0,0, TRMCRU, 0,0,0 * КОНЕЦ ВХОДА
Модели TI-990
Процессоры TI-990 разделились на несколько естественных групп в зависимости от исходной конструкции, на которой они основаны, и того, какую шину ввода-вывода они использовали.
Все модели поддерживают модуль регистра связи (CRU), который представляет собой последовательную шину ввода-вывода с побитовой адресацией. Кроме того, на моделях более высокого уровня поддерживалась шина ввода-вывода TILINE, которая похожа на DEC популярный UNIBUS. TILINE также поддерживает отношения ведущий / ведомый, что позволяет использовать несколько плат ЦП в одном шасси с арбитражным управлением.
Модели TILINE / CRU
Следующие модели использовали TILINE в качестве основной шины массовой памяти:
- TI-990/5 - ТМС-9900 микропроцессор с 64 Кбайт памяти
- TI-990/10 - TTL процессор с поддержкой отображения памяти до 2M байтов Память ECC
- TI-990 / 10A - микропроцессор TMS-99000 с поддержкой отображения памяти в 1 Мбайт памяти
- TI-990/12 - процессор Schottky TTL с отображением памяти в 2M байта памяти ECC, кэшированием рабочей области, аппаратной с плавающей запятой, инструкциями расширенного режима и записываемым хранилищем управления
Только модели CRU
Следующие модели использовали CRU в качестве основной шины:
- TI-990/4 - ТМС-9900 микропроцессор с памятью 56 Кбайт
- TI-990/9 - Оригинальная реализация TTL
Операционные системы
Несколько операционные системы были доступны для TI-990
От TI:
От третьих лиц:
Источники
внешняя ссылка
- Страница TI 990 Дэйва Питтса - Включает симулятор, кросс-ассемблер, кросс-компоновщик, утилиты и образы операционной системы.
- Переводчик SCI 990 на COBOL
- ti990.co.uk в интернет-архиве Сайт, посвященный сохранению и восстановлению мини-компьютеров серии TI 990