X! (TSB)
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 |
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 $9567, 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]
- ↑ Download der TSB-Disk - https://www.godot64.de/TSB/downloads.html