- - - - - - - - > hier die deutsche Version
< - - - - - - - -
29.08.2010
1. What is ZSS?
'ZSS' is a 2 pass cross assembler running under DOS. Porting to
other platforms should be fairly easy however because no DOS-
specialities (like EMS for instance) are used. The syntax is very
closely modelled on the syntax described in HP's cross assembler/
linker for the 'HP 64000 Logic Development System'. However 'ZSS'
does not generate 'relocatable files' as described by HP, but an
object file in HP64000 absolute format is generated directly.
2. What does ZSS stand for?
'ZSS' is the abbreviation for '(Z)u(s)ammen(s)etzer'. Admittedly
this is the somewhat original German translation of 'Assembler'.
3. What else do I need?
Like with HP's assembler, 'ZSS' is designed to be able to support
more than one processor. The executable itself does not know any
processor specific information, however. For the 8085 and the Z180
this information is given in files 'mp8085b' and 'mpz180'. Other
processors are not supported presently. In the case where only the
keywords are different it should be possible to support other
microprocessors as well, without too much of a problem, by generating
other processor specific files of that kind.
4. What things do I need to pay attention to if I'd like to assemble
a program with 'ZSS' which already assembled successfully with
HP's assembler?
4.1. In contrast to former versions of 'ZSS' it does not matter
any more if the source files are given in DOS or UNIX text
format. Both variants are legal.
4.2. Right at the beginning of the program the assembler must be
taught the processor commands which it is to subsequently
process. This is best done in the first line with the
command 'PINCLUDE' like this: 'PINCLUDE <path>/mp8085b' or
'PINCLUDE <path>/mpz180'. The files 'mp8085b' or 'mpz180'
are (text) files which contain a 'processor macro' for
each processor command.
4.3. Not all pseudo ops described in the HP assembler manual are
supported. For instance 'REPT' is one of them. Unfortunately
it is here up to the programmer to do the coding manually
or by means of a macro. Further pseudo ops not implemented for
instance are 'ASC', 'BIN', 'DECIMAL', 'HEX', 'OCT' and others.
Should they be needed very urgently one would have to think
about it once more... Some of these can be simply replaced by
'DB' (with appropriate suffixes to the operands).
4.4. INCLUDE paths must be adjusted if necessary. Delimiting
slashes '/', as well as backslashes '\', for separating
directories may be used in pathnames even if you are
moving in genuine DOS hierarchies.
4.5. The expressions 'HIGH EXPR' and 'LOW EXPR' are not valid
in 'ZSS'. We consider 'HIGH' and 'LOW' to be names of
(predefined) functions and a function call looks like this:
'FUNCTIONNAME(EXPR)'. There must be no whitespace between
'FUNCTIONNAME' and 'EXPR' but the expression from wich the
function is to be taken must be enclosed in parenthesis and
must come immdediately after 'FUNCTIONNAME'. Unfortunately
HP's Z180 assembler (in contrast to HP's 8085 assembler) does
not get on well with this syntax any longer. To be able to
assemble a source with both assemblers without changing it
the functions 'HIGH' and 'LOW' must be avoided. As an
equivalent substitution the following may be used:
instead of 'HIGH EXPR': (0FF00H.AN.(EXPR)).SR.8
instead of 'LOW EXPR': 0FFH.AN.(EXPR)
Hint: If EXPR consists of more than one name, the parenthesis
are strongly recommended so that we don't encounter unpleasant
surprises with the priority in the evaluation of the expression.
4.6. When comparing two expressions with the comparison operators
'.GT.', '.GE.' etc. (in '.IF' comand in macros) there must be
no whitespace between the expressions and the operators.
So instead of for instance 'VAR1 .EQ. VAR2' it must be
'VAR1.EQ.VAR2'.
4.7. The source file must have the extension '.u'.
5. Besides the absolute object file does 'ZSS' generate further files
or any output for debugging?
Starting from a source file 'file.u' 'ZSS' normally generates a
temporary file 'file.t' in the first pass. Then in the second pass
a listfile 'file.l' and an object file 'file.o' is generated. If an
error occurs the assembly is stopped. Files which are partly
written are left in this state and closed. Moreover in the case of
an error some additional information is put out:
a. all 'local label tables' of any macro which is currently
expanded ('lltxxxx').
b. all the macro text read until the error occurred like it is
stored after a first internal processing step ('macros').
c. any name known at the moment the error occurred as well as
it's value and type ('namen').
6. Now how do I start my first assembly finally?
Simply with: ZSS<vers> [<filename>[.u] {[/f | /nc | /ns]}]
If calling 'ZSS' without parameters you are asked interactively for
the source file name. If calling 'ZSS' with one parameter this
parameter is interpreted as source file name. Up to three further
parameters may be entered. They mean:
/f (force assembly): the assembly is started in any case even if
files with extensions '.t', '.l' or '.o' would
be overwritten (which may exist from an earlier
assembler run).
/nc (no cross ref.): generation of a cross reference table is
suppressed.
/ns (no sym. tab.): generation of a symbol table is suppressed.
7. As long as 'ZSS' is in the beta phase I'd like to verify that
'ZSS' and HP's assembler really produce identical results. How
do I do this?
In the distribution there is a little tool ('look1') which can
'look at' the HP64000 absolute files. Indeed it is only a quite
simple program which puts out the contents of a HP64000 absolute
file as readable text. For each record this is: starting address,
number of data bytes and the data bytes proper. So after having
generated one such textfile for both HP64000 absolute files which
have to be compared you may carry out an ASCII comparison for these
two textfiles with the DOS command 'fc'.
Hints:
1. a direct comparison between both HP64000 absolute files does
not make sense. It is quite common that the actual programming
information is identical, but the HP64000 absolute files are
not, if they are compared byte by byte!
2. even with 'look1' you don't have a general tool with which
you can test if two HP64000 absolute files have identical
contents. Just imagine for instance to exchange/swap two records
or to split one record into two smaller ones. But because the
two object files are generated from the same sources and 'ZSS'
tries to adapt it's record length to that used with HP's assembler
there should nevertheless be no problems. In any case you can be
sure that the contents of two HP64000 absolute files are identical
if the textfiles generated with 'look1' are identical.
8. Which files make up the distribution?
DOS binaries:
bin\zss3.exe: assembler, version 3
bin\look1.exe: analysis of object files
documentation:
doc\changes: history of changes (in German only -:()
doc\liesmich: German 'readme'
doc\readme: this file
processor support:
promac\mp8085b: processor macros for 8085
promac\mpz180: processor macros for Z180
sources:
src\ctvu1.pas: unit of global constants, types and
variables for 'zss3'
src\zss3.pas: program modul of 'zss3'
src\zss3u1.pas: unit1 of 'zss3'
src\zss3u2.pas: unit2 of 'zss3'
src\look1.pas: analysis of object files
examples:
examples\all8085.u all 8085 opcodes
examples\allz180.u all Z180 opcodes
examples\macro_ex.u some macros
9. 'ZSS' may be a cool tool but since I don't understand a single
word of German all the nice dialogs and error messages don't mean
a thing to me!
The author does not have the slightest idea if there is at least
one single person in the whole world who might ever use 'ZSS'
(besides the author himself and some co-working employees who are
still nowadays damned to program such 'modern' processors like the
8085 in assembler). So until there is a demand that ZSS is made
'international' or 'English' respectively, no real efforts will be
made in this regard.
10. Who will actually accept my suggestions, requests, error reports or
even my demonstrations of satisfaction?
Rudolf Schubert
Kirchstraße 18a
D-82054 Sauerlach
Tel. 08104/908311
EMail: rudolf@muc.de
11. Are there any remarks else?
Yes: 'ZSS' is free software. There are no connections to the firm
of HP or it's employees. 'ZSS' was developped completely independently
and only by using several HP assembler manuals (and HP's assembler
running on a HP workstation). As usual with (free) software the author
may not be made responsable for the software to run as you might
expect or even correctly. As 'ZSS' is (still) in the beta phase any
user is urgently asked to handle the generated results with certain
care (and best verify them against the HP result with tool 'look1'
(so why do we need 'ZSS' at all?)).
Got it?
****** Trademark Acknowledgement ******
Any trademark mentioned is the property of it's respective holder.
****** Trademark Acknowledgement ******
Rudolf Schubert,
rudolf@muc.de ,
Wed Mar 20 08:35:31 CET 2024