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 el miniordenador de gama baja DEC LSI-11 y el procesador Pascal MicroEngine . Los tres sistemas se diferenciaban principalmente en su microcódigo , lo que otorgaba a cada uno 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 máquina del PDP-11. [ 1 ] El conjunto de instrucciones y el microcódigo 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 resultar en hasta diez accesos a memoria.
El WD16 se implementa en cinco paquetes DIP de 40 pines . La velocidad máxima de reloj es de 3,3 MHz. [ 3 ] Su interfaz con la memoria se realiza mediante un bus de datos/direcciones multiplexado de 16 bits. [ 4 ]
El WD16 es más conocido por su uso en las placas de procesador AM-100 y AM-100/T de Alpha Microsystems . [ 5 ] Se presentó un prototipo en 1977. [ 6 ] En 1981 había al menos 5000 computadoras Alpha Micro basadas en el WD16. [ 7 ] Incluso en 1982, las Alpha Micro basadas en el WD16 todavía se caracterizaban como "supermicro". [ 8 ] El WD16 fue reemplazado por el Motorola 68000 en junio de 1982. [ 9 ]
registros de la CPU
La CPU contiene ocho registros de propósito general de 16 bits , de R0 a R7. Estos registros pueden utilizarse para cualquier propósito, con las siguientes excepciones: El registro R7 es el contador de programa (PC). Si bien cualquier registro puede utilizarse como puntero de pila, R6 es el puntero de pila (SP) utilizado para interrupciones y trampas de hardware. R0 es el contador de las instrucciones de transferencia de bloques. [ 10 ]
Memoria
Formatos de datos
La unidad más pequeña de memoria direccionable y escribible es el byte de 8 bits . Los bytes también pueden almacenarse en la mitad inferior de los registros R0 a R5. [ 10 ]
Las palabras de 16 bits se almacenan en formato little-endian , con los bytes menos significativos en la dirección más baja. Las palabras siempre se alinean con direcciones de memoria pares. Las palabras pueden almacenarse en los registros R0 a R7.
Las palabras dobles de 32 bits solo se pueden almacenar en pares de registros, donde la palabra de menor valor se guarda en el registro de menor número. Los valores de 32 bits se utilizan en las instrucciones MUL, DIV y algunas instrucciones de rotación y desplazamiento aritmético .
Los valores de punto flotante tienen 48 bits de longitud y solo se pueden almacenar en memoria. Este formato se sitúa a medio camino entre los formatos de punto flotante de precisión simple y doble. Se almacenan en un formato middle-endian inusual , a veces denominado "PDP-endian". Los valores de punto flotante siempre se alinean a direcciones pares. La primera palabra contiene el signo, el exponente y el byte más significativo 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 menos significativos de la mantisa. El formato completo es el siguiente:
1. Un signo de 1 bit para el número completo, 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 a -128. El único número válido con un exponente de -128 es el cero absoluto (todo ceros).
3. Una mantisa de 40 bits con el bit más significativo 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 . [ 11 ] Como la mayoría de los ordenadores AM-100 se utilizaban como ordenadores multiusuario, la memoria solía ampliarse más allá de 64K con conmutación de bancos . Aunque el AM-100 podía configurarse para hasta 22 usuarios y 512 Kilobytes de RAM, [ 7 ] una configuración de memoria típica para un AM-100 de 9 usuarios podría estar en el rango de 352 Kilobytes. [ 12 ] 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 memoria en incrementos de 256 bytes. [ 13 ]
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 operando de seis bits es la siguiente: [ 10 ]
En las siguientes secciones, cada elemento incluye un ejemplo de cómo se escribiría el operando en lenguaje ensamblador . Rn se refiere a uno de los ocho registros, escritos de R0 a R7.
Modos de direccionamiento de registro general
Los siguientes ocho modos se pueden aplicar a cualquier registro general. Sus efectos al aplicarse a R6 (el puntero de pila, SP) y R7 (el contador de programa, PC) se detallan por separado en las siguientes secciones.
En los modos de índice y de índice diferido, X es un valor de 16 bits tomado de la segunda palabra de la instrucción. En las instrucciones de doble operando, ambos operandos pueden usar estos modos. Dichas instrucciones tienen una longitud de tres palabras.
Las operaciones de autoincremento y autodecremento en un registro se realizan de 1 en instrucciones de byte, de 2 en instrucciones de palabra y de 2 siempre que se utilice un modo diferido, ya que la cantidad a la que apunta el registro es un puntero (de palabra).
Modos de direccionamiento del contador de programa
Cuando se especifica R7 (el contador de programa), cuatro de los modos de direccionamiento producen efectos útiles de forma natural:
El modo absoluto, cuya sintaxis combina los modos inmediato y diferido, tiene dos usos comunes. El primero consiste en acceder a las ubicaciones reservadas del procesador en 0000-003F. El segundo, en especificar registros de entrada/salida en el espacio de puertos, ya que los registros de cada dispositivo tienen direcciones de memoria específicas. El modo relativo tiene una sintaxis más sencilla y se utiliza con mayor frecuencia para referirse a variables de programa y destinos de salto. Un programa que utiliza exclusivamente el modo relativo (y el modo relativo diferido) para referencias internas es independiente de la posición ; no requiere ninguna suposición 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, respectivamente, modos de autoincremento y autoincremento diferido aplicados al contador de programa (PC). Cuando la palabra auxiliar está presente en la instrucción, el PC para la siguiente instrucción se incrementa automáticamente más allá de dicha palabra. Dado que el PC siempre apunta a palabras, la operación de autoincremento se realiza siempre con 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 la pila crece hacia abajo (hacia direcciones más bajas) a medida que se agregan elementos a 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 con un paso de 2.
Conjunto de instrucciones
La mayoría de las instrucciones WD16 operan 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 . [ 10 ]
Instrucciones para 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, tal 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 (que se indica a continuación como "Reg+1:Reg"), Reg contiene la parte de orden inferior del operando. El siguiente registro de orden superior contiene la parte de orden superior del operando (o el resto).
Instrucciones para un solo operando
Los diez bits de orden superior especifican la operación a realizar, y el bit 15 generalmente selecciona el direccionamiento por byte o por palabra. Un único grupo de seis bits especifica el operando, tal como se definió anteriormente.
Instrucciones breves e inmediatas para un solo operando
Los siete bits de orden superior y los bits 5 y 4 especifican la operación a realizar. Un único grupo de tres bits especifica el registro. Un campo de conteo de cuatro bits contiene un valor inmediato pequeño o un contador. En todos los casos, se suma uno a este campo, lo que da como resultado un rango de 1 a 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, así como el registro. Si el campo I = 0, el registro designado contiene la dirección del operando, equivalente al modo de direccionamiento (Rn). Si el campo I = 1, el registro designado contiene la dirección del operando, equivalente al modo de direccionamiento @0(Rn).
Los códigos de operación F500 a FFFF se asignan a un cuarto microprocesador para implementar once instrucciones de punto flotante adicionales. No hay evidencia de que este cuarto microprocesador haya sido fabricado. Cuando un procesador WD16 estándar ejecuta los códigos de operación F500 a FFFF, se activa la interrupción del código de operación reservado, cargando el contador de programa (PC) desde 001A.
Instrucciones para la transferencia de bloques
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 va a mover, y el registro de destino contiene la dirección de la primera palabra o byte de memoria que recibirá los datos que se están moviendo. El número de palabras o bytes que se mueven se almacena en R0 como un entero sin signo. El valor oscila entre 1 y 65536. Estas instrucciones son totalmente interrumpibles.
Instrucciones de la sucursal
El byte de orden superior de la instrucción especifica la operación. El byte de orden inferior es un desplazamiento de palabra con signo relativo a la posición actual del contador de programa. Esto permite saltos hacia adelante y hacia atrás en el código. El rango máximo de salto es de +128 a -127 palabras desde el código de la operación de salto.
En la mayoría de las instrucciones de salto, la decisión de si se ejecuta o no depende del estado de los códigos de condición. Una instrucción de salto suele ir precedida de una instrucción CMP (comparar) o BIT (prueba de bit) de dos operandos, o de 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 con arquitectura x86 , las instrucciones MOV también los establecen, por lo que una instrucción de salto podría utilizarse para realizar un salto dependiendo de si el valor movido es cero o negativo.
El alcance limitado de las instrucciones de salto implicaba que, a medida que el código crecía, las direcciones de destino de algunos saltos podían volverse inaccesibles. El programador cambiaba la instrucción Bcc de una palabra por la instrucción JMP de dos palabras. Como JMP no tiene formas condicionales, el programador cambiaba Bcc a su sentido opuesto para evitar el salto JMP.
SOB (Restar uno y saltar) es otra instrucción de salto condicional. El registro especificado se decrementa en 1 y, si el resultado no es cero, se realiza un salto inverso basado en el desplazamiento de 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 el registro ( JSR PC, address) y la subrutina regresa usando RTN PC. Si una rutina se llama con, por ejemplo JSR R4, address, 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 autoincremento avanza más allá de estos datos, hasta el punto en el que se reanuda el código del llamador. Dicha rutina especificaría RTN R4para regresar a su llamador.
Esta JSR PC,@(SP)+forma se puede utilizar para implementar corrutinas . Inicialmente, la dirección de entrada de la corrutina se coloca en la pila y, a partir de ese momento, la JSR PC,@(SP)+instrucción se utiliza tanto para la llamada como para la instrucción de retorno. El resultado de esta instrucción JSR es intercambiar el contenido del contador de programa (PC) y el elemento superior de la pila, lo que permite que las dos rutinas intercambien el control y reanuden su ejecución desde donde cada una finalizó con el intercambio anterior.
PRTN elimina varios parámetros de la pila y regresa. PRTN es la respuesta del WD16 a la compleja instrucción MARK del PDP-11. A diferencia de MARK, PRTN se ejecuta en el espacio de programa y puede usar cualquier registro como registro de enlace. Para esta explicación, se usará R5 como registro de enlace. Primero, el llamador coloca R5 en la pila. Luego, se puede colocar cualquier número de argumentos de palabra en la pila. El llamador coloca entonces el número de palabras de argumento + 1 en R5. El llamador ejecuta una JSR R5,addressinstrucción 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 a SP, eliminando los parámetros. Luego PRTN continúa regresando al llamador con el equivalente a un RTN R5, cargando R5 en PC y extrayendo R5.
Instrucciones para un solo registro
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ícitos
Llamadas del supervisor
Estas instrucciones se utilizan para implementar llamadas al sistema operativo (supervisor). Todas tienen un argumento de registro de seis bits. SVCB y SVCC están diseñadas para que un argumento al sistema operativo pueda utilizar la mayoría de los modos de direccionamiento compatibles con el conjunto de instrucciones nativo.
Operaciones con código de condición
Los cuatro códigos de condición en la palabra de estado del procesador (PSW) son:
- N indica un valor negativo
- Z indica una condición cero (igual)
- V indica una condición de desbordamiento , y
- C indica una condición de acarreo .
Interrumpe
El WD16 tiene tres tipos de interrupciones: no vectorizadas, vectorizadas y de parada. Las interrupciones no vectorizadas y vectorizadas se habilitan y deshabilitan mediante las instrucciones IENy IDS. La interrupción de parada no se puede deshabilitar.
Una interrupción no vectorizada (NVI) tiene prioridad sobre las interrupciones vectorizadas. La NVI se utiliza únicamente para dos funciones: fallo de alimentación y reloj de línea. (Un reloj de línea suele ser una entrada de 50 o 60 Hz utilizada para la división y el control del tiempo ). Cuando se recibe una NVI, se activan PS y PC. Se comprueba el estado de fallo de alimentación. Si se trata de un fallo de alimentación, el WD16 salta a la dirección almacenada en 0014. Si no se trata de un fallo de alimentación, se asume un pulso de reloj de línea y el WD16 salta a la dirección almacenada en 002A.
Se admiten dieciséis vectores de interrupción . Cuando se recibe una interrupción vectorizada , se envían PS y PC. Durante el reconocimiento de interrupción, el WD16 acepta un número de interrupción de cuatro bits proporcionado por el dispositivo que genera la interrupción. La dirección de la tabla de vectores de interrupción se obtiene de 0028 y se le suma el número de interrupción, apuntando a una de las 16 palabras de la tabla. Se obtiene un desplazamiento de palabra de la tabla y se suma a su propia dirección de tabla. El resultado se carga en PC, lo que provoca un salto a la rutina de servicio de interrupción . Las interrupciones simultáneas que se toman están determinadas por una máscara de prioridad de interrupción de 16 bits que se implementa principalmente con hardware externo. El WD16 almacena la máscara de prioridad actual en 002E mientras transmite la máscara directamente al hardware. La máscara se manipula con las instrucciones MSKO, SAVS, y RSTS. Si se requieren más de 16 interrupciones vectorizadas, se pueden iniciar a través de NVI y enviar con la IAKinstrucción .
La interrupción de parada (halt) no se puede enmascarar y puede utilizarse como interruptor de programador u para otros fines, según la configuración de sus puentes. Aunque la parada puede modificar la dirección de ejecución y no se enmascara con la habilitación de interrupciones, no se puede utilizar como una interrupción no enmascarable porque el contador de programa (PC) no se activa. Dependiendo de los puentes, la línea de parada puede incluso no detenerse. Si HALTse ejecuta la instrucción, la línea de parada puede borrarla, también dependiendo de la configuración de los puentes.
Ubicaciones reservadas con poca memoria
Las ubicaciones de memoria entre 0000 y 003F tienen funciones fijas definidas por el procesador. Todas las direcciones que aparecen a continuación son direcciones de palabra. [ 10 ]
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. La temporización de las instrucciones tiene hasta tres componentes: la búsqueda/ejecución de la instrucción en sí y el tiempo de acceso al origen y al 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 un tiempo total de instrucción de 9,0 microsegundos. La instrucción ADD R m ,R n de registro a registro se ejecuta en 3,3 microsegundos. El punto flotante es significativamente más lento. Una instrucción de suma de punto flotante de precisión simple y media (48 bits) suele oscilar entre 54 y 126 microsegundos. La precisión del WD16 es un compromiso entre los números de punto flotante de precisión simple y doble tradicionales. [ 10 ]
En contraste, el ordenador PDP-11 más rápido de la época era el 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 esté en la caché añade 1,02 microsegundos. La instrucción ADD de registro a registro R m ,R n podía ejecutarse desde la caché en 0,3 microsegundos. [ 14 ] Una instrucción de suma de punto flotante de precisión simple ejecutada por el coprocesador FP11-C podía variar de 0,9 a 2,5 microsegundos más el tiempo para buscar los operandos, que podía llegar hasta 4,2 microsegundos. [ 15 ]
Las instrucciones de transferencia de bloques WD16 duplican aproximadamente la velocidad de movimiento y de entrada/salida de bloques. 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 de rendimiento en una Alpha Microsystems AM-100T basada en WD16 con un costo de $35,680 ( equivalente a $139,420 en 2025 ). Descubrieron que su prueba de rendimiento, que dependía principalmente de la CPU, se ejecutó en 31.4 segundos en la AM-100T, en comparación con los 218 segundos que tardó el sistema promedio de un solo usuario en el rango de precios de $15,000 a $25,000. [ 16 ] En un grupo de computadoras multiusuario con precios entre $25,000 y $50,000, la AM-100T se ubicó en el tercio superior en cuanto a velocidad. [ 17 ]
La prueba de rendimiento Creative Computing Benchmark de mayo de 1984 situó al WD16 (en la aplicación AM-100T) en el puesto número 34 de 183 máquinas probadas. El tiempo transcurrido fue de 10 segundos, en comparación con los 24 segundos del IBM PC . [ 18 ]
Emulador
Virtual Alpha Micro es un emulador de código abierto para el procesador WD16. Escrito en C, emula el procesador WD16 y el entorno de hardware Alpha Micro AM-100. El autor afirma que funciona en Linux (incluida Raspberry Pi ), Windows y Macintosh, aunque no se proporcionan binarios. Ejecuta el sistema operativo Alpha Micro (AMOS) y todos los programas asociados. En 2002, Alpha Micro otorgó permiso limitado para distribuir binarios de AMOS 4.x o 5.0, incluidos los manuales, únicamente para uso aficionado. [ 19 ]
Véase también
Referencias
- ^ 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 .
- ↑ Wilcox, Dick (enero de 1977). "Un microprocesador de 16 bits similar al PDP-11 para el bus S-100" . Dr. Dobbs's Journal of Computer Calisthenics and Orthodontia . 2 (1): 3– 7. Recuperado el 14 de junio de 2022 .
- ↑ "Conjunto de procesadores de 16 bits, NMOS, MCP-1600/WD-16" (PDF) . Electronic Design . 25 (21): 174. 11 de octubre de 1977. Consultado el 6 de mayo de 2025 .
- ↑ Manual de usuario del microprocesador MCP-1600 (PDF) . Western Digital. 1975. Consultado el 28 de abril de 2022 .
- ↑ Stan, Viet (mayo de 1983). "La batalla de los sistemas operativos de disco" (PDF) . Computers & Electronics . 21 (5): 19. Recuperado el 8 de junio de 2023 .
- ↑ Craig, John (abril de 1977). "Alrededor de la industria" (PDF) . Kilobaud: The Small Computer Magazine (4): 10. Recuperado el 23 de noviembre de 2022 .
- 1 2 Kee, Hank (agosto de 1981). "Alpha Micro System Revisited" (PDF) . Microsystems . 2 (4): 26. Recuperado el 1 de marzo de 2022 .
- ↑ Fox, Tom (enero de 1982). "Sistemas empresariales para el '82" . Interface Age . 7 (1): 75. Recuperado el 3 de noviembre de 2022 .
- ↑ "Alpha Microsystems logra ventas récord" . InfoWorld . 4 (44): 11. 8 de noviembre de 1982. Consultado el 3 de noviembre de 2022 .
- 1 2 3 4 5 6 Wilcox, Dick (4 de octubre de 1976). Manual de referencia del programador de microcomputadoras WD16 (PDF) . Western Digital . Recuperado el 21 de agosto de 2025 .
- ↑ "Manual técnico para AM-100" (PDF) . Alpha Microsystems . Consultado el 19 de diciembre de 2021 .
- ↑ "Alpha Micro AM100" . Museo de Computadoras Obsoletas . Consultado el 19 de diciembre de 2021 .
- ↑ Gestión de memoria con el controlador de partición de memoria ( PDF) (ed. A01 ). Alpha Micro. Octubre de 1981. págs. 139–155 . Consultado el 14 de junio de 2022 .
- ↑ Manual del procesador PDP-11/70 (PDF) . DIC. 1976. Apéndice C, Sincronización de instrucciones.
- ↑ Manual del procesador DEC PDP-11, 1975, páginas 379-391, Sincronización de instrucciones FP11-C
- ↑ "Alpha Micro AM-100T" . Informe de referencia de la Asociación de Usuarios de Computadoras . 3.2 (6): 9. Noviembre de 1980. Recuperado el 3 de noviembre de 2022 .
- ↑ "Resumen del número 12" . Asociación de Usuarios de Computadoras: Informe de Referencia . 3.2 (14): 4. Junio de 1982. Recuperado el 3 de noviembre de 2022 .
- ↑ Ahl, David H. (mayo de 1984). "Creative Computing Benchmark" . Creative Computing Magazine . 10 (5): 6. Recuperado el 2 de noviembre de 2022 .
- ↑ Noel, Mike. "VAM Virtual Alpha Micro" . Consultado el 13 de julio de 2022 .
Enlaces externos
- Fotos de AM-100 y AM-100T
- microprocesadores de 16 bits
- Productos de Western Digital
- Introducciones relacionadas con la informática en 1976