X! (TSB)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
X! (TSB)
Syntax: X!
Parameter
verschieden
Einordnung
Typ: Anweisung
Kontext: verschieden
Aufgabe: verschieden
Abkürzung:
Token: $64 $B2 (100 178)
Verwandte Befehle
je nach Kontext


Dieser Artikel beschreibt das TSB-Schlüsselwort X! (TSB).
Es gibt kein entsprechendes Simons'-Basic-Schlüsselwort.

Typ: Anweisung
Syntax: X!

X! eröffnet dem Programmierer die Möglichkeit, TSB z.B. in einem Spieleprojekt mit speziell hierfür erstellten Befehlen temporär zu ergänzen. Dafür stehen einige unter bestimmten Bedingungen ungenutzte Speicherbereiche zur Verfügung. Nach Umfang geordnet sind das diese:

Bereich Umfang Bedingungen
$0400 .. $07FF 1024 der MEM-Modus ist aktiviert
$C000 .. $C3F7 1015 der HIRES-Modus wird nicht verwendet, aber Sprites
$CA00 .. $CAFF 256 normalerweise frei (explizit für X!)
$CB00 .. $CBFF 256 MAP wird nicht verwendet
$0334 .. $03FF 204 normalerweise frei (Sprites 13 bis 15)
$C9B2 .. $C9FF 78 LOCAL wird nicht verwendet
$02C0 .. $02FF 64 normalerweise frei (Sprite 11)

Solange X! nicht eingebunden ist, erzeugt der Aufruf von X! die Fehlermeldung ?NOT YET ACTIVE ERROR. Wenn der Code an die geplante Stelle geladen wurde, aktiviert man den Befehl mit D!POKE $897C,<Startadresse-1>. Wenn der Code an $0400 liegt, also mit D!POKE $897C,$03FF. Das liegt daran, dass X! nun ein echter, vom Interpreter akzeptierter TSB-Befehl ist. Aus diesem Grund darf der Code des Befehls auch nicht mit RTS abgeschlossen sein, sondern muss zurück zum Interpreter führen. Wenn der selbstgeschriebene X!-Befehl Parameter einliest, lautet die Abschlussadresse intern daher $80D2, wenn nicht $9564.

Es können gleichzeitig mehrere X!-Befehle integriert werden, wenn das Token um einen weiteren Bezeichner erweitert wird, der die Befehle unterscheidet, wie z.B. bei X!INST (ein Befehl, der Strings manipuliert, ohne String-Müll zu erzeugen, er befindet sich - zusammen mit weiteren - auf der TSB-Disk[1]).

Der Code des X!-Befehls sollte bei der Veröffentlichung auf der Projekt-Release-Diskette zu finden und im Namen als nachladbare Erweiterung ("Extension", Kürzel: "ext.") gekennzeichnet sein, z.B. "ext.inst" für X!INST. Eingebunden wird er dann etwa mit folgender Routine am Programmanfang (hier einschließlich einer Sicherheitsabfrage, die die ersten beiden Bytes des Codes überprüft, in diesem Fall mit dem Wert 160):

100 if a=0 then a=1: load "ext.inst",use,0,$ca00 
110 if d!peek($ca00)=160 then d!poke $897c,$c9ff:else ? "fail!": end 

Anmerkungen[Bearbeiten | Quelltext bearbeiten]