TDOS2.WS4
---------

- "The TurboDOS Operating System"
   Keith Bierman
   ACM SIGSMALL Newsletter, Vol.10, No.3, August 1984, p.24

(Retyped by Emmanuel ROCHE.)


Abstract
--------

A  commercially available multi-microcomputer system is described.  Facilities 
and features are described from a user's standpoint. Several research problems 
are proposed.


Description (User's viewpoint)
------------------------------

Aside  from  a few minor inconsistencies, TurboDOS is  indistinguishable  from 
several  implementations of CP/M. The user interface is nearly identical,  and 
most CP/M SVCs (SuperVisor Calls) are honored.

The differences may be summarized as follows:

     1) There  are NO "built-in" commands, i.e., all facilities are  COM(mand) 
        files. There are no exceptions.

     2) Analogues  of  the  familiar CP/M utilities are  provided  (but  their 
        syntax is somewhat different).

     3) There are many more SVCs (approximately 100 system defined); most CP/M 
        and  MP/M-II  SVCs  are  simulated  (although  some  serve  no  useful 
        purpose).  The  minor  differences do preclude the  usage  of  popular 
        public-domain disk utilities, like FINDBAD and DU. TurboDOS  utilities 
        exist to provide most, but not all, of these services.

     4) Although  it  is possible to run a single-user  version  of  TurboDOS, 
        nearly  all  useful  systems have more than  one  Z-80.  TurboDOS  was 
        designed  to  be a multi-user OS, each user having its  own  dedicated 
        processor.

     5) (logical)  Disk drives may be as large as 1,000 MB, but files  (random 
        access)  are  limited to 134 MB. Many implementations do not  rely  on 
        "system  tracks":  these may then be used for  regular  data  storage. 
        These  implementations  automatically detect (and reconfigure  for)  a 
        standard CP/M disk, thus full media compatibility is ensured.

     6) LRU  buffer techniques are employed (now available in CP/M Plus),  and 
        hashed disk directories are optional.

     7) TurboDOS is designed to handle 16 print queues, each of which may have 
        a printer attached.

     8) Files  in user area 0 may be declared "global": these may be  accessed 
        from  any user area. This feature extends to user area 0 on  both  the 
        default  drive and on the system drive (whichever drive one booted  up 
        on).

     9) Users  may  be privileged. If a user is not privileged,  several  BDOS 
        functions will not operate (Set User Number, for example). In TurboDOS 
        terms, all CP/M users are privileged.


Description (system viewpoint)
------------------------------

TurboDOS  is a networking replacement for CP/M 2.2-MP/M-II. Between 2 and  255 
processors may be interconnected; in what TurboDOS denotes as nodes. Each node 
may  have its own circuit, with up to 255 processors. Nodes  communicate  with 
each  other;  circuit elements communicate with their own  node  only  (though 
messages  can  be  forwarded).  No special  requirements  are  placed  on  the 
communications channel(s): it may take any form (however, code for it must  be 
supplied  by  the  system integrator). Each processor may  have  its  own  I/O 
devices, or rely on the network (this includes printers, mass storage devices, 
modems,  or  whatever).  System topology is  not  constrained,  although  most 
current implementations are simple master/slave arrangements, provisions  (are 
said  to)  have  been  made for complex star,  ring,  and  other  hierarchical 
networks.

The  vast  majority  of  (CP/M)  application/development  tools  run   without 
modification. The only programs that do not port well are those that skip  the 
BDOS and dive right into the BIOS or, worse yet, overwrite parts of it.  These 
programs,  though few in number, do include some of the best CP/M tools  (like 
Nick  Hammond's  SmartKey  (allows arbitrary  key  redefinitions),  SmartPrint 
(applies  the same to output routed to the printer), SPOOL (intercepts  output 
going  to any CP/M logical device), and UNSPOOL (background  print  utility)). 
Also, extended  SUBMIT  programs do not work (TurboDOS's  equivalent,  the  DO 
construct,  is  roughly  the  same as SUBMIT +  XSUB,  with  the  addition  of 
nesting).  All  other  languages, packages, etc.  work  without  (significant) 
modification  (although some, like database programs, are more effective  with 
record locking).

