R O B O T R O N


Mikrorechnerbausatz  Z 1 0 1 3

Handbuch Teil 1

Inhaltsverzeichnis
------------------

                                                       Seite

2.        Grundbegiffe der Mikrorechentechnik              2
2.1.      Hardware oder Software                           2
2.2.      Bestandteile eines Mikrorechners                 3
2.2.1.    Zentrale Verarbeitungseinheit                    3
2.2.2.    Speicher                                         4
2.2.2.1.  Programmspeicher (Nur-Lese-Speicher)             4
2.2.2.2.  Datenspeicher (Schreib-Lese-Speicher)            5
2.2.3.    Ein-/Ausgabe-Einheiten                           6
2.2.4.    Verbindung der Funktionseinheiten                6
2.3.      Programabarbeitung                               7
2.3.1.    Ablauf in der CPU                                7
2.3.2.    Holen der Befehle                                7
2.3.3.    Darstellung von Informationen im Speicher        8
2.4.      Grundbegiffe der Software                       10
2.4.1.    Darstellung von Zahlen                          10
2.4.2.    Logische Operationen                            13
2.4.3.    Arithmetische Operationen                       16
3.        Hardware des Z1013                              19
3.1.      Blockschaltbild                                 19
3.2.      Steuerung des Mikroprozessors                   19
3.2.1.    Beschreibung der Steuersignale                  19
3.2.2.    Takterzeugung                                   23
3.2.3.    Resetlogik                                      24
3.3.      Speichereinheiten                               25
3.3.1.    Anschluss                                       25
3.3.2.    Zusammenarbeit mit der CPU                      27
3.4.      Ein-/Ausgabe-Baugruppen                         27
3.4.1.    Parallel Ein-/Ausgabe-Baustein U855-Pio         27
3.4.1.1.  Beschreibung der Steuersignale                  27
3.4.1.2.  Programmierung                                  29
3.4.2.    Tastaturanschluss                               32
3.4.3.    Magnetbandanschluss                             32
3.4.4.    Bildschirmsteuerung                             33
3.5.      Stromversorgung                                 34
3.6.      Bussystem                                       35


                                                       Seite
4.        Der Befehlssatz des Mikroprozessors U880        36
4.1.      Befehlsschluessel                               37
4.1.1.    1-Byte Befehle                                  37
4.1.2.    2-Byte Befehle                                  38
4.1.3.    3-Byte Befehle                                  39
4.1.4.    4-Byte Befehle                                  40
4.2.      Adressierung                                    40
4.2.1.    Registeradressierung                            40
4.2.2.    Direktwertadressierung                          41
4.2.3.    Registerindirektadressierung                    41
4.2.4.    Indexierte Adressierung                         42
4.3.      Maschinenbefehle und ihre Bedeutung             42
4.3.1.    Ladebefehle                                     42
4.3.2.    Byte- und Doppelbyte-Zaehl-Befehle              43
4.3.3.    Arithmetische Befehle                           44
4.3.4.    Vergleichsbefehle                               46
4.3.5.    Logische Befehle                                46
4.3.6.    Spezielle arithmetische Hilfsoperationen        47
4.3.7.    Befehle zur Bitmanipulation                     48
4.3.8.    Verschiebebefehle                               48
4.3.9.    Sprungbefehle                                   51
4.3.10.   Kelleroperationen                               53
4.3.11.   Unterprogrammoperationen                        55
4.3.12.   Ein- und Ausgabebefehle                         57
4.3.13.   Gruppenoperationen fuer Lade-, Vergleichs-
          und Ein-/ Ausgabe-Befehle                       58

4.3.14.   Austauschbefehle                                60
4.3.15.   CPU-Steuerbefehle                               61
4.3.16.   Bedeutung der Flags                             61
4.4.      Unterbrechungsorganisation                      63

Bestandteile des Handbuches:
----------------------------

Handbuch Teil I
Handbuch Teil II
Anlagenteil


2. Grundbegriffe der Mikrorechentechnik

2.1. Hardware oder Software?

Dieses Kapitel ist vor allem fuer den Leser gedacht, der in
der Mikrorechentechnik nicht bewandert ist. Es werden hier ei-
nige Grundbegiffe erlaeutert, die das Verstaendnis der nach-
folgenden Kapitel erleichtern sollen.

Der erste Begiff, der zu klaeren waere, ist der des Mikrorech-
ners. Ein Mikrorechner ist ein komplexes System verschiedener
Funktionseinheiten auf der Basis mikroelektronischer Schalt-
kreise, die auf bestimmte Art miteinander in Verbindung treten
und durch ihr Gesamtverhalten eine vorgegebene Aufgabe (Pro-
gramm) loesen. Ein Programm stellt dabei eine Folge von Anwei-
sungen (Befehlen) dar.

Gekennzeichnet wird ein Mikrorechner im wesentlichen durch
seine Hard- und Software. Unter Hardware wird dabei sowohl
die Gesamtheit der mechanischen und elektronischen Bauele-
mente, wie integrierte Schaltkreise, Transistoren, Wider-
staende usw., als auch die Art und Weise der Verschaltung
dieser Bauelemente verstanden.

Als Software eines Rechners werden seine Programme, z. B.
Betriebsprogramm und BASIC-Interpreter, bezeichnet. Das Be-
triebsprogramm (oder auch Betriebssystem) enthaelt die Pro-
gramme, die die Zusammenarbeit der einzelnen Systemkomponen-
ten organisieren bzw. ueberhaupt ermeeglichen. Worin unter-
scheidet sich aber nun ein Mikrorechner von einer herkoem-
lichen Schaltung?

Um eine bestimmte Steuerungsaufgabe loesen zu koennen oder
immer wiederkehrende Berechnungen zu realisieren, muss nicht
immer ein Mikroprozessor verwendet werden. Vielfach ist es
einfacher, eine Schaltung mit einfachen Logikschaltkreisen
aufzubauen. Eine solche Schaltung haette ueberdies den Vor-
teil, schneller als ein Mikroprozessor zu arbeiten. Aber be-
reits einfache Aenderungen der Aufgabenstellung wuerden einen
neuen Schaltungsentwurf erfordern, der mit einem bestimmten
Arbeitsaufwand realisiert werden musste. Komplexere Aufgaben-
stellungen liessen sich auf diese Art ueberhaupt nicht reali-
sieren, da der Aufwand zu hoch werden koennte. Die Loesung
einer Aufgabe mit Hilfe eines Mikrorechners ist weitaus ein-
facher. Der Mikroprozessor ist in der Lage, alle Verknuep-
fungsmoeglichkeiten der Logikschaltkreise nachzubilden und da-
mit jedes gewuenschte Verhalten zu realisieren. Die uebrigen
Funktionseinheiten des Mikrorechnere enthalten dann in den
Speichereinheiten den Loesungsablauf der Aufgabe in Form von
Anweisungen fuer den Mikroprozessor, die Ausgangsdaten sowie
konstante Werte. Ueber andere Funktionseinheiten werden Signa-
le aufgenommen sowie Steuersignale wieder abgegeben. Die er-
reichbare Arbeitsgeschwindigkeit ist kleiner als bei reinen
Logikschaltungen. Da aber nicht die maximal erreichbare Ar-
beitsgeschwindigkeit, sondern die fuer den jeweiligen Prozess
oder die Steuerung benoetigte Geschwindigkeit entscheidend
                              2



ist, ist dieser Nachteil nur in wenigen Faellen von Bedeutung.

Eine Aenderung der Aufgabenstellung fuehrt meist nur zu einer
Aenderung der Anweisungen fuer den Mikroprozessor. Diese Aen-
derung ist schnell realisierbar. Mit dem Mikroprozessor lassen
sich ohne technische Veraenderungen vielerlei Aufgabenstel-
lungen besen, es ist meist nur erforderlich, andere Anwei-
sungen zu erarbeiten.

2.2. Bestandteile eines Mikrorechners

2.2.1. Zentrale Verarbeitunseinheit

Die Zentrale Verarbeitungseinheit, im Englischen als "Central
process unit" (CPU) bezeichnet, ist der wichtigste Bestand-
teil eines Mikrorechners. Eine solche CPU liesse sich aus dis-
kreten Elementen, d. h. Transistoren, Widerstaenden und Kon-
densatoren aufbauen, wuerde aber einen sehr grossen Aufwand er-
fordern. Mit der Entwicklung der Mikroelektronik konnte diese
Funktionseinheit in Form einer integrierten Schaltung als soge-
nannter Mikroprozessor bereitgestellt werden und damit zu einer
wesentlichen Vereinfachung im Schaltungsentwurf beitragen. Am
Beispiel des Mikroprozessors U880, der im MRB Z1013 Verwendung
findet, sollen einige wichtige Bestandteile erlaeutert werden.

Dazu gehoeren:

- CPU-Steuerung/Befehlsdekodierung
  Hier werden anhand eines vorgegebenen Befehls bestimmte Sig-
  nale erzeugt. Bestimmte Zustaende, die von der CPU-Steuerung
  erkannt werden, sowie der zugefuehrte Takt erzeugen zeitlich
  festgelegte Signalfolgen, die sowohl den Ablauf innerhalb
  der CPU steuern, die aber auch als Steuersignale in allen
  angeschlossenen Funktionseinheiten ausgewertet werden koen-
  nen und die gesamten Ablaeufe eines Mikrorechners koordinie-
  ren (siehe Zeitdiagramme Anlage 10).

- Arithmetisch-logische Einheit (ALU)
  In der ALU koennen Daten entsprechend eines Befehle ver-
  knuepft werden. Zu diesen Operationen mit Daten gehoeren:
  Addition, Subtraktion, UND-Verknuepfung (Konjunktion), ODER-
  Verknuepfung (Disjunktion) sowie eine Reihe weiterer Opera-
  tionen wie Verschiebungen und Bitmanipulationen. Eine Ver-
  aenderung der Daten ist nur in der ALU moeglich, erforder-
  lichenfalls muessen diese erst in die ALU geholt und danach
  zuruecktransportiert werden.

- Registersatz (Zwischenspeicher)
  In der CPU existieren Zwischenspeicher, die als Register be-
  zeichnet werden. Hier koennen Zwischenergebnisse aufbewahrt
  und in der ALU miteinander verknuepft werden. Einige Regi-
  ster besitzen spezielle Bedeutung, wie z. B. der sogenannte
  Kellerzeiger (Stackpointer SP), Befehlszaehler (PC), Re-
  freshregister und Interruptregister (s. auch Abschn. 4.).
  Bestimmte Register sind doppelt vorhanden und koennen durch
  einen Befehl umgeschaltet werden. Ein Register wird benutzt,
                              3



  um den Zustand der CPU waehrend der Befehlsabarbeitung zu
  speichern. Es wird als Flag-Register bezeichnet (die Be-
  zeichnung "Flag" sollte als Anzeiger verstanden werden).
  In einem Register wird der gelesene Befehl zwischengespei-
  chert, bis die durch ihn veranlasste Operation beendet ist.
  Dieses Register heisst demzufolge Befehlsregister.

Die Arbeit der CPU wird durch eine Reihe von Systemsignalen
gekennzeichnet, die als Anschluesse herausgefuehrt wurden und
das Zusammenwirken mit den angeschlossenen Funktionseinheiten
steuern.

2.2.2. Speicher

In der Mikrorechentechnik haben sich zur Speicherung von In-
formationen Halbleiterspeicher weitgehend durchgesetzt. Es
sind integrierte Schaltungen in unterschiedlichen Gehaeuse-
groessen, je nach Kapazitaet des Speichers. Speicher werden
zu verschiedenen Zwecken benoetigt, z. B. um der CPU die ab-
zuarbeitenden Befehle zur Verfuegung zu stellen. Da die Re-
gister der CPU meist nicht ausreichen, alle Zwischenergebnisse
aufzubewahren, muessen diese ebenfalls in den Speicher ge-
bracht werden.

Als Modell eines Speichers mag ein langer Schrank mit vielen
Faechern dienen. Diese Faecher sind einzeln numeriert. Diese
Numerierung soll bei Null beginnen und lueckenlos bis zu
einem Endwert erfolgen. Jedes Fach entspricht einem Speicher-
platz und kann eine Information enthalten. Die maximale Anzahl
der Faecher bestimmt die Kapazitaet dieses Speichers.

Die Zeit, die vom Anlegen einer Speicherplatzadresse bis zur
Bereitstellung der gespeicherten Daten beneetigt wird, wird
Zugriffszeit genannt.

Zwischen der Speicherung von Daten und Programmen bestehen
einige Unterschiede. Programme werden meist in Speichern auf-
bewahrt, die auch nach Abschalten der Versorgungsspannung
ihren Inhalt behalten. Allerdings koennen diese Speicher nur
gelesen werden, zum Beschreiben dieser Speicher sind spezielle
Einrichtungen notwendig.

2.2.2.1. Programmspeicher (Nur-Lese-Speicher)

In einem Programmspeicher sind die Anweisungen fuer einen Mi-
kroprozessor enthalten. Diese Anweisungen gehen auch nach Aus-
schalten des Rechners nicht verloren, sie sind nicht fluechtig.
Diese Speicher bezeichnet man als Nur-Lese-Speicher (Read only
memory - ROM), die Informationen werden einmal eingegeben und
stehen staendig zur Verfuegung.
                              4


Je nach Eingabe der Information unterscheidet man: ROM's, die
bereits waehrend der Herstellung ihre Informationen erhalten
und ROM's, die nachtraeglich elektrisch programmiert werden
koennen (ein einmaliger Vorgang, da die Struktur des Speichers
veraendert wird). Diese letztgenannten Speicher heissen PROM
(Prograinmable ROM). Eine weitere Speicherart kann sowohl pro-
grammiert als auch wieder geleescht werden. Das Loeschen er-
folgt mit ultraviolettem Licht (UV-Licht) und loescht immer
den gesamten Speicher. Diese Speicherart nennt man EPROM
(Erasable PROM). Das Einschreiben der Programme in den EPROM
geschieht mit speziellen Funktionseinheiten, sogenannten EPROM-
Programmiergeraeten. In den EPROM  wird die zu speichernde In-
formation mittels einer Programmierspannung als Ladungsmenge
eingegeben. Nach Erreichen einer vorgegebenen Ladung ist der
Baustein programmiert. Die Bestrahlung mit UV-Licht hat zur
Folge, dass die gespeicherte Ladungemenge wieder abgebaut wird.
Nach dem Loeschen ist der EPROM wieder programmierbar.

2.2.2.2. Datenspeicher (Schreib-Lese-Speicher)

Zur Aufbewahrung von Zwischenergebnissen oder anderen veraen-
derbaren Informationen werden Schreib-Lese-Speicher verwendet.
Da diese Speicher wahlweise gelesen oder beschrieben werden
koennen, nennt man sie Speicher mit wahlfreiem Zugriff (Random
access memory - RAM). Mit Abschalten der Stromversorgung ver-
lieren RAM's ihren Inhalt, sie sind also nicht zur Aufbewah-
rung von Informationen verwendbar, die immer verfuegbar sein
muessen. Es werden zwei grundsaetzliche Typen unterschieden:
statische und dynamische RAM's.

In den statischen RAM's werden Transistorkombinationen zur
Aufbewahrung der Informationen verwendet. Eine solche Tran-
sistorkombination kann zwei verschiedene Zustaende annehmen
und behaelt eine somit eingetragene Information bis zum Ab-
schalten oder Ueberschreiben mit einer neuen Information.

Dynamische RAM's speichern die, Information als Ladung eines
kleinen Kondensators ab. Diese Ladung muss, auf Grund der
Selbstentladung, periodisch erneuert werden, dieser Vorgang
wird mit REFRESH (Auffrischen) bezeichnet. Das Auffrischen
wird bereits erreicht, wenn der Speicher gelesen wird. Die CPU
U880 unterstuetzt diesen Vorgang durch Aussenden einer
REFRESH-Information, um die zeitlichen Bedingungen zum Auf-
frischen unter allen Umstaenden zu gewaehrleisten. Werden die
Zellen der dynamischen RAM's nicht spaetestens nach 2 Millise-
kunden aufgefrischt, geht ihre gespeicherte Information ver-
loren.

Trotz des nicht unerheblichen Mehraufwandes werden dynamische
RAM's verwendet, da sie bei gleichen Abmessunngen der Bausteine
eine groessere Speicherkapazitaet und kleinere Leistungsauf-
nahme gegenueber statischen RAM's aufweisen.
                              5


2.2.3. Ein/Ausgabe-Einheiten

Unter externen Geraeten sollen im folgenden alle Geraete ver-
standen werden, mit denen Informationen in den Mikrorechner
eingegeben oder vom Mikrorechner ausgegeben werden. Damit ist
es moeglich, sowohl Daten als auch Programme in den Mikrorech-
ner zu bringen und die Ergebnisse fuer den Nutzer sichtbar zu
machen. Solche Geraete sind Lochbandleser und -stanzer, Magnet-
bandtechnik, Tastaturen, Bildschirm usw.

Die Verbindung dieser Geraete mit dem Mikroprozessor erfolgt
ueber sogenannte E/A-Funktionseinheit en, in denen spezielle
integrierte Schaltungen enthalten sind. Diese Funktionsein-
heiten steuern selbstaendig die Arbeit der Geraete und treten
mit der CPU nur zur Informationsuebermittlung in Kontakt.
Damit wird die CPU entlastet und die Programmabarbeitung
wesentlich effektiver.

Weiterhin koennen auch Funktionseinheiten angeschlossen wer-
den, die beliebig zur Verfuegung gestellte Meldesignale aus
zu ueberwachenden Prozessen aufnehmen und sie fuer den Mikro-
prozessor aufbereiten. Gleichermassen ist die Abgabe von
Steuersignalen zur Beeinflussung bestimmter zu steuernder
Prozesse moeglich. Als integrierte Schaltkreise werden dazu im
MRB Z1013 parallele E/A-Schaltkreise (Parallel Input Output-
PIO) vom Typ U855 verwendet.

2.2.4. Verbindung der Funktionseinheiten

Der Mikroprozessor (CPU) sendet Signale ab und wertet be-
stimmte empfangene Signale aus. Diese Signale werden i. a. in
allen angeschlossenen Funktionseinheiten benoetigt.

Die Leitungen zur Uebermittlung von Daten, Adressen und
Systemsignalen, wie z. B. LESEN, SCHREIBEN, werden entspre-
chend ihrer Funktion zu Leitungsbuendeln zusammengefasst.

Da diese Leitungen die Daten und Informationen zwischen den
einzelnen Funktionseinheiten transportieren, wurde der Be-
griff "Bus" fuer ein solches Leitungsbuendel gepraegt.

Demzufolge bezeichnet man die Datenleitungen als DATENBUS, die
Adressleitungen werden als ADRESSBUS und die Systemleitungen
als STEUERBUS bezeichnet. Gelegentlich steht der Begiff "SY-
STEMBUS" auch fuer alle Leitungen innerhalb des Mikrorechner-
systems.

Durch Verwendung eines einheitlichen Systembusses ist es
moeglich, beliebige Funktionseinheiten einem bestehenden
System hinzuzufuegen, d. h. das System staendig zu erweitern.
Voraussetzung ist die Uebereinstimmung der elektrischen An-
schluesse der jeweiligen Einheiten.
                              6


2.3. Programmabarbeitung

2.3.1. Ablauf in der CPU

Wie bereits gesagt, beneetigt die CPU zur Lossung ihrer Auf-
gaben Anweisungen, die den gesamten Ablauf des Mikrorechners
steuern. Diese Anweisungen oder Befehle findet die CPU in den
angescohlossenen Speichereinheiten in einer ganz bestimmten,
fuer sie verstaendlichen Form, die als Maschinenkode bzw. MC
bezeichnet wird. Alle Anweisungen an die CPU muessen also in
Form dieses MC vorliegen bzw. sind in diese Form zu bringen.
Im Anhang befindet sich eine Uebersicht, in der die Befehle
des U880 sowie deren Darstellung im Maschinenkode enthalten
sind.

Um eine bestimmte Anweisungsfolge abzuarbeiten, ist es notwen-
dig, der CPU mitzuteilen, in welchem Speicherbereich diese Be-
fehle zu finden sind. Die CPU liest in diesem Bereich den
Speicher und versucht die gelesenen Informationen als Befehl
auszufuehren. Dazu werden die gelesenen Informationen ins Be-
fehlsregister transportiert und steuern von hier den Ablauf in
der CPU. In Abhaengigkeit vom konkreten Befehl werden entweder
zusaetzliche Informationen aus dem Speicher gelesen, werden
Daten zum oder vom Speicher transportiert oder bestimmte lo-
gische Verknuepfungen in der ALU vorgenommen. Alle diese Akti-
vitaeten der CPU sind mit dem Aussenden bestimmter Steuersig-
nale verbunden, die die jeweilige Art der Operation anzeigen.

