IBM 1130 - IBM 1130

IBM 1130
IBM 1130 (1).jpg
Développeur IBM Boca Raton
Fabricant IBM
Taper mini-ordinateur
Date de sortie 1965 ( 1965 )
Prix ​​de lancement ~1 000 $ par mois de location, soit environ 8 200 $ en 2020
Abandonné début des années 1980
Unités expédiées 10 000 est.
Système opérateur Moniteur de disque 2 (DM2)
CPU 16 bits, adresse de mot, espace d'adressage de 15 bits
Mémoire Noyau magnétique
Espace de rangement Lecteur de disque IBM 2310
Stockage amovible Cartouche à disque unique IBM 2515
Affichage Traceur IBM 1627 Calcomp, IBM 2250 , en option
Saisir carte perforée , bande de papier , console
Connectivité Adaptateur de communication synchrone (SCA) IBM
Dimensions taille du bureau : largeur 58,5 pouces, profondeur 29 pouces, hauteur 44,125 pouces
Masse 660 livres
Cible marketing petites entreprises d'ingénierie, écoles
arrière
compatibilité
via Fortran
Prédécesseur IBM 1620 , IBM 650
Successeur Série IBM/1
Système IBM/7
Articles Liés Système de contrôle de processus IBM 1800
Site Internet ibm1130 .org

Le système informatique IBM 1130 , introduit en 1965, était l' ordinateur le moins cher d' IBM à l'époque. Une machine binaire 16 bits, elle a été commercialisée sur des marchés techniques sensibles aux prix et à forte intensité informatique, comme l'éducation et l'ingénierie, succédant à la décimale IBM 1620 dans ce segment de marché. Les installations typiques comprenaient un lecteur de disque de 1 mégaoctet qui stockait le système d'exploitation, les compilateurs et les programmes objets, avec la source du programme générée et conservée sur des cartes perforées . Fortran était le langage de programmation le plus couramment utilisé, mais plusieurs autres, dont APL , étaient disponibles.

Console IBM 1130

Le 1130 a également été utilisé comme frontal intelligent pour connecter une unité d'affichage graphique IBM 2250 , ou comme poste de travail de saisie de travaux à distance (RJE), connecté à un ordinateur central System/360 .

IBM 1130 avec périphériques, y compris le perforateur de lecteur de bande papier, le lecteur/perforateur de carte IBM 1442 (arrière) et le traceur IBM 1627 Calcomp.

La description

Une carte SLT double largeur d'un IBM 1130. Les boîtes métalliques carrées contiennent les circuits hybrides.