As mentioned before, most current implementations are simple master/slave set-
ups.  The 8-bit restriction may be removed soon, a major TurboDOS OEM,  MuSYS, 
has  announced  an 8086 version. Our system (currently) consists  of  a  Z80A, 
2xZ80B,  2xDSDD 8" floppies, 1x256K PION ramdisk emulator  (medium-speed  RAM) 
and  a  couple of printers and terminals. The system has proved  to  be  quite 
reliable. All of the boards were manufactured by Advanced Digital Corporation, 
who configured TurboDOS for their boards. Our dealer, Ingrid's Computers,  has 
had  great success with a Remote Telecommunications System based on a pair  of 
Z80Bs  running TurboDOS. Competing products use much more powerful  processors 
(16- or 32-bit) and/or much custom hardware. This provides Ingrid's  Computers 
with a non-trivial cost advantage.

At  the recent SIGPC/SIGSMALL conference, G. Clapp analyzed CP/NET,  carefully 
putting  its structure in terms of the ISO reference model. It is with  regret 
that  I  cannot do the same for TurboDOS. (If anyone is clever  enough  to  do 
this,  please  send me a copy.) Contrary to a view stated at  the  conference, 
TurboDOS source code is not available. It is claimed that it is all written in 
Z-80  assembly  code, and utilizes all of the special Z-80 features.  What  is 
available is the source code for all of the interface modules. These, taken as 
a  group, are roughly equivalent to the BIOS and SNIOS of CP/NET  fame.  Thus, 
even  the  end-user  can  transport  the OS to  a  different  Z-80  board,  or 
reconfigure an old one. In fact, this procedure is easier under TurboDOS  than 
CP/M. Perhaps this can best be explained via an illustration:

Suppose we want to add a new type of drive. First, we would examine one of the 
provided  drivers.  We  note  that, aside from a  few  minor  differences,  it 
resembles the logic that we would have had to install in CP/M, except that all 
the  logic  refering  to a type of drive goes into a  single  module  (object-
oriented programming style). (Thus, some of the sneaky optimizations common in 
some  CP/M  BIOSes  are not possible (code  sharing),  but  installation  (and 
debugging)  are  easier.)  This module is then  processed  with  a  relocating 
assembler,  the  output  REL file must be in Microsoft format  (a  utility  to 
convert  from  Phoenix  Software Associates (PSA)  format  to  Microsoft's  is 
included.) All that remains is the fairly simple SYSGEN procedure.

To  SYSGEN the system, two files are prepared: (1) a list of  all  relocatable 
modules  to  include, and (2) a file consisting of symbolic patches.  Then,  a 
SUBMIT job is run, and new system load modules are output.

Thus, TurboDOS has (in one sense) two parts: the physsical interface (supplied 
by the hardware distributor or by the user), and the logical internals  (whose 
structure is not obvious).

