stringtranslate.com

PDP-8

El PDP-8 es una familia de minicomputadoras de 12 bits producida por Digital Equipment Corporation (DEC) . Fue la primera minicomputadora de éxito comercial, con más de 50.000 unidades vendidas durante la vida útil del modelo. [ cita necesaria ] Su diseño básico sigue el LINC pionero pero tiene un conjunto de instrucciones más pequeño , que es una versión ampliada del conjunto de instrucciones PDP-5 . [1] Máquinas similares de DEC son la PDP-12 , que es una versión modernizada de los conceptos PDP-8 y LINC, y el sistema de controlador industrial PDP-14 .

Descripción general

Un PDP-8/E abierto con sus módulos lógicos detrás del panel frontal y una unidad dual TU56 DECtape en la parte superior
Un "Straight-8" en funcionamiento en el Museo de la Informática de Stuttgart

El primer modelo PDP-8, conocido informalmente como "Straight-8", se introdujo el 22 de marzo de 1965 con un precio de 18.500 dólares [2] (equivalente a unos 171.800 dólares en 2022 [3] ). Utiliza lógica de diodo-transistor empaquetada en tarjetas con chip plegable en una máquina del tamaño de un pequeño refrigerador doméstico . Fue la primera computadora que se vendió por menos de 20.000 dólares, [4] lo que la convirtió en la computadora más vendida de la historia en ese momento. [5] [ verificación fallida ] [6] [ verificación fallida ] El Straight-8 fue reemplazado en 1966 por el PDP-8/S, que estaba disponible en modelos de escritorio y de montaje en bastidor. El uso de una unidad lógica aritmética (ALU) en serie de un bit permitió que el PDP-8/S fuera más pequeño y menos costoso, aunque más lento que el PDP-8 original. Una 8/S básica se vendió por menos de 10.000 dólares, la primera máquina en alcanzar ese hito. [4] [7]

Los sistemas posteriores (PDP-8/I y /L, PDP-8/E, /F y /M, y PDP-8/A) volvieron a una implementación más rápida y totalmente paralela, pero utilizan transistores mucho menos costosos. Lógica de transistores (TTL) Lógica MSI . La mayoría de los PDP-8 supervivientes son de esta época. El PDP-8/E es común y está bien considerado porque había muchos tipos de dispositivos de E/S disponibles para él. Los últimos modelos comerciales de PDP-8 introducidos en 1979 se denominan "CMOS-8", basados ​​en microprocesadores CMOS . No tenían un precio competitivo y la oferta fracasó. Intersil vendió comercialmente los circuitos integrados hasta 1982 como la familia Intersil 6100 . En virtud de su tecnología CMOS, tenían bajos requisitos de energía y se utilizaban en algunos sistemas militares integrados.

El ingeniero jefe que diseñó la versión inicial del PDP-8 fue Edson de Castro , quien más tarde fundó Data General . [8]

Importancia arquitectónica

El PDP-8 combina bajo costo, [2] simplicidad, capacidad de expansión e ingeniería cuidadosa a cambio de valor. La mayor importancia histórica fue que el bajo costo y el alto volumen del PDP-8 hicieron que una computadora estuviera disponible para muchos nuevos clientes para muchos usos nuevos. Su importancia continua es como un ejemplo histórico de diseño informático de ingeniería de valor [9] .

La baja complejidad trajo otros costos. Hizo que la programación fuera engorrosa, como se ve en los ejemplos de este artículo y en la discusión sobre "páginas" y "campos". Gran parte del código ejecutaba la mecánica requerida, en lugar de establecer el algoritmo. Por ejemplo, restar un número implica calcular su complemento a dos y luego sumarlo; escribir un salto condicional implica escribir un salto condicional alrededor del salto, codificando el salto la condición negativa a la deseada. Algunos proyectos de programación ambiciosos no lograron caber en la memoria o desarrollaron defectos de diseño que no pudieron resolverse. Por ejemplo, como se indica a continuación, la recursividad involuntaria de una subrutina produce defectos que son difíciles de rastrear hasta la subrutina en cuestión.

A medida que los avances en el diseño redujeron los costos de la lógica y la memoria, el tiempo del programador se volvió relativamente más importante. [10] Los diseños de computadoras posteriores enfatizaron la facilidad de programación, generalmente utilizando conjuntos de instrucciones más grandes e intuitivos. [11]

Con el tiempo, la mayor parte del código de máquina fue generado por compiladores y generadores de informes. [12] La computadora con conjunto de instrucciones reducido volvió a completar el círculo del énfasis del PDP-8 en un conjunto de instrucciones simple y en lograr múltiples acciones en un solo ciclo de instrucción, para maximizar la velocidad de ejecución, aunque las computadoras más nuevas tienen palabras de instrucción mucho más largas.

Descripción

El PDP-8 utilizó ideas de varios predecesores de 12 bits, como el LINC diseñado por WA Clark y CE Molnar , quienes se inspiraron en la minicomputadora CDC 160 de Seymour Cray . [1] [13]

PDP-8/e en el Living Computers Museum .

El PDP-8 utiliza 12 bits para el tamaño de palabra y la aritmética (en enteros sin signo de 0 a 4095 o enteros con signo de −2048 a +2047). Sin embargo, el software puede realizar aritmética de precisión múltiple . Había disponible un intérprete para operaciones de punto flotante , por ejemplo, que utiliza una representación de punto flotante de 36 bits con un significado (mantisa) de dos palabras (24 bits) y un exponente de una palabra. [14] Sujeto a limitaciones de velocidad y memoria, el PDP-8 puede realizar cálculos similares a los de las computadoras electrónicas contemporáneas más caras, como el IBM 1130 y varios modelos del IBM System/360 , al tiempo que es más fácil de conectar con dispositivos externos.

