VOLUME 46        10/24/80

DESCRIPTION: CP/M utilities.

NUMBER  SIZE    NAME            COMMENTS

        2K     CATALOG.46      CONTENTS OF CP/M VOL. 46
46.1    11K     ABSTRACT.046    Volume abstracts
46.2    11K     CPM-FDOS.ASM    CPM to ICOM FDOS II transfer
46.3    17K     CPMLABEL.BAS    Make CPMUG disk labels
46.4     0K     DELETED
46.5     5K     CPMLABEL.DOC    DOC on above
46.6     8K     CRCK3.ASM       Full 16 bit CRC a file
46.7     1K     CRCK3.COM       COM of above
46.8    16K     DU-8/12.ASM     Disk dump/patch, supports
                               many controllers.
46.9    29K     DU-V61.ASM      Later version of CPMUG 40.20,
                               single density only
46.10    2K     DU/MAP.DOC      Doc. on CP/M directory format
46.11    6K     FDOS-CPM.ASM    ICOM FDOS II to CP/M transfer
46.12   10K     MDIR8/17.ASM    Fancy directory list program,
46.13    1K     MDIR8/17.COM    CP/M 1.4 (or 2.X, all users)
46.14    6K     MLIST3.ASM      Type multiple files with lots
                               of disk buffering
46.15   20K     PLINK823.ASM    Send/Rcv to memory via modem
46.16   22K     PMMIBYE5.ASM    Remote console program,
46.17    3K     PMMIBYE5.DOC            update of 40.34
46.18    2K     PTSRCNVT.COM    Convert Proc. Tech to CP/M ASM
46.19    2K     PTSRCNVT.DOC    DOC on above
46.20    7K     RETDL.COM       Disassembler to TDL mnemonics,
                               modification of 42.18
46.21   13K     SURVEY3.ASM     Maps system memory/port usage
                               as well as disk stat.
46.22    1K     SURVEY3.COM     COM of above
46.23   20K     XD-7/4.ASM      Fancy directory list program
46.24    2K     XD-7/4.COM      COM of above

               U-G-FORM.LIB    CPMUG submission form
This is file ABSTRACT.046, and contains abstracts on:

       CPM-FDOS.ASM
       CPMLABEL.BAS + DOC
       CRCK3.ASM + COM
       DU-8/12.ASM
       DU-V61.ASM
       DU/MAP.DOC
       FDOS-CPM.ASM
       MDIR8/17.ASM + COM
       MLIST3.ASM
       PLINK823.ASM
       PMMIBYE5.ASM
       PTSRCNVT.ASM + COM + DOC
       REDTL.COM
       SURVEY3.ASM + COM
       XD-7/4.ASM + COM
All abstracts by Ward Christensen unless otherwise noted.
                   10/24/80
               ----------------
====> CPM-FDOS.ASM is P.P.H. Lee's (Royal Melbourne Institute
of Technology, Applied Physics Department, 124 Latrobe Street,
Melbourne, Victoria 3000, Australia) program to transfer a CP/M
file in drive a: to an ICOM FDOS II disk on drive b:.
   The program is hardware/software dependent, in that it
makes references to the ICOM routines in the 0C000H block
of memory.  FDOS-CPM.ASM handles the opposite direction
transfer
   The programs are well commented.
               ----------------
====> CPMLABEL.BAS is Bill Bolton's (P.O. Box 80,
Newport Beach, N.S.W., 2106, AUSTRALIA) program to print disk
labels individually or in batches for CP/M User's Group Disks.
   It is slightly hardware dependent, using a CRT that can
