N'Abend,
kleine Überlegung beim Brüten über meiner alten Firmware für und dem Zusatzkabelverhau an meinen Taiwan-Clone (GTAC-2), den ich damals als EMUF betrieb, also als universellen 6502-Rechner ohne Apple-ROM-Inhalte. Ich habe diese Fragen in den Apple-Bereich gehängt, auch wenn er in anderen 6502-Welten genausogut aufgehoben wäre.
Kann ein 6502 so hängenbleiben, daß er keine Befehle mehr ausführt? Als Beispiel: der läuft in einen Speicherbereich, der keine gültigen 6502-Opcodes enthält. Die CMOS-Variante hat an den Stellen ohne reguläre Opcodes in der Matrix immer ein NOP, meist mit 2Zyklen, an einigen Stellen mit 3Zyklen, AFAIR. CMOS immer NOP, d.h. der läuft durch diesen Bereich und findet irgendwann wieder einen gültigen Befehl. Auch wenn der 0x00 und somit ein BRK ist. Dann gibt's Ausnahmebehandlung über den Vektor. Wenn er dann in die "Pampa" springt (z.B. wg. falschem Bank-Switching) läuft er immer noch irgendwie weiter. Und wenn er letztendlich nur noch BRKs ausführt ...
Die NMOS-Variante hat je nach Hersteller mehr oder weniger sinnvolle und/oder interessante Befehle. D.h. man weiß nicht, wie ein 6502 (zudem herstellerabhängig) durch einen Bereich der illegal Opcodes kommt. Laut Wiki gibt's darunter einen HALT-Befehl. Der terminiert die Ausführung und kann nur durch Reset beendet werden. Aber alle anderen? Den WAIt-Befehl der späteren 6502-Varianten lasse ich mal weg, denn der ist offiziell und beschrieben, und der ist bei den NMOS- und alten CMOS-Varianten noch nicht existent.
Ich stehe gerade vor der Frage, ob ich meine Lösung aus den 1980ern wieder einbaue, die zwei LEDs leuchten läßt, die an A0 und /A0 hängen. Dort kann ich ablesen, ob die CPU noch Zugriffe veranstaltet, so meine damalige Idee. D.h. beide leuchten: die CPU rennt, auch wenn es eine Endlosschleife ist. Aber ein HALT würde das vermutlich detektieren, indem nur noch eine leuchtet. Oder eben, wenn der 6502 aus irgendwelchen anderen Gründen intern hängenbleibt ...
Das Leuchten bezieht sich natürlich auf die Trägheit des menschlichen Auges, das das Blinken mit 500kHz nicht auflösen kann.
Ich weiß, daß ich stattdessen oder ergänzend eine Watchdog-Schaltung einbauen könnte. Aber das ist ein anderes Thema.
Gruß, Ralf