El espacio de direcciones de la memoria también es de 12 bits, por lo que la configuración básica del PDP-8 tiene una memoria principal de 4.096 (2 ·12 ) palabras de doce bits, o 6 kB en términos modernos. Una unidad de expansión de memoria opcional puede cambiar bancos de memorias mediante una instrucción IOT. La memoria es de núcleo magnético con un tiempo de ciclo de 1,5 microsegundos (0,667 MHz ), de modo que una instrucción típica de referencia de memoria de dos ciclos (Buscar, Ejecutar) se ejecuta a una velocidad de 0,333 MIPS . La tarjeta de referencia de bolsillo de 1974 para el PDP-8/E proporciona un tiempo de instrucción básica de 1,2 microsegundos, o 2,6 microsegundos para instrucciones que hacen referencia a la memoria.

El PDP-8 fue diseñado en parte para manejar telecomunicaciones y textos contemporáneos. Los códigos de caracteres de seis bits eran de uso generalizado en ese momento, y las palabras de doce bits del PDP-8 pueden almacenar eficientemente dos de esos caracteres. Además, los servicios de noticias utilizaban ampliamente un código de teletipo de seis bits llamado teletipo o código TTS, y una de las primeras aplicaciones del PDP-8 fue la composición tipográfica utilizando este código. [15]

Las instrucciones PDP-8 tienen un código de operación de tres bits, por lo que sólo hay ocho instrucciones. El ensamblador proporciona más mnemónicos de instrucción a un programador al traducir las instrucciones de E/S y del modo de operación a combinaciones de códigos de operación y campos de instrucción. También tiene sólo tres registros visibles para el programador: un acumulador de 12 bits (AC), un contador de programa (PC) y un indicador de acarreo llamado "registro de enlace" (L).

Para entrada y salida, el PDP-8 tiene una única interrupción compartida por todos los dispositivos, un bus de E/S al que se accede mediante instrucciones de E/S y un canal de acceso directo a memoria (DMA). El bus de E/S programado normalmente ejecuta periféricos de velocidad baja a media, como impresoras , teletipos , perforadoras de cintas de papel y lectores, mientras que DMA se utiliza para pantallas de tubos de rayos catódicos con un lápiz óptico , convertidores analógicos a digitales , Convertidores de señal a analógica , unidades de cinta y unidades de disco .

Para ahorrar dinero, el diseño utiliza memoria principal económica para muchos propósitos que son atendidos por registros flip-flop más caros en otras computadoras, [16] como contadores auxiliares y enlace de subrutinas.

Los modelos básicos utilizan software para realizar multiplicaciones y divisiones. Para matemáticas más rápidas, el Elemento Aritmético Extendido (EAE) proporciona instrucciones de multiplicación y división con un registro adicional, el registro Multiplicador/Cociente (MQ). El EAE era una opción en el PDP-8 original, [17] el 8/I, [18] y el 8/E, pero es una parte integral del microprocesador Intersil 6100 .

El PDP-8 está optimizado para ofrecer un diseño sencillo . En comparación con máquinas más complejas, se eliminaron funciones innecesarias y la lógica se comparte cuando es posible. Las instrucciones utilizan autoincremento, autoborrado y acceso indirecto para aumentar la velocidad del software, reducir el uso de memoria y sustituir registros costosos por memoria económica.

La electrónica de una CPU PDP-8 básica tiene sólo cuatro registros de 12 bits: el acumulador, el contador de programa, el registro del búfer de memoria y el registro de dirección de memoria . Para ahorrar dinero, estos sirvieron para múltiples propósitos en diferentes puntos del ciclo operativo. Por ejemplo, el registro del búfer de memoria proporciona operandos aritméticos, es parte del registro de instrucciones y almacena datos para reescribir la memoria central . (Esto restaura los datos centrales destruidos por la lectura).

Debido a su simplicidad, los primeros modelos PDP-8 eran menos costosos que la mayoría de las otras computadoras disponibles comercialmente. Sin embargo, utilizaron métodos de producción costosos que a menudo se utilizan para prototipos. Utilizaron miles de módulos lógicos estandarizados muy pequeños, con conectores dorados, integrados por un costoso y complejo backplane envuelto en cables en un gabinete grande.

En el modelo 8/S posterior, introducido en agosto de 1966, [7] dos voltajes lógicos diferentes aumentaron la dispersión de la lógica de diodo-transistor de bajo costo . [19] El 8/S también redujo el número de puertas lógicas mediante el uso de una ruta de datos en serie de un solo bit para realizar operaciones aritméticas. La CPU del PDP-8/S tiene sólo alrededor de 519 puertas lógicas . En comparación, los microcontroladores pequeños (a partir de 2008) suelen tener 15.000 o más. Las reducciones en la electrónica permitieron una caja mucho más pequeña, aproximadamente del tamaño de una caja de pan. El 8/S fue diseñado por Saul Dinman. [20]

La PDP-8/E, aún posterior, es una computadora más grande y más capaz, pero rediseñada aún más para obtener un mejor valor. Emplea una lógica transistor-transistor más rápida en circuitos integrados. La memoria central fue rediseñada. Permite la expansión con menos gasto porque utiliza OMNIBUS en lugar del backplane cableado en modelos anteriores. (Se puede leer un relato personal del desarrollo del PDP-8/E en la Wiki de Historia de la Ingeniería y la Tecnología. [21] )

Modelos

La cifra total de ventas de la familia PDP-8 se estima en más de 300.000 máquinas. [ cita necesaria ] Se fabricaron los siguientes modelos:

Implementaciones de los últimos días

El PDP-8 se puede emular fácilmente , ya que su conjunto de instrucciones es mucho más simple que el de las arquitecturas modernas. Los entusiastas han creado PDP-8 completos utilizando dispositivos FPGA únicos.

Varias simulaciones de software de un PDP-8 están disponibles en Internet, así como reimplementaciones de hardware de código abierto . Los mejores ejecutan correctamente los sistemas operativos y el software de diagnóstico de DEC. Las simulaciones de software a menudo simulan PDP-8 de último modelo con todos los periféricos posibles. Incluso estos utilizan sólo una pequeña fracción de la capacidad de una computadora personal moderna.