La production totale du 1130 a été estimée à 10 000. Le 1130 tient une place dans l'histoire de l'informatique car il (et ses clones non IBM) a donné à de nombreuses personnes leur première interaction directe avec un ordinateur. Son rapport qualité-prix était bon et il comprenait notamment un stockage sur disque amovible peu coûteux, avec un logiciel fiable et facile à utiliser qui pouvait être dans plusieurs langages de haut niveau. Le prix bas (à partir d'environ 32 000 $ ou 41 000 $ avec le lecteur de disque) et un ensemble de fonctionnalités bien équilibré ont permis le développement de programmes interactifs "open shop" .

L'IBM 1130 utilise le même boîtier électronique, appelé Solid Logic Technology (SLT), utilisé dans System/360 . Il a une architecture binaire 16 bits , tout comme les mini- ordinateurs ultérieurs comme le PDP-11 et le Data General Nova .

L' espace d'adressage est de 15 bits, limitant les 1130 à 32 768 mots de 16 bits ( 65 536 octets ) de la mémoire. Le 1130 utilise une mémoire à noyau magnétique , que le processeur adresse sur les limites des mots, en utilisant des modes d'adressage direct, indirect et indexé.

Des modèles

IBM a mis en œuvre cinq modèles de l'unité centrale de traitement 1131, le principal composant de traitement de l'IBM 1130. Les modèles 1 à 5 décrivent le temps de cycle de la mémoire centrale, ainsi que la capacité du modèle à disposer d'un stockage sur disque. Une lettre A à D ajoutée au numéro de modèle indique la quantité de mémoire centrale installée.

L'unité centrale de traitement IBM 1131 pèse environ 760/1050 lb (345/477 kg).

  Temps de cycle de mémoire
Mémoire centrale 3,6 s,
pas de disque interne
3,6 s,
plus les disques
2,2 s,
plus les disques
5,6 s
(3,6 s : voir ci-dessous),
disque unique
2,2 s,
pas de disque interne
4096 mots Modèle 1A Modèle 2A  ———  Modèle 4A  ——— 
8192 mots Modèle 1B Modèle 2B Modèle 3B Modèle 4B Modèle 5B
16 384 mots Modèle 1C Modèle 2C Modèle 3C  ———  Modèle 5C
32 768 mots Modèle 1D Modèle 2D Modèle 3D  ———  Modèle 5D

Le modèle 4 était un produit moins cher avec un temps de cycle de 5,6 s. Certains acheteurs d'améliorations de performances ont observé que l'ajustement sur le terrain pour obtenir l'amélioration était étonnamment trivial.

L' imprimante IBM 1132 s'appuie sur le processeur 1130 plutôt que sur la logique interne pour déterminer quand déclencher les roues d'impression lorsqu'elles tournent. Les imprimantes du modèle 4 fonctionnent plus lentement, mais le processeur plus lent ne peut toujours pas suivre. Le manuel du matériel révèle que lorsque le modèle 4 traitait les deux interruptions de niveau le plus élevé (l'interruption de colonne du lecteur de carte de niveau 0 ou l'interruption d'imprimante de niveau 1), il fonctionnait au temps de cycle le plus rapide de 3,6 µs. Certains utilisateurs du modèle 4 écriraient un faux pilote d'imprimante qui ne rejetait pas l'interruption de l'imprimante, afin de bénéficier de la vitesse plus élevée du processeur. Cependant, les interruptions de niveau inférieur sont désactivées pendant cet intervalle, même l'interruption de fin de carte (niveau 4) du lecteur de carte 1442.

Produits de suivi

L' IBM 1800 , annoncé en novembre 1964, est un prédécesseur de l'IBM 1130 pour les applications de contrôle de processus . Il utilise du matériel plutôt que de la mémoire centrale pour les trois registres d'index et comporte deux instructions supplémentaires (CMP et DCM) ainsi que des capacités d' interruption et d' E/S supplémentaires. C'est un successeur de l' IBM 1710 , comme l' IBM 1130 est un successeur de l' IBM 1620 .

L' IBM 1500 est un système éducatif multi-utilisateurs basé sur un IBM 1130 ou un IBM 1800. Il peut se connecter à jusqu'à 32 postes de travail pour étudiants, chacun avec une variété de capacités audiovisuelles .

En dehors de ceux-ci, IBM n'a produit aucun système successeur compatible au 1130. L' IBM System/7 est un système de contrôle de processus et en temps réel, et l' IBM Series/1 est un mini-ordinateur 16 bits à usage général, tous deux ayant des architectures différentes de le 1130, et les uns des autres.

Chronologie

  • 11 février 1965 - IBM présente le 1130 (modèles 1A, 1B, 2A et 2B). L'imprimante IBM 1132 est également annoncée, l'imprimante informatique en ligne la moins chère jamais annoncée par IBM à l'époque.
  • Quatrième trimestre 1965 – Début des premières livraisons clients à partir de l'usine de San Jose.
  • 31 mars 1966 – IBM lance le système éducatif IBM 1500.
  • Avril 1966 - Navires IBM 1800.
  • 9 août 1966 - IBM déploie l'adaptateur de communication synchrone 1130, qui permet au petit système 1130 d'être connecté par des lignes téléphoniques louées régulières et de fonctionner comme un terminal de communication pour tout modèle du système IBM/360.
  • 17 avril 1967 - Une extension à quatre voies du 1130 est annoncée (modèles 2C, 2D, 3B, 3C et 3D), impliquant :
    • Cinq fois plus de stockage sur disque et quatre fois plus de mémoire centrale ;
    • Une vitesse de traitement supplémentaire presque 40 % plus rapide qu'auparavant ;
    • Des équipements périphériques plus nombreux et plus rapides, dont un lecteur optique de marques ;
    • Un package de programmation commerciale amélioré.
  • Janvier 1968 – Début des premières livraisons des modèles 1130 2C, 2D, 3B, 3C et 3D.
  • Juillet 1968 – L' usine de Boca Raton commence à expédier le 1130.
  • 22 juillet 1971 – 1130 Les modèles 4A et 4B sont introduits à de nouveaux niveaux d'économie.
  • Septembre 1971 – Début des premières expéditions clients du modèle 1130 4.
  • 31 mai 1972 – Les modèles 1C, 1D, 5B, 5C et 5D sont annoncés.
  • 1973 - Le Xerox 530 est commercialisé comme successeur possible des clients IBM 1130. Les commandes de Xerox 530 ont été jugées « encourageantes » à partir de janvier 1974.

Logiciel

Pour maximiser la vitesse et économiser de l'espace, le système d'exploitation et les compilateurs sont entièrement écrits en langage assembleur et emploient des techniques qui sont rares aujourd'hui, notamment le mélange de code et de données ainsi que le code auto-modifiant .

Une grande partie de la programmation utilisateur se fait en Fortran . Le compilateur 1130 Fortran peut fonctionner sur une machine avec seulement 4 096 mots de base, bien que le programme compilé puisse ne pas tenir sur une telle machine. Dans ce compilateur multi-passes , chaque "phase" traite l'intégralité du programme source et fait un pas de plus vers le code machine. Par exemple, la première phase lit les instructions source en mémoire, supprime les lignes de commentaires, supprime les espaces sauf dans les littéraux de texte, concatène les lignes de continuation et identifie les étiquettes. Le compilateur est disponible dans une version résidente sur disque ainsi que sur une bande de papier perforée à 8 canaux ou des cartes perforées.

Le système d'exploitation le plus largement utilisé pour le 1130 est le Disk Monitor System Version 2 (DM2) introduit en 1967. DM2 est un système orienté lot à tâche unique. Il nécessite un système avec au moins 4 Ko de mémoire centrale et un lecteur de disque 2310 intégré pour la résidence du système. Le superviseur est minuscule par rapport aux normes modernes, contenant des détails système assortis tels que des routines d'interruption de premier niveau, appelées sous - routines de niveau d'interruption , ainsi que le pilote de disque et des routines pour charger l'interpréteur de commandes de contrôle de travail et le pilote de lecteur de carte. Les pilotes de périphérique pour les autres périphériques d'E/S requis par un travail sont intégrés dans le cadre du chargement de ce travail, ce qui peut également inclure le remplacement du pilote de disque de base par un pilote plus avancé. Lors de l'exécution d'un travail, seul un moniteur résident , appelé Skeleton Supervisor , réside en mémoire. Ce superviseur ne nécessite que 1020 octets, donc la première mémoire disponible d'une tâche commence par l'adresse /01FE (hexadécimal) ou le mot 510. Lorsque le travail se termine ou est abandonné, le superviseur charge le Monitor Control Record Analyzer ( MCRA ) pour lire le contrôle du travail pour le suivant. Pendant l'exécution du travail, le superviseur est inactif. Mis à part les pilotes de périphériques et le traitement des interruptions, tout le temps CPU est entièrement consacré aux activités du travail. D'autres programmes distribués dans le cadre du système d'exploitation sont un utilitaire de vidage de mémoire , DUMP , et le programme utilitaire de disque , DUP .

Un système de programmation carte/bande papier était disponible pour prendre en charge les systèmes sans disque.

Il existe une hiérarchie de pilotes de périphériques : ceux dont les noms se terminent par Z sont pour Fortran, comme DISKZ, tandis que les programmeurs assembleurs pourraient utiliser DISK0, et DISK1 était encore plus rapide pour lire plusieurs secteurs de disque. Mais DISKZ commence son adressage de secteur avec le premier secteur inutilisé disponible, tandis que les autres commencent avec le secteur zéro du disque, permettant à un programmeur peu familiarisé avec l'organisation du disque d'écraser par inadvertance le chargeur d'amorçage.

Les autres langages de programmation disponibles sur le 1130 incluent

Il existe même un compilateur ALGOL , écrit en français, pour que " Debut ...Fin;" prenne la place de " Begin ... End;". Tous ses messages sont en français, donc "Bonne compilation" est le but.

Eastern Michigan University a développé un compilateur Fortran IV pour le 1130, connu sous le nom de Fortran-EMU, comme alternative au compilateur Fortran IV (sous-ensemble) fourni par IBM. Il ajoute de nombreuses fonctionnalités Fortran Iv non prises en charge par le compilateur IBM, notamment le type de données LOGICAL, les noms de variables à six lettres et des diagnostics améliorés. Le compilateur Fortran-EMU a été distribué sous la forme d'un jeu de cartes perforées dans un format de fichier d'image disque avec toute la zone système restante supprimée, pour empêcher la copie d'autres modules qui résideraient normalement sur le même disque, tels que l'assembleur ou les compilateurs.

Oklahoma State University a développé un compilateur ALGOL 68 , écrit en ANSI Fortran 1966.

Un interprète FOCAL a été développé à l'Université du Michigan.

IBM a également distribué une grande bibliothèque de programmes, à la fois pris en charge par IBM (Types I et II) et non pris en charge (Types III et IV).

Le 1130 étant principalement destiné au marché scientifique, les programmes scientifiques et d'ingénierie prédominaient :

  • Paquet de sous-programme scientifique
  • Dessiner et tracer des sous-routines
  • Programme de flux de charge du système d'alimentation électrique
  • Régression multiple
  • Calcul des courants de défaut du système de distribution électrique
  • Analyse de tuyaux
  • Géométrie de coordonnées COGO
  • Modélisation du système continu (CSMP)
  • Programmation linéaire Optimisation mathématique Système de sous-programme
  • Solveur de système d'ingénierie structurelle (STRESS)
  • Système statistique

Le 1130 occupait également un créneau en tant que machine de traitement de données pour les petites organisations :

  • 1130 Sous-programme commercial
  • Système d'information sur les étudiants
  • CPM/PERT

Il existe également des logiciels spécialisés :

  • Saisie à distance des travaux (RJE)
  • Typographie

Contrôle des tâches

Le fonctionnement par lots du 1130 est dirigé par des enregistrements de contrôle dans le flux d'entrée principal (lecteur de carte ou de bande papier). Il existe deux types d'enregistrements de contrôle, les enregistrements de contrôle de surveillance et les enregistrements de contrôle de superviseur.

Surveiller les enregistrements de contrôle

Les enregistrements de contrôle de surveillance sont identifiés par //␢suivi d'un « code de pseudo-opération » dans les colonnes 4 à 7. "␢" représente un seul blanc.

1130 Enregistrements de contrôle de surveillance
Dossier de contrôle Fonction
//␢* comments Fournit un commentaire à imprimer dans la liste des tâches dans les colonnes 5 à 80
//␢JOB Identifie le début d'un travail
//␢ASM Invoque l'assembleur
//␢FOR Appelle le compilateur FORTRAN
//␢PAUS Arrête le système jusqu'à ce que la touche START de la console soit enfoncée
//␢TYP Bascule vers la console pour contrôler l'entrée et la sortie des enregistrements
//␢TEND Annule l'effet de //␢TYP
//␢DUP Invoque le programme Utilitaire de disque
//␢XEQ Lit et transfère le contrôle à un programme principal

L' JOBenregistrement peut avoir un "T" dans la colonne 8 pour indiquer que tous les fichiers ajoutés à la zone utilisateur par ce travail doivent être supprimés à la fin. Les colonnes 11 à 15 peuvent contenir une étiquette de cartouche ; le système vérifie que la cartouche spécifiée est montée avant de continuer.

L' XEQenregistrement peut contenir le nom du programme à exécuter dans les colonnes 8 à 12. S'il est omis, le programme actuellement en stockage de travail sera exécuté. Si la colonne 14 contient "L", et que le programme est au format Disk System (pas core-image), une carte de base sera imprimée par Core Load Builder. Si cette instruction est suivie de LOCAL NOCAL, ou d' FILESenregistrements de contrôle du superviseur, les colonnes 16 et 17 contiennent le nombre de ces enregistrements. La colonne 19 indiquait facultativement quelle routine de pilote de disque doit être liée. "0", "1" ou "N", demande DISK1, DISK2 ou DISKN, tout autre caractère, y compris le blanc, demande DISKZ, la routine de disque FORTRAN.

Dossiers de contrôle du superviseur

Les enregistrements de contrôle du superviseur commencent par un « * » dans la colonne 1, immédiatement suivi de la pseudo-opération de commande dans la colonne 2. Ils sont LOCAL, NOCAL, et FILESpour Core Load Builder. Les enregistrements de contrôle DUP ont un format similaire. Ces enregistrements contrôlent la liaison des programmes, soit pour l' // XEQinstruction , soit pour la *STORECIcommande DUP .

Dossiers de contrôle du superviseur
Dossier de contrôle La description
*LOCAL Fournit une liste de sous-programmes qui seront chargés en tant que superpositions au moment de l'exécution, plutôt que d'être inclus avec le programme principal
*NOCAL Fournit une liste de sous-programmes à lier au programme principal, même s'ils ne sont jamais appelés. Ce sont généralement soit des routines de débogage auxquelles l'opérateur peut accéder manuellement depuis la console, soit des routines d'interruption de service
*FILES Égalise les numéros d'identification de fichier de l' DEFINE FILEinstruction FORTRAN ou de l' FILEinstruction Assembler à des fichiers nommés sur le disque.

Mode opératoire

Carte perforée contenant un programme 1130 à chargement automatique qui copierait le jeu de cartes placé après lui dans la trémie d'entrée.

Les souvenirs durables de l'IBM 1130 peuvent avoir résulté de son besoin d'une intervention humaine continue. Il était généralement occupé à exécuter des "travaux" spécifiés par un jeu de cartes perforées . L'opérateur humain chargerait les travaux dans le lecteur de carte et les séparerait en travaux pour les renvoyer, peut-être avec la sortie imprimée, à l'expéditeur. L'opérateur devrait également surveiller le 1130 pour détecter un dysfonctionnement ou un travail bloqué et intervenir en appuyant sur la INT REQtouche du clavier pour passer au début du travail suivant.

Marquer le début d'un travail était une carte perforée qui commençait par // JOB. Toute carte qui commençait par //était une commande pour le superviseur et ne pouvait pas être utilisée comme programme ou données utilisateur. Autres commandes incluses // DUPpour exécuter le programme utilitaire de disque (pour supprimer des fichiers ou ajouter le fichier dans la zone temporaire à la collection de fichiers) et // XEQpour exécuter un programme nommé à partir du disque. Si un programme utilisateur essayait de lire une carte de commande, la routine de lecteur de carte standard signalerait la fin de l'entrée au programme et enregistrerait le contenu de cette carte pour le superviseur.

Charge initiale du programme (IPL)

Contrairement à l'IBM 360, où un périphérique de démarrage peut être sélectionné à partir de la console système, un IBM 1130 ne peut être « démarré » (IPL'd : Initial Program Load) qu'à partir d'un périphérique externe : un lecteur de carte ou un lecteur de bande papier.

La procédure d'amorçage lit une carte à partir du lecteur de carte. La carte de démarrage contient un code binaire pour lire le contenu du secteur zéro du lecteur de disque, qui à son tour gère l'interruption "opération terminée" du lecteur de disque et effectue des lectures de disque supplémentaires pour préparer le 1130 pour le premier travail de carte perforée. L'ensemble du processus prend environ une seconde.

Procédures de récupération

Lorsque l'IBM 1130 est démarré, le superviseur est toujours en mémoire et probablement intact, car la mémoire centrale conserve son état sans alimentation. Si l'opérateur conclut qu'un programme utilisateur est bloqué, le superviseur peut détecter une pression sur une touche pour annuler le programme et passer à la prochaine // carte. Le Superviseur n'est pas protégé contre la modification par un travail mal écrit, un cas qui pourrait nécessiter que l'opérateur redémarre le 1130. Il n'y avait pas non plus de protection contre l'écriture sur disque. Si la copie du logiciel système sur disque est modifiée, elle peut être restaurée en la rechargeant à partir d'environ 4000 cartes perforées codées binaires (environ deux cases).

Organisation du disque

Cartouche de disque IBM 2315
Cartouche de disque compatible 2315.(dimensions 1 3/8 x 15 pouces)

Le lecteur de disque IBM 2310 stocke des secteurs de 320 mots (640 octets) plus une adresse de secteur d'un mot. Un cylindre se compose de deux pistes sur les surfaces supérieure et inférieure du 2315, ou d'un plateau sur le pack de disques 1316 utilisé dans le 2311. Chaque cylindre de disque contient huit secteurs. Un secteur est logiquement divisé par le moniteur en seize blocs de disque de 20 mots (40 octets) chacun. Le bloc disque est l'unité d'allocation des fichiers.

Le système fait la distinction entre les cartouches système , qui contiennent le moniteur et les utilitaires ainsi que les données utilisateur, et les cartouches non système , qui contiennent uniquement des données utilisateur. Toutes les cartouches contiennent des informations sur le cylindre 0, y compris la table des cylindres défectueux, l'identifiant de la cartouche et un programme d' amorçage ( code d'amorçage ). Sur les cartouches non système, le bootstrap imprime simplement un message d'erreur et attend si une tentative est faite pour démarrer à partir de cette cartouche. Sur une cartouche système, il s'agit du programme de démarrage à froid , suivi d'une zone de communication et du moniteur résident dans les secteurs un et deux. Les secteurs trois à cinq contiennent la table d'équivalence d'emplacement du système (SLET)—un répertoire de toutes les phases de tous les programmes de surveillance. D'autres informations de contrôle remplissent la première piste.

La zone système est présente sur les cartouches système. Il contient le programme Disk Monitor et éventuellement le compilateur FORTRAN, l'assembleur et une mémoire tampon d'image principale utilisée pour lier les programmes transférables. Il contient également les répertoires de fichiers utilisateur— Table d'équivalence d'emplacement fixe (FLET) et Table d'équivalence d'emplacement (LET),

Après la zone système, la cartouche contient jusqu'à trois subdivisions logiques : la zone fixe , la zone utilisateur et la mémoire de travail . La zone fixe et la zone utilisateur stockent des programmes et des données non temporaires. La taille de la zone fixe est définie par le DUP et stocke les données et les programmes au format d'image de base uniquement. Il n'est pas reconditionné lorsque les fichiers sont supprimés. La zone utilisateur stocke les données et les programmes dans n'importe quel format. La limite entre la zone utilisateur et le stockage de travail « flotte » : la zone utilisateur s'étend au fur et à mesure que des fichiers sont ajoutés et se contracte au fur et à mesure qu'elle est reconditionnée pour récupérer de l'espace à partir des fichiers supprimés. Si un fichier doit être modifié, le processus habituel consiste à utiliser des // DUPcommandes pour le supprimer, ce qui déplace tous les fichiers suivants pour combler l'écart, puis donne ce nom au fichier temporaire en tant que nouvelle version du fichier. Les fichiers rarement modifiés migrent donc vers le début du disque au fur et à mesure que de nouveaux fichiers ou de nouvelles versions sont ajoutés, et les fichiers fréquemment modifiés sont stockés vers la fin du disque.

Le stockage de travail commence après le dernier fichier de la zone utilisateur et occupe tout l'espace restant sur la cartouche. Il peut contenir un fichier temporaire créé par le système ou l'utilisateur, tel que la sortie d'un compilateur ou d'un programme d'application. Ce fichier est sujet à une éventuelle suppression à la fin du travail en cours, sauf enregistrement dans la zone fixe ou la zone utilisateur.

Tous les fichiers disque sont des blocs de disque contigus, il n'y a donc pas de fragmentation . Un programme peut utiliser et modifier des fichiers nommés, mais ne peut pas les développer au-delà de leur taille créée. Un programme qui crée plus d'un fichier doit avoir tous sauf un pré-alloué par un DUP.

Avec un espace disque limité, les fichiers source du programme sont normalement conservés sous forme de jeux de cartes. Les utilisateurs ayant des besoins plus importants peuvent avoir leur propre disque contenant le système d'exploitation, mais uniquement leurs fichiers, et devraient remplacer le disque système "pool" par le leur et redémarrer le système lorsque leurs programmes doivent être exécutés. Un système avec un deuxième lecteur de disque qui peut être entièrement consacré au code et aux données d'un utilisateur apporte un certain soulagement.

Un module de disque ou une cartouche est initialisé pour être utilisé sur le 1130 par la routine d'initialisation du module de disque (DIPR). Cette routine analyse le disque et écrit les adresses de secteur sur tous les cylindres, signale les secteurs défectueux et écrit un identifiant de cartouche sur le cylindre zéro. DIPR est un programme autonome , qui est chargé à partir de cartes ou de bandes de papier et accepte l'ID de cartouche de la console système.

Programme utilitaire de disque (DUP)

Le programme utilitaire de disque (DUP) fournit des commandes pour transférer des programmes, des sous-programmes et des données. Elle est invoquée par la // DUPcarte de contrôle des travaux, suivie d'une ou plusieurs cartes de contrôle :

Commandes DUP courantes
Commander Fonction
*BOUTIQUE Stocker un programme au format Disk System
(objet déplaçable)
*MAGASIN Stocker un programme au format Core Image
(entièrement lié et déplacé)
*DONNÉES STOCKÉES Stocker un fichier de données sur le disque
*DONNÉES STOCKÉES Recharger un programme d'image de base vidé
* STOCKAGE Remplacer ou créer un fichier disque
*DÉCHARGER Vider le fichier de données du disque
*DUMPDATA Vider des secteurs arbitraires du disque
* GALETTE Imprimez la table d'équivalence d'emplacement (LET) du disque
et la table d'équivalence d'emplacement fixe (FLET) si une zone fixe existe
*EFFACER Supprimer un programme ou un fichier de données

D'autres commandes, principalement destinées à l'administrateur système, définissent ou étendent la zone fixe, suppriment le compilateur et/ou l'assembleur FORTRAN du système et restaurent les adresses de secteur correctes dans le stockage de travail si elles ont été modifiées.

Les opérandes doivent être placés dans des colonnes fixes. Le code d'appareil source se trouve dans les colonnes 13 et 14, l'appareil de destination dans les colonnes 17 et 18. Ces codes d'appareil sont :

  • UA – Espace utilisateur
  • FX – La zone fixe (pas d'« étendues » selon le 360 ; juste un espace contigu)
  • WS – Stockage de travail
  • CD - Carte perforée/Périphérique d'entrée principal (peut être PT : Bande de papier)
  • RP – Imprimeur

Facultativement, un nom de programme peut être codé dans les colonnes 21 à 25, et un champ de comptage dans 27 à 30. L'interprétation de ces champs dépend de la fonction DUP demandée.

Les programmes peuvent être convertis dans un format de chargement plus rapide avec la commande STORECI , qui appelle Core Image Builder (l'équivalent de DM2 de l'éditeur de liens de 360). Alternativement, un programme peut passer par ce processus chaque fois qu'il doit être exécuté, et pour les programmes rarement utilisés, cela est préférable afin de conserver l'espace disque.

La carte de contrôle suivante indique au DUP de prendre le contenu actuel de la mémoire de travail et de le déplacer vers la zone utilisateur en le nommant PROGZ. DUP connaît la taille du fichier dans le stockage de travail. La taille de la zone utilisateur sera augmentée de la taille du fichier et la taille du stockage de travail sera réduite en conséquence.

Exemple de carte de contrôle IBM 1130 DUP

Périphériques

Lecteur/perforateur de carte IBM 1442
Traceur à tambour IBM 1627 .

La mémoire du disque est utilisée pour stocker le système d'exploitation, le code objet et les données, mais le code source est conservé sur des cartes perforées.

Le 1130 de base était livré avec un lecteur de disque actionné par bobine mobile IBM 2310 , appelé "Ramkit", de la division des produits généraux d'IBM à San Jose. Leurs cartouches à plateau unique IBM 2315 de la taille d'une boîte à pizza contiennent 512 000 mots ou 1 024 000 octets (moins que 1,44 Mo pour une disquette HD 3,5" ou même 1,2 Mo pour la disquette HD 5,25" ).

La machine à écrire de la console IBM 1053 utilise un mécanisme IBM Selectric , ce qui signifie que l'on peut changer la police ou le jeu de caractères en remplaçant un élément de type creux de la taille d'une balle de golf. Un élément de type spécial est disponible pour APL , un puissant langage de programmation orienté tableau utilisant une notation symbolique spéciale. Une rangée de 16 interrupteurs à bascule sur la machine à écrire de la console peut être testée individuellement à partir de programmes, en utilisant par exemple l' instruction Fortran spéciale . IF (SENSE SWITCH i)

Autres périphériques disponibles inclus :

  • Imprimantes - les imprimantes de ligne IBM 1132 et IBM 1403
  • Carte perforée - le lecteur/perforateur de carte IBM 1442 et le lecteur de carte IBM 2501
  • Bande de papier - le perforateur de bande de papier IBM 1055, le lecteur de bande de papier IBM 1054 et le lecteur de bande de papier IBM 1134
  • Disque - le lecteur de disque IBM 2311
  • Bande magnétique – À partir de 1968, les lecteurs de stockage de données à bande magnétique IBM 2415 étaient disponibles sous forme de RPQ .
  • Graphiques - Unité d'affichage graphique IBM 2250 .
  • Traceur à crayons de couleurTraceur à tambour IBM 1627 .
  • Lecteur de marque optique - Lecteur de page de marque optique IBM 1231
  • Communications – Adaptateur de communication synchrone (SCA). L'IBM 1130 MTCA, pour Multiple Terminal Control Adapter , annoncé en 1970 permettait de connecter jusqu'à quatre terminaux 2741 à un IBM 1130, pour une utilisation avec APL.

Pour simplifier la conception des périphériques, ceux-ci s'appuient sur le processeur. Le lecteur de carte n'a pas de mémoire tampon, mais donne au CPU une interruption de niveau zéro (priorité la plus élevée) après que chaque colonne individuelle de la carte a été lue. Si la CPU ne répond pas et ne stocke pas les douze bits de données avant qu'une autre interruption de ce type n'indique que la colonne suivante a été lue, les données seront perdues. De même, l'imprimante 1132 s'appuie sur le logiciel du 1130. Lorsqu'une lettre telle que celle-ci Ase met en place, le processeur doit analyser une ligne de texte mise en mémoire tampon et assembler un tableau de bits qui indiquera au 1132 avec quelles positions d'impression doivent être imprimées. A. Si le CPU ne peut pas répondre avant que le ne Atourne hors de sa position, la vitesse d'impression pourrait être gravement dégradée.

D'autres périphériques acceptent du texte dans un code spécifique à l'appareil adapté à son matériel. Le CPU doit le traduire vers ou à partir du code EBCDIC dans lequel le CPU traite le texte.

Présentation du jeu d'instructions

Les instructions avaient des formats courts (un mot) et longs (deux mots). La plupart des instructions de calcul, de chargement et de stockage faisaient référence à un registre (généralement ACC) et à un emplacement mémoire. L'emplacement mémoire a été identifié, dans le format court, par un déplacement signé de 8 bits à partir de l'adresse courante ou de l'un des registres d'index ; ou au format long, par une adresse complète de 15 bits, qui pourrait être indexée et spécifier l'indirection. La mémoire a été adressée en unités de mots.

Le 1130 ne prenait en charge nativement que les données binaires simple précision et double précision (16 et 32 ​​bits) stockées au format big-endian . Les données à virgule flottante de précision standard et étendue (32 et 48 bits) et les données décimales étaient prises en charge par l'utilisation de sous-programmes.

Les transferts conditionnels étaient basés sur (a) le contenu actuel de l'accumulateur, ou (b) les indicateurs de retenue et de débordement définis par une opération précédente. Les transferts pouvaient se faire par saut (ce qui supposait que l'instruction suivante était courte) ou par branche. Un saut s'est produit si l'un des tests spécifiés était vrai. Un branchement s'est produit si aucun des tests spécifiés n'était vrai.

Main Registers:
IAR = Instruction Address Register
ACC = Accumulator
EXT = Extension Register
XRx = Index Registers: x = 1,2,3
      Implemented as memory words 1,2,3, not as hardware registers.

Condition tests:
Z  Accumulator zero
-  Accumulator negative
+  Accumulator positive
E  Accumulator even
C  Carry indicator off
O  Overflow indicator off

1130 Instruction Set Mnemonics:
LD   = Load ACC                   STO  = Store ACC
LDD  = Load Double (ACC & EXT)    STD  = Store Double (ACC & EXT)
LDX  = Load Index                 STX  = Store Index
LDS  = Load Status                STS  = Store Status
A    = Add ACC                    AD   = Add Double
S    = Subtract ACC               SD   = Subtract Double
M    = Multiply                   D    = Divide
AND  = Boolean AND                OR   = Boolean OR
XOR  = Boolean Exclusive OR
SLA  = Shift Left ACC             SLT  = Shift Left ACC & EXT
SLCA = Shift Left and Count ACC   SLC  = Shift Left and Count ACC & EXT
SRA  = Shift Right ACC            SRT  = Shift Right ACC & EXT
RTE  = Rotate Right ACC & EXT
BSC  = Branch or Skip on Condition (Modifier dependent)
       i.e. BP BNP BN BNN BZ BNZ BC BO BOD
BOSC - Branch Out or Skip Conditionally (alternate for BSC with bit 9 set)
       Exits current interrupt level.
BSI  = Branch and Store IAR
MDX  = Modify Index and Skip (Increment IAR one if a sign change or becomes zero)
WAIT = Halt                       NOP  = No Operation (alternate for SLA 0)
XIO  = Execute I/O

1800 Additional Instruction Mnemonics:
CMP  = Compare ACC                DCM  = Double Compare ACC & EXT

Equivalent Mnemonics
The disk assembler introduced several mnemonics equivalent to existing
instructions intended to make the programmer's intent clearer:
SKP - Skip on condition, equivalent to a short BSC
B   - Branch unconditionally, equivalent to BSC with no conditions specified
BP  - Branch Accumulator Positive, equivalent to BSC specifying '+' condition
BNP - Branch Accumulator not Positive
BN  - Branch Accumulator Negative
BNN - Branch Accumulator not Negative
BZ  - Branch Accumulator Zero
BNZ - Branch Accumulator not Zero
BC  - Branch on Carry
BO  - Branch on Overflow
BOD - Branch Accumulator Odd
MDM - Modify Memory, equivalent to unindexed long-format MDX
XCH - Exchange Accumulator and Extension, equivalent to RTE 16

Short instruction format (one 16 bit word):
                       1
Bits    0...45678......5
        OP---FTTDisp----

OP    is Operation
F     is format 0 = Short
TT    is Tag
Disp  is Displacement

Long instruction format (two 16 bit words):
                       1               1
Bits    0...456789.....50..............5
        OP---FTTIMod----Address---------

OP    is Operation
F     is format 1 = Long
TT    is Tag
I     is Indirect bit
Mod   is Modifier

Effective Address Calculation (EA):
          F = 0            | F = 1, I = 0     | F = 1, I = 1
          Direct Addressing| Direct Addressing| Indirect Addressing
-------------------------------------------------------------------
TT = 00 | EA = Displ + IAR | EA = Add         | EA = C/Add
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 = Contents of displacement field
     Add = Contents of address field of instruction
       C = Contents of location specified by Add or Add + XR
Mémoire réservée

Les adresses les plus basses de la mémoire centrale avaient des utilisations dictées soit par le matériel, soit par convention :

Adresse Usage
/0000 Par convention, contenait l'instruction B *-1, qui se ramifiait indéfiniment jusqu'à ce qu'un opérateur remarque que tous les voyants IAR de la console étaient éteints et vidait le travail, soit en appuyant sur Int Req, soit en redémarrant.
/0001 XR1. Les adresses mémoire des registres d'index permettaient des déplacements directs entre eux, comme avecLDX I1 2
/0002 XR2.
/0003 XR3.
/0008 L'adresse du gestionnaire pour l'interruption de niveau 0 (priorité la plus élevée) — interruption 1442 lecteur de carte/perforateur « colonne prête ».
/0009 L'adresse du gestionnaire de l'interruption de niveau 1 : imprimante 1132 et adaptateur de communication synchrone. Les gestionnaires pour cette interruption et les interruptions inférieures devraient tester un mot d'état pour déterminer quel périphérique a interrompu.
/000A=10 L'adresse du gestionnaire pour l'interruption de niveau 2 : stockage sur disque, canal d'accès au stockage.
/000B=11 L'adresse du gestionnaire de l'interruption de niveau 3 : traceur 1627, canal d'accès au stockage.
/000C=12 L'adresse du gestionnaire pour l'interruption de niveau 4 : 1134 lecteur de bande papier, 1055 perforatrice de bande papier, console, 1442 perforatrice de lecture de carte, 2501, lecteur de carte, 1403 imprimante, 1231 lecteur de marque optique, périphérique Storage Access Channel.
/000D=13 L'adresse du gestionnaire pour l'interruption de niveau 5 (priorité la plus basse) : commutateurs d'arrêt et d'interruption de la console, canal d'accès au stockage.
/0020=32 Premier mot du champ de numérisation pour l'imprimante 1132 (/0020–/0027).
/0026=38 Dernier mot complet du champ d'analyse.
/0027=39 A moitié utilisé : 120 colonnes = 120 bits = sept mots de 16 bits plus 8 bits.
/0038=56 SORTIE au superviseur/Retour au moniteur (CALL EXIT)

La programmation

Sous-programmes

Le 1130 n'a pas de support matériel pour une pile . La plupart des sous-programmes sont appelés avec l'instruction BSI (Branch and Store IAR). Cela dépose la valeur de IAR (l'adresse de retour) à l'adresse de destination et transfère le contrôle à destination+1. Les sous-programmes retournent là où ils ont été appelés à cette occasion en utilisant un branchement indirect à travers ce premier mot du sous-programme. Placer l'adresse de retour en ligne était une technique courante des ordinateurs à l'époque, tels que le Hewlett-Packard HP 2100 , le DEC PDP-8 et le Scientific Data Systems SDS 920 .

Ainsi, un sous-programme nommé SIMPL peut être organisé comme suit (les commentaires suivent l'opérande d'instruction) :

SIMPL: DC     *-*    This is the entry point, filled with a zero initially.
       (whatever the routine does)
       B    I SIMPL  Return by an Indirect branch, to the address found in location SIMPL.
       END    SIMPL  Instructs the assembler that the source for routine SIMPLE is complete.

Le sous-programme serait appelé comme suit :

       BSI  L SIMPL  Call SIMPL. L (Long) is needed if SIMPL is more than -128 or +127 words away.

La pseudo-opération CALL serait typiquement utilisée.

Comme indiqué, le point d'entrée d'un sous-programme est DC *-*, une pseudo-opération d'assembleur utilisée pour définir une constante (occupant un mot de stockage) avec la valeur spécifiée par l'expression. Le * représente l'adresse actuelle de l'assembly et donc *-* donne zéro. Écrire ceci plutôt que 0 fournit une note visuellement distinctive indiquant qu'une valeur significative (l'adresse de retour) y sera placée au moment de l'exécution. Le point d'entrée n'a pas besoin d'être le premier mot du sous-programme. En effet, le mot précédent peut être le début d'une instruction de branchement direct de deux mots dont le champ d'adresse est à SIMPL. Ensuite, les retours peuvent y être effectués par des branches d'un mot :B SIMPL-1

Lorsque SIMPL est appelé, l'instruction BSI est remplacée *-*par la valeur actuelle de IAR, qui est l'adresse juste après l'instruction BSI. Une fois que SIMPL a fait tout ce pour quoi il est écrit, il ne se B I SIMPLbranche pas sur SIMPL, mais indirectement à travers lui, continuant ainsi l'exécution avec l'instruction suivant l'instruction BSI qui a appelé SIMPL.

Sans dispositions supplémentaires pour protéger l'adresse de retour, la récursivité est impossible : si SIMPL s'appelle lui-même, ou a appelé un sous-programme qui l'a appelé, son adresse de retour d'origine est écrasée. La réentrée est problématique pour la même raison : une routine de service d'interruption doit s'abstenir d'appeler un sous-programme qui aurait pu être le code qui a été interrompu.

L'appelant de SIMPL peut lui passer des paramètres, qui peuvent être des valeurs ou des adresses de valeurs. Les paramètres peuvent être codés en ligne (suivant immédiatement l'instruction BSI) ou peuvent être placés dans les registres d'index XR1 et XR2. Si les paramètres sont placés en ligne, SIMPL modifie sa propre adresse de retour afin que sa dernière branche indirecte renvoie au-delà des paramètres.

Les fonctions entières d'un seul entier attendent le paramètre dans l'accumulateur et y renvoient leur résultat. Les fonctions à virgule flottante utilisent l'accumulateur à virgule flottante (une zone de deux mots réservée par la bibliothèque à virgule flottante, trois mots pour une précision étendue), et ainsi de suite.

La convention de coder 0 comme valeur initiale au point d'entrée signifie que si une erreur de programmation entraîne le retour de SIMPL avant la première fois qu'il a été appelé, l'exécution sauterait à l'emplacement mémoire 0. Comme mentionné ci - dessus , il est habituel d'avoir l'emplacement 0 contiendrait une branche vers l'emplacement 0. Le 1130 serait bloqué à l'emplacement 0 et les voyants IAR de la console seraient entièrement éteints, ce qui indiquerait clairement que le programme avait échoué.

Lien avec les routines de la bibliothèque

Pour les sous-programmes qui seraient appelés plusieurs fois (par exemple, les sous-programmes pour l'arithmétique à virgule flottante), il est important de réduire la taille de chaque appel à un mot. De telles « routines de bibliothèque » utilisent le protocole LIBF. Il est plus complexe que le protocole CALL décrit dans la section précédente, mais LIBF cache la complexité de l'auteur du programme en langage assembleur.

Les routines de bibliothèque sont adressées via le registre d'index XR3. (Les sous-programmes Fortran utilisent le registre d'index XR1 pour les adresses des paramètres et l'adresse de retour, mais le registre XR2 n'est pas utilisé.) XR3 pointe vers une séquence de vecteurs de transfert de trois mots tels que la première entrée est à -128 mots de la valeur de XR3. Le programmeur appelle la routine de la bibliothèque en utilisant la LIBFpseudo-opération, qui assemble non pas une BSIinstruction directe vers la routine mais une instruction de branchement indexée à un mot ( ) dont le déplacement (-128, -125, etc.) identifie le début du transfert de la routine vecteur. BSI 3 disp

Le vecteur de transfert est préparé par le chargeur de liaison lorsqu'il assemble le programme. Une entrée de vecteur de transfert vers une fonction de bibliothèque nommée SIMPL prend cette forme :

      DC       *-*            A word into which BSI stores the return address.
      B    L   SIMPL          Branch to the start of the library function.

La façon dont SIMPL savait où se trouvait son adresse de retour est que, si SIMPL était déclarée une routine LIBF, le chargeur de liaison modifierait le code de SIMPL, plaçant l'adresse de l'entrée du vecteur de transfert de SIMPL à SIMPL+2. Les routines LIBF, contrairement aux sous-programmes CALL, ne démarrent pas avec une directive DC pour contenir l'adresse de retour (elle se trouve dans le vecteur de transfert) mais avec le code réel, comme suit :

SIMPL STX   1  RCVR1+1        Save the caller's value of XR1 at a nearby location.
      LDX  I1  *-*            The linkage loader changes the address word to point to the transfer vector.

Placer l'adresse du vecteur de transfert de SIMPL à SIMPL+2 laisse place à une instruction d'un mot pour sauvegarder le registre d'index choisi, ici XR1. Ensuite, l'instruction LDX indirecte pointe XR1 non pas sur le vecteur de transfert, mais à travers lui vers l'adresse de retour, ou vers tout paramètre stocké en ligne après le BSI. SIMPL fait ensuite ce pour quoi il a été écrit, accédant à tous les paramètres en ligne via XR1 (auquel cas il doit incrémenter XR1 pour l'adresse de retour), et renvoie comme suit :

      STX   1  RETN+1         Store XR1 to prepare to use it as a return address.
