PL/M

PL/M(Programming Language for Microcomputersの頭文字)はゲイリー・キルドールが1972年に設計・開発した高水準プログラミング言語で、インテルで働くハンク・スミスののために開発された。

PL/I、ALGOL、を参考にしており、マクロ処理機能があった。キルドールはワシントン大学在学中にB5500を使用しており、のような高水準言語を用いたシステムプログラミングに高い可能性があることを知った。

Pascal、C、BASICなどのような現代の言語とは異なり、PL/Mには標準入出力機能がなかった。マイクロプロセッサのような非常に限定された環境下でのプログラミングをターゲットにしており、メモリ、I/O、割り込みなどに対して非常に効率よく直接的にアクセスできるよう設計された。PL/Mはマイクロプロセッサを用いたコンピュータで動作する最初の言語で、CP/Mの初期バージョンはアセンブラではなくこの言語を用いて実装された。1970年代から1980年代にかけ、インテルやザイログZ80の組み込みシステムでPL/Mが使用された。例えばCISC AS/400のサービスプロセッサのファームウェアはPL/Mで記述された。

オリジナルのPL/MコンパイラはIntel 8008に対応していた。アップデート版は8080に対応し、新しいIntel 8085でも動作した他、8080の上位互換であるZilog Z80でも動作した。その後Intel 8048やIntel 8051に対応し、8086 (8088)や80186 (80188)などの8086系列に対応して、80286や32ビットの80386にも対応した。またPL/Mコンパイラはや8096/等の系列のプロセッサにも対応した。

PL/MコンパイラはIntel などのOSでもCPUが同じであれば動作する「ネイティブ」設計である一方で、CP/MやマイクロソフトのMS-DOSやDECのVAX/VMSなどで動作するPLMXというクロスコンパイラもあった。

インテルは90年代以降PL/Mをサポートしていないが、PL/M-to-Cトランスレーターなどの社外ツールが存在している(下記外部リンクを参照)。

PL/M sample code 
 FIND: PROCEDURE(PA,PB) BYTE;
    DECLARE (PA,PB) BYTE;
    /* 文字列SCRATCHからPAで始まりPBで終わる文字列を探す */
    DECLARE J ADDRESS,
        (K, MATCH) BYTE;
    J = BACK ;
    MATCH = FALSE;
        DO WHILE NOT MATCH AND (MAXM > J);
        LAST,J = J + 1; /* Jから検索を開始 */
        K = PA ; /* 文字列がKで一致するか */
            DO WHILE SCRATCH(K) = MEMORY(LAST) AND
                NOT (MATCH := K = PB);
            /* さらに1文字が一致 */
            K = K + 1; LAST = LAST + 1;
            END;
        END;
    IF MATCH THEN /* 格納先を移動 */
        DO; LAST = LAST - 1; CALL MOVER;
        END;
    RETURN MATCH;
    END FIND;

脚注

参考文献
Intel Corporation (1976). PL/M-80 Programming Manual. Doc # 98-268B.
McCracken, Daniel D. (1978). A Guide to PL/M Programming for Microcomputer Applications. Pearson Addison-Wesley.

外部リンク
PL/M 386 Programmer’s Guide (PDF) – RadiSys Corporation, December 1999. Includes entire syntax of PL/M in BNF notation. Also available on Archive.org.
PL/M-80 Programming Manual – Intel Corporation (On Bitsavers.org).
MCS-8 Guide to PL/M Programming – Intel Corporation (On Bitsavers.org).

プログラミング言語
デジタルリサーチ