Funkamateur 01/85 |
zurück zu Teil 11 |
RND RND erzeugt eine Zufallszahl, die zwischen 1 und dem Wert
des nachfolgenden Ausdrucks liegt.
> 100 A=RND(10)
Weist der Variablen eine Zahl zwischen 1 und 10 zu.
> PRINT RND(1000)
723
ABS
Der absolute Betrag des nachfolgenden Ausdrucks wird gebildet.
> 100 A=ABS(-245)
SIZE
Mit diesem Befehl wird der aktuelle, für ein BASIC-Programm noch
freie Speicherplatz bestimmt und SIZE
zugewiesen, so daß diese Information weiterverwendet werden kann.
> 100 PRINT SIZE,"BYTES FREE"
> RUN
590 BYTES FREE
PEEK
Hiermit ist der direkte Speicherzugriff möglich. PEEK erhält
als Parameter eine Adresse,
von welcher ein Byte gelesen und als Wert übergeben wird.
> 100 A=PEEK(7167)
HEX
HEX ermöglicht eine Hexadezimal/Dezimal-Konvertierung.
> 100 A=HEX(4AF2)
> 110 PRINT A
> RUN
19186
' ' (QUOTE)
Der durch ' ' dargestellte Befehl QUOTE gestattet die
Zuweisung der Dezimalzahl, der das jeweilige
angegebene ASCII-Zeichen entspricht.
>100 X='A'
>110 PRINT X
> RUN
65
TOP
Beim Aufruf wird der gerade aktuelle erste freie Speicherplatz hinter
dem eingegebenen BASIC-Programm berechnet.
> PRINT TOP
6481
IN
Damit können Variablenwerte von einer E/A-Adresse des
U-880-Systems zugewiesen werden.
> 10 A=IN(HEX(0F))
Der Variablen A wird der Wert, der dem Bitmuster, das an der
Systemadresse 0FH
anliegt, zugewiesen.
Beispiele
Abspeichern eines BASIC-Programms
>WORD(TOP)
1AF9
>BYE
#S 18C0 1AF9 803 TEST.B
Beim Abspeichern von BASIC-Programmen haben das erste und das dritte
Argument immer die
hier angegebenen Werte. Nur das zweite Argument muß mit Hilfe von
TOP immer neu bestimmt
werden, entsprechend der jeweiligen Programmlänge. Ein so
abgespeichertes Programm wird
dann einfach mit L cr geladen, und mit J: angesprungen.
Bildschirmlöschen
100 OUTCHAR 12
Parabel zeichnen
100 N=-6
110 PRINT N, "I",
120 TAB (N*N)
130 PRINT "*"
140 N=N+1; IF N<7 GOTO 110
(150 STOP)
Ersatz der Anweisung FOR..TO..STEP
100 REM FOR I=xx TO yy STEP zz
110 I=xx; REM Anfangswert xx
120 REM Anweisungen der Schleife
130 I=I + zz; IF I < xx + 1 GOTO 120
Symbolumwandlung
10 PRINT "SYMBOL:",
20 Z=INCHAR
30 OUTCHAR(Z)
40 PRINT" DEZIMAL:", #2,Z," HEXADEZIMAL:",
50 BYTE(Z)
60 PRINT
70 GOTO 10
Zeichengenerator-Testprogramm
10 REM ZEICHENGENERATORTEST
20 OUTCHAR 12
30 PRINT
40 TAB(20)
50 PRINT"TESTPROGRAMM"
60 PRINT
70 A=' '; REM LEERZEICHEN
80 OUTCHAR A; A=A+1
90 IF A#HEX(60) GOTO 80
100 GOTO 70; REM Zeile fertig
Hexdump mit ASCII-Interpretation
200 INPUT "ANFANGSADRESSE" A, "ENDADRESSE" E
210 I=A
220 WORD(I); PRINT" ",
230 J=0
240 BYTE(PEEK(I+J)); PRINT" ",
250 J=J+l; IF J < 8 GOTO 240
260 PRINT"*",; K=0
270 S=PEEK(I+K)
280 IF S<32 GOTO 300
290 IF S<127 GOTO 310
300 S='.'
310 OUTCHAR (S); K=K+l; IF K < 8 GOTO 270
320 PRINT"*"
330 I=I+8; IF I < E+l GOTO 220
340 PRINT; GOTO 200
Zur Komplettierung der Unterlagen ist in den Tabellen 8,
9,
10 und 11 die hexadezimale Liste der
derzeitigen
Versionen des Monitorprogramms und des Mini-BASIC-Interpreters
angegeben. Im Ergebnis der Testphase
haben sich beim Monitorprogramm noch einige Erweiterungen ergeben, die
im folgenden aufgeführt sind.
1. Nach jedem RESET steht in der RSA, die mit dem R-Befehl angezeigt
werden kann, die Belegung des
gesamten Registersatzes der CPU zum Zeitpunkt des RESET bzw. des
Ansprungs der Adresse 0. Das kann
bei der Fehlersuche in Programmen, die sich z.B. festgelaufen haben,
und nur noch mit einem RESET
abgebrochen werden können, hilfreich sein. Aus den
Registerbelegungen lassen sich dann meist Schlüsse
auf die Fehlerursache ziehen.
Im Normalfall erfordert das, daß die RSA nach dem Einschaltreset
mit dem I-Befehl zu initialisieren ist.
Zumindest ist vor der Benutzung der Befehle E, G und J die Belegung des
Stackpointers zu überprüfen.
Sollte dieser auf einen nicht real existierenden Kellerspeicher zeigen,
wird die Ausführung der oben
genannten Testkommandos mit der Ausschrift INIT SP verweigert, da
ansonsten die Benutzung dieser Kommandos
zum Programmabsturz bzw. zu einer Fehlerausschrift führen
würde. Mit dem I-Befehl wird der Stack
automatisch auf das vorhandene obere Ende des RAM-Bereiches des
Grundmoduls gesetzt. Also auf 2000H
bzw. 1C00H, je nachdem, ob der RAM-Speicher verdoppelt wurde oder
nicht. Wird infolge eines Fehlers
in einen Speicherbereich gesprungen, der nicht vorhanden oder mit FFH
belegt ist, erfolgt die Ausschrift
ERROR AT xxxx (xxxx Adresse, auf der der Fehler auftrat).
Für den Inhalt der RSA gilt dann das gleiche
wie nach dem RESET.
2. Die Befehle des Magnetbandinterface L, S und V können mit
Control-C jederzeit abgebrochen werden.
Bei den Befehlen L und V müssen dabei Impulse am Interfaceeingang
anliegen, um die Abbruchfunktion zu
gewährleisten. Beim Abspeichern eines Files mit dem Save-Befehl
wird nach dem Abspeichern des Namens
noch einmal für etwa 1,5 s der Kennton ausgegeben, und erst danach
folgen die eigentlichen Daten.
Beim Einlesen kann somit nach dem Erscheinen des Namens auf dem Schirm
innerhalb dieses Kenntones mit
Control-C abgebrochen werden, ohne daß schon Daten dieses Files
im Speicher stehen. Damit soll das
Auffinden eines bestimmten Files inmitten des Bandes erleichtert
werden. Beim Einlesen eines Files
von Kassette in den RAM wird geprüft, ob das jeweilige eingelesene
Byte auch wirklich in den entsprechenden
Speicherplatz übernommen wurde. Bei fehlerhaftem oder nicht
vorhandenem RAM erfolgt dann die Ausschrift
aaaa xx ff BREAK, und der Einlesevorgang wird abgebrochen (aaaa -
Adresse des Speichers, xx Sollbyte,
ff Fehlerbyte).
3. Am Ende des Monitorprogramms ist ein Sprungverteiler angebracht, um
z.B. für Erweiterungen des
Monitorprogramms oder andere Anwendungen einige bereits im Monitor
vorhandene allgemein verwendbare
Unterprogramme nutzen zu können, auch wenn in eventuellen
späteren Monitorvarianten diese eigentlichen
Unterprogramme dann an ganz anderen Stellen im Speicher stehen
können. Dieser Sprungverteiler und
dessen Reihenfolge wird auch in späteren Veränderungen des
Monitorprogramms erhalten bleiben. Aus den
genannten Kompatibilitätsgründen sollte man deshalb eine
direkte Nutzung dieser bzw. auch weiterer
Unterprogramme des Monitors möglichst vermeiden. Alle nachfolgend
erläuterten Unterprogramme, ausgenommen
den Sprung zur Monitoreingabeschleife, kehren in das aufrufende
Programm zurück, siehe Tabelle
12.
Das derzeitige Ende der Arbeitszellen des Monitors ist bei 187FH. Um
noch etwas Platz für spätere
Erweiterungen zu lassen, und um Kollisionen mit diesen Arbeitszellen zu
vermeiden, sollten Anwenderprogramme
erst ab 1900H beginnen.
Hiermit ist die Beschreibung der im EPROM residenten Grundsoftware
für den
Amateurcomputer "AC1" abgeschlossen. Der Autor wünscht viel
Spaß bei der Arbeit mit dem Amateurcomputer.
Die mittlerweile schon aufgebauten Amateurcomputer der Testserie und
das Mustergerät funktionieren nach
den Angaben der Nutzer zuverlässig und problemlos. Das
Kassetteninterface arbeitet ebenfalls ohne Probleme.
Unter Beachtung der in Teil
9 dazu gemachten Ausführungen ist auch der Programmaustausch
ohne Komplikationen
durchführbar.
Die Verdopplung des Arbeitsspeichers im Huckepackverfahren hat sich als
nützlich erwiesen, das macht bei
sorgfältiger Arbeit ebenfalls kaum Probleme. Der damit
verfügbare Arbeitsspeicher beträgt dann etwa 1,75 KByte,
was schon für viele Anwendungen ausreicht. Ein Erweiterungsmodul
zur Vergrößerung des RAM mit dynamischen
Speicherschaltkreisen (U 256) wird z.Z. bearbeitet.
Die Einarbeitung in das Mini-BASIC erfolgte bei den bisherigen
Anwendern schnell und problemlos.
Das Programmieren in Maschinensprache erfordert da schon etwas mehr
Geduld und Übung. Das Monitorprogramm
ist dabei sehr hilfreich.
Der Fernschreibbetrieb wurde ebenfalls schon mehrfach realisiert. Bei
den Einsätzen an Amateurfunkstationen
gab es wegen der HF-Einstreuungen keine Probleme, wenn die
erwähnten Gesichtspunkte hinsichtlich Abschirmung
beachtet wurden. So erfolgte 1983 z.B. ein 14tägiger Dauereinsatz
des Amateurcomputers unmittelbar neben
der Sonderamateurfunkstelle Y83MMM in Leipzig. Es konnten weder
Beeinträchtigungen des "Teltow" noch der
Funktionsweise von "AC1" festgestellt werden. Das Problem waren nur
direkte Einstreuungen von HF in den
Videokanal des TV-Gerätes bei der Arbeit auf dem 80-m-Band.
Für die Mitteilungen weiterer Einsatzerfahrungen
ist der Autor dankbar.
Abschließend möchte sich der Autor bei allen, die an der
Entwicklung dieses Gerätes mitgewirkt bzw.
Unterstützung geleistet haben, recht herzlich bedanken.
Stellvertretend für alle seien hier Siegfried, Y21YO,
Olaf, Y23FO, Dieter, Y26RO, das Haus des Radioklubs der DDR und der
Zentralvorstand der GST, Abteilung
Nachrichtenausbildung, genannt. Dank gilt ebenfalls der Redaktion
FUNKAMATEUR für die gute Zusammenarbeit.