Einen Ueberblick ueber die Steuersignale bei einigen ausge-
waehlten Operationen gibt Anlage 10. Zwischenzeitlich waehrend
der Befehlsverarbeitung sendet die CPU mit Hilfe des REFRESH-
Registers eine Information zum Auffrischen des Speicherinhal-
tes eventuell angeschlossener dynamischer Speicher aus. Waeh-
rend des Refresh-Zyklus wird der Befehl ausgefuehrt.

War der eben abgearbeitete Befehl ein Verarbeitungs- oder Trans-
portbefehl, dann wird die Verarbeitung mit dem im Speicher fol-
genden Befehl fortgesetzt. Einige Befehle veraendern aber diese
Abarbeitungsreihenfolge, sie teilen der CPU mit, in welchem
Speicherbereich der naechste Befehl zu finden ist.

Nach erfolgter Programmabarbeitung kann die CPU anhalten oder
ein Steuerprogramm bearbeiten, mit dem z. B. die naechste Auf-
gabe ausgewaehlt werden kann.

2.3.2. Holen der Befehle

Fuer die Organisation der Befehlsabarbeitung besitzt die CPU
ein besonderes Register, den Befehlszaehler (PC). Der Befehls-
zaehler besitzt 16 Bitstellen entsprechend der Anzahl der
Adressleitungen. Beim Betaetigen der RESET-Taste wird dieses
Register auf Null gesetzt. Damit liest die CPU den ersten ab-
zuarbeitenden Befehl auf dem Platz Null.
                              7


Aus diesem Grund muss ein Programm ab dieser Stelle beginnen.
Um ein solches Programm ab Null nach dem Einschalten zur Ver-
fuegung zu stellen, ist ein nicht fluechtiger Speicher, z. B.
ein EPROM notwendig. Befindet sich in diesem Speicherbereich
kein Programmspeicher, so findet die CPU zufaellige Bitkombina-
tionen, die als Befehl aufgefasst und abgearbeitet werden.

Es kann also immer nur ein Programm nach dem Einschalten ge-
startet werden. Das wird im Normalfall ein Steuerprogramm
sein, mit dem andere Programme aktiviert werden koennen. Soll
ein anderes Steuerprogramm verwendet werden, ist der entspre-
chende Programmspeicher auszuwechseln. Da Programme auch in den
Schreib-Lese-Speicher (RAM) geladen werden koennen, kann der
Speicherbereich ab Null als RAM ausgelegt werden. Dann muss
aber durch die Hardwareschaltung das Erreichen eines Steuer-
programms sichergestellt werden, welches in einem beliebigen
Speicherbereich stehen kann. Es koennen nun beliebige Betriebs-
programme in den Bereich ab Null geladen und verwendet werden,
ohne jedesmal den Speicher auswechseln zu muessen. Damit ist
ein solches System jeder Aufgabenstellung anpassbar.

Der Bereich ab Null ist noch aus einem anderen Grunde besonders
fuer Betriebsprogramme geeignet. Er enthaelt einige ausgewaehl-
te Adressen, die sowohl von Programmen (sogenannte RESTART-Be-
fehle
) als auch im Resultat von externen Ereignissen (sogenannt-
en Programmunterbrechungen) benoetigt werden.

Das Lesen der Befehle oder auch anderer Informationen geschieht
durch Aussenden einer Adresse, begleitet von bestimmten Steuer-
signalen.

Durch eine Speicherverwaltung werden aus bestimmten Stellen die-
ser Adresse die Auswahl der entsprechenden Speichereinheit sowie
eines Speicherbereiches vorgenommen. Der niederwertige Teil der
Adresse wird verwendet, um in dem betreffenden Speicherbereich
den konkreten Platz zu adressieren.

War die dort vorgefundene Information ein Befehl fuer die CPU
so wird automatisch der Befehlszaehler entsprechend der Be-
fehlslaenge erhoeht (inkrementiert) und damit die neue Befehls-
adresse bereitgestellt. Wurde der Befehl als ein Verzweigungs-
befehl erkannt, wird im Befehlszaehler die neue Adresse bereit-
gestellt und dann erneut durch Aussenden dieser Adresse ein be-
stimmter Speicherplatz ausgewaehlt.

2.3.3. Die Darstellung von Informationen im Speicher

Bisher wurde immer nur allgemein von "Informationen" gespro-
chen, die in einem "Speicher" zu finden sind. Diese Informa-
tionen waren sowohl Daten als auch Befehle, die in unterschied-
lichen Speichertypen aufbewahrt wurden (ROM bzw. EPROM oder RAM).

Hinsichtlich ihrer Darstellung im Speicher unterscheiden sich
diese Informationen auch nicht; es waere auch meeglich, Daten
als Befehle zu betrachten und umgekehrt. Bei einer Abarbeitung
durch die CPU kommen dabei selten sinnvolle Ergebnisse zustande.
                              8



Es wurde bereits der Speicher mit einer endlichen Anzahl Faecher
eines Schranken verglichen, in denen Informationen abgelegt wer-
den koennen. Durch eine Adresse wird die Nummer eines konkreten
Faeher bereitgestellt.

Wenn Informationen sowohl gelesen als auch abglegt werden koen-
nen, entspricht das dem Prinzip des Schreib-Lese-Speichers. Als
Information kann das Vorhandensein eines Zeichens, einer Markie-
rung oder dergleichen gedeutet werden. Ist diese Markierung
dauerhaft (eingraviert), so handelt es sich um einen Nur-Lese-
Speicher. In einem Kanten koennen auch mehrere Informationen
enthalten sein. Analog dazu sind die Speicher im Mikrorechner
aufzufassen.

Eine Funktionseinheit "Speicher" besteht aus einer bestimmten
Anzahl adressierbarer Plaetze, wobei jeder Platz zwei verschie-
dene Zustaende annehmen kann. Diese beiden Zustaende werden
durch die Dualziffern "0" und "1" repraesentiert. Die Auswahl
dieser Plaetze erfolgt ueber sogenannte Adressleitungen, die An-
zahl der Leitungen richtet sich nach der Kapazitaet des Spei-
chers. Der einfachste Aufwand ergibt sich bei der Festlegung
der Speicherkapazitaet, d. h. der Anzahl der adressierbaren
Speicherplaetze, als ein Vielfaches einer Potenz zur Basis 2.

Eine Adressleitung kann zwei Zustaende annehmen, entweder
hohen Spannungspegel, sogenannten "H-Pegel" (logisch "1"), als
auch niedrigen Spannungspegel, sogenannten "L-Pegel" (logisch
"0"). Damit waeren zwei verschiedene Speicherplaetze adres-
sierbar. Zwei Adressleitungen koennen zusammen bereits 4
Zustaende annehmen, damit sind 4 verschiedene Speicherplaetze
(mit den Adressen 00, 01, 10 und 11) adressierbar. Demzufolge
werden bei 10 Adressleitungen 2 hoch 10=1024=1K Speicherplaet-
ze adressiert.

Damit ergibt sich:

     Kapazitaet = 2 hoch n (n = Anzahl der Adressleitungen)

Die CPU U880 hat 16 Leitungen fuer die Bildung von Adressen zur
Verfuegung, d. h. sie kann maximal 2 hoch 16 = 65536 ^= 64K Spei-
cherplaetze adressieren.

Eine weitere Eigenschaft einer Speichereinheit ist die Aufruf-
breite. Hierunter wird verstanden, wieviel Speicherplaetze
gleichzeitig mit einer Adresse angesprochen werden koennen, um
die Information parallel zu verarbeiten. Diese Aufrufbreite ist
verschieden: bei ROM's und EPROM's betraegt sie 8 Stellen, bei
statischen RAM's 1, 4 oder 8 Stellen und bei dynamischen RAM's
im allgemeinen eine Stelle. Um die moegliche Verarbeitungsbrei-
te des Mikroprozessors U880 mit 8 Datenleitungen zu nutzen,
muessen in einer Speichereinheit mehrere Speicherschaltkreise
kombiniert werden, um damit die gewuenschte Aufrufbreite zu
                              9



realisieren. Das geschieht, indem die Adressanschluesse von acht
Speicherschaltkreisen mit den jeweiligen Adressleitungen der CPU
verbunden werden. Jeder der Speicherschaltkreise wird an einer
Datenleitung angeschlossen, die Auswahl erfolgt fuer alle acht
Schaltkreise mit einem gemeinsamen Auswahlsignal.

2.4. Grundbegriffe der Software

2.4.1. Darstellung von Zahlen

Das Wesentliche bei der Programmabarbeitang besteht in der
Veraenderung der eingegebenen Zahlen, um die gewuenschten Er-
gebnisse zu erhalten. Das gewohnte Dezimalsystem ist fuer die
Zahlendarstellung im Mikrorechner nicht geeignet; die zwei
moeglichen Zustaende fuehren auf ein anderes Zahlensystem, das
sogenannte Dualsystem. Dieses kennt nur die Ziffern 0 und 1,
welche mit dem "L"- und "H"-Pegel der Informationsspeicherung
identisch sind.

Da aber die Bildung von Zahlen sowohl im Dezimalsystem als auch
im Dualsystem nach gleichen Gesetzmaessigkeiten verlaeuft, ist
eine Umrechnung unproblematisch und kann durch entsprechende
Programme vom Mikroprozessor vorgenommen werden.

Diese Zahlenbildung kann mit folgender Gleichung beschrieben
werden:
                 n        n-1           1        0
        Z = d * x  + d * x   +...+ d * x  + d * x

wobei bedeuten:

     Z = Zahlenwert
     d = Ziffern innerhalb des Wertebereichs im Zahlensystem
     x = Basis des Zahlensystems
     n = ganzzahliger Exponent

Im Dezimalsystem kann d die Ziffern 0 ... 9 annehmen, x ist
dann gleich 10. Im Dualsystem ist d entweder 0 oder 1, die Ba-
sis ist gleich 2.

Ein Beispiel soll das verdeutlichen.
                 2        1        0
     123 = 1 x 10 + 2 x 10 + 3 x 10         (dezimal)
                6       5       4       3       2
         = 1 x 2 + 1 x 2 + 1 x 2 + 1 x 2 + 0 x 2 +
                1       0
           1 x 2 + 1 x 2
         = 11111011B                        (dual)

Das "B" hinter der Dualzahl soll zur Unterscheidung zur Dezi-
malzahl, die ohne Kennzeichnung geschrieben wird, dienen. "B"
bedeutet "binaer", abgeleitet von den zwei Zustaenden. Nun
waere eine solche Umrechnung per Hand kompliziert. Es gibt je-
doch ein einfaches Umrechnungsverfahren, das am deutlichsten
durch ein Beispiel wird.
                              10



 123 : 2 = 61                 Rest: 1---------------------
    -------|                                             |
    |                                                    |
    V                                                    |
  61 : 2 = 30                       1------------------- |
    -------|                                           | |
    |                                                  | |
    V                                                  | |
  30 : 2 = 15                       1----------------- | |
    -------|                                         | | |
    |                                                | | |
    V                                                | | |
  15 : 2 =  7                       1--------------- | | |
    -------|                                       | | | |
    |                                              | | | |
    V                                              | | | |
   7 : 2 =  3                       1------------- | | | |
    -------|                                     | | | | |
    |                                            | | | | |
    V                                            | | | | |
   3 : 2 =  1                       1----------- | | | | |
    -------|                                   | | | | | |
    |                                          | | | | | |
    V                                          | | | | | |
   1 : 2 =  0                       1--------- | | | | | |
                                             | | | | | | |
                                             V V V V V V V
                                    Binaer:  1 1 1 1 0 1 1  B
                                             ==============
 

Die Speichereinheiten in U880 Systemen, wie dem Z1013, besitzen
in der Regel eine Aufrufbreite von 8 Bit. Das heisst, auf einem
Speicherplatz sind gleichzeitig 8 Bit, die zu einem Byte zusam-
mengefasst werden, gespeichert. Ein Byte kann demzufolge 2 hoch
8 = 256 verschiedene Werte annehmen.

Fuer ein Byte ergeben sich die folgenden Wertigkeiten fuer die
einzelnen Bits:

Byte:
                                                Wertigkeit oder
   +-----------------------------------------+  Exponent zur
   |   7 | 6  |  5 |  4 |  3 |  2 |  1  |  0 |  Basis 2
   +-----------------------------------------+
   | 128 | 64 | 32 | 16 |  8 |  4 |  2  |  1 |  Zahlenwert
   +-----------------------------------------+
   |   hoeherwertiges   |   niederwertiges   |  Halbbyte
   +-----------------------------------------+  (BCD-Ziffer)

Die in der Bytedarstellung eingetragenen Ziffern geben die
Numerierung der einzelnen Bit's an. Das Bit 0 besitzt die
niedrigste Wertigkeit, das Bit 7 die hoechste.
                              11



Eine vorzeichenlose ganze Zahl mit der Bitfolge 01001010B kann
auch in der Form:

Z = 0*128 + 1*64 + 0*32 + 0*16 + 1*8 + 0*4 + 1*2 + 0*1 = 74

geschrieben werden.

Sollen auch negative Zahlen dargestellt werden, besitzt das
Bit 7 die Funktion des Vorzeichens.

Eine Dualzahl 10110110B kann als

Z = -1*128 + 0*64 +1*32 + 1*16 + 0*8 + 1*4 + 1*2 + 0*1 = - 74

aufgefasst werden, diese Art bezeichnet man als Zweierkomple-
ment. Damit ergibt sich ein Zahlenbereich fuer ganze vorzei-
chenlose Zahlen von 0 bis 255 und fuer vorzeichenbehaftete
Zahlen von -128 ueber 0 bis +127.

Sollen greessere Zahlen dargestellt werden, muessen 2 und mehr
Byte dafuer genutzt werden. Die Zusammenfassung von 2 Byte
wird als Wort bezeichnet, analog dazu 4 Byte als Doppelwort.

Die einzelnen Byte des Maschinenkodes werden als Dualzahlen,
d. h. als Ziffemfolgen von "0" oder "1" dargestellt. Insbe-
sondere bei grossen Programmen ergibt sich damit ein sehr
grosser Schreibaufwand, um diese Dualzahlen zu notieren.
Deshalb hat sich ein anderes Zahlensysten, das sogenannte
Hexadezimalsystem fuer die Darstellung von Zahlen und Pro-
grammen bei Mikrorechnern durchgesetzt. (Die Bezeichnung
Hexadezimalsystem ist umgangssprachlich, exakt heisst es
Sedezimalsystem.) Im Hexadezimalsystem werden 4 benachbarte
Dualziffern zusammengefasst und durch eine Hexadezimalziffer
dargestellt. Mit vier Dualziffern koennen 16 verschiedene Zu-
staende dargestellt werden. Die Zahlen "0" bis "9" sind gleich
den Dezimalzahlen, groesser als "9" werden die ersten Buch-
staben des Alphabets verwendet. Die folgende Tabelle enthaelt
eine Gegenueberstellung von Dual-, Dezimal- und Hexadezimal-
ziffern.

   DUAL          DEZ   HEX      |     DUAL         DEZ   HEX
  ------------------------------+---------------------------
                                |
   0 0 0 0        0     0       |     1 0 0 0        8    8
   0 0 0 1        1     1       |     1 0 0 1        9    9
   0 0 1 0        2     2       |     1 0 1 0       10    A
   0 0 1 1        3     3       |     1 0 1 1       11    B
   0 1 0 0        4     4       |     1 1 0 0       12    C
   0 1 0 1        5     5       |     1 1 0 1       13    D
   0 1 1 0        6     6       |     1 1 1 0       14    E
   0 1 1 1        7     7       |     1 1 1 1       15    F

Da in einem Byte (mit 8 Bit) zwei sogenannte Halbbyte zu je 4
Bit enthalten sind, kann ein Byte mit 2 Hexadezimalziffern
dargestellt werden.
                              12



Die binaere Darstellung der Dezimaizahlen von 0 bis 9 nennt
man auch BCD-Zahlen, Auch mit dieser Zahlendarstellung kann
gerechnet werden. Dabei muss aber eine Dezimalkorrektur
vorgenommen werden. Warum und wie, wird bei der Erlaeuterung
des DAA-Befehls im Befehlssatz genauer erklaert. Zur besseren
Unterscheidung zu den Dezimalzahlen verden die Hexadezimalzah-
len in Protokollen oder Drucklisten durch ein nachgestelltes
Zeichen "H" gekennzeichnet.

Nehmen wir z. B. ein Byte in Binaerdarstellung:

     0111   1011B   =  7BH   = 123
      1.     2.     Halbbyte

Dabei sind die Wertigkeiten der einzelnen Bits in einem
Halbbyte:

     3 2 1 0 Wertigkeit
     -------
     8 4 2 1 Zahlenwert

Die Umwandlung einer Hexadezimalzahl in die entsprechende
Dezimalzahl geschieht am einfachsten auf folgende Weise:
                1      0
     7BH  = 7x16 + Bx16
                1       0
          = 7x16 + 11x16
          = 123

Die Umrechnung Dezimal- in Hexadezimalzahl erfolgt nach einem
analogen Schema wie die Umrechnung Dezimal- in Dualzahl, z. B.

                                     Dez.   Hex.
  45 346  :  16  =  2 834      Rest    2      2 -----------
   2 834  :  16  =    177              2      2 --------- |
     177  :  16  =     11              1      1 ------- | |
      11  :  16  =     11             11      B ----- | | |
                                                    | | | |
                                                    V V V V
                               Hex.-Zahl:           B 1 2 2  H
                                                    =======

Um den Vorteil dieser Schreibweise deutlich werden zu lassen,
hier zum Vergleich diese Zahl in Binaerdarstellung:

     1011 0001 0010 OO1OB.

2.4.2. Logische Operationen

Mit den Dualzahlen lassen sich verschiedene logische Operatio-
nen durchfuehren. Bei den logischen Verknuepfungen werden die
Dualzahlen als vorzeichenlose, ganze Zahlen aufgefasst.
                              13


Die wichtigsten dieser Operationen sind:

- Komplementbildung (NEGATION):

  Eine Dualzahl wird in ihr Komplement ueberfuehrt, indem alle
  Bitstellen einzeln auf den entgegengesetzten Wert gebracht
  werden.

  Zahl:         0 1 0 0 1  0 1 0
  ---------------------------------
  Ergebnis:     1 0 1 1 0  1 0 1

  Diese Operation wird nur mit einer Dualzahl durchgefuehrt.

  In Stromlaufplaenen finden Sie dafuer das folgende Sinn-
  bild:
           

- UND-Verknuepfung (KONJUNKION, AND)

  Eine Konjunktion wird mit zwei Dualzahlen durchgefuehrt.
  Dabei bleibt nur in der Bitposition eine "1" stehen, in
  welcher in der ersten und in der zweiten Dualzahl eine
  "1" stehen.

  1. Zahl:     0 1 0 0 1 0 1 0
  2. Zahl:     0 0 0 1 1 1 1 1
  -------------------------------
  Ergebnis:    0 0 0 0 1 0 1 0

  Sinnbild:
           

  Zur besseren Darstellung der logischen Operationen ist es
  ueblich, sich eine beliebige Bitposition auszuwaehlen und
  in einer Wertetabelle alle moeglichen Kombinationen und
  deren Ergebnisse zu erfassen. Die Wertetabelle der Kon-
  junktion besitzt danach folgendes Aussehen (gleiche Bit-
  position vorausgesetzt):

  1. Zahl       | 2. Zahl        | Ergebnis
  -----------------------------------------
     0          |    0           | 0
     0          |    1           | 0
     1          |    0           | 0
     1          |    l           | 1

  Besonders bei komplizierten Verknuepfungen stellt die
  Wertetabelle ein sehr einfaches Hilfsmittel dar.
                              14



- NICHT-UND-Verknuepfung (NAND)

  Diese Verknuepfung stellt eine Konjunktion mit anschlies-
  sender Negation dar.
 
  1. Zahl    |  2. Zahl    |  Ergebnis
  ------------------------------------
     0       |     0       |  1
     0       |     1       |  1
     1       |     0       |  1
     1       |     1       |  0
Sinnbild:

- ODER-Verknuepfung (DISJUNKION, OR)

  Zwei disjunktiv verknuepfte Dualzahlen liefern im Ergebnis
  eine "1", wenn in der ersten oder zweiten Dualzahl in der
  jeweiligen Bitposition eine "1" steht.
 
  1. Zahl    |  2. Zahl    |  Ergebnis
  ------------------------------------
     0       |     0       |  0
     0       |     1       |  1
     1       |     0       |  1
     1       |     1       |  1
Sinnbild:

