Beiträge von Mike im Thema „An welcher Adresse laufe ich?“

    Ich bring hier gerade mal mein Beispiel aus dem Denial-Forum (jetzt vollständig) an:

    Der Code ist jetzt exemplarisch nach $2000 assembliert worden. Es spielt aber keine Rolle, wohin man ihn (in freien Speicher) lädt - er läuft überall! Das darf jeder gerne mit einem Monitor des eigenen Vertrauens und dessen L- und T-Befehle überprüfen.

    In ähnlicher Weise, wie hier die zwei Adressen für das Operanden-Feld des Trampolins und die eigentliche Startadresse der IRQ-Routine durch konstante Offsets von der "Ich bin hier!"-Adresse abgeleitet wurden, kann man auch Zugriffe auf Tabellen, Sprünge und Unterprogrammaufrufe synthetisieren. Das geht alles, es ist nur halt super-umständlich.

    Am Ende ist das dann optimiert nur noch ein einziger Befehl an der bekannten Adresse: RTS

    [...]

    [...] habe ich irgendwas übersehen, [...][?]

    Die Rücksprungadresse auf dem Stack ist nicht mehr sicher, wenn Du sie erst nach der Rückkehr vom JSR abholst. Ein Interrupt könnte sie jederzeit überschreiben.

    Die kleine Routine in der Zeropage kann man wohl verschmerzen. Auch so wird der Code, welcher auf die gefundene Adresse Bezug nimmt auch immer komplizierter sein als wie wenn der Code für eine feste Adresse assembliert wurde. Dem 65xx fehlen dazu einfach die nötigen Adressierungsarten, aber das war ja auch schon gesetzt.

    In Denial haben Jason Justian und ich mal eine frei verschiebbare IRQ-Routine gebastelt, die Diskussion dazu ist hier: Bitte melde dich an, um diesen Link zu sehen. - und da hab ich auch meine Hilfsroutine her.

    Also JSR und PC vom Stack holen geht nicht.

    Das geht schon, wenn Du zuvor eine Hilfsroutine an eine bekannte Stelle schreibst:

    Im Anschluß steht in X/Y die Adresse I_AM_HERE - 1.