RCVR1 LDX  L1  *-*            SIMPL's first instruction modified this address.  Now,
*                              restore the original value of XR1.
RETN  B    L   *-*            This instruction was modified two instructions ago; return.
Exemple

Supposons qu'un appel de style LIBF à SIMPL soit à l'adresse 100. Alors l'adresse de retour serait 101, car c'est une instruction à un mot. XR3 pointe dans le groupe des vecteurs de transfert. Si le vecteur de transfert pour SIMPL commençait à l'adresse 2000, alors le BSI serait assemblé avec un de sorte que XR3+disp = 2000. L'exécution du BSI mémorise 101 à l'emplacement 2000 et saute à l'emplacement 2001. À 2001 se trouve un saut long de deux mots au point d'entrée de SIMPL, que le chargeur de liaison aurait pu placer à l'adresse 300. BSI 3 dispdisp

Le saut en longueur transfère le contrôle à SIMPL. Après que l'instruction en 300 mémorise XR1, l'instruction en 301 est , le chargeur de liaison ayant placé 2000 à l'emplacement 302. Ceci ne charge pas 2000 dans XR1 ; c'est une instruction indirecte, et charge le contenu de 2000, qui est 101, l'adresse de retour pour cet appel à SIMPL. LDX I1 2000

Dans la séquence de retour illustrée ci-dessus, au moment où le contrôle atteint RETN, l'instruction y est B L 101, qui revient à l'appelant. (S'il y a un ou plusieurs paramètres en ligne à 101, SIMPL incrémenterait XR1 pour pointer sur 102 ou au-delà, et ce serait la destination de l' Binstruction.)