- NICHT-ODER-Verknuepfung: (NOR)

  Diese Verknuepfung stellt eine Disjunktion mit an-
  schliessender Negation dar.
 
  1. Zahl    |  2. Zahl    |  Ergebnis
  ------------------------------------
     0       |     0       |  1
     0       |     1       |  0
     1       |     0       |  0
     1       |     1       |  0
Sinnbild:

- Exklusiv- ODER bzw. (ANTIVALENZ, EXOR)

  In der jeweiligen Bitposition der Ergebnisse wird eine "1"
  eingetragen, wenn sich in dieser Bitposition die beiden
  Dualzahlen unterscheiden.
 
  1. Zahl    |  2. Zahl    |  Ergebnis
  ------------------------------------
     0       |     0       |  0
     0       |     1       |  1
     1       |     0       |  1
     1       |     1       |  0

  Sind beide Dualzahlen gleich, wird das Ergebnis auf Null ge-
  setzt. Das wird besonders verwendet, um einen bestimmten
  Zwischenspeicher, z. B. das A-Register der CPU, zu loeschen,
  indem der Inhalt des A-Registers mit sich selbst durch
  einen XOR-Befehl verknuepft wird (X0R A).
                              15


2.4.3. Arithmetische Verknuepfungen

Zu den arithmetischen Operationen gehoeren Addition und Sub-
traktion. Die Multiplikation zweier Dualzahlen kann durch
fortlaufende Addition einer Dualzahl bei gleichzeitiger Ver-
ringerung der anderen Dualzahl, bis diese Null ist, vorge-
nommen werden. Auch eine teilweise Addition, kombiniert mit
Verschiebung von Ergebnis und Operand ist ueb]ich. Die Divi-
sion kann analog dazu als eine fortlaufende Subtraktion einer
Dualzahl von einer anderen durchgefuehrt werden. Dabei wird
der Dividend solange vom Divisor subtrahiert und der Quotient
jeweils um 1 erhoeht, bis der Divisor kleiner als der Dividend
geworden ist. Der Quotient als Ergebnis enthaelt damit die An-
zahl der benoetigten Subtraktionsschritte, im Divisor ist der
Rest enthalten.

Nachfolgend die arithmetischen Operationen im einzelnen:

Es empfiehlt sich, die Beispiele mit anderen Zahlen selbst
noch einmal nachzuvollziehen.

- ADDITION:

  Die Addition zweier Dualzahlen liefert folgendes in der
  Wertetabelle sichtbare Ergebnis. Dabei wird der Uebertrag
  in der letzten Spalte in der naechsthoeheren Bitposition
  ausgewertet.

  0   +   0       =   0
  0   +   1       =   1
  1   +   0       =   1
  1   +   1       =   0  Uebertrag 1

  Sollen z. B. die Zahlen 26 und 43 miteinander addiert werden,
  ergibt das folgende Rechnung:

  26:                0 0 0 1 1 0 1 0
  43:                0 0 1 0 1 0 1 1
  Uebertraege:           1 1 1   1
  ----------------------------------

  Ergebnis:          0 1 0 0 0 1 0 1  = 69

  Werden zwei Zahlen addiert, deren Ergebnis den Zahlenbereich
  ueberschreitet, kommt es zum Üeberlauf, d. h. das ermittelte
  Ergebnis ist falsch. An der Addition der Zahlen 69 und 73
  soll das im Rechenschema gezeigt werden.

  69:                0 1 0 0 0 1 0 1   Zahlenbereich:
  73:                0 1 0 0 1 0 0 1   -128 <= x <= 127
  Uebertraege:       1           1
  -----------------------------------

  Ergebnis:          1 0 0 0 1 1 1 0   = -114

  Im Ergebnis entsteht die Zahl -114, obwohl die Addition dieser
  Zahlen zu dem Ergebnis 132 fuehren muesste. Dieser Ueberlauf
  ist dadurch charakterisiert, dass ein Uebertrag in die Vor-
                              16



  zeichenstelle ein-, aber kein Uebertrag aus der Vorzeichen-
  stelle herauslaeuft.

- SUBTRAKTION

  Die Subtraktion zweier Dualzahlen verlaeuft aehnlich der der
  Dezimalzahlen, d. h. wenn die Subtraktion einen negativen
  Wert in der Bitposition ergibt, muss von der hoeherwertigen
  Stelle etwas "geborgt" werden, es entsteht ein Uebertrag.

  Daraus resultiert folgende Wertetabelle:

  1. Zahl 2. Zahl Ergebnis

     0   -   0       =   0
     0   -   1       =   1   (0-1 => 10-1 => 1+Uebertrag)
     1   -   0       =   1           |
     1   -   1       =   0           '->geborgte 1'

  Subtrahiert man die Dualzahl 26 von der 43, so ergibt sich
  folgendes Rechenschema:

  43:                0 0 1 0 1 0 1 1
  26:                0 0 0 1 1 0 1 0
  Uebertraege:           1
  ----------------------------------
  Ergebnis:          0 0 0 1 0 0 0 1 =  17

  Subtrahiert man die Zahlen in anderer Weise, d. h. die Dual-
  zahl 43 von der 26, so kann man auch einen Vorzeichenwechsel
  beobachten.

  26:                0 0 0 1 1 0 1 0
  43:                0 0 1 0 1 0 1 1
  Uebertraege: 1<=   1 1   1 1 1 1
  ----------------------------------
  Ergebnis:          1 1 1 0 1 1 1 1 = -17

  Da hier aber sin Uebertrag sowohl in die Vorzeichenstelle
  hinein als auch ein Uebertrag aus der Vorzeichenstelle her-
  aus erfolgt, handelt es sich um keinen Ueberlauf und das
  Ergebnis ist korrekt. Dieser herauslaufende Uebertrag wird
  bei Zahlen im Wort- oder Doppelwortformat weiterverwendet.

- ZWEIERKOMPLEMENT:

  Eine Ergebnisdarstellung wie im vorangegangenen Subtrak-
  tionsbeispiel wird Zweierkomplement genannt. Jede Zahl kann
  in ihr Zweierkomplement ueberfuehrt werden, wenn diese Zahl
  zuerst in ihr Komplement umgewandelt (negiert) wird und an-
  schliessend zur niederwertigsten Bitposition eine "1" ad-
  diert wird.
                              17



  -17:               1 1 1 0 1 1 1 1
  Negation:          0 0 0 1 0 0 0 0
  Addition:                        1
  ----------------------------------
  Ergebnis:          0 0 0 1 0 0 0 1 = 17

  Das Zweierkomplement wird verwendet, um eine Subtraktion auf
  eine Addition zurueckzufuehren.

  Die Addition einer Zahl und ihres Zweierkomplements liefert
  als Ergebnis immer eine Null.

  Abschliessend noch ein Beispiel zur Multiplikation, die hier
  als eine fortlaufende Addition betrachtet werden soll.

  Es werden die Dualzahlen 9 und 5 miteinander multipliziert:

     Ausgangawerte:  5: 0 0 0 0 0 1 0 1
                     9: 0 0 0 0 1 0 0 1
                                        Multiplika-
                                        tor 5

                     9: 0 0 0 0 1 0 0 1     5
                    +9: 0 0 0 0 1 0 0 1     4
                    -------------------
                     =  0 0 0 1 0 0 1 0     3
                    +9: 0 0 0 0 1 0 0 1
                    -------------------
                     =  0 0 0 1 1 0 1 1     2
                    +9: 0 0 0 0 1 0 0 1
                    -------------------
                     =  0 0 1 0 0 1 0 0     1
                    +9: 0 0 0 0 1 0 0 1
                    -------------------
     Ergebnis:       =  0 0 1 0 1 1 0 1 = 45

  Die Multiplikation mit teilweiser Addition und Verschiebung
  kann analog zur Multiplikation von Dezimalzahlen dargestellt
  werden:

  Ausgangswerte:     0 0 0 0 1 0 0 1  *  0 1 0 1
  ----------------------------------------------
                     0 0 0 0 1 0 0 1  |  1
                   0 0 0 0 0 0 0 0    |  0 = 5
                 0 0 0 0 1 0 0 1      |  1
               0 0 0 0 0 0 0 0        |  0
  ----------------------------------------------
  Ergebnis:    0 0 0 0 0 1 0 1 1 0 1       = 45

  Bei der teilweisen Addition kann ebenfalls ein Uebertrag
  auftreten, d. h. der Zahlenbereich ueberschritten werden.
  Wenn die Kontrolle nicht in jedem Zwischensohritt vorge-
  nommen wird, ist mit fehlerhaften Ergebnissen zu rechnen.
                              18


3. Hardware des Z1013

Am konkreten Beispiel des MRB Z1013 soll in diesem Kapitel
die Arbeitsweise eines Mikrorechners erlaeutert werden. Grund-
lage dafuer bilden Stromlaufplaene des Z 1013, die Sie in der,
Anlage 16 finden.

3.1. Blockschaltbild

 _____    ___________   __________   ___________
|     |  | Betriebs- | | Arbeits- | |           |
|     |  | system    | | RAM      | |           |
|     |  | ROM       | |          | |           | <-> MBG
|     |   ----|-|----   ---|-|----  |           |
|     |       | |          | |      |           |
|     |-------   ----------   ------| Parallel- |     8-bit
| CPU |         Systembus           | E/A       |---- E/A
|     |-------| |-----| |----| |----|           |---- Schnitt
 --|--        | |     | |    | |     ----| |----      stelle
   |          | |     | |    | |         |^|
 -----    ----------  | |  -------   -----------
|     |  |          | | | |       | |           |
|Takt-|  | Bild-    | | | | Aus-  |-| Tastatur  |
|gene-|  | schirm-  | | | | gabe- |>|           |
|rator|  | steuerg. | | | | tor   |-|           |
|     |  |          | | | |       | |           |
 -----    ----------  | |  -------   -----------
              |       | |
          BAS |       | |
       |------|       | |
       |  ____|__     | |
       | | HF-   |    | |
       | | Modu- |    | |
       | | lator |    | |
       |  -------     | |
       |     |        | |
      TV-Geraet     Systemsteckverbinder

3.2. Steuerung des Mikroprozessors

3.2.1. Beschreibung der Steuersignale

Um den ordnungsgemaessen Betrieb der CPU zu gewaehrleisten,
sind bestimmte Steuersignale notwendig. Andere Signale werden
von der CPU gebildet und kennzeichnen bestimmte Zustaende
waehrend der Abarbeitung von Befehlen. Im folgenden werden
alle Steuersignale der CPU und des Systembusses beschrieben.

Signale, die mit einem Schraegstrich beginnen, sind sogenann-
te LOW-aktive Signale, die normalerweise H-Pegel fuehren und
bei ihrer Aktivierung L-Pegel zeigen.

Nach dem Signal steht in Klammern ein "A" fuer von der CPU
ausgesandte, ein "E" fuer von der CPU empfangene und ein "B"
fuer Signale, die sowohl von der CPU empfangen als auch aus-
gesandt werden koennen.

(A-Ausgabe, E-Eingabe, B-bidirektional, d. h. sowohl Ein-
als auch Ausgabe)
                              19



- A0 bis A15 (A)

  Sie bilden den 16-Bit-Adressbus. Sie werden in der CPU ge-
  bildet und bei der Arbeit mit den Speichern als Speicher-
  adresse sowie die Leitungen A0 bis A7 bei der E/A-Arbeit
  als E/A-Adresse verwendet.

- A0 bis A6 (A)

  Sie dienen zum Auffrischen dynamischer Speicher.

- D0 bis D7 (B)

  Diese Leitungen stellen den 8 Bit-Datenbus dar. Die Signale
  koennen sowohl von der CPU gebildet werden (bei Ausgabe oder
  Speicherschreiben) oder sie werden von den ausgewaehlten
  Funktionseinheiten erzeugt (bei Eingaben oder Speicherlesen).

- /MREQ (A)

  Dieses Signal wird benoetigt, um eine auf dem Adressbus aus-
  gesandte Adresse zur Speicheradresse zu erklaeren und einen
  Speicherzugriff durchzufuehren.

- /IORQ (A)

  Das Signal kennzeichnet die auf dem Adressbus anliegende
  Adresse als Adresse einer E/A-Funktionegruppe. Dabei werden
  nur die Adreseleitungen A0 bis A7 in die Auswahl einbezogen.

- /M1 (A)

  Es charakterisiert den Maschinenzyklus 1. Dieses Signal wird
  von der CPU ausgesendet und kennzeichnet in Verbindung mit
  dem Signal /MREQ, dass vom Speicher ein Befehl geholt wird.
  In Verbindung mit dem Signal /IORQ wird gekennzeichnet, dass
  von einem interrupterzeugenden Baustein (s. 4.4.) der soge-
  nannte Interruptvektor gelesen wird (Vektorlesen).

- /RD (A)

  Es wird in den angeschlossenen Funktionseinheiten ausge-
  wertet und legt die Richtung des Datentransportes als
  "Lesen", d. h. zur Eingabe in die CPU fest.

- /WR (A)

  Es kennzeichnet die Richtung des Datentransportes fuer die
  angeschlossenen Funktionseinheiten als "Schreiben", d. h.
  die CPU sendet Daten aus.
                              20



- /RFEH (A)

  Zeigt den angeschlossenen Speichereinheiten in Verbindung
  mit /MREQ, dass auf dem Adressbus eine Refresh-Informaticn
  verfuegbar ist. Diese Refresh-Information besteht aus einer
  7-Bit-Adresse (A0 bis A6), die festlegt, welche Speicher-
  zellen in den dynamischen Speichern; aufgefrischt werden
  sollen. Das Adressbit 7 kann durch den Programmierer ge-
  setzt oder rueckgesetzt werden und ist Bestandteil der Re-
  fresh-Information. Auf dem hoeherwertigen Teil des Adress-
  busses wird der Inhalt des I-Registers ausgesandt.

- /HALT (A)

  Wird von der CPU ausgesandt, wenn der soeben gelesene Be-
  fehl den Operationskode 76H hatte. Die Abarbeitung wird
  unterbrochen, der Befehlszaehler zeigt auf den naechsten
  Befehl. Die Refresh-Steuerung wird aufrechterhalten, eine
  Fortsetzung der CPU-Arbeit ist nur nach Reset oder Inter-
  rupt moeglich.

- /WAIT (E)

  Wird von der CPU zu bestimmten Zeiten abgetastet. Ist die-
  ses Signal Low, wird die Arbeit der CPU angehalten, die In-
  formationen auf dem Systembus bleiben erhalten. Anwendung
  findet dieses Signal vor allem bei der Anpassung der Verar-
  beitungsgeschwindigkeit von langsamen Funktionseinheiten,
  indem die Arbeitsgeschwindigkeit der CPU durch solche
  WAIT-Zyklen der entsprechenden Funktionseinheit angepasst
  wird. Waehrend des WAIT-Zustandes findet kein Refresh-
  Zyklus statt.

- /INT (E)

  Wird von der CPU am Ende eines Befehls abgetastet und sig-
  nalisiert, dass eine angeschlossene Funktionseinheit das
  gerade abzuarbeitende Programm unterbrechen moechte, damit
  von der CPU die Ursache dieser Unterbrechung analysiert
  und bearbeitet werden kann. Die Ursachen dieser Unter-
  brechung koennen ein notwendiger Datentransport zwischen
  CPU und Interface-Baustein sein oder eine Ereignismeldung
  aus einem zu ueberwachenden Prozess. Die Funktionseinhei-
  ten sind untereinander ueber eine sogenannte Prioritaets-
  kette miteinander verbunden, um die jeweils wichtigste
  Unterbrechung vorrangig zu behandeln. Die CPU kann ihrer-
  seits die Annahme einer Unterbrechung sperren, um z. B.
  bestimmte Programmabschnitte stoerungsfrei abzuarbeiten.
  Nach Freigabe des Unterbrechungseinganges wird die dort
  eventuell gespeicherte Unterbrechung ausgewertet.

- /NMI (E)

  Dieser Eingang stellt aequivalent zum INT-Signal eine Un-
  terbrechungsmoeglichkeit der laufenden CPU-Arbeit dar,
                              21



- /NMI (E)

  Dieser Eingang stellt aequivalent zum INT-Signal eine Un-
  terbrechungsmoeglichkeit der laufenden CPU-Arbeit dar,
  die allerdings nicht gesperrt werden kann. Die Abarbeitung
  des Unterbrechungsbehandlungsprogramms beginnt ab der Adres-
  se 66H, nachdem zuvor die Fortsetzungsadresse des gerade
  laufenden Programmes gerettet wurde.

- /RESET (E)

  Unterbricht jede weitere Arbeit der CPU, stellt einen An-
  fangszustand ein und gibt mit dem Uebergang nach H-Pegel
  die CPU wieder frei. Da das Reset-Signal meist manuell
  erzeugt wird, wird durch die Schaltung eine Verkuerzung
  dieses Signals vorgenommen, um angeschlossenen dynamischen
  Speichern die Refresh-Informationen zu garantieren.

- C (E)

  Stellt den der CPU zugefuehrten Systemtakt dar. Dieser
  Takt ist gleichzeitig in allen Funktionseinheiten verfueg-
  bar und sichert die Synchronitaet aller Baugruppen.

- /BUSRQ (E)

  Diese Leitung wird am Ende eines Befehls durch die CPU
  abgetastet. Dieses Signal kennzeichnet, dass eine ange-
  schlossene Funktionseinheit den Systembus benoetigt, um
  ihrerseits die Vorgaenge im Mikrorechner zu steuern. Die
  CPU unterbricht das laufende Programm und setzt ihre Aus-
  gaenge in den hochohmigen Zustand.
  Gleichzeitig wird ein Quittungssignal von der CPU aktiviert,
  welches den hochohmigen Zustand anzeigt. Dieser  bleibt so-
  lange bestehen, wie das Signal BUSRQ aktiv ist, d. h.
  L-Pegel fuehrt. Danach wird das Quittungssignal von der CPU
  abgeschaltet, alle Ausgaenge nehmen wieder ihr erforder-
  hohes Potential ein und die Abarbeitung wird fortgesetzt.
  Waehrend des hochohmigen Zustandes kann die CPU keine Re-
  fresh-Informationen aussenden.

- /BUSAK (A)

  Ist das Quittungssignal der CPU, welches den hochohmigen
  Zustand kennzeichnet und damit der den Systembus anfor-
  dernden Funktionseinheit den Zugriff erlaubt.

Weiterhin umfasst der Systembus folgende Signale, die nicht
von der CPU ausgesandt oder empfangen werden:

- /MEMDI

  Stellt ein Systemsignal dar, mit dem angeschlossene Funk-
  tionseinheiten den Zugriff auf Speichereinheiten auf der
  Leiterplatte der Grundausbaustufe verhindern koennen.
                              22



  Dieses Signal wird erzeugt, wenn Speichererweiterungen die
  festgelegten Speicheradressen des Grundgeraetes ebenfalls
  verwenden. Es wird verhindert, dass nicht mehr als eine
  Speichereinheit den Datenbus benutzen kann.

- /IODI

  Stellt analog zum MEMDI-Signal eine Moeglichkeit dar,
  bestimmte Adressbereiche auszublenden und Konflikte auf
  dem Datenbus bei der E/A-Arbeit zu verhindern.

- /IEI und /IEO

  Werden zur Bildung der Prioritaetskette der interrupter-
  zeugenden Funktionseinheiten benoetigt. Jeweils der Ausgang
  (IEO) der hoeheren Prioritaet wird dem Eingang (IEI) der
  naechstfolgenden Prioritaetsstufe zugefuehrt (vergleiche
  auch Abschnitt 4.4 Interruptbehandlung).
  Ein Interrupt kann von einer Funktionseinheit nur ausge-
  loest werden, wenn das zugefuehrte Signal IEI H-Pegel
  fuehrt. Gleichzeitig wird das abgegebene Signal IEO auf
  L-Pegel gehalten. Damit wird sichergestellt, dass immer nur
  die in der Prioritaetskette am weitesten am Anfang einge-
  reihte Funktionseinheit eine Unterbrechung ausloesen kann.

- /BAI und /BAO

  Stellen analog zu den Signalen IEI und IEO die Signale einer
  Prioritaetskette dar, die alle Funktionseinheiten verbindet,
  die eine Anforderung auf den Systembus (BUSRQ) stellen keen-
  nen. Fuer die Benutzer des MRB Z1013 werden diese Signale
  kaum Bedeutung haben.

- RDY

  Stellt ein aehnliches Signal wie WAIT dar, um langsame Funk-
  tionseinheiten an die CPU anzupassen. Es kennzeichnet die
  Kommunikationsbereitschaft einer Funktionseinheit und kann
  mit der WAIT-Leitung verbunden werden. Im Gegensatz zu den
  meisten anderen Steuersignalen ist es nicht Low-aktiv.

