VOLUME 16

ASSEMBLERS, OTHER UTILITIES AND FOCAL

NUMBER  SIZE    NAME            COMMENTS

               CATALOG.16      CONTENTS OF CP/M GROUP VOL 16
               VOLUME16.DOC    COMMENTS ON CERTAIN PROGRAMS
16.1    9K      ASMX.COM        ASSEMBLER WHICH RECOGNIZES Z-80 OPS
                               SEE VOL.DOC  [CAREFUL: WITH CORRECT
                               SYNTAX (ASMX FILENAME.AAA) THIS DOES
                               WORK.  WITH FAULTY SYNTAX THE PROGRAM
                               TAKES REVENGE ON THE DISK DIRECTORY.]
                               RUNS OK ON 8080
16.2    12K     COPYDSK.ASM     DISK COPY PROGRAM. SEE VOL.DOC
16.3    13K     COPYDSK.MAC     AS 16.2 FOR TDL ASSEMBLER
16.4    7K      CPMUTIL.ASM     CP/M SUBROUTINES USEFUL GENARALLY AND
                               EMPLOYED AS PART OF Z80ASM 16.17
16.5    3K      EDIT.COM        INTEL-LIKE EDITOR. DOES L F B AND -B
                               MUCH FASTER THAN ED.COM. SEE VOL.DOC
16.6    8K      EDUCATOR.ASM    8080 INSTRUCTION SET TUTOR FROM BYTE
                               OF JULY 1976
16.7    57K     FOCAL.ASM       FOCAL LANGUAGE INTERPRETER. SEE VOL.DOC
16.8    8K      MACASM.COM      MACRO ASSEMBLER. SEE VOL.DOC
16.9    2K      MOVDOWN.ASM     PROGRAM TO LOAD FILE WHICH OPERATES BELOW
                               100H
16.10   2K      SEEK.ASM        SET DISK TRACK FROM FRONT PANEL DURING
                               ALIGNMENT
16.11   9K      SPAT1.ASM       RE-WRITE OF 1.29 TO GENERALIZE CONSOLE FROM
                               ORIGINAL VDM DEPENDANCY
16.12   2K      TASMIO.DOC      DOC FOR TASMIO PATCH TO PUT TDL TAPE ASSEMBLER
                               UP ON CP/M
16.13   3K      TASMIO.HEX      SEE TASMIO.DOC
16.14   18K     TASMIO.MAC      SEE TASMIO.DOC
16.15   3K      TEST1A.ASM      SUCCESSFUL TEST FOR Z80ASM 16.17
16.16   1K      TEST2.ASM       UNSUCCESSFUL TEST FOR Z80ASM 16.17
16.17   9K      Z80ASM.COM      ZILOG MNEMONIC ASSEMBLER. RUNS ON 8080. SEE
                               Z80DOC.DOC 16.18
16.18   4K      Z80DOC.DOC      DOC FOR 16.17
16.19   28K     Z80MAIN.ASM     SEE 16.17
16.20   4K      Z80OPCDS.ASM    SEE 16.17
16.21   11K     Z80SUBS.ASM     SEE 16.17



       Z80DOC.DOC explains the Z80 Assembler routines which
follow.  Z80MAIN.ASM   Z80OPCDS.ASM   Z80SUBS.ASM   and the
assembled program Z80ASM.COM.  TEST1A.ASM and TEST2.ASM are short
test programs for the assembler.  This program was written and
donated to the user group by Mike Lehman for unrestricted
distrubution in the hobbyist community.
       COPYDSK.MAC is a disk copy routine written by Frank
Maclachlan in the TDL assembler format.  It is very different
from the version in Vol. 1 and performs a read and write
verify.  This routine was also rewritten for the CPM assembler
by Dick Mason and is included as COPYDSK.ASM.
       TASMIO.DOC explains how to patch the TDL Assembler to
operate with the CP/M system.  It includes TASMIO.HEX and
TASMIO.MAC.  The last one would be useful for any future
modifications.  This routine was written and donated by Frank
Maclachlan.
       SEEK.ASM is a simple utility routine which allows you
to select a desired track on a drive during alignment by use
of the front panel sense switches.
      SPAT1.ASM is a modified version of SPAT.ASM from Vol. 1
