stringtranslate.com

IBM 1130

El IBM 1130 Computing System, presentado en 1965, [3] fue el ordenador más económico de IBM en ese momento. Se trataba de una máquina binaria de 16 bits que se comercializó en mercados técnicos sensibles a los precios y con uso intensivo de la computación, como la educación y la ingeniería, y sucedió 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 utilizado, pero había varios otros disponibles, incluido APL .

Consola IBM 1130

El 1130 también se utilizó como un front-end inteligente para conectar una unidad de visualización gráfica IBM 2250 , o como estación de trabajo de entrada de trabajos remota (RJE), conectada a un mainframe System/360 .

IBM 1130 con periféricos, incluyendo lector/perforador de cinta de papel, lector/perforador de tarjetas IBM 1442 (trasero) y plotter Calcomp IBM 1627 .

Descripción

Una tarjeta SLT de ancho doble de un IBM 1130. Las latas metálicas cuadradas contienen los circuitos híbridos.

Se ha estimado 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 (y sus clones no IBM) proporcionó a muchas personas su primera interacción directa con una computadora. Su relación precio-rendimiento era buena e incluía notablemente un 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 equilibradas permitieron el desarrollo interactivo de programas de "tienda abierta" .

El IBM 1130 utiliza el mismo encapsulado electrónico, llamado Solid Logic Technology (SLT), que se utilizó en el System/360 . Tiene una arquitectura binaria de 16 bits , al igual que las minicomputadoras posteriores como la PDP-11 y la Data General Nova .

El espacio de direcciones es de 15 bits, lo que limita el 1130 a 32.768 palabras de 16 bits ( 65.536 bytes ) de memoria. El 1130 utiliza memoria de núcleo magnético , que el procesador direcciona en límites de palabras, utilizando modos de direccionamiento directo, indirecto e indexado.

Modelos

IBM implementó cinco modelos de la unidad central de procesamiento 1131, el componente de procesamiento principal del IBM 1130. Los modelos 1 a 5 describen el tiempo de ciclo de la memoria central, así como la capacidad del modelo para tener almacenamiento en disco. Una letra de la A a la D adjunta al número de modelo indica la cantidad de memoria central 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 mejoras de rendimiento observaron que el ajuste en campo para lograr la mejora era sorprendentemente trivial.

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 a medida que giran. Las impresoras para el Modelo 4 funcionan más lentamente, pero el procesador más lento aún no puede seguirle el ritmo. El manual de hardware revela que cuando el Modelo 4 estaba dando servicio a las dos interrupciones de nivel más alto (la interrupción de la columna del lector de tarjetas de nivel 0 o la interrupción de la impresora de nivel 1), funcionó con el tiempo de ciclo más rápido de 3,6 μs. Algunos usuarios del Modelo 4 escribirían un controlador de impresora falso que no descartara la interrupción de la impresora, para beneficiarse de la mayor velocidad del procesador. Sin embargo, las interrupciones de nivel inferior se desactivan durante este intervalo, incluso la interrupción de fin de tarjeta (nivel 4) del lector de tarjetas 1442.

Productos de seguimiento

El IBM 1800 , anunciado en noviembre de 1964, [6] es un predecesor del IBM 1130 para aplicaciones de control de procesos . Utiliza hardware en lugar de memoria central para los tres registros de índice y presenta dos instrucciones adicionales (CMP y DCM) más capacidades de interrupción y E/S adicionales . Es un sucesor del IBM 1710 , como el IBM 1130 es un 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 de estudiantes, cada una con una variedad de capacidades audiovisuales .

Aparte de estos, IBM no produjo ningún sistema sucesor compatible con el 1130. El IBM System/7 es un sistema de control de procesos y tiempo real, y el IBM Series/1 es una minicomputadora de 16 bits de propósito general; ambos tienen arquitecturas diferentes a las del 1130 y entre sí.

Cronología

Software

Para maximizar la velocidad y conservar espacio, el sistema operativo y los compiladores están escritos completamente en lenguaje ensamblador y emplean técnicas que hoy en día son raras, incluida la mezcla de código y datos, así como 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 núcleo, aunque el programa compilado podría no caber en una máquina de ese tipo. En este compilador de múltiples pasadas , cada "fase" procesa todo el programa fuente y lo lleva un paso más hacia el código de máquina. Por ejemplo, la primera fase lee las declaraciones fuente en la 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 de papel perforada de 8 canales o tarjetas perforadas.

El sistema operativo más utilizado para el 1130 es el Disk Monitor System Version 2 (DM2) introducido en 1967. DM2 es un sistema orientado a lotes de una sola tarea . Requiere un sistema con al menos 4 KB de memoria central y una unidad de disco 2310 integrada para la residencia del sistema. El Supervisor es pequeño para los estándares modernos, 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 ese trabajo, que también podría incluir el reemplazo del controlador de disco básico por un controlador más avanzado. Durante la ejecución de un trabajo, solo un monitor residente , llamado Supervisor Esqueleto , reside en la memoria. Este supervisor requiere sólo 1020 bytes, por lo que la primera memoria disponible de una tarea comienza con la dirección /01FE ( hexadecimal ) o la palabra 510. Cuando el trabajo finaliza o se aborta, el supervisor carga el Analizador de registros 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 .

Estaba disponible un sistema de programación de cinta de papel/tarjeta 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 en la lectura de múltiples sectores de disco. Pero 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 hace posible que un programador no familiarizado con la organización de discos sobrescriba inadvertidamente el cargador de arranque.

Otros lenguajes de programación disponibles en el 1130 incluyen

Incluso existe un compilador ALGOL en francés , en el que, por ejemplo, " Debut ...Fin;" sustituye a " Begin ... End;". Todos sus mensajes están en francés, por lo que el objetivo es una "buena compilación".

La Eastern Michigan University desarrolló un compilador Fortran IV para el 1130, conocido como Fortran-EMU, como alternativa al compilador Fortran IV (subconjunto) proporcionado por IBM. Agrega muchas características de Fortran IV que no son compatibles con el compilador de IBM, incluido el tipo de datos LOGICAL, nombres de variables de seis letras y diagnósticos mejorados. El compilador Fortran-EMU se distribuyó como una baraja de tarjetas perforadas en un formato de archivo de imagen de disco con toda el área restante del sistema eliminada, para evitar copiar 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. [13] [14] [15]

En la Universidad de Michigan se desarrolló un intérprete FOCAL .

IBM también distribuyó una gran biblioteca de programas, tanto compatibles con IBM (Tipo I y II) como no compatibles (Tipo III y IV).

