Technische Tips und Tricks: Einbau von Maschinensprache in Basic B. Kühnast Manchmal ist es am einfachsten, ein Programm in Basic (oder Turbo-Basic) zu schreiben und ein oder zwei zeitkritische Dinge in Maschinensprache zu erledigen. Außerdem ist dies die typische Art, die ersten Schritte in M-Code (= Maschinensprache) zu machen. Zuerst allerdings eine Warnung: Wenn euer Basic-Programm nichts weiter tut, als Maschinensprache aufzurufen, dann macht es lieber zu 100 % in M-Code. Erstens ist das schneller und zweitens einheitlicher. Braucht ihr aber nur eine Routine für Scrolling oder ähnliches, dann reicht es natürlich, das ganze in Basic zu schreiben. Um das Unterprogramm aufzurufen, gibt es einen Befehl in Basic: USR (steht für User-defined Command, dt.: vom Benutzer definierter Befehl). Der Aufruf kann verschieden aussehen: 1. A = USR(1536) 2. A = USR(ADR(A$)) 3. A = USR(SCROLL) 4. A = USR(1536,1,2,3) Im ersten Beispiel ist eine direkte Einsprungadresse angegeben (1536 = Seite 6). Im zweiten Beispiel ist das Programm in einem String untergebracht (wobei man allerdings keine JMP-Befehle benutzen darf, es sei denn zum Aufruf von Routinen des Betriebssystems). Vorher muß natürlich über den ADR-Befehl die Adresse des Programms, also die Adresse des Strings, ermittelt werden. Das dritte Beispiel benutzt statt einer Zahl eine Routine, die in etwa die Funktion des Unterprogramms beschreibt. In der vierten Routine werden einige Zahlen (1, 2 und 3) übergeben. Das Basic legt sie auf dem Stack ab, wo sie vom Unterprogramm in umgekehrter Reihenfolge wieder eingelesen werden. Da diese Methode aber etwas verwirrend sein kann (besonders, wenn viele Daten übergeben werden), kann man Variablen etc. natürlich auch über POKEs übergeben. Es ist nur noch zu beachten, daß eine Unterroutine für Basic immer mit einem PLA (Dezimal 104, Hex $68) beginnen muß, da immer eine für den User unnötige Zahl auf den Stack abgelegt wird. Vergißt man diesen Befehl, hängt sich der Computer auf! Der Rücksprung ins Basic erfolgt durch den Befehl RTS (Dezimal 96, Hex $60). Nach Ausführung des Unterprogrammes enthält A den Inhalt des Akkus. CU !