stringtranslate.com

WD16

El WD16 es un microprocesador de 16 bits presentado por Western Digital en octubre de 1976. Está basado en el chipset MCP-1600 , un diseño de propósito general que también se utilizó para implementar la minicomputadora de gama baja DEC LSI-11 y el Pascal MicroEngine. procesador. Los tres sistemas se diferenciaban principalmente en su microcódigo , dando a cada sistema una arquitectura de conjunto de instrucciones (ISA) única.

El WD16 implementa una extensión de la arquitectura del conjunto de instrucciones del PDP-11, pero no es compatible con el código de máquina con el PDP-11. [1] El conjunto de instrucciones y la microcodificación fueron creados por Dick Wilcox y Rich Notari. [2] El WD16 es un ejemplo de arquitectura CISC ortogonal . La mayoría de las instrucciones de dos operandos pueden operar de memoria a memoria con cualquier modo de direccionamiento y algunas instrucciones pueden generar hasta diez accesos a la memoria.

El WD16 se implementa en cinco paquetes DIP de 40 pines . La velocidad máxima de reloj es de 3,3 MHz. Su interfaz con la memoria se realiza a través de un bus de direcciones/datos multiplexados de 16 bits. [3]

El WD16 es mejor conocido por su uso en las placas de procesador AM-100 y AM-100/T de Alpha Microsystems . [4] Se demostró un prototipo en 1977. [5] En 1981 había al menos 5.000 computadoras Alpha Micro basadas en el WD16. [6] Todavía en 1982, los Alpha Micros basados ​​en WD16 todavía se caracterizaban como "supermicros". [7] El WD16 fue reemplazado por el Motorola 68000 en junio de 1982. [8]

Memoria

Formatos de datos

La unidad más pequeña de memoria direccionable y grabable es el byte de 8 bits . También se pueden guardar bytes en la mitad inferior de los registros R0 a R5. [9]

Las palabras de 16 bits se almacenan en formato little-endian con los bytes menos significativos en la dirección inferior. Las palabras siempre están alineadas con direcciones de memoria pares. Las palabras se pueden guardar en los registros R0 a R7.

Las palabras dobles de 32 bits solo se pueden almacenar en pares de registros y la palabra inferior se almacena en el registro con el número inferior. MUL, DIV y algunas instrucciones de rotación y desplazamiento aritmético utilizan valores de 32 bits.

Los valores de coma flotante tienen una longitud de 48 bits y sólo se pueden almacenar en la memoria. Este formato está a medio camino entre los formatos de punto flotante de precisión simple y doble. Se almacenan en un formato medio-endian inusual , a veces denominado "PDP-endian". Los valores de coma flotante siempre están alineados con direcciones pares. La primera palabra contiene el signo, el exponente y el byte superior de la mantisa. La siguiente dirección superior contiene los dos bytes centrales de la mantisa y la siguiente dirección superior contiene los dos bytes inferiores de la mantisa. El formato completo es el siguiente:

1. Un signo de 1 bit para el número entero que es cero para positivo.

2. Un exponente de base dos de 8 bits en notación de exceso de 128 con un rango de +127, -128. El único número legal con un exponente de -128 es el cero verdadero (todos ceros).

3. Una mantisa de 40 bits con el MSB implícito.

Gestión de la memoria

Las direcciones de 16 bits del WD16 pueden acceder directamente a 64  KB de memoria. El WD16 no ofrece ninguna gestión o protección de memoria inherente. En la aplicación AM-100, las últimas 256 ubicaciones de memoria se asignan al espacio del puerto . [10] Como la mayoría de las computadoras AM-100 se usaban como computadoras multiusuario, la memoria generalmente se ampliaba más allá de 64 K con cambio de banco . Aunque el AM-100 podría configurarse para hasta 22 usuarios y 512 kilobytes de RAM, [6] una configuración de memoria típica para un AM-100 de 9 usuarios podría estar en el rango de 352 kilobytes. [11] En 1981 se ofreció una unidad de gestión de memoria AM-700 opcional para el AM-100/T que permitía la segmentación de la memoria en incrementos de 256 bytes. [12]

registros de CPU

La CPU contiene ocho registros de 16 bits de uso general , R0 a R7. Los registros se pueden utilizar para cualquier propósito con estas excepciones: El registro R7 es el contador de programa (PC). Aunque cualquier registro se puede utilizar como puntero de pila, R6 es el puntero de pila (SP) utilizado para interrupciones y trampas de hardware. R0 es el recuento de las instrucciones de transferencia en bloque. [9]

