Wie kann man beim CPC ein ASM-Programm kleiner 255 in einem String unterbringen und dann aufrufen?
Gruss
Wie kann man beim CPC ein ASM-Programm kleiner 255 in einem String unterbringen und dann aufrufen?
Gruss
Nehmen wir mal diesen Fall:
Dann könnte das so aussehen:
10 FOR n%=1 TO 9:READ b%:mc$=mc$+CHR$(b%):NEXT
11 CALL @mc$+1
19 END
20 DATA &3E,&20,&CD,&5A,&BB,&3C,&20,&FA,&C9
@variable liefert die Adresse an der der Variableninhalt im Speicher abgelegt ist, das Byte an dieser Adresse gibt eine Länge des Strings an, anschließend folgt der String. Daher beginnt der abgelegte Maschinencode an @variablename$+1.
Wichtig zu wissen: Die Variable kann im Speicher vom BASIC-Interpreter verschoben werden, mit relativen Sprüngen in der Routine ist das kein Problem. Eine absolute Adressierung müsste aber bei jedem Aufruf angepasst werden - und dafür muss die Routine erst einmal heraus finden, wo sie überhaupt im Speicher steht. Knifflig, aber machbar.
Viel Erfolg,
AMSi
Diese Art ist aber ziemlich unueblich und macht eigentlich auch ueberhaupt keinen Sinn. Ich wuerde das Programm dann lieber direkt an eine Speicheradresse schieben und dann aufrufen.
Jup, tolle Sache. Geht ja wunderbar, dank der Adressenrückgabe mit dem @.
Das Basic vom CPC ist nicht ohne....
Gruss.
Zitat von "schneiderfan"Jup, tolle Sache.
Wie Octoate schon geschrieben hat gibt es keinen vernünftigen Grund so zu verfahren - oder doch? Wofür brauchst denn das?
Und weg,
AMSi