PDP-8 MainDEC Diagnostic Area Welcome to the mainDEC area. This is where official DEC PDP-8 family paper-tape diagnostics and related material are kept. The usual material here is a collection of diagnostic programs originally distributed as binary paper tapes. Originally associated with each tape was a (generally badly-xeroxed) paper listing of an associated write-up file documenting the program, which usually concluded with a highly reduced (and often only barely readable) copy of an assembly listing of the program itself. Often, the user was referred to the listing itself to deal with specific hardware-induced and detected problems, etc. Available Files. 1) Binary Files. In some cases, the only article available will be the binary program itself. In which case, only those already familiar with the program can use it, or else you have to disassemble it yourself and figure out how to! 2) User-provided Help Files. Hopefully, knowledgeable users can fill us in on how to use the program, at least the fundamentals of how to make it run to a successful no-errors-found completion, etc. Many diagnostics halt for all sorts of reasons. Some may be innocuous but require some action to correct. Even the successful exit of the program might be a halt! Without that basic information, the binary files are useless, so a short help file can make the program viable, etc. 3) Machine-readable write-ups. If available, it is hoped that someone will at least submit the front of the write-up, which was usually a plain text file using a paragraph numbering scheme common in DEC documentation. This is usually an adequate form of documentation, except where it refers to specifics within the program listing, etc. The best thing would be to provide the equivalent of the write-up front and also the PAL source program file. With both of these available we can create an equivalent of the absolute original write-up, minus the degradation caused by the poor copying technique DEC often used! 4) Additional Warning Files and Notes. Additionally, associated .BWR files might be present to indicate warnings to would-be users about non-obvious quirks of the program. For example, some diagnostics are actually incompatible with the various operating systems (P?S/8, OS/8, etc.) that would be expected to run them! One would expect the contrary, but some of the programs can merely be stored on these systems, not loaded from them! (And even worse, there may be limitations on the storage method, i.e., attempts to use the system loading utility could create a corrupted copy of the program! For example, the PDP-8/e Random ISZ test assumes that 07600-07777 is the exclusive province of the RIM loader, the BIN loader, and itself! Not only does it access locations in this page (which would destroy OS/8 or P?S/8), but it actually loads code there! Thus, it is acceptable to create a binary file called RANISZ.BN and store that on OS/8, but it is not acceptable to create a file named RANISZ.SV, since OS/8 ABSLDR will "protect" OS/8 and inhibit the loading into 07600-07777. The resultant RANISZ.SV is corrupted and non-functional.) It is conceivable that a patch may be available to allow some form of restrictive loading of a program on an operating system, or some quirk of a system can be exploited to overcome a straight-forward restriction. For example, the problematic RANISZ program could be loaded into field 3 on a 16K or more machine. (Field 2 can be used on some systems!) An additional small program could then move all of field 3 to all of field 0 and start the original program up as intended. As a result of this, OS/8 is wiped out in memory and will need manual re-boot later, but the program can run as intended. Alternately, there is a P?S/8 method that may allow problematic programs to run in a similar manner without requiring extended memory at all. P?S/8 inhibits loading into 07600-07777 in a manner similar to OS/8, and this is done to provide the same kind of protection against system corruption. This is accomplished using the BIN program's /V switch (which is default on certain system configurations). However, the inhibited loading is not totally lost under P?S/8 BIN, because, unlike OS/8 ABSLDR, BIN stores an image of the attempt to load into 07600-07777 in a known save area on the system device. It is possible to write a P?S/8-specific patch to a program requiring only a small patch loading area, and a one-page buffer to temporarily move the 07600-07777 loading into. The patch is started first, and it reads the image of the inhibited loading into the provided page buffer, then moves the data from the buffer to 07600-07777. P?S/8 is destroyed in memory, and will require a re-boot later, but the program is now loaded as intended and can be started up by the patch, etc. Additional changes beyond the diagnostic can be provided. For example, by making a two-word patch to the PDP-8/e extended memory checkerboard, and then providing a very short program to start before starting the main program up, it is possible to have the memory diagnostic performed while a VT8E is running in worst-case DMA graphics mode. (Note: the VT8E can request many back-to-back DMA cycles that can exercise a memory faster than the diagnostic!) During such a test, MM8E 4K and 8K memory modules have been found to fail unless the strobe adjustment is fine-tuned more carefully that would otherwise pass the unpatched test. This enhances reliability, and is always recommended where applicable, etc. This small patch program will be provided in the associated EXMCHK.BWR file for the diagnostic which is itself available as EXMCHK.BN. Thus, it is possible for any specific diagnostic program to have a small collection of hints and kinks associated with it. Some of the methods described are somewhat generic for a class of troublesome diagnostics, so it is likely that the program-specific note file will refer to another file on how to implement the relevant technique, etc. File Formats. Other than the actual programs, all files in this section are ASCII text files. The binary programs will be stored in a variety of ways to allow a variety of purposes. 1) BIN Format. In this format, the original paper-tape is stored frame by frame into 8-bit bytes. The system that stores this archive file must be capable of maintaining the 8-bit characters exactly as provided. This format is the one most likely to be used by a PDP-8 emulator running on another machine where the underlying file structure can maintain the 8-bit frames of the original paper-tape correctly. These files consist of a leader, the binary program in RIM or BIN format, and a trailer. Some files will essentially be composites of this format. For example, FOCAL, 1969 is generally read in as two independent binary tapes spliced together, with leader/trailer between the sections. Whether a file is RIM or BIN should be clear from the file name; most are BIN format. (Some files are actually compatible with both the RIM and BIN loaders. In some special cases, the file may be in some alternate format such as the "help" or "slim" loader format. Utilities such as these were developed to make it easier to load tapes from scratch than even the RIM loader. Generally, the only files in their format are the help-out files that cause RIM and/or BIN to be present as a consequence, etc.) Note: some files may appear to have quite short leader/trailer, and a single ^Z character within the trailer. These files have been processed by OS/8, and are either the output of an assembler, or were converted via OS/8 PIP using the /B option. There is no operational difference between these files and the original paper-tapes, but the precise format of the non-data leader and trailer is admittedly different. (Some paper-tapes included checksum information provided by a program known as "master tape duplicator" which is stripped by this process. The lost information is not related to the binary program's contents, but rather is only meaningful to the tape duplication program, etc.) 2) .BOO format. This is a printably encoded format that is popular on MS-DOS and other systems to transfer 8-bit-oriented files through "hostile" environments such as e-mail. It uses a restricted character set that will pass through many systems, and a limited form of compression. (Note: since the compression is 8-bit oriented, and only compresses zeroes, little PDP-8 binary file compression will tend to occur.) Utilities exist for all popular systems, including OS/8, to encode/decode files into .BOO format for transport between systems. When a .BOO format version of a binary file is decoded on a target system, the resultant file should be identical to the BIN format file described above. The OS/8 version of the utilities ensure that this is true by following the standard OS/8 pack/unpack scheme of the so-called "3 for 2" technique. Thus, all binary and text files will convert correctly through .BOO transfers, etc. 3) ENCODE format. This is a printably encoded format that is currently unique to OS/8. It uses a more restrictive character set than .BOO encoding, to achieve a more robust format that can be transmitted through even more "hostile" environments than .BOO is capable of. (For example, ENCODE format files can survive being transferred as a WPS document. This facility may be unique to ENCODE format. It has already been determined that .BOO and uuencode format cannot pass as a WPS document!) Additionally, ENCODE format can "survive" having the case of all of the letters changed. Any OS/8 file can be transferred through the ENCODE/DECODE utilities, as the method is intrinsically image oriented, so there is no problem encoding .SV or other files, etc. The ENCODE file format is 12-bit oriented, and includes a form of compression that allows any 12-bit data value to be repeat compressed (as opposed to .BOO's 8-bit-zeroes-only compression) if possible. The file includes imbedded commands, file checksums, and encourages internal documentation regarding what the file is about, etc. The OS/8 version include automatically generated comments about the file's creation date, ENCODE file's creation date, etc. An ENCODE file may contain either a single file or multiple files. (Currently, the OS/8 utilities only support a single file.) Each file in turn represents either a single OS/8 file, or an image of an entire OS/8 device, or an approximate "half" of an OS/8 device. (The reason for representing "half" of a device is that on a meager configuration, it may not be possible to convert an entire device image. For example, an OS/8 system device could consist of merely a dual-drive RX01, and no other devices are available. Since an ENCODE image of an entire RX01 is usually larger than a single RX01's capacity to hold that encoded file, it's usually not possible to provide the image file as input to the DECODE utility! (In cases of extraordinary compression, this wouldn't be a problem. For example, a sparsely used RX01 would have a lot of unused space hopefully containing blocks totally consisting of a repeated formatting pattern. In that case, the resultant ENCODE file would be quite small!) By splitting the image into a "first half" and a "second half" it is then possible to store a bootable OS/8 system, the DECODE utility, and a copy of the ENCODE input file on one drive, and write the half-image to the other drive. Repeating the process with the other "half's" file finishes the transfer, etc. The "half" files are an approximate description, because the ENCODE files cover half of the device, but each is subject individually and independantly to the possibility of compression to a somewhat smaller size that will likely vary, etc.) 4) IPL format. This is a format vaguely similar to BIN format, except that it's stripped down like RIM format in terms of loading controls, etc. However, the data is encoded into printable characters instead of paper-tape frames. Thus, the loader has to strip off a "bias" value from the data. As a result, all "white space" and other control characters such as CR, LF, FF, HT, etc. are ignored during the loading. This allows the file to exist as an easily maintained printably encoded text file in any system. The IPL format file is restricted to an implied initial loading address of 0000 and all loading is strictly sequential. The file and loader must agree on the length of the load implicitly, although the usual practice is to load all of 0000 through 7577 to conform with the usual OS/8 and P?S/8 restrictions, etc. (An IPL loader could be written to load 0000-7777 of an available field, such as 3. But 07600-07777 is never available in OS/8 or P?S/8. In OS/8 17600-17777 is never available, and 27600-27777 is often not available. In certain P?S/8 configurations 6000-7777 or perhaps 0000-7777 of the highest implemented field (through 7) may be unavailable, while a lesser field greater than 0 might be available for loading from 0000-7777.) The loading program controls what memory field the program is loaded into, although comments in the IPL file might indicate the intended field, etc. An OS/8 SAVE command is generally given after the loader exits to the keyboard monitor to finish the loading. P?S/8 versions of an IPL loader can exit to the keyboard monitor after having 0000-7777 preserved in the % and $ files with all other memory intact. This accomplishes the equivalent of the OS/8 SAVE command for most files, etc. An advantage of the IPL format is that it allows elaborate leader/trailer comments. The only restriction placed on the leader is that the characters in the leader must be lower-case and devoid of characters from octal 041 (!) through 140 (`). Since space characters (octal 040) are freely allowed anywhere in the file, as well as CR (octal 15) and LF (octal 12), a rather elaborate leader can be constructed. The trailer consists of at least one lower-case character followed by literally anything. Thus, IPL files may have a lower-case comment referring the reader to a mixed-case comment at the other end. Since the only purpose of an IPL file is to load a mutually agreed upon single PDP-8 field, the file cannot be longer than 8K characters, not including formatting overhead and comments, etc. The IPL format was developed to allow a direct transfer between a PDP-8 or DECmate and a "nearby" other system that can transfer the IPL file over a serial line. The IPL loading program is very tiny, although somewhat larger than the RIM loader. The serving system can treat the IPL file as a normal text file; cosmetic alterations such as FF, CR/LF breaks, etc. are allowed to make the file more "palatable" to the serving system as necessary without corrupting the data. The only requirement is that the connection between systems be error-free. (The IPL format is used to distribute Kermit-12 to systems lacking any other form of communication program. Since all of the data is stored in memory, no particular protocol is required; the serving system can send the file as fast as possible once the loading program is started on the PDP-8 end, etc.) 5) Other formats. If there is sufficient interest, uuencode format can be provided, but there is no current PDP-8 uuencode program. Most other systems that have uuencode can also run the .BOO utilities however. The .BOO utilities maintained by Columbia University for MS-Kermit distribution are generally adaptable to most other systems that may require any additional formats, etc. Note: only the latest version of the Columbia .BOO utilities should be used due to longstanding bugs now corrected. The PDP-8 .BOO utilities have never had these problems, etc. [End of file; last edit 19-Dec-1993 cjl]