.bp .op .cs 5 .mt 5 .mb 6 .pl 66 .ll 65 .po 10 .hm 2 .fm 2 .he CP/M Operating System Manual 1.6 Transient Commands .ft 1-% .pc 1 .pp 5 It is emphasized that the physical device names might not actually correspond to devices that the names imply. That is, you can implement the PTP: device as a cassette write operation. The exact correspondence and driving subroutine is defined in the BIOS portion of CP/M. In the standard distribution version of CP/M, these devices correspond to their names on the Model 800 development system. .pp The command, .sp .ti 8 STAT VAL: .sp produces a summary of the available status commands, resulting in the output: .sp .in 8 .nf Temp R/O Disk d:$R/O Set Indicator: filename.typ $R/O $R/W $SYS $DIR Disk Status: DSK: d:DSK Iobyte Assign: .sp .in 0 .fi which gives an instant summary of the possible STAT commands and shows the permissible logical-to-physical device assignments: .sp .in 8 .nf CON: = TTY: CRT: BAT: UC1: RDR: = TTY: PTR: UR1: UR2: PUN: = TTY: PTP: UP1: UP2: LST: = TTY: CRT: LPT: UL1: .fi .in 0 .sp The logical device to the left takes any of the four physical assignments shown to the right. The current logical-to-physical mapping is displayed by typing the command: .sp .ti 8 STAT DEV: .sp This command produces a list of each logical device to the left and the current corresponding physical device to the right. For example, the list might appear as follows: .sp .in 8 .nf CON: = CRT: RDR: = UR1: PUN: = PTP: LST: = TTY: .fi .in 0 .sp The current logical-to-physical device assignment is changed by typing a STAT command of the form: .sp .ti 8 STAT ld1 = pd1, ld2 = pd2, ... , ldn = pdn .sp where ld1 through ldn are logical device names and pd1 through pdn are compatible physical device names. For example, ldi and pdi appear on the same line in the VAL: command shown above. The following example shows valid STAT commands that change the current logical-to-physical device assignments: .sp .in 8 .nf STAT CON:=CRT: STAT PUN:=TTY:, LST:=LPT:, RDR:=TTY: .in 0 .fi .pp The command form, .sp .ti 8 STAT d:filename.typ $S .sp where d: is an optional drive name and filename.typ is an unambiguous or ambiguous filename, produces the following output display format: .sp 2 .in 8 .nf Size Recs Bytes Ext Acc .sp 48 48 6K 1 R/O A:ED.COM 55 55 12K 1 R/O (A:PIP.COM) 65536 128 16K 2 R/W A:X.DAT .in 0 .fi .sp 2 where the $S parameter causes the Size field to be displayed. Without the $S, the Size field is skipped, but the remaining fields are displayed. The Size field lists the virtual file size in records, while the Recs field sums the number of virtual records in each extent. For files constructed sequentially, the Size and Recs fields are identical. The Bytes field lists the actual number of bytes allocated to the corresponding file. The minimum allocation unit is determined at configuration time; thus, the number of bytes corresponds to the record count plus the remaining unused space in the last allocated block for sequential files. Random access files are given data areas only when written, so the Bytes field contains the only accurate allocation figure. In the case of random access, the Size field gives the logical end-of-file record position and the Recs field counts the logical records of each extent. Each of these extents, however, can contain unallocated holes even though they are added into the record count. .pp The Ext field counts the number of physical extents allocated to the file. The Ext count corresponds to the number of directory entries given to the file. Depending on allocation size, there can be up to 128K bytes (8 logical extents) directly addressed by a single directory entry. In a special case, there are actually 256K bytes that can be directly addressed by a physical extent. .pp The Acc field gives the R/O or R/W file indicator, which you can change using the commands shown. The four command forms, .sp .nf .in 8 STAT d:filename.typ $R/O STAT d:filename.typ $R/W STAT d:filename.typ $SYS STAT d:filename.typ $DIR .in 0 .fi .sp set or reset various permanent file indicators. The R/O indicator places the file, or set of files, in a Read-Only status until changed by a subsequent STAT command. The R/O status is recorded in the directory with the file so that it remains R/O through intervening cold start operations. The R/W indicator places the file in a permanent Read-Write status. The SYS indicator attaches the system indicator to the file, while the DIR command removes the system indicator. The filename.typ may be ambiguous or unambiguous, but files whose attributes are changed are listed at the console when the change occurs. The drive name denoted by d: is optional. .pp When a file is marked R/O, subsequent attempts to erase or write into the file produce the following BDOS message at your screen: .sp .ti 8 BDOS Err on d: File R/O .sp lists the drive characteristics of the disk named by d: that is in the range A:, B:,...,P:. The drive characteristics are listed in the following format: .sp .nf d: Drive Characteristics 65536: 128 Byte Record Capacity 8192: Kilobyte Drive Capacity 128: 32 Byte Directory Entries 0: Checked Directory Entries 1024: Records/Extent 128: Records/Block 58: Sectors/Track 2: Reserved Tracks .fi .sp where d: is the selected drive, followed by the total record capacity (65536 is an eight-megabyte drive), followed by the total capacity listed in kilobytes. The directory size is listed next, followed by the checked entries. The number of checked entries is usually identical to the directory size for removable media, because this mechanism is used to detect changed media during CP/M operation without an intervening warm start. For fixed media, the number is usually zero, because the media are not changed without at least a cold or warm start. .pp The number of records per extent determines the addressing capacity of each directory entry (1024 times 128 bytes, or 128K in the previous example). The number of records per block shows the basic allocation size (in the example, 128 records/block times 128 bytes per record, or 16K bytes per block). The listing is then followed by the number of physical sectors per track and the number of reserved tracks. .pp For logical drives that share the same physical disk, the number of reserved tracks can be quite large because this mechanism is used to skip lower-numbered disk areas allocated to other logical disks. The command form .sp .ti 8 STAT DSK: .sp produces a drive characteristics table for all currently active drives. The final STAT command form is .sp .ti 8 STAT USR: .sp which produces a list of the user numbers that have files on the currently addressed disk. The display format is .sp .nf .in 8 Active User: 0 Active Files: 0 1 3 .in 0 .fi .sp where the first line lists the currently addressed user number, as set by the last CCP USER command, followed by a list of user numbers scanned from the current directory. In this case, the active user number is 0 (default at cold start) with three user numbers that have active files on the current disk. The operator can subsequently examine the directories of the other user numbers by logging in with USER 1 or USER 3 commands, followed by a DIR command at the CCP level. .sp 2 .tc 1.6.2 ASM Command .sh 1.6.2 ASM Command .qs .sp Syntax: .sp .ti 8 ASM ufn .pp The ASM command loads and executes the CP/M 8080 assembler. The ufn specifies a source file containing assembly language statements, where the filetype is assumed to be ASM and is not specified. The following ASM commands are valid: .sp .nf .in 8 ASM X ASM GAMMA .in 0 .fi .sp The two-pass assembler is automatically executed. Assembly errors that occur during the second pass are printed at the console. .pp The assembler produces a file: .sp .ti 8 X.PRN .sp where X is the primary name specified in the ASM command. The PRN file contains a listing of the source program with embedded tab characters if present in the source program, along with the machine code generated for each statement and diagnostic error messages, if any. The PRN file is listed at the console using the TYPE command, or sent to a peripheral device using PIP (see Section 1.6.4). Note that the PRN file contains the original source program, augmented by miscellaneous assembly information in the leftmost 16 columns; for example, program addresses and hexadecimal machine code. The PRN file serves as a backup for the original source file. If the source file is accidentally removed or destroyed, the PRN file can be edited by removing the leftmost 16 characters of each line (see Section 2). This is done by issuing a single editor macro command. The resulting file is identical to the original source file and can be renamed from PRN to ASM for subsequent editing and assembly. The file .sp .ti 8 X.HEX .sp is also produced, which contains 8080 machine language in Intel HEX format suitable for subsequent loading and execution (see Section 1.6.3). For complete details of CP/M's assembly language program, see Section 3. .pp The source file for assembly is taken from an alternate disk by prefixing the assembly language filename by a disk drive name. The command .sp .ti 8 ASM B:ALPHA .sp loads the assembler from the currently logged drive and processes the source program ALPHA.ASM on drive B. The HEX and PRN files are also placed on drive B in this case. .he CP/M Operating System Manual 1.6 Transient Commands .sp 2 .tc 1.6.3 LOAD Command .sh 1.6.3 LOAD Command .qs .sp Syntax: .sp .ti 8 LOAD ufn .pp 5 The LOAD command reads the file ufn, which is assumed to contain HEX format machine code, and produces a memory image file that can subsequently be executed. The filename ufn is assumed to be of the form: .sp .ti 8 X.HEX .sp and only the filename X need be specified in the command. The LOAD command creates a file named .sp .ti 8 X.COM .sp that marks it as containing machine executable code. The file is actually loaded into memory and executed when the user types the filename X immediately after the prompting character > printed by the CCP. .pp Generally, the CCP reads the filename X following the prompting character and looks for a built-in function name. If no function name is found, the CCP searches the system disk directory for a file by the name .sp .ti 8 X.COM .mb 5 .fm 1 .sp If found, the machine code is loaded into the TPA, and the program executes. Thus, the user need only LOAD a hex file once; it can be subsequently executed any number of times by typing the primary name. This way, you can invent new commands in the CCP. Initialized disks contain the transient commands as COM files, which are optionally deleted. The operation takes place on an alternate drive if the filename is prefixed by a drive name. Thus, .bp .mb 6 .fm 2 .sp .ti 8 LOAD B:BETA .sp brings the LOAD program into the TPA from the currently logged disk and operates on drive B after execution begins. .sp .sh Note: \c .qs the BETA.HEX file must contain valid Intel format hexadecimal machine code records (as produced by the ASM program, for example) that begin at 100H of the TPA. The addresses in the hex records must be in ascending order; gaps in unfilled memory regions are filled with zeroes by the LOAD command as the hex records are read. Thus, LOAD must be used only for creating CP/M standard COM files that operate in the TPA. Programs that occupy regions of memory other than the TPA are loaded under DDT. .sp 2 .tc 1.6.4 PIP .sh 1.6.4 PIP .qs .sp .ul Syntax: .qu .sp .in 8 .nf PIP PIP destination=source#1, source#2, ..., source #n .fi .in 0 .pp PIP is the CP/M Peripheral Interchange Program that implements the basic media conversion operations necessary to load, print, punch, copy, and combine disk files. The PIP program is initiated by typing one of the following forms: .sp .nf .in 8 PIP PIP command line .fi .in 0 .sp In both cases PIP is loaded into the TPA and executed. In the first form, PIP reads command lines directly from the console, prompted with the * character, until an empty command line is typed (for example, a single carriage return is issued by the operator). Each successive command line causes some media conversion to take place according to the rules shown below. .pp In the second form, the PIP command is equivalent to the first, except that the single command line given with the PIP command is automatically executed, and PIP terminates immediately with no further prompting of the console for input command lines. The form of each command line is .sp .ti 8 destination = source#1, source#2, ..., source#n .sp where destination is the file or peripheral device to receive the data, and source#1, ..., source#n is a series of one or more files or devices that are copied from left to right to the destination. .pp When multiple files are given in the command line (for example, n>1), the individual files are assumed to contain ASCII characters, with an assumed CP/M end-of-file character (CTRL-Z) at the end of each file (see the O parameter to override this assumption). Lower-case ASCII alphabetics are internally translated to upper-case to be consistent with CP/M file and device name conventions. Finally, the total command line length cannot exceed 255 characters. CTRL-E can be used to force a physical carriage return for lines that exceed the console width. .pp The destination and source elements are unambiguous references to CP/M source files with or without a preceding disk drive name. That is, any file can be referenced with a preceding drive name (A: through P:) that defines the particular drive where the file can be obtained or stored. When the drive name is not included, the currently logged disk is assumed. The destination file can also appear as one or more of the source files, in which case the source file is not altered until the entire concatenation is complete. If it already exists, the destination file is removed if the command line is properly formed. It is not removed if an error condition arises. The following command lines, with explanations to the right, are valid as input to PIP: .sp 2 .in 31 .ti -23 X=Y Copies to file X from file Y, where X and Y are unambiguous filenames; Y remains unchanged. .sp .ti -23 X=Y,Z Concatenates files Y and z and copies to file X, with Y and Z unchanged. .sp .ti -23 X.ASM=Y.ASM,Z.ASM Creates the file X.ASM from the concatenation of the Y and Z.ASM files. .sp .ti -23 NEW.ZOT=B:OLD.ZAP Moves a copy of OLD.ZAPP from drive B to the currently logged disk; names the file NEW.ZOT. .sp .ti -23 B:A.U=B:B.V,A:C.W,D.X Concatenates file B.V from drive B with C.W from drive a and D.X from the logged disk; creates the file A.U on drive b. .in 0 .sp .pp For convenience, PIP allows abbreviated commands for transferring files between disk drives. The abbreviated PIP forms are .sp .in 8 .nf PIP d:=afn PIP d\d1\u=d\d2\u:afn PIP ufn = d\d2\u: PIP d\d1\u:ufn = d\d2\u: .fi .in 0 .sp The first form copies all files from the currently logged disk that satisfy the afn to the same files on drive d, where d = A...P. The second form is equivalent to the first, where the source for the copy is drive d\d2\u, where d\d2\u = A...P. The third form is equivalent to the command PIP d\d1\u:ufn=d\d2\u:ufn which copies the file given by ufn from drive d\d2\u to the file ufn on drive d\d1\u:. The fourth form is equivalent to the third, where the source disk is explicitly given by d\d2\u:. .pp The source and destination disks must be different in all of these cases. If an afn is specified, PIP lists each ufn that satisfies the afn as it is being copied. If a file exists by the same name as the destination file, it is removed after successful completion of the copy and replaced by the copied file. .pp The following PIP commands give examples of valid disk-to-disk copy operations: .sp 2 .in 24 .ti -16 B:=*.COM Copies all files that have the secondary name COM to drive B from the current drive. .sp .ti -16 A:=B:ZAP.* Copies all files that have the primary name ZAP to drive A from drive B. .sp .ti -16 ZAP.ASM=B: Same as ZAP.ASM=B:ZAP.ASM .sp .ti -16 B:ZOT.COM=A: Same as B:ZOT.COM=A:ZOT.COM .sp .ti -16 B:=GAMMA.BAS Same as B:GAMMA.BAS=GAMMA.BAS .sp .ti -16 B:=A:GAMMA.BAS Same as B:GAMMA.BAS=A:GAMMA.BAS .in 0 .sp .pp PIP allows reference to physical and logical devices that are attached to the CP/M system. The device names are the same as given under the STAT command, along with a number of specially named devices. The following is a list of logical devices given in the STAT command .sp .in 8 .nf CON: (console) RDR: (reader) PUN: (punch) LST: (list) .fi .in 0 .sp while the physical devices are .sp .in 8 .nf TTY: (console), reader, punch, or list) CRT: (console, or list), UC1: (console) PTR: (reader), UR1: (reader), UR2: (reader) PTP: (punch), UP1: (punch), UP2: (punch) LPT: (list), UL1: (list) .fi .in 0 .sp The BAT: physical device is not included, because this assignment is used only to indicate that the RDR: and LST: devices are used for console input/output. .pp The RDR, LST, PUN, and CON devices are all defined within the BIOS portion of CP/M, and are easily altered for any particular I/O system. The current physical device mapping is defined by IOBYTE; see Section 6 for a discussion of this function. The destination device must be capable of receiving data, for example, data cannot be sent to the punch, and the source devices must be capable of generating data, for example, the LST: device cannot be read. .pp The following list describes additional device names that can be used in PIP commands. .sp 2 .in 5 .ti -2 o NUL: sends 40 nulls (ASCII 0s) to the device. This can be issued at the end of punched output. .sp .ti -2 o EOF: sends a CP/M end-of-file (ASCII CTRL-Z) to the destination device (sent automatically at the end of all ASCII data transfers through PIP). .sp .ti -2 o INP: is a special PIP input source that can be patched into the PIP program. PIP gets the input data character-by-character, by CALLing location 103H, with data returned in location 109H (parity bit must be zero). .sp .ti -2 o OUT: is a special PIP output destination that can be patched into the PIP program. PIP CALLs location 106H with data in register C for each character to transmit. Note that locations 109H through 1FFH of the PIP memory image are not used and can be replaced by special purpose drivers using DDT (see Section 4). .sp .ti -2 o PRN: is the same as LST:, except that tabs are expanded at every eighth character position, lines are numbered, and page ejects are inserted every 60 lines with an initial eject (same as using PIP options [t8np]). .in 0 .sp .pp File and device names can be interspersed in the PIP commands. In each case, the specific device is read until end-of-file (CTRL-Z for ASCII files, and end-of-data for non-ASCII disk files). Data from each device or file are concatenated from left to right until the last data source has been read. .pp The destination device or file is written using the data from the source files, and an end-of-file character, CTRL-Z, is appended to the result for ASCII files. If the destination is a disk file, a temporary file is created ($$$ secondary name) that is changed to the actual filename only on successful completion of the copy. Files with the extension COM are always assumed to be non-ASCII. .pp The copy operation can be aborted at any time by pressing any key on the keyboard. PIP responds with the message ABORTED to indicate that the operation has not been completed. If any operation is aborted, or if an error occurs during processing, PIP removes any pending commands that were set up while using the SUBMIT command. .pp PIP performs a special function if the destination is a disk file with type HEX (an Intel hex-formatted machine code file), and the source is an external peripheral device, such as a paper tape reader. In this case, the PIP program checks to ensure that the source file contains a properly formed hex file, with legal hexadecimal values and checksum records. .pp When an invalid input record is found, PIP reports an error message at the console and waits for corrective action. Usually, you can open the reader and rerun a section of the tape (pull the tape back about 20 inches). When the tape is ready for the reread, a single carriage return is typed at the console, and PIP attempts another read. If the tape position cannot be properly read, continue the read by typing a return following the error message, and enter the record manually with the ED program after the disk file is constructed. .pp PIP allows the end-of-file to be entered from the console if the source file is an RDR: device. In this case, the PIP program reads the device and monitors the keyboard. If CTRL-Z is typed at the keyboard, the read operation is terminated normally. .pp The following are valid PIP commands: .sp 2 .in 24 .ti 8 PIP LST: = X.PRN .sp Copies X.PRN to the LST device and terminates the PIP program. .sp .ti 8 PIP .sp Starts PIP for a sequence of commands. PIP prompts with *. .sp .ti 8 *CON:=X.ASM,Y.ASM,Z.ASM .sp Concatenates three ASM files and copies to the CON device. .sp .ti 8 *X.HEX=CON:,Y.HEX,PTR: .sp Creates a HEX file by reading the CON until a CTRL-Z is typed, followed by data from Y.HEX and PTR until a CTRL-Z is encountered. .sp .ti 8 PIP PUN:=NUL:,X.ASM,EOF:,NUL: .mb 4 .fm 1 .sp Sends 40 nulls to the punch device; copies the X.ASM file to the punch, followed by an end-of-file, CTRL-Z, and 40 more null characters. .sp .ti 8 (carriage return) .sp A single carriage return stops PIP. .in 0 .bp .pp You can also specify one or more PIP parameters, enclosed in left and right square brackets, separated by zero or more blanks. Each parameter affects the copy operation, and the enclosed list of parameters must immediately follow the affected file or device. Generally, each parameter can be followed by an optional decimal integer value (the S and Q parameters are exceptions). Table 1-4 describes valid PIP parameters. .sp 2 .ce .sh Table 1-4. PIP Parameters .ll 60 .in 5 .nf .sp Parameter Meaning .fi .mb 6 .fm 2 .sp .in 17 .ti -10 B Blocks mode transfer. Data are buffered by PIP until an ASCII x-off character, CTRL-S, is received from the source device. This allows transfer of data to a disk file from a continuous reading device, such as a cassette reader. Upon receipt of the x-off, PIP clears the disk buffers and returns for more input data. The amount of data that can be buffered depends on the memory size of the host system. PIP issues an error message if the buffers overflow. .sp .ti -10 Dn Deletes characters that extend past column n in the transfer of data to the destination from the character source. This parameter is generally used to truncate long lines that are sent to a narrow printer or console device. .sp .ti -10 E Echoes all transfer operations to the console as they are being performed. .sp .ti -10 F Filters form-feeds from the file. All embedded form-feeds are removed. The P parameter can be used simultaneously to insert new form-feeds. .sp .ti -10 Gn Gets file from user number n (n in the range 0-15). .sp .ti -10 H Transfers HEX data. All data are checked for proper Intel hex file format. Nonessential characters between hex records are removed during the copy operation. The console is prompted for corrective action in case errors occur. .sp .ti -10 I Ignores :00 records in the transfer of Intel hex format file. The I parameter automatically sets the H parameter. .bp .ll 65 .in 0 .ce .sh Table 1-4. (continued) .ll 60 .in 5 .nf .sp Parameter Meaning .fi .sp .in 17 .ti -10 L Translates upper-case alphabetics to lower-case. .sp .ti -10 N Adds line numbers to each line transferred to the destination, starting at one and incrementing by 1. Leading zeroes are suppressed, and the number is followed by a colon. If N2 is specified, leading zeroes are included and a tab is inserted following the number. The tab is expanded if T is set. .sp .ti -10 O Transfers non-ASCII object files. The normal CP/M end-of-file is ignored. .sp .ti -10 Pn Includes page ejects at every n lines with an initial page eject. If n = 1 or is excluded altogether, page ejects occur every 60 lines. If the F parameter is used, form-feed suppression takes place before the new page ejects are inserted. .sp .ti -10 Qs^Z Quits copying from the source device or file when the string s, terminated by CTRL-Z, is encountered. .sp .ti -10 R Reads system files. .sp .ti -10 Ss^Z Start copying from the source device when the string s, terminated by CTRL-Z, is encountered. The S and Q parameters can be used to abstract a particular section of a file, such as a subroutine. The start and quit strings are always included in the copy operation. .sp If you specify a command line after the PIP command keyword, the CCP translates strings following the S and Q parameters to upper-case. If you do not specify a command line, PIP does not perform the automatic upper-case translation. .sp .ti -10 Tn Expands tabs, CTRL-I characters, to every nth column during the transfer of characters to the destination from the source. .sp .ti -10 U Translates lower-case alphabetics to upper-case during the copy operation. .bp .ll 65 .in 0 .ce .sh Table 1-4. (continued) .ll 60 .in 5 .nf .sp Parameter Meaning .fi .sp .in 17 .ti -10 V Verifies that data have been copied correctly by rereading after the write operation (the destination must be a disk file). .sp .ti -10 W Writes over R/O files without console interrogation. .sp .ti -10 Z Zeros the parity bit on input for each ASCII character. .in 0 .ll 65 .sp .pp The following examples show valid PIP commands that specify parameters in the file transfer. .sp 2 .in 24 .ti 8 PIP X.ASM=B:[v] .sp Copies X.ASM from drive B to the current drive and verifies that the data were properly copied. .sp 2 .ti 8 PIP LPT:=X.ASM[nt8u] .sp Copies X.ASM to the LPT: device; numbers each line, expands tabs to every eighth column, and translates lower-case alphabetics to upper-case. .sp 2 .ti 8 PIP PUN:=X.HEX[i],Y.ZOT[h] .sp First copies X.HEX to the PUN: device and ignores the trailing :00 record in X.HEX; continues the transfer of data by reading Y.ZOT, which contains HEX records, including any :00 records it contains. .sp 2 .ti 8 PIP X.LIB=Y.ASM[sSUBRI:^z qJMP L3^z] .sp Copies from the file Y.ASM into the file X.LIB. The command starts the copy when the string SUBR1: has been found, and quits copying after the string JMP L3 is encountered. .bp .ti 8 PIP PRN:=X.ASM[p50] .sp Sends X.ASM to the LST: device with line numbers, expands tabs to every eighth column, and ejects pages at every 50th line. The assumed parameter list for a PRN file is nt8p60; p50 overrides the default value. .in 0 .sp .pp Under normal operation, PIP does not overwrite a file that is set to a permanent R/O status. If an attempt is made to overwrite an R/O file, the following prompt appears: .sp .ti 8 DESTINATION FILE IS R/O, DELETE (Y/N)? .sp If you type Y, the file is overwritten. Otherwise, the following response appears: .sp .ti 8 ** NOT DELETED ** .sp The file transfer is skipped, and PIP continues with the next operation in sequence. To avoid the prompt and response in the case of R/O file overwrite, the command line can include the W parameter, as shown in this example: .sp .ti 8 PIP A:=B:*.COM[W] .sp The W parameter copies all nonsystem files to the A drive from the B drive and overwrites any R/O files in the process. If the operation involves several concatenated files, the W parameter need only be included with the last file in the list, as in this example: .sp .ti 8 PIP A.DAT=B.DAT,F:NEW.DAT,G:OLD.DAT[W] .pp Files with the system attribute can be included in PIP transfers if the R parameter is included; otherwise, system files are not recognized. For example, the command line: .sp .ti 8 PIP ED.COM=B:ED.COM[R] .sp reads the ED.COM file from the B drive, even if it has been marked as an R/O and system file. The system file attributes are copied, if present. .pp Downward compatibility with previous versions of CP/M is only maintained if the file does not exceed one megabyte, no file attributes are set, and the file is created by user 0. If compatibility is required with nonstandard, for example, double-density versions of 1.4, it might be necessary to select 1.4 compatibility mode when constructing the internal disk parameter block. See Section 6 and refer to Section 6.10, which describes BIOS differences. .bp .sh Note: \c .qs to copy files into another user area, PIP.COM must be located in that user area. Use the following procedure to make a copy of PIP.COM in another user area. .sp 2 .in 8 .nf USER 0 Log in user 0. DDT PIP.COM (note PIP size s) Load PIP to memory. GO Return to CCP. USER 3 Log in user 3. SAVEs PIP.COM .fi .in 0 .sp 2 In this procedure, s is the integral number of memory pages, 256-byte segments, occupied by PIP. The number s can be determined when PIP.COM is loaded under DDT, by referring to the value under the NEXT display. If, for example, the next available address is 1D00, then PIP.COM requires 1C hexadecimal pages, or 1 times 16 + 12 = 28 pages, and the value of s is 28 in the subsequent save. Once PIP is copied in this manner, it can be copied to another disk belonging to the same user number through normal PIP transfers. .nx onec