El sistema informático IBM 1130 , presentado en 1965, [ 3 ] era el ordenador más económico de IBM en aquel momento. Esta máquina binaria de 16 bits se comercializó para mercados técnicos exigentes en cuanto a precio, como la educación y la ingeniería, sucediendo al IBM 1620 decimal en ese segmento de mercado. Las instalaciones típicas incluían una unidad de disco de 1 megabyte que almacenaba el sistema operativo, los compiladores y los programas objeto, con el código fuente del programa generado y mantenido en tarjetas perforadas . Fortran era el lenguaje de programación más común , pero también estaban disponibles otros, como APL .

El modelo 1130 también se utilizaba como interfaz inteligente para conectar una unidad de visualización gráfica IBM 2250 , o como estación de trabajo de entrada remota de trabajos (RJE), conectada a un ordenador central System/360 .

.
Descripción

Se estima que la producción total del 1130 fue de 10 000 unidades. [ 4 ] El 1130 ocupa un lugar en la historia de la informática porque (junto con sus clones no IBM) brindó a muchas personas su primera interacción directa con una computadora. Su relación precio-rendimiento era buena y, notablemente, incluía almacenamiento en disco extraíble y económico , con software confiable y fácil de usar que podía estar en varios lenguajes de alto nivel . El bajo precio (desde alrededor de $32 000 o $41 000 con unidad de disco) [ 3 ] y el conjunto de características bien equilibrado permitieron el desarrollo interactivo de programas en un entorno de "tienda abierta" .
El IBM 1130 utiliza el mismo encapsulado electrónico, denominado Solid Logic Technology (SLT), que se usó en el System/360 . Tiene una arquitectura binaria de 16 bits , al igual que minicomputadoras posteriores como la PDP-11 y la Data General Nova .
El espacio de direcciones es de 15 bits, lo que limita al 1130 a 32.768 palabras de 16 bits ( 65.536 bytes ) de memoria. El 1130 utiliza memoria de núcleo magnético , a la que el procesador accede en los límites de las palabras, utilizando modos de direccionamiento directo, indirecto e indexado .
Modelos
IBM implementó cinco modelos de la unidad central de procesamiento 1131 , el componente principal del procesador IBM 1130. Los modelos del 1 al 5 describen el tiempo de ciclo de la memoria principal, así como la capacidad del modelo para contar con almacenamiento en disco. Una letra de la A a la D añadida al número de modelo indica la cantidad de memoria principal instalada.
La unidad central de procesamiento IBM 1131 pesa aproximadamente 760/1050 lb (345/477 kg). [ 5 ]
El modelo 4 era un producto de menor precio con un tiempo de ciclo de 5,9 μs. Algunos compradores de actualizaciones de rendimiento observaron que el ajuste en campo para lograr la mejora era sorprendentemente sencillo.
La impresora IBM 1132 depende del procesador 1130 en lugar de la lógica interna para determinar cuándo activar las ruedas de impresión mientras giran. Las impresoras para el Modelo 4 funcionan más lentamente, pero el procesador más lento aún no puede seguirles el ritmo. El manual de hardware revela que cuando el Modelo 4 atendía las dos interrupciones de nivel más alto (la interrupción de columna del lector de tarjetas de nivel 0 o la interrupción de impresora de nivel 1), funcionaba con el tiempo de ciclo más rápido de 3,6 μs. Algunos usuarios del Modelo 4 escribían un controlador de impresora falso que no descartaba la interrupción de la impresora, para beneficiarse de la mayor velocidad del procesador. Sin embargo, las interrupciones de nivel inferior están deshabilitadas durante este intervalo, incluso la interrupción de fin de tarjeta (nivel 4) del lector de tarjetas 1442.
Cronología
- 11 de febrero de 1965: IBM presenta la 1130 (modelos 1A, 1B, 2A y 2B). También se anuncia la impresora IBM 1132, la impresora para ordenador en línea de menor coste jamás anunciada por IBM hasta ese momento.
- Cuarto trimestre de 1965: Comienzan los primeros envíos a clientes desde la planta de San José .
- 31 de marzo de 1966 – IBM presenta el sistema educativo IBM 1500.
- Abril de 1966 – Envío de IBM 1800. [ 6 ] : 497
- 9 de agosto de 1966: IBM lanza el adaptador de comunicaciones síncronas 1130 , que permite conectar el pequeño sistema 1130 mediante líneas telefónicas alquiladas convencionales y funcionar como terminal de comunicaciones para cualquier modelo del IBM System/360.
- 17 de abril de 1967 – Se anuncia una ampliación de cuatro líneas del modelo 1130 (modelos 2C, 2D, 3B, 3C y 3D), que incluye:
- Cinco veces la capacidad de almacenamiento en disco y cuatro veces la memoria principal;
- Una velocidad de procesamiento adicional casi un 40 por ciento más rápida que la disponible anteriormente;
- Equipos periféricos más completos y rápidos, incluido un lector óptico de marcas;
- Un paquete de programación comercial mejorado.
- Enero de 1968: Comienzan los primeros envíos de los modelos 1130 2C, 2D, 3B, 3C y 3D.
- Julio de 1968 – La planta de Boca Ratón comienza a enviar el modelo 1130.
- 22 de julio de 1971 – 1130 Se presentan los modelos 4A y 4B con nuevos niveles de economía.
- Septiembre de 1971: Comienzan los primeros envíos a clientes del modelo 1130, número 4.
- 31 de mayo de 1972 – Se anuncian los modelos 1C, 1D, 5B, 5C y 5D.
- 1973 - La Xerox 530 se comercializó como una posible sucesora de los clientes de la IBM 1130. [ 7 ] [ 8 ] [ 9 ] Los pedidos de la Xerox 530 se consideraron "alentadores" a partir de enero de 1974. [ 10 ]
Software
Para maximizar la velocidad y ahorrar espacio, el sistema operativo y los compiladores están escritos completamente en lenguaje ensamblador y emplean técnicas poco comunes hoy en día, como la mezcla de código y datos, así como el código automodificable .
Gran parte de la programación de usuario se realiza en Fortran . El compilador Fortran 1130 puede ejecutarse en una máquina con solo 4096 palabras de memoria, aunque el programa compilado podría no caber en una máquina de ese tamaño. En este compilador de múltiples pasadas , cada "fase" procesa el programa fuente completo y lo transforma en código máquina . Por ejemplo, la primera fase lee las instrucciones fuente en memoria, descarta las líneas de comentarios, elimina los espacios excepto en los literales de texto, concatena las líneas de continuación e identifica las etiquetas. El compilador está disponible en una versión residente en disco, así como en cinta perforada de ocho canales o tarjetas perforadas.
El sistema operativo más utilizado para el 1130 es el Disk Monitor System Versión 2 (DM2), introducido en 1967. DM2 es un sistema de procesamiento por lotes de una sola tarea . Requiere un sistema con al menos 4 KB de memoria principal y una unidad de disco integrada 2310 para su residencia. El Supervisor es minúsculo para los estándares actuales y contiene diversos detalles del sistema, como rutinas de interrupción de primer nivel, llamadas Subrutinas de Nivel de Interrupción , además del controlador de disco y rutinas para cargar el intérprete de comandos de control de trabajos y el controlador del lector de tarjetas. Los controladores de dispositivos para otros dispositivos de E/S requeridos por un trabajo se incorporan como parte de la carga de dicho trabajo, lo que también puede incluir el reemplazo del controlador de disco básico por un controlador más avanzado. Durante la ejecución de un trabajo, solo reside en memoria un monitor residente , llamado Skeleton Supervisor . Este Supervisor requiere solo 1020 bytes, por lo que la primera memoria disponible de una tarea comienza con la dirección /01FE ( hexadecimal ) o palabra 510. Cuando el trabajo termina o se aborta, el supervisor carga el Analizador de Registro de Control de Monitor ( MCRA ) para leer el control del trabajo para el siguiente. Mientras el trabajo se está ejecutando, el Supervisor está inactivo. Aparte de los controladores de dispositivos y el procesamiento de interrupciones, todo el tiempo de CPU se dedica por completo a las actividades del trabajo. Otros programas distribuidos como parte del sistema operativo son una utilidad de volcado de memoria , DUMP , y el Programa de Utilidad de Discos , DUP .
Existía un sistema de programación mediante tarjeta/cinta de papel para dar soporte a sistemas sin disco.
Existe una jerarquía de controladores de dispositivos: aquellos cuyos nombres terminan en Z son para Fortran, como DISKZ, mientras que los programadores de ensamblador podrían usar DISK0, y DISK1 era incluso más rápido para leer múltiples sectores del disco. Sin embargo, DISKZ comienza su direccionamiento de sectores con el primer sector disponible sin usar, mientras que los demás comienzan con el sector cero del disco, lo que permite que un programador poco familiarizado con la organización del disco sobrescriba inadvertidamente el cargador de arranque.
Otros lenguajes de programación disponibles en el 1130 incluyen:
- APL , [ 11 ]
- BÁSICO ,
- COBOL , [ nota 1 ]
- ADELANTE ,
- PL/I (en forma del intérprete SL/1 ), [ nota 2 ] y
- Juego de rol . [ nota 3 ]
Incluso hay un compilador ALGOL en francés , en el que, por ejemplo, " Debut ...Fin;" toma el lugar de " Begin ... End;". Todos sus mensajes están en francés, por lo que "Buena compilación" es el objetivo.
La Universidad de Eastern Michigan desarrolló un compilador de Fortran IV para la 1130, conocido como Fortran-EMU, como alternativa al compilador de Fortran IV (subconjunto) proporcionado por IBM. Este compilador incorpora numerosas características de Fortran IV no compatibles con el compilador de IBM, como el tipo de datos LOGICAL, nombres de variables de seis letras y diagnósticos mejorados. El compilador Fortran-EMU se distribuyó como un conjunto de tarjetas perforadas en formato de archivo de imagen de disco, con el área del sistema restante eliminada para evitar la copia de otros módulos que normalmente residirían en el mismo disco, como el ensamblador o los compiladores.
La Universidad Estatal de Oklahoma desarrolló un compilador ALGOL 68 , escrito en ANSI Fortran 1966. [ 12 ] [ 13 ] [ 14 ]
En la Universidad de Michigan se desarrolló un intérprete de FOCAL .
IBM también distribuyó una amplia biblioteca de programas, tanto con soporte de IBM (Tipo I y II) como sin soporte (Tipo III y IV).
Dado que el programa 1130 estaba dirigido principalmente al mercado científico, predominaban los programas científicos y de ingeniería:
- Paquete de subrutinas científicas
- Subrutinas para dibujar y graficar
- Programa de flujo de carga del sistema de energía eléctrica
- Regresión múltiple
- Cálculo de las corrientes de falla en sistemas de distribución eléctrica
- Análisis de tuberías
- geometría de coordenadas COGO
- Modelado de sistemas continuos (CSMP)
- Sistema de subrutinas de optimización matemática para programación lineal
- Solucionador de sistemas de ingeniería estructural (STRESS)
- Sistema estadístico [ 15 ]
El modelo 1130 también ocupó un nicho de mercado como máquina de procesamiento de datos para organizaciones más pequeñas:
- Paquete de subrutinas comerciales 1130
- Sistema de Información Estudiantil
- CPM/PERT
También existe software de propósito específico:
Control de trabajo
El funcionamiento por lotes del 1130 se rige por los registros de control en el flujo de entrada principal (lector de tarjeta o cinta de papel). Existen dos tipos de registros de control: registros de control de monitorización y registros de control de supervisión. [ 18 ]
Registros de control de monitoreo
Los registros de control del monitor se identifican //␢seguidos de un "código de pseudooperación" en las columnas 4 a 7. "␢" representa un solo espacio en blanco.
The JOB record can have a "T" in column 8 to indicate that any files added to the User Area by this job should be deleted at the end. Columns 11 thru 15 can contain a cartridge label; the system verifies that the specified cartridge is mounted before proceeding.
The XEQ record may contain the name of the program to be run in columns 8 thru 12. If this is omitted, the program currently in Working Storage will be executed. If column 14 contains "L", and the program is in Disk System Format (not core-image) a core map will be printed by the Core Load Builder. If this statement is followed by LOCALNOCAL, or FILES Supervisor Control Records, columns 16 and 17 contain the count of these records. Column 19 optionally indicated which disk driver routine is to be linked. "0", "1", or "N", request DISK1, DISK2, or DISKN, any other character, including blank, requests DISKZ, the FORTRAN disk routine.
Supervisor control records
Supervisor control records begin with an "*" in column 1, immediately followed by the command pseudo-operation in column 2. They are LOCAL, NOCAL, and FILES for the Core Load Builder. DUP control records have a similar format. These records control program linking, either for the // XEQ statement or the DUP *STORECI command.
Operating procedure

