VOLUME 49

DESCRIPTION:    FORTRAN, RATIONAL FORTRAN PROGRAMS.
               CDOS ROUTINES FOR CP/M.

NUMBER  SIZE    NAME            COMMENTS

               -CATALOG.049    CONTENTS OF CP/M VOL. 49
49.1    4K      4FDCBIOS.DOC    Files for running CP/M 2.0+
49.2    2K      4FDCBIOS.HEX
49.3    13K     4FDCBIOS.Z80      on CDOS systems using this
49.4    1K      4FDCBOOT.HEX
49.5    2K      4FDCBOOT.Z80      BIOS and BOOT.
49.6    11K     ABSTRACT.049    Abstracts of the files on this
                               disk.
49.7    1K      ASMDEF.RAT      Used by LCAT, part of RATFOR.
49.8    6K      ASTRO.FOR       FORTRAN Astronomy program.
49.9    10K     CDOS.DOC        Comments on CDOS features.
49.10   2K      CDOSCOPY.COM    Full disk copy program
49.11   2K      CDOSCOPY.DOC      for CDOS systems,
49.12   4K      CDOSCOPY.HEX      single or double
49.13   26K     CDOSCOPY.PRN      density, and single
49.14   12K     CDOSCOPY.Z80      or double sided.
49.15   1K      CONSTS.RAT      Definitions of some frequently
                               used constants (RATFOR).
49.16   1K      F77.DOC         FORTRAN 77 Documentation.
49.17   1K      F77DEF.RAT      FORTRAN 77 Functions.
49.18   2K      F77LIB.FOR      Definitions of some intrinsic
                               FORTRAN 77 functions.
49.19   3K      FILTER.Z80      Source code for emulating CDOS
49.20   1K      FILTER.HEX        calls under standard CP/M.
49.21   6K      FILTER2.Z80     Modified version of FILTER
49.22   1K      FILTER2.HEX       (above)
49.23   2K      INDEX.Z80       RATFOR Subroutine.
49.24   1K      INDEXT.FOR      Test for INDEX.Z80.
49.25   1K      IOER.Z80        Used by LCAT (RATFOR).
49.26   1K      LCAT.DOC        Used to concatenate Microsoft
49.27   3K      LCAT.RAT          .REL files.
49.28   2K      MINV.DOC        Matrix Inversion Determinant
49.29   3K      MINV.FOR          Calculator, FORTRAN and
49.30   3K      MINV.RAT          RATFOR source code.
49.31   2K      RATCOMNS.RAT    Used by RATFOR.
49.32   3K      RATFOR.DOC      Documentation of RATFOR.
49.33   40K     RATFOR.FOR      FORTRAN source code for RATFOR.
49.34   25K     RATFOR.RAT      RATFOR source code for RATFOR.
49.35   17K     RATFOR.REL      Microsoft .REL file, does not
                               include library routines.
49.36   1K      READLB.Z80      Subroutine for SCOPY (RATFOR).
49.37   1K      RFG.CMD         CDOS equivelent of a submit
                               file. (^=$).
49.38   1K      SCOPY.DOC       Direct Disk I/O (RATFOR).
49.39   2K      SCOPY.FOR         FORTRAN source code.
49.40   1K      SORTI.DOC       Quicksort program (RATFOR).
49.41   2K      SORTI.FOR         FORTRAN Source code.
49.42   3K      SORTI.RAT         RATFOR Source code.
49.43   1K      TRNSLT.Z80      Used by RATFOR.

NOTE:  Most of the FORTRAN files on this disk will run on
Z-80 processors only, some will run only with Cromemco CDOS.
Check the abstracts and .DOC files for more details.


   CBIOS for Cromemco 4FDC or CCS 2422 disk controller

   4FDCBIOS.Z80  and  4FDCBOOT.Z80 are the bootstrap and Cbios
