Initialisation et restauration du système

Avant de nous lancer dans le développement de notre petit remake il va nous falloir créer quelques fichiers qui contiendront des routines ou des constantes que nous réutiliserons fréquemment au cours de nos développement.

Nous regrouperons ces fichiers dans le sous-répertoire "Includes".

Pour commencer nous allons récupérer un fichier qui défini les adresses de tous les registres des custom chips de l'amiga, il s'appel "Register.s", ouvrez le, vous voyez qu'il ne s'agit que d'une longue liste de noms suivi d'une adresse (ou d'un offset). CUSTOM indique l'adresse de base des registres hardware de l'amiga (à noter que les CIA ont leurs propres adresse de base), les autres noms correspondent aux registres des custom chips, pour ces dernier on a seulement noté l'offset par rapport à l'adresse de base. Pour avoir le détail de la fonction de chaque registre je vous conseille de vous rendre sur ce site http://amiga-dev.wikidot.com/information:hardware#toc0.

Pour, par exemple, accéder à la première couleur de la palette nous ferons un move.w #$f00,CUSTOM+COLOR00.

Le fichier suivant s'appel "Constant.s", il s'agit bien évidemment de constantes qui nous servirons dans nos développements, comme par exemple les offsets des fonctions de l'exec.library ou de la graphics.library, on trouve aussi des constantes pour gérer l'activation/désactivation des canaux DMA ou pour définir facilement l'opcode du blitter en fonction des sources que l'on veut utiliser.

Nous avons ensuite un fichier "Macro.s", il regroupe un ensemble de macros qui nous serviront à construire facilement notre copperlist ainsi qu'une macro nous permettant d'attendre le faisceau vidéo à une position donnée.

Le dernier fichier qui nous intéresse s'appel "System.s", ouvrez-le, il contient deux fonctions qui nous permettrons de sauvegarder et de restaurer tous les paramètres du système que nous allons modifier pour notre remake, ainsi nous pourront facilement revenir sous le workbench en quittant notre programme sans devoir faire un reset et s'assurer également que le programme fonctionnera sur de nombreuses config.

La première fonction s'appelle judicieusement "SaveSystem", on commence par récupèrer l'adresse de base de la librairie exec (ligne 17). Exec est la seule librairie toujours ouverte et dont l'adresse de base est présente en RAM, les autres librairies doivent être ouverte avant de pouvoir les utiliser.

On stop ensuite la gestion du multitache (ligne 20), ceci pour éviter qu'une autre tâche ne vienne nous prendre du temps CPU (une autre solution consisterai à passer la priorité de notre tache au maximum).

On récupère ensuite la VBR (vector base register) (lignes 22 à 31), l'adresse de base de la table des vecteurs, on ne fait celà que si la machine possède au moins un 68010, pour récupérer cette adresse il faut passer en mode superviseur, d'où l'utilisation de la fonction "Supervisor" de l'exec.library.

On ouvre ensuite la dos.library et la graphics.library (lignes 33 à 47), on regarde si on est en PAL ou en NTSC (lignes 49 à 61) ensuite on test si le chipset est AGA ou pas (lignes 63 et 68), puis on se réserve le blitter (lignes 70 et 72), on sauvegarde la view et la copperlist active et enfin on reset la view afin de partir sur une base saine (lignes 74 à 80), le double "WaitTOF" permet de s'assurer que tout est bien ok pour des écrans en interlaced (donc avec 2 copperlist).

On sauve ensuite les vecteurs d'interruption du clavier et de la VBL (lignes 82 à 85) et pour finir on sauve le registre des interruptions et des canaux DMA (lignes 87 à 91) tout en positionnant le bit SET pour la restauration.

On indique que tout s'est bien passé et on sort de la fonction.

Voilà pour la sauvegarde, voyons la fonction "RestoreSystem" à présent.

La première chose à faire est de stopper toutes les interruptions et les canaux DMA, puis de restaurer leurs valeurs initiales (lignes 117 à 122).

On restaure ensuite les vecteurs d'interruptions (lignes 124 à 127) ainsi que la copper list et la vue (lignes 129 à 135).

On libère le blitter (lignes 137 et 139) et on peut fermer les library graphics et dos (lignes 141 à 149).

Enfin on rétabli le multitache (ligne 152), voilà notre système est tout propre.

Les autres fichiers seront décrit dans les chapitres suivant.