PL/M. PL/M, an acronym for Programming Language for Microcomputers, is a high-level language conceived and developed by Gary Kildall in 1973 for Hank Smith at Intel for the Intel 8008. It was later expanded for the newer Intel 8080.

The 8080 had enough power to run the PL/M compiler, but lacked a suitable form of mass storage. In an effort to port the language from the PDP-10 to the 8080, Kildall used PL/M to write a disk operating system that allowed it to floppy disk to be used. This was the basis of CP/M.

History
Kildall was working at the Naval Postgraduate School in Monterey, California in 1973 when he received funds to equip a computer lab, first with MCS-4-based SIM4 and, a year later, the Intel 8008-based Intel Intellec 8. As part of his employment, Kildall was allowed to spend one day a week on his own projects, but soon found himself spending much more than that living in his VW Microbus in the parking lot of the Intel offices on Bowers Avenue in Santa Clara.

One day he went to see Hank Smith, Intel's manager for the tiny microcomputer software department. Kildall explained his idea of making a high level language for the 8008. Smith didn't understand the concept, so Kildall explained that a programmer could write something like X = Y + Z and the program would convert that into several lines of assembler code which would perform this operation. Smith then called one of Intel's customers and asked if they might be interested in such a product, and when they expressed their interest, Smith immediately told Kildall to do it.

Kildall wrote PL/M based on the concepts of the XPL language, which in turn was based on the syntax and concepts of IBM's PL/I. XPL was explicitly designed to compile PL/I-like programs in a much simpler software system, explicitly for teaching purposes. As Kildall began promoting the language he found that few programmers were interested in it, until he demonstrated that one could write a program of roughly the same size and performance as assembly but in about a tenth of the time.

PL/M originally ran on large PDP-10 mainframe computers that would output the final machine language code on punch tape which would then be fed into an programmable ROM burner and then the ROMs would be transferred to the target machine. With the release of the Intellec 8 in 1974, he began an attempt to port the system to this platform to make it "self hosting" and allow programmers to do everything on that platform. Unfortunately, the 8008 had a very small eight entry call stack that was simply too small for a high-level language.

This problem was solved with the introduction of the first Intel 8080 in late 1973, which supported a stack of any size in memory. Intel upgraded the Intellec 8 to the Intellec 8/80 based on the new chip. Although this system had the processing power to run PL/M, it lacked any useful form of mass storage and adding a useful amount of main memory was extremely expensive. Just down the street from Intel, Memorex had recently introduced a new low-cost floppy disk drive, and this in turn prompted Alan Shugart to start Shugart Associates and introduce lower-cost drives. Kildall was able to talk Finis Conner, then at Shugart, into giving him one of their older test drives.

Unfortunately, there was no drive controller for the Intel systems, and while one was sketched out it was never implemented. After sitting on a shelf for a year, Kildall decided to go ahead and write the software needed to use it in PL/M running on his 8080-emulator on the PDP-10. In 1974 he called a friend from the University of Washington, John Torode, who built a controller for the 8080. After a few months the system was running, and Kildall loaded the driver and it ran the first time and displayed the prompt.

During the summer of 1975, Kildall was working as a consultant at Signetics, who asked him to port PL/M to their Signetics 2650. This resulted in the PLuS language. The 2650 "bombed" in the market and Signetics gave up on it within a year, deciding to license the Fairchild F8 instead. While working there he met Jim Warren, another consultant who was also setting up the new minicomputer-oriented magazine, Dr. Dobb's Journal. Warren suggested Kildall put an add in the magazine under the name of CP/M, and this launched the system into the market.

Overview
The language incorporated ideas from PL/I and XPL, and had an integrated macro processor. As a graduate of the University of Washington Kildall had used their Burroughs B5500 computer, and as such was aware of the potential of high-level languages such as ESPOL for systems programming.

Unlike other contemporary languages such as Pascal or BASIC, PL/M had no standard input or output routines. It included features targeted at the low-level hardware specific to the target microprocessors, and as such, it could support direct access to any location in memory, I/O ports and the processor interrupt flags in a very efficient manner. PL/M was the first higher level programming language for microprocessor-based computers and was the original implementation language for those parts of the CP/M operating system which were not written in assembler. Many Intel and Zilog Z80-based embedded systems were programmed in PL/M during the 1970s and 1980s. For instance, the firmware of the Service Processor component of CISC IBM AS/400 was written in PL/M.

The original PL/M compiler targeted the Intel 8008. An updated version (PL/M-80) generated code for the 8080 processor, which would also run on the newer Intel 8085 as well as on the Zilog Z80 family (as it is backward-compatible with the 8080). Later followed compilers for the Intel 8048 and Intel 8051-microcontroller family (PL/M-51) as well as for the 8086 (8088) (PL/M-86), 80186 (80188) and subsequent 8086-based processors, including the advanced 80286 and the 32-bit 80386. There were also PL/M compilers developed for later microcontrollers, such as the Intel 8061 and 8096 / MCS-96 architecture family (PL/M-96).

While some PL/M compilers were "native", meaning that they ran on systems using that same microprocessor, e.g. for the Intel ISIS operating system, there were also cross compilers, for instance PLMX, which ran on other operating environments such as Digital Research CP/M, Microsoft's DOS, and Digital Equipment Corporation's VAX/VMS.

PL/M is no longer supported by Intel, but aftermarket tools like PL/M-to-C source-code translators exist.

PL/M sample code
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;

References

Further reading
 
 
  (NB. Includes entire syntax of PL/M in BNF notation.)
 
  2017 Ken Burgett interview about development of intel ISIS Operating System

Digital Research languages
PL/I programming language family
Procedural programming languages
Programming languages
Programming languages created in 1972
Structured programming languages