La TI-990 fue una serie de minicomputadoras de 16 bits vendidas por Texas Instruments (TI) en las décadas de 1970 y 1980. La TI-990 fue un reemplazo de los sistemas de minicomputadoras anteriores de TI, la TI-960 y la TI-980. Tenía varias características únicas y era más fácil de programar que sus predecesoras.
Entre sus conceptos básicos se encontraba la capacidad de soportar multiprogramación mediante un conjunto de registros de procesador conmutables por software que permitían realizar cambios rápidos de contexto entre programas. Esto se hizo posible mediante el uso de valores de registro almacenados en la memoria principal que podían intercambiarse modificando un solo puntero.
TI implementó posteriormente la TI-990 en un único chip, el TMS9900 , uno de los primeros microprocesadores de 16 bits . Pensado para su uso en 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 los detalles de su modelo de memoria de estilo minicomputador presentaban desventajas significativas. [ ¿según quién? ]
En la TI-990, los registros se almacenan en la memoria y se hace referencia a ellos a través de un registro de hardware llamado Workspace Pointer. El concepto detrás del espacio de trabajo es que la memoria principal se basaba en los nuevos chips RAM de semiconductores que TI había desarrollado y que funcionaban a la misma velocidad que la CPU. [ aclaración necesaria ] Esto significaba que no importaba si los "registros" eran registros reales en la CPU o estaban almacenados en la memoria. [ cita requerida ] Cuando el Workspace Pointer se carga con una dirección de memoria, esa dirección es el origen de los registros.
En el 990 solo hay tres registros de hardware: el puntero de espacio de trabajo (WP), el contador de programa (PC) y el registro de estado (ST). Un cambio de contexto implicaba guardar y restaurar solo los registros de hardware.
La TI-990 tenía una función que permitía operaciones extendidas mediante el uso de hardware enchufable. [ cita requerida ] Si el hardware no está presente, la CPU hace trampas para permitir que el software realice la función. El código de operación (XOP) permitía 15 dispositivos conectados a un sistema. Sin embargo, el dispositivo 15 estaba reservado en los sistemas operativos de TI para la llamada de supervisor (SVC), a través de la cual los programas de usuario solicitaban E/S y otros servicios del sistema operativo.
En el 990/12, la instrucción XOP podía ejecutar microcódigo desde el almacén de control escribible de la máquina.
La TI-990 utilizaba un conjunto de instrucciones bastante ortogonal . Los formatos de instrucciones permitían instrucciones de una, dos y tres palabras. La CPU modelo 990/12 permitía una instrucción de cuatro palabras con las operaciones en modo extendido. [ Aclaración necesaria ]
(R es un registro general, de 0 a 15.)
Varios registros tenían propósitos definidos en muchas instrucciones. Estos son:
Los conjuntos de instrucciones 990/4, 990/5, 990/9 constaban de 69 instrucciones, el 990/10 tenía 72 instrucciones, el 990/10A tenía 77 instrucciones [ cita requerida ] 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 a realizar, los dos campos restantes proporcionan información para localizar los operandos. [ aclaración necesaria ]
El primer campo de la palabra especifica la operación a realizar, el segundo campo es un desplazamiento relativo al lugar al que se debe ir, para instrucciones JMP, o el desplazamiento relativo para el direccionamiento de bits CRU. [ aclaración necesaria ]
El primer campo de la palabra especifica la operación, el segundo campo proporciona el registro, el tercer campo proporciona información para localizar el segundo operando. [ aclaración necesaria ]
El primer campo de la palabra especifica la operación 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. [ aclaración necesaria ]
El primer campo de la palabra especifica la operación a realizar, el segundo campo es el conteo de desplazamiento, el tercer campo especifica el registro a desplazar. [ aclaración necesaria ]
El primer campo especifica la operación a realizar, el segundo campo proporciona información para localizar el segundo operando. [ aclaración necesaria ]
La palabra especificaba la operación a realizar.
El primer campo especifica la operación, el segundo campo especifica el registro si corresponde. El tercer campo, si corresponde, especifica un operando inmediato en una segunda palabra. [ aclaración necesaria ]
El primer campo de la palabra especifica la operación, el segundo campo proporciona el registro, el tercer campo proporciona información para localizar el segundo operando. [ aclaración necesaria ]
El primer campo especifica la operación, el segundo campo especifica el archivo de mapa (0=kernel, 1=usuario) y el tercer campo especifica un registro con una dirección.
El archivo de mapa dado se carga con 6 palabras de la dirección en el registro.
Esta instrucción era compatible con el 990/10A y el 990/12, o el 990/10 con la opción de mapa de memoria instalada.
La primera palabra es el código de operación; en la segunda palabra, el primer campo es el campo de recuento 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 990/12. [ Aclaración necesaria ]
Las instrucciones de precisión múltiple permitían realizar operaciones aritméticas lógicas y de números enteros en operandos de entre 1 y 15 bytes de longitud. *SM y *AM eran compatibles con el 990/10A.
El primer campo de la primera palabra es el código de operación, el segundo campo de la primera palabra indica un registro de punto de control, el primer campo de la segunda palabra es el campo de conteo de bytes, el segundo campo es el operando de destino y el tercer campo es el operando de origen. Estas instrucciones eran compatibles con el 990/12.
La primera palabra es el código de operación; en la segunda palabra, el primer campo es el campo de conteo de bytes, el segundo campo es el conteo de desplazamiento y el tercer campo es el operando de origen. Estas instrucciones son compatibles con los modelos 990/12 y 990/10A.
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 eran compatibles con el 990/12.
El primer campo de la primera palabra es el código de operación, el segundo campo de la primera palabra indica un ancho; el primer campo de la segunda palabra es la posición, el segundo campo es el operando de origen. [ aclaración necesaria ] Esta instrucción es compatible con el 990/12.
El primer campo de la primera palabra es el código de operación, el segundo campo de la primera palabra indica un 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 990/12.
La primera palabra es el código de operación; el primer campo de la segunda palabra es el campo de valor y el segundo campo es el registro y el tercer campo es el desplazamiento relativo. [ aclaración necesaria ] Estas instrucciones son compatibles con el 990/12.
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 990/12.
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 990/12.
La primera palabra es el código de operación, el primer campo de la segunda palabra es el campo del 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 990/12.
El primer campo de la primera palabra es el código de operación, el segundo campo de la primera palabra 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 990/12.
Un programa completo de " ¡Hola mundo! " en ensamblador TI-990, para ejecutar bajo DX10 :
IDT 'HOLA' TÍTULO 'HOLA - programa hola mundo'* DXOP SVC,15 Definir SVCTMLUNO EQU 0 Terminal LUNO*R0 EQU 0R1 EQU 1R2 EQU 2R3 EQU 3R4 EQU 4R5 EQU 5R6 EQU 6R7 EQU 7R8 EQU 8R9 EQU 9R10 Equilibrio 10R11 EQU 11R12 EQU 12R13 EQU 13R14 EQU 14R15 Equilibrio 15* DATOS WP,ENTRADA,0** Espacio de trabajo (En el 990 podemos "precargar" registros)*DATOS DE 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 DATOS 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 terminal SVC*TRMSCB BYTE 0 Código de operación SVC (0 = E/S)Código de error TRMERR BYTE 0CÓDIGO DE OPERACIÓN DE E/S DEL BYTE 0 DE TRMOPCBYTE TRMLUN TMLUNO LUNODATOS DE TRMFLG 0 BanderasTRMBUF DATA $-$ Dirección de búferTRMLRL DATA $-$ Longitud del registro lógicoDATOS TRMCHC $-$ Número de caracteres** Mensaje*CADENA TEXTO '¡Hola mundo!' BYTE >D,>AEQUIPO DE STRENGTH $-STRING INCLUSO PÁGINA** Entrada del programa principal*ENTRADA MOVB R3,@TRMOPC Establece el código de operación abierto en SCB SVC @TRMSCB Abrir terminal MOVB @TRMERR,R0 Verificar error SALIDA DEL JNE MOVB R4,@TRMOPC Establecer código de operación de escritura MOV R6,@TRMBUF Establecer la dirección del búfer MOV R7,@TRMLRL Establece la longitud del registro lógico MOV R7, @TRMCHC y recuento de caracteres SVC @TRMSCB Escribir mensaje MOVB @TRMERR,R0 Verificar error JNE CERRADOCERRAR MOVB R5,@TRMOPC Establecer código de operación de cierre SVC @TRMSCB Cerrar terminalSALIR SVC R2 Salir del programa* FIN
Este programa se puede ejecutar en un simulador de 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 se imprime en el terminal serial conectado a la dirección CRU 0. Ilustra la conexión de E/S y espacio de trabajo de CRU para la subrutina PRINT.
IDT 'HOLA' TÍTULO 'HOLA - programa hola mundo'*R0 EQU 0R1 EQU 1R2 EQU 2R3 EQU 3R4 EQU 4R5 EQU 5R6 EQU 6R7 EQU 7R8 EQU 8R9 EQU 9R10 Equilibrio 10R11 EQU 11R12 EQU 12R13 EQU 13R14 EQU 14R15 Equilibrio 15** Bits CRU terminales*TRMCRU EQU >0 Dirección del dispositivo terminalXMIT EQU 8DTR EQU 9RTS EQU 10WRQ EQU 11RRQ EQU 12NSF EQU 13* PÁGINA** Entrada del programa principal*ENTRADA LWPI WP Carga nuestro puntero de espacio de trabajo BLWP @PRINT Llama a nuestra rutina de impresión CADENA DE DATOS DATOS STRLEN INACTIVO*Espacio de trabajo del programa principal de WP BSS 32** Mensaje*CADENA TEXTO '¡Hola mundo!' BYTE >D,>AEQUIPO DE STRENGTH $-STRING INCLUSO PÁGINA** Imprimir un mensaje*DATOS DE IMPRESIÓN PRWS,PRENTPRECIO EQUIVALENTE $ MOV *R14+,R2 Obtener la dirección del búfer MOV *R14+,R1 Obtener la longitud del mensaje Habilitar terminal SBO DTR listo Estrategias de negocio de SBOPRI010 LDCR *R2+,8 Envía un carácter TB WRQ Espere hasta que termine JNE-2 WRQ de la SBZ Dic. R1 JGT PRI010 Regreso al futuro*DATOS PRWS 0,0,0,0,0,0,0,0 DATOS 0,0,0,0,TRMCRU,0,0,0* ENTRADA FINAL
Los procesadores TI-990 se dividieron 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 admitían la Unidad de Registro de Comunicaciones (CRU), que es un bus de E/S direccionable por bits en serie. Además, los modelos de gama alta admitían el bus de E/S TILINE, que es similar al popular UNIBUS de DEC . El TILINE también admitía una relación maestro/esclavo que permitía múltiples placas de CPU en un chasis común con control de arbitraje.
Los siguientes modelos utilizaron TILINE como su principal bus de almacenamiento masivo:
Los siguientes modelos utilizaron el CRU como bus principal:
Había varios sistemas operativos disponibles para la TI-990
Desde TI:
De terceros: