Mikrorechnerbausatz Z 1 0 1 3
Handbuch Teil II
Inhaltsverzeichnis
------------------
Seite
5. Software des MRB Z1013
2
5.1. Monitor
2
5.1.1. Leistungen des Monitors
2
5.1.2. Erweiterungen des Monitors
9
5.2. Aufbau einer Programmbibliothek
10
5.3. BASIC
13
5.3.1. Programmiersprache BASIC
13
5.3.2. BASIC-Interpreter
14
5.3.3. Laden des BASIC-Interpreters
15
5.3.4. Arbeit mit dem BASIC-Interpreter
15
5.3.5. Kommandos des BASIC-Interpreters
17
5.3.6. Programmierbare Befehle bzw. Anweisungen
19
5.4. Hinweise fuer die Erarbeitung
von
Anwenderprogrammen
28
5.4.1. Allgemeine Hinweise
28
5.4.2. Problemanalyse
28
5.4.3. Erarbeitung der Rechenanweisung (Algorithmus)
29
5.4.4. Programmierung
35
6. Erweiterungen des MRB Z1013
40
6.1. Allgemeine Hinweise
40
6.2. Speichererweiterungen
40
6.3. Anschluss von Steuereinheiten
41
Bestandteile des Handbuches:
----------------------------
Handbuch Teil I
Handbuch Teil II
Anlagenteil
Auch zum Austesten eigener Hardwareerweiterungen kann der Mo-
nitor verwendet werden. Um diese Moeglichkeiten umfassend nut-
zen zu koennen, wurden bestimmte Kommandos festgelegt, die be-
reits im Abschnitt 1.3. vorgestellt wurden.
Ausser dem unmittelbaren Aufruf bestimmter Monitorleistungen
durch Kommandos, auf die hier nicht mehr eingegangen werden
soll, enthaelt der Monitor noch eine Reihe weiterer, haeufig
verwendeter Programmteile.
Im folgenden werden diese Monitorfunktionen beschrieben. Dazu
wird ausserdem die Adresse, unter der dieses Unterprogramm
aufrufbar ist, und ein Datenbyte (DB), ueber dessen Verwendung
weiter unten noch etwas gesagt wird, angegeben. In verschiede-
nen Faellen muessen dem Programm bestimmte Parameter zur Ver-
fuegung gestellt werden.
Das ist einmal ueber die CPU-Register und zum anderen ueber
bestimmte Arbeitszellen des Monitors, die sich im RAM-Bereich
befinden, moeglich. In die letztgenannten Zellen werden die
erforderlichen Parameter mit dem M-Kommando geschrieben.
Die Adressen einiger ausgewaehlter Arbeitszellen des Monitors
sind:
Name Adresse Anzahl der Bedeutung
Byte
SOIL 0016 2
Anfangsadresse der Eingabe-
zeile (Eingabepuffer)
ARG1 001B 2
1. Parameter eines Kommandos
ARG2 001D 2
2. Parameter
AR03 0023 2
3. Parameter
CURSR 002B 2
Kursoradresse
2
OUTCH (OUT CHARACTER)
Adr. F21BH DB 00H
Ausgabe des im A-Register stehenden Zeichens ueber den Video-
treiber. 4 Steuerzeichen werden vom Z1013-Video-Treiber spe-
ziell verarbeitet:
08H - Kursor links
09H - Kursor rechts
OCH - Bildschirm loeschen
ODH - Neue Zeile; bei Erreichen des unteren Bildschirmrandes
wird gerollt
INCH (IN CHARACTER)
Adr. F20CH DB 01H
Mit dieser Routine wird die Eingabe eines Zeichens von der Tas-
tatur in das A-Register realisiert. Dabei wird die Routine INKEY
genutzt. Die Register BC, DE und HL werden gerettet. Der Rueck-
sprurng aus INCH erfolgt nur bei (A) ungleich 0. Ansonsten be-
findet sich der Monitor in einer Eingabewarteschleife.
PRST7 (PRINT STRING mit dem 7. Bit als Endzeichen)
Adr. F2A5H DB 02H
Die der Datenbytedefinition (DB 2) folgende Bytekette wird aus-
gegeben, bis das 7. Bit gesetzt ist. Graphikzeichen (80H..FFH)
sind also mit dieser Routine nicht ausgebbar. Fuer diesen Zweck
ist ein Unterprogramm mit OUTCH aufzubauen.
INHEX (Konvertierung einer max. 4-steillgen hexadezimalen
Zeichenkette in das interne Format)
Adr. F2F4H DB 03H
Die Routine realisiert die Konvertierung einer max. 4-stelligen
hexadezimalen Zeichenkette in das Format eines Doppelregister-
inhaltes. Die Anfangsadresse muss im DE-Register uebergeben wer-
den. Fuehrende Leerzeichen werden ueberlesen. Das einer max.
4-stelligen hexadezimalen Zeichenkette folgende Leerzeichen bzw.
jedes andere Zeichen, welches verschiede von den Hexa-Zeichen
ist, wird als Trennzeichen interpretiert. Der konvertierte Wert
steht im HL-Register. Bei laengeren Zeichenkettern erfolgt keine
Fehlerausschrift, sondern im HL-Register befindet sich der ge-
wandelte Wert der letzten 4 Hexa-Zeichen.
INKEY (IN KEYBOARD/Tastatureingabe)
Adr. F130H DB 04H
3
Shift-Ebene 0:
Zei-
len- Spalten-Nr.
Nr. 0 1 2 3 4
5 6 7
------------------------------
0 @ A B C
D E F G
HEX 40 41 42 43 44 45 46 47
1 H I J K
L M N O
HEX 48 49 4A 4B 4C 4D 4E 4F
2 P Q R S
T U V W
HEX 50 51 52 53 54 55 56 57
3 S1 S2 S3 S4 <- SP -> Enter
HEX
08 20 09 0D
------------------------------
Shift-Ebene 1:
0 1 2
3 4 5 6 7
------------------------------
0 X Y Z [
\ ] ^ _
HEX 58 59 5A 5B 5C 5D 5E 5F
1 0 1 2 3
4 5 6 7
HEX 30 31 32 33 34 35 36 37
2 8 9 : ;
< = > ?
HEX 38 39 3A 3B 3C 3D 3E 3F
------------------------------
Shift-Ebene 2:
0 1 2
3 4 5 6 7
------------------------------
0 x y z {
| } ~ _
HEX 78 79 7A 7B 7C 7D 7E 7F
1 SP ! " #
$ % & '
HEX 20 21 22 23 24 25 26 27
2 ( ) * +
, - . /
HEX 28 29 2A 2B 2C 2D 2E 2F
------------------------------
4
0 1 2
3 4 5 6 7
------------------------------
0 ' a b c
d e f g
HEX 60 61 62 63 64 65 66 67
1 h i j k
l m n o
HEX 68 69 6A 6B 6C 6D 6E 6F
2 p q r s
t u v w
HEX 70 71 72 73 74 75 76 77
------------------------------
SHift-Ebene 4:
0 1 2
3 4 5 6 7
------------------------------
0 UA
UG
HEX 10 11 12 13 14 15 16 17
1
STOP
HEX 00 01 02 03 04 05 06 07
2 C-L C-R CLS ENT
HEX 08 09 0A 0B 0C 0D 0E 0F
------------------------------
Mit Shift 4 und der Taste G (17H) wird im INKEY auf Graphik
umgeschaltet, d. h. es wird zum ermittelten Hexa-Kode eine 80H
aufaddiert. Die Umschaltung in die A-Ebene erfolgt mit Shift 4
und der Taste A (91H).
C-L : Kursor links
C-R : Kursor rechts
CLS : Bildschirm loeschen
ENT : ENTER
STOP : Programmabarbeitungen stoppen
INLIN (Eingabe einer Zeile mit fuehrendem Promptsymbol)
Adr. F2B3H DB 05H
Ausgabe eines Promptsymbols und anschliessende Eingabe einer
Zeichenkette bis Enter (0DH). die Startadresse fuer die Ein-
gabezeile wird in SOIL zwischengespeichert und kann nach Rueck-
kehr fuer die Auswertung, z. B. fuer INHEX, verwendet werden.
Da jedes eingegebene Zeichen durch die Folge INCH/OUTCH bis 0DH
sofort auf dem Bildschirm ausgegeben wird, erfolgt beim Rollen
am unteren Bildschimrand automatisch eine Korrektur von SOIL
um -20H.
OUTHX (OUT A-Register hexadezimal)
Adr. F301H DB 06H
Ausgabe des A-Registers hexadezimal. Es werden pro Byte zwei
Zeichen ausgegeben.
5
Ausgabe des HL-Registers hexadezimal. Es werden 4 Zeichen aus-
gegeben.
CSAVE (Save to Cassette)
Adr. F369H DB 08H
Entspricht dem S-Kommando des Monitors, wobei die Anfangsadre-
se und die Endadresse vorher in ARG1 und ARG2 einzutragen sind.
CLOAD (Load from Cassette)
Adr. F3F8H DB 09H
Die Routine entspricht dem L-Kommando des Monitors. Anfangs-
und Endadresse muessen vorher in ARG1 und ARG2 eingetragen
werden.
MEM (Modify Memory)
Adr. F325H DB 0AH
Die Routine entspricht dem M-Kommando des Monitors. Vor An-
sprung ueber RST 20H muss die Anfangsadresse in ARG1 einge-
tragen werden.
WIND (Rollfenster fuer Bildschirmbereich)
Adr. F6D1H DB 0BH
Entspricht dem W-Kommando des Monitors. In ARG1 und ARG2 sind
Anfangsadresse und Endeadresse+1 fuer das Rollfenster einzu-
tragen.
OTHLS (Ausgabe von 2 Byte hexadezimal entspr. der Adresse im
HL-Register)
Adr. F5C7H DB 0CH
Entsprechend der Adresse im HL-Hegister werden 2 Byte = 4 Zei-
oben (erst High-Teil, dann Low-Teil) und anschliessend ein
Leerzeichen ausgegeben.
OUTDP (Ausgabe eines Doppelpunktes (:) und weiter wie OTHLS)
Adr. F5C4H DB 0DH
siehe OTHLS
OUTSP (Ausgabe eines Leerzeichens)
Adr. F5CFH DB 0EH
Ausgabe eines Leerzeiehens
6
Die Routine entspricht dem T-Kommando des Monitors. In ARG1,
ARG2 und ARG3 sind vorher die Werte fuer "von Adresse", "auf
Adresse" und Byteanzahl einzutragen.
INSTR (Eingabe einer Zeichenkette)
Adr. F2B9H DB 10H
Es wird die Eingabe einer Zeichenkette abgefordert, die mit
Enter abzuschliessen ist. Wie in INLIN steht in SOIL die An-
fangsadresse der Zeichenkette fuer eine anschliessende Auswer-
tung. Im INSTR wird kein fuehrendes Promptsymbol ausgegeben.
KILL (Fuellen eines Speicherbereichen mit einem Byte)
Adr. F50DH DB 11H
Die Routine entspricht dem K-Kommando des Monitors. ARG1, ARG2
und ARG3 sind vorher mit "von Adresse", "bis Adresse" und dem
zu fuellenden Byte zu laden.
HEXUM (Hexa-Umschaltung)
Adr. F6B8H DB 12H
Die Routine entspricht dem H-Kommando des Monitors. Umschaltung
der Tastatur auf die Zeichen 0..7, 8..? in die Shift-Ebene Null.
Diese Umschaltung ist z. B. vor Zifferneingabe sehr sinnvoll.
ALFA (Alpha-Umschaltung)
Adr. F6C5H DB 13H
Umschaltung der Tastencodetabelle auf die Zeichen H...W in der
Shift-Ebene Null. Dieser RST 20H entspricht dem A-Kommando des
Monitors.
Ihre Anwendung in eigenen, selbst gefertigten Programmen er-
leichtert die Programmierung sehr wesentlich und verkuerzt den
sonst erforderlichen Programmumfang. Der Anwender muss nur
wissen, wie diese Programmteile aufgerufen werden und auf wel-
che Art die Uebermittlung der Parameter vorgenommen wird.
Diese aufgefuehrten Monitorfunktionen koennen ohne Ein-
schraenkungen aus beliebigen Nutzerprogrammen aufgerufen wer-
den.
Ihr Aufruf kann erfolgen in der Art: 'CALL adr', wobei als
Adresse die Aufrufadresse der Monitorroutine angegeben wird.
Alle Routinen werden mit dem Befehl 'RET' beendet, so dass
die Programnfortsetzung im aufrufenden Programm gewaerlei-
stet ist.
In Anlage 4 sind wichtige Arbeitszellen des Monitors angegeben.
7
Deshalb wurde noch eine andere Art des Aufrufs bereitgestellt,
die unabhaengig von Aenderungen im Monitor stets den richtigen
Anschluss garantiert Dazu wird anstelle des Aufrufes mit
dem
'CALL'-Befehl eine der Restart-Adressen verwendet. Beim Abar-
beiten des Restart-Befehls 'RST 20' (E7H) wird ein 'CALL'-Be-
fehl zur Adresse 0020H ausgefuehrt, die Ruecksprungadresse
wurde vorher in den Keller gerettet. Auf der Adresse 20H steht
ein Sprungbefehl in den Monitor, der beim Programmstart oder
nach Reset automatisch dort eingetragen wird.
Im Monitor befindet sich dann eine Auswertelogik, die anhand
der gekellerten Ruecksprungadresse die konkret geforderte
Monitorroutine ermittelt und deren Realisierung einleitet. Die
benoetigte Auswahlinformation steht in einem dem RST-Befehl
folgenden Byte, die Ruecksprungadresse kann also direkt als
Zeiger auf dieses Byte verwendet werden, muss dann aber zur
Programmfortsetzung auf den dem Byte folgenden Befehl gestellt
werden.
Ein einfaches Beispiel soll das verdeutlichen:
In einem Programmstueck so zuerst der Bildschirm geloescht
und anschliessend eine beliebige Anzahl von Zeichen eingegeben
werden. Diese Zeichen sollen sofort wieder auf dem Bildschirm
erscheinen, die Betätigung der Entertaste beendet das Pro-
gramm und kehrt in den Monitor zurueck.
Zum Vergleich wurde dieses Beispiel einmal unter Verwendung
von 'CALL'- und einmal unter Verwendung von 'RST'-Befehlen
programmiert.
Befehls- Maschinen-
zahler code
;
; BEISPIEL MIT CALL-BEFEHLEN
;
OUTCH: EQU 0F21B ; AUSGABE ZEICHEN
INCH: EQU 0F20C ; EINGABE ZEICHEN
1000 3E 0C BSP: LD A,0CH
; LOESCHEN BILD-
SCHIRM
1002 CD 1B F2 CALL
OUTCH ; AUSGABE
1005 CD 0C F2 M1: CALL INCH ; EINGABE
1008 CD 1B F2 CALL
OUTCH ; AUSGABE
100B FE 0D
CMP ODH ; ENTER ?
100D C2 05 10 JPNZ
M1 ; NEIN
1010 C9
RET ; JA-->MONITOR
8
Falls die Funktionen des Monitors durch eigene Programmteile
realisiert werden sollen, muss der Sprungbefehl auf der Adresse
20H, der auf drei Auswerteroutinen im Monitor zeigt, durch ei-
nen Sprungbefehl in eine eigene Auswerteroutine ersetzt werden.
Bleibt die Zuordnung der Auswahlinformationen erhalten, so sind
auch in diesem Fall keinerlei Aenderungen in den eigenen Pro-
grammen notwendig die den Aufruf ueber den 'RST'-Befehl ver-
wenden.
Damit ist es z. B. moeglich, eigene Ein- and Ausgaberoutinen,
mit denen die Bedienung anderer Geraete realisiert wird, zu
verwenden und damit die Ein- und Ausgaben ueber andere Geraete
zu erreichen.
Abschliessend sei noch bemerkt, dass ein komplettes Assembler-
listing des Monitors mit Hilfe des im Anhang abgedruckten
Reassemblers durch Reassemblieren des ROM-Inhaltes erzeugt wer-
den kann.
Ab der Adresse 00B0H werden die hexadezimale Verschluesselung
des ASCII-Zeichens sowie die Anfangsadresse des zugehoerigen
Programmteiles eingetragen. Als Beispiel sollen durch die
zusaetzlichen Kommandos '@B' der BASIC-Interpreter (siehe
Abschnitt 5.2.) ab der Adresse 0100H gestartet werden bzw.
durch '@C' ein Wiederstart ab der Adresse 0103H erfolgen.
9
Die Eingabe zusaetzlicher Progrmmteile kann z. B. im Adressbe-
reich zwischen 0100H und 03FFH erfolgen, da die meisten Pro-
gramme nicht unterhalb von 0400H arbeiten und die Arbeitszellen
des Monitors unterhalb von 0100H liegen. Diese zusaetzlichen
Programmteile muessen allerdings immer wieder in den Speicher
gebracht werden, da sie mit Ausschalten des Gerätes verloren-
gehen. In dem nachfolgenden Abschnitt wird die Eingabe, Spei-
cherung und Testung selbsterstellter Programme beschrieben.
Da aber nur der Monitor in einem nichtfluechtigen Speicher
steht, gehen andere, meist sehr muehsam eingegebene Programm-
teile nach dem Ausschalten wieder verloren. Aus diesem Grund
ist es notwendig, sich eine Programmbibliothek auf einem ex-
ternen Datentraeger anzulegen, in die jedes neue Programm auf-
genommen wird, um es fuer spaetere Nutzung immer wieder zur
Verfuegung zu haben. Im Monitor sind zu diesem Zweck die Kom-
mandos "L" (load from cassette) und "S" (Save to cassette) ent-
halten. Mit diesen Kommandos ist es moeglich, Programme aus
dem Speicher auf ein Magnetband, auszulagern und wieder in den
Speicher zu laden.
Die Eingabe der Programme erfolgt beim erstenmal meist mittels
der Tastatur. Im allgemeinen wird die hexadezimale Ziffern-
folge, die in einem vorgegebenen Speicherbereich eingetastet
werden soll, einer Liste entnommen (z. B. die in diesem Buch
enthaltenen Testbeispiele).
Diese Listen entstanden entweder als Resultat eines Ueber-
setzungslaufes auf einer EDV-Anlage oder wurden durch manuelle
Uebersetzung selbst gefertigt. In jedem Fall wird es sich um
ein in sich abgeschlossenes Programmteil handeln. Eine Pro-
grammaenderung oder -erweiterung waehrend der Eingabe wird
kaum zu brauchbaren Ergebnissen fuehren.
Einige Programmteile, die als Liste geliefert werden, sind nur
ein Speicherabzug in der Art, wie er auch mit den D-Kommando
auf dem Bildschirm zu sehen ist.
10
Mit dem Parameter wird die Anfangsadresse des Programmes an-
gegeben. Es ist zweckmaessig, vorher die Tastatur mit dem
H-Kommando in die hexadezimale Eingabe zu schalten. Die Zif-
fern sind jetzt ohne Benutzung der Shift-Taste direkt erreich-
bar. Anschliessend kann ein grosser Bereich der Liste einge-
geben werden.
Es empfielt sich, nach einer bestimmten Anzahl von hexadezima-
len Ziffern die Eingabe mit dem Semikolon ";" zu beenden und
mit dem Kommando 'D :' den bis dahin eingetasteten Abschnitt
zu kontrollieren. Die zeilenweise mitausgegebenen Pruefsummen
(CS) koennen mit dem Listenausdruck verglichen werden. Die
weiteren Bloecke werden dann wieder mit dem M-Kommando ab der
Abbruchadresse eingegeben.
Nach endlicher Zeit steht das Programm im gewuenschten Spei-
cherbereich und entspricht dem Original auf der Liste. Es
waere nun grundfalsch, sofort mit der Abarbeitung zu beginnen,
vielmehr sollte das Programm zuerst einmal auf Magnetband ab-
gespeichert und somit gesichert werden. Das erspart wiederhol-
tes Eingeben von Programmteilen ueber Tastatur und erleichtert
die Arbeit wesentlich.
Meist wird man diese Abspeicherung nicht gleich auf dem Mag-
netband vornehmen, auf dem sich die anzulegende Programmbib-
liothek befindet, sondern definiert ein anderes als "Arbeits-
band".
Auf jeden Fall sollte man sich sehr genau die Bandstellen zu
Beginn und Ende sowie die im S-Kommando verwendeten Parameter
notieren. Das erleichtert ein spaeteres Wiederauffinden der
gespeicherten Informationen und gewaehrleistet das ordnunge-
gemaesse Einlesen in den Speicher.
Moechte man das wiederholte Einlesen vom Band, das ja auch
einen gewissen Aufwand erfordert, so gering wie moeglich
halten und ist noch genuegend Speicherplatz frei, empfielt
sich auch folgende Methode:
Mit dem T-Kommando (Transfer) wird eine gleichartige Kopie des
Programms in einem anderen, nicht genutzten Speicherbereich
erzeugt. Falls jetzt das Programm beim Testen zerstoert, wird
ist es moeglich, wieder mit dem T-Kommanda die Kopie auf den
urspruenglichen Speicherbereich zurueckzuspeichern und damit
das Programm wieder herzustellen.
Im allgemeinen werden Programme nach dem Eingeben nicht sofort
richtig und fehlerfrei arbeiten, dazu sind zu viele Fehlermoeg-
lichkeiten vorhanden. Sie reichen von einfachen Eingabefehlern
ueber falsche Anschlussstellen bishin zu Fehlern im Programm-
entwurf (insbesondere bei manuell assemblierten Programmen).
11
Zum Testen von Programmen unter den fuer diese Verhaeltnisse
typischen Bedingungen ergibt sich etwa nachfolgende Herange-
hensweise, die mit fortschreitendem Erfahrungsstand indivi-
duell modifiziert werden kann:
- Zu Beginn der Programmtestung wird mit dem I-Kommando der
Registerrettebereich geloescht und damit ein definiertes
La-
den der CPU-Register gewaehrleistet.
- Der Haltepunkt wird mit dem B-Kommando auf den ersten zu
testenden Befehl des Programmes gesetzt und mit dem E-Kom-
mande gestartet.
- Mit Erreichen des Haltepunktes wird mit dem N-Kommando eine
schrittweise Abarbeitung vorgenommen. Gegebenenfalls ist
die
Ausgabe der Registerinhalte auf Ausfuehrung der Befehle
zu
kontrollieren.
- Auftretende Programmschleifen sowie haeufig aufgerufene
Routinen (Unterprogramme) sind mindestens einmal im
Schrittbetrieb abzuarbeiten. Sofern man danach von der
Richtigkeit dieser Programmteile ueberzeugt ist, wird bei
wiederholtem Aufruf die Haltepunktadresse auf den dem Aufruf
oder dem Schleifenausgang folgenden Befehl gelegt und damit
diese Programmteile direkt abgearbeitet.
- Alle im schrittbetrieb abgearbeiteten Befehle werden bei
richtiger Funktion in der Liste abgehakt, damit ist jeder-
zeit ein Ueberblick ueber das zu testende Programm vorhanden.
- Falls die Testung des Programmes nicht auf einmal durch-
gaengig erfolgen kann, sei es durch zu grossen Programmumfang
oder durch Programmabsturz (undefiniertes Verhalten), kann
mittels Aktivieren des letzten erfolgreich erreichten Halte-
punktes oder der in Schrittbetrieb erreichten Adresse das
zu
testende Programm jederzeit wieder neu gestartet werden.
Der
weitere Ablauf ist dann genauso wie bereits beschrieben.
- Falls durch den Monitor nicht bereits die Protokollierung
der Monitorbefehle bei Monitorrufen verhindert wird, sollte
durch Setzen der Haltpunktadresse auf den dem Monitorruf
folgenden Befehl diese Protokollierung ausgeschlossen worden.
Bei Beachtung dieser Hinweise ist die Austestung aller Pro-
gramme moeglich. Sollten waehrend der Testung in Programm Feh-
ler festgestellt werden, die eine Vernaenderung der Programm-
struktur erforderlich machen, ist das bei den im Maschinenkode
vorliegenden Programmen besonders schwierig. Entweder man be-
mueht sich um eine Aenderung mit anschliessender Neuueberset-
zung oder es wird an der zu aendernden Stllen eine Maschinen-
kodeeinfuegung vorgenommen.
12
An der durch den 'CALL'-Befehl adressierten Stelle stehen als
erstes die durch die Einfuegung verdraengten Befehlsbyte sowie
die geplante Erweiterung. Mit einem 'RET'-Befehl wird die Ab-
arbeitung wieder an der urspruenglichen Stelle im Programm
fortgesetzt.
Diese Art der Maschinenkodeerweiterung ist zu Testzwecken
durchaus moeglich, sollte aber zu einem spaeteren Zeitpunkt
durch Aenderung im Programm und Neuuebersetzung Beruecksich-
tigung finden.
Wenn die Programme vollstaendig ausgetestet sind, werden sie
in die Programmbibliothek aufgenommen. Auf diesem Magnetband
befinden sich eine Reihe von bereits ausgetesteten Programmen,
die bei Bedarf in dcn Speicher geladen werden koennen.
Allergroessten Wert ist auf ein genaues Inhaltsverzeichnis zu
legen, damit diese Programmteile wiedergefunden und spaeter
problemlos geladen werden koennen.
Dieses Laden erfolgt mit dem L-Kommando des Monitors, nachdem
zuvor die benoetigten Parameter dem Inhaltsverzeichnis entnom-
men wurden. Von besonders wichtigen Programmteilen sollte man
sich noch eine weitere Kopie anlegen, um bei einer eventuellen
Zerstoerung der Programmbibliothek diese jederzeit wieder her-
stellen zu koennen.
Kemeny und Kurtz haben mit ihrem einfachen Aufbau genau ins
Schwarze getroffen. Die Erwartungen haben sich erfuellt:
BASIC wurde eine sehr populaere Programmiersprache. Sie hat
sich im Unterricht bewaehrt, und auch im Laboratorien und in
Betrieben gibt es zahllose Computer, die den Befehlen in BASIC
gehorchen.
Ein Vorteil ist die einfache Dialogfaehigkiet, BASIC-Zeilen
erscheinen so wieder auf dem Bildschirm, wie sie eingegeben
wurden. Ausserdem koennen einzelne Anweisungen sofort ausge-
fuehrt werden. Auf diese Weise kann der Computer an Stelle
eines Tischrechners verwendet werden. Auf diese Betriebsart
wird noch genauer eingegangen.
An dieser Stelle sei auch auf einen Nachteil des Interpreters
hingewiesen. Wie spaetere Beispiele zeigen werden, kann ein
Teil des BASIC-Programmes haeufiger als nur einmal ausgefuehrt
werden, z. B. bei der Unterprogrammarbeit oder in Programm-
schleifen. Vom Interpreter wird aber jedesmal, wenn der ent-
sprechende Abschnitt an der Reihe ist, Anweisung um Anweisung
neu interpretiert. Das hat zur Folge, dass solche Programme
laengere Verarbeitungezeiten gegenueber gleichen Programmloe-
sungen in Maschinensprache erfordern. Im Extremfall kann das
dazu fuehren, dass besonders zeitkritische Probleme nur in
Maschinensprache loesbar sein werden. Diese Maschinenprogramme
koennen dann innerhalb einer BASIC-Anweisung aufgerufen wer-
den.
14
Im Anhang ist eine Liste des Maschinenkodes des BASIC-Inter-
preter-Programmes enthalten. Diese Liste von Maschinenbefehlen
muss beim ersten Mal per Hand in den Rechner eingetippt wer-
den, wobei bei Adresse 0100H zu beginnen ist. Diese muehsame
Arbeit ist aber nur beim erstem Mal notwendig. Deshalb soll
an dieser Stelle darauf verwiesen werden, dass dabei entspre-
chende Sorgfalt von Noeten ist. Ein einziger Fehler kann das
Interpreterprogramm funktionsunfaehig machen.
Das Eintippen erfolgt mit dem in 1.3. kennengelernten M-Kom
mando. Es wird immer ein kleiner Abschnitt eingegeben und an
schliessend mit dem D-Kommando wieder angezeigt. Durch Ver-
gleich mit den Pruefsummen je Zeile auf dem Bildschirm und in
der Liste wird die Fehlerfreiheit festgestellt. Muss die Ar
beit unterbrochen werden oder ist der Interpreter vollstaendig
eingegeben, kann er wie jedes andere Maschinenkode-Programm
auf Magnetband gespeichert werden und steht ab jetzt immer zur
Verfuegung. Soll jetzt mit dem MRB Z1013 ein BASIC-Programm
bearbeitet werden, so muss vorher nur noch der BASIC-Interpre-
ter von Magnetband in den Adressbereich 0100H bis 0BFFH gela-
den und mit dem J-Kommando ab Adresse 0100H gestartet werden.
Immer wenn das Zeichen '>' auf dem Bildschirm auftaucht, be-
findet sich der Interpreter in einer Eingabeschleife, d. h.,
dass der Interpreter zur Eingabe von Befehlen, Kommandos oder
Programmzeilen bereit ist. Eine solche Programmzeile hat fol-
genden Aufbau: [Zlnr] anweisung 1 [; anweisung 2, ... ]. Die
eckige Klammer bedeutet, dass diese Eingaben nicht unbedingt
getaetigt werden muessen.
Die Laenge einer Programmzeile darf 64 Zeichen nicht ueber-
schreiten. Jede Programmzeile und jede Kommandoeingabe ist mit
der Enter-Taste abzuschliessen
Beginnt die eingegebende Zeile mit einer Zeilennummer (Zlnr),
so wird diese Zeile als Programmzeile interpretiert und ab-
gespeichert. Diese Zeilennummern sind ganze Zahlen im Bereich
zwischen 1 und 32767. Bei der Numerierung der Programmzeilen
geht man sinnvollerweise in Zehnerschritten vor. Dadurch er-
gibt sich die Moeglichkeit, noch genuegend Einfuegungen in be-
reits bestehende Programme vorzunehmen. Die Abarbeitung des
BASIC-Programmes erfolgt in der Reihenfolge der Zeilennummern.
15
Die Arbeit ohne Zeilennummer nennt man auch Tischrechnermodus.
>A=66-20; PRINT A
46
READY
Innerhalb einer einzugebenden Zeile kann beliebig oft mit den
Kursortasten "Kursor links '<-'" oder "Kursor rechts '->'"
korrigiert werden. Der Kursor wird unter das fehlerhafte
Zeichen bewegt und durch Eingabe des richtigen Zeichens der
Fehler behoben. Danach muss der Kursor wieder an das Zeilen-
ende gebracht werden (auf die erste freie Zeichenstelle) und
die Zeile kann mit der Enter-Taste abgeschlossen werden.
Soll eine bereits im Programmspeicher abgespeicherte Programm-
zeile geaendert werden, wird diese einfach neu eingegeben (mit
der gleichen Zeilennummer). Soll eine Zeile geloescht werden,
so muss nur ihre Zeilennummer angegeben werden.
Alle Befehle und Kommandos koennen mit einem Punkt nach dem
ersten oder nach weiteren Buchstaben abgekuerzt werden. In der
im Anhang befindlichen Befehlsliste sind die moeglichen Ab-
kuerzungen zu finden. Es sind auch kuerzere Varianten der
Befehle moeglich, aber dadurch kommt es im Interpreter unter
Umstaenden zu Verwechslungen mit anderen Befehlen und zu
fehlerhaften Abarbeitungen.
Auch Leerzeichen zwischen den einzelnen Elementen der Pro-
grammzeilen koennen weggelassen werden. Diese beiden Moeglich-
keiten der Programmverkuerzung erlauben es, den Programmspei-
cher besser auszunutzen, um mehr Programmzeilen unterzubrin-
gen. Dadurch geht aber die Uebersichtlichkeit der Programme
verloren.
Es duerfen mehrere Anweisungen in einer Programmzeile unterge-
bracht werden. Diese Anweisungen sind durch ein Semikolon
voneinander zu trennen.
Der BASIC-Interpreter realisiert eine einfache Ganzzahlarith-
metik in den vier Grundrechenarten Addition, Subtraktion,
Multiplikation und Division (+ - * /) im Zahlenbereich von
-32768 bis +32767. Aus diesem Grund besitzt er nur einen
Datentyp. Zu beachten ist, dass auch die Division nur ganz-
zahlig ausgefuehrt wird, d. h., dass z. B. 9/4=2 ist. Der Teil
des Resultates hinter dem Komma wird einfach weggelassen.
Den meisten der Schluesselworte folgt ein weiterer Ausdruck.
Das koennen Zahlen, Variable oder arithmetische Konstruktionen
mit diesen sein. Erforderlichenfalls sind derartige Konstruk-
tionen mit Klammern aufzubauen, um diese Konstruktionen mathe-
matisch eindeutig zu machen. Der Interpreter arbeitet nach
16
Als Variable sind alle Buchstaben des Alphabets von A bis Z
erlaubt. Eine Variable darf aber nur aus einem einzelnen
Buchstaben bestehen. Es koennen nur Grossbuchstaben verwendet
werden.
Mit dem Symbol '@' ist die Nutzung eines eindimensionalen
Feldes (Vektor) moeglich. Die Teilanweisung @(A) stellt dabei
das A-te Element des Feldes dar. Anstelle von A kann sowohl
ein anderer Buchstabe des Alphabetes als auch eine Zahl oder
eine arithmetische Konstruktion stehen, d. h. ein Ausdruck wie
oben bereits beschrieben.
Werden bei der Arbeit mit dem BASIC-Interpreter Syntaxfehler
gemacht, so werden diese Fehler erkannt und angezeigt. Logi-
sche Fehler im Programm kann der Interpreter nicht finden,
das bleibt dem Geschick des Programmierers ueberlassen. Der
BASIC-Interpreter kennt drei verschiedene Fehlermeldungen:
WHAT? - Das Schluesselwort bzw. der Ausdruck sind nicht er-
laubt bzw. fehlerhaft,
d. h. der Interpreter versteht
die Anweisung nicht.
HOW? - Die Ausfuehrung der Anweisung ist im Rahmen der Moeg-
lichkeiten dieses Interpreters
nicht moeglich (z. B.
bei einer Zahlenbereichsueberschreitung).
SORRY - Die Ausfuehrung der Anweisung ist zwar moeglich, aber
nicht unter den aktuellen
Voraussetzungen( z. B. der
Programmspeicher ist
erschoepft).
Tritt eine Fehlermeldung bei der Abarbeitung eines Programmes
auf, so wird zur Fehlermeldung auch die Zeile ausgegeben, in
der der Fehler aufgetreten ist. An der fehlerhaften Stelle
wird vom BASIC-Interpreter ein Fragezeichen eingefuegt. Das
erleichtert die Fehlersuche.
LIST
Dieses Kommando bewirkt das Auflisten des im Speicher stehen
den BASIC-Programmes auf dem Bildschirm. Dadurch lassen sich
Programme leicht kontrollieren.
17
>LIST 10 Auflisten des BASIC-Programmes ab der Zeile 10
Es werden
genau 20 Zeilen aufgelistet.
RUN
Mit dem Kommando 'RUN' wird ein BASIC-Programm gestartet. Bei
der Abarbeitung wird mit der niedrigsten Zeilennummer begon-
nen. Ist die letzte Zeile abgearbeitet oder eine 'STOP'- An-
weisung erreicht, kehrt der Interpreter in die Eingabeschlei-
fe zurueck und meldet sich mit 'READY' und auf der naechsten
Zeile mit den Aufforderungszeichen '>'. Er erwartet jetzt
weitere Kommando- oder Befehlseingaben.
NEW
Das im Speicher vorhandene BASIC-Programm wird scheinbar ge-
loescht. Tatsaechlich ist es noch im Programmspeicher enthal-
ten, wird aber bei Neueingabe eines Programmes ueberschrie-
ben.
BYE
Mit 'BYE' wird die Arbeit mit dem BASIC-Interpreter beendet
und ins Monitorprogramm zurueckgekehrt. Das zuletzt eingege-
bene Programm befindet sich noch im Speicher. Wird an dessen
Inhalt nichts geaendert, kann mit dem Monitorkommande 'J 0103'
wieder der BASIC-Interpreter aktiviert werden (Restart). Jetzt
erscheint nur ein 'READY' und in der naechsten Zeile das Auf-
forderungszeichen '>' auf dem Bildschirm. Die Arbeit mit dem
BASIC-Interpreter kann fortgesetzt und das vorher eingegebene
Programm wieder gestartet werden.
END
Dieser Befehl wird zum Vergroessern des vom Interpreter ge-
nutzten Programmspeichers verwendet. Mit 'END' kann also das
Programmspeicherende neu gesetzt werden, z. B. bei Speicher-
erweiterung. Laesst der augenblickliche Ausstattungsgrad des
MRB Z1013 diesen Speicherbedarf nicht zu, weil er real nicht
vorhanden ist, wird die Fehlermeldung 'SORRY' ausgegeben. Da-
bei ist zu beachten, dass ein Bereich von 140 Byte hinter den
Programmspeicher freibleibt, der vom BASIC-Interpreter intern
verwaltet wird.
Beispiel:
>END HEX(3FFF)-140
Die oben aufgefuehrten Kommandos duerfen in keinen Programm
auftauchen, sie dienen nur zur Arbeit mit dem Interpreter und
werden prinzipiell sofort ausgefuehrt.
18
Mit dem Kommando CSAVE "name" wird ein BASIC-Programm unter
dem angegebenen Namen auf Magnetband abgespeichert. Dabei kann
der Name maximal 16 Zeichen umfassen und muss von Anfuehrunge-
zeichen eingeschlossen sein.
CLOAD
Mit diesem Kommando wird ein durch CSAVE abgespeichertes
BASIC-Programm wieder von Magnetband eingegeben. Zur Kontrolle
wird der im CSAVE-Kommande verwendete Name auf dem Bildschirm
ausgegeben.
Definiert den Anfang einer Ergibtanweisung, d. h. einer Wert-
zuweisung. 'LET' muss nicht vorangestellt werden, es dient
lediglich der besseren Uebersichtlichkeit.
Die im folgenden angegebenen Beispiele stellen nicht in jedem
Fall Programme dar, sondern koennen auch nur Varianten eines
Anweisungstypes verdeutlichen.
>10 LET A=1
>20 A=50;B=30
>30 LET C=A-B+3
>40 LET X=3+A+(B-3)/C
>50 LET @(3)=24
IF
Mit der 'IF'-Anweisung werden Bedingungen fuer die Ausfuehrung
einer der Anweisung folgenden Anweisung festgelegt. Im Zusam-
menhang mit der GOTO-Anweisung lassen sich damit Programmver-
zweigungen realisieren.
>100 IF B=10 GOTO 200
>108 IF C=0 PRINT 'FERTIG'
>115 IF A+B<100 A=A+1;GOTO 100
Die 'IF'-Anweisung selbst darf keine Folgeanweisung in einer
Programmzeile sein, muss also immer am Zeilenanfang stehen.
Die 'IF'-Anweisung ist damit einer Vergleichsoperation gleich-
zusetzen.
Nachfolgend sind alle erlaubten Vergleichsoperatoren aufge-
fuehrt:
>= groesser gleich
# ungleich
> groesser
= gleich
< kleiner
<= kleiner gleich
19
GOTO
Unbedingter Sprung zu einer Zeile, deren Zeilennummer direkt
angegeben wird, oder sich aus den angegebenen Ausdruck berech-
net. 'GOTO zlnr' als Direktanweisung (ohne vorangestellte Pro-
grammzeilennummer) startet das Programm ab der angegebenen
Zeilennummer. In Verbindung mit 'IF' kann 'GOTO' zur Konstruk-
tion von bedingten Sprunganweisungen verwendet werden (siehe
auch Beispiele der 'IF'-Anweisung).
>100 GOTO 120
>GOTO 120
>110 GOTO 120+B
>120 GOTO A
>120 IF A>0 GOTO 100
FOR...TO...STEP...NEXT
Damit lassen sich leicht Programmschleifen aufbauen, die mit
einer freibestimmbaren Anzahl von Schleifendurchlaeufen ab-
gearbeitet werden sollen. Jede mit 'FOR' eroeffnete Schleife
muss mit einer NEXT-Anweisung, die die gleiche Zaehlvariable
wie die FOR-Anweisung beinhaltet, abgeschlossen werden.
>100 N=10
>110 FOR I=0 to N
>120 LET a=I*10;b=I*I
>121 PRINT A,B, A*B
>150 NEXT I
>160 ...
Der Programmabschnitt von Zeile 110 bis Zeile 150 wird N-mal
durchlaufen, wobei '1' mit dem Wert '0' beginnend in jedem
Durchlauf um '1' erhoeht wird, bis der Wert N ueberschrittcn
wurde. Danach wird die Schleife verlassen-
Eine Schrittweite wird mit dem Schluesselwort STEP gekenn-
zeichnet. Wird STEP weggelassen, wird der Standardwert 1 ge-
nommen.
In der 'FOR..NEXT'-Anweisung koennen die Anfangs- und End-
werte sowie die Schrittweite der Schleifendurchlaeufe fuer
die Zaehlvariable (im Beispiel das 'I') beliebige arithmeti-
sche Konstruktionen bzw. Ausdruecke sein. Bei jeden Schleifen-
durchlauf wird die Zaehlvariable um den Wert der Schrittweite
veraendert, bis der Endwert ueberschritten wird. Bei negativer
Schrittweite ist auf die richtige Angabe der Anfangs- und End-
werte zu achten.
20
Eine 'FOR-NEXT'-Schleife kann zu jedem beliebigen Zeitpunkt
durch eine 'IF..GOTO'-Anweisung verlassen werden. Es darf aber
nicht in eine 'FOR...NEXT'-Schleife von ausserhalb der Schlei-
fe hineingesprungen werden.
GOSUB...RETURN
Mit GOSUB erfolgt der Aufruf eines in BASIC geschriebenen
Unterprogramms, welches mit 'RETURN' beendet werden muss. Nach
dem Befehl 'RETURN' wird mit dem, dem Unterprogrammruf folgen-
den Befehl im BASIC-Programm fortgesetzt. Unterprogramme sind
dort sinnvoll, wo gleiche Programmteile an mehreren Stellen
benoetigt werden. Dadurch wird Speicherplatz eingespart.
(aehnliche Problematik der MC-Programmierung, siehe Abschnitt
4.) Innerhalb eines Unterprogrammes sind die Variablen des
rufenden Programmes ebenfalls gueltig und werden zur Parame-
ter- und Ergebnisuebermittlung genutzt.
>120 C=25;GOSUB 180;PRINT 'ZEIT',
>125 C=60;GOSUB 180;PRINT 'SCHLEIFE'
...
>170 STOP
>180 REM ZEITPROGRAMM
>190 IF C#0 C=C-1; GOTO 190
>210 RETURN
REM
Dadurch werden in einen BASIC-Programm; Kommentarzeilen gekenn-
zeichnet. Sie dienen der besseren Uebersichtlichkeit der Pro-
gramme und werden bei der Abarbeitung durch den Interpreter
ueberlesen. Die Programmzeile belegt aber entsprechend ihrer
Laenge Speicherplatz in RAM-Bereich des Rechners.
>110 REM LET C=1024
>180 REM ZEITPROGRAMM
Diese Zeilen werden nicht mit abgearbeitet.
INPUT
Dadurch wird die Eingabe von numerischen Werten mittels der Ta-
statur ermoeglicht. Ein eingegebener Wert wird dabei einer Va-
riablen zugeordnet. Alle eingegebenen Zeichen werden wieder auf
dem Bildschirm ausgegeben. Korrekturen der Eingabe sind mit der
Taste 'Kursor links' bzw. 'Kursor rechts' moeglich. Die gesamte
21
Nach der 'INPUT'-Anweisung kann ein in Hochkomma eingeschlos-
sener Text angegeben werden, welcher bei der Ausfuehrung der
Anweisung auf dem Bildschirm mit ausgegeben wird. Mittels
einer 'INPUT'-Anweisung koennen mehrere Eingaben ausgefuehrt
werden. Anstelle einer Zahl kann auch ein Ausdruck eingegeben
werden.
>10 INPUT X
>20 INPUT 'SPRUNGWEITE' S
>30 INPUT 'WERTEPAAR A'A,B
>RUN
X: eingabe
SPRUNGWEITE: eingabe
WERTEPAAR A: eingabe B: eingabe
Das Wort 'eingabe' erscheint nicht auf dem Bildschirm, es
wurde hier nur verwendet, um deutlich zu machen, dass an
dieser Stelle eine Eingabe mittels der Tastatur erfolgt.
>20 INPUT ' 'S
>RUN
: eingabe
Damit wird die Ausgabe von numerischen Werten und von Textket-
ten ermoeglicht. Texte sind dabei in Hochkomma einzuschlies-
sen. Mehrere Ausgabeparaneter innerhalb einer 'PRINT'-Anwei-
sung sind mit Komma voneinander zu trennen. Zahlen werden bei
fehlender Formatangabe sechsstellig mit unterdrueckten Vornul-
len rechtsbuendig ausgegeben (d. h.: eine einstellige Ziffer
beansprucht sechs Zeichenpositionen auf den Bildschirm, wobei
die ersten 5 leer bleiben und die auszugebende Ziffer die
sechste Position einnimmt).
Durch ein Doppelkreuz, gefolgt von einer Zahl 1...6), kann
diese Formatisierung geaendert werden. Die Zahl gibt die
maximal auszugebende Stellenzahl an. Die Formatisierung bleibt
bis zur naschsten 'PRINT'-Ausgabe bestehen. Wird die 'PRINT'
Anweisung mit einem Komma beendet, so beginnt die Ausgabe der
naechsten 'PRINT'-Anweisung in der gleichen Zeile nach der
vorangegangenen Ausgabe.
22
STOP
Diese Anweisung beendet die Abarbeitung des BASIC-Programmes.
Der Interpreter kehrt in die Eingabeschleife zurueck. Eine
'STOP'-Anweisung muss nicht unbedingt als letzte Anweisung
eines BASIC-Programmes stehen. Gegebenenfalls kann diese
Anweisung bei der Abarbeitung durch bedingte Spruenge
('IF...GOTO') oder Unterprogrammrufe uebersprungen werden, ehe
sie dann im weiteren Programmlauf erreicht wird.
CALL
Mit 'CALL' und einer nachfolgenden, als Hexadezimalausdruck
gekennzeichneten MC-Adresse wird ein in Maschinensprache ge-
schriebenes Unterprogramm vom BASIC-Interpreter aus gestar-
tet. Soll nach Abarbeitung des MC-Unterprogrammes die Arbeit
des Interpreters mit der folgenden BASIC-Anweisung fortgesetzt
werden, so ist das MC-Unterprogramm mit einen 'RETURN'-Befehl
(bedingt oder unbedingt, z. b. 0C9H, siehe auch Abschnitt 4,
Unterprogrammtechnik) abzuschliessen. Zur Uebermittlung der
Parameter werden die PEEK- und POKE-Befehle verwendet.
Beispiel:
>200 CALL (HEX (3000))
...
MC-Unterprogramne:
3000 3A FF 31 LD A, (31FFH)
3003 3C INC
A
3004 27 DAA
3005 32 FF 31 LD (31FFH), A
3008 C9
Das durch die CALL-Anweisung in Zeile 200 aufgerufene MC-
Unterprogramm (von Adresse 3000H bis 3009H) zaehlt den Inhalt
des Speicherplatzes 31FFH dezimal um '1' weiter. Auf diesem
Speicherplatz koennte dann mit einer PEEK-Anweisung zugegrif-
fen werden.
Mit diesem Befehl koennen also auch die Routinen des Monitors
aufgerufen werden. Das wird z. B. im Anwendungsprogramm 'Tele-
fonverzeichnis' beim Retten von Dateien praktiziert.
23
Die PEEK-Anweisung ermoeglicht den direkten Speicherzugriff
zum RAM bzw. ROM des Rechners. Die Anweisung enthaelt eine
Adresse als Parameter. Vom Speicherplatz, der durch die Adres-
se ausgewaehlt wurde, wird ein Byte als Wert einer Variab-
len dezimal zugewiesen.
>10 X=PoeK (1023)
Speicherplatz 1023 wird adressiert (dezimale Adresse)
>20 X=PoeK (HEX (3FF))
Speicherplatz 1023 wird adressiert (hexadezimale Adresse)
POKE
Mit Hilfe von POKE kann ein Speicherplatz beschrieben werden
(wobei der Speicherplatz im RAM-Bereich liegen muss). Der
erste Parameter bestimmt die Adresse des Speicherplatzes, der
zweite gibt den Datenwert an, der abgespeichert werden soll.
>10 POKE HEX (ED08),65
Der Wert 65 (dezimal) wird in den Speicherplatz mit der
Adrtsse ED08H (BWS) als 41H abgespeichert. 41H entspricht
dem ASCII-Kode fuer den Grossbuchstaben A.
>10 FOR I=0 TO HEX (3FF)
>20 POKE HEX (3000) + I, PEEK (HEX (F000) + I) ; NEXT
I
ODER
>10 A=HEX (3000); B=HEX (F000)
>20 FOR I=0 TO 1023; POKE A + I, PEEK (B + I); NEXT
I
Es wird der Monitor ab der Adresse F000 in der Laenge von 1K
Byte nach Adresse 3000H umgespeichert.
Dieses Programm entspricht dem Monitorkommande: T F000 3000
3FF. Man beachte die unterschiedlichen Ausfuehrungszeiten.
BYTE
Damit wird der Wert des nachfolgenden Ausdrucks als Hexadezi-
malausdruck auf dem Bildschirm ausgegeben. Es erfolgt nur die
Ausgabe von dezimalen Werten bis 255 als zweistellige Hexade-
zimal zahl.
>BYTE (16)
10
WORD
Diese Anweisung wirkt aehnlich wie Byte. Es werden aber hier 4
Stellen hexadezimal ausgegeben.
>10 N=1023
>20 WORD (N)
>RUN
03FF
24
Mittels der HEX-Anweisung wird eine angegebene Hexadezimalzahl
in eine Dezimalzahl umgewandelt.
>10 X=HEX (1000)
>20 PRINT X
>RUN
4096
' ' (QUOTE)
Der durch ' '(Hochkomna) dargestellte Befehl QUOTE realisiert
die Einzelzeichenunwandlung eines ASCII-Zeichens in einen De-
zimalwert. Das ASCII-Zeichen ist zwischen dem Hochkomma anzuge-
ben.
>10 X='B'
>20 PRINT X
>RUN
66
OUTCHAR
Der der OUTCHAR-Anweisung folgende dezimale Ausdruck wird als ent-
sprechendes ASCII-Zeichen auf dem Bildschirm ausgegeben. Bestimmte
Sonderzeichen werden sofort ausgefuehrt (siehe OUTCH-Funktion des
Monitors).
>10 OUTCHAR 65
>20 X=66
>30 OUTCHAR X
>40 X='C'
>50 OUTCHAR X
>60 PRINT X
>RUN
ABC
67
OUTCHAR 12 loescht z. B. den gesamten Bildschirm.
INCHAR
Die INCHAR-Anweisung ermoeglicht die Eingabe eines einzelnen
Zeichens mittels der Tastatur. Bei der Eingabe dieses Zeichens
wird es nicht auf dem Bildschirm ausgegeben. Die Enter-Taste
muss nach dar Zeicheneingabe nicht betaetigt werden. Der Wert
des ASCII-Zeichens wird der in der Anweisung mit angegebenen
Variablen zugewiesen.
>10 PRINT INCHAR; GOTO 10
oder
>10 X=INCHAR; PRINT X; GOTO 10
25
OUT
Der in der OUT-Anweisung angegebene Wert des Ausdruckes wird
an die in der Anweisung zugewiesene E/A-Adresse des MRB Z1013
ausgegeben. Der Wert darf 255 nicht ueberschreiten (255 ist
bekanntlich die groesste Dezimalzahl, die mit 8 Bit darstell-
bar ist.).
>10 OUT (0)=10
Das Bitmuster fuer 10 (00001010B) wird an die E/A-Adresse 0
ausgegeben. In der Grundvariante des MRB Zl013 ist 0H die
moegliche E/A-Adresse des PIO-Port's A, die die freie Verwen-
dung durch den Anwender ermoeglicht.
Bei Verwendung der PIO als Port darf die entsprechende Initia-
lisierung nicht vergessen werden, z. B.:
>10 OUT (1)=HEX (CF)
>20 OUT (1)=0 (Ausgabe)
bzw.
>20 OUT (1)=255 (Eingabe)
IN
Diese Anweisung ermoeglicht die Eingabe von Werten von einer
E/A-Adresse des MRB. (Adresse der Grundvariante ist 0H.) Der
Wert, der an der E/A-Adresse anliegt, wird einer Variablen
zugeordnet.
>10 X=IN (0)
IS
>10 I$ (TOP)
Eingabe einer Zeichenkette ueber Tastatur auf den ersten
freien Speicherplatz nach einem BASIC-Programm.
OS
>20 O$ (TOP)
Ausgabe einer Zeichenkette, die ab dem ersten freien Speicher-
platz nach dem BASIC-Programm gespeichert ist, auf dem Bild-
schirm.
26
Stellt die Laenge der zuletzt mit einer I$-Anweisung eingege-
benen Zeichenkette zur Verfuegung.
>10 I$ (TOP)
>20 FOR I=0 TO LEN
>30 IF PEEK (TOP + I) = 'A' PRINT (TOP + I)
>40 NEXT I
Folgende Funktionen werden ausserdem durch den BASIC-Interpreter
realisiert:
RND
Die RND-Funktion weist einer Variablen einen zufaelligen Wert
zwischen 1 und dem in der Anweisung festgelegten Endwert zu.
>10 X=RND (2000)
>20 PRINT X
>RUN
1576
ABS
Es wird der Absolutbetrag des folgenden Ausdrucks gebildet und
einer Variablen zugewiesen.
>10 A=-120
>20 A=ABS (A)
>30 PRINT A
>RUN
120
TAB
Die TAB-Funktion stellt eine sogenannte Tabulatoranweisung
dar. Die sich aus dem nachfolgenden Ausdruck ergebende Anzahl
von Leerzeichen wird auf dem Bildschirm ausgegeben. Die
nachfolgende Ausgabe von Zeichen beginnt nach diesen Leer-
zeichen.
>10 PRINT 'ANWEISUNG:',
>20 X=5
>30 TAB (X)
>40 PRINT 'TAB',
>50 TAB (6)
>60 PRINT '(',#1,'X,')'
ANWEISUNG TAB (5)
Durch die TAB-Punktion wird die Darstellung von Kurven moeg-
lich.
>10 FOR I=-5 TO 5; TAB (I*I); PRINT '*'; NEXT I
27
Die TOP-Funktion ermittelt den zum Zeitpunkt der TOP-Funktion
aktuellen ersten freien Speicherplatz hinter dem soeben ein-
gegebenen BASIC-Programm (dezimal).
>PRINT TOP
3561
SIZE
Damit wird der aktuelle freie RAM-Speicherbereich ermittelt,
der fuer ein BASIC-Programm noch zur Verfuegung steht.
>10 PRINT SIZE, 'FREIE BYTE'
>RUN
260 FREIE BYTE
Die ermittelte Anzahl freier Speicherplaetze wird SIZE zuge-
wiesen und kann im BASIC-Programm weiterverwendet werden.
Natuerlich koennen wir uns diese Denkarbeit ersparen und den
Rechner mit fertigen Programmen "fuettern", die sich ein an-
derer fuer uns erdacht hat. Das ist bei der Loesung von haefig
wiederkehrenden Problemen zweckmaessig. Hier sei als Beispiel
nur das mitgelieferte BASIC-Interpreter-Programm genannt, in
dem eine Fuelle geistiger Arbeit steckt und das einem breiten
Anwenderkreis eine vereinfachte Programmierung auf der Basis
von einheitlichen BASIC-Befehlen ermoeglicht. Wenn es aber
gilt, eigene spezifische Probleme rechentechnisch zu loesen,
kommen wir um die Aufbereitung nicht herum. Diese notwendige
Vorarbeit kann man im wesentlichen in drei Schritte einteilen:
1. Problemanalyse
2. Erarbeitung der Rechenanweisung (Algorithmus)
3. Programmierung
- Speicherplatzbedarf
- Verarbeitungszeit
- Uebersichtlichkeit
- Art der Datenein- und -ausgabe
- Bedienungskomfort.
Im folgenden soll das anhand eines Beispiels verdeutlicht wer-
den:
Wir wollen den Inhalt unseres 2K-Zeichengenerators auf dem
Bildschirm uebersichtlich darstellen. Die grafische Darstellung
soll so erfolgen, dass der Kode aller Zeichen ersichtlich ist
(siehe auch Anlage 7). Da fuer die Darstellung eines Zeichens
8 Byte notwendig sind (8x8 Bildpunkte), koennen prinzipiell
2048/8 - 256 verschiedene Zeichen dargestellt werden.
Das Bildschirmformat unseres Rechners bietet uns die Moeglich-
keit, 32 Zeilen mit jeweils 32 Zeichen darzustellen, d. h. ein
Bild kann aus max. 1024 Zeichen zusammengesetzt werden (siehe
Anlage 8). Wir koennten nun mit einem einfachen, kurzen Pro-
gramm den Zeichengeneratorinhalt mit ansteigender Kode-Zahl
"hintereinanderweg" abbilden, das ergibt 256/32 - 8 Zeilen.
Darunter wuerde aber die Uebersichtlichkeit leiden, da in
dieser gedraengten Darstellung insbesondere die Grafikzeichen,
die das 8x8-Bildpunkt-Format ausnutzen, Zum Teil ohne Ueber-
gang ineinanderfliessen. Da wir mit dieser Methode auch nur
ein Viertel des Bildschirmes ausnutzen, bietet es sich an,
die Zeichendarstellung durch das Einfuegen von Leerzeichen und
Leerzeilen aufzuspreizen. Wir erhalten damit 16 beschriebene
Zeilen mit jeweils 16 Zeichen. Diese Darstellungsart deckt
sich auch gut mit der hexadezimalen Kodierung: In der ersten
Zeile stehen die Zeichen 0H.. FH, in der zweiten (beschriebe-
nen) Zeile die Zeichen 10h...1FH usw., so dass wir auf eine
Beschriftung der Zeichen, fuer die ohnehin der Raum nicht aus-
reichen wuerde, verzichten koennen.
Auf Probleme der Verarbeitungezeit verden wir bei der Program-
mierung noch zusprechen kommen. Prinzipiell waere es moeg-
lich, den Bedienungekomfort zu steigern, z. B. eine Anwahl be-
stimmter Zeichen oder Zeichengruppen ueber die Tastatur zu er-
moeglichen und parallel dazu den Zeichenkode sowohl hexadezi-
mal als auch dezimal darzustellen. Das wuerde aber unseren
Forderungen nach Einfachheit und Uebersichtlichkeit (Erfassung
aller Zeichen auf einen Blick) widersprechen.
1. Setze auf die Anfangsadresse des Bildschirms das Zeichen
mit der Kode-Zahl 0!
2. Setze auf die nachfolgende Adresse ein Leerzeichen!
3. Wiederhole die beiden vorhergehenden Operationen mit
wachsender Adresse und ansteigender Kode-Zahl, bis
eine
Bildschirmzeile voll ist, d. h. 16 mal!
4. Schreibe eine Leerzeile, d. h. setze auf die naechsten 32
Adressen jeweils 1 Leerzeichen!
7. Beschreibe auf die gleiche Art die folgenden 30 Zeilen!
Dieser mit Worten beschriebene Algorithmus stellt eine Liste
dar, die von oben nach unten abgearbeitet wird. Dadurch wird es
schwierig, sich wiederholende Programmabschnitte (Zyklen) und
Programmverzweigumgen (Spruenge) exakt zu beschreiben.
Hierfuer erweist sich der Programmablaufplan (PAP) als ein
guenstiges Hilfsmittel bei der Erarbeitung eines Programms.
Durch die Moeglichkeit der zweidimensionalen Darstellung wer
den zu loesende Probleme anschaulicher und ueberschaubarer.
Fuer die Gestaltung eines PAP werden folgende Elemente benoe-
tigt:
Bild Bedeutung
--------------------------------------------------------------
Anweisung |
einzelne oder mehrere Operationen (Folge) |
|
Verzweigung |
Variation des Programmab- laufes in Abhaengigkeit einer oder mehrerer Be- dingungen, dadurch Aufbau von Zyklen moeglich |
|
Eingabe/Ausgabe | beliebige E/A-Operationen | |
Grenzstelle |
Anfang (Start), Unterbre- chung (Zwischenstop) oder Ende (Stop) eines Programmes |
|
Verbindungsstelle |
Verbindung von Programm- teilen |
|
Unterprogramm |
Programmteil, das an dieser Stelle aufgerufen wird |
Diese Methode soll an unserem gewaehlten Beispiel demonstriert
werden. Den vorhin angefuehrten verbalen Algorithmus koennte
man in einer groben Abstraktion folgendermassen als PAP dar-
stellen:
Der Zyklus 1 stellt eine in sich abgeschlossene funktionelle
Einheit dar, die auch als Modul bezeichnet wird. Hier die
Darstellung von Zyklus 1 als Teil-PAP:
Wir wollen das wieder an unserem Programmbeispiel ueben.
Sicherheitshalber werden bei diesem Beispiel noch einmal die
wichtigsten Bedienungshinweise mit angegeben.
Nachdem wir den Anfangszustand hergestellt haben (in Abschn.
1.2.3. ausfuehrlich beschrieben), erwartet der Rechner, der
sich jetzt im Betriebsprogramm befindet, eine Bedienereingabe.
Es signalisiert das durch Ausgabe des Zeichens "#" als Prompt-
symbol, gefolgt von einem Leerzeichen und dem Kursor "_".
Gehen wir davon aus, dass wir unseren BASIC-Interpreter ent-
sprechend den Hinweisen von Abschn. 5.3.3. auf Magnetband ge-
speichert vorliegen haben. Durch Eintippen der Anweisung
# L 100 BFF
geben wir dem Rechner zu verstehen, dass er in den Speicher
adressraum von 100H bis BFFH Daten einlagern soll. Nach dem
Positionieren des Magnetbandes (optimal ist hier ein Band-
laengenzaehlwerk) und Einschalten der Wiedergabe erwarten wir
den Kennton. Sobald er ertoent, aktivieren wir durch Druecken
der ENTER-Taste unsere vorbereitete Bedienereingabe. Der Rech-
ner liest den BASIC-Interpreter ein. Waehrend des Einlesens
befindet sich der Kursor am Zeilenanfang. Nach fehlerfreiem
Einlesen des BASIC-Interpreters erscheint unter unserer Be-
dienereingabe wieder das Promptsymbol "#".
Sollte das nicht auf Anhieb klappen, z. B. durch zu spaetes
Druecken der ENTER-Taste, erkennen wir das an der Bildschirm-
ausschrift.
Es ist z. B. moeglich, dass durch Staubkoernchen zwischen Band
und Tonkopf oder durch Kontaktfehler der Uebertragungsleitung
einzelne "Bits" verlorengehen. Das erkennt unser Rechner durch
Kontrolle der Uebereinstimmung der Summe aller Daten in einer
Zeile mit den ebenfalls im Datensatz uebermittelten Checksum-
men.
Durch Ausschrift z. B. von
CS < 0300
zeigt der Rechner uns an, dass im uebertragenen Datenblock <
Adresse 0300H ein Checksummenfehler aufgetreten ist. Es kann
auch vorkommen, dass der Rechner "steckenbleibt", d. h. der
Kursor bleibt am Bildanfang stehen, es erscheint kein Prompt-
symbol. Da hilft uns nichts weiter, als nach Abstellen der
Fehlerursachen und erneutem RESET von vorn anzufangen.
35
Im allgemeinen ist es aber weniger umstaendlich, das Einlesen
neu zu starten, vorausgesetzt, das auf Band befindliche Na-
schinenkode-Programm ist fehlerfrei abgespeichert.
Haben wir diesen Schritt erfolgreich abgeschlossen, starten
wir den BASIC-Interpreter ab der Anfangsadresse 0100H, indem
wir eingeben:
J 100.
Nach Ausfuehren von ENTER meldet sich der BASIC-Interpreter,
wie in 5.3.4. beschrieben und fordert mit dem neuen Prompt-
symbol ">" eine Bedieneranweisung, jetzt in Form von guelti-
gen BASIC-Kommandos oder -Programmzeilen.
Beginnen wir jetzt, unseren PAP in die BASIC-Sprache umzuset-
zen. Als erstes legen wir die Startadresse auf unserem Bild-
schirm fest. Sie ist uns als EC00H bekannt. Der Interpreter
erwartet aber von uns eine dezimale Adressenangabe. Wir koennen
die umstaendliche Umrechnung dem Rechner ueberlassen, indem
wir den HEX-Befehl benutzen. Unsere erste Programmzeile, der
wir entsprechend der Vorschrift aus Abschn. 5.3.4. die Zeilen-
nummer 10 zu ordnen, lautet:
10 X=HEX (EC00).
Erst durch Betaetigen von ENTER wird die Zeile als Programm-
zeile abgespeichert. Vorher ist es noch moeglich, eventuell
notwendige Korrekturen durch Verschieben des Kursors mit
"<--" und "-->", durch Ueberschreiben mit anderen Zeichen
oder durch Loeschen mit der Leerzeichentaste " "anzubringen.
Wichtig ist es, dass nur die vor dem Kursor befindlichen Zei-
chen bei Abschluss mit ENTER in die Programmzeile uebernommen
werden.
Also:
Vor dem ENTER noch einmal auf den Bildschirm schauen!
Die naechste Anweisung aus dem PAP ergibt eine neue Programm-
zeile:
20 C=0
Damit wird der Variablen C die Zahl 0 zugeordnet. Das ist
unsere Anfangsbedingung, die sichert, dass als erstes Zeichen
das mit der Kode-Zahl 0 aus dem Zeichengenerator geholt wird.
36
Wenden wir uns nun zunaechst der Programmierung von Zyklus 1
zu (vgl. PAP zu Zyklus 1).
Der Variablen L wird der Anfangswert 0 zugeordnet:
50 L=0
Da die Variable L als Zaehler dient, muss sie in jeder Pro-
grammschleife um den Wert 1 erhoeht werden:
60 L=L+1
Zum Beschreiben der Bildschirmdresse X mit dem Zeichen, Kode-
Zahl C, wird der POKE-Befehl angewendet:
70 POKE X,C
Die Kode-Nr. und die Bildschirmadresse werden anschliessend
fuer die nacehste Prograamschleife um 1 erhoeht:
80 C=C+1
90 X=X+1
Auf diese neue Adresse schreiben wir ein Leerzeichen (Kode-
Nr. 32) und erhoehen anschliessend wieder die Adresse:
100 POKE X,32
110 X=X+1
Damit diese Befehlsfolge nach eimaligem Durchlauf beendet
wird, verwenden wir den bedingten Sprung IF..GOTO Als Ab-
bruchbedingung wird der Stand unseres Zaehlers L kontrolliert:
120 IF L<16 GOTO 60
Sind wir hier erfolgreich angelangt (zweckmaessig ist hier
noch einmal die Kontrolle des bisherigen Programms mit LIST),
koennen wir das Teilprogramm bereits durch Eingabe des Komman-
dos RUN starten und damit das Beschreiben der ersten Bild-
schirmzeile ausloesen.
Sollten wir aber vorher bereits durch unser Programmieren die
unterste Bildschirmzeile erreicht haben, wird durch das in-
folge der Fertigmeldung mit READY und Erscheinen des Prompt-
symbols um 2 Zeilen weiterrollende Bild unser "Programmierer-
folg" wieder verschwinden. Um das von vornherein zu verhin-
dern, wenden wir einen Trick an, indem wir den Rechner "end-
37
200 GOTO 200
Befindet sich der Rechner in einer solchen Schleife, reagiert
er nicht mehr auf normale Eingabebefehle. Einen Abbruch er-
reichen wir Jetzt nur durch gleichzeitiges Betaetigen von 54
und K. Dann erscheint auch wieder das Promptsymbol als Zeichen
der Bereitschaft.
Wuenschen wir ueber Bedienereingabe einen leeren Bildschirm,
betaetigen wir gleichzeitig S4 und T mit anschliessendem
ENTER.
Kommenn wir nun zum Zyklus 2. Mit unseren Erfahrungen vom Zyk-
lus 1 koennen wir ihn jetzt sofort umsetzen:
130 L=0
140 L=L+1
150 POKE X,HEX(20)
160 X=X+1
170 IF L<32 GOTO 140
Wer sich nicht damit abfinden kann, dass die zweite Zeile
mit ihren 32 Leerzeichen "unsichtbar" bleibt, kann z. B. an-
stelle der Leerzeichen das Zeichen "*" (Kode-Nr. 2AH) verwen-
den:
150 POKE X,HEX(2A)
Dieser Befehl laesst sich spaeter auf Wunsch wieder zurueck-
wandeln. Durch LIST koennen wir uns ueberzeugen, dass der neue
Programmteil sich entsprechend der Zeilennumerierung in das
Gesamtprogramm eingefuegt hat.
Bei erneutem Starten des bisherigen Programms durch RUN wer-
den jetzt die ersten beiden Bildschirmzeilen ueberschrieben.
(Nicht vergessen: vor dem Weiterarbeiten S4/K druecken!)
Um unser Gesamtprogramm zu verwirklichen, muessen wir noch
den Zyklus 3 umsetzen:
30 K=0
40 K=K+1
180 IF K<16 GOTO 40
Wenn wir alles erfolgreich bewaeltigt haben, erscheint jetzt
nach RUN der komplette Zeichengenerator in angemessenen Tempo
auf dem Bildschirm. Damit ist unser kleines Programm fertig. Es
soll aber gezeigt werden, dass es auch andere Moeglichkeiten
gibt, zum gleichen Ziel zu gelangen. Wir koennen z. B. vor dem
Zyklus 1 den gesamten Bildschirm loeschen. Damit entfaellt der
Zyklus 2.
38
10 X=HEX (EC00)
20 C=0
30 OUTCHAR 12
40 FOR K=1 TO 16
60 FOR L=1 TO 16
70 POKE X,C
80 C=C+1
90 X=X+2
120 NEXT L
140 X=X+32
180 NEXP K
200 GOTO 200
Zeile 30 bewirkt das schlagartige Loeschen des gesamten Bild-
schirmes. Zeile 60..120 realisiert Zyklus 1, Zeile 40..180
stellt den Zyklus 3 dar, Zeile 90 rueckt die Bildschirmadresse
um jeweils 2 Plaetze weiter, Zeile 140 bewirkt das Uebersprin-
gen einer Zeile.
Einen interessanten Aspekt bietet die Gegenueberstellung zu
einem Maschinenprogramm, das nach demselben Algorithmus ar-
beitet wie unser Ausgangsprogramm. Es soll im folgenden kom-
plett wiedergegeben werden (man beachte die Ausfuehrungezeit
im Vergleich zum BASIC-Programm):
3000 3E 00 LD A , 00
3002 21 00 30 LD HL, EC00
3005 06 10 LD B , 10
3007 C5 PUSH BC
3008 06 10 LD B , 10
300A 77 LD M ,
A
300B 23 INC HL
3000 36 20 LD M , 20
3003 23 INC HL
30Q? 30 INC A
3010 10 F8 DJNZ 300A - #
3012 06 20 LD B , 20
3014 36 20 LD B , 20
3016 23 INC HL
3017 10 FB DJNZ 3014 - #
3019 Cl POP BC
301A 10 EB DJNZ 3007 - #
3010 76 HALT
39
Diese Erweiterungsbaugruppen sollen ebenfalls industriell ge-
fertigt und im Handel angeboten werden. Dazu gehoert ein Bau-
gruppentraeger mit Rueckverdrahtung, die ausser den Bauelemen-
ten zur Verstaerkung der Systemsignale eine Anzahl von Steck-
verbinderplaetzen enthaelt.
Versierte Bastler, die neben der Beschaeftigung mit dem MRB
Z1013 auch Freude am Selbstbau elektronischer Baugruppen
haben, werden sich ihre Erweiterungen vielleicht selbst bauen.
Dieser Selbstbau ist aber nur erfahrenen Elektronikern anzura-
ten, da tiefgruendiges Wissen und grosse Erfahrung vorausge-
setzt werden. Weiterhin ist zu beachten, dass aus Kostengruen-
den die Grundausbaustufe nur die unbedingt notwendigen Bauele-
mente enthaelt, die Systemsignale an den Steckverbinderan-
schluessen meist unverstaerkt und direkt von der CPU kommen
und damit Fehler in Erweiterungsschaltungen die Grundausbau-
stufe zerstoeren koennen.
Deshalb sollte bei umfangreichen Erweiterungen im Selbstbau
die Verstaerkung und Entkopplung der Systemsignale sowie ein
leistungsfaehigeres Netzteil an erster Stelle stehen.
Aus den angefuehrten Gruenden werden zu Hardwareerweiterungen
nur einige grundsaetzliche Hinweise gegeben, die fuer erfahre-
ne Elektroniker ausreichen duerften. Auf die Wiedergabe von
Schaltungen wird bewusst verzichtet.
ACHTUNG! Beachten Sie unbedingt den folgenden Hinweis. Es
entfallen bei der Durchfuehrung von Loetarbeiten auf der
Z1013-Leiterplatte, ausgenommen das Anloeten der Tastatur-
kabel, im Garantiezeitraum alle Garantieansprueche.
Die letztgenannte Variante erfordert fuer die Nutzung des
BASIC-Interpreters einen groesseren Arbeitsspeicher.
Achtung! Bei allen Erweiterungen ist zu beachten, dass die
Belastbarkeit der Signalleitungen und der Stromversorgung
nur fuer die Grundausbaustufe ausgelegt ist.
40
Sollte bei gewachsenen Anforderungen dieser 8 Bit breite Fort
nicht ausreichen, kann zusaetzlich mit den Spaltenauswahllei-
tungen der Tastatur eine Auswahl der Signalquellen sowie der
zu steuernden Einheiten vorgenommen werden. Es koennen damit
10 Jeweils 8 Bit breite E/A-Ports ausgewaehlt werden, ohne
dass zusaetzlicher Dekodieraufwand notwendig ist. Beispiel: Es
wird eine Information auf dem PIO-Fort A ausgegeben. Die aus-
zugebenden Daten werden durch den PIO am Steckverbinder X4 zur
Verfuegung gestellt. Durch die Ausgabe einer Spaltennummer
zwischen 0 bis 9 auf die E/A-Adresse 8 wird die entsprechende
Spaltenleitung aktiviert (Low-aktiv) und gewaehrleistet die
Datenuebernahme in das ausgewaehlte Port. Da durch den Spal-
tendekoder 10 Spaltenleitungen aktiviert werden koennen, ist
der Anschluss von 10 verschiedenen E/A-Ports am Steckverbinder
X4 moeglich. Damit stehen einem Anwender ohne grossen zusaetz-
hohen Aufwand 80 Kommandoleitungen zur Verfuegung, die nach
eigenem Ermessen in Ein- und Ausgabeleitungen eingeteilt wer-
den koennen.
41