PEEKs, POKEs & SYSe
PEEKs, POKEs & SYSe

Grundsätzlich wichtig ist die Information, auf welchem System ich mich gerade befinde. Dafür dient in TSB der Befehl RETRACE. Er gibt die TSB-Versionsnummer aus. Die aktuell geltende Nummer findet sich auch hier unter Update History.


PEEKs

Manchmal möchte man bestimmte Einstellungen seines Systems überprüfen können, man kommt aber so ohne Weiteres nicht mehr an die gesuchte Information heran, vielleicht, weil sie nur dann, wenn sie von einem Basic-Befehl ausdrücklich gesetzt wird, nach außen bekannt ist (wie es etwa bei der generellen Laufwerksnummer von TSB der Fall ist). Dafür gibt es den PEEK-Befehl zum Auslesen von Speicherinhalten.

peek(190) von USE gesetzte Laufwerksnummer auslesen

<nach oben>


POKEs

Mit POKEs kann man bestimmte Einstellungen des Systems verändern, ohne vielleicht umständliche Initialisierungen durchführen zu müssen. Meistens braucht man aber den POKE-Befehl dafür, dass man das System patchen möchte, um eine eingebaute Funktion, die nicht ganz genau das tut, was sie gerade tun sollte, dazu zu bringen es dennoch zu tun. Patches müssen nach Gebrauch sofort wieder rückgängig gemacht werden, daher immer zwei POKEs an die gleiche Stelle.


Hi-Eddi-Bilder laden
(POKE rückgängig mit SCRLD RESTORE)
poke $b1d5,36: scrld 1,dr,5,"hi-eddi": scrld restore
Zeichensatz (8 Pages) nach $E000 laden
statt 8: Anzahl Pages für beliebige Daten
poke $b1c1,8: scrld 1,dr,3,"font": scrld restore
Ziel des Ladens verlegen nach Highbyte von Ziel, z.B. nach $C000 (Normalwert: $E0) zusätzlich zum letzten POKE:
poke $b220,$c0: [Befehle von eben] :scrld restore

ROM-Zeichensatz-Bytes von Basic aus auslesen (hier in den Wert a)
Normalwert von $9252: $30
poke $9252,$31: a=mempeek($d000+x)

Führende Nullen bei USE
Normalwert von $a607: $20
poke $a607,$30: use "###.##",23.45

(Ergebnis: "023.45" statt " 23.45")

PAUSE in den SB-Modus zurückversetzen
Normalwert von $a806: $d0


Abbruchmöglichkeit ganz verhindern
Normalwert von $a809: $0d
poke $a806,$24

(Nur <Return> bricht PAUSE ab)

zusätzlich zum letzten POKE:
poke $a809,$80

Screen $0400 nutzen für Textausgaben nach MEM ohne den Befehl NRM zu verwenden... 1400 proc screen04
1410 poke$0288,$04:poke$dd00,$c7:poke$d018,$17
1420 print
1430 end proc
...und ohne MEM zum MEM-Screen zurückkehren. 1450 proc screencc
1460 poke$0288,$cc:poke$dd00,$94:poke$d018,$3b
1470 print
1480 end proc
Auf den gerade mit den Prozeduren screen04 oder screencc angewählten Bildschirmen muss zuerst ein PRINT oder CLS durchgeführt werden (Zeilen 1420 und 1470), damit das System die interne Liste der Bildschirmzeilenanfänge auf die neue Situation einstellt. Eventuelle Veränderungen an den Farben (das Farbram gilt für beide Textspeicher) kann man - wenn nötig - mit FCOL korrigieren.

Schnell Spritedefinitionen löschen, wenn sie im Bereich der Grafik liegen (mit BLOCK nach MEM; kleinstmögliche Blocknummer: BL=128, sinnvoll ab BL=160 bzw. BL=192, da sonst der Zeichensatz gelöscht wird) poke $c52d,63:poke $c52e,1:poke $c5b0,0
bb=(bl*64-$2000)/320
y=(bb*8)and248
x=int(frac(bb)*320+.5)
block x,y,x+63,y+7,0
Damit BLOCK überhaupt funktioniert, müssen die drei ersten POKEs gesetzt werden, sie initialisieren die X-Bereichsüberprüfung bei BLOCK, da der Grafikmodus ja nicht (durch HIRES) aktiviert wurde.
In der nächsten Zeile wird die Blocknummer BL auf die Bitmap umgerechnet und dann werden daraus die X- und Y-Koordinaten gewonnen. Schließlich löscht BLOCK den mit BL angewählten Sprite-Block.

<nach oben>


SYSe

Mit SYS ruft man Systemroutinen (oder auch eigene Maschinenprogramme) auf, für die es keine ausdrücklichen Basic-Befehle gibt, die aber dennoch nützlich sein können oder aber interessante Infomationen zurückliefern.

sys $9a50 " tuned" ausgeben
sys $83c9 die Standard-Textscreen-Farben von TSB herstellen
sys $80bd var die Adresse des Inhalts von VAR suchen, Ergebnis in 780 (lo) und 782 (hi)

<nach oben>