Der IBM 1130 Computing System 1965 eingeführt wurde, war der IBM wenigsten teure Computer zu diesem Zeitpunkt. Es wurde bei preissensitiven, rechenintensive technische Märkten wie Bildung und Engineering ausgerichtet, Nachfolger des IBM 1620 in diesem Marktsegment.
Bezeichnung
Die Gesamtproduktionslauf der 1130 wurde bei 10.000 geschätzt worden. Das 1130 hat einen Platz in der Computergeschichte, weil es gab viele Leute ihre erste direkte Interaktion mit einem Computer. Sein Preis-Leistungsverhältnis war gut und es insbesondere enthalten kostengünstig, herausnehmbare Festplattenspeicher, mit zuverlässigen, leicht zu bedienende Software, die mehrere Hochsprachen unterstützt. Der niedrige Preis und ausgewogene Feature-Set aktiviert interaktive "open shop" Programmentwicklung.
Der IBM 1130 verwendet, System / 360 Electronic Packaging genannt Solide Logic Technology und hatte eine 16-Bit-Binär-Architektur, ebenso wie später Minicomputern wie der PDP-11 und Data General Nova.
Der Adressraum war 15 Bits, die Begrenzung der 1130 Wörter des Speichers. Die 1130 verwendeten Kernspeicher, die der Prozessor angesprochen auf Wortgrenzen, mit direkten, indirekten, und indiziert Adressierungsarten.
Models
IBM implementiert fünf Modelle der 1131 Central Processing Unit, der primären Verarbeitungskomponente der IBM 1130. Das Modell 1 bis 5 beschriebenen Modell die Kernspeicherzykluszeit, sowie die Fähigkeit des Modells, um Festplattenspeicher zu unterstützen. Ein Buchstabe A bis D an die Modellnummer angehängt zeigte die Größe der Kernspeicher installiert.
Das Modell 4 war eine preisgünstigere Produkt mit einem 5,6 & mgr; s Zykluszeit. Einige Käufer von Leistungssteigerungen beobachtet, dass die Feldeinstellung, um die Verbesserung zu erreichen war überraschend trivial.
Der IBM 1132 Drucker beruhte auf der 1130-Prozessor nicht die interne Logik, um zu bestimmen, wann die Druckräder zu feuern, wenn sie gedreht wird. Drucker für das Modell 4 lief langsamer, aber die langsameren Prozessor immer noch nicht Schritt halten konnte mit ihm. Das Hardware-Handbuch offenbart, dass, wenn das Modell 4 war die Bedienung der beiden höchsten Ebene Interrupts, mit der schnelleren 3,6 & mgr; s Zykluszeit lief es. Einige Benutzer des Modells 4 würde einen falschen Druckertreiber, der den Drucker Interrupt nicht entlassen hat, um von der höheren Geschwindigkeit des Prozessors profitieren zu schreiben. Allerdings wurden niedrigerer Ebene Interrupts während dieses Intervalls deaktiviert, auch die End-of-Karte Interrupt von der 1442-Kartenleser.
Der IBM 1800 war eine Variante des IBM 1130 für Prozesssteuerung. Es verwendete Hardware anstatt Kernspeicher für die drei Indexregister und featured zwei zusätzliche Anweisungen plus extra Interrupt und E / A-Funktionen. Es war ein Nachfolger des IBM 1710, wie der IBM 1130 war ein Nachfolger des IBM 1620.
Der IBM 1500 war ein Multi-User Bildungssystem auf Basis entweder eine IBM 1130 oder IBM 1800. Es unterstützt bis zu 32 Schülerarbeitsstationen, die jeweils mit einer Vielzahl von audio-visuellen Fähigkeiten.
- 11. Februar 1965 - IBM stellt die 1130 auch angekündigt, ist der IBM 1132-Drucker, die je von IBM zu diesem Zeitpunkt bekannt gegeben niedrigsten Kosten Online-Computer-Drucker.
- Viertes Quartal 1965 - Erster Kunde Sendungen beginnen, von der San Jose-Anlage.
- 31. März 1966 - IBM stellt den IBM 1500 Bildungssystem.
- April 1966 - IBM 1800 Schiffe.
- 9. August 1966 - IBM rollt die 1130 synchrone Kommunikationsadapter, der die kleine 1130-System erlaubt, durch regelmäßige geleaste Telefonleitungen an, und die Funktion als Kommunikationsterminal für, jedes Modell des IBM System / 360 angeschlossen werden.
- 17. April 1967 - Ein Vier-Wege-Erweiterung des 1130 angekündigt wird, mit:
- Das Fünffache der Plattenspeicher und das Vierfache des Kernspeicher;
- Eine zusätzliche Verarbeitungsgeschwindigkeit fast 40 Prozent schneller als bisher zur Verfügung;
- Mehr und schnellere Peripheriegeräte, einschließlich eines optischen Marken-Leser;
- Eine verbesserte kommerzielle Programmpaket.
- Januar 1968 - Erste Sendungen beginnen der Modelle 1130 B3, C2, C3, D2 und D3.
- Juli 1968 - Die Boca Raton Pflanze beginnt Auslieferung des 1.130.
- 22. Juli 1971 - 1130 Modelle 4A und 4B auf neue Ebenen der Wirtschaft eingeführt.
- September 1971 - Erster Kunde Sendungen beginnen, der 1130 Modell 4.
- 31. Mai 1972 - Modelle 1C, 1D, 5B, 5C und 5D werden angekündigt.
Arbeitsanweisung
Die anhaltende Erinnerungen an die IBM 1130 von seiner Notwendigkeit für ständige menschliche Eingriffe zur Folge gehabt. Es war in der Regel besetzten läuft "Arbeitsplätze" von einem Deck von Lochkarten festgelegt. Der menschliche Bediener würde Arbeitsplätze in den Kartenleser zu laden, und trennen Sie sie zurück in Arbeitsplätze für die Rückkehr, vielleicht zusammen mit der Druckausgabe an die Einsender. Die Betreiber müssten auch die 1130 für die Hinweise auf eine Fehlfunktion oder ins Stocken geraten Arbeit beobachten und einzugreifen, mit der Tastatur, um an den Anfang des nächsten Job zu überspringen.
Fast alle Systeme hatten zumindest ein Plattenlaufwerk, das die Komponenten des Festplatten-Monitor-System oder dessen Release 2. Während der Ausführung eines Auftrags enthalten ist, ein Bewohner Monitor des DMS genannt Skeleton Beauftragten residierte zu Beginn der Kernspeicher. Wenn der Auftrag beendet ist oder abgebrochen wurde, geladen wird der Datenschutzbeauftragte die nächste Aufgabe.
Markiert den Beginn eines Auftrags war eine Lochkarte, die mit gestartet. Jede Karte, die mit der Autor war ein Befehl an den Datenschutzbeauftragten und konnte nicht als Anwenderprogramm oder Daten verwendet werden. Andere Befehle enthalten, um die Festplatten-Dienstprogramm-Programm auszuführen und eine benannte Programm von der Festplatte auszuführen. Wenn ein Benutzer-Programm versuchte, eine Eingabekarte zu lesen, würde die Standard-Kartenleser-Routine am Ende der Eingabe in das Programmsignal und speichern Sie Inhalte dieser Karte für die Betreuer.
Der Datenschutzbeauftragte war winzig nach modernen Standards, enthält verschiedene Systemdetails wie Interrupt-Responder plus die Plattentreiber und Routinen, um den Dolmetscher der // Befehle und ihre Kartenleser Treiber zu laden. Ersten verfügbaren Speicher einer Aufgabe begann mit Adresse / 01FE oder Wort 510, damit die Betreuer benötigt nur 1020 Bytes.
Eine besondere Aufgabe könnte mit zusätzlichen I / O-Geräte, so dass Gerätetreiber würde als Teil des Lade dieser Aufgabe, die auch für den Ersatz der Grundplattentreiber aufrufen könnte durch eine Fahrereingearbeitet werden. Während die Aufgabe ausgeführt wurde, war der Supervisor-inaktiv ist, abgesehen von Gerätetreibern und deren Interrupts: alle CPU-Zeit war ganz der Tätigkeit der Task gewidmet.
Wenn der IBM 1130 gestartet wurde, würde die Betreuer noch im Speicher und wahrscheinlich intakt sein, als Kern Speicher behält seinen Zustand ohne Strom. Jedoch war es üblich, durch Starten beginnen. Die Bootstrap-Prozedur zu lesen eine Karte aus dem Kartenleser. Der Bootkarte binären Code enthalten ist, den Inhalt der Sektor Null des Plattenlaufwerks, das wiederum würde die "Operation abgeschlossen" Interrupt von der Festplatte handhaben und zusätzliche Festplatte gelesen liest, um die 1130 zum ersten Lochkarten Job vorzubereiten. Der ganze Prozess dauerte etwa eine Sekunde in Anspruch.
Wenn der Betreiber festgestellt, dass ein Anwenderprogramm ins Stocken geraten war, konnte das Supervisor spüren eine Taste drücken, um das Programm abzubrechen und fahren Sie mit dem nächsten // Karte. Der Datenschutzbeauftragte nicht gegen Änderung durch eine schlecht geschriebene Arbeit geschützt, Sie einen Fall, dass erforderlich machen könnten, dass der Betreiber einen Neustart des 1130. Es gab auch Schutz vor Schreiben auf die Festplatte. Wenn die Kopie der System-Software auf der Festplatte geändert wurden, ist es durch Nachladen aus etwa 4000 binär codierten Lochkarten wieder hergestellt werden konnte.
Der IBM 2310 Platte gespeicherten Sektoren von 320 Wörtern. Alle Festplattendateien waren zusammenhängenden: Eine Datei gestartet irgendSektor und weiterhin ungebrochen, seine letzten Sektor, so gab es keine Fragmentierung. Ein Programm in der Notwendigkeit Arbeitsspeicher nutzen könnten und benannte Dateien zu ändern, konnte aber nicht über ihre erstellt Größe ausbauen. Freiraum begann nach dem letzten angegebenen Datei, und kann durch eine temporäre Datei teilweise belegt werden, da der Assembler oder ein Compiler könnte zu produzieren. Wenn eine Datei geändert werden, die übliche Prozess war, Befehle zu verwenden, um sie zu löschen, die alle nachfolgenden Dateien verschieben würde wieder in die Lücke zu schließen, und benennen Sie die temporäre Datei als neue Version der Datei. Selten veränderten Dateien würde somit sinken in Richtung Anfang der Platte als neue Dateien oder neue Versionen wurden, angehängt und häufig veränderten Dateien würden untereinander gegenüber dem Ende der Platte drängen.
Festplattenplatz wurde mit einem Aufschlag, so Programmquellen wurden in der Regel als Kartendecks gehalten. Benutzer mit größeren Anforderungen würden vereinbaren, um eine Festplatte des eigenen mit dem Betriebssystem, sondern nur ihre Dateien haben und müssten den "Pool" Systemfestplatte mit den ihrigen zu ersetzen und das System neu starten, wenn ihr der Reihe wird am Operator kam. Ein System mit einem zweiten Laufwerk, das ganz auf Code und Daten irgendBenutzer gewidmet sein könnte ein großes Gefühl von Geräumigkeit.
Es gab eine Hierarchie der Gerätetreiber: der Endung Z waren für Fortran, wie DISKZ, während Assembler-Programmierer könnte DISK0 verwenden und DISK1 war noch schneller auf das Lesen mehrerer Plattensektoren. Aber DISKZ begann seine Sektor Adressierung mit dem ersten verfügbaren ungenutzten Sektor, während die anderen begannen mit Sektor Null der Festplatte, so dass es für eine Fortran-Programmierer den Einstieg in Assembler versehentlich überschreiben Sie den Bootstrap-Loader einfach.
Software
Um die Geschwindigkeit zu maximieren und sparen Platz, wurden das Betriebssystem und Compiler komplett in Assembler geschrieben und verwendet Techniken, die heute selten sind, einschließlich der Durchmischungs Code und Daten sowie selbstmodifizierenden Code.
Viel Anwenderprogrammierung wurde in Fortran getan. Die 1130 Fortran Compiler konnte auf einer Maschine mit nur 4.096 Worten von Kern laufen, obwohl das kompilierte Programm passen nicht auf eine solche Maschine könnte. Eine Zusammenstellung umfasst viele kleine "Phasen", die den gesamten Source-Programm verarbeitet und nahm es einen weiteren Schritt auf Maschinencode. Lesen Sie beispielsweise die erste Phase der Quellenanweisungen in den Speicher, Verwerfen Kommentarzeilen, Auspressen alle Bereiche, die Verkettung Fortsetzungszeilen und Identifizierung von Etiketten und Durchführung keine Syntaxprüfung hinaus, was könnte in dieser Phase entdeckt zu werden. Der Compiler wurde in einer plattenresidenten Version als auch auf 8-Kanal-Lochstreifen oder Lochkarten.
Andere Programmiersprachen auf der 1130 verfügbaren enthalten APL, BASIC, COBOL, FORTH, PL / I, und RPG. Es gab sogar einen Algol-Compiler, auf Französisch geschrieben, so dass "Debut ... Fin;" an die Stelle der "BEGIN ... END;". All ihre Botschaften wurden auf Französisch, so "Bonne Compilation" war das Ziel. Eastern Michigan University entwickelte eine Fortran IV Compiler für die 1130, als Fortran-EMU bekannt als eine Alternative zu dem Fortran IV-Compiler von IBM zur Verfügung gestellt. Er fügte hinzu, viele Funktionen, einschließlich der logischen Datentyp, verbesserte Diagnose und sechs Buchstaben Variablennamen. Die Fortran-EMU-Compiler wurde als Plattform der Lochkarten in einem Disk-Image-Datei-Format mit allen übrigen Systembereich gelöscht, kopiert andere Module, die in der Regel auf der gleichen Festplatte befinden würden, wie der Assembler oder Compiler, um zu verhindern, verteilt. Oklahoma State University entwickelte eine ALGOL 68-Compiler, in ANSI Fortran 1966 geschrieben.
Peripheriegeräte
Die Grund 1130 kam mit einem IBM-2310-Schwingspule betätigt Plattenlaufwerk, genannt "Ramkit", von IBM General Products Division in San Jose. Diese Lese Pizza-Box-Größe 2315 einzelnen Platter Patronen, die 512 K Wörter oder 1 M-Byte statt. Disk-Speicher verwendet, um das Betriebssystem-Objekt-Code und Daten zu speichern; aber Quellcode wurde auf Lochkarten aufbewahrt.
Die Konsole Schreibmaschine verwendet einen IBM Selectric-Mechanismus, der eine meinte könnte die Art durch Ersetzen eines hohlen, golfballgroße Typ-Element ändern. Es war eine besondere Art Element für APL, einem leistungsfähigen Angebot orientierte Programmiersprache mit einer speziellen symbolischen Notation zur Verfügung. Eine Reihe von 16 Kippschalter auf der Konsole Schreibmaschine könnte einzeln aus Programmen getestet werden, mit der Fortran-Anweisung, wenn, zum Beispiel.
Andere verfügbare Peripheriegeräte enthalten:
- Drucker - die IBM 1132 und IBM 1403 lineprinters
- Lochkarten - der IBM 1442-Kartenleser / Stempel und der IBM 2501-Kartenleser
- Papierband - der IBM 1055 Lochstreifenstanzer, das IBM 1054 Lochstreifenleser, und der IBM 1134 Lochstreifenleser
- Disk - die IBM 2311 Disk Drive
- Magnetband - Ab 1968 gab IBM 2415 Magnetbanddatenspeicherlaufwerke als RPQ erhältlich.
- Graphics - IBM 2250 Graphikanzeigeeinheit und der IBM 1627 Trommel-Plotter.
- Kommunikation - Synchrone Kommunikationsadapter. Der IBM 1130 MTCA, für mehrere Terminal Control Adapter 1970 angekündigt erlaubt bis zu vier Terminals 2741 auf einem IBM 1130 für die Verwendung mit APL, verbunden sein.
Befehlssatzübersicht
Anleitung hatte kurze und lange Formate. Die meisten Rechen, Last und Speicherbefehle referenziert ein Register und einen Speicherplatz. Der Speicherplatz identifiziert wurde, in der Kurzform, durch einen 8-Bit-Verschiebung entweder der aktuellen Adresse oder eines der Indexregister; oder in der Langform, durch eine volle 15-Bit-Adresse, die indiziert und geben Indirektion werden konnte.
Die meisten bedingten Transfers wurden unter der Bedingung, Indikatoren wie von einer vorhergehenden Operation, in der Regel reflektiert den Inhalt des ACC. Transfers könnte durch Überspringen oder durch Verzweigung sein.
Die niedrigsten Adressen der Kernspeicher hatte Verwendungszwecke diktiert entweder durch die Hardware oder durch Konvention:
Programmierung
Dieser Abschnitt verwendet die Fortran-Konvention, die Unterprogramme umfassen Subroutinen und Funktionen.
Unterprogramme
Die 1130 hatte keine Unterstützung für einen Stapel. Die meisten Unterprogramme werden mit der Anweisung BSI bezeichnet. Dieses abgeschiedene den Wert der IAR an der Zieladresse und übertrug Steuer zum nächsten Wort. Unterprogramme wieder auf, wo sie bei dieser Gelegenheit über eine indirekte Zweig durch dieses erste Wort des Unterprogramm aufgerufen wurden.
So ein Unterprogramm mit dem Namen SIMPL könnte wie folgt organisiert werden:
Das Unterprogramm würde wie folgt aufgerufen werden:
Die Pseudo-Operationsaufruf würde in der Regel verwendet werden.
Wie gezeigt, war Einstiegspunkt eines Unterprogramms. Dieser Code führte zu einer Null-Wort, und der einzige Punkt des Schreibens es so war, als optisch unverwechselbare Note, dass ein sinnvoller Wert wird es zur Laufzeit gesetzt werden. Der Einstiegspunkt muss nicht das erste Wort des Unterprogramms sein. Tatsächlich könnte die vorangehende Wort der Beginn eines Zwei-Wort-Befehl, dessen direkte Verzweigungsadressenfeld würde SIMPL sein. Dann könnten Erträge durch Ein-Wort-Niederlassungen gibt bewirkt werden:
Wenn SIMPL aufgerufen, ersetzt das BSI Anweisung mit der Adresse gleich hinter dem BSI Anleitung. Nach SIMPL tut, was er geschrieben, um zu tun, Äste nicht SIMPL, aber indirekt durch sie, in der Regel wieder in gerade hinter dem BSI Anweisung, die es genannt.
Ohne zusätzliche Vorkehrungen, um die Rücksprungadresse zu schützen, Rekursion unmöglich wäre: Wenn SIMPL nannte sich selbst, oder ein Unterprogramm aufgerufen, die sie aufgerufen, ihre ursprüngliche Absender-Adresse würde überschrieben. Neueintritt problematisch war aus dem gleichen Grund: muss ein Interrupt-Serviceroutine aus Aufruf einer Unterprogramm, das der Code, der unterbrochen wurde, gewesen sein könnten.
Der Anrufer der SIMPL könnte es passieren Parameter, die Werte oder Adressen von Werten sein könnten. Parameter können in-line codiert werden oder könnten im Index platziert werden registriert XR1 und XR2. Wenn Parameter wurden in-line gestellt, würde SIMPL seine eigene Rücksprungadresse zu ändern, so seine endgültige indirekte Verzweigung über die Parameter zurückgegeben.
Integer Funktionen einer ganzen Zahl würde den Parameter in dem Akkumulator erwarten und würden ihr Ergebnis dorthin zurückkehren. Floating-Point-Funktionen verwendet die Gleitkomma-Akkumulator, und so weiter.
Die Konvention der Codierung 0 als Anfangswert an der Eintrittsstelle bedeutete, dass, wenn ein Programmierfehler führte zu SIMPL Rückreise bis es erstmals überhaupt genannt wurde, würde die Ausführung zum Speicherplatz 0. springen Wie oben erwähnt, üblich, Lage haben war es 0 enthalten, eine Verzweigung zu Ort 0. Der 1130 würde an der Stelle 0 geklebt werden und die IAR Lichter auf der Konsole wäre völlig dunkel sein, so dass es klar, das Programm war gescheitert.
Anbindung an Bibliotheksroutinen
Für Unterprogramme, die oft genannt werden würde, war es wichtig, die Größe der einzelnen Anruf an ein Wort reduzieren. Solche "Bibliotheksroutinen" verwendet die LIBF Protokoll. Es war komplexer als die im vorherigen Abschnitt beschriebenen CALL-Protokoll, aber LIBF versteckt die Komplexität von dem Schriftsteller der Assembler-Sprache-Programm.
Bibliotheksroutinen wurden durch Indexregister XR3 gerichtet. XR3 wäre wies auf eine Sequenz von drei Worttransfervektoren, so dass der erste Eintrag würde -128 Wörter aus XR3 Wert sein. Der Programmierer würde die Bibliotheksroutine rufen Sie mit der Pseudo-Operation, die nicht unmittelbar an die Routine, sondern ein Ein-Wort-Index Verzweigungsanweisung, deren Verschiebung identifiziert den Beginn der Routine-Transfer-Vektor zusammengesetzt.
Der Transfervektor wurde durch die Verknüpfung loader vorbereitet, wenn es das Programm zusammen zu stellen. Ein Transfer-Vektor zu einer Bibliotheksfunktion namens SIMPL nahm dieses Formular:
Die Art und Weise SIMPL wusste, wo seine Absender-Adresse war ist, dass, wenn SIMPL wurden eine LIBF Routine deklariert, würde die Verknüpfung loader den Code SIMPL zu ändern, indem Sie die Adresse des SIMPL der Transfervektor Eintrag bei SIMPL + 2. LIBF Routinen, anders als CALL-Unterprogramme, die nicht mit einem DC-Richtlinie zu starten, um die Rückkehr-Adresse, aber mit eigentlichen Code zu halten, wie folgt:
Platzieren Sie die Adresse des SIMPL der Transfervektor an SIMPL + 2 ließ Raum für eine Ein-Wort-Befehl, um die ausgewählten Indexregisters, hier XR1 zu speichern. Dann werden die indirekten LDX Befehlspunkte XR1 nicht an der Transfervektor, aber durch sie, um die Rücksprungadresse, oder auf die in-line nach der BSI gespeicherten Parameter. SIMPL dann tut, was es wie folgt geschrieben zu tun ist, den Zugang zu allen in Zeilenparameter durch XR1 und kehrt:
Angenommen, ein LIBF Stil Aufruf SIMPL waren bei Adresse 100. Dann würde die Rücksprungadresse 101 sein, da ist ein Ein-Wort-Befehl. XR3 wird in die Gruppe der Transfervektoren zeigen. Wenn der Transfervektor für SIMPL begann an der Adresse 2000 dann würde das BSI mit zusammengesetzt werden, so dass ein XR3 + disp = 2000 Die Ausführung der BSI speichert 101 an der Position 2000 und springt zur Position 2001. In 2001 wäre ein Zwei-Wort lang sein zu springen, um den Eintrittspunkt SIMPL, die die Verknüpfung loader könnte bei der Adresse 300 gelegt haben.
Weitsprung die Steuerung an SIMPL. Nach der Anweisung in 300 Filialen XR1, der Befehl an 301 ist, die Verknüpfung mit loader platziert 2000 im Ort 302. Dies gilt nicht in XR1 laden 2000; es ist eine indirekte Anweisung und lädt den Inhalt von 2000, die 101, die Rücksprungadresse für diesen Anruf zu SIMPL ist.
Im oben gezeigt durch die Zeitsteuerung der Rückreihenfolge erreicht RETN, die Anweisung gibt es, die für den Anrufer zurück.
Wenn SIMPL nahm Parameter in-line nach der BSI-Befehl codiert, konnte SIMPL Zugang zu ihnen mit indizierter Adressierung off XR1 zu gewinnen. Die erste könnte durch die zweite erhalten werden, und so weiter. Wenn der zweite Parameter wurde die Adresse des aktuellen Parameters, würde seinen Wert zu erhalten. Vor der Rückkehr würde SIMPL XR1 letzten der n Parameter mit einer Anweisung wie beispielsweise, um den richtigen Wert zu RETN + 1 setzen inkrementieren.
Ein LIBF Routine, um den ursprünglichen Wert der XR1 wiederherstellen könnte die obigen Schritte auslassen und kehren mit einem einfach zu n in Zeilenparameter überspringen gesunken. Jedoch könnte eine solche Routine nicht durch andere LIBF Routinen aufgerufen, weil es würde die Verwendung XR1 des Anrufers für den Zugriff auf ihre eigenen Parameter und Rückgabeadresse zu stören.
Die Komplexität der LIBF spart Speicherplatz für Unterprogramme, die häufig genannt werden. Die LIBF Verbindung erfordert ein Wort pro Aufruf, plus drei Worte für die Übertragung Vektoreintrag und zusätzlichen Code in der Routine selbst, während die CALL-Bindung erfordert zwei Wörter pro Aufruf, weil die meisten Anrufe werden an eine Adresse außerhalb der -128 bis +127 Wort erreicht der Ein-Wort-Opcode.
Das Register XR1 müssen auf die Transfervektoren anstatt eine Dispatch-Tabelle der Adressen zeigen, denn dies würde erfordern, dass LIBF Routinen mit einem indirekten BSI Anweisung aufgerufen werden. Diese Anweisungen sind zwei Wörter lang, so dass eine solche Konstruktion die Codegröße Einsparungen LiBF negieren.
Code-Änderung
In den vorangegangenen Abschnitten zeigen, dass Code und Daten wurden vermischt. Es war üblich, die Adressfelder von Instruktionen zu modifizieren, und in der Tat, um die gesamten Anleitungen modifizieren.
Durch den Fortran Compiler
Der Fortran Compiler erzeugt selbstmodifizierenden Code beim Generieren von Code für jedes Unterprogramm, die Parameter hatte. Der Compiler erstellt eine Tabelle von jedem Ort, an dem das Unterprogramm referenziert eines seiner Parameter, und als die erste Anweisung im Körper des Unterprogramms erstellt ein Aufruf an Unterprogramm aufgerufen Subin, die die Tabelle, um ein verwendet, um das Adressfeld eines jeden Referenz ändern Parameter, um die tatsächliche Adresse des Parameters während des aktuellen Aufrufs sein. Subin machte diese Patches jedes Mal das Unterprogramm aufgerufen wurde.
Wenn ein Fortran-Programm namens ein Unterprogramm, die Adressen von beliebigen Parametern erschien in-line nach der Telefonkonferenz. Zum Beispiel kann die Fortran-Anweisung aufrufen SIMPL könnte in zu kompilieren:
Innerhalb des Unterprogramms, könnte Parameter durch indirekten indizierter Adressierung, wie oben in Variationen dargestellt ist, so daß ein Ganzzahlparameter könnte in den Akkumulator mit einer Anweisung wie folgt beladen werden aufgerufen werden:
Der Compiler stattdessen verwendet direkte Adressierung. Wenn Subin lief, wurde es mit der Adresse X und gepatcht die Anweisung zu werden:
Die Vorteile der Subin waren wie folgt:
- An die Adresse des Operanden zu erhalten, eine indirekte indexiert Befehls erforderlich drei Speicherzyklen, während die direkten Zugriffsbefehl nur eine benötigt.
- Wenn SIMPL waren zu einem seiner Parameter an jedem Unterprogramm, das erwartet, dass die Adresse des Parameters erhalten geben wurde Subin notwendig, um die tatsächliche Adresse des Original-Parameter angeben.
Die Nachteile Subin waren die Zeit, die erforderlich ist, um auszuführen und den Speicher für die Referenztabelle erforderlich. Die Grße dieser Tabelle war die Summe von 5, die Anzahl der Parameter, und die Anzahl der Referenzen; wenn diese Summe überschritten 511, würde Kompilierung fehlschlagen. Für Unterprogramme mit vielen Verweisen auf einen Parameter, kann der Autor des Unterprogramms den Parameter in eine lokale Variable zu kopieren.
Durch den Benutzer
Ändern Sie die gesamten Anleitungen war eine gängige Technik. Zum Beispiel, obwohl die 1130 hatte eine OR-Befehl, die Syntax der Fortran sofern keine Möglichkeit, sie zu schreiben. Eine Ganzzahl-Funktion IOR könnte festgelegt werden, so dass logisches ODER zu sein Teil einer Fortran Ausdruck wie:
Der Fortran Compiler die Adressen I und J in-line setzen und erwarten, dass das Ergebnis in den Akkumulator. Verwendung IOR in einem Fortran-Expression würde folgende vier Worte zu kompilieren:
In der Tat hat der Assembler IOR-Funktion nicht berechnen, I oder J überhaupt. Stattdessen ersetzt sie die oben erwähnten vier Wörter mit den folgenden:
Nach der Durchführung dieser Transformation hat es nicht über das Ende des Vier-Wort-Block zurückzukehren. Stattdessen verzweigt es um die genaue Adresse, aus denen sie ursprünglich aufgerufen wurde. Das BSI Anweisung war nicht mehr da; was war jetzt gab es die beiden Befehle es gerade geschrieben hatte. Sie kombiniert die zwei ganze Zahlen sind mit der Maschinensprache OR-Befehl und links das Ergebnis in dem Akkumulator, wie erforderlich.
Der Aufruf von IOR und die Umwandlung des Vier-Wort-Block passiert höchstens einmal pro Programmlauf. Wenn die oben dargestellten Fortran Linie wurden erneut durchgeführt, wäre es schneller laufen, als es das erste Mal tat. Für andere nützliche Operationen könnten ähnliche Funktionen entwickelt werden.
Eine Funktion, die selbstmodifizierten als IOR funktioniert, könnten nicht in einer Fortran-Unterprogramm auf einen der Parameter zu diesem Unterprogramm verwendet werden, da sie mit dem Unterprogramm Subin oben diskutiert unvereinbar ist. IOR Transformation seiner Vier-Wort-Aufrufsequenz, oben gezeigt, bewegt sich die Position der Adresse der Variable I auf nachfolgende Aufrufe der Fortran-Unterprogramm würde der Referenztabelle, um Parameter fehlerhaft sein und Subin würde das falsche Wort Patch, in Dieser Fall Anordnen der neuen Adresse von I über das ODER-Operationscode.
Große Fortran-Programme
Daten manipuliert werden und die Anweisungen, die sie manipuliert hatte, gemeinsam in Kernspeicher befinden. Die Größe des installierten Speichers war ein Schlüsselbegrenzung. Fortran bereitgestellt verschiedene Techniken, ungeachtet dieser Einschränkung große Programme zu schreiben.
Fortran lassen Sie kein Unterprogramm als "LOCAL" bezeichnet werden. Jede lokale Unterprogramm war ein Overlay; es wäre ein Teil des plattenresidenten ausführbaren Programms, sondern würde nur während der Zeit hieß es in Kernspeicher geladen werden. So zum Beispiel sechs lokalen Unterprogramme würde nur so viel Kernspeicher als der größte, sondern als den Gesamtbetrag für alle sechs erfordern. Jedoch konnte keines der sechs voneinander entweder direkt oder über zwischengeschaltete Unterprogramme aufzurufen.
Eine ganze Fortran-Programm könnte die Kontrolle auf eine spätere Phase passieren, Verlassen der Aufsicht mit einer Anweisung, um die Folgephase in Kernspeicher zu laden. Eine große Programm kann in drei Teile, die separat erstellt aufgeteilt werden, genannt PART1, PART2 und PART3. Hinrichtung durch gestartet werden und an einer geeigneten Stelle, würde PART1 die Fortran-Anweisung auszuführen und so weiter. Der Name des Nachfolgeprogramms in der Anruf konnte nicht variabel sein, aber die Programmlogik könnte regeln, ob Kontrolle wurde an eine andere Phase überführt, und die Anweisung ausgeführt wurde. Es wurde oben, dass der Fortran-Compiler selbst wurde so geschrieben, wobei jede Phase der Zusammenstellung von einem separaten Programm erreicht erwähnt.
Programme, wie Fortran Programmen, wohnte bei niedrigen Kernspeicheradressen. Fortran zugewiesenen Platz auf der höchsten Adressen für Variablen und Arrays deklariert COMMON. Wenn eine Folgephase des Programms enthielt einen entsprechenden gemeinsamen Erklärung, dann Informationen in diesem gemeinsamen Raum könnte unter Phasen geteilt werden. Phasen konnte der gemeinsamen Erklärung problemlos weglassen, sofern diese Phasen waren nicht so groß, um ihre Programmcode dringen in den gemeinsamen Raum. Zusammenlagerungs nicht nur gemeinsam genutzte Daten zwischen den Phasen; niedrigerer Speicher COMMON-Variablen verwendet werden, um Daten zwischen einem Hauptprogramm und Unterprogramme in einer einzigen Phase übergeben, auch wenn die Daten könnten über den Beginn der nächsten Phase verloren.
Programmierbeispiele
Die Beispiele finden Sie auf der IBM 1130-Emulator an IBM 1130.org ausgeführt werden.
Beispiel Assembler-Programm Deck
Die folgende Auflistung zeigt einen Kartenstapel, die kompiliert und läuft ein Assembler-Programm, das ein Kartenspiel mit dem Zeilendrucker führt.
Der folgende Code Copyright 2006 Kym Farnik. Code veröffentlicht unter MIT-Lizenz. Siehe: Diesen Job, verlässt der Monteur das Ergebnis ihrer Montage im Zwischenbereich der Systemfestplatte, und der Befehl XEQ führt den Inhalt des temporären Bereich. Die seltsam aussehenden hat zwei Bedeutungen: Ende des Assemblerquelle und den Namen der Einstiegspunkt der Routine, die das Label START hat.
Assembler Quelle beginnt mit Spalte 21 der Karte, nicht Spalte eins. In Systemen ohne Diskettenlaufwerk würde die Assembler-Code in den Beginn des Karten Punsch gerade gelesen, und lesen Sie dann die nächste Karte. Nach vorne zu hand Zweigen und dergleichen, zweiten Durchgang des Assemblers buchstäblich Beteiligten einen zweiten Durchlauf der Karten durch den Leser / Punsch. Und sollten Sie das Quelldeck ändern müssen, Sie müssten, um die Karten zu duplizieren, um ein Deck mit Leerzeichen am Anfang für den nächsten zu erhalten versuchen, durch den Monteur.
Vereinbarungsgemäß werden Puffer durch eine Wortzahl voraus. Das Zusammenfügen von Zählungswort und die folgende Rück die erforderliche Anzahl von Wörtern für den Puffer. Der Kartenpuffer erfordert 80 Wörtern, einen für jeden Karten Spalte. Treiber card0 liest jede Karte Spalte wörtlich unter Verwendung von 12 der 16 Bits im Puffer Wort zu beschreiben, ob es einen Durchschlag in der entsprechenden Reihe der betreffenden Spalte. Das Muster von Stempeln beschreibt in der Regel ein Textzeichen mit der Hollerith-Code. Die Konsole Tastatur gibt auch Eingang in das Programm in der Hollerith-Code.
Der Drucker Routine arbeitet jedoch mit Text in 8-Bit-EBCDIC mit zwei Zeichen pro Wort, die eine 40-Wort-Puffer. Das Programm verwendet Bibliotheksroutine Zipco, um die Konvertierung durchzuführen. Das wird nicht ausgeführt, da HLEBC ist kein Unterprogramm, sondern eine von IBM gelieferte Hollerith-to-EBCDIC-Konvertierung Tabelle. Die CALL-Anweisung stellt die Adresse der Tabelle Zipco und stellt sicher, dass die Verknüpfung loadeer enthält die Tabelle in dem Programm, so ist es der fünfte Parameter Zipco. Nach der Umwandlung, sendet das Programm die konvertierte Ausgabe, jetzt in Puffer PBUFF, an den Drucker über den Treiber PRNT1. Auch hier springt das Programm, bis der Druckertreiber Berichte Abschluss, dann liest das Programm die nächste Karte.
Dieses Beispiel enthält keinen Code, um zu entscheiden, wann man aufhören. Ein vollständigeres Programm würde für Karten, die von Anfang an, was den Start des nächsten Job bezeichnet überprüfen. Um den Kartenleser so bald wie möglich zu beenden, könnte ein Programm für die Hollerith Code, bevor auch die Umwandlung der Karte an EBCDIC zu überprüfen.
Der Aufruf card0, um eine Karte zu lesen, dass die Operation initiiert und zum Aufrufer zurückkehrt, die mit anderen Aktivitäten fortzufahren könnten sofort. Macht das Beispielprogramm jedoch keinen Versuch, Eingabe und Verwendung von Ausgangspuffer überlappen; es Schlaufen einfach zurück zu CIMP von neuem zu testen. Nach card0 hat betriebs komplette Unterbrechung des Kartenlesers erfasst wird, ein Wort gibt sie weiter, damit das Überspringen der Sprung zurück zu CIMP und Verlassen der Schleife.
Die Beispielprogramme laufen nicht die I / O-Geräte auf Hochtouren. Bemerkenswert ist, wird der Kartenleser, nur wenige Millisekunden nach der Meldung Abschluss auf eine Karte zu lesen, dessen Anschlagfolge, nach der ein neuer Lesebefehl wird warten müssen, um eine andere Lesezyklus einleiten zu beginnen. Der IBM 1402-Leser konnten 400 Karten / Minute bei voller Geschwindigkeit zu lesen, aber nur ein wenig Zurückhaltung in den Lesebefehle würde den Durchsatz oder schlechter zu halbieren. Eine Fortran-Programm konnte nicht einmal füllen die einfachste Eingangsverarbeitung in der Zeit, und so keine Karten mit voller Geschwindigkeit lesen konnte. Ein gemeinsames Fortran-Schleife, um Karten zu lesen, machte den Motor stoppen und starten Sie so häufig wie den Verschleiß beschleunigen. Mit Pufferung könnte der Kartenleser Steuerung mit Verarbeitung überlappen, und der Leser kann mit voller Geschwindigkeit durch die großen Daten Decks ausgeführt werden, aber Speicher für die komplexeren Programms und für Puffer war oft mit einer Prämie.
Selbst mit Assembler und Double-Buffering, ein Programm zur Liste ein Kartenspiel aus dem IBM 2501-Reader auf dem Zeilendrucker konnte nicht mithalten, wie die Übersetzung aus dem Kartenlochmuster in EBCDIC für den Drucker wie EBPRT getan war zu langsam; anstelle der komplexeren Zipco und HLEBC benötigt wurden, wie im Beispiel.
Beispiel Fortran IV-Programm Deck
Die folgende Auflistung zeigt einen Kartenstapel, die kompiliert und läuft ein Fortran-Programm und Fortran-Unterprogramm für den IBM 1130, als DM2 läuft.
Probe APL \ 1130-Sitzung
Die folgende Abbildung zeigt ein einfaches APL \ 1130-Sitzung. Diese Sitzung wurde über die 1130-Simulator von IBM 1130.org geführt
Die oben Sitzung zeigt eine Anmeldung, Addition der ganzen Zahlen 1 bis 100, die Erzeugung einer Additionstabelle für die ganzen Zahlen 1..5 und ein Zeichen aus.
Einfluss des 1130
- Brian Utley war die 1130s Project Manager bei seiner Entwicklung und Einführung. Brian sagte bei der dritten Partei, dass vor 30.11 IBM-Marketing mit dem Namen der 1130 wurde sie als kleines Ingenieurcomputersystem oder SECS bekannt. Die anfängliche Architektur war 18 Bit wurde jedoch auf 16 Bits wegen des Einflusses des System / 360 Entwicklung verändert. Der vollständige Dialog seiner 2005-Präsentation ist auf IBM1130.org erhältlich.
- Bemerkenswerte Software-Designer Grady Booch bekam seine erste Begegnung mit der Programmierung auf einem IBM 1130:
- LISP-Guru Guy Steele schrieb eine LISP Interpreter für die IBM 1130, als er in der High School war. Sein Code und Dokumentation für LISP 1.6, zusammen mit einer Zusammenfassung der aktuellen Arbeit bekommen es unter Simulation ausgeführt, ist IBM1130.org erhältlich.
- Chuck Moore wollte seine neue Sprache als "Vierte", aber das Betriebssystem IBM 1130 wurde zu fünf-Charakternamen beschränkt, so dass es aufgewickelt wird hervorgerufen.
- Dan Bricklin, der Schöpfer der VisiCalc Programm, begann seine Karriere in der Programmierung als er erfuhr, und verwendet die IBM 1130 als Teil der National Science Foundation Computer / Mathematik Sommerprojekt für Schülerinnen und Schüler, an der Universität von Pennsylvania im Jahr 1966 gegeben.
- Ein IBM-1130 mit 8 kilowords der Kern wurde für die weltweit erste Vollzeit-Suche nach außerirdischer Intelligenz Forschung an der Ohio State University Radio-Observatorium benutzt.
- Charles Goldfarb, der Vater von SGML beschreibt einen Job Installation eines Satzsystem basierend auf einem IBM 1130, dass "änderte schließlich meiner Karriere", treibt ihn in Richtung generische Markup:
- Alan Kay verwendet die IBM 1130 Anfang GUI Arbeit für seinen Ph.D. Diplomarbeit im Jahr 1969.
- Hutchinson Zentral Technical High School in Buffalo, NY verwendet die IBM 1130 in ersten 4 Jahre Informatik-Lehrplan der Nation im Jahr 1969. Robert santuci wurde die Informatik-Programm Kopf und unterrichtete in der Programmierung und induktiven Logik.
Apocrypha
Spekulationen darüber, warum das Produkt wurde die Zahl 1130 zentriert auf den folgenden Möglichkeiten gegeben:
- Dass, da die 1130 war eine kleine wissenschaftliche Maschine, die Zahl wurde durch Multiplizieren 360 von π gewählt.
- Das 11.30 war die Zeit der Tag, an dem Produktplaner in eine Sackgasse geraten, was in Bezug auf das Produkt nennen.
- Dass der 1130 war IBM 11. Computer-Design, und es hatte 30 Anweisungen.
Andere haben spekuliert, dass die Existenz des IBM 1130 erklärt, warum kein Computer mit "11/30" überhaupt in der PDP-11-Familie von Maschinen erschienen.
Kommentare - 0