- - - - - - - - > hier die deutsche Version < - - - - - - - -

  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

      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
      /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'.

       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

        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

        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\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 ******

Back to 'ZSS'

Back to Rudolf's Homepage

Rudolf Schubert, rudolf@muc.de , Sun Aug 29 18:39:25 CEST 2010