The  following research topics are suggested from reading (read:  "decrypting, 
deciphering, and translating") the TurboDOS manuals.


Research Topic #1

A  useful user manual could/should be developed. Many features of TurboDOS  go 
underutilized  (or totally ignored) due to the difficulty in  deciphering  the 
manuals. Since much of the material for a manual would have to be obtained via 
experimentation with the system, this would be a good class project.


Research Topic #2

TurboDOS  should  be  able to handle a wide  variety  of  network  topologies, 
several  should be set up and analyzed. In theory, one could have  254  slaves 
and one master in each circuit (and 255 circuits). It is rather obvious that a 
conventional  Z-80  (even  running at 8-MHz) could not service  such  a  large 
number  of processors! Based on our experience with 2 users, 3 processors,  8" 
floppies, and a RAMdisk emulator, I would speculate that a 6-MHz master  (with 
a high-speed hard disk) could comfortably handle 4 disk-intensive users, or  8 
less (disk) demanding users. Thus, a large network might optimally be built up 
by  interconnecting these clusters (up to 255 of them, in fact).  Confirmation 
of  this  hypothesis would be of interest. (This arrangement  would  have  the 
additional advantage of being very fault tolerant.)


Research Topic #3

TurboDOS  is  equipped  with an (optional) LOGON/LOGOFF  facility.  When  this 
facility is enabled, a (potential) user is required to input both a user  name 
and  password.  These  are  checked  against a file  kept  in  user  area  31. 
Additional  security  is  afforded by separating users  into  two  categories: 
privileged  and  non-privileged. Non-privileged users are not supposed  to  be 
able  to change user areas, thus the password file is kept safe.  This  system 
would appear to be reasonably secure; but is it?

Note:  Additional security can be arranged by clever network  topology.  Since 
local  processors  (or clusters) may have their own drives, if these  are  not 
installed in the rest of the network, they cannot be accessed at all! It would 
appear that this system could be more secure than many mainframes.


Research Topic #4

For  those interested in experimenting with parallel processing, TurboDOS  may 
offer an easy (and cheap) alternative to special dedicated hardware.  TurboDOS 
has  a  special  file type, the FIFO (the contents of a  FIFO  may  optionally 
reside  in  RAM).  If  we allocate one  processor  per  co-routine,  they  can 
communicate   via  FIFOs.  This  allows  a  dynamically  redefinable  set   of 
relationships.   Although   it  is  conceivable  that  255   such   could   be 
interconnected,  it  would seem that a very high data transfer rate  would  be 
required. Thus, a practical limit might be the number of processors that could 
share  the  same  bus  (16 on the S-100). Since the  system  could  be  easily 
reconfigured for "normal" operation, the cost would really be quite minimal.


Research Topic #5

There  are several commercially available 8088 and 68000 "add on"  boards  for 
the  Z-80. These usually interface to CP/M. Some tinkering would be  necessary 
to run these under TurboDOS. (By this, I do NOT mean full integration,  merely 
give  one  user a co-processor (with its own OS) that will  interface  to  the 
world via TurboDOS. The other problem is much harder.)


Research Topic #6

At  many  sites,  a large mini or a mainframe is already  present.  For  these 
sites, it might be handy to have the larger system emulate TurboDOS, providing 
high-speed printers, large mass storage devices, etc.

A second stage would be the addition of user log on to the host system  (could 
be  automated, but at the expense of some security). Some utility  to  convert 
different file formats might be necessary.

A  third  stage  would  be the creation (or  adaptation)  of  a  commonly-used 
compiler (Pascal, C, or ?) to run on both machines, but the output of the Z-80 
version  would (optionally) be object code for the host. It is generally  felt 
that  system  performance  can  be increased by  removing  as  many  tasks  as 
possible. By offloading compilation and editing, the host's performance should 
be   improved  (especially  in  development  environments,  with  many   small 
compilations).


Research Topic #7

There is much interest in concurrent processing (read "windows"). Most of  the 
systems  that  support this well (Xerox, Sun, Three Rivers,  Lisa)  are  quite 
expensive.  If we were to restrict each user to a fixed number of windows,  it 
would  be easy to tie several Z-80s together, one for each window. A  graphics 
board  (some  are  now  available for about $1,000  that  have  resolution  of 
1000x1000)  and one of the Z-80s would be used to control the  system  (sounds 
like  one  of the clusters from above, not?). Of course,  this  would  mandate 
special  software  but,  aside  from the  graphics  board  (and  monitor,  and 
mouse/joystick/trackball?),  all  of the hardware would  be  already  present. 
Unlike  single CPU systems, no special effort would be needed to provide  data 
security,  since none of the processors can access the memory of  another  (of 
course,  this  does noe allow most efficient use of memory, but that  has  not 
stopped Intel/IBM either).


Compared to other Multi-User (micro) OSes
-----------------------------------------

Compared to MP/M, TurboDOS is superior in nearly every respect. TurboDOS allow 
many more users, provides much faster response, larger TPA (up to 63.5KB  with 
Version 1.3), and prevents any single user from crashing the system (a crashed 
slave  is automatically reset). However, there are some versions of MP/M  that 
might be worth considering, like the new CompuPro system. It is an  integrated 
hardware-software  system  that  dedicates  a Z80B  to  each  user.  A  16-bit 
processor  (an 8088) is available to any user. Intra-system  communication  is 
very  fast, due to the method: shared memory. TurboDOS is, however,  far  more 
flexible,  more  extensible,  and  does not tie the  user  to  any  particular 
hardware vendor.

TurboDOS  also  is superior to CP/NET. CP/NET does not  allow  the  individual 
processors  to have their own local storage. Thus, the only possible  topology 
is  a  ring.  Consequently, a fault-tolerant system would be  much  harder  to 
build. Also worth noting is the bottleneck that this implies, system expansion 
(and  performance)  is tightly bound up with the capabilities  of  the  server 
(currently,  MP/M  seems to be the only existing server, a limited  system  at 
best).  It  is rumored (I read it in Jerry Pournelle's column  in  Byte)  that 
Digital  Research is not going to support CP/NET any longer, but will  have  a 
successor  "Real  Soon Now". (ROCHE> DR-Net, which is compatible  with  CP/NET 
Version 1.2, so that 8-bit and 16-bit computers can exchange files.)

Although  every  computer  enthusiast wants to trade up to  the  latest,  most 
powerful chip, it is often not practical. Currently, there exists a large body 
of  high-quality 8080/Z-80 software. Furthermore, many applications  are  well 
served  by  these  devices. Given suitable mass  storage  facilities  (RAMdisk 
emulators for speed, and large Winchesters for size), there is no good reason, 
for most applications, to be moved up to a larger (more expensive)  processor. 
When  comparing  costs,  one should also note that  many  of  the  application 
programs that are available on both 8- and 16-bit devices require more  memory 
(to  provide  the  same  functionality) than when  in  an  8-bit  environment. 
(WordStar  on  the  IBM  and on a Z-80, for example.  On  the  IBM,  128K  are 
required.  On a Z-80, less than 64K. Running a Z-80 at 6-MHz, we have  noticed 
little,  if  any,  speed  advantage when trying the PC,  though  we  have  not 
performed  any formal comparisons. Others have reported  significantly  slower 
times  on the PC. Appendix A contains some timing information that may  be  of 
interest.)  Another (common) argument for upgrading is the desire  for  multi-
tasking. While multi-tasking is a very good thing, it is not clear whether  it 
can  best  be  achieved  by multiple processors or  by  more  powerful  single 
processors;  only  time will tell. Worse yet, the more powerful  processor  is 
often  drafted  into use as a multi-user system (often to justify  its  higher 
cost). All of us have known times (often most of the time) when our  mainframe 
facility offers poorer response time than a Apple! It is not that the Apple is 
more  powerful,  but that the mainframe has too many users. Let  us  not  rush 
blindly ahead, just to retrace the development of the mainframe!

Recently,  many papers (and commercial products) have described LANs  for  use 
with (read: "requiring") 16-bit devices. While many of these systems are quite 
powerful,  it  is not clear that they offer significantly  more  functionality 
than  a  TurboDOS  network. There are  several  currently  available  database 
managers  for the Z-80 that do not place many restrictions of the size of  the 
database  (Sensible  Solution, Qpro IV, etc.). Since  TurboDOS  allows  single 
files  to be 134MB (larger than most of the current crop of disk  drives),  it 
would  appear that the class of problems that require a 16-bit  processor  may 
not  be quite as large as expected (though a more powerful machine  is  almost 
always easier to program).

Clearly,  there are applications (most "scientific" programming, for  example) 
that  require large memory spaces, hardware arithmetic, etc. These  tasks  are 
beyond the Z-80, as it is currently constituted (the Z-800 might change  this. 
(ROCHE> Zilog never managed to produce it. It was the end of CP/M.)) For these 
applications,   a   Z-80-based  LAN  is  certainly  not   indicated,   systems 
incorporating  virtual  memory, 64-bit arithmetic and the like would  be  more 
appropriate.  It is worth noting, however, that there are Z-80  products  that 
use  virtual memory techniques (several of the better spreadsheets and an  APL 
interpreter spring to mind). Now, if someone would write a FORTRAN-77 (not the 
subset)  with virtual memory for the Z-80, we would really have a hot  system, 
programs up to 1,000MB!?!


Weak points
-----------

In  the words of a great sage: TANSTAAFL (there ain't no such thing as a  free 
lunch). TurboDOS does have its problems:

     1) As noted above, the manuals are indescridably bad.

     2) Since  the  system  was written entirely in  Z-80  assembly  language, 
        porting  it  to  new processors is a big task, nearly as  big  as  the 
        original  program  (and will entail just as long a  debugging  cycle). 
        Thus,  (full) support for 16-bit processors is likely to be slow  (and 
        may have to wait for the Z-800).

     3) While  the  $750 licensing fee may seem trivial when spread  over  255 
        users  ($0.12  each), this is not the case.  The  licensing  agreement 
        clearly  states  that  "A  separate license fee must  be  paid  and  a 
        separate license signed for each computer system on which TurboDOS  is 
        used.  Network slave computers which are also capable  of  stand-alone 
        operation  under TurboDOS must each be licensed separately, but  slave 
        computers which cannot be used stand-alone (e.g. because they have  no 
        mass  storage) do not." Despite this, TurboDOS is still  cheaper  than 
        most of the alternatives (especially writing a new system).

     4) It  does not appear to be possible to assign priorities  to  different 
        users.  Output  is spooled on a FIFO basis, so is  disk  access.  This 
        means that background tasks demand more resources than might otherwise 
        be necessary.

     5) There  is no provision for spooling console output. This is a  serious 
        omission,  since the output of background processors will be lost.  (A 
        rewrite of the console module could fix this).

     6) There  is  no  provision for time/date stamping of  disk  files.  This 
        complicates life, more than a little.

     7) Since  there is no SAVE command, DDT, SID, ZSID, et al.  are  somewhat 
        crippled  (make  any  changes you want, you just  can't  save  them!). 
        (ROCHE>  Under CP/M Plus, SID and ZSID have been provided with a  SAVE 
        command.)

     8) Since all TurboDOS functions are disk-resident, at least one disk must 
        be  both  fast  and large. Although it is possible  to  run  a  system 
        exclusively with floppy disk drives, it is not recommended.


