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 comercialmente exitosa, con más de 50.000 unidades vendidas durante la vida útil del modelo. [1] Su diseño básico sigue el pionero LINC pero tiene un conjunto de instrucciones más pequeño , que es una versión expandida del conjunto de instrucciones PDP-5 . [2] Máquinas similares de DEC son el 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 de cinta DEC TU56 dual en la parte superior
Un "Straight-8" funcionando en el Museo de Informática de Stuttgart

El primer modelo PDP-8, conocido informalmente como "Straight-8", se presentó el 22 de marzo de 1965 con un precio de 18.500 dólares [3] (equivalente a unos 178.900 dólares en 2023 [4] ). Utiliza lógica de diodo-transistor empaquetada en tarjetas con chip invertido en una máquina del tamaño de un pequeño frigorífico doméstico . Fue el primer ordenador que se vendió por menos de 20.000 dólares, [5] convirtiéndolo en el ordenador más vendido de la historia en ese momento. [6] [ verificación fallida ] [7] [ 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. Un 8/S básico se vendió por menos de 10.000 dólares, la primera máquina en alcanzar ese hito. [5] [8]

Los sistemas posteriores (el PDP-8/I y /L, el PDP-8/E, /F y /M, y el PDP-8/A) volvieron a una implementación más rápida y completamente paralela, pero utilizan lógica transistor-transistor (TTL) MSI mucho menos costosa . 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ó los circuitos integrados comercialmente hasta 1982 como la familia Intersil 6100. En virtud de su tecnología CMOS, tenían bajos requisitos de energía y se utilizaron 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 . [9]

Importancia arquitectónica

El PDP-8 combina bajo costo, [3] simplicidad, capacidad de expansión y un diseño cuidadoso para generar valor. La mayor importancia histórica fue que el bajo costo y el alto volumen del PDP-8 hicieron que un ordenador estuviera disponible para muchos nuevos clientes y para muchos nuevos usos. Su importancia continua es la de ser un ejemplo histórico de diseño de ordenadores con ingeniería de valor [10] .

La baja complejidad trajo consigo otros costos. Hizo que la programación fuera engorrosa, como se ve en los ejemplos de este artículo y en la discusión de "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, el cual codifica 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 señala a continuación, la recursión inadvertida 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. [11] Los diseños de computadoras posteriores enfatizaron la facilidad de programación, generalmente utilizando conjuntos de instrucciones más grandes e intuitivos. [12]

Con el tiempo, la mayor parte del código de máquina fue generado por compiladores y generadores de informes. [13] La computadora con conjunto de instrucciones reducido volvió al punto de partida del énfasis del PDP-8 en un conjunto de instrucciones simple y en lograr múltiples acciones en un solo ciclo de instrucción, con el fin de 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 . [2] [14]

PDP-8/e en el Museo de Computadores Vivientes .

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

El espacio de direcciones de 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  KiB en términos modernos. Una unidad de expansión de memoria opcional puede cambiar bancos de memorias utilizando una instrucción IOT. La memoria es una memoria de núcleo magnético con un tiempo de ciclo de 1,5 microsegundos (0,667 MHz ), de modo que una instrucción de referencia de memoria típica de dos ciclos (Obtener, 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ásico 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 las telecomunicaciones y el texto contemporáneos. Los códigos de caracteres de seis bits eran de uso generalizado en esa época, y las palabras de doce bits del PDP-8 pueden almacenar de manera eficiente dos de esos caracteres. Además, un código de teleimpresor de seis bits llamado código de teletipo o código TTS era de uso generalizado por los servicios de noticias por cable, y una de las primeras aplicaciones del PDP-8 fue la composición tipográfica utilizando este código. [16]

Las instrucciones PDP-8 tienen un código de operación de tres bits, por lo que solo hay ocho instrucciones. El programador puede usar muchos mnemónicos de instrucciones adicionales, que el ensamblador traduce a instrucciones OPR o IOT específicas. El PDP-8 tiene solo 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). Los registros adicionales no visibles para el programador son un registro de búfer de memoria y un registro de dirección de memoria . Para ahorrar dinero, estos sirven para múltiples propósitos en diferentes puntos del ciclo operativo. Por ejemplo, el registro de búfer de memoria proporciona operandos aritméticos, es parte del registro de instrucciones y almacena datos para reescribir la memoria central , que se borra cuando se lee.

Para la 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 cinta de papel y lectores, mientras que el DMA se utiliza para pantallas de tubo de rayos catódicos con un lápiz óptico , convertidores analógico-digitales , convertidores digital-analógicos , unidades de cinta y unidades de disco .

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

Los modelos básicos utilizan software para realizar operaciones de multiplicación y división. Para realizar operaciones 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, [18] el 8/I, [19] y el 8/E, pero es una parte integral del microprocesador Intersil 6100 .

El PDP-8 está optimizado para simplificar el diseño . En comparación con máquinas más complejas, se eliminaron las características innecesarias y se comparte la lógica cuando es posible. Las instrucciones utilizan incremento automático, borrado automático y acceso indirecto para aumentar la velocidad del software, reducir el uso de memoria y sustituir registros costosos por memoria económica.

Debido a su simplicidad, los primeros modelos PDP-8 eran menos costosos que la mayoría de las demás computadoras disponibles comercialmente. Sin embargo, utilizaban métodos de producción costosos, que a menudo se usan para prototipos. Utilizaban miles de módulos lógicos estandarizados muy pequeños, con conectores de oro, integrados por una costosa y compleja placa posterior envuelta en cables en un gabinete grande.

En el modelo 8/S posterior, introducido en agosto de 1966, [8] dos voltajes lógicos diferentes aumentaron la distribución de la lógica de diodo-transistor de bajo costo . [20] El 8/S también redujo la cantidad de puertas lógicas al usar una ruta de datos serial de un solo bit de ancho para hacer aritmética. La CPU del PDP-8/S tiene solo alrededor de 519 puertas lógicas . En comparación, los microcontroladores pequeños (a partir de 2008) generalmente tienen 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. [21]

El PDP-8/E, aún más reciente, es un ordenador más grande y con más capacidad, pero rediseñado para ofrecer una mejor relación calidad-precio. 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 el OMNIBUS en lugar de la placa base envuelta en alambre de los modelos anteriores. (Puede leerse un relato personal del desarrollo del PDP-8/E en el Wiki de Historia de la Ingeniería y la Tecnología. [22] )

Modelos

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

Implementaciones de última generación

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 individuales.

En Internet se encuentran disponibles varias simulaciones de software de una PDP-8, así como reimplementaciones de hardware de código abierto . Las mejores de ellas ejecutan correctamente los sistemas operativos y el software de diagnóstico de DEC. Las simulaciones de software a menudo simulan modelos PDP-8 más recientes con todos los periféricos posibles. Incluso estos utilizan solo una fracción minúscula de la capacidad de un ordenador personal moderno.

Una de las primeras versiones comerciales de una máquina virtual PDP-8/S se ejecutó en un Kaypro 386 (un ordenador basado en el 80386) y fue escrita en lenguaje de programación C (antes de que se finalizara el estándar ANSI-C) y ensamblador por David Beecher de Denver, Colorado. Reemplazó a un ordenador PDP-8/S defectuoso que operaba la máquina de manipulación de combustible en el reactor n.º 85, la central eléctrica alimentada con combustible nuclear de Platteville, Colorado, Ft. St. Vrain. Fue revisada por Rockwell International y funcionó sin problemas durante 2,5 años durante el funcionamiento de la máquina de manipulación de combustible mientras se utilizaba para retirar combustible del núcleo del reactor y desmantelar la planta. Incluía un cargador de cinta de papel simulado y un panel frontal.

Entrada/salida

Los sistemas de E/S sufrieron grandes cambios durante la era PDP-8. Los primeros modelos PDP-8 utilizan una interfaz en el 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 añadieron sistemas de E/S como cinta magnética , terminales RS-232 y 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 de cabezal móvil eran dispositivos de E/S populares. Los entusiastas modernos han creado adaptadores de disco duro IDE de estilo PC estándar para ordenadores PDP-8 reales y simulados.

Se admiten varios tipos de E/S:

Se admite una forma simplificada y económica de DMA denominada "interrupción de datos de tres ciclos"; esto requiere la asistencia del procesador. El método de "interrupción de datos" traslada parte de la lógica común necesaria para implementar la E/S de DMA desde cada dispositivo de E/S a una copia común de la lógica dentro del procesador. La "interrupción de datos" hace que el procesador se encargue de mantener los registros de dirección y recuento de palabras de DMA. 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 interrupción de datos de un ciclo triplica efectivamente la tasa de transferencia de 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 administrar su propio conteo de palabras y registros de dirección de transferencia. Cuando se introdujo el PDP-8/E, la lógica electrónica se había vuelto menos costosa y la "interrupción de datos de un ciclo" se hizo más popular.

Instalaciones de programación

Los primeros sistemas PDP-8 se entregaban sin software preinstalado; cada vez que se encendía el PDP-8, el usuario introducía manualmente las instrucciones mediante 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. A continuación, se podía continuar con el desarrollo del programa, utilizando la entrada y salida de cinta de papel.

Se pusieron a disposición versiones en cinta de papel de varios lenguajes de programación, incluido el intérprete FOCAL de DEC [35] y un compilador y entorno de ejecución FORTRAN 4K .

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

Se encontraban disponibles sistemas operativos en tiempo real (RTOS) bastante modernos y avanzados y sistemas multiusuario con multitarea preventiva : 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 o 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 listados completos de fuentes y documentación.

Conjunto de instrucciones

Los tres bits de orden superior de la palabra de instrucción de 12 bits (etiquetados como bits 0 a 2) son el código de operación. Para las seis operaciones que hacen referencia a la memoria, los bits 5 a 11 proporcionan una dirección de siete bits. El bit 4, si está activado, indica 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á en blanco, se utilizan ceros, por lo que la ubicación direccionada está dentro de las primeras 128 palabras de la memoria. El bit 3 especifica indirección; si está activado, la dirección obtenida como se describió 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 parte de la memoria a expensas de una palabra adicional. La instrucción JMP no opera sobre una palabra de memoria, excepto si se especifica indirección, pero tiene los mismos campos de bits.

Páginas 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 muy valiosa, ya que las variables colocadas aquí pueden ser direccionadas 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 autoincrementar antes de cualquier referencia indirecta a través de ellas).

