MOVEC

5 sujets de 1 à 5 (sur un total de 5)

  • Anonyme

      #198587

      Yo,

      Quelqu’un sait à quoi sert cette instruction MOVEC ? Mon Asmone refuse de l’executer (il la connait pas).

      Merci de votre aide.

      PS: J’ai beau chercher dans mon livre 68000 et sur internet je n’arrive pas à la trouver.

      Anonyme

        #198589

        Bon, j’ai trouvé. C’est une instruction spécifique au 68010, j’ai compilé en utilisant ce CPU et j’ai remplacé par le codeop généré pour pouvoir continuer à utiliser le 68000. Ca a, un vague rapport avec le passage en mode superviseur mais, ça me dit toujours pas ce qu’elle fait. Ca m’empêchera pas de dormir, ceci dit.

        Passionnant… 😉

        Bonne nuit.

        krabob

          #198591

          C’est utilisé pour récupérer la fameuse adresse de la « VBR » (Vector Base Register), une base qui sert au système pour le multitâche (si je me gourre pas). (edit: note en fait c’est toutes la struct à l’adresse 0, dont l’execbase qui reste dispo en 4 sinon on peut plus rien faire). Cette base est à défaut dans la Chip, et sous un amiga 68020/030/060 avec de la fast, le système est drastiquement accéléré si la VBR est déplacé fast, ce que font des patchs aminet et certaines version os3 si je me goure pas.

          Problème: les vielle apps 68000 plantent si la VBR est en fast. Une demo/jeux qui fait ses interruptions doit donc: tester si le proc est en >68010, et récupérer la VBR avec un MOVEC ( si l’asm est configuré pour du pur 68000, faut faire un dc.l $quekchosedequivalentpourassembler)

          … bref quelques lignes qu’on a dans les startups depuis 1993

          Voici un extrait de la startup de Comrade J et des « HowToCode », les docs pour être compatible tout amiga (sinon utilise le système et t’as plus à t’embêter avec ce genre de code)

           

          GetVBR:		move.l	a5,-(sp)		; save it.
          		moveq	#0,d0			; clear
          		movea.l	4.w,a6			; exec base
          		btst.b	#AFB_68010,AttnFlags+1(a6); are we at least a 68010?
          		beq.b	.1			; nope.
          		lea.l	vbr_exception(pc),a5	; addr of function to get VBR
          		CALL	Supervisor		; supervisor state
          .1:		move.l	(sp)+,a5		; restore it.
          		rts				; return
          
          vbr_exception:
          	; movec vbr,Xn is a priv. instr.  You must be supervisor to execute!
          ;		movec   vbr,d0
          	; many assemblers don't know the VBR, if yours doesn't, then use this
          	; line instead.
          		dc.l	$4e7a0801
          		rte				; back to user state code

           

           

           

          http://ftp.back2roots.org/back2roots/cds/almathera/cdpd_vol3/pd/programming/assembler/thesource/volume4/source/startupcode/startup.s

          Anonyme

            #198672

            Alors là, danke schön pour cette réponse on ne peut plus complète et détaillée. Du coup, je vais certainement revenir avec des questions ASM…;-)

            elwood

              #198691

              Il est fort le Krabob. A l’Alchimie j’ai pas compris 100% mais c’était sympa d’avoir cet avis d’expert.

            5 sujets de 1 à 5 (sur un total de 5)

            • Vous devez être connecté pour répondre à ce sujet.
            Amiga Impact