|
|||||||||||||||||||||||||||||||||||||||||||||
|
Qui n'a jamais été enragé par des plantages sauvages durant l'utilisation de sa machine ? Windows est bien connu pour ses records dans ce genre mais l'Amiga demeure une machine où les plantages restent présents. Ils s'appellent "Guru Meditation" ou "software failure" et nous allons tenter d'en savoir plus sur eux. Depuis le début de son développement, un système d'échec pour l'Amiga a été conçu afin d'identifier l'origine des erreurs. Il s'agit des légendaires Guru Meditation qui se concrétisent par un écran rouge clignotant. L'expression "Guru Meditation" a été remplacée plus tard, avec la venue des A1200 et A4000 (AmigaOS 3.0), par "software failure", toponyme plus adéquat et plus parlant. L'origine des Guru Meditation remonte à l'époque du développement de la première version d'AmigaOS. Pour décompresser et se calmer lors de chaque plantage, le développeur (le gourou), s'installait sur un Joyboard. Ce périphérique de console de jeux se présentait comme une planche posée en équilibre sur un axe (afin de diriger un personnage). Dès lors, le programmeur était dans une position de Buddha et "méditait". Les raisons d'un Guru Meditation sont de trois ordres : erreur du système d'exploitation, mauvaises manipulations logicielles ou à un écrasement de la pile mémoire (le stack). Juste avant que l'alerte apparaisse, l'écran devient noir, la diode d'alimentation et celle d'activité disque peuvent clignoter. L'alerte elle-même apparaît dans une boîte rectangulaire noire qui se place dans la partie supérieure de l'écran. Ses limites et son texte sont en rouge quand c'est un Guru Meditation "normal", ou vert/jaune pour une erreur récupérable. Dans les versions 1.x d'AmigaOS, contenues dans des ROM Kickstart 1.1, 1.2 et 1.3, les erreurs sont toujours rouges. Dans les versions 2.x et 3.x d'AmigaOS, les alertes récupérables sont jaunes, sauf pour les premières versions 2.x où elles sont vertes. En revanche, les erreurs fatales sont rouges pour toutes les versions. Quand un Guru Meditation apparaît, l'ordinateur exécute un débogueur nommé ROMWhack, qui est accessible en connectant un terminal à 9600 bit/s au port série. Ceci permet d'aller voir le contenu de la machine et permet de déterminer ce qui a causé l'erreur. Les plantages sont matérialisés par 16 chiffres (8 octets). Exemple : Error : 0000 0005 Task : 000083DC ou 00000005.000083DC Erreurs du processeur Elles se présentent sous la forme "0000000x.yyyyyyyy", où "x" peut avoir une des valeurs de la liste suivante et les "y" sont l'adresse de la tâche fautive. 2 : erreur de bus au niveau matériel 3 : erreur d'adresse 4 : erreur d'instruction illégale 5 : erreur de division par zéro 6 : erreur sur instruction CHK 7 : erreur sur instruction TRAPV 8 : erreur de violation du mode superviseur 9 : erreur trace A : émulation code opération 1010 B : émulation code opération 1111 E : erreur sur la pile (stack frame format error) Erreurs du système Elles se présentent sous la forme "aabbcccc.dddddddd". Il y a donc quatre champs d'informations. 1) Les deux premiers chiffres (aa) Les deux premiers chiffres (aa) nous disent si l'erreur vient des bibliothèques, des périphériques logiques, des ressources ou d'un autre élément : Bibliothèques 01 ou 81 : exec.library 02 ou 82 : graphics.library 03 ou 83 : layers.library 04 ou 84 : intuition.library 05 ou 85 : math.library 06 ou 86 : clist.library 07 ou 87 : dos.library 08 ou 88 : ramhandler.library 09 ou 89 : icons.library Périphériques logiques 10 ou 90 : audio.device 11 ou 91 : console.device 12 ou 92 : gameport.device 13 ou 93 : keyboard.device 14 ou 94 : trackdisk.device 15 ou 95 : timer.device Ressources 20 ou A0 : CIA Resource 21 ou A1 : Disk Resource 22 ou A2 : Misc Resource Autres 30 ou B0 : BootStrap 31 ou B1 : Workbench 32 ou B2 : DiskCopy 33 ou B3 : Gadtools 34 ou B4 : Utility library 35 ou B5 : Unknown Note : le premier chiffre (a) est le niveau d'importance de l'erreur : 0, 1, 2 ou 3 pour une erreur récupérable (le Guru Meditation apparaît au-dessus de l'écran en cours) et 8, 9, A et B pour une erreur fatale (le Guru Meditation affiche son message dans un écran noir). 2) Les 3e et 4e chiffres (bb) Les 3e et 4e chiffres (bb) déterminent la cause générale de l'erreur : 01 : erreur pour manque de mémoire accessible 02 : erreur car impossible de créer une bibliothèque 03 : erreur car impossible d'ouvrir une bibliothèque 04 : erreur car impossible d'ouvrir un périphérique logique 05 : erreur car pas de réaction du matériel (impossible d'ouvrir une ressource) 06 : erreur d'entrée/sortie 07 : erreur car pas de signal 08 : mauvais paramètres 09 : erreur dans la fermeture de la bibliothèque 0A : erreur dans la fermeture du périphérique logique OB : erreur dans la création du processus 00 : si ce n'est pas applicable aux autres erreurs 3) Les 5e, 6e, 7e et 8e chiffres (cccc) Les 5e, 6e, 7e et 8e chiffres (cccc) montrent des informations supplémentaires sur la cause et le type d'erreur. exec.library : 01000000 : - 81000001 : Somme de contrôle du vecteur d'exception 68000 81000002 : Somme de contrôle "Execbase" 81000003 : Mauvaise somme de contrôle de bibliothèque 81000004 : Pas de mémoire pour créer la bibliothèque 81000005 : Liste mémoire corrompue 81000006 : Pas de mémoire pour les serveurs d'interruption 81000007 : InitStruct() d'une source APTR 81000008 : Sémaphore en état illégal 81000009 : Mémoire à libérer déjà libre 8100000A : Exception 68k illégale 8100000B : Tentative de réutilisation d'un OIRequest actif 8100000C : Le contrôle d'intégrité de la liste de mémoire a échoué pendant AvailMem (MEMF_LARGEST) . 8100000D : Tentative d'entrée/sortie sur un IORequest fermé 8100000E : La pile semble s'étendre hors de portée . 8100000F : En-tête de mémoire non localisé. Généralement une adresse invalide passée à FreeMem 81000010 : Une tentative a été faite pour utiliser l'ancien message séphamores 810000FF : Une interruption rapide est survenue sur un vecteur non initialisé graphics.library : 02000000 : - 82010000 : Graphismes en manque de mémoire 82010001 : Pas de mémoire pour la liste d'affichage du Copper 82010002 : Pas de mémoire pour la liste des instructions du Copper 82010003 : Surcharge de la liste du Copper 82010004 : Surcharge de la liste intermédiaire de Copper 82010005 : Pas de mémoire pour la tête de liste du Copper 82010006 : Trame longue, pas de mémoire 82010007 : Cadre court, pas de mémoire 82010008 : Pas de mémoire pour le remplissage des flots ("flood fill") 82010009 : Texte, Pas de mémoire pour TmpRas 8201000A : Pas de mémoire pour le bitmap 8201000B : Régions, mémoire non disponible 82010030 : MakeVPort, pas de mémoire 82011234 : Mémoire d'urgence non disponible 82010401 : Description de police non gérée utilisée . Workbench : 0000 : aucune police de caractères 0001 : Mauvais démarrage Msg1 du Workbench 0002 : Mauvais démarrage Msg2 du Workbench 0003 : Mauvais Msg d'entrée/sortie du Workbench 0004 : Tiroir d'allocation de potions d'init du Workbench 0005 : Création de menus du Workbench, Menus1 0006 : Création de menus du Workbench, Menus2 0007 : Disposition du menu du Workbench, Menus2 0008 : Ajout d'un élément Outil dans le menu du Workbench 000A : InitTimer 000B : Init Layer Demon 000C : Initialisation des GELs du Workbench 000D : Initialisation de l'écran et des fenêtres du Workbench, Windows1 000E : Initialisation de l'écran et des fenêtres du Workbench, Windows2 000F : Initialisation de l'écran et des fenêtres du Workbench, Windows3 0010 : WBMAlloc layers.library : 03000000 : - 83010000 : Manque de mémoire pour la bibliothèque Layers intuition.library : 04000000 : - 84000001 : Type de gadget inconnu 04000001 : Forme de récupération d'un type de gadget "AN_GadgetType" 84010002 : Manque de mémoire pour créer un port 04010003 : Manque de mémoire pour l'allocation d'un élement de plan (item plane) 04010004 : Manque de mémoire pour l'allocation d'une sous-rubrique (sub) 84010005 : Manque de mémoire pour l'allocation d'un plan (plane) 84000006 : Élement supérieure de la boîte inférieur à RelZero 84010007 : Manque de mémoire pour ouvrir l'écran 84010008 : Manque de mémoire pour ouvrur l'écran avec allocation du raster 84000009 : Type inconnu pour l'ouverture de l'écran 8401000A : Manque de mémoire pour l'ajout de gadgets SW 8401000B : Manque de mémoire pour ouvrir la fenêtre 8400000C : Mauvais retour d'état en entrant dans Intuition 8400000D : Mauvais message reçu par IDCMP 8400000E : Écho bizarre causant une incompréhension 8400000F : Impossible d'ouvrir le Console Device 84000010 : Intuition a omis l'obtention d'un sémaphore 84000011 : Intuition a obtenu un sémaphore dans le mauvais ordre dos.library : 07000000 : - 07010001 : Pas de mémoire au démarrage 07000002 : EndTask n'a pas pu interrompre une tâche 07000003 : Échec de Qpkt 07000004 : Paquet imprévu réçu 07000005 : Échec de Freevec 07000006 : Erreur séquence d'un bloc de disque 07000007 : Bitmap endommagé 07000008 : Toucge (key) déjà libre 07000009 : Somme de contrôle invalide 0700000A : Erreur disque 0700000B : Touche hors champ 0700000C : Mauvais overlay 0700000D : Initialisation de paquet invalide pour le CLI/Shell 0700000E : Un gestionaire de fichiers (filehandle) a été fermé plus d'une fois Ramlib : 08000000 : - 08000001 : Pas d'overlays dans les seglists de la bibliothèque expansion.library : 0A000001 : Mauvaise libération d'une expansion trackdisk.device : 14000000 : - 14000001 : Erreur de recherche pour Calibrate 14000002 : Erreur d'attenre de l'horloge pour Delay timer.device : 15000000 : - 15000001 : Mauvaise requête 15000002 : L'alimentation ne fournit pas de tics (50/60 Hz) Console Device : 0001 : La console ne peut pas ouvrir la fenêtre initiale Disk Resource : 21000000 : - 21000001 : Get unit: a déjà un disque 21000002 : Interrupt: pas d'unité active BootStrap : 30000000 : - 30000001 : Le code de démarrage a retourné une erreur Alert Objects : 8001 : ExecLib 8002 : GraphicsLib 8003 : LayersLib 8004 : Intuition 8005 : mathLib 8006 : DOSLib 8008 : RAMLib 8009 : IconLib 800A : ExpansionLib 800B : DiskfontLib 800C : UtilityLib 800D : KeyMapLib 8010 : AudioDev 8011 : ConsoleDev 8012 : GameportDev 8013 : KeyboardDev 8014 : TrackDiskDev 8015 : TimerDev 8020 : CIARsrc 8021 : DiskRsrc 8022 : Miscrsrc 8030 : Bootstrap 8031 : Workbench 8032 : Diskcopy 8033 : GadTools 8035 : Unknown 4) Les 8 derniers chiffres (dddddddd) Les 8 derniers chiffres peuvent indiquer trois choses différentes :
Prenons maintenant un exemple : Error : 8201 0000 Task : 070183DC Il s'agit donc d'une erreur fatale (8) de la graphics.library (2) pour un problème de mémoire (01) car la graphics.library n'a simplement plus de mémoire à sa disposition (0000). L'erreur est à l'adresse 070183DC. Pour finir, je vous conseillerai deux outils très intéressants concernant les Gurus : The Guru, un guide explicatif sur les chiffres des Gurus ainsi que MCP, un correctif qui permet notamment de "capturer" les Gurus et d'en déterminer la cause avant que la machine plante. Indispensable donc...
|