- - - - - - - - > english version here < - - - - - - - -
                                                                29.08.2010


  1.  Was ist ZSS?

      'ZSS' ist ein unter DOS laufender 2 Pass (Cross-) Assembler. Eine
      Portierung auf andere Plattformen sollte jedoch ziemlich einfach 
      sein, da keine DOS-Spezialitäten (wie z.B. EMS) verwendet werden.
      Die Syntax ist dabei sehr stark angelehnt an die bei HP beschriebene
      Syntax des Cross Assembler/Linkers für das 'HP 64000 Logic Development
      System'. 'ZSS' erzeugt jedoch keine 'relocatable files', wie
      bei HP beschrieben, sondern es wird direkt ein Objectfile im
      HP64000-absolute Format generiert.


  2.  Was heißt ZSS?

      'ZSS' ist die Abkürzung für (Z)u(s)ammen(s)etzer. Zugegebenermaßen
      ist dies die etwas eigenwillige deutsche Übersetzung von 'Assembler'.


  3.  Was brauche ich sonst noch?

      Wie bei HP auch, ist 'ZSS' darauf ausgelegt, mehr als nur einen
      Prozessor unterstützen zu können. Das 'executable' alleine kennt aber
      noch keine prozessorspezifische Information. Für den 8085 und den Z180
      liegt diese Information in den Dateien 'mp8085b' bzw. 'mpz180' vor.
      Andere Prozessoren werden im Moment nicht unterstützt. Für den Fall,
      daß lediglich die keywords unterschiedlich sind, sollte es aber
      ohne zu große Probleme möglich sein, durch Erstellen weiterer sol-
      cher prozessorspezifischer Files auch andere Prozessoren unter-
      stützen zu können.


  4.  Was muß ich alles beachten, wenn ich ein mit dem HP-Assembler erfolg-
      reich assembliertes Programm mit 'ZSS' assemblieren möchte?

      4.1.  Im Gegensatz zu früheren Versionen von 'ZSS' kommt es nun nicht
            mehr darauf an, ob die Quelltexte im DOS- oder UNIX-Textfomat
            vorliegen. Beide Varianten sind erlaubt.

      4.2.  Ganz zu Beginn des Programms müssen dem Assembler die Prozessor-
            befehle beigebracht werden, die er anschließend bearbeiten soll.
            Dies geschieht am besten in der ersten Zeile mit dem Befehl
            'PINCLUDE', etwa so: 'PINCLUDE <Pfad>/mp8085b' oder
            'PINCLUDE <Pfad>/mpz180'. Die Files 'mp8085b' oder 'mpz180'
            sind (Text-)Files, welche für jeden Prozessorbefehl ein
            sogenanntes 'Prozessormacro' enthalten.

      4.3.  Nicht alle im HP-Assemblermanual beschriebenen Pseudobefehle
            werden unterstützt. Z.B. 'REPT' ist einer davon. Hier muß sich
            der Programmierer leider bequemen, die Codierung manuell oder
            mit einem Macro zu erledigen. Andere nicht implementierte 
            Pseudobefehle sind z.B. 'ASC', 'BIN', 'DECIMAL', 'HEX', 'OCT'
            u.a.. Sollten sie sehr dringend benötigt werden, müßte man
            evtl. nochmal nachdenken... Einige davon können einfach durch
            'DB' ersetzt werden (mit geeigneten Suffices an den Operanden).

      4.4.  INCLUDE-Pfade müssen ggf. angepaßt werden. Dabei können in den
            Pfadangaben sowohl slashes '/' als auch backslashes '\' zur
            Trennung der Directories verwendet werden, auch wenn man sich
            in echten DOS-Hierarchien bewegt.

      4.5.  Die Ausdrücke 'HIGH EXPR' und 'LOW EXPR' sind unter 'ZSS' so
            nicht gültig. Wir betrachten 'HIGH' und 'LOW' als Namen von
            (vordefinierten) Funktionen und ein Funktionsaufruf sieht bei
            uns so aus: 'FUNKTIONSNAME(EXPR)'. Zwischen 'FUNKTIONSNAME' und
            'EXPR' darf kein whitespace stehen, sondern der Ausdruck, von
            dem der Funktionswert zu ermitteln ist, muß in runde Klammern
            eingeschlossen werden und muß unmittelbar auf 'FUNKTIONSNAME'
            folgen. Dummerweise kommt der HP-Z180-Assembler (im Gegensatz
            zum HP-8085-Assembler) mit dieser Syntax nicht mehr zurecht.
            Um einen Quelltext ohne Änderung mit beiden Assemblern über-
            setzen zu können, müssen die Funktionen 'HIGH' und 'LOW' ver-
            mieden werden. Als gleichwertiger Ersatz kann dabei verwendet
            werden:

            anstatt 'HIGH EXPR':  (0FF00H.AN.(EXPR)).SR.8
            anstatt 'LOW EXPR':   0FFH.AN.(EXPR)

            Hinweis: Falls EXPR aus mehr als einem Namen besteht, sind
            die umschließenden runden Klammern dringend anzuraten, damit
            es keine unangenehmen Überraschungen mit der Priorität bei
            der Auswertung des Ausdrucks gibt.

      4.6.  Beim Vergleich zweier Ausdrücke mittels der Vergleichsoperatoren
            '.GT.', '.GE.' usw. (im '.IF'-Befehl in Macros) darf zwischen
            den Ausdrücken und den Operatoren kein whitespace stehen. Also
            anstatt etwa 'VAR1 .EQ. VAR2' muß es heißen 'VAR1.EQ.VAR2'.

      4.7.  Das Quellfile muß die Extension '.u' haben.


  5.  Erzeugt 'ZSS' außer dem absoluten Objectfile ggf. weitere Files
      oder irgendwelchen Output für Debugging?

      Ausgehend von einem Quellfile 'file.u' erzeugt 'ZSS' im Normalfall
      im ersten Lauf ein Zwischenfile 'file.t'. Im zweiten Lauf wird dann
      ein Listfile 'file.l' und ein Objectfile 'file.o' erzeugt. Bei
      Auftreten eines Fehlers wird die Assemblierung abgebrochen. Teil-
      weise beschriebene Files werden im 'halbfertigen' Zustand belassen.
      Außerdem werden im Fehlerfall einige weitere Informationen ausge-
      geben:
        a.  alle 'lokalen Label-Tabellen' der gerade in Expansion
            befindlichen Macros ('lltxxxx').
        b.  der gesamte bis zum Auftreten des Fehlers gelesene 'Macrotext',
            so, wie er nach einem ersten internen Verarbeitungsschritt ge-
            speichert ist ('macros').
        c.  alle zum Zeitpunkt des Fehlers bekannten Namen sowie deren Wert
            und Typ ('namen').


  6.  Wie starte ich nun endlich meine erste Assemblierung?

      Einfach mit: ZSS<vers> [<filename>[.u] {[/f | /nc | /ns]}]

      Bei Aufruf von 'ZSS' ohne Parameter wird interaktiv nach dem Quell-
      filenamen gefragt. Wird 'ZSS' mit einem Parameter aufgerufen, so wird
      dieser Parameter als Quellfilename interpretiert. Bis zu drei weitere
      Parameter können angegeben werden. Sie bedeuten:
      /f (force assembly): die Assemblierung wird in jedem Fall begonnen,
                           auch wenn dabei ggf. Files mit den Extensions
                           '.t', '.l' oder '.o' (die aus einem früheren
                           Assemblerlauf stammen) überschrieben werden
                           sollten.
      /nc (no cross ref.): die Erzeugung einer Querverweistabelle wird
                           unterdrückt.
      /ns (no sym. tab.):  die Erzeugung einer Symboltablle wird unterdrückt.


  7.  Solange 'ZSS' noch in der Betaphase ist, möchte ich überprüfen
      können, ob 'ZSS' und der HP-Assembler wirklich gleiche Resultate
      liefern, wie mache ich das?

      Der Distribution liegt ein kleines Tool ('look1') bei, welches
      die HP64000-absolute Files 'anschauen' kann. Es ist wirklich nur
      ein ganz einfaches Programm, welches den Inhalt eines HP64000-absolute
      Files in Textform ausgibt. Für jeden Record sind dies: Startadresse,
      Anzahl der Datenbytes und die Datenbytes selbst. Nachdem mit 'look1'
      also für die beiden zu vergleichenden HP64000-absolute Files jeweils
      ein solches Textfile erzeugt wurde, kann etwa mit dem DOS-Befehl
      'fc' ein ASCII-Vergleich dieser beiden Textdateien durchgeführt werden.
      Hinweise:
       1. Ein direkter Filevergleich der beiden HP64000-absolute Files
          macht keinen Sinn. Es ist durchaus normal, daß die eigentliche
          Programminformation identisch ist, die beiden HP64000-absolute
          Files aber unterschiedlich sind, wenn man sie Byte für Byte
          vergleicht!
       2. Auch mit 'look1' steht noch kein allgemeines Tool zur Verfügung,
          mit dem geprüft werden kann, ob zwei HP64000-absolute Files
          gleichen Inhalt haben. Man denke z.B. etwa nur an die Vertau-
          schung von zwei Records oder ein Aufspalten eines Records in
          zwei Teilrecords. Da die zu vergleichenden Objectfiles aber
          aus gleichen Sourcen hervorgegangen sind und 'ZSS' versucht,
          die Recordgröße der bei HP verwendeten anzupassen, sollte
          es dennoch keine Probleme geben. In jedem Fall kann man davon
          ausgehen, daß der Inhalt zweier HP64000-absolute Files identisch
          ist, wenn die mit 'look1' erzeugten Textfiles identisch sind.


  8.  Welche Files sind Bestandteil der Distribution?

      DOS Binaries:
        bin\zss3.exe:           Assembler, Version 3
        bin\look1.exe:          Analyse von Objectfiles

      Dokumentation:
        doc\changes:            Historie der Änderungen
        doc\liesmich:           diese File
        doc\readme:             englisches 'liesmich'

      Prozessorunterstützung:
        promac\mp8085b:         Prozessormacros für 8085
        promac\mpz180:          Prozessormacros für Z180

      Quellen:
        src\ctvu1.pas:          Unit der globalen Konstanten, Typen und
                                Variablen für 'zss3'
        src\zss3.pas:           Program Modul von 'zss3'
        src\zss3u1.pas:         Unit1 von 'zss3'
        src\zss3u2.pas:         Unit2 von 'zss3'
        src\look1.pas:          Analyse von Objectfiles

      Beispiele:
        examples\all8085.u      alle 8085 Opcodes
        examples\allz180.u      alle Z180 Opcodes
        examples\macro_ex.u     ein paar Macros


  9.  Wer nimmt eigentlich meine Anregungen, Wünsche, Fehlerberichte oder
      auch Bekundungen der Zufriedenheit entgegen?

      Rudolf Schubert
      Kirchstraße 18a
      D-82054 Sauerlach
      Tel. 08104/908311
      EMail: rudolf@muc.de


 10.  Gibt es sonst noch irgendwelche Bemerkungen?

      Ja: 'ZSS' ist freie Software. Es besteht keinerlei Verbindung zur
      Firma HP oder deren Mitarbeitern. 'ZSS' wurde völlig eigenständig
      und lediglich unter Zuhilfenahme diverser HP-Assemblermanuals
      (und des auf einer HP Workstation laufenden HP-Assemblers) entwickelt.
      Wie bei (freier) Software üblich, übernimmt der Autor keine Garantie
      für das wunsch- und ordnungsgemäße Funktionieren. Da sich 'ZSS'
      (immer) noch in der Betaphase befindet, werden alle Benutzer dringend
      gebeten, die erzeugten Resultate mit gewisser Vorsicht zu genießen
      (und am besten etwa mit dem Tool 'look1' gegenüber dem HP-Ergebnis
      zu überprüfen (wozu brauchen wir dann eigentlich 'ZSS' noch?)).
      Alles o.k.?


      ****** Anerkennung von Warenzeichen ******

      Alle erwähnten Warenzeichen sind Eigentum des betreffenden Inhabers.

      ****** Anerkennung von Warenzeichen ******

Zurück zu 'ZSS'


Zurück zu Rudolf's Homepage


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