Das Makro VEC_ENTRY bekommt die Adresse des Dummys oder einer anderen
Routine.
VEC_ENTRY .macro addr
STW B0,*--B15
MVKL addr,B0
MVKH addr,B0
B B0
LDW *B15++,B0
NOP 2
NOP
NOP
.endm
"addr" wird also mit _vec_dummy ersetzt. Im Makro selbst wird dann B0
auf den Stack gerettet, unterer und oberer Teil (wegen fester
Befehlslänge bei RISC, load store Problematik) der Adresse geladen und
zur Adresse gesprungen. Danach wird der alte Inhalt von B0 vom Stack
zurück kopiert. LDW und die NOP Befehle sind wieder Delayslots für den
branch.
Warum gerade nach B3 gesprungen wird weiß ich nicht. Da handelt es sich
eventuell um reine Willkür. B3 hat imho auch keine spezielle Funktion,
wie etwa B15 (stackpointer).
Ja, das BIOS läuft sehr stabil.
Gruß,
Jan