Dado que el 1130 estaba orientado principalmente al mercado científico, predominaron los programas científicos y de ingeniería:

El 1130 también ocupó un nicho como máquina de procesamiento de datos para organizaciones más pequeñas:

También existe software para propósitos especiales:

Control de trabajo

El funcionamiento por lotes del 1130 está dirigido por registros de control en el flujo de entrada principal (lector de tarjetas o cinta de papel). Hay dos tipos de registros de control: registros de control de monitorización y registros de control de supervisión. [19]

Registros de control de monitorización

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.

El JOBregistro puede tener una "T" en la columna 8 para indicar que cualquier archivo agregado al Área de usuario por este trabajo debe eliminarse al final. Las columnas 11 a 15 pueden contener una etiqueta de cartucho; el sistema verifica que el cartucho especificado esté montado antes de continuar.

El XEQregistro puede contener el nombre del programa que se va a ejecutar en las columnas 8 a 12. Si se omite, se ejecutará el programa que se encuentre actualmente en el almacenamiento de trabajo. Si la columna 14 contiene "L" y el programa está en formato de sistema de disco (no en imagen de núcleo), el generador de carga de núcleo imprimirá un mapa de núcleo. Si esta instrucción va seguida de LOCAL NOCAL, o FILESRegistros de control de supervisor, las columnas 16 y 17 contienen el recuento de estos registros. La columna 19 indica opcionalmente qué rutina de controlador de disco se va a vincular. "0", "1" o "N" solicita DISK1, DISK2 o DISKN; cualquier otro carácter, incluido el espacio en blanco, solicita DISKZ, la rutina de disco FORTRAN.

Registros de control del supervisor

Los registros de control de supervisor comienzan con un "*" en la columna 1, seguido inmediatamente por la pseudooperación de comando en la columna 2. Son LOCAL, NOCALy FILESpara el generador de carga de núcleo. Los registros de control de DUP tienen un formato similar. Estos registros controlan la vinculación del programa, ya sea para la // XEQdeclaración o el *STORECIcomando de DUP.

Procedimiento operativo

Tarjeta perforada que contiene un programa autocargable 1130 que copiaría la baraja de cartas colocada después de ella en la tolva de entrada.

Los recuerdos duraderos de la IBM 1130 pueden haber sido el resultado de su necesidad de una intervención humana continua. Normalmente estaba ocupada ejecutando "trabajos" especificados por una baraja de tarjetas perforadas . El operador humano cargaba los trabajos en el lector de tarjetas y los separaba en trabajos para devolverlos, quizás junto con la salida impresa, al remitente. El operador también tenía que vigilar la 1130 para detectar evidencias de un mal funcionamiento o un trabajo estancado e intervenir presionando la INT REQtecla en el teclado para pasar al inicio del siguiente trabajo. [20]

El inicio de un trabajo se marcaba con una tarjeta perforada que comenzaba con // JOB. Cualquier tarjeta que comenzara con //era un comando para el Supervisor y no podía usarse como programa de usuario o datos. Otros comandos incluían // DUPejecutar el Programa de Utilidad de Discos (para eliminar archivos o agregar el archivo en el á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 comando, la rutina estándar del lector de tarjetas indicaba el fin 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 puede seleccionar un dispositivo de arranque desde la consola del sistema, un IBM 1130 solo se puede "arrancar" (IPL: carga inicial del programa) desde un dispositivo externo: un lector de tarjetas o un lector de cinta de papel. [21] [22]

El procedimiento de arranque lee una tarjeta del lector de tarjetas. La tarjeta de arranque contiene un código binario [23] para leer el contenido del sector cero de la unidad de disco, que a su vez maneja la interrupción de "operación completa" de la unidad de disco y realiza lecturas de disco adicionales 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 todavía está en la memoria y probablemente intacto, ya que la memoria central conserva su estado sin energía. Si el operador concluye que un programa de usuario se ha estancado, el Supervisor puede detectar una pulsación de tecla para abortar el programa y pasar a la siguiente tarjeta //. El Supervisor no está protegido contra modificaciones por un trabajo mal escrito, un caso que podría requerir que el operador reiniciara el 1130. Tampoco había protección contra escritura en el disco. Si se modifica la copia del software del sistema en el disco, se puede restaurar volviéndola a cargar desde aproximadamente 4000 tarjetas perforadas con código binario (aproximadamente dos cajas).

Organización de discos

Cartucho de disco IBM 2315
Cartucho de disco compatible 2315. (dimensiones 1 3/8 x 15 pulgadas)

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 en las superficies superior e inferior del 2315, o de un plato en el paquete de discos 1316 utilizado en el 2311. Cada cilindro de disco contiene ocho sectores. El monitor divide lógicamente un sector en dieciséis bloques de disco de 20 palabras (40 bytes) cada uno. El bloque de disco es la unidad de asignación de archivos.

El sistema distingue entre cartuchos de sistema , que contienen el monitor y las utilidades junto con los datos del usuario, y cartuchos que no son de sistema , que contienen únicamente los datos del usuario. Todos los cartuchos contienen información sobre el cilindro 0, incluida la tabla de cilindros defectuosos, la identificación del cartucho y un programa de arranque ( código de arranque ). En los cartuchos que no son de sistema, el arranque simplemente imprime un mensaje de error y espera si se intenta arrancar desde este cartucho. En un cartucho de 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 del tres al cinco contienen la Tabla de equivalencia de ubicación del sistema (SLET), un directorio de todas las fases de todos los programas de 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 vincular 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).

Después del área del sistema, el cartucho contiene hasta tres subdivisiones lógicas: el área fija , el área del usuario y el almacenamiento de trabajo . Tanto el área fija como el área del usuario almacenan programas y datos no temporales. El tamaño del área fija está definido por DUP y almacena datos y programas solo en formato de imagen de núcleo. No se vuelve a empaquetar cuando se eliminan archivos. El área del usuario almacena datos y programas en cualquier formato. El límite entre el área del usuario y el almacenamiento de trabajo "flota": el área del usuario se expande a medida que se agregan archivos y se contrae a medida que se vuelve a empaquetar para recuperar espacio de los archivos eliminados. Si es necesario modificar un archivo, el proceso habitual es usar // DUPcomandos para eliminarlo, lo que mueve los archivos posteriores para cerrar el espacio y luego dar ese nombre al archivo temporal como la nueva versión del archivo. Por lo tanto, los archivos que rara vez se modifican migran hacia el inicio del disco a medida que se agregan nuevos archivos o nuevas versiones, y los archivos modificados 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 está sujeto a una posible eliminación al final del trabajo 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 asignados previamente por un DUP.