3.2.2. Takterzeugung

Der Taktgenerator wird durch drei Gatter von A6, dem Kondensa-
tor C7.1 und den Widerstaenden R38 und R39 gebildet. Stabili-
siert wird die Taktfrequenz durch den Schwingquarz Q1. Dieser
schwingt mit einer Frequenz von 8 MHz. Der Takt wird dem Binaer-
teiler A3 zugefuehrt, an dessen Ausgaengen die Taktfrequenzen
von 4 MHz, 2 MHz und 1 MHz anliegen. Der Z 1013.01 arbeitet
standardmaessig mit 1 MHz Systemtakt, der Z 1013.12 mit 2 MHz.

Hinweis: Das Umruesten des Z 1013.01 auf 2 MHz fuehrt zum Er-
loeschen der Garantie. Die Taktfrequenz 4 MHz ist nicht zuge-
lassen!
                              23



Je nach Lage von El erhaelt die CPU den Takt mit der Frequenz
entsprechend folgender Zuordnung:

Lage     Systemtakt

E1.1       1 MHz
E1.2       2 MHz

Mittels des Widerstandes R52 erfolgt noch die erforderliche
Pegelanpassung zur Speisung der CPU (A7) und des E/A-Schalt-
kreises A45.

Dieser Takt realisiert die Synchronitaet aller Zeitablaeufe.

3.2.3 RESET-Logik

Um einen definierten Anfangszustand der CPU zu erreichen,
ist die RESET-Steuerung erforderlich. RESET kann von 3 Stellen
ausgeloest werden:

1. Taste TAl auf der Leiterplatte (RESET-Taste)
2. Externe Tastatur ueber den Steckverbinderanschluss
   X2:A02
3. A20 des Systemsteckverbinders X1

Eine spezielle Schaltung sorgt dafuer, dass der Datenbustrei-
ber A1 inaktiv wird, d. h. er wird vom Prozessor getrennt.
Unmittelbar an der CPU werden die Datenleitungen ueber die
Widerstaende R44 ... R51 auf Masse, d. h. L-Pegel gelegt.

Da die CPU nach aktiven RESET den Befehlszaehler auf die
0000H einstellt, werden nun auf dieser Adresse die Daten
00H gelesen. Das bedeutet fuer den Prozessor die Ausfuehrung
eines sogenannten Leerbefehls (NOP, s. 4.3.15). Bei dessen
Ausfuehrung wird der Befehlszaehler um eins erhoeht. Auf die-
se Art und Weise zaehlen die Adressen hoch, bis die Adresse
des Betriebssystems erreicht wird und das  Signal /CS akti-
viert wird, das den Datenbus mit Hilfe der Logik wieder frei
gibt. Als naechstes wird jetzt der erste Befehl des Betriebs-
systemprogrammes gelesen und dieses wird abgearbeiet.

Damit die Laenge des Reset-Impulses ven der Laenge der Betae-
tigung unabhaengig wird, wurde ein Monoflop verwendet. Damit
wird eine zeitgerechte Aufffrischung der dynamischen Speicher
gewaehrleistet. Einige periphere Schaltkreise besitzen keinen
Reset-Anschluss. Sie werten das alleinige Auftreten des Sig-
nale /M1 als Resetimpuls. Damit auch diese Schaltkreise in
einen definierten Anfangszuetand versetzt werden koennen,
wurden die Signale /RESET und /M1 zum Signal /PM1 verknuepft,
welches die Ruecksetzfunktion ausfuehrt.
                              24


3.3 Speichereinheiten

3.3.1. Anschluss

Der Anschluss der Speicherschaltkreise ist abhaengig vom Typ.
Im MRB Z1013 werden drei Arten verwendet

In einem PROM U 2616 bzw. ROM U 2316 (A14) ist das Monitor-
programm enthalten. Dieser Schaltkreis besitzt eine Kapazitaet
von 2048 (=2K) Speicherplaetzen, wobei bei jedem Zugriff acht
Bit parallel gelesen werden. Um diese 2 KByte zu adressieren,
sind 11 Adressleitungen (A0 ... A9) notwendig.

Die verwendeten statischen Schreib-Lese-Speicher besitzen
eine Kapazitaet von 1024 (=1K) Plaetzen, wobei jeweils
4 Bit gleichzeitig angesprochen werden. Erst zwei dieser
Schaltkreise besitzen deshalb eine Kapazitaet von 1 KByte,
wobei 10 Adressleitungen (A0 bis A9) ausreichen.

Mit Hilfe dieser 11 bzw. 10 Adressbits wird jeweils nur ein
Byte ausgewaehlt. Die verbleibenden Adressleitungen werden
nun dazu verwendet, um einen oder mehrere Speichereschalt-
kreise auszuwaehlen, damit nur eine Information, und zwar
die richtige, bearbeitet werden kann. Die Auswahl des be-
treffenden Speicherschaltkreisee erfolgt mit dem Adressde-
koder A23, der aus einem Bereich von 8 KByte fuer jeden
einzelnen 1 KByte-Bereich eine Auswahlleitung bereitstellt.
Mit dem Gatter A 24/25 wird dieser Bereich auf den oberen
Adressraum eingestellt. Dazu werden mit A25 die betreffen-
den Adressleitungen mit dem Speicherauswahlsignal MREQ ver-
knuepft und damit der Adressdekoder frei gegeben, d. h.
konkret

MREQ  ADR
      15 14 13  12 11 10     9 8 7 6 5 4 3 2 1 0
   0  1  1  1                Diese Leitungen werden an alle
                             Speicherschaltkreise gelegt
                0  0  0  --->/DK10 = E000H = RAM
                0  0  1  --->/DK11 = E400H
                  ...
                0  1  1  --->/DK13 = EC00H = Bildwieder-
                                             holspeicher
                1  0  0  --->/DK14 = F000H = Mit Dioden D9
                1  0  1  --->/DK15           ODER verknuepft
                                             fuer 2K-Monitor

Die so gebildeten Leitungen zur Bausteinauswahl (chip-select,
CS) werden an den CS-Eingang der Speicherschaltkreise gefuehrt
und geben diese frei.
                              25



Die Bildung der Auswahlsignale kann ueber das Signal MEMDI am
Steckverbinder X1 von ausserhalb verhindert werden. Das wird
dann sinnvoll sein, wenn der MRB Z1013 als Bestandteil eines
Mikrorechnersysteme betrieben wird und in diesen Adressbe-
reichen bereits Speichereinheiten angeschlossen sind.

Bei der Verwendung der dynamischen 16 KByte Speicher U 256
bzw. K 565 RU3 oder K 565 RU6 (A33 bis A40) ergibt sich fol-
gende Adressauswertung:

ADR: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
      0  0 Diese Adressbits werden intern zur
           Auswahl des Speicherplatzes ausgewertet
     Legt den Bereich ab Adresse 0000H fest.

Da diese Speicher pro Platz nur 1 Bit speichern, muessen hier
8 Schaltkreise parallel an den Datenbus angeschlossen werden.
Der Anschluss ist ausserdem komplizierter, weil diese Schalt-
kreise nur 6 Adresseingaenge haben. Die Uebernahme der
14-stelligen Adresse erfolgt deshalb zeitlich gestaffelt.

Zuerst werden bei Auswahl dieses Speicherbereiches die sieben
niederwertigen Adressbits in den Speicherschaltkeis ueber-
nommen. Dazu wird das Signal RAS (ROW ADRESS STROBE, Reihen-
adressuebernahmeimpuls) am Schaltkreis aktiviert. Anschlies-
send werden die sieben hoeherwertigen Adressbits auf die
Schaltkreisanschluesse geschalten und mit dem Signal CAS
(COLUMN ADRESS STROBE, Spaltenadressuebernahmeimpuls) diese
in die Schaltkreise eingetragen.

Die Erzeugung des Signals /RAS ist durch das Speicheranforde-
rungssignal /MREQ gegeben. Das negierte Signal MREQ gibt ein
FlipFlop (A17) frei. Mit der naechsten steigenden Flanke des
Systemtaktes wird das FlipFlop umgeschalten  steuert den
Adressleitungsumschalter A28/41 (Multiplexer) und gibt ein
zweites Flip-Flop frei, das mit der absteigenden Flanke des
Systemtaktes das Signal CAS erzeugt und, sofern ein Zugriff
in diesen Adressbereich (A14=A15=0) erfolgt, das Signal /CAS
an den Schaltkreisanschluessen aktiviert. War der Zugriff zum
Speicher nicht in dem Bereich der dynamischen RAM's oder wurde
das Signal /REFRESH als Zeichen der Speicherauffrischungszeit
aktiv, so wird zwar das Signal /RAS gebildet, aber kein Signal
/CAS. Damit werden in den dynamischen RAM's nur Auffrischungs-
aktivitaeten ausgeloest.

In Verbindung mit den Signalen /RD oder /WR, die ebenfalls an
die Speicherbausteine gefuehrt werden, werden entweder Daten
oder Befehle gelesen und auf den Datenbus geschaltet oder die
auf dem Datenbus vorhandenen Daten im Speicher eingetragen.

Im Anhang ist ein Schema der Speicherverteilung innerhalb des
gesamten Adressraumes zu finden (Anlage 2).
                              26


3.3.2. Zusammenarbeit mit der CPU

Wenn die CPU auf den Speicher zugreifen moechte, sei es, um
Befehle oder Daten zu holen oder um etwas abzuspeichern, ist
das durch folgende Signale gekennzeichnet:

-  /MREQ (Speicheranforderung) wird Low, d. h. aktiv und zeigt
   damit den Zugriff auf den Speicher an.
-  A0 bis A15 (Adressen) geben den konkret adressierten
   Speicherplatz an.
- /WRt (Schreiben) wird aktiv, wenn die CPU etwas in den
   Speicher schreiben moechte.
- /RD (Lesen) wird beim Lesen von Daten oder Befehlen aktiv.
- /M1 (Befehlsholezyklus) kennzeichnet in Verbindung mit /MREQ
  und /RD das Holen des Operationskodes eines Befehls (s. Ka-
  pitel 4
)
- D0 bis D7 enthalten entweder die abzuspeichernde oder gele-
  sene Information.

Die detaillierten Zeitablaeufe koennen der Anlage 10 entnom-
men werden, wo die Taktdiagramme fuer den Speicher-Schreib-
und Speichen-Lese-Zyklus angegeben werden.

3.4. Ein- und Ausgabebaugruppen

3.4.1. Parallel E/A-Baustein U 855 PIO

3.4.1.1. Beschreibung der Steuersignale

Aus der Bezeichnung des Bausteins geht eigentlich seine Ver-
wendung bereits hervor. Er dient bevorzugt zur parallelen
Ein- bzw. Ausgabe, d. h. zum Beispiel, dass alle acht Bit
des Datenbusses gleichzeitig ausgegeben werden koennen.

Man kann natuerlich auch Daten seriell, d. h. bitweise nach-
einander aus- oder eingeben. Dazu ist aber ein gesondertes
Programm notwendig.

Im MRB Z1013 kommt ein Baustein U 855 zum Einsatz. Ein Teil
davon wird von den E/A-Baugruppen des Z1013 selbst genutzt
(s. 3.4.2., 3.4.3.). Ueber den anderen Teil koennen Sie frei
verfuegen. Dazu muessen Sie allerdings die Anschluss- und
Funktionsweise einer PIO kennen. Das soll Inhalt dieses Ab-
schnittes sein.

Die Anschlussbelegung des U 855 finden Sie in der Anlage 9.
Es ist zu erkennen, dass die PIO rechnerseitig an den Daten-
bus angeschlossen wird und prozesseitig zwei Kanaele A und B,
auch Tore oder Ports genannt, besitzt.
                              27


Ausserdem verfuegt er ueber eine Reihe von Steuersignalen,
deren Bedeutung hier kurz erlaeutert werden soll:

Es gelten die gleichen Vereinbarungen wie im Abschnitt 3.2.1.

- B/A SEL (E)
  Liegt dieser Eingang auf "L", so wird das Tor A, liegt er
  auf "H", dann das Tor B freigegeben. Ueblicherweise wird
  hieran die Adressleitung der CPU A1 gefuehrt.

- C/D SEL (E)
  Der U 855 ist ein programmierbarer E/A-Baustein, d. h. es
  muss vor der eigentlichen Nutzung fuer den Datentransfer
  zwischen Rechner und Prozess mitgeteilt werden, was er
  machen soll. Dazu gibt es eine Reihe von Steuerwoertern,
  die die Befehle der PIO darstellen. Diese Programmierung
  der PIO wird im allgemeinen als Initialisierung bezeichnet.
  Lesen Sie dazu den Abschnitt 3.4.1.2.
  Erhaelt dieser Eingang "L"-Begel, so sind die auf dem Daten-
  bus befindlichen Informationen Daten, bei "H"-Pegel Steuer-
  woerter. Ueblicherweise liegt C/D SEL an der Adressleitung
  A0.

- /CS (E)
  Hiermit wird die PIO fuer den Datentransfer freigegeben.
  Die Bildung dieses Bausteinauswahlsignals erfolgt analog
  zur CS-Dekodierung fuer die Speichereinheiten, nur dass
  fuer die E/A-Dekodierung die Adressen AO bis A7 (Niederwer-
  tiger Teil des Adressbusses) ausgewertet werden. Es koennen
  also maximal 256 (2 hoch  8) E/A-Tore angeschlossen werden.

- /IORQ (E)
  Dient in Verbindung mit den anderen Signalen zur Kennzeich-
  nung der E/A-Anforderung. Dieser Eingang wird direkt an den
  entsprechenden Ausgang der CPU gelegt.

- /M1 (E)
  Mit aktiven Ml bei nicht aktiven RD und IORQ wird die PIO
  in einen definierten Anfangszustand zurueckgesetzt. Ge-
  schieht dies nicht, arbeitet die PIO unkontrolliert. An-
  schliessend muss die Initialisierung erfolgen.
  Ausserdem synchronisiert dieses Signal in Verbindung mit
  IORQ die Interruptbehandlung durch die CPU. Damit beide Funk-
  tionen gewaehrleistet werden koennen, muss dieses M1 aktiv
  bei aktivem RESET der CPU oder bei Aussendung des CPU-M1
  sein. Diese ODER-Verknuepfung wird durch die Bildung des
  /PM1 realisiert, welches an das PIO-M1 angeschlossen wird.

- RD (E)
  Wird die Datenbusinformation in den PIO geschrieben, muss
  RD inaktiv sein. Ist RD auf "L", legt die PIO die vom Pro-
  zess gelesenen Daten, entsprechend den mit B/A SEL ausge-
  waehlten Tor, auf den Datenbus.
                              28



- C (E)
   Systemtakt analog zur CPU,

- /ASTB (E), /BSTB (E)
  Diese Steuerleitungen werden zur Quittung des erfolgten Da-
  tenaustausches verwendet. Zur Ausgabe wird diese Leitung
  (Low-aktiv) vom angeschlossenen Geraet aktiviert und damit
  die Daten uebernommen. Bei der Eingabe wird mit dieser Lei-
  tung angezeigt, dass die anstehenden Daten in die PIO ueber-
  nommen werden koennen. Der Uebergang des Signals /STB aus
  dem aktiven Zustand in den H-Pegel kann zur Bildung des
  Interruptsignals verwendet werden.

- ARDY (A), BRDY (A)
  Diese Steuerleitungen teilen dem angeschlossenen Geraet mit,
  dass bei der Ausgabe Daten bereitstehen, waehrend bei der
  Eingabe dieses Signale dem Geraet die Bereitschaft zur Da-
  tenuebernahme signalisiert.

- /INT (A)
  Dieses Signal liegt parallel zu allen anderen interrupt-
  ausloesenden E/A-Baugruppen am INT-Eingang der CPU und
  meldet der CPU, dass eine Unterbrechung des aktuell lau-
  fenden Programms erwuenscht wird. Ursache dafuer kann
  eine Meldung vom Prozess sein, da hier eine Warnung ausge-
  geben wurde, die unbedingt eine Behandlung erfordert.

- /IEI (E), /IEO (A)
  Hiermit werden die Prioritaeten bei der Behandlung von Un-
  terbrechungsanforderungen durch Bildung einer Prioritaets-
  kette (daisy chain).
         _______________         _______________
        | E/A-Baugruppe |       | E/A-Baugruppe |
        |       1       |       |       2       |
5P -----| IEI       IEO |-------| IEI       IEO |---->
         ---------------         ---------------

  Die in einer solchen Kaskade am weitesten links stehende
  Baugruppe hat den groessten Vorrang. Wird an dieser E/A-
  Einheit eine Unterbrechung angemeldet, dann wird diese Kette
  unterbrochen (der Schalter oeffnet), so dass fuer die nach-
  folgenden Einheiten ein Interrupt gesperrt ist.

  Intern besitzt das Tor A gegenueber Tor B hoehere Priori-
  taet.

3.4.1.2. Programmierung

Am Beispiel der im MRB Z1013 verwendeten E/A-Tore soll die
Bildung der Auswahladresse erlaeutert werden. Fuer die Er-
gaenzung der Chip-select Signale wird ein Dekoder A27 einge-
setzt, der mit dem E/A-Anforderungssignal die ersten acht
Ausgaenge freigibt. Die Festlegung der jeweiligen aktiven
IOSEL-Leitung erfolgt dann mit den Adressen A2, A3 und A4.
                              29


Mit dem im vorigen Abschnitt zu den 0/13 SEL- ;4nd B/ASEL-
Signalen gesagten ergibt sich folgende Adreseverteilung:

ADR:    7  6  5  4  3  2  1  0
                             C/D SEL
                             0, wenn Information Daten
                             1, wenn Information Steuerworte
                          B/A SEL
                           0  , wenn Tor A
        beliebig, z.B.     1  , wenn Tor B
        0  0  0  0  0  0  ==>IOSELO, PIO
                 0  1  0  ==>IOSEL2, Tastaturspaltentreiber

Damit ergeben sich die Adressen:

    Tor A (Anwenderport) - Daten:      00H
                         - Steuerwort: 01H
    Tor B (Systemport)   - Daten:      02H
                         - Steuerwort: 03H

Im Z1013 sind diese Adressen nicht eindeutig, da die Adress-
bits A7, A6, A5 auch 111 sein koennten. Da diese nicht ausge-
wertet werden, spielt das aber keine Rolle,

Die Arbeitsweise der PIO wird durch die Steuerworte festge-
legt, die im folgenden erlaeutert werden sollen.

1. Betriebsartenauswahl

   Bit:        7   6   5   4   3   2   1   0
   Belegung:                   1   1   1   1  Kennzeichen
                       beliebig
               0   0   Betriebsart    0 :    Byteausgabe
               0   1                  1 :    Byteeingabe
               1   0                  2 :    Byteein/ausgabe
               1   1                  3 :    Bitein/ausgabe

   Betriebsart 0:
   Die durch die CPU bereitgestellten Daten werden waehrend
   des durch sie veranlassten Ausgabezyklus in das ange-
   sprochene Ausgaberegister geschrieben. Mit RDY zeigt die
   PIO dem Prozess an, dass Daten zur Uebernahme in PIO be-
   reitstehen. Dieses RDY wertet das periphere Geraet aus,
   uebernimmt daraufhin die Daten und teilt mit STB der PIO
   die Datenuebernahme mit. Anschliessend loest die PIO ein
   Interrupt aus, um der CPU das Ende der Datenausgabe zu
   melden.

   Betriebsart 1:
   Die PIO teilt mit H-Pegel an RDY dem externen Geraet die
   Bereitschaft zur Datenuebernahne mit. Mit STB=L schreibt
   das Geraet die Daten in das entsprechende Eingaberegister.
   RDY=L sperrt eine weitere Eingabe bis die Daten durch eine
   Interruptbehandlung von der CPU uebernommen werden.
                              30



   Betriebsart 2:
   Diese bidirektionale Betriebsart ist nur mit dem Kanal A
   moeglich. Mit Kanal B ist dann nur noch Betriebsart 3
   moeglich, da fuer die Abwicklung des Datentransfers alle
   vier Quittungssignare ARDY, ASTB, BRDY und BSTB benoetigt
   werden. ARDY und ASTB steuern die Ausgabe, die beiden an-
   deren die Eingabe.

   Betriebsart 3:
   In dieser Betriebsart kann innerhalb eines Tores jedem
   Bit eine beliebige Datenflussrichtung zugeordnet werden.
   Auf diese Weise koennen Stellsignale und Statusmeldungen
   fuer Prozess-Steuerungen aus- bzw. eingegeben werden.

