Die Programmierung des Hohner-Computer 9000 Magnetplattensystems

Jürgen Held links 1975 bei der Hohner-Weihnachtsfeier, rechts 2021

Dieser Beitrag entstand gemeinsam mit Jürgen Held, der ab 1970 als Programmierer bei Hohner in der Vertriebsstelle in Kassel arbeitete. Da er ursprünglich eine Ausbildung zum Maschinenschlosser absolviert hatte, eignete er sich die Programmierkenntnisse zunächst in Kursen an. Ab 1971 war er dann einer der ersten Entwickler von Anwendungsprogrammen für das neue System 9000 mit Festplatte.

Jürgen Held blieb bis Mitte 1976 bei Hohner. Nach einer einjährigen Weiterbildung zum Organisationsprogrammierer und DV-Organisator arbeitete er viele Jahre mit Computern der Firma CTM-Systeme.

Projektmanagement

Ansprechpartner der Kunden waren immer die Händler vor Ort. Deren Verkäufer machten zunächst eine grobe Ist-Aufnahme der Anforderungen. Sie taten sich am Anfang sehr schwer damit, die Anforderungen für ein Magnetplattensystem zu begreifen.

In der Regel übernahm die Organisation, Programmierung und Einführung in das System ein erfahrener Programmierer und wurde evtl. von einem Kollegen unterstützt.

Die Händler waren demzufolge eher das, was man heute als "Systemhaus" bezeichnet. Sie verkauften nicht nur die Hardware, sondern hatten auch die Kapazitäten, um die zugehörige Anwendungssoftware dafür zu entwickeln. Diese wurde dann vor der Auslieferung auf der Kundenanlage vorgeführt und getestet.

Um mit der technischen Entwicklung schrittzuhalten mussten die Mitarbeiter der Händler sich für jede neue Systemgeneration weiterbilden. Um einen Programmierer fit zu machen für das System 9000, genügte eine ca. einwöchige Schulung, die bei GDC in Kassel angeboten wurde.

Ein System 9000 kostete typischerweise etwa 100000 DM.

Die Entwicklungsumgebung

Programme wurden zunächst auf Papier in einem dafür vorgesehenen Formular als Maschinensprache von Hand geschrieben. Dabei wurden die 20 Bit jedes Befehls in Form von 5 Hexadezimalziffern in die Spalten ganz rechts eingetragen. Das auf diese Art ausgearbeitete Programm wurde dann über die Zehnertastatur des Computers eingegeben und dort im "Lebendspeicher" (RAM) abgelegt.

Dort konnte es dann direkt ausgeführt werden. Das Debugging unterstützte dabei ein sogenanntes "Testtableau", das im obigen Bild zu sehen ist. Damit konnte man einen Programmstopp (Breakpoint) einstellen, also eine Adresse, an der das Programm angehalten wurde. Über die Bedienelemente des Testtableau konnte man dann den Speicher untersuchen und so herausfinden, ob das Programm so funktioniert, wie es soll. Das Testtableau kostete etwa 4000 Mark.

Die Programme wurden jeweils im Kundenauftrag individuell erstellt. Dabei liefen die Programme bei den älteren Systemen direkt auf der Hardware. Ein Betriebssystem im heutigen Sinne gab es nicht. Das änderte sich beim System 9000. Die Magnetplatte erforderte eine komplexe Ansteuerung, die über eine Reihe von fertigen Programmroutinen bereitgestellt wurde. Diese wurden dann von den Anwendungsprogrammen genutzt - heute würde man das als "API" des Betriebssystems bezeichnen.

Programme ausliefern

Programmodul
Detailansicht

Das fertige Programm konnte beim System 9000 auf der Magnetplatte gespeichert und von dort ausgeführt werden.

Bei den Vorgängersystemen ohne Magnetplatte wurden fertige Programme "gefädelt". Ein gefädeltes Programm war in einem Modul untergebracht, das dann in den jeweiligen Computer eingeschoben werden konnte. Somit konnte ein Computer auch schnell von einem auf ein anderes Programm umgebaut werden.

