011
29.07.2009, 17:55 Uhr
jmueller
|
Nun, da mein Emulator genannt wurde, möchte ich mich auch mal zu Wort melden:
@Ralf: Also ich denke, mit einem Emulator hast du wohl die besten Chancen, das Problem zu finden, vorausgesetzt, du kannst es im Emu reproduzieren.
Zum Interrupt-System: JKCEMU emuliert es vollständig einschließlich Daisy Chain. Bugs sind mir da erstmal keine bekannt. Das sollte also passen.
Ich denke, der JKCEMU-Debugger könnte dir gut helfen, denn er kann auch die Befehlsabarbeitung aufzeichnen. Der Emulator schreibt dabei vor jedem abzuarbeitenden Befehl eine Zeile mit den ganzen CPU-Registern in eine Datei. Die wird damit natürlich ganz schön groß, aber was solls. Am besten, du setzt einen Breakpoint möglichst kurz vor und möglichst kurz nach der problematischen Stelle, und schaltest beim ersten Breakpoint die Befehlsaufzeichnung ein und beim zweiten wieder aus. Dann kannst du dir in Ruhe anschauen, was da alles passiert ist, einschließlich dem Stackpointer.
Ich vermute aber ehrlich gesagt den Fehler im BIOS. Das Licht ging mir bei dem Hinweis auf, dass es bei SP>2000h funktioniert. Wenn der SP < 2000h ist, liegt er ja in dem RAM-Bereich, der weggeschaltet wird, um z.B. eine Bildausgabe zu tätigen. Damit das funktioniert, dürfte also das BIOS beim Einblenden des Speichers der Grundplatine den Stack nicht mehr verwenden bzw. müssten diesen temporär woanders hinlegen, denn der liegt dann ja im ROM (00F0). Außerdem dürfen in der Zeit auch keine Interrupts angetanzt kommen, wenn der SP gerade mal auf den ROM zeigt. Ich könnte mir vorstellen, dass hier das BIOS nicht alle Eventualitäten abfängt. Suche dazu in der Programmaufzeichnungsdatei einfach mal nach OUT-Befehlen. Ich glaube, da liegt der Schlüssel zu deinem Problem.
Jens |