1. INTRODUCTION
2. INSTALLATION OF THE MULTOS/8 SOFTWARE
2.1. SOFTWARE DISTRIBUTION MEDIA
2.1.1. RK05 DISK CARTRIDGE
2.1.2. DECTAPE
2.1.2.1. DECTAPE TO RK05 DISK CARTRIDGE
2.1.3. PAPER TAPE
3. STARTING THE TIMESHARING SYSTEM
3.1. HARDWARE INITIALIZATION
3.2. PASSWORD INITIALIZATION
3.3. SOFTWARE INITIALIZATION
4. USE OF IOTS UNDER MULTOS/8
4.1. STANDARD PDP-8 IOTS
4.2. SPECIAL MULTOS/8 IOTS
4.3. FILE STRUCTURED DEVICE IOTS
5. BUFFERING
5.1. TD8E DECTAPE OPERATION
6. THE PRINT SPOOLER
7. DIFFERENCES WITH STANDALONE MODE
8. HINTS FOR PROGRAMMING UNDER TIMESHARING
9. SOME PROOF OF THE PUDDING 1. Introduction MULTOS/8 is a multi-user timesharing system designed to run on the Digital Equipment Corporation family of PDP8 computers (specifically, PDP-8/A, e, f, m). The minimum hardware require- ments consist of a PDP-8 CPU, 20K memory, a real time clock, an RK8-E or RK8-F disk drive and one to four terminals (the ter- minals may be Teletypes, CRTs or other types). Although the system is designed to run with 20K memory minimum, 32K is strongly recommended. Other equipment which MULTOS/8 supports includes the PC8E paper tape reader and/or punch, KE8E EAE, additional RK05 disk drives (4 total in system), TM8 Magtape (8 transports max), RX01 floppy disk (one dual drive system which can be accessed in both 12- and 8-bit modes) and TD8E DECtape (UP TO 8 TRANSPORTS). Each of the up to 4 users on the system has a virtual 32K PDP-8 (even if the physical system has less). Each user has access on a shared basis to all system-supported peripherals. These peri- pherals are assigned and deassigned automatically by MULTOS/8. Each terminal appears to have its own copy of the OS/8 operat- ing system. Terminals may access the "system devices" of other terminals. Furthermore, for a large percentage of the time, only 4K is actually used (when the instruction field and the data field are the same field). These facts allow more than one user to be similtaneously resident in memory (especially in systems with 24K to 32K of memory). Thus, system response bec- omes better as less memory is required by user programs. A print spooler is also available which will spool up to 32 files of any length to the printer. The spooler can be invoked with a keyboard command or by a user program using a special IOT. Separate passwords [or no password(s)] may be assigned to any terminal. Other features include Time-of-Day, real time suspensions, a random number generator callable with an IOT, a "TALK" IOT for sending text messages between terminals and an IOT to return system status information. The RK05 disk cartridge may also be used in standalone mode without any changes. "J" handlers are included so the user can incorporate them into Build for use either in standalone or in timesharing mode. The "J" handlers allow accesses to any ter- minal's system device from any other terminal. If a terminal has a tentative file open on any device, no other terminal may write to that device until the tentative file is closed. Reads to any device are allowed as under standalone OS/8. File structure on the timeshared system devices is identical to that of OS/8. In fact, the system operates so much like standalone OS/8 that it is difficult to tell that timesharing is in effect. All supported peripheral devices are accessible by any terminal on the system. The standard OS/8 calling pro- cedures are used without change. Two OS/8 non-file structured device handlers have been modified slightly to make them more efficient for use under timesharing. One is the paper tape reader/punch handler. Its binary file is included in MULTOS/8 distribution. The other is the TTY hand- ler. Its modified source is included. Programs to spool and unspool files to the line printer are also included if you purchased the print spooler option. A program to effect logoff from the system is also included. If the program ALONE.SV is run from terminal # 1, the system will terminate timesharing and start standalone OS/8. 2. Installation of the MULTOS/8 Software 2.1. Software Distribution Media MULTOS/8 is distributed on RK05 disk cartridge, DECtape or paper tape. 2.1.1. RK05 Disk Cartridge When shipped, the RK05 disk cartridge will be for- matted and all MULTOS/8 software will be resident in the standalone SYS: portion of the pack. The number of blocks available for each timeshared terminal's system device is determined by the number of terminals on the system. There are 128 swap sectors for each terminal plus 128 blocks for executive tasks. The remainder of the blocks are evenly divided by the number of ter- minals on the system. The final result is logically ANDed with octal 7760 (to make disk swapping more efficient) to produce the exact number of blocks for each terminal's system device. The disk cartridge may be used in standalone mode as a system device. Access to the other terminal's system devices (using the "J" handlers) may also be obtained. It is suggested that a copy of the master timesharing disk cartridge be made prior to using the system. A suggested method follows: .R PIP *RKA1:</Y/Z$ .COPY RKA1:<SYS: The above procedure will copy the system head and all programs from the timesharing pack's standalone OS/8 to the back up disk pack. 2.1.2. DECtape One DECtape is shipped with the MULTOS/8 software. If you also ordered the 3rd pass listing, then two (or more) DECtapes are shipped. Before using the system the first time, it is suggested that the master DEC- tape be copied and then kept in a safe place. 2.1.2.1. DECtape to RK05 Disk Cartridge The MULTOS/8 files on the main DECtape must be transferred to an RK05 disk cartridge. A suggested method is as follows: .COPT SYS:<DTA0: 2.1.3. Paper Tape Several paper tapes comprise the various components of MULTOS/8. A suggested loading procedure for each paper tape is as follows: .R EPIC *<0$ Repeat this procedure until all tapes are loaded. 3. Starting the Timesharing System 3.1. Hardware Initialization The PDP-8 processor must have the timesharing option enab- led for MULTOS/8 to work properly. See the instruction manual for your particular processor for precise informa- tion on enabling the timeshare option. In the PDP-8/e, f, and m, for example, there is a jumper on the M837 memory extension control board which must be cut to enable tim- esharing. Do not try to start MULTOS/8 without having the timeshare option enabled since unpredicable results will occur. 3.2. Password Initialization Boot the RK05 cartridge for standalone operation using the standard boot procedures. If it is desired that a password for one or more terminals be entered before allowing access to the timesharing system, this can be done as follows: Create a password file with a text editor using the CCL command: .CREATE #4040404040402027 The first text line of the file will be the password for terminal # 1, the second text line will be the password for terminal # 2 and so on. If it is desired that one or more terminals should not have a password, then the corresponding line should be blank (just a CR/LF combination). For example, your text file creation for a 4-terminal system might appear thus: .CREATE #4040404040402027 #a CRT#1 Spencer W. Kimball JOHN PAUL JONES 56789 #q . In this example, the password for terminal # 1 will be "CRT#1". The password for terminal # 2 will be "Spen- cer W. Kimball". Terminal # 3 will have no password and the password for terminal # 4 will be JOHN PAUL JONES 56789". In short, almost any combination of alphanumic and non-printing characters may be used in passwords. The above procedure will create a file on the system device called " .PW". It is created with the CCL CREATE command to enable a file with an unusual name to prevent its being easily modified. If it is desired to edit the file in the future to change one or more passwords, use the following CCL command: .EDIT #4040404040402027/ /Note:/ The password file may be edited under tim- esharing, but the new password(s) will not be effective until the next time MULTOS/8 is run from standalone mode. 3.3. Software Initialization After the password file has been created, BUILD.SV must be run to configure the system for the timesharing environ- ment. Run BUILD.SV and load the appropriate device hand- lers. If a handler is for a non-file structured device, its IOTs will be simulated by MULTOS/8. For file struc- tured handlers, MULTOS/8, during its initialization, notes their presence, but substitutes its own handlers for those present in BUILD.SV (this is true even for the TD8E DEC- tape handler). Be sure to load and insert the "J" handlers. These hand- lers are all co-resident in a binary file called JOBS. In this initializing process, insert J1 for terminal # 1, J2 for terminal # 2, etc. Do not insert J handlers for non- existant terminals. Execute the BUILD BOOT command. Execute the following Keyboard Monitor commands: .ZERO J2:/Y .ZERO J3:/Y .ZERO J4:/Y . Programs may now be copied to J2:, J3: and J4: from SYS:. Use the CCL command COPY with the "Q" option to copy onto each terminal's system device. If it is not desired to allow terminals to access the system devices of other ter- minals, rerun BUILD.SV and delete the appropriate "J" handler(s). Execute the BUILD BOOT command. The last word in standalone memory field zero (location 7777) contains the highest field used in bits 6-8. This word may be con- veniently changed with the CCL MEMORY command. If it is desired to initially limit each timeshared user to a cer- tain amount of memory, execute a MEMORY command prior to starting MULTOS/8. Each user may change his maximum memory size by issuing a CCL MEMORY command after MULTOS/8 is running. If it is desired for all users to have virtual 32K machines, then the following command will accomplish this: .MEMORY 7 If you do not have 32K of physical memory, yet you desire all terminals to be initialized to 32K of virtual memory, you must use ODT to change the last word of memory field zero. The following will accomplish this: .ODT 7777/ 0200 0270 ^C This will set MULTOS/8 to initially assign each timeshared user a virtual 32K machine. Remember, however, in prac- tice, it is usually best under timesharing to reduce the initial memory size assignment by issuing a MEMORY command just prior to starting MULTOS/8. It is suggested that the following will work very nicely in most installations (es- pecially those with 3 or 4 terminals): .MEMORY 1 Timesharing may now be started by entering: .R MULTOS Enter the time as requested by the dialogue. The system will begin timesharing. A "null" program is run by MUL- TOS/8 when there is nothing else to do. The "null" program consists of displaying the low order time in the AC and the high order time in the MQ. First log on terminal # 1 (the standalone terminal) by keying CTRL/H. A "&rt;" prompt character should appear. If a password file had been created earlier, the password for terminal # 1 must now be entered. The password is NOT echoed. Depress the RETURN key. If the password were entered correctly, the dot from OS/8 should appear. If no password file is present, the log on procedure is simply CTRL/H and RETURN. The remaining terminals may be logged on using the pro- cedure outlined in the paragraph above for terminal # 1. 4. Use of IOTs under MULTOS/8 Since the user mode of the PDP-8 CPU is activated during tim- esharing operations, the CPU will not directly execute any IOT or Group II microinstruction containing an OSR or HLT. These instructions instead cause a hardware interrupt and MULTOS/8 must simulate the action of these instructions. The action taken for each IOT, OSR and HLT is explained in the paragraphs below. 4.1. Standard PDP-8 IOTs Many standard IOTs are implemented in MULTOS/8 for use under timesharing. Most of these IOTs behave under tim- esharing exactly as they would in standalone, but there are some small differences. The action taken by MULTOS/8 for each of these trapped instructions is explained below. Additionally, if any device is not assigned to a user, any IOT issued to that device will be treated as a NOP. IOT CODE MULTOS/8 ACTION Processor IOTs SGT 6006 In EAE-equipped systems, the next instruc- tion is skipped if the "GT" flag is set. CAF 6007 The user Link and AC are cleared. If EAE is present, then it is set to mode "A" and the "GT" flag is cleared. All assigned devices are de-assigned. Paper Tape Reader/Punch IOTs RSF 6011 Skip if the high speed paper tape reader flag is set. RRB 6012 Read high speed paper tape reader buffer. RFC 6014 Clear the 128-character MULTOS/8 high speed paper tape reader buffer and fetch the next reader character. RRC 6016 Read reader character and fetch next char- acter. PSF 6021 Unconditional skip. This instruction will be replaced with a SKP instruction in the user code to reduce IOT simulation over- head. PPC 6024 Punch paper tape with the character con- tained in the user AC. If the 128-char- acter punch buffer fills, the user is sus- pended until the buffer empties 116 char- acters to the punch. PLS 6026 Identical with PPC above. User Terminal IOTs KSF 6031 Skip the next instruction if a character is in the user keyboard input buffer. If no character is present and the next in- struction is a "JMP .-1", the user is sus- pended until a keyboard character is rec- eived. KCC 6032 Clears the user AC and discards the next character in the user keyboard input buf- fer, if one exists. KRS 6034 ORs the next character in the user key- board input buffer with the user AC. This instruction may be repeated as often as desired on the same character since the buffer pointer is not advanced. KRB 6036 Clears the user AC and then loads the user AC with the next character in the user keyboard input buffer. If no character is in the keyboard input buffer, the user is suspended until a character is received. The characters CTRL/C, CTRL/O, CTRL/P, CTRL/Q and CTRL/S clear the user terminal input and output buffers. TSF 6041 Unconditional skip. See description of PSF above. The instruction is replaced with a SKP in the user's code to reduce IOT sim- ulation overhead. TCF 6042 Treated as a NOP. TPC 6044 The character in the user AC is transmitted to the user terminal. If the 128 character user terminal output buffer fills, the user is suspended until the buffer empties 116 characters. TLS 6046 Identical to TPC above. More Processor IOTs CDF 62X1 Change user relative data field. Identical to operation on a standalone PDP-8 except that the physical fields are assigned dyn- amically by MULTOS/8. CIF 62X2 Change user relative instruction field. See comment above for CDF. CID 62X3 Change user relative instruction and data field. See comment above for CDF. RDF 6214 Read relative data field into AC 6-8. See comment above for CDF. RIF 6224 Read relative instruction field into AC 6-8. See comment above for CDF. CUF 6264 Clear user flag. Treated as a NOP for user jobs, but honored for MULTOS/8 executive tasks. Line Printer IOTs LSF 6661 Unconditional skip. See comment above for the PSF instruction. LPC 6664 Transmit the character in the user AC to the line printer. If the 128 character line printer buffer fills, the user is suspended until 116 character have been emptied. LLS 6666 Identical to LPC above. TM8 Magtape IOTs LWCR 6701 Load word count register. CWCR 6702 Clear word count register. LCAR 6703 Load current address register. CCAR 6704 Clear current address register. LCMR 6705 Load command register. LFGR 6706 Load Function and Go register. Upon execu- tion of this instruction, the user is sus- pended until the TM8 flag sets. RWCR 6711 Read word count register. CLT 6712 Clear transport's master registers. RCAR 6713 Read current address register. RMSR 6714 Clear AC and read main status register. RCMR 6715 Read command register. RFSR 6716 Read function and status register. SKEF 6721 Skip if error flag is set. SKJD 6723 Unconditional skip. The user is suspended until the TM8 hardware job done flag sets. See comment above for PSF instruction. SKTR 6724 Skip if tape unit ready. Unconditional skip due to the fact that the MULTOS/8 handler for the LFGR instruction insures that the tape unit is ready. See comment above for PSF instruction. CLF 6725 Clear transport controller and master registers. Identical to CLT above. OSR 7404 OR the hardware or the user Switch Regi- ster with the user AC. See comment below in the SSR instruction. HLT 7402 Halt the virtual machine. A halt message is transmitted to the user terminal. A CTRL/P will restart the user program at the location following the HLT instruc- tion. 4.2. Special MULTOS/8 IOTs In addition to the standard IOTs above, MULTOS/8 also sup- ports special IOTs which are only effective under tim- esharing. These IOTs are described below. IOT CODE MULTOS/8 ACTION TSSS 6107 Identical to TSS instruction below. FSD 6110 File Structured Device Handler IOT. Under MULTOS/8, it is far more efficient to let the timesharing system handle file struc- tured I/O rather than simulate the necessary IOTs. This IOT allows any file structured device to be accessed for read- ing or writing. All file structured hand- lers appear to be always resident in the last page of field zero. The calling sequ- ence is illustrated below: FSD /file structured call DEVNO /device number PNTR /pointer to arg list in DF TSS 6111 Skip if timesharing. This is an uncondi- tional skip if MULTOS/8 is running. See comment above for /Psf/ instruction. SSR 6112 Set Switch Register. The content of the user link governs the precise action of this IOT. If the user link is clear, MUL- TOS/8 will set a flag to indicate that subsequent user OSR instructions desire the hardware Switch Register to be ORed with the user AC. If the user link is set, then the user AC is stored in the user Switch Register. Subsequent user OSR in- structions cause the stored user Switch Register to be ORed with the user AC. In either case, this instruction clears the user AC. The user link is unchanged. RCR 6113 Return Clock Rate. The number is real time clock ticks per second is loaded into the user AC. TOD 6114 Time-of-Day. The time of day in clock ticks is returned in two locations as specified by the content of the user AC: USER AC(0): 0= Return high order time in AC, low order time in MQ. 1= Return time to DF location specified by contents of next memory location. USER AC(11): 0= Return clock ticks since mid- night. 1= Return negated ticks until midnight. DATE 6115 Return the date in a format determined by the content of the user AC: USER AC = 0: AC(0-11) <-- L O system date word USER AC = 1: AC(0-2) <-- 0 AC(3-4) <-- H O year bits AC(5-11) <-- 0 USER AC = 2: AC(0-11) <-- L O system date word MQ(0-2) <-- 0 MQ(3-4) <-- H O year bits MQ(5-11) <-- 0 USER AC = 3: AC(0-5) <-- Day AC(6-11) <-- Month MQ(0-11) <-- Year (AD) TASK 6116 Load the user AC with the user task num- ber. IHLT 6117 Halt the user task without transmitting a halt message to the user terminal. SYN 6120 Suspend. This IOT allows a user job to suspend itself so that it may have its next time quantum in its entirely to com- plete some time critical operation. STM 6121 Suspend for the number of clock ticks specified by a double precision number the location in the data field of which is specified by the contents of the next mem- ory location. The high order bits of the double precision number are located in the lower memory address. RAN 6122 Load the user AC with a random number in the range 0 - 7777 octal. The generator is based on DECUS 5-25 by P. T. Brady. RSA 6123 Return to standalone OS/8. If this IOT is executed by terminal # 1, the timesharing system is stopped and control is returned to standalone OS/8. If any other terminal executes this instruction, it is treated as a NOP. TALK 6124 Talk to another terminal. The content of the user AC is transmitted to the terminal number specified in bits 0-2 of the user AC. If the destination terminal's output buffer is full, or if an invalid terminal number is requested, the instruction is treated an a NOP. If the character is transmitted to the destination terminal, the next instruction is skipped. In both cases, the user AC is unchanged. SPR 6125 Return system parameters to user. The par- ameters are returned to a (at present) 5 word block in the user's DF in accordance with the following: WORD CONTENTS 0 User task number. 1 Number of entries on print spooler queue. 2 Bits which are set indicate active tasks (e.g. if bit 1 is set, then terminal # 1 is active, etc). 3 Bits which are set indicate task is pres- ently outputting to its terminal. 4 Bits 3-5 Number of terminals on the system. 6-8 Number of available memory fields. 9-11 Number of physical swap- ping fields. SPOL 6660 Spool a file to the line printer. The cal- ling sequence is: TAD (PRINT /"PRINT" is in user DF SPOL /the spooling IOT JMP NOSPOL /Spool request was rejected /AC contains error code: /1 = spool queue is full /2 = device zero selected (normal return) /returning AC is clear ... PRINT, (control word) /BIT(s) MEANING /0 0=queue; 1=de-queue /1 - 6 unused /7 fold lower case to / upper case /8 - 11 device number TEXT /PRINT1LS/ /file name in stripped /6-bit ASCII 4.3. File Structured Device IOTs If a user program attempts to issue an IOT to a file structured device, it is treated as a NOP. The device may be accessed, however, with a standard OS/8 call. MULTOS/8 handles all file structured devices itself rather than simulate their IOTs. This results in far greater effici- ency and speed than IOT simulation overhead. Since all file structured device handlers appear to be permanently resident in the last page of the user's field 0, no space need be allocated by user programs for these handlers when running under the MULTOS/8 timesharing system. The entry points are obtained in the standard way via the USR as outlined in the DEC OS/8 Software Support Manual. 5. Buffering Many of the hardware devices supported under MULTOS/8 have their input/output buffered in memory areas with the timeshar- ing executive. For example, when an RFC instruction is issued by the user to start the high speed paper tape reader, MULTOS/8 clears its 128-character reader buffer and starts the reader. As the user issues RRC instructions, the buffer is unpacked and characters are transmitted to the user just as though the sys- tem were running in standalone mode. When outputting to the line printer, for example, if the printer is busy with the previous character, the current character is stored in its 128- character buffer. If an output buffer fills, the user is sus- pended until the buffer is nearly empty. This method allows overlapped I/O which can, in many cases, actually result in faster program execution than in standalone mode. 5.1. TD8E DECtape Operation If you purchased TD8E DECtape support, then your MULTOS/8 will handle up to 8 TD8E DECtape transports. There are some restric- tions under which the system operates during DECtape transfers. The software design strategy is this: Determine the desired DECtape block number. Compute the approximate time in clock ticks for the tape to travel from the block currently over the read head to the desired block. If the desired block is more than two blocks away, a "countdown" flag is set that is ISZed by the real time clock handler. When the countdown flag overflows to zero, the DECtape is serviced and the desired block is transferred. At the completion of block transfer, all outstanding in- terrupts from other devices are serviced. If all blocks have been transferred, then interrupts are re-enabled and user program execution is continued. During DECtape transfers, program execution will continue and all devices will continue to be serviced, but a noticeable slowdown in system operation occurs. However, since even a full field DECtape transfer requires only about a half second, the slowdown is not severe and normally imposes no problems. In fact, the most noticeable event during a DECtape transfer is that the line printer continues to print, but at a slower rate. DECtape requests are queued; therefore, you should expect some delay if other terminals are also requesting DECtape access. While it is perfectly permissible to print spool a DECTape file, it is advised that the file first be transferred to a high speed device (such as SYS: or RKA1) and then spooled from that device. This is especially helpful if other DECtape acces- ses are also being made. 6. The Print Spooler MULTOS/8 can spool up to 32 files of any length for output to the line printer. It is important to note that, to allow for maximum user SYS: size on the main swapping disk, the timeshar- ing system simply queues the file names and leaves the files in place on their devices. The print spooler reads the file from its original location one block at a time and outputs the text to the line printer. In consequence of this, it is important not to the move the spooled file or to write over it. The spooler has provision to compensate for time delays in line printers which do not notify the processor via a busy line of their status. If you request, any number of nulls may be trans- mitted after a line feed or form feed to allow time for the hardware operation to take place. A page line count is main- tained by the spooler and, when a form feed is received, the appropriate number of nulls are transmitted to allow time for the form feed operation to complete. To allow printers printing 8 lines per inch, a page line count of 88 lines is assumed. If your printer interface provides for a busy indication, then the nulls are not needed and are not transmitted. MULTOS/8 also monitors the printer error flag, if present, and takes action to stop printing until the error is cleared. The spooler is called with the program SPOOL.SV which is pro- vided with the MULTOS/8 software. The program simply calls the command decoder and allows the user to specify the files to be spooled. Since SPOOL.SV called the command decoder in special mode, the maximum number of files that can be spooled at one time is five. If more files are to be spooled, simply call SPOOL.SV again. An example follows: .R SPOOL *DTA0:A.LS,SYS:B.LS,RKA1:C.TX,J3:D.LS,J2:E.DI .R SPOOL *J2:MULTOS.LS,MULTOS.MP . The above instructions would caused seven files to be queued to the print spooler: 1) the file A.LS on DECtape unit 0, 2) the file B.LS on the user's system device, 3) the file C.TX located on RKA1, 4) the file D.LS located on terminals # 3's system device, 5) the file E.DI located on terminal # 2's system device, the file MULTOS.LS on terminal # 2's system device and, finally, 7) the file MULTOS.MP also on terminal # 2's system device. If it is desired to de-queue any file that was previously sent to the spooler, the same procedure is followed except that the program UNSPOO.SV is called. 7. Differences with Standalone Mode Although the attempt has been made to be as compatible with standalone OS/8 as is practicable, some differences so exist. These are herein listed: 1) Output IOTs such as PLS, TLS, LLS etc, may be used under timesharing without checking the flag first. Norm- ally, in standalone operation, to print a character on the line printer would require a loop similar to the follow- ing: LSF /Line printer flag up ? JMP .-1 /No, wait for it LLS /Yes, print the character However, under the MULTOS/8 timesharing system, only the LLS is needed to effect the transfer of the char- acter to the line printer output buffer. 2) During MULTOS/8 initialization, a file called DATE.SV is created on the standalone system device (which is also the J1: system device). Under timesharing, when the CCL command DATE is executed, not only will the date be print- ed, but also the time-of-day. The DATE.SV file may be copied onto the other "J" devices via the CCL command COPY: .COPY J2:<DATE.SV .COPY J3:<DATE.SV . If the time feature is not desired, simply delete the DATE.SV file via the CCL DELETE command. 3) Certain CCL commands will not work properly under MUL- TOS/8 because they attempt to directly access file struc- tured devices. For example, the CCL command UNLOAD will be treated as a NOP if it issues IOTs directly to file struc- tured devices. However, an UNLOAD command issued to TM8 Magtape will work correctly because the TM8 is a non-file structured device. A REWIND command issued to TD8E DECtape will work correctly because CAMP.SV simply requests a read of block 1. In short, any command or user program which issues IOTs directly to file structured devices must be modi- fied to run under the timesharing system. This should present no difficulties since most programs are des- igned to access all devices via standard OS/8 calls which are properly handled by MULTOS/8. 4) BRTS.SV contains a loop which should be changed to run more efficiently under timesharing. The change is: .GET SYS BRTS .ODT 6415/ 1254 7200 6417/ 5334 5216 ^C .SAVE SYS BRTS . 5) If EAE is installed on your system and your processor is not a PDP-8/I, then install the following patch in FRTS.SV to enable EAE operation: .GET SYS FRTS .ODT 13751/ 3767 7200 ^C .SAVE SYS FRTS . 6) Any program that has "tight loops" containing a CDF instruction will slow down under timesharing. Probably the worst offender of the standard OS/8 cusps is OS/8 EDIT. A much better text editor (in more ways than one!) is the DEWAR ICE (Intelligent Correction Editor) which was speci- fically designed to run under timesharing systems. It will, for instance, close out a 250-block file from the first page to the last in less than 4 seconds under tim- esharing!. TECO fairs much better under timesharing and slows down only slightly. With the core size set to 5 or less, PAL8, will run virtually as fast under MULTOS/8 as in standalone unless the system is heavily loaded. Since the FORTRAN II system issues an incredible number of CDF (most of the time needlessly!), FORTRAN II programs will run more slowly under timesharing than standalone mode. 8. Hints for Programming Under Timesharing Since all IOTs, OSRs and HLTs must be simulated under MULTOS/8, there are some programming methods which result in substanti- ally better throughput. A cardinal rule for running under a timesharing system is NEVER (if at all avoidable) put a CDF, CIF or CID instruction in a tight loop which is executed many times. Although in standalone operation, a CDF requires only 1.2 microseconds to execute, it could require many times that to execute under timesharing (depending whether the desired field was memory resident, for instance). Since MULTOS/8 requires no special hardware, all PDP-8 instructions after a CIF or CID instruction and prior to a JMS or JMP instruction must be simulated. Do not issue CIFs or CIDs unless you actu- ally intend to change the instruction field via a JMS or JMP within the next few instructions. If a program is intended to run only under timesharing, take advantage of the fact that most "skip on flag" instructions are not required. Just issue the data transferring IOT directly. If, for example, you desire to punch a character on the high speed paper tape punch, just issue a PLS without checking the punch flag. Keep programs entirely in one memory field if this is possible and practical. Since file structured device hand- lers are always resident in the last memory page of field zero, no space need be allocated for them for use by the user pro- gram. Use small buffers (1 or 2 blocks) when doing I/O with non-file structured devices. Use large buffers when doing I/O with file structured devices. These two methods can greatly increase total system throughput when the system is heavily loaded. 9. Some Proof of the Pudding This manual was prepared in its entirety under MULTOS/8 using the DEWAR ICE Editor, the DEWAR ACID text processing program, TD8E DECtape, a Beehive 9600-baud CRT, a TI-810 line printer and the MULTOS/8 Print Spooler.
Feel free to contact me, David Gesswein djg@pdp8online.com with any questions, comments on the web site, or if you have related equipment, documentation, software etc. you are willing to part with. I am interested in anything PDP-8 related, computers, peripherals used with them, DEC or third party, or documentation.
PDP-8 Home Page  PDP-8 Site Map  PDP-8 Site Search