2. Ein-/Ausgabe Maskenwort
   Soll die Bitstelle eine Eingabeleitung sein, muss an die-
   ser Stelle eine 1 stehen, bei Ausgabe eine 0. Da dieses
   Steuerwort kein eigenes Kennzeichen besitzt, muss es un-
   mittelbar auf das Betriebsauswahlsteuerwort folgen. Ist
   in diesem Betriebsart 3 festgelegt worden, liest die PIO
   das naechste Byte immer als E/A-Maskenwort.

3. Interruptvektor
   Bit: 7   6   5   4   3   2   1   0
   Belegung:                        0 Kennzeichen
        niederwertiger Teil des Interruptvektors
        (s. 4.4.)

4. Interruptsteuerwcrt
  Bit:      7   6   5   4   3   2   1   0
  Belegung:                 0   1   1   1  Kennzeichen
                        0   , naechstes Steuerwort ist kein
                              Maskenwort
                        1   , naechstes Steuerwort wird als
                              Maskenwort erkannt
                    0   , Interrupt bei H -> L Flanke
                    1   , Interrupt bei L -> H Flanke
                0   , die im folgenden Steuerwort festgelegten
                      Interrupt ausloesenden Bit sind ODER-
                      verknuepft, d. h. eine dieser Leitungen
                      kann bereits Interrupt ausloesen
                1   , UND verknuepft, d. h. alle festgelegten
                      Stellen muessen gleichzeitig die mit Bit
                      5 festgelegte Interruptbedingung erfuel-
                      len
             0  , Interrupt freigeben
             1  , Interrupt gesperrt

5. Interruptmaskenwort
   Die Bitztelle der Eingabeleitungen, die Interrupt ausloe-
   sen sollen, werden durch eine 0 gekennzeichnet, die kein
   Interrupt ausloesen sollen durch eine 1.
                              31



6. Interrupt Ein/Aus
   Bit:    7 6   5   4   3   21  0
   Belegung: beliebig    0   01  1   Kennzeichen
           0  ,Interrupt gesperrt
           1  ,Interrupt freigegeben

3.4.2. Tastaturanschluss

Elektrisch stellt die Tastatur nichts anderes als eine Matrix
von Schaltern in folgender Anordnung dar:

Die Zeilen dieser Anordnung sind mit den Widerstaenden R11
bis R14 auf "H"-Pegel gelegt. Diese Leitungen sind mit dem
Tor B, Bit 0 bis 3, des PIO verbunden, welche fuer Eingabe
programmiert sind. Wird keine Taste gedrueckt, liest die
PIO auf allen vier Leitungen eine 1.

Die acht Spaltenleitungen der Tastatur sind an ein separates
Ausgabetor, das durch die Bausteine A47 (Speicher fuer Spal-
tennummer) und A46 (1 aus 8 Spaltenleitungen) gebildet wird,
angeschlossen. Die Adresse dieses Tores ist 08H. Die Spal-
tennummer steht im niederwertigen Halbbyte des Datenbusses
binaer verschluesselt. Bei einer Ausgabe werden diese vier
Bit entschluesselt und legt so eine Spalte auf "L"-Potential.
Wird in dieser aktivierten Spalte nun eine Taste betaetigt,
wird der L-Pegel auf die entsprechende Zeilenleitung durch-
gereicht. Der Rechner liest jetzt eine 0 in der entsprechen-
den Bit stelle.

Aus der ausgegebenen Spaltennunmer und der eingelesenen Zei-
lennummer ermittelt das Tastaturbedienprogramm des Betriebs-
systems den rechnerinternen Kode der gerade betaetigten Taste.
Der Z1013 benutzt den sogenannten ASCII-Kode (s. Anlage 7).

3.4.3. Magnetbandanschluss

Von der auf der Leiterplatte installierten PIO wird eine Bit-
leitung (PB 7) zur Ausgabe eines seriellen Datenstromes ge-
nutzt. Die erforderliche Parallel/Serienwandlung wird soft-
warenaessig realisiert. Das ausgegebene Signal wird ueber
einen Spannungsteiler R27/28 zur Pegelanpassung abgeschwaecht;
mit einem Kondensator C1.9 werden die Flanken verrundet, da-
mit ein etwa sinusfoerniges Signal in Magnetbandgeraet aufge-
zeichnet werden kann.
                              32


Das Ausgangssignal eines Magnetbandgeraetes wird gleichspan-
nutigsfrei einem Operationsverstärker A48 zugefuehrt. Das
auf TTL-Pegel verstaerkte Signal wird an einen Anschluss der
PIO (PB 6) geleitet, Durch entsprechende Software wird dieser
Anschluss staendig abgefragt und aus dem ankommenden seriel-
len Datenstrom durch Serien/Parallelwandlung die ursprueng-
liche Information wieder zurueckgeweonnen.

3.4.4. Bildschirmsteuerung

Die Bildschirmsteuerung wandelt die vom Rechner auszugebende
Information in ein CCIR-kopatibles Fernsehsignal, indem sie
zusaetzlich die notwendigen Synchron- und Dunkeltastimpulse
erzeugt. Um diesen Vorgang prinzipiell zu verstehen, sind ei-
nige Bemerkungen ueber den Aufbau des Fernsehsignals notwendig.

Beim Schreiben eines Fernsehbildes laeuft ein Elektronen-
strahl, auf den die Bildinformation aufmoduliert wurde, ueber
einen fluereszierenden Schirm. Fuer eine Zeile benoetigt er
eine Zeit von 64 µs. Das entspricht einer Zeilenfrequenz
von 15,625 kHz. Ein Zeilensynchronimpuls veranlasst den
Strahlruecklauf, wobei der Strahl dunkelgesteuert wird.
Um ein Flimmern der Anzeige zu vermeiden, muss das ganze Bild
mit einer Frequenz von mindestens 25 Hz wechseln.

Da beim Fernsehen in dieser Zeit zwei Halbbilder geschrieben
werden, im Z1013 aber ein Bild zweimal, ergibt sich hier
eine Bildwechselfrequenz von 50 Hz.

Ein sogenannter Bildsynchronimpuls loest dann jeweils einen
Strahlruecklauf zum oberen Bildrand aus. Die Bildschirmsteue-
rung des MRB Z1013 arbeitet nach folgendem Prinzip:

Die gesamte Erzeugung des fernsehgerechten Signals, des soge-
nannten BAS-Signals, wird durch die Zaehlkaskade ohne Mitar-
beit der CPU gesteuert. Die Kaskade A3, A4, A5 und A12 wird
mit dem 8 MHz-Takt des Taktgenerators gespeist. Eine Teilung
durch 2 hoch 9 liefert z. B. die Zeilenfrequenz.

Aus dem Bildaufbau wissen wir bereits, dass eine Zeile aus
32 (=2 hoch 5) Zeichen besteht. Um diese abzuzaehlen, werden
die 5 niederwertigen Adressen des Bildwiederholspeichers (BWS)
A30/31 genutzt. Die hoeherwertigen Adresseingaenge zaehlen die
Zeichenzeilen eines Bildes. Da die Zaehlkaskade immer zyklisch
durchzaehlt, wird auch der BWS zyklisch ausgelesen.

Das aus dem BWS gelesene Byte, das den ASCII-Kode entsprechend
Anlage 7 des darzustellenden Zeichens enthaelt, steht als
hoeherwertiger Adressteil am Zeichengemerator A44. Mit den
drei Ausgaengen des Linien pro Zeichenzaehlers, die an die
niederwertigen Adresseingaenge von A44 gehen, werden nacheinan-
der die Bildpunktzeilen an den nachfolgenden Parallel/Serien-
Wandler A21/22 uebergeben. Hier wird das uebernommene Bitmu-
ster mit dem 8 MHz-Takt seriell herausgeschoben. Dieser seriell
Datenstrom bildet die Bildinformation des Bild-, Austast- und
Synchronsignals (BAS-Signal).
                              33



Mit den Gattern der Schaltkreise A9, A10, A13 und A20 werden
aus dem Zaehlfolgen entsprechend der Fernsehnorm  die Synchron-
impulse dekodiert.

Ausserdem wird durch diese Schaltung gesichert, dass fuer der
Strahlruecklauf das Signal dunkelgesteuert wird, da dieser
sonst auf dem Bildschirm sichtbar waere. Diese Impulse werden
mit der Bildinformation gemischt und ergeben so das BAS-Sig-
mal.

In einem HF-Modulator wird das BAS-Signal auf eine HF-Traeger-
frequenz, die auf den Fernsehkanal 3 abgestimmt ist, aufmodu-
liert. Der Ausgang dieses Modulators kann nun direkt mit dem
Antenneneingang des Fernsehgeraetes verbunden werden.

Wie gelangen aber nun in diese selbstaendig arbeitende Einhel
die darzustellenden Daten? Ueber die Adroesmultiplexer (A29,
A42, AlS) kann die CPU einen Platz im BWS adressieren. Dazu
wird mit einem Speicherbereichauswahlsignal der Multiplexer
umgeschaltet. Ueber den Datentreiber A43 kann die CPU den
BWS beschreiben oder lesen.

Damit ist auch deutlich gemacht, dass der BWS wie ein norma-
ler Speicher behandelt werden kann. Die Anfangsadresse ergibt
sich analog zu dem ROM-Auswahlsignal zu EC00H. Welche Position
die einzelnen Speicherplaetze auf dem Bildschirm einnehmen,
ist in der Anlage 8 schematisch dargestellt.

3.5.  Stromversorgung

Fuer den Betrieb des MRB Z1013 sind drei verschiedene Ver-
sorgungsspannungen noetig.

Zur Versorgung aller Logikschaltkreise wird eine Spannung
von + 5 V, die im folgenden mit 5P bezeichnet wird und etwa
mit 1 A belastbar ist, verwendet. Die beiden anderen Span-
nungen von + 12 (12P) und - 5 V (5N) werden fuer die Speicher-
einheiten sowie einige Spezialfaelle benoetigt. Sie werden
nicht so stark belastet.

Um diese Spannungen zu erzeugen, besitzt der MRB Z1013 ein
eigenes Netzteil. Eine zugefuehrte Wechselspannung von ca.
12 V wird mittels Dioden in Einweggleichrichtung gleichge-
richtet. An den Ladekondensatoren C2.1, C3.1 und C5.1 sind je-
weile Rohspannungen verfuegbar. Eine Ausnahme bildet die
Erzeugung der Rohspannung fuer die 12P. Hier wird mit einer
Spannungsverdopplerschaltung gearbeitet.

Die Erzeugung der 5P wird mit einem integrierten Festspan-
mungsregler A2 vorgenommen, der auf einem Chip alle benoetig-
ten Bauteile enthaelt und kaum eine Aussenbeschaltung benoe-
tigt. Lediglich ein Kondensator am Ausgang ist erforderlich.
Da eine starke Belastung dieses Bauelementes erfolgt, wird
eine angemessene Kuehlung benoetigt.
                              34



Die Spannung 5N wird mittels einer Z-Diode D4 stabilisiert.
Diese einfache Widerstands/Z-Dioden-Kombination ist bei dem
geringen Leistungsbedarf ausreichend.

Um die Spannung 12P zu erzeugen, wird eine verdoppelte und
anschliessend mit einer Widerstands/Z-Dioden-Kombination
stabilisierte Spannung der Basis eines Transistors V2 zuge-
fuehrt. Dadurch ist am Emitter dieses Transistors eine stabi-
lisierte Spannung verfuegbar, die staerker belastet werden
kann.

3.6. Bussystem

Die wichtigsten Signale des Mikrorechners Z1013 sind an den
Rand der Leiterplatte gefuehrt und dort fuer den Anschluss
von Steckverbindern vorbereitet. Dabei haben diese Anschluesse
folgende Bedeutung:

Xl:  Systembus (Steckverbinder: StL 304-58 TGL 29331/03)
     Enthaelt alle Signale des Systembusses und ist elektrisch
     kompatibel zum K1520-Systembus. (Anlage 6)

X2:  Pruefkamm und Tastaturanschlusspunkte (hier wird entspre-
     chend den Hinweisen von Pkt.1.2.4.1. und 1.4. der Bedie-
     nungsanleitung das Tastaturbandkabel oder die Buchsenlei-
     ste BuL 202-26 TGL 29331/04 angeloetet)

X3:  Wechselspannungszufuehrung (Flachsteckverbinder)

X4:  PIO Kanal A (Steckverbinder: BuL 402-15 TGL 29331/04)
     Hier werden die Anschluesse des Kanals A der PIO heraus-
     gefuehrt. Ausser den Steuerleitungen ARDY und /ASTB des
     Kanals A wurden auch die des Kanals B (BRDY und /BSTB)
     auf den Steckverbinder gelegt, um die Betriebsart bi-
     direktionale E/A realisieren zu koennen.

X5:  Anschluss Magnetbandgeraet (Diodenbuchse)

X6:   HP-Ausgang des Modulators (Koaxialbuchse)

Die genaue Zuordnung der einzelnen Signale zu den jeweiligen
Anschluessen ist der Anlage 6 zu entnehmen.
                              35


4. Der Befehlssatz des Mikroprozessors U880

Dieser Abschnitt soll das Verstaendnis der Arbeitsweise und der
Programmierung des Mikrorechnerbausatzes Z1013 erleichtern. An-
hand von Beispielen erfolgt eine Erlaeuterung der verschiedenen
Mikroprozessor-Befehle und deren Wirkungsweise und Anwendungs-
moeglichkeiten. Der folgende Ueberblick soll prinzipielle Ei-
genschaften und Besonderheiten des Mikroprozessors U 880 auf-
zeigen:

- 64 K Byte Adressraum fuer Speicher
- 256 Ein-/Ausgabekanaele
- 3 Doppelregister mit Alternativregistersatz
- 2 Indexregister mit je 16 Bit Breite
- 1 Refreshregister (ermoeglicht das automatische Auffrischen
  externer dynamischer RAM-Speicher)
- 1 maskierbarer, 1 nichtmaskierbarer Interrupt
- Architektur des Mikroprozessors U 880:

Bit  76543210 76543210        76543210 76543210
    -------------------      -------------------
AF  |   A    |    F   |  AF' |   A'   |   F'   |
    -------------------      -------------------
BC  |   B    |    C   |  BC' |   B'   |   C'   |
    -------------------      -------------------
DE  |   D    |    E   |  DE' |   D'   |   B'   |
    -------------------      -------------------
HL  |   H    |    L   |  HL' |   H'   |   L'   |
    -------------------      -------------------
Hauptregistersatz        Alternativregistersatz
  15  ...  8  7  ...  0
-----------------------
| Stackpointer     SP |
-----------------------
| Befehlszaehler   PC |
-----------------------
| Indexregister    IX |
-----------------------
| Indexregister    IY |
-----------------------
|      I  |0|       R |
-----------------------

Speicheradressen:    Flagregister F:
        ________             ---------------------------
 0000H |________|            | S Z  X  H  X  P/V  N  C |
 0001H |________| maximal    ---------------------------
.      | .      | 64 K Byte
.      | .      | = 65 536   S Signum (Vorzeichen)
.      | .      | Speicher-  Z Zero
.      |_.______| plätze     H Half-Carry
0FFFEH |________|            P/V Parity/Overflow
0FFFFH |________|                (Paritaet,Ueberlauf)
                             C Carry
                             X nicht verwendet
                              36



   Kanaladressen:

   0...255  256 Eingaenge
            oder
   0.. .255 256 Ausgaenge

  Befehlsvorrat:

  158 Grundbefehle

4.1. Befehlsschluessel

Der Mikroprozessor erhaelt seine Befehle vom Speicher ueber
den 8 Bit-Datenbus binaer verschluesselt zugefuehrt. Fuer
den Programmierer ist diese Darstellung im Binaercode
meistens zu detailliert und erschwert die Programmierung; es
werden deshalb Hexadezimalkodes mit entsprechend zugehoeriger
Mnemonik des Maschinenbefehls verwendet. Als Mnemonik
bezeichnet man Pseudonamen der Befehle. Diese Pseudonamen
bzw. Abkuerzungen geben gleichzeitig Auskunft ueber die
Funktion der Befehle und erleichtern damit die Programmierung.
Die Uebersetzung in den Maschinenkode erfolgt dann anhand der
Tabelle der Befehlsliste oder durch ein Programm, genannt
Assembler.
Bemerkung: Bei hexadezimaler Verschluesselung muss der
fuehrenden Ziffer, falls diese ein Buchstabenzeichen ist,
eine Null vorangestellt werden. Dadurch wird eine
Verwechselung mit Bezeichnern vermieden.
Bei der Programmierung des U 880 werden die Maschinenbefehle
im allgemeinen hexadezimal verschluesselt, wobei das 'H' und
die fuehrende '0' vor Buchstabenzeichen innerhalb des Maschi-
nenkodes weggelassen werden.

z.B.   00 = NOP
       40 = LD C,H
       FF = RST 38H

Wie bereits erwaehnt, koennen Maschinenbefehle aus einem oder
mehreren Bytes bestehen. Man spricht dann von 1-Byte-,
2-Byte-Befehlen und so weiter. Jedem Byte ist in
Abhaengigkeit seines Platzes im Befehl und seiner Kodierung
eine bestimmte Bedeutung zugeordnet worden.

4.1.1. 1-Byte-Befehle

Diese Befehle bestehen nur aus dem Operationskode (im
weiteren als OPC bezeichnet). Da es sich fast ausschliesslich
um Registeroperationen, also Operationen innerhalb der
Prozessorregister handelt, ist in diesem Byte auch die
notwendige Registeradresse enthalten. Bei der Behandlung der
Adressierung wird noch einmal naeher darauf eingegangen.

 1.  Byte
     OPC
                              37



Beispiel:

Befehls- Maschinen- Quellkode   Kommentar
zaehler  kode
---------------------------------------------
1000     47         LD B,A      ;Lade B mit A
1001     23         INC HL      ;HL:=HL+1
1002     40         LD B,B
1003     81         ADD C

Die Form des Beispiels soll als Normativ eines Programm-
protokolls dienen. Es empfiehlt sich, diese uebersichtliche
Darstellung bei der Erstellung von Programmen zu nutzen, da
sich in dieser tabellenartigen Zusammenstellung alle Angaben
widerspiegeln, die zu einem Programm gehoeren. Die letzte
Spalte bietet die Moeglichkeit, einen Kommentar unterzubrin-
gen, um noch nach laengerer Zeit den Inhalt eines Programms
nachvollziehen  zu koennen. Kommentarzeilen werden mit einem
Semikolon gekennzeichnet. Der Inhalt sollte kurz, aber
eindeutig sein.

Wird nur ein Byte als Operationskode verwendet, wuerden sich
256 Moeglichkeiten ergeben. Man nutzt davon aber nur 252.
Die verbleibenden vier Kombinationen sind fuer folgende
Aufgaben reserviert worden:
Beim U 880 werden zwecks Erweiterung und Ausbau des
Befehlsumfangs vier Hexadezimalkodes (0CBH, 0DDH, 0EDH, 0FDH)
der Befehlsliste als sogenannte "Signalbytes" festgelegt.
Diese Signalbytes stehen grundsaetzlich an erster Stelle des
Befehls (1.Byte). Sie kennzeichnen aber keinen konkreten
Befehl, sondern kuendigen eine spezielle Gruppe von Befehlen
an. Die Konkretisierung des Befehle erfolgt durch zusaetzlich
ein oder mehrere Bytes. Auf diese Art ist es moeglich, durch
ein Signalbyte weitere 256 Befehle zu kennzeichnen und somit
den Befehlsumfang stark zu erweitern. Der U 880 bietet
folgende Erweiterungen des Befehlsschluessels mit den
Signalbytes:
  Signalbyte   CB:    Bitmanipulationen, Verschiebebefehle
  Signalbyte   DD:    Umschaltung von HL nach IX
  Signalbyte   ED:    Blocktransport- und Suchbefehle
  Signalbyte   FD:    Umschaltung von HL nach IY

4.1.2. 2-Byte-Befehle

Diese Befehle koennen jetzt einen zweiten OPC, einen Direkt-
wert oder eine Sprungweite (s. auch Sprungbefehle) im 2. Byte
des Befehle enthalten.

1. Byte 2. Byte
  OPC     OPC
  OPC     n      n=Direktwert
  OPC     c      c=Sprungweite

Ist das 2. Byte ein OPC, so stellt das 1. Byte das Signalbyte
dar.
                              38



Beispiele:
Befehls- Maschinen- Quellkode   Kommentar
---------------------------------------------
1000     DD 23      INC IX      ;IX:=IX+1
1002     FD 23      INC IY      ;IY:=IY+1
1004     CB 40      BIT 0,B
1006     3E 10      LD A,10H    ;Lade A mit 16
1008     36 FF      LD(HL),0FFH ;Lade den von HL adres-
                         ;sierten Speicherplatz mit 255
100A     28 04      JRZ 06       ;Springe, wenn Z=1 ist,
                    ;um 6 Byte nach vorn, PC: PC + 6 - 2