El ensamblador estándar coloca valores constantes para operaciones aritméticas 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 se ajustaran a páginas de 128 palabras, o disponer 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 inteligentemente una o varias palabras. Los programadores colocaron deliberadamente código al final de una página para lograr una transición libre a la página siguiente a medida que se incrementaba el PC.

Instrucciones básicas

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

Instrucciones de 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 dispositivo están estandarizadas por convención:

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

Función

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

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

Los dispositivos más complejos, como las unidades de disco, utilizan estos 3 bits de forma específica. Normalmente, un dispositivo decodifica los 3 bits para obtener 8 códigos de función posibles.

OPR (tasa operativa)

Muchas operaciones se realizan mediante OPR, incluidas la mayoría de las condicionales. OPR no se dirige a una ubicación de memoria; la ejecución condicional se logra omitiendo condicionalmente la siguiente instrucción, que normalmente es una 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 obtenía e interpretaba la instrucción OPR), sino que cada bit de la palabra de instrucción especificaba 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 varias mnemotecnias de instrucción una al lado de la otra y el ensamblador las combina con OR para idear la palabra de instrucción real. Muchos dispositivos de E/S admiten instrucciones de IoT "microcodificadas".

Las acciones microcodificadas se llevan a cabo en una secuencia bien definida diseñada para maximizar la utilidad de muchas combinaciones.