Modos de direccionamiento

La mayoría de las instrucciones asignan seis bits para especificar cada operando. Tres bits seleccionan uno de los ocho modos de direccionamiento y tres bits seleccionan un registro general. La codificación del modo de direccionamiento de operandos de seis bits es la siguiente: [9]


En las siguientes secciones, cada elemento incluye un ejemplo de cómo se escribiría el operando en lenguaje ensamblador. Rn significa uno de los ocho registros, escritos del R0 al R7.

Modos generales de direccionamiento de registros

Los siguientes ocho modos se pueden aplicar a cualquier registro general. Sus efectos cuando se aplican a R6 (el puntero de pila, SP) y R7 (el contador de programa, PC) se exponen por separado en las siguientes secciones.

En los modos de índice e índice diferido, X es un valor de 16 bits tomado de una segunda palabra de la instrucción. En instrucciones de doble operando, ambos operandos pueden usar estos modos. Estas instrucciones tienen tres palabras.

Las operaciones de autoincremento y autodecremento en un registro son 1 en instrucciones de bytes, 2 en instrucciones de palabra y 2 siempre que se utiliza un modo diferido, ya que la cantidad que las direcciones del registro es un puntero (palabra).

Modos de direccionamiento del contador del programa

Cuando se especifica R7 (el contador de programa), cuatro de los modos de direccionamiento naturalmente producen efectos útiles:

Sólo hay dos usos comunes del modo absoluto, cuya sintaxis combina el modo inmediato y el diferido. El primero es acceder a las ubicaciones reservadas del procesador en 0000-003F. La otra es especificar registros de entrada/salida en el espacio del puerto, ya que los registros para cada dispositivo tienen direcciones de memoria específicas. El modo relativo tiene una sintaxis más simple y es más típico para hacer referencia a variables de programa y destinos de salto. Un programa que utiliza el modo relativo (y el modo diferido relativo) exclusivamente para referencias internas es independiente de la posición ; no contiene suposiciones sobre su propia ubicación, por lo que puede cargarse en una ubicación de memoria arbitraria, o incluso moverse, sin necesidad de ajustar sus direcciones para reflejar su ubicación. Al calcular dichas direcciones en relación con la ubicación actual, el procesador realiza la reubicación sobre la marcha.

Los modos inmediato y absoluto son simplemente modos de autoincremento y autoincremento diferido, respectivamente, aplicados a la PC. Cuando la palabra auxiliar está en la instrucción, el PC para la siguiente instrucción se incrementa automáticamente más allá de la palabra auxiliar. Como la PC siempre apunta a palabras, la operación de autoincremento siempre es en un paso de 2.

Modos de direccionamiento de pila

R6, también escrito SP, se utiliza como pila de hardware para trampas e interrupciones. Una convención impuesta por el conjunto de modos de direccionamiento que proporciona el WD16 es que una pila crece hacia abajo (hacia direcciones más bajas) a medida que se insertan elementos en ella. Cuando se aplica un modo a SP, o a cualquier registro que el programador elija usar como pila de software, los modos de direccionamiento tienen los siguientes efectos:

Aunque las pilas de software pueden contener bytes, SP siempre apunta a una pila de palabras. Las operaciones de autoincremento y autodecremento en SP siempre se realizan en un paso de 2.

Conjunto de instrucciones

La mayoría de las instrucciones WD16 funcionan con bytes y palabras. Los bytes se especifican mediante un número de registro (que identifica el byte de orden inferior del registro) o mediante una ubicación de memoria. Las palabras se especifican mediante un número de registro o mediante la ubicación de memoria del byte de orden inferior, que debe ser un número par. Todos los códigos de operación y direcciones se expresan en hexadecimal . [9]

Instrucciones de doble operando

Los cuatro bits de orden superior especifican la operación a realizar. Dos grupos de seis bits especifican el modo de direccionamiento del operando de origen y el modo de direccionamiento del operando de destino, como se definió anteriormente. Este grupo de instrucciones ocupa el 75% de los códigos de operación disponibles.

Algunas instrucciones de dos operandos utilizan un modo de direccionamiento para un operando y un registro para el segundo operando:

Los siete bits de orden superior especifican la operación a realizar, seis bits especifican el modo de direccionamiento del operando y tres bits especifican un registro o un par de registros. Cuando se utiliza un par de registros (escrito a continuación como "Reg+1:Reg") Reg contiene la porción de orden inferior del operando. El siguiente registro con el número superior contiene la parte de orden superior del operando (o el resto).

