IBM 1130 - IBM 1130

IBM 1130
IBM 1130 (1).jpg
Entwickler IBM Boca Raton
Hersteller IBM
Typ Minicomputer
Veröffentlichungsdatum 1965 ( 1965 )
Einführungspreis ~ 1.000 US-Dollar pro Monat Miete, das entspricht etwa 8.200 US-Dollar im Jahr 2020
Abgesetzt Anfang der 1980er Jahre
Versendete Einheiten 10.000 est.
Betriebssystem Festplattenmonitor 2 (DM2)
Zentralprozessor 16-Bit, wortadressiert, 15-Bit-Adressraum
Speicher magnetischer Kern
Lagerung IBM 2310 Plattenlaufwerk
Wechselspeicher IBM 2515 Einzelplattenkassette
Anzeige IBM 1627 Calcomp Plotter, IBM 2250 , optional
Eingang Lochkarte , Papierklebeband , Konsole
Konnektivität IBM Synchronous Communication Adapter (SCA)
Maße Schreibtischgröße: Breite 58,5 Zoll, Tiefe 29 Zoll, Höhe 44,125 Zoll
Masse 660 lb
Marketingziel kleine Ingenieurbüros, Schulen

Rückwärtskompatibilität
über Fortran
Vorgänger IBM 1620 , IBM 650
Nachfolger IBM-Serie/1
IBM-System/7
In Verbindung stehende Artikel Prozessleitsystem IBM 1800
Webseite ibm1130 .org

Das 1965 eingeführte IBM 1130 Computing System war zu dieser Zeit der günstigste Computer von IBM . Als binäre 16-Bit-Maschine wurde sie in preissensiblen, rechenintensiven technischen Märkten wie Bildung und Ingenieurwesen vermarktet und folgte in diesem Marktsegment der dezimalen IBM 1620 . Typische Installationen umfassten ein 1-Megabyte-Diskettenlaufwerk, das das Betriebssystem, Compiler und Objektprogramme speicherte, wobei die Programmquellen auf Lochkarten generiert und verwaltet wurden . Fortran war die am häufigsten verwendete Programmiersprache, aber mehrere andere, darunter APL , waren verfügbar.

IBM 1130-Konsole

Der 1130 wurde auch als intelligentes Frontend zum Anschluss einer IBM 2250 Graphics Display Unit oder als Remote Job Entry (RJE) Workstation verwendet, die an einen System/360- Mainframe angeschlossen war.

IBM 1130 mit Peripheriegeräten, einschließlich Lochstreifenleser, IBM 1442 Kartenleser/Locher (Rückseite) und IBM 1627 Calcomp Plotter.

Beschreibung

Eine SLT-Karte doppelter Breite von einem IBM 1130. Die quadratischen Metalldosen enthalten die Hybridschaltungen.

Die Gesamtproduktion des 1130 wurde auf 10.000 geschätzt. Der 1130 hat einen Platz in der Computergeschichte, weil er (und seine Nicht-IBM-Klone) vielen Menschen die erste direkte Interaktion mit einem Computer ermöglichten. Sein Preis-Leistungs - Verhältnis war gut und es besonders günstig, herausnehmbar enthielt Plattenspeicher , mit zuverlässiger, leicht zu bedienende Software , die in mehreren High-Level - Sprachen sein könnte. Der niedrige Preis (ab etwa 32.000 US-Dollar oder 41.000 US-Dollar mit Diskettenlaufwerk) und der ausgewogene Funktionsumfang ermöglichten eine interaktive „Open-Shop“ -Programmentwicklung .

Die IBM 1130 verwendet dieselbe Elektronikverpackung, die Solid Logic Technology (SLT) genannt wird und in System/360 verwendet wird . Es hat eine 16-Bit- Binärarchitektur, ebenso wie spätere Minicomputer wie der PDP-11 und Data General Nova .

Der Adressraum beträgt 15 Bit, wodurch die Speicherkapazität von 1130 auf 32.768 16-Bit- Wörter ( 65.536 Byte ) begrenzt wird. Der 1130 verwendet Magnetkernspeicher , den der Prozessor an Wortgrenzen adressiert, indem er direkte, indirekte und indizierte Adressierungsmodi verwendet.

Modelle

IBM implementierte fünf Modelle der 1131 Central Processing Unit, der primären Verarbeitungskomponente des IBM 1130. Die Modelle 1 bis 5 beschreiben die Kernspeicherzykluszeit sowie die Fähigkeit des Modells, Plattenspeicher zu haben. Ein an die Modellnummer angehängter Buchstabe A bis D gibt die Größe des installierten Kernspeichers an.

Die IBM 1131 Central Processing Unit wiegt etwa 760/1050 lb (345/477 kg).

  Speicherzykluszeit
Kernspeicher 3,6 μs,
keine interne Festplatte
3,6 μs,
plus Festplatten
2,2 μs,
plus Festplatten
5,6 μs
(3,6 μs: siehe unten),
Einzelscheibe
2,2 μs,
keine interne Festplatte
4096 Wörter Modell 1A Modell 2A  ———  Modell 4A  ——— 
8192 Wörter Modell 1B Modell 2B Modell 3B Modell 4B Modell 5B
16.384 Wörter Modell 1C Modell 2C Modell 3C  ———  Modell 5C
32.768 Wörter Modell 1D Modell 2D Modell 3D  ———  Modell 5D

Das Model 4 war ein preisgünstigeres Produkt mit einer Zykluszeit von 5,6 µs. Einige Käufer von Leistungssteigerungen stellten fest, dass die Feldanpassung zur Erzielung der Verbesserung überraschend trivial war.

Der IBM 1132- Drucker verlässt sich eher auf den 1130-Prozessor als auf die interne Logik, um zu bestimmen, wann die Druckräder beim Drehen ausgelöst werden sollen. Drucker für das Model 4 laufen zwar langsamer, aber der langsamere Prozessor kann damit immer noch nicht mithalten. Das Hardwarehandbuch offenbart, dass das Modell 4, wenn es die beiden Interrupts der höchsten Ebene bediente (das Kartenlese-Spalteninterrupt der Ebene 0 oder das Druckerinterrupt der Ebene 1), mit der schnelleren Zykluszeit von 3,6 μs lief. Einige Benutzer des Model 4 würden einen gefälschten Druckertreiber schreiben , der den Drucker-Interrupt nicht verwirft, um von der höheren Prozessorgeschwindigkeit zu profitieren. Während dieses Intervalls werden jedoch untergeordnete Interrupts deaktiviert, sogar der End-of-Card-Interrupt (Level 4) vom 1442-Kartenleser.

Folgeprodukte

Die im November 1964 angekündigte IBM 1800 ist ein Vorgänger der IBM 1130 für Prozesssteuerungsanwendungen . Es verwendet Hardware anstelle von Kernspeicher für die drei Indexregister und bietet zwei zusätzliche Befehle (CMP und DCM) sowie zusätzliche Interrupt- und I/O- Fähigkeiten. Es ist ein Nachfolger des IBM 1710 , wie auch der IBM 1130 ein Nachfolger des IBM 1620 ist .

Das IBM 1500 ist ein Mehrbenutzer-Lehrsystem, das entweder auf einem IBM 1130 oder einem IBM 1800 basiert. Es kann mit bis zu 32 Schülerarbeitsplätzen verbunden werden, die jeweils über eine Vielzahl von audiovisuellen Fähigkeiten verfügen.

Abgesehen davon produzierte IBM keine kompatiblen Nachfolgesysteme für den 1130. Das IBM System/7 ist ein Prozesssteuerungs- und Echtzeitsystem, und die IBM Series/1 ist ein universeller 16-Bit-Minicomputer, beide mit unterschiedlichen Architekturen von die 1130, und voneinander.

Chronologie

  • 11. Februar 1965 – IBM stellt den 1130 vor (Modelle 1A, 1B, 2A und 2B). Ebenfalls angekündigt ist der IBM 1132 Drucker, der günstigste Online-Computerdrucker, der zu dieser Zeit von IBM angekündigt wurde.
  • Viertes Quartal 1965 – Erste Kundenlieferungen beginnen im Werk San Jose.
  • 31. März 1966 – IBM führt das Bildungssystem IBM 1500 ein.
  • April 1966 – IBM 1800 Schiffe.
  • 9. August 1966 – IBM bringt den synchronen Kommunikationsadapter 1130 auf den Markt, der es dem kleinen 1130-System ermöglicht, über reguläre Miettelefonleitungen mit jedem Modell des IBM System/360 verbunden zu werden und als Kommunikationsterminal für dieses zu fungieren.
  • 17. April 1967 – Eine vierfache Erweiterung der 1130 wird angekündigt (Modelle 2C, 2D, 3B, 3C und 3D), die Folgendes umfasst:
    • Fünfmal so viel Festplattenspeicher und viermal so viel Kernspeicher;
    • Eine zusätzliche Verarbeitungsgeschwindigkeit von fast 40 Prozent schneller als bisher verfügbar;
    • Mehr und schnellere Peripheriegeräte, einschließlich eines optischen Markierungslesers;
    • Ein verbessertes kommerzielles Programmierpaket.
  • Januar 1968 – Erste Auslieferungen der 1130 Modelle 2C, 2D, 3B, 3C und 3D beginnen.
  • Juli 1968 – Das Werk Boca Raton beginnt mit der Auslieferung der 1130.
  • 22. Juli 1971 – 1130 Die Modelle 4A und 4B werden auf einem neuen Niveau der Wirtschaftlichkeit eingeführt.
  • September 1971 – Erste Kundenauslieferungen beginnen mit dem 1130 Model 4.
  • 31. Mai 1972 – Die Modelle 1C, 1D, 5B, 5C und 5D werden angekündigt.
  • 1973 - Der Xerox 530 wird als möglicher Nachfolger für IBM 1130-Kunden vermarktet. Bestellungen für den Xerox 530 wurden ab Januar 1974 als "ermutigend" eingestuft.

