
La TI-990 es una serie de minicomputadoras de 16 bits comercializadas por Texas Instruments (TI) en las décadas de 1970 y 1980. Sustituyó a los sistemas de minicomputadoras anteriores de TI, la TI-960 y la TI-980. La TI-990 incorpora varias innovaciones únicas y fue diseñada para ser más fácil de programar que sus predecesoras.
Entre sus conceptos fundamentales se encuentra la capacidad de admitir la multiprogramación mediante un conjunto de registros del procesador conmutables por software, lo que le permitía realizar cambios de contexto rápidos entre programas. Esto se logra mediante el uso de valores de registro almacenados en la memoria principal, que se pueden intercambiar modificando un único puntero.
Posteriormente, Texas Instruments implementó la TI-990 en un solo chip, el TMS9900 , uno de los primeros microprocesadores de 16 bits . Diseñado para su uso en los modelos de gama baja de la TI-990, conservaba la arquitectura de memoria a memoria de la 990. Este chip se utilizó ampliamente en la computadora doméstica TI-99/4A , donde las drásticas medidas de reducción de costos generaron importantes desventajas en el rendimiento.
Características
Espacios de trabajo
En la TI-990, los registros se almacenan en la memoria y se accede a ellos mediante un registro de hardware llamado puntero de espacio de trabajo. El concepto detrás del espacio de trabajo es que la memoria principal se basaba en los nuevos chips de RAM de semiconductores que TI había desarrollado y funcionaba a la misma velocidad que la CPU. Esto significaba que no importaba si los "registros" eran registros reales de la CPU o estaban almacenados en la memoria. Cuando el puntero de espacio de trabajo se carga con una dirección de memoria , esa dirección es el origen de los registros.
El procesador 990 solo cuenta con tres registros de hardware: el puntero del espacio de trabajo (WP), el contador de programa (PC) y el registro de estado (ST). Un cambio de contexto implicaba guardar y restaurar únicamente los registros de hardware.
Operación prolongada
La calculadora TI-990 permite extender las operaciones mediante hardware enchufable. Si el hardware no está presente, la CPU genera una interrupción para que el software ejecute la función. El código de operación (XOP) permite conectar hasta 15 dispositivos al sistema; sin embargo, el dispositivo 15 está reservado en los sistemas operativos de TI para la llamada al supervisor (SVC), mediante la cual los programas de usuario solicitan E/S y otros servicios del sistema operativo.
En el modelo 990/12, la instrucción XOP podía ejecutar microcódigo desde la memoria de control editable de la máquina .
Conjunto de instrucciones ortogonales
La calculadora TI-990 cuenta con un conjunto de instrucciones bastante ortogonal . Los formatos de instrucción permiten instrucciones de una, dos y tres palabras. La CPU del modelo 990/12 permite instrucciones de cuatro palabras con operaciones en modo extendido.
Detalles arquitectónicos
Modos de direccionamiento de registro general
(R es un registro general, de 0 a 15.)
- 0. Registro: el valor es hacia o desde un registro: OPR R ; R contiene el operando
- 1. Registro indirecto: el registro contiene la dirección del operando: OPR *R ; R apunta al operando.
- 2. Indexado: OPR @MEM(R); R contiene el valor del índice (desplazamiento en bytes) que se suma a la dirección MEM. R0 no se utiliza en la indexación y permite el direccionamiento directo de memoria.
- 3. Autoincremento indirecto: OPR *R+ ; R contiene la dirección del operando. Posteriormente, incrementa R por la longitud del tipo de operando.
Varios registros tenían propósitos definidos en muchas instrucciones. Estos son:
- R0 - contador de desplazamiento, contador de modo extendido, palabra más significativa del acumulador de punto flotante (FAC)
- R1 - FAC+2 (precisión simple)
- R2 - FAC+4 (doble precisión)
- R3 - FAC+6 (doble precisión)
- R11 - enlace de retorno o puntero al operando de XOP (modo privilegiado)
- R12 - Dirección base CRU (modo privilegiado)
- R13 - Puntero de espacio de trabajo guardado
- R14 - Contador de programas guardados
- R15 - Registro de estado guardado
Instrucciones de la TI-990
Los conjuntos de instrucciones 990/4, 990/5 y 990/9 constaban de 69 instrucciones, el 990/10 tenía 72 instrucciones, el 990/10A tenía 77 instrucciones y el 990/12 tenía 144 instrucciones.
Las instrucciones se agrupan según los modos de direccionamiento y la cantidad de operandos que aceptan. Un grupo se define por la disposición de los campos de bits dentro de la palabra de instrucción. Los bits más a la izquierda de la palabra de instrucción son suficientes para identificar su grupo.
El primer campo de la palabra especifica la operación que se va a realizar, y los dos campos restantes proporcionan información para localizar los operandos.
- MOV (mover palabra)
- MOVB (mover byte)
- A (añadir palabra)
- AB (añadir byte)
- S (palabra de resta)
- SB (restar byte)
- C (comparar palabra)
- CB (comparar byte)
- SZC (poner ceros a la palabra correspondiente)
- SZCB (establecer ceros en el byte correspondiente)
- SOC (conjunto de palabras correspondientes)
- SOCB (establecer el byte correspondiente)
El primer campo de la palabra especifica la operación que se va a realizar, el segundo campo es un desplazamiento relativo hacia donde ir, para las instrucciones JMP, o el desplazamiento relativo para el direccionamiento de bits CRU.
- JMP (salto incondicional)
- JLT (saltar si es menor que cero)
- JLE (saltar si es menor o igual que cero)
- JEQ (saltar si es cero)
- JHE (saltar si es lógicamente mayor o igual que cero)
- JGT (saltar si es mayor que cero)
- JNE (saltar si no es igual a cero)
- JNC (salta si llevas despejado)
- JOC (saltar si se lleva el conjunto)
- JNO (saltar si se borra el desbordamiento)
- JOP (salto si la paridad es impar; solo relevante después de operaciones con bytes)
- JL (saltar si lógicamente es menor que cero)
- JH (saltar si es lógicamente mayor que cero)
- SBO (establecer el bit CRU en uno)
- SBZ (establecer el bit CRU a cero)
- TB (bit de prueba CRU)
El primer campo de la palabra especifica la operación, el segundo campo proporciona el registro y el tercer campo proporciona información para localizar el segundo operando.
- COC (comparar los correspondientes)
- CZC (comparar los ceros correspondientes)
- XOR (o exclusivo)
- XOP (operación extendida)
El primer campo de la palabra especifica la operación que se va a realizar, el segundo campo es el ancho de bits de la operación y el tercer campo proporciona información para localizar el segundo operando.
- LDCR (carga CRU)
- STCR (CRU de almacén)
El primer campo de la palabra especifica la operación a realizar, el segundo campo es el número de desplazamientos y el tercer campo especifica el registro a desplazar.
- SRA (desplazamiento aritmético a la derecha)
- SRL (desplazamiento lógico a la derecha)
- SLA (aritmética de desplazamiento a la izquierda)
- SRC (circular con desplazamiento a la derecha)
El primer campo especifica la operación que se va a realizar, el segundo campo proporciona información para localizar el segundo operando.
- BLWP (puntero de espacio de trabajo de ramificación y carga)
- B (rama)
- X ( ejecutar )
- CLR (palabra clara)
- NEG (negación del complemento a dos)
- INV (complemento a uno)
- INC (incremento)
- INCT (incremento de dos)
- DEC (decremento)
- DECT (decremento de dos)
- BL (ramificación y enlace)
- ABS (valor absoluto)
- SWPB (intercambio de bytes)
- SETO (establecer palabra a unos)
- LDS (fuente de larga distancia, 990/10, 990/10A, 990/12)
- LDD (destino de larga distancia, 990/10, 990/10A, 990/12)
- BIND (sucursal indirecta, 990/10A, 990/12)
- MPYS (signo múltiple, 990/10A, 990/12)
- DIVS (divide firmado, 990/10A, 990/12)
- AR (sumar real, 990/12)
- CIR (convertir entero a real, 990/12)
- SR (restar real, 990/12)
- MR (multiplicar el número real, 990/12)
- DR (dividir real, 990/12)
- LR (carga real, 990/12)
- STR (precio real de la tienda, 990/12)
- AD (sumar doble, 990/12)
- CID (convertir entero a doble, 990/12)
- SD (restar el doble, 990/12)
- MD (multiplicar por doble, 990/12)
- DD (dividir el doble, 990/12)
- LD (carga doble, 990/12)
- STD (doble de tienda, 990/12)
La palabra especificaba la operación que se iba a realizar.
- INACTIVO (CPU inactiva)
- RSET (reinicio de la CPU)
- RTWP (devuelve el puntero del espacio de trabajo)
- CKON (reloj encendido)
- CKOF (reloj apagado)
- LREX (cargar ROM y ejecutar)
- EMD (ejecutar microdiagnóstico, 990/12)
- EINT (habilitar interrupción, 990/12)
- DINT (deshabilitar interrupción, 990/12)
- CRI (convertir real a entero, 990/12)
- CDI (convertir double a entero, 990/12)
- NEGR (negar real, 990/12)
- NEGD (negar doble, 990/12)
- CRE (convertir real a entero extendido, 990/12)
- CDE (convierte un número doble a un entero extendido, 990/12)
- CER (convierte un entero extendido a real, 990/12)
- CED (convierte un entero extendido a doble precisión, 990/12)
- XIT (salida de punto flotante, 990/12)
El primer campo especifica la operación, el segundo el registro, si corresponde. El tercer campo, si corresponde, especifica un operando inmediato en una segunda palabra.
- LIMI (máscara de interrupción de carga inmediata)
- LI (carga inmediata)
- IA (añadir inmediatamente)
- ANDI (e inmediato)
- ORI (o inmediato)
- IC (comparar inmediatamente)
- STWP (almacenar puntero del espacio de trabajo)
- STST (estado de la tienda)
- LWPI (carga inmediata del puntero del espacio de trabajo)
- BLSK (ramificación, inserción inmediata de enlace en la pila, 990/12)
El primer campo de la palabra especifica la operación, el segundo campo proporciona el registro y el tercer campo proporciona información para localizar el segundo operando.
- MPY (multiplicación sin signo)
- DIV (división sin signo)
El primer campo especifica la operación, el segundo campo especifica el archivo de mapa (0=núcleo, 1=usuario) y el tercer campo especifica un registro con una dirección.
El archivo de mapa proporcionado contiene seis palabras de la dirección registrada.
Esta instrucción es compatible con los modelos 990/10A y 990/12, o con el modelo 990/10 con la opción de mapa de memoria instalada.
- LMF (cargar archivo de mapa)
La primera palabra es el código de operación; en la segunda palabra, el primer campo es el contador de bytes, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Estas instrucciones son compatibles con el procesador 990/12.
- NRM (normalizar)
- RTO (prueba correcta para los unos)
- LTO (prueba izquierda para unos)
- CNTO (contar unos)
- BDC (conversión de binario a decimal)
- DBC (conversión de decimal a binario)
- SWPM (intercambiar múltiples)
- XORM (xor múltiple)
- ORM (o múltiples)
- ANDM (y múltiples)
- SM (restar múltiplo)
- AM (añadir varios)
Las instrucciones de precisión múltiple permitían realizar operaciones lógicas y aritméticas con enteros en operandos de entre 1 y 15 bytes. *SM y *AM son compatibles con el 990/10A.
El primer campo de la primera palabra es el código de operación, el segundo campo indica un registro de punto de control; el primer campo de la segunda palabra es el contador de bytes, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Estas instrucciones son compatibles con el procesador 990/12.
- SNEB (cadena de búsqueda para byte no igual)
- CRC (cálculo de código de redundancia cíclica)
- TS (traducir cadena)
- CS (comparar cadena)
- SEQB (cadena de búsqueda de bytes iguales)
- MOVS (mover cadena)
- MVSR (transferencia de cadena invertida)
- MVSK (mover cadena de la pila)
- POPS (extraer cadena de la pila)
- PSHS (empujar cadena a la pila)
La primera palabra es el código de operación; en la segunda palabra, el primer campo es el contador de bytes, el segundo el contador de desplazamiento y el tercero el operando de origen. Estas instrucciones son compatibles con los procesadores 990/12 y 990/10A.
- SRAM (multiplicador aritmético de desplazamiento a la derecha)
- SLAM (multiplicador aritmético con desplazamiento a la izquierda)
La primera palabra es el código de operación; el primer campo de la segunda palabra es el campo de posición y el segundo campo es el operando de origen. Estas instrucciones son compatibles con el procesador 990/12.
- TMB (bit de memoria de prueba)
- TCMB (bit de prueba y borrado de memoria)
- TSMB (prueba y configuración del bit de memoria)
El primer campo de la primera palabra es el código de operación, el segundo campo indica el ancho; el primer campo de la segunda palabra es la posición, el segundo campo es el operando de origen. Esta instrucción es compatible con el procesador 990/12.
- IOF (invertir el orden del campo)
El primer campo de la primera palabra es el código de operación, el segundo campo indica el ancho; el primer campo de la segunda palabra es la posición, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Estas instrucciones son compatibles con el procesador 990/12.
- INSF (insertar campo)
- XV (valor extraído)
- XF (campo de extracción)
La primera palabra es el código de operación; el primer campo de la segunda palabra es el valor, el segundo campo es el registro y el tercer campo es el desplazamiento relativo. Estas instrucciones son compatibles con el procesador 990/12.
- SRJ (restar valor del registro y saltar)
- ARJ (sumar valor al registro y saltar)
El primer campo de la palabra es el código de operación y el segundo campo es la especificación del registro. Estas instrucciones son compatibles con el procesador 990/12.
- STPC (almacenar PC en el registro)
- LIM (cargar máscara de interrupción desde registro)
- LST (registro de estado de carga)
- LWP (puntero de carga del espacio de trabajo)
- LCS (almacén de control de carga)
La primera palabra es el código de operación; el primer campo de la segunda palabra es el operando de destino y el segundo campo es el operando de origen. Esta instrucción es compatible con el procesador 990/12.
- MOVA (cambiar dirección)
La primera palabra es el código de operación; el primer campo de la segunda palabra es el código de condición, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Estas instrucciones son compatibles con el modelo 990/12.
- SLSL (dirección lógica de la lista de búsqueda)
- SLSP (lista de búsqueda de direcciones físicas )
El primer campo de la primera palabra es el código de operación, el segundo campo especifica la longitud de destino; el primer campo de la segunda palabra especifica la longitud de origen, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Esta instrucción solo es compatible con el procesador 990/12.
- EP (extender la precisión)
Ejemplo de programación en lenguaje ensamblador
Un programa completo de " ¡Hola, mundo! " en lenguaje ensamblador TI-990, para ejecutar bajo DX10 :
IDT 'HOLA' TÍTULO 'HOLA - programa hola mundo' * DXOP SVC,15 Definir SVC TMLUNO EQU 0 Terminal LUNO * R0 ECU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * DATOS WP,ENTRADA,0 * * Espacio de trabajo (En el 990 podemos "precargar" registros) * DATOS WP 0 R0 DATOS 0 R1 DATOS >1600 R2 - Fin del programa SVC DATOS >0000 R3 - Código de operación de E/S abierta DATOS >0B00 R4 - Escribir código de operación de E/S DATOS >0100 R5 - Cerrar código de operación de E/S CADENA DE DATOS R6 - Dirección del mensaje DATA STRLEN R7 - Longitud del mensaje DATOS 0 R8 DATOS 0 R9 DATOS 0 R10 DATOS 0 R11 DATOS 0 R12 DATOS 0 R13 DATOS 0 R14 DATOS 0 R15 * * Bloque SVC de terminal * TRMSCB BYTE 0 Código de operación SVC (0 = E/S) Código de error TRMERR BYTE 0 CÓDIGO DE OPERACIÓN DE E/S DEL BYTE 0 DE TRMOPC TRMLUN BYTE TMLUNO LUNO DATOS TRMFLG 0 Banderas DATOS TRMBUF $-$ Dirección del búfer DATOS TRMLRL $-$ Longitud del registro lógico DATOS TRMCHC $-$ Recuento de caracteres * * Mensaje * TEXTO DE CADENA '¡Hola mundo!' BYTE >D,>A STRLEN EQU $-STRING INCLUSO PÁGINA * * Entrada al programa principal * ENTRADA MOVB R3,@TRMOPC Establecer código de operación abierto en SCB SVC @TRMSCB Terminal abierta MOVB @TRMERR,R0 Comprobar si hay errores SALIDA JNE MOVB R4,@TRMOPC Establecer código de operación de escritura MOV R6,@TRMBUF Establecer dirección de búfer MOV R7,@TRMLRL Establecer longitud de registro lógico MOV R7,@TRMCHC y recuento de caracteres SVC @TRMSCB Escribir mensaje MOVB @TRMERR,R0 Comprobar si hay errores JNE CIERRA CERRAR MOVB R5,@TRMOPC Establecer código de operación de cierre SVC @TRMSCB Terminal cerrada SALIDA SVC R2 Programa de salida * FIN
Este programa se puede ejecutar en un simulador TI-990, como el "sim990" de Dave Pitts, que emula la TI-990 e incluye kits de software para sistemas operativos nativos (incluido DX10).
El siguiente programa es una versión independiente que imprime en el terminal serie conectado a la dirección 0 de la CRU. Ilustra la E/S de la CRU y la vinculación del espacio de trabajo para la subrutina PRINT.
IDT 'HOLA' TÍTULO 'HOLA - programa hola mundo' * R0 ECU 0 R1 EQU 1 R2 EQU 2 R3 EQU 3 R4 EQU 4 R5 EQU 5 R6 EQU 6 R7 EQU 7 R8 EQU 8 R9 EQU 9 R10 EQU 10 R11 EQU 11 R12 EQU 12 R13 EQU 13 R14 EQU 14 R15 EQU 15 * * Bits CRU del terminal * TRMCRU EQU >0 Dirección del dispositivo terminal EQU DE TRANSMISIÓN 8 DTR EQU 9 RTS EQU 10 WRQ EQU 11 RRQ EQU 12 NSF EQU 13 * PÁGINA * * Entrada al programa principal * ENTRADA LWPI WP Cargar nuestro puntero de espacio de trabajo BLWP @PRINT Llama a nuestra rutina de impresión CADENA DE DATOS RESTRICCIÓN DE DATOS INACTIVO * Espacio de trabajo del programa principal WP BSS 32 * * Mensaje * TEXTO DE CADENA '¡Hola mundo!' BYTE >D,>A STRLEN EQU $-STRING INCLUSO PÁGINA * * Imprimir un mensaje * IMPRIMIR DATOS PRWS,IMPRENT PREST EQU $ MOV *R14+,R2 Obtener dirección del búfer MOV *R14+,R1 Obtener longitud del mensaje SBO DTR Habilitar terminal listo SBO RTS PRI010 LDCR *R2+,8 Enviar un carácter TB WRQ Espere hasta que termine JNE $-2 SBZ WRQ DIC R1 JGT PRI010 RTWP * DATOS PRWS 0,0,0,0,0,0,0,0 DATOS 0,0,0,0,TRMCRU,0,0,0 * FIN DE LA ENTRADA
Modelos TI-990
Los procesadores TI-990 se dividían en varios grupos naturales según el diseño original en el que se basaban y el bus de E/S que utilizaban.
Todos los modelos son compatibles con la Unidad de Registro de Comunicaciones (CRU), un bus de E/S serial direccionable por bits. Además, los modelos de gama alta son compatibles con el bus de E/S TILINE, similar al popular UNIBUS de DEC . El TILINE también admite una relación maestro/esclavo que permite conectar varias placas de CPU en un chasis común con control de arbitraje.
Modelos TILINE/CRU
Los siguientes modelos utilizaron el TILINE como su bus principal de almacenamiento masivo :
- TI-990/5 — Microprocesador TMS9900 con 64 KB de memoria
- TI-990/10 : procesador TTL con soporte para mapeo de memoria a 2 MB de memoria ECC.
- TI-990/10A : microprocesador TMS-99000 con soporte para mapeo de memoria de hasta 1 MB.
- TI-990/12 : procesador Schottky TTL con mapeo de memoria a 2 MB de memoria ECC, caché de espacio de trabajo, punto flotante por hardware, instrucciones de modo extendido y memoria de control escribible.
Modelos solo CRU
Los siguientes modelos utilizaron el CRU como su bus principal:
- TI-990/4 — Microprocesador TMS9900 con 56 KB de memoria
- TI-990/9 — La implementación TTL original
Sistemas operativos
Para la TI-990 existían varios sistemas operativos disponibles.
De TI:
De terceros:
Fuentes
- Manual de sistemas de la familia de computadoras 990
- Manual de referencia del ensamblador 990
Enlaces externos
- La página de Dave Pitts sobre la TI 990 incluye un simulador, un ensamblador cruzado, un enlazador cruzado, utilidades e imágenes del sistema operativo.
- Traductor de SCI 990 a COBOL
- ti990.co.uk en Internet Archive Sitio que detalla la preservación y restauración de las minicomputadoras de la serie TI 990.
- Archivos de Texas Instruments , Biblioteca DeGolyer, Universidad Metodista del Sur
- Computadoras de Texas Instruments
- Minicomputadoras
- computadoras de 16 bits