Hallo und guten Tag zum zehnten Teil unseres Kurses.
In diesem Teil werden die letzten unbekannten Befehle vorgestellt, so dass ich nächsten Monat schon damit anfangen kann, auf das eigentliche Programmieren einzugehen.
Im direkten Anschluss an den Artikel vom letzten Monat werde ich zunächst den JSR-Befehl behandeln:
Wenn man ein Programm schreibt, wird man schnell feststellen, dass gewisse Befehlsfolgen immer wieder gebraucht werden. Damit man diese aber nicht immer wieder hinschreiben und damit kostbaren Speicherplatz verschwenden muss, gibt es den JSR-Befehl.
Mit JSR ADR wird ein an der Stelle ADR beginnendes Unterprogramm aufgerufen, das mit RTS enden muss. Nach Durchlaufen des Unterprogramms wird das Programm in der Zeile nach dem JSR-Aufruf weiter fortgesetzt.
Beispiel:
... ... LDX #2 LDY #10 JSR SETPOS ... ... -------------------- SETPOS STX $55 STY $54 RTS --------------------Die Routine SETPOS setzt den Cursor an die Position des Bildschirmes, die durch die Koordinaten in X- und Y-Register definiert ist.
In diesem Fall wird also die Position über die beiden Register X und Y an die Routine SETPOS übergeben.
Ansonsten können Parameter auch einfach an bestimmten Stellen im Speicher abgelegt werden. Ist die Position eines solchen 'Parameterspeichers' veränderlich, könnte die Startadresse des Speichers in den Registern oder in anderen dafür vorgesehenen Speicherstellen stehen. Es gibt also viele verschiedene Möglichkeiten, Daten an solche Unterprogramme weiterzugeben.
Allerdings sollte man sich hüten dies über den STACK zu tun, da dieser als oberste zwei Bytes die Rücksprungadresse des Unterprogramms enthält. Stößt der Prozessor auf den Befehl RTS, so holt er sich die obersten zwei Bytes vom STACK, addiert 1 und springt zu der Adresse.
Hat man inzwischen irgendwelche Daten auf dem STACK abgelegt, so kann dies bei einem RTS zu unerwünschten Folgen führen.
Im Übrigen können Unterprogramme weitere Unterprogramme aufrufen. Zu beachten ist dabei eigentlich nur, dass man jedes Unterprogramm auch mit einem RTS verlässt, damit die abgelegten Adress-Bytes vom STACK genommen werden. Sonst könnte es auch wieder zu unkontrollierten Sprüngen kommen.
Ein dem RTS ähnlicher Befehl ist der RTI. RTI steht für „Return from Interrupt“ und ist der Rücksprungbefehl bei den einzelnen Interrupts. Zusätzlich zur Rücksprungadresse wird hierbei noch ein drittes Byte vom Stack geholt und in das Stackregister des Prozessors kopiert.
Bei den 'gängigen' Interrupts wie zum Beispiel VBI oder DLI, benötigt nur der DLI den RTI. Die beiden VBIs haben eigene Rücksprungvektoren, die in aller Regel einem Abbruch mit RTI vorzuziehen sind, da diese das Retten der Registerinhalte selbst vornehmen.
Des weiteren gibt es noch einige Befehle, die uns nur indirekt betreffen, nämlich die Zusatzbefehle des 65C02, der in der SPEEDY 1050 Verwendung findet. Ich führe sie hier zum Abschluss der Vollständigkeit halber mit einer kurzen Erklärung auf.
So, Sie müssten nun alle Befehle und deren Anwendung kennen. Ich meine es wäre daher an der Zeit auf andere Probleme einzugehen, zum Beispiel wie elementare Funktionen (PRINT, POSITION...) ausgeführt werden. Ab nächsten Monat wird der ganze Kurs dann praxisorientiert laufen!
Bis dann Ihr Uwe Röder
CSM / 5.1989