Zum Inhalt springen

PL/M

aus Wikipedia, der freien Enzyklopädie
PL/M
Basisdaten
Erscheinungsjahr: 1973[1][2]
Entwickler: Gary Kildall[3]
Beeinflusst von: PL/I, XPL
Beeinflusste: CP/M, PLuS

PL/M, eine Abkürzung für Programming Language for Microcomputers,[4][5] ist eine höhere Programmiersprache, die 1973 von Gary Kildall für den Intel 8008 konzipiert und entwickelt wurde. Später wurde sie für den neueren Intel 8080 erweitert. Der 8080 verfügte über genügend Leistung, um den PL/M-Compiler auszuführen, es fehlte ihm jedoch an einer geeigneten Form des Massenspeichers. In dem Bestreben, die Sprache von der PDP-10 auf den 8080-Prozessor zu portieren, verwendete Kildall PL/M, um ein Betriebssystem zu schreiben, das die Verwendung von Disketten ermöglichte. Dies war die Grundlage für CP/M.

Kildall arbeitete 1973 an der Naval Postgraduate School in Monterey, Kalifornien, als er Mittel zur Ausstattung eines Computerlabors erhielt, zunächst mit dem auf dem MCS-4 basierenden SIM4 und ein Jahr später mit dem auf dem Intel 8008 basierenden Intel Intellec 8.[6] Im Rahmen seiner Anstellung durfte Kildall einen Tag pro Woche für eigene Projekte nutzen, verbrachte jedoch bald viel mehr Zeit damit und lebte in seinem VW-Bus auf dem Parkplatz der Intel-Büros in der Bowers Avenue in Santa Clara.[7]

Eines Tages suchte er Hank Smith auf, den Leiter der kleinen Abteilung für Mikrocomputersoftware bei Intel. Kildall erläuterte seine Idee, eine höhere Programmiersprache für den 8008 zu entwickeln. Smith verstand das Konzept nicht, also erklärte Kildall, dass ein Programmierer etwas wie X = Y + Z schreiben könnte und das Programm dies in mehrere Zeilen Assembler-Code umwandeln würde, die diese Operation ausführen würden. Smith rief daraufhin einen Kunden von Intel an und fragte, ob dieser an einem solchen Produkt interessiert sei, und als dieser Interesse bekundete, beauftragte Smith Kildall sofort mit der Umsetzung.[8]

Kildall schrieb PL/M auf der Grundlage der Konzepte der Sprache XPL, die wiederum auf der Syntax und den Konzepten von IBMs PL/I basierte. XPL war ausdrücklich dafür konzipiert, PL/I-ähnliche Programme in einem viel einfacheren Softwaresystem zu kompilieren, und zwar speziell für Lehrzwecke. Als Kildall begann, für die Sprache zu werben, stellte er fest, dass nur wenige Programmierer daran interessiert waren, bis er demonstrierte, dass man ein Programm von etwa derselben Größe und Leistung wie in Assembler schreiben konnte, jedoch in etwa einem Zehntel der Zeit.[9]

PL/M lief ursprünglich auf großen PDP-10-Mainframe-Computern, die den endgültigen Maschinencode auf Lochstreifen ausgaben, der dann in einen PROM-Brenner eingespeist wurde, woraufhin die ROMs auf die Zielmaschine übertragen wurden. Mit der Veröffentlichung des Intellec 8 im Jahr 1974 begann er den Versuch, das System auf diese Plattform zu portieren, um es „selbsthostend“ zu machen, sodass Programmierer alles auf dieser Plattform erledigen konnten. Leider verfügte der 8008 über einen sehr kleinen Call-Stack mit nur acht Einträgen, der für eine Hochsprache einfach zu klein war.[10]

Dieses Problem wurde mit der Einführung des ersten Intel 8080 Ende 1973 gelöst, der einen Stack beliebiger Größe im Speicher unterstützte.[11] Intel rüstete den Intellec 8 auf Basis des neuen Chips zum Intellec 8/80 auf. Obwohl dieses System über die Rechenleistung verfügte, um PL/M auszuführen, fehlte ihm jegliche brauchbare Form von Massenspeicher, und das Hinzufügen einer brauchbaren Menge an Hauptspeicher war extrem teuer.[12] Nur wenige Häuserblocks von Intel entfernt hatte Memorex kurz zuvor ein neues, kostengünstiges Diskettenlaufwerk auf den Markt gebracht,[13] was wiederum Alan Shugart dazu veranlasste, Shugart Associates zu gründen und kostengünstigere Laufwerke einzuführen. Kildall konnte Finis Conner, der damals bei Shugart tätig war, dazu überreden, ihm eines ihrer älteren Testlaufwerke zu überlassen.[14]

Leider gab es keinen Laufwerkscontroller für die Intel-Systeme, und obwohl ein Entwurf vorlag, wurde dieser nie umgesetzt. Das Laufwerk stand ein Jahr lang im Regal, bevor Kildall beschloss, die Software zu schreiben, die erforderlich war, um es in PL/M auf seinem 8080-Emulator auf dem PDP-10 zu nutzen. 1974 rief er einen Freund von der University of Washington an, John Torode, der einen Controller für den 8080 baute. Nach einigen Monaten lief das System, und Kildall lud den Treiber; dieser funktionierte auf Anhieb und zeigte die Eingabeaufforderung an.[15]

