IBM 1130 - IBM 1130
Entwickler | IBM Boca Raton |
---|---|
Hersteller | IBM |
Typ | Minicomputer |
Veröffentlichungsdatum | 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 |
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.
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.
Beschreibung
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.
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 JOB
Datensatz 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 XEQ
Datensatz 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 FILES
Supervisor 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 FILES
für den Core Load Builder. DUP-Kontrollsätze haben ein ähnliches Format. Diese Datensätze steuern die Programmverknüpfung, entweder für die // XEQ
Anweisung oder den DUP- *STORECI
Befehl.
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 FILE Anweisung oder der Assembler- FILE Anweisung mit benannten Dateien auf dem Datenträger.
|
Gebrauchsprozedur
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 // DUP
zum Ausführen des Festplatten-Dienstprogramms (zum Löschen von Dateien oder Hinzufügen der Datei im temporären Bereich zur Dateisammlung) und // XEQ
zum 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
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, // DUP
Befehle 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:
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.
Peripheriegeräte
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 .
- Grafik – IBM 2250 Grafikanzeigeeinheit.
- Farbstiftplotter – IBM 1627 Trommelplotter.
- Lesegerät für optische Markierungen – IBM 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 A
in 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 A
sich 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 SIMPL
verzweigt 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 LIBF
Pseudooperation 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 disp
disp
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 B
Befehls.)
- 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 1
usw. 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 1
MDX 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 PRECISION
Compiler-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 PART1
und 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 LINK
Anweisung 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 START
hat 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 HLEBC
nicht 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 HLEBC
ist 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- DO
Schleife 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.
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.
- LISP- Guru Guy Steele schrieb einen LISP-Interpreter für die IBM 1130, als er in der High School war ( Boston Latin School , die eine IBM 1130 für Schüler hatte). Sein Code und seine Dokumentation für LISP 1.6 sind zusammen mit einer Zusammenfassung der aktuellen Arbeiten zur Simulation unter IBM1130.org verfügbar .
- Chuck Moore wollte seine neue Sprache "Fourth" nennen, aber das Betriebssystem IBM 1130 war auf fünfstellige Namen beschränkt, und so wurde es schließlich FORTH genannt .
- Dan Bricklin , der Schöpfer des VisiCalc- Programms, begann mit der Programmierung, als er die IBM 1130 im Rahmen des Computer/Math Summer Project der National Science Foundation für Highschool-Studenten, das 1966 an der University of Pennsylvania abgehalten wurde , lernte und verwendete.
- Ein IBM 1130 mit 8 Kilowörtern Kern wurde für die weltweit erste Vollzeit- Suche nach extraterrestrischer Intelligenz am Radio-Observatorium der Ohio State University verwendet . Dieses Gerät hat das Wow! signalisieren .
- Charles Goldfarb , der Vater von SGML , beschreibt einen Job bei der Installation eines Satzsystems basierend auf einer IBM 1130, der "seine Karriere schließlich veränderte" und ihn zu generischem Markup trieb:
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:
- ACONIT in Grenoble, Frankreich verfügt über ein komplettes 1130-System.
- Das Computer History Museum ( Mountain View, Kalifornien ) verfügt über ein 1130-System.
- COSECANS ( Basel, Schweiz ).
- Das National Museum of Computing (TNMOC) (Bletchley Park, Großbritannien) verfügt über ein komplettes 1130-System.
- Die Universität Stuttgart (Deutschland) verfügt über ein funktionsfähiges 1130-System.
- Carl Claunch restauriert derzeit eine 1130-Anlage.
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
- IBM Archiv: IBM 1130 Pressemitteilungen, Chronologie, Fotos, Faktenfolder.
- IBM 1130.org Norm Aleks und Brian Knittel Site, die wichtige Informationen über die 1130 und einen herunterladbaren Simulator enthält, der die DMS R2V12- und APL-Umgebungen unterstützt.
- www.ibm1130.net ist die Website von Howard Shubs, die dem 1130 gewidmet ist.
- Arnold Reinholds persönlicher Bericht über die 1130. Text von hier wurde mit Genehmigung in diesen Artikel aufgenommen
- Eine Reihe von PDFs bestehend aus gescannten IBM 1130-Handbüchern
- Kym Farniks Seite über Retro Computing speziell die 1130
- Eine Diskussion über das (damals) Angle Park Rechenzentrum, das mit IBM 1130 ausgestattet war
- Bob Rosenblooms IBM 1130 Fotos
- IBM 1130- Material an der Columbia University, Computing History Site.
- Eine Flickr-Sammlung von Detailfotos, die Peter Vaughan von einer IBM 1130 im National Museum of Computing aufgenommen hat