peeks, pokes & sys
Sie stellen das Werkzeug, die Basis für den Zugriff auf schnelle Systemroutinen dar: die Peeks, Pokes und Sys-Aufrufe für den C16/116 & Plus/4.
Wer sie kennt, kann sich einiges an Programmierarbeit sparen und so manchen Peformance-Gewinn umsetzen.
Die thematische Übersicht über wichtige Peeks, Pokes und Sys-Aufrufe:Screen
- Streifen auf dem Bildschirm erzeugen
- Bildschirmflimmern anzeigen
- Bildschirmfarben einstellen
- Fenster (Windows) definieren
- Home-Position auf dem Bildschirm setzen
- Bildschirm löschen (CLR-Home)
- Bildschirm an- und ausschalten
Tastatur
- Schaltet Repeat der Tasten ab
- Tastatur abfragen
- CONTROL + S Kombination ausschalten
- Abfrage für SHIFT / CTRL und COMMODORE Tasten
- Blockieren von Gross-/Kleinbuchstaben Umschaltung
Datassette
Programmablauf
Modul
Screen
#. Streifen auf dem Bildschirm erzeugen
poke65287,70
Erzeugt Streifen auf dem Bildschirm.
poke65287,8
Schaltet wieder die normale Anzeige ein.
#. Bildschirmflimmern anzeigen
poke65299,40
Bildschirmflimmern (Zeichen) einschalten.
poke65299,208
Normalzustand wieder herstellen.
#. Bildschirmfarben einstellen
poke65301,x (x=0-127)
Bildschirmhintergrundfarbe einstellen.
poke65305,x (x=0-127)
Bildschirmrahmenfarbe einstellen.
poke65287,40
Bildschirm komplett schwarz.
#. Fenster (Windows) definieren
Definieren von Windows (Fensterbereiche) auf dem Print-Screen:
Linkes, oberes Eck:
poke2022,y (0-24)
poke2023,x (0-39)
Rechtes, unteres Eck:
poke2021,y (0-24)
poke2024,x (0-39)
Zwar ersetzt dieses keine "echte" Fenstertechnik von grafischen Benutzoberflächen, bietet jedoch im Print-Screen gute Möglichkeiten, einen bestimmten Screenbereich unabhängig vom restlichen Bildschirm abzubilden und sogar Scrolling im Fenster durchzuführen ohne den restlichen Bildschirm durcheinander zu bringen.
Wichtig: Nach dem Einrichten des Fenster unbedingt den Befehl SCNCLR durchführen.
Durch Ausführen von 2xHOME werden die Fenster wieder aufgehoben.
#. Home-Position auf dem Bildschirm setzen
sys55353
ruft die HOME Routine auf und setzt den Cursor auf die Koordinate 0,0 (x,y).
#. Bildschirm löschen (CLR-Home)
sys55374
ruft die CLR-Home (Clear Home) Routine auf. Löscht den Bildschirm und setzt den Cursor auf die Koordinate 0,0 (x,y).
#. Bildschirm an- und ausschalten
poke65286,peek(65286)and239
Schaltet den Bildschirm aus.
poke65286,peek(65286)or16
Schaltet den Bildschirm ein.
Sollen rechenintensive Vorgänge durchgeführt werden oder der Grafikaufbau beschleunigt werden, so empfiehlt es sich den Bildschirm auszuschalten um ca. 30% Rechengeschwindigkeit einzusparen.
Tastatur
#. Schaltet Repeat der Tasten ab
poke1344,0
Schaltet die Wiederholungsfunktion der Tastatur komplett ab.
poke1344,128
Schaltet die normale Wiederholungsfunktion wieder ein.poke1345,X
Stellt die Verzögerung der Repeat-Funktion ein.
#. CONTROL + S Kombination ausschalten
poke2039,x
Variable:
x=1-255
Schaltet die verlangsamte Listfunktion aus, indem es die Tastenkombination blockt.
poke2093,0
Schaltet wieder in den Normalzustand.
#. Abfrage für SHIFT / CTRL und COMMODORE Tasten
peek(1347)
Abfrage für das Drücken der Spezialtasten des Commodore Plus/4:
1= SHIFT
2= COMMODORE
3= SHIFT+COMMODORE
4= CTRL
5= SHIFT+CTRL
6= COMMODORE+CTRL
#. Blockieren von Gross-/Kleinbuchstaben Umschaltung
poke1351,128
Blockiert das Umschalten von Gross- auf Kleinbuchstaben und umgekehrt.
poke1351,0
Stellt wieder den Normalzustand her.
Datassette
#. Status der Datassette abfragen
Peek(1)
Die Rückgabewerte wie folgt:
200=Ausgeschaltet
192=Play/Rew/FastForward/Forward gedrückt
208=Play+Record
216=Störung
Programmbeispiel:
100 d=peek(1)
200 if d=216 then print "Es ist ein Fehler aufgetreten."
Programmablauf
#. Tastaturpuffer ausfüllen und ausführen
poke1319-1328,x
poke 239,y
Variablen:
x=CHR$-Codes
y=Anzahl der gepufferten Codes
Programmbeispiel:
Will man automatisiert ein Programm von einem laufenden Programm nachladen, lässt sich das hervorragend mit dem Tastaturpuffer realisieren:
10 REM *** BILDSCHIRM LOESCHEN ***
20 SCNCLR
30 REM *** HOME SETZEN UND LADEBEFEHL SCHREIBEN ***
40 PRINTCHR$(19)"DLOAD"CHR$(34)"PROGRAMMNAME"CHR$(34)
50 REM *** 2x CURSOR-DOWN SIMULIEREN ***
60 FORI=1TO2:PRINTCHR$(17):NEXT I
70 REM *** STARTBEFEHL SCHREIBEN ***
80 PRINT"RUN"
90 REM *** TASTATURPUFFER FUELLEN ***
100 POKE1319,19 : REM HOME
110 POKE1320,13 : POKE 1321,13 : REM 2X RETURN
120 POKE 239,3 : REM ANZAHL DER GEPUFFERTEN TASTENDRUECKE
130 END
Diese Verfahrensweise eignet sich hervorragend um Maschinenprogramme nachzuladen oder einen BASIC-Loader zu realisieren.
Das abgebildete Beispielprogramm kann in der Download-Sektion heruntergeladen werden.
Modul
#. Wie kann ich das Turbo Plus Modul abschalten
Manchmal reicht es nicht das Turbo Plus Modul von Kingsoft mittels dem Befehl TUROFF abzuschalten. Ein ewiges Aus- und Einbauen des Moduls ist der Haltbarkeit der sowieso schon alten Module sicherlich nicht zuträglich.
Deshalb gibt es nun ein kleines BASIC-Programm, welches das Modul softwaremäßig komplett abschaltet und so problematische Programme wieder zum Laufen bringt, obgleich das Modul sich noch im Schacht befindet:
1 SCNCLR:FORI=0TO9STEP3:READA$:CHAR,0,I,A$:NEXT
2 POKE1319,19:FORI=1320TO1323:POKEI,13:NEXT:POKE239,5:END
3 DATA SCROLLOFF,TUROFF,EXOFF,"KILL:SCNCLR"
Danke an Götz-Tobias Heger für den Tipp in der Compute mit 5/89.