clear screen, (but doesn't need random cursor positioning).
Has well identified hardware dependent routine for reverse
video display of error messages, presently set up to suit
ADM-31 or Soroc terminal.  Uses 80 x 24 display area but only
needs minor message reformatting to suit 64 x 16 display.
Batch label printing assumes continuous form fed labels,
individual printing can be done on any label.
   CPMLABEL.BAS is written in MICROSOFT BASIC version 5.1.
It is suitable for the compiler.
   Further documentation is available in CPMLABEL.DOC.
   This program was supplied courtesy of "80AT Australia".
(I believe stands for "80 Application Transfer").
   Abstract by Ward Christensen (very easy to do thanks to
a very complete CP/MUG submission form by Bill) (hint hint)
               ----------------
====> CRCK3.ASM is K.B.Petersen's (W8SDZ) file checksum
routine.  It is a significant improvement over earlier
checksum-only programs, in that it does a full 16 bit CRC,
rather than just an 8 bit sum.  Also, it handles ambiguous
file references.
   Use the program to keep a list of the CRC of various
of your programs and files, then use this later if you
question that a file has changed.  It is particularly useful
for comparing a file you have, with a file someone else has,
since you can both just run CRCK against them, then compare
checksums.  Chances of two checksums being the same, but the
files being different, is "remote".
   The program includes the option of being assembled
for 4200H base CP/M systems (Heath, R.S.).
   The program drops in, and has no hardware or software
dependencies.
               ----------------
====> DU-8/12.ASM is an early version of Ward Christensen's DU
program (CP/M U.G. volume 40), and as such lacks a few of the
features of the volume 40 version.  It was modified by Keith
Petersen W8SDZ, Bruce Ratoff ACGNJ, Jeff Hammersley, and
Charles Strom.
   It would be useful to anyone wanting to work directly
with a CP/M disk, such as to patch it.
   The program is used to dump and patch a CP/M disk directly.
   Further documentation may be found in the .ASM file.
   This version supports single density CP/M, and via
conditional assembly switches, the following:
*       Micropolis
*       Digital Microsystems double density FDC3 controller
*       Northstar double density
*       Thinker toys DJ2D controller and 1024 byte sectors
*       Micromation single-sided double density.
   This program does direct I/O for the disk thru BIOS. The
program is hardware dependent, and may require modification for
your system if it is not one of the above.
               ----------------
====> DU-V61.ASM by Ward Christensen is his latest version
(6.1) of the program distributed as CPMUG file 40.20.  Changes:
*       Now supports Heath 4200 base CP/M
*       L command (login) rewritten to NOT actually do
       CP/M login
*       Track and sector, both as keyed in, and as displayed,
       are now decimal, not hex.
*       Q (Quiet option) commmand added - causes functions to
       not display, so they run faster.
*       P command fixed to send linefeeds to the printer.
   See previous abstract for further comments on this program.
               ----------------
====> DU/MAP.DOC is a brief explanation of the CP/M directory
format as produced by DU.COM.  The origin of this document
is unknown.  I replaced the "XXXX..." type example it used,
with a real data example.
               ----------------
====> FDOS-CPM.ASM is P.P.H. Lee's program to transfer an
ICOM FDOS II file to a CP/M file.
   See CPM-FDOS.ASM for abstract.
               ----------------
====> MDIR8/17.ASM is Jeff Hammersley's program to produce a
sorted directory listing, including all "users", for CP/M 2.x.
   It runs under CP/M 1.4 or 2.x.  Note you MUST supply "*.*"
to see all files, i.e. you can't just type: mdir
   The software drops in.  It has no software dependencies.
               ----------------
====> MLIST3.ASM by Keith Petersen is a program to type a CP/M
file, by highly buffering it in memory.  This lessens disk
activity.  Also, for remote access CP/M systems, it doesn't
stop "with the first line glitch" like CP/M's TYPE command
would.  It does respond to ^S and ^C, however.
   Unlike TYPE, it is able to process ambiguous files (such as
*.ASM).
   There are no hardware dependencies for this program. How-
ever, it does require MAC and the SEQIO macro library.
               ----------------
====> PLINK823.ASM is L.E. Hughes's program, with the
following "mods":
       L.E. Hughes     EDCAM   JULY, 1977 (Original)
       This version by Keith Petersen, W8SDZ.
       Heath equates added by Tom Jorgenson
       TRS-80 MODEL 1 mods by Steve Vinokuroff, Vanc CBBS
       TRS-80 mods by Dennis Breckenridge, Burnaby CBBS
This program can send or receive files via modem to such
systems as the SOURCE, MICRONET, CBBS, etc.  No protocol used.
   Your computer can act as a computer terminal, with optional
capturing of data in memory, and the ability to write it out
to disk.  A file on disk may also be sent to the remote system,
with no protocol.
   The program operates with any of the following modems:
PMMI;  ANY serial I/O board (TUART included);  TRS-80 model 1;
TRS-80 model 2; HEATH H8 with 8251 UART at port 330Q;
               ----------------
====> PMMIBYE5.ASM is a remote console program by Dave Jaffe,
rewritten for PMMI modem by Ward Christensen, and highly
modified since CPMUG volume 40 version, by:
       Keith Petersen, W8SDZ
       Dave Hardy
       Bruce Levison
   This program allows remote access into CP/M as the console
operator, to run any CP/M program.  This version of the program
may work for people who had trouble with it before, due to
added register saves, and larger stack space.
   Further documentation may be found in PMMIBYE5.DOC
   The program requires a PMMI modem, and includes  options
for Morrow's Discus 2D board  with memory mapped I/O. Optional-
ly, the # of callers may be output to port FF, the front
panel of an IMSAI.
   The program requires as much as 1070 bytes of memory
ABOVE your CP/M system.  Thus may require generating a
smaller CP/M to allow it to fit.  The program must be
assembled for your particular configuration.
               ----------------
====> PTSRCNVT.COM is Tom DiGate's program to convert assembler
programs from Processor Technology Package I or ALS-8 format,
to CP/M format.
   The P.T. format file is loaded into memory (by whatever
means you have) at 100H, and saved with CP/M SAVE command.
PTSRCNVT then converts the file to CP/M format, inserting
tabs, and comment semicolons, and deleting the line numbers.
   Only a .COM file and .DOC file are distributed.
               ----------------
====> RETDL.COM is Ward Christensen's RESOURCE.COM from User's
Group Volume 42, modified (by person unknown) to disassemble
Z80(*) code into TDL mnemonics.  See RESOURCE.DOC on volume 42,
for operational details.
   I found this version to not be totally debugged.  Some of
the more obscure Z80(*) op codes don't work.  Some examples:
       If memory contains:     DB      0FDH,0FEH,0FFH
       it is mis-disassembled as:      .BYTE   0FEH
       when it should be               .BYTE   0FDH
                                       CPI     0FFH
   Also, opcodes SPIX (DD F9) and SPIY (FD F9) improperly
increment the disassembly PC by 3 bytes, not 2, thus the
assembly "loses" a byte for each SPIX or SPIY.
   I recommend that you reassemble your disassembly and
compare it to the original .COM file to catch such errors.
Unfortunately, it is not known who the author of this modifi-
cation is.  Hopefully they will see this and make appropriate
changes.This routine came to the Users Group as various names -
REZOURCE, or REZ80.  Since there will likely some day be
versions for both TDL and Zilog, I thought it appropriate to
rename this .COM file RETDL, and reserve REZOURCE for the
Zilog-format one (which doesn't yet exist; or at least if
someone has it, they have not shared it; several people
are working on such a version).

* Please note that Z80 is a trademark of Zilog, Inc.
Use of the term Z80 in this application is in no way
meant to infer that this is a program was written by Zilog.
               ----------------
====> SURVEY3.ASM is Michael Friese's progam to, as named,
"survey" your system.  It reports disk, port, and memory
utilization.  Specifically, it:
*       Lists Kbytes used and remaining plus number of files
       on all logged disks (up to 8)
*       Prints Memory map and synopsis of all machine memory
*       Lists all active I/O Ports
*       Uses disk allocation block for all disk calculations
   Since is tests all ports on the system, be careful it
doesn't hang up or cause errors.  The .ASM file included
conditional assembly instructions for Tarbell, and IMS400
disk controllers, to prevent hanging up.
   SURVEY3 requires Digital Research's MAC to assemble.
The program "drops in" and need be changed only if you have
ports which might hang up.  It is well commented.
               ----------------
====> XD-7/4.ASM is S.J.Singer's extended sorted directory
list program, as modified by:   H.R.Moran Jr, R.M.Glueck,
K.B.Petersen W8SDZ, and John C. Rossmann.
   It produces a sorted directory listing, across the
page, including file sizes.
   It has no hardware or software dependencies.  Included
is the ability to be assembled for 4200H base CP/M systems
(Heath, R.S.).
   The code is well commented and quite easy to modify.  It
would have to be modified for short (e.g. VDM) screens.
               ----------------
       Documentation for PTSRCNVT.COM
       Written by: Tom Digate
       Version 1.0 - Nov., 1979

   This program is used to convert files that were used
with Processor Technology Software Package 1 and ALS8
assemblers to a format that is CP/M assembler compatible.
This includes adding tabs and semicolons in place of spaces
and asterisks. The program reads the PT file from disk on
a byte by byte basis and checks for label,opcode,operand,
and comment fields. If a character replacement or deletion
is required, it is performed and then the character is
written to a new output file.
   The PT file can be saved on disk by first loading it
into memory starting at location 100H and then saving
it using the CP/M save command.

   The command format is as follows:
       PTSRCNVT ifilename ofilename <cr>
The program checks for proper parameters and will abort
if any are missing or the input file does not exist.
The old ofilename will be erased and then a new file
is created. This is done so that you do not have
to erase it manually.  If a disk error occurs, a message
will be printed and the program will abort.

       This file was assembled using a MACRO library from
a previous Users Group Volume and the Digital Research
MACro Assembler. The COM file is a ready-to-run version
of this file in case you do not have the above software tools.
       This program will not handle files that do not have
line numbers or lines that have only a line number and nothing
else. If a label is found, an opcode must be present.
Opcodes that have no operand and use a period for formatting
purposes will still have the period in the
new file. This can be edited out by replacing all occurrences
of a <tab>. with a <tab><tab>
There are no other known peculiarities of this program.
Hope that you enjoy using this program. It has saved me
hours in upgrading my cassette system to CP/M. I hope that it
can do the same for you.
INTERPRETATION OF DIRECTORY DATA PRESENTED BY THE DU PROGRAM


The following explains the format of a CP/M directory entry
as shown by DU, using either the "F" (find file) command,
or just doing "D" (dump) of the directory sectors, which
are located in groups 0 and 1 on a single density disk.
               ----------------
Sample result of "FSID.COM" command:

40  00534944 20202020  20434F4D 0000003A  *.SID     COM...:*
50  33343536 3738393A  00000000 00000000  *3456789:........*

First line -

40  00534944 20202020  20434F4D 0000003A  *.SID     COM...:*
||  |||                      |  ||    ||    |         |
||  ||^----hex file name-----^  ||    ||    ^file name^
||  ||                          ||    ||     in ASCII
||  ||                   extent-^^    ||
||  ||                                ||
||  ||           file size in sectors-^^
||  ||
||  ^^-00 = file active
||     E5 = file erased
^^-displacement of line in directory sector

Second line -

50  33343536 3738393A  00000000 00000000  *3456789:........*
   |                                  |
   |                                  |
   ^---allocation group numbers-------^

      80AT (Series 80 Applications Transfer - Australia)

             CP/M User's Group Disk Lable Program

                        By Bill Bolton

    This  program is written in Microsoft BASIC release 5.1 and
will run under both the compiler and interpreter.  As I intended
the program to be complied,  generous use has been made of  long
lables  which impose no speed penalty with the compiled version.
There is a small speed penalty as a result when running with the
interpreter but it is minimal.

    There  is  extensive  operator prompting for  all  possible
program   options  with  defaults  set  for   maximum   operator
convenience.  I suggest that you run the program and see what it
does.

    As presented the program is ready to run on a Lear  Seigler
ADM 31 or a SOROC terminal. The only hardware dependant features
are a clear screen routine (you can simulate it with line feeds)
and  a reverse video routine (only used to highlight heading and
error messages).  Both routines are located in the block  labled
"VIDEO  ATTRIBUTES".  The  program assumes an 80 character  wide
display,  if you have a narrow display you will probably have to
change  the  format  of some of  the  INPUT  statement  prompts,
otherwise the thing should display OK.

    The program will generate lables for CP/M User's Group disk
volum
es  1 to 42 (as of June 1980) including 23B.  Volume 39 has
been withdrawn and no lable can be generated for it,  an warning
message is displayed if volume 39 is selected.  Provsion is made
for printing a lable for a "Total Catalogue" disk.

    A typical lable appears as follows:

   ********************************************************
   *                                                      *
   *    CP/M User's Group Disk, Volume : 1                *
   *                                                      *
   *    Various CP/M Utilities                            *
   *                                                      *
   *    From the 80AT Public Domain Software Library      *
   *                                                      *
   *    IBM 3740 Single Density, 128 Byte Sectors         *
   *                                                      *
   ********************************************************


    The  Density/Bytes per Sector line selection routine is set
up for all the formats that 80AT has occasion to use. It is easy
to  add or delete selections,  you simply need to add/delete the
selection string and adjust the DIM of SUB$.
�     The  batch  print mode assumes that you are using form  fed
lables.  My  form fed lables (from Avery) are spaced  exactly  9
lines  apart from the top of one to the top of the next,  so the
program  assumes this spacing.  To change it just  insert/delete
LPRINT statements in the "PRINT THE LABLE" block as  appropriate
for your form fed lables.

    In the individual lable mode you should be able to use just
about any type of lable.

    When  further  volumes  are  added  to  the  User's   Group
collection  it will be easy to adjust the program.  Just add the
new  volume numbers and descriptions into the volume check  area
and  change  the  variable MAX% to the  number  of  the  highest
volume.  The  volume numbers are input as strings so it would be
possible  to add other "extra" volumes such as I have done  with
"CAT".  If  you  want to do this then just add  the  new  volume
"string"  to  the  volume  check area  and  add  another  option
question to the "ALL" routine.

    The program will take up to 200 entries in one batch,  this
seemed  a  reasonable number to me as I rarely do more than  two
complete  sets of lables in one batch.  If you really must  have
more lables in a batch then change the DIM ENTRY$(200) statement
at  the front of the program to whatever number of  entries  you
want.   BE  WARNED!  If you choose to compile it and exceed  the
number of entries dimensioned for,  unpredicatable  (but  nasty)
things  will happen  as  the variable   storage  is  below   the
program   in   the  TPA.    The interpreter  will   detect   the
problem and  give  you  an  error message.

    Note  - Programs compiled with the Microsoft Basic Compiler
cannot be distributed without the payment of a royalty to Micro-
soft for the use of their runtime library.

    Copyright  (C)  of this program is retained by  W.  Bolton.
Non-commercial  use is permitted as an aid for the  disemination
of  knowledge/information  but commercial  exploitation  is  not
permitted  and  "I'll come round and rip your bloody  arms  off"
(ancient Australian curse) if I catch you !
           PMMIBYE5.DOC    (as of 7/20/80)

   The PMMIBYE5.ASM program is out for distribution,
but it has not been thoroughly tested in all of the
possible modes of operation.
   (Please note that version 5.4 is substantially longer
than previous PMMIBYE versions.  Because of the great
number of conditional switches, the program could require
as many as 1060 bytes of RAM, or it could be smaller than
the 900 bytes used by the original PMMIBYE.  It all
depends on the way you set it up.)

  Basically, several new conditional assembly routines
have been added to allow user selection at time of
assembly of the following:
    1. Password access
    2. User log (counts number of system callers)
    3. Memory-mapped console I/O
  Also added to V5.4:
    1. 710 Baud option for PMMI modem
    2. Modifications to AUTO-ANSWER routines
    3. "/R" option to allow reset of user log counters

  Password access was made conditional to allow
use with systems that offer unrestricted access.
  The user log was added to allow the system operators
to keep track of the number of people who called the
system.  In addition, it can also count the number of
unsuccessful log-ons (i.e. didn't know password) and
the number of voice calls, and conditionally
display both numbers on the system console when the
program is exited with a control-C from the system
console.  The counters can be initialized with
the "/R" option to all zeroes, or preset by using
DDT, or SID.  The number of successful log-ons is also
conditionally output to port 255 (0FFH) for display on the
computer's front panel.
  The memory-mapped I/O conditionals have been added
to allow use of the serial I/O port on the Morrow's 2D
controller board as the system console; however, the
routines can be used with any memory-mapped system.
  The 710 Baud option was added for "short-haul"
callers, and because operation at 710 Baud with
the PMMI modem is "iffy" at best, it will probably
be of very little use.
  The AUTO-ANSWER routines were modified to allow
more dependable ringback operation.  Unfortuneately,
the ringing signal at the caller's end of the phone line
does not always correspond exactly with the ringing
signal at the system's end.  Although a system-end ring
does occur sometime during the caller's ring cycle (ring-
no ring), it is possible for the system to receive no
or 2 rings in the time that the caller thinks just
one ring has occurred (The DIAL program is notorious for
this).  The solution chosen for this problem was to
check for one or two rings before call-back.  This
would allow for the "phase" difference of the caller-
system ring signals.  This solution also means that
the phone must ring at least three times before the
system will assume that the call is voice, and is not
to be answered.  The advantage of this arrangement is
that it is virtually impossible for the computer to
"miss" a call that is intended for it.