Las instrucciones OPR se presentan 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.

Una acción (y bit correspondiente) que es la misma en todos los grupos es el bit 4, CLA. Si está activado, se borra el acumulador.

Grupo 1

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

En la mayoría de los casos, las operaciones se ordenan en secuencia de modo que se puedan combinar de las formas más útiles. Por ejemplo, al combinar CLA (CLear Accumulator), CLL (CLear Link) e IAC (Increment ACcumulator), primero se borran AC y Link, luego se incrementa el acumulador y se deja establecido en 1. Al agregar RAL a la mezcla (por lo tanto, CLA CLL IAC RAL), se borra el acumulador, se incrementa y luego se gira a la izquierda, dejándolo establecido en 2. De esta manera, se colocaron constantes enteras pequeñas en el acumulador con una sola instrucción.

La combinación CMA IAC, que el ensamblador permite abreviar como CIA, produce la inversa aritmética de AC: la negación en complemento a dos. Como no hay 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 activados 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 – Aire acondicionado transparente
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 – lógicamente 'o' interruptores del panel frontal con CA
7402 – HLT – Detener

Tres de los bits (CLA, OSR, HLT) realizan acciones si se configuran. Otros tres bits (SMA, SZA, SNL) codifican condiciones de omisión; se realiza una omisión si alguna de las condiciones especificadas es verdadera. Por ejemplo, "SMA SZA", código de operación 7540, 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 – Aire acondicionado transparente
7510 – SPA – Saltar en AC ≥ 0 (y grupo)
7450 – SNA – Salto en AC ≠ 0 (y grupo)
7430 – SZL – Saltar en L = 0 (y grupo)

