PROJEKT

64'er

DAS MAGAZIN FÜR COMPUTER-FANS ONLINE


Tips & Tricks zum C 16, C 116, Plus/4

64'er Ausgabe 9/September 1986, Seite 67-68

Die interessantesten Tips & Tricks zu einem Computer sind immer die, die nicht im Handbuch stehen. Exklusiv für unsere Leser haben wir einige nützliche Programmierhinweise zum C 16 herausgesucht.

Mittlerweile ist es kein Geheimnis mehr, daß der preislich enorm günstige Plus/4-Computer von Commodore in hohem Maße kompatibel zum C 16/C 116 ist. Was jedoch noch nicht genau untersucht wurde, ist eben dieses Maß an Kompatibilität.

Deshalb unser Aufruf an alle C 16-, C 116- und Plus/4 Besitzer: Forschen Sie nach den Unterschieden zwischen diesen Computern. Dabei sind weniger die Gehäuse und die Anzahl an freien Byte-RAM gemeint, sondern vielmehr die internen Unterschiede: Was muß man beachten, wenn man ein C 16-Programm auf einem Plus/4 laufen lassen möchte? Welche POKEs funktionieren auf dem einen; und welche SYS-Aufrufe nur auf dem anderen Computer?

Ein weiteres interessantes Thema: Beim Einbau einer Speichererweiterung in den C 16/C 116 verändern sich die Basic-Startadressen. Wenn zusätzlich noch die Grafik eingeschaltet wird, ändert sich wiederum die Startadresse. Wie sieht die Speichereinteilung bei der jeweiligen Konfiguration aus? Wie kann man sich in einem (Maschinen-) Programm auf die geänderten Adressen einstellen?

Lassen Sie Ihrem Entdecker-Drang freien Lauf! Sie geben damit jedem Besitzer dieser Computer nützliches Wissen an die Hand.

(tr)

Das, was vom Handbuch verschwiegen wird...

In dem Computer C 16 (beziehungsweise C 116) steckt mehr, als man ihm auf den ersten Blick ansieht. Das mitgelieferte Handbuch beschrankt sich auf das Allernotwendigste und wird damit der Leistungsfähigkeit, die das Betriebssystem mit dem komfortablen Basic 3.5, den Bildschirmfensterbefehlen und dem Monitor "TEDMON" aufweist, nicht gerecht. Mangels Information bleiben daher dem Benutzer viele interessante Möglichkeiten und Anwendungen verborgen.

Im folgenden sollen daher einige Tips und Tricks mitgeteilt werden, die der Autor bei der eigenen Programmierarbeit oder durch Analogieschlüsse von anderen Heimcomputern gefunden hat.

Cursor setzen:

Die meisten Bildschirmbefehle des C 16 werden von der Stelle auf dem Bildschirm aus durchgeführt, wo sich mehr oder weniger gewollt der Cursor befindet. Dies gilt sowohl für Ausgaben mit "PRINT" oder "PRINT USING" als auch für die Eingabeaufforderung von "INPUT"-Befehlen und schließlich für das Setzen der Ecken eines Bildschirmfensters. Der C 16 bietet zwei Möglichkeiten, durch Befehle den Cursor an eine bestimmte Stelle zu setzen. Meistens reicht der Befehl 'CHAR 1,S,Z,""' (S = Spalte, Z = Zeile) aus, aber zum Beispiel nicht für das Definieren eines Bildschirmfensters. Immer geht es mit der Befehlsfolge
POKE 205,Z:POKE 202,S:SYS 55464,
die unmittelbar eine Routine des Betriebssystems aufruft.

Bildschirmfenster setzen

Ein Bildschirmfenster läßt sich nicht nur im Direktmodus setzen, wie im Handbuch auf Seite 61 beschrieben ist, sondern auch von Basic-Programmen aus. Dazu bringt man mit Hilfe der erwähnten Betriebssystemroutine zunächst den Cursor auf die linke obere Ecke und schließt den Befehl
PRINT CHR$(27)+"T"
an. Dann setzt man in gleicher Weise den Cursor auf die linke untere Ecke und führt
PRINT CHR$(27)+"B"
aus. Mit der Char-Methode zum Cursor-Setzen funktioniert das übrigens nicht.

Escape-Tastenfunktionen

Die auf Seite 63 des Handbuches beschriebenen Escape-Tastenfunktionen für Bildschirmfenster lassen sich auch für den normalen Bildschirm ohne Installation eines Fensters anwenden.

Im Direktmodus, zum Beispiel bei der Eingabe und Editierung von Programmen, sind die Escape-Tastenfunktionen "Zeile einfügen" (I), "Zeile löschen" (D), "Cursor an Anfang" (J) oder "Ende" (K) der Zeile setzen, "Einfügungsmodus beginnen" (A) oder "beenden" (C) besonders wertvolle Hilfen, die die normalen Editierungsmöglichkeiten erheblich ausweiten.