Variantes

Si SIMPL a pris des paramètres codés en ligne suivant l'instruction BSI, SIMPL y accède avec un adressage indexé hors XR1. Le premier peut être obtenu par LD 1 0, le second par LD 1 1, et ainsi de suite. Si le deuxième paramètre est l'adresse du paramètre réel, obtient alors sa valeur. Avant de revenir, SIMPL incrémente XR1 au-delà des n paramètres avec une instruction de manière à placer la bonne valeur à RETN+1. LD I1 1MDX 1 n

Une routine LIBF qui refusait de restaurer la valeur d'origine de XR1 pourrait omettre les étapes ci-dessus et revenir avec un simple saut de n paramètres en ligne. Cependant, une telle routine ne peut pas être appelée par d'autres routines LIBF car elle perturbe l'utilisation par l'appelant de XR1 pour accéder à ses propres paramètres et adresse de retour. B 1 n

La complexité de LIBF économise de la mémoire pour les sous-programmes fréquemment appelés. : La liaison LIBF nécessite un mot par invocation, plus trois mots pour l'entrée du vecteur de transfert et du code supplémentaire dans la routine elle-même, tandis que la liaison CALL nécessite deux mots par invocation car la plupart Les appels seront vers une adresse au-delà de la portée de -128 à +127 mots de l'opcode à un mot.