Im Sommer 1975 arbeitete Kildall als Berater bei Signetics, die ihn baten, PL/M auf ihren Signetics 2650 zu portieren. Daraus entstand die Sprache PLuS. Der 2650 war auf dem Markt ein „Reinfall“, und Signetics gab ihn innerhalb eines Jahres auf. Man entschied sich stattdessen für die Lizenzierung des Fairchild F8. Während seiner Tätigkeit dort lernte Kildall Jim Warren kennen, einen weiteren Berater, der gerade das neue, auf Minicomputer ausgerichtete Magazin Dr. Dobb's Journal aufbaute. Warren schlug Kildall vor, unter dem Namen CP/M eine Anzeige in der Zeitschrift zu schalten, und damit wurde das System auf den Markt gebracht.[16]

Die Sprache übernahm Ideen aus PL/I und XPL[17][18] und verfügte über einen integrierten Makroprozessor. Als Absolvent der University of Washington hatte Kildall dort den Burroughs B5500-Computer genutzt[19] und war sich daher des Potenzials von Hochsprachen wie ESPOL für die Systemprogrammierung bewusst.

Im Gegensatz zu anderen zeitgenössischen Sprachen wie Pascal oder BASIC verfügte PL/M über keine Standard-Ein- oder Ausgaberoutinen. Es enthielt Funktionen, die auf die für die Zielmikroprozessoren spezifische Low-Level-Hardware ausgerichtet waren, und konnte somit den direkten Zugriff auf beliebige Speicherorte, E/A-Ports und die Prozessor-Interrupt-Flags auf sehr effiziente Weise unterstützen. PL/M war die erste höhere Programmiersprache für mikroprozessorbasierte Computer und diente als ursprüngliche Implementierungssprache für jene Teile des Betriebssystems CP/M, die nicht in Assembler geschrieben waren. Viele auf Intel und Zilog Z80 basierende Embedded-Systems wurden in den 1970er und 1980er Jahren in PL/M programmiert. So wurde beispielsweise die Firmware der Service-Prozessor-Komponente des CISC-basierten IBM AS/400 in PL/M geschrieben.

Der ursprüngliche PL/M-Compiler war für den Intel 8008 ausgelegt.[20] Eine aktualisierte Version (PL/M-80) erzeugte Code für den 8080-Prozessor, der auch auf dem neueren Intel 8085 sowie auf der Zilog-Z80-Familie lief (da er mit dem 8080 abwärtskompatibel ist). Später folgten Compiler für die Intel 8048- und Intel 8051-Mikrocontroller-Familie (PL/M-51) sowie für den 8086 (8088) (PL/M-86), 80186 (80188) und nachfolgende 8086-basierte Prozessoren, darunter der fortschrittliche 80286 und der 32-Bit-Prozessor 80386. Es gab auch PL/M-Compiler, die für spätere Mikrocontroller entwickelt wurden, wie beispielsweise die Intel 8061 und 8096 / MCS-96-Architekturfamilie (PL/M-96).[21]

Während einige PL/M-Compiler „nativ“ waren, d. h. auf Systemen mit demselben Mikroprozessor liefen, z. B. für Intels ISIS-Betriebssystem (Intel System Implementation Supervisor), gab es auch Cross-Compiler, wie beispielsweise PLMX, die auf anderen Betriebssystemen wie CP/M, MS-DOS und VAX/VMS liefen.

PL/M wird von Intel nicht mehr unterstützt, es gibt jedoch Programme, die PL/M in C-Code übersetzen[22].

PL/M Beispiel-Code

[Bearbeiten | Quelltext bearbeiten]
FIND: PROCEDURE(PA,PB) BYTE;
    DECLARE (PA,PB) BYTE;
    /* FIND THE STRING IN SCRATCH STARTING AT PA AND ENDING AT PB */
    DECLARE J ADDRESS,
        (K, MATCH) BYTE;
    J = BACK ;
    MATCH = FALSE;
        DO WHILE NOT MATCH AND (MAXM > J);
        LAST,J = J + 1; /* START SCAN AT J */
        K = PA ; /* ATTEMPT STRING MATCH AT K */
            DO WHILE SCRATCH(K) = MEMORY(LAST) AND
                NOT (MATCH := K = PB);
            /* MATCHED ONE MORE CHARACTER */
            K = K + 1; LAST = LAST + 1;
            END;
        END;
    IF MATCH THEN /* MOVE STORAGE */
        DO; LAST = LAST - 1; CALL MOVER;
        END;
    RETURN MATCH;
    END FIND;

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Shustek 2016
  2. Kildall 1993
  3. Swaine 2001
  4. Shustek 2016
  5. Kildall 1993
  6. Kildall 1993, S. 48
  7. Kildall 1993, S. 49
  8. Kildall 1993, S. 48
  9. Kildall 1993, S. 48
  10. Kildall 1993, S. 50
  11. Kildall 1993, S. 51
  12. Kildall 1993, S. 52
  13. Kildall 1993, S. 53
  14. Kildall 1993, S. 54
  15. Kildall 1993, S. 55
  16. Kildall 1993, S. 58
  17. Shustek 2016
  18. Kildall 1993
  19. Kildall 1970
  20. Kildall 1974
  21. Intel 1983
  22. PL/M to C UNIX converter. Abgerufen am 14. Mai 2026 (englisch).