Nascom Journal

  

Juni 1982 · Ausgabe 6

Seite(n) für Einsteiger

von Günter Böhm

Diesmal auf dieser Seite etwas über BASIC. Dennoch bleiben wir auf der Maschinenebene; denn auf Leserwunsch sollen wir einmal etwas über PEEK, POKE, DEEK und DOKE schreiben, Diese Befehle gestatten es, direkt in den Speicher „einzusteigen“, und so könnte dieser Artikel sowohl für BASIC als auch für Assembler Interessierte nützlich sein.

Mit dem Befehl PEEK(x),​der auch auf anderen Rechnern üblich ist, kann man eine Adresse auf ihren Inhalt untersuchen. Mit PRINT­PEEK(x) können Sie den Inhalt der Adresse ausgeben lassen. Man muß nur darauf achten, daß die Adressen im Hex-System „geladen“ sind, die Ausgabe aber dezimal erfolgt. Da kann man sich keine Umrechnerei ersparen.

Interessanter als PEEK ist der POKE-Befehl. Damit kann man den Inhalt von Adressen ändern und somit direkt in Maschinenprogramme eingreifen. Wir wollen zur Anschauung einmal die Blinkgeschwindigkeit des Cursors ändern, die ja vom Betriebssystem (in meinem Fall Nassys3), also auf Maschinenebene gesteuert wird. Dazu schauen Sie zunächst einmal nach, welche Werte die verantwortlichen Adressen normalerweise enthalten. Mit PEEK(3122), das ist die Adresse des niederwertigen Bytes, und PEEK(3123), der Adresse des höherwertigen Bytes, erhalten Sie die entsprechenden Werte (PRINT nicht vergessen!). Setzen Sie das MSB (Most Significant Byte=höherwertiges B.) nun durch POKE3123,0 auf Null, und geben Sie in die Adresse des LSB (Least Significant Byte) verschiedene Werte. PEEK und POKE müssen nicht in ein Programm eingebunden werden, sie arbeiten auch als Kommandos direkt vom Keyboard (Entschuldigung, Herr Bach: von der Tastatur!).

Die Befehle DEEK und DOKE sind eine Besonderheit des Nascom. Sie bewirken das gleiche wie ihre kleineren Brüder, nur kann man hiermit zwei aneinanderhängende Adressen versorgen; d.h. mit DEEK werden zwei Bytes gelesen, mit DOKE zwei Bytes geladen. Man muß darauf achten, daß die „Doppelbytes“ in umgekehrter Reihenfolge im Speicher liegen (LSB und dann MSB). Der Hex-Wert 0C80 liegt also als 80 0C im Speicher. Letzterer Wert muß zum Umrechnen in eine Dezimalzahl verwendet werden. Ergibt sich dabei eine Zahl größer als 32767, so muß diese von 65536 subtrahiert und als negative 7ahl verwendet werden. Unser Beispiel ergibt also 3200 dez. (sehr häufig verwendet als Start eines Maschinenprogramms, da es die erste verfügbare Adresse für den Nascom-Benutzer ist). Die Adresse C8D7hex ergibt 51415 und muß als −14121 eingegeben werden.

Die DEEK und DOKE Befehle haben den Vorteil, in den BASIC Zeilen Platz zu sparen. Der Nachteil ist die schwierigere Umrechnung von dez in hex und umgekehrt (das DOKE-Programm von Reinhard Zickwolf, Journal 10-81 hilft dabei) und der Aufwand, Programme mit diesen Befehlen für andere Rechner umzuschreiben. Ich werde in Zukunft auf das Bißchen Platzersparnis verzichten und nur noch mit PEEK und POKE arbeiten. Viele Besitzer anderer Rechner als Nascom werden Ihnen dankbar sein, wenn Sie auch „durchsichtiger“ programmieren!!

Unser Beispiel mit der Blinkgeschwindigkeit ließe sich natürlich mit DOKE3122,X verkürzen, aber....

Falls Sie Maschinenprogramme des Betriebssystems aufrufen wollen, schaden die DEEKs und DOKEs allerdings nichts, denn zu diesen Routinen haben „Fremdbenutzer“ sowieso keinen Zugang. Schreiben Sie aber dann in der Dokumentation oder in REM Anweisungen genau dazu, was die BASIC Zeilen bezwecken, denn eine Rechnereigene Adresse ist für einen Besitzer eines anderen Systems selbstverständlich niemals zu identifizieren.

Hier nun einige Adressen, die zum POKEN interessant sein könnten:

Bildschirmbeginn links oben2058
Bildschirmende rechts unten3001
Beginn der Titelzeile3018
Ende der Titelzeile3065
(eine Position in gleicher Spalte eine Zeile tiefer wird jeweils durch +64 ermittelt)
Cursorposition3113
Tastendruck Verzögerung3118
Repeatgeschwindigkeit3120
Cursor Blinkgeschwindigkeit3122
$UOUT(Adresse der Ausgabe)3191
SRLX (Out über Serial Port)91
 
MTFLP (Drive LED ein/​aus)81
Get Input (BIN)105
BLINK until Input120
Get a Line (INLIN)752
Seite 20 von 24