@make(manual, form 1) @device(dover) @libraryFile(specialcharacters) @DefineFont(LargeBodyFont, R=<Ascii "TimesRoman12">, I=<Ascii "TimesRoman12I">, B=<Ascii "TimesRoman12B">, C=<Ascii "TimesRoman10">) @DefineFont(MyTitleFont, R=<Xerox "TimesRoman18">, B=<Xerox "TimesRoman18B">, I=<Xerox "TimesRoman18I">, C=<Xerox "TimesRoman12">) @define(F, facecode F) @modify(Tc1, Font BodyFont, Facecode B) @modify(HD1, Font MyTitleFont) @modify(HD1A, Font MyTitleFont) @modify(HD2, Flushleft, Font LargeBodyFont, FaceCode I) @modify(HD3, Flushleft, Font bodyFont, Facecode I) @modify(unnumbered, TitleEnv HD1A) @modify(MajorHeading, font MyTitleFont, FaceCode B) @Style(font "times roman 10", singlesided,indent 0) @pageheading(left "Dolphin Site Manager's Guide",right "Page @value(page)") @pagefooting(,,) @textform(ixi="@index(@parm(text))@parm(text)") @begin(titlepage) @blankspace(1.5 in) @majorheading(The Dolphin Site Manager's Guide) @blankspace(1.8 in) A guide to keeping your Xerox 1100 Scientific Information Processor Happy @b[Eric Schoen]@foot{The author's current address is: Schlumberger-Doll Research, P.O. Box 307, Ridgefield, CT 06877} SUMEX-AIM Computer Project Stanford University @value(month) @value(year) @begin(researchcredit) This work was funded by the NIH Biotechnology Resources Program under grant @w<RR-00785>. Material in the Appendices I and III is adapted from Xerox internal memos; permission to reproduce them here is gratefully acknowledged. @end(researchcredit) @end(titlepage) @chapter(Introduction) The Xerox 1100 Scientific Information Processor (better known as a @I<Dolphin>, or sometimes, @I<D0>) is a personal workstation capable of emulating a number of target architectures, such as the Xerox @ixi(Alto),@foot(The Alto is an early Xerox personal computer, based on the Data General Nova. It has a 600 by 800 point bitmapped display, a local disk drive, and a connection to the experimental 3 Megabit Ethernet. The Alto served as the basis for all facets of Xerox's personal workstation development including processor, software, and perhaps most importantly, Ethernet development. The Altos are comparatively slow machines, but they are still around, and the software developed for them is still in use in machines which emulate Altos.) and the Mesa and Interlisp Virtual Machines. The Dolphin is equipped with a 23 megabyte Winchester disk for local storage, a 1024 by 808 bitmapped display, a 3 megabit Ethernet interface and at least 2304 512-byte pages of MOS memory (with a large virtual address space). This manual will discuss the responsibilities of the site manager for a Dolphin installation running the Interlisp-D language. Interlisp-D is the implementation of the Interlisp language for the Xerox's D-series machines (this includes the Dolphin, the Dorado, and future processors). @comment{The Dandelion is one, but Xerox won't let me admit that}Interlisp-D is fully compatible with Interlisp-10 and Interlisp-VAX, but has the added power of bitmapped display graphics not available in these other Interlisp implementations. In addition, the Interlisp-D I/O system makes full use of the capabilities of Ethernet file transfer protocols. Files can reside either on the local disk or on a file server accessible via the Ethernet. Paged and random-access I/O can be performed on both local and remote files. @section(Other References) This guide provides only a cursory overview of the Alto operating system, and does not attempt to describe Interlisp at all. For more complete information on the Alto system, refer to @I<The Alto User's Handbook>. Interlisp is documented in @I(The Interlisp Reference Manual). Those parts of Interlisp-D not defined in the basic Interlisp language are documented in the @I<Interlisp-D Users Guide>. An excellent introduction to the L@c<ISP> language is found in @I<LISP>, by Patrick Winston and Berthold Klaus Paul Horn. The 3 mbit/sec Ethernet is documented in a number of Xerox internal memos, as well as a small number of published papers. Xerox should be able to supply copies of these papers. @Chapter(The Dolphin Hardware) The configuration of a Dolphin running Interlisp-D typically contains: @begin(itemize) The processor, containing ALU, control store, memory controller, miscellaneous functions, memory, disk, terminal, and Ethernet interface boards. The local disk, currently a Shugart 4008 Winchester-style disk. The keyboard, display, and mouse. The display is a 1024 by 808 bitmap arranged in landscape (horizontal) mode. The mouse is a pointing device to aid in interactive graphical programming. @end(itemize) Dolphins come in three styles depending on their vintage of production. The original Dolphins were built at Xerox PARC and are encased in Alto boxes. These are small units with the Shugart disk built-in, and invisible from the outside. The "pre-production" Dolphins were built at Xerox's El Segundo plant and are actually the front end processors for their 5700 series laser printers. These are larger, louder machines, with the Shugart disk placed in its own box sitting on top of the processor box. Finally, the production model Dolphins are once again small units (smaller than the PARC models) with carefully designed acoustical padding to make them acceptable in an office setting. Despite their varied appearances, however, all Dolphins are electrically and operationally compatible. Most PC boards and all programs can be swapped between units. @section(@ixi(The processor box)) The Dolphin's @ixi(central processor) is composed of four boards: the @ixi(control store), @ixi(ALU), @ixi(miscellaneous functions), and @ixi(memory controller) boards. These boards always occupy the first four slots in the motherboard.@foot(Far right on the pre-production model, looking into the back of the unit; top-to-bottom on the production units.) See figure @ref(backplane). @begin(fullpagefigure) @blankspace(8 in) @caption(Backplane configuration for pre-production and production Dolphins) @tag(backplane) @end(fullpagefigure) Furthermore, each board has a specific slot within these four locations, and is keyed to prevent its being installed in the wrong slot. The rest of the PC boards can go almost anywhere in the motherboard (memory boards must reside in slots 5-12) so long as no gaps exist between boards. The front panel of the processor box contains the ON/BOOT and OFF switches, as well as a 4 LED maintenance panel. The ON/BOOT switch turns the processor on, and later (on a second push) boots the processor, once the disk has warmed up. The @ixi(maintenance panel) (@ixi(MP)) displays various information about the state of the processor. The meanings of the various numbers are detailed in Appendix @ref(MPCodes). When the processor is first booted, the MP displays the number of pages of physical memory available. While running Interlisp, the MP displays a cumulative count of page faults since starting Interlisp.@foot(This may have changed by the time you read this document.) In the following, references to the tops and bottoms of the PC boards are meaningful for the pre-production model of the Dolphin, in which the boards are mounted vertically from the rear of the processor box. The @ixi(rigid disk controller) (@ixi(RDC)) board allows the Shugart disk to emulate a dual model 44 Diablo disk. This permits software developed for the Alto to be used with the Dolphin. There are two cables linking the RDC board with the disk. The cable terminated in the small plug is plugged into the upper of the two small sockets on the rear of the board. The @ixi(terminal controller board) (@ixi(UTVFC) in Xerox terminology) links the keyboard and display with the processor. The cable to the display should be plugged into the topmost of the four sockets on the board. The display can be as far as 250 feet from the processor. There are usually six @ixi(memory boards), each containing 96K 16-bit words of memory. When the Dolphin is booted, the maintenance panel on the front of the Dolphin records the number of pages of memory available. This should read at least 2304. If less than that (frequently in quanta of 384 pages, the capacity of one memory board), at least one memory board is failing. Interlisp-D can usually run with 1920 pages of memory (one memory board failing), but its performance will be poor. The Dolphin can be configured with a maximum of eight memory boards. As you might expect, its performance will be better with more physical memory. The @ixi(Ethernet Interface) connects the Dolphin to a 3 Megabit Ethernet. There is a single cable leading from the interface to the Ethernet transceiver. This cable can be about 40 feet long. A typical procedure for tracking down hardware failures is to swap PC boards with a working Dolphin. Make sure the processor is powered @b<off> when changing boards; severe component damage will result if you do not. @section(The Keyboard, Display, and Mouse) The keyboard/display/mouse station is linked to the processor via a seven twisted-pair cable. As previously noted, this cable can be up to 250 feet long; however, at these distances, the screen image may be corrupted by line noise. If you attempt to remote the display by this much, you must adhere to the cable specifications as provided by Xerox; a low-loss, high bandwidth cable is required. Be sure you have not crossed the twisted pairs; to do so sometimes produces quite a pyrotechnic display behind the screen! If you remote the @ixi(display unit), you may have to adjust a timing delay circuit located inside the display base. To do this, remove the back of the display base. Attached to the back is a small PC board labelled "7-Wire Interface." Sitting on top of the PC board is an ungainly LRC circuit. This circuit must be adjusted to match the characteristics of the cable between the display and the processor. If misadjusted, the display will appear to fragment. Adjust the variable capacitor until the screen image appears whole again. Once you reassemble the display, you may find the adjustment of the LRC is off slightly due to its being installed within the base; if this happens, try again. The @ixi(mouse) is a useful device which permits the user to point to any location on the screen. The mouse currently in use has a large steel ball on its underside. Motions of the mouse across a surface are translated into X and Y components and then transmitted to the processor. The mouse performs best if placed on an unpolished surface. Paper is generally not a good surface to run the mouse on, though, since paper fibers can jam up the precision mechanism inside the mouse. The best surface is a thick rubber mat (Xerox calls them "mouse traps"). The @ixi(keyboard) is a 63 key unencoded keypad. Because the keyboard is unencoded, the Dolphin can read any number of keys simultaneously, and also give arbitrary meaning to any key. Within Interlisp-D, however, the keyboard is treated like a standard CRT keyboard. Notice the set of three unlabeled keys on the right side of the keypad. The lowest key is known as the @ixi(SWAT) key, and when used in conjunction with the left SHIFT or CONTROL key, allow you to interrupt Interlisp and return to the Alto operating system or enter the Alto debugger respectively. This is not a good idea, as you may destroy the Interlisp environment, but you may need to resort to this in case of software or hardware problems which hang Interlisp. @section(The Local Disk) The @ixi(local disk) is built into the processor box on the PARC and production model Dolphins, and sits on top of the processor box in the pre-production models. As mentioned above, there are two cables running from the disk to the disk controller in the processor. A third cable connects to a power supply within the processor, as well. The disk should be maintenance free, however, you may need to replace a disk which has developed hard disk errors, rendering it unsafe to use. @subsection(Replacing a Disk) To replace a disk, first unplug all cables leading to it. Gain access to the top of the disk (remove the cover of the disk box on the pre-production model). There are two locking devices you must install before moving the disk. The first of these is a head restraint. There should be a plastic "fork" in or near the Dolphin. This should be placed under the head motion damper (the circular fixture at the rear of the disk with the yellow caution labels) around the head pivot to prevent the heads from moving during transport. Do this while the disk is powered up.@foot(Yes, powered-up!. Shugart says that while spinning, the head floats above the disk, and it is impossible to damage the head in case inserting the damper restraint causes the head to move.) The second lock is a small screw which locks the belt drive, preventing the disk from spinning. There is a yellow caution label with an arrow pointing to the place where the screw goes (on the black plastic guard surrounding the drive belt). Rotate the drive pulley by hand (clockwise only!) until the screw hole comes into view. Install the screw and tighten until firm. To remove the disk from its box, unplug all cables leading from the disk fixture to the box, and loosen the screws on the four legs which fix the disk to its case. Remove the disk and put the replacement disk in its place. Connect the necessary plugs, remove the drive locking screw and the head damper lock, and plug the cables from the disk drive into the processor. Put the cover back on. Power the Dolphin up and listen for the usual sounds of the disk drive. If things sounds wrong, double check what you've done, and call Xerox if necessary. If the disk sounds OK, you may still have to reinstall the Interlisp software. See page @pageref(LispInstall). @chapter(The Alto Software) Dolphin software falls into two categories: that which is necessary to run the Alto emulator, and that which is necessary to run Interlisp. A freshly-booted Dolphin runs an Alto emulator. The Alto emulator is necessary because many of the lowest-levels of I/O in the Interlisp environment rely on BCPL routines written for the Alto. When running only the Alto emulator, the display will appear narrow, masked to the dimensions of an Alto screen. The Alto also provides a filesystem. In the Dolphin, your filesystem appears to spread over two separate partitions of a dual Diablo model 44 disk drive. The two disk partitions are isolated from one another; to switch between partitions, give the @ixi(Partition.~) command (e.g. type @B(Partition 1) or @B(Partition 2)). The Alto command processor (the @ixi(Alto Executive)) has a syntax reminiscent of the Tenex/Tops-20 Exec. Interlisp users should have little use for the Alto emulator, aside from starting Interlisp, but the Dolphin site manager should be familiar with the Alto Executive and operating system, as several diagnostics (notably disk diagnostics) must be invoked using Alto commands. @section(Alto Executive Commands) Commands to the Alto Executive can be abbreviated, and recognition is available using the ESC key. File names and commands are treated identically by the command processor. There are no special characters in Alto file names; ``.'' has no significance in a file name. However, commands to the Alto Executive are signified by ending in ``.~'' (i.e. Copy.~). Filenames and commands can be a mixture of upper and lower case; however, all command and filename lookup is done in a case independent manner. When entering commands or file names, several special characters can be typed: @begin(description, indent -.5 in) ?@\Type out file names or commands which fit the partial name/command typed in so far. Return to command/file name input afterwards. TAB@\Like ``?,'' except that the command input buffer is cleared after listing the file names or commands which match what had been typed in. TAB typed to a blank field is the way to see the names of all the files on the disk and all the Executive commands. ↑X@\Control-X. Expands any wildcards entered so far, replacing them by all the file names which fit the wildcard mask. For instance, if files F@C<OO1> and F@C<OO2> exist, and you type "D@C<ELETE> @C<FOO*>" followed by ↑X, the command line is replaced by D@C<ELETE> F@C<OO1> F@C<OO2>, allowing you to abort the command in case a file you didn't mean to delete is among the wildcard group. DEL@\Aborts the command, returns to command input. Like ↑U on Tops-20, DEL on vanilla Tenex, ↑X on Sumex Tenex, etc. BS@\Backspaces one character. ESC@\Attempts to recognize and complete input typed so far. If ambiguous, fills out as far as it can. @end(description) @flushleft(Alto Executive commands to know:) @begin(description) @ixi(Copy.~)@\Copies a file on the disk. The syntax is @b<not> Tenex/Tops-20-like. To copy a file, type @b<Copy.~ @p<NewFileName> @value(leftarrow) @p<OldFileName>>. @ixi(Delete.~)@\Deletes files on the disk. Type one or more filenames, separated by spaces: @B<Delete.~ @P<file1 file2> ...etc... @p<fileN>>. @begin(multiple) @ixi(Install.~)@\Causes the Alto operating system to enter a reconfiguration dialogue. The ``short dialogue'' allows you to set a default username, a disk name, and whether a password is needed to use the machine. The disk name should identify which partition of the disk is in use (i.e. call partition one @b(Partition 1) and partition two @B(Partition 2)). Dolphin users may desire that a password be set to prevent unauthorized use of the machine. You should know these passwords in case you have to diagnose failures when no one who knows the passwords is around. The long installation dialogue allows you to erase the disk and completely reinstall the Alto and Interlisp systems. This may have to be done periodically when new releases of Interlisp come out, as well as when you are installing a new disk. The long installation dialogue cannot be performed unless you have another Dolphin accessible over the Ethernet running the Alto FTP program, or unless you have access to a larger file server running programs compatible with the Xerox 3 Megabit PUP software (specifically, the Byte Stream Protocol based File Transfer Protocol). Appendix @ref(LispInstall) contains the long install procedure. @end(multiple) @ixi(Login.~)@\Tells the Alto operating system your name and password. Interlisp-D uses this when it attempts to do file transfers over the Ethernet. If you forget to login at the Alto level, there is a L@c<OGIN> function in Interlisp to do the same thing. If you are reinitializing Interlisp (see page @pageref(LispSlashI)), you should give the Login.~ command first so that Interlisp knows whose INIT.LISP file to look at when running the G@c<REET> function. NetExec.~@index(NetExec)@\If your Dolphins are connected to a 3 Megabit Ethernet which has a file server with net boot capabilities, you can give the NetExec command. This causes the Dolphin to boot the NetExec, a special network-oriented Executive stored on the file server. The NetExec in turn lets you boot other programs from the file server. The NetExec gives you access to diagnostics (DiEx, CRTTest, KeyTest) and filesystem verification and repair programs (Scavenger) you may need to keep your Dolphins running. @ixi(Partition.~)@\Allows you to switch between partitions of the disk. @ixi(Rename.~)@\Renames a file on the disk. The syntax is like Copy.~ (see above). @ixi(Scavenger.~)@\Boots the Scavenger program via the Ethernet. Scavenger is a filesystem repair program which can undo damage caused by a crash. Instructions on its use are in @I<The Interlisp-D User's Guide>. @end(description) @section(Alto Files and Programs) There are a number of files critical to the operation of the Alto emulator and Alto operating system. If any of these files are deleted, you won't be able to boot your Dolphin. This can be an insurmountable problem if you don't have the necessary 3 Megabit software running on your file server to reinitialize the Alto software from scratch. @flushleft(Files needed for the Alto OS:) @begin(description) @ixi(DiskDescriptor.)@\Defines the filesystem format. @ixi(Executive.Run)@\This is the Alto command processor. @ixi(Swat.)@\This is the Alto debugger. A crashed Alto usually ends up in Swat, giving you some indication of what went wrong (i.e. disk error, trap instruction, etc). @ixi(Swat.Help)@\A list of Swat commands, readable by Swat, giving you online help when you type ``?.'' @ixi(Sys.Boot)@\This is the Alto operating system. @ixi(Sys.Errors)@\A text file used by Swat to translate between internal error numbers and human readable messages. @ixi(SysFont.al)@\.AL files are font files for Altos. SysFont.al is the font used by the Executive and other Alto programs. @ixi(User.cm)@\A text file, defining preferences for various user-settable options in the Executive and other Alto programs. @end(description) Alto programs come in two flavors, @ixi(run files) and @ixi(boot files). Run files can be invoked from the Alto Executive. They usually have the .Run extension, and when you quit from such a program, you are returned to the Executive. To invoke a run file, type its name to the Alto Executive, followed by any optional arguments (see the reference to CreateFile.Run, for instance, on page @pageref(createfile)). Boot files, on the other hand, cannot be invoked directly from the Alto Executive (they can on an Alto, but the Dolphin has the wrong type of disk for the Alto Bootfrom.~ command to work). Boot files can be invoked by the NetExec, though (see above). When a program in a boot file quits, it usually returns you to the NetExec program. As their name might suggest, boot files replace the entire Alto operating system. Any information you've told the Alto operating system about yourself (i.e. your name, using the Login.~ command) is lost when you run a boot file. To invoke a boot file, type its name to the NetExec program. You cannot supply arguments with a boot file, however. In the list below, programs available only as run files or boot files are so indicated by their extension; programs available in both forms are listed without any extensions in their names. @flushleft(Useful Alto Programs:) @begin(description) @ixi(Chat)@\The Alto virtual terminal program. You may have this program (you will if you are at a University Grant site or you've convinced Xerox to let you have it) or you may not. There's also DMChat, which simulates a 60 line high Datamedia 2500 CRT. @ixi(Createfile.Run)@\Creates big empty files using contiguous disk space. This is the way to create Interlisp-D's virtual memory buffer when you are reinstalling the interlisp-D system. @ixi(CRTTest.Boot)@\Useful for checking display linearity. Type any character to switch to the next sized grid. @ixi(DiEx.Boot)@label(Diex)@\The Diablo disk exerciser. Run this program if you suspect disk problems. DiEx has many options which can be set by selecting an option with the mouse and entering new values. For most purposes, it suffices to set the disk type to Diablo 44 (point to @b(Type: Mod-31) and press the left mouse button), initialize (point to @B(Init Verify) and press the left mouse button), and run the test (point to @B(Do Test) and press a mouse button). DiEx will report hard and soft disk errors, giving their sector, track, and head numbers. For more customized diagnosis, look at some of the other menu items in DiEx (they are self-documenting; simply point at an item with the mouse, and read the message in the message window). A more rigorous diagnostic is available in the BFSTest program, documented in Appendix @ref(LispInstall). @ixi(FTP)@\The Alto BSP based file transfer program. If you have Chat, you'll probably have FTP. If your file server isn't running a reliable Leaf server, it may be running a reliable FTP server (implementations exist for Tenex, Tops-20, and Unix, as well as for the Xerox Alto-based Interim File Server). @ixi(InstallSwat.Run)@\Reinstalls the Alto debugger. You must run this after erasing the disk with the long installation dialogue. @ixi(KeyTest.Boot)@\Useful for checking the keyboard. Self-explanatory. @ixi(Scavenger)@begin(multiple)@\Scavenger is a file system repair program. When your Dolphin falls into Swat with an error message telling you that there's something wrong with the disk, try running Scavenger. Scavenger takes about 5 minutes to run. When it's done, it leaves a log called Scavenger.Log$ telling you what it's done, and creates a file called Scavenger.Garbage$ which contains "incorrigible disk pages." You may delete Scavenger.Garbage$ with the Delete.~ command. If your disk has hard read errors (caused perhaps by surface damage on the disk), Scavenger will map them out of existence.@foot(Sites running a Scavenger predating May 12, 1982 should ask for an update.) @end(multiple) @end(description) @section(The Alto Net Boot Procedure) This information is included for sites with 3 megabit Ethernet software wishing to add or understand the Alto net boot protocol. The Alto net bootstrap does the following: @begin(enumerate) Broadcasts a @I<MayDay> Pup to all miscellaneous service sockets on the connected network. The ID field of the Pup contains the boot file number of the file to be booted. Becomes an EFTP receiver. A server which receives the @I<MayDay> request and can satisfy it opens an EFTP socket, and begins sending the boot file to the Alto or Dolphin. If two servers or more can satisfy a boot request, the bootee locks onto the first one which responds, and ignores all others (space limitations within the Alto prevented the inclusion of code to send @I<Abort> Pups to other responding servers); the other servers will eventually timeout. @end(enumerate) Of course, the above description presupposes an Ethernet bootstrap in memory. This may not be the case. It is possible to boot an Alto or Dolphin with a blank memory (i.e. one which has no working disk to load a bootstrap from) by means of the @I<Breath-of-Life> mechanism. Every five seconds, a Breath-of-Life server will broadcast a special packet (not a Pup, but a raw Ethernet packet of type 602@C<B>, directed to host 377@C<B>). An Alto or Dolphin wishing to be booted will copy this packet into main memory, starting at location 1, and begins executing code starting at location 3. The packet may be no longer than 254 words plus 2 words of Ethernet encapsulation. @I<Breath-of-Life> is a block of Alto code which supplies enough information for the Alto or Dolphin to read the next block of code, which is found on the second page of the boot file. From there, an EFTP connection serves to transfer the rest of the boot file from the server to the Alto or Dolphin, where packets are copied into main memory. Even with the limited program space in the Alto bootstrap, it is possible to select which boot file you wish loaded. When the bootstrap starts, it reads a value from the unencoded keyboard, and places that value in the ID field of the MayDay Pup. Certain keyboard combinations are well known: holding down the BS key enables Ethernet booting; if BS is the only key held, boot file 0 (DMT, the dyanamic memory test) will be loaded; if BS and ' (Quote) are held down, boot file 10, the NetExec, will be loaded. When booting a Dolphin, the mechanism becomes even more complex, as Alto-emulator microcode must be loaded. When the Dolphin has a working disk, this micrcode is loaded from a set of special tracks shared between partitions, and not writeable during normal operations. When the Dolphin has no disk (or the disk hasn't warmed up yet), it tries to load microcode from the Ethernet. This @I<microcode boot> is similar to an Alto net boot, except that instead of using EFTP to move the microcode, the microcode boot server simply sends the code in Pups one after another, without waiting for acknowledgement. The Tenex/Tops-20 Pup server job has the ability to perform both Alto-style and microcode-style boots, but @B<cannot> send @I<Breath-of-Life> packets (Tenex/Tops-20 Pup service can send only Pups). The VAX/Unix Pup service currently supports @I<Breath-of-Life> and Alto boot, and should be able to support microcode boot with minimal effort. @chapter(The Interlisp-D Software) The Interlisp-D environment is comprised of a number of files. Chief among these are the Interlisp microcode loader, bootstrap, sysout, and virtual memory buffer. There are a number of ancillary files, such as Interlisp-D font files and Lispusers packages. To run Interlisp, first boot the Dolphin. When the Alto emulator is running, and you're looking at the narrow Alto screen, run the program DolphinLispMC.Run. This loads the Interlisp microcode. As a result, the screen expands to its full width, and the Alto Executive returns. You may now start Interlisp-D. If Interlisp has been used before in this partition, the file Lisp.VirtualMem contains a runnable image of Interlisp, and by typing @b(Lisp), you will restart this image. If Lisp.VirtualMem is empty (Lisp has never been run before, or you've just refreshed the disk), type @b(Lisp/i). This causes the Lisp bootstrap (Lisp.run) to fill Lisp.VirtualMem with a runnable image of Interlisp taken from the Interlisp sysout file, Lisp.sysout. Lisp takes a minute or so to load. When it's ready, you'll by sitting at Interlisp's top level, E@c(VALQT). To leave Interlisp, evaluate the function L@c<OGOUT>. The next time you start Lisp, you'll be returned to the Interlisp environment at the point you logged out. @section(Files Needed to Run Interlisp-D) The following is a list of files which must reside on your disk to run Interlisp-D: @begin(description) @ixi(DolphinLispMC.Run)@\A runnable program in Alto operating system format which loads the Interlisp microcode. @ixi(Init.Lisp)@\Interlisp-D configuration file. Defines the search path for Lispusers directories, user greetfiles directories, etc. Read when the G@c<REET> function is evaluated. This file is comparable to the site Init.Lisp in Interlisp-10. @begin(multiple) @ixi(Lisp.Run)@\The Interlisp-D bootstrap program, again an Alto format runnable file. If you type @b(Lisp) to the Alto Executive, Interlisp-D will be started from the environment stored in Lisp.VirtualMem. This is the way to continue an Interlisp session ended by L@c<OGOUT>. @label(LispSlashI) If you type @B(Lisp/i) to the Alto Executive, the Interlisp environment will be loaded anew from Lisp.sysout. This is the way to reinitialize Interlisp-D. This takes a bit of time, however, so be patient. When the hourglass cursor reaches the bottom of the screen, initialization is complete. If you type @B(Lisp @P<filename>), the Interlisp environment is loaded from @I<filename> a file produced by the Interlisp-D S@c<YSOUT> function. Note: the previous Interlisp environment stored in Lisp.VirtualMem will be lost. If your fileserver has a 3 Megabit Ethernet BSP-based FTP server, you can load a sysout over the Ethernet by typing @B(Lisp @p<{hostname}filename>), where @I<hostname> is your file server's name on the Ethernet. @end(multiple) @ixi(Lisp.Syms)@\An Alto-format symbol file for Lisp.Run. If your Dolphin falls into Swat, you may be able to continue running Lisp by calling RAID from Swat. To do so, type @B(Raid↑C) (Raid followed by ↑C) to Swat. The first time you enter Swat, however, Lisp's symbols may be unknown. To make them known to Swat, type @B(↑YLisp.Syms@value(downcurve)). @ixi(Lisp.Sysout)@\The basic Interlisp environment, used to initialize Lisp.VirtualMem. @ixi(Lisp.VirtualMem)@\The virtual memory buffer. This file should be 8000 decimal pages long, and works best when allocated contiguously. The Createfile program, mentioned above, can be used to create Lisp.VirtualMem. To do so, type @B(Createfile Lisp.VirtualMem 8000D)@label(createfile) to the Alto Executive. To ensure the availability of 8000 contiguous pages, this file is best created after refreshing the disk. @end(description) Files which must be resident on disk or accessible via a file server: @begin(description) *.DCOM@\Compiled Lispusers packages.@index(Lispusers packages) *.Strike@\Interlisp-D font files (Gacha and Helvetica fonts).@index(Display fonts) @ixi(Fonts.Widths)@\Defines font sizes for Xerox fonts. @end(description) @section(Configuring Interlisp-D) When Interlisp-D is started up for the first time (after reinitialization, for example), it evaluates the G@c<REET> function. This causes it to read the file Init.Lisp on the disk. Figure @ref(dskinit) is a sample disk I@C<NIT>.L@C<ISP>. @begin(figure) @begin(programexample) (* This is the Stanford system greeting file.) (VARS (DEFAULTPRINTINGHOST (QUOTE TAHOE)) (LISPUSERSDIRECTORIES (QUOTE ({LASSEN}<LISPUSERS> {LASSEN}<DOLPHIN>LISPUSERS> {SUMEX-AIM}<DOLPHIN> {DSK}))) (FONTDIRECTORIES (QUOTE ({DSK} {LASSEN}<ALTOFONTS>))) (USERGREETFILES (QUOTE (({LASSEN}< USER >LISP>INIT.DCOM) ({LASSEN}< USER >LISP>INIT) ({LASSEN}< USER >INIT.DCOM) ({LASSEN}< USER >INIT.LISP) ({SUMEX-AIM}< USER >INIT.DCOM) ({SUMEX-AIM}< USER >INIT.LISP) ({DSK}INIT. USER] (FONTWIDTHSFILES (QUOTE ({DSK}FONTS.WIDTHS {LASSEN}<FONTS>FONTS.WIDTHS))) (DIRECTORIES (QUOTE (NIL {LASSEN}<LISPUSERS> {LASSEN}<LISPUSERS>LISP> {LASSEN}<DOLPHIN>LISPUSERS> {LASSEN}<DOLPHIN>LISP> {SUMEX-AIM}<DOLPHIN> {DSK}))) (ALTNARROWBACKGROUNDSHADE 42330)))) STOP @end(programexample) @caption(A sample disk resident I@C<NIT>.L@C<ISP>.) @tag(dskinit) @end(figure) This file defines the default printer for L@C(ISTFILES)1 to be T@c(AHOE) (Stanford's Dover printer), and then defines a number of directory search paths. L@C(ISPUSERSDIRECTORIES) is searched when a F@c(ILES) command from a C@c(OMS) list specifies another file to load (i.e. @F(FILES FROM VALUEOF LISPUSERSDIRECTORIES ...)). F@C(ONTDIRECTORIES) is searched looking for Strike files. U@C(SERGREETFILES) is searched looking for the user's personal init file (see below). F@C(ONTWIDTHSFILES) is searched looking for Fonts.Widths. Finally, D@C(irectories) is searched by the F@C(indfile) function. A@C(LTNARROWBACKGROUNDSHADE) is an alternate texture (see the @I<Interlisp-D Users Guide>) for the background of the Interlisp-D windows system. The G@C(REET) function also looks up the user's personal init file. The list U@C(SERGREETFILES) defines where to look for this file. P@C(ACK*) is used to build each candidate filename, with U@C(SER) bound to the value of U@C(SERNAME). The Dolphin sets U@C(SERNAME) by looking into the Alto OS. Username is initially the name specified when the operating system was installed (with the Install.~ command). The name can be changed by giving the Login.~ command. Figure @ref(personalinit) shows a typical personal init file. @begin(fullpagefigure) @begin(programexample) @blankspace(.5 in) (E (RESETSAVE CHANGECHAR NIL)) (DECLARE: FIRST (P (SELECTQ (SYSTEMTYPE) ((TENEX TOPS20) (SETSEPR (QUOTE (%| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 26)) 1 FILERDTBL) (JSYS 34 64) (SELECTQ (PEEKC T) ((% %↑J) (CLOSEF (INPUT)) (SETQ USERNAME NIL) (GREET0) (RESET)) NIL) (LOAD? (QUOTE <XMYCIN>TTYIN.COM) (QUOTE SYSLOAD))) (D (SETQQ USERNAME SCHOEN) (VIDEOCOLOR T) (CHANGEBACKGROUND WHITESHADE) (LOAD? (QUOTE TTYIN.DCOM) (QUOTE SYSLOAD)) (LOAD? (QUOTE DEDIT.DCOM) (QUOTE SYSLOAD)) (LOAD? (QUOTE INSPECT.DCOM) (QUOTE SYSLOAD))) (PRIN1 "INIT.LISP: Unknown system type")))) (VARS #RPARS PROMPT#FLG (FIRSTNAME "Eric") (CLEANUPOPTIONS (QUOTE (RC))) (CLISPIFYENGLSHFLG NIL) (HARDCOPYFLG) (ADISOFILE) (DISPLAYON) (MSPRINTFLG 1) (CHECKUNSAVEFLG T) (COMPILEMODE (COND ((BOUNDP (QUOTE COMPILEMODE)) COMPILEMODE) (T (QUOTE PDP-10)))) (ALTO NIL) (EMACSFLG T) (SHOWPARENFLG T)) (APPENDVARS (DIRECTORIES NIL {LASSEN}<LISPUSERS> {SUMEX-AIM}<LISP>) (LISPUSERSDIRECTORIES {LASSEN}<LISPUSERS> {SUMEX-AIM}<LISP>)) (ALISTS (FONTDEFS PARC)) (ADDVARS (INITIALSLST (SCHOEN . ejs:))) (P (FONTSET (QUOTE PARC] STOP @end(programexample) @caption(A typical personal Interlisp init file.) @tag(personalinit) @end(fullpagefigure) The important thing to note in personal init files is that they can be used in many different Interlisp environments. @F<(SELECTQ (SYSTEMTYPE) ... )> is used to choose options based on the implementation of Interlisp being run. In this file, for instance, when running Interlisp-10, <X@c(MYCIN)>T@c(TYIN).C@c(OM) is loaded, and all control characters (except ↑Y) are made separators.@foot<The latter allows prettyprinted output with font change characters embedded to be read. Interlisp-D produces such files by default with M@C(AKEFILE).>When running Interlisp-D, the T@C(TYIN), display editor, and data inspector packages are loaded, and the window system is turned white on a black background. @appendix(Reinstalling a Disk Partition) @label(LISPINSTALL) The long form of the Install.~ command allows you to completely erase and rewrite a disk partition. @B(You must only attempt this if you have access to 3 Megabit Ethernet software!) The following procedure will completely erase your disk partition, and then rewrite the Alto OS, Executive, and FTP program. The Alto files will be FTP'ed from the host you specify in the procedure. This can be a large file server, such as an IFS or timesharing machine running PUP software, or it can be another Dolphin. If your server for this procedure is a Dolphin, then enter a blank line in the question below asking for the name of the directory where Alto files are kept. In the example below, it is assumed Alto files are kept in a directory named @I<Alto>. @b(Make absolutely sure all important files are safely stored on another machine!) The disk refresh procedure requires a server supporting the Alto boot protocol be running somewhere on your Ethernet. Some file servers, such as the Sumex-Tenex and DECsystem-20 P@C<UPSRV> program, and the Xerox IFS support the Alto boot protocols. If your file server doesn't, and you have at least one running Dolphin, you can turn that Dolphin into a boot server by running the Peek program on it. Refer to page @pageref(peeksrv). Before reinstalling a disk partition, you may run an overnight disk exercisor. This is wise if you suspect hardware problems within the disk. The instructions immediately following this paragraph tell you how to run the disk exercising program. If you believe the disk is sound, skip them, and proceed to step 2 for instructions on rewriting a disk partition. @begin(enumerate) @begin(multiple) To run the exercisor, you need a boot server with BFSTest.boot. From the Alto executive on the machine you wish to exercise, in the proper partition, type @B(NetExec) to boot the NetExec program. Then type @B(BFSTest)@index(BFSTest) to invoke the disk exercisor. Do the following: @begin(programexample) *@b<Partition 1> (or 2, whichever you want done) *@B<Certify>@value(downcurve) How many passes? @B<100> Use both of the disks? @B<Y> Use all 406 cylinders of the disk? @B<Y> Use all 14 sectors of the disk? @B(Y) @end(programexample) Note: It seems Certify sometimes does not give you the option of 406 cylinders, and assumes 203 instead. If this occurs, run NewOs as described below first, and then run BFSTest. @begin(programexample) *@B<Erase> Use both of the disks? @B<Y> Use all 406 cylinders of the disk? @B<Y> Use all 14 sectors of the disk? @B(Y) *@B<Exercise>@value(downcurve) How many passes? @B<10> *@b<Quit> @end(programexample) @end(multiple) Quiting returns you to the NetExec program. Now reinstall the software on the disk by running the NewOS@index(NewOS) program. If you have not just exercised the disk with BFSTest, and are instead just reinstalling the software, get to the Alto Executive and type @B(Install).@index(Install.~) @begin(multiple) Respond to the following dialog as follows: @begin(programExample) Do you want the long installation dialog? @B(Y) Do you want to ERASE the disk . . .? @b(Y) Type the name of a host to get Alto programs from: @B(hostname)@value(downcurve) Type directory name where Alto files are kept: @B(Alto)@value(downcurve) Include DP1 in file system? @b(Y) Use all 14 sectors of the disk? @b(Y) Do you want a big SysDir? @b(Y) When the disk is ready type OK to proceed, A to abort. @b(OK)@value(downcurve) @end(programexample) Take a short coffee break, and pray that you have previously saved all your important files somewhere else. @begin(programexample) Do you want to disable error logging through the net? @B(Y) What is your name? @B(Whatever you want for your default name)@value(downcurve) Please give your disk a name? @B(Partition 1) or @B(Partition 2)@value(downcurve) Do you wish to give your disk a password? @B(Y) or @B(N)@foot{@B<Don't> type a carriage return! Install doesn't wait for your carriage return, and if you do type one, you will have ended up supplying a null password for the disk, which is a fatal mistake, as you will never be able to log in. If by mistake you end up supplying a null password, you'll have to reinstall the operating system via the NetExec and NewOS; this time, don't erase the disk.} @end(programExample) If you answered yes, then @begin(programExample) Please type the password: @B(Choose your password)@value(downcurve) @end(programexample) At this point in time the machine, should connect with the host and retrieve Executive.Run and Ftp.Run. It will then return you to the Executive with a clean disk. @end(multiple) @index(InstallSwat.Run) Now retrieve InstallSwat.Run and Sys.Errors. Then run InstallSwat.Run. After it is done delete InstallSwat.Run, Dmt.Boot, and Dumper.Boot. Next retrieve CreateFile.Run and type the following to the Exec: @b(Createfile Lisp.VirtualMem 8000d) (takes about 5 min.)@index(CreateFile.Run) Next bring over the appropriate lisp files and anything else you might need. The following procedure is the one used within Stanford to refresh Dolphins, and reflects the network topology and directory structure within the Computer Science Department and the S@C[UMEX]-A@C[IM] project. These retrieves are best done with the Alto FTP program (FTP.Run). A newly refreshed disk will have a runnable FTP program. @begin(enumerate) Retrieve Lisp.Run, Lisp.Syms, Lisp.Sysout, and DolphinLispMC.Run from {IFS}<Dolphin>lisp> (i.e. file server host IFS, directory Lispusers, subdirectory lisp). If the IFS isn't available, these files can also be retrieved from {S@C[UMEX]-A@C[IM]}<D@C[OLPHIN]>. Retrieve *.S@c[TRIKE] and I@C[NIT].L@C[ISP] from {IFS}<Lispusers>. Confirm that Lisp runs by initializing it via @B(Lisp/i). @end(enumerate) @end(enumerate) @label(peeksrv) If you need to create your own temporary boot server, you can do run the Alto Peek program on another, working, Dolphin. There are two files you need in addition to the boot files. These are Peek.run and PeekUser.cm. You should rename the file User.cm to some other file name (i.e. @B<Rename.~ OUser.cm @value(leftarrow) User.cm>), then @B<copy> PeekUser.cm to be User.cm. Then run the Peek program. The Dolphin running the server program must have the necessary boot files on its disk. For the above procedures, you need NewOS.Boot and BFSTest.Boot. When you are done, rename OUser.cm back to User.cm. @appendix(Recovering From Disasters) @label(disaster) @index(Disasters) Sooner or later, someone is going to delete the wrong file, or the disk will develop a few hard read errors in the wrong places, or something similar, and your Dolphin will be unusable. Typically, you'll boot the machine, the maintenance panel will flash the standard disk boot sequence (40-700-720-etc), but when the Alto-sized display lights up, the cursor won't track with the mouse. This indicates that the Alto software is hung somewhere due to a bad or missing file. Unless you have access to a file server with complete booting service (Breath-of-Life and net boot), call Xerox. If you do have booting software on your file server, there is still hope. The first program to run is @ixi(Scavenger) (the boot file version, of course). To do this, you must first run the @ixi(NetExec) program. Since you can't run the Alto Executive to give the NetExec.~ command, you must get NetExec in another way: hold down simultaneously the @B(BS) and @B(') (Quote) keys, and press the boot button (try first the one behind the keyboard, and if that fails, the S@C<TART>/O@C<N> button on the processor's front panel). Continue holding the keys until the Alto-sized screen appears, with a small randomly-filled square sitting in the center. This square represents the acknowledgement packet for the EFTP transaction taking place to boot the Dolphin (with NetExec.boot); it is stored in the cursor memory to save on critically-short memory space during booting. In short order, the booting process should end, and the NetExec program should start. Select the faulty partition with the NetExec's @B(Partition.~) command, and type @B<Scavenger>@value(Downcurve), and the booting process should repeat itself, completing this time with the Scavenger program running. Answer Scavenger's questions and cross your fingers. If it wants to rewrite a page, let it. On its completion, Scavenger will attempt to boot into the current disk partition. If the Dolphin still won't boot, try reinstalling the operating system. To do this, obtain the NetExec as described in the previous paragraph, and select the desired disk partition. Type @B<NewOS>@value(downcurve), and wait for the booting to end. Answer questions as in the following dialogue: @begin(programexample) Do you want to install this operating system? @b(Y) Dov you want the long installation dialogue? @B(N) @end(programexample) Follow the instructions in Appendix @ref(lispinstall) to complete the installation. When NewOS finishes, it should have supplied you with a new operating system, default font, and Executive. You may have to repeat the entire procedure a couple of times, in case the disk surface is badly damaged, and NewOS has trouble finding good pages to install itself on. If you still can't get the Dolphin to boot, reinstall the faulty partition, following the instructions in Appendix @ref(Lispinstall); you probably should also check the condition of the disk with either DiEx (page @pageref(diex)) or BFSTest. @appendix(Maintenance Panel Codes) @label(MPCODES) @index(MP) @index(Maintenance Panel) The following is a list of maintenance panel codes transcribed from some unnamed Xerox document. Complete accuracy is not guaranteed. @flushleft(@B(MP Codes from Rev L E@C(PROMS))) @begin(description) 0000@\One of the first few instructions in the E@C(PROM) clears the MP. 0001@\The first few ALU tests worked OK. You should never see this, since some other error should happen or the MP should change to 0040 when RDC booting starts. 0002@\Midas boot (Midas is the hardware debugger). 0004 to 0015@\One of the preliminary ALU tests failed. 0016@\Mismatch after write then read of an R register via the stack. 0017@\The contents of an R register have changed. 0020 to 0035@\A fault happened. The MP contains 20 plus the contents of the Parity register. A fault in the fault handler will reBoot the machine, so you may not get to see these codes. 0020@\A Breakpoint micro instruction (F1=Group, B, F2=7) was executed. 0021@\Memory error. Since the E@C(PROM) code doesn't use main memory, this is probably an H4 Parity error. 0022@\R register parity error. 0024@\Control Store parity error. @end(description) @begin(quotation, indent 0, facecode I) 0022 and 0024 are to be expected if you have just powered up your machine (The bias on the RAM chips hasn't been pumped up yet). This will invoke a one minute delay to avoid hogging the boot servers when something is broken. Poke the button again if you want faster service. @end(quotation) @begin(description) 0028@\Stack error. 0040@\Starting to load microcode from RDC. 0041@\Can't find RDC (Will now try to EtherBoot). 0042@\Hardware error while reading. 0043@\Seek timed out. 0044@\Microcode checksum error. 0045@\Bad Control Store address -- attempt to load into EPROM area. 0046@\Disk not ready (Will now try to EtherBoot). 0047@\The label word which should contain a link to the next page of microcode to be loaded has an invalid disk address. @end(description) @begin(quotation, indent 0, facecode I) Most disk errors (0042, 0043, 0044, 0045, 0047) can be caused by simple transient read problems. The RDC task simply retries all of them while the emulator task is counting down a timer. If the timer runs out, you will see 0048. @end(quotation) @begin(description) 0048@\Didn't load microcode from RDC within one second (Will now try to EtherBoot). 0060@\Starting to load microcode via Ethernet. 0061@\Can't find Ethernet board. 0062@\Bad microcode checksum. 0063@\Bad Control Store address -- attempt to load into EPROM area. 0064@\Hardware error (bad status) at end of packet. 0065@\Timeout after 15 tries at about 10 seconds each. @end(description) @begin(quotation, indent 0, facecode I) If EtherBooting doesn't work, the MP will slowly alternate between 006x and 004x so that you can see both what is wrong with the disk and what is wrong with the Ethernet. @end(quotation) @begin(description) 0070 to 0085@\An unexpected wakeup happened. The MP contains 70 plus the number of the offending task. 0071@\Unexpected wakeup for task 1. 0072@\Unexpected wakeup for task 2. 0073@\Unexpected wakeup for task 3. 0074@\Unexpected wakeup for task 4. (Task 4 is used by the RDC and for Ethernet output.) 0075@\Unexpected wakeup for task 5. 0076@\Unexpected wakeup for task 6. 0077@\Unexpected wakeup for task 7. 0078@\Unexpected wakeup for task 10B. (Task 10B is used for Ethernet input). 0079@\Unexpected wakeup for task 11B. 0080@\Unexpected wakeup for task 12B. 0081@\Unexpected wakeup for task 13B. 0082@\Unexpected wakeup for task 14B. 0083@\Unexpected wakeup for task 15B. 0084@\Unexpected wakeup for task 16B. 0085@\Unexpected wakeup for task 17B. @end(description) @begin(quotation, indent 0, facecode I) If you get one of these, one of the IO controllers is probably broken. For example, its reset logic is not working, or the wakeup logic on the RDC or Ethernet board is generating the wrong task number. @end(quotation) @flushleft<@b<MP Codes from the (Oct 80) CSL microcode (Alto mode)>> @begin(description) 0100@\Start Map Init. 0101@\Not enough memory (You need 192K = 2 boards). 0102@\Bad map. 0110@\Start Device Init. 0115@\Start Ethernet Init. @end(description) @begin(quotation, indent 0, facecode I) This is what you will see during and after booting the net exec from the Ethernet. @end(quotation) @begin(description) 0120@\Start Disk Boot. @end(description) @begin(quotation, indent 0, facecode I) This is what you will see after you have booted from the disk. @end(quotation) @begin(description) 0121@\Timeout waiting for disk status. 0122@\Hardware error reading disk (after 10 retries), or ALU is too hot. 0128@\R parity error. 0129@\Real breakpoint. 0130@\Map out of bounds. 0131@\H4 parity error (The microcode ignores these if they come from task 7, Ethernet input, unless you have set a flag from Midas). 0132@\H4 parity error and Map out of bounds. 0133@\MC2 error. 0134@\2 MC2 errors. 0135@\MC1 Fault when emulator not ready. 0136@\Fault from instruction following LoadPage. 0137@\Stack Error (when emulator not ready). 0138@\Control Store parity error. @end(description) @flushleft(@B(MP Codes from Mokolumne Initial)) @begin(description) 0700@\Start Map Init. 0701@\Not enough memory (Initial requires 64K). 0702@\Bad Map. 0720@\Starting to load emulator microcode from disk. 0721@\No RDC. 0722@\RDC Read error. 0725@\Starting to boot Pilot. 0728@\R or CS parity error. 0729@\Real breakpoint. 0737@\Stack over/underflow. 0739@\Generic memory error. 0740@\Starting to EtherBoot. 0741@\Can't find UTVFC (or Tor display controller). @end(description) @begin(quotation, indent 0, facecode I) When Initial starts Etherbooting, it puts 740+2*bfn into the MP (BFN is the microcode boot file number). If EtherLoad can't load that file within a reasonable length of time, it will give up and bump the MP by one). 0742 and 0744 are from the Amargosa version of initial. @end(quotation) @begin(description) 0758@\Trying to load AltoLF.eb 0759@\Timeout trying to load AltoLF.eb 0760@\Trying to load AltoCSL.eb 0761@\Timeout trying to load AltoCSL.eb 0809@\Pilot microcode not installed on SA4000 (Try to EtherBoot). 0810@\Germ not installed on SA4000 (Try to EtherBoot). 0811@\Physical Boot Volume not set on SA4000 (Try to EtherBoot). 0812@\Label check from SA4000 (Try to EtherBoot). @end(description) @flushleft<@B<MP Codes from Mokolumne (Pilot) Microcode>> @begin(description) 0140@\Running Pilot (Tor kludge). 0710@\Start device initialization. 0727@\R register parity error. 0728@\CS parity error. 0729@\Real breakpoint. 0730@\Map out of bounds. 0731@\H4 parity error (The microcode ignores these unless you have set a flag from Midas). 0732@\H4 parity error and Map out of bounds. 0733@\MC2 error. 0734@\2 MC2 errors. 0735@\MC1 fault when emulator not ready. 0736@\Fault from instruction following LoadPage. 0737@\Stack error (when emulator not ready). 0846@\Running Pilot (this was the last value before the Tor kludge was added). You won't normally be able to see this since the Germ smashes the MP to 0900 as soon as it gets a chance. @end(description) @flushleft(@b(MP Codes from the Hardware)) @begin(description) 8808@\R parity error. 8880@\CS parity error. 8888@\Lamp test (while the boot button is down). @end(description)