Obligement - L'Amiga au maximum

Mardi 23 avril 2024 - 13:00  

Translate

En De Nl Nl
Es Pt It Nl


Rubriques

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

Articles in english


Réseaux sociaux

Suivez-nous sur X




Liste des 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,
ALL


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


Galeries

Menu des galeries

BD d'Amiga Spécial
Caricatures Dudai
Caricatures Jet d'ail
Diagrammes de Jay Miner
Images insolites
Fin de jeux (de A à E)
Fin de Jeux (de F à O)
Fin de jeux (de P à Z)
Galerie de Mike Dafunk
Logos d'Obligement
Pubs pour matériels
Systèmes d'exploitation
Trombinoscope Alchimie 7
Vidéos


Téléchargement

Documents
Jeux
Logiciels
Magazines
Divers


Liens

Associations
Jeux
Logiciels
Matériel
Magazines et médias
Pages personnelles
Réparateurs
Revendeurs
Scène démo
Sites de téléchargement
Divers


Partenaires

Annuaire Amiga

Amedia Computer

Relec


A Propos

A propos d'Obligement

A Propos


Contact

David Brunet

Courriel

 


Dossier : L'Amiga et le bogue de l'an 2000
(Article écrit par Olaf Barthel et extrait d'Amiga Inc. - septembre 1998)


Note : traduction par Serge Guillaume.

En deux mots, l'Amiga en général ne souffre pas du bogue de l'an 2000 comme on peut l'entendre dans le monde PC. Néanmoins, l'Amiga fait face à trois problèmes de date bien distincts, et à un seul problème d'an 2000 bien spécifique dont l'étendue est décrite ci-dessous.

1. Champ d'application de ce document

Ce document se réfère aux ordinateurs Amiga fabriqués entre 1986 et 1997 et ne couvre que les configurations matérielles conçues et réalisées par Commodore-Amiga Inc. Ceci exclut explicitement les extensions matérielles tierces comme le "Starboard" de Microbotics, qui comprenait entre autres une horloge sauvegardée par pile, mais inclut les ordinateurs Amiga construits par Amiga Technologies et Amiga Inc.

2. La gestion des dates et heures sur Amiga

Le système d'exploitation Amiga a toujours suivi le modèle Unix de mesure du temps en nombre de secondes écoulées depuis une date fixe. Sous AmigaOS cette date de référence ("epoch", en français "l'époque") est le 1er janvier 1978 à 00:00:00 (Unix lui se réfère au 1er janvier 1979 à 00:00:00 GMT). Le système d'exploitation gère la date et l'heure à travers un composant central nommé "timer.device". Ce composant lit et écrit les informations de type date en utilisant une structure de données appelée "timeval" qui en langage C se représente comme suit :

   struct timeval
   {
      ULONG tv_secs;
      ULONG tv_micro;
   };

Où "ULONG" désigne un entier non signé de 32 bits. La variable membre "tv_secs" contient le nombre de secondes écoulées depuis l'époque AmigaOS et la variable membre "tv_micro" donne le nombre de microsecondes (millionièmes de secondes) écoulées depuis la dernière seconde.

Avant qu'AmigaOS 2.0 ne soit introduit en 1990, le système ne fournissait que les méthodes nécessaires à mesurer le temps, mais n'offrait aucun moyen de convertir le nombre de secondes écoulées depuis l'époque dans un format lisible pour l'utilisateur. Ce travail était à la charge des développeurs d'applications, qui implémentèrent plusieurs algorithmes de conversion plus ou moins réussis.

2.1 La spécificité de la gestion des dates et heures par AmigaDOS

"AmigaDOS" et "AmigaOS" ne sont pas synonymes, bien au contraire : AmigaDOS est (par essence) le nom de la couche d'abstraction d'AmigaOS qui implémente les systèmes de fichiers et leurs actions, l'interpréteur de commandes, et qui gère le chargement et le positionnement en mémoire des fichiers binaires exécutables. AmigaDOS est plus ou moins un portage du noyau 32 bits Tripos de l'Université de Cambridge. Ce dernier a ses propres structures de données et en particulier sa propre version de la structure "timeval" décrite précédemment. La variante AmigaDOS s'appelle "DateStamp" :

   struct DateStamp
   {
      LONG ds_Days;
      LONG ds_Minute;
      LONG ds_Tick;
   };

Où "LONG" désigne un entier signé de 32 bits. La variable membre "ds_Days" contient le nombre de jours (chaque jour se compose d'exactement 24 heures) écoulés depuis l'époque AmigaOS. La variable membre "ds_Minute" donne le nombre de minutes écoulées depuis minuit (00:00:00) du jour en cours et la variable membre "ds_Tick" contient le nombre d'impulsions écoulées depuis la dernière minute. Une minute est composée de 3000 impulsions il y a donc 50 impulsions par seconde.

AmigaDOS utilise des "DateStamps" pour les dates de création de volumes et de fichiers, et toutes les commandes Shell suivent le même modèle, par exemple si la date système est réglée par la commande Shell "Date", celle-ci calculera la date et l'heure en format Datestamp.

2.2 Heure locale et GMT

Le système d'exploitation Amiga n'a jamais connu le concept d'heure locale et heure globale. Alors que la mise à jour AmigaOS 2.1 introduisait un éditeur de préférences locales qui permettait de sélectionner un fuseau horaire, le système lui-même n'a jamais utilisé cette fonctionnalité ni encouragé les développeurs à le faire. On pourrait dire que grâce à cela, AmigaOS était toujours à l'heure locale.

2.3 Comment l'Amiga garde son heure système

Les premiers modèles d'ordinateurs Amiga n'avaient pas d'horloge temps réel sauvegardée par batterie, pour conserver l'heure locale en continuant de fonctionner après que la machine fut éteinte. Par exemple, le tout premier Amiga (Amiga 1000) n'avait pas d'horloge sauvegardée. Pour l'Amiga 500, l'horloge sauvegardée était en option et il fallait l'acheter séparément avec une extension mémoire. L'Amiga 2000 et tous les modèles suivants (à l'exception des Amiga 600 et 500+ [NdT : et 1200]) en furent équipés.

Sur les machines sans horloge sauvegardée, l'Amiga prend l'heure système depuis la date de modification du volume d'amorçage. En d'autres termes, l'heure à laquelle la dernière modification ou création de fichier a eu lieu détermine l'heure système. Comme c'est loin d'être précis, le processus d'amorçage vous suggère d'ajuster la date système dès que le système a démarré (voir image ci-dessous).

Amiga et la gestion du temps

Sur les machines équipées d'horloges sauvegardées, l'heure système est lue pendant le processus d'amorçage. Pour les versions 1.2 et 1.3 d'AmigaOS un programme spécial, appelé "SetClock", assurait la lecture des paramètres de l'horloge et l'initialisation de l'heure système. A partir d'AmigaOS 2.0, cette fonctionnalité a été intégrée au système en ROM, et la commande "SetClock" est devenue en partie redondante.

Si le système démarre sans pouvoir déterminer l'heure système, par défaut celle-ci sera réglée au 1er janvier 1978 à 00:00:00.

3. Régler et lire l'heure

L'Amiga offre une interface en ligne de commande et une interface graphique pour régler et lire l'heure. Ces deux interfaces ont changé avec le temps, comme décrit ci-dessous.

3.1 L'interface en ligne de commande

Il existe deux commandes Shell pour gérer la date système : SetClock et Date. La commande Date sert à régler et lire l'heure système alors que la commande SetClock gère l'horloge sauvegardée, elle y lit et écrit l'heure système. La commande Date est tout particulièrement utile car elle utilise par défaut un format de date lisible. Si aujourd'hui vous invoquez la commande Date, vous recevrez en sortie :

19-Sep-98

Comme on peut le voir, le nombre des années est limité à deux chiffres. Même en utilisant une locale différente, l'année sera toujours affichée sur deux chiffres. Heureusement, ce nombre est déterminé par la règle suivante :
  • Si le nombre représentant l'année est supérieur ou égal à 78, l'année est 1900 plus ce nombre (par exemple, les nombres 78..99 correspondent à 1978..1999).
  • Si le nombre représentant l'année est inférieur à 78, l'année est 2000 plus ce nombre (par exemple, les nombres 00..77 correspondent à 2000..2077).
Pour régler la date système à n'importe quelle année après 1999, il faut inverser la règle, par exemple entrer la date 01-jan-01 réglera la date système au 1er janvier 2001.

Toutes les versions de la commande AmigaDOS Date (de la version 1.1 à la version 37.1) affichent et lisent le format de date de la même façon. Leur comportement est cohérent et prédictible pour toutes les révisions du système Amiga.

3.2 L'interface graphique

L'heure système est réglée grâce à l'éditeur de préférences qui, pour les versions 1.0 à 1.3 d'AmigaOS était un unique programme monolithique comme on peut le voir ci-dessous :

Amiga et la gestion du temps

Les contrôles qui permettent de régler l'heure système sont situés en haut à gauche. On peut ajuster les deux derniers chiffres de l'année ; le modèle est le même que celui de la commande AmigaDOS Date - un nombre inférieur à 78 indique une année entre 2000 et 2077 et un nombre supérieur ou égal à 1978 indique une année entre 1978 et 1999.

Avec l'introduction d'AmigaOS 2.0, l'éditeur de préférences est devenu un programme à part entière nommé "Time" :

Amiga et la gestion du temps

Dans cet éditeur, on peut entrer l'heure sur quatre chiffres. Cependant, ne seront acceptées que les dates entre 1978 et 2113.

Quand la mise à jour AmigaOS 2.1 est sortie, l'éditeur de préférences Time a été révisé :

Amiga et la gestion du temps

Tout comme son prédécesseur, il permet de saisir la date sur quatre chiffres, mais celui-ci n'accepte que les dates entre 1978 et 2099.

4. Les problèmes

Pour autant que l'on sache, l'Amiga est confronté à quatre problèmes de dates. Deux sont des failles de conception dues à un débordement de valeur numérique, un est dû à des limitations matérielles et le dernier est un vrai bogue qui frappe l'an 2000.

4.1 Un temps négatif

Comme nous l'avons vu précédemment, l'Amiga mesure le temps en secondes. Or le nombre de secondes accumulées au 19 janvier 2046 à 03:14:07 atteindra la plus grande valeur que peut contenir un entier signé sur 32 bits. Ce n'est pas un problème pour le module chronomètre (timer.device), mais des applications et d'autres composants du système qui traitent le temps comme un entier signé rencontreront des problèmes une seconde plus tard : le nombre de secondes atteindra 2 147 483 648, ce qui en complément à deux représente le nombre négatif -2 147 483 648. AmigaDOS, qui traite toujours le temps comme une quantité signée, considérera cette date comme invalide parce qu'elle est négative. Pire, les routines de conversion de dates en ROM souffrent d'un bogue qui, dès que la date dépasse le 19 janvier 2046 à 03:14:07, rend erronées toutes les opérations sur les dates. L'effet immédiat est que toutes les opérations sur les dates peuvent donner des résultats en erreur de plus de deux ans.

Ce comportement est le même dans toutes les versions d'AmigaOS. Aucun correctif n'est disponible à l'heure actuelle, mais une analyse est en cours pour déterminer si la mise à jour de certains modules (locale.library, dos.library) pourrait corriger ce bogue. Après tout, ce bogue est "juste" un effet de bord du traitement d'un entier non signé en entier signé.

4.2 Un temps qui revient en arrière

Un entier non signé sur 32 bits peut contenir une valeur maximale de 4 294 967 295. L'Amiga aura accumulé ce nombre de secondes le 7 février 2114 à 06:28:15. Une seconde plus tard, ce compteur sera remis à zéro. Autrement dit, le 7 février 2114 à 06:28:16 l'Amiga se croira à minuit le 1er janvier 1978.

Aucun correctif pour ce problème n'est disponible à l'heure actuelle.

4.3 Une horloge sauvegardée qui ne compte que jusqu'à 99

Les ordinateurs Amiga qui possèdent une horloge sauvegardée utilisent une de ces deux architectures matérielles : soit le composant Oki MSM6242RS (A500, A2000) ou le composant Ricoh RP5C01 (A3000, A1200, A4000). Comme pour beaucoup d'autres composants de ce type, le compteur des années est implémenté par un nombre à deux chiffres encodé en binaire. Après avoir atteint 99, il redémarre à 00.

A partir de la version 2.0 du système Amiga, le processus d'amorçage lit l'heure de l'horloge sauvegardée et en déduit l'heure système. Ceci se produit chaque fois qu'on réinitialise l'Amiga. Comme l'année est sur deux chiffres, le même algorithme que celui de la commande Date est employé. Par conséquent, la date système au démarrage sera toujours située entre 1978 et 2077. Même si l'horloge système continue à évoluer après le 31 décembre 2077, un redémarrage du système la réinitialisera au 1er janvier 1978.

Aucun correctif pour ce problème n'est disponible à l'heure actuelle.

4.4 SetClock ne fonctionne plus en l'an 2000

Le programme SetClock livré avec le Workbench 1.2 et 1.3 souffre d'un bogue qui provoque une lecture erronée de l'heure de l'horloge sauvegardée à partir de l'an 2000. La valeur lue n'est exacte que pour les années 1978 à 1999. Dès que le compteur d'année redémarre à 00, SetClock croira que l'année est 1978 jusqu'à fin 2078, puis il croira être en 1979, ce qui n'est pas nécessairement mieux.

Il faut noter que seules les versions de SetClock se trouvant sur les disquettes Workbench 1.2 et 1.3 ont ce problème. Plusieurs versions ont été distribuées, de taille comprise entre 4000 et 7000 octets. Pour savoir si votre version est affectée ou pas, vérifiez la taille du fichier. S'il est plus petit que 1000 octets, vous avez probablement une version fonctionnelle. S'il est plus grand que 4000 octets, vous avez probablement une version défectueuse.

Un correctif pour ce problème est contenu dans cette archive. Téléchargez-la et décompressez-la, puis lisez le fichier "SetClock_ReadMe".


[Retour en haut] / [Retour aux articles]