Una de las primeras versiones comerciales de una máquina virtual PDP-8/S se ejecutó en un Kaypro 386 (una computadora basada en 80386) y fue escrita en lenguaje informático C (antes de que se finalizara el estándar ANSI-C) y ensamblador por David Beecher. de Denver, Colorado. Reemplazó una computadora PDP-8/S defectuosa que operaba la máquina de manejo de combustible en el Reactor #85, la Estación Generadora Eléctrica alimentada por combustible nuclear de Platteville, Colorado, Ft. San Vrain. Fue revisado por Rockwell International y funcionó sin problemas durante 2,5 años durante la operación de la máquina de manipulación de combustible mientras se usaba para extraer combustible del núcleo del reactor y desmantelar la planta. Incluía un cargador de cinta de papel simulado y un panel frontal.

De entrada y salida

Los sistemas de E/S sufrieron grandes cambios durante la era PDP-8. Los primeros modelos PDP-8 utilizan una interfaz de panel frontal , un lector de cinta de papel y una impresora de teletipo con una perforadora de cinta de papel opcional. Con el tiempo, se agregaron sistemas de E/S como cinta magnética , RS-232 y terminales tontos de bucle de corriente , lectores de tarjetas perforadas y discos de cabezal fijo . Hacia el final de la era PDP-8, los disquetes y las unidades de disco de cartucho con cabezal móvil eran dispositivos de E/S populares. Los entusiastas modernos han creado adaptadores de disco duro IDE estándar estilo PC para computadoras PDP-8 reales y simuladas.

Se admiten varios tipos de E/S:

Se admite una forma simplificada y económica de DMA denominada "ruptura de datos de tres ciclos"; esto requiere la ayuda del procesador. El método de "interrupción de datos" mueve parte de la lógica común necesaria para implementar E/S DMA desde cada dispositivo de E/S a una copia común de la lógica dentro del procesador. La "ruptura de datos" coloca al procesador a cargo de mantener la dirección DMA y los registros de recuento de palabras. En tres ciclos de memoria sucesivos, el procesador actualiza el recuento de palabras, actualiza la dirección de transferencia y almacena o recupera la palabra de datos de E/S real.

La ruptura de datos de un ciclo triplica efectivamente la tasa de transferencia DMA porque solo es necesario transferir los datos de destino hacia y desde la memoria central. Sin embargo, los dispositivos de E/S necesitan más lógica electrónica para gestionar su propio recuento de palabras y transferir registros de direcciones. Cuando se introdujo el PDP-8/E, la lógica electrónica se había vuelto menos costosa y la "ruptura de datos de un ciclo" se hizo más popular.

Instalaciones de programación

Los primeros sistemas PDP-8 se enviaron sin software preinstalado; Cada vez que se encendía el PDP-8, el usuario ingresaba manualmente las instrucciones utilizando un banco de 12 interruptores de palanca. Normalmente, estas instrucciones eran un cargador de arranque para leer un programa desde el lector de cinta de papel. Luego se podría continuar con el desarrollo del programa, utilizando la entrada y salida de cintas de papel.

Estuvieron disponibles versiones en cinta de papel de varios lenguajes de programación, incluido el intérprete FOCAL de DEC [33] y un compilador y tiempo de ejecución FORTRAN 4K.

Hacia el final de la era PDP-8, sistemas operativos como OS/8 y COS-310 permitían un editor en modo de línea tradicional y un sistema de desarrollo de compilador de línea de comandos utilizando lenguajes como el lenguaje ensamblador PAL-III, FORTRAN, BASIC y DIBOL. .

Estaban disponibles un sistema operativo en tiempo real (RTOS) bastante moderno y avanzado y sistemas multiusuario multitarea preventivos : estaba disponible un sistema en tiempo real (RTS-8), así como sistemas comerciales multiusuario (COS-300 y COS-310) y un sistema de procesamiento de textos dedicado para un solo usuario (WPS-8).

También estaba disponible un sistema de tiempo compartido , TSS-8 . TSS-8 permite que varios usuarios inicien sesión en el sistema a través de terminales de 110 baudios y editen, compilen y depuren programas. Los lenguajes incluyen una versión especial de BASIC, un subconjunto de FORTRAN similar a FORTRAN-1 (sin subrutinas ni funciones escritas por el usuario), un subconjunto de ALGOL , FOCAL y un ensamblador llamado PAL-D.

Una buena cantidad de software donado por los usuarios para el PDP-8 estaba disponible en DECUS , la Sociedad de Usuarios de Digital Equipment Corporation, y a menudo venía con documentación y listados completos de fuentes.

Conjunto de instrucciones

Los tres bits de orden superior de la palabra de instrucción de 12 bits (etiquetados como bits del 0 al 2) son el código de operación. Para las seis operaciones que se refieren a la memoria, los bits 5 al 11 proporcionan una dirección de siete bits. El bit 4, si está configurado, dice que se debe completar la dirección utilizando los cinco bits de orden superior del registro del contador de programa (PC), lo que significa que la ubicación direccionada estaba dentro de las mismas 128 palabras que la instrucción. Si el bit 4 está limpio, se utilizan ceros, por lo que la ubicación direccionada está dentro de las primeras 128 palabras de la memoria. El bit 3 especifica la dirección indirecta; si se establece, la dirección obtenida como se describe hasta ahora apunta a un valor de 12 bits en la memoria que proporciona la dirección efectiva real para la instrucción; De esta manera, los operandos pueden estar en cualquier lugar de la memoria a expensas de una palabra adicional. La instrucción JMP no opera en una palabra de memoria, excepto si se especifica dirección indirecta, pero tiene los mismos campos de bits.

paginas de memoria

Este uso de la palabra de instrucción divide la memoria de 4.096 palabras en páginas de 128 palabras ; El bit 4 de la instrucción selecciona la página actual o la página 0 (direcciones 0000–0177 en octal ). La memoria en la página 0 es escasa, ya que las variables colocadas aquí se pueden abordar directamente desde cualquier página. (Además, la dirección 0000 es donde debe comenzar cualquier rutina de servicio de interrupción, y las direcciones 0010–0017 tienen la propiedad especial de autoincrementarse antes de cualquier referencia indirecta a través de ellas).

