Note: The password for the demonstration MULTOS system on this site is
blank. Just hit return at the password prompt to log in.
MULTOS/8 Operating System (Jul.13, 1985)
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
Mirror site if this site is slow
highgate.comm.sfu.ca