Auf diese Frage "was Kernel-Reset so macht" kann ich noch eine Erfahrung von meinem Mini-Emulator beisteuern: vom VIC wird ein Register (aktuelle Vertikal-Zeile, D012 und oder D011 (?)) in einer Schleife abgefragt, ob der VIC auch wirklich die Zeilen "zählt" oder hängt.
Wird hier immer dasselbe gelesen, hängt sich der emulierte C64 in ebendieser Schleife auf.
Ja, das "Problem" ist bekannt. Aber für einen einfachen Emulator reicht ja
40x25er Text und minimale Chipsetsimulation:
VICII:
- einfach den Speicher ab 1024 als Text darstellen
- D011 (?) gibt nur x00 zurück (=> Schleife im Kernal
bleibt nicht hängen, beim Wert 00 bin ich mir aber
nicht 100%ig sicher, es ist aber ein konstanter Wert)
CIA:
- paralleles IO (sehr einfach implementierbar)
- Timer-IRQ: hier braucht man nur den 60Hz IRQ
für die Tastatur (d.h. man muss nur das
IRQ-Flag abfragen bzw. behandeln)
Tastatur: (kann schnell sehr ekelig werden)
- dazu den PC-Tastaturcode per Matrix auf die
parallelen CIA-Ein/Ausgänge abbilden.
Mit Shift/Ctrl und Sonderzeichen etc. kann das sehr
schnell kompliziert werden. Im Endeffekt kommt
man glaube ich nicht um einen Zustandsautomaten
rum.
PLA:
- braucht man nicht, statt dessen einfache
Buslogik mit simpler Addressauflösung
Diesen Aufbau habe ich in vielen Projekten
im Einsatz, BASIC lässt sich damit wunderbar
benutzen. Die Komplexität liegt hier also nur
in der 6502- bzw. 6510-Implementierung,
die ist aber auch nicht so schlimm.