El ensamblador estándar coloca valores constantes para la aritmética en la página actual. Asimismo, los saltos entre páginas y las llamadas a subrutinas utilizan una dirección indirecta en la página actual.

Era importante escribir rutinas que encajaran en páginas de 128 palabras, o organizar rutinas para minimizar las transiciones de página, ya que las referencias y los saltos fuera de la página actual requieren una palabra adicional. En consecuencia, se dedicó mucho tiempo a conservar hábilmente una o varias palabras. Los programadores colocaron código deliberadamente al final de una página para lograr una transición libre a la página siguiente a medida que se incrementaba la PC.

Instrucciones básicas

000 – AND – AND el operando de memoria con AC.
001 – TAD – Complemento a dos AGREGUE el operando de memoria a <L,AC> (un valor con signo (AC) de 12 bits con transporte en L).
010 – ISZ – Incrementa el operando de memoria y omite la siguiente instrucción si el resultado es cero.
011 – DCA – Deposita AC en el operando de memoria y borra AC.
100 – JMS – Salto a subrutina (¡almacenando la dirección del remitente en la primera palabra de la subrutina!).
101 – JMP – Saltar.
110 – IOT – Transferencia de entrada/salida (ver más abajo).
111 – OPR – OPeRaciones microcodificadas (ver más abajo).

Instrucciones IOT (Transferencia de entrada-salida)

El procesador PDP-8 definió algunas de las instrucciones de IoT, pero simplemente proporcionó un marco. La mayoría de las instrucciones de IoT fueron definidas por los dispositivos de E/S individuales.

Dispositivo

Los bits 3 a 8 de una instrucción IOT seleccionan un dispositivo de E/S. Algunas de estas direcciones de dispositivos están estandarizadas por convención:

Las instrucciones para el dispositivo 0 afectan al procesador en su conjunto. Por ejemplo, ION (6001) habilita el procesamiento de interrupciones e IOFF (6002) lo deshabilita.

Función

Los bits 9 a 11 de una instrucción IOT seleccionan las funciones que realiza el dispositivo. Los dispositivos simples (como el lector y perforador de cinta de papel, el teclado de la consola y la impresora) utilizan los bits de forma estándar:

Estas operaciones se llevan a cabo en un orden bien definido que proporciona resultados útiles si se establece más de un bit.

Los dispositivos más complicados, como las unidades de disco, utilizan estos 3 bits en formas específicas del dispositivo. Normalmente, un dispositivo decodifica los 3 bits para proporcionar 8 códigos de función posibles.

OPR (tasa de operación)

Muchas operaciones se logran utilizando OPR, incluida la mayoría de las condicionales. OPR no aborda una ubicación de memoria; La ejecución condicional se logra omitiendo condicionalmente una instrucción, que suele ser un JMP.

Se decía que la instrucción OPR estaba "microcodificada". Esto no significaba lo que la palabra significa hoy (que un programa de nivel inferior buscaba e interpretaba la instrucción OPR), sino que cada bit de la palabra de instrucción especifica una determinada acción, y el programador podía lograr varias acciones en un solo ciclo de instrucción. configurando varios bits. En uso, un programador puede escribir varios mnemotécnicos de instrucción uno al lado del otro, y el ensamblador los combina con OR para idear la palabra de instrucción real. Muchos dispositivos de E/S admiten instrucciones IOT "microcodificadas".

Las acciones microcodificadas tienen lugar en una secuencia bien definida diseñada para maximizar la utilidad de muchas combinaciones.

Las instrucciones OPR vienen en Grupos. Los bits 3, 8 y 11 identifican el Grupo de una instrucción OPR, por lo que es imposible combinar las acciones microcodificadas de diferentes grupos.

Grupo 1

 00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 1| 0| | | | | | | | | |__|__|__|__|__|__|__|__|__|__|__|__| |CLA CMA RAR BSW CLL CML RAL IAC Orden de ejecución 1 1 2 2 4 4 4 3
7200 – CLA – Acumulador transparente
7100 – CLL – Borrar el bit L
7040 – CMA – Acumulador de complemento de uno
7020 – CML – Complemento L Bit
7001 – IAC – Incremento <L,CA>
7010 – RAR – Girar <L,AC> derecha
7004 – RAL – Girar <L,AC> hacia la izquierda
7012 – RTR – Girar <L,AC> a la derecha dos veces
7006 – RTL – Girar <L,AC> hacia la izquierda dos veces
7002 – BSW – Intercambio de bytes "bytes" de 6 bits (PDP 8/e y superiores)

En la mayoría de los casos, las operaciones están secuenciadas para que puedan combinarse de la forma más útil. Por ejemplo, al combinar CLA (CLear Accumulator), CLL (CLear Link) e IAC (Increment ACcumulator), primero se borra el AC y el Link, luego se incrementa el acumulador, dejándolo en 1. Agregar RAL a la mezcla (por lo que CLA CLL IAC RAL) hace que el acumulador se borre, se incremente y luego se gire hacia la izquierda, dejándolo en 2. De esta manera, se colocaron pequeñas constantes enteras en el acumulador con una sola instrucción.

La combinación CMA IAC, que el ensamblador le permite abreviar como CIA, produce la inversa aritmética de AC: la negación en complemento a dos. Dado que no existe una instrucción de resta, solo la suma en complemento a dos (TAD), que calcula la diferencia de dos operandos, requiere primero negar el sustraendo.

Una instrucción OPR del Grupo 1 que no tiene ninguno de los bits microprogramados configurados no realiza ninguna acción. El programador puede escribir NOP (Sin operación) para ensamblar dicha instrucción.

Grupo 2, o grupo

 00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 1| 1| | | | | 0| | | 0| |__|__|__|__|__|__|__|__|__|__|__|__| |CLA SZA OSR SMA SNL HLT 2 1 1 1 3 3
7600 – CLA – Claro CA
7500 – SMA – Saltar en AC < 0 (o grupo)
7440 – SZA – Saltar en AC = 0 (o grupo)
7420 – SNL – Saltar en L ≠ 0 (o grupo)
7404 – OSR – interruptores del panel frontal lógicamente 'o' con CA
7402 – HLT – Detener