Instrucciones de un solo operando

Los diez bits de orden superior especifican la operación a realizar, y el bit 15 generalmente selecciona el direccionamiento de bytes versus palabras. Un único grupo de seis bits especifica el operando tal como se define anteriormente.

Instrucciones breves inmediatas de un solo operando

Los siete bits de orden superior y los bits 5 y 4 especifican la operación a realizar. Un solo grupo de tres bits especifica el registro. Un campo de recuento de cuatro bits contiene un pequeño inmediato o un recuento. En todos los casos se agrega uno a este campo haciendo que el rango sea del 1 al 16.

Instrucciones de punto flotante

Los ocho bits de orden superior especifican la operación a realizar. Dos grupos de cuatro bits especifican el modo de direccionamiento de origen y destino y el registro. Si el campo I = 0, el registro designado contiene la dirección del operando, el equivalente al modo de direccionamiento (Rn). Si el campo I = 1, el registro designado contiene la dirección del operando, el equivalente del modo de direccionamiento @0(Rn).

Instrucciones de transferencia en bloque

Los diez bits de orden superior especifican la operación a realizar. Dos grupos de tres bits especifican los registros de origen y destino. En todos los casos, el registro de origen contiene la dirección de la primera palabra o byte de memoria que se moverá y el registro de destino contiene la dirección de la primera palabra o byte de memoria que recibirá los datos que se moverán. El número de palabras o bytes que se mueven está contenido en R0 como un entero sin signo. El recuento oscila entre 1 y 65536. Estas instrucciones son totalmente interrumpibles.

Instrucciones de sucursal

El byte de orden superior de la instrucción especifica la operación. El byte de orden inferior es una palabra con signo desplazada con respecto a la ubicación actual del contador del programa. Esto permite bifurcaciones directas e inversas en el código. El rango máximo de bifurcación es +128, -127 palabras del código de operación de bifurcación.

En la mayoría de las instrucciones de bifurcación, la toma o no de la bifurcación se basa en el estado de los códigos de condición. Una instrucción de bifurcación suele estar precedida por una instrucción CMP (comparación) o BIT (prueba de bits) de dos operandos o una instrucción TST (prueba) de un operando. Las instrucciones aritméticas y lógicas también establecen los códigos de condición. A diferencia de los procesadores Intel en la arquitectura x86 , las instrucciones MOV también los configuran, por lo que se podría usar una instrucción de bifurcación para bifurcar dependiendo de si el valor movido era cero o negativo.

El alcance limitado de las instrucciones de rama significaba que a medida que el código crece, las direcciones de destino de algunas ramas pueden volverse inalcanzables. El programador cambiaría la instrucción CCO de una palabra por la instrucción JMP de dos palabras. Como JMP no tiene formas condicionales, el programador cambiaría Bcc al sentido opuesto para ramificarse alrededor de JMP.

SOB (Restar uno y bifurcar) es otra instrucción de bifurcación condicional. El registro especificado se reduce en 1 y, si el resultado no es cero, se realiza una rama inversa basada en el desplazamiento de la palabra de 6 bits.

Instrucciones de subrutina

JSR llama a una subrutina. Un grupo de seis bits especifica el modo de direccionamiento. La instrucción JSR puede guardar cualquier registro en la pila. Los programas que no necesitan esta característica especifican PC como registro (JSR PC, dirección) y la subrutina regresa usando RTN PC. Si se llamara a una rutina con, por ejemplo, "JSR R4, dirección", entonces el valor anterior de R4 se guardaría en la parte superior de la pila y la dirección de retorno (justo después de JSR) estaría en R4. Esto permite que la rutina obtenga acceso a valores codificados en línea especificando (R4)+ o a punteros en línea especificando @(R4)+. El incremento automático pasa de estos datos hasta el punto en el que se reanuda el código de la persona que llama. Tal rutina especificaría que RTN R4 regrese a su llamador.

El formulario JSR PC,@(SP)+ se puede utilizar para implementar corrutinas . Inicialmente, la dirección de entrada de la corrutina se coloca en la pila y desde ese punto la instrucción JSR PC,@(SP)+ se utiliza tanto para la llamada como para la declaración de devolución. El resultado de esta instrucción JSR es intercambiar el contenido de la PC y el elemento superior de la pila, y así permitir que las dos rutinas intercambien el control y reanuden la operación donde cada una fue terminada por el intercambio anterior.

