et l'instruction:
andi.w #0xF8FF, %sr
me lance une privilege violation.
j'aimerais plutot que cette ligne m'active toutes les auto-ints

c'est moi qui écris n'importe quoi, ou ça devrait passer?
squalyl (./4) :
le trap active le mode super automatiquement et c'est le seul moyen d'y parvenir, justement
trap_0: movem.l %d1-%d7/%a0-%a6, -(%sp) /*sauvegarder tous les registres */ move.l %usp, %a0 /*on a seulement le droit de faire usp<->an*/ move.l %a0, -(%sp) /*sauvegarder la pile utilisateur sur la pile systeme*/ ... move.l (%sp)+, %a0 /*restaurer la pile utilisateur*/ move.l %a0, %usp /*on a seulement le droit de faire usp<->an*/ movem.l (%sp)+, %d1-%d7/%a0-%a6 /*restaurer tous les registres*/ rte /*fin du trap zero*/
Martial Demolins (./16) :6 octets, c'est ce que dit la doc.
Ethaniel -> un stack frame de trap prend bien 6 octets, pas 8. en effet, un rte ne vire que 6 octets sur la pile superviseur, pas 8.
Martial Demolins (./16) :
quant à ton move.l a0,-(sp), tu pourrait en faire un pea.l (a0) pour gagner deux cycles (je sais, je chipotte xD)
Ethaniel (./12) :
[...] mais a été vérifié sur IMAGSYS [...]
Ethaniel (./18) :À part en ./3 où je ne précise pas les conditions (enfin si, je parle de P3S, mais personne ne connaît, donc forcément, pour savoir que c'est sur IMAGSYS...), je n'ai jamais marqué que ça s'appliquait à tous les 68k...
[...] du moins sur la machine IMAGSYS, qui a un 68040 (d'après ./5), et peut-être d'autres spécificités que j'ai oubliées.
squalyl (./8) :
pen2>oui, évidemment, mais je n'utilise lâârgement pas ça dans mon code, j'appelle proprement des traps, et c'est tout.
Donc, y'a qc qui désactive le mode superviseur entre l'instruction TRAP et le code qui sauve USP.
Vu que le code c'est:trap_0: movem.l %d1-%d7/%a0-%a6, -(%sp) /*sauvegarder tous les registres */ move.l %usp, %a0 /*on a seulement le droit de faire usp<->an*/ move.l %a0, -(%sp) /*sauvegarder la pile utilisateur sur la pile systeme*/ ... move.l (%sp)+, %a0 /*restaurer la pile utilisateur*/ move.l %a0, %usp /*on a seulement le droit de faire usp<->an*/ movem.l (%sp)+, %d1-%d7/%a0-%a6 /*restaurer tous les registres*/ rte /*fin du trap zero*/
je vois pas ce qui désactive le mode superviseur en 2 instructions
je pense que mon bug est ailleurs.