The enduring memories of the IBM 1130 may have resulted from its need for continual human intervention. It was usually occupied running "jobs" specified by a deck of punched cards. The human operator would load jobs into the card reader and separate them back into jobs for return, perhaps along with printed output, to the submitter. The operator would also have to watch the 1130 for evidence of a malfunctioning or stalled job and intervene by pressing the INT REQ key on the keyboard to skip ahead to the start of the next job.[19]
El inicio de un trabajo se marcaba con una tarjeta perforada que comenzaba con // JOB. Cualquier tarjeta que comenzara con //era una orden para el Supervisor y no podía usarse como programa de usuario ni como datos. Otras órdenes incluían // DUPejecutar el Programa de Utilidad de Discos (para eliminar archivos o agregar el archivo del área temporal a la colección de archivos) y // XEQejecutar un programa con nombre desde el disco. Si un programa de usuario intentaba leer una tarjeta de comandos, la rutina estándar del lector de tarjetas indicaba el final de la entrada al programa y guardaba el contenido de esa tarjeta para el Supervisor.
- Carga inicial del programa (IPL)
A diferencia del IBM 360, donde se selecciona un dispositivo de arranque desde la consola del sistema y la máquina puede arrancar (IPL: Carga Inicial del Programa) directamente desde una unidad de disco o de cinta magnética , un IBM 1130 solo puede arrancar desde un dispositivo como un lector de tarjetas o un lector de cinta de papel equipado con la función de Carga de Programa. [ 20 ] [ 21 ] : 144
El procedimiento de arranque lee una tarjeta del lector de tarjetas o lee nibbles de 4 bits del lector de cinta de papel hasta que se lee un carácter no borrable con el canal 5 perforado. La tarjeta o cinta de arranque contiene el código binario [ 21 ] : 136, 137, 144 para leer el contenido del sector cero de la unidad de disco, que a su vez gestiona la interrupción de "operación completada" de la unidad de disco y realiza lecturas adicionales del disco para preparar el 1130 para el primer trabajo de tarjeta perforada. Todo el proceso tarda aproximadamente un segundo en completarse.
- Procedimientos de recuperación
Cuando se inicia el IBM 1130, el Supervisor aún se encuentra en memoria y probablemente intacto, ya que la memoria principal conserva su estado sin alimentación. Si el operador concluye que un programa de usuario se ha bloqueado, el Supervisor puede detectar la pulsación de una tecla para abortar el programa y pasar a la siguiente tarjeta //. El Supervisor no está protegido contra modificaciones por trabajos mal escritos, lo que podría requerir que el operador reinicie el 1130. Tampoco existía protección contra la escritura en disco. Si se modifica la copia del software del sistema en disco, se puede restaurar recargándola desde aproximadamente 4000 tarjetas perforadas con código binario (aproximadamente dos cajas).
Organización de discos