for running CP/M 2.x with a Cromemco 4FDC controller  board,  a
Z80*  cpu,  and  minimum  20K  of  RAM.   CP/M  1.4  can also be
supported if some of the 2.x-only code is removed. This code is
also applicable to,  and tested upon,  the California Computer
Systems disk controller board model 2422, if a serial port at 0
compatible with CDOS is used (a 3P + S, or a Cromemco TUART, or
the serial port on a Cromemco Single Card Computer.)

   This source is capable of supporting three types of  disks:
5  inch  (such  as  Wangco),  8  inch  (such  as  Shugart), and
single-arm voice-coil 8 inch (such as Persci).  Between one and
four  drives  are supportable, but no intermixing.  There is no
current support for  double-sided  drives,  but  it  should  be
easily addable.

   There is no support for the double density mode in the Cro-
memco 16FDC, or the CCS 2422. This bios is limited to 128 byte
sectors.

   The  8  inch  format  is  compatable with all CP/M and CDOS
versions currently known.  The 5 inch format  (skew  of  5)  is
compatable with all 5 inch CDOS formats currently used.

   It  is  assumed  that  the  main  console, at port zero, is
already initialized by RDOS or some other program.  If not, you
can insert the necessary code into 4FDCBOOT.Z80.

   As additional features, the routine  contains  an  optional
reader-punch  and  printer  support  routine, via TUART and PRI
boards, and a standard  missing  memory  check.   The  external
interrupt  of the TMS 5501 is enabled on the 4FDC, which causes
a 0FF interrupt, which is the same as a missing  memory  board.
I  like  to use this to break out of loops without losing CP/M.
If this is not desired, it is easily removed from the code.
   Also, in a commented section is a small modification so the
DEL key (07FH) is changed to a Control-U by the  CBIOS,  for
those who have Backspace on the terminal.  I do not like to use
two  hands  just to be able to erase a mistake.
   The source is for Cromemco Z80  assembler,  and  there  are
five  constants  in  the  front to be changed to select various
options.

   First, select the type of drive: If  5  inch,  LARGESW  and
PERSCISW  should be 0.  If 8 inch Shugart, LARGESW should be 1,
PERSCISW 0.  If Persci, PERSCISW should be 1.   LARGESW  should
also be altered in 4FDCBOOT.Z80.

   Next, NUMDRIVES should be 1 to 4 for 5" and 8" drives, and
2 or 4 for Persci double-disk drives.

   Then, to have support for printer and TUART, BIGIOSW should
be  1,  otherwise 0.  You might also wish to change BAUDRATE to
the desired value for the reader-punch (110 baud is supplied).
Note: if the CCS 2422 is used, it may be necessary to supply an
initialization and bootstrap routine for the console port, if
that is on a TUART addressed at zero. The current code does not
initialize the port at zero, assuming that has been done before
the disk was booted. The code for the TUART referred to here is
for an additional TUART port, not the console port, but it is
easy to add the necessary code to initialize the console port
also.

   Finally, set BEGINADR to the start of  the  CBIOS.   It  is
supplied as 0E400, which is for a 64K system.  This should also
be altered in 4FDCBOOT.Z80.

   The  switches  on  the 4FDC are set exactly as described in
the board manual.  For a system  over  48K,  the  ROM  must  be
disabled  upon  bootstrapping.   For a smaller system, the RDOS
can stay in, or not, as you desire.  For a CCS 2422 controller,
the same statement applies, except the 2422 ROM need not be dis-
abled unless the system memory exceeds 60K.

   4FDCBOOT.HEX and 4FDCBIOS.HEX are supplied, assembled from
the source files. They are set for a 64K version of CP/M. You
can use them in another system if you can put about 8K at the
upper end of memory (E000) and maybe 16K at the low end (0000)
to be able to re-assemble the files.


         GENERAL NOTES ON CDOS' UNDOCUMENTED FEATURES

When  CDOSGEN asks you whether the drive is large [L] or  small
[S] try answering 'X'.  You will then get a menu for  Shugarts,
etc.

You  can  use  the  'SYS.DIR'  FCB  create call of CDOS 1.07 or
higher to access  the  directory  regardless  of  its  size  or
position  on the disk.  Although the FCB created with this call
is write protected, you can reset that  attribute  bit and  can
then write to the directory as well as read it.