Software

Um die Geschwindigkeit zu maximieren und Platz zu sparen, sind das Betriebssystem und die Compiler vollständig in Assembler geschrieben und verwenden heute seltene Techniken, einschließlich der Vermischung von Code und Daten sowie selbstmodifizierendem Code .

Viele Benutzerprogrammierungen werden in Fortran durchgeführt . Der 1130 Fortran- Compiler kann auf einer Maschine mit nur 4.096 Wörtern Kern ausgeführt werden – obwohl das kompilierte Programm möglicherweise nicht auf eine solche Maschine passt. In diesem Multi-Pass-Compiler verarbeitet jede "Phase" das gesamte Quellprogramm und macht einen weiteren Schritt in Richtung Maschinencode. Zum Beispiel liest die erste Phase die Quellanweisungen in den Speicher, verwirft Kommentarzeilen, entfernt Leerzeichen außer in Textliteralen, verkettet Fortsetzungszeilen und identifiziert Labels. Der Compiler ist in einer plattenresidenten Version sowie auf 8-Kanal- Lochstreifen oder Lochkarten erhältlich.

Das am weitesten verbreitete Betriebssystem für den 1130 ist das 1967 eingeführte Disk Monitor System Version 2 (DM2). DM2 ist ein stapelorientiertes Single-Task - System. Es erfordert ein System mit mindestens 4 KB Kernspeicher und einem integrierten 2310-Festplattenlaufwerk für die Systemresidenz. Der Supervisor ist nach modernen Maßstäben winzig und enthält verschiedene Systemdetails wie Interrupt-Routinen der ersten Ebene, die als Interrupt-Level-Subroutinen bezeichnet werden , sowie den Festplattentreiber und Routinen zum Laden des Interpreters von Jobsteuerungsbefehlen und des Kartenlesertreibers. Gerätetreiber für andere E/A-Geräte, die von einem Job benötigt werden, werden als Teil des Ladens dieses Jobs integriert, was auch das Ersetzen des Basis-Festplattentreibers durch einen fortgeschritteneren Treiber umfassen kann. Während der Ausführung eines Jobs befindet sich nur ein residenter Monitor , der als Skeleton Supervisor bezeichnet wird , im Speicher. Dieser Supervisor benötigt nur 1020 Bytes, daher beginnt der erste verfügbare Speicher einer Task mit Adresse /01FE (hexadezimal) oder Wort 510. Wenn der Job endet oder abgebrochen wird, lädt der Supervisor den Monitor Control Record Analyzer ( MCRA ), um die Jobsteuerung für der nächste. Während der Job ausgeführt wird, ist der Supervisor inaktiv. Abgesehen von den Gerätetreibern und der Interrupt-Verarbeitung wird die gesamte CPU-Zeit vollständig den Aktivitäten des Jobs gewidmet. Andere Programme als Teil des Betriebssystems verteilt sind ein Core - Dump - Dienstprogramm, DUMP und das Disk Utility Programm , DUP .

Ein Karten-/Papierband-Programmiersystem war verfügbar, um Systeme ohne Platte zu unterstützen.

Es gibt eine Hierarchie von Gerätetreibern: diejenigen mit Namen, die auf Z enden, sind für Fortran, wie zB DISKZ, während Assembler-Programmierer DISK0 verwenden könnten und DISK1 beim Lesen mehrerer Festplattensektoren noch schneller war. DISKZ beginnt seine Sektoradressierung jedoch mit dem ersten verfügbaren ungenutzten Sektor, während die anderen mit Sektor Null der Platte beginnen, was es einem Programmierer ermöglicht, der mit der Plattenorganisation nicht vertraut ist, den Bootstrap-Loader versehentlich zu überschreiben.

Andere Programmiersprachen, die auf dem 1130 verfügbar sind, umfassen

Es gibt sogar einen ALGOL- Compiler, der auf Französisch geschrieben ist, sodass " Debut ...Fin;" an die Stelle von " Begin ... End;" treten kann . Alle seine Nachrichten sind auf Französisch, daher ist "Bonne Compilation" das Ziel.

Die Eastern Michigan University entwickelte einen Fortran IV-Compiler für den 1130, bekannt als Fortran-EMU, als Alternative zum Fortran IV-Compiler (Teilmenge) von IBM. Es fügt viele Fortran Iv-Funktionen hinzu, die vom IBM Compiler nicht unterstützt werden, einschließlich des Datentyps LOGICAL, aus sechs Buchstaben bestehenden Variablennamen und erweiterter Diagnose. Der Fortran-EMU-Compiler wurde als Lochkartenstapel in einem Disk-Image-Dateiformat verteilt, wobei der gesamte verbleibende Systembereich gelöscht wurde, um das Kopieren anderer Module zu verhindern, die sich normalerweise auf derselben Festplatte befinden würden, wie beispielsweise der Assembler oder Compiler.

Die Oklahoma State University entwickelte einen ALGOL 68- Compiler, geschrieben in ANSI Fortran 1966.

An der University of Michigan wurde ein FOCAL- Dolmetscher entwickelt.

IBM verteilte auch eine große Bibliothek von Programmen, sowohl von IBM unterstützte (Typ I und II) als auch nicht unterstützte (Typ III und IV).

Da die 1130 in erster Linie auf den wissenschaftlichen Markt ausgerichtet war, dominierten naturwissenschaftliche und ingenieurwissenschaftliche Studiengänge:

  • Wissenschaftliches Subroutinen-Paket
  • Zeichnen und Plotten von Unterprogrammen
  • Lastflussprogramm für das Stromnetz
  • Multiple Regression
  • Berechnung von Fehlerströmen in elektrischen Verteilungssystemen
  • Rohranalyse
  • COGO- Koordinatengeometrie
  • Kontinuierliche Systemmodellierung (CSMP)
  • Lineare Programmierung Mathematische Optimierung Unterprogrammsystem
  • Konstruktiver Systemlöser (STRESS)
  • Statistisches System

Auch als Datenverarbeitungsmaschine für kleinere Organisationen besetzte die 1130 eine Nische :

  • 1130 Kommerzielles Unterprogrammpaket
  • Studierendeninformationssystem
  • CPM/PERT

Es gibt auch spezielle Software:

  • Remote-Auftragseingabe (RJE)
  • Schriftsatz

Auftragskontrolle

Der Stapelbetrieb des 1130 wird durch Kontrollsätze im primären Eingabestrom (Karten- oder Papierstreifenleser) gesteuert. Es gibt zwei Arten von Kontrollaufzeichnungen, Überwachungskontrollaufzeichnungen und Supervisor-Kontrollaufzeichnungen.

Kontrollaufzeichnungen überwachen

Überwachungskontrolldatensätze sind gekennzeichnet durch //␢gefolgt von einem "Psuedo-Operations-Code" in den Spalten 4-7. "␢" steht für ein einzelnes Leerzeichen.

1130 Kontrollaufzeichnungen überwachen
Kontrolldatensatz Funktion
//␢* comments Bietet einen Kommentar zum Drucken in der Jobliste in den Spalten 5 bis 80
//␢JOB Identifiziert den Beginn eines Jobs
//␢ASM Ruft den Assembler auf
//␢FOR Ruft den FORTRAN-Compiler auf
//␢PAUS Stoppt das System, bis die START-Taste der Konsole gedrückt wird
//␢TYP Schaltet auf die Konsole für die Ein- und Ausgabe von Kontrollaufzeichnungen um
//␢TEND Hebt die Wirkung von auf //␢TYP
//␢DUP Ruft das Festplatten-Dienstprogramm auf
//␢XEQ Liest und übergibt die Kontrolle an ein Mainline-Programm

Der JOBDatensatz kann in Spalte 8 ein "T" enthalten, um anzuzeigen, dass alle Dateien, die durch diesen Job zum Benutzerbereich hinzugefügt wurden, am Ende gelöscht werden sollen. Die Spalten 11 bis 15 können ein Kartuschenetikett enthalten; Das System überprüft, ob die angegebene Kassette montiert ist, bevor es fortfährt.

