R O B O T R O N

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


5. Software des MRB Z1013

5.1 Monitor

5.1.1. Leistungen des Monitors

Nach dem Einschalten benoetigt der Mikroprozessor eine defi-
nierte Befehlsfolge fuer seine Arbeitsfaehigkeit. Ohne ein
Betriebsprogramm, dem sogenannten Monitorprogramm, das in
einem nichtfluechtigen Speicher stehen muss, sind keinerlei
Aktionen der CPU wie Tastaturabfrage oder Ausgaben moeglich.
Der Monitor des MRB Z1013 umfasst eine Groesse von 2K Byte
und belegt den Adressbereich von F000H bis F700H. Mit diesem
Monitor kann der Benutzer Speicherbereiche ansehen, eigene
Programme von Hand oder von Magnetband eingeben, diese einge-
gebenen Programme austesten sowie auf Magnetband abspeichern.
Weiterhin ist der Start eigener, ausgetesteter Programme moeg-
lich.

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


Nachfolgend die Monitorfunktionen:

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


Tabelle 1:

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


Shift-Ebene 3:

        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


OUTHL (OUT A-Register hexadeziamal)
Adr. F31AH   DB 07H

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


TRANS (Transfer)
Adr. F51DH     DB 0FH

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


Allerdings muss bei einer eventuellen Aenderung des Monitors,
die zwangslaeufig zu neuen Adressen der Rufe fuehrt, in allen
Nutzerprogrammen, die diese Aufrufe benutzen, diese neuen
Adressen in den 'CALL'-Befehlen geaendert werden.

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


               ;BEISPIEL MIT RST-BEFEHLEN
               ;
 
               OUTCH:  EQU 0     ; AUSGABE ZEICHEN
               INCH:   EQU 1     ; EINGABE ZEICHEN
1000 3E 0C     BSP2:   LD  A,0CH ; LOESCHEN BILD
                                   SCHIRM
1002 E7                RST 20H   ; RUF
1003 00                DB OUTCH  ; AUSGABE
1004 E7        Ml:     RST 20H   ; RUF
1005 01                DB INCH   ; EINGABE
1006 E7                RST 20H   ; RUF
1007 00                DB OUTCH  ; AUSGABE
1008 FE 0D             CMP 0DH   ; ENTER ?
1OOA C2 04 10          JPNZ M1   ; NEIN
1OOD C9                RET       ; JA -> MONITOR

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.

5.1.2. Erweiterungen des Monitors

Falls der Kommandoumfang und die Leistungen des Monitors nicht
ausreichen, ist die Nutzung eigener Programmteile zur Erweite-
rung moeglich. Damit diese auch aus der Kommandoschleife des
Monitors nutzbar sind, muessen diese Kommandos mit dem Zeichen
'@' eingeleitet werden. Statt des nun ueblichen Leerzeichens
steht nun ein ASCII-Zeichen, das das aufzurufende Programm
spezifiziert. Der Anschluss zur Kommandoschleife wird in fol-
gender Weise hergestellt.

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


Dazu wird ab Adresse 0B0H eingetragen:
.
00B0   42    Zeichen "B"
00B1   00    niederwertiger Teil der Startadresse
00B2   01    hoeherwertiger Teil der Startadresse
00B3   43    Zeichen "C"
00B4   03    niederwertiger Teil der Startadresse
00B5   01    hoeherwertiger Teil der Startadresse

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.

5.2. Hinweise zum Aufbau einer Programmbibliothek

Der Monitor allein als nutzbares Programm wird bald in all
seinen Moeglichkeiten ausgeschoepft sein, so dass der Wunsch
nach weiteren Programmen geweckt wird.

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


Damit koennen recht einfach Liste und tatsaechlicher Speicher
inhalt miteinander verglichen werden. Zur Eingabe wird das
M-Kommando des Monitors verwendet.

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


Damit ergibt sich die Notwendigkeit, diese Programme auszu-
testen. Der Monitor stellt dazu einige Hilfen zur Verfuegung,
von denen Haltepunkt und Schrittbetrieb bereits erwaehnt
wurden.

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


