ASM-Programm in ein String unterbringen?

  • Nehmen wir mal diesen Fall:

    Code
    3E 20         ld a," "
    CD 5A BB      loop call &bb5a
    3C            inc a
    20 FA         jr nz,loop
    C9            ret


    Dann könnte das so aussehen:

    Code
    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