Cuando el bit 8 está limpio, se realiza un salto si alguna de las condiciones especificadas es verdadera. Por ejemplo, "SMA SZA", código de operación 7540, se omite si AC ≤ 0.

Una instrucción OPR del Grupo 2 que no tiene ninguno de los bits microprogramados configurados es otra instrucción No-Op.

Grupo 2 y grupo

 00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 1| 1| | | | | 1| | | 0| |__|__|__|__|__|__|__|__|__|__|__|__| |CLA SNA OSR SPA SZL HLT 2 1 1 1 3 2
7410 – SKP – Saltar incondicionalmente
7610 – CLA – Claro CA
7510 – SPA – Saltar en AC ≥ 0 (y grupo)
7450 – SNA – Saltar en AC ≠ 0 (y grupo)
7430 – SZL – Saltar en L = 0 (y grupo)

Cuando se establece el bit 8, la condición de omisión O del grupo 2 se invierte mediante las leyes de De Morgan : la omisión no se realiza si alguna de las condiciones O del grupo 2 es verdadera, lo que significa que todas las condiciones de omisión especificadas deben ser verdaderas. Por ejemplo, "SPA SNA", código de operación 7550, se omite si AC > 0. Si no se establece ninguno de los bits 5 a 7, el salto es incondicional.

grupo 3

Las combinaciones de bits no utilizados de OPR se definen como un tercer grupo de acciones microprogramadas que afectan principalmente al registro MQ (Multiplicador/Cociente). El registro MQ y las instrucciones del elemento aritmético extendido (EAE) son opcionales y solo existen cuando se adquirió la opción EAE. [34]

 00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 1| 1| | | | | | | | 1| |__|__|__|__|__|__|__|__|__|__|__|__| |CLA SCA \_ _/ | CÓDIGO MQL 1* 2 2 2 3
7601 – CLA – Claro CA
7501 – MQA – Cociente multiplicador con AC (lógico o MQ en AC)
7441 – SCA – Carga del contador de pasos en CA
7421 – MQL – Carga de cociente multiplicador (transferir AC a MQ, borrar AC)
7621 – CAM – CLA + MQL borra tanto AC como MQ.

Normalmente, CLA y MQA se combinaban para transferir MQ a AC. Otra combinación útil es MQA y MQL, para intercambiar los dos registros.

Tres bits especificaban una instrucción de multiplicar/dividir para realizar:

7401 – Sin operación
7403 – SCL – Carga del contador de pasos (sigue la palabra inmediata, PDP-8/I y superiores)
7405 – MUY – Multiplicar
7407 – DVI – Dividir
7411 – NMI – Normalizar
7413 – SHL – Desplazamiento a la izquierda (sigue la palabra inmediata)
7415 – ASR – Desplazamiento aritmético a la derecha
7417 – LSR – Cambio lógico a la derecha

Control de memoria

Pila de memoria central PDP-8/I
Uno de los tres módulos interconectados que conforman un plano de memoria central PDP-8.
Uno de los tres módulos interconectados que conforman un plano de memoria central PDP-8. Este es el medio de los tres y contiene la matriz de núcleos de ferrita reales.
Uno de los tres módulos interconectados que conforman un plano de memoria central PDP-8.

Una palabra de 12 bits puede tener 4096 valores diferentes, y este es el número máximo de palabras que el PDP-8 original puede direccionar indirectamente a través de un puntero de palabra. 4.096 palabras de 12 bits representan 6.144 bytes en terminología moderna, o 6 kB. A medida que los programas se volvieron más complejos y el precio de la memoria cayó, se hizo deseable ampliar este límite.

Para mantener la compatibilidad con programas preexistentes, nuevo hardware fuera del diseño original agregó bits de alto orden a las direcciones efectivas generadas por el programa. El controlador de extensión de memoria expande la memoria direccionable por un factor de 8, hasta un total de 32,768 palabras. Esta expansión se consideró suficiente porque, dado que la memoria central costaba entonces alrededor de 50 centavos por palabra, 32 KB de memoria equivaldrían al costo de la CPU.

Cada 4K de memoria se llama campo. El controlador de extensión de memoria contiene dos registros de tres bits: el DF (campo de datos) y el IF (campo de instrucciones). Estos registros especifican un campo para cada referencia de memoria de la CPU, haciendo un total de 15 bits de dirección. El registro IF especifica el campo para búsquedas de instrucciones y referencias directas a memoria; el registro DF especifica el campo para accesos indirectos a datos. Un programa que se ejecuta en un campo puede hacer referencia a datos en el mismo campo mediante direccionamiento directo y hacer referencia a datos en otro campo mediante direccionamiento indirecto.

El controlador de extensión de memoria maneja un conjunto de instrucciones de E/S en el rango 6200 a 6277 y brinda acceso a los registros DF e IF. La instrucción 62X1 (CDF, ​​Cambiar campo de datos) establece el campo de datos en X. De manera similar, 62X2 (CIF) establece el campo de instrucción y 62X3 establece ambos. Los programas preexistentes nunca ejecutarían CIF o CDF; los registros DF e IF apuntarían ambos al mismo campo, un único campo al que se limitaban estos programas. El efecto de la instrucción CIF se difirió para que coincidiera con la siguiente instrucción JMP o JMS, de modo que la ejecución de CIF no provocara un salto.

Era más complicado para los programas de campos múltiples lidiar con los límites de los campos y los registros DF e IF de lo que hubiera sido si pudieran simplemente generar direcciones de 15 bits, pero el diseño proporcionó compatibilidad con versiones anteriores y es consistente con la arquitectura de 12 bits. utilizado en todo el PDP-8. Compárese con el Intel 8086 posterior , cuyas direcciones de memoria de 16 bits se amplían a 20 bits combinándolas con el contenido de un registro de segmento específico o implícito .