PRTN elimina una serie de parámetros de la pila y regresa. PRTN es la respuesta del WD16 a la complicada instrucción MARK del PDP-11. A diferencia de MARK, PRTN se ejecuta en el espacio del programa y puede utilizar cualquier registro como registro de enlace. Para esta explicación, se utilizará R5 como enlace. Primero, la persona que llama empuja R5 en la pila. A continuación, se puede colocar en la pila cualquier número de argumentos de palabras. Luego, la persona que llama coloca el número de palabras de argumento + 1 en R5. La persona que llama ejecuta una instrucción de dirección JSR R5 que coloca el número de palabras de argumento + 1 en la pila, coloca la dirección de retorno en R5 y salta a la subrutina. Después de ejecutar su código, la subrutina termina con un PRTN R5. PRTN duplica el número en la parte superior de la pila y lo agrega al SP, eliminando los parámetros. Luego, PRTN continúa regresando a la persona que llama con el equivalente a un RTN R5, cargando R5 en la PC y abriendo R5.

Instrucciones de registro único

Estas instrucciones tienen un código de operación de 13 bits y un argumento de registro de tres bits.

Instrucciones de parámetros implícitas

llamadas de supervisor

Estas instrucciones se utilizan para implementar llamadas al sistema operativo (supervisor). Todos tienen un argumento de registro de seis bits. SVCB y SVCC están diseñados para que un argumento para el sistema operativo pueda utilizar la mayoría de los modos de direccionamiento admitidos por el conjunto de instrucciones nativo.

Operaciones de código de condición

Los cuatro códigos de condición en la palabra de estado del procesador (PSW) son

Ubicaciones reservadas con poca memoria

Las ubicaciones de memoria entre 0000 y 003F tienen funciones fijas definidas por el procesador. Todas las direcciones a continuación son direcciones de palabras. [9]

Actuación

La velocidad del procesador WD16 varía según la velocidad del reloj, la configuración de la memoria, el código de operación y los modos de direccionamiento. El tiempo de instrucción tiene hasta tres componentes: recuperación/ejecución de la instrucción en sí y tiempo de acceso para el origen y el destino. Los dos últimos componentes dependen del modo de direccionamiento. Por ejemplo, a 3,3 MHz, una instrucción de la forma ADD  x (R m ), y (R n ) tiene un tiempo de búsqueda/ejecución de 3,3 microsegundos más un tiempo de origen de 2,7 microsegundos y un tiempo de destino de 3,0 microsegundos, para una instrucción total. tiempo de 9,0 microsegundos. El ADD R m ,R n registro a registro se ejecuta en 3,3 microsegundos. El punto flotante es significativamente más lento. Una instrucción de suma flotante de precisión única y media (48 bits) suele oscilar entre 54 y 126 microsegundos. La precisión del WD16 es un compromiso entre los flotadores tradicionales de precisión simple y doble. [9]

Por el contrario, la computadora PDP-11 más rápida en ese momento era la PDP-11/70. Una instrucción de la forma ADD  x (R m ), y (R n ) tiene un tiempo de búsqueda/ejecución de 1,35 microsegundos más tiempos de origen y destino de 0,6 microsegundos cada uno, para un tiempo total de instrucción de 2,55 microsegundos. Cualquier caso en el que la memoria direccionada no estuviera en la caché suma 1,02 microsegundos. El ADD R m ,R n de registro a registro podría ejecutarse desde la memoria caché en 0,3 microsegundos. [13] Una instrucción de suma flotante de precisión simple ejecutada por el coprocesador FP11-C podría oscilar entre 0,9 y 2,5 microsegundos más el tiempo para recuperar los operandos, que podría oscilar hasta 4,2 microsegundos. [14]

Las instrucciones de transferencia en bloque WD16 aproximadamente duplican la velocidad de los movimientos y bloquean las E/S. Una palabra movida con MOV (R1)+,(R2)+, SOB R0,loopinstrucciones tarda 9,6 microsegundos por iteración. El MBWU R1,R2equivalente tarda 4,8 microsegundos por iteración.

La Asociación de Usuarios de Computadoras realizó una serie de pruebas comparativas en un sistema basado en AM-100T que costó $35,680 (equivalente a $131,941 en 2023). Descubrieron que su punto de referencia vinculado a la CPU se ejecutó en 31,4 segundos en el AM-100T, en comparación con los 218 segundos del sistema promedio de un solo usuario en el rango de precios de $15,000 a $25,000. [15] En un grupo de computadoras multiusuario con un precio de entre $ 25.000 y $ 50.000, el AM-100T estaba en el "tercio superior" en velocidad. [dieciséis]

