J'ai trouvé ce qui ne va pas, c'est dans
new1111.
En fait il existe une fonction gérée normalement par la line1111 de l'AMS qui permet d'appeler une routine dont l'adresse relative est donnée dans le long mot qui suit l'appel de la line1111. Et c'est
dc.w $FFF0 qui permet d'accéder à cette fonction.
Par ex
dc.w $FFF0 / dc.l $50 appel la sous-routine à PC + 2 + $50.
Une correction de ce genre évite de faire planter PreOS par une boucle de hot-reset infinie, qui vient d'un appel de line1111 avec ce numero de rom call trop grand :
new1111:
move.l 2(sp),a0 ; Address of the 'crash'
move.w (a0),d0 ; We get the instruction
cmp.w #$FFF0,d0
bne.s NotFFF0
addq.w #2,a0
move.l a0,a1
adda.l (a0)+,a1
move.l a1,2(a7)
bra.s Quit1111
NotFFF0:
cmp.w #$F800,d0 ; Is it > $F8xx ?
blt.s no ; No, so it is a crash
etc...
Avec Quit1111 juste avant:
move usp,a1 ; We will push on user stack
move.l a0,-(a1) ; the return address
move a1,usp ; Save the user stack
rte