El esquema de memoria extendida permite que los programas existentes manejen una mayor memoria con cambios mínimos. Por ejemplo, 4K FOCAL normalmente tenía alrededor de 3K de código y solo quedaba 1K para el programa y los datos del usuario. Con algunos parches, FOCAL podría utilizar un segundo campo 4K para los programas y datos del usuario. Además, se podrían asignar campos 4K adicionales a usuarios separados, convirtiendo 4K FOCAL en un sistema de tiempo compartido multiusuario.

Virtualización

En los modelos PDP-8/E y posteriores, se mejoró el controlador de extensión de memoria para permitir la virtualización de la máquina. Un programa escrito para utilizar todos los recursos de un PDP-8 puede coexistir con otros programas similares en el mismo PDP-8 bajo el control de un administrador de máquina virtual. El administrador puede hacer que todas las instrucciones de E/S (incluidas las que operaron en el controlador de extensión de memoria) causen una trampa (una interrupción manejada por el administrador). De esta manera, el administrador puede asignar referencias de memoria, asignar datos o campos de instrucciones y redirigir E/S a diferentes dispositivos. Cada programa original tiene acceso completo a una "máquina virtual" proporcionada por el administrador.

Las nuevas instrucciones de E/S para el controlador de extensión de memoria recuperan el valor actual de los campos de datos e instrucciones, lo que permite que el software guarde y restaure la mayor parte del estado de la máquina en una trampa. Sin embargo, un programa no puede detectar si la CPU está en el proceso de diferir el efecto de una instrucción CIF (si ha ejecutado un CIF y aún no ha ejecutado la instrucción de salto correspondiente). El gestor tiene que incluir un emulador PDP-8 completo (nada difícil para una máquina de 8 instrucciones). Siempre que una instrucción CIF atrapa al administrador, este debe emular las instrucciones hasta el siguiente salto. Afortunadamente, como un salto suele ser la siguiente instrucción después de CIF, esta emulación no ralentiza mucho los programas, pero es una gran solución a una deficiencia de diseño aparentemente pequeña. [ cita necesaria ]

En el momento del PDP-8/A, los precios de la memoria habían caído lo suficiente como para que fuera deseable una memoria superior a 32K. El 8/A añadió un nuevo conjunto de instrucciones para manejar más de ocho campos de memoria. El número de campo ahora se puede colocar en el AC, en lugar de codificarlo en la instrucción. Sin embargo, en ese momento, el PDP-8 estaba en declive, por lo que se modificó muy poco el software estándar para utilizar estas nuevas funciones.

Ejemplos

Los siguientes ejemplos muestran código en lenguaje ensamblador PDP-8 como se podría escribir para el ensamblador PAL-III.

Comparando dos números

El siguiente fragmento de código muestra lo que se necesita para comparar dos números:

 /Comparar números en memoria en OPD1 y OPD2 CLA CLL/Debe comenzar con 0 en AC y vincular TAD OPD1 /Cargar el primer operando en AC (sumándolo a 0); el enlace sigue claro CIA /Complementar, luego incrementar AC, negándolo TAD OPD2 /AC ahora tiene OPD2-OPD1; si OPD2≥OPD1, la suma se desborda y se establece el enlace SZL /Omitir si el enlace está claro JMP OP2GT /Saltar a algún lugar en el caso de que OPD2≥OPD1; /De lo contrario, siga el código siguiente.

Como se muestra, gran parte del texto de un programa PDP-8 típico no se centra en el algoritmo previsto por el autor sino en mecánicas de bajo nivel. Un problema de legibilidad adicional es que en saltos condicionales como el que se muestra arriba, la instrucción condicional (que salta el JMP) resalta lo opuesto a la condición de interés.

Salida de cadena

Este programa completo en lenguaje ensamblador PDP-8 genera "¡Hola, mundo!" al teletipo.

 *10 / Establecer el origen del ensamblaje actual en la dirección 10, STPTR, STRNG-1 / Un registro de incremento automático (uno de ocho en 10-17) *200 / Establecer el origen del ensamblaje actual en el área de texto del programa HOLA, CLA CLL / Borrar AC y vincular nuevamente (necesario cuando volvemos desde tls) TAD IZ STPTR / Obtener el siguiente carácter, indirecto a través de la dirección de incremento automático previo desde la página cero SNA/Omitir si es distinto de cero (no es el final de la cadena) HLT / De lo contrario, detenerse en cero (fin de cadena) TLS / Salida del carácter en el AC a la teleimpresora TSF/Omitir si el teleimpresor está listo para el personaje JMP .-1 / De lo contrario salta atrás y vuelve a intentarlo JMP HOLA / Saltar hacia atrás para el siguiente personaje FUERTE, 310 / H 345/e 354 / litro 354 / litro 357/o 254/, 240 / (espacio) 367/s 357/o 362/r 354 / litro 344 / día 241 / ! 0 / Fin de cadena $HOLA /TERMINADOR PREDETERMINADO

Subrutinas

El procesador PDP-8 no implementa una pila sobre la cual almacenar registros u otro contexto cuando se llama a una subrutina o se produce una interrupción . (Se puede implementar una pila en software, como se demuestra en la siguiente sección). En cambio, la instrucción JMS simplemente almacena la PC actualizada (apuntando más allá de JMS, a la dirección de retorno) en la dirección efectiva y salta a la dirección efectiva más uno. La subrutina regresó a su llamador usando una instrucción JMP indirecta que aborda la primera palabra de la subrutina.

Por ejemplo, aquí está "¡Hola mundo!" reescrito para usar una subrutina. Cuando la instrucción JMS salta a la subrutina, modifica el 0 codificado en la ubicación OUT1:

 *10 / Establecer el origen del ensamblaje actual en la dirección 10, STPTR, STRNG-1 / Un registro de incremento automático (uno de ocho en 10-17) *200 / Establecer origen de ensamblaje (dirección de carga) LOOP, TAD I STPTR / Preincremento de ubicación de memoria 10, búsqueda indirecta para obtener el siguiente carácter de nuestro mensaje SNA / Saltar en AC distinto de cero HLT / De lo contrario, detener al final del mensaje JMS OUT1 / Escribe un carácter JMP LOOP / Y retroceda para ver más OUT1, 0 / Será reemplazado por la PC actualizada de la persona que llama TSF/Omitir si la impresora está lista JMP .-1 / Esperar bandera TLS / Enviar el personaje en el AC CLA CLL / Borrar AC y Link para el próximo pase JMP I OUT1 / Volver a la persona que llama STRNG, "H / Un mensaje muy conocido "mi / "l / NOTA: "l/ "o / Las cadenas en PAL-8 y PAL-III eran de "seis bits" ", / Para usar ASCII, lo deletreamos, carácter por carácter " / "con/ "o / "r/ "l/ "d / "! / 015 / 012 / 0 / Marca el final de nuestra cadena terminada en nulo (¡.ASCIZ aún no se había inventado!)