Conclusions
-----------

TurboDOS  provides  a good basis for both "simple" LAN applications,  and  for 
advanced  research  topics,  since TurboDOS  requires  only  inexpensive  Z-80 
microprocessors,  yet  offers  great  flexibility.  Thus,  it  is  an  obvious 
candidate for both commercial and research applications.


For more information
--------------------

     1) TurboDos User's Group
        PO Box 27550
        San Francisco, CA 94127

        This group is forming, and has not yet published its first newsletter.


     2) Ingrid's Computers
        22458 Ventura Blvd., Suite E.
        Woodland Hills, CA 91364

        Manufacter and system integrator, very helpful.


     3) MySYS Corp.
        1752 Langley
        Irvine, CA 92714

        Largest TurboDOS distributor. Currently advertising bank-switched  and 
        16-bit versions (slaves only).


     4) Advanced Digital Corporation
        5432 Production Drive
        Huntington Beach, CA 92649

        Manufacter of board-level computers.


Acknowledgements:
-----------------

Special thanks to Phil Ericson whose help has always been invaluable.

TurboDOS is a product of Software 2000, Inc.
MP/M, CP/M, and CP/NET are products of Digital Research, Inc.
SmartKey is a trademark of FBN Software, Inc.


Appendix A: TurboDOS timing information
---------------------------------------