El Creative Computing Benchmark de mayo de 1984 colocó al WD16 (en la aplicación AM-100T) en el puesto 34 de 183 máquinas probadas. El tiempo transcurrido fue de 10 segundos, frente a los 24 segundos del IBM PC . [17]

Emulador

Virtual Alpha Micro es un emulador WD16 de código abierto. Escrito en C, emula el procesador WD16 y el entorno de hardware Alpha Micro AM-100. El autor afirma que se ejecuta en escritorios Linux (incluido Raspberry Pi), Windows y Macintosh, aunque no se proporcionan archivos binarios. Ejecutará el sistema operativo Alpha Micro (AMOS) y todos los programas asociados. En 2002, Alpha Micro otorgó un permiso limitado para distribuir archivos binarios AMOS 4.x o 5.0, incluidos los manuales, únicamente para uso aficionado. [18]

Ver también

Arquitectura PDP-11

Referencias

  1. ^ Flystra, Daniel (abril de 1977). "El nuevo sistema para aficionados admite el tiempo compartido" (PDF) . Byte . 2 (4): 142–144 . Consultado el 21 de noviembre de 2022 .
  2. ^ Wilcox, Dick (enero de 1977). "Un micro de 16 bits similar al PDP-11 para el autobús S-100". Revista de calistenia y ortodoncia informática del Dr. Dobbs . 2 (1): 3–7 . Consultado el 14 de junio de 2022 .
  3. ^ Manual de usuario del microprocesador MCP-1600 (PDF) . Occidente digital. 1975 . Consultado el 28 de abril de 2022 .
  4. ^ Stan, vietnamita (mayo de 1983). «La batalla de los sistemas operativos de disco» (PDF) . Computadoras y electrónica . 21 (5): 19 . Consultado el 8 de junio de 2023 .
  5. ^ Craig, John (abril de 1977). "En torno a la industria" (PDF) . Kilobaud: La revista Small Computer (4): 10 . Consultado el 23 de noviembre de 2022 .
  6. ^ ab Kee, Hank (agosto de 1981). "Alpha Micro System revisitado" (PDF) . Microsistemas . 2 (4): 26 . Consultado el 1 de marzo de 2022 .
  7. ^ Fox, Tom (enero de 1982). "Sistemas empresariales para el 82". Era de la interfaz . 7 (1): 75 . Consultado el 3 de noviembre de 2022 .
  8. ^ "Alpha Microsystems logra ventas récord". InfoMundo . 4 (44): 11. 8 de noviembre de 1982 . Consultado el 3 de noviembre de 2022 .
  9. ^ abcdef "Manual de referencia del programador de microcomputadoras WD16" (PDF) . Occidente digital . Consultado el 10 de diciembre de 2021 .
  10. «Manual Técnico AM-100» (PDF) . Microsistemas Alfa . Consultado el 19 de diciembre de 2021 .
  11. ^ "Alfa Micro AM100". Museo de Computadores Obsoletos . Consultado el 19 de diciembre de 2021 .
  12. ^ Gestión de memoria con el controlador de partición de memoria (PDF) (A01 ed.). Alfa Micro. Octubre de 1981. págs. 139-155 . Consultado el 14 de junio de 2022 .
  13. ^ Manual del procesador PDP-11/70 (PDF) . DIC. 1976. Apéndice C, Calendario de instrucciones.
  14. ^ Manual del procesador DEC PDP-11, 1975, páginas 379-391, sincronización de instrucciones FP11-C
  15. ^ "Alfa Micro AM-100T". Informe comparativo de la Asociación de usuarios de computadoras . 3.2 (6): 9 de noviembre de 1980 . Consultado el 3 de noviembre de 2022 .
  16. ^ "Resumen de 12 números". Asociación de Usuarios de Informática: Informe de Referencia . 3.2 (14): 4 de junio de 1982 . Consultado el 3 de noviembre de 2022 .
  17. ^ Ahl, David H. (mayo de 1984). "Parámetro de referencia de la informática creativa". Revista Computación Creativa . 10 (5): 6 . Consultado el 2 de noviembre de 2022 .
  18. ^ Navidad, Mike. «VAM Virtual Alfa Micro» . Consultado el 13 de julio de 2022 .

enlaces externos