Du hast hier z.B. nicht beschrieben, was wie genau auf den Stack gepusht werden muss.
Schau mal hier:
[...] indem 'über' dem ursprünglichen IRQ-Stackframe (Y,X,A,P,PC) ein Dummy-Stackframe angelegt wird [...]
in Beitrag Bitte melde dich an, um diesen Link zu sehen.. Daraus läßt sich dann schon ableiten, wie der Dummy-Stackframe auszusehen hat - im Aufbau nämlich genau wie der originale IRQ-Stackframe, nur anderer Inhalt.
[...] Der KERNAL-IRQ macht die Tastaturabfrage und sonstiges Gedöns und hebt zum Schluß den Dummy-Stackframe ab - womit die CPU aber zunächst nicht beim Hauptprogramm weitermacht, sondern beim "Rest" des Maustreibers! [...]
Daraus läßt sich wiederum ableiten, daß der ge-stack-te PC im Dummy-Stackframe auf den "Rest" des Maustreibers verweisen soll. Mit ein wenig knobeln kommt man dann noch darauf, daß das Statusregister mit PHP in den Dummy-Stackframe gepusht werden kann und automatisch auch das I Flag gesetzt hat. Mit noch etwas mehr knobeln kommt man dann auch noch darauf, daß es auf die Inhalte von A, X, Y nach dem Abheben des Dummy-Stackframes nicht ankommt, weil der "Rest" des Maustreibers diese nicht genau definiert braucht. Sieht man denn auch an der Implementierung von wizball6502.
Das steht alles bereits in meinem Beitrag Bitte melde dich an, um diesen Link zu sehen..
MacBacon hat die andere Herangehensweise gewählt. Im anderen Thread steht einfach der Code zum Erstellen des Dummy-Stackframes auf dem Silbertablett. Wie er darauf gekommen ist, steht da nicht!
Ansonsten aber ...
Damit weiß ich nun natürlich, wie ich es implementiere. Am Umsetzen scheitert es sicher nicht. Es geht mir ums Verständnis. Ich weiß nun, dass $ea31 am Ende drei Bytes vom Stack zieht und die in Y,X und A schreibt und dann per RTI zur Adresse springt, die danach im Stack steht. Das ist dann der zweite Teil unseres Maustreibers. Ziemlich clever! Am Ende des Treibers wird dann $ea81 aufgerufen, was den ursprünglichen Stack-Frame zieht, und alles läuft normal weiter. So richtig?
... so richtig. ![]()