La unidad de disco IBM 2310 almacena sectores de 320 palabras (640 bytes) más una dirección de sector de una palabra. Un cilindro consta de dos pistas apiladas en las superficies superior e inferior de la 2315, o apiladas en las superficies superior e inferior de cada uno de los 6 platos (excepto las superficies exteriores) del paquete de discos 1316 utilizado en la 2311. Cada cilindro de disco contiene ocho sectores por superficie, y cada superficie tiene un cabezal de lectura/escritura dedicado. Cada sector se divide lógicamente mediante el monitor en dieciséis bloques de disco de 20 palabras (40 bytes) cada uno. El bloque de disco es la unidad de asignación para los archivos.
El sistema distingue entre cartuchos del sistema , que contienen el monitor y las utilidades junto con los datos del usuario, y cartuchos que no son del sistema , que contienen solo datos del usuario. Todos los cartuchos contienen información sobre el cilindro 0, incluyendo la tabla de cilindros defectuosos, el ID del cartucho y un programa de arranque ( código de arranque ). En los cartuchos que no son del sistema, el programa de arranque simplemente imprime un mensaje de error y espera si se intenta arrancar desde este cartucho. En un cartucho del sistema, este es el programa de arranque en frío , seguido de un área de comunicaciones y el monitor residente en los sectores uno y dos. Los sectores tres al cinco contienen la Tabla de Equivalencia de Ubicación del Sistema (SLET), un directorio de todas las fases de todos los programas del monitor. Otra información de control completa la primera pista.
El área del sistema está presente en los cartuchos del sistema. Contiene el programa Disk Monitor y, opcionalmente, el compilador FORTRAN, el ensamblador y un búfer de imagen de núcleo utilizado para enlazar programas reubicables. También contiene los directorios de archivos de usuario: Tabla de equivalencia de ubicación fija (FLET) y Tabla de equivalencia de ubicación (LET).
Tras el área del sistema, el cartucho contiene hasta tres subdivisiones lógicas: el área fija , el área de usuario y el almacenamiento de trabajo . Tanto el área fija como el área de usuario almacenan programas y datos no temporales. El tamaño del área fija lo define DUP y almacena datos y programas únicamente en formato de imagen de núcleo. No se reempaqueta cuando se eliminan archivos. El área de usuario almacena datos y programas en cualquier formato. El límite entre el área de usuario y el almacenamiento de trabajo es variable: el área de usuario se expande a medida que se añaden archivos y se contrae al reempaquetarse para recuperar el espacio de los archivos eliminados. Si es necesario modificar un archivo, el proceso habitual consiste en usar // DUPcomandos para eliminarlo, lo que mueve los archivos subsiguientes para cerrar el hueco, y luego asignar ese nombre al archivo temporal como la nueva versión del archivo. De este modo, los archivos que se modifican con poca frecuencia migran hacia el inicio del disco a medida que se añaden nuevos archivos o nuevas versiones, y los archivos que se modifican con frecuencia se almacenan hacia el final del disco.
El almacenamiento de trabajo comienza después del último archivo en el área de usuario y ocupa todo el espacio restante en el cartucho. Puede contener un archivo temporal creado por el sistema o el usuario, como la salida de un compilador o un programa de aplicación. Este archivo puede eliminarse al finalizar la tarea actual, a menos que se guarde en el área fija o en el área de usuario.
Todos los archivos de disco son bloques de disco contiguos, por lo que no hay fragmentación . Un programa puede usar y modificar archivos con nombre, pero no puede expandirlos más allá de su tamaño original. Un programa que crea más de un archivo debe tener todos menos uno preasignados por un DUP.
Con espacio limitado en disco, los archivos fuente de los programas suelen almacenarse como barajas de cartas. Los usuarios con mayores necesidades pueden tener un disco propio que contenga el sistema operativo, pero solo sus archivos, y tendrían que reemplazar el disco del sistema compartido con el suyo y reiniciar el sistema cada vez que quieran ejecutar sus programas. Un sistema con una segunda unidad de disco que pueda dedicarse por completo al código y los datos de un usuario ofrece cierta tranquilidad.
Con Disk Monitor System versión 1, un paquete de discos o cartucho se inicializa para su uso en el 1130 mediante la Rutina de Inicialización de Paquetes de Discos (DPIR). Esta rutina escanea el disco y escribe las direcciones de los sectores en todos los cilindros, marca los sectores defectuosos y escribe un identificador de cartucho en el cilindro cero. DPIR es un programa independiente que se carga desde tarjetas o cintas de papel y acepta el identificador de cartucho de la consola del sistema. [ 18 ]
Con Disk Monitor System versión 2, la inicialización del cartucho de disco se realiza con el Programa de inicialización del cartucho de disco (DCIP), que también puede copiar, volcar, parchear, analizar y comparar discos. [ 19 ]
Programa de utilidad de disco (DUP)
El programa de utilidad de disco (DUP) proporciona comandos para transferir programas, subrutinas y datos. Se invoca mediante la // DUPtarjeta de control de trabajos, seguida de una o más tarjetas de control: [ 22 ]
Otros comandos, principalmente para uso del administrador del sistema , definen o expanden el Área Fija, eliminan el compilador y/o el ensamblador de FORTRAN del sistema y restauran las direcciones de sector correctas en el Almacenamiento de Trabajo si han sido modificadas.
Los operandos deben colocarse en columnas fijas. El código del dispositivo de origen va en las columnas 13 y 14, y el del dispositivo de destino en las columnas 17 y 18. Estos códigos de dispositivo son:
- UA – Área de Usuario
- FX – El área fija (sin "extensiones" como en el 360; solo espacio contiguo)
- WS – Almacenamiento de trabajo
- CD – Tarjeta perforada/Dispositivo de entrada principal (podría ser PT : Cinta de papel)
- Relaciones Públicas – Impresor
Opcionalmente, se puede codificar el nombre del programa en las columnas 21 a 25 y un campo de recuento en las columnas 27 a 30. La interpretación de estos campos depende de la función DUP solicitada.
Los programas se pueden convertir a un formato de carga más rápida con el comando STORECI , que ejecuta Core Image Builder (el equivalente en DM2 al editor de enlaces de la Xbox 360). Como alternativa, un programa puede someterse a este proceso cada vez que se ejecute, y para programas de uso poco frecuente, esta opción es preferible para ahorrar espacio en disco.
La siguiente tarjeta de control indica a DUP que tome el contenido actual del almacenamiento de trabajo y lo mueva al área de usuario, denominándolo PROGM. DUP conoce el tamaño del archivo en el almacenamiento de trabajo. El tamaño del área de usuario aumentará en la misma proporción que el tamaño del archivo, y el tamaño del almacenamiento de trabajo disminuirá en consecuencia.

Dispositivos periféricos



