El COSMAC (Complementary Symmetry Monolithic Array Computer) es una familia de microprocesadores de 8 bits introducida por RCA . Históricamente es conocido por ser el primer microprocesador CMOS . [1] El primer modelo de producción fue el CDP1801R y el CDP1801U de dos chips , que luego se combinaron en el CDP1802 de un solo chip . [2] El 1802 representó la mayoría de la producción de COSMAC, y hoy en día toda la línea se conoce simplemente como RCA 1802 .
El diseño del procesador se remonta a un ordenador doméstico experimental diseñado por Joseph Weisbecker a principios de los años 1970, construido en su casa utilizando componentes TTL . RCA comenzó a desarrollar la versión CMOS del diseño del procesador en 1973, probándolo en 1974 con planes de pasar a una implementación de un solo chip de inmediato. Jerry Herzog dirigió el diseño de la versión de un solo chip, que se probó en 1975 y entró en producción en 1976. [3] [4]
A diferencia de la mayoría de los diseños de la época, que se fabricaban utilizando el proceso NMOS , el COSMAC se implementó en forma CMOS y utilizó lógica estática . Esto le permitió funcionar con configuraciones de energía más bajas e incluso detenerse por completo; además, funcionaría a menor temperatura y no generaría tanto calor como los chips NMOS. RCA también produjo versiones endurecidas por radiación , que encontraron uso en el campo aeroespacial. [5] Estas siguen en producción a partir de 2022, [5] y a partir de 2008 continuaron siendo producidas por Renesas (anteriormente Intersil ). [6] [7]
Los sucesores del 1802 son el CDP1804, el CDP1805 y el CDP1806, que tienen un conjunto de instrucciones ampliado, otras características mejoradas (como RAM y ROM en chip y temporizador integrado), y algunas versiones funcionan a velocidades de reloj más rápidas, aunque no hay una diferencia de velocidad significativa. También se han perdido algunas características, como la funcionalidad del cargador de arranque automático DMA . También hay algunos cambios menores en la función de los pines, pero la línea sigue produciéndose en su formato original de paquete en línea dual (DIP) de 40 pines. [ ¿cuándo? ]
Joseph Weisbecker llevaba mucho tiempo fascinado por el potencial de los ordenadores domésticos, y ya en 1955 había declarado que esperaba que algún día se incorporaran prácticamente a todos los dispositivos. La tecnología de la época hacía imposible la creación de pequeños ordenadores integrados, pero la introducción del circuito integrado (CI) en los años 60 cambió radicalmente las cosas. En 1974, describió las posibilidades en un artículo de IEEE Computer:
Durante veinte años, el hardware de las computadoras se ha vuelto cada vez más complejo, los lenguajes más enrevesados y los sistemas operativos menos eficientes. Ahora, las microcomputadoras nos brindan a algunos de nosotros la oportunidad de volver a sistemas más simples. Las microcomputadoras económicas podrían abrir nuevos mercados inmensos. [8]
A principios de 1970, Weisbecker comenzó a diseñar una pequeña máquina que utilizaba circuitos integrados de lógica transistor-transistor (TTL) de RCA para construir el procesador. Las demás piezas, interruptores, lámparas y demás, las tuvo que comprar en Radio Shack , distribuyendo deliberadamente sus compras en cuatro tiendas para que nadie le preguntara por qué compraba tantas piezas. [9] El diseño se estaba ejecutando en octubre de 1971 y contenía 100 chips [1] repartidos en varias placas de circuitos . [1]
El resultado, al que llamó FRED, aparentemente para Dispositivo Educativo Recreativo Flexible, fue empaquetado en una caja que no era muy diferente del Altair 8800 de unos años más tarde, con interruptores de palanca en el panel frontal para entrada, lámparas para salida y más tarde agregando un teclado hexagonal . [9] Weisbecker agregó nuevas características continuamente y en 1972 había ganado un generador de caracteres y la capacidad de cargar y guardar programas en cintas de casete . [1]
La hija de Weisbecker, Joyce Weisbecker , se sintió inmediatamente atraída por el sistema y comenzó a escribir programas para él. Esto incluía varios juegos, que fueron portados a máquinas posteriores basadas en el COSMAC. Cuando RCA entró en el negocio de las consolas de juegos a finales de la década de 1970, estos juegos se grabaron en formato de cartucho ROM y Joyce se convirtió en la primera desarrolladora de videojuegos comerciales conocida. [9]
Weisbecker hizo una demostración de la máquina a la dirección de RCA durante este período, pero al principio hubo poco interés. Esto fue poco después de que David Sarnoff se jubilara y le pasara el puesto de director ejecutivo a su hijo, Robert Sarnoff . Robert estaba más interesado en desarrollar el sector de medios de comunicación de la empresa mientras salía con estrellas de la grabación, ignorando a RCA Laboratories a pesar de que allí se estaban produciendo varios desarrollos líderes en la industria. Parte del escepticismo mostrado por la dirección puede haber tenido que ver con la reciente venta por parte de la empresa de su negocio de ordenadores mainframe a Sperry Rand con una enorme amortización . [9]
Finalmente, la empresa se interesó en el sistema y comenzó a adaptarlo a su nuevo sistema de fabricación COS/MOS. Un informe de laboratorio de 1973 [b] hace referencia a un "prototipo" que se entregó en 1972, pero es probable que se refiera a la implementación TTL original. Continúa señalando que se hizo un esfuerzo para reducir el procesador a una implementación de dos chips con entregas en COS/MOS en 1974. Es aquí donde se hace referencia al procesador por primera vez como COSMAC, por COmplementary-Symmetry-Monolithic-Array Computer. Continúa afirmando que otro laboratorio producirá el sistema en un formato de silicio sobre zafiro de 8 chips , aunque la fecha es simplemente "poco después" de las versiones CMOS, y que ya se estaban planificando planes para una versión de un solo chip. [10] [c]
Aunque RCA comenzó a desarrollar el COSMAC a principios de los años 70, pasó algún tiempo hasta que presentó sus propios productos basados en él. En 1975, se experimentó con un prototipo de máquina de juegos arcade con ROM intercambiables para el negocio de las máquinas tragamonedas, pero finalmente se abandonó. [9]
Mientras tanto, Weisbecker había adaptado el FRED original, conocido dentro de RCA como System 00 en ese momento, utilizando el nuevo chipset para producir un sistema de placa única muy simplificado conocido entonces como COSMAC ELF . Las instrucciones de construcción se describieron en un artículo en la revista Popular Electronics en 1976, y una versión ampliada con varias actualizaciones en un segundo artículo en 1977. Una característica única del ELF es que no requería ninguna memoria de solo lectura (ROM) para el inicio, en su lugar, se utilizaba el sistema de acceso directo a memoria (DMA) del procesador para leer los interruptores del panel frontal directamente en la memoria. [9]
RCA debatió si introducir versiones preempaquetadas del ELF en el mercado. Mientras debatían, un desarrollo posterior condujo a una máquina simplificada que combinaba el ELF con un nuevo chip controlador de pantalla , el CDP1861 , para producir una consola de juegos . Durante este tiempo, Joyce fue contratada por RCA para escribir varios videojuegos para la plataforma, incluido un producto educativo de estilo de concurso en asociación con Random House , una de las muchas empresas que habían sido adquiridas por las oleadas de compras de RCA. [9]
Después de un año de debates, la compañía finalmente decidió lanzar dos productos para el mercado masivo basados en la plataforma, un equipo informático conocido como COSMAC VIP y una consola de juegos conocida como RCA Studio II . Las máquinas habían estado disponibles desde 1975, pero la Studio II se anunció recién en enero de 1977, un par de meses después de que Fairchild Channel F se convirtiera en la primera máquina basada en cartuchos en el mercado. Ambas pronto quedarían eclipsadas y en gran medida olvidadas debido al lanzamiento del Atari 2600 más tarde ese año. RCA canceló la Studio II en febrero de 1978. [9]
RCA también lanzó una serie de sistemas informáticos modulares, basados en el formato RCA Microboard del lanzamiento inicial del modelo 1802, hasta el colapso de la propia RCA. Estos sistemas estaban destinados principalmente a aplicaciones industriales y desarrollo de sistemas, y eran altamente configurables. [12]
El COSMAC era único entre los primeros procesadores de 8 bits en el sentido de que había sido diseñado explícitamente para su uso en microcomputadoras; otros diseños de la época apuntaban invariablemente al espacio de procesadores integrados , y aquellos que habían sido diseñados para su uso en computadoras eran generalmente sistemas más complejos, y a menudo de 16 bits. Aunque el COSMAC había sido diseñado para su uso en computadoras, la lenta entrada al mercado de RCA y los intentos de obtener poco apoyo en este mercado finalmente fracasaron y otros procesadores como el MOS 6502 y el Zilog Z80 llegarían a dominar este mercado. Irónicamente, el COSMAC finalmente encontraría un gran éxito en el mercado integrado, porque su diseño CMOS le permitía funcionar a menor potencia. A fines de la década de 1970, se usaba ampliamente en muchos entornos industriales, y especialmente en el aeroespacial. Múltiples 1802 se usaron como procesadores de E/S auxiliares en la sonda Galileo a Júpiter en 1989, y sigue en uso en funciones similares hasta el día de hoy. [9]
Varios de los primeros microordenadores se basaron en el 1802, incluidos el COSMAC ELF (1976), el Netronics ELF II , el Quest SuperELF, el COSMAC VIP , el Comx-35 , el finlandés Telmac 1800 , el Telmac TMC-600 y el Oscom Nano, el yugoslavo Pecom 32 y 64 , y los sistemas CyberVision 2001 vendidos a través de Montgomery Ward a finales de los años 1970, [13] así como la consola de videojuegos RCA Studio II (una de las primeras consolas en utilizar gráficos de mapa de bits ). El sistema de entrenamiento informático de placa única Edukit, similar a un COSMAC Elf ampliado , fue ofrecido por Modus Systems Ltd. en Gran Bretaña a principios de los años 1980. [14] Infinite Incorporated produjo un entrenador de computadora de consola expandible por bus S-100 basado en 1802 a fines de la década de 1970, llamado UC1800, disponible ensamblado o en forma de kit. [15] [16]
Como parte del trabajo de aficionados a la retroinformática de 1802 , se han construido otros ordenadores más recientemente (posteriores al año 2000), entre ellos el kit de microordenador Membership Card que cabe en una lata de Altoids [17] y el Spare Time Gizmos Elf 2000 (Elf 2K), [18] entre otros. Véase § Emuladores y simuladores para otros sistemas.
El 1802 también se utilizó en instrumentos científicos y productos comerciales. [19] [20]
Los vehículos Chrysler y modelos asociados posteriores a 1980 utilizan el 1802 en su sistema electrónico de combustión pobre de segunda generación, con control electrónico de chispa, uno de los primeros sistemas de control basados en computadora para automóviles a bordo. [21] [22]
El modelo 1802 se utilizó en la fabricación de muchas máquinas de pinball y juegos de video arcade en España. [23]
Se fabricó una versión de alta velocidad del 1802 con tecnología de proceso de semiconductores de silicio sobre zafiro (SOS), que le da un grado de resistencia a la radiación y a las descargas electrostáticas (ESD). [24] Una versión diferente endurecida por radiación del 1802, desarrollada conjuntamente por RCA y Sandia National Laboratories , se construyó en silicio a granel utilizando tecnología C 2 L (lógica COS/MOS cerrada). [25] [26] Junto con sus capacidades de potencia extremadamente baja, esto hace que el chip sea adecuado para aplicaciones espaciales y militares. [25] (Además, en el momento en que se presentó el 1802, muy pocos, si es que había alguno, otros microprocesadores endurecidos por radiación estaban disponibles en el mercado).
El 1802 se utilizó en muchos programas, experimentos, proyectos y módulos de ciencia espacial y naves espaciales, como la nave espacial Galileo , [27] Magellan , [28] el instrumento Plasma Wave Analyzer de la nave espacial Ulysses de la ESA, varios satélites en órbita terrestre [29] y satélites que transportaban radioaficionados. [30]
También se ha verificado a partir de documentación fuente de la NASA que el 1802 se utilizó en el telescopio espacial Hubble . [31]
Varios artículos militares británicos de las décadas de 1980 y 1990 utilizaron el 1802, entre ellos:
El primer lenguaje de alto nivel disponible para el 1802 fue Forth , proporcionado por Forth, Inc. y conocido como MicroFORTH, en 1976 (ver el archivo de Forth Inc). Otros lenguajes de programación disponibles, tanto intérpretes como compiladores, son CHIP-8 (también fue inventado por Joseph Weisbecker ) (y variantes), 8th (una versión de Forth creada por Lee Hart), [33] Tiny BASIC de Tom Pittman , [34] C, varios ensambladores y ensambladores cruzados, y otros. Otros lenguajes especializados fueron utilizados por agencias federales como la NASA y sus instalaciones, incluido el Centro Espacial Johnson, AMES, Goddard, Langley, Marshall y Jet Propulsion Laboratory (JPL), que incluía el compilador cruzado HAL/S, [35] STOIC , un lenguaje similar a Forth, [36] y otros.
Interpreter for Process Structures (IPS), un lenguaje de programación y entorno de desarrollo, fue escrito y utilizado específicamente para el control en tiempo real de los satélites AMSAT .
El chip 1802 y los ordenadores que utilizan el microprocesador han sido emulados y simulados en hardware y/o software por aficionados. Existen tres diseños en VHDL para un FPGA . [37] [38] [39] Se creó un clon de COSMAC Elf de alta velocidad y precisión de bus sin un chip de microprocesador CDP1802 o un chip de vídeo CDP1861 utilizando microcontroladores PIC . [40] Un simulador en línea del COSMAC Elf (mejorado) escrito en JavaScript se ejecuta en el navegador del usuario sin necesidad de descargarlo. [41]
El RCA 1802 tiene un diseño CMOS de núcleo estático sin frecuencia de reloj mínima , de modo que puede funcionar a velocidades muy bajas y bajo consumo, incluida una frecuencia de reloj de cero para suspender el microprocesador sin afectar su funcionamiento.
Tiene dos buses de 8 pines independientes: un bus de datos bidireccional de 8 bits y un bus de direcciones multiplexado en el tiempo , en el que se accede a los 8 bits de orden superior e inferior de la dirección de 16 bits en ciclos de reloj alternativos. Esto contrasta con la mayoría de los diseños de la época, como el MOS 6502 y el Intel 8080 , que utilizaban un bus de direcciones de 16 bits.
El 1802 tiene un puerto de salida (Q) programable y comprobable de un solo bit y cuatro pines de entrada que se comprueban directamente mediante instrucciones de bifurcación (EF1-EF4). Estos pines permiten gestionar tareas de entrada/salida (E/S) sencillas de forma directa y fácil de programar.
Como las instrucciones tardaban entre 16 y 24 ciclos de reloj en completarse, el 1802 no era especialmente rápido. A modo de comparación, el 6502 completa la mayoría de las instrucciones en 2 a 4 ciclos de reloj, y la instrucción más larga (la instrucción oficial) [42] tarda 7 ciclos. [43]
Varios sufijos del número de pieza CDP1802 indican especificaciones técnicas, incluyendo (A, B y C) velocidad de operación (3,2 MHz a 6,4 MHz), temperatura (-40 °C a +85 °C, -55 °C a +125 °C) y rangos de voltaje (4 V a 10,5 V), tipo de encapsulado (D, E, Q) y burn-in (X). Estos fueron de alguna manera estandarizados entre los diversos proveedores de fuentes, incluyendo RCA, Intersil, Harris, Hughes Aircraft y Solid State Scientific (SSS). Hughes usó el prefijo HCMP y SSS usó el prefijo SCP (y posiblemente BCP), en lugar de CDP, y tenía sufijos adicionales que no han sido documentados hasta el momento. (ejemplos: CDP1802A, CDP1802ACE, CDP1802BCD, HCMP1802AP, SCP1802D) [44]
El 1802 es una máquina de bytes de 8 bits, con un soporte mínimo para operaciones de 16 bits, excepto mediante manipulación de 2 bytes. El acumulador primario es el registro "D" de 8 bits (registro de datos). El indicador de acarreo de un solo bit es DF (indicador de datos). La mayoría de las operaciones utilizan el registro D, incluidas las funciones aritméticas y lógicas, y las instrucciones de carga y almacenamiento que hacen referencia a la memoria. La mayoría de las operaciones de 16 bits tienen que trabajar en el byte inferior y luego en el byte superior, a través de D, utilizando el DF como acarreo y préstamo según sea necesario.
Una característica importante del 1802 es un conjunto de dieciséis registros de 16 bits cada uno, utilizados principalmente para direccionamiento. Utilizando la instrucción SEP, puede seleccionar cualquiera de los 16 registros para que sea el contador de programa ; utilizando la instrucción SEX, puede seleccionar cualquiera de los registros de 16 bits para que sea el registro de índice . [45] El registro R0 tiene el uso especial de almacenar la dirección de memoria para el controlador DMA integrado . El registro R1 tiene el uso especial de ser el contador de programa para el manejador de interrupciones. [46]
Existen instrucciones que permiten que los valores de estos registros se configuren y lean a través de D, trabajando por separado los 8 bits superiores e inferiores a la vez. También existen instrucciones para realizar incrementos y decrementos de todo el valor de 16 bits, y algunas instrucciones realizan incrementos y decrementos automáticos, como LDA (avance de carga) y STXD (almacenamiento a través de X y decremento). Las comparaciones de valores y registros de 16 bits también necesitarían usar el registro D como intermediario, utilizando múltiples instrucciones para realizar las operaciones.
El procesador tiene cinco líneas de E/S especiales . Hay una única salida Q que se puede configurar con la instrucción SEQ y restablecer con la instrucción REQ. Hay cuatro entradas externas de un solo bit, EF1, EF2, EF3 y EF4, y hay ocho instrucciones de bifurcación dedicadas a bifurcar condicionalmente en función del estado de esas líneas de entrada. Hay siete instrucciones de puerto de entrada y siete de puerto de salida que utilizan el registro RX y el acumulador D.
Las líneas EF y Q se usaban normalmente para interfaces múltiples en computadoras para aficionados basadas en 1802 debido a su fácil manejo. Era típico que la línea Q controlara un LED de estado , una interfaz de casete , una interfaz RS-232 y el altavoz. Esto significaba que el usuario podía escuchar la transmisión de datos RS-232 y de casete (a menos que se implementara un control de volumen). Tradicionalmente, la línea EF4 está conectada al botón pulsador momentáneo INPUT en el COSMAC Elf. Otros sistemas podrían usar una de las otras líneas.
Hay otros registros y banderas de uso especial, algunos internos y otros utilizables programáticamente: N, P, X e I de 4 bits; T de 8 bits; e IE de 1 bit. En Internet, hay muchas versiones de una Tabla de las Instrucciones 1802, aquí hay un enlace: https://www.atarimagazines.com/computeii/issue3/page52.php Hay una serie de Tablas en el área de Archivos para miembros registrados del club en línea 1802 para el foro en https://groups.io/g/cosmacelf/files. Cada Instrucción es un solo Byte, de 8 Bits. Los 4 Bits a la Izquierda, a veces llamados Dígito Hexadecimal de Orden Superior, tienen que ver con la naturaleza real de la Instrucción, y esos 4 Bits están involucrados con el Registro I. Los 4 bits a la derecha, a veces llamados dígitos hexadecimales de orden inferior, tienen que ver con el registro de trabajo, de donde se extraen o introducen los datos, y esos 4 bits están relacionados con el registro N. Cuando se está ejecutando un programa, las distintas etapas del trabajo y los procesos se almacenan temporalmente en el registro al que apunta el registro N, como sucede cuando se realiza una multiplicación o división larga en una hoja de papel. Por supuesto, a veces los datos se mueven hacia y desde la sección de memoria RAM, y se realizan diferentes ramas del programa, según sea necesario, en el transcurso del tiempo.
Hay tres tipos de ramificación incondicional y condicional en 1802: corta, larga y salteada.
Las ramas cortas son instrucciones de 2 bytes y utilizan un rango de 256 bytes, una dirección de un solo byte y un direccionamiento absoluto de página en el rango de 0 a 255 (FF hexadecimal). No hay ramificaciones relativas. La rama corta siempre salta dentro de la página que contiene el byte de dirección. [46]
Las ramas largas utilizan direccionamiento completo de 16 bits para soportar el espacio de direcciones de memoria de 64K y son las únicas instrucciones de 3 bytes.
Las instrucciones de salto incrementan el PC en uno para el salto corto incondicional o en dos para los saltos largos. Solo el salto largo tiene ramificación condicional.
El procesador no tiene instrucciones RET ni direcciones CALL de subrutinas estándar, aunque se pueden simular. El diseño de 16 registros permite algunos mecanismos de llamada y retorno de subrutinas interesantes, aunque son más adecuados para programas pequeños que para la codificación de propósito general.
Algunas subrutinas de uso común pueden ser invocadas rápidamente manteniendo su dirección en uno de los 16 registros; sin embargo, la subrutina llamada debe saber (codificar de forma rígida) cuál es el registro PC que la invoca para ejecutar la instrucción de "retorno". La instrucción SEP se utiliza para invocar una subrutina a la que apunta uno de los registros de 16 bits y otra SEP para volver al invocador (SEP significa Set Program Counter (Establecer contador de programa ) y selecciona cuál de los 16 registros se utilizará como contador de programa a partir de ese punto). Antes de que una subrutina regrese, salta a la ubicación inmediatamente anterior a su punto de entrada de modo que después de que la instrucción de "retorno" SEP devuelva el control al invocador, el registro estará apuntando al valor correcto para el próximo uso. (El procesador siempre incrementa el PC después de la referencia y el uso (recuperando la siguiente instrucción a ejecutar), por lo que esta técnica funciona como se indicó)
Una variación interesante de este esquema es tener dos o más subrutinas en un anillo de modo que se las llame en orden circular. En las primeras computadoras para aficionados, se usaban comúnmente trucos y técnicas como esta en la interrupción de actualización horizontal para reprogramar la dirección de la línea de escaneo para que repitiera cada línea de escaneo cuatro veces para el controlador de video.
Una rutina conocida y de uso frecuente se conoce como SCRT (Standard CALL and RETURN Technique), que permite la llamada y el retorno de subrutinas de propósito general, incluido el paso de parámetros "en línea" y subrutinas anidadas utilizando una pila. Aunque cualquiera de los registros disponibles se puede utilizar para esta técnica, según la preferencia del programador, muchos utilizan la rutina proporcionada por RCA en el Manual de usuario CDP1802, donde el uso sugerido de los registros es R2 = puntero de pila, R3 = contador de programa general (PC), R4 = llamada, R5 = retorno, R6 = puntero de argumentos pasados (no destructivo). Aunque estas rutinas de apoyo son pequeñas, existe una sobrecarga de velocidad de ejecución al usarlas. (a diferencia de lo que se incurriría si las instrucciones CALL y RET reales fueran parte del diseño del microprocesador) Esta configuración permite que R0 se use para DMA y R1 para interrupciones, si se desea, lo que permite R7 a RF (hexadecimal) para el uso general del programa.
Debido al bus de direcciones de 16 bits y al bus de datos de 8 bits, los dieciséis registros de propósito general tienen 16 bits de ancho, pero el registro D acumulador tiene solo 8 bits de ancho. Por lo tanto, el acumulador tiende a ser un cuello de botella. Transferir el contenido de un registro a otro implica cuatro instrucciones (una Get y una Put en el byte HI del registro, y un par similar para el byte LO: GHI R1; PHI R2; GLO R1; PLO R2). De manera similar, cargar una nueva constante en un registro (como una nueva dirección para un salto de subrutina o la dirección de una variable de datos) también implica cuatro instrucciones (dos instrucciones de carga inmediata, LDI, una para cada mitad de la constante, cada una seguida por una instrucción Put al registro, PHI y PLO).
Los dos modos de direccionamiento , registro indirecto y registro indirecto con incremento automático , son entonces bastante eficientes para realizar operaciones de 8 bits en los datos del acumulador. Sin embargo, no hay otros modos de direccionamiento. Por lo tanto, el modo de direccionamiento directo debe emularse utilizando las cuatro instrucciones mencionadas anteriormente para cargar la dirección en un registro de repuesto; seguido de una instrucción para seleccionar ese registro como registro de índice; seguido, finalmente, por la operación deseada en la variable de datos a la que apunta esa dirección.
El CDP1802 tiene un controlador DMA integrado simple , que tiene dos líneas de solicitud DMA para entrada y salida DMA. La CPU solo accede a la memoria durante ciertos ciclos del ciclo de máquina de múltiples pasos, que requieren entre 8 y 16 ciclos de reloj. El hardware externo podría leer o escribir datos durante estos períodos sin interrumpir el procesador, un concepto general conocido como robo de ciclos .
R0 se utiliza como puntero de dirección DMA. La dirección inicial de los datos DMA se colocaría en R0 y luego se activaría el pin de lectura o escritura adecuado en la CPU. La CPU respondió a la solicitud DMA incrementando el valor en R0, de modo que la siguiente solicitud se almacenara automáticamente en la siguiente ubicación en la memoria. De este modo, con solo activar repetidamente los pines DMA, el sistema recorrería toda la memoria.
El controlador DMA también proporciona un "modo de carga" especial, que permite cargar la memoria mientras las entradas CLEAR y WAIT del procesador están activas. Esto permite cargar un programa sin la necesidad de un cargador de arranque basado en ROM. Esto fue utilizado por el microordenador COSMAC Elf y sus sucesores para cargar un programa desde interruptores de palanca o un teclado hexadecimal sin necesidad de software y con un hardware mínimo. El usuario podía simplemente configurar los interruptores en el siguiente valor, alternar la lectura y luego continuar. No había necesidad de cambiar las direcciones, eso se hacía automáticamente mediante el paso a paso del DMA.
La eficiencia del ciclo de reloj es pobre en comparación con la mayoría de los microprocesadores de 8 bits. Ocho ciclos de reloj constituyen un ciclo de máquina. La mayoría de las instrucciones requieren dos ciclos de máquina (16 ciclos de reloj) para ejecutarse; las instrucciones restantes requieren tres ciclos de máquina (24 ciclos de reloj). En comparación, el MOS Technology 6502 requiere de dos a siete ciclos de reloj para ejecutar una instrucción, y el Intel 8080 requiere de cuatro a 18 ciclos de reloj.
En los primeros microordenadores basados en 1802, el chip controlador de pantalla de vídeo gráfico complementario , RCA CDP1861 (para el formato de vídeo NTSC , variante CDP1864 para PAL ), utilizaba el controlador DMA integrado para mostrar gráficos de mapa de bits en blanco y negro en pantallas de televisión estándar de hasta 64 píxeles en horizontal por 128 píxeles en vertical. El 1861 también se conocía como el sistema de gráficos Pixie.
Aunque las versiones más rápidas del 1802 podían operar a 4-5 MHz (a 5 V; era más rápido (6,4 MHz) a 10 V), normalmente se operaba a 3,58 MHz, dividido por 2 (1,79 MHz) para adaptarse a los requisitos del chip 1861, que daba una velocidad de un poco más de 100.000 instrucciones por segundo, aunque algunas funcionaban a otras velocidades, como los ~2,8 MHz del Comx o los 5 MHz del Pecom . El COSMAC VIP , que integraba el chip de vídeo con el procesador como una única computadora diseñada específicamente para ese fin (en lugar de como un complemento de un kit de aficionado), hacía funcionar al 1802 mucho más lento, sincronizándolo exactamente con el 1861, a una velocidad no estándar de 1,76064 MHz, como se recomienda en el diseño de referencia de la hoja de especificaciones del Pixie. [d]
El circuito integrado generador de color CDP1862, un chip complementario del modelo 1861, se podía utilizar para generar gráficos en color. Algunos sistemas informáticos, como el Pecom 64 o el Telmac TMC-600 , utilizaban el VIS (sistema de interfaz de vídeo), que constaba de los circuitos integrados complementarios CDP1869 y CDP1870, para obtener gráficos en color de resolución claramente superior, comparables a otros sistemas de 8 bits de la década de 1980.
Este pequeño ejemplo de código prueba los pines de indicador de evento (EF). Para probar los pines del uno al cuatro, cambie B4 por B2, lo que prueba el pin EF2.
BUCLEB4 EFbranch ; debido a que los pines EF están activos en nivel bajo, esto hace que se comporte como una puerta no activa REQUISITOSBUCLE BR Rama EFsecuenciaBUCLE BR
Este ejemplo de fragmento de código es una rutina de diagnóstico que prueba las operaciones ALU (Unidad aritmética y lógica). [47]
.. PRUEBA DE OPERACIONES DE ALUMINIO 0000 90 GHI 0 .. CONFIGURAR R6 0001 B6 PHI6 0002 F829 LDI DOIT .. PARA ENTRADA DE OPCODE 0004 A6 OLP 6 0005 E0 SEXO 0 .. ( X = 0 YA ) 0006 6400 FUERA 4 , 00 .. ANUNCIEN QUE ESTAMOS LISTOS 0008 E6 SEXO 6 .. AHORA X = 6 0009 3 F09 BN4 * .. ESPERALO 000 B 6 C INP 4 .. OK , LO ENTIENDO 000 C 64 FUERA 4 .. Y ECHO PARA MOSTRAR 000 D 370 D B4 * .. ESPERAR LIBERACIÓN 000 F F860 LDI # 60 .. AHORA PREPÁRESE PARA 0011 A6 PLO 6 .. PRIMER OPERAND 0012 E0 SEXO 0 .. DILO 0013 6401 SALIDA 4 , 01 0015 3 F15 BN4 * 0017 E6 SEXO 6 .. TÓMALO Y HAZ ECHO 0018 6 C ENTRADA 4 .. ( A 0060 ) 0019 64 SALIDA 4 .. ( TAMBIÉN INCREMENTAR R6 ) 001 A 371 A B4 * 001 C E0 SEXO 0 .. Ídem SEGUNDO OPERAND 001 D 6402 SALIDA 4 , 02 001 F E6 SEXO 6 0020 3 F20 LOOP : BN4 * .. ESPERALO 0022 6 C INP 4 .. OBTÉNGALO ( NOTA : X = 6 ) 0023 64 FUERA 4 .. HAZLO ECO 0024 3724 B4 * .. ESPERAR LIBERACIÓN 0026 26 DIC 6 .. COPIA DE SEGURIDAD DE R6 A 0060 0027 26 DIC 6 0028 46 LDA 6 .. OBTENER 1 ER OPERAND A D 0029 C4 DOIT : NOP .. OPERACIÓN DO 002 A C4 NOP .. ( REPUESTO ) 002 B 26 DIC 6 .. VOLVER A 0060 002 C 56 STR 6 .. RESULTADO DE SALIDA 002 D 64 FUERA 4 .. ( X = 6 TODAVÍA ) 002 E 7 A REQ .. APAGAR Q 002 F CA0020 BUCLE LBNZ .. ENTONCES SI CERO , 0032 7 B SEQ .. ENCENDERLO OTRA VEZ 0033 3020 BR LOOP .. REPETIR EN CUALQUIER CASO
Nota: La rutina anterior presupone que el microprocesador CDP1802 está en un estado de reinicio inicial (o que se ha configurado como tal antes de ejecutar este código). Por lo tanto, el contador de programa (PC) y el 'puntero' del registro indirecto X están configurados en el registro R0 de 16 bits. Es por eso que puede generar un valor inmediato, como en el ejemplo 'OUT 4,00', porque PC y X apuntan a R0. El PC se incrementa después de que se recupera el byte de instrucción del código de operación de la memoria, por lo que apunta a la siguiente dirección cuando se ejecuta OUT 4. Por lo tanto, genera el valor en la memoria al que apunta RX = R0, que es el siguiente byte inmediato. La instrucción OUT también incrementa el registro X, que es R0, que también es el PC, por lo que genera el valor inmediato después de OUT y continúa la ejecución del programa en la siguiente dirección de instrucción después del valor inmediato. Es por eso que ve que la rutina establece X (SEX) en los registros R6 y R0 según sea necesario. Tenga en cuenta también que, aunque el código de operación OUT incrementa el registro RX para generar fácilmente una sección de memoria ("buffer"), INP no lo hace. Almacena el valor en la dirección indicada por RX y en el acumulador de bytes de datos de 8 bits de D, pero RX no se modifica.
La rutina también presupone que OUT 4 mostrará el valor en el LED de 8 bits o en la pantalla hexadecimal de 2 dígitos del sistema de la CPU, y que IN 4 obtiene el valor de los ocho interruptores de palanca (o posiblemente del teclado hexadecimal). El código de operación BN4 (bucle; * = 'esta dirección'), "ramificar si la línea EF4 de entrada de un solo bit es baja", se utiliza para probar si se presiona el botón pulsador momentáneo 'Entrada'. El bucle del código de operación B4 ('si es alta') espera a que se suelte el botón. SEQ y REQ encienden y apagan la línea Q única, que generalmente está conectada a un LED.
El 1802 es una "máquina de bytes", pero tiene 16 registros de 16 bits, R0-RF (a veces denominados 0-F sin el prefijo "R"). Para manejar datos de registros de 16 bits, el programador debe obtener y colocar los valores Hi o Lo de los registros utilizando el acumulador D como intermediario. Estos bytes altos y bajos de los registros a veces se denominan Rn.0 (lo) y Rn.1 (hi). Las ramas cortas son códigos de operación de 2 bytes con direccionamiento absoluto de página y un límite de dirección de 256 bytes. Las ramas largas son códigos de operación de 3 bytes con ramificación completa de dirección de 16 bits.
Esta información debería hacer que la rutina sea más comprensible para cualquier programador de computadoras que tenga conocimientos suficientes para leer "pseudocódigo" y esté mínimamente familiarizado con la programación en lenguaje ensamblador y de máquina.
{{cite web}}
: CS1 maint: varios nombres: lista de autores ( enlace )Partes menores de este artículo se basaron originalmente en material del Diccionario gratuito en línea de informática , que se encuentra bajo licencia GFDL .