Cuando se establece el bit 8, se invierte la condición de omisión del grupo 2; la omisión no se realiza si alguna de las condiciones del grupo o es verdadera. Según las leyes de De Morgan , esto significa que la omisión se realiza si todas las condiciones invertidas especificadas son verdaderas. Por ejemplo, "SPA SNA", código de operación 7550, omite si AC > 0. Si no se establece ninguno de los bits 5 a 7, la omisión es incondicional.

Las acciones (CLA, OSR, HLT) no se ven afectadas por el bit 8.

Grupo 3

Las combinaciones de bits no utilizadas 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. [36]

 00 01 02 03 04 05 06 07 08 09 10 11 ___________________________________ | 1| 1| 1| 1| | | | | | | | 1| |__|__|__|__|__|__|__|__|__|__|__|__| |CLA SCA \_ _/ | CÓDIGO MQA MQL 1* 2 2 2 3
7601 – CLA – Aire acondicionado transparente
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 (transferencia de CA a MQ, borrado de CA)
7621 – CAM – CLA + MQL borra tanto AC como MQ.

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

Tres bits especifican una instrucción de multiplicación/división a 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 – Desplazamiento lógico a la derecha

Control de memoria

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

Una palabra de 12 bits puede tener 4.096 valores diferentes, y este es el número máximo de palabras que el PDP-8 original puede abordar indirectamente a través de un puntero de palabra. 4.096 palabras de 12 bits representan 6.144 bytes en la 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 conveniente ampliar este límite.

Para mantener la compatibilidad con programas preexistentes, el nuevo hardware que no formaba parte del diseño original agregó bits de orden superior 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. Se pensó que esta expansión era suficiente porque, como la memoria central costaba alrededor de 50 centavos por palabra, 32 K de memoria equivaldrían al costo de la CPU.

Cada 4K de memoria se denomina 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, lo que hace un total de 15 bits de dirección. El registro IF especifica el campo para las búsquedas de instrucciones y las referencias directas a la memoria; el registro DF especifica el campo para los accesos indirectos a los datos. Un programa que se ejecuta en un campo puede hacer referencia a los datos del mismo campo mediante direccionamiento directo, y hacer referencia a los datos de otro campo mediante direccionamiento indirecto.

Un conjunto de instrucciones de E/S en el rango 6200 a 6277 es manejado por el Controlador de Extensión de Memoria y da 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 al mismo campo, un único campo al que estos programas estaban limitados. El efecto de la instrucción CIF se posponía para que coincidiera con la siguiente instrucción JMP o JMS, de modo que la ejecución de CIF no provocara un salto.

Para los programas de múltiples campos era más complicado manejar los límites de campo y los registros DF e IF de lo que hubiera sido si simplemente pudieran generar direcciones de 15 bits, pero el diseño proporcionaba compatibilidad con versiones anteriores y es consistente con la arquitectura de 12 bits utilizada en todo el PDP-8. Compárese con el Intel 8086 posterior , cuyas direcciones de memoria de 16 bits se expanden a 20 bits al combinarlas con el contenido de un registro de segmento especificado o implícito .

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

Virtualización

En el PDP-8/E y modelos posteriores, el controlador de extensión de memoria se mejoró 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áquinas virtuales. El administrador puede hacer que todas las instrucciones de E/S (incluidas las que funcionaban en el controlador de extensión de memoria) provoquen 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 la 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 proceso de diferir el efecto de una instrucción CIF (si ha ejecutado una CIF y aún no ha ejecutado la instrucción de salto correspondiente). El administrador debe incluir un emulador PDP-8 completo (no es difícil para una máquina de 8 instrucciones). Siempre que una instrucción CIF llega a la trampa del 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 para una deficiencia de diseño aparentemente pequeña. [ cita requerida ]