Der XEQDatensatz kann den Namen des auszuführenden Programms in den Spalten 8 bis 12 enthalten. Wird dies weggelassen, wird das Programm ausgeführt, das sich derzeit im Arbeitsspeicher befindet. Wenn Spalte 14 "L" enthält und das Programm im Plattensystemformat (kein Kern-Image) vorliegt, wird eine Kern-Map vom Core Load Builder gedruckt. Wenn dieser Anweisung LOCAL NOCAL, oder FILESSupervisor Control Records folgt , enthalten die Spalten 16 und 17 die Anzahl dieser Datensätze. Spalte 19 gibt optional an, welche Plattentreiberroutine verknüpft werden soll. "0", "1" oder "N", fordert DISK1, DISK2 oder DISKN an, jedes andere Zeichen, einschließlich Leerzeichen, fordert DISKZ, die FORTRAN-Plattenroutine.

Supervisor-Kontrollaufzeichnungen

Supervisor Control-Datensätze beginnen mit einem "*" in Spalte 1, direkt gefolgt von dem Befehl Pseudo-Operation in Spalte 2. Sie sind LOCAL, NOCAL, und FILESfür den Core Load Builder. DUP-Kontrollsätze haben ein ähnliches Format. Diese Datensätze steuern die Programmverknüpfung, entweder für die // XEQAnweisung oder den DUP- *STORECIBefehl.

Supervisor-Kontrollaufzeichnungen
Kontrolldatensatz Beschreibung
*LOCAL Liefert eine Liste von Unterprogrammen, die zur Laufzeit als Overlays geladen werden und nicht im Hauptprogramm enthalten sind
*NOCAL Liefert eine Liste von Unterprogrammen, die mit dem Hauptprogramm verknüpft werden sollen, obwohl diese nie aufgerufen werden. Dies sind in der Regel entweder Debug-Routinen, zu denen der Bediener manuell von der Konsole aus verzweigen kann, oder Service-Unterbrechungsroutinen
*FILES Entspricht Datei-Identifikationsnummern aus der FORTRAN- DEFINE FILEAnweisung oder der Assembler- FILEAnweisung mit benannten Dateien auf dem Datenträger.

Gebrauchsprozedur

Gelochte Karte, die ein selbstladendes 1130-Programm enthält, das den Kartenstapel kopiert, der danach in den Eingabeschacht eingelegt wird.

Die bleibenden Erinnerungen an die IBM 1130 können sich aus der Notwendigkeit eines ständigen menschlichen Eingriffs ergeben haben. Es war normalerweise damit beschäftigt, "Jobs" auszuführen, die durch ein Lochkartenspiel festgelegt wurden . Die menschliche Bedienungsperson würde Jobs in den Kartenleser laden und sie wieder in Jobs aufteilen, um sie, vielleicht zusammen mit der gedruckten Ausgabe, an den Einreicher zurückzugeben. Der Bediener müsste auch den 1130 auf Anzeichen für einen fehlerhaften oder blockierten Job überwachen und durch Drücken der INT REQTaste auf der Tastatur eingreifen , um zum Start des nächsten Jobs vorzuspringen.

Den Beginn eines Jobs markierte eine Lochkarte, die mit begann // JOB. Jede Karte, die mit begann, //war ein Befehl an den Supervisor und konnte nicht als Benutzerprogramm oder Daten verwendet werden. Andere Befehle enthalten // DUPzum Ausführen des Festplatten-Dienstprogramms (zum Löschen von Dateien oder Hinzufügen der Datei im temporären Bereich zur Dateisammlung) und // XEQzum Ausführen eines benannten Programms von der Festplatte. Wenn ein Benutzerprogramm versuchte, eine Befehlskarte zu lesen, würde die Standard-Kartenleserroutine dem Programm das Ende der Eingabe signalisieren und den Inhalt dieser Karte für den Supervisor speichern.

Initiales Programmladen (IPL)

