Ok,
ich habe Punkt für Punkt durchgesehen.
Interrupts:
genau in dem Moment, in dem ein Intterrupt in Verarbeitung geht wird er in EXCEPTION_Q gespeichert. Das passiert im Prozess STORE_CURRENT_EXCEPTION. Ich habe beim Entwurf des Interrupt-Handlers auf diesen Punkt geachtet. Vielleicht ist er aber noch nicht ganz korrekt umgesetzt. In emutos und in TOS1.00, welche beide die Interrupts intensiv verwenden, funktioniert alles prima. Ich hatte seinerzeit Fehler drin, was sich in einer springenden Maus, in nicht restaurierten Menüs, in Abstürzen usw. wiederspiegelte. Das passiert aber mit der aktuellen Version unter emutos und TOS1.00 nicht mehr. Daher weiss ich nicht genau, ob der Absturz nicht eine Folge eines anderen Fehlers ist. Vielleicht kannst Du, Tobias, sagen ob so etwas möglich wäre. Also kurz zusammengefasst, Sobald ein Interrupt ausgelöst wird und in Verarbeitung geht, wird der Interrupt Vektor quellen-konsistent verwendet.
Zu den Spezialfällen:
ich habe mittlerweile zu den folgenden Fällen die gleiche Meinung wie Tobias. Diese Spezialfälle waren bisher nicht korrekt, sind aber nun richtiggestellt:
ADDA -(Ax), Ax: es wird zum undekrementierten Wert also Ax addiert.
CMPA -(Ax), Ax: es wird mit dem undekrementierten Wert von Ax verglichen.
SUBA -(Ax), Ax: es wird vom undekrementierten Wert also Ax subtrahiert.
MOVE Ax, -(Ax): es wird der undekrementierte Wert, also Ax nach Ax-2 geschrieben.
Opcode: 0xc5c1 MULS D1,D2:
die Multiplikation dauert lange. Daher wird in dem Systemzustandsautomat im Zustand WAIT_OPERATION auf das Ergebnis gewartet und dann nach FETCH_BIW_1 verzweigt. Erst in FETCH_BIW_1 werden Interrupts, registriert. Die Interrupt-Zustandssteuerung wartet also bis nach FETCH_BIW_1 und dann nach IDLE verzweigt wird. Das steuernde Signal ist CTRL_RDY. Ich kann mir daher nicht vorstellen, dass da was schief geht. Ich würde vorschlagen das mit PEA erst zu richten und dann nochmal zu sehen, ob's nicht weitergeht.
PEA:
das ist vermutlich falsch. Ich werde es richten und Tobias ein Update schicken.
Spezialfälle:
ich habe vor ein Dokument zu verfassen, in dem alle Spezialfälle wie beispielsweise oben beschrieben zusammengestellt sind. Es gibt, wie ich gesehen habe, nicht nur bei uns Diskussionen über diese Dinge. Der Prozessor hat meiner Meinung nach etwa 10 bis 20 von diesen. Ferner ist das Prefetch-Verhalten des Prozessors ein Thema, um auch self-modifying Code lauffähig zu bekommen. Auch hier müsste man eventuell etwas machen.
Viele Grüße
Wolfgang