Le registre XR3 doit pointer sur les entrées du vecteur de transfert pour les routines de la bibliothèque plutôt qu'une table d'envoi de leurs seules adresses, car cette dernière nécessiterait que les routines LIBF soient appelées avec une instruction BSI indirecte. Ces instructions sont longues de deux mots, donc une telle conception annulerait les économies de taille de code de LIBF. La limite de huit bits pour le champ disp du code d'instruction à un mot limite l'utilisation des routines LIBF à pas plus de 85 entrées distinctes.

Modification des codes

Les sections précédentes montrent que le code et les données sont entremêlés. Il est courant dans la programmation 1130 de modifier les champs d'adresse des instructions et, en fait, de modifier des instructions entières.

Par le compilateur Fortran

Le compilateur Fortran produit du code auto-modifiable lors de la génération de code pour tous les sous-programmes (sous-routines ou fonctions) qui ont des paramètres. Le compilateur construit une table de chaque emplacement où le sous-programme fait référence à l'un de ses paramètres, et compile comme première instruction dans le corps du sous-programme un appel à un sous-programme appelé SUBIN qui utilise la table pour modifier le champ d'adresse de chaque référence à un paramètre comme étant l'adresse réelle du paramètre lors de l'appel en cours. SUBIN crée ces correctifs chaque fois que le sous-programme est appelé.