Como el espacio en disco es limitado, los archivos fuente de los programas se guardan normalmente como barajas de cartas. Los usuarios que tengan mayores requisitos pueden tener un disco propio que contenga el sistema operativo, pero sólo sus archivos, y tendrían que reemplazar el disco del sistema "pool" por el suyo y reiniciar el sistema cuando se deban ejecutar sus programas. Un sistema con una segunda unidad de disco que se pueda dedicar por completo al código y los datos de un usuario proporciona cierto alivio.

Un paquete de discos o cartucho se inicializa para su uso en el 1130 mediante la rutina de inicialización de paquetes de discos (DIPR). Esta rutina escanea el disco y escribe direcciones de sectores en todos los cilindros, marca los sectores defectuosos y escribe una identificación de cartucho en el cilindro cero. DIPR es un programa independiente , que se carga desde tarjetas o cintas de papel y acepta la identificación del cartucho desde la consola del sistema. [19]

Programa de utilidad de discos (DUP)

El programa de utilidad de discos (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: [24]

Otros comandos, principalmente para uso del administrador del sistema, definen o expanden el Área Fija, eliminan el compilador y/o Ensamblador FORTRAN del sistema y restauran las direcciones de sector correctas al 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, el dispositivo de destino en las columnas 17 y 18. Estos códigos de dispositivo son:

Opcionalmente, se puede codificar un nombre de programa en las columnas 21 a 25, y un campo de conteo 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 invoca a Core Image Builder (el equivalente de DM2 al Linkage Editor de 360). Alternativamente, un programa puede pasar por este proceso cada vez que se lo va a ejecutar, y para los programas que se usan con poca frecuencia, esto es preferible para conservar espacio en el disco.

La siguiente tarjeta de control le indica a DUP que tome el contenido actual del almacenamiento de trabajo y lo mueva al área de usuario, llamándolo PROGM. DUP conoce el tamaño del archivo en el almacenamiento de trabajo. El tamaño del área de usuario aumentará según el tamaño del archivo y el tamaño del almacenamiento de trabajo disminuirá en consecuencia.

Ejemplo de tarjeta de control IBM 1130 DUP

Dispositivos periféricos

Impresora de línea IBM 1132
Lector/perforador de tarjetas IBM 1442
Plotter de tambor IBM 1627 .

La memoria de 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é. [7] : 497  Sus cartuchos de un solo plato IBM 2315 del tamaño de una caja de pizza contienen 512.000 palabras o 1.024.000 bytes (menos que los 1,44 MB de un disquete de disco duro de 3,5" o incluso los 1,2 MB de un disquete de disco duro de 5,25"). La velocidad de transferencia es de 35.000 palabras por segundo (70 KB/seg) utilizando el robo de ciclos . [25]

La máquina de escribir de consola IBM 1053 utiliza un mecanismo IBM Selectric , lo que significa que se puede cambiar el tipo de letra o el conjunto de caracteres reemplazando un elemento de tipo hueco del tamaño de una pelota de golf. Hay un elemento de tipo 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 declaración especial Fortran , por ejemplo.IF (SENSE SWITCH i)

Otros periféricos disponibles incluyen:

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 le da a la CPU una interrupción de nivel cero (prioridad más alta) después de que se haya leído cada columna individual de la tarjeta. Si la CPU no responde y almacena los doce bits de datos antes de que otra interrupción de este tipo indique que se ha leído la siguiente columna, se perderán los datos. De manera similar, la impresora 1132 depende del software del 1130. Cuando una letra como Aentra en posición, la CPU tiene que analizar una línea de texto almacenada en búfer y ensamblar una matriz de bits que indicará al 1132 qué posiciones de impresión deben imprimirse con A. Si la CPU no puede responder antes de que el Agire fuera de posición, la velocidad de impresión podría degradarse gravemente.

Otros periféricos aceptan texto en un código específico del dispositivo que resulte conveniente para su hardware. La CPU debe traducirlo hacia o desde el código EBCDIC 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 computacionales, de carga y de almacenamiento hacen referencia a un registro (normalmente ACC) y a una ubicación de memoria. La ubicación de memoria se identifica, en el formato corto, 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 se puede indexar y especificar la indirección. La memoria se direcciona en unidades de palabras.

El 1130 admite únicamente datos binarios de precisión simple y doble de forma nativa (16 y 32 bits) almacenados en formato big-endian . Se admiten datos decimales y de punto flotante de precisión estándar y extendida (32 y 48 bits) 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 anterior. Las transferencias pueden ser por omisión (que supone que la siguiente instrucción es corta) o por bifurcación. Se produce una omisión si alguna de las pruebas especificadas es verdadera. Se produce una bifurcación si ninguna de las pruebas especificadas es verdadera.

Registros principales:IAR = Registro de direcciones de instruccionesACC = AcumuladorEXT = Registro de extensiónXRx = 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 positivoE Acumulador parejoC Indicador de transporte apagadoO Indicador de desbordamiento apagadoConjunto de instrucciones 1130 Mnemónicos:LD = Cargar ACC STO = Almacenar ACCLDD = Carga doble (ACC y EXT) STD = Almacenar doble (ACC y EXT)LDX = Índice de carga STX = Índice de tiendaLDS = Estado de carga STS = Estado de la tiendaA = Agregar ACC AD = Agregar dobleS = Restar ACC SD = Restar DobleM = Multiplicar D = DividirAND = Booleano AND OR = Booleano ORXOR = OR exclusivo booleanoSLA = Desplazamiento a la izquierda ACC SLT = Desplazamiento a la izquierda ACC y EXTSLCA = Desplazamiento a la izquierda y conteo ACC SLC = Desplazamiento a la izquierda y conteo ACC y EXTSRA = Desplazamiento a la derecha ACC SRT = Desplazamiento a la derecha ACC y EXTRTE = Girar a la derecha ACC y EXTBSC = Ramificar o saltar según condición (depende del modificador) es decir, BP BNP BN BNN BZ BNZ BC BO BODBOSC - Ramificar o saltar condicionalmente (alternativa para BSC con el bit 9 establecido) Sale del nivel de interrupción actual.BSI = IAR de sucursal y tiendaMDX = Modificar índice y omitir (Incrementar IAR en uno si un signo cambia o se convierte en cero)WAIT = Detener NOP = Sin operación (alternativa para SLA 0)XIO = Ejecutar E/S1800 Mnemónicos de instrucción adicional:CMP = Comparar ACC DCM = Comparar dos veces ACC y EXTMnemónicos equivalentesEl ensamblador de discos introdujo varios mnemónicos equivalentes a los existentes.instrucciones destinadas a aclarar la intención del programador:SKP - Saltar bajo condición, equivalente a un BSC cortoB - Sucursal incondicional, equivalente a BSC sin condiciones especificadasBP - Acumulador de rama positivo, equivalente a BSC que especifica la condición '+'BNP - Acumulador de sucursal no positivoBN - Acumulador de rama negativoBNN - Acumulador de rama no negativoBZ - Acumulador de rama ceroBNZ - Acumulador de sucursales no ceroBC - Sucursal en CarryBO - Sucursal en caso de desbordamientoBOD - Acumulador de rama imparMDM - Modificar memoria, equivalente a MDX de formato largo no indexadoXCH - Acumulador de Cambio y Extensión, equivalente a RTE 16Formato de instrucción corta (una palabra de 16 bits): 1Bits 0...45678......5 OP---FTTDisp----OP es OperaciónF es formato 0 = CortoTT es etiquetaDisp es desplazamientoFormato de instrucción larga (dos palabras de 16 bits): 1 1Bits 0...456789.....50..............5 OP---FTTIMod----Dirección---------OP es OperaciónF es formato 1 = LargoTT es etiquetaI es bit indirectoMod es modificadorCálculo de dirección efectiva (EA): F = 0 | F = 1, yo = 0 | F = 1, yo = 1 Direccionamiento directo| Direccionamiento directo| Direccionamiento indirecto-------------------------------------------------- -----------------TT = 00 | EA = Displ + IAR | EA = Agregar | EA = C/AgregarTT = 01 | EA = Mostrar + XR1 | EA = Agregar + XR1 | EA = C/Agregar + XR1TT = 10 | EA = Desplegar + XR2 | EA = Sumar + XR2 | EA = C/Sumar + XR2TT = 11 | EA = Desplegar + XR3 | EA = Sumar + XR3 | EA = C/Sumar + 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 central 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 a donde fueron llamados en esa ocasión utilizando una bifurcación indirecta a través de esa primera palabra del subprograma. Colocar la dirección de retorno en línea era una técnica común de las computadoras en ese momento, como la Hewlett-Packard HP 2100 , [30] la DEC PDP-8 , [31] y la Scientific Data Systems SDS 920. [ 32]

Entonces, un subprograma llamado SIMPL podría organizarse de la siguiente manera (los comentarios siguen al operando de instrucción):

SIMPL: DC *-* Este es el punto de entrada, inicialmente lleno con un cero. (lo que sea que haga la rutina) BI SIMPL Retorno por sucursal Indirecta , a la dirección que se encuentra en la ubicación SIMPL. END SIMPL Indica al ensamblador que la fuente de la rutina SIMPLE está completa.

El subprograma se llamaría de la siguiente manera:

 BSI L SIMPL Llame a SIMPL. L (Largo) es necesario si SIMPL está a más de -128 o +127 palabras de distancia.

Normalmente se utilizaría el pseudo-código de operación CALL.

Como se muestra, el punto de entrada de un subprograma es DC *-*, una pseudo operació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 ensamblado y, por lo tanto, *-* da como resultado cero. Escribir esto en lugar de 0 proporciona una nota visual distintiva de que se colocará allí un valor significativo (la dirección de retorno) en el momento de la ejecución. El punto de entrada no necesita ser la primera palabra del subprograma. De hecho, la palabra anterior puede ser el comienzo de una instrucción de bifurcación directa de dos palabras cuyo campo de dirección está en SIMPL. Entonces, los retornos se pueden efectuar mediante bifurcaciones de una palabra allí:B SIMPL-1

Cuando se llama a SIMPL, la instrucción BSI reemplaza *-*con el valor actual de IAR, que es la dirección inmediatamente después de la instrucción BSI. Después de que SIMPL hace lo que está escrito para hacer, B I SIMPLno se bifurca a SIMPL, sino indirectamente a través de él, 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í mismo, o llamó a un subprograma que lo 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 que fue interrumpido.

El llamador de 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 pueden 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 de modo que su rama indirecta final retorna más allá de los parámetros.

Las funciones enteras de un solo entero esperan el parámetro en el acumulador y devuelven su 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 el valor inicial en el punto de entrada significa que si un error de programación lleva a que SIMPL regrese antes de la primera vez que se llamó, 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 rama a la ubicación 0. El 1130 quedaría atascado en la ubicación 0 y las luces IAR en la consola estarían completamente oscuras, lo que dejaría en claro que el programa había fallado.

Vinculación con rutinas de la biblioteca

En el caso de los subprogramas que se llamarán muchas veces (por ejemplo, los subprogramas para aritmética de punto flotante ), es importante reducir el tamaño de cada llamada a una palabra. Estas "rutinas de biblioteca" utilizan el protocolo LIBF. Es más complejo que el protocolo CALL descrito en la sección anterior, pero LIBF oculta la complejidad al escritor del programa en lenguaje ensamblador.

Las rutinas de la biblioteca se direccionan a través del registro de índice XR3. (Los subprogramas de Fortran utilizan el registro de índice XR1 para las direcciones de los parámetros y la dirección de retorno, pero el registro XR2 no se utiliza). 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 utilizando la LIBFpseudooperación, que ensambla no una instrucción de bifurcación directa BSIa la rutina sino una instrucción de bifurcación 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 cuando ensambla el programa. Una entrada de vector de transferencia a una función de biblioteca denominada SIMPL tiene la siguiente forma:

 DC *-* Una palabra en la que BSI almacena la dirección de retorno. BL SIMPL Rama al inicio de la función de biblioteca.

La forma en que SIMPL sabía dónde estaba su dirección de retorno era que, si SIMPL se declaraba una rutina LIBF, el cargador de enlaces modificaría 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 (está en el vector de transferencia) sino con el código real, como sigue:

SIMPL STX 1 RCVR1+1 Guarde 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 apuntar al vector de transferencia.

La ubicación de la dirección del vector de transferencia de SIMPL en SIMPL+2 deja espacio para una instrucción de una palabra para guardar el registro de índice elegido, en este caso XR1. Luego, la instrucción LDX indirecta apunta a 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 BSI. SIMPL hace entonces lo que se le había escrito para hacer, obteniendo acceso 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 retorna 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 se encuentra 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 la BSI se ensamblaría con un de modo que XR3+disp = 2000. Al ejecutar la BSI, se almacena 101 en la ubicación 2000 y se salta a la ubicación 2001. En 2001 hay un salto largo de dos palabras al punto de entrada de SIMPL, que el cargador de enlaces 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 , y 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 que se muestra arriba, cuando el control llega a RETN, la instrucción existe B L 101, que retorna al llamador. (Si hay uno o más parámetros en línea en 101, SIMPL incrementaría XR1 para apuntar a 102 o más allá, y este sería el destino de la Binstrucción).

Variaciones

Si SIMPL tomó parámetros codificados en línea después de la instrucción BSI, SIMPL obtiene acceso a ellos con direccionamiento indexado de XR1. El primero se puede obtener con LD 1 0, el segundo con 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 niegue a restaurar el valor original de XR1 podría omitir los pasos anteriores y regresar con un simple salto de n parámetros en línea. Sin embargo, una rutina de este tipo no puede ser llamada por otras rutinas LIBF porque interrumpe el uso de XR1 por parte del llamador para acceder a sus propios parámetros y dirección de retorno.B 1 n

La complejidad de LIBF ahorra memoria para los subprogramas que se llaman con frecuencia.: [33] : 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 -128 a +127 palabras del código de operación de una palabra.

El registro XR3 debe apuntar a las entradas del vector de transferencia para las rutinas de la biblioteca en lugar de una tabla de despacho de solo sus direcciones, porque esto último requeriría que las rutinas LIBF se llamen con una instrucción BSI indirecta. Estas instrucciones tienen dos palabras de longitud, por lo que un diseño de este tipo anularía el ahorro de tamaño de código de LIBF. El límite de ocho bits para el campo disp del código de instrucción de una palabra limita el uso de 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 entremezclados. En la programación 1130 es habitual modificar los campos de dirección de las instrucciones y, de hecho, modificar instrucciones enteras.

Por el compilador de Fortran

El compilador Fortran produce código automodificable al generar código para cualquier subprograma (subrutina o función) que tenga parámetros. El compilador crea una tabla de cada ubicación donde el subprograma hace referencia a uno de sus parámetros y compila como primera instrucción en el cuerpo del subprograma una llamada a un subprograma llamado SUBIN que utiliza la tabla para modificar el campo de dirección de cada referencia a un parámetro para que sea la dirección real del parámetro durante la invocación actual. SUBIN realiza estos parches 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 SIMPLE DC X La dirección de X, en la que SIMPL va a operar

Dentro del subprograma, se puede 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ó el 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 se convierta en:

 LD LX Carga el valor de X en el acumulador

Las ventajas de SUBIN son las siguientes:

Las desventajas de SUBIN son el tiempo que requiere su ejecución y la memoria necesaria 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 los 511, la compilación fallará. En el caso de subprogramas con muchas referencias a un parámetro, el autor del subprograma podría copiar el parámetro en una variable local.

Por el usuario

En aquella época, la modificación de instrucciones completas era una técnica común. Por ejemplo, aunque el 1130 tiene una instrucción OR, la sintaxis de Fortran no ofrece ninguna forma de escribirla. Se puede definir una función entera IOR, lo que permite que la instrucción OR lógica forme parte de una expresión Fortran como:

 M = 3 * IOR ( I , J ) + 5   

El 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 DC JA: La dirección de J.

De hecho, la función IOR del ensamblador no calcula I ni J en absoluto. En cambio, reemplaza las cuatro palabras anteriores por las siguientes:

 LD LI Cargar acumulador con I (instrucción de dos palabras) OR LJ OR acumulador con J (instrucción de dos palabras)

Después de realizar esa transformación, no vuelve más allá del final del bloque de cuatro palabras (que acababa de modificar), sino que se bifurca a la dirección exacta desde la que se lo había llamado originalmente. La instrucción BSI ya no está allí; lo que sí hay ahora son las dos instrucciones que acaba de escribir. Combinan los dos números enteros con la instrucción OR en lenguaje de máquina y dejan 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 vuelve a ejecutar la línea Fortran ilustrada anteriormente, se ejecuta más rápido que la primera vez. Se podrían idear funciones similares para otras operaciones útiles.

Una función que se automodifica, como lo hace IOR, no se puede utilizar en un subprograma Fortran sobre ninguno de los parámetros de ese subprograma (aunque podría utilizarse para combinar variables locales) porque es incompatible con el subprograma SUBIN analizado anteriormente. La transformación de IOR de su secuencia de llamada de cuatro palabras, que se muestra arriba, mueve la ubicación de la dirección de la variable I. En llamadas posteriores al subprograma Fortran, la tabla de referencias a los parámetros estaría equivocada y SUBIN parchearía la palabra incorrecta, en este caso colocando la nueva dirección de I sobre el código de la operación OR.

Precisión extendida

1130 FORTRAN 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 un mantra de complemento a dos de 24 bits, mientras que la precisión extendida utiliza un mantra de complemento a dos de 32 bits . Este formato hace un uso completo de las operaciones de números enteros de 32 bits de la CPU. El formato extendido ocupa tres palabras de 16 bits, con los ocho bits de orden superior de la primera palabra sin usar. La característica en ambos formatos es un campo de 8 bits que contiene la potencia de dos sesgada por 128. Las operaciones aritméticas de punto flotante se realizan mediante software. [34]

La *EXTENDED PRECISIONtarjeta de opción del compilador le indica al compilador FORTRAN que utilice 40 bits en lugar de 32 bits para todos los datos de punto flotante, no hay ninguna disposición para mezclar formatos.

Programas Fortran de gran tamaño

Los datos que se van a manipular y las instrucciones que los manipulan deben residir juntos en la memoria central. La cantidad de memoria instalada (de 4.096 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 al llamar). Cada subprograma LOCAL es una superposición ; es parte del programa ejecutable residente en el disco, pero solo se carga en la memoria central (si no está ya allí) durante el tiempo en que se llama. Por lo tanto, por ejemplo, seis subprogramas LOCAL requerirían solo la misma cantidad de memoria central que el más grande, en lugar de la cantidad total para los seis. Sin embargo, ninguno de los seis puede invocar a otro, ya sea directamente o a través de subprogramas intermediarios.

Programas en fases

Un programa Fortran completo puede pasar el control a una fase posterior, saliendo al Supervisor con una instrucción para cargar la fase siguiente en la memoria central. Un programa grande puede dividirse en tres partes, compiladas por separado, llamadas PART1, PART2 y PART3. La ejecución se inicia en // XEQ PART1un punto adecuado, PART1 ejecutaría la instrucción Fortran CALL LINK(PART2)y así sucesivamente. El nombre del programa sucesor en CALL 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 en sí se escribió de esta manera, con cada fase de compilación lograda por un programa separado.

Almacenamiento de datos COMÚN

Los programas, como los de Fortran, residen en direcciones de memoria de núcleo bajo (justo encima del Supervisor). Fortran asigna espacio en las direcciones más altas para cualquier variable y matriz declarada COMÚN. Si una fase posterior del programa contiene una declaración COMÚN correspondiente, entonces la información en esta área común se puede compartir entre fases. Las fases podrían omitir la declaración COMÚN sin problema, siempre que esas fases no fueran tan grandes como para que su código de programa invadiera el área común. El almacenamiento COMÚN no solo comparte datos entre fases; las variables COMÚN de memoria inferior se pueden usar para pasar datos entre un programa principal y subprogramas dentro de una sola fase, aunque los datos se podrían perder 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.

Ejemplo de programa ensamblador

La siguiente lista muestra una baraja de cartas que compila y ejecuta un programa ensamblador que enumera una baraja de cartas en la impresora de línea.

// TRABAJO // ASM *LISTA * LCARD.ASM - ENUMERAR UNA BARAJA DE CARTAS EN UNA IMPRESORA DE LÍNEAS * * PROGRAM * NUEVA PAGINA EN IMPRESORA *LEER UNA TARJETA * CONVERTIR FORMATO * IMPRIMIR UNA LÍNEA EN LA IMPRESORA * IR A * INICIO LIBF PRNT1 IR A NUEVA PÁGINA EN 1132 IMPRESORA DC/3100 CANAL 1-PAGINA NUEVA * LECTURA DE TARJETA LIBF NEXTC 0 DESDE EL LECTOR DE TARJETAS 1442 CONTROL DC/1000 PARA LEER TIENDA DC CBUFF 80 COLUMNAS TARJETA CINP LIBF0 CC 0 B CINP LOOP HASTA QUE SE LEE LA TARJETA * TARJETA CONVERTIDORA LIBF ZIPCO A IMPRESORA DC/1100 DESEMPAQUETADO, EMBALADO BÚFER DE ENTRADA DC CBUFF+1 BÚFER DE SALIDA DC PBUFF+1 Cantidad de caracteres DC 80 Llame a HLEBC HOLLERITH para 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 DE DC PERR POUT LIBF PRNT1 COMPROBACIÓN DE IMPRESIÓN COMPLETA CC 0 B POUT LOOP HASTA COMPLETAR * B SIGUIENTE LEER SIGUIENTE TARJETA * * DATOS * CBUFF DC 80 80 COLUMNAS POR TARJETA BSS80 * PBUFF DC 40 40 PALABRAS 80 CARACTERES BSS 40 * PERRO DC 0 BI PERR ESTO VUELVE A LA * MANEJADOR DE ERRORES DE IMPRESORA * LO CUAL TERMINARÁ EL PROGRAMA * FIN INICIO PROGRAMA PUNTO DE ENTRADA // XEQ DATOS DE PRUEBA 1 HOLA MUNDO DATOS DE PRUEBA 2

En este trabajo, el ensamblador deja el resultado de su ensamblaje en el área temporal del disco del sistema y el comando XEQ ejecuta el contenido del área temporal. El aspecto extraño END STARTtiene dos significados: fin de la fuente del ensamblador y el nombre del punto de entrada de la rutina, que tiene la etiqueta START.

El código fuente del ensamblador comienza con la columna 21 de la tarjeta, no con la columna uno. En sistemas sin unidad de disco, el ensamblador perforaba el código al principio de la tarjeta que acababa de leer (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 manejar las ramificaciones hacia adelante y similares, el segundo paso del ensamblador implicaba literalmente un segundo paso de las tarjetas a través del lector/perforador. Si se necesitaban cambios en el código fuente, el programador duplicaba las tarjetas para obtener una baraja con las columnas 1 a 20 en blanco, lista para la siguiente ejecución a través del ensamblador.

Por convención, los buffers están precedidos por un recuento de palabras. DC(Definir constante) ensambla una palabra de recuento y el siguiente BSS(Bloque iniciado por símbolo) reserva la cantidad de palabras requerida para el buffer. El buffer de tarjeta requiere 80 palabras, una para cada columna de tarjeta. El controlador CARD0 lee cada columna de tarjeta literalmente, utilizando 12 de los 16 bits de la palabra del buffer, con un bit activado para cada orificio perforado en la fila correspondiente para esa columna. El patrón de perforaciones generalmente describe un carácter de texto utilizando el código Hollerith . El teclado de la consola también proporciona entrada al programa en el código Hollerith, el único caso de dos dispositivos que utilizan la misma codificación de caracteres.

La rutina de impresora, sin embargo, trabaja con texto en EBCDIC de 8 bits con dos caracteres por palabra, requiriendo un buffer 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 suministrada por IBM. La instrucción CALL proporciona la dirección de la tabla a ZIPCO y asegura que el cargador de enlace incluya la tabla en el programa, por lo que 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 de 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 buffer PBUFF, a la impresora a través del controlador PRNT1. Nuevamente, el programa se repite hasta que el controlador de impresora informa que se completó, luego el programa lee la siguiente tarjeta.

Este ejemplo no contiene ningún código para decidir cuándo detenerse. Un programa más completo comprobaría si hay tarjetas que comiencen con //, lo que indica el inicio del siguiente trabajo. Para detener el lector de tarjetas lo antes posible, un programa podría comprobar el código Hollerith de /antes incluso de convertir la tarjeta a EBCDIC.

E/S asincrónicay rendimiento

La llamada a CARD0 para leer una tarjeta inicia esa operación y regresa inmediatamente al llamador, que podría continuar con otra actividad. Sin embargo, el programa de ejemplo no intenta superponer la entrada y la salida mediante búferes a pesar de que tiene dos áreas de trabajo separadas; simplemente vuelve a CIMP para realizar una nueva prueba. Después de que CARD0 haya detectado la interrupción de operación completa del lector de tarjetas, regresa una palabra más adelante, saltándose así el salto de regreso a CIMP y abandonando el bucle.

Las rutinas de ejemplo no hacen funcionar los dispositivos de E/S a máxima velocidad. Cabe destacar que el lector de tarjetas, sólo unos pocos milisegundos después de informar que ha terminado de leer una tarjeta, comenzará su secuencia de parada, tras lo cual tendrá que esperar un nuevo comando de lectura para iniciar otro ciclo de lectura. El lector IBM 1442 podía leer 400 tarjetas por minuto a máxima velocidad, pero un pequeño titubeo en los comandos de lectura reduciría a la mitad su rendimiento o incluso más. Un programa Fortran no podía completar ni siquiera el procesamiento de entrada más simple a tiempo, y por lo tanto 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 a través de grandes plataformas de datos, pero la memoria para el programa más complejo y para los búferes a menudo era escasa.

Incluso con ensamblador y doble buffer, un programa para listar una baraja de cartas del lector IBM 2501 (1.000 cartas/minuto) en la impresora de línea no podía mantener el ritmo, ya que la traducción de los patrones de agujeros de las cartas a EBCDIC para la impresora, como lo hacía EBPRT, era demasiado lenta; en su lugar, se necesitaban los más complejos ZIPCO y HLEBC, como en el ejemplo.

Ejemplo de sesión APL\1130

La siguiente imagen muestra una sesión APL \1130 simple . Esta sesión se realizó a través del 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 un cierre de sesión.

Sistemas en competencia

En el mismo año de la introducción del 1130, Digital Equipment Corporation presentó el PDP-8 de 12 bits, más pequeño, más barato y de mejores ventas , reconocido como el primer miniordenador exitoso.

Influencia del 1130

... Golpeé las puertas de la oficina local de ventas de IBM hasta que un vendedor se apiadó de mí. Después de charlar un rato, me entregó un manual de Fortran. Estoy seguro de que me lo dio pensando: "Nunca más volveré a saber de este chico". Regresé la semana siguiente y le dije: "Esto es realmente genial. Lo he leído todo y he escrito un pequeño programa. ¿Dónde puedo encontrar un ordenador?". El tipo, para mi deleite, me consiguió tiempo para programar en un IBM 1130 los fines de semana y a altas horas de la noche. Esa fue mi primera experiencia en programación y debo agradecer a ese vendedor anónimo de IBM por haber lanzado mi carrera. Gracias, IBM.

El sistema era un ordenador IBM 1130, una máquina del tamaño de un escritorio con 8 KB de memoria principal, una unidad de disco de 512 KB, un lector de cinta de papel Teletype CX y perforador de cinta de papel BRPE, y una fotocomposita Photon 713. La tarea fue mi primera experiencia en la gestión de una base de datos de documentos legibles por máquina: aprendí a enrollar la cinta de papel perforada con cuidado para poder guardarla ordenadamente en papeleras cilíndricas.
Mientras tanto, aunque yo no lo sabía, se estaban plantando las raíces del marcado generalizado. Históricamente, los manuscritos electrónicos contenían códigos de control o macros que hacían que el documento se formateara de una manera particular ("codificación específica"). En contraste, la codificación genérica, que comenzó a fines de la década de 1960, utiliza etiquetas descriptivas (por ejemplo, "encabezado", en lugar de "formato-17").

Años 1130 en la actualidad

De un estimado de 10.000 sistemas producidos, se sabe que en 2024 existirán los siguientes:

Libros apócrifos

Las especulaciones sobre por qué al producto se le dio el número 1130 se centraron en las siguientes posibilidades:

Otros han especulado que la existencia del IBM 1130 explica por qué nunca apareció ninguna computadora designada "11/30" en la familia de máquinas PDP-11 . [54]

Véase también

Notas

  1. ^ para el cual había un compilador de IBM
  2. ^ SL/1: existen referencias a Lenguaje del estudiante/Uno, Lenguaje del estudiante/1 y Subconjunto Lenguaje/1
  3. ^ un producto de programa de IBM
  4. ^ Modelo 1 a 80 líneas/minuto, Modelo 2 a 40 LPM
  5. ^ Elección de 340 líneas/minuto Modelo 6, 600 LPM Modelo 7

Referencias

  1. ^ abc «Galería de sistemas grandes: IBM 1130». Museo Nacional de Computación. Archivado desde el original el 11 de febrero de 2020. Consultado el 11 de febrero de 2020 .
  2. ^ ab Manual de instalación de IBM 1130, IBM Form GA26-5914, junio de 1966, BitSavers
  3. ^ ab Francis, CG (11 de febrero de 1965). "IBM presenta una pequeña y potente computadora". Director de Información (Nota de prensa). White Plains, Nueva York : International Business Machines (IBM). Archivado desde el original el 5 de julio de 2019.
  4. ^ Utley, Brian (enero de 2005). "Orador invitado: Brian Utley" (MP3) (Entrevista) . Consultado el 2 de enero de 2012 .
  5. ^ 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 IBM 1130". www.bitsavers.org . fe/GA26-5914-8_1130_Installation_Manual_Physical_Planning_Dec71.pdf, págs. 10-11.
  6. ^ "Sistema de control y adquisición de datos IBM 1800". Archivos de IBM . 23 de enero de 2003 . Consultado el 20 de agosto de 2021 .
  7. ^ ab Emerson W. Pugh; Lyle R. Johnson; John H. Palmer (1991). Sistemas IBM 360 y primeros 370. MIT Press. ISBN 978-0-262-16123-7.
  8. ^ "Nueva minicomputadora Xerox". The New York Times . 29 de enero de 1973.
  9. ^ "Xerox 530 admite COBOL". ComputerWorld . 26 de diciembre de 1973.
  10. ^ "Ranking Xerox 530 Computer" (PDF) . computerhistory.org . Consultado el 23 de septiembre de 2014 .
  11. ^ "Los pedidos de Xerox 530 son "alentadores"".
  12. ^ Larry Breed (agosto de 2006). "Cómo llegamos a APL\1130". Vector (British APL Association) . 22 (3). ISSN  0955-1433. Archivado desde el original el 2008-05-12 . Consultado el 2007-03-11 .
  13. ^ Hedrick, GE; Robertson, Alan, "El compilador de subconjuntos ALGOL 68 del estado de Oklahoma". Conferencia internacional de 1975 sobre ALGOL 68. Stillwater, OK, 10-12 de junio de 1975.
  14. ^ Hedrick, GE, "Instrucción ALGOL68 en la Universidad Estatal de Oklahoma", Boletín ACM SIGCSE, número especial, octavo simposio técnico sobre educación en ciencias de la computación, página de inicio, volumen 9, número 3, agosto de 1977, ACM Nueva York, NY, EE. UU.
  15. ^ McJones, Paul, "Implementaciones y dialectos de Algol 68", Software Preservation Group , Museo de Historia de la Computación
  16. ^ IBM Corporation (1967). Manual del usuario del sistema estadístico 1130 (1130-CA-06X) (PDF) . Consultado el 8 de febrero de 2015 .
  17. ^ IBM Corporation (1968). Manual de lógica del programa de estación de trabajo de entrada de trabajos remotos IBM 1130 (PDF) . Consultado el 8 de febrero de 2015 .
  18. ^ IBM Corporation (1967). Sistema de composición tipográfica IBM 1130 (RPQ) (PDF) . Consultado el 8 de febrero de 2015 .
  19. ^ de IBM Corporation (1968). Manual de referencia del sistema de monitorización de discos IBM 1130 (PDF) . Consultado el 31 de agosto de 2021 .
  20. ^ IBM Corporation (mayo de 1972). IBM 1130 Disk Monitor System, versión 2, guía del programador y del operador (PDF) . Consultado el 6 de febrero de 2015 .
  21. ^ "IBM 1130" . Consultado el 21 de febrero de 2017 .
  22. ^ Cita: " Nuestra 1130 tiene una unidad de cartucho de disco 2315 de 1/2 millón de palabras en el lado derecho, detrás de la puerta. El lector de cinta de papel probablemente se utilizó principalmente para el arranque, en lugar del gran lector de tarjetas 1442 de 300 tarjetas por minuto " .
  23. ^ Características funcionales del IBM 1130 (PDF) . Biblioteca de referencia de sistemas IBM.La página 136 de las Características Funcionales, Figura 40, muestra cómo cada uno de los 12 agujeros de una tarjeta perforada llena los 16 bits de una palabra de memoria, al realizar una IPL (Carga Inicial del Programa), utilizando el "Modo de Carga Lectura".
  24. ^ "Programas de monitorización".
  25. ^ IBM Corporation. «Carpeta de datos sobre el sistema informático IBM 1130». Archivos de IBM . Consultado el 29 de abril de 2023 .
  26. ^ "Procedimientos operativos de IBM 1130" (PDF) . BitSavers . Biblioteca de referencia de sistemas IBM.
  27. ^ IBM 1130 Custom Feature Description – Attachment Channel RPQ Number 831552, Form 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 .
  28. ^ "Lector de páginas de marcas ópticas IBM 1231".
  29. ^ IBM Corporation. «Archivos IBM: Cronología del DPD (página 4)». Archivado desde el original el 23 de octubre de 2009. Consultado el 10 de agosto de 2011 .
  30. ^ Hewlett-Packard (diciembre de 1971). Manual de referencia de la computadora 2100A (PDF) . p. 18 . Consultado el 5 de agosto de 2016 .
  31. ^ "Manual del usuario de la PDP-8". Digital Equipment Corporation. Mayo de 1966. Consultado el 26 de abril de 2021 .
  32. ^ Scirntific Data Systems. Manual de referencia informática 920 (PDF) . pág. 17. Consultado el 5 de agosto de 2016 .
  33. ^ IBM Corporation (1968). Lenguaje ensamblador IBM 1130 (PDF) . Consultado el 6 de febrero de 2015 .
  34. ^ Biblioteca de subrutinas IBM 1130 9.ª ed. (PDF) . IBM Corporation. 1974. pág. 93.
  35. ^ Utley, Brian (30 de octubre de 2006). "Origen del nombre IBM 1130". Archivado desde el original el 1 de octubre de 2007. Consultado el 16 de enero de 2007 .
  36. ^ Booch, Grady (3 de abril de 2003). «Grady Booch pule su bola de cristal». IBM . Consultado el 16 de enero de 2007 .
  37. ^ 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 .
  38. ^ Steele, Guy L. Jr. "Confesiones de un hacker feliz". Archivado desde el original el 3 de febrero de 2007. Consultado el 16 de enero de 2006 .
  39. ^ Rather, Elizabeth; Colburn, Donald; Moore, Charles (marzo de 1993). "La evolución de Forth" . Consultado el 16 de enero de 2007 .
  40. ^ Bricklin, Dan (23 de agosto de 2002). "Recuerdos de una visita al Área de la Bahía y al Museo de Historia de la Computación" . Consultado el 16 de enero de 2007 .
  41. ^ Dixon, Bob (13 de agosto de 2005). "SETI en los años 70". The Big Ear . Consultado el 16 de enero de 2007 .
  42. ^ Goldfarb, Charles (1996). "Las raíces de SGML: un recuerdo personal". Archivado desde el original el 20 de diciembre de 2012. Consultado el 16 de enero de 2007 .
  43. ^ Kay, Alan C., "The Reactive Engine", tesis doctoral, Universidad de Utah, 1969. "Las rutinas de visualización de gráficos, el generador de caracteres y el editor funcionaron durante un año en una computadora IBM 1130 con una interfaz "casera". Desafortunadamente, la 1130 se esforzaba por actuar simplemente como un búfer de visualización glorificado, y no se implementó ninguna de las rutinas algorítmicas".
  44. ^ Koch, Warren (1972). "El uso de computadoras en la enseñanza en escuelas secundarias" (PDF) . Consultado el 6 de agosto de 2014 .
  45. ^ "Signetics 2650: Un IBM en un chip". CPU Shack. 16 de octubre de 2016. Consultado el 25 de octubre de 2016 .
  46. ^ "IBM 1130". ACONIT (en francés) . Consultado el 11 de julio de 2016 .
  47. ^ "Detalles del artefacto: modelo IBM 1130". Museo de Historia de la Computación . Consultado el 11 de julio de 2016 .
  48. ^ Wyss, Oscar. «Sitio web de Oscar E. Wyss». COSECANS (en alemán) . Consultado el 11 de julio de 2016 .
  49. ^ "Restauración del sistema IBM 1130 durante 2011". Museo Nacional de Computación . Archivado desde el original el 4 de abril de 2019. Consultado el 11 de julio de 2016 .
  50. ^ "IBM 1130". Computermuseum der Fakultät Informatik . Consultado el 11 de julio de 2016 .
  51. ^ Claunch, Carl. "Rescue 1130" . Consultado el 11 de julio de 2016 .
  52. ^ https://museum.syssrc.com/. {{cite web}}: Falta o está vacío |title=( ayuda )
  53. ^ https://vcfed.org/. {{cite web}}: Falta o está vacío |title=( ayuda )
  54. ^ PDP-11/20 y /15

Enlaces externos