which is good for any terminal, not just the VDM.  Control
characters have been removed from the ASCII print and periods
inserted in their places.  This modification was made by Dick
Mason.
       MOVDOWN.ASM is a program used in conjunction with
those that do not start a location 100.  It loads them at
location 100 and then automaticlly moves them to 0 or some
other address and starts.  This was written by Dick Mason.
       CPMUTIL.ASM is a different set of utilities for the
various I/O routines.  This was also donated by Mike
Lehman.

MACASM -- THIS IS A MACRO ASSEMBLER WITH CHARACTERISTICS SIMILAR
       TO THE INTEL ASSEMBLER.  WHEN USED UNDER CP/M, IT HAS
       THE FOLLOWING ADDITIONAL FEATURE:  ANOTHER OPTION FOR THE
       LIST FILE IS THE LETTER 'P' WHICH SENDS THE LISTING TO THE
       LIST DEVICE DIRECTLY; E.G., ONE MIGHT TYPE

               MACASM LLLBASIC.AZP

       THIS WILL SEND THE LISTING DIRECTLY TO THE LIST DEVICE.

       THERE IS AT LEAST ONE KNOWN BUG (THE FIX IS UNKNOWN, HOWEVER)
       AND THAT IS THAT SOMETIMES WITH NESTED MACROS, LOCATIONS 5,6,
       AND 7 ARE CLOBBERED; THIS OF COURSE, KILLS COMMUNICATION
       WITH CP/M AND ALL IS DEAD.

ASMX -- THIS IS ANOTHER ASSEMBLER, WITHOUT MACROS, BUT WITH CROSS-
       REFERENCE MAP.  IT ALSO RECOGNIZES MNEMONICS FOR THE Z80.
       THE MNEMONICS IT RECOGNIZES ARE SIMILAR TO THOSE PROMULGATED
       BY TDL WITH THE EXCEPTION OF INDEX REGISTER OPERATIONS AND
       THE INSTRUCTION DSBB (TDL USES DSBC).  ASSEMBLE THE FILE
       Z80-OPS.ASM TO SEE THE INDEX REGISTER OP CODE SYNTAX.

       ---- CHARACTERISTICS OF THIS ASSEMBLER ---

       THE ASSEMBLER DOES NOT RECOGNIZE '!'

       THE DISK BUFFERS ARE ONLY 128 BYTES, SO THERE MAY BE MORE DISK
       ACTIVITY THAN WITH ASM.COM

       LABELS MUST BEGIN IN COLUMN ONE, AND SIX CHARACTERS OF THE
       LABEL ARE USED.

       INSTRUCTIONS MAY NOT BEGIN IN COLUMN ONE

       THE ASSEMBLER DOES NOT MIND LABELS THAT ARE THE SAME AS OP-
       CODES,E.G. JMP,ADD,SUB,END, ETC.

       LABELS NEED NOT BE FOLLOWED BY A COLON.

       CERTAIN ADDITIONAL PSEUDO-OPS ARE RECOGNIZED:

       LIST    -L      ;TURNS OFF THE LISTING

       LIST    L       ;TURNS THE LISTING BACK ON

       TP              ;TABULATE PAGE- MOVES THE PC TO THE NEXT PAGE

       TM      VAL     ;IF <VAL> BYTES REMAIN IN THE CURRENT PAGE,
                       ;THEN NOTHING HAPPENS; OTHERWISE MOVE THE PC
                       ;TO THE NEXT PAGE (IN OTHER WORDS, MAKE SURE
                       ;THAT AT LEAST <VAL> BYTES REMAIN IN THE CURRENT
                       ;PAGE)

       BASE    8       ;CAUSES LISTING IN OCTAL

       BASE    16      ;CAUSES LISTING IN HEX