Lorsqu'un programme Fortran appelle un sous-programme, les adresses de tous les paramètres apparaissent en ligne après l'appel. Par exemple, l'instruction Fortran CALL SIMPL(X) peut être compilée en :

  BSI L  SIMPL
  DC     X      The address of X, on which SIMPL is to operate

Dans le sous-programme, les paramètres pouvaient être accessibles par adressage indexé indirect comme indiqué ci-dessus dans Variations , donc, étant donné que XR1 a été convenablement préparé, un paramètre entier pourrait être chargé dans l'accumulateur avec une instruction comme celle-ci :

  LD  I1 0      Load the value of the first parameter (offset 0) into the accumulator

Le compilateur a plutôt utilisé l'adressage direct. Lorsque SUBIN s'exécute, il obtient l'adresse de X et corrige le champ d'adresse de l'instruction pour qu'il devienne :

  LD  L  X      Load the value of X into the accumulator

Les avantages de SUBIN sont les suivants :

  • Pour obtenir l'adresse de l'opérande, une instruction à index indirect nécessite trois cycles mémoire (le registre d'index étant en mémoire) alors que l'instruction à accès direct n'en nécessite qu'un.
  • Si SIMPL devait passer l'un de ses paramètres à un sous-programme qui s'attend à recevoir l'adresse de son paramètre (y compris toutes les routines LIBF pour l'arithmétique à virgule flottante), SUBIN est nécessaire pour fournir l'adresse réelle du paramètre d'origine.

Les inconvénients de SUBIN sont le temps d'exécution et la mémoire nécessaire à la table de références. La taille de ce tableau est la somme de 5, du nombre de paramètres et du nombre de références ; si cette somme dépasse 511, la compilation échouera. Pour les sous-programmes avec de nombreuses références à un paramètre, l'auteur du sous-programme peut copier le paramètre dans une variable locale.

Par l'utilisateur

La modification d'instructions entières était une technique courante à l'époque. Par exemple, bien que le 1130 ait une instruction OU, la syntaxe de Fortran ne permet pas de l'écrire. Une fonction entière IOR peut être définie, permettant au OU logique de faire partie d'une expression Fortran telle que :

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

Le compilateur Fortran place les adresses de I et J en ligne et attend le résultat dans l'accumulateur. L'utilisation de IOR(I,J) dans une expression Fortran compile les quatre mots suivants :

  BSI  L IOR    Two-word jump to the start of the IOR function.
  DC     I      A one-word in-line parameter: The address of I.
  DC     J      A one-word in-line parameter: The address of J.

En fait, la fonction assembleur IOR ne calcule pas du tout I ou J. Au lieu de cela, il remplace les quatre mots ci-dessus par les suivants :

  LD   L I      Load accumulator with I (two-word instruction)
  OR   L J      OR accumulator with J   (two-word instruction)

Après avoir effectué cette transformation, il ne revient pas au-delà de la fin du bloc de quatre mots (qu'il venait de modifier). Au lieu de cela, il se branche à l'adresse exacte à partir de laquelle il avait été appelé à l'origine. L'instruction BSI n'est plus là ; ce qui est maintenant il y a les deux instructions qu'il vient d'écrire. Ils combinent les deux entiers avec l'instruction OU en langage machine et laissent le résultat dans l'accumulateur, selon les besoins.

L'appel à IOR et la transformation du bloc de quatre mots se produisent au maximum une fois par exécution de programme. Si la ligne Fortran illustrée ci-dessus est à nouveau exécutée, elle s'exécute plus rapidement que la première fois. Des fonctions similaires pourraient être conçues pour d'autres opérations utiles.

Une fonction qui s'auto-modifie, comme le fait IOR, ne peut pas être utilisée dans un sous-programme Fortran sur l'un des paramètres de ce sous-programme (bien qu'elle puisse être utilisée pour combiner des variables locales) car elle est incompatible avec le sous-programme SUBIN discuté ci-dessus. La transformation par IOR de sa séquence d'appel de quatre mots, illustrée ci-dessus, déplace l'emplacement de l'adresse de la variable I. Lors des appels ultérieurs au sous-programme Fortran, la table de références aux paramètres serait erronée et SUBIN corrigerait le mauvais mot, en ce cas en plaçant la nouvelle adresse de I sur le code d'opération OU.

Précision étendue

1130 FORTRAN propose deux formats à virgule flottante : un format 32 bits "précision standard" et un format 40 bits "précision étendue".

Format de précision standard contient 24 bits complément à deux de significand en précision étendue utilise 32 bits en complément à deux de significand . Ce format utilise pleinement les opérations d'entier 32 bits du processeur. Le format étendu occupe trois mots de 16 bits, les huit bits de poids fort du premier mot étant inutilisés. La caractéristique dans les deux formats est un champ de 8 bits contenant la puissance de deux biaisée de 128. Les opérations arithmétiques en virgule flottante sont effectuées par logiciel.

La *EXTENDED PRECISIONcarte d'options du compilateur indique au compilateur FORTRAN d'utiliser 40 bits au lieu de 32 bits pour toutes les données à virgule flottante, il n'y a aucune disposition pour mélanger les formats.

Grands programmes Fortran

Les données à manipuler et les instructions qui les manipulent doivent résider ensemble dans la mémoire centrale. La quantité de mémoire installée (de 4 096 à 32 768 mots) est une limitation clé. Fortran fournit plusieurs techniques pour écrire de gros programmes malgré cette limitation.

Sous-programmes LOCAUX

Fortran permet à tout sous-programme d'être désigné comme "LOCAL" (Load-on-Call). Chaque sous-programme LOCAL est un overlay ; il fait partie du programme exécutable résidant sur le disque mais n'est chargé dans la mémoire centrale (s'il n'y est pas déjà) pendant le temps où il est appelé. Ainsi, par exemple, six sous-programmes LOCAUX n'auraient besoin que d'autant de mémoire centrale que le plus grand, plutôt que la quantité totale pour les six. Cependant, aucun des six ne peut en invoquer un autre, soit directement, soit via des sous-programmes intermédiaires.

Programmes par phases

Un programme Fortran entier peut passer le contrôle à une phase ultérieure, sortant vers le superviseur avec une instruction pour charger la phase de suivi dans la mémoire centrale. Un grand programme peut être divisé en trois parties, compilées séparément, appelées PART1, PART2 et PART3. L'exécution est lancée par // XEQ PART1et à un moment approprié, PART1 exécutera l'instruction Fortran CALL LINK(PART2)et ainsi de suite. Le nom du programme successeur dans l'APPEL ne peut pas être variable, mais la logique du programme peut déterminer si le contrôle est transféré à une autre phase et quelle CALL LINKinstruction est exécutée. Comme mentionné ci - dessus , le compilateur Fortran lui-même a été écrit de cette façon, chaque phase de compilation étant réalisée par un programme distinct.

Stockage de données COMMUN

Les programmes, tels que les programmes Fortran, résident à des adresses de mémoire de base faibles (juste au-dessus du superviseur). Fortran alloue de l'espace aux adresses les plus élevées pour toutes les variables et les tableaux déclarés COMMON. Si une phase de suivi du programme contient une déclaration COMMUNE correspondante, les informations de cette zone commune peuvent être partagées entre les phases. Les phases pouvaient omettre la déclaration COMMON sans problème, à condition que ces phases ne soient pas si grandes que leur code de programme envahisse la zone commune. Le stockage COMMUN ne partage pas seulement les données entre les phases ; Les variables COMMUNES à mémoire inférieure peuvent être utilisées pour transmettre des données entre un programme principal et des sous-programmes au sein d'une même phase, bien que les données puissent être perdues lors du passage à la phase suivante.

Exemples de programmation

Les exemples peuvent être exécutés sur l'émulateur IBM 1130 disponible sur IBM 1130.org .

Exemple de deck de programme assembleur

La liste suivante montre un jeu de cartes qui compile et exécute un programme assembleur qui répertorie un jeu de cartes sur l'imprimante ligne.

 // JOB
 // ASM
 *LIST
                     * LCARD.ASM - LIST A DECK OF CARDS TO LINE PRINTER
                     *
                     * PROGRAM
                     *    NEW PAGE ON PRINTER
                     * A  READ A CARD
                     *    CONVERT FORMAT
                     *    PRINT A LINE ON PRINTER
                     *    GOTO A
                     *
                     START LIBF    PRNT1    GOTO NEW PAGE ON 1132
                           DC      /3100    PRINTER CHANNEL 1-NEW PAGE
                     *
                     NEXTC LIBF    CARD0    READ FROM 1442 CARD READER
                           DC      /1000    CONTROL TO READ
                           DC      CBUFF    STORE 80 COLUMNS
                     CINP  LIBF    CARD0
                           DC      0
                           B       CINP     LOOP UNTIL CARD IS READ
                     *
                           LIBF    ZIPCO    CONVERT CARD TO PRINTER
                           DC      /1100    UNPACKED IN, PACKED OUT
                           DC      CBUFF+1  INPUT BUFFER
                           DC      PBUFF+1  OUTPUT BUFFER
                           DC      80       CHARACTER COUNT
                           CALL    HLEBC    HOLLERITH TO EBCDIC
                     *
                           LIBF    PRNT1    PRINT 80 CHARACTERS
                           DC      /2000    CONTROL CODE TO PRINT
                           DC      PBUFF    PRINT BUFFER
                           DC      PERR     PRINT ERROR
                     POUT  LIBF    PRNT1    CHECK FOR PRINT COMPLETE
                           DC      0
                           B       POUT     LOOP UNTIL COMPLETE
                     *
                           B       NEXTC    READ NEXT CARD
                     *
                     * DATA
                     *
                     CBUFF DC      80       80 COLUMNS PER CARD
                           BSS     80
                     *
                     PBUFF DC      40       40 WORDS 80 CHARACTERS
                           BSS     40
                     *
                     PERR  DC      0
                           B    I  PERR     THIS RETURNS TO THE
                     *                       PRINTER ERROR HANDLER
                     *                       WHICH WILL TERMINATE THE PROGRAM
                     *
                           END     START    PROGRAM ENTRY POINT
 // XEQ
 TEST DATA 1
 HELLO WORLD
 TEST DATA 2

Dans ce travail, l'assembleur laisse le résultat de son assemblage dans la zone temporaire du disque système et la commande XEQ exécute le contenu de la zone temporaire. L'aspect étrange END STARTa deux significations : la fin de la source assembleur, et le nom du point d'entrée de la routine, qui a le label START.

La source de l'assembleur commence par la colonne 21 de la carte, pas la première colonne. Dans les systèmes sans lecteur de disque, l'assembleur poinçonnait le code au début de la carte qui venait d'être lue (le lecteur de carte était en fait un lecteur-poinçon, avec la station de poinçonnage après la station de lecture), puis lisait la carte suivante. Pour gérer les branches vers l'avant et autres, le deuxième passage de l'assembleur impliquait littéralement un deuxième passage des cartes à travers le lecteur/perforateur. Si des changements de source étaient nécessaires, le programmeur dupliquerait les cartes pour obtenir un jeu avec les colonnes 1 à 20 vierges prêt pour la prochaine exécution à travers l'assembleur.

Par convention, les buffers sont précédés d'un nombre de mots. La DC(définir la constante) assemble un mot de comptage et la suivante BSS(bloc démarré par le symbole) réserve le nombre de mots requis pour le tampon. Le tampon de carte nécessite 80 mots, un pour chaque colonne de carte. Pilote CARD0 lit chaque colonne de la carte littéralement, en utilisant 12 des 16 bits dans le mot de la mémoire tampon, avec un ensemble de bits de sur chaque trou découpé dans la ligne correspondant à cette colonne. Le modèle de poinçons décrit généralement un caractère de texte à l'aide du code Hollerith . Le clavier de la console donne également au programme la saisie du code Hollerith, le seul cas de deux appareils utilisant le même encodage de caractères.

La routine d'impression, cependant, fonctionne avec du texte en EBCDIC 8 bits avec deux caractères par mot, nécessitant une mémoire tampon de 40 mots. Le programme utilise la routine de bibliothèque ZIPCO pour effectuer la conversion. Malgré les apparences, l'instruction CALL HLEBCn'est pas exécutée car HLEBC n'est pas un sous-programme mais une table de conversion Hollerith-en-EBCDIC fournie par IBM. L'instruction CALL fournit l'adresse de la table à ZIPCO et garantit que le chargeur de liaison inclut la table dans le programme, c'est donc le cinquième paramètre de ZIPCO, bien qu'il occupe deux mots de stockage : le mot de code d'opération BSI pour inutilisé et donc généralement gaspillé, mais le deuxième mot de l'expansion de CALL HLEBCest l'adresse de la table HLEBC nécessaire à ZIPCO. Après la conversion, le programme envoie la sortie convertie, maintenant dans le tampon PBUFF, à l'imprimante via le pilote PRNT1. Encore une fois, le programme boucle jusqu'à ce que le pilote d'imprimante signale l'achèvement, puis le programme lit la carte suivante.

Cet exemple ne contient aucun code pour décider quand s'arrêter. Un programme plus complet vérifierait les cartes qui commencent par //, ce qui indique le début du travail suivant. Pour arrêter le lecteur de carte dès que possible, un programme pourrait vérifier le code Hollerith /avant même de convertir la carte en EBCDIC.

E/S asynchrones et performances

L'appel à CARD0 pour lire une carte initie cette opération et retourne immédiatement à l'appelant, qui pourrait poursuivre une autre activité. Cependant, l'exemple de programme n'essaie pas de chevaucher l'entrée et la sortie à l'aide de tampons même s'il possède deux zones de travail distinctes ; il revient simplement à CIMP pour tester à nouveau. Une fois que CARD0 a détecté l'interruption de fin d'opération du lecteur de carte, il renvoie un mot plus loin, sautant ainsi le retour à CIMP et sortant de la boucle.

Les exemples de routines n'exécutent pas les périphériques d'E/S à la vitesse maximale. Notamment, le lecteur de carte, quelques millisecondes seulement après avoir signalé la fin de la lecture d'une carte, commencera sa séquence d'arrêt, après quoi une nouvelle commande de lecture devra attendre pour initier un autre cycle de lecture. Le lecteur IBM 1442 pouvait lire 400 cartes/minute à pleine vitesse, mais juste un peu d'hésitation dans les commandes de lecture réduirait de moitié son débit ou pire. Un programme Fortran ne pouvait pas terminer le traitement d'entrée le plus simple à temps et ne pouvait donc pas lire les cartes à pleine vitesse. Une DOboucle Fortran commune pour lire les cartes a fait s'arrêter et démarrer le moteur si fréquemment qu'il a accéléré l'usure. Avec la mise en mémoire tampon, le contrôle du lecteur de carte pouvait chevaucher le traitement et le lecteur pouvait fonctionner à pleine vitesse sur de grands jeux de données, mais la mémoire pour le programme le plus complexe et pour les tampons était souvent limitée.

Même avec l'assembleur et la double mise en mémoire tampon, un programme pour répertorier un jeu de cartes du lecteur IBM 2501 (1 000 cartes/minute) sur l'imprimante en ligne n'a pas pu suivre, car la traduction des modèles de trous de carte en EBCDIC pour l'imprimante effectuée par EBPRT était trop lent ; les plus complexes ZIPCO et HLEBC étaient nécessaires à la place, comme dans l'exemple.

Exemple de session APL\1130

L'image suivante montre une session APL \ 1130 simple . Cette session a été réalisée via le simulateur 1130 disponible auprès d' IBM 1130.org La session ci-dessus montre une connexion, l'addition des entiers 1 à 100, la génération d'une table d'addition pour les entiers 1..5 et une signature.
apl \ 1130 apl \ 1130 exemple de session

Systèmes concurrents

La même année que l'introduction du 1130, Digital Equipment Corporation a introduit le PDP-8 12 bits plus petit, moins cher et mieux vendu , reconnu comme le premier mini-ordinateur à succès.

Influence du 1130

  • Brian Utley était le chef de projet des années 1130 lors de son développement et de son introduction. Brian a déclaré lors de la troisième soirée 11/30 qu'avant qu'IBM Marketing ne nomme le 1130, il était connu sous le nom de Small Engineering Computer System ou SECS. L'architecture initiale était de 18 bits mais a été changée en 16 bits en raison de l'influence du développement System/360 . Le dialogue complet de sa présentation de 2005 est disponible sur IBM1130.org .
  • Le célèbre concepteur de logiciels Grady Booch a eu sa première exposition à la programmation sur un IBM 1130 :

... J'ai martelé les portes du bureau de vente local d'IBM jusqu'à ce qu'un vendeur ait pitié de moi. Après avoir discuté un moment, il m'a tendu un Fortran [manuel]. Je suis sûr qu'il me l'a donné en pensant: "Je n'entendrai plus jamais parler de ce gamin." Je suis revenu la semaine suivante en disant : « C'est vraiment cool. J'ai tout lu et j'ai écrit un petit programme. Où puis-je trouver un ordinateur ? Le gars, à mon grand plaisir, m'a trouvé du temps de programmation sur un IBM 1130 le week-end et les heures de fin de soirée. C'était ma première expérience de programmation, et je dois remercier ce vendeur anonyme d'IBM pour avoir lancé ma carrière. Merci IBM.

  • Le gourou LISP Guy Steele a écrit un interprète LISP pour l'IBM 1130 quand il était au lycée ( Boston Latin School , qui avait un IBM 1130 pour les étudiants). Son code et sa documentation pour LISP 1.6, ainsi qu'un résumé des travaux en cours pour le faire fonctionner sous simulation, sont disponibles sur IBM1130.org .
  • Chuck Moore voulait appeler sa nouvelle langue « Fourth », mais le système d'exploitation IBM 1130 était limité aux noms à cinq caractères, il a donc fini par s'appeler FORTH .
  • Dan Bricklin , créateur du programme VisiCalc , a fait ses débuts dans la programmation lorsqu'il a appris et utilisé l'IBM 1130 dans le cadre du National Science Foundation Computer/Math Summer Project pour les lycéens, donné à l'Université de Pennsylvanie en 1966.
  • Un IBM 1130 avec 8 kilomots de base a été utilisé pour la première recherche à temps plein au monde sur la recherche d'intelligence extraterrestre à l'Observatoire radio de l'Ohio State University . Cet équipement a détecté le Wow! signaler .
  • Charles Goldfarb , le père de SGML , décrit un travail d'installation d'un système de composition basé sur un IBM 1130 qui « a finalement changé ma carrière », le poussant vers le balisage générique :

Le système était un ordinateur IBM 1130, une machine de la taille d'un bureau avec 8 Ko de mémoire principale, un lecteur de disque de 512 Ko, un lecteur de bande papier Teletype CX et un perforateur de bande papier BRPE, et une machine à composer photomécanique Photon 713. Cette mission était ma première expérience avec la gestion d'une base de données de documents lisible par machine : j'ai appris à rouler soigneusement le ruban de papier perforé afin qu'il puisse être rangé proprement dans des corbeilles à papier cylindriques.
En attendant, même si je ne le savais pas, les racines du balisage généralisé étaient en train d'être plantées. Historiquement, les manuscrits électroniques contenaient des codes de contrôle ou des macros qui provoquaient le formatage du document d'une manière particulière (« codage spécifique »). En revanche, le codage générique, qui a commencé à la fin des années 1960, utilise des balises descriptives (par exemple, "heading", plutôt que "format-17").

  • Alan Kay a utilisé l'IBM 1130 dans ses premiers travaux d'interface graphique pour son doctorat. thèse en 1969.
  • Hutchinson Central Technical High School ("Hutch Tech") à Buffalo, NY a utilisé l'IBM 1130 dans le premier programme d' études d' informatique de quatre ans du pays en 1969. Robert Santuci était le chef du programme d'informatique et a enseigné des cours de programmation et de logique inductive. .
  • Un ingénieur d'IBM a été embauché par Signetics et a intégré un certain nombre de fonctionnalités architecturales de l'IBM 1130 dans le processeur à puce unique Signetics 2650 .

1130 aujourd'hui

Sur environ 10 000 systèmes produits, les suivants sont connus pour exister à partir de 2021 :

Apocryphes

Les spéculations sur la raison pour laquelle le produit a reçu le numéro 1130 se sont concentrées sur les possibilités suivantes :

  • Que, puisque le 1130 était une petite machine scientifique, le nombre a été choisi en multipliant 360 (comme dans IBM 360 ) par π .
  • À 11 h 30, c'était l'heure à laquelle les planificateurs de produits se trouvaient dans une impasse concernant le nom du produit.
  • Que le 1130 était le 11ème Computer Design d'IBM, et qu'il avait 30 instructions.

D'autres ont émis l'hypothèse que l'existence de l'IBM 1130 explique pourquoi aucun ordinateur désigné "11/30" n'est jamais apparu dans la famille de machines PDP-11 .

Voir également

Remarques

Les références

Liens externes