Im Bild ist so ein Modul zu sehen. Auf der rechten Seite befindet sich die Speichermatrix, bestehend aus Ferritringen. Jede Zeile der Matrix besteht aus 20 Ringen, weil die Befehlsworte 20 Bit groß sind. In jeder Zeile gibt es 32 (?) horizontal verlaufende Drähte. Jeder gehört zu einem gespeicherten Befehl. Ist ein Bit 1, so wird der Draht duch den Ring hindurchgeführt, ist das Bit 0, so geht der Draht am Ring vorbei.

Um nun einen Befehl auszulesen, lässt man durch den zugehörigen horizontalen Draht einen Strom fließen. Dort, wo der Draht durch einen Ring hindurchgeht, wird dieser magnetisiert und induziert in einer vertikal durch die Ringe verlegten Leseleitung eine Spannung, die gemessen werden kann. Wo der Draht am Ring vorbeigeht, entsteht keine Spannung.

Das abgebildete Modul hat 16 Zeilen und fasst daher 16 x 32 = 512 Befehle.

Das Fädeln eines Programmes musste in Handarbeit und mit äußerster Sorgfalt gemacht werden.

So ganz konnte auch beim System 9000 nicht auf ein gefädeltes Programm verzichtet werden. Das Betriebssystem wurde in dieser Form mitgeliefert.

Die Aufgaben

Während Magnetkontencomputer fast ausschließlich für die Buchhaltung eingesetzt wurden, war das System 9000 deutlich vielfältiger verwendbar. Es kam daher in den unterschiedlichsten Unternehmen zum Einsatz. Herr Held erinnert sich noch an Steuerberater, die Krögerwerft in Rendsburg und die Großbäckerei Flüggebrot aus Kiel als Kunden.

Man konnte den Magnetplatten-Computer beispielsweise für Aufgaben nutzen, die man heute mit einem ERP-System erledigt. Die Anwendung gliederte sich dabei in zahlreiche Programme, die jeweils eine Aufgabe erledigten. Das war der Tatsache geschuldet, dass der Lebendspeicher nur 4000 Maschinesprachebefehle fasste. So ein Programm konnte also z.B. der Pflege von Kunden- oder Artikelstammdaten dienen, eine Fakturierung durchführen oder die Finanzbuchhaltung erledigen.

Die Computer hatten noch keinen Bildschirm, dafür aber oberhalb der Tastatur ein doppeltes Druckwerk. Eines davon wurde zur Bedienerführung genutzt. Trozdem musste der Anwender viele Arbeitsschritte ohne direktes Feedback quasi "blind" ausführen, z.B. den Start des gewünschten Programms. Erst danach konnte das Programm durch gedruckte Anweisungen eine rudimentäre Bedienerführung gewährleisten. Während der Arbeit am Computer entstand so ein gedrucktes Protokoll aller Bedienschritte. Das zweite Druckwerk konnte dann z.B. zum Druck von Rechnungen oder anderen Belegen verwendet werden.

Die Technik

Magnetplatte:

Die Datenhaltung der Programme und auch die Speicherung der Programme selbst erfolgte beim System 9000 auf der Magnetplatte. Ein Dateisystem im heutigen Sinne gab es allerdings noch nicht. Die Daten wurden in Form von Datensätzen variabler Länge gespeichert. Dabe wurde allerdings darauf geachtet, dass eine ganzzahlige Anzahl von Datensätzen auf eine Spur der Magnetplatte passte, weil Datensätze nicht spurübergreifend gespeichert werden konnten und man keinen Platz verschenken wollte. Jeder Datensatz hatte eine zwanzigstellige Identifikation. Alle Datensätze wurden dabei mit aufsteigender Identifikation auf der Platte abgelegt. Einen Datensatz einzufügen führte dabei dazu, dass der gesamte dahinter befindliche Magnetplatteninhalt verschoben werden musste, um Platz zu schaffen. Das konnte schon mal Stunden dauern.

Dem Magnetplattensystem war dabei der Inhalt der Datensätze egal. Um z.B. Kunden-, Artikel- und Rechnungsdaten sauber zu trennen, wurde mit Nummernkreisen gearbeitet. Veränderliche Daten landeten dabei möglichst weit hinten auf der Platte.

Die Magnetplatteneinheit wurde von der Firma DFE (Didic Frech Elektronik) für Hohner entwickelt. Das Unternehmen hatte seinen Sitz in Blankenloch, das heute Stadtteil von Stutensee in der Nähe von Karlsruhe ist.

