El COSMAC (Complementary Symmetry Monolithic Array Computer) es una familia de microprocesadores de 8 bits introducida por RCA . Es históricamente notable como el primer microprocesador CMOS . [1] El primer modelo de producción fue el CDP1801R y CDP1801U de dos chips , que luego se combinaron en el CDP1802 de un solo chip . [2] El 1802 representó la mayor parte de la producción de COSMAC, y hoy toda la línea se conoce simplemente como RCA 1802 .
El diseño del procesador tiene su historia en una computadora doméstica experimental diseñada por Joseph Weisbecker a principios de la década de 1970, construida en su casa utilizando componentes TTL . RCA comenzó a desarrollar la versión CMOS del diseño del procesador en 1973, probándola en 1974 con planes de pasar inmediatamente a una implementación de un solo chip. 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 mediante 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 menor temperatura y no generará tanto calor como los chips NMOS. RCA también produjo versiones endurecidas por radiación , que encontraron uso en el campo aeroespacial. [5] Estos permanecen en producción a partir de 2022, [5] y a partir de 2008 continuaron siendo producidos por Renesas (anteriormente Intersil ). [6] [7]
Los sucesores del 1802 son el CDP1804, CDP1805 y CDP1806, que tienen un conjunto de instrucciones ampliado y otras características mejoradas (como RAM y ROM en el chip y temporizador incorporado), y algunas versiones funcionan a velocidades de reloj más rápidas, aunque no una diferencia de velocidad significativa. Algunas características también se pierden, 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 continúa produciéndose en su formato original de paquete dual en línea (DIP) de 40 pines. [ ¿ cuando? ]
Joseph Weisbecker había estado fascinado durante mucho tiempo con el potencial de las computadoras en el hogar, y ya en 1955 afirmó que esperaba que algún día se integraran en prácticamente todos los dispositivos. La tecnología de la época hizo imposibles las pequeñas computadoras integradas, pero la introducción del circuito integrado (CI) en la década de 1960 cambió las cosas dramáticamente. En 1974 describió las posibilidades en un artículo de IEEE Computer:
Durante 20 años, el hardware de las computadoras se ha vuelto cada vez más complejo, los lenguajes más tortuosos y los sistemas operativos menos eficientes. Ahora, las microcomputadoras nos brindan a algunos de nosotros la oportunidad de regresar a sistemas más simples. Baratas... las microcomputadoras podrían abrir vastos mercados nuevos. [8]
A partir de 1970, [a] Weisbecker comenzó el diseño de una pequeña máquina utilizando circuitos integrados de lógica de transistor-transistor (TTL) RCA para construir el procesador. Otras piezas, interruptores, lámparas y demás, las tenía que comprar en Radio Shack , repartiendo deliberadamente sus compras entre 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 múltiples placas de circuito . [1]
El resultado, al que llamó FRED, aparentemente por Dispositivo Educativo Recreativo Flexible, estaba empaquetado en una caja que no se diferenciaba 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 luego agregando un teclado con almohadilla hexagonal . [9] Weisbecker agregó nuevas funciones continuamente y en 1972 había obtenido 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 incluyó varios juegos, que fueron portados a máquinas posteriores basadas en COSMAC. Cuando RCA ingresó al negocio de las consolas de juegos a finales de la década de 1970, estos juegos se grabaron en forma de cartucho ROM y Joyce se convirtió en la primera desarrolladora de videojuegos comerciales conocida. [9]
Weisbecker mostró la máquina a la dirección de RCA durante todo este período, pero al principio hubo poco interés. Esto fue poco después de que David Sarnoff se jubilara y entregara el puesto de director ejecutivo a su hijo, Robert Sarnoff . Robert estaba más interesado en construir el lado mediático de la empresa mientras salía con estrellas discográficas, ignorando a RCA Laboratories a pesar de una serie de desarrollos líderes en la industria que estaban teniendo lugar allí. Parte del escepticismo mostrado por la gerencia puede haber tenido que ver con la reciente venta por parte de la compañía de su negocio de computadoras centrales a Sperry Rand con una enorme amortización . [9]
Finalmente, la empresa se interesó en el sistema y comenzó a adaptarlo a su sistema de fabricación COS/MOS recientemente introducido. Un informe de laboratorio de 1973 [b] se refiere a un "prototipo" entregado en 1972, pero probablemente se refiere a la implementación TTL original. Continúa señalando que se hizo un esfuerzo por reducir el procesador a una implementación de dos chips con entregas en COS/MOS en 1974. Es aquí donde el procesador se conoce 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 una versión de un solo chip. planificado. [10] [c]
Aunque RCA comenzó el desarrollo del COSMAC a principios de la década de 1970, pasó algún tiempo antes de que introdujeran 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 operaciones con monedas, pero finalmente se abandonó. [9]
Mientras tanto, Weisbecker había adaptado el FRED original, conocido dentro de RCA como System 00 en ese momento, usando el nuevo chipset para producir un sistema de placa única muy simplificado conocido como entonces COSMAC ELF . Las instrucciones de construcción se describieron en un artículo de la revista Popular Electronics en 1976, y una versión ampliada con varias actualizaciones en un segundo artículo de 1977. Una característica única del ELF es que no requería ninguna memoria de solo lectura (ROM) para su inicio. en cambio, el sistema de acceso directo a la memoria (DMA) del procesador se utilizó para leer los interruptores del panel frontal directamente en la memoria. [9]
RCA debatió si introducir en el mercado versiones preenvasadas del ELF. Mientras debatían, un mayor desarrollo condujo a una máquina simplificada que combina el ELF con un nuevo chip controlador de pantalla , el CDP1861 , para producir una consola de juegos . Durante este tiempo, RCA contrató a Joyce para escribir varios videojuegos para la plataforma, incluido un producto educativo estilo cuestionario en asociación con Random House , una de las muchas empresas que habían sido adquiridas por las compras de RCA. [9]
Después de un año de discusiones, la compañía finalmente decidió lanzar dos productos para el mercado masivo basados en la plataforma, un kit de computadora 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 no se anunció hasta enero de 1977, un par de meses después de que Fairchild Channel F se convirtiera en la primera máquina de cartucho del mercado. Ambos pronto serían eclipsados y en gran medida olvidados debido al lanzamiento del Atari 2600 ese mismo año. RCA canceló el Studio II en febrero de 1978. [9]
RCA también lanzó una serie de sistemas informáticos modulares, basados en el factor de forma RCA Microboard desde el lanzamiento inicial del 1802, hasta el colapso de la propia RCA. Estos estaban destinados principalmente al desarrollo de sistemas y aplicaciones industriales, y eran altamente configurables. [12]
El COSMAC era único entre los primeros procesadores de 8 bits porque había sido diseñado explícitamente para uso en microcomputadoras; Otros diseños de la época apuntaban invariablemente al espacio de los procesadores integrados , y los que habían sido diseñados para uso en computadoras eran generalmente sistemas más complejos y, a menudo, de 16 bits. Aunque COSMAC había sido diseñado para uso informático, la lenta entrada de RCA al mercado y los intentos poco respaldados en este mercado finalmente fracasaron y otros procesadores como el MOS 6502 y Zilog Z80 llegarían a dominar este mercado. Irónicamente, COSMAC acabaría encontrando un gran éxito en el mercado integrado, porque su diseño CMOS le permitía funcionar a menor potencia. A finales de la década de 1970 se utilizaba ampliamente en muchos entornos industriales, y especialmente en el aeroespacial. El 1802 llevó la sonda Galileo a Júpiter en 1989, y sigue en uso en funciones similares hasta el día de hoy. [9]
Varias de las primeras microcomputadoras se basaron en el 1802, incluido el COSMAC ELF (1976), Netronics ELF II , Quest SuperELF, COSMAC VIP , Comx-35 , el finlandés Telmac 1800 , Telmac TMC-600 y Oscom Nano, el yugoslavo Pecom 32 y 64. , y los sistemas CyberVision 2001 vendidos a través de Montgomery Ward a finales de la década de 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 por computadora de placa única Edukit , similar a un COSMAC Elf ampliado , fue ofrecido por Modus Systems Ltd. en Gran Bretaña a principios de la década de 1980. [14] Infinite Incorporated produjo un entrenador de computadora de consola expandible de 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 los aficionados a la retrocomputación de 1802 , se han construido otras computadoras más recientemente (posteriores a 2000), incluido el kit de microcomputadora Membership Card que cabe en una lata de Altoids [17] y el Spare Time Gizmos Elf 2000 (Elf 2K), [18 ] entre otros. Ver § Emuladores y simuladores para otros sistemas.
El 1802 también se utilizó en instrumentos científicos y productos comerciales. [19] [20]
Chrysler posterior a 1980 y los modelos de vehículos asociados 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 a bordo basados en computadora para automóviles. [21] [22]
El 1802 se utilizó en la fabricación de numerosas máquinas de pinball y videojuegos 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 confiere cierto grado de resistencia a la radiación y a las descargas electrostáticas (ESD). [24] Una versión diferente del 1802 endurecida por radiación, desarrollada conjuntamente por RCA y Sandia National Laboratories , se construyó sobre silicio a granel utilizando tecnología C 2 L (Closed COS/MOS Logic). [25] [26] Junto con sus capacidades de consumo de energía extremadamente bajo, esto hace que el chip sea muy adecuado para aplicaciones espaciales y militares. [25] (Además, en el momento en que se introdujo 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 muchas naves espaciales y programas, experimentos, proyectos y módulos de ciencia espacial, como la nave espacial Galileo , [27] Magellan , [28] el instrumento analizador de ondas de plasma en la nave espacial Ulysses de la ESA, varios satélites en órbita terrestre [29] y satélites que transportan radioaficionados. [30]
También se ha verificado a partir de documentación fuente de la NASA que el 1802 se ha utilizado 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 1802 fue Forth , proporcionado por Forth, Inc. y fue 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. Agencias federales como la NASA y sus instalaciones utilizaron otros lenguajes especializados, incluido el Centro Espacial Johnson, AMES, Goddard, Langley, Marshall y el 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 .
Los aficionados han emulado y simulado en hardware y/o software el chip 1802 y las computadoras que utilizan el microprocesador. Hay tres diseños en VHDL para una FPGA . [37] [38] [39] Se creó un clon COSMAC Elf de velocidad completa y precisión de bus sin un chip de microprocesador CDP1802 o un chip de video CDP1861 utilizando microcontroladores PIC . [40] Un simulador en línea de 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 , por lo 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 separados: un bus de datos bidireccional de 8 bits y un bus de direcciones multiplexado en el tiempo , accediendo a los 8 bits de orden superior y de orden inferior de la dirección de 16 bits en ciclos de reloj alternos. 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 prueban directamente mediante instrucciones de rama (EF1-EF4). Estos pines permiten que tareas simples de entrada/salida (E/S) se manejen directamente y se programen fácilmente.
Debido a que las instrucciones tardaban 16 o 24 ciclos de reloj en completarse, el 1802 no era particularmente rápido. A modo de comparación, el 6502 completa la mayor parte de la instrucción en 2 a 4 ciclos de reloj, y la más larga (instrucción oficial) [42] toma 7 ciclos. [43]
Varios sufijos del número de pieza CDP1802 indican especificaciones técnicas, incluidas (A, B y C) velocidad de funcionamiento (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 paquete (D, E, Q) y precinto (X). Estos estaban algo estandarizados entre los distintos proveedores, incluidos 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 aún no se han documentado. (ejemplos: CDP1802A, CDP1802ACE, CDP1802BCD, HCMP1802AP, SCP1802D) [44]
El 1802 es una máquina de 8 bytes, con 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 funcionar 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. Usando la instrucción SEP, puede seleccionar cualquiera de los 16 registros para que sea el contador del programa ; Usando 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 contener la dirección de memoria para el controlador DMA incorporado . El registro R1 tiene el uso especial de ser el contador de programa para el manejador de interrupciones. [46]
Hay instrucciones que permiten configurar y leer los valores de estos registros a través de D, trabajando por separado los 8 bits superiores e inferiores a la vez. También hay 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 mediante X y decremento). Las comparaciones de valores y registros de 16 bits también necesitarían utilizar 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 de indicadores externas de un solo bit, EF1, EF2, EF3 y EF4, y hay ocho instrucciones de bifurcación dedicadas para bifurcar condicionalmente según el estado de esas líneas de entrada. Hay siete instrucciones de puerto de entrada y siete de salida que utilizan el registro RX y el acumulador D.
Las líneas EF y Q se usaban típicamente para múltiples interfaces en computadoras para aficionados basadas en 1802 debido al manejo fácil y favorable de las líneas. 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 realmente escuchar la transmisión de datos RS-232 y del casete (a menos que se implementara un control de volumen). Tradicionalmente, la línea EF4 está conectada al botón momentáneo de ENTRADA en COSMAC Elf. Otros sistemas podrían utilizar una de las otras líneas.
Hay algunos otros registros e indicadores de uso especial, algunos internos y otros utilizables mediante programación: 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 varias Tablas en el área Archivo para registros en miembros del club en línea 1802 para el foro en https://groups.io/g/cosmacelf/files. Cada Instrucción es un único Byte, de 8 Bits. Los 4 bits a la izquierda, a veces llamados dígitos hexadecimales de alto orden, tienen que ver con la naturaleza real de la instrucción, y esos 4 bits están relacionados con el registro I. Los 4 bits a la derecha, a veces llamados dígitos hexadecimales de orden bajo, tienen que ver con el registro de trabajo, de donde se toman los datos o se colocan en él, y esos 4 bits están involucrados con el registro N. Cuando se realiza un Programa, las distintas etapas del trabajo y los Procesos se almacenan temporalmente en el Registro señalado por el Registro N, como sucede cuando se realiza una Multiplicación larga o una 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 condicional e incondicional en 1802, corta y larga, y saltada.
Las ramas cortas son instrucciones de 2 bytes y utilizan un rango de 256 bytes, dirección de un solo byte y direccionamiento absoluto de página en el rango de 0 a 255 (FF hexadecimal). No hay ninguna ramificación relativa. 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 admitir el espacio de direcciones de memoria de 64 K 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. Sólo Long Skip tiene ramificación condicional.
El procesador no tiene una dirección CALL de subrutina estándar ni instrucciones RET, aunque se pueden simular. El diseño de 16 registros hace posibles algunos mecanismos interesantes de llamada y retorno de subrutinas, aunque se adaptan mejor a programas pequeños que a la codificación de propósito general.
Se pueden llamar rápidamente algunas subrutinas de uso común manteniendo su dirección en uno de los 16 registros; sin embargo, la subrutina llamada debe saber (codificada) cuál es el registro de la PC que llama para realizar la instrucción de "retorno". La instrucción SEP se usa para llamar a una subrutina apuntada por uno de los registros de 16 bits y otra SEP para regresar a la persona que llama (SEP significa Establecer contador de programa y selecciona cuál de los 16 registros se usará como programa). contador a partir de ese momento). 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 a la persona que llama, el registro apuntará al valor correcto para el siguiente uso. (el procesador siempre incrementa la PC después de la referencia y el uso (recuperando la siguiente instrucción para ejecutar), por lo que esta técnica funciona como se indica)
Una variación interesante de este esquema es tener dos o más subrutinas en un anillo para que se llamen en orden round robin. En las primeras computadoras para aficionados, trucos y técnicas como este se usaban comúnmente en la interrupción de actualización horizontal para reprogramar la dirección de la línea de escaneo para repetir cada línea de escaneo cuatro veces para el controlador de video.
Una rutina bien conocida y de uso frecuente se conoce como SCRT (técnica estándar de LLAMADA y RETORNO), que permite la llamada y devolución de subrutinas de propósito general, incluido el paso de parámetros "en línea" y subrutinas anidadas usando una pila. Aunque cualquiera de los registros disponibles puede usarse para esta técnica, según la preferencia del programador, muchos usan la rutina proporcionada por RCA en el Manual del usuario CDP1802, donde el uso de registro sugerido es R2 = Stack Pointer, R3 = General Program Counter (PC), R4 = Llamada, R5 = Devolución, R6 = Puntero de argumentos pasados (no destructivo). Aunque estas rutinas de apoyo son pequeñas, su uso conlleva una sobrecarga de velocidad de ejecución. (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, permitiendo que R7 a través de RF (hexadecimal) para uso general uso 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 del acumulador tiene sólo 8 bits de ancho. El acumulador, por tanto, 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 de ellas). uno seguido de una instrucción Poner en el registro, PHI y PLO).
Los dos modos de direccionamiento Registro indirecto y Registro indirecto con incremento automático son bastante eficientes para realizar operaciones de 8 bits en los datos del acumulador. Sin embargo, no existen otros modos de direccionamiento. Por lo tanto, es necesario emular el modo de direccionamiento directo 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 índice; seguido, finalmente, de la operación prevista en la variable de datos a la que apunta esa dirección.
El CDP1802 tiene un controlador DMA incorporado simple , que tiene dos líneas de solicitud de DMA para entrada y salida de DMA. La CPU solo accede a la memoria durante ciertos ciclos del ciclo de la máquina de varios pasos, que requería entre 8 y 16 ciclos de reloj. El hardware externo podría leer o escribir datos durante estos periodos 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 bajaría el pin de lectura o escritura apropiado en la CPU. La CPU respondió a la solicitud de DMA incrementando el valor en R0, de modo que la siguiente solicitud se almacene automáticamente en la siguiente ubicación de la memoria. Por lo tanto, simplemente activando 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 la microcomputadora 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 podría simplemente configurar los interruptores al siguiente valor, alternar la lectura y luego continuar. No hubo necesidad de cambiar las direcciones, eso se hizo automáticamente mediante el paso 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 toman tres ciclos de máquina (24 ciclos de reloj). En comparación, el MOS Technology 6502 necesita de dos a siete ciclos de reloj para ejecutar una instrucción, y el Intel 8080 necesita de cuatro a 18 ciclos de reloj.
En las primeras microcomputadoras basadas en 1802, el chip controlador de pantalla de video de gráficos complementario, RCA CDP1861 (para el formato de video NTSC , variante CDP1864 para PAL ), usaba el controlador DMA incorporado para mostrar gráficos de mapa de bits en blanco y negro en pantallas de TV estándar a hasta a 64 píxeles horizontalmente por 128 píxeles verticalmente. El 1861 también era conocido como el sistema de gráficos Pixie.
Aunque las versiones más rápidas de 1802 podían funcionar a 4–5 MHz (a 5 V; era más rápido (6,4 MHz) a 10 V), normalmente funcionaba a 3,58 MHz, dividido por 2 (1,79 MHz) para satisfacer los requisitos de el chip 1861, que daba una velocidad de 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 video con el procesador como una computadora diseñada específicamente para ese propósito (en lugar de como un complemento de un kit para aficionados), hizo funcionar el 1802 mucho más lento, sincronizándolo exactamente con el 1861, a un ritmo no -estándar 1.76064 MHz, como se recomienda en el diseño de referencia de la hoja de especificaciones de Pixie. [d]
El circuito integrado generador de color CDP1862, un chip complementario de 1861, podría usarse 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 consta 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 del indicador de evento (EF). Para probar los pines del uno al cuatro, cambie B4 a B2, 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 SOLICITARBUCLE BR Sucursal EFSEQBUCLE 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 ALU OPS 0000 90 GHI 0 .. CONFIGURAR R6 _ 0001 B6 PHI 6 0002 F829 LDI DOIT .. PARA ENTRADA DE OPCODE 0004 A6 OLP 6 0005 E0 SEXO 0 .. ( X = 0 YA ) 0006 6400 SALIDAS 4 , 00 .. ANUNCIENNOS LISTOS _ 0008 E6 SEXO 6 .. AHORA X = 6 0009 3 F09 BN4 * .. ESPÉRALA _ _ 000 B 6 C INP 4 .. OK , CONSIGUELO _ 000 C 64 OUT 4 .. Y ECO EN PANTALLA 000 D 370 D B4 * .. ESPERA LA LIBERACIÓN 000 F F860 LDI # 60 .. AHORA PREPÁRESE PARA 0011 A6 PLO 6 .. PRIMER OPERANDO 0012 E0 SEXO 0..DILO _ _ _ 0013 6401 SALIDA 4 , 01 0015 3 F15 BN4 * 0017 E6 SEXO 6 .. TÓMALO Y ECO _ _ 0018 6 C ENTRADA 4 .. ( A 0060 ) 0019 64 OUT 4 .. ( TAMBIÉN INCREMENTAR R6 ) 001 A 371 A B4 * 001 C E0 SEXO 0 .. Ídem SEGUNDO OPERANDO 001 D 6402 SALIDA 4 , 02 001 F E6 SEXO 6 0020 3 F20 BUCLE : BN4 * .. ESPÉRATE _ _ 0022 6 C INP 4 .. CONSIGUELO ( NOTA : X = 6 ) _ 0023 64 OUT 4 .. ECO _ 0024 3724 B4 * .. ESPERA LIBERACIÓN _ 0026 26 DIC 6 .. RESPALDO R6 A 0060 _ 0027 26 DIC 6 0028 46 LDA 6 .. OBTENER 1 ST OPERANDO A D 0029 C4 HACER : NOP .. HACER OPERACIÓN 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 AÚN ) 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 BUCLE .. REPETIR EN CUALQUIER CASO
Nota: La rutina anterior supone que el microprocesador CDP1802 está en un estado de reinicio inicial (o que se configuró 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 tanto PC como X apuntan a R0. La PC se incrementa después de que el byte de instrucción del código de operación se recupera 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 señalado por 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 la 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 la rutina configurada X (SEXO) para registrar R6 y R0 según sea necesario. También tenga en cuenta 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 señalada por RX y en el acumulador de bytes de datos D de 8 bits, pero RX no se modifica.
La rutina también supone que OUT 4 mostrará el valor en el LED de 8 bits del sistema CPU o en la pantalla hexadecimal de 2 dígitos, y 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'), "bifurcación si la línea EF4 de entrada de un solo bit está baja", se utiliza para probar si se presiona el botón momentáneo 'Entrada'. El bucle del código de operación B4 ('if hola') espera a que se suelte el botón. SEQ y REQ encienden y apagan la única línea Q, 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 denominado 0-F sin el prefijo 'R'). Para manejar datos de registros de 16 bits, el programador debe obtener y colocar los valores alto o bajo 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 bifurcaciones de direcciones completas de 16 bits.
Esta información debería hacer que la rutina sea más comprensible para cualquier programador de computadoras que tenga el conocimiento suficiente para leer "pseudocódigo" y esté mínimamente familiarizado con la programación en lenguaje ensamblador y de máquina.
{{cite web}}
: Mantenimiento CS1: varios nombres: lista de autores ( enlace )Partes menores de este artículo se basaron originalmente en material del Diccionario gratuito de informática en línea , que tiene licencia GFDL .