Auch in Basic-Programmen können diese Escape-Befehle eingebaut werden: Hier ist besonders interessant das Löschen von Einzelzeilen (D) an der Cursorposition oder das Löschen von Zeilen vom Cursor (Q) bis zum Zeilenende. Für Trickeffekte kann der Bildschirminhalt nach oben (V) oder nach unten (W) gescrollt werden. Betätigt werden die Escape-Funktionen durch
CHAR 1,S,Z,CHR$(27)+"Befehlszeichen".

Dabei wird die Cursorposition gleichzeitig auf die Zeile Z und die Spalte S festgelegt.

Zugriff auf Monitorfunktionen von Basic-Programmen aus

Der Monitor "TEDMON" ist eigentlich nur im Direktmodus zugänglich. Für eine Reihe von Anwendungsfällen wäre es aber interessant, auch von Basic-Programmen aus auf Monitorfunktionen zugreifen und anschließend wieder in den Programmablauf zurückkehren zu können. Denkbare Anwendungsbeispiele sind das Kopieren von ROM-Bereichen (zum Beispiel Zeichensatz) in das RAM mit dem T-Befehl oder Laden und Sichern von Maschinenroutinen mit den L- oder S-Befehlen.

Nach folgendem Rezept läßt sich unsere Aufgabe lösen:

a) Löschen des Bildschirmes und Setzen des Cursors in Home-Stellung, zum Beispiel mit PRINT "{HOME}"

b) Ausdrucken der erforderlichen Kommandotexte auf dem Bildschirm durch die Befehlsfolge
PRINT "MONITOR" CHAR,2,6,"Befehlsstring" CHAR,1,Z,"X" (Zeile Z so wählen, daß "X" nicht von Monitorantworten überschrieben wird)
CHAR,2,Z+2,"GOTO XXX" (XXX = Zeilennummer, an der das Programm nach Beenden der Monitor-Befehle fortgesetzt werden soll.)

c) Damit diese Befehlsfolge abgearbeitet wird, müssen die "RETURNs", die im Direktmodus von Hand eingegeben werden (also das Drucken der <RETURN> Taste), nun vom Basic-Programm betätigt werden. Dazu lädt man die passende Anzahl "N" an "RETURNs" in den Tastaturpuffer mit
FOR I=1 TO N:POKE 1318+I,13:NEXT
Die erforderliche Anzahl von "RETURNs" kann man durch Probieren finden.

d) Die Anzahl "N" muß dem Computer noch mitgeteilt werden durch
POKE 239,N

Typische Befehlsstrings, die sich bewährt haben, sind zum Beispiel
"S"+CHR$(34)+A$+CHR$(34)+"1,3600,3BFF"
(sichert den Bereich 3600 bis 3BFF unter dem in A$ gespeicherten Filenamen auf einer Kassette. "CHR$(34)" erzeugt die im Format erforderlichen Anführungsstriche)
"L"+CHR$(34)+A$+CHR$+"1"
(entsprechend für Laden)
"T"+A$+" "+E$+" "+N$
(kopiert den Inhalt des Bereiches mit Anfangs- und Endadresse aus A$ beziehungsweise E$ in den Bereich mit Anfangsadresse N$)

Aneinanderladen von Programmen (Merge)

Will man zu einem Basic-Programm im Programmspeicher ein zweites Programm dazuhaben, so wird normalerweise das erste Programm ganz oder teilweise überschrieben und steht damit nicht mehr zur Verfügung. Durch einen einfachen Trick kann man aber den Interpreter so überlisten, daß er das zweite Programm an das Ende des ersten lädt. Dabei ist nur zu beachten, daß das zweite Programm höhere Zellennummern als das erste aufweist.

Vorgehensweise:
Nachdem das erste Programm geladen wurde, legt man zunächst den Beginn des Basic-Speichers vorübergehend an das Programmende. Dazu geben wir ein:
POKE 44,INT((PEEK(45)+256*PEEK(46)- 2)/256):POKE 43,(PEEK(45)+256*PEEK(46)-2) AND 255:NEW
Mit <RETURN> wird diese Befehlsfolge ausgeführt. Dann laden wir das zweite Programm. Nach dem Laden wird mit
POKE 43,1:POKE 44,16:CLR
der Originalzustand des Basic-Speichers wiederhergestellt, und es steht nun ein Gesamtprogramm, das beide Teile umfaßt, zur Verfügung.

(Dr. U. Lotter/tr)

© Originalartikel: WEKA Verlagsgesellschaft, 64'er
© HTML-Veröffentlichung: Projekt 64'er online
Erfassung des Artikels: Torsten Kalbe



8-Bit-Nirvana | 8-Bit-Forum | 8-Bit-Flohmarkt | Impressum