Developer | Gary Kildall[1] atMicrocomputer Applications Associates |
---|---|
First appeared | 1973 (1973)[2][3] |
Influenced by | |
PL/I,XPL | |
Influenced | |
CP/M, PLuS |
PL/M, an acronym forProgrammingLanguage forMicrocomputers,[2][3] is a high-levellanguage conceived and developed byGary Kildall in 1973 forHank Smith atIntel for theIntel 8008. It was later expanded for the newerIntel 8080.
The 8080 had enough power to run the PL/M compiler, but lacked a suitable form ofmass storage. In an effort to port the language from thePDP-10 to the 8080, Kildall used PL/M to write adisk operating system that allowed afloppy disk to be used. This was the basis ofCP/M.
Kildall was working at theNaval Postgraduate School inMonterey, California in 1973 when he received funds to equip a computer lab, first withMCS-4-based SIM4 and, a year later, theIntel 8008-basedIntel Intellec 8.[4] 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 hisVW Microbus in the parking lot of the Intel offices on Bowers Avenue inSanta Clara.[5]
One day he went to see Hank Smith, Intel's manager for the tiny microcomputer software department. Kildall explained his idea of making ahigh level language for the 8008. Smith didn't understand the concept, so Kildall explained that a programmer could write something likeX = Y + Z
and the program would convert that into several lines ofassembler 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.[5]
Kildall wrote PL/M based on the concepts of theXPL language, which in turn was based on the syntax and concepts ofIBM'sPL/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.[5]
PL/M originally ran on largePDP-10mainframe computers that would output the finalmachine language code onpunch tape which would then be fed into anprogrammable 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 entrycall stack that was simply too small for a high-level language.[6]
This problem was solved with the introduction of the firstIntel 8080 in late 1973, which supported a stack of any size in memory.[7] 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 ofmass storage and adding a useful amount ofmain memory was extremely expensive.[8] Just down the street from Intel,Memorex had recently introduced a new low-costfloppy disk drive,[9] and this in turn promptedAlan Shugart to startShugart Associates and introduce lower-cost drives. Kildall was able to talkFinis Conner, then at Shugart, into giving him one of their older test drives.[10]
Unfortunately, there was nodrive 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 theUniversity 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.[11]
During the summer of 1975, Kildall was working as a consultant atSignetics, who asked him to port PL/M to theirSignetics 2650. This resulted in thePLuS language. The 2650 "bombed" in the market and Signetics gave up on it within a year, deciding to license theFairchild F8 instead. While working there he metJim Warren, another consultant who was also setting up the new minicomputer-oriented magazine,Dr. Dobb's Journal. Warren suggested Kildall put an ad in the magazine under the name ofCP/M, and this launched the system into the market.[12]
The language incorporated ideas from PL/I and XPL,[2][3] and had an integratedmacro processor. As a graduate of theUniversity of Washington Kildall had used theirBurroughs B5500 computer,[13] and as such was aware of the potential of high-level languages such asESPOL for systems programming.
Unlike other contemporary languages such asPascal orBASIC, 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 theCP/M operating system which were not written in assembler. Many Intel andZilog Z80-basedembedded systems were programmed in PL/M during the 1970s and 1980s. For instance, thefirmware of the Service Processor component of CISCIBM AS/400 was written in PL/M.
The original PL/Mcompiler targeted theIntel 8008.[14] An updated version (PL/M-80) generated code for the8080 processor, which would also run on the newerIntel 8085 as well as on the Zilog Z80 family (as it isbackward-compatible with the 8080). Later followed compilers for theIntel 8048 andIntel 8051-microcontroller family (PL/M-51) as well as for the8086 (8088) (PL/M-86),80186 (80188) and subsequent 8086-based processors, including the advanced80286 and the 32-bit80386. There were also PL/M compilers developed for later microcontrollers, such as theIntel 8061 and 8096 /MCS-96 architecture family (PL/M-96).[15]
While some PL/M compilers were "native", meaning that they ran on systems using that same microprocessor, e.g. for the IntelISIS operating system, there were alsocross compilers, for instancePLMX, which ran on other operating environments such asDigital Research CP/M,Microsoft'sDOS, andDigital Equipment Corporation'sVAX/VMS.
PL/M is no longer supported by Intel, but aftermarket tools like PL/M-to-Csource-code translators exist.[citation needed]
FIND:PROCEDURE(PA,PB)BYTE;DECLARE(PA,PB)BYTE;/* FIND THE STRING IN SCRATCH STARTING AT PA AND ENDING AT PB */DECLAREJADDRESS,(K,MATCH)BYTE;J=BACK;MATCH=FALSE;DOWHILENOTMATCHAND(MAXM>J);LAST,J=J+1;/* START SCAN AT J */K=PA;/* ATTEMPT STRING MATCH AT K */DOWHILESCRATCH(K)=MEMORY(LAST)ANDNOT(MATCH:=K=PB);/* MATCHED ONE MORE CHARACTER */K=K+1;LAST=LAST+1;END;END;IFMATCHTHEN/* MOVE STORAGE */DO;LAST=LAST-1;CALLMOVER;END;RETURNMATCH;ENDFIND;
[…] A LANGUAGE FOR EVERY NEED […] PL/M is the most popular 8086 language for systems programming and provides the best of both optimal code and high level language capabilities. […] PL/M-51 was the first high level language ever to be introduced for a microcontroller. The8096 is similarly supported with PL/M-96. […]