Most  microcomputer benchmarks rely on a variety of benchmark programs  while, 
in  the  mainframe community, timing information is (often) given  on  a  per-
operation  basis.  It was not difficult to add some additional  logic  to  the 
TurboDOS  clock module. This logic allowed times to be measured in 183th of  a 
second. The following times refer to Microsoft's FORTRAN-80.

        4,409.638 +/sec         (real+real)
        2,846.034 -/sec         (real-real)
        1,620.903 */sec         (real*real)
          761.865 //sec         (real/real)
          117.912 sqrt/sec      (sqrt(real))
          455.450 **/sec        (real**int)
           59.495 **/sec        (real**real)

Each  operation was performed 10,000 times, via a DO loop, the  loop  overhead 
(calculated  first)  was subtracted, and the result was converted  to  ops/sec 
(from ops/183rd sec).


Double precision
----------------

        2,259.2593 +/sec        (double+double)
        1,591.3044 -/sec        (double-double)
          476.5625 */sec        (double*double)
           74.9693 //sec        (double/double)
           10.1757 sqrt/sec     (sqrt(double))
            5.9215636 **/sec    (double**int)
            6.0236998 **/sec    (double**double)

Each  operation  was performed 1,000 times, via a DO loop, the  loop  overhead 
(calculated,   above).  It  is  interesting  (and  somewhat   puzzling)   that 
double**double runs faster than double**int.


