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
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
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.
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
Die Arbeit der CPU wird durch eine Reihe von Systemsignalen
gekennzeichnet, die als Anschluesse herausgefuehrt wurden und
das Zusammenwirken mit den angeschlossenen Funktionseinheiten
steuern.
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.
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
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.
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
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.
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.
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
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
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
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
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
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.
- 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
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
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
- 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
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
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
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
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
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
- /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.
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
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.
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
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
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.
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
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
- /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.
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 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
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).
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
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.
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
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.
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
- 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
0...255 256 Eingaenge
oder
0.. .255 256 Ausgaenge
Befehlsvorrat:
158 Grundbefehle
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.
1. Byte
OPC
37
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
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
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.
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 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.
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
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.
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
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
Dann wuerde die letzte Zeile des obigen Beispiels lauten:
1007 77 LD M,A ;= LD (HL),A
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.
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.
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
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
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
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').
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
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)
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
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.
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.
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
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
RRD ; der Befehl wirkt ebenfalls nur zwischen
A und (HL)
____________ ___
|
| | |
________|__
__v_|___v__
A:|7 4|3 0| (HL):|7 4|3
0|
--------^--
--------|--
|
|
------------------
- 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
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
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
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
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
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
Einde Verschactelung mehrerer Unterprogramme (ein UP ruft ein
weiteress UP auf ) ist moeglich, die Anzahle der Schachtelungen
ist theoretisch unbegrenzt.
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
- 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
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
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
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
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
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
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
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
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