Bei der Berechnung der Sprungweite wird die aktuelle Position
des Befehlszaehlers (PC), der ja bereits auf den naechsten
Befehl zeigt, durch Subtraktion einer 2 beruecksichtigt. Im
Quellkode beziehen sich die Sprungweiten immer auf den
Befehlsanfang, also den PC-Stand, der zum betreffenden
Befehl gehoert. Es empfiehlt sich, bei der Programmerstellung
im Quellkode symbolische Sprungmarken zu verwenden, denen
bei der Uebersetzung in Maschinenkode ein konkreter Wert
zugewiesen wird. Wie das gemacht wird, zeigen spaetere
Beispiele.

4.1.3. 3-Byte-Befehle

Diese Befehle enthalten einen Operationskode und einen 16-Bit-
Direktwert (nn). Dieser Direktwert stellt einen normalen Da-
tenwert oder eine Adresse dar, wie er z.B. in Lade- oder
Sprungbefehlen benoetigt wird. Ebenfalls ist eine Kombination
von Signalbyte und OPC sowie von Signalbyte und 8-Bit-Direkt-
wert (n) fuer einige Befehle moeglich.

1. Byte 2. Byte 3. Byte
OPC     N(nn)   H(nn)     (bei Ladebefehlen)
OPC     N(nn)   H(nn)     (Sprungadresse)
OPC     OPC       n       (wobei der 1. OPC ein Sig-
                           nalbyte  DD oder FD
                           sein kann)

Die Angabe "N(nn)" bezeichnet den niederwertigen Teil, d.h.
die letzten 8 Bit des 16-Bit-Direktwertes, "H(nn)" demgemaess
den hoeherwertigen Teil, d.h. die ersten 8 Bit.

Wert:  |   H  |  N  |
        15...8 7...1
                              39



Beispiele:
Befehls- Maschinen- Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     21 00 F7   LD HL,0F700H ;Lade HL mit 0F7OCH
1003     C3 2D F0   JMP 0F02DH   ;Springe zur Adresse
                                 ;0F02DH
1006     CD B7 E1   CALL OF1B7H  ;Sprung ins Unterprogr.
1009     DD 46 3F   LD B,(IX+3FH)
100C     FD 72 00   LD (IY+0),D

4.1.1. 4-Byte-Befehle

In den 4-Byte-Befehlen sind im wesentlichen Kombinationen
bereits bekannter Befehle mit einem oder zwei Signalbyte
enthalten. Eine Uebersicht ueber diese Befehle ist der Anlage
zu entnehmen. Zwei Beispiele sollen hier genuegen.

Beispiele:

Befehls- Maschinen-   Quellkode  Kommentar
zaehler  kode
------------------------------------------
1000     DD 21 00 00  LD IX,0    ;Lade IX mit 0
1004     DD CB 0F 1E  RR (IX+0FH)