Sieve test (as published in Byte)
---------------------------------

TurboDOS running on a 6-MHz Z-80.

Timing  done  via the "traditional" method, checking Time of  Day  before  and 
after. I assumed (perhaps incorrectly) that the article times were obtained by 
running  some sort of TOD program after termination of the sieve. These  times 
represent  the  time  to  terminate  (TOD),  load  (sieve),  compute,   print, 
terminate, load the TOD program, execute the TOD, and finally print TOD.

        C/80 3.0                        18 sec
        Software Toolworks RATFOR       17 sec

Neither  of these were optimized in any way. The RATFOR version used only  the 
FOR  construct, thus was operating under a handicap (DO loops are  faster).  A 
FORTRAN version was run by Jim Gilbreath (author of the original Byte article, 
"A  High-Level Language Benchmark", Sept. 1981), who obtained a time  of  17.0 
seconds  on  a 4-MHz Z-80. The same author published a time of  13.9  seconds, 
again  on  a  4-MHz Z-80, using  an  improved  implementation.  Implementation 
details (obviously) count.

Times reported for the 8086/8088 family range from 205 seconds (BASIC) to 1.90 
(8-MHz  8086  assembly). Most, however, run slower than the Z-80  times.  Many 
other benchmarks can (and should) be used for comparing different  processors. 
Informal  testing (running the same package, like WordStar, on both  machines) 
indicates that a 6-MHz TurboDOS system runs roughly 20% faster than an IBM PC. 
Such  benchmarks  seem  to  be a better test of  a  language  (or  application 
program)  implementation than raw machine power. Users who are only  concerned 
with  how fast their favorite package can run should simply try both  systems. 
Interested  readers should note that much of TurboDOS's performance is due  to 
sophisticated  buffer  management. There is no reason to believe that  use  of 
such techniques would not speed up the PC considerably.

More  work  needs to be done, both in benchmarking the systems  and  improving 
existing   applications  (and  languages),  to  make  full  use   of   machine 
architecture. The Z-80, having been around longer, has a more mature  software 
base,  and such optimizations are already embedded in existing systems.  Thus, 
one can expect (hope?) that 8088 systems will improve with age.


EOF