Obligement - L'Amiga au maximum

Lundi 22 mai 2017 - 17:27  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

 · Accueil
 · A Propos
 · Articles
 · Galeries
 · Glossaire
 · Hit Parade
 · Liens
 · Liste jeux Amiga
 · Quizz
 · Téléchargements
 · Trucs et astuces


Articles

 · Actualité (récente)
 · Actualité (archive)
 · Comparatifs
 · Dossiers
 · Entrevues
 · Matériel (tests)
 · Matériel (bidouilles)
 · Points de vue
 · En pratique
 · Programmation
 · Reportages
 · Tests de jeux
 · Tests de logiciels
 · Tests de compilations
 · Articles divers

 · Articles in english
 · Articles in other languages


Twitter

Suivez-nous sur Twitter




Liens

 · Sites de téléchargements
 · Associations
 · Pages Personnelles
 · Moteurs de recherche
 · Pages de liens
 · Constructeurs matériels
 · Matériel
 · Autres sites de matériel
 · Réparateurs
 · Revendeurs
 · Presse et médias
 · Programmation
 · Développeurs logiciels
 · Logiciels
 · Développeurs de jeux
 · Jeux
 · Autres sites de jeux
 · Scène démo
 · Divers
 · Informatique générale


Jeux Amiga

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Trucs et astuces

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Glossaire

0, A, B, C, D, E, F,
G, H, I, J, K, L, M,
N, O, P, Q, R, S, T,
U, V, W, X, Y, Z


Partenaires

Annuaire Amiga

Amedia Computer

Relec

Hit Parade


Soutien

N'hésitez pas à soutenir le projet Obligement



Contact

David Brunet

Courriel

 


Programmation : Assembleur - le registre VBR
(Article écrit par Frédéric Delacroix et extrait d'Amiga News - juin 1997)


Aujourd'hui, une fois n'est pas coutume, nous allons moins nous intéresser au système qu'au coeur matériel de l'Amiga : le processeur, plus particulièrement le fameux registre VBR, ce qui devrait achever de convaincre les quelques irréductibles qu'il n'est pas bien de taper aveuglément aux adresses 0-$400.

Tout ce qui sera dit dans cet article ne concernera que les Amiga équipés d'un processeur 68010 ou supérieur. En effet, le simple 68000 ne dispose pas de VBR et sa table d'exception reste toujours à l'adresse 0.

Vous l'avez compris, il s'agit ici des exceptions du processeur. Une telle exception est un événement "inattendu" qui dérange le processeur pendant l'exécution normale des instructions. Ce peut être une interruption, une instruction TRAP, une erreur du style adresse impaire ou autre. Lorsqu'un tel événement se produit, sans entrer dans les détails, disons que le processeur empile son contexte (compteur de programme, registre d'état) et passe en mode superviseur. Il saute alors à l'adresse indiquée par le vecteur d'exception qui l'oriente vers la routine de traitement de l'interruption (sur l'Amiga, ce peut être le Guru). Une fois le traitement de l'exception terminé par l'instruction rte (Return from exception), le contexte est dépilé et le cours normal des opérations reprend.

Le sujet d'intérêt est ici le vecteur d'exception : ils sont tous regroupés (un par type d'exception) dans une table, nommée la table d'exception. Cette table se situe en mémoire à l'adresse pointée par le registre VBR (Vector Base Register) du processeur. Ce registre est toujours nul après une réinitialisation, mais il peut être modifié par la suite.

Revenons à l'Amiga. Le système ne touche absolument pas à ce vecteur, ce qui fait que la table d'exception se trouve à l'adresse 0, c'est-à-dire en mémoire Chip. C'est un inconvénient car le processeur doit partager l'accès à cette mémoire avec les circuits spécialisés qui font des accès DMA. L'idée est donc de mettre à profit ce registre pour déplacer la table en mémoire Fast, là où le processeur règne en maître. L'avantage saute aux yeux : un gain de rapidité significatif (n'oubliez pas que le système se sert abondamment des exceptions, par exemple pour la commutation des tâches).

Le programme que je vous propose fait exactement cela : après avoir vérifié le type de processeur, il détermine le contenu du registre VBR pour voir s'il est déjà ou non en mémoire Fast. Au passage, cela nécessite l'emploi de la fonction Supervisor() (sur laquelle je ne m'étendrai pas outre mesure), car on a besoin de MOVEC, qui est une instruction privilégiée, pour accéder au VBR. Puis 1 ko de mémoire Fast est alloué et la table d'exception y est recopiée. Enfin, le contenu du VBR est modifié pour signaler la nouvelle table.

Tout programme "propre" n'y verra que du feu. En revanche, certains jeux qui écrivent directement dans les adresses 0-$400 afin de placer leurs propres interruptions sans tenir compte du VBR en seront pour leurs frais, puisque la table ne sera plus à cet endroit. Au mieux, le jeu ne marchera pas, au pire le Guru viendra.

Pour l'assemblage du programme, HiSoft Devpac 3.50 est nécessaire. N'oubliez pas la directive MACHINE pour signaler la génération de code 68010 (MOVEC n'existe pas sur 68000).

Assembleur
Assembleur


[Retour en haut] / [Retour aux articles] [Article précédent] / [Article suivant]