Mehr über SYS
Der SYS-Befehl beim C 64 und VC 20 leistet wesentlich mehr, als das Commodore-Handbuch zugeben will. Er bietet zum Beispiel eine einfache Möglichkeit, Parameter an Maschinenprogramme zu übergeben.
Der SYS-Befehl hat folgendes Format:
SYS <Adreßausdruck> [, < Parameterausdrücke > ]
SYS ruft das Maschinensprachprogramm auf, das bei »Adreßausdruck« logisch beginnt. »Adreßausdruck« steht für eine RAM-Adresse im Bereich von 0 bis 65535.
Die wahlweise anzugebenden Übergabeparameter werden nicht von SYS bearbeitet, vielmehr müssen diese Angaben in geeigneter Weise vom aufgerufenen Maschinenprogramm ausgewertet werden. Hierzu sind natürlich genauere Kenntnisse in Assembler-Programmierung erforderlich.
Es kann jedoch eine andere Übergabeform gewählt werden, auch wenn dies im VC 20-Programmierhandbuch verschwiegen und im Handbuch das Gegenteil behauptet wird.
Diese Form der Parameter-Übergabe besteht darin, Akkumulator, X- und Y-Register sowie den Prozessorstatus vorzugeben.
Wie soll das vom Basic aus geschehen? Wenn nicht direkt, dann eben über die Speicherstellen, die SYS als oben genannte Register aufnimmt, bevor ins Maschinenprogramm verzweigt wird, und in die SYS nach Rückkehr (RTS) aus dem Maschinenprogramm die aktuellen Registerinhalte ablegt.
Es gibt also eine Kommunikationsmöglichkeit mit dem Maschinenprogramm vor und nach der Abarbeitung, sie muß nur genutzt werden.
Die vier Speicherbytes nach Bild 1 sind die Schnittstellen zu den Prozessor-Registern.
Bezeichnung | hex.-Adr. | dez. |
---|---|---|
Akkumulator | 030C | 780 |
X-Register | 030D | 781 |
Y-Register | 030E | 782 |
Proz.-Status | 030F | 783 |
Der Prozessor-Status wird dabei durch das Flag-Register dargestellt. Die Bedeutung der einzelnen Bits im Flag-Register geht aus Bild 2 hervor.
Hier nun eine Anwendung der Kommunikation mit Maschinen-Unterprogrammen.
Die Betriebssystem-Routine »Plot« soll genutzt werden, um den Cursor auf eine bestimmte Position zu setzen, ab der dann eine Ein-/Ausgabe erfolgen kann, beziehungsweise es soll abgefragt werden, wo sich der Cursor gerade befindet, wo also die nächste Ein-/Ausgabe erfolgen würde.
Bild 3 zeigt das kleine Beispiel-Listing. In den Zeilen 100 bis 150 wird der Cursor auf Zeile 10, Spalte 5 gesetzt. Anschließend wird zur Demonstration ein kleiner Text ausgedruckt und in den Zeilen 200 bis 260 die aktuelle Cursorposition gelesen.
(Rolf Zweifel)