Mit der Magnetplatte entstand auch die Notwendigkeit einer Datensicherung. Allerdings hatte die Magnetplatte gemessen an anderen verfügbaren Speichermedien eine erheblich höhere Kapazität. Bei der GDC wurde daher ein Sicherungsverfahren ausgeknobelt. Dabei machte man sich zunutze, dass die Magnetplatteneinheit aus einer Festplatte mit 5 MB Kapazität und einem Wechselplattenlaufwerk gleicher Kapazität bestand. Um nun eine Fest- und eine Wechselplatte zu sichern, benötigte man zwei weitere Wechselplatten. Nun wurde

  • zuerst die Festplatte auf eine der beiden leeren Wechselplatten kopiert.
  • Dann die zu sichernde Wechselplatte auf die Festplatte, deren vorheriger Inhalt dabei überschrieben wurde.
  • Danach dann der Festplatteninhalt auf die zweite leere Wechselplatte.
  • Und zu guter letzt dann der Inhalt der ersten Sicherungs-Wechselplatte zurück auf die Festplatte.

Magnetkonten:

Wurde der Computer als Buchungsmaschine eingesetzt, war eine Magnetkonteneinheit erforderlich. Buchhalter verwenden für Ihre Arbeit seit jeher Kontoblätter. Auf diesen tragen sie Einnahmen oder Ausgaben (Haben / Soll) des Unternehmens ein, rechnen die einzelnen Positionen zusammen und bestimmen so den neuen Saldo. Früher wurde dies manuell gemacht. Ein Magnetkonto ist ein aus leichtem Karton gefertigtes Kontenblatt, meist in DIN A4-Größe. Auf der Rückseite des Blattes befindet sich am Rand ein Magnetstreifen. Auf diesem ist u.a. der letzte Saldo gespeichert und bis wohin das Kontenblatt bereits beschrieben ist. Werden nun Positionen über die Tastatur eingegeben, werden diese automatisch mit dem vom Magnetstreifen gelesenen Saldo verrechnet, die Daten auf das Kontenblatt gedruckt und der neue Saldo auf den Magnetstreifen geschrieben. Das reduziert die erforderlichen Bearbeitungsschritte und macht sie weniger fehleranfällig.

Lochstreifen und Lochkarten:

Lochkarten hatten ihren Ursprung in den elektromechanischen Tabelliermaschinen, die in den 70er Jahren noch weit verbreitet waren. Die mittlere Datentechnik wurde häufig genutzt, um Tabelliermaschinen abzulösen und allene deswegen mussten Lochkarten einlesbar sein.

Lochkarten bestehen aus einem Stück Karton in genormter Größe und mit einem genau definierten Bereich, in dem Löcher platziert werden. Dadurch haben Lochkarten auch eine bestimmte Kapazität von meist 80 oder 128 alphanumerischen Zeichen oder Ziffern. Sie sind gut geeignet für Daten, die aus Datensätzen bestehen.

Für beliebig strukturierte Daten wie z.B. Programmcode ist ein Lochstreifen besser geeignet.

Für Lochkarten gab es mechanische Datenerfassungsgeräte, aber auch frühe Bildschirmterminals konnten Daten auf Lochkarten schreiben. Damit waren Lochkarten und Lochstreifen ein praktisches Datenaustauschformat für kleine Datenvolumen.

Die Maschinensprache des System 9000

Die Hohner-Computer waren eine Eigenentwicklung, wurden also von keinem anderen System abgeleitet. Die Maschinensprache aller Systeme war grundsätzlich gleich, allerdings jeweils um Befehle für die systemspezifischen Hardwarekomponenten erweitert. Dadurch war der fertige Code immer nur auf der Maschine lauffähig, für die er entwickelt worden war. Bei einem Umstieg auf ein anderes Hohner-System musste die Software daher komplett neu erstellt werden.

Die Hohner-Computer implementieren eine Harvard-Architektur, bei der (im Gegensatz zur populäreren Von-Neumann-Architektur) Befehle und Daten in getrennten Speichern aufbewahrt werden und auch jeweils eine eigene Adressierung haben.