Die im Anhang enthaltene Befehlsliste fuer den Mikroprozessor
U 880 enthaelt uebersichtlich alle Befehlsschluessel hexadezi-
mal kodiert mit Hinweisen fuer die Verwendung des Signalbytes
bzw. der Verschiebung 'd' (siehe auch 'Indexierte Adressier-
ung'). Diese Befehlsliste dient bei der manuellen Programmie-
rung im Maschinenkode als rationelles Hilfsmittel.

4.2. Adressierung

4.2.1. Registeradressierung

Die Angabe von Registeroperanden (also von Registern des
Notizblockspeichers im U 880) erfolgt implizit im Operations-
Byte durch sogenannte Kurzadressen. Fuer die Adressierung von
maximal acht allgemeinen Registern sind im OPC-Byte zweimal
3-Bit-Stellen (sowohl fuer das Quellregister als auch fuer
das Zielregister) notwendig. Bei der Angabe der Kurzadressen
fuer U880-Register gilt also:

Register     A   B   C   D   E   H   L   (HL)
Kurz-
adresse      7   0   1   2   3   4   5   6
(binaer)    111 000 001 010 011 100 101 110
                              40



Doppelregister     BC     DE    HL    AF oder SP
(binaer)           00     01    10    11

Die Angabe von Operanden, die sich im Hauptspeicher befinden,
kann auf verschiedene Weise erfolgen. Der Zugriff auf eine
bestimmte Speicherstelle (beim U 880 ist eine 16-Bit-Adresse
erforderlich) erfolgt durch Bereit stellen der entsprechenden
Adresse zu dem Zeitpunkt, wo der Maschinenbefehl diese benoe-
tigt.

4.2.2. Direktwertadressierung

Der Zugriff zum Speicher erfolgt mittels der im Befehl kom-
plett angegebenen Speicheradressen. Diese steht im mnemo-
nischen Befehl immer in Klammern.

z. B.: Der unbekannte 8-Bit-Wert K soll mittels direkter
       Adressierung vom Speicherplatz mit der Adresse
       3000H in das A-Register geholt werden. Danach soll
       diese Konstante auf den Speicherplatz mit der
       Adresse 3010H gebracht werden.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     3A 00 30     LD A,(3000H) ;A:=(3000)
1003     32 10 30     LD (3010H),A ;(3010H):=A=K

4.2.3. Registerindirektadressierungng

Bei der indirekten Adressierung erfolgt der Speicherzugriff
durch Angabe eines Doppelregisters im Maschinenbefehl, wobei
im Doppelregister die Adresse fuer den Speicherzugriff geladen
sein muss (Registerpaare HL, BC, DE sind moeglich).

z. B.: Der unbekannte 8-Bit-Wert K soll wie im oben genannten
       Beispiel mittels indirekter Adressierung von Speicher-
       platz 3000H in den Speicherplatz 3010H umgespeichert
       werden. Zunaechst laedt man die Adresse des Speicher-
       platzes, von der der Wert K geholt werden soll, in das
       Registerpaar BC und die Zieladresse in das Register-
       paar HL.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     01 00 30    LD BC,3000H ;Quelladresse
1003     21 10 30    LD HL,3010H ;Zieladresse
1006     OA          LD A,(BC)   ;A:=(3000H)
1007     77          LD (HL),A   ;(3010H):=A=K
                              41



Anmerkung: Zur indirekten Adressierung wird gern das Doppel-
register HL zur Adressenbereitstellung eingesetzt; man
schreibt auch:
      (HL)= M (englisch: Memory = Gedaechtnis, Speicher)

Dann wuerde die letzte Zeile des obigen Beispiels lauten:

1007     77          LD M,A      ;= LD (HL),A

4.2.4. Indexierte Adressierung

Soll der Speicherzugriff mittels indexierter Adressierung
erfolgen, so wird im Maschinenbefehl ein sogenanntes In-
dexregister (IX, IY) und eine Verschiebung 'd' als vor-
zeichenbehaftete Konstante angegeben. Die Adressenbildung
fuer den Speicherzugriff erfolgt durch Summierung der im
jeweiligen Indexregister enthaltenen Grundadresse und der
Verschiebung 'd'. Die Verschiebung 'd' kann Werte von
-128 bis +127 annehmen. Bei Verwendung einer negativen
Verschiebung wird diese von der Grundadresse subtrahiert.

z. B.: Der 8-Bit-Wert K soll wie im oben genannten Bei-
       spiel mittels indexierter Adressierung umgeladen
       werden. Ins Indexregister IX wird die Adresse
       3000H geladen.
 
Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     DD 21 00 30  LD IX,3000H
1004     DD 7E 00     LD A,(IX+0)   ;A:=(3000H),d=0
1007     DD 77 10     LD (IX+16),A  ;(3010H):=A,
                      ;da IX=3000H und d=10h=16

Die indexierte Adressierung wird verwendet, um einen ein-
fachen Zugriff zu in Tabellenform gespeicherten Daten zu er-
halten. Dazu wird der Anfangspunkt der Tabelle in das Index-
register geladen, die Verschiebung 'd' entspricht dann der
konkreten Tabellenposition.

4.3. Maschinenbefehle und ihre Bedeutungen

Im folgenden Abschnitt werden die entsprechenden Befehlsgrup-
pen naeher erlaeutert und an Beispielen die Funktionsweise
untermauert.

4.3.1. Ladebefehle

Bei den Ladebefehlen werden prinzipiell die Byte- und Doppel-
byte-Ladebefehle unterschieden. Die Datenbewegung erfolgt
stets nur zwischen Speicher und Prozessor bzw. innerhalb des
Prozessors zwischen den Registern. Die Flage werden nicht be-
einflusst (Ausnahmen bilden nur die Befehle LD A,I und LD
A,R).
                              42


Allgemeiner Aufbau der Ladebefehle:
[MARKE:] LD Ziel  ,  Quelle  [;KOMMENTAR]

Die eingeklammerten Angaben sind wahlfrei, sie koennen vor-
handen sein, muessen aber nicht.
Beispiele fuer Byte-Ladebefehle:
(d.h. die transportierten Daten umfassen ein Byte)
Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     3E 3A        LD A,3AH    ;A: =3AH
1002     57           LD D,A      ;D: =3AH
1003     46           LD B,(HL)
1004     1A           LD A,(DE)
1005     02           LD (BC),A
1006     DD 70 00     LD (IX+0),B ;B wird auf
         ;IX+d adressierten Speicherplatz gela-
         ;den
1009     DD 4E 7F     LD C,(IX+127)
100C     ED 57        LD A,I      ;das Interruptre-
         ;gister I wird in A geladen, Stand
         ;von IFF 2 in das Flag P/V
100E     ED 5F        LD A,R        ;das Refreshre-
         ;gister wird in das A-Register geladen

Beispiele fuer Doppelbyte-Ladebefehle  (d. h. die transpor-
tierten Daten umfassen 2 Byte):

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     01 34 12     LD BC,1234H  ;B:=12H, C:=34H
1003     2A 34 12     LD HL,(1234H)
1006     ED 43 34 12  LD (1234H),BC
100k     DD F9        LD SP,IX

Es ist verstaendlich, dass Doppelbyte-Ladebefehle auf Grund
des 8-Bit-Batenbusses nur byteweise abgearbeitet werden, wobei
zunaechst das niederwertige und danach das hoeherwertige Byte
geladen wird.

Einen Sonderfall der Boppelbyte-Ladebefehle bilden die soge-
nannten Kelleroperationen, diese werden aber spaeter beschrie-
ben.

4.3.2 Byte- und Doppelbyte-Zaehl-Befehle

Diese Befehlsgruppe dient dem Erniedrigen bzw. Erhoehen von
Registerinhalten oder Speicherinhalten um jeweils den Wert 1.
                              43


Beispiele fuer Zaehlbefehle:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     3C           INC A        ;A:=A+1
1001     34           INC (HL)     ;(HL):=(HL)+1
1002     03           INC BC       ;BC:=BC+1
1003     DD 23        INC IX
1005     0D           DEC C        ;C:=C-1
1006     DD 35 00     DEC (IX+0)   ;(Ix+0):=(1X+0)-1
1009     DD 2B        DEC IX       ;IX:=IX-1

Die Byte-Zaehlbefehle beeinflussen das Z-Flag. Ist das Resul-
tat des Befehls im behandelten Byte identisch 0, so wird das
Z-Flag auf "1" gesetzt, sonst bleibt es "0". Die Doppelbyte-
zaehlbefehle boeinflussen keine Flags.

Beispiel: Laden von 3 Speicherstellen mit 00,01,02 ab Adresse
3000H

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     3E 03        LB A,3       ;Anzahl Speicherpl.
1002     21 00 30     LD HL,3000H  ;1. Adresse laden
1005     75       Ml: LD (HL),L    ;Speicherpl. laden
1006     23           INC HL       ;Adresse und Wert
                                   ;um 1 erhoehen
1007     BD           CMP L        ;Vergleich L mit A
1008     20 FB        JRNZ M1-#    ;Ruecksprung zu Ml,
                                   ;wenn L noch nicht 3

4.3.3. Arithmetische Befehle

Beim U 880 ist nur die Addition und die Subtraktion von Bytes
und Doppelbytes (16-Bit-Worte) moeglich.
Beispiele fuer arithmetische Befehle:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     80           ADD B        ;A:=A+B
1001     66 3E        ADD 3EH      ;A:=A+3EH
1003     86           ADD (HL)     ;A:=A+(HL)
1004     88           ADC B        ;A:=A+B+CY
1005     CE 0F        ADC OFH      ;A:=A+0FH+CY
1007     92           SUB B        ;A:=A-D
1008     DD 9E 04     SBC (IX+4)   ;A:=A-(IX+4)-CY
                              44



Die arithmetischen Operationen laufen prinzipiell in folgender
Form ab:

A := A + Operand s

Hierbei ist die Konstruktion ":=" als "ergibt sich aus" zu in-
terpretieren: A ergibt sich aus A plus Operand s. Diese Be-
fehlsgruppe beeinflusst das Flagregister vollstaendig. Die
Wirkungsweise der Flag-Bits laesst sich guenstig bei Zahlen-
bereichsueberschreitungen nach Ausfuehrung der Operationen
zeigen:

Beispiel:
            A:= -128
            ADD B     ;(B=127,-128,-127)
            B = 127   B = -128    B = -129
 
A alt   = 1000 0000   1000 0000   1000 0000
+s      = 0111 1111   1000 0000   1000 0001
-------------------------------------------
A alt+s = 1111 1111  10000 0000  10000 0001

CY-F lag
neu     = 0          1           1
Z neu   = 0          1           0
--------------------------------------------
A neu   =  1111 1111  0000 0000   0000 0001

Beim Ueberlauf wird das CY-Flag=1, d. h. das Ergebnis der
Addition ist falsch.

Fuer die Doppelbytearithmetik gilt mit gewissen Besonder-
heiten das oben genannte.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     09           ADD HL,BC    ;HL:=HL+BC
1001     ED 7A        ADC HL,SP    ;HL:=HL+SP+CY
1003     19           SBC HL,DE
1004     DD 09        ADD IX,BC

Falls bei der ADD-Operation ein Ueberlauf entsteht, wird das
Carry-Flag gesetzt (auf "1"). Bei ADC und SBC wird das Flagre-
gister vollstaendig neu bestimmt. Anwendungsgebiet dieser Be-
fehlsgruppe ist insbesondere die sogenannte Adressarithmetik,
d. h. wenn mit Adressen gerechnet wird.
                              45


4.3.4. Vergleichsbefehle

Einen Sonderfall der Arithmetik-Befehle bilden die Vergleichs-
befehle. Es wird eine Subtraktion des A-Registerinhaltes mit
dem jeweiligen Operanden ausgefuehrt, allerdings werden im
Ergebnis der Operation nur die Flags geaendert, der A-Register
inhalt bleibt unveraendert.

Beispiele fuer Vergleichsbefehle:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     B8           CMP B        ;A-B=?
1001     FE 38        CMP 38H      ;A-38H=?
1003     FD BE 05     CMP (IX+5)   ;A-(IX+5)=?

Die Flagbeeinflussung funktioniert nach folgender Tabelle:

                          Z   CY
ist A>s, dann ist A-s>0 : 0   0
ist A=s, dann ist A-s=0 : 1   0
ist A<s, dann ist A-s<O : 0   1

(s ist der entsprechende Operand)

In der Praxis schliessen sich i.a. an Vergleichsbefehle
entsprechende Verzweigungsoperationen oder bedingte Unter-
programmaufrufe in Abhaengigkeit vom Z- oder/und vom CY-
Flag an (siehe unter 'Bedingte Sprungbefehle').

4.3.5. Logische Befehle

Die logischen Befehle des U 880 umfassen das UND, das ODER und
das EXKLUSIV-ODER. Die Wirkungsweise wurde im Punkt 2.4 aus-
fuehrlich erlaeutert. Die logische Verknuepfung erfolgt stets
mit dem A-Register und kann mit B, C, D, E, H, L, (HL), A, n,
(IX+d) und (IY+d) erfolgen. Das Ergebnis der logischen Opera-
tion steht nach deren Ausfuehrung immer im A-Register.
Nachfolgend einige Beispiele:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
------------------------------------------
1000     A0           AND B        ;A:=A UND B
1001     AE           XOR (HL)     ;A:=A XOR (HL)
1002     F6 55        OR 55H       ;A:=A OR 55H

Spezialfall:
1004     AF           XOR A        ;CY:=O, Z:=O,
                      ;P:=1, A:=00H!!!
                              46



Das Flag-Register wird bei diesen Operationen neu bestimt:

 Carry-Flag ist stets 0
 Zero-Flag entsprechend dem A-Registerinhalt
 Sign-Flag entsprechend dem Bit 7 des A-Registers
 Paritaets-Flag entsprechend der Anzahl der 1-Bits des
 Ergebnisses (P=1, wenn die Anzahl der 1-Bits gerad-
 zahlig ist)

4.3.6. Spezielle arithmetische Hi1fsoperationen

DAA  ; Dezimalkorrektur bei BCD-Verarbeitung

CPL  ; Komplementieren des A-Registers (Einerkomplement)
       A:=/A entspricht einer bitweisen Negation

NEG  ; Negieren des A-Registers (Zweierkomplement>
       A:=-A entspricht A:=/A+1

CCF  ; Komplementieren des Carry-Flags, CY:=/CY
SCF  ; Setzen des Carry-Flags, CY:=1

Fuer eine effektive Verarbeitung von Dezimalzahlen koennen
diese direkt durch Addition und Subtraktion verarbeitet
werden. Dabei koennen, wie dem nachfolgenden Beispiel zu
entnehmen ist, unkorrekte Ergebnisse auftreten (Pseudo-
ergebnisse). Deshalb wurde der DAA-Befehl zur Erkennung
von Pseudoergebnissen und zur anschliessenden Korrektur
nach arithmetischen Operationen bereitgestellt. Der DAA-
Befehl kann naoh folgenden Befehlen verwendet werden:

ADD, ADC, INC, SUB, SBC, DEC, NEG

Fuer die Funktion des DAA-Befehls uebernimmt das Carry-Flag
CY fuer das hoeherwertige Halbbyte des A-Registers {H(A)}
und das Half-Carry-Flag H fuer das niederwertige Halbbyte
des A-Registers {N(A)} die Ueberwachungsfunktion, d. h.
ein Uebertrag aus dem niederwertigen Halbbyte steht im
H-Flag, der aus dem hoeherwertigen im CY-Flag.
Ein Beispiel soll die Wirkungsweise des DAA-Befehls ver-
deutlichen: In jedem Halbbyte steht eine Dezimalzahl im
zugelassenen Wertebereich von 0.. .9.
Die Korrektur nach Additionen erfolgt in der Form:
   N(A) > 9 oder H =  1 ===> A:=A+06H
   H(A) > 9 oder CY=  1 ===> A:=A+60H
Bei Subtraktionen erfolgt die Korrektur in folgender Form:
(N-Flag = 1)

    N(A) > 9 oder H = 1 ===> A:=A-06H
    H(A) > 9 oder CY= 1 ===> A:=A-60H
                              47



Zahlenbeispiel: Addition zweier zweistelliger Dezimalzahlen
                A:=99, B:=39, A:=A+B ?
 
     A:   1001 1001 = 99        99
     B:   0011 1001 = 39       +39
----------------------------------
A:=A+B:   1101 0010 = D2 falsch !!
          CY=0 H=1!

DAA: +06H 0000 0110 = 38
     +60H 0110 0000 = 60
----------------------------------
     A:   0011 1000 = 38
          CY=1  H=0          = 138

Ergebnis: Es entsteht eine dreistellige BCD-Zahl, die sich zu
          zwei Stellen aus dem A-Registerinhalt und als drit-
          te Stelle aus dem Carry-Bit (CY=1) ergibt:
          ( CY, H(A), N(A) ) = (138)

Auf die anderen Hilfsoperationen soll hier nicht weiter ein-
gegangen werden. Ihre Bezeichnung erlaeutert die Funktion
genuegend.

4.3.7. Befehle zur Bit-Manipulation

Diese Befehlsgruppe erlaubt den Einzelbit-Test, das definier-
te Setzen bzw. Ruecksetzen ausgewaehlter Bits von Registern
des Prozessors oder der durch den Inhalt der Register HL, IX
und IY adressierten Speicherplaetze.

Der Aufbau und die Funktion eines Bit-Test-Befehls laesst
sich wie folgt allgemein beschreiben:
BIT i,s;  Bit-Test-Operation, Testergebnis ist ueber
          Z-Flag auswertbar; Z:=1, wenn das Bit i des
                                   Registers 's' = 0 ist,
                             Z:=0, wenn das Bit i = 1 ist
          0 <= i <= 7
Operanden 's' = A, B, C, D, E H, L, (HL), (IX+d), (IY+d)

Befehle zum Ruecksetzen einzelner Bits haben den Aufbau 'RES
i,s' und Befehle zum Setzen 'SET i,s' . Sie beeinflussen keine
Flags. Mit dem Befehl 'RES 7,A' wird das Bit 7 des A-Regi-
ter auf den Wert 0 gesetzt, mit 'SET 4,B' das Bit 4 auf den
Wert 1.

4.3.8 Verschiebebefehle

Mit den Verschiebebefehlen erfolgt im entsprechenden Regi-
ster entweder eine Rechts- oder eine Linksverschiebung um
eine Dualstelle, d. h. um ein Bit. Die Besonderheiten der
verschiedenen Verschiebebefehle gehen aus den Darstellun-
gen der einzelnen Befehle hervor.
                              48


Fuer alle Operanden 's' gilt:

s = A, B, C, D, E, H, L, (HL), (IX+d), (IY+d)

Linksverschieben um eine Dualstelle

RLC s ; Linksverschieben mit Setzen des Carry-Flag's

             |---------------------|
       __    |      _________      |
      |CY| <-+-----|7       0|<----|
       --           ---------

RL s       ; Linksverschieben ueber das Carry-Flag

|----------------------------------|
|      __           _________      |
|<----|CY| <-------|7       0|<----|
       --           ---------

SLA s       ; Linksverschieben durch Carry-Flag

       __           _________
      |CY| <-------|7       0|<----0
       --           ---------

RLCA        ; wie RLC A, aber ausser dem Carry-Flag wird das
              Flagregister nicht beeinflusst.

RLA;        ; wie RL A, aber ausser dem Carry-Flag wird das
              Flagregister nicht beeinflusst.

Rechtsverschiebung um eine flualstelle

RRC s       ; Rechtsverschiebung mit Setzen des Carry-Flags

      |----------------------|
      |       _________      |      __
      |----->|7       0|-----+-----|CY|
              ---------             --

RR s        ; Rechtsverschiebung ueber das Carry-Flag

      |------------------------------------|
      |       _________             __     |
      |----->|7       0|---------->|CY|--->|
              ---------             --

SRA s      ; Rechtsverschieben mit Setzen des Carry-Flags
             (arithmetische Rechtsverschiebung)

              _________             __
       ----->|7       0|---------->|CY|
      |       |--------             --
       -------

SRL s       ; Rechtsverschieben mit Setzen des Carry-Flags
              (logische Rechtsverschiebung)

              _________             __
      0----->|7       0|---------->|CY|
              ---------             --

RRCA        ; wie RRC A, ausser Carry wird aber das Flag-
              register nicht beeinflusst.

RRA         ; wie RR A, ausser Carry wird aber das Flag-
              register nicht beeinflusst.
                              49



Beispiel:     Ein beliebiger Inhalt des A-Registers soll nach
              rechts verschoben werden, bis Bit 0 des A-Regi-
              sters = 1 ist. Wenn das A-Register geloescht
              war, sollen keine Verschiebungen stattfinden.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     B0           OR A         ;Z = 1, wenn A = 0
                                   ;ist
1001     28 0D        JRZ END-#    ;Abbruch des
                      ;Programms, wenn A = 0
1003     CB 3F    Ml: SRL A        ;Rechtsverschiebung
                                   ;durch CY
1005     30 FC        JRNC M1-#    ;Ruecksprung zu Ml
                      ;wenn CY=0 ist, also das herausge-
                      ;schobene Bit eine 0 enthielt
1007     CB 17        RL A         ;wenn Bit 1,
                      ;muss es aus CY wieder in das A-Regi-
                      ;ster zurueck
...
1010     76      END: HALT

Mit einer Verschiebung laesst sich z. B. ein Steuerbit aus dem
Bit 0 oder Bit 7 ins CY-Flag schieben und abtesten, ohne die
anderen Bits zu zerstoeren.
Weitere Anwendungsmoeglichkeiten ergeben sich fuer die Arith-
metik. Beispielsweise laesst sich der SRA-Befehl als Division
durch 2 oder der SLA-Befehl als Multiplikation mit 2 einset-
zen.

Ein Sonderfall der Verschiebungsoperationen ist die Verschie-
bung um vier Dualstellen.
Linksverschiebung um vier Dualstellen

RLD   ;    Der Befehl wirkt zwischen A-Register und dem durch
           HL indirekt adressierten Speicheroperanden.
            __________________
           |                  |
   ________|__        ________v__
A:|7   4|3   0| (HL):|7   4|3   0|
   --------^--        --|-^---|--
           |            | |   |
            ------------   ---
 
Zahlenbeispiel:

   A: 3F                A: 33
         ==> RLD ==>
(HL): 3C             (HL): CF
                              50



Rechtsverschiebung um vier Dualstellen

RRD     ; der Befehl wirkt ebenfalls nur zwischen A und (HL)
            ____________   ___
           |            | |   |
   ________|__        __v_|___v__
A:|7   4|3   0| (HL):|7   4|3   0|
   --------^--        --------|--
           |                  |
            ------------------

4.3.9 Sprungbefehle

Grundsaetzlich werden bedingte und unbedingte Spruenge unter-
schieden.

- Unbedingte Spruenge:

Bei Erkennen des Sprungbefehls wird vom Prozessor der Befehls-
zaehler entweder mit der im Adressteil des Befehl angegebenen
Sprungadresse geladen (absolute Sprungadresse) oder der Be-
fehlszaehler wird um eine Konstante e veraendert (realtive
Sprungweite). Die Konstante e wird im Befehl mit angegeben
und liegt im Wertebereich von -128 <= 127. Die Angabe der
absoluten Sprungadresse kann indirekt oder indiziert erfol-
gen. Relative Sprungbefehle bzw. indirekt adressierte Spruen-
ge benoetigen weniger Speicherraum, sind aber bei manueller
Programmierung ohne Assembler schwer zu beherrschen.

Allgemein:

JMP sadr  ; Befehlszaehler PC nimmt den Wert 'sadr' an.
JR e      ; Befehlszaehler PC wird um den Wert e veraendert.
            PC:=PC+e (Vorwaerts- und Rueckwaertsspruenge
            sind moeglich)
JMP (xx)  ; Befehlszaehler PC nimmt den Wert an, der im
            Registerpaar xx enthalten ist.
Registerpaare 'xx' = HL, IX, IY

Die Berechnung der Sprungweite ist mit entsprechender Sorg-
falt durchzufuehren.

Die Sprungweite ist eine Differenz von Adressen: Zieladresse
minus die Adresse des Befehls, der dem Sprungbefehl folgt.
Dabei ist zu beachten, dass ein Relativsprungbefehl immer 2
Byte lang ist. Von der CPU wird prinzipiell nach dem Lesen des
Befehls der PC auf den Beginn des physisch naechsten, abzuar-
beitenden Befehls gestellt, es sei denn, bei der Abarbeitung
des eben gelesenen Befehls stellt sich heraus, dass der PC
geaendert werden muss (bedingter Sprung). Relativspruenge
beziehen sich dann dabei auf die Adresse des nachfolgenden
Befehls. Dieser Umstand ist bei der Sprungweitenberechnung
unbedingt zu beachten.
                              51


Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     21 00 10     LD HL,1000H  ;Zaehler laden
1003     75       M1: LD M,L
1004     2C           INC L
1005     20 FC        JRNZ M1-#
1007     24           INC H
...                                ;Programmfort-
...                                ;setzung

Sprungweitenberechnung fuer den Sprungbefehl auf PC = 1005H:

     Zieladresse:   1003H
 Absprungadresse: - 1007H
 ------------------------
       Differenz:  0FFFCH

Es wird nur das niederwertige Byte der Differenz verwendet,
also in diesem Falle 0FCH. Man erkennt ausserdem noch folgen-
des:

Der Betrag der Sprungweite ist groesser 7FH (Bit 7 = 1), das
heisst, dass rueckwaerts gesprungen werden muss. Rueckwaerts
in dem Sinne, dass der PC um den Absolutbetrag der Sprungwei-
te 's' vermindert wird. Die Sprungweite 's' ist eine vor-
zeichenbehaftete Konstante.

- Bedingte Spruenge:

Bedingte Spruenge beziehen sich auf den Zustand der durch
vorangegangene Operationen entsprechend veraenderten Flags.
Auch hier gibt es die Moeglichkeit der absoluten und relati-
ven Sprungmarkenangabe. Der Befehlszaehler wird wie bereits
oben genannt veraendert.

JPcc adr   ; wenn die Bedigung 'cc'erfuellt ist, nimmt
             der PC den Wert 'adr'an, PC:=adr

  cc kann sein:  C wenn Carry    gesetzt   C=1 ==> JPC  adr
                NC wenn No Carry   "       C=0 ==> JPNZ adr
                 Z wenn Zero       "       Z=1 ==> JPZ  adr
                NZ wenn No Zero    "       Z=0 ==> JPNZ adr
                 P wenn Plus       "       S=0 ==> JPP  adr
                 M wenn Minus      "       S=1 ==> JPM  adr
                PO wenn No Parity  "       P=0 ==> JPPO adr
                PE wenn Parity     "       P=1 ==> JPPE adr
 
JRcc       ;  wenn die Bedingung 'cc' erfuellt ist, wird der
              PC um den Wert 'e' veraendert (PC:=PC+e)

              cc  = C , ==> JRC e
                    NC, ==> JRNC e
                    Z , ==> JRZ e
                    NZ, ==> JRNZ e
                              52



Ein Sonderbefehl ist der Zyklusbefehl mit relativer Adressie-
rung.

DJNZ e       ;Das B-Register wird dekrementiert (um 1 vermindert).
              Solange dessen Inhalt groesser Null ist, erfolgt
              der relative Sprung (PC:=PC+e), sonst wird der
              diesem Befehl folgende aufgerufen.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     AF     TIME: XOR A        ;A:=00H
1001     47           LD B,A       ;B:=00H
1002     10 FE        DJNZ 2       ;B:=B-1,B=0 ?
                 ;Ruecksprung zum Befehl DJNZ,
                 ;also um 2 Byte zurueck
1004     C9           RET          ;B:=0, Zeit-
                 ;schleife abgelaufen

4.3.1O. Kelleroperationen

Die Kelleroperationen sind eine spezielle Gruppe von Trans-
portoperationen. Die Inhalte der Doppelregister werden in
einen Speicherbereich gebracht oder von dort geholt, der
durch ein spezielles Register (Stackpointer) indirekt adres-
siert wird. Beim U 880 ist der Kellerspeicherbereich im ge-
samten Adresebereich sowohl von der Lage als auch von der
Groesse frei waehlbar. Allerdings kann nur ein RAM verwen-
det werden. Zu Beginn eines Programmes muss der Stackpointer
(SP) festgelegt werden. Das geschieht mit dem Ladebefehl
'LD SP,nn'. Dieser Zeiger ist also eine Adresse und damit
maximal 16 Bit lang. Sie stellt die Anfangsadresse (den
Kontrollboden) des gewuenschten Kellerspeicherbereiches dar.
 

   Kellern---+         +-------> Entkellern
             |         |
             V         |
        +-------------------+
nn-6 -> |    4.   :    1.   |
nn-4 -> |    3.   :    2.   |
nn-2 -> |    2.   :    3.   |
nn   -> |    1.   :    4.   |
        +-------------------+

Die Anwendung der Kelleroperationen liegt vor allem im Retten
von Doppelregistern und anschliessendem "Zurueckholen" aus
dem Keller zwecks Weiterverwendung in anderen Programmteilen.
Das heisst, die geretteten Register koennen bei der Abarbei-
tung eines Programmteiles anders verwendet werden, denn ihre
Inhalte wurden im Keller "sichergestellt".
                              53



Auf Grund des 8-Bit-Datenbusses wird deutlich, dass eine
Kelleroperation immer in zwei Schritten ablaeuft. Beim Kel-
lern wird zuerst der Stackpointer dekrementiert, das hoeher
wertige Byte gekellert, der SP wieder dekrementiert und dann
das niederwertige Byte in den Keller gebracht. Das Entkellern
erfolgt derart, dass zuerst das niederwertige Byte gelesen
und der SP inkrementiert wird. Anschliessend wird das hoeher-
wertige Byte gelesen und der SP erneut inkrementiert. Nach
Kellern und anschliessendem Entkellern zeigt der Stackpointer
wieder auf den gleichen Speicherplatz.

Der Kellerbereich wird auch noch von Unterprogrammspruengen
und der Interruptorganisation benoetigt, um die erforder-
lichen Rueckkehradressen aufzubewahren und bereitzustellen.

Kellern:      PUSH ss  ;ss= BC, DE, AF, HL, IX, IY
Entkellern:   POP  ss  ;ss= BC, DE, AF, HL, IX, IY

Beispiel:

Retten der Register BC, DB, AF und HL in einem Unterpro-
gramm, da diese Register im Unterprogramm benoetigt werden
und danach ihre alten Inhalte wieder erhalten sollen.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     31 00 00     LD SP,0     ;Kellerzeiger
                                  ;laden
1003     CD F1 10     CALL UP1    ;Unterprogr.-ruf
             ;PC wird gekellert: (FFFFH):=H(PC)=10h
             ;                   (FFFBH):=N(PC)=06H
             ;SP: =FFFEH
1006  ...    ;Programmfortsetzung nach der Rueckkehr
             ;aus dem Unterprogrararn
             ;Unterprogramm UP1
10F1     C5      UP1: PUSH BC     ;SP:=FFFCH
                                   (FFFDH):=B
                                   (FFFCH):=C
10F2     D5           PUSH DE     ;SP=0FFFAH
                                   (FFFBH):=D
                                   (FFFAH):=E
...  ;Unterprogramm
1107     Dl           POP DE      ;SP:=FFFCH
1108     Cl           POP BC      ;SP:=FFFEH
1109     C9           RET         ;Ruecksprung zur
             ;Adresse, die jetzt im Keller oben
             ;an steht, in diesem Falle 1006H
             ;SP:=OOOOH
                              54



Man erkennt, dass das "Zurueckholen" in genau umgekehrter
Reihenfolge erfolgen muss wie das "Retten". Die Ursache liegt
darin begruendet, dass der zuletzt gerettete Wert zuerst wie-
der zurueckgeholt wird und demzufolge der zuerst gerettete
Wert als letzter im Stack verfuegbar ist. Im Keller werden
also alle geretteten Werte "aufeinandergestapelt" und von
diesem Stapel in umgekehrter Reihenfolge wieder herausgeholt.

4.3.11. Unterprogrammoperationen

Unterprogramme sind Programmteile, die sich bei der Abarbei-
tung eines Programmes oft wiederholen. Um unnoetige Programm-
laengen zu vermeiden, werden solche Teile nur einmal ins Pro-
gramm eingefuegt und bei Bedarf als UP aufgerufen. Das heisst:
Das Hauptprogramm wird an diesen Stellen verlassen, das Un-
terprogramm abgearbeitet und dann das Hauptprogramm mit dem
Befehl fortgesetzt, der der Aufrufstelle folgt.

Der Aufruf von Unterprogrammen kann sowohl unbedingt als auch
bedingt in Abhaengigkeit vom Flagregister erfolgen. Im we-
sentlichen ist mit dem Unterprogrammaufruf die definierte
Aenderung des Befehlszaehlers aehnlich den Sprungbefehlen
verbunden, allerdings muss bei Rueckkehr aus dem Unterpro-
gramm der Befehlszaehler PC die Adresse des Befehls enthal-
ten, der als unnimittelbarer Nachfolger des Unterprogrammauf-
rufes gilt, um genau an dieser Stelle im Programm weiterar-
beiten zu koennen. Dies wird realisiert, indem vor dem Sprung
ins Unterprogramm die alte PCAdresse, die auf den folgenden
Befehl zeigt, gekellert wird und erst dann der Befehlszaehler
PC die Unterprogrammadresse erhaelt. Bei Rueckkehr aus dem
Unterprograrnin wird diese im Keller gesicherte Adresse wieder
in den Befehlszaehler geladen. Das erledigt der Prozessor
allein durch den Befehl 'RET'.

CALL adr ;Unterprogrammaufruf, es wird die Adresse des
          CALL-Befehls +3 in den Keller gebracht (also der
           nachher notwendige PC-Stand), der PC selbst nimmt
           den Wert adr an (16-Bit-Adresse). Der Stackpointer
           wird um 2 erniedrigt.

RET      ;Unterprogrammrueckkehr, aus dem Keller wird die
          sichergestellte Adresse in den Befehlszaehler PC
          geholt, das Hauptprogramm kann weitergehen; der
          SP wird wieder um 2 erhoeht.

CAcc adr ;bedingter Unterprogrammaufruf, wenn die Bedingung
          cc erfuellt ist, sonst nachfolgender Befehl.

Rcc      ;bedingte Unterprogrammrueckkehr, wenn die Bedin-
          gung cc erfuellt ist, sonst nachfolgender Befehl.
 
Moegliche Bedingungen: cc= NZ, Z, C, NC, P, M, PO, PE

Die Bedingungen der Unterprogrammrufe sind die gleichen wie
bei den bedingten Sprungbefehlen.
                              55



Einen Sonderfall des Unterprogrammrufes bilden die Restart-
Befehle. Hier entfaellt die Angabe einer 2-Byte Sprungadres-
se. Es erfolgen Spruenge zu festen Adressen (0000H, 0008H,
0010H, 0018H, 0020H, 0028H, 0030H, 0038H).

RST hh   ;Unterprogrammruf, der aktuelle PC des RST-Be-
          fehle (konkret der PC-Stand nach dem RST-Befehl)
          wird gekellert. Der PC nimmt den Wert 00hhH an.
          hh=OH, 8H, 10H, ... , 30H, 38H

Beispiel zur Unterprogrammtechnik:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     3E FF START: LD A,0FFH    ;Start des Haupt-
                                    programms
1002     77           LD (HL),A
...
100E     CD 34 13     CALL UP1     ;1. Unterprogramm-
                                   ;ruf
                                   ;UP1 beginnt bei
                                   ;Adr.1334H
1012     23           INC  HL      ;Fortsetzung des
                                   ;Hauptprogramms
1013     7E           LD A,(HL)
...
103F     88           ADC  B
...
125E     CD 34 13     CALL UP1     ;2. Unterprogramm-
                                   ;ruf
1261     23           INC  HL      ;Fortsetzung des
                                   ;Hauptprogrammes
...
126A
126B     DD CB 00 DE  SET 3,(IX+0)
...
1333     76           HALT
1334     C5      UP1: PUSH BC      ;Beginn des UP
1335     CB 4F        BIT 1, A
..
1353     Cl           POP BC
1354     C9           RET          ;Rueckkehr ins
                                   ;Hauptprogramm

Hinweis:
Es ist unbedingt zu beachten, dass im Unterprogramm die An-
zahl der PUSH-Befehle identisch der Anzahl der POP-Befehle
sein muss, da sonst bei der Entkellerumg bei Unterprogramm-
rueckkehr ein falscher Wert in den Befehlszaehler kommt und
                              56



Programm undefiniert und nicht ab der Aufrufstelle wei-
terlaeuft.

Einde Verschactelung mehrerer Unterprogramme (ein UP ruft ein
weiteress UP auf ) ist moeglich, die Anzahle der Schachtelungen
ist theoretisch unbegrenzt.

4.3.12 Ein- und Ausgabebefehle

Wie bereits erwaehnt, sind beim U 880 maximal 256 Ein- und Aus-
gabekanaele (Peripherieadressen) adressierbar. Zur Adressie-
run bei Ein- und Ausgaben wird der niederwertige Teil des
Adressbusses verwendet. Im Befehl selbst wird die Geraeteadres-
se (Kanaladresse) entweder direkt ausgegeben oder indirekt
ueber das C-Register adressiert. Bei direkter Kanaladresse er-
folgt der Datentransport immer zwischen dem A-Register und
der Peripherie, bei indirekter Kanaladresse (C-Register muss
vorher mit der Kanaladresse geladen werden) kann der Daten-
transport zwischen einem der Register A, B, C, D, E, H, L, und
der Peripherie erfolgen.

IN n      ;Eingabe des Kanals n in das A-Register, A:=(n)
IN r      ;Eingabe dec Kanals, dessen Adresse im C-Register
           enthalten ist, nach dem Register 'r'.
OUT n     ;Ausgabe des A-Registers nach Kanal 'n', (n):=A
OUT r     ;Ausgabe des Registers 'r' nach dem Kanal, dessen
           Adresse im C-Register enthalten ist.

Register 'r' = A, B, C, D, E, H, L

Einen Sonderfall stellt der Eingabebefehl 'INF' dar. Der In-
halt des von Register C adressierten Kanals wird gelesen und
danach entsprechend die Flags gesetzt.

Beispiel: Das Ausgaberegister mit der Adresse 10H soll defi-
          niert mit 00, 01 und 02 geladen werden.

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     0E 10        LD  C,10H     ;C:=10H Kanaladres-
                                    ;se des Registers
1002     A8           XOR A         ;A:=00H
1003     ED 79        OUT A         ;(C):=00H
1005     3C           INC A         ;A:=A+1 = 01H
1006     ED 79        OUT A         ;(C):=01H
1008     3C           INC A         ;A:=A+1 = 02H
1009     ED 79        OUT A         ;(C):=02H
...
1178     76      END: HALT
                              57


4.3.13. Gruppenoperationen fuer Lade-, Vergleichs- und Ein-/
        Ausgabe-Befehle

Gruppenoperationen in diesem Sinne sind hardwaremaessig im
Prozessor U 880 installierte Befehlsablaeufe, die vom Pro-
grammierer lediglich die Generierung bestimmter Register als
Parameter verlangen. Diese Befehle vermeiden nicht nur das
umstaendliche Programmieren mit einzelnen Befehlen, sondern
fuehren besonders zur Programmbeschleunigung und Einsparung
von Programmspeicherplaetzen.

- Einfache Gruppenoperationen
LDI   ;inkrementierendes Laden
      - die Zieladresse ist in DE zu laden
      - die Quelladresse ist in HL zu laden
      - die Blocklaenge in BC (=Anzahl der im Speicher auf
        einanderfolgenden 'zu transportierenden Byte's).
      Befehlsablauf:  (DE):=(HL)
                      DB:=DE+1
                      HL:=HL+1
                      BC:=BC-1
                      P/V=0 bei BC-1=0
                          1 bei BC-1<>0

LDD   ;dekrementierendes Laden
       wie LDI, nur DE:=DE-1 und HL:=HL-1

CPI   ;inkrementierendes Vergleichen (Suchbefehl)
      - die Anfangsadresse ist in HL zu laden
      - die Blocklaenge ist in BC zu laden
      Befehlsausfuehrung: A-(HL)=?
                          HL:=HL+1
                          BC:=BC-1
                          Z=1 bei A=(HL)
                            0 bei A<>(HL)
                          P/V=0 bei BC-1=0
                              1 bei BC-1<>O

CPD   ;dekrementierendes Vergleichen
       wie CPI, nur HL:=HL-1

INI   ;inkrementierende Eingabe
      - Zieladresse ist in HL zu laden
      - Kanaladresse ist in C zu laden
      - Blocklaenge in B (max. 256 Byte)
      Befehlsausfuehrung: (HL):=(C)
                          HL:=HL+1
                          B:=B-1
                          Z=1 bei B=0
                            0 bei B<>O
                              58



IND   ;dekrementierende Eingabe
       wie INI, nur HL:=HL-1

OUTI  ;inkrementierende Ausgabe
      - Zieladresse ist in C zu laden
      - Kanaladresse ist in Hl zu laden
      - Blocklaenge in B
      Befehlsausfuehrung: (C):=(HL)
                          HL: =HL+1
                          B:=B-1
                          Z=1 bei B=0
                            0 bei B<>O

OUTD  ;dekrementierende Ausgabe
      wie OUTI, nur HL:=HL-1

Bei den einfachen Gruppenoperationen kann der Programmierer
gezielt die Flags testen und entsprechende Rueckspruenge bzw.
die weitere Programmbearbeitung fordern.

Als moegliche Anwendungen ergeben sich:

LDI,  LDD  zum Blocktransport
CPI,  CPD  zur Byte- oder Blocksuche
INI,  IND  Blockeingabe
OUTI, OUTD Blockausgabe

Die Blocklaenge ist dabei in BC bzw. B anzugeben.

- Repetierende Gruppenoperationen (sich automatisch wiederho-
  lende Gruppenoperationen)

Diese Befehle basieren auf den einfachen Gruppenoperationen.
Es werden lediglich die Testung der Flags und entspechende
Rueckspruenge zur Wiederholung des Befehls automatisch ausge-
fuehrt. Allerdings ist bei den Ein- und Ausgabegruppenopera-
tionen zu beachten, dass die peripheren Geraete eine gleiche
Verarbeitungsgeschwindigkeit haben muessen wie der Prozessor,
oder hardwaremaessig ueber die WAIT-Leitung an der CPU eine
Angleichung der Verarbeitungsgeschwindigkeit erfolgen muss.

LDIR  ; wie LDI, Befehl wird wiederholt bis BC:=00H
LDDR  ; wie LDD, Befehl wird wiederholt bis BC:=00H
OPIR  ; wie CPI, Befehl wird wiederholt bis BC:=00H oder A=(HL)
CPDR  ; wie CPD, wird wiederholt bis BC:=00H oder A=(HL)
INIR  ; wie INI, wird wiederholt bis B:=0
INDR  ; wie IND, wird wiederholt tis B:=0
OTIR  ; wie OVIl, wird wiederholt bis B:=0
OTDR  ; wie OUTD, wird wiederholt bis B:=0

Beispiel: Ein Speicherbereich von Adresse 0D00H bis Adresse
          0FFFH soll definiert mit "0E3H" geladen werden.
                              59



Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     21 00 0D    LD HL, 0D00H  ;Quelladresse
1003     3E E3       LD A, 0E3H
1005     77          LD  (HL),A    ;(HL):=0E3H,
                     ;1. Speicherplatz geladen
1006     11 01 OD    LD  DE,0D01H  ;1. Zieladresse
1009     01 FE 02    LD  BC,2FEH   ;Blocklaenge -1
                     ;da ein byte schon geladen wurde -
1000     ED B0       LDIR          ;Befehl bewirkt
                     ;das sogenannte Durchschleifen des Wer-
                     ;tes '0E3H' bis zur Adresse 0FFFH

4.3.14. Austauschbefehle

EXAF      ; Wechsel des Doppelregisters AF gegen AF'

EXX       ; Wechsel des Doppelregistersatzes:
           BC gegen BC'
           DE gegen DE'
           HL gegen HL'

Angewendet wird der Registerwechsel beispielsweise zur Ret-
tung bei Interrupt oder Unterprogramaufruf, da diese Variante
schneller ist als das Kellern bzw. Entkellern der Register.

EX DE, HL ; Tausch der Doppelregisterinhalte
            E-->L und L-->E
            D-->H und H-->D

EX (SP), xx; xx=HL, IX, IY
             Tausch der jeweils obenanstehenden Stackinhalte
             gegen die Inhalte der Doppelregister xx.
             (SP)   gegen L, N(IX) oder N(IY)
             (SP+1) gegen H, H(IX) oder K(IY)

Beispiel:

Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     08     INT1: EXAF       ;Register-
                ;wechsel, da im Interruptprogramm ein
                ;Grossteil der Register benoetigt wird
1001     D9           EXX
1002     3E E3        LD   A,3FH
1004     ...
101B     D3 04        OUT  04
101D     D9           EXX
101E     08           EXAF
101F     FB           EI
1020     ED 4D        RETI
                              60


4.3.15. CPU-Steuerbefehle

NOP  ; Es wird keine Operation ausgefuehrt, nur der Befehle-
       zaehler um ein Byte weitergestellt.
HALT ; Prozessor fuehrt intern NOP-Operationen zur Aufrecht-
       erhaltung des Refresch-Zyklus durch.
       Der Befehlszaehler erhaelt die Adresse des nachfolgen-
       den Befehls. Dieser Befehl wird aber erst nach der
       vollstaendigen Ausfuehrung einer Interruptroutine aus-
       gefuehrt. Eine Fortsetzung ist auch mit Reset moeglich.

4.3.16. Bedeutung der Flags

Ein Grossteil aller Mikroprozessorbefehle beeinflusst defi-
niert entweder das gesamte Flag-Register bzw. nur einzelne
Flag-Bits. Die genaue Kenntnis der Bedeutung der Flag-Bits
bzw. die Art der Beeinflussung durch verschiedene Befehle ist
die wichtigste Voraussetzung fuer die fehlerfreie bzw. opti-
male Programmerstellung. Die allgemeine Bedeutung der Flag-
Bits ist folgender Zusammenstellung zu entnehmen:

S:   Vorzeichen (signum)
     Ist eine Kopie des Bits A7;
     es repraesentiert das echte Vorzeichen des Resultates
     nach arithmetischen Operationen mit Operanden in Zweier-
     komplementdarstellung.
     S=1, wenn das Ergebnis <0 ist, Abfrage mit cc=M (JPM)
     S=0, wenn das Ergebnis >=0 ist, Abfrage mit cc=P (JPP)

Z:   Null (zero)
     Bei einer Null im A-Register (alle 8 Bitpositionen = 0)
     nach arithmetischen und logischen Operationen (auch nach
     CMP) wird Z=1.

H:   Halbbyteuebertrag (half-carry)
     Wird bei einem Uebertrag von Bit A3 nach Bit A4 auf "1"
     gesetzt. (Wird vom DAA-Befehl intern ausgewertet.)

N:   Subtraktion
     N=1, wenn der Befehl eine Subtraktion (auch CMP) war.
     Wird vom DAA-Befehl ebenfalls herangezogen.

CY:  Uebertrag (Carry)
     Uebertrag aus dem A-Register nach einer Addition,
     Mittels SO? und CO? ist das OY-Flag auch setz- und
     komplement ierbar.

P/V: Paritaets/Ueberlauf (parity/overflow)
     Dieses Flag hat verschiedene Funktionen.

1.)  Es zeigt nach logischen und Verschiebeoperationen und
     nach dem Befehl 'IN r' die Paritaet P an:
     P=1 bei gerader Anzahl vorhandener Bit-Einsen, die Abfra-
     ge kann mit JPPE erfolgen
     Abfrage einer ungeraden Anzahl mit JPPO
                              61



2.)  Es zeigt im Gegensatz zu Carry den echten Ueberlauf V
     des Resultates nach einer arithmetischen Operation mit
     Operanden an.
     Abfrage mit JPPE