EDIT -- THIS IS AN EDITOR SIMILAR TO CP/M'S ED.COM, BUT WITH COMMAND
       SYNTAX LIKE INTEL'S EDITOR FOR THOSE OF YOU WHO ARE USED TO
       THAT.  THE ESCAPE CHAR IS USED AS A DELIMITER IN COMMAND LINES
       (IT IS ECHOED AS A $), AND A DOUBLE ESCAPE IS USED TO TERMINATE
       A COMMAND LINE. THIS EDITOR IS MUCH FASTER THAN EITHER THE INTEL
       EDITOR OR ED.COM; UNLIKE THE INTEL EDITOR, THIS ONE DOES HAVE
       THE 'N' COMMAND AND THE 'Q' COMMAND; IT DOES NOT HAVE THE 'R'
       COMMAND, HOWEVER.  ANOTHER DIFFERENCE WITH RESPECT TO THE
       INTEL EDITOR IS THAT THE 'A' COMMAND ONLY APPENDS ONE LINE,
       BUT YOU CAN SAY 9999A TO APPEND MUCH.  THE EDITOR CREATES
       A THIRD FILE WITH TYPE $$$ WHICH IS RENAMED WHEN THE EDIT JOB
       IS COMPLETE.  THIS MEANS THAT IF YOU ARE EDITING A FILE WHICH
       OCCUPIES OVER HALF OF THE DISK, YOU MUST ERASE ANY PRE-EXISTING
       BACK-UP FILE SO THAT THERE WILL BE ROOM FOR THE TEMPORARY.  IF
       YOU DON'T, YOU WILL GET A DISK FULL ERROR.  IN FIND OR
       SUBSTITUTE COMMANDS, THE CHARACTER '|' WILL MATCH ANY CHARACTER.
       IF YOU WANT TO CHANGE THIS CHARACTER, LOOK FOR THE SEQUENCE
       FE, 7C  IN THE CODE AND CHANGE THE 7C TO THE CHARACTER YOU
       PREFER.

       [A.R.G SUMMARY OF COMMANDS COMPARED WITH ED.COM

       NOTE () ARE TO INDICATE A CONTROL CHARACTER, <> USED LITERALLY

       ED.COM          EDITOR.COM

       B               B
       -B              Z
       E               E
       Q               Q
       C               C
       T               T
       L               L
       K               K
       D               D
       I               I
       A               A
       W               W
       N               N
       #               65536
       M               <>              SEE EXTENDED COMMAND BELOW
       P               NONE
       H               NONE
       O               NONE
       R               NONE
       (SUB)           (ESC)       (AS TERMINATOR IN SEARCHES)
       (CR)            (ESC) (ESC) (TO EXECUTE COMMANDS)
       (CR)            NONE        (TO CAUSE LT SEQUENCE)
       ANY CHARACTER   (NUL)       (TO INTERUPT PRINTING)


       EXTENDED COMMAND:

       2MF.ASM(SUB)0LK(CR)  2<F.ASM(ESC)0LK>(ESC)(ESC)


       CONTROL CHARACTERS REFERENCED ABOVE:

       (CR)    :=      0DH     ^M      RETURN
       (SUB)   :=      1AH     ^Z
       (ESC)   :=      1BH     ^[      ESCAPE
       (NUL)   :=      00H     ^@      BREAK           ]



FOCAL.ASM -- THIS IS THE FOCAL THAT PROCESSOR TECHNOLOGY WAS
       DISTRIBUTING IN 1976 ON BLUE XEROX-PROOF PAPER.  IT HAS SOME
       KNOWN BUGS: EXPONENTIATION DOESN'T WORK AND IT HAS NO OPERATOR
       PRECEDENCE.  I HAVE ADDED A FEW THINGS:  I/O FOR CP/M (JUST
       CONSOLE I/O) AND A ROUTINE TO LIST THE ERROR MESSAGES.  LOAD
       FOCAL WITH DDT AND JUMP TO 103H; A LIST OF THE ERROR MESSAGES
       WILL BE PRINTED.  A NOTE OF INTEREST-THE FLOATING POINT PACKAGE
       IN FOCAL IS FROM THE INTEL USERS LIBRARY AND WAS ORIGINALLY
       WRITTEN FOR THE 8008 CPU.
       [A.R.G. I understand that the exponentiation error only
       occurs (symptom x^y results in y^y) with the 100H origin.
       May give a clue to finding page-dependant routine]

EDUCATOR.ASM -- THIS IS FROM BYTE MAGAZINE OF JULY 1976