TDOS8.WS4
---------
- "For Networks and Multi-user Systems -- TurboDOS"
Ron Fowler
"Microsystems", Vol.5, No.8, August 1984, p.58
(Retyped by Emmanuel ROCHE.)
Gone are the days when simple operating systems satisfied the needs of most
small-system users. Once written primarily to satisfy the relatively modest
requirements of hobbyists and experimenters, microcomputer operating systems
are now designed for performance, with special concern for providing maximum
versatility to the user.
One such operating system is TurboDOS, a product of Software 2000, Inc.
Written originally for the Zilog Z-80 (and recently converted for the Intel
8088/8086 family), this package offers a high degree of CP/M compatibility,
multi-tasking background processing, powerful networking capability, built-in
communications facilities, print spooling, and much more.
This article will take an in-depth look at this powerful system: what you can
expect to gain by using TurboDOS, and what (if anything) you might lose by
giving up CP/M in favor of TurboDOS. We will examine the TurboDOS operating
system and its utilities in detail, and conclude with a section addressed to
the programmer or system developer interested in writing TurboDOS
applications.
(ROCHE> Unfortunately, when I read this article, 30 years later, it is obvious
that Ron Fowler had no experience of MP/M, the multi-tasking, multi-user
version of CP/M... By the way, each time that he says "CP/M", you must
understand: "CP/M 2.2". TurboDOS is, in fact, a multi-processor version of
MP/M. That's why it is more compatible with MP/M than with CP/M (2.2)! Poor
Ron Fowler, not knowing MP/M, is often ecstatic by the capabilities of
TurboDOS, which are exactly (except multiple processors) those of MP/M...)
Background
----------
Much of the information presented here is based on my own custom
implementation of TurboDOS Release 1.3. The evaluation copy of the software
was provided courtesy of North Star Computers, Inc. North Star provides a full
implementation for their own hardware, and offers it bundled with Turbo-Plus,
a TurboDOS enhancement package (which I hope to review in a future article).
While the 1.3 Release of TurboDOS provides Intel 8088 compatibility, this
discussion is limited to the Zilog Z-80 version. The evaluation system is a
networked version, interconnecting a Z-80-based S-100 Bus system with a
disk-less single-board Z-80 computer, through Intel 8255 PIO chips in each
computer. Figure 4 is a schematic of the circuit used to interconnect the 2
systems.
The S-100 Bus system consists of an Integrand mainframe housing a Delta
Products 4-MHz Z-80 CPU, 128K of CompuPro memory, and various I/O boards.
Overview
--------
TurboDOS is structured in a 2/3 arrangement: the main body of the TurboDOS
operating system is analogous to CP/M's CCP and BDOS. This portion is machine-
independent, and is supplied as a group of Microsoft-format REL (relocatable
machine code) files. The remainder of the system is similar to CP/M's BIOS,
and consists of a collection of *DEVICE DRIVERS* (for such things as disk
drives, printers, and network communications). These driver modules are
written by the system integrator; if you purchase a packaged system, these
drivers are already written for you.
The modular design of the TurboDOS operating system allows it to be configured
in an almost infinite variety of forms. Table 1 lists a number of the more
commonly-used modules.
Table 1. Common TurboDOS modules
(NOTE: Modules denoted by an asterisk (*) after the module names are resident
processes.)
Name Function
---- --------
LCLUSR* Supports the Transient Program Area
LCLMSG Contains the system error messages
CMDINT Command line interpreter, similar to CP/M's CCP
AUTLOG Supports COLDSTRT.AUT and WARMSTRT.AUT files
NETSVC* Services network requests. Necessary only in processors that provide
facilities to the network (servers)
NETREQ Makes requests of the network
NETTBL Defines network topology from viewpoint of the local node
DSPOOL* Printer de-spooler (background print)
FLUSHR* Periodically flushes disk buffers
OSNTRY Decodes system calls (C-functions and T-functions)
FILMGR Handles the local file system.
Nodes without disk storage do not require this module.
FILLOK Handles file interlocks
FFOMGR Handles the special FIFO files
FASLOD Fast program-load optimizer
BUFMGR Manages the disk buffers
DSKTBL Defines the available disk drives (local and remote)
CPMSUP Special support for CP/M.
Makes TurboDOS operating system more CP/M-compatible.
CONMGR Handles all console I/O
CONTBL Connects CONMGR to hardware console driver module(s)
DOMGR Handles batch commands
LSTMGR Handles printer output
SPOOLR Handles background spooled-print functions, as well as routine printer
output over the network
RTCMGR Maintains system date and time (real-time clock)
BNKMGR Banked memory support
DSPCHR Multi-tasking kernel; controls CPU dispatching between competing
processes, as well as synchronization and inter-process communications
DSPSGL Special "null" dispatcher; allows a non-multi-task version of TurboDOS
to be created
MEMMGR Controls dynamic allocation of memory
OSLOAD Special module used to create a loader program
COMSUB Common subroutines needed in all versions of TurboDOS
Each major function is isolated in its own module, many of which can be added
to and deleted from the TurboDOS operating system by the user (ROCHE> ? A
*USER* fine tuning a Disk Operating System?), thus providing the ability to
add or subtract functionality. For example, the SPOOLR module contains the
necessary code to implement the TurboDOS print spooling function (described
later). By deleting this module in systems that do not require print spooling
(e.g., single-user systems), the TurboDOS operating system can be made
smaller, allowing more room for disk buffers and transient programs.
Flexible as this assortment of modules may be, it would be demanding a lot to
ask all users to build their own TurboDOS operating system. To avoid this,
TurboDOS is packaged with a number of "standard" versions (Table 2), each
providing a commonly-required configuration.
Table 2. Standard TurboDOS configuration packages
Name Function
---- --------
STDLOADR Cold-start system loader
STDSINGL Single-user version, no spooling
STDSPOOL Single-user version with spooling
STDMASTR Network master
STDSLAVE Network slave without local disks
STDSLAVX Network slave with local disks
(ROCHE> So, The first 3 versions correspond to CP/M, and the last 3 versions
to MP/M. Note the emphasis on spooling. In fact, Digital Research was selling
one DESPOOL program for CP/M Versions 1 and 2, but it only ran reliably on
DRI's Intel MDS-800 microcomputers...)
The system may be configured (and reconfigured) conveniently by using GEN.COM,
the supplied system generation utility. This program is, in fact, a
sophisticated linkage editor that takes its commands from disk files,
providing a high degree of automation in the system generation process. An
additional file (called a PAR file) can be specified to GEN.COM. The PAR file
references, *BY NAME*, parameters within the system. It is a powerful concept:
you can restructure major portions of the system (such as the network
definition tables, disk assignment tables, command-search paths, and many
others) merely by editing the PAR file and regenerating the system.
Most implementations of TurboDOS provide for a boot PROM, allowing the system
to start up automatically at power-on. The boot PROM contains just enough code
to load a file named OSLOAD.COM into the program area. OSLOAD then brings in
the rest of the TurboDOS operating system. My own implementation boots from
CP/M, running OSLOAD as a CP/M transient program. This suits my particular
needs better than setting up a boot PROM -- and, incidentally, illustrates the
versatility of TurboDOS.
When the TurboDOS operating system start up, it prints a sign-on message,
followed by the system prompt. This is where TurboDOS begins to differ from
standard CP/M: the prompt contains the user number, as well as the drive name.
(TurboDOS supports 32 user numbers -- twice as many as CP/M; and the familiar
angle bracket prompt character of CP/M is replaced with a curly bracket:
"A}".)
Depending on how the system is set up, it may be necessary to *LOG IN* before
any useful work can begin. A utility, LOGON.COM, is provided for this purpose,
and another, LOGOFF.COM, is used to terminate the session. TurboDOS may,
optionally, be instructed to maintain a file of logons and logoffs, and
require that a password be specified at login. Passwords are maintained in a
special user accounts file maintained with a text editor. Additional security
allows logon to be retricted to a single user area (this restriction is
specified in the user accounts file). Another login option provides for
privileged logins (non-privileged logins may not change user areas, and
several of the supplied utilities will function only for privileged logins).
The rhythm of this system is a bit different from that of CP/M. For example,
there is no warm boot, since the entire TurboDOS operating system remains in
memory at all times. (CP/M 2.2, of course, allows the Console Command
Processor to be overwritten by a user program, thus requiring that a portion
of the CP/M 2.2 operating system be read back in from disk when a program
terminates) (ROCHE> CP/M Plus ("CP/M Version 3" in the USA), launched in 1983
(so, one year before this article), is a single-user version of MP/M... So,
since it supports "banked memory", the CCP is reloaded instantly from memory.
Each time CP/M Version 2 was spending too much time reading the floppy disk,
the data was stored in memory. 2 examples: the CCP and the directory. That's
why CP/M Plus, in a good implementation, is much faster than CP/M 2.2 running
on the same hardware.)
Additionally, there are no built-in commands; all commands are loaded as
transient programs from the disk. Hence, functions such as ERASE and RENAME
take a bit longer to complete than their CP/M 2.2 counterparts, because time
is needed to load them. Most of the utilities, however, make up for this in
expanded power and versatility, as we shall see. In any case, if a hard disk
is used, the extra time is so small as to be unnoticeable.
From the command level, TurboDOS works similarly to CP/M in that commands are
typed into the system, and the specified files are executed as transient
programs. If, however, your TurboDOS is part of a network, the programs and
files that you use are not necessarily located on your local computer (in
fact, your local computer may not even have any storage facilities (disk
drives) at all!). This networking capability is one of the strongest features
of TurboDOS, and we will examine that aspect of the system in detail later.
CP/M compatibility
------------------
TurboDOS is compatible with almost all CP/M programs. There are only a few
CP/M programs that I have seen that do not work properly under TurboDOS --
mostly public domain utilities that access some of the more obscure BDOS
system calls (7, 8, 24, 28, 29, 31, and 100-107). However, TurboDOS may be
installed with an optional CP/M-support module that will simulate these
missing functions.
Another incompatibility involves CP/M's SUBMIT processing: I am aware of
several commercial packages that make use of CP/M 2.2's special $$$.SUB file
for batch-command processing, and that do not work under TurboDOS because the
$$$.SUB file is not processed. Another optional module is supplied, that
modifies the TurboDOS batch function to emulate CP/M 2.2 more closely (but at
the expense of slowing down DO file processing). The packages mentioned do
work properly under TurboDOS if this module is installed.
Multi-tasking the CPU
---------------------
Beginning a more detailed study of TurboDOS, one of the first things that we
should note is that it can execute more than one task at a time; this
capability is usually referred to as *MULTI-TASKING*. (ROCHE> And MP/M, the
multi-user, multi-tasking version of CP/M, had done it for at least 5 years
when this article was written...)
Integral to the concept of multi-tasking is the *RESIDENT PROCESS*. A resident
process is a program that executes within the system; under TurboDOS, resident
processes are physically attached to the operating system, but logically
maintained outside of it. (That is to say: they perform their task by
executing operating system calls, in the same way that user programs do. The
difference is that user programs are transient in nature, while resident
processes are always present.)
At any given time, a process may be in any of 3 states: ready, running or
suspended. A running process is one that is currently executing on the CPU; a
ready process is one that is waiting to execute (but otherwise ready). A
suspended process (sometimes referred to as "blocked") is a process that is
waiting for some event to happen, or waiting for a period of time to expire.
(TurboDOS provides a system call that allows a process to delay execution for
a fixed time interval.)
The suspended state is perhaps the most significant. A process that is
suspended is "stacked" on one of a number of special lists (called
"semaphores"), and thus does not slow down the system by consuming CPU cycles.
At any given time, most processes will be in this suspended state. Hence, user
programs that are CPU-intensive (i.e., spend most of their time processing
data rather than waiting on I/O devices) run nearly as fast as they would on a
single-task system.
A number of "background" processes, present in each CPU running TurboDOS,
perform such actions as monitoring the network, flushing disk drive buffers
periodically, etc. Additionally, user-written resident processes are
supported; any such process is physically part of the TurboDOS operating
system, and must be added to TurboDOS when the operating system is generated.
Banking the system
------------------
TurboDOS makes good use of bank-selectable memory. When more than one bank is
available, most of TurboDOS resides in Bank 0, while transient programs
execute from Bank 1. (ROCHE> Exactly like CP/M Plus, the single-user version
of MP/M, launched one year before this article...) Since a full-featured
network-master version of TurboDOS exceeds 24K in size, this frees up a lot of
program area. (ROCHE> That's why MP/M used banked memory, since MP/M was a
multi-user version of CP/M. So, each user wanted to have its own TPA, and most
CP/M program wanted as much RAM as possible... So, the only technical solution
was to provide "banks" of memory to each user.)
Banked systems are often measured by the amount of *COMMON MEMORY* that they
consume. Common memory is a section of memory (usually located physically at
the top of the address space) that is always present within the CPU's address
space, regardless of which memory bank is switched in. Since the Zilog Z-80
CPU is limited to 64K of total address space, it is obvious that the common-
memory requirement increases at the expense of the banked segments, and thus
at the expense of memory available to transient programs (in the case
of TurboDOS, at the expense of the allowable size of the operating system).
The only portion of TurboDOS that *MUST* remain in common memory is a small
inter-bank communications module, plus some portions of the interrupt-service
routines. (ROCHE> Exactly like MP/M and CP/M Plus...) Thus, the amount of
transient program area (TPA) available is 63K, even if banked memory hardware
allows bank switching only on 4K or 16K boundaries. (ROCHE> Nothing news,
here. There is even a version of CP/M 2.2 for the Epson QX-10 having a 63.5K
TPA!...)
A utility program, BANK.COM, allows the TurboDOS operating system to be
switched between banked and non-banked mode. When non-banked mode is selected,
programs must share Bank 0 with the operating system.
Disk drives and files
---------------------
TurboDOS supports file sizes of up to 32MB (ROCHE> Like CP/M Plus...) and a
disk drive capacity of up to 134MB (ROCHE> CP/M Plus: 512MB... Of course,
compared to the 8MB of CP/M 2.2, this appeared to be an improvement... Except
that CP/M Plus had been launched by Digital Research one year earlier!...)
Obviously, such large drives will have a lot of files, and will need a lot of
seek time during such operations as file opens, directory searches, etc.
(ROCHE> That's why directories are cached in CP/M Plus.) In an effort to
decrease this time, TurboDOS supports a special directory format called a
*HASHED DIRECTORY*. (ROCHE> MP/M and CP/M Plus did not go this way.) A disk
directory may, at any time, be restructured as a hashed directory (although
the opposite is not true) by running a program named FIXDIR. (ROCHE> CP/M Plus
has something roughly similar, INITDIR.COM, which restructures the directory
to add date and time stamping of files.) Although hashing the directory made
little difference on my small-capacity floppy disks, a hardware dealer I have
worked with (who sells TurboDOS on IMS systems) reports a dramatic speed
increase on his 40MB hard disk systems. (ROCHE> I am not surprised. Me, from
experience, I only use INITDIR on floppy disks, since it consumes 1/4th of the
directory. On the hard disk, I simply type the date and time at the head of
the files.)
Another technique used by TurboDOS to increase performance is disk buffering.
(ROCHE> Called "disk caching" in CP/M Plus.) The system contains a built-in
buffer manager; moreover, a utility program supplied with the TurboDOS
operating system, BUFFERS.COM, lets you change the size of each disk buffer
and the number of buffers *WHILE THE SYSTEM IS RUNNING*. (ROCHE> Under CP/M
Plus, this is done at system generation time, with GENCPM, by the system
implementer.) These buffers are taken "off the top" of the transient program
area (TPA) (in unbanked versions of TurboDOS). If you are going to run small,
disk-bound programs, you can set up a large number of buffers, and increase
disk access speed. Conversely, memory-hungry programs (such as WordStar)
should be run with a small number of buffers, to provide as much memory as
possible. (ROCHE> Well, with "banks" of memory, each user has its own 64K of
memory...)
(I should point out that, while directory hashing made little performance
difference in my system, increasing the number of disk buffers in the system
increased disk throughput dramatically.) (ROCHE> That's why, after tests,
Digital Research added disk caching to CP/M Plus.)
Systems using banked memory may set up most of the unused part of Bank 0 as
disk buffer space, and not affect program memory space at all.
A fast file-load function supplies yet a 3rd performance increase: generally
used by the Command Interpreter (the portion of the TurboDOS operating system
that processes user command lines), this module allows a section of memory to
be loaded in the fastest manner possible. It works by scanning the disk
allocation map, detecting sequentially-allocated segments, and loading these
segments at the fastest transfer rate of the disk controller. (ROCHE> Under
CP/M Plus, the CCP is reloaded from a system Bank, so it is just a memory
transfer, and using the "Multi-Sector Count", allowing up to 16K to be
read/written in one shot...)
File attributes
---------------
TurboDOS expands on the file attributes employed by CP/M. (ROCHE> ???) The
CP/M "SYSTEM" attribute is replaced by the "GLOBAL" attribute. Files resident
in User area 0 and tagged as GLOBAL are accessible from any user area, thus
circumventing the need to duplicate frequently-used files in each user area of
the disk. (ROCHE> Under CP/M 2.2! But MP/M had been available for at least 5
years when this article was written, and CP/M Plus one year!) This global
access applies equally to files that are accessed by application programs
(such as WordStar's overlay files), or chained BASIC programs.
ARCHIVE is another (ROCHE> CP/M...) file attribute that saves time and space
when backing up files. New files are created with the ARCHIVE attribute off.
When a file is backed up using the COPY program, the ARCHIVE bit is set; when
a file is changed (extended, or written to with a random write), TurboDOS
resets the ARCHIVE attribute. COPY can be instructed not to copy files that
have been archived and have not been modified since. This process is called
"incremental backup". (ROCHE> And is provided by CP/M Plus' PIP...)
The final "new" file attribute is FIFO (ROCHE> This is specific to TurboDOS.);
it defines a special type of file accessed using a "first-in, first-out"
(FIFO) technique. FIFO files are accessed from programs like any other file,
except that sequentially-written records are appended at the end of the file,
and sequential reads are taken from the beginning. Moreover, a FIFO file may
be declared as an in-memory file (accessed much faster, since it really does
not exist on disk at all; this limits the size of the file, however, to
available memory.) (ROCHE> Most CP/M Plus implementations have a RAMdisk, so
the limit is 32MB, in this case.) This whole scheme provides a very handy
technique for passing data between background processes, and between programs
executing on different processors. Since a FIFO file can be made to "suspend"
(deactivate) a process reading the FIFO file when it is empty, it is easy to
visualize a background process that only "comes alive" when a program posts a
record to a file monitored by the background process.
Two special utilities are provided to work with FIFO files: SEND and RECEIVE.
SEND is invoked with a FIFO filename and a text string to place in the FIFO.
RECEIVE takes only a FIFO filename; it reads one record from the FIFO file
(thus deleting the record) and displays it. Together, these 2 utilities may be
used to form a rudimentary mail facility between users. (ROCHE> Better to use
CP/NET, which has been available for years...)
File interlocks
---------------
TurboDOS features file and record lockouts, since it supports background
processes that may access files at the same time as foreground processes. In
fact, network support for shared files requires at least one such process in
each file system offering file resources to the network. Interlocks are used
to coordinate file accessing by multiple simultaneous processes and necessary,
for example, when an update program must replace an inventory item's wholesale
and retail price fields. With no coordination, a querying program might read
the record sometime after the update program has begun writing new data, but
before the write is complete. Hence, the querying program reads inconsistent
data. With record locking capability, however, the update program can obtain
exclusive access to the record, "locking out" any other process that may be
attempting to access the same record.
File lockouts under TurboDOS may be configured for strict MP/M compatibility;
thus, existing programs written for MP/M's record-locking techniques (ROCHE>
Like Digital Research's Access Manager...) will work correctly under TurboDOS
(ROCHE> Fortunately, since TurboDOS is a multi-processor version of MP/M.
Hence the need to be compatible with its parent. It is the classical "chicken
and egg" problem.) Alternatively, a set of compatibility flags is available
(during system generation) to change certain rules, providing a number of new
modes not previously available under MP/M. (ROCHE> Modes which disappeared
with TurboDOS, while CP/M is still alive, 30 years later...)
Networking
----------
TurboDOS provides a plethora of features, facilities, and utilities, but, to
me, the single most outstanding one is its built-in networking capability.
(ROCHE> Never heard of MP/M, launched 5 years earlier by Digital Research?
Never seen the advertisements for CP/NET in computer magazines? Why do you
think that TurboDOS is compatible with MP/M? For pleasure?) Multiple computers
running TurboDOS may be interconnected and share such relatively expensive
peripherals as disk drives, printers, plotters, etc.
In this discussion, I will use the terms "node","CPU" and "processor"
interchangeably. (ROCHE> Not a good thing. It shows that the concept of a
network is still a novelty for you. You should have read the MP/M guides
published several years earlier...) Generally, a node can be thought of as a
workstation containing a CPU, memory, a network interface, and (optionally) a
terminal, disk drives, and printers. A node is attached to the network via one
or more connection points. It usually has some peripherals, but does not
*REQUIRE* any.
Two other terms will be used to refer to processors on the network: *MASTER*
(or *SERVER*) and *SLAVE* (or *SATELLITE*). Generally, a server processor
provides resources to the network (such as disk storage and/or printers),
while satellites do not. If satellites have local disks, these can also be
available to the network if the satellite contains the network service module
(NETSVC).
First, it is important to note that TurboDOS does not support multiple users
on a single CPU. (ROCHE> Yes, since TurboDOS is a multi-processor version of
MP/M.) The philosophy, here, is that, since processors and memory are
relatively cheap, why attempt to split up a hundred dollars or so in CPU and
memory hardware when each user can have his own CPU and memory, and suffer
none of the processing delays that are so severe in such operating systems as
MP/M and OASIS? (ROCHE> Good question. By the way, why did TurboDOS
disappear, while MP/M and OASIS are still running, 30 years later, under
emulators on the Internet?)
This concept works, and works well. (ROCHE> You should tell Intel, which never
managed to make its 8086 works this way. I cannot resist mentioning the
following, taken from "Chapter 1: Introduction" of the "Intel 8088/8086 Family
User's Manual", October 1979 (Yes, 5 years *EARLIER*!), page 1-1:
"The 8086 family architecture is characterized by 2 major principles:
1. System functions are distributed among specialized components.
2. Multi-processing capabilities are inherent in the hardware.
3. A hierarchical bus organization provides for the complex data flows
required by high-performance systems without burdening simpler systems
with unneeded capabilities."
This was written in 1979, for a CPU running at 4-MHZ. Today, *45 YEARS LATER*,
Intel has not been able to produce even a single computer using those
"principles"... So, why did Intel, the richest microcomputer company in the
world, never managed to do it, while Software 2000, Inc. (e.g., Mike Busch and
Ron Raikes), did it? Was the Zilog Z-80 CPU so much better than the Intel 8088
of the IBM Clown?)
Each user has full use of his own CPU; delays are generally noticeable only
when shared disk drives are simultaneously accessed by multiple network users.
(Even these delays can be abated by using faster drives with more
sophisticated seek mechanisms -- a cost that can be justified more easily with
TurboDOS, since these expensive peripherals are more easily shared among all
the users.)
TurboDOS supports just about any kind of local network, ranging from simple
implementation involving 2 computers (liked through,say, an RS-232-C channel),
to sophisticated structures with many processors sharing resources over high-
speed data channels. The actual network structure is defined by the system
designer, and implemented in the network driver modules. These modules
constitute what is known in network vernacular as the "physical layer"; they
control the hardware that interconnects the computers.
TurboDOS defines the network as being composed of *CIRCUITS* (which can be
better visualized as a cluster of nodes). A circuit may be composed of up to
255 nodes. Further, there may be up to 255 interconnected circuits in a full
TurboDOS system, allowing for a total of up to 65,535 total workstations in a
TurboDOS network.
The unit of information exchange among network nodes in the *NETWORK MESSAGE*.
This message is a packet of data, containing source and destination node
addresses, byte length and other overhead, as well as the actual data itself
(which may be a disk record, a file control block (FCB), or perhaps a block of
characters to be sent to a printer).
A "forwarding" table may be specified in each node, allowing messages to be
sent between network nodes that are not, themselves, directly connected.
One of the most common techniques that I have seen for implementing a network
with TurboDOS involves S-100 Bus single-board computers. Generally, one
"master" CPU is provided (to control access to disk drives, printers, etc.),
and one or more "slave" processors are placed on the same S-100 Bus as the
master (often these slaves have no local storage of their own but, instead,
rely on the master to provide storage. The user will see the master's disk
drives as if they were connected to his own CPU.) Typically, high-speed
parallel-port channels are provided to allow network transfers at near-bus
speeds. One such system will, generally, be a circuit in itself; multiple
systems may, then, be interconnected, forming a multiple-circuit network.
Figure 1. A typical network
An example should help tie this all together. In Figure 1, we have 2 network
circuits that are relatively independent. Each circuit has a master and
several slaves, as well as disk drives and a printer. Master-to-slave
communication is through a high-speed parallel bus. Master-to-master
communication is through a Local Area Network (LAN) interface and cable. Note
that slave nodes do not have any local disk storage but, instead, use the
master's disk drive (this will likely be a large-capacity hard disk drive,
segmented into several smaller drives, and apportioned among the slaves).
Circuit 1 consists of 4 nodes: the master and the 3 slaves. Similarly, Circuit
2 consists of 5 nodes: the master and 4 slaves, 3 of which are connected via
modems to dial-in phone lines.
Each of the 2 masters are actually "known" on 2 circuits (their own, and the
other master's) and, thus, have 2 circuit drivers within their TurboDOS
operating systems (and 2 network addresses, as a matter of fact).
This system might be part of an overall data-gathering system where field
agents phone in information to the nodes connected to modems (Nodes 2-2, 2-3,
and 2-4); the high-speed dot-matrix printer might be used to maintain a
"running log" of these transactions. This raw information is sorted and
formatted by programs entered by an operator at the terminal located at Node
2-1 (the only "on-site" terminal in Circuit 2) and made available periodically
to Circuit 1 through the RS-232-C link between circuits, where service clerks
work at terminals, filling these orders. The finished orders are, then,
printed up in the form of invoices on the letter-quality printer located on
Circuit 1.
Thus, most information flow between the 2 circuits will take place between the
2 masters (perhaps under the control of a resident process in each). It is
possible, however, to allow communications between slaves on different
circuits, using forwarding tables contained in each slave's operating system.
This might be necessary, for example, to allow field salesmen calling into
Circuit 2 to make an inquiry about an order to a clerk working in Circuit 1.
Proper setup of the forwarding tables will allow this (in fact, the Turbo-Plus
enhancement package provides special system functions and utilities that
simplify this kind of communication).
Reconfiguring the network
-------------------------
Although the physical network is defined in network driver modules, TurboDOS
provides a lot of latitude in reallocating resources, using the previously-
mentioned GEN program. Although these resources are not *DYNAMICALLY*
changeable (that is to say: you cannot make changes while the TurboDOS
operating system is running), it is a relatively simple matter to patch the
tables, and regenerate the system.
Figure 2. Drive allocation example
An example should help to clarify this. Referring to Figure 2, we see 2
processors, named P1 and P2, each with local drives A and B. From the diagram,
you can see that each processor has a drive C, which is the opposite
processor's B drive. (These assignments are made in a table contained in each
node's copy of TurboDOS; this table is called the Disk Assignment Table, and
is usually set up in a PAR file.)
Figure 3. Allocation after regeneration
Now, let us consider changing that. Let us say that we want to delete P2's
ability to reference P1's B drive, and increase P1's available storage to
include P2's drive as P1's D. We simply make a few changes in each node's PAR
file, regenerate each TurboDOS operating system, and we have the structure
shown in Figure 3. This concept applies to other resources, such as printers
and print queues.
Printers and spooling
---------------------
Flexibility is apparent throughout the design of TurboDOS, but nowhere is this
more evident that in the facilities available to produce printed output.
Each processor may have up to 16 printers defined in its tables, and each
printer may be accessed either locally or over the network. Since TurboDOS
provides a CP/M-like environment, only one of these printers may be "current"
at any one time for any one user. A utility program, PRINT.COM, lets you
change the routing of your logical printer output, using syntax such as:
PRINT PRINTER=E (or PRINT P=E)
which selects Printer E in your local printer table. In addition, this utility
allows you to select a much more flexible form of printing: *SPOOLED
PRINTING*. (ROCHE> Ever heard of the "DESPOOL (background print utility)
Operator's Guide", Digital Research, 1979? No? It was frequently found in CP/M
Version 1.4 and Version 2.2 advertisements...)
Spooled printing reroutes your printer output: instead of going directly to
the printer, the output is routed to one of 16 *PRINT QUEUES*. A print queue
is implemented as a set of disk files, using filenames of the form: PRINT-
x.nnn, where x is the queue name (A-P, corresponding to each of the 16
possible queues) and nnn is a 3-digit number used to separate different print
jobs within a queue.
Another utility, PRINTER.COM, controls despooling of these print queues. Any
physical printer may be assigned to any of the queues with a command such as
PRINTER E QUEUE=C (to assign Printer E to the C Queue). A 3rd utility,
QUEUE.COM, allows files to be manually entered into any of the various queues.
Let us tie this all together with an example: suppose your TurboDOS operating
system has 2 printers: Printer 1 is a fast dot-matrix printer, while Printer 2
is a slower letter-quality model (remember, either printer may be attached to
our local network node, or to a remote node -- it does not matter *WHERE* the
printer to be used is actually located). Assume that we have to print several
program listings, a couple of letters, and a long report.
First, we will tackle the letters, since they will likely use single-sheet
paper, requiring a good deal of manual intervention. The command:
PRINT PRINTER=B
gives up direct access to the letter-quality printer (we must be careful,
here, to coordinate access with any other network users, since direct printing
by more than one user will result in interspersed characters in the actual
printout). Now, we fire up the word-processor program, and print each letter.
Not so different from CP/M, so far (except for the ability to switch
printers).
Now, let us tackle the program listings. We can begin to make use of print
queues, here, by entering the following commands:
PRINTER A QUEUE=A
PRINTER B QUEUE=B
Now, we have established Queue A as the queue associated with the dot-matrix
printer, and Queue B with the letter-quality printer. Now, we are ready to
print some listings. The command:
PRINT QUEUE=A
routes our printer output to Queue A; now, we can run our language translator
and begin producing the program listings. Since our output is now going to a
relatively high-speed disk file (as opposed to a slow printer), the language
translator finishes long before the first printout is complete.
In fact, the first output file does not begin printing until its associated
queue file is closed (either by the language translator terminating and
returning to the TurboDOS operating system, or by a special end-print control
sequence from the console). While the first file is printing (in the
background), we can run our language translator once more, to generate the 2nd
and 3rd listings. We might also decide to queue some existing disk files:
QUEUE MYPROG.PRN ;Q=A
QUEUE MANUAL.DOC ;Q=A
QUEUE *.UPC ;DYQ=A
(Note that the Q=A options specify which queue to send the file to. The 3rd
example illustrates queuing multiple files by specifying a wildcard filename.
Additionally, the ;DY portion specifies options. In this case, D causes each
file to be Deleted after printing, and Y causes the QUEUE program to displa(Y)
the name of each file to be queued, allowing the operator to select specified
files.)
Now, we are ready to print the letter-quality documents. The command:
PRINT QUEUE=B
switches our printer output to the queue we have previously associated with
the letter-quality printer. (It does not matter that the files that we have
already queued are still printing; they are now destined for the dot-matrix
printer, and changing the destination of our printer output no longer has any
effect on the previously-queued files.) Now, we can use our word-processor,
and send the letters and the report to the B Queue, similar to the way our
language translator output went to the A Queue.
At this point, we have 2 printers running a number of print jobs entirely in
the background, and our console is free for new work. In addition, any number
of network users can simultaneously queue files on the same printers, without
intermixing printer output.
To conclude the discussion, I must mention that there are many more print
options and features than those mentioned here; to review each of them,
however, is beyond the scope of this article.
Batch files
-----------
TurboDOS allows the execution of batch-command files in a way similar to
CP/M's SUBMIT facility, but with enhanced capabilities. The TurboDOS version
of SUBMIT is named DO.COM; specifying DO with a filename will cause the system
to begin reading its input from the file.
DO files may be nested (ROCHE> Like SUBMIT under CP/M Plus...), to any
reasonable depth (ROCHE> 128 levels under CP/M Plus.), merely by placing a DO
statement within a DO file. After the subservient DO file is executed, control
returns to the superior file at the point where processing left off.
Command-line parameters may be specified in a manner similar to CP/M's SUBMIT.
However, the parameters are referred to, in the DO file, by enclosing them in
curly brackets, rather than the dollar sign notation of CP/M. Also, the
parameters in the DO command line may be made to contain embedded spaces by
enclosing them in quotes.
A handy option within the DO file allows default parameters to be filled in by
adding a comma and a default value within the curly brackets. Consider the
following line within a DO file:
L80 {1} {2,SYSLIB}
If this DO file is invoked only with Argument 1, then the value SYSLIB is
automatically supplied as the 2nd Argument.
Another important characteristic of DO files is that they can provide input
for more than just system commands. Programs that require interactive input
will receive that input from the DO file (thus, DO combines the features of
both the CP/M 2.2 programs SUBMIT and XSUB). (ROCHE> CP/M Plus has a much
better and more powerful SUBMIT utility.)
DO is somewhat faster than CP/M 2.2's SUBMIT when no command-line parameters
are specified. Since there is no need to rewrite the DO file with parameters
filled in, DO simply informs TurboDOS to begin executing the file (SUBMIT must
always write a $$$.SUB file).
Utilities
---------
TurboDOS is supplied with a large number of utilities, some of which have
already been described. The major remaining utilities are as follows:
AUTOLOAD allows a user to set up command lines that automatically execute on
either cold or warm boot. COLDSTRT.AUT, the cold boot file, executes only
once, when the TurboDOS operating system is first started up. WARMSTRT.AUT is
executed at the completion of each transient program.
BACKUP performs a fast disk copy. It is usable only when the source and
destination diskettes are of the same format.
BATCH is useful in network environments, and uses a special FIFO file (named
BATCH.DO) to send a command line to a remote processor for execution. Remote
processors that use this facility (i.e., those which are to be available for
batch jobs) must execute the command DO BATCH via an AUToload file at system
startup.
BOOT allows the system tracks of a diskette to be copied to another diskette.
Note that TurboDOS allows 100% of the floppy disk space to be used for file
storage; however, in some implementations, the hardware demands cold-starting
from reserved system tracks.
CHANGE is used to safely allow removable disks (i.e., floppies or removable
cartridges) to be changed in a network environment. CHANGE.COM takes one or
more drive letters as arguments, and aborts with an error message if any
process has open files on the requested drive. If the requested drive is free,
CHANGE locks the drive until the user indicates that the disk has been changed
(any user trying to access the drive while it is locked will receive a disk
error message).
COPY, which was previously mentioned, allows files to be copied between disk
drives. A large number of command-line options make this an extremely
versatile file copy and archiving program.
DELETE performs the same functions as CP/M's ERA. A command-line option causes
DELETE to present each filename to be erased, and requests the operator to
confirm before deleting. (ROCHE> "The CONFIRM option informs the CP/M Plus
operating system to prompt (the user) for verification before erasing each
file that matches the filespec." CP/M Plus User's Guide, Section 5: Command
Summary, "The ERASE command".)
DIR prints a sorted directory on the screen (or, optionally, on the printer).
The display contains a lot of the information available under CP/M only
through the CP/M 2.2 STAT command (such as filesizes and disk free space). It
also includes time of day and combined size of files displayed, as well as
user-number specification.
DRIVE displays information about the disk format (similar to CP/M 2.2's STAT
DSK:).
FIFO is used to create and delete the previously-described FIFO files.
FIXDIR is a handy utility that reorganizes a disk directory. This is useful
when frequent file creations and deletions occur (especially on hard disks).
FIXDIR compacts the directory, eliminates "holes", and makes file searches
faster. Also used to convert a directory to the hashed format, or vice-versa.
(ROCHE> ??? Ron wrote "the opposite is not true" in the "Disk drives and
files" paragraph...)
FORMAT allows a diskette to be formatted in single density or in CP/M or
TurboDOS double-density format. It automatically calls VERIFY after formatting
is complete. (ROCHE> VERIFY marks all the "bad spots" of a disk. That's why it
is used after formatting the disk.)
MONITOR is the TurboDOS replacement for CP/M 2.2's DDT program. Intended
mainly for program patching, etc., it contains a save function as well as a
load function (this is necessary because TurboDOS lacks CP/M 2.2's SAVE
command). A number of other commands not found in DDT are present in MONITOR.
(ROCHE> ASM and DDT were provided with CP/M 2.2. MAC and SID were professional
versions that were available separately, at a cost.)
Noticeably lacking, however, are DDT's opcode assembler and disassembler
(ROCHE> The A and L commands.), and single-step trace functions (ROCHE> The
TRACE utility of SID.). For program debugging, DEBUG (Phoenix Software
Associates (ROCHE> Software 2000, Inc., used their PASM to assemble TurboDOS.)
or ZSID (Digital Research, Inc.) both work well under TurboDOS. (ROCHE> This
is no surprise...)
RENAME is used to change the names of files. This utility has a syntax
backward from that of CP/M. (Most people who have worked with other operating
systems claim that it is CP/M that has it backward. I am inclined to agree.)
(ROCHE> You (and them) are wrong. Demonstration: How work the opcodes of the
(real, physical) processor? You write MNEMONIC DESTINATION,SOURCE... There is
no exception to this rule! So, is the CPU behaving crazily? Another
demonstration: When you send dozens of different files to the same place. If
the destination is at the beginning of the command line, you just edit the
source specification, conveniently located at the end of the command line...
which can be reached with one single control char!) This utility has the handy
option of renaming by using wildcards. For example, the command RENAME *.BAK
*.ASM renames all BAK files to ASM (a command-line option allows you to verify
any rename that would cause an existing file of the same name to be
overwritten). (ROCHE> "If the file given by NEWNAME is already present in the
directory, RENAME displays the following message on the screen: Not renamed:
FILENAME.TYP file already exists, delete (Y/N)?" CP/M Plus User's Guide,
Section 5: Command Summary, "The RENAME command".)
SERVER has been renamed by North Star. The standard TurboDOS distributed by
most vendors refers to this utility as MASTER.COM. In any case, its purpose is
to allow a slave console to act as a terminal to the master, a function useful
for running programs in the master processor.
SET is used to set and clear file attributes; SHOW displays them. (ROCHE> Just
like MP/M and CP/M Plus...)
TYPE displays ASCII files on the console or (optionally) on the printer.
USER allows privileged logins to change the currently-logged user number. This
is one command that I wish had been built into the TurboDOS operating system.
(ROCHE> Ron ported TurboDOS Release 1.3. As far as I know, the Command
Interpreter of TurboDOS Release 1.4 recognizes the small form of changing user
numbers (1:), without the need of running the transient program USER.COM.)
VERIFY scans a disk for bad blocks, and locks them out.
Program interface
-----------------
As you would expect, TurboDOS provides a good many additional system calls for
the programmer. (ROCHE> Well, TurboDOS being a multi-processor version of
MP/M, most of them have been existing under MP/M for about 5 years...) Non-
programmers may want to skip this section.
First of all, CP/M-compatible system calls are vectored through location 5 (as
you would expect); versions of TurboDOS prior to Release 1.3 included extended
system calls vectored in the same way. (ROCHE> Like MP/M...) Recent re-
releases of CP/M and MP/M, however, have caused some conflicts with TurboDOS
extended functions. (ROCHE> ???)
To correct this problem, TurboDOS Release 1.3 moved all TurboDOS extended
system calls to location 80 (0050H). CP/M-compatible (ROCHE> Which version of
CP/M? 2 or 3?) system calls are now referred to as C-functions, and TurboDOS
extended system calls as T-functions.
Resident processes must often make system calls; they cannot call location 5
or 50H. (ROCHE> ??? Why?) Two special entry points are provided for this
purpose, and must be called symbolically. They are: OCNTRY (C-functions) and
OTNTRY (T-functions). (ROCHE> So, O means Operating system, C means CP/M, and
T means TurboDOS.) The calling conventions are, otherwise, strictly the same
as they would be for a transient program. For example, to set the DMA buffer
address, you would use the following code:
MVI C,SetDMA
LXI D,Buffer
CALL OCNTRY#
A wide range of T-functions is provided (see Table 1) for such varied things
as creating and deleting resident processes, allocating and de-allocating
memory, inter-process communications, date/time functions, extended file and
disk drive requests, and more. A few of the more interesting functions are
described here.
Communications channel support (T-functions 34-40): A full complement of
functions allows complete access to the optional communications system
(generally implemented in the form of RS-232-C drivers by the system
implementer). These functions allow such actions as send/receive character,
read status, get/set baud rate, and get/set modem controls. They also allow
the creation of system-independent communications software for TurboDOS --
something that is impossible with CP/M. (ROCHE> ??? And CP/NET, what is it
doing? It is not tied to any protocol or hardware!)
Delay process (T-function 2) circumvents the need for software timing loops.
This function allows a program (or resident process) to delay by increments as
fine as the system "tick" time (generally 1/60th of a second). (ROCHE> In the
USA. 1/50th of a second in Europe.)
Return serial number (T-function 12) returns the complete serial number of the
TurboDOS operating system. (This function can be used to discourage piracy by
keying the purchaser's TurboDOS operating system to your software package.)
Load file (T-function 15) uses the previously-described Load Optimizer to load
code segments into the program area. Handy for loading overlays.
Activate DO file (T-function 16) allows a program to begin a batch processing
job. (Compared to writing the old backward $$$.SUB file with CP/M 2.2,
starting batch jobs under TurboDOS is simple with this system call.)
Send Command Line (T-function 18) allows creation of applications such as
menus from assembly language programs. It does not work quite the same way as
MP/M's similarly-named function (ROCHE> This must be a coincidence?), however,
in that the passed Command Line is not executed immediately (as it is in MP/M)
but is, instead, deferred until the calling program terminates. You may
"stack" command lines by calling this function more than one.
Printer control functions T-functions 27-30) allow complete programmatic
access of the printer spooling and despooling mechanisms. Function 28 (signal
end-of-print) is especially handy, since it allows a queued print job to
actually begin printing.
User-defined function (T-function 41) belongs to the user, for any purpose
that he desires to write code for. It can take full advantage of the network
for communications between processors. To implement this function, you must
write your function in a module that defines the public symbol USRFCN;
register-passing conventions are described in the "TurboDOS Release 1.4 Z80
Programmer's Guide". Once the function is in place, your applications program
may communicate with it simply by calling T-function 41.
Documentation
-------------
No software evaluation can be considered complete without a look at the
documentation supplied with the package. In the case of TurboDOS, I have to
rate the documentation effort outstanding! (ROCHE> Interesting. Apparently,
not everyone thinks like you. "Many features of TurboDOS go underutilized (or
totally ignored) due to the difficulty in deciphering the manuals." and "the
manuals are indescridably bad." This opinion was published in nothing less
than the "ACM SIGSMALL Newsletter"! Reference: Vol.10, No.3, August 1984,
p.24, "The TurboDOS Operating System", Keith Bierman.)
Three manuals are provided with the Z80 TurboDOS operating system: a User's
Guide, a Z80 Programmer's Guide, and the Z80 System Implementer's Guide. Each
includes a table of contents; the System Implementer's Guide is the only
manual lacking an index.
The User's Guide begins with basics, and takes the reader through the
gradually more complex subjects of files, disks, printing, and processing,
concluding with a summary of the entire set of 35-odd utilities that are
provided with the TurboDOS operating system. The language is "gentle" and very
readable.
The Programmer's and Implementer's Guides are understandably more complex,
since they deal with subjects that are technical in nature. They are complete,
and provide sufficient information to enable the programmer to do his job.
(ROCHE> Again, Ron implemented TurboDOS Release 1.3. Release 1.4 adds the 8086
programmer's Guide and the 8086 Implementer's Guide. TurboDOS thrived when it
was written in Z-80 assembly language for S-100 Bus systems, and disappeared
when it was rewritten in the C language for the IBM PC...)
Conclusion
----------
As you see, TurboDOS provides powerful facilities for both the user and the
programmer. After more than 3 years on the market (it was first released in
April 1981) (ROCHE> So, MP/M had already been existing for 2 years when
TurboDOS appeared... Guess which is the chicken? Which is the egg?), TurboDOS
is still being continually refined. (By the time you read this, Release 1.4
should be available. This new release will feature full Intel 8088/8086
compatibility at both the slave *AND* the master level, as well as a PC DOS
emulator.) (ROCHE> Emulating MS-DOS Version 1 under TurboDOS on a S-100 Bus
system? Vade Retro, Satanas!)
I have recently obtained a Mega Z-80 system, featuring 512K bank-selectable
RAM and 27 *MEGABYTE* Winchester hard disk drive, for which I plan to do a
full master-to-master implementation of TurboDOS (complete with RAMdisk). As
"Microsystems" magazine expands its TurboDOS coverage, I hope to provide a
follow-up article on this project, as well as a review of Turbo-Plus, and (if
there is sufficient interest) a tutorial on TurboDOS implementation and
programming technique. (ROCHE> This article was the last one written by Ron
Fowler...)
EOF
- Details
- Hits: 5351
TDOS7.WS4
---------
- "Printer Networking with TurboDOS"
Tedd Kurts, MuSYS Corporation
"Microsystems", Vol.5, No.10, October 1984, p.106
(Retyped by Emmanuel ROCHE.)
In working with TurboDOS users on a daily basis, I have observed many of them
attempting printer configurations, only to find their efforts unsuccessful.
The problem appears to stem from a lack of understanding of the printer
networking concepts involved. This article will outline the steps necessary to
configure a TurboDOS operating system with one or more printers.
There is a radical difference between CP/M or MP/M operating systems and
TurboDOS. No printer drivers (or only skeletal examples) are supplied with a
CP/M or MP/M as purchased from Digital Research,Inc. The user must write his
own drivers, and integrate them into the I/O section of the operating system;
he must, therefore, be a competent assembly language programmer, and
understand the workings of the CP/M BIOS or MP/M XIOS. (ROCHE> I had the
curiosity of searching for "Printer" in the Index of "The CP/M Programmer's
Handbook", by Andy Johnson-Laird, Osborne/McGraw-Hill, 1983, the only book
ever written on the subject of writing a BIOS for CP/M. There are only 3
entries: "Printer echo", "Printer errors", and "Printer timeout error". This
is because printers are, fundamentally, outside the microcomputer running
CP/M. Hence, only CP/M programs dealing with printers (like WordStar) have
(their own) printer drivers.)
TurboDOS, on the other hand, comes with several printer drivers for various
methods of handshaking; these are assembled in Microsoft RELocatable format,
and need only be linked to the body of the TurboDOS operating system by means
of the GEN (system generation) utility (also supplied). For fine tuning,
PARameter files can be created or modified with a simple text editor. Thus,
the person who "generates" a bootable TurboDOS operating system from the
modules supplied in Microsoft REL form need not be an assembly language
programmer (ROCHE> ??? How many end users are familiar with Microsoft REL
files and linkers?), though he must understand what functions the printer
drivers and PARameter files perform, and how to modify them to suit his needs.
(ROCHE> Isn't it the job of the "System Implementer" to port/implement
TurboDOS on a particular hardware, so that the user can use the software?)
The procedure falls into the following steps:
- Determine the handshaking required by your printer(s), and select the
appropriate driver module(s).
- Determine the baud rate to be used, and create a corresponding patch
in a PARameter file.
- Assign the printer to a spooling queue by a patch in a PARameter file.
Exampes will be given, showing exactly how to perform theses steps.
1) Printer handshaking and cabling
----------------------------------
To determine what handshaking protocol should be used (and, consequently,
which printer driver module to select), consult your printer manual. The most
commonly-used methods are hardware handshake (sometimes called CTS (Clear To
Send) protocol); XON/XOFF protocol; ETX/ACK protocol; or a combination of
hardware handshake and one of the other two (ROCHE> Software handshakes.). All
of these can be used with serial printers; a special form of hardware
handshake, standardized by Centronics, is generally used for parallel
printers.
When hardware handshaking is used on an RS-232-C serial channel, only 3
conductors are required: the data line (from computer to printer); a control
signal line; and the signal ground line. The printer accepts characters until
its buffer is about 3/4 full; it then turns off the control signal. The
computer must be able to detect this signal, and stop sending, until the
printer turns the signal on again, when the buffer is nearly empty. The
control signal chosen is usually DTR (Data Terminal Ready, pin 20 of the 1969
RS-232-C standard) or RTS (Request To Send, pin 4), but some printers use
other signals. This is the industry-preferred protocol, for several reasons:
1) only one data channel is needed;
2) it is a hardware handshake and, therefore, the driver is simple and
takes less CPU time;
3) a cable disconnection during printing does not cause loss of data.
When the cable is reconnected, printing picks up where it left off.
When XON/XOFF protocol is used, 2 data channels are required: one from
computer to printer, the other from printer to computer. The printer accepts
characters until its buffer is nearly full, and then sends the XOFF code
(Transmit OFF, or "pause transmission", ASCII DC3, Control-S, 13H) to tell the
computer to stop sending; when the printer is ready to accept more characters,
it sends the XON code (Transmit ON, or "resume transmission", ASCII DC1,
Control-Q, 11H).
When ETX/ACK protocol is used, 2 channels are again required. The computer
sends a fixed number of characters to the printer (amounting to about 75% of
the buffer capacity) followed by an ASCII ETX (End-of-TeXt, Control-C, 03H)
character; it then waits until it receives an ASCII ACK (ACKnowledge, Control-
F, 06H) character from the printer.
Both XON/XOFF and ETX/ACK can lose data in the event of a cable disconnection.
For this reason, they are sometimes combined with a hardware handshake.
If the printer can use more than one of these protocols, selection is done by
setting switches or placing jumpers on the circuit board.
Care must be taken to see that the cable connects the correct pins of the RS-
232-C connectors at each end. Devices designated DTE (Data Terminal Equipment)
send data on pin 2 and receive it on pin 3; devices designated DCE (Data
Communications Equipment) receive on pin 2 and send on pin 3. Thus, the cable
connecting a DTE device to a DCE device has corresponding pin numbers
connected. If, however, both devices are DTE or both are DCE, then the cable
connecting them must have pins 2 and 3 at one end connected to pins 3 and 2 at
the other. Also, if the control signal appears on (say) pin 14 at the printer
but is required on pin 20 at the computer end, the cable must have this cross-
connection also.
Printer drivers
---------------
For each of the protocols described above, TurboDOS has a corresponding
driver. The most common ones are designated LSTCTS.REL (CTS hardware
handshaking); LSTXON.REL (XON/XOFF protocol); LSTETX.REL (ETX/ACK protocol);
and LSTCEN.REL (a Centronics parallel printer driver used mainly in Televideo
implementations). Less common are LSTPAR.REL, the driver for a standard
Centronics parallel printer; and LST300.REL, a simple, slow-speed, Teletype-
like serial driver. This has no provision for error detection, and relies on
the printer being able to keep up with the transmission rate. One or more of
these drivers is placed in the GEN file of the appropriate server or satellite
processor when the GEN (system generation) program is run to generate the
TurboDOS operating system.
2) Setting printer baud rates (BR)
-----------------------------
After determining handshaking and selecting the appropriate driver module, the
baud rate should be checked against the default value for that driver. If some
rate other than the default is desired, use a text editor to modify the
appropriate patch point in the PARameter file containing global symbolic
patches for the node. Examples of symbolic patch points are shown in Listing
1.
Listing 1
---------
Baud Rate patch point (PAR) Printer driver (GEN)
--------------------------- --------------------
CTSBR = hn ln Default=6E LSTCTS
XONBR = hn ln Default=07 LSTXON
ETXBR = hn ln Default=07 LSTETX
where hn represents the high-order 'nibble' (4 bits), which can have only 3
valid values in these particular patch points:
0 Represents the disabling of all hardware handshaking.
4 Represents hardware handshaking.
Bit 6 is set, and enables CTS.
Is used with XONBR and ETXBR drivers to enable the respective protocol
+ CTS.
6 Represents hardware handshaking for output only (input disabled).
Is used for all CTSBR patch points.
and ln represents the low-order nibble, which can have 16 valid values
representing the 16 baud rate values. The most common are:
5 = 300
7 = 1200
E = 9600
Example: CTSBR = 6E ;CTS handshaking at 9600 baud
XONBR = 47 ;XON/XOFF + CTS handshaking at 1200 baud
XONBR = 07 ;XON/XOFF handshaking at 1200 baud
ETXBR = 05 ;ETX/ACK handshaking at 300 baud
Print spooling
--------------
The 2 print modes are either spooled or direct. In most multi-user
applications, spooled printing is preferred over direct. When a file is
spooled, TurboDOS creates a print file on the disk. When the print job is
done, TurboDOS will queue the print files for de-spooling in a first-in first-
out (FIFO) manner. Print file de-spooling is a background process that is done
automatically.
The De-SPool Printer Assignment Table (DSPPAT), in the module LSTTBL, is an
array of 16 bytes (for printer A-P) that defines the queue assigned to each
printer. Positions 1 through 16 in the array correspond to printers A-P,
respectively. The hex value (01-10, corresponding to printers A-P) found at
each position in the array defines the queue to which that printer is
assigned. A value of 00H indicates that the printer is off-line. The default
value (01H) assigns all printers to queue A. A de-spool assignment table looks
like this:
DSPPAT = 01,01,02,02 ;Printer A to Queue A,
;printer B to Queue A,
;printer C to Queue B,
;printer D to Queue B, etc.
The files created by the spooler default to the system drive. To change the
default, you may patch the symbol SPLDRV in the module LCLTBL, as follows:
SPLDRV = 0FFH ;0FFH is default for system drive.
;Hex value of 0-F specify spool drive of A-P.
The print mode for a local user is determined by the symbol PRTMOD, located in
module LCLTBL. The default value is 1, which specifies spooling. To change the
default, patch PRTMOD as follows:
PRTMOD = 1 ;1 is default for spooling.
;Hex value of 0 for direct printing,
;and 2 for print to console.
Print queues
------------
A print queue is a list of print jobs awaiting de-spooling. The QUEue
ASsignment Table (QUEAST) defines which queues of A-P are local, remote, or
invalid. Also specified are the network addresses for each remote queue.
QUEAST = 00,(0000) ;Queue A local -- First 3 bytes zero
0FF,(0000) ;Queue B invalid -- First byte 0FFH
The patch symbol QUEPTR in module LCLTBL specifies initial queue or printer
assignments. If print mode is spooled, this symbol specifies a queue
assignment. If print mode is direct, this symbol specifies a printer
assignment.
QUEPTR = 1 ;1 is default.
;Hex values of 01-10 represent assignments of A-P.
;Zero signifies no queue, or printer off-line.
3) Printer assignment
---------------------
There are 2 classes of printers in a TurboDOS network: local and remote. The
PrinTeR ASsignment Table (PRTAST) contains, for each local or remote printer
in the system, one byte specifying the printer, and 2 bytes in parentheses
specifying the node address of the printer. In the printer designation byte,
the high-order nibble can only have 2 values: 0, signifying a local printer
physically attached to the node; or 8, signifying a remote printer attached to
some other node. The low-order nibble specifies the printer number (0-0FH,
corresponding to printers A-P). The following is an example of an entry:
PTRAST = 00,LSTDRA,0FF,(0000),01,LSTDRA,85,(0002)
where:
00,LSTDRA -- Local printer A to channel 0
0FF,(0000) -- Printer B is invalid
01,LSTDRA -- Local printer C to channel 1
85,(0002) -- Printer D is printer F on Remote node 2.
In looking at the first bytes (00, 0FF, and 01), we find 2 Local printers
attached to this node, and one Remote (85). The high-order nibbles (0 and 8)
indicate Local and Remote printers, respectively. The low-order nibbles
indicate that Printer A is attached to channel 0 (first serial port) and
Printer C is attached to channel 1 (second serial port).
Local printer configurations
----------------------------
Any node (whether server or a satellite) can be configured for up to 16
printers, designated A-P. These printers can all be in use simultaneously, and
have other print jobs waiting in the queue. Before attempting to work with
full networking, we will look at local printer configurations.
Listing 2
---------
NODE.GEN ;TurboDOS operating system GENeration file
LSTPAR ;Printer driver for Parallel (Centronics) interface
LSTCTS ;Printer driver for CTS hardware handshake
LSTETX ;Printer driver for ETX/ACK software handshake
DSPOOL ;Despooler for Local printer (only goes in satellites)
NODE.PAR ;TurboDOS operating system PAR(ameter) file
CONAST = 00,CONDRA ;First serial channel -- Console terminal
PTRAST = 00,LSTDRA ;Parallel port -- No serial channel used
01,LSTDRB ;Second serial channel -- Second printer driver
02,LSTDRC ;Third serial channel -- Third printer driver
DSPPAT = 00,01,02 ;No queue (Direct)
;Second printer Queue A
;Third printer Queue B
QUEAST = 00,(0000),00,(0000) ;Queues A and B are Local queues
CTSBR = 6E ;CTS with handshake at 9600 baud
XONBR = 07 ;XON without handshake at 1200 baud
Figure 1. Local printer configuration with parallel CTS and XON/XOFF
protocol
The example shown in Listing 2 has 3 printers on a node. The first printer is
Direct, and uses a parallel interface. The second printer is Spooled, with
hardware handshaking at 9600 baud. The third printer is Direct, with a
software handshake at 1200 baud. See Figure 1. Note that the assignment of
LSTDRA is a 2-byte value assigning a Local printer to the first printer driver
in the GEN file. The assignment of LSTDRB is for a Local printer using the
second printer driver in the GEN file, etc.
Note that the parallel driver (LSTPAR) does not use a serial channel for
communication with the printer, and this must be explicitly stated in the
PTRAST entry. Note, too, that the positions of the printer drivers in the GEN
file directly correlate to how printers are assigned in the table. The last
letter of LSTDR? tells the printer assignment table which driver to use in the
GEN -- i.e., LSTDR(A) uses the first printer driver in the GEN, LSTDR(B) uses
the second printer driver, and LSTDR(C) uses the third printer driver.
Listing 3
---------
NODE.GEN ;TurboDOS operating system GENeration file
LSTCTS ;Printer driver for CTS hardware handshake
LSTETX ;Printer driver for ETX/ACK software handshake
LSTXON ;Printer driver for XON/XOFF software handshake
DSPOOL ;Despooler for Local printer (only goes in satellites)
NODE.PAR ;TurboDOS operating system PARameter file
CONAST = 00,CONDRA ;First channel -- Console terminal
PTRAST = 01,LSTDRB ;Second channel -- Second printer driver
02,LSTDRC ;Third channel -- Third printer driver
03,LSTDRA ;Fourth channel -- First printer driver
DSPPAT = 01,02,03 ;Printer A to Queue A, B to B, etc.
QUEAST = 00,(0000),00,(0000) ;All Queues valid and Local
00,(0000)
CTSBR = 6E ;CTS printer at 9600 baud
ETXBR = 0C ;ETX/ACK at 4800 baud
XONBR = 67 ;XON/XOFF + CTS by setting high-order
;nibble to 6, at 1200 baud.
Figure 2. Local printer configuration with ETX/ACK, XON/XOFF plus CTS
and high-speed CTS
The example given in Listing 3 shows 3 printers on a single node. The first
printer is Spooled, with software handshaking (ETX/ACK) at 4800 baud. The
second printer is Spooled, with both a software and hardware handshake
(XON/XOFF and CTS) at 1200 baud. The third printer is Spooled, with a hardware
handshake at 9600 baud. See Figure 2.
Printer networking
------------------
TurboDOS, by its nature, is a networking operating system that networks via a
distributed processing architecture. A TurboDOS circuit is a network
communication path between individual processor nodes. In a single computer
system, there is a simple and closely-coupled connection between the nodes. An
area of confusion to TurboDOS users is printer networking, partly due to a
lack of detailed documentation. Listing 4 comprises some examples that will
illustrate networking applications.
Listing 4
---------
PTRAST = 00,LSTDRA,81,(0001)
where:
00 is one byte consisting of a high-order nibble (Local=0, Remote=8) and a
low-order nibble (Local=port or channel number, Remote=printer A-P in Hex
values of 0-F).
LSTDRA is a 2-byte assignment entry (global symbolic address of driver entry
point) for Local printers, in which the last substitution character points to
the printer driver to use in the GEN file, e.g., A = First Driver, B = Second,
C = Third.
81 is a Remote printer, which is Printer B in Remote's PTRAST.
(0001) is the Remote assignment entry in which the first byte of 00 refers to
the circuit, and the second byte of 01 refers to the node on that circuit
(Circuit 00 = server, Node 01 = First satellite).
For a remote printer, the first byte must have the Sign bit set. To set the
Sign bit, the high-order nibble of the first byte must have the Hex value of
8. This lets the Local Node know that this is a Remote printer, and is not
physically attached. The low-order nibble of the first byte specifies the
printer letter to be accessed on the Remote processor. The 'word' following
the first byte specifies the network address of the Remote processor,
consisting of a Circuit and a Node. When referring to hardware, a word for an
8-bit processor is 8 bits and, for a 16-bit processor, is 16 bits.
When referring to words in TurboDOS (on both 8- and 16-bit processors), a
single word is 2 bytes or 16 bits. A word is specified in the PARameter file
whenever a Hex value greater than 255 is entered, or when the value is
surrounded by parentheses.
Another printer assignment might be written this way:
PTRAST = 00,LSTDRA,0FF,(0000),01,LSTDRA,83,(0001),84,(0001)
This assignment defines 2 printers physically attached to a Remote satellite
node. Setting the high-order nibble of the first byte to 8 tells the Local
node (server) that 2 other printers are Remote. The Local node (server) "sees"
them as printers D and E, corresponding to the order of the printers in the
assignment table. The low-order nibbles of the first bytes, with values of 3
and 4, respectively, tell the Local system to look to the printer assignment
table of the Remote node for D and E. The 2-byte entry (Circuit 00, Node 01)
tells the Local processor that the Remote printers are attached to Node 1 of
the network (satellite 1).
Printer assignment of Remote node (satellite 1) would look like this:
PTRAST + 9 = 01,LSTDRA,02,LSTDRA
This assignment shows a 9-byte offset resulting from 3 printers being assigned
to the system defaults on Node 0. Each printer on Node 0 (A, B, C) takes up a
3-byte entry; thus, 3 bytes * 3 system printers = 9 byte offset in Remote
PTRAST. Printer D is Local, and physically attached to serial channel 1, while
printer E is Local and physically attached to serial channel 2.
A remote networking example is given in Listing 5; please, refer to Figure 3
for a diagramatic representation. When configuring a network, it helps to draw
diagramatic representations like the ones of Figures 1, 2, and 3, to aid in
visualizing the network.
Listing 5
---------
MASTER.GEN ;TurboDOS operating system Master GENeration file
NETREQ ;Network request module
MSGFMT ;Message format tables for NETREQ
LSTCTS ;Printer driver for CTS hardware handshake
LSTPAR ;Printer driver for Parallel handshake
MASTER.PAR ;TurboDOS operating system PARameter file
CONAST = 00,CONDRA ;First serial channel -- Console terminal
PTRAST = 01,LSTDRA ;Second serial channel -- First printer driver
00,LSTDRB ;Parallel channel -- Second printer driver
80,(0001) ;Printer C is printer A on R-node#1
80,(0002) ;Printer D is printer A on R-node #2
QUEAST = 0,(0),0,(0) ;Queues A and B are valid Local queues
80,(0001),80,(0002) ;Queues C and D are valid Remote queues
DSPPAT = 01,02,03,04 ;Printer A to Queue A, B to B, etc.
CTSBR = 6E ;CTS printer at 9600 baud
SLAVE1.GEN ;TurboDOS operating system Slave 1 GENeration file
NETSVC ;Network service local printer request
DSPOOL ;Print despooler for local printer
LSTETX ;Printer driver for ETX/ACK handshake
SLAVE1.PAR ;TurboDOS operating system Slave 1 PARameter file
PTRAST = 01,LSTDRA ;2nd serial channel -- 1st printer driver
0FF,(0),0FF,(0),0FF,(0) ;Printers B, C, D are Invalid
QUEAST = 0,(0) ;Local Queue A is Valid
0FF,(0),0FF,(0),0FF,(0) ;Queues B, C, and D are Invalid
ETXBR = 0C ;ETX/ACK handshaking at 4800 baud
SLAVE2.GEN ;TurboDOS operating system Slave 2 GENeration file
NETSVC ;Network service local printer request
DSPOOL ;Print despooler for local printer
LSTXON ;Printer driver for XON handshake
SLAVE2.PAR ;TurboDOS operating system Slave 2 PARameter file
PTRAST = 01,LSTDRA ;Second serial channel -- First printer driver
82,(0000) ;Printer B is printer C on R-node #0
0FF,(0),0FF,(0) ;Printers C and D are Invalid
QUEAST = O,(0) ;Local Queue A is valid
82,(0) ;Queue B is Queue C on R-node #0
0FF,(0),0FF,(0) ;Queues C and D are Invalid
DSPPAT = 01,02 ;Printer A to Queue A,B to B, etc.
SLAVE3.GEN ;TurboDOS operating system Slave 3 GENeration file
LST300 ;Serial driver default 300 baud
;NETSVC required because of no local printer
SLAVE3.PAR ;TurboDOS operating system Slave 3 PARameter file (Example 1)
PTRAST = 80,(0000) ;Printer A is printer A on R-node #0
81,(0000) ;Printer B is printer B on R-node #0
01,LSTDRA ;Printer C is a Local printer
0FF,(0000) ;Printer D is Invalid
QUEAST = 80,(0) ;Queue A is Queue A on R-node #0
81,(0) ;Queue B is Queue B on R-node #0
0FF,(0),OFF,(0) ;Queues C and D are Invalid
DSPPAT = 01,02 ;Printer A to Queue A, B to B
;No baud rate specified, so it goes to default
SLAVE3.PAR ;TurboDOS operating system Slave 3 PARameter file (Example 2)
PTRAST +6 = 01,LSTDRA,0FF,(0) ;Offset of 6 bytes for first 2 printers A and B
;Printers A and B default to the server PTRAST
QUEAST +6 = 0FF,(0) ;6-byte offset for the 2 system printers off
;the server.
0FF,(0) ;Queues C and D are Invalid
DSPPAT = 01,02 ;Queue A to Queue A, B to B
SLAVE4.PAR ;TurboDOS operating system Slave 4 PARameter file
This satellite does not require any printer drivers in the SLAVE4.GEN file. In
the SLAVE4.PAR file, it will require no printer or queue assignment. This
satellite defaults to the server, but a sample PAR file is shown below to
illustrate the defaults.
PTRAST = 80,(0),81,(0) ;Defaults for system printers
82,(0),83,(0)
QUEAST = 80,0),81,(0) ;Defaults Queues for system printers
82,(0),83,(0)
Figure 3. Remote printer networking
EOF
- Details
- Hits: 5262
TDOS5.WS4
---------
- "The Networking Capabilities of TurboDOS"
Michel Simon and William Poole (Commercial Dynamics)
"Microsystems", August 1984, Vol.5, No.8, p.78
(Retyped by Emmanuel ROCHE.)
By now, most people in the CP/M world are, at least vaguely, familiar with
TurboDOS. It is fairly well known that TurboDOS runs most off-the-shelf CP/M
software, and that it can be found on S-100 Bus-based, multi-user, multi-
processor systems (networks). Less well known is the fact that a multitude of
network configurations are possible with TurboDOS. Some manufacturers are now
experimenting with different network architectures, and a number of
interesting products already exist. Given the availability of TurboDOS on 16-
bit processors and the growing list of manufacturers integrating TurboDOS with
their hardware, we should see the use of TurboDOS networks increase in the
days to come.
TurboDOS is truly a network operating system. This article focuses on the
networking aspects of TurboDOS, including its capabilities and uses. First, we
will describe the features of TurboDOS that distinguish it as a network
operating system. Second, we will discuss the various possible networking
configurations. Next, we will address the limitations of TurboDOS in
configuring larger networks. The remainder of this article contains some
general guidelines for choosing a TurboDOS network, followed by a review of
TurboDOS networking products currently available. Detailed descriptions of the
network architectures of 3 different manufacturers' products are included as
examples.
What makes TurboDOS a network operating system?
-----------------------------------------------
The single most important characteristics of TurboDOS -- one which, in
essence, distinguishes a network operating system from a single-processor
operating system -- is that it permits transparent message routing between
physically-connected processors. This feature allows a request for a *DEVICE*
(TurboDOS devices are disk drives, printers, and queues) to be automatically
routed, in logical form (see below), to the processor on the network that
controls the device. Routing takes place between nodes on a circuit and, in a
multi-circuit network, between circuits via common nodes.
TurboDOS recognizes a 'world' that consists of 1 to 255 network *CIRCUITS*,
each of which can have from 1 to 255 *NODES* connected to it. A node is a
microcomputer (single-board, standalone, diskless, etc.), and a circuit is the
means (hardware and software) by which nodes are connected. The S-100 Bus is
currently the most widely-used transmission facility (hardware) for a TurboDOS
circuit, although there is a rapid growth in the use of Local Area Network
(LAN) circuits (RS-422/SDLC, ARCnet, Omninet, Ethernet, etc.) with TurboDOS. A
node can be connected to, and thus can transfer information between, more than
one circuit.
In order to illustrate and clarify what makes TurboDOS a network operating
system, let us compare the way CP/M handles a resource request with the way
TurboDOS handles the same request. When the operator of a single-user CP/M
system makes a request for a resource, such as:
A>DIR C:
the chain of events is as follows:
1. CP/M's command line interpreter sees a request for directory
information from the C drive, and makes a *LOGICAL FUNCTION REQUEST*
(in CP/M, a BDOS system call) requesting this information.
2. The BDOS makes the appropriate calls to the BIOS, which contains disk
drivers and has access to information about the particular
characteristics of drive C.
3. The BDOS retrieves the information from the BIOS, and passes it back
to the command line interpreter, which then displays the information
on the console.
All along, CP/M assumes that the drive is attached to the requesting
processor, since CP/M does not recognize the existence of more than one
processor.
Under TurboDOS, however, the chain of events is quite different:
1. The TurboDOS command line interpreter sees a request for directory
information from the C drive, and makes a logical function request to
the TurboDOS file system, asking for this information.
2. TurboDOS checks an internal table to see if drive C is attached to the
requesting processor (i.e., is a "Local" resource) or if it is
attached to some other processor on the network (i.e., is a non-local,
"Remote" resource).
3. If drive C is a local resource, the procedure followed is similar to
that followed by CP/M.
4. If drive C is not a local resource, TurboDOS gets a *NETWORK ADDRESS*
from its internal table. The address indicates the circuit and node
numbers of the processor to which the resource is attached.
5. TurboDOS forms a *MESSAGE PACKET* consisting of the logical function
request, the data, and the network address, and passes it on to the
*CIRCUIT DRIVER* of the circuit indicated in the network address.
6. The circuit driver has access to all the information it needs about
the hardware characteristics of its physical transmission facility,
and transmits the message packet to the processor indicated in the
network address.
7. At the receiving processor, the same cycle is repeated: the TurboDOS
system on that processor checks to see if the resource is local or
non-local (remote). If the resource is local, the receiving processor
carries out the request; if non-local (remote), the processor forwards
the message packet. The requested information is returned, via the
same path, to the originating processor. This processor passes the
information to the command line interpreter, which displays it on the
console.
The internal tables mentioned in Events 2 and 4, which are called *DEVICE
ASSIGNMENT TABLES*, are configured when the TurboDOS operating system on each
processor is generated. Thus, the message-forwarding process is completely
transparent to the user, who enters a DIR command to get a directory listing.
In the above scenario, it is important to note that messages are transmitted
over the network in the form of logical function requests, enabling TurboDOS
to meet one of the fundamental requirements of a network operating system:
that only one processor recognizes the hardware characteristics of a given
device. For example, it is imperative that only one processor maintain a disk
drive's allocation vector or storage-used list; otherwise, assuring data
integrity in a multi-user environment would be impractical. To meet this
requirement, TurboDOS messages are transmitted in a device-independent format
until they arrive at their final destination.
Print spooling is accomplished through a network in the same manner as drives
are accessed: printer and queue requests are forwarded to the processor that
controls the resource, just as drive requests are forwarded.
Other features
--------------
An important and related feature of TurboDOS is its modular construction.
Networking hardware dependencies are isolated in circuit driver modules, while
peripheral hardware dependencies are isolated in device driver modules. Device
drivers and circuit drivers take hardware-independent instructions from
TurboDOS, and execute them on the specific device or network hardware that
they control. In addition, modules of the operating system and device drivers
are easily linked by the TurboDOS GEN command. Therefore, individual versions
of the operating system can be configured to contain only those modules needed
to control the resources attached to a given processor on the network.
A notable consequence of TurboDOS's modularity is that a wide variety of
peripheral devices and network hardware can be integrated into TurboDOS
systems by EOMs and system integrators. Device drivers can be replaced or
updated as new disk and networking hardware becomes available.
Another feature of TurboDOS that deserves note is its support of network file-
and record-locking. The processor that controls a given device keeps an open
file and record list locally. When a logical function request for a locked
file or record is received, access to that file or record is denied, and a
return code indicating the error is sent back over the network.
TurboDOS's network file and record locking allows almost all single-user CP/M
and multi-user MP/M software to run on a TurboDOS network without
modification. File lockout prevents single-user programs from corrupting files
when they are simultaneously accessed by more than one user. Record lockout
allows simultaneous multi-user access to data files in an organized fashion.
The above features combine to make TurboDOS a versatile operating system for
configuring a wide variety of networks with different topologies and
transmission facilities. We will now classify and describe some of these
network configurations.
Tightly-coupled networks
------------------------
As we mentioned earlier, the most common TurboDOS networks currently available
are on multi-user, multi-processor S-100 Bus-based systems, including IMS,
North Star, MuSYS, and Advanced Digital, to name but a few; for a more
complete list, refer to Table 1.
Table 1. TurboDOS networking products
Format: Manufacturers
Tightly-coupled architecture
Loosely-coupled architecture:
Server-to-server
Satellite-to-satellite
Topology
Maximum distance (feet)
(NOTE: In this table, K = kiloBAUDS, M = megaBAUDS.)
Advanced Computer Technology
S-100 Bus star
(In development)
Advanced Digital
S-100 Bus star
(In development)
Alspa
RS-422 800K bus, 2000 ft
No
No
Business Operating Systems
Parallel star, 10 ft
RS-232 19.2K
RS-232 19.2K
Point-to-point
300
California Computer Systems
S-100 Bus star
No
RS-232 9.6K
Point-to-point
300
Commercial Dynamics
S-100 Bus star
No
Differential 300K
Bus
1000
HM Systems, Ltd. (UK)
S-100 Bus star
2.5M ARCnet
No
Ring
2000
Intercontinental Micro Systems
S-100 Bus star
2.5M ARCnet
No
Ring
2000
Independent Business Systems
S-100 Bus star
No
RS-422 800K / RS-232 38.4K
Point-to-point
600 / 5000
Industrial Micro Systems
S-100 Bus star
No
Differential 307K
Bus
1000
JC Systems
2.4M Parallel bus, 600 ft
No
Parallel 2.4M
Bus
600
Litton Industries (Sweda Int'l.)
2M Token-passing LAN
2M Token-passing LAN
2M Token-passing LAN
Ring
2000
MuSYS
S-100 Bus star
10M Ethernet
RS-422 500K / RS-232 9.6K
Ethernet bus / Point-to-point
9000 / 900 / 300
NCR Corp.
No
2M Omninet
No
Bus
2000
North Star
S-100 Bus star
No
No
Philips (Netherlands)
Euro-Bus star
2M Token-passing LAN
No
Ring
2000
QDP Computer Systems
S-100 Bus star
No
No
Sierra Data Sciences
S-100 Bus star
No
No
Teletek
S-100 Bus star
No
No
Televideo
RS-422 800K star, 300 ft
RS-422 800K
No
Point-to-point
300
Networks of this type are referred to as *TIGHTLY-COUPLED* networks. In a
tightly-coupled networks, disk resources are largely centralized, and all the
processors are booted from one disk.
The master processor is called a "server" because it services requests from
the satellites for access to the (many or all) global resources attached to it
(disks, printers, etc.). Slave processors are called "satellites" because this
is a more accurate description of their function as part of the network.
Although their primary function is to execute user programs, and they are
booted by the server and dependent on it for most operations, satellites are
independent processors and, in some cases, possess local disk or printer
resources.
In a discussion of network configurations, it is important to distinguish
between the hardware architecture of the transmission facility and the logical
topology. For example, in a typical S-100 Bus implementation of a TurboDOS
network, the S-100 Bus is the transmission facility, but the network has a
star topology (see Figure 1). That is to say: even though all the processors
are physically connected on the S-100 Bus, the satellites cannot directly
communicate with each other; all communication on the tightly-coupled, S-100
Bus-based network is controlled by the server. Although tightly-coupled
networks are predominantly S-100 Bus-based, other tightly-coupled
architectures have been implemented. Examples include Alspa, JC Systems, and
Televideo (see Table 1).
Figure 1. Tightly-coupled network, star topology
Loosely-coupled networks
------------------------
Networks having processors that are independent of each other for basic
operations, and disk resources that are distributed throughout the network,
are referred to as *LOOSELY-COUPLED* networks. Loosely-coupled networks can
connect standalone, single-user systems or tightly-coupled networks.
Loosely-coupled networks of tightly-coupled systems require that at least one
processor on each tightly-coupled network belong to both its internal circuit
and the loosely-coupled circuit (see Figure 2). Either the server of the
tightly-coupled circuit or a satellite can be the dual-purpose processor,
providing, of course, that it has a physical means to transmit messages.
Server-to-server networks typically require additional hardware; they are
generally considered desirable when the loosely-coupled network will be used
for high-volume disk access and/or chassis expansion (e.g., MuSYS and
Intercontinental Micro Systems). Satellite-to-satellite networks use hardware
already on satellite boards, and run at low-to-medium speeds for file and
peripheral sharing (e.g., Commercial Dynamics, MuSYS and IBS).
Eight-bit single-user personal computers have not been widely networked using
TurboDOS because of memory considerations. Until recently, TurboDOS did not
support more than 64K of memory, and a fully-configured TurboDOS (including
file system and disk drivers) leaves only a 43K-to-45K TPA on a 64K system.
With TurboDOS now available on the Intel 8088/8086 family of processors, we
can expect to see TurboDOS become a popular environment for implementing
networks of 16-bit single-user machines, such as the IBM PC.
Figure 2. Loosely-coupled networks
Gateways
--------
As TurboDOS networks become available for a wide variety of processors,
*GATEWAYS* will become increasingly important. Since a processor can be
connected to as many TurboDOS network circuits as it has circuit drivers (and
corresponding transmission facilities), a gateway processor that has different
types of network interfaces can interconnect networks using dissimilar
hardware (see Figure 3). (ROCHE> "Internet" means "interconnected networks"...
This article, describing it using 8-bit microcomputers, was written 12 years
before Bill Gates reluctantly provided "Internet Explorer" under Microsoft
Windows...)
Because of the TurboDOS network's forwarding mechanism, each network circuit
connected by a gateway processor can be accessed by nodes throughout the
entire network. If a processor is not itself connected to a given circuit, its
internal *NETWORK FORWARDING TABLE* tells it how to access the other circuits.
Network forwarding is part of the general message-forwarding mechanism of
TurboDOS described earlier, and is transparent to the user.
As TurboDOS networks for IBM PC and PC-compatibles begin to appear, we can
expect to see gateways implemented to connect them to existing TurboDOS
networks. The introduction of banked memory support in Z80 TurboDOS 1.3 has
made it both feasible and desirable to network 8-bit, as well as 16-bit, PCs
together.
Figure 3. Multiple networks linked by a gateway processor
TurboDOS limitations
--------------------
Any TurboDOS network that has fewer than 16 devices of any type can be
configured to emulate a large computer system; no matter how the hardware is
physically distributed, users have access to all network devices at all times.
However, since TurboDOS uses the CP/M device-naming convention (letters A
through P), when there are more than 16 devices on a network, users may access
only a subset of the network at any one time. While 16 devices may seem
sufficient, it is easy to imagine a network that has more than 16 drive
volumes (or printers); it is also reasonable for network users to want to
access most, if not all, of them.
This situation can be handled in 3 different ways. First, the network can be
restricted to a maximum of 16 of each device. This limitation is reasonable
for small point-to-point systems (e.g., 2 systems communicating directly over
a dedicated wire) but is prohibitive for larger networks. Second, one might
change the device assignments of one or more processors. This has the serious
disadvantage that TurboDOS has no mechanism for changing device assignments in
a running system; device assignments can be made only when the system is
generated. Thus, this scheme would entail generation of a separate version of
the system for each set of device assignments; to change the assignments, the
user would have to shut down the current system and reboot it with a different
version. Since few end-users generate their own systems, this is not a very
practical solution. Last, TurboDOS networking products can be provided with
utilities that allow device assignments to be edited and patched while the
system is running, without reSYSGENing the operating system or rebooting it
(see the Commercial Dynamics example, below).
Choosing a TurboDOS network
---------------------------
If you already owns a TurboDOS tightly-coupled network, your choice for
further networking products will probably be limited to whatever network
hardware your manufacturer or dealer supports. However, if you have not yet
purchased a system or are in a position to choose between different types of
networks, an analysis of your applications is important to determine which
type of tightly-coupled and/or loosely-coupled network will best suit your
needs.
All of the currently-available tightly-coupled networks provide similar
network performance. Tightly-coupled networks that use an RS-422 transmission
facility have a somewhat slower network transfer rate and, therefore, will not
perform as well as S-100 and Parallel Bus systems, especially in disk-
intensive operations. The costs of most tightly-coupled systems are similar,
so your choice will depend primarily on the other features of the TurboDOS
system, including disk storage, application software, dealer support, etc.
Loosely-coupled networks, on the other hand, differ significantly in price and
performance. A low-speed network can cost less than $100 per node to
implement, while the highest speed system currently available costs more than
$2000 per node. Loosely-coupled network transmission rates also vary
significantly, anywhere from 9.6 Kbaud to 10 Mbaud per second.
Low-speed networks (9.6 Kbaud to 40 Kbaud) are primarily useful for occasional
file transfers, low-volume printer sharing, and the transmission of user-to-
user mail and messages. They are generally unacceptable in situations where
large volumes of data must be transferred or more than a few nodes use the
network at the same time.
Medium-speed networks (100 Kbaud to 500 Kbaud) provide adequate throughput for
all but the most intensive networking speeds. A network in this speed range
should be able to load executable files, transfer large amounts of data, and
have multi-user access over the network. Medium-speed networks are most often
used in situations where network nodes use primarily local disk resources and
only go to the network for access to globally-shared resources. Sharing
printers and file transfers between a loosely-coupled network of otherwise
independent, tightly-coupled systems is an excellent application for a medium-
speed network.
High-speed networks (500 Kbaud and higher) are needed for good performance in
situations where network nodes make their primary disk requests over the
network. A common use of high-speed networks is for chassis expansion; e.g., 2
separate tightly-coupled S-100 Bus networks sharing a single large hard disk.
In this case, the system without the hard disk uses only a floppy or small
hard disk to boot its processors and, from that point on, all disk requests
are transmitted over the high-speed network to the system with the large hard
disk.
To determine whether a given network speed suits your specific needs, you must
first calculate, in bits, the average and maximum amounts of data that will be
transferred over the network simultaneously. Divide each of these figures into
the effective transfer rate of the network (which is usually 10 to 50 percent
of the manufacturer's stated transfer rate...) to determine the actual
transmission time under average and maximum conditions. This simple
calculation should give you a reasonable estimate of how well a network will
perform.
Trends
------
Given the increasing availability of lower-cost networking hardware and the
decreasing price of hard disks, we expect to see large multi-user TurboDOS
networks configured somewhat differently than they are at present. S-100 Bus-
based systems are usually loaded with as many users as they can hold (10 to
20). To add more users, another S-100 Bus system is networked to the first
(provided there is a networking product available), and the second system is
loaded to its fullest potential. The major advantage of this approach is that
it offers the lowest cost per user; the disadvantage is that contention for
shared network resources slows down all users on the system. In most common
applications, better overall performance can be obtained by distributing the
users throughout several smaller (4- to 8-user) systems. These systems can
then be networked together to provide all users with access to all network
resources.
The arrival of inexpensive hard disks and networking products will make
distributed networks more common. The distributed approach also provides more
protection against system failure: if one small network goes down, all others
can still continue to operate. In a large, centralized system, a system crash
can disable all users.
Sample architectures
--------------------
The MuSYS product line provides examples of all of the most common TurboDOS
network configurations. Their tightly-coupled network includes satellite
processors with an S-100 Bus star topology. They also offer an Ethernet board
set that connects tightly-coupled S-100 Bus star networks into a loosely-
coupled high-speed master-to-master bus network. A user will see very little
difference in response time between making a disk request over this high-speed
master-to-master network and making the same request on a local disk. For
lower-volume applications, MuSYS provides both a medium-speed (RS-422) and a
low-speed (RS-232) point-to-point, satellite-to-satellite network that uses a
dedicated satellite processor board as a controller. It would not be cost-
effective to connect more than 2 or 3 tightly-coupled systems with these
latter 2 networks, since each system must contain one dedicated satellite for
each of the other systems to which it is connected.
The Televideo 808/816 network architecture is significantly different from
other TurboDOS networks. At the center of Televideo's tightly-coupled star
network is a dedicated server processor that controls hard and floppy disks,
printers, and either 8 or 16 RS-422 ports. Each RS-422 port may be connected
point-to-point to a workstation, which is a terminal with processor, memory
and, optionally, a local floppy disk. Although the workstations can have local
disk storage, they are not capable of booting off the local disk and
connecting to the network at the same time; thus, the system is a tightly-
coupled network, even though the processors are physically distributed.
The Televideo network also allows point-to-point, master-to-master networking
through the same RS-422 ports. As with MuSYS, an RS-422 port must be dedicated
to each system that is networked. But, since the ports are provided with the
initial purchase of the system, 2 Televideo 816 systems can be networked for a
very small incremental cost.
Commercial Dynamics provides a workable solution to the network size
limitations imposed by TurboDOS. They introduce the concept of a network
*ENVIRONMENT*, which is a particular view of a network. An environment
consists of a set of logical-to-physical device assignments that specify which
physical devices (disk drives, printers, queues) are accessed when a logical
device is requested. Commercial Dynamics supplies utility programs to create,
store, modify and activate the environments desired by the users.
Each user on a network can define any number of environments by running a
menu-driven, environment-editing utility. Environment definitions are stored
in files, to be activated when they are needed by running the ACTIVATE
command, and specifying the environment to be activated. Although only one
environment can be active at a time, a new environment can be activated with
one command. Thus, a given user's view of the network can easily be redefined
and activated without affecting any of the other users on the network, and
without regenerating the TurboDOS operating system. These utility programs are
supplied with Commercial Dynamics' satellite processor and TurboNET network,
and can also be obtained for any TurboDOS network.
Commercial Dynamics also produces a satellite processor with an onboard
network interface. As many as 16 tightly-coupled S-100 Bus networks that
contain at least one Commercial Dynamics satellite can be connected at medium
speed over a S-100 Bus network. The Commercial Dynamics satellite can be a
user processor and a network interface at the same time; thus, loosely-coupled
networks can be configured for a very low cost. The Commercial Dynamics
satellite can be integrated into any S-100 Bus TurboDOS network, and is
currently running on IMS systems.
Summary
-------
A wide variety of networking options are available with TurboDOS, using
different network topologies and networking hardware. TurboDOS's (ROCHE> ????
Missing Text ???)
EOF
- Details
- Hits: 5363
TDOS6.WS4
---------
- "TurboDOS spans the Horizon"
Karl Sterne, North Star Computers, Inc.
"Microsystems", August 1984, Vol.5, No.8, p.114
(Retyped by Emmanuel ROCHE.)
The North Star Horizon, now 6 years old, is one of the few pre-1980
microcomputers still in demand. However, the Horizon, as it is built in 1984,
is a very different system from its 1978 ancestor. Today's Horizon is a multi-
user multi-processor that uses North Star's version of TurboDOS operating
system from Software 2000, Inc., for both 8-bit CP/M and 16-bit CP/M-86
applications.
By the end of 1982, it was apparent that the Horizon's lifespan would be far
longer than had been forecast. Its chief limitation was its time-sharing
operating system. To replace it, North Star evaluated a number of operating
systems before choosing TurboDOS. Among the reasons for the decision were:
1. TurboDOS has a multi-processor networking architecture. (In fact,
North Star's latest computer, the Dimension, uses a similar
architecture. The Dimension, however, incorporates a multiple-user IBM
XT-compatible operating system rather than TurboDOS, as well as the
Intel 80186 processor rather than the Zilog Z-80, and the IBM bus
rather than the S-100 Bus.)
2. TurboDOS provides true multi-user operation, including file sharing
and record lockout.
3. TurboDOS permits simultaneous operation of 8-bit and 16-bit
applications.
4. TurboDOS outperforms many other operating systems in timed benchmarks.
5. TurboDOS has powerful networking facilities, including support of
multiple circuits, node-to-node communications, and the ability of any
node to be a server. This allows, for example, direct access to the S-
100 Bus for control of special boards.
6. TurboDOS comes as close to being a minicomputer operating system as is
practical on a microcomputer.
Given all its advantages, TurboDOS can still be improved. This article will
discuss some of the improvements made by North Star.
16-bit operation
----------------
North Star's principal problem with TurboDOS was that Release 1.22, the latest
available in 1983, emulated only 8-bit CP/M, and did not have 16-bit
capabilities. Software 2000's assurance, that a new release incorporating
CP/M-86 emulation was imminent, allowed North Star to proceed with the
development of new hardware: an 8-bit Zilog Z-80 satellite board, a 16-bit
Intel 8088-2 satellite board, and a memory expansion board to give the Intel
8088-2 as much as 512K of RAM. The existing Horizon hardware was used without
modification for the server (master). Although both the 16-bit hardware and
the new TurboDOS release took longer than expected, they have been in use
since April 1984, and have had excellent acceptance.
Installation and configuration
------------------------------
TurboDOS runs on a large variety of hardware, and one result of its
versatility is that it tends to be difficult to install. Having once succeeded
in installing the "vanilla" system, the user is confronted with the task of
tailoring it to that particular hardware. This usually requires a word-
processor to create lists of operating system functions and other parameters.
This process is a radical departure from the straightforward installation of
other North Star operating systems.
The North Star approach was to split the process into 2 functions:
configuration and installation. The configuration program asks the user
questions in English, and does not require a word-processor; installation is
automated, using the operator's responses.
The North Star TurboDOS operating system is distributed as a 4-diskette set.
Each diskette is named for its particular function in the installation
process: SYSTEM DISK, CONFIG DISK, HELP DISK, and SYSCON DISK. The SYSTEM
DISKette is a bootable TurboDOS operating system that contains a maximum
hardware configuration. Some users will never need to generate another
operating system.
Two manuals come with North Star TurboDOS: the TurboDOS User's Guide and the
TurboDOS Reference Manual. The preface to the TurboDOS User's Guide contains
step-by-step instructions for helping the system install itself. Three simple
commands are entered from any user's console. The rest of the process requires
only a few Carriage Returns and diskette changes.
The installation process uses the TurboDOS command file batch utility -- an
enhancement of the CP/M SUBMIT facility -- and performs the system
initialization tasks such as verifying the hard disk data tracks and
formatting the TurboDOS directory area. The user is then asked to insert one
of the 4 distribution diskettes. The proper user areas of the hard disk are
loaded with the appropriate files. This process is repeated for each of the 4
diskettes.
At this point, the installation creates a bootable diskette for daily use. The
distribution diskette set can be set aside, and the computer is fully
operational. If customizing of the operating system is not desired, this
completes the process.
The operating system on the SYSTEM DISK contains software drivers for a
maximum system. It includes hard disk drivers for both types of North Star
hard disks, and 2 different kinds of printer drivers. Should the user wish a
different configuration, the CONFIG program is run.
CONFIG asks the user questions in simple English about the desired hardware
configuration. It builds the TurboDOS GENeration and PARameter files required
by the TurboDOS GEN command. No other programs are required. After the user
finishes answering all the questions, a system summary is displayed on the
screen. This can be accepted or aborted, and the user can change any desired
parameters.
At the end of the session, the user can opt not to have the TurboDOS operating
system actually generated. In this mode, CONFIG acts as a teaching tool,
allowing the user to see how different configurations change the form of the
GEN and PAR files.
If additional TurboDOS operating systems are desired, another command file
batch is executed. This file, created by CONFIG, performs the TurboDOS
operating system generation and copies the new TurboDOS operating systems to
the proper area of the hard disk. The old TurboDOS operating system files are
saved with an ORG filetype. Should any problems occur with the newly-generated
TurboDOS operating systems, the old ones can be recovered.
Bad spot de-allocation
----------------------
All hard disk systems must deal with the question of how to detect and avoid
defects (known as bad spots) on the hard disk medium. Typically, a disk drive
will be shipped by the manufacturer with a few bad spots already on it, and
additional bad spots will "grow" as the result of vibration (especially during
shipping), power failures, or aging of the machine.
A good hard disk system must, therefore, deal with 2 different bad spot
scenarios:
1. A hard disk arrives with bad spots already on it.
2. A hard disk grows bad spots while it is in use.
Hard disk systems must also deal with 2 kinds of bad spots: "hard" (permanent)
bad spots and "soft" (intermittent) ones. It is good practice to recognize and
avoid the soft ones as well as the hard ones (even though you can often retry
enough times to get past the soft ones) because they tend to get worse with
age.
The issue is complicated by the fact that the location of the bad spot can
make a big difference in how bad it really is. A bad spot in an unused part of
the disk is not a problem, as long as one can tell the operating system how to
avoid it. A bad spot in a data area is a problem, because data has very likely
been lost. A bad spot in the directory can be fatal.
Generic TurboDOS comes with a program, VERIFY, which de-allocates bad spots;
i.e., it removes them from the pool of available disk space. VERIFY has 2
deficiencies, however. First, it finds only hard errors, because it is forced
to do read-only tests via the normal hard disk drivers, which are fault-
tolerant by design. Soft errors will trigger retries at the driver level, but
these retries are not reported to VERIFY unless many successive failures
occur. Second, it can be run only at startup -- the directory must be empty
for it to work properly. Therefore, it does not help at all with bad spots
that grow during use.
North Star's answer was to create a program named MARKBAD. MARKBAD is similar
to VERIFY in that it de-allocates disk blocks that contain bad spots. It
differs from VERIFY in 2 important ways. First, it accepts manual input of bad
spots. This allows identification of both soft and hard spots, which are taken
from the manufacturer's disk label, from a hard disk test program, or from
disk error messages put out by TurboDOS itself. Second, it can be run at any
time, so that a bad spot that grows during use can be removed from the
available pool.
VERIFY and MARKBAD both deal with bad spots in the disk's data area. Neither
can help if the bad spot is in the directory, because directory blocks cannot
be de-allocated. TurboDOS requires the entire directory area (including
allocation table) to be free of defects. On a 30MB hard disk with a 2K block
size, for example, this area occupies 30 tracks, or about 240K. (ROCHE> The
size of a standard IBM 3740 8" floppy disk...)
To alleviate this situation, North Star developed a means of swapping bad
directory tracks with good data tracks in a manner invisible to TurboDOS, so
that the bad blocks end up in the data area (where they can be de-allocated by
MARKBAD) and the good blocks end up in the directory. This preserves the
maximum amount of good disk space possible. Another approach would have been
to slide the beginning of the directory out into the first clear space big
enough to hold it, but a potentially large amount of good disk space might
have to be skipped, and that space would be lost.
The swapping of tracks takes place on power up, when a special section of the
hard disk driver reads the North Star bad-spot table from a reserved portion
of the disk. This bad-spot table is initially written in the factory, and can
be updated in the field by running the hard disk test-and-format program.
When a disk is shipped with a bad spot in the directory, the first system boot
will swap the bad track out into the data area, and MARKBAD will be told to
de-allocate the affected data blocks. The system will then appear like any
other North Star TurboDOS system.
If a bad spot grows in the directory later, some or all of the disk will be
unreadable. The procedure is to recover what can be read, then run the hard
disk test-and-format program, and tell it where the new bad spot is. On the
next boot, the new bad track will be swapped out of the directory, and the
system will again be usable. Any lost data has to be recovered from the backup
media.
User interface
--------------
Even though TurboDOS provides a considerably more pleasant user interface than
CP/M, it is designed for computer professionals rather than for the small
businesses that are North Star's principal customers. To present a more easily
understood set of screens, North Star has bundled Turbo-Plus into North Star
TurboDOS. This is an enhancement package that provides powerful additional
facilities for TurboDOS. The utilities included are: DIRDUMP displays the
master directory of any disk; WHO displays a list of all the current users;
LOCATE searches any or all drives for a file; BB (Background Batch) schedules
jobs to the background queue; STATUS monitors the activity of users and
peripherals; HELP provides on-line help menus that users may customize; TWX
(ROCHE> TeletypeWriter eXchange. An old US and Canadian dial-up communications
service that became part of Telex.) sends messages to other users immediately;
MAIL is an electronic mail facility.
Turbo-Plus is a set of utilities developed by Microserve Inc. for TurboDOS. It
was chosen primarily for its extensive on-line HELP messages, as well as for
its versatile electronic mail facility. In addition, Turbo-Plus contains a
group of commands that allows the network manager to track utilization, keep a
log of user time, and control other users.
Besides these aids for less sophisticated users, Turbo-Plus also has a
powerful Background Batch utility, BB, that allows users to schedule low-
priority non-interactive jobs for execution in background mode or at times
when the system is lightly used.
Conclusion
----------
By adding TurboDOS and the new multi-processor hardware developed for it to
the Horizon, North Star has extended the usage of this popular computer for
years to come. And North Star's implementation of TurboDOS brings the power of
a sophisticated operating system to non-professional users who need only to
follow a step-by-step procedure for successful installation and operation.
EOF
- Details
- Hits: 5514
Don Maslin's files archive
- Details
- Hits: 6476