Dazu wird an Stelle von drei oder mehr Befehlsbyte ein 'CALL'-
Befehl eingefuegt, dessen Adresse auf das erste freie Byte am
Programmende oder in einen anderen freien Speicherbereich
zeigt. Die dabei verdraengten Befehlsbyte muessen vollstaen-
dige Befehle sein, erforderlichenfalls sind mehr als drei Byte
zu ersetzen und die nicht benoetigten durch 'NOP'-Befehle auf-
zufuellen. Keinesfalls darf ein Relativsprungbefehl ersetzt
werden, da dessen Sprungdistanz von seiner Position im Pro-
gramm abhaengig ist.

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.

5.3. BASIC

5.3.1. Programmiersprache BASIC

BASIC ist eine sogenannte hoehere Programmiersprache, eine
Sprache also, die sich nicht direkt auf die Maschinensprache
des Rechners bezieht. Diese Sprache wurde um 1965 von John G.
Kemeny und Thomas E. Kurtz im Dartmouth College in den USA
entwickelt. Sie hatten dabei die Entwicklung einer Computer-
sprache vor Augen, die einerseits vom Anfaenger leicht zu
erlernen ist und andererseits viele Moeglichkeiten bietet. Man
sollte mit dier Sprache leicht numerische (Zahlen-) Probleme
angehen koennen, aber ebenso sollten Verwaltungsaufgaben, bei
denen die Textverarbeitung eine grosse Rolle spielt, in der
Sprache zu behandeln sein. Deshalb ersann man fuer diese
Sprache die Bezeichnung BASIC, ein Wort, das konstruiert wurde
aus den Anfangsbuchstaben von: Beginner's All purpose Symboic
Instruction Code (etwa: Anfaenger-Allzweck-Symbolik-Instruk-
tions-Code).
                              13
Neben den Woertern "Beginner's" und "All purpose" (Allzweck),
deren Bedeutung ohne weiterse einleuchtet, koennen die Woerter
"Symbolic Instruction Code" vielleicht ein wenig verwirren.
Damit wird nur gesagt, dass man mit einem sogenannten symbo-
lischen Befehlekode arbeitet. Das sind Schluesselwoerter, mit
denen bestimmte Verarbeitungsbefehle mit Hilfe von Symbolen
angegeben werden, z. B. das Addieren oder Subtrahieren. Also
nur wenige Woerter, deren Bedeutung bei der weiteren Beschaef-
tigung mit der Sprache ohne weiteres einleuchten wird.

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.

5.3.2. Der BASIC-Interpreter

Die eingegebenen Programmzeilen muessen ihrem Inhalt entspre-
chend bestimmte Verarbeitungsleistungen aufrufen. Diese Auf-
gabe uebernimmt der BASIC-Interpreter. Dieser Interpreter ar-
beitet Anweisung fuer Anweisung interpretativ ab, d. h. jedem
entschluesselten Befehl oder Kommando wird ein entsprechendes
Maschinenprogramm zugeordnet und mit den in der BASIC-Anwei-
sung angegebenen Zahlenwerten abgearbeitet. Diese interpreta-
tive Abarbeitung nutzt ein Maschinenprogramm fuer alle im ge-
samten Programm vorkommenden gleichen Kommandos bzw. Befehle.
Damit sind genau so viele verschiedene Maschinenprogramme not-
wendig, wie es verschiedene Kommandos und Befehle gibt. Damit
ist die Laenge des BASIC-Interpreter festgelegt, unabhaengig
von der Laenge der abzuarbeitenden Programme. Als Nachteil ist
die geringere Rechengeschwindigkeit gegenueber uebersetzten
Programmen anzusehen.

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


5.3.3. Laden des BASIC-Interpreters

Da der BASIC-Interpreter selbst ein Maschinenprogranun dar-
stellt, benoetigt er im Speicher des Z1013 einen Speicher-
platz von ca. 2.75 KByte. Dazu wird noch weiterer Speicherraum
zum Ablegen der BASIC-Programme gebraucht.

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.

5.3.4. Arbeit mit dem BASIC-Interpreter

Nach dem Start des BASIC-Interpreters erscheint auf dem vorher
geloeschten Bildschirm die Meldung 'robotron Z 1013 BASIC
3.01', in der naechsten Zeile 'READY' und am Beginn der fol-
genden Zeile das Zeichen '>' (groesser als) als Promptsymbol.

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


Alle anderen Eingaben ohne Zeilennunmmern werden als Befehl zur
sofortigen Ausfuehrung angesehen. Sind sie zulaessig werden sie
ausgefuehrt, sonst erfolgt eine Fehlermeldung. Danach kann die
naechste Eingabe erfolgen.

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


der bekannten Rechenregel: Punktrechnung geht vor Strichrech-
nung. Mehrere Klammern koennen dabei beliebig geschachtelt
werden. Innerhalb eines Befehls koennen weitere Befehle oder
Funktionen verwendet werden.

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.

5.3.5. Kommandos des BASIC-Interpreters

Im nachfolgenden sind alle Befehle und Kommandos, die der
BASIC-Interpreter verstehen und ausfuehren kann, aufgefuehrt
und erlaeutert. Zusammen mit dem im vorhergehenden Abschnitt
gesagten ergeben sich daraus alle Moeglichkeiten der im MRB
Z 1013 realisierten Programmiersprache BASIC. Die im Anhang
befindliche Befehlsliste beinhaltet auch die moeglichen
Kurzformen.

LIST

Dieses Kommando bewirkt das Auflisten des im Speicher stehen
den BASIC-Programmes auf dem Bildschirm. Dadurch lassen sich
Programme leicht kontrollieren.
                              17


>LIST     Auflisten des gesamten Programmes in aufsteigender
          Reihenfolge der Zei~ennnunrnern.

>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


CSAVE

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.

5.3.6. Programmierbare Befehle bzw. Anweisungen

LET

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


Ist die in der IF-Anweisung angegebene Vergleichsoperation
wahr, wird die in der gleichen Programmzeile folgende Anwei-
sung ausgefuehrt, sonst die nachfolgende Programmzeile abgear-
beitet.

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


 >110 FOR X=A TO N+B STEP C
 >120 ...
 ...
 >150 NEXT X

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


Eingabe ist mit der Enter-Taste abzuschliessen (nach Korrektu-
ren muss der Kursor auf die erste freie Position in der Einga-
bezeile gestellt werden!).

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

PRINT

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


 >10  X=5;Y=50;Z=500
 >20  PRINT 'ZAHL X=',X
 >30  PRINT 'ZAHL X=',#2,X
 >40  PRINT X,Y,
 >50  PRINT Z
 >RUN
 ZAHL X=5
 ZAHL X=5
      5  50  500

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


PEEK

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


HEX

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


Mit dieser Programmzeile kann die gesamte Tastatur getestet
werden. Es werden alle Tasten mit allen Shift-Tasten kombi-
niert betaetigt und dadurch der dezimale Zahlenwert auf dem
Bildschirm angezeigt. Ein Verlassen dieser Programmschleife
ist nur mit S4/K (STOP) moeglich.

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


LEN

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


TOP

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.

5.4. Hinweise fuer die Erarbeitung Anwenderprogrammen

5.4.1. Allgemeine Hinweise

In diesem Abschnitt soll dem Ungeuebten die Moeglichkeit
gegeben werden, sich anhand von einfachen Beispielen mit
grundsaetzlichen Problemen der Programmierung zu befassen.
Bevor wir beginnen unserem Mikrorechner eine Leistung abzu-
verlangen, muessen wir uns darueber im klaren sein, dass
er unsere Probleme erst dann loesen hilft, wenn wir ihm
eine eindeutige Rechenvorschrift in Form eines Maschinen-
kode- oder BASIC-Programm geliefert haben.

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

5.4.2. Problemanalyse

Um eine gestellte Aufgabe mit Hilfe unseres Mikrorechners
loesen zu koennen, gibt es ider Regel eine Fuelle von Moeg-
lichkeiten. Bei der Praezisierung unseres Problems und der An-
                              28
passung an die rechentechnischen Gegebenheiten muessen fol-
gende Gesichtspunkte in Einklang gebracht werden:

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

5.4.3. Erarbeitung der Rechnenanweisung (Algorithmus)

Nachdem wir unsere jeweilige Aufgabenstellung entsprechend
den Empfehlungen des vorhergehenden Abschnittes analysiert
und praezisiert haben, messen wir fuer unseren Rechner eine
exakte Rechenvorschrift aufstellen.
                              29
Fuer unser gewaehltes Beispiel koennte man den Algorithmus
folgendermassen beschreiben:

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 Anweisung einzelne oder mehrere
Operationen (Folge)
Verweigung Verzweigung Variation des Programmab-
laufes in Abhaengigkeit
einer oder mehrerer Be-
dingungen, dadurch Aufbau
von Zyklen moeglich
Eingabe/Ausgabe Eingabe/Ausgabe beliebige E/A-Operationen
Grenzstelle Grenzstelle Anfang (Start), Unterbre-
chung (Zwischenstop) oder
Ende (Stop) eines Programmes
Verbindungsstelle Verbindungsstelle Verbindung von Programm-
teilen
Unterprogramm Unterprogramm Programmteil, das an dieser
Stelle aufgerufen wird
                              30


Um bei einem Programmentwurf durch die Vielfalt von Programm-
teilen und Gestaltungselementen nicht die Uebersicht zu ver-
lieren, empfiehlt es sich, schrittweise den Abstraktionsgrad
zu verfeinern.

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:
erster PAP (5K)
Dieser PAP enthaelt viele Vereinfachungen, die noch nicht ge-
eignet sind fuer eine Uebersetzung in die BASIC-Sprache. Ins-
besondere die Zyklen 1 und 2 sind soweit abstrahiert, dass ihr
zyklischer Inhalt gar nicht erkennbar ist.
                              31


Wir wollen deshalb zunaechst Zyklus 1 praezisieren. Um eine
Bildschirmzeile entsprechend unseren Wuenschen zu fuellen,
muss die Anweisungsfolge (Zeichen schreiben/Leerzeichen
schreiben) mit wachsender Kode-Zahl C jeweils 16 mal wieder-
holt werden. Fuer die fortlaufende Adressierung des Bild-
schirms wird die Variable X benutzt, fuer die Anzahl der
durchlaufenen Zyklen die Variable L.

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:
PAP Zyklus 1 (4K)
                              32


Zyklus 2 besteht aus der 32fachen zyklischen Wiederholung des
Schreibens eines Leerzeichens bei ebenfalls fortlaufender Er-
hoehung der Adresse X und der Kode-Zahl C. Da der Zyklus 2 an
den abgeschlossenen Zyklus 1 anschliesst, kann die Variable L,
nachdem ihr ein neuer Anfangswert zugeordnet wurde, erneut
fuer das Zaehlen der Zyklen-Anzahl benutzt werden:
PAP Zyklus 2 (3K)
Mit der einmaligen Realisierung der Folge (Zyklus 1/Zyklus 2)
haben wir erst das Programm fuer 2 Bildschirmzeilen abgear-
beitet. Um das Gesamtprogramm zu realisieren, muessen wir die
genannte Folge 16mal abarbeiten (Zyklus 3). Als Zaehler ver-
wenden wir jetzt die Variable K. Vorher sind noch die Anfangs-
bedingungen festzulegen. Als erste Bildschirmadresse wird ent-
sprechend Anlage 8 die Adresse EC00H festgelegt, als erste
Kode-Zahl wird C = 0 gewaehlt.
                              33
Der komplette PAP soll im folgenden aus Platzgruenden unter
Verwendung der bereits aufgefuehrten Programm-Module Zyklus 1
und Zyklus 2 dargestellt werden:

fertiger PAP (4K)
Damit ist unser PAP soweit aufbereitet, dass die Umsetzung in
die Programmsprache erfolgen kann. Daraus resultiert auch die
wichtige Schlussfolgerung, dass ein Programmablaufplan auf die
verwendete Programmsprache und ihre Moeglichkeiten "maasge-
schneidert" werden muss, d. h. die Erarbeitung des PAP setzt
die gruendliche Kenntnis der Elemente der beabsichtigten Pro-
grammiersprache voraus.
                              34

5.4.4. Programmierung

Bei der eigentlichen Programmierung koennen wir die Vorteile
nutzen, die uns das BASIC durch seine Dialogfaehigkeit bietet.
Das bedeutet fuer uns, dass wir unser Programm schrittweise
aufbauen und testen koennen.

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


Prinzipiell ist es auch moeglich, beim Auftreten von einzelnen
Checksummenfehlern mit dem D-Kommando den angegebenen Daten-
block durch Vergleich mit der BASIC-Interpreter-Liste nach
rehlern abzusuchen und diese mit dem N-Kommando zu korrigie-
ren.

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


Um anfaenglichen Unsicherheiten bei fehlerhafter Bedienerfueh-
rung von vornherein entgegenzutreten, ist an dieser Stelle noch
einmal der Hinweis angebracht, die Abschnitte 5.3.4. und 5.3.5.
besonders gruendlich zu studieren und anzuwenden. Sollte z. B.
durch mehrfache Fehlerausschriften, Aenderungen usw. die Pro-
gramdarstellung auf dem Bildschirm an Uebersicht verlieren,
kann man jederzeit durch Eingabe des LIST-Kommados den aktu-
ellen Stand aller geordneten Programmzeilen erfahren.

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


los" beschaeftigen. Dazu koennen wir z. B. eine Programm-
schleife konstruieren, die den Rechner zwingt, solange einen
bedingten Sprung auszufuehren, bis durch unseren Eingriff ein
Abbruch erfolgt:

 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


Benutzen wir fuer das Bildschirmloeschen die entsprechende Mo-
nitorroutine, indem wir ueber den OUTCHAR-Befehl das Steuer-
zeichen 0CH = 12D abrufen (s.a. Abschnitt 5.1.1.), so haben wir
den Vorteil, dass das Loeschen in wesentlich kuerzerer Zeit
realisiert wird. Zum Ueben ist es zu empfehlen, hierfuer den
PAP abzuaendern. Wenn wir zur Realisierung der Programmschlei-
fen gleich noch die elegantere FOR...TO...NEXT-Anweisung be-
nutzen, koennen wir durch Loeschen und Ueberschreiben einiger
Programzeilen folgende Variante erhalten:

  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


6. Erweiterungen des MRB Z1013

6.1. Allgemeine Hinweise

Die Grundausbaustufe des MRB Z10l3 stellt das Kernstueck eines
Mikrorechnersystems dar, welches durch zusaetzliche Baugruppen
immer weiter komplettiert werden kann.

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.

6.2. Speichererweiterungen

Die Grundausbaustufe des MRB Z1013 besitzt standardmaessig
einen 2K Byte ROM mit dem Monitorprogramm im Adressbereich
F000H bis F7FFH und einen 1K Byte umfassenden statischen RAM
im Bereich EC00H bis EFFFH als BWS. Zusaetzlich ist er ab-
haengig von der Bestueckungsvariante mit 16K Byte dynamischen
RAM (Z1013.01) oder mit 1K Byte statischen RAM (Z1013.12) ab
Adresse 0000H ausgeruestet.

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


6.3. Anschluss von Steuereinheiten

Fuer kleine Steuer und Regelungsaufgaben steht als E/A-Port
eine 8 Bit-Schnittstelle des PIO's zur Verfuegung (PIO-Port
A). Dieser Peripherjeanschluss hat die ElAGrundadresse 0. Die
erforderlichen Anschluesse stehen am Steckverbinder X4 zur
Verfuegung (siehe Anlage 6). Je nach Umfang der zu steuernden
Aufgabe kann das bereits ausreichend sein. Das Fort wird im
Modus bitgesteuerte E/A betrieben und kann sowohl Eingabesig-
nale  entgegennehmen als auch den Prozess boeinflussende Sig-
nale abgeben.

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