C. Kann man es einrichten, daß bei ausgeschalteten Kernal unterschiedliche Sprungadressen angesprungen werden, je nachdem, ob VIC oder CIA der Interrupt auslöst?
1) Der Prozessor hat 1 IRQ-Leitung. Mehr also die Information "IRQ liegt an" bekommt man nicht über diese eine Leitung!
2) Interrupt passiert, wenn diese Leitung von irgendeinem Chip oder sonswie von der Hardware gesetzt und das I-Flag von der Software nicht gesetzt ist.
3) Bei IRQ werden eine Rücksprungadresse und das Flag-Register auf den Stapel gelegt, das I-Flag wird gesetzt und indirekt über den Vektor $fffe gesprungen.
4) Das Programm regelt alles weitere. Da wäre das Erkennen der IRQ-Quelle, dem Chip seinen IRQ bestätigen, und halt das eigentliche Programm.
5) Ob Kernal ein oder aus ist, ob I/O ein oder aus ist - ganz egal, der beschriebene Ablauf ist der Gleiche. Man darf an $01 herumspielen, wenn an 4) beachtet, man darf am I-Flag herumspielen, wenn man 2) und 4) beachtet.
Alles weitere sind logische Konsequenzen daraus.
Und meist reicht es auch, gar nicht so extrem tief einzusteigen, sondern einfach das Kernal eingeschaltet zu lassen, es erledigt dann das Retten der Register und sowas. Dazu den Vektor $0314 verwenden und am Ende nach $ea31 (normaler IRQ mit allem Tastaturabgefrage usw.), $ea81 (nur Register wiederherstellen) oder $ea7e (CIA confirmen) zu springen.
Lass Dich NICHT von MS-DOS und 8086 in die Irre führen! Wenn man dort von Interrupt und Interrupt-Tabelle gesprochen hat, dann meinte man tatsächlich das Äquivalent zum BRK-Befehl und eine Sprungtabelle voller Vektoren zum Kernal-Aufruf. Diese Begriffe waren imho extrem ungeschickt und haben beim C64 nichts verloren.