Disk Labels.
A directory label is written to the disk by STAT and is used to
ascertain  the  storage capacity of the disk and the number  of
directory entries (64 to 512).
The last 8 bytes of the first boot loader sector (usually  side
0  track 0 sector 1) are always recorded in single density  and
contain eight bytes indicating the type of disk to the BIOS, eg
    LGSSSD
for Large (8"), Single Sided, Single Density
or   LGDSDD
for 8" Double Sided, Double Density diskettes (1.2 MBytes)

STAT  2.15  was written for a WD1797 FDC chip (it  records  the
side  numbers  into the address fields) although a  WD1793  was
eventually used.  CDOS 2.36 does not support the 1797, however,
and this chip will not work instead of the 1793 on the 16FDC.

Double Density Recording Format:
16 sectors of 512 bytes are used per track.(MFM)
A 12 interleave is used (1,C,7,2,D,8,3,E,9,4,F,A,5,10,B,6)
Although  a 4 interleave can be read as COM files in my 4MHz no
wait state system a 6 interleave speeds throughput by a  factor
of  two.  (use 1,2,3,4,5,6,C,D,E,F,10,7,8,9,A,B).  INIT can  be
modified  to  do  this..  if  interested write me  and  I  will
disclose all....

Finally,  if  someone has deciphered how to call the 2.36  BIOS
directly without getting error returns I am all ears...

Trevor Marshall,
26 Mirrelia Way, Ferndale, Western Australia 6155
phone International (619)4576049   or national (09)457 6059
14 December 1980

Notes added by: Chuck Weingart          February 1, 1981
               2152 W. Iowa
               Chicago, Ill 60622

On the "X" feature of CDOSGEN, described above, you must respond
to  several  questions,  such  as  "Fast  or  Slow",  "Single or
Double".  All Shugart type drives are "slow".   "Double"  drives
are  those like the Persci, that have one seek mechanism for two
different disks, or when you are  using  a  Shugart  851  double
sided  drive as two "drives" (one "drive" on each side, requires
rewiring the cable).

In CDOSGEN 2.36, when you respond "S" to  the  drive  type,  you
again  get  a "Fast or Slow?"  question.  MPI drives are "fast",
and Shugart 400 and Wangco drives are "slow" in my experience.

It is easy to attach one of the new Shugart  801/851  drives  to
the 4FDC, just use the "TS" data separator (install the jumper).
If  you  are  trying  to use an old 800-1 or 801 drive, the data
separator adjustments probably have to be changed to  work  with
the 4FDC.

To attach the MPI model 52 double-sided 5" drive to a 4FDC, just
add  a jumper on the 4FDC from J4 pin 21 to J2 pin 32, if one is
not already there.  Then gen a 5"  double-sided  drive  at  that
position  with 2.17 or greater, initialize some disks with INIT,
and write a double-sided label with STAT, and you are  ready  to
go. I converted to double-sided in one hour, and it's great!

To  attach  a  Shugart 851 to the 4FDC, install the TS jumper as
noted above.  Disconnect the wires 2, 12, 18, and  32  from  the
cable (at the drive end is easiest).  Connect the Shugart pin 12
to  the 4FDC pin 2 (for side select), Shugart pin 30 to 4FDC pin
4 (for Drive select 3), and Shugart pin 32 to 4FDC pin  18  (for
Drive select 4).  Connect a jumper from J4 pin 21 to J3 pin 2 if
one  is  not  already  there.   Use  the "X" feature and 2.17 or
greater, initialize disks with INIT, and label  the  disks  with
STAT for double-sided operation.

CDOS  1.07  can  be  used  unchanged  on the California Computer
Systems 2422 disk controller if there is a  Cromemco  compatible
console  port  at  0,  such  as a 3P + S, Cromemco TUART, or the
console on the Cromemco SCC.  The latter will have to  have  two
modifications  made:  the  prom (U25) must be altered to put the
parallel port at address 04 somewhere else  (such  as  0E),  and
there  must  be  a 220 ohm resistor in series with U52 pin 6 (to
delay PWR) and a 400pf capacitor from U52 pin 6 to  ground  (pin
8).

CDOS 2.17 can be used on  the  CCS  2422  controller  in  single
density  if  one  uses  the  1.07  bootstrap  loader.   The 2.17
bootstrap will not work without a hardware change  on  the  2422
board,  and  it is somewhat lengthy.  There will be a persistent
problem of read errors on track 2 sector 1, but this is  due  to
the  WD1793 chip.  Just Retry the operation and it will clear up
every time.

CDOS 2.17 has a command, VERIFY, with  one  of  three  operands.
VERIFY ON will enable read-after-write verification on the disk.
VERIFY  OFF will disable that, and just VERIFY will indicate the
status of the feature.  VERIFY is not present in CDOS 2.36.

CDOS 2.17 and up has  several  undocumented  commands:  REM  and
ATTR.   ATTR  is  the  same  as  ATRIB, and REM is for inserting
remarks into your batch file, because the REM line is ignored.

Although  it  isnt  currently  stated  in  any   Cromemco   doc-
umentation  that  I have seen (and I have written Cromemco twice
about it with no answer),  all  versions  of  Cromemco  software
shipped  since  about  February 1980 come with the system genned
for 64K.  If you have a copy of CDOS 1.07, you can run the  2.17
or  2.36  versions  of CDOSGEN under 1.07 in order to generate a
smaller system.  The new versions of CDOSGEN will not run  in  a
32K system, tho, they are quite a bit bigger.

For users of non-Cromemco memory boards that want to get a "full
house"  (64K),  here is how to add a Phantom signal to the 4FDC.
Add a jumper from IC46(74367) pin 15 to IC31(2708) pin 20.   Add
a  jumper from IC46 pin 12 to pin 8 (ground).  Add a jumper from
IC46 pin 11 to S100 pin 67 (Phantom output).  The  memory  board
addressed  at  C000H  must  respond  to  the  Phantom signal, of
course.  The RES switch (SW2) must be set on.  This way, you can
use the 4FDC RDOS program until CDOS is booted, then  the  EPROM
will  be turned off and the memory board "behind" it can then be
used.  This method must be used even in  many  boards  that  are
advertised  as  "Cromemco banking compatible" because the boards
do not have the feature of being bank-disabled upon power-up.

CDOS 2.17 now takes about 11K minimum for itself.  CDOS 2.36 now
takes 14K minimum.

STAT for 2.36 has several undocumented switches: /M, /N, /E, and
/EZ.   STAT/M  allows  you to change the "master" drive (the one
that CDOS looks at if it cant find  a  program  on  the  current
drive).   STAT/N  gives  a  5-up directory display.  STAT/E is a
directory erase, with prompting.  STAT/EZ erases, and no prompts
as I recall.

Jordan Siedband tells me that 2.36  will  not  read  CP/M  disks
correctly,  cause  unknown.   Keep  a copy of 2.17 around if you
want to continue to use CPMUG stuff.  There is one thing that is
obvious to anyone who has looked: CP/M and CDOS directories  are
compatable  only in  "1.4 mode", that is, no system flags of any
kind set in the directories,  either  CP/M  2.2  flags  or  CDOS
flags. When they  are  not  compatable, the one operating system
will usually clobber directory entries in the  other  format  or
refuse to work.

CDOS 1.07 and up have an  undocumented  error  message:  LOGICAL
DISK ERROR n.  This message is produced if you do something like
request  a  track that does not exist, or a sector that does not
exist, or try an operation that is impossible for the  drive  to
perform.   You will generally get these messages only if you are
trying to do disk I/O thru the "BIOS" directly.

There is a small bug in the Divide Integers CDOS call  (8AH)  in
2.17  -  the BC register will be altered.  No problem in 1.07 or
2.36 as far as I can tell.

All  versions  of  CDOS have the CP/M "BIOS" jump table in them,
but none of them use it.  That is, you can jump to  the  entries
in this table, but cannot modify the jump addresses in the table
and  expect it to work.  The first entry in the table, the "cold
start" jump, is a jump to itself, because CDOS never  uses  this
entry,  and  the  user  is not supposed to use it, either.  This
makes routines like FAST rather difficult  to  use  under  CDOS.
Some CPMUG programs set themselves below the operating system by
changing the address at location 6, but that will not work under
CDOS.   You  can use the CDOS call 97H to do the same thing, see
the manual for details.

All  versions of CDOS I have used  try  to initialize all  TUART
ports in the system.  That is, they will output to ports 12, 13,
22,  23,  52,  53,  62, ...  F2, and F3.  If you have some other
hardware at those addresses, good luck.  CDOS will also zero out
the Dazzler port at 0E every time it starts disk I/O.

CDOS 2.17 and up will disable all interrupts when doing disk I/O
and never  re-enable.   This  means  you  can't  use  the  timer
interrupts available in the TMS5501.

If anyone figures out what attributes S and U are, I would like
to know.  They can be set, reset, and listed,  but dont seem to
make any difference to the operating system. Could they be used
for Hard disk files?

       SCOPY enables you to search a strange disk on drive B
for ASCII files which may not be recoverable via a directory,
and copy them to an MCOS file on drive A.  This should permit
recovery of files which have been erased, and is also intended
for recovery of files from ISIS or GE disks.

ABSTRACTS FOR CP/M USERS' GROUP VOLUME 49
---------------------------------
--------

This volume consists mostly of Rational Fortran (RATFOR) files.
A letter and abstract by the author are presented here, as
well as several abstracts on various files by Chuck Weingart
of the Chicago Area Computer Hobbyist Exchange.  Please note
that some of the files on this disk rely on Cromemco CDOS
calls and are not compatible with "standard" CP/M systems.
Almost ALL FORTRAN and RATFOR files require a Z-80 processor.
See the abstracts by Chuck which point these out.
01/28/81                Jim Mills, CACHE SIG CP/M Chairman

------------------------------------------------------------

1 E. Lakeview Dr. #17
Cincinnati, OH 45237.
Oct 1, 1979

CP/M Users Group
--etc--
       I have enclosed a disk which has RATFOR.RAT adapted for
Fortran-80.  This gives essentially identical results to your
volume 24 RATFOR.COM but is somewhat faster and gives people
the chance to play with it.  Also the foreign .COM file
is hard to work with.  I had to write a special program
to copy it correctly on my system.  The disk also has some
useful sample programs.
                               Tim Prince
------------------------------------------------------------

    This disk contains mainly utility programs associated with
the Ratfor preprocessor and helps to bring some of the FORTRAN
77 functions into FORTRAN-80.  The Ratfor follows the Addison-
Wesley code closely but uses BYTE variables as appropriate.
Transliteration, which is done inefficiently in the A-W ver-
sion, is omitted.  The matrix inversion-determinant calculator
MINV and the address quicksort SORTI are given as examples of
the use of Ratfor.
    The INDEX subroutine is given both in FORTRAN (in F77LIB)
and Z80 versions.  As FORTRAN-80 does not permit the usage of
this function to be as in FORTRAN 77, the calling sequence is
somewhat arbitrary.
    LCAT, for concatenating .REL files, calls assembler
library functions which may not be available on some systems.
However, the .COM file may work anyway.  SCOPY calls the
READLB subroutine which will have to be rewritten for systems
which do not support the same extended CP/M calls.
                                       Tim Prince

------------------------------------------------------------

               REVIEWS BY CHUCK WEINGART

RATFOR is a preprocessor for FORTRAN source programs which
facilitates control constructs and text insertions, described
in "Software Tools" by Kernighan and Plauger (Addison-Wesley).
RATFOR source code is free form, with statements separated by ;
or [CR]. Ratfor statements include extensions to Fortran such
as IF ELSE, WHILE, REPEAT UNTIL, FOR, BREAK, NEXT, and INCLUDE.
An earlier version of RATFOR.COM is in CPMUG V.24. This new
version runs only on a Z80, is faster, has documentation
(RATFOR.DOC), source (RATFOR.RAT, RATFOR.FOR), and uses
RATCOMNS.RAT and TRNSLT.Z80. The resulting Fortran program is
then compiled with Microsoft FORTRAN-80 or Cromemco Fortran,
V3.21. This should run on any version of CP/M that supports the
Fortran and has a Z80. (reviewed by Chuck Weingart)

F77LIB.FOR is a file containing definitions of most of the new
intrinsic functions in FORTRAN 77.  These functions can be
employed by searching the file F77LIB.REL which will be created
by compiling F77LIB.FOR There is also an INCLUDE file
CONSTS.RAT which automatically defines some frequently used
constants. INDEX.Z80 is a subroutine given both in FORTRAN (in
F77LIB) and Z80 versions.  They are  written in Cromemco
Z80 Fortran and assembler language, but should be acceptable to
Microsoft versions. INDEXT.FOR is a test for INDEX. There is
some Fortran-77 documentation in F77.DOC and F77DEF.DOC.
(reviewed by Chuck Weingart)

LCAT.RAT are for concatenating Microsoft .REL files,  described
in LCAT.DOC. It calls CDOS Z80 assembler library functions
which are not be available on CP/M systems. This is written for
RATFOR, and uses ASMDEF.RAT and IOER.Z80, written in Cromemco
Z80 assembler, Microsoft will also work. There are two possible
problems with this routine, both related to the end-of-file.
First, some versions of Microsoft Fortran did not put an eof
(1A hex) at the end of the REL library.  Second, this program
stops if it hits 9E1A Hex, and there is a small chance of that
ocurring in the middle of a file, so don't destroy your old
library before checking the output of LCAT. (reviewed by Chuck
Weingart)

MINV.RAT and MINV.FOR contain a subroutine which inverts a
matrix and calculates the determinant. It does not have any
protection against the case where the equations are of wildly
different orders of magnitude. There is a test case included in
the file. These are included as tests for RATFOR, and the
Fortran version will run on Microsoft or Cromemco Fortran,
V3.21, any supported size and version of CP/M or CDOS,
respectively. The DOC file includes some, but not all, info
needed to use. Look at the test file included for more.
(reviewed by Chuck Weingart)

SORTI.RAT, SORTI.FOR are an address quicksort with a test
driver program. Unfortunately, although the FORTRAN appears
essentially identical to a successful program developed on a
large system, the Microsoft version doesn't work yet. They are
given as examples of the use of RATFOR. The SORTI.DOC file has
some information describing the use of this routine. The FOR
file will compile on Microsoft or Cromemco Fortran, V3.21, with
any supported CP/M or CDOS, respectively. (reviewed by Chuck
Weingart)

SCOPY.FOR does direct disk I/O, either disk to disk or disk to
console, described scantily in SCOPY.DOC. The FOR file should
be useable by any Microsoft or Cromemco Fortran, V3.21. It
calls the READLB.Z80 subroutine which will have to be rewritten
for systems which do not support the same CDOS calls. READLB is
written in Z80 assembler, Microsoft is acceptable. (reviewed by
Chuck Weingart)

------------------------------------------------------------

               NON-RATFOR PROGRAM REVIEWS

FILTER.ASM
FILTER.HEX
FILTER2.ASM
FILTER2.HEX
FILTER.ASM is source taken from an article by J. Warner in the
January, 1980 issue of Dr. Dobbs. It implements two essential
CDOS calls, 80H and 86H, to allow some Cromemco software to run
under CP/M*. This is commented Zilog Z80* source, and can be
assembled by Microsoft or CDOS* assemblers. The chicken-egg
problem is avoided by supplying the FILTER.HEX file to bring up
the CDOS assembler. As supplied, Cromemco Fortran IV and COBOL
will not work with it, more functions must be added. This
routine is installed by making it part of the memory image of a
program: using DDT, load FILTER.HEX, then load the Cromemco
program starting at 200H, and then save the combined programs.
When it gets control it boosts the function code filter into
place at the top of the TPA and then moves the original program
down to 100H and jumps to it.  (reviewed by Chuck Weingart)

FILTER2.ASM is the source for a modified version of FILTER.ASM,
primarily minor improvements and one bug fix. More comments
are also included from the original article in DDJ. The same
installation procedures and comments as FILTER apply to FILTER2,
including FILTER2.HEX. (FILTER2 is from the reviewer, Chuck
Weingart.)

Warning: CP/M and Cromemco CDOS directories are partially in-
compatable. The first byte of each FCB must be made zero (1.4
mode). These routines do not allow most Cromemco software to
run on non-Cromemco equipment. They are supplied here to let
the Cromemco owner run his/her legitimately obtained programs
under CP/M on Cromemco hardware. It does not appear that any
any software supplied with versions of CDOS after 2.17 are
compatible with CP/M (2.2) with FILTER.

4FDCBIOS.DOC
4FDCBIOS.Z80
4FDCBIOS.HEX
4FDCBOOT.Z80
4FDCBOOT.HEX
4FDCBIOS.Z80 and 4FDCBOOT.Z80 are the cbios and boot programs
for running CP/M 2.x on a Cromemco 4FDC disk controller board,
or a California Computer Systems 2422 disk controller, with a
3P + S or Cromemco TUART or similar console port at address 0.
Assembly options include memory size, one to four drives, supp-
ort for 5", 8" Shugart, and 8" Persci drives. Drivers for the
Cromemco TUART for paper tape and Cromemco printer board are
optionally included. The source is moderately commented, not
structured, in Cromemco Z80 assembler; Microsoft can also be
used. The source is supplied for two 8" Shugart drives and 64K,
and 4FDCBIOS.HEX and 4FDCBOOT.HEX are the assembled output
files. Since the 4FDC is designed for the Z80*, conversion to
8080 would be difficult. 4FDCBIOS.DOC contains detailed doc-
umentation. (abstract by Chuck Weingart)

CDOS.DOC
This is an accumulation of comments by Trevor Marshall and this
reviewer for users of Cromemco hardware and software. Nothing
can be guaranteed, but everything is true as far as can be
checked. (No attempt is made to help those who want to run the
cheap Cromemco programs on CP/M without buying any Cromemco
hardware). Must reading for CDOS users who participate in
CPMUG. (reviewed by Chuck Weingart)

CDOSCOPY.COM
CDOSCOPY.DOC
CDOSCOPY.HEX
CDOSCOPY.PRN
CDOSCOPY.Z80
CDOSCOPY is the COPY program, CPMUG 1.3, converted to Z80 and
extensively rewritten by Trevor Marshall to work on the Cromemco
CDOS operating system. The program supports 8" disks, single or
double sided, single or double density. It is possible to con-
vert the program for 5" disks, see the DOC file for details.
As supplied, would require a 48K system to copy double-density
disks, but I have not personally been able to verify operation
that way. The program runs correctly, but unfortunatly slower
than the COPY program because of CDOS internal operations. A
single-sided, single density disk copies in around 5 minutes.
Supplied are the source file (.Z80), the output (.HEX), the
print file (.PRN), and the executable program (.COM). This pro-
gram runs only on a CDOS system, with all Cromemco hardware as
required by that operating system, and assembles only with the
Cromemco Z80 assembler. (reviewed by Chuck Weingart)

ASTRO.FOR is a series of Fortran routines to do astronomical
calculations. (Borrowed from an old SMITHSONIAN ASTROPHYSICAL
OBSERVATORY computing note.) Of only specialized interest but
for the DECML, IDECML, and KDECML; These are routines for free
format reading from Fortran. They are used by reading the
characters into a LOGICAL*1 array of dimension of say 80, using
a format of say 80A1. Successive calls to DECML as a function
then give the real numbers on that line. The variable N is a
pointer, the current column of the input buffer. Can be com-
piled by CDOS or Microsoft Fortran IV, tho their usefulness can
only be judged by an astronomer. (Reviewed bu Chuck Weingart)

* Please note that Z80 is a trademark of Zilog, Inc. CP/M is
a trademark of Digital Research, and CDOS is a trademark of
Cromemco, Inc. Use of the term Z80 in this application is in
no way meant to imply that this program was written by Zilog,
(or Digital Research, or Cromemco).