Das System 9000 arbeitet mit 20 Bit langen Befehlsworten, die jeweils in einen 8 Bit langen OP-Teil und einen 12 Bit langen AD-Teil aufgeteilt sind. "OP" steht dabei für "Operation", d.h. dass der OP-Teil den auszuführenden Befehl definiert. "AD" steht für Adresse. Dieser Teil des Befehls wird nochmals in drei mal vier Bit unterteilt, "l", "m" und "r" (links, Mitte, rechts) genannt.

Bemerkenswert ist die wechselnde Funktion von l, m und r. Dadurch der Prozessor nicht eindeutig als 1-, 2- oder 3-Adressmaschine definierbar. Gegenüber modernen Prozessoren ist auffällig, dass Peripheriegeräte wie Drucker, Konteneinzugsgeräte oder Massenspeicher direkt mit Maschinensprachebefehlen angesprochen werden können. Das System 9000 konnte also zum Teil mit einem Maschinensprachebefehl Funktionen auslösen, für die ein moderner PC Dutzende Befehle, das Betriebssystem und Treibersoftware benötigt.

Der Arbeitsspeicher ist in Worten zu je 4 Bit organisiert. So ein Wort kann im BCD-Format eine Dezimalziffer speichern. Sechzehn Worte fassen also eine 16stellige Dezimalzahl und werden als "Register" bezeichnet. In der Maschinensprache gibt es bei den Arithmetikbefehlen jeweils Quell- und Zielregister als Parameter. Die Befehle gibt es jeweils in einer Variante mit 8 Bit großer Quellregister- und 4 Bit großer Zielregisteradresse und umgekehrt mit 4 Bit großer Quellregister- und 8 Bit großer Zielregisteradresse. Da man mit 4 Bit nur Zahlenwerte von 0 - 15 darstellen kann, haben die ersten 16 Register (also 16 x 16 x 4 Bit = 128 Byte) eine besondere Rolle, weil immer entweder Quelle oder Ziel einer Operation eines dieser Register sein muss. Mit 8 Bit kann man Zahlen von 0 - 255 darstellen und hat damit Zugriff auf die ersten 256 Register (also 256 x 16 x 4 Bit = 2048 Byte). Sofern der Arbeitsspeicher größer als 2 KiB ist, kann er vom Computer nicht mehr direkt adressiert werden.

Es gibt die folgenden Befehle:

OP- und AD-Teil sind jeweils Hexadezimal angegeben.

