PL/M is a high-level programming language especially designed to simplify the task of system programming for the Intel 8-bit family of microcomputers--the 8008 and the 8080. The files provided in this archive contain version 2.0 of Intel's PL/M cross compiler for the 8080. The PL/M programming langauge is described in the Intel publication, 8008 and 8080 PL/M Programming Manual. A second Intel publication, 8080 PL/M Compiler Operators Manual, describes the operation of the PL/M cross compiler. The Intel 8080 PL/M Cross Compiler is a two pass compiler written in ANSI FORTRAN. PASS 1 reads a PL/M source program and converts it to an intermediate form on work files. Optionally, a listing of the input source program may be obtained during this pass. Errors in program syntax are detected at this stage, and appropriate error messages are sent to the list file. PASS 2 processes the work files produced by PASS 1, and generates machine code for the MCS-80 CPU. This machine code, which may be in either BNPF or Hex format, may be loaded and executed directly on an INTELLEC 8/Mod 80 Microcomputer Development System, simulated using INTERP/80, a cross-simulator of the 8080 CPU, or used to program ROMs. PASS 2 will optionally produce a symbol table and a mnemonic listing of the generated machine code. Certain errors may be detected during PASS 2 and are reported in the list file. The operation of each pass of the PL/M compiler is governed by a set of parameters know as compiler controls, each control is identified by a unique letter of the alphabet. Each compiler control is provided with a default value which is used throughout the compilation unless explicitly altered by the user. The commonly used compiler controls are described below and a complete list of compiler controls is given in Intel's 8080 PL/M Compiler Operators Manual. The value of the compiler controls may be changed at any time during PASS 1 or at the beginning of PASS 2 by entering a control record. Control records must begin with a dollar sign ($) and have the following form: $= [ $= ] ... where is the unique letter assigned to the compiler control that is to be changed and is the new value. Blanks may be included on either side of the equal sign (=) but not within the $ or . Two special control record formats are available to interrogate the current values of the compiler controls. A specification like the following: $$ will cause the current value of the compiler control represented by to be listed, while a specification that consists of just two dollar signs will cause the values of all compiler controls to be listed. Control records may be included anywhere within the source input read by PASS 1 or in one or more input lines terminated with an all blank or null line to be read at the start of PASS 2. PASS 1 Compiler Controls CONTROL VALUES DEFAULT USE L 1-79 1 Leftmargin. Specifies the first character position processed on each input line. All leading characters are ignored. P 0,1 1 Echo input if 1, suppress echo if 0. R 1-80 80 Rightmargin, ignore trailing characters on each input record. W 1-120 120 Maximun number of characters per output line. PASS 2 Compiler Controls CONTROL VALUES DEFAULT USE F 0,1 1 Display decoded memory initialization. T 0,1 1 Display cross-reference table of approximate memory address versus source line number. H 0 Header. Decimal address at which generated code should start. I.e., the start of the program's ISA. M 0,1 1 Display symbol table. Q 0,1 1 If 1 then object file is written in BNPF, otherwise the object file is written in Hex format. V 0 Page number of first page of the VSA. I.e., variable storage, stack, etc. If set to zero the first availabe page above the ISA is used.