En la época del PDP-8/A, los precios de la memoria habían caído lo suficiente como para que fuera deseable contar con memorias que superasen los 32 K. El 8/A añadió un nuevo conjunto de instrucciones para manejar más de ocho campos de memoria. El número de campo podía ahora colocarse en el AC, en lugar de estar codificado en la instrucción. Sin embargo, en ese momento, el PDP-8 estaba en decadencia, por lo que se modificó muy poco el software estándar para utilizar estas nuevas características.

Ejemplos

Los siguientes ejemplos muestran código en lenguaje ensamblador PDP-8 tal 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 simplemente para comparar dos números:

 /Comparar números en la memoria en OPD1 y OPD2 CLA CLL /Debe comenzar con 0 en AC y vincular TAD OPD1 / Carga el primer operando en AC (agregándolo a 0); el enlace aún está libre 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 /Saltar si el enlace es claro JMP OP2GT /Saltar a algún lugar en el caso de que OPD2≥OPD1; /De lo contrario, pase al 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 la mecánica de bajo nivel. Un problema de legibilidad adicional es que en los saltos condicionales como el que se muestra arriba, la instrucción condicional (que se salta el JMP) resalta lo opuesto a la condición de interés.

Salida de cadena

Este programa completo en lenguaje ensamblador PDP-8 envía la señal "¡Hola, mundo!" al teleimpresor.

 *10 / Establezca 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 / Clear AC y Link nuevamente (necesario cuando volvemos a realizar un bucle desde tls) TAD IZ STPTR / Obtener el siguiente carácter, indirectamente a través de la dirección de incremento automático PRE desde la página cero SNA / Omitir si no es cero (no es el final de la cadena) HLT / De lo contrario, se detiene en cero (final de la cadena) TLS / Envía el carácter del AC al teleimpresor TSF / Omitir si el teleimpresor está listo para el personaje JMP .-1 / De lo contrario, retroceda y vuelva a intentarlo JMP HOLA / Salta hacia atrás para el siguiente carácter FUERZA, 310/H 345 / y 354 / l 354 / l 357 / o 254 /, 240 / (espacio) 367 / se 357 / o 362 / r 354 / l 344 / día 241 / ! 0 / Fin de la cadena $HOLA /TERMINADOR PREDETERMINADO

Subrutinas