BefehlOP-TeilAD-TeilErläuterung
lmr
Leerbefehl
LER0.0001Leerbefehl, wird ohne Auswirkung durchlaufen
Transportbefehle
ERN0.1ZRNKSEingabetransport (?)
NKS = Nachkommastellen
TR0.2ZRQRTransfer QR -> ZR
TR0.3QRZRTransfer QR -> ZR
Arithmetik
ADD0.4ZRQRZR = QR + ZR
ADD0.5QRZRZR = QR + ZR
MIN0.6ZRQRZR = ZR - QR
MIN0.7QRZRZR = ZR - QR
MUL0.8ZRQRAKKU = QR x ZR
MUL0.9QRZRAKKU = QR x ZR
DIV0.AZRQRAKKU = ZR / QR
DIV0.BQRZRAKKU = ZR / QR
VGV0.CZRQRVergleiche Register
VGV0.DQRZRVergleiche Register
VGN0.ER0Vergleiche Register mit Null
LOR0.FR0Lösche Register
VZW0.FR1Vorzeichenwechsel im Register
RSR1.0RnRechtsshift des Registers um n Stellen
LSR1.1RnLinksshift des Registers um n Stellen
LSV1.2RnLinksshift des Registers um n Stellen
Abweichende Überlaufbehandlung
RU11.3RnRundung des Registers auf die n. Stelle
RU21.4RnRundung des Registers auf die n. Stelle
Rundung auf 5: 0-2 ab, 3-7 auf 5, 8-9 auf
RP11.5RnInkrementieren der n. Stelle des Registers
Konstantentransporte
KA1.6WertAKKU = Wert
SOA1.7AddrSubstituierter OP-Teil nach Akku
AKKU = OP-Teil des Befehls an der angegebenen Adresse
SAA1.8AddrSubstituierter AD-Teil nach Akku
AKKU = AD-Teil des Befehls an der angegebenen Adresse
SBA1.9AddrSubstituierter Befehl nach Akku
AKKU = Befehl an der angegebenen Adresse
Datenspeicherprogrammierung
SD1.AAddrSpringe in Datenspeicher
Programm wird an Adresse im Datenspeicher fortgesetzt
SF1.BAddrSpringe in Festwertspeicher
Programm wird an Adresse im Festwertspeicher fortgesetzt
Unterprogrammsprünge
SR1.CAddrSpringe in Unterprogramm
SH1.DOffsetSpringe zurück ins Hauptprogramm
Der Offset bezieht sich auf gespeicherte Rücksprungadresse
Vorbefehle
PAV1.EnPufferanfang-Vorbefehl
Definiert, wie viele 4-Bit-Worte (0 - 511) vom Magnetstreifen gelesen oder auf ihn geschrieben werden sollen.
ZVK1.EnZähler-Vorbefehl
Bei einem nachfolgenden LEK-Befehl sollen n Zeichen überlesen werden
AVK1.EAddrAdress-Vorbefehl
Bei einem nachfolgenden Befehl LOK, LMK, LIK, LAK oder LHK soll ab der Adresse aus dem Kartenpuffer gelesen werden.
Sprungbefehle
SP2.0AddrUnbedingter Sprung zur Adresse
S12.1AddrSprung zur Adresse, wenn M1 == 1
S22.2AddrSprung zur Adresse, wenn M2 == 1
S32.3AddrSprung zur Adresse, wenn M3 == 1
S42.4AddrSprung zur Adresse, wenn M4 == 1
S52.5AddrSprung zur Adresse, wenn M5 == 1
S62.6AddrSprung zur Adresse, wenn M6 == 1
S72.7AddrSprung zur Adresse, wenn M7 == 1
S82.8AddrSprung zur Adresse, wenn M8 == 1
S92.9AddrSprung zur Adresse, wenn M9 == 1
SC2.AAddrSprung zur Adresse, wenn MC == 1
SK2.BAddrSprung zur Adresse, wenn MK == 1
SU2.CAddrSprung zur Adresse, wenn MU == 1
Indexabhängige Sprungbefehle
SIG2.DWertSprung zum übernächsten Befehl, wenn IDX >= Wert
SIK2.EWertSprung zum übernächsten Befehl, wenn IDX <= Wert
SIU2.FAddrSprung zur Adresse, wenn IDX <> 0
Indexbefehle
IVG3.01mrVergleich der Indexregister m und r
IKP3.020rKomplementiere Indexregister r
IAD3.03mrIndexregister addieren: IDX.m = IDX.m + IDX.r
ILS3.04mnIndexregister m um n Stellen nach links schieben
ILZ3.05mnIndexregister m um n Stellen nach links rotieren
ITR3.1QRZRIndexregistertransport ZR = QR
Für QR gibt es eine spezielle Codierung
ISP3.2AddrSubstituierter OP-Teil nach Indexregister
IDX = OP-Teil des Befehls an der angegebenen Adresse
ISA3.3AddrSubstituierter AD-Teil nach Indexregister
IDX = AD-Teil des Befehls an der angegebenen Adresse
IK3.4WertIDX = Wert
IP13.5001IDX = Position von Drucker 1
IR3.6nRpIndex rechts laden
n: 1-4: 1-4 Dezimalstellen transportierend, 9-C: 1-4 Dezimalstellen addierend
R: Register
p: Registerposition
IM3.7nRpIndex Mitte laden
IL3.8nRpIndex links laden
DEZ3.9nRpDezimalwandlung aus Index
Vorbefehle
SVB3.AAddrSchreibmaschinen-Vorbefehl für SMF, SA1, SMK, DT,LT und DLT
Absolute Anfangsadresse
DVB3.BFarbenDruckvorbefehl für DZ, LZ, DLZ, DT, LT und DLT
Farbe: 8=Rot, 4=Schwarz
n: Anzahl Zeichen
DVB3.BFarbeDSU0Druckvorbefehl für SVB und SMF
Farbe: 8=Rot, 4=Schwarz
DSU: bis DSU-Stelle. 0 => 255, 1 => 511, 3 => 1023, 7 => 2047, F => 4095
[...]
Programmbefehle
PZL3.EAddrProgrammzähler mit Adresse der PPT-Angabe laden (000-00F)
WRT3.F0BedingungWarte auf Bedingung (Bedingungen separat definiert)
MES3.FMBedingungSetze Merker gemäß Bedingung (Bedingungen separat definiert)
Funktionsbefehle
SMF4.01PosSchreibmaschinenfreigabe ab aktueller Kugelkopfposition
Pos: rechte Begrenzung
SA14.03Posdito mit Stanzen von Lochstreifen und Streifenkarten
SMK4.05Posdito mit Stanzen von Lochkarten
TB14.11PosTabulation Drucker 1 an Pos
KVS4.2000Streifenkartenvorschub bis zum Führungsloch
DZ4.21CodeDrucke Zeichen mit angegebenem Code auf Drucker 1
LZ4.22CodeLoche Zeichen mit angegebenem Code
DLZ4.23CodeDrucke und Loche Zeichen mit angegebenem Code
DT4.3OffsetTyp1Drucke aus Tabelle auf Drucker 1
Offset 0-2 gegenüber mit SVB angegebener Adresse
Typ: 0: Alpha aus Festwertspeicher, 1: Hex aus Festwertspeicher, 2: Alpha aus Datenspeicher, 3: Hex aus Datenspeicher
LT4.3OffsetTyp2Loche aus Tabelle
DLT4.3OffsetTyp3Drucke und Loche aus Tabelle
UMS4.4AddrUmspeicherungsbefehl Monitor
PRÜ4.5R0Prüfziffer des Registers berechnen und im R6 links der KGA abstellen
HEX4.60AddrDrucke Hex ab Adresse
Befehle für die Konteneinzugsgeräte 68 und 70
Zi14.75nZeilenschaltung 1. Schacht um n Zeilen
Zi24.76nZeilenschaltung 2. Schacht um n Zeilen
ZiB4.77nZeilenschaltung beide Schächte um n Zeilen
Si14.79nStanzung 1. Schacht n Mal
Si24.7AnStanzung 2. Schacht n Mal
SiB4.7BnStanzung beide Schächte n Mal
EM14.81nEinzug mit Schuppe 1. Schacht mit Zeilenposition n
EM24.82nEinzug mit Schuppe 2. Schacht mit Zeilenposition n
EMB4.83nEinzug mit Schuppe beide Schächte mit Zeilenposition n
EO14.85nEinzug ohne Schuppe 1. Schacht mit Zeilenposition n
EO24.86nEinzug ohne Schuppe 2. Schacht mit Zeilenposition n
EOB4.87nEinzug ohne Schuppe beide Schächte mit Zeilenposition n
Ai14.89nAuswurf 1. Schacht, n: Positionsangabe
Ai24.8AnAuswurf 2. Schacht, n: Positionsangabe
AiB4.8BnAuswurf beide Schächte, n: Positionsangabe
Magnetkontenbefehle
EML4.85nEinzug mit Lesen, n: Positionsangabe
EMV4.85nEinzug mit Vergleichslesen, n: Positionsangabe
AMS4.89nAuswurf mit Schreiben, n: Positionsangabe
Programmbefehle
SUB4.9AddrSubstitution. Befehl an der angegebenen Adresse wird ersatzweise ausgeführt
Druckregisterbefehle
DD4.AnpDrucke aus Druckregister mit n Nachkommastellen ab Position p
LD4.Bn00Loche aus Druckregister mit n Nachkommastellen
DLD4.CnpDrucke und loche aus Druckregister mit n Nachkommastellen ab Position p
Datenspeichererweiterung
HRA/AHR4.DAddrfür Einsatz bei 4K 20-Bit-Speicher, muss durch BVB vorbereitet werden
HRA/AHR4.EAddrfür Einsatz bei 4K 12-Bit-Speicher, muss durch BVB vorbereitet werden
HRA/AHR4.FAddrfür Einsatz bei 4K 4-Bit-Speicher, muss durch BVB vorbereitet werden
Befehle für Lochstreifen und Lochstreifenkarten
LNZ5.1lRnLese n numerische Zeichen ins Register R. l: 0 oder 1
BEK5.1200Bringe eine Karte in die Lesestation
BEK5.12CodeBewege Karte oder Datenträger zum codierten Zeichen
WFK5.1300Werfe Karte aus der Lesestation
WFK5.13CodeWerfe Karte aus der Lesestation bis zum codierten Zeichen
LPA5.1onSchreibe n Alphazeichen "0" in den Puffer ab der zuvor mit SVB bestimmten Position.
o: Offset 4 => 0, 5 => 1, 6 => 2
LPH5.17nSchreibe n Hexzeichen "Null" in den Puffer ab der zuvor mit SVB bestimmten Position.
LNO5.20RnLese numerisch ohne Vorzeichen n Zeichen nach Register R
LNM5.21RnLese numerisch mit Vorzeichen n Zeichen nach Register R
LIE5.22R0Lese ein Zeichen im effektiv gelochten Code ins Indexregister Rnach Register R
LIA5.23R0Lese ein Zeichen im DZ-Code ins Indexregister Rnach Register R
LAP5.2onLese n Alphazeichen in den Puffer ab der zuvor mit SVB bestimmten Position.
o: Offset 4 => 0, 5 => 1, 6 => 2
LHP5.27nLese n Hexzeichen in den Puffer ab der zuvor mit SVB bestimmten Position.
LOK5.30RnLese numerisch ohne Vorzeichen n Zeichen aus dem Kartenpuffer nach Register R
LMK5.31RnLese numerisch mit Vorzeichen n Zeichen aus dem Kartenpuffer nach Register R
LEK5.32nLese n Zeichen einer Karte in den Kartenpuffer
LiK5.33R0Lese ein Zeichen aus dem Kartenpuffer nach Indexregister R
LAK5.3onLese n Alphazeichen aus Kartenpuffer in den Zielpuffer.
o: Offset 4 => 0, 5 => 1, 6 => 2
LHK5.37nLese n Hexzeichen aus Kartenpuffer in den Zielpuffer.
Befehle für Lochkarten mit IBM 024 und 026
LKO5.40RnLese numerisch ohne Vorzeichen n Zeichen von der Karte nach Register R
LKM5.41RnLese numerisch mit Vorzeichen n Zeichen von der Karte nach Register R
LKi5.43R0Lese ein Zeichen ab der aktuellen Kartenposition nach Indexregister R
LKA5.4onLese n Alphazeichen ab der aktuellen Kartenposition in den Zielpuffer.
o: Offset 4 => 0, 5 => 1, 6 => 2
LKH5.47nLese n Hexzeichen ab der aktuellen Kartenposition in den Zielpuffer.
KLN5.50RnLoche den Inhalt von Register R numerisch mit n Stellen
KLZ5.51CodeLoche das Zeichen mit dem Code ab der aktuellen Kartenposition
KLD5.51nDupliziere n Zeichen ab der aktuellen Kartenposition. (n muss um 128 vergrößert werden)
KPI5.52RSchreibe Kartenposition ins Indexregister R
KSP5.52pTransportiere Karte an Position p. (p muss um 128 erhöht werden)
KLA5.5onLoche n Alpha-Zeichen aus Tabelle
o: Offset 4 => 0, 5 => 1, 6 => 2
KLH5.54nLoche n Hex-Zeichen aus Tabelle
Formulartransportbefehl
LEP5.6LepnTransportiere Leporello um n Zeilen
Lep: Auswahl 0 => keiner, 1 => Leporello 1, 2 => Leporello 2, 3 => beide
Magnetplattenbefehle
6.0x0Read Buffer
6.1x1Write Buffer
6.20SekLWRead Binary Pattern (Sek=Sektoren, LW: 0=Wechselplatte, 1=Festplatte)
6.30SekLWWrite Binary Pattern
6.400LWInitialisieren (Löschen)
6.5xSekLWWrite Data Set
6.6xSekLWInsert Data Set
6.7xSekLWRead Data Set
6.8xSekLWErase Data Set
6.947BError Indication