La memoria en disco se utiliza para almacenar el sistema operativo, el código objeto y los datos, pero el código fuente se guarda en tarjetas perforadas.
El modelo básico 1130 venía con una unidad de disco accionada por bobina móvil IBM 2310 , llamada "Ramkit", de la División de Productos Generales de IBM en San José. [ 6 ] : 497 Sus cartuchos de un solo plato IBM 2315, del tamaño de una caja de pizza, almacenan 512.000 palabras o 1.024.000 bytes (menos que los 1,44 MB de un disquete HD de 3,5" o incluso los 1,2 MB de un disquete HD de 5,25" ). La velocidad de transferencia es de 35.000 palabras por segundo (70 KB/seg) utilizando robo de ciclo . [ 23 ]
La máquina de escribir de consola IBM 1053 utiliza un mecanismo IBM Selectric , lo que significa que se puede cambiar la tipografía o el conjunto de caracteres reemplazando un elemento tipográfico hueco del tamaño de una pelota de golf. Existe un elemento tipográfico especial disponible para APL , un potente lenguaje de programación orientado a matrices que utiliza una notación simbólica especial. Una fila de 16 interruptores de palanca en la máquina de escribir de consola se puede probar individualmente desde dentro de los programas, utilizando la instrucción especial de Fortran , por ejemplo.IF (SENSE SWITCH i)
Otros periféricos disponibles incluían:
- Impresoras : las impresoras de línea IBM 1132 [ nota 4 ] e IBM 1403 [ nota 5 ] [ 24 ]
- Tarjetas perforadas : el lector/perforador de tarjetas IBM 1442 y el lector de tarjetas IBM 2501.
- Cinta de papel : la perforadora de cinta de papel IBM 1055, el lector de cinta de papel IBM 1054 y el lector de cinta de papel IBM 1134.
- Disco – la unidad de disco IBM 2311
- Cinta magnética : Desde 1968, las unidades de almacenamiento de datos de cinta magnética IBM 2415 estuvieron disponibles como RPQ . [ 25 ]
- Gráficos – Unidad de visualización gráfica IBM 2250 .
- Plotter de pluma a color – Plotter de tambor IBM 1627 .
- Lector de marcas ópticas – Lector de páginas de marcas ópticas IBM 1231 [ 26 ]
- Comunicaciones – Adaptador de comunicaciones síncronas (SCA). El IBM 1130 MTCA, para Adaptador de control de terminales múltiples , anunciado en 1970 [ 27 ] permitía conectar hasta cuatro terminales 2741 a un IBM 1130, para su uso con APL.
Para simplificar el diseño de los dispositivos periféricos, estos dependen del procesador. El lector de tarjetas no tiene búferes de memoria, sino que envía a la CPU una interrupción de nivel cero (máxima prioridad) después de que se haya leído cada columna de la tarjeta. Si la CPU no responde y almacena los doce bits de datos antes de que otra interrupción indique que se ha leído la siguiente columna, se perderán los datos. De manera similar, la impresora 1132 depende del software de la 1130. Cuando una letra, como , Ase coloca en posición, la CPU debe analizar una línea de texto almacenada en búfer y ensamblar una matriz de bits que indicará a la 1132 qué posiciones de impresión deben imprimirse con A. Si la CPU no puede responder antes de que la Agire fuera de posición, la velocidad de impresión podría verse gravemente afectada.
Otros periféricos aceptan texto en un código específico del dispositivo, compatible con su hardware. La CPU debe traducirlo al código EBCDIC o viceversa, en el que procesa el texto.
Descripción general del conjunto de instrucciones
Las instrucciones tienen formatos cortos (de una palabra) y largos (de dos palabras). La mayoría de las instrucciones de cálculo, carga y almacenamiento hacen referencia a un registro (normalmente ACC) y a una ubicación de memoria. En el formato corto, la ubicación de memoria se identifica mediante un desplazamiento con signo de 8 bits desde la dirección actual o uno de los registros de índice ; o en el formato largo, mediante una dirección completa de 15 bits, que puede indexarse y especificar la indirección. La memoria se direcciona en unidades de palabras.
El modelo 1130 admite de forma nativa únicamente datos binarios de precisión simple y doble (16 y 32 bits) almacenados en formato big-endian . Los datos de punto flotante de precisión estándar y extendida (32 y 48 bits) y los datos decimales se admiten mediante el uso de subrutinas.
Las transferencias condicionales se basan en (a) el contenido actual del acumulador o (b) los indicadores de acarreo y desbordamiento establecidos por una operación precedente. Las transferencias pueden ser por salto (que supone que la siguiente instrucción es corta) o por bifurcación. Se produce un salto si se cumple alguna de las condiciones especificadas. Se produce una bifurcación si ninguna de las condiciones especificadas se cumple.
Registros principales: IAR = Registro de dirección de instrucción ACC = Acumulador EXT = Registro de extensión XRx = Registros de índice: x = 1,2,3 Implementado como palabras de memoria 1, 2, 3, no como registros de hardware. Pruebas de condición: Acumulador Z cero - Acumulador negativo + Acumulador positivo Acumulador E incluso Indicador de acarreo C apagado Indicador de desbordamiento apagado 1130 Mnemotecnia del conjunto de instrucciones: LD = Cargar ACC STO = Almacenar ACC LDD = Cargar doble (ACC y EXT) STD = Almacenar doble (ACC y EXT) LDX = Índice de carga STX = Índice de almacenamiento LDS = Estado de carga STS = Estado de almacenamiento A = Sumar ACC AD = Sumar doble S = Restar ACC SD = Restar doble M = Multiplicar D = Dividir AND = AND booleano OR = OR booleano XOR = OR exclusivo booleano SLA = Desplazamiento a la izquierda ACC SLT = Desplazamiento a la izquierda ACC y EXT SLCA = Desplazamiento a la izquierda y cuenta ACC SLC = Desplazamiento a la izquierda y cuenta ACC y EXT SRA = Desplazamiento a la derecha ACC SRT = Desplazamiento a la derecha ACC y EXT RTE = Rotar a la derecha ACC y EXT BSC = Ramificar o saltar según la condición (depende del modificador) es decir, BP BNP BN BNN BZ BNZ BC BO BOD BOSC - Ramificar o saltar condicionalmente (alternativa para BSC con el bit 9 activado) Sale del nivel de interrupción actual. BSI = Sucursal y Tienda IAR MDX = Modificar índice y omitir (incrementar IAR en uno si hay un cambio de signo o se convierte en cero) ESPERA = Detener NOP = Sin operación (alternativa para SLA 0) XIO = Ejecutar E/S 1800 Instrucciones Mnemotécnicas Adicionales: CMP = Comparar ACC DCM = Comparar doblemente ACC y EXT Mnemotecnias equivalentes El ensamblador de discos introdujo varios mnemónicos equivalentes a los existentes. Instrucciones destinadas a aclarar la intención del programador: SKP - Saltar en condiciones, equivalente a un BSC corto B - Sucursal incondicionalmente, equivalente a BSC sin condiciones especificadas. BP - Acumulador de rama positivo, equivalente a BSC que especifica la condición '+' BNP - Acumulador de sucursal no positivo BN - Acumulador de rama negativo BNN - Acumulador de rama no negativo BZ - Acumulador de rama cero BNZ - El acumulador de sucursal no es cero. BC - Sucursal en Carry BO - Ramificación en caso de desbordamiento BOD - Acumulador de rama impar MDM - Modificar memoria, equivalente a MDX de formato largo sin indexar XCH - Acumulador de Intercambio y Extensión, equivalente a RTE 16 Formato de instrucción breve (una palabra de 16 bits): 1 Bits 0...45678......5 OP---FTTDisp---- OP es Operación F es formato 0 = Corto TT es Tag Disp es Desplazamiento Formato de instrucción larga (dos palabras de 16 bits): 1 1 Bits 0...456789.....50..............5 OP---FTTIMod----Dirección--------- OP es Operación F es formato 1 = Largo TT es Tag I es un bit indirecto Mod es Modificador Cálculo de la dirección efectiva (EA): F = 0 | F = 1, I = 0 | F = 1, I = 1 Direccionamiento directo | Direccionamiento directo | Direccionamiento indirecto ------------------------------------------------------------------- TT = 00 | EA = Displ + IAR | EA = Agregar | EA = C/Agregar TT = 01 | EA = Displ + XR1 | EA = Add + XR1 | EA = C/Add + XR1 TT = 10 | EA = Displ + XR2 | EA = Add + XR2 | EA = C/Add + XR2 TT = 11 | EA = Displ + XR3 | EA = Add + XR3 | EA = C/Add + XR3 ------------------------------------------------------------------- Disp = Contenido del campo de desplazamiento Agregar = Contenido del campo de dirección de la instrucción C = Contenido de la ubicación especificada por Agregar o Agregar + XR
- Memoria reservada
Las direcciones más bajas de la memoria principal tienen usos dictados por el hardware o por convención:
Programación
Subprogramas
El 1130 no tiene soporte de hardware para una pila . La mayoría de los subprogramas se llaman con la instrucción BSI (Branch and Store IAR). Esto deposita el valor de IAR (la dirección de retorno) en la dirección de destino y transfiere el control a destino+1. Los subprogramas regresan al lugar donde fueron llamados en esa ocasión mediante un salto indirecto a través de la primera palabra del subprograma. Colocar la dirección de retorno en línea era una técnica común en las computadoras de la época, como la Hewlett-Packard HP 2100 , [ 28 ] la DEC PDP-8 , [ 29 ] y la Scientific Data Systems SDS 920. [ 30 ]
Así pues, un subprograma llamado SIMPL podría organizarse de la siguiente manera (los comentarios siguen al operando de la instrucción):
SIMPL: DC *-* Este es el punto de entrada, inicialmente rellenado con un cero. (sea lo que sea que haga la rutina) BI SIMPL Devolución por una sucursal indirecta , a la dirección que se encuentra en la ubicación SIMPL. END SIMPL Indica al ensamblador que el código fuente de la rutina SIMPLE está completo.
El subprograma se llamaría de la siguiente manera:
BSI L SIMPL Llamar a SIMPL. Se necesita L (Long) si SIMPL está a más de -128 o +127 palabras de distancia.
Normalmente se utilizaría el pseudocódigo de operación CALL.
Como se muestra, el punto de entrada de un subprograma es DC *-*, una pseudooperación de ensamblador que se utiliza para definir una constante (que ocupa una palabra de almacenamiento) con el valor especificado por la expresión. El * representa la dirección actual del ensamblador, por lo que *-* da como resultado cero. Escribir esto en lugar de 0 proporciona una indicación visual distintiva de que se colocará un valor significativo (la dirección de retorno) allí en tiempo de ejecución. El punto de entrada no tiene por qué ser la primera palabra del subprograma. De hecho, la palabra anterior puede ser el inicio de una instrucción de salto directo de dos palabras cuyo campo de dirección se encuentra en SIMPL. Entonces, los retornos pueden efectuarse mediante saltos de una palabra allí:B SIMPL-1
Cuando se llama a SIMPL, la instrucción BSI reemplaza *-*el valor de IAR con la dirección inmediatamente posterior a la instrucción BSI. Después de que SIMPL realiza la acción programada, B I SIMPLse salta a través de ella, pero no directamente a SIMPL, continuando así la ejecución con la instrucción que sigue a la instrucción BSI que llamó a SIMPL.
Sin medidas adicionales para proteger la dirección de retorno, la recursión es imposible: si SIMPL se llama a sí misma o llama a un subprograma que la llamó, su dirección de retorno original se sobrescribe. La reentrada es problemática por la misma razón: una rutina de servicio de interrupción debe abstenerse de llamar a cualquier subprograma que pudiera haber sido el código interrumpido.
Quien llama a SIMPL puede pasarle parámetros, que pueden ser valores o direcciones de valores. Los parámetros pueden codificarse en línea (inmediatamente después de la instrucción BSI) o colocarse en los registros de índice XR1 y XR2. Si los parámetros se colocan en línea, SIMPL modifica su propia dirección de retorno para que su salto indirecto final regrese más allá de los parámetros.
Las funciones enteras que manejan un solo entero esperan el parámetro en el acumulador y devuelven el resultado allí. Las funciones de punto flotante emplean el acumulador de punto flotante (un área de dos palabras reservada por la biblioteca de punto flotante, tres palabras para precisión extendida), y así sucesivamente.
La convención de codificar 0 como valor inicial en el punto de entrada significa que si un error de programación provoca que SIMPL devuelva un valor antes de su primera llamada, la ejecución saltaría a la ubicación de memoria 0. Como se mencionó anteriormente , es habitual que la ubicación 0 contenga una bifurcación hacia la misma ubicación. El programa 1130 se quedaría bloqueado en la ubicación 0 y las luces IAR de la consola estarían completamente apagadas, lo que indicaría claramente que el programa ha fallado.
Enlace con rutinas de biblioteca
Para subprogramas que se llaman muchas veces (por ejemplo, subprogramas para aritmética de punto flotante ), es importante reducir el tamaño de cada llamada a una sola palabra. Estas "rutinas de biblioteca" utilizan el protocolo LIBF. Si bien es más complejo que el protocolo CALL descrito en la sección anterior, LIBF oculta la complejidad al programador en lenguaje ensamblador.
Las rutinas de la biblioteca se direccionan mediante el registro de índice XR3. (Los subprogramas de Fortran usan el registro de índice XR1 para las direcciones de los parámetros y la dirección de retorno, pero el registro XR2 no se usa). XR3 apunta a una secuencia de vectores de transferencia de tres palabras , de modo que la primera entrada está a -128 palabras del valor de XR3. El programador llama a la rutina de la biblioteca usando la LIBFpseudo-operación, que no ensambla una llamada directa BSIa la rutina, sino una instrucción de salto indexada de una palabra ( ) cuyo desplazamiento (-128, -125, etc.) identifica el inicio del vector de transferencia de la rutina.BSI 3 disp
El cargador de enlaces prepara el vector de transferencia al ensamblar el programa. Una entrada de vector de transferencia a una función de biblioteca llamada SIMPL tiene esta forma:
DC *-* Una palabra en la que BSI almacena la dirección de retorno. BL SIMPL Saltar al inicio de la función de la biblioteca.
La forma en que SIMPL sabía dónde estaba su dirección de retorno era que, si SIMPL se declaraba como una rutina LIBF, el cargador de enlace modificaba el código de SIMPL, colocando la dirección de la entrada del vector de transferencia de SIMPL en SIMPL+2. Las rutinas LIBF, a diferencia de los subprogramas CALL, no comienzan con una directiva DC para almacenar la dirección de retorno (que está en el vector de transferencia), sino con código real, como se muestra a continuación:
SIMPL STX 1 RCVR1+1 Guarda el valor XR1 de la persona que llama en una ubicación cercana. LDX I1 *-* El cargador de enlace cambia la palabra de dirección para que apunte al vector de transferencia.
Al colocar la dirección del vector de transferencia de SIMPL en SIMPL+2, queda espacio para una instrucción de una palabra que guarda el registro de índice elegido, en este caso XR1. Luego, la instrucción LDX indirecta apunta XR1 no al vector de transferencia, sino a través de él a la dirección de retorno, o a cualquier parámetro almacenado en línea después de la instrucción BSI. SIMPL entonces realiza la acción para la que fue escrito, accediendo a cualquier parámetro en línea a través de XR1 (en cuyo caso debe incrementar XR1 para la dirección de retorno), y regresa de la siguiente manera:
STX 1 RETN+1 Almacene XR1 para prepararlo para usarlo como dirección de devolución. RCVR1 LDX L1 *-* La primera instrucción de SIMPL modificó esta dirección. Ahora, * restaurar el valor original de XR1. RETN BL *-* Esta instrucción fue modificada hace dos instrucciones; regresar.
- Ejemplo
Supongamos que una llamada de estilo LIBF a SIMPL estuviera en la dirección 100. Entonces la dirección de retorno sería 101, porque es una instrucción de una palabra. XR3 apunta al grupo de vectores de transferencia. Si el vector de transferencia para SIMPL comenzara en la dirección 2000, entonces el BSI se ensamblaría con un tal que XR3+disp = 2000. La ejecución del BSI almacena 101 en la ubicación 2000 y salta a la ubicación 2001. En 2001 hay un salto de dos palabras al punto de entrada de SIMPL, que el cargador de enlace podría haber colocado en la dirección 300.BSI 3 dispdisp
El salto largo transfiere el control a SIMPL. Después de que la instrucción en 300 almacena XR1, la instrucción en 301 es , el cargador de enlace ha colocado 2000 en la ubicación 302. Esto no carga 2000 en XR1; es una instrucción indirecta, y carga el contenido de 2000, que es 101, la dirección de retorno para esa llamada a SIMPL.LDX I1 2000
En la secuencia de retorno mostrada arriba, cuando el control llega a RETN, la instrucción allí es B L 101, que regresa al llamador. (Si hay uno o más parámetros en línea en 101, SIMPL incrementaría XR1 para que apunte a 102 o más allá, y este sería el destino de la Binstrucción).
- Variaciones
Si SIMPL toma parámetros codificados en línea después de la instrucción BSI, SIMPL accede a ellos mediante direccionamiento indexado desde XR1. El primero se puede obtener mediante LD 1 0, el segundo mediante LD 1 1, y así sucesivamente. Si el segundo parámetro es la dirección del parámetro real, entonces obtiene su valor. Antes de regresar, SIMPL incrementa XR1 más allá de los n parámetros con una instrucción como para colocar el valor correcto en RETN+1.LD I1 1MDX 1 n
Una rutina LIBF que se negara a restaurar el valor original de XR1 podría omitir los pasos anteriores y devolver un valor simple para omitir n parámetros en línea. Sin embargo, dicha rutina no puede ser llamada por otras rutinas LIBF porque interrumpe el uso que hace la rutina que la llama de XR1 para acceder a sus propios parámetros y dirección de retorno.B 1 n
La complejidad de LIBF ahorra memoria para subprogramas que se llaman con frecuencia: [ 31 ] : p.24 El enlace LIBF requiere una palabra por invocación, más tres palabras para la entrada del vector de transferencia y código adicional en la rutina misma, mientras que el enlace CALL requiere dos palabras por invocación porque la mayoría de las CALL serán a una dirección más allá del alcance de palabras de -128 a +127 del código de operación de una palabra.
El registro XR3 debe apuntar a las entradas del vector de transferencia de las rutinas de la biblioteca, en lugar de a una tabla de despacho con solo sus direcciones, ya que esto último requeriría que las rutinas LIBF se llamaran con una instrucción BSI indirecta. Estas instrucciones tienen dos palabras de longitud, por lo que tal diseño anularía el ahorro de tamaño de código que ofrece LIBF. El límite de ocho bits para el campo disp del código de instrucción de una palabra limita el uso de las rutinas LIBF a no más de 85 entradas distintas.
Modificación del código
Las secciones anteriores muestran que el código y los datos están interrelacionados. En la programación 1130, es común modificar los campos de dirección de las instrucciones e incluso modificar instrucciones completas.
Por el compilador de Fortran
El compilador de Fortran genera código automodificable al crear subprogramas (subrutinas o funciones) con parámetros. El compilador crea una tabla con todas las ubicaciones donde el subprograma hace referencia a uno de sus parámetros y, como primera instrucción del cuerpo del subprograma, llama a un subprograma llamado SUBIN. Este subprograma utiliza dicha tabla para modificar el campo de dirección de cada referencia a un parámetro, convirtiéndolo en la dirección real del parámetro durante la invocación actual. SUBIN realiza estas modificaciones cada vez que se llama al subprograma.
Cuando un programa Fortran llama a un subprograma, las direcciones de los parámetros aparecen en línea después de la llamada. Por ejemplo, la instrucción Fortran CALL SIMPL(X)podría compilarse en:
BSI L SIMPL DC X La dirección X, en la que SIMPL va a operar
Dentro del subprograma, se podría acceder a los parámetros mediante direccionamiento indexado indirecto como se muestra arriba en Variaciones , por lo que, dado que XR1 se ha preparado adecuadamente, se podría cargar un parámetro entero en el acumulador con una instrucción como esta:
LD I1 0 Carga el valor del primer parámetro (desplazamiento 0) en el acumulador.
En cambio, el compilador utilizó direccionamiento directo. Cuando se ejecuta SUBIN , obtiene la dirección de X y modifica el campo de dirección de la instrucción para que quede así:
LD LX Carga el valor de X en el acumulador.
Las ventajas de SUBIN son las siguientes:
- Para obtener la dirección del operando, una instrucción indexada indirecta requiere tres ciclos de memoria (ya que el registro de índice está en memoria), mientras que la instrucción de acceso directo solo requiere uno.
- Si SIMPL pasara uno de sus parámetros a cualquier subprograma que esperara recibir la dirección de dicho parámetro (incluidas todas las rutinas LIBF para aritmética de punto flotante), se necesitaría SUBIN para proporcionar la dirección real del parámetro original.
Las desventajas de SUBIN son el tiempo de ejecución y la memoria requerida para la tabla de referencias. El tamaño de esta tabla es la suma de 5, el número de parámetros y el número de referencias; si esta suma supera 511, la compilación fallará. Para subprogramas con muchas referencias a un parámetro, el autor del subprograma podría copiar dicho parámetro en una variable local.
Por el usuario
Modificar instrucciones completas era una técnica común en aquella época. Por ejemplo, aunque el 1130 tiene una instrucción OR, la sintaxis de Fortran no permite escribirla. Se puede definir una función entera IOR, lo que permite que la operación lógica OR forme parte de una expresión Fortran como por ejemplo:
M = 3 * IOR ( I , J ) + 5El compilador de Fortran coloca las direcciones de I y J en línea y espera el resultado en el acumulador. El uso de IOR(I,J) en una expresión de Fortran compila las siguientes cuatro palabras:
BSI L IOR Salto de dos palabras al inicio de la función IOR. Parámetro en línea de una palabra de DC IA: La dirección de I. Parámetro en línea de una palabra de DC JA: La dirección de J.
De hecho, la función IOR del ensamblador no calcula I ni J en absoluto. En su lugar, reemplaza las cuatro palabras anteriores con lo siguiente:
LD LI Cargar el acumulador con I (instrucción de dos palabras) O LJ O acumulador con J (instrucción de dos palabras)
Tras realizar dicha transformación, no regresa más allá del final del bloque de cuatro palabras (que acababa de modificar). En su lugar, salta a la dirección exacta desde la que fue llamada originalmente. La instrucción BSI ya no está presente; ahora se encuentran las dos instrucciones que acaba de escribir. Estas combinan los dos enteros con la instrucción OR en lenguaje máquina y almacenan el resultado en el acumulador, como se requiere.
La llamada a IOR y la transformación del bloque de cuatro palabras se realizan como máximo una vez por ejecución del programa. Si se ejecuta de nuevo la línea de Fortran ilustrada anteriormente, se ejecuta más rápido que la primera vez. Se podrían diseñar funciones similares para otras operaciones útiles.
Una función que se automodifica, como IOR, no puede utilizarse en un subprograma de Fortran sobre ninguno de sus parámetros (aunque sí podría usarse para combinar variables locales) porque es incompatible con el subprograma SUBIN mencionado anteriormente. La transformación de la secuencia de llamada de cuatro palabras de IOR, mostrada arriba, modifica la ubicación de la dirección de la variable I. En las llamadas posteriores al subprograma de Fortran, la tabla de referencias a parámetros contendría un error y SUBIN corregiría la palabra incorrecta, en este caso superponiendo la nueva dirección de I sobre el código de la operación OR.
Precisión extendida
FORTRAN 1130 ofrece dos formatos de punto flotante: un formato de "precisión estándar" de 32 bits y un formato de "precisión extendida" de 40 bits.
El formato de precisión estándar contiene una mantisa de complemento a dos de 24 bits, mientras que la precisión extendida utiliza una mantisa de complemento a dos de 32 bits . Este formato aprovecha al máximo las operaciones con enteros de 32 bits de la CPU. El formato extendido ocupa tres palabras de 16 bits, dejando sin usar los ocho bits de orden superior de la primera palabra. La característica común en ambos formatos es un campo de 8 bits que contiene la potencia de dos con un sesgo de 128. Las operaciones aritméticas de punto flotante se realizan mediante software. [ 32 ]
La *EXTENDED PRECISIONtarjeta de opciones del compilador le indica al compilador FORTRAN que utilice 40 bits en lugar de 32 bits para todos los datos de punto flotante; no existe ninguna disposición para mezclar formatos.
Grandes programas Fortran
Los datos que se van a manipular y las instrucciones para manipularlos deben residir juntos en la memoria principal. La cantidad de memoria instalada (de 4096 a 32 768 palabras) es una limitación clave. Fortran ofrece varias técnicas para escribir programas grandes a pesar de esta limitación.
- subprogramas LOCALES
Fortran permite que cualquier subprograma se designe como "LOCAL" (Carga bajo llamada). Cada subprograma LOCAL es una superposición ; forma parte del programa ejecutable residente en disco, pero solo se carga en la memoria principal (si no está ya allí) durante el tiempo en que se llama. Así, por ejemplo, seis subprogramas LOCAL requerirían solo la cantidad de memoria principal del más grande, en lugar de la cantidad total de los seis. Sin embargo, ninguno de los seis puede invocar a otro, ni directamente ni a través de subprogramas intermedios.
- Programas por fases
Un programa Fortran completo puede ceder el control a una fase posterior, finalizando en el Supervisor con una instrucción para cargar la siguiente fase en la memoria principal. Un programa extenso podría dividirse en tres partes, compiladas por separado, denominadas PARTE1, PARTE2 y PARTE3. La ejecución se inicia // XEQ PART1y, en un punto adecuado, PARTE1 ejecutaría la instrucción Fortran, CALL LINK(PART2)y así sucesivamente. El nombre del programa sucesor en la llamada no puede ser variable, pero la lógica del programa puede determinar si el control se transfiere a otra fase y qué CALL LINKinstrucción se ejecuta. Como se mencionó anteriormente , el compilador Fortran se escribió de esta manera, con cada fase de compilación realizada por un programa independiente.
- Almacenamiento de datos común
Los programas, como los programas Fortran, residen en direcciones de memoria bajas (justo por encima del Supervisor). Fortran asigna espacio en las direcciones más altas para cualquier variable y arreglo declarado COMMON. Si una fase posterior del programa contiene una declaración COMMON correspondiente, la información en esta área común puede compartirse entre fases. Las fases podrían omitir la declaración COMMON sin problema, siempre que no fueran tan grandes como para que su código invadiera el área común. El almacenamiento COMMON no solo comparte datos entre fases; las variables COMMON de memoria baja pueden usarse para pasar datos entre un programa principal y subprogramas dentro de una misma fase, aunque los datos podrían perderse al pasar a la siguiente fase.
Ejemplos de programación
Los ejemplos se pueden ejecutar en el emulador IBM 1130 disponible en IBM 1130.org .
Conjunto de programas de ejemplo para ensamblador
El siguiente listado muestra una baraja de cartas que compila y ejecuta un programa ensamblador que imprime una baraja de cartas en la impresora de línea.
// TRABAJO // ASM *LISTA * LCARD.ASM - LISTA UNA BARAJA DE CARTAS PARA IMPRIMIR EN LÍNEA * * PROGRAM * NUEVA PÁGINA EN LA IMPRESORA * LEE UNA TARJETA * CONVERTIR FORMATO * IMPRIMA UNA LÍNEA EN LA IMPRESORA * IR A A * INICIO LIBF IMPRIMIR1 IR A NUEVA PÁGINA EN 1132 DC /3100 IMPRESORA CANAL 1-NUEVA PÁGINA * LECTURA DE LA TARJETA NEXTC LIBF 0 DESDE EL LECTOR DE TARJETAS 1442 CONTROL DC /1000 PARA LEER TIENDA CBUFF DE DC, 80 COLUMNAS TARJETA CINP LIBF0 CC 0 B BUCLE CINP HASTA QUE SE LEA LA TARJETA * LIBF ZIPCO CONVIERTE LA TARJETA EN IMPRESORA DC /1100 DESEMPAQUETADO Y EMPAQUETADO BÚFER DE ENTRADA DC CBUFF+1 BÚFER DE SALIDA DC PBUFF+1 DC 80 NÚMERO DE CARACTERES LLAMAR A HLEBC HOLLERITH A EBCDIC * LIBF PRNT1 IMPRIMIR 80 CARACTERES CÓDIGO DE CONTROL DC/2000 PARA IMPRIMIR BÚFER DE IMPRESIÓN DC PBUFF ERROR DE IMPRESIÓN DC PERR POUT LIBF PRNT1 COMPROBAR LA IMPRESIÓN COMPLETA CC 0 B BUCLE DE POUT HASTA COMPLETARSE * B SIGUIENTE C LEER LA SIGUIENTE TARJETA * * DATOS * CBUFF DC 80 80 COLUMNAS POR CARTA BSS 80 * PBUFF DC 40 40 PALABRAS 80 CARACTERES BSS 40 * PERR DC 0 BI PERR ESTO REGRESA AL * CONTROLADOR DE ERRORES DE IMPRESORA * LO QUE TERMINARÁ EL PROGRAMA * FIN INICIO PUNTO DE ENTRADA DEL PROGRAMA // XEQ DATOS DE PRUEBA 1 HOLA MUNDO DATOS DE PRUEBA 2
En esta tarea, el ensamblador deja el resultado de su ensamblaje en el área temporal del disco del sistema, y el comando XEQ ejecuta el contenido de dicha área. El carácter extraño END STARTtiene dos significados: fin del código fuente del ensamblador y nombre del punto de entrada de la rutina, que tiene la etiqueta START.
El código fuente del ensamblador comienza en la columna 21 de la tarjeta, no en la columna 1. En sistemas sin unidad de disco, el ensamblador insertaba el código al inicio de la tarjeta recién leída (el lector de tarjetas era en realidad un lector-perforador, con la estación de perforación después de la estación de lectura) y luego leía la siguiente tarjeta. Para gestionar las bifurcaciones hacia adelante y similares, la segunda pasada del ensamblador implicaba, literalmente, una segunda pasada de las tarjetas por el lector/perforador. Si se necesitaban cambios en el código fuente, el programador duplicaba las tarjetas para obtener un mazo con las columnas 1 a 20 en blanco, listo para la siguiente ejecución del ensamblador.
Por convención, los búferes van precedidos de un contador de palabras. La DCinstrucción (Define Constant) crea una palabra de contador y la instrucción BSS(Block Started by Symbol) reserva el número de palabras necesario para el búfer. El búfer de la tarjeta requiere 80 palabras, una por cada columna de la tarjeta. El controlador CARD0 lee cada columna de la tarjeta literalmente, utilizando 12 de los 16 bits de la palabra del búfer, con un bit activado por cada perforación realizada en la fila correspondiente de esa columna. El patrón de perforaciones suele describir un carácter de texto mediante el código Hollerith . El teclado de la consola también introduce datos en el programa mediante el código Hollerith, siendo este el único caso en el que dos dispositivos utilizan la misma codificación de caracteres.
La rutina de la impresora, sin embargo, trabaja con texto en EBCDIC de 8 bits con dos caracteres por palabra, lo que requiere un búfer de 40 palabras. El programa utiliza la rutina de biblioteca ZIPCO para realizar la conversión. A pesar de las apariencias, la instrucción CALL HLEBCno se ejecuta porque HLEBC no es una subrutina, sino una tabla de conversión de Hollerith a EBCDIC proporcionada por IBM. La instrucción CALL proporciona la dirección de la tabla a ZIPCO y garantiza que el cargador de enlace incluya la tabla en el programa; por lo tanto, es el quinto parámetro de ZIPCO, aunque ocupa dos palabras de almacenamiento: la palabra de código de operación BSI para CALL no se utiliza y, por lo tanto, generalmente se desperdicia, pero la segunda palabra de la expansión CALL HLEBCes la dirección de la tabla HLEBC que necesita ZIPCO. Después de la conversión, el programa envía la salida convertida, ahora en el búfer PBUFF, a la impresora a través del controlador PRNT1. Nuevamente, el programa entra en bucle hasta que el controlador de la impresora informa de la finalización, luego el programa lee la siguiente tarjeta.
Este ejemplo no contiene código para determinar cuándo detenerse. Un programa más completo verificaría las tarjetas que comienzan con //, lo que indica el inicio del siguiente trabajo. Para detener el lector de tarjetas lo antes posible, un programa podría verificar el código Hollerith de /antes incluso de convertir la tarjeta a EBCDIC.
E/S asíncronas y rendimiento
La llamada a CARD0 para leer una tarjeta inicia la operación y regresa inmediatamente al programa que la llamó, el cual podría continuar con otras actividades. Sin embargo, el programa de ejemplo no intenta superponer la entrada y la salida mediante búferes, a pesar de tener dos áreas de trabajo separadas; simplemente regresa a CIMP para realizar una nueva prueba. Una vez que CARD0 detecta la interrupción de finalización de la operación del lector de tarjetas, regresa una palabra más adelante, omitiendo así el salto de regreso a CIMP y saliendo del bucle.
Las rutinas de ejemplo no hacen funcionar los dispositivos de E/S a máxima velocidad. En particular, el lector de tarjetas, apenas unos milisegundos después de informar que ha terminado de leer una tarjeta, inicia su secuencia de parada, tras lo cual un nuevo comando de lectura debe esperar para iniciar otro ciclo de lectura. El lector IBM 1442 podía leer 400 tarjetas por minuto a máxima velocidad, pero una pequeña vacilación en los comandos de lectura reducía su rendimiento a la mitad o incluso más. Un programa Fortran no podía completar ni siquiera el procesamiento de entrada más simple a tiempo, por lo que no podía leer tarjetas a máxima velocidad. Un DObucle Fortran común para leer tarjetas hacía que el motor se detuviera y arrancara con tanta frecuencia que aceleraba el desgaste. Con el almacenamiento en búfer, el control del lector de tarjetas podía superponerse con el procesamiento, y el lector podía funcionar a máxima velocidad con grandes conjuntos de datos, pero la memoria para el programa más complejo y para los búferes solía ser escasa.
Incluso con lenguaje ensamblador y doble búfer, un programa para mostrar una baraja de cartas del lector IBM 2501 (1000 cartas por minuto) en la impresora de línea no podía seguir el ritmo, ya que la traducción de los patrones de los agujeros de las cartas a EBCDIC para la impresora, tal como la realizaba EBPRT, era demasiado lenta; en su lugar, se necesitaban los más complejos ZIPCO y HLEBC, como en el ejemplo.
Sesión de ejemplo APL\1130
La siguiente imagen muestra una sesión simple de APL \ 1130. Esta sesión se realizó mediante el simulador 1130 disponible en IBM 1130.org. La sesión anterior muestra un inicio de sesión, la suma de los números enteros del 1 al 100, la generación de una tabla de suma para los números enteros del 1 al 5 y el cierre de sesión. 
Sistemas en competencia
El mismo año en que se presentó el modelo 1130, Digital Equipment Corporation presentó el PDP-8 de 12 bits, más pequeño, más barato y con mejores ventas , reconocido como el primer miniordenador exitoso.
Productos relacionados
El IBM 1800 , anunciado en noviembre de 1964, [ 33 ] es una variante del IBM 1130 para aplicaciones de control de procesos . Utiliza hardware en lugar de memoria central para los tres registros de índice e incluye dos instrucciones adicionales (CMP y DCM), además de capacidades adicionales de interrupción y E/S . Es el sucesor del IBM 1710 , al igual que el IBM 1130 es el sucesor del IBM 1620 .
El IBM 1500 es un sistema educativo multiusuario basado en un IBM 1130 o un IBM 1800. Puede conectarse a hasta 32 estaciones de trabajo para estudiantes, cada una con diversas capacidades audiovisuales .
Sucesores
IBM no produjo ningún sistema sucesor compatible con el 1130. El IBM System/7 es un sistema de control de procesos y en tiempo real, y el IBM Series/1 es un miniordenador de propósito general de 16 bits, ambos con arquitecturas diferentes a las del 1130 y entre sí.
Influencia de los 1130
- Brian Utley fue el director del proyecto 1130 durante su desarrollo e introducción. Brian comentó en la tercera fiesta del 11/30 que, antes de que el departamento de marketing de IBM le diera el nombre de 1130, se le conocía como el Sistema Informático de Ingeniería Pequeña o SECS. [ 34 ] La arquitectura inicial era de 18 bits, pero se cambió a 16 bits debido a la influencia del desarrollo del System/360 . El discurso completo de su presentación de 2005 está disponible en IBM1130.org .
- El destacado diseñador de software Grady Booch tuvo su primer contacto con la programación en un IBM 1130: [ 35 ]
Llamé a la puerta de la oficina de ventas local de IBM hasta que un vendedor se apiadó de mí. Después de charlar un rato, me entregó un manual de Fortran. Seguro que pensó: «Nunca más volveré a saber de este chico». Regresé la semana siguiente diciendo: «Esto es genial. Lo he leído entero y he escrito un pequeño programa. ¿Dónde puedo encontrar un ordenador?». Para mi alegría, el hombre me consiguió tiempo para programar en un IBM 1130 los fines de semana y por las noches. Esa fue mi primera experiencia programando, y debo agradecer a aquel vendedor anónimo de IBM por impulsar mi carrera. Gracias, IBM.
- El gurú de LISP, Guy Steele, escribió un intérprete de LISP para la IBM 1130 cuando estaba en la escuela secundaria ( Boston Latin School , que tenía una IBM 1130 para uso de los estudiantes). [ 36 ] [ 37 ] Su código y documentación para LISP 1.6, junto con un resumen del trabajo actual para lograr que se ejecute bajo simulación, está disponible en IBM1130.org .
- Chuck Moore quería llamar a su nuevo lenguaje "Fourth", pero el sistema operativo IBM 1130 estaba limitado a nombres de cinco caracteres, por lo que terminó llamándose FORTH . [ 38 ]
- Dan Bricklin , creador del programa VisiCalc , se inició en la programación cuando aprendió y utilizó la IBM 1130 como parte del Proyecto de Verano de Informática y Matemáticas de la Fundación Nacional de Ciencias para estudiantes de secundaria, impartido en la Universidad de Pensilvania en 1966. [ 39 ]
- Se utilizó un IBM 1130 con 8 kilopalabras de memoria principal para la primera investigación a tiempo completo del mundo en la Búsqueda de Inteligencia Extraterrestre en el Observatorio de Radio de la Universidad Estatal de Ohio . Este equipo detectó la señal Wow !. [ 40 ]
- Charles Goldfarb , el padre de SGML , describe un trabajo instalando un sistema de composición tipográfica basado en un IBM 1130 que "finalmente cambió mi carrera", impulsándolo hacia el marcado genérico: [ 41 ]
El sistema consistía en un ordenador IBM 1130, una máquina del tamaño de un escritorio con 8 KB de memoria principal, una unidad de disquete de 512 KB, un lector de cinta de papel Teletype CX y una perforadora de cinta de papel BRPE, y una fotocomponedora Photon 713. Esta tarea fue mi primera experiencia gestionando una base de datos de documentos legibles por máquina: aprendí a enrollar cuidadosamente la cinta de papel perforada para poder guardarla ordenadamente en papeleras cilíndricas. Mientras tanto, aunque yo no lo sabía, se estaban sentando las bases del marcado generalizado. Históricamente, los manuscritos electrónicos contenían códigos de control o macros que formateaban el documento de una manera particular ("codificación específica"). En cambio, la codificación genérica, que comenzó a finales de la década de 1960, utiliza etiquetas descriptivas (por ejemplo, "encabezado", en lugar de "formato-17").
- Alan Kay utilizó el IBM 1130 en los primeros trabajos sobre GUI para su tesis doctoral en 1969. [ 42 ]
- La escuela secundaria técnica Hutchinson Central ("Hutch Tech") en Buffalo, NY, utilizó la IBM 1130 en el primer programa de informática de cuatro años para escuelas secundarias del país en 1969. Robert Santuci era el director del programa de informática e impartía clases de programación y lógica inductiva. [ 43 ]
- Un ingeniero de IBM fue contratado por Signetics e incorporó varias características arquitectónicas del IBM 1130 al procesador de un solo chip Signetics 2650. [ 44 ]
Hoy a las 11:30
De un estimado de 10.000 sistemas producidos, se sabe que existen los siguientes a partir de 2025::
- ACONIT en Grenoble, Francia, tiene un sistema 1130 completo. [ 45 ]
- El Museo de Historia de la Computación ( Mountain View, California ) tiene un sistema 1130. [ 46 ]
- CMbB Computer Museum beider Basel ( Basilea, Suiza ). [ 47 ]
- El Museo Nacional de la Informática (TNMOC) (Bletchley Park, Reino Unido) tiene un sistema 1130 completo. [ 48 ] [ 1 ]
- La Universidad de Stuttgart (Alemania) cuenta con un sistema 1130 funcional. [ 49 ]
- Carl Claunch [ 50 ] ha restaurado o está en proceso de restaurar varios sistemas 1130, incluyendo uno para el System Source Computer Museum [ 51 ] y otro para el museo Vintage Computer Federation. [ 52 ]
Libros apócrifos
Las especulaciones sobre por qué al producto se le asignó el número 1130 se centraron en las siguientes posibilidades:
- Dado que la 1130 era una pequeña máquina científica, el número se eligió multiplicando 360 (como en IBM 360 ) por π .
- Las 11:30 fue la hora del día en que los planificadores de producto llegaron a un punto muerto con respecto a cómo llamar al producto.
- Que el 1130 fue el undécimo diseño de computadora de IBM, y tenía 30 instrucciones.
Otros han especulado que la existencia del IBM 1130 explica por qué nunca apareció ningún ordenador designado "11/30" en la familia de máquinas PDP-11 . [ 53 ]
Véase también
Notas
Referencias
- 1 2 3 "Galería de grandes sistemas: IBM 1130" . Museo Nacional de la Computación. Archivado del original el 11 de febrero de 2020. Recuperado el 11 de febrero de 2020 .
- 1 2 Manual de instalación de IBM 1130 , Formulario IBM GA26-5914, junio de 1966, BitSavers
- 1 2 Francis, CG (11 de febrero de 1965). «IBM presenta una potente computadora pequeña» . Director de Información (Comunicado de prensa). White Plains, Nueva York : International Business Machines (IBM). Archivado del original el 5 de julio de 2019.
- ↑ Utley, Brian (enero de 2005). "Orador invitado: Brian Utley" (MP3) (Entrevista) . Consultado el 2 de enero de 2012 .
- ↑ 760 lb: modelos 1A, 1B, 2A, 2B, 4A y 4B 1050 lb: modelos 1C, 1D, 2C, 2D, 3B, 3C, 3D, 5B, 5C y 5D
- "Documentos de IBM 1130" . www.bitsavers.org . fe/GA26-5914-8_1130_Installation_Manual_Physical_Planning_Dec71.pdf , págs. 10-11.
- 1 2 Emerson W. Pugh; Lyle R. Johnson; John H. Palmer (1991). Los sistemas 360 y los primeros 370 de IBM . MIT Press. ISBN 978-0-262-16123-7.
- ↑ "Nueva minicomputadora Xerox" . The New York Times . 29 de enero de 1973.
- ↑ "Xerox 530 admite COBOL" . ComputerWorld . 26 de diciembre de 1973.
- ↑ "Clasificación de la computadora Xerox 530" (PDF) . computerhistory.org . Consultado el 23 de septiembre de 2014 .
- ↑ "Los pedidos de Xerox 530 son alentadores"" .
- ↑ Larry Breed (agosto de 2006). "Cómo llegamos a APL\1130" . Vector (Asociación Británica de APL) . 22 (3). ISSN 0955-1433 . Archivado del original el 12 de mayo de 2008. Consultado el 11 de marzo de 2007 .
- ↑ Hedrick, GE; Robertson, Alan (10-12 de junio de 1975). El compilador de subconjuntos ALGOL 68 del estado de Oklahoma . Conferencia internacional de 1975 sobre ALGOL 68. Stillwater, OK.
- ↑ Hedrick, GE (agosto de 1977). "Instrucción de ALGOL68 en la Universidad Estatal de Oklahoma". Boletín ACM SIGCSE . 9 (3). Nueva York, NY, EE. UU.: ACM: 16–20 . doi : 10.1145/382175.803425 .
- ↑ McJones, Paul. "Implementaciones y dialectos de Algol 68" . Software Preservation Group, Computer History Museum .
- ↑ IBM Corporation (1967). Manual del usuario del sistema estadístico 1130 (1130-CA-06X) (PDF) . Consultado el 8 de febrero de 2015 .
- ↑ IBM Corporation (1968). Manual de lógica del programa de la estación de trabajo de entrada remota de trabajos IBM 1130 (PDF) . Consultado el 8 de febrero de 2015 .
- ↑ IBM Corporation (1967). Sistema de composición tipográfica IBM 1130 (RPQ) (PDF) . Consultado el 8 de febrero de 2015 .
- 1 2 IBM Corporation (1968). Manual de referencia del sistema de monitorización de disco IBM 1130 (PDF) . Consultado el 31 de agosto de 2021 .
- 1 2 Sistema de monitorización de disco IBM 1130, versión 2, Guía del programador y del operador (PDF) (Décima ed.). IBM. Mayo de 1972. GC26-3717-9 . Recuperado el 6 de febrero de 2015 .
- ↑ "IBM 1130" . Consultado el 21/02/2017 .
Nuestro 1130 tiene una unidad de cartucho de disco 2315 de medio millón de palabras en el lado derecho, detrás de la puerta. El lector de cinta de papel probablemente se usaba principalmente para el arranque, en lugar del lector de tarjetas 1442 de gran capacidad (300 tarjetas/min).
- 1 2 Características funcionales del IBM 1130 (PDF) . Biblioteca de referencia de sistemas IBM (séptima edición). IBM. Abril de 1972. GA26-5881-6.
- ↑ "Programas de monitorización" .
- ↑ IBM Corporation. "Carpeta de datos del 1130: Sistema informático IBM 1130" . Archivos de IBM . Archivado del original el 1 de mayo de 2023. Consultado el 29 de abril de 2023 .
- ↑ "Procedimientos operativos del IBM 1130" (PDF) . BitSavers . Biblioteca de referencia de sistemas IBM.
- ↑ Descripción de la función personalizada IBM 1130: canal de adjuntos RPQ número 831552, formulario A26-1579-0 (PDF) . Biblioteca de referencia de sistemas IBM (primera edición). San José, California: IBM Corporation. Octubre de 1968. Consultado el 10 de agosto de 2009 .
- ↑ "Lector de páginas de marcas ópticas IBM 1231" .
- ↑ IBM Corporation. "Archivos de IBM: Cronología de DPD (página 4)" . Archivado del original el 23 de octubre de 2009. Consultado el 10 de agosto de 2011 .
- ↑ Hewlett-Packard (diciembre de 1971). Manual de referencia del ordenador 2100A (PDF) . pág. 18. Consultado el 5 de agosto de 2016 .
- ↑ "Manual del usuario de PDP-8" . Digital Equipment Corporation. Mayo de 1966. Consultado el 26 de abril de 2021 .
- ↑ Scientific Data Systems. 920 Manual de referencia informática (PDF) . pág. 17. Consultado el 5 de agosto de 2016 .
- ↑ IBM Corporation (1968). Lenguaje ensamblador IBM 1130 (PDF) . Consultado el 6 de febrero de 2015 .
- ↑ Biblioteca de subrutinas IBM 1130, 9.ª ed . (PDF) . IBM Corporation. 1974. pág. 93.
- ↑ "Sistema de adquisición y control de datos IBM 1800" . Archivos de IBM . 23 de enero de 2003. Archivado del original el 3 de febrero de 2023. Consultado el 20 de agosto de 2021 .
- ↑ Utley, Brian (30-10-2006). "Origen del nombre IBM 1130" . Archivado del original el 1 de octubre de 2007. Consultado el 16 de enero de 2007 .
- ↑ Booch, Grady (3 de abril de 2003). "Grady Booch pule su bola de cristal" . IBM . Consultado el 16 de enero de 2007 .
- ↑ Steele, Guy L. Jr. (24 de noviembre de 2005). "Reflexiones sobre el diseño del lenguaje: los nuevos desafíos requieren nuevas soluciones" . Dr. Dobb's Journal . Consultado el 16 de enero de 2006 .
- ↑ Steele, Guy L. Jr. "Confesiones de un hacker feliz" . Archivado del original el 3 de febrero de 2007. Consultado el 16 de enero de 2006 .
- ↑ Rather, Elizabeth; Colburn, Donald; Moore, Charles (marzo de 1993). "La evolución de Forth" . Consultado el 16 de enero de 2007 .
- ↑ Bricklin, Dan (23 de agosto de 2002). "Recuerdos de mi visita al Área de la Bahía y al Museo de Historia de la Computación" . Recuperado el 16 de enero de 2007 .
- ↑ Dixon, Bob (13 de agosto de 2005). "SETI en la década de 1970" . The Big Ear . Recuperado el 16 de enero de 2007 .
- ↑ Goldfarb, Charles (1996). "Las raíces de SGML: un recuerdo personal" . Archivado del original el 20 de diciembre de 2012. Consultado el 16 de enero de 2007 .
- ↑ Kay, Alan C., "The Reactive Engine" , tesis doctoral, Universidad de Utah, 1969. "Las rutinas de visualización gráfica, el generador de caracteres y el editor se ejecutaron durante un año en un ordenador IBM 1130 con una interfaz "casera". Desafortunadamente, el 1130 se esforzaba por funcionar simplemente como un búfer de visualización mejorado, y ninguna de las rutinas algorítmicas se implementó."
- ↑ Koch, Warren (1972). "El uso de computadoras en la instrucción en escuelas secundarias" (PDF) . Recuperado el 23 de mayo de 2025 .
- ↑ "Signetics 2650: Un IBM en un chip" . CPU Shack. 16 de octubre de 2016. Consultado el 25 de octubre de 2016 .
- ↑ "IBM 1130" . ACONIT (en francés) . Consultado el 11 de julio de 2016 .
- ↑ "Detalles del artefacto: modelo IBM 1130" . Museo de Historia de la Computación . Consultado el 11 de julio de 2016 .
- ↑ CMbB. "Computer Museum beider Basel" . CMbB (en alemán) . Consultado el 17 de marzo de 2026 .
{{cite web}}: CS1 mantenimiento: estado de la URL ( enlace ) - ↑ "Restauración del sistema IBM 1130 durante 2011" . Museo Nacional de la Computación . 28 de diciembre de 2011. Archivado del original el 4 de abril de 2019. Consultado el 11 de julio de 2016 .
- ↑ «IBM 1130» . Computermuseum der Fakultät Informatik . Consultado el 11 de julio de 2016 .
- ↑ Claunch, Carl. "Rescate 1130" . Consultado el 11 de julio de 2016 .
- ↑ "Museo de la Computación @ System Source" .
- ↑ "Federación de Computadoras Vintage" .
- ↑ PDP-11/20 y /15
Enlaces externos
- Archivo de IBM: comunicados de prensa, cronología, fotos y carpeta de datos sobre el IBM 1130 .
- IBM 1130.org, sitio web de Norm Aleks y Brian Knittel, contiene información importante sobre la 1130 y un simulador descargable compatible con los entornos DMS R2V12 y APL.
- www.ibm1130.net es el sitio web de Howard Shubs dedicado al modelo 1130.
- Relato personal de Arnold Reinhold sobre los sucesos de 1130. El texto de aquí se ha incorporado a este artículo con permiso.
- Un conjunto de archivos PDF que contienen manuales escaneados del IBM 1130.
- La página de Kym Farnik sobre informática retro, específicamente sobre el 1130.
- Una discusión sobre el (entonces) centro de computación de Angle Park que estaba equipado con IBM 1130.
- Fotos de la IBM 1130 de Bob Rosenbloom
- Material del curso IBM 1130 en la página web de Historia de la Computación de la Universidad de Columbia.
- Una colección de fotos de detalle tomadas por Peter Vaughan en Flickr de una IBM 1130 en el Museo Nacional de la Computación.
- Minicomputadoras IBM
- Computadoras con memoria de núcleo magnético
- computadoras de 16 bits
- IBM 1130
- Introducciones relacionadas con la informática en 1965