El procesador PDP-8 no implementa una pila en la que se almacenan 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 (que apunta 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 utilizando una instrucción JMP indirecta que direcciona la primera palabra de la subrutina.

Por ejemplo, aquí se muestra "¡Hola, mundo!" reescrito para utilizar una subrutina. Cuando la instrucción JMS salta a la subrutina, modifica el código 0 en la ubicación OUT1:

 *10 / Establezca 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 del ensamblaje (dirección de carga) LOOP, TAD I STPTR / Preincrementar la ubicación de memoria 10, obtener indirectamente el siguiente carácter de nuestro mensaje SNA / Saltar en CA distinta de cero HLT / De lo contrario, se detendrá al final del mensaje JMS OUT1 / Escribe un carácter JMP LOOP / Y vuelve a repetir el bucle para obtener más información OUT1, 0 / Será reemplazado por la PC actualizada del llamante TSF / Omitir si la impresora está lista JMP .-1 / Esperar bandera TLS / Envía el carácter en el AC CLA CLL / Clear AC y Link para siguiente pasada JMP I OUT1 / Regresar al llamador STRNG, "H/Un mensaje muy conocido "y / "l / NOTA: "yo / "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/ "yo / "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 que se encuentra justo antes del código de la subrutina para depositar la dirección de retorno evita la reentrada y la recursión sin trabajo adicional por parte del programador. También dificulta el uso de la ROM con el PDP-8 porque el almacenamiento de direcciones de retorno de lectura y escritura se mezcla con el almacenamiento de código de solo lectura en el espacio de direcciones. Los programas destinados a colocarse en ROM abordan este problema de varias maneras:

 JUMPL, DCA TEMP / Deposite el acumulador en alguna ubicación temporal TAD JUMPL+3 / Cargar la dirección de retorno 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, la dirección de retorno de la llamada externa se destruye con la dirección de retorno de la llamada posterior, lo que genera un bucle infinito. Si un módulo está codificado con una dirección incorrecta u obsoleta para una subrutina, no solo no podrá ejecutar toda la secuencia de código de la subrutina, sino que también 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 llamada correcta posterior a la subrutina. Ambos tipos de error pueden hacerse evidentes durante la ejecución de código que se escribió correctamente.

Pila de software

Aunque el PDP-8 no tiene una pila de hardware , se pueden implementar pilas en software. [37] Aquí hay ejemplos de subrutinas PUSH y POP, simplificadas para omitir problemas como las pruebas de desbordamiento y subdesbordamiento de pila:

 *100 / hacer que las rutinas sean accesibles para el próximo ejemplo EMPUJE, 0 DATOS DEL DCA CLA-CMA/-1 TAD-SP DCA SP DATOS TAD DCA y SP JMP I PUSH /Retorno Población, 0 LCC CLA TAD y SP ISZ-SP JMP y POP DATOS, 0 esp, 0

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

 *200 PRINCIPAL, CLA CLL /Establecer el puntero del mensaje TAD (MESSG/Al principio del mensaje (literal) DCA SP BUCLE, JMS POP SNA /Detener ejecución si es cero Alto Nivel JMS OUT /De lo contrario, genera un carácter BUCLE JMP MENSAJERO, "H "mi "yo "yo "Oh ", " "o "Oh "o "yo "d "! 015 012 0 OUT, 0 / Será reemplazado por la PC actualizada del llamante TSF / Omitir si la impresora está lista JMP .-1 / Esperar bandera TLS / Envía el carácter en el AC CLA CLL / Clear AC y Link para siguiente pasada JMP I OUT / Regresar al llamador

Lista enlazada

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

 GETN, 0 / Obtiene el número señalado y mueve el puntero CLA CLL /Limpiador de acumulador TAD I PTR /Obtiene el número al que apunta DCA TEMP /Guardar valor actual ISZ PTR /Puntero de incremento TAD I PTR /Obtener la siguiente dirección DCA PTR /Poner en puntero JMP I GET /retorno RPP, 0 TEMPERATURA, 0

Interrupciones

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

Como sólo hay una única línea de interrupción en el bus de E/S, la aparición de una interrupción no informa al procesador de la fuente de la interrupción. En cambio, la rutina de 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 saltos porque consiste en una serie de instrucciones de E/S PDP-8 de "probar y omitir si el indicador está establecido". (No era inaudito que una cadena de saltos llegara a su final sin encontrar ningún dispositivo que necesitara servicio). La prioridad relativa de interrupción de los dispositivos de E/S está determinada por su posición en la cadena de saltos: si varios dispositivos interrumpen, el dispositivo probado anteriormente en la cadena de saltos es el primero en recibir servicio.

Libros

Un libro de texto de ingeniería muy 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 compatible con la PDP-8/I. Se explica la función de cada componente. Aunque no se trata de un diseño de producción, ya que utiliza componentes SSI y MSI más modernos y memoria de 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 las PDP-8 y PDP-8/E , respectivamente.

Hubo una minicomputadora llamada IZOT-0310, producida en Bulgaria en los años 70 y 80, que clonó la PDP-8L.

Referencias

  1. ^ "Computación temprana en el NIH - Oficina de Historia del NIH y Museo Stetten". history.nih.gov . Consultado el 17 de julio de 2024 .
  2. ^ ab "Resumen de modelos y opciones del PDP-8". Sección - ¿Qué es un PDP-5?
  3. ^ por Douglas W. Jones . "Preguntas frecuentes sobre la PDP-8 de Digital Equipment Corporation".
  4. ^ 1634–1699: McCusker, JJ (1997). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de valores monetarios en la economía de los Estados Unidos: adiciones y correcciones (PDF) . American Antiquarian Society .1700–1799: McCusker, JJ (1992). ¿Cuánto es eso en dinero real? Un índice de precios histórico para su uso como deflactor de valores monetarios en la economía de los Estados Unidos (PDF) . American Antiquarian Society .1800–presente: Banco de la Reserva Federal de Minneapolis. «Índice de precios al consumidor (estimación) 1800–» . Consultado el 29 de febrero de 2024 .
  5. ^ 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. pág. 271. ISBN 1576753050.
  6. ^ Douglas W. Jones. "La Corporación de Equipos Digitales PDP-8".
  7. ^ "PDP-8 1965". History Wired . Instituto Smithsoniano . 16 de marzo de 2012. Archivado desde el original el 17 de febrero de 2015 . Consultado el 17 de febrero de 2015 .
  8. ^ ab "PDP-8/S #1". Museo de 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 .
  9. ^ Glenn Rifkin; George Harrar (1988). El emprendedor por excelencia: la historia de Ken Olsen y Digital Equipment Corporation. Libros contemporáneos. ISBN 978-1-55958-022-9.
  10. ^ Small Computer Handbook, NUEVA edición PDP 8/I (próximamente) . Digital Equipment Corporation . 1968.
  11. ^ "Benchmarking de los lenguajes". Revista PC . Vol. 4, núm. 22. 29 de octubre de 1985. pág. 112. El mejor uso del recurso informático más preciado de la actualidad: el tiempo de un programador...
  12. ^ 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. "TMS320C28x CPU and Instruction Set (Rev. F)" (PDF) .
  13. ^ Torben Ægidius Mogensen (20 de agosto de 2010). Fundamentos del diseño de compiladores (PDF) . p. 1. Otra ventaja de utilizar un lenguaje de alto nivel es que el mismo programa se puede compilar en muchos lenguajes de máquina diferentes y, por lo tanto, ejecutarse en muchas máquinas diferentes.
  14. ^ C. Gordon Bell ; JC Mudge; JE McNamara (1978). Ingeniería informática: una visión DEC del diseño de sistemas de hardware (PDF) . Digital Press . pág. 175. ISBN. 0-932376-00-2.
  15. ^ Manual de referencia para programadores de sistemas de punto flotante PDP-8 (PDF) . Digital Equipment Corporation. Septiembre de 1969. DEC-08-YQYB-D.
  16. ^ "Sistema de composición tipográfica PDP-8" (PDF) . Digital Equipment Corporation. 1965.
  17. ^ C. Gordon Bell, et al.; Estructuras, principios y organización de computadoras, 1982, capítulo PDP-8
  18. ^ "Capítulo 8: Elemento aritmético extendido tipo 182". Manual del usuario de PDP-8 . Digital Equipment Corporation. 1966. pág. 41.
  19. ^ "Capítulo 4: Descripción y funcionamiento del sistema". Introducción a la programación (PDF) . Digital Equipment Corporation. 1969. págs. 4–22.
  20. ^ Manual de mantenimiento de la PDP-8/S . Digital Equipment Corporation. 1971.
  21. ^ "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 .
  22. ^ Remo J. Vogelsang (2013). "De primera mano: PDP-8/E OMNIBUS Ride".
  23. ^ "Preguntas frecuentes de Doug Jones sobre el DEC PDP-8". homepage.cs.uiowa.edu . Consultado el 24 de marzo de 2024 .
  24. ^ "Resumen de modelos y opciones del PDP-8 (publicado cada dos meses)". www.faqs.org .
  25. ^ "PDP-8 - Una computadora digital de alta velocidad" (PDF) . 1965. pág. 18.
  26. ^ Manual de mantenimiento del PDP-8/S (PDF) (5.ª ed.). Octubre de 1970. pág. 1-2.
  27. ^ "Tabla 11. Datos de instalación". Small Computer Handbook (PDF) (edición 1967-68). 1968. pág. 290 (300).
  28. ^ "Tabla 13-1 Datos de instalación". Small Computer Handbook (PDF) (edición de 1970). 1970. pág. 277 (291).
  29. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pág. 17.
  30. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pág. 17.
  31. ^ "Museo de computadoras del sistema fuente: PDP-8M".
  32. ^ "Especificaciones de la familia PDP-8". Folleto de ventas de PDP-8/e/f/m (PDF) . pág. 17.
  33. ^ "La explosión de 1975-1976 » AntiqueTech". AntiqueTech.com. 2009-04-21. Archivado desde el original el 2017-07-03 . Consultado el 2017-06-19 .
  34. ^ ab Bell, Gordon (1980), Árbol genealógico de las computadoras digitales, (póster), Digital Equipment Corporation , consultado el 19 de junio de 2017
  35. ^ Manual de programación FOCAL para PDP-8, PDP-8/S, PDP-8/I, LAB-8, LINC-8 (PDF) . Digital Equipment Corporation. 1968. DEC-08-AJAB-D.
  36. ^ Manual de computadoras pequeñas 1967–1968 . Digital Equipment Corporation. 1968. págs. 130–136.
  37. ^ Mark Smotherman. "Subrutinas del DEC PDP-8". 2002.

Enlaces externos