Zeichencodierung

CodeFunktionCodeFunktionCodeFunktion
0.002.0W4.0
0.112.1X4.1
0.222.2Y4.2
0.332.3Z4.3
0.442.4/4.4m
0.552.5.4.5g
0.662.6,4.6kg
0.772.7DZ Komma für Locher4.7t
0.882.8:4.8
0.992.9;4.91/
0.AA2.A+4.A_
0.BB2.B-4.BSt
0.CC2.C4.C@
0.DD2.D4.D'
0.EE2.E*4.EZeile IBM
0.FF2.F*4.FBS
1.0G3.0!5.0/3
1.1H3.1?5.1/4
1.2I3.2"5.2/8
1.3J3.3=5.3£
1.4K3.4#5.4Ω
1.5L3.5(5.5l
1.6M3.6)
1.7N3.7$
1.8O3.8&
1.9P3.9°/
1.AQ3.A%
1.BR3.B
1.CS3.CTAB
1.DT3.DZLR
1.EU3.ELT
1.FV3.FEN Tabellenende

Belegung des Arbeitsspeichers

Der Speicher ist in 256 Register gegliedert, von denen jedes wiederum 16 Datenworte hat. Die ersten drei Register (0.0 - 0.2) haben Worte von je 12 Bit, alle übrigen haben nur 4 Bit große Worte. Somit sind die ersten drei Register jeweils 24 Byte groß, die übrigen jeweils 8 Byte. Die Register haben also zusammen etwas mehr als 2 KiB Kapazität.