El hecho de que la instrucción JMS utilice la palabra justo antes del código de la subrutina para depositar la dirección del remitente evita la reentrada y la recursión sin trabajo adicional por parte del programador. También dificulta el uso de ROM con el PDP-8 porque el almacenamiento de direcciones de retorno de lectura y escritura se mezcla con el almacenamiento de códigos de sólo lectura en el espacio de direcciones. Los programas destinados a colocarse en ROM abordan este problema de varias maneras:

 JUMPL, DCA TEMP / Depositar el acumulador en alguna ubicación temporal TAD JUMPL+3 / Cargar la dirección del remitente en el acumulador: codificado JMP SUBRO / Vaya a la subrutina y haga que se encargue de saltar hacia atrás (a JUMPL+3)

El uso de la instrucción JMS dificulta la depuración. Si un programador comete el error de hacer que una subrutina se llame a sí misma, directamente o mediante una subrutina intermedia, entonces la dirección de retorno de la llamada externa es destruida por la dirección de retorno de la llamada posterior, lo que lleva a un bucle infinito. Si un módulo está codificado con una dirección incorrecta u obsoleta para una subrutina, no sólo dejaría de ejecutar toda la secuencia de código de la subrutina, sino que podría modificar una palabra del código de la subrutina, depositando una dirección de retorno que el procesador podría interpretar como una instrucción durante una posterior llamada correcta a la subrutina. Ambos tipos de errores pueden resultar evidentes durante la ejecución de un código escrito correctamente.

Pila de software

Aunque el PDP-8 no tiene una pila de hardware , las pilas se pueden implementar en software. [35] A continuación se muestran ejemplos de subrutinas PUSH y POP, simplificadas para omitir problemas como las pruebas de desbordamiento y desbordamiento de pila:

 *100 /hacer que las rutinas sean accesibles para el siguiente ejemplo EMPUJAR, 0 DATOS DEL DCA CLA CMA / -1 TAD SP DCA SP DATOS PEQUEÑOS DCA ISP JMP EMPUJO /Regresar pop, 0 CLA CLL TAD I SP ISZ SP JMP I POP DATOS, 0 SP, 0