3.)  Das Flag sichert nach LD A,I und LD A,R das Bit aus IFF2,
     damit es mit 'LD A,I' wieder in IFF2 gesetzt werden kann.
     In IFF2 wird eine angemeldete Unterbrechung gespeichert,
     bis sie vom Prozessor bearbeitet wird.

4.)  Es fixiert nach LD- und CMP-Gruppenoperationen die Aussa-
     ge, ob der Bytezaehler in BC nach Erniedrigung ungleich
     Null ist.
     D. h. P/V=0 bei BC-1=0
           P/V=1 bei BC-1<>O

Die Abfrage der Flag-Bits bei bedingten Operanden erfolgt
nach den im jeweiligen Befehl anzugebenden Bedingungen (siehe
Sprungbefehle) wie folgt:

Bedingung  Frage

NZ :       Z=0?   ===> JPNZ , JRNZ
 Z :       Z=1?   ===> JPZ  , JRZ
NC :       C=0?    usw.
 C :       C=1?
PO :     P/V=0?
PE :     P/V=1?
 P :       S=0?
 M :       S=1?

Die komplette Analyse aller Flag-Bits ist jederzeit moeglich
durch Kellern von AF und anschliessendem Laden der durch den
SP angezeigten letzten zwei Speicherplaetze in ein Doppelre-
gister.

Beispiel:
Befehls- Maschinen-   Quellkode    Kommentar
zaehler  kode
-----------------------------------------------------
1000     F5           PUSK AF      ;Kellern von AF
1001     El           POP HL
                      ;H:=(SP+1)=A,L:=(SP)=F
1002     LD  A,L

Die im Anhang beigefuegte Befehlsliste enthaelt Hinweise auf
die Beeinflussung der Flag-Bits durch die jeweiligen Befehle
sowie die Kodierung der einzelnen Befehle zur manuellen Pro-
grammuebersetzung.
                              62



4.4. Unterbrechungsorganisation

Um auf Signale aus der Umwelt des Prozessors reagieren zu
koennen, kann mit einem Programm eine Leitung (also ein Sig-
nal) zyklisch abgefragt werden. Das setzt aber voraus, dass
dieses Programm immer dieses Signal abfragt. Eine Reaktion
des Rechners erfolgt erst, wenn das Signal durch die Abfrage
erkannt wird. Der U 880 verfuegt ueber die Moeglichkeit eines
Interrupts. Das heisst, dass ein Signal von einem externen
Geraet eine Unterbrechung des laufenden Programms zu einem
beliebigen Zeitpunkt verursachen kann, um den Prozessor zur
sofortigen Abarbeitung eines Programms zu zwingen, das diese
Unterbrechung entsprechend behandelt (Interruptbehandlungs-
routine).

Fuer die effektive und schnelle Bearbeitung von Unter-
brechungswuenschen der Peripherie stehen beim U 880 ein mas-
kierbarer Interrupt und ein nichtmaskierbarer Interrupt zur
Verfuegung (der maskierbare Interrupt kann verboten werden).

Wird von der Peripherie ein Signal fuer den nichtmaskierbaren
Interrupt erzeugt (L-Pegel am Eingang NMI), so fuegt der Pro-
zessor eine RST-Operation mit der festen Adresse 0066H ein.
Es liegt beim Programmierer, inwieweit er in diesem Unterpre-
gramm fuer eine Rettung bestimmter Registerinhalte sorgt. Es
gibt keinen Befehl, der den nichtmaskierbaren Interrupt ver-
bietet. Die Anwendung liegt meist bei der Datenrettung vor
Erkennen eines Spannungsausfalis des Rechnersystems. Der man-
kierbare Interrupt kann in 3 unterschiedlichen Betriebsarten
auftreten, die in der CPU durch einen Befehl eingestellt wer-
den koennen.

Fuer das Sperren bzw. Freigeben aller drei maskierbaren In-
terruptarten steht jeweils ein Befehl zur Verfuegung.

Interrupt sperren:  DI
Interrupt erlauben: EI

Trifft eine Anforderung an den maskierbaren Interrupt ein
(L-Pegel am Eingang INT), wenn er durch 'DI' gesperrt ist, so
nimmt der Prozessor diese Anforderung zur Kenntnis und arbei-
tet diese Anforderung sofort nach dem Wiederfreigeben der In-
terrupterlaubnis durch den Befehl 'EI' ab.

Maskierbare Interruptarten

Diese 3 Interruptarten werden durch einen der Befehle 'IM0',
'IM1' oder 'IM2' gesetzt.

IM0: In dieser Betriebsart wird nach akzeptiertem Unter-
     brechungswunsch der Interruptquelle der naechste abzu-
     arbeitende Befehl vom Datenbus geholt und in den Pro-
     grammlauf eingeschoben.
     (Es bietet sich hier an, RST-Befehle zu verwenden.
     Das sind 1-Byte-Befehle, die einem Unterprogrammsprung
     entsprechen.) Das heisst aber auch, dass durch das in-
     terruptanfordernde Geraet der Befehl auf den Datenbus
     gelegt wird.
                              63



IM1:  Nach dem Akzeptieren des Unterbrechungswunsches wird
      der Befehl 'RST 38H' automatisch ausgefuehrt.
      Gegebenenfalls muss im Interruptbehandlungsprogramm
      eine Abfrageroutine eingeleitet werden, welche den
      "Interrupt-Anmelder" feststellt und danach entsprechen-
      de Programme aktiviert.

IM2:  Diese Betriebsart stellt fuer den Prozessor die lei-
      stungsfaehigste Unterbrechungsbehandlung dar. Man
      nennt sie auch Vektorinterrupt, weil die Organisation
      der Behandlungsroutinen ueber Zeiger auf einen Adress-
      vektor realisiert wird.
      Bei Unterbrechungsanforderung stellt jede Interrupt-
      quelle den fuer die gewuenschte Interruptroutine not-
      wendigen niederwertigen "Zeigerteil" durch Aussenden
      eines 8-Bit-Wertes auf den Datenbus bereit (sogenann-
      tes Vektorlesen).
      Dieser Wert bildet den niederwertigen Teil, der Inhalt
      des I-Registers den hoeherwertigen Teil einer Adresse
      einer bestimmten Speicherzelle. Diese und die nachfol-
      gende Speicherzelle beinhalten dann die Adresse des In-
      terruptbehandlunnsprogramms. Dies setzt aber natuerlich
      das vorbereitende Laden des I-Registers und der ent-
      sprechenden Register der Peripheriebausteine voraus
      (sogenannte Initialisierung).

Beispiel: 3 Peripheriebausteine verlangen jeweils eine ande-
          re Interruptroutine. Die Startadressen fuer die
          jeweiligen Unterprogramme lauten:

          INT1:=0FF0H
          INT2:=0FFFH
          INT3:=2F00H

          Aufbau der Startadressentabelle:
          Zeiger1: 0C00 F0H
                   0C01 OFH
          Zeiger2: 0C02 FFH <===   N(INT2):=0FFH
                   0C03 0FH <===   H(INT2):=0FH
          Zeiger3: 0C04 00H ===>   0FFFH=Startadresse
                   0C05 2FH
                   0C06

          -  Das I-Register muss mit "0CH" geladen werden.
             Es stellt den absoluten Zeigerteil dar.
           - Dem Peripheriebaustein 1 muss fuer das entsprechen-
             de Register der variable Zeigerteil mit dem Wert
             "00" mitgeteilt werden. Entspechend gilt "02H" und
             "04H" fuer Baustein 2 und 3.
                              64



Durch Aneinandersetzen des I-Registers als High-Teil und des
variablen Zeigerteils als Low-Teil entsteht der gesamte Zeiger.

Das heisst zum Beispiel:

Peripheriebaustein 2 meldet einen Interrupt an. Der Interrupt
2 wird zu gegebener Zeit akzeptiert und der Peripheriebaustein
muss jetzt den variablen Zeigerteil im Falle des Zahlenbei-
spiels 02H, auf den Datenbus legen (Vektorlesen der CPU).
Jetzt erfolgt die Bestimmung des gesamten Zeigers.

I-Register  0CH (High-Teil)
var. Zeiger   02H (Low-Teil)
----------------------------
   Zeiger 2 0C02H

In der Startadresstabelle ist unter der Adresse 0C02H ein
0FFH und unter 0C03H ein 0FH eingetragen, d. h. die Start-
adresse der zum Peripheriebaustein 2 gehoerenden Interruptbe-
handlungsroutine lautet 0FFFH.

Auf diese Art, laesst sich nicht nur sehr schnell aus vielen
Interruptroutinen die fuer den Peripheriebaustein notwendige
herausfinden und aktivieren, es wird auch moeglich, fuer ein
und denselben Peripheriebaustein durch Umprogrammieren des
"variablen Zeigerteils" eine andere Interruptroutine aufzu-
rufen. Das Akzeptieren einer Interruptanforderung setzt stets
das Retten der Fortsetzungsadresse voraus. Dies geschieht wie
beim Unterprogrammruf durch Kellern des Befehlszaehlers. Bei
Rueckkehr aus der Interruptroutine wird der Befehlszaehler
wieder entkellert und es erfolgt somit die Fortsetzung der
Programmabarbeitung an der zuvor verlassenen Stelle. Das Kel-
lern und Entkellern fuehrt der Prozessor automatisch aus.
Auch hier gilt zu beachten, dass im Interruptprogramm die
Anzahl der Keller- und Entkelleroperationen gleich sein muss.

Problematisch ist es, wenn mehrere Peripheriebausteine gleich-
zeitig eine Unterbrechung anmelden. Vorrang hat stets der Bau-
stein, welcher in der Prioritaetskette an "weitesten vorn"
steht. Diese Kette wird durch die Signale 'IEI' und 'IEO' ge-
bildet, die durch alle Bausteine hindurchgefuehrt werden.
Waehrend der Abarbeitung einer Interruptbehandlungsroutine
bleibt es dem Programmierer ueberlassen, ob er durch Setzen
des EI-Befehls die Unterbrechung der Interruptbehandlungs-
routine vorzeitig durch einen Peripheriebaustein hoeherer
Prioritaet zulaesst oder nicht, da die Annahme einer Unter-
brechung weitere Unterbrechungsannahmen ausschliesst. Am Ende
einer Interruptbehandlungsroutine muss stets, sofern nicht
schon erfolgt, mit dem Befehl 'EI' die Unterbrechungserlaub-
nis wieder freigegeben werden. EI wird immer erst nach Aus-
fuehrung des auf EI folgenden Befehls wirksam.
                              65



- Rueckkehrbefehle aus dem Interruptprogramm:

RETI    ; Rueckkehr aus dem maskierbaren Interruptprogramm
RETN    ; Rueckkehr aus dem nichtmaskierbaren Interruptpro-
          gramm

Hinweis:  RETI bewirkt beim Peripheriebaustein, welcher die
          Interruptroutine ausgeloest hat, das Wiederschlies-
          sen der Prioritaetskette (IEO--high). Somit koennen
          nach RETI auch die Peripheriebausteine niedriger
          Prioritaet einen Interrupt ausloesen.
                              66