RegisterWortNameFunktion
0.00XI0Indexregister 0
0.01XI1Indexregister 1
0.02XI2Indexregister 2
0.03XI3Indexregister 3
0.04XPS0Befehlszähler 0 (Hauptprogramm)
0.05XPS1Befehlszähler 1 (1. Unterprogramm Keller)
0.06XPS2Befehlszähler 2 (2. Unterprogramm Keller)
0.07XPS3Befehlszähler 3 (3. Unterprogramm Keller)
0.08XOPOP-Teil des Makrobefehls
0.09XADAD-Teil des Makrobefehls
0.0AXQUAQuellregister Anfangsadresse Speicher
0.0BXQUEQuellregister Endeadresse Speicher
0.0CXZIAZielregister Anfangsadresse Speicher
0.0DXZIEZielregister Endeadresse Speicher
0.0EXEZEingabezeiger
0.0FXDZDatenspeicherzeiger und Makrospeicherzeiger
0.10XSMVSM-Vorbefehl-Speicher
0.11XDRVDR-Vorbefehl-Speicher
0.12XSO1Sollwertspeicher der Tabulation Drucker 1
0.13XSO2Sollwertspeicher der Tabulation Drucker 2
0.14XMK1Merkerspeicher 1
0.15XMAGMagnetzustände Tastatur
0.16XUHRUhrspeicher
0.17XSIMArbeitsspeicher des SIM-PR
0.18XUP0UP-Keller für Mikroprogramm
0.19XUP1UP-Keller für Mikroprogramm
0.1AXUP2UP-Keller für Mikroprogramm
0.1BXHZ0X-Hilfszelle 0
0.1CXHZ1X-Hilfszelle 1
0.1DXHZ2X-Hilfszelle 2
0.1EXHZ3X-Hilfszelle 3
0.1FXANFAnfangsadresse für Datenspeicherprogrammierung
0.20YBS0Blockadresse für Programmstufe 0
0.21YBS1Blockadresse für Programmstufe 1
0.22YBS2Blockadresse für Programmstufe 2
0.23YBS3Blockadresse für Programmstufe 3
0.24YPSZProgrammstufenzähler
0.25YBVBBlockwechsel-Vorbefehl-Speicher
0.26YIN0Index-Vorbefehl-Speicher 0
0.27YIN1Index-Vorbefehl-Speicher 1
0.28YSORSortimat-Speicher
0.29YABRAbrufphasen-Speicher
0.2AYPRZProgrammzähler
0.2BYHZ0Y-Hilfszelle 0
0.2CYHZ1Y-Hilfszelle 1
0.2DYHZ2Y-Hilfszelle 2
0.2EYHZ3Y-Hilfszelle 3
0.2FYMKIInterner Merkerspeicher
0.30-FEingaberegister
0.40-FMakro-Akkuregister
0.50-FMakro-Hilfsregister
0.60-FDruckregister 1
0.70-FDruckregister 2
0.80-FRegister 8
0.90-FRegister 9
0.A0-FRegister 10
0.B0-FRegister 11
0.C0-FRegister 12
0.D0-FRegister 13
0.E0-FRegister 14
0.F0-FRegister 15
1.00-FRegister 16
...0-F...
F.F0-FRegister 255