Y aquí está "Hola Mundo" con esta "pila" implementada y la subrutina "FUERA":

 *200 PRINCIPAL, CLA CLL /Establecer el puntero del mensaje TAD (MESSG /Al inicio del mensaje (literal) DCA SP BUCLE, JMS POP SNA /Detener la ejecución si es cero HLT JMS OUT /De lo contrario, genera un carácter BUCLE JMP MENSAJE, "H "mi "yo "yo "oh ", " "w "oh "r "yo "d "! 015 012 0 OUT, 0 / Será reemplazado por la PC actualizada de la persona que llama TSF/Omitir si la impresora está lista JMP .-1 / Esperar bandera TLS / Enviar el personaje en el AC CLA CLL / Borrar AC y Link para el próximo pase JMP I OUT / Volver a la persona que llama

Lista enlazada

Otra posible subrutina para el PDP-8 es una lista enlazada.

 GETN, 0 /Obtiene el número señalado y mueve el puntero CLA CLL/acumulador transparente TAD I PTR /Obtiene el número señalado DCA TEMP /Guardar valor actual ISZ PTR/puntero de incremento TAD I PTR /Obtener siguiente dirección DCA PTR / Poner puntero JMP OBTENGO /regresar PTR, 0 TEMPERATURA, 0

Interrumpe

Hay una única línea de interrupción en el bus de E/S del PDP-8. El procesador maneja cualquier interrupción deshabilitando interrupciones adicionales y ejecutando una JMSen la ubicación 0000. Como es difícil escribir subrutinas reentrantes, es difícil anidar interrupciones y esto generalmente no se hace; cada interrupción se ejecuta hasta su finalización y vuelve a habilitar las interrupciones justo antes de ejecutar la JMP I 0instrucción que regresa de la interrupción.

Debido a que solo hay una línea de interrupción en el bus de E/S, la ocurrencia de una interrupción no informa al procesador del origen de la interrupción. En cambio, la rutina del servicio de interrupción tiene que sondear en serie cada dispositivo de E/S activo para ver si es la fuente. El código que hace esto se llama cadena de omisión porque consta de una serie de instrucciones de E/S de "prueba y omisión si se establece el indicador" PDP-8. (No era raro que una cadena de salto llegara a su final sin encontrar ningún dispositivo que necesitara servicio). La prioridad de interrupción relativa de los dispositivos de E/S está determinada por su posición en la cadena de salto: si varios dispositivos se interrumpen, el dispositivo probado anteriormente en la cadena de salto recibe servicio primero.

Libros

Un libro de texto de ingeniería popular en la década de 1980, The Art of Digital Design de David Winkel y Franklin Prosser, contiene un problema de ejemplo que abarca varios capítulos en los que los autores demuestran el proceso de diseño de una computadora que sea compatible con el PDP-8/I. Se explica la función de cada componente. Aunque no es un diseño de producción, ya que utiliza componentes SSI y MSI más modernos y estado sólido en lugar de memoria central, el ejercicio proporciona una descripción detallada del funcionamiento de la computadora.

Clones sin licencia

La URSS produjo las minicomputadoras Saratov-1 y Saratov-2, que clonaron el PDP-8 y el PDP-8/E , respectivamente.

Había un miniordenador llamado IZOT-0310, producido en Bulgaria en los años 70 y 80, que clonaba el PDP-8L.

Referencias

  1. ^ ab "Resumen de modelos y opciones del PDP-8". Sección - ¿Qué es un PDP-5?
  2. ^ ab Douglas W. Jones . "The Digital Equipment Corporation PDP-8 - Preguntas frecuentes".
  3. ^ 1634-1699: McCusker, JJ (1997). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de los valores monetarios en la economía de los Estados Unidos: Addenda et Corrigenda (PDF) . Sociedad Estadounidense de Anticuarios .1700–1799: McCusker, JJ (1992). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de los valores monetarios en la economía de los Estados Unidos (PDF) . Sociedad Estadounidense de Anticuarios .1800-presente: Banco de la Reserva Federal de Minneapolis. "Índice de precios al consumidor (estimación) 1800–" . Consultado el 28 de mayo de 2023 .
  4. ^ ab Schein, Edgar H. (2004). DEC ha muerto, larga vida a DEC: el legado duradero de Digital Equipment Corporation. San Francisco, California: Berrett-Koehler Publishers. pag. 271.ISBN _ 1576753050.
  5. ^ Douglas W. Jones. "La Corporación de Equipos Digitales PDP-8".
  6. ^ "PDP-8 1965". Historia cableada . Institución Smithsonian . 16 de marzo de 2012. Archivado desde el original el 17 de febrero de 2015 . Consultado el 17 de febrero de 2015 .
  7. ^ ab "PDP-8/S #1". Museo de la Computación de Rhode Island . 18 de agosto de 2020. Archivado desde el original el 26 de febrero de 2021 . Consultado el 7 de mayo de 2021 .
  8. ^ Glenn Rifkin; George Harrar (1988). El emprendedor definitivo: la historia de Ken Olsen y Digital Equipment Corporation. Libros contemporáneos. ISBN 978-1-55958-022-9.
  9. ^ Manual de computadoras pequeñas, NUEVA edición PDP 8 / I (adelante) . Corporación de equipos digitales . 1968.
  10. ^ "Evaluación comparativa de los idiomas". Revista PC . vol. 4, núm. 22. 29 de octubre de 1985. p. 112. el mejor uso del recurso informático más preciado de la actualidad: el tiempo de un programador...
  11. ^ una frase utilizada en la Sección 1.1 de "Introducción a la Unidad Central de Procesamiento (CPU)" de un documento de 2007 sobre una microcomputadora de Texas Instruments. "CPU TMS320C28x y conjunto de instrucciones (Rev. F)" (PDF) .
  12. ^ Torben Ægidius Mogensen (20 de agosto de 2010). Conceptos básicos del diseño de compiladores (PDF) . pag. 1. Otra ventaja de utilizar un lenguaje de alto nivel es que el mismo programa puede compilarse en muchos lenguajes de máquina diferentes y, por lo tanto, ejecutarse en muchas máquinas diferentes.
  13. ^ C. Gordon Bell ; JC Mudge; JE McNamara (1978). Ingeniería informática: una visión de DEC del diseño de sistemas de hardware (PDF) . Prensa Digital . pag. 175.ISBN _ 0-932376-00-2.
  14. ^ Manual de referencia para programadores de sistemas de punto flotante PDP-8 (PDF) . Corporación de equipos digitales. Septiembre de 1969. DIC-08-YQYB-D.
  15. ^ "Sistema de composición tipográfica PDP-8" (PDF) . Corporación de equipos digitales. 1965.
  16. ^ C. Gordon Bell, et al.; Estructuras informáticas, principios y organización, 1982, capítulo PDP-8
  17. ^ "Capítulo 8: Elemento aritmético extendido tipo 182". Manual del usuario de PDP-8 . Corporación de equipos digitales. 1966. pág. 41.
  18. ^ "Capítulo 4: Descripción y funcionamiento del sistema". Introducción a la programación (PDF) . Corporación de equipos digitales. 1969, págs. 4-22.
  19. ^ Manual de mantenimiento del PDP-8/S . Corporación de equipos digitales. 1971.
  20. ^ "PDP-8/S". Tecnología PDP-8 antes del milenio . Archivado desde el original el 23 de octubre de 2000 . Consultado el 13 de mayo de 2021 .
  21. ^ Remo J. Vogelsang (2013). "De primera mano: PDP-8/E OMNIBUS Ride".
  22. ^ "Resumen de modelos y opciones de PDP-8 (publicado cada dos meses)". www.faqs.org .
  23. ^ "PDP-8: una computadora digital de alta velocidad" (PDF) . 1965. pág. 18.
  24. ^ Manual de mantenimiento del PDP-8/S (PDF) (5ª ed.). Octubre de 1970. p. 1-2.
  25. ^ "Tabla 11. Datos de instalación". Manual de computadoras pequeñas (PDF) (edición 1967-68). 1968. pág. 290 (300).
  26. ^ "Tabla 13-1 Datos de instalación". Manual de computadoras pequeñas (PDF) (edición de 1970). 1970. pág. 277 (291).
  27. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pag. 17.
  28. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pag. 17.
  29. ^ "Museo de la informática de origen del sistema: PDP-8M".
  30. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pag. 17.
  31. ^ "La explosión 1975-1976» AntiqueTech ". AntiqueTech.com. 2009-04-21. Archivado desde el original el 3 de julio de 2017 . Consultado el 19 de junio de 2017 .
  32. ^ ab Bell, Gordon (1980), Árbol genealógico de las computadoras digitales, (póster), Digital Equipment Corporation , consultado el 19 de junio de 2017
  33. ^ Manual de programación FOCAL para PDP-8, PDP-8/S, PDP-8/I, LAB-8, LINC-8 (PDF) . Corporación de equipos digitales. 1968. 08-DIC-AJAB-D.
  34. ^ Manual de informática pequeña 1967-1968 . Corporación de equipos digitales. 1968, págs. 130-136.
  35. ^ Mark Smotherman. "Subrutinas DEC PDP-8". 2002.

enlaces externos