Im Gegensatz zur IBM 360, bei der ein Boot- Gerät über die Systemkonsole ausgewählt werden kann, kann eine IBM 1130 nur von einem externen Gerät "gebootet" (IPL'd: Initial Program Load) werden: einem Kartenleser oder einem Papierstreifenleser.

Die Bootstrap-Prozedur liest eine Karte aus dem Kartenleser. Die Bootkarte enthält Binärcode zum Lesen des Inhalts von Sektor Null des Plattenlaufwerks, das wiederum die Unterbrechung "Operation abgeschlossen" vom Plattenlaufwerk verarbeitet und zusätzliche Plattenlesevorgänge durchführt, um den 1130 für den ersten Lochkartenauftrag vorzubereiten. Der gesamte Vorgang dauert etwa eine Sekunde.

Wiederherstellungsverfahren

Wenn die IBM 1130 gestartet wird, befindet sich der Supervisor noch im Speicher und ist wahrscheinlich intakt, da der Kernspeicher seinen Zustand ohne Strom beibehält. Wenn der Bediener zu dem Schluss kommt, dass ein Benutzerprogramm blockiert ist, kann der Supervisor einen Tastendruck wahrnehmen, um das Programm abzubrechen und zur nächsten // Karte zu springen. Der Supervisor ist nicht gegen Änderungen durch einen schlecht geschriebenen Job geschützt, ein Fall, der einen Neustart des 1130 durch den Bediener erforderlich machen könnte. Es gab auch keinen Schutz gegen das Schreiben auf die Festplatte. Wird die Kopie der Systemsoftware auf Diskette verändert, kann sie durch Neuladen von ca. 4000 binär codierten Lochkarten (ca. zwei Kartons) wiederhergestellt werden.

Datenträgerorganisation

IBM 2315 Plattenkassette
2315 kompatible Festplattenkassette. (Abmessungen 1 3/8 x 15 Zoll)

Das Plattenlaufwerk IBM 2310 speichert Sektoren von 320 Wörtern (640 Bytes) plus einer Ein-Wort-Sektoradresse. Ein Zylinder besteht aus zwei Spuren auf der Ober- und Unterseite des 2315 oder aus einer Platte auf dem 1316-Plattenpaket, das im 2311 verwendet wird. Jeder Plattenzylinder enthält acht Sektoren. Ein Sektor wird vom Monitor logisch in sechzehn Plattenblöcke zu je 20 Wörtern (40 Byte) unterteilt. Der Plattenblock ist die Zuordnungseinheit für Dateien.

Das System unterscheidet zwischen Systemkassetten , die den Monitor und Dienstprogramme zusammen mit Benutzerdaten enthalten, und Nicht-Systemkassetten , die nur Benutzerdaten enthalten. Alle Kartuschen enthalten Informationen zu Zylinder 0, einschließlich der Tabelle der defekten Zylinder, der Kartuschen-ID und eines Bootstrap-Programms ( Bootstrap-Code ). Auf Nicht-System-Cartridges druckt der Bootstrap einfach eine Fehlermeldung und wartet, wenn versucht wird, von dieser Cartridge zu booten. Auf einer Systemkassette ist dies das Kaltstartprogramm , gefolgt von einem Kommunikationsbereich und dem residenten Monitor in den Sektoren eins und zwei. Die Sektoren drei bis fünf enthalten die System Location Equivalence Table (SLET) – ein Verzeichnis aller Phasen aller Überwachungsprogramme. Andere Steuerinformationen füllen den ersten Track aus.

Der Systembereich ist auf Systemkassetten vorhanden. Es enthält das Disk Monitor-Programm und optional den FORTRAN-Compiler, den Assembler und einen Kernabbildpuffer, der zum Verknüpfen verschiebbarer Programme verwendet wird. Es enthält auch die Benutzerdateiverzeichnisse – Fixed Location Equivalence Table (FLET) und Location Equivalence Table (LET).

Nach dem Systembereich enthält die Cartridge bis zu drei logische Unterteilungen: den festen Bereich , den Benutzerbereich und den Arbeitsspeicher . Sowohl der feste Bereich als auch der Benutzerbereich speichern nicht-temporäre Programme und Daten. Die feste Bereichsgröße wird durch DUP definiert und speichert Daten und Programme nur im Kernbildformat. Es wird nicht neu gepackt, wenn Dateien gelöscht werden. Der Benutzerbereich speichert Daten und Programme in beliebigen Formaten. Die Grenze zwischen dem Benutzerbereich und dem Arbeitsspeicher „schwebt“ – der Benutzerbereich dehnt sich aus, wenn Dateien hinzugefügt werden, und zieht sich zusammen, wenn er neu gepackt wird, um Speicherplatz von gelöschten Dateien zurückzugewinnen. Wenn eine Datei geändert werden muss, besteht der übliche Vorgang darin, // DUPBefehle zu verwenden, um sie zu löschen, wodurch alle nachfolgenden Dateien zurück verschoben werden, um die Lücke zu schließen, und diesen Namen dann der temporären Datei als neue Version der Datei zu geben. So wandern selten geänderte Dateien zum Anfang der Platte, wenn neue Dateien oder neue Versionen angehängt werden, und häufig geänderte Dateien werden gegen Ende der Platte gespeichert.

Der Arbeitsspeicher beginnt nach der letzten Datei im Benutzerbereich und belegt den gesamten verbleibenden Platz auf der Kassette. Sie kann eine vom System oder vom Benutzer erstellte temporäre Datei enthalten, beispielsweise die Ausgabe eines Compilers oder eines Anwendungsprogramms. Diese Datei kann am Ende des aktuellen Jobs möglicherweise gelöscht werden, es sei denn, sie wird im festen Bereich oder im Benutzerbereich gespeichert.

Alle Plattendateien sind zusammenhängende Plattenblöcke, daher gibt es keine Fragmentierung . Ein Programm kann benannte Dateien verwenden und ändern, aber nicht über ihre erstellte Größe hinaus erweitern. Bei einem Programm, das mehr als eine Datei erstellt, müssen alle bis auf eine von einem DUP vorbelegt sein.

Bei begrenztem Speicherplatz werden Programmquelldateien normalerweise als Kartenstapel aufbewahrt. Benutzer mit größeren Anforderungen haben möglicherweise eine eigene Festplatte, die das Betriebssystem enthält, aber nur ihre Dateien, und müssten die "Pool"-Systemplatte durch ihre ersetzen und das System neu starten, wenn ihre Programme ausgeführt werden sollen. Ein System mit einem zweiten Plattenlaufwerk, das vollständig dem Code und den Daten eines Benutzers gewidmet werden kann, bietet eine gewisse Erleichterung.

Ein Plattenpaket oder eine Kassette wird zur Verwendung auf dem 1130 durch die Plattenpaket- Initialisierungsroutine (DIPR) initialisiert . Diese Routine scannt die Platte und schreibt Sektoradressen auf alle Zylinder, kennzeichnet defekte Sektoren und schreibt eine Kassetten-ID auf Zylinder Null. DIPR ist ein eigenständiges Programm , das von Karten oder Papierstreifen geladen wird und die Kassetten-ID von der Systemkonsole akzeptiert.

Festplatten-Dienstprogramm (DUP)

Das Disk Utility Program (DUP) bietet Befehle zum Übertragen von Programmen, Unterprogrammen und Daten. Sie wird von der Job-Kontrollkarte aufgerufen // DUP, gefolgt von einer oder mehreren Kontrollkarten:

Gängige DUP-Befehle
Befehl Funktion
*GESCHÄFT Speichern Sie ein Programm im Disk System Format
(verschiebbares Objekt)
*STORECI Speichern Sie ein Programm im Core Image Format
(vollständig verknüpft und verschoben)
*DATEN SPEICHERN Speichern Sie eine Datendatei auf der Festplatte
*SPEICHERDATENCI Laden Sie ein gedumptes Core-Image-Programm neu
*STOREMOD Ersetzen oder erstellen Sie eine Datenträgerdatei
*ENTSORGEN Datendatei von der Festplatte ausgeben
*DUMPDATEN Beliebige Sektoren von der Festplatte ausgeben
*DUMPLET Drucken Sie die Disk Location Equivalence Table (LET)
und die Fixed Location Equivalence Table (FLET), wenn ein fester Bereich vorhanden ist
*LÖSCHEN Löschen eines Programms oder einer Datendatei

Andere Befehle, hauptsächlich zur Verwendung durch den Systemadministrator, definieren oder erweitern den festen Bereich, löschen den FORTRAN-Compiler und/oder -Assembler aus dem System und stellen die korrekten Sektoradressen im Arbeitsspeicher wieder her, wenn sie geändert wurden.

Die Operanden müssen in feste Spalten gesetzt werden. Der Quellgerätecode steht in den Spalten 13 und 14, das Zielgerät in den Spalten 17 und 18. Diese Gerätecodes sind:

  • UA – Benutzerbereich
  • FX – Der feste Bereich (keine "Ausdehnungen" wie bei der 360; nur zusammenhängender Raum)
  • WS – Arbeitsspeicher
  • CD – Lochkarte/Haupteingabegerät (könnte PT sein : Papierband)
  • PR – Drucker

Optional kann ein Programmname in den Spalten 21 bis 25 und ein Zählfeld in 27 bis 30 codiert werden. Die Interpretation dieser Felder hängt von der angeforderten DUP-Funktion ab.

Programme können mit dem STORECI- Befehl in ein schneller ladendes Format konvertiert werden , der Core Image Builder (DM2s Gegenstück zum 360's Linkage Editor) aufruft. Alternativ kann ein Programm diesen Vorgang jedes Mal durchlaufen, wenn es ausgeführt werden soll, und bei selten verwendeten Programmen wird dies bevorzugt, um Speicherplatz zu sparen.

Die folgende Steuerkarte weist DUP an, den aktuellen Inhalt des Arbeitsspeichers zu übernehmen und ihn unter dem Namen PROGZ in den Benutzerbereich zu verschieben. DUP kennt die Größe der Datei im Arbeitsspeicher. Die Größe des Benutzerbereichs wird um die Größe der Datei erhöht und die Größe des Arbeitsspeichers entsprechend verringert.

Beispiel einer IBM 1130 DUP-Steuerkarte

Peripheriegeräte

IBM 1442 Kartenleser/Locher
IBM 1627 Trommelplotter.

Der Festplattenspeicher wird verwendet, um das Betriebssystem, den Objektcode und die Daten zu speichern, aber der Quellcode wird auf Lochkarten aufbewahrt.

Die grundlegende 1130 wurde mit einem IBM 2310 -Schwingspulen-betätigten Plattenlaufwerk namens "Ramkit" von IBMs General Products Division in San Jose geliefert. Ihre Pizzakarton-großen IBM 2315 Single-Platter-Cartridges fassen 512.000 Wörter oder 1.024.000 Bytes (weniger als die 1,44 MB einer 3,5- Zoll- HD-Diskette oder sogar die 1,2 MB einer 5,25- Zoll- HD-Diskette ).

Die Konsolenschreibmaschine IBM 1053 verwendet einen IBM Selectric- Mechanismus, was bedeutet, dass man die Schriftart oder den Zeichensatz ändern könnte, indem man ein hohles, golfballgroßes Schriftelement ersetzt. Für APL , eine mächtige Array-orientierte Programmiersprache, die eine spezielle symbolische Notation verwendet, steht ein spezielles Typelement zur Verfügung. Eine Reihe von 16 Kippschaltern an der Konsolenschreibmaschine kann aus Programmen heraus individuell getestet werden, beispielsweise mit der speziellen Fortran-Anweisung . IF (SENSE SWITCH i)

Andere verfügbare Peripheriegeräte enthalten:

  • Drucker – die Zeilendrucker IBM 1132 und IBM 1403
  • Lochkarte – der Kartenleser/Locher IBM 1442 und der Kartenleser IBM 2501
  • Papierband – IBM 1055 Papierbandlocher, IBM 1054 Papierbandleser und IBM 1134 Papierbandleser
  • Festplatte – das IBM 2311- Festplattenlaufwerk
  • Magnetband – Ab 1968 waren IBM 2415 Magnetband-Datenspeicherlaufwerke als RPQ erhältlich .
  • GrafikIBM 2250 Grafikanzeigeeinheit.
  • FarbstiftplotterIBM 1627 Trommelplotter.
  • Lesegerät für optische MarkierungenIBM 1231 Optical Mark Page Reader
  • Kommunikation – Synchroner Kommunikationsadapter (SCA). Der 1970 angekündigte IBM 1130 MTCA für Multiple Terminal Control Adapter ermöglichte den Anschluss von bis zu vier 2741 Terminals an einen IBM 1130 zur Verwendung mit APL.

Um das Design von Peripheriegeräten zu vereinfachen, sind diese auf den Prozessor angewiesen. Der Kartenleser hat keine Speicherpuffer, sondern gibt der CPU einen Level-Zero-Interrupt (höchste Priorität) nachdem jede einzelne Spalte der Karte gelesen wurde. Wenn die CPU nicht antwortet und die zwölf Datenbits speichert, bevor ein weiterer solcher Interrupt anzeigt, dass die nächste Spalte gelesen wurde, gehen Daten verloren. Ähnlich ist die 1132 - Drucker auf Software im 1130. beruht Wenn ein Buchstabe , wie beispielsweise Ain die Position kommt, hat die CPU eine gepufferte Textzeile zu analysieren und eine Reihe von Bits zusammenzusetzen , die mit an den 1132 , die Druckpositionen gedruckt werden soll anzeigen wird A. Wenn die CPU nicht reagieren kann, bevor sie Asich aus der Position dreht, kann die Druckgeschwindigkeit stark beeinträchtigt werden.

Andere Peripheriegeräte akzeptieren Text in einem gerätespezifischen Code, der für ihre Hardware geeignet ist. Die CPU muss ihn in oder aus dem EBCDIC-Code übersetzen, in dem die CPU den Text verarbeitet.

Übersicht Anleitungssatz

Anweisungen hatten kurze (ein Wort) und lange (zwei Worte) Formate. Die meisten Rechen-, Lade- und Speicherbefehle bezogen sich auf ein Register (normalerweise ACC) und eine Speicherstelle. Der Speicherplatz wurde im Kurzformat durch eine 8-Bit-Verschiebung mit Vorzeichen entweder von der aktuellen Adresse oder einem der Indexregister identifiziert; oder im langen Format durch eine vollständige 15-Bit-Adresse, die indiziert werden und eine Umleitung angeben könnte. Das Gedächtnis wurde in Worteinheiten adressiert.

Der 1130 unterstützte nativ nur Binärdaten mit einfacher und doppelter Genauigkeit (16 und 32 Bit), die im Big-Endian- Format gespeichert sind. Gleitkomma- (32 und 48 Bit) und Dezimaldaten mit Standard- und erweiterter Genauigkeit wurden durch die Verwendung von Unterprogrammen unterstützt.

Bedingte Übertragungen basierten auf (a) dem aktuellen Inhalt des Akkumulators oder (b) den Übertrags- und Überlaufindikatoren, die durch eine vorhergehende Operation gesetzt wurden. Übertragungen können durch Überspringen (wobei angenommen wird, dass der nächste Befehl kurz ist) oder durch Verzweigung erfolgen. Ein Sprung trat auf, wenn einer der angegebenen Tests wahr war. Eine Verzweigung ist aufgetreten, wenn keiner der angegebenen Tests wahr war.

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
Reservierter Speicher

Die niedrigsten Adressen des Kernspeichers wurden entweder durch die Hardware oder durch die Konvention bestimmt:

Die Anschrift Verwendungszweck
/0000 Laut Konvention enthielt die Anweisung B *-1, die auf unbestimmte Zeit zu sich selbst verzweigt wurde, bis ein Bediener bemerkte, dass alle IAR-Lichter der Konsole dunkel waren, und den Job entweder durch Drücken von Int Req oder durch Neustarten spülte.
/0001 XR1. Die Speicheradressen der Indexregister erlaubten direkte Verschiebungen zwischen ihnen, wie zLDX I1 2
/0002 XR2.
/0003 XR3.
/0008 Die Adresse des Handlers für den Interrupt der Ebene 0 (höchste Priorität) – 1442 Kartenleser/Stanzer "Spalte bereit"-Interrupt.
/0009 Die Adresse des Handlers für den Interrupt der Ebene 1 – 1132-Drucker und Synchronous Communications Adapter. Handler für diese und niedrigere Interrupts müssten ein Statuswort testen, um festzustellen, welches Gerät unterbrochen wurde.
/000A=10 Die Adresse des Handlers für den Interrupt der Ebene 2 – Plattenspeicher, Speicherzugriffskanal.
/000B=11 Die Adresse des Handlers für den Interrupt der Ebene 3 – 1627-Plotter, Speicherzugriffskanal.
/000C=12 Die Adresse des Handlers für den Interrupt der Ebene 4 – 1134 Papierstreifenleser, 1055 Papierstreifenstanzer, Konsole, 1442 Kartenlesestanzer, 2501 Kartenleser, 1403 Drucker, 1231 Lesegerät für optische Markierungen, Speicherzugriffskanalgerät.
/000D=13 Die Adresse des Handlers für den Interrupt der Ebene 5 (niedrigste Priorität) – Konsolenstopp- und Interrupt-Schalter, Speicherzugriffskanal.
/0020=32 Erstes Wort des Scanfeldes für den Drucker 1132 (/0020–/0027).
/0026=38 Letztes vollständiges Wort des Scanfelds.
/0027=39 Hälfte belegt: 120 Spalten = 120 Bit = sieben 16-Bit-Wörter plus 8 Bit.
/0038=56 EXIT zum Supervisor/Zurück zum Monitor (CALL EXIT)

Programmierung

Unterprogramme

Der 1130 hat keine Hardwareunterstützung für einen Stack . Die meisten Unterprogramme werden mit dem Befehl BSI (Branch and Store IAR) aufgerufen. Dadurch wird der Wert von IAR (der Rücksendeadresse) an der Zieladresse hinterlegt und die Kontrolle an Ziel+1 übertragen. Unterprogramme kehren dorthin zurück, wo sie bei dieser Gelegenheit aufgerufen wurden, indem sie eine indirekte Verzweigung durch das erste Wort des Unterprogramms verwenden. Das Inline-Platzieren der Rücksendeadresse war zu dieser Zeit eine gängige Technik von Computern, wie dem Hewlett-Packard HP 2100 , dem DEC PDP-8 und dem Scientific Data Systems SDS 920 .

Ein Unterprogramm namens SIMPL könnte also wie folgt aufgebaut sein (Kommentare folgen dem Befehlsoperanden):

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.

Das Unterprogramm würde wie folgt aufgerufen werden:

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

Die Pseudooperation CALL würde typischerweise verwendet werden.

Wie gezeigt, ist der Einstiegspunkt eines Unterprogramms DC *-*, eine Assembler-Pseudooperation, die verwendet wird, um eine Konstante (die ein Speicherwort belegt) mit dem durch den Ausdruck angegebenen Wert zu definieren. Das * steht für die aktuelle Adresse der Assembly und daher ergibt *-* Null. Wenn Sie dies anstelle von 0 schreiben, erhalten Sie einen visuell unverwechselbaren Hinweis, dass zur Laufzeit dort ein sinnvoller Wert (die Rücksendeadresse) platziert wird. Der Einstiegspunkt muss nicht das erste Wort des Unterprogramms sein. Tatsächlich kann das vorhergehende Wort der Anfang eines Zweiwort-Direktverzweigungsbefehls sein, dessen Adressfeld auf SIMPL steht. Dort kann dann durch Ein-Wort-Verzweigungen zurückgesprungen werden:B SIMPL-1

Wenn SIMPL aufgerufen wird, wird der BSI-Befehl *-*durch den aktuellen Wert von IAR ersetzt, der die Adresse direkt hinter dem BSI-Befehl ist. Nachdem SIMPL alles getan hat, wofür es geschrieben wurde, B I SIMPLverzweigt es nicht zu SIMPL, sondern indirekt durch es, wodurch die Ausführung mit dem Befehl fortgesetzt wird, der dem BSI-Befehl folgt, der SIMPL aufgerufen hat.

Ohne zusätzliche Vorkehrungen zum Schutz der Rücksendeadresse ist eine Rekursion nicht möglich: Wenn SIMPL sich selbst aufruft oder ein Unterprogramm aufruft, das es aufgerufen hat, wird seine ursprüngliche Rücksendeadresse überschrieben. Der Wiedereintritt ist aus dem gleichen Grund problematisch: Eine Interrupt-Service-Routine darf kein Unterprogramm aufrufen, das der unterbrochene Code gewesen sein könnte.

Der Aufrufer von SIMPL kann ihm Parameter übergeben, die Werte oder Adressen von Werten sein können. Parameter können in-line codiert werden (unmittelbar nach dem BSI-Befehl) oder könnten in den Indexregistern XR1 und XR2 platziert werden. Wenn Parameter inline platziert werden, modifiziert SIMPL seine eigene Rückkehradresse, sodass seine letzte indirekte Verzweigung über die Parameter hinaus zurückkehrt.

Ganzzahlfunktionen einer einzelnen Ganzzahl erwarten den Parameter im Akkumulator und geben dort ihr Ergebnis zurück. Gleitkommafunktionen verwenden den Gleitkomma-Akkumulator (ein Zwei-Wort-Bereich, der von der Gleitkomma-Bibliothek beiseite gelegt wird, drei Worte für erweiterte Genauigkeit) und so weiter.

Die Konvention, 0 als Anfangswert am Einstiegspunkt zu codieren, bedeutet, dass, wenn ein Programmierfehler dazu führt, dass SIMPL vor dem ersten Aufruf zurückkehrt, die Ausführung zum Speicherplatz 0 springt. Wie oben erwähnt , ist es üblich, den Speicherplatz . zu haben 0 enthalten eine Verzweigung zu Position 0. Die 1130 würde an Position 0 hängen bleiben und die IAR-Leuchten auf der Konsole wären vollständig dunkel, was deutlich macht, dass das Programm fehlgeschlagen war.

Verknüpfung mit Bibliotheksroutinen

Bei Unterprogrammen, die oft aufgerufen werden (zB Unterprogramme für Gleitkomma-Arithmetik), ist es wichtig, die Größe jedes Aufrufs auf ein Wort zu reduzieren. Solche "Bibliotheksroutinen" verwenden das LIBF-Protokoll. Es ist komplexer als das im vorherigen Abschnitt beschriebene CALL-Protokoll, aber LIBF verbirgt die Komplexität vor dem Autor des Assemblerprogramms.

Bibliotheksroutinen werden über das Indexregister XR3 adressiert. (Fortran-Unterprogramme verwenden das Indexregister XR1 für die Adressen der Parameter und die Rückkehradresse, aber das Register XR2 wird nicht verwendet.) XR3 zeigt auf eine Folge von Dreiwort- Übertragungsvektoren, so dass der erste Eintrag -128 Worte vom Wert von XR3 entfernt ist. Der Programmierer ruft die Bibliotheksroutine unter Verwendung der LIBFPseudooperation auf, die nicht eine direkte BSI, sondern eine indizierte Verzweigungsanweisung ( ) mit einem Wort zusammensetzt, deren Verschiebung (-128, -125 usw.) den Beginn der Übertragung der Routine identifiziert Vektor. BSI 3 disp

Der Transfervektor wird vom Linkage Loader beim Zusammenstellen des Programms vorbereitet. Ein Transfervektoreintrag in eine Bibliotheksfunktion namens SIMPL hat folgende Form:

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

Die Art und Weise, wie SIMPL wusste, wo seine Rückkehradresse war, war, dass, wenn SIMPL als LIBF-Routine deklariert würde, der Linkage Loader den Code von SIMPL modifizieren würde, indem er die Adresse des Transfervektoreintrags von SIMPL auf SIMPL+2 platzierte. LIBF-Routinen beginnen im Gegensatz zu CALL-Unterprogrammen nicht mit einer DC-Direktive, um die Rücksprungadresse zu halten (sie befindet sich im Übertragungsvektor), sondern mit dem tatsächlichen Code wie folgt:

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.

Das Platzieren der Adresse des SIMPL-Transfervektors bei SIMPL+2 lässt Raum für einen Ein-Wort-Befehl, um das gewählte Indexregister, hier XR1, zu speichern. Dann zeigt der indirekte LDX-Befehl XR1 nicht auf den Transfervektor, sondern durch ihn auf die Rückkehradresse oder auf irgendwelche Parameter, die inline nach dem BSI gespeichert sind. SIMPL macht dann alles, wofür es geschrieben wurde, und erhält über XR1 Zugriff auf alle Inline-Parameter (in diesem Fall muss XR1 für die Rückkehradresse erhöht werden) und kehrt wie folgt zurück:

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

Angenommen, ein Aufruf von SIMPL im LIBF-Stil erfolgt an der Adresse 100. Dann wäre die Rücksprungadresse 101, da es sich um einen Ein-Wort-Befehl handelt. XR3 zeigt in die Gruppe der Transfervektoren. Wenn der Transfervektor für SIMPL bei Adresse 2000 beginnt , dann wird das BSI mit a zusammengesetzt, so dass XR3+disp = 2000. Die Ausführung des BSI speichert 101 an der Stelle 2000 und springt zur Stelle 2001. Bei 2001 ist ein Zwei-Wort-Weitsprung zum Einstiegspunkt von SIMPL, den der Linkage Loader möglicherweise auf Adresse 300 platziert hat. BSI 3 dispdisp

Der Weitsprung übergibt die Kontrolle an SIMPL. Nachdem die Anweisung bei 300 XR1 gespeichert hat, ist die Anweisung bei 301 , wobei der Verknüpfungslader 2000 an der Stelle 302 platziert hat. Dies lädt 2000 nicht in XR1; es ist ein indirekter Befehl und lädt den Inhalt von 2000, das ist 101, die Rücksprungadresse für diesen Aufruf an SIMPL. LDX I1 2000

In der oben gezeigten Rückkehrsequenz, wenn die Zeitsteuerung RETN erreicht, gibt es die Anweisung dort B L 101, die zum Aufrufer zurückkehrt. (Wenn bei 101 ein oder mehrere Inline-Parameter vorhanden sind, würde SIMPL XR1 inkrementieren, um auf 102 oder darüber hinaus zu zeigen, und dies wäre das Ziel des BBefehls.)

Variationen

Wenn SIMPL nach dem BSI-Befehl inline codierte Parameter verwendet, erhält SIMPL Zugriff auf diese mit indizierter Adressierung von XR1. Die erste kann durch LD 1 0, die zweite durch LD 1 1usw. abgerufen werden. Wenn der zweite Parameter die Adresse des aktuellen Parameters ist, erhält er dessen Wert. Vor der Rückkehr inkrementiert SIMPL XR1 über die n Parameter hinaus mit einer Anweisung , um den richtigen Wert an RETN + 1 zu platzieren. LD I1 1MDX 1 n

Eine LIBF-Routine, die es ablehnte, den ursprünglichen Wert von XR1 wiederherzustellen, könnte die obigen Schritte auslassen und mit einem einfachen Überspringen von n Inline-Parametern zurückkehren. Eine solche Routine kann jedoch nicht von anderen LIBF-Routinen aufgerufen werden, da sie die Verwendung von XR1 durch den Aufrufer für den Zugriff auf seine eigenen Parameter und Rückkehradresse stört. B 1 n

Die Komplexität von LIBF spart Speicherplatz für häufig aufgerufene Unterprogramme.: Die LIBF-Verknüpfung erfordert ein Wort pro Aufruf, plus drei Worte für den Transfervektoreintrag und den Zusatzcode in der Routine selbst, während die CALL-Verknüpfung zwei Worte pro Aufruf erfordert, weil die meisten CALLs erfolgen an eine Adresse jenseits der Reichweite von -128 bis +127 Wörtern des Ein-Wort-Opcodes.

Das Register XR3 muss auf die Transfervektoreinträge für die Bibliotheksroutinen zeigen und nicht auf eine Versandtabelle nur mit ihren Adressen, da dies letztere erfordern würde, dass LIBF-Routinen mit einem indirekten BSI-Befehl aufgerufen werden. Diese Anweisungen sind zwei Wörter lang, so dass ein solches Design die Codegrößeneinsparungen von LIBF zunichte machen würde. Die Acht-Bit-Grenze für das disp- Feld des Ein-Wort-Befehlscodes begrenzt die Verwendung von LIBF-Routinen auf nicht mehr als 85 verschiedene Einträge.

Code-Änderung

Die vorherigen Abschnitte zeigen, dass Code und Daten vermischt sind. Bei der 1130-Programmierung ist es üblich, die Adressfelder von Befehlen und tatsächlich ganze Befehle zu ändern.

Vom Fortran-Compiler

Der Fortran-Compiler erzeugt beim Generieren von Code für beliebige Unterprogramme (Unterprogramme oder Funktionen) mit Parametern selbstmodifizierenden Code. Der Compiler erstellt eine Tabelle mit jeder Position, an der das Unterprogramm auf einen seiner Parameter verweist, und kompiliert als erste Anweisung im Hauptteil des Unterprogramms einen Aufruf an ein Unterprogramm namens SUBIN, das die Tabelle verwendet, um das Adressfeld jeder Referenz auf a . zu ändern Parameter die tatsächliche Adresse des Parameters während des aktuellen Aufrufs. SUBIN erstellt diese Patches bei jedem Aufruf des Unterprogramms.

Wenn ein Fortran-Programm ein Unterprogramm aufruft, erscheinen die Adressen aller Parameter nach dem Aufruf in der Zeile. Die Fortran-Anweisung CALL SIMPL(X) könnte beispielsweise in Folgendes kompiliert werden:

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

Innerhalb des Unterprogramms könnte auf Parameter durch indirekte indizierte Adressierung zugegriffen werden, wie oben in Variationen gezeigt. Wenn also XR1 entsprechend vorbereitet wurde, könnte ein ganzzahliger Parameter mit einer Anweisung wie dieser in den Akkumulator geladen werden:

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

Der Compiler verwendet stattdessen direkte Adressierung. Wenn SUBIN ausgeführt wird, erhält es die Adresse von X und korrigiert das Adressfeld des Befehls zu:

  LD  L  X      Load the value of X into the accumulator

Die Vorteile von SUBIN sind wie folgt:

  • Um die Adresse des Operanden zu erhalten, erfordert ein indirekt indizierter Befehl drei Speicherzyklen (das Indexregister befindet sich im Speicher), während der Direktzugriffsbefehl nur einen erfordert.
  • Wenn SIMPL einen seiner Parameter an ein beliebiges Unterprogramm weitergibt, das erwartet, die Adresse seines Parameters zu erhalten (einschließlich aller LIBF-Routinen für Gleitkomma-Arithmetik), wird SUBIN benötigt, um die tatsächliche Adresse des ursprünglichen Parameters zu liefern.

Die Nachteile von SUBIN sind der Zeitaufwand für die Ausführung und der Speicherbedarf für die Referenztabelle. Die Größe dieser Tabelle ist die Summe von 5, der Anzahl der Parameter und der Anzahl der Referenzen; wenn diese Summe 511 überschreitet, schlägt die Kompilierung fehl. Bei Unterprogrammen mit vielen Verweisen auf einen Parameter kann der Autor des Unterprogramms den Parameter in eine lokale Variable kopieren.

Vom Benutzer

Das Modifizieren ganzer Anweisungen war damals eine gängige Technik. Obwohl der 1130 beispielsweise einen ODER-Befehl hat, bietet die Syntax von Fortran keine Möglichkeit, ihn zu schreiben. Es kann eine Ganzzahlfunktion IOR definiert werden, die es ermöglicht, logisches ODER Teil eines Fortran-Ausdrucks zu sein, wie zum Beispiel:

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

Der Fortran-Compiler platziert die Adressen von I und J in-line und erwartet das Ergebnis im Akkumulator. Die Verwendung von IOR(I,J) in einem Fortran-Ausdruck kompiliert die folgenden vier Wörter:

  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.

Tatsächlich berechnet die Assembler-IOR-Funktion weder I noch J. Stattdessen es ersetzt die oben genannten vier Worte mit folgendem:

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

Nach der Durchführung dieser Transformation kehrt es nicht über das Ende des Vier-Wort-Blocks (der gerade modifiziert wurde) hinaus zurück. Stattdessen verzweigt es genau zu der Adresse, von der es ursprünglich aufgerufen wurde. Die BSI-Anweisung ist nicht mehr vorhanden; Was jetzt da ist, sind die beiden Anweisungen, die es gerade geschrieben hat. Sie kombinieren die beiden Ganzzahlen mit der maschinensprachlichen ODER-Anweisung und belassen das Ergebnis bei Bedarf im Akkumulator.

Der Aufruf von IOR und die Transformation des Vierwortblocks erfolgt höchstens einmal pro Programmlauf. Wird die oben dargestellte Fortran-Linie erneut ausgeführt, läuft sie schneller als beim ersten Mal. Ähnliche Funktionen könnten für andere nützliche Operationen entwickelt werden.

Eine Funktion, die sich selbst modifiziert, wie es IOR tut, kann in einem Fortran-Unterprogramm auf keinen der Parameter dieses Unterprogramms verwendet werden (obwohl sie verwendet werden könnte, um lokale Variablen zu kombinieren), da sie mit dem oben diskutierten SUBIN-Unterprogramm nicht kompatibel ist. Die oben gezeigte Transformation der IOR-Aufrufsequenz aus vier Wörtern verschiebt die Position der Adresse der Variablen I. Bei nachfolgenden Aufrufen des Fortran-Unterprogramms wäre die Tabelle der Verweise auf Parameter fehlerhaft und SUBIN würde das falsche Wort patchen, in In diesem Fall wird die neue Adresse von I über dem ODER-Operationscode platziert.

Erweiterte Präzision

1130 FORTRAN bietet zwei Gleitkommaformate: ein 32-Bit-Format "Standard Precision" und ein 40-Bit-Format "Extended Precision".

Das Standardpräzisionsformat enthält einen 24-Bit -Zweierkomplement- Signifikand, während die erweiterte Präzision einen 32-Bit -Zweierkomplement- Signifikand verwendet . Dieses Format nutzt die 32-Bit-Integer-Operationen der CPU voll aus. Das erweiterte Format belegt drei 16-Bit-Wörter, wobei die höherwertigen acht Bits des ersten Wortes ungenutzt bleiben. Die Kennlinie in beiden Formaten ist ein 8-Bit - Feld , das die Leistung von zwei enthaltenden vorbelastet durch 128. Gleitkommazahl arithmetische Operationen durchgeführt wird durch Software.

Die *EXTENDED PRECISIONCompiler-Optionskarte weist den FORTRAN-Compiler an, 40 Bit statt 32 Bit für alle Gleitkommadaten zu verwenden, es gibt keine Vorkehrungen für das Mischen von Formaten.

Große Fortran-Programme

Die zu manipulierenden Daten und die Anweisungen, die sie manipulieren, müssen sich zusammen im Kernspeicher befinden. Die Größe des installierten Speichers (von 4.096 bis 32.768 Wörtern) ist eine wichtige Einschränkung. Fortran bietet trotz dieser Einschränkung mehrere Techniken zum Schreiben großer Programme.

LOKALE Unterprogramme

Fortran lässt jedes Unterprogramm als "LOCAL" (Load-on-Call) bezeichnen. Jedes LOCAL-Unterprogramm ist ein Overlay ; es ist Teil des plattenresidenten ausführbaren Programms, wird aber nur während des Aufrufs in den Kernspeicher geladen (sofern nicht bereits vorhanden). So würden beispielsweise sechs LOCAL-Unterprogramme nur so viel Kernspeicher benötigen wie das größte, und nicht die Gesamtmenge für alle sechs. Jedoch kann keiner der sechs einen anderen aufrufen, weder direkt noch über zwischengeschaltete Unterprogramme.

Programme in Phasen

Ein gesamtes Fortran-Programm kann die Kontrolle an eine nachfolgende Phase übergeben und an den Supervisor mit der Anweisung verlassen, die Folgephase in den Kernspeicher zu laden. Ein großes Programm kann in drei Teile aufgeteilt werden, die separat kompiliert werden und als PART1, PART2 und PART3 bezeichnet werden. Die Ausführung wird gestartet // XEQ PART1und an einem geeigneten Punkt würde PART1 die Fortran-Anweisung ausführen CALL LINK(PART2)und so weiter. Der Name des Nachfolgeprogramms im CALL kann nicht variabel sein, aber die Programmlogik kann bestimmen, ob die Kontrolle in eine andere Phase übergeht und welche CALL LINKAnweisung ausgeführt wird. Wie oben erwähnt , wurde der Fortran-Compiler selbst auf diese Weise geschrieben, wobei jede Kompilierungsphase von einem separaten Programm ausgeführt wurde.

GEMEINSAME Datenspeicherung

Programme wie Fortran-Programme befinden sich an niedrigen Kernspeicheradressen (direkt über dem Supervisor). Fortran weist allen Variablen und Arrays, die als COMMON deklariert sind, Speicherplatz an den höchsten Adressen zu. Wenn eine Folgephase des Programms eine entsprechende COMMON-Deklaration enthält, können Informationen in diesem gemeinsamen Bereich zwischen Phasen geteilt werden. Phasen konnten die COMMON-Deklaration problemlos weglassen, vorausgesetzt, diese Phasen waren nicht so groß, dass ihr Programmcode in den gemeinsamen Bereich eindrang. Der COMMON-Speicher teilt nicht nur Daten zwischen Phasen; COMMON-Variablen mit niedrigem Speicher können verwendet werden, um Daten zwischen einem Hauptprogramm und Unterprogrammen innerhalb einer einzelnen Phase zu übertragen, obwohl die Daten beim Übergang zur nächsten Phase verloren gehen könnten.

Programmierbeispiele

Die Beispiele können auf dem IBM 1130-Emulator ausgeführt werden, der unter IBM 1130.org verfügbar ist .

Beispiel-Assembler-Programmdeck

Die folgende Auflistung zeigt ein Kartendeck , das ein Assemblerprogramm kompiliert und ausführt, das dem Zeilendrucker einen Kartenstapel auflistet.

 // 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

Bei diesem Job hinterlässt der Assembler das Ergebnis seiner Assemblierung im temporären Bereich der Systemplatte und der Befehl XEQ führt den Inhalt des temporären Bereichs aus. Das seltsam aussehende END STARThat zwei Bedeutungen: Ende der Assembler-Quelle und der Name des Einstiegspunkts der Routine, der das Label START hat.

Die Assembler-Quelle beginnt mit Spalte 21 der Karte, nicht mit Spalte eins. In Systemen ohne Diskettenlaufwerk würde der Assembler Code in den Anfang der gerade gelesenen Karte stanzen (der Kartenleser war eigentlich ein Leser-Stanzer, mit der Stanzstation nach der Lesestation) und dann die nächste Karte lesen. Um Vorwärtszweige und dergleichen zu handhaben, beinhaltete der zweite Durchgang des Assemblers buchstäblich einen zweiten Durchgang der Karten durch den Leser/Stanzer. Wenn Quelländerungen erforderlich waren, würde der Programmierer die Karten duplizieren, um ein Deck mit den Spalten 1-20 leer zu erhalten, das für den nächsten Durchlauf durch den Assembler bereit ist.

Konventionell wird Puffern eine Wortzahl vorangestellt. Die DC(Define Constant) setzt ein Zählwort zusammen und das folgende BSS(Block Started by Symbol) reserviert die erforderliche Anzahl von Wörtern für den Puffer. Der Kartenpuffer benötigt 80 Wörter, eines für jede Kartenspalte. Treiber card0 liest jede Karte Spalte wörtlich unter Verwendung von 12 der 16 Bits im Puffer Wort, mit einem Bit auf auf für jedes gestanzte Loch in der entsprechenden Reihe für diese Spalte. Das Schlagmuster beschreibt typischerweise ein Textzeichen unter Verwendung des Hollerith-Codes . Die Tastatur der Konsole gibt dem Programm auch Eingaben im Hollerith-Code, der einzige Fall von zwei Geräten, die dieselbe Zeichencodierung verwenden.

Die Druckerroutine arbeitet jedoch mit Text in 8-Bit- EBCDIC mit zwei Zeichen pro Wort, was einen 40-Wort-Puffer erfordert. Das Programm verwendet die Bibliotheksroutine ZIPCO, um die Konvertierung durchzuführen. Trotz des Anscheins wird die Anweisung CALL HLEBCnicht ausgeführt, da HLEBC keine Unterroutine, sondern eine von IBM bereitgestellte Hollerith-zu-EBCDIC-Konvertierungstabelle ist. Das CALL-Statement liefert die Adresse der Tabelle an ZIPCO und stellt sicher, dass der Linking Loader die Tabelle in das Programm einbindet, also ist es der fünfte Parameter von ZIPCO, obwohl einer zwei Speicherworte belegt: das BSI-Operations-Codewort für den CALL ist ungenutzt und damit normalerweise verschwendet, aber das zweite Wort der Erweiterung von CALL HLEBCist die Adresse der HLEBC-Tabelle, die von ZIPCO benötigt wird. Nach der Konvertierung sendet das Programm die konvertierte Ausgabe, jetzt im Puffer PBUFF, über den Treiber PRNT1 an den Drucker. Auch hier durchläuft das Programm eine Schleife, bis der Druckertreiber den Abschluss meldet, dann liest das Programm die nächste Karte.

Dieses Beispiel enthält keinen Code, um zu entscheiden, wann gestoppt werden soll. Ein vollständigeres Programm würde nach Karten suchen //, die mit beginnen , was den Beginn des nächsten Jobs angibt. Um den Kartenleser so schnell wie möglich zu stoppen, könnte ein Programm den Hollerith-Code überprüfen, /bevor die Karte überhaupt in EBCDIC konvertiert wird.

Asynchrone E/A und Leistung

Der Anruf an CARD0 zum Lesen einer Karte leitet diese Operation ein und kehrt sofort zum Anrufer zurück, der mit anderen Aktivitäten fortfahren könnte. Das Beispielprogramm versucht jedoch nicht, Eingabe und Ausgabe mit Hilfe von Puffern zu überlappen, obwohl es zwei separate Arbeitsbereiche hat; es schleift einfach zurück zu CIMP, um erneut zu testen. Nachdem CARD0 den Operation-Complete-Interrupt des Kartenlesers erkannt hat, gibt es ein Wort weiter zurück, wodurch der Sprung zurück zu CIMP übersprungen und die Schleife verlassen wird.

Die Beispielroutinen führen die E/A-Geräte nicht mit Höchstgeschwindigkeit aus. Insbesondere beginnt der Kartenleser nur wenige Millisekunden, nachdem er den Abschluss des Lesens einer Karte gemeldet hat, seine Stoppsequenz, wonach ein neuer Lesebefehl warten muss, um einen weiteren Lesezyklus einzuleiten. Der IBM 1442-Leser könnte 400 Karten/Minute mit voller Geschwindigkeit lesen, aber nur ein wenig Zögern bei den Lesebefehlen würde seinen Durchsatz halbieren oder noch schlimmer. Ein Fortran-Programm konnte nicht einmal die einfachste Eingabeverarbeitung rechtzeitig abschließen und konnte Karten daher nicht mit voller Geschwindigkeit lesen. Eine übliche Fortran- DOSchleife zum Lesen von Karten führte dazu, dass der Motor so häufig stoppte und startete, dass der Verschleiß beschleunigt wurde. Bei der Pufferung konnte die Steuerung des Kartenlesers mit der Verarbeitung überlappt werden und der Leser konnte mit voller Geschwindigkeit durch große Datendecks laufen, aber Speicher für komplexere Programme und Puffer war oft knapp.

Selbst mit Assembler und Doppelpufferung konnte ein Programm zum Auflisten eines Kartenstapels vom IBM 2501-Leser (1.000 Karten/Minute) auf dem Zeilendrucker nicht mithalten, da die Übersetzung von Kartenlochmustern in EBCDIC für den Drucker wie von EBPRT war zu langsam; stattdessen wurden wie im Beispiel die komplexeren ZIPCO und HLEBC benötigt.

Beispiel-APL\1130-Sitzung

Die folgende Abbildung zeigt eine einfache APL \1130-Sitzung. Diese Sitzung wurde über den 1130-Simulator durchgeführt, der von IBM 1130.org erhältlich ist. Die obige Sitzung zeigt eine Anmeldung, Addition der ganzen Zahlen 1 bis 100, Erzeugung einer Additionstabelle für die ganzen Zahlen 1..5 und eine Abmeldung.
apl \ 1130 apl \ 1130 Beispielsitzung

Konkurrierende Systeme

Im selben Jahr, in dem der 1130 eingeführt wurde, führte die Digital Equipment Corporation den kleineren, billigeren und besser verkauften 12-Bit- PDP-8 ein , der als erster erfolgreicher Minicomputer anerkannt wurde.

Einfluss der 1130

  • Brian Utley war während seiner Entwicklung und Einführung der Projektmanager der 1130er Jahre . Brian sagte auf der dritten 11/30-Party, dass die 1130, bevor IBM Marketing den Namen hatte, als Small Engineering Computer System oder SECS bekannt war. Die ursprüngliche Architektur war 18 Bit, wurde aber aufgrund des Einflusses der System/360- Entwicklung auf 16 Bit geändert . Der vollständige Dialog seiner Präsentation von 2005 ist unter IBM1130.org verfügbar .
  • Der bemerkenswerte Software-Designer Grady Booch bekam seinen ersten Kontakt mit der Programmierung auf einer IBM 1130:

... Ich hämmerte die Türen des örtlichen IBM-Verkaufsbüros ein, bis ein Verkäufer Mitleid mit mir hatte. Nachdem wir uns eine Weile unterhalten hatten, reichte er mir ein Fortran [Handbuch]. Ich bin sicher, er gab es mir und dachte: "Ich werde nie wieder von diesem Kind hören." Ich kehrte in der folgenden Woche zurück und sagte: "Das ist wirklich cool. Ich habe das Ganze gelesen und ein kleines Programm geschrieben. Wo finde ich einen Computer?" Der Bursche fand zu meiner Freude, dass ich am Wochenende und in den späten Abendstunden Programmierzeit auf einer IBM 1130 hatte. Das war meine erste Programmiererfahrung, und ich muss diesem anonymen IBM-Verkäufer danken, dass er meine Karriere gestartet hat. Danke, IBM.

Das System war ein IBM 1130 Computer, eine Maschine von der Größe eines Schreibtisches mit 8 KB Hauptspeicher, einem 512 KB Diskettenlaufwerk, einem Teletype CX Papierbandleser und BRPE Papierbandlocher und einem Photon 713 fotomechanischen Setzer. Die Aufgabe war meine erste Erfahrung mit der Verwaltung einer maschinenlesbaren Dokumentendatenbank: Ich lernte, das Lochstreifen vorsichtig zu rollen, damit es ordentlich in zylindrischen Papierkörben verstaut werden konnte.
In der Zwischenzeit, obwohl ich nichts davon wusste, wurden die Wurzeln des generalisierten Markups gepflanzt. Historisch gesehen enthielten elektronische Manuskripte Kontrollcodes oder Makros, die dazu führten, dass das Dokument auf eine bestimmte Weise formatiert wurde ("spezifische Codierung"). Im Gegensatz dazu verwendet die generische Codierung, die Ende der 1960er Jahre begann, beschreibende Tags (z. B. „Überschrift“ statt „Format-17“).

  • Alan Kay verwendete die IBM 1130 in frühen GUI-Arbeiten für seinen Ph.D. Diplomarbeit 1969.
  • Die Hutchinson Central Technical High School ("Hutch Tech") in Buffalo, NY, verwendete die IBM 1130 im ersten vierjährigen High-School -Lehrplan für Informatik im Jahr 1969. Robert Santuci war der Leiter des Informatikprogramms und unterrichtete Kurse in Programmierung und induktiver Logik .
  • Ein Ingenieur von IBM wurde von Signetics eingestellt und integrierte eine Reihe von Architekturmerkmalen des IBM 1130 in den Signetics 2650 Single-Chip-Prozessor.

1130er heute

Von schätzungsweise 10.000 produzierten Systemen sind ab 2021 die folgenden bekannt:

Apokryphen

Spekulationen darüber, warum das Produkt die Nummer 1130 erhielt, konzentrierten sich auf die folgenden Möglichkeiten:

  • Dass, da die 1130 eine kleine wissenschaftliche Maschine war, wurde die Zahl durch Multiplikation 360 (wie in gewählt IBM 360 ) um π .
  • Um 11:30 Uhr gerieten die Produktplaner in eine Sackgasse, um das Produkt zu nennen.
  • Dass die 1130 das 11. Computerdesign von IBM war und 30 Anweisungen hatte.

Andere haben spekuliert, dass die Existenz der IBM 1130 erklärt, warum kein Computer mit der Bezeichnung "11/30" jemals in der PDP-11- Maschinenfamilie auftauchte .

Siehe auch

Anmerkungen

Verweise

Externe Links