Funkamateur 01/85

zurück zu Teil 11

Funkamateure entwickeln Amateurcomputer "AC1" (12)

Dipl.-Ing. F. HEYDER - Y21SO

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.

Einsatzerfahrungen

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.

Literaturhinweise