|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
![]() Il est bien connu que la disquette "Kickstart" qui fut distribuée avec l'Amiga 1000 en 1985 contenait des fragments de codes sources : la disquette d'origine pour la duplication a été utilisée par les développeurs auparavant et n'a pas été effacée complètement. Personne ne semble avoir regardé cela de près, je l'ai donc fait pour cet épisode de l'informatique archéologique. Les données révélées nous renseignent sur comment le système d'exploitation Amiga a été mis sur pied, ce qu'il avait en commun avec Tripos et où il a été développé. La disquette Kickstart Quand la conception matérielle de l'Amiga 1000 a été terminée, l'image ROM 1.0 ne l'était pas. Donc la machine a été vendue avec une disquette Kickstart qui devait être chargée depuis une mémoire de 256 ko et celle-ci devait ensuite être protégée en écriture. Une disquette double-densité Amiga fait exactement 880 ko, ce qui donne 1760 secteurs, de 512 octets chacun. La disquette Kickstart a un en-tête sur le secteur 0 (dit "KICK" suivi par des zéros) et l'image ROM brute est stockée sur les secteurs suivants. La ROM fait une taille de 256 ko, ce qui signifie que tous les secteurs à partir du 513 ne sont pas utilisés, et, dans le cas de la disquette Kickstart 1.0, sont préservés. L'analyse suivante a été faite sur l'image disque ADF du Kickstart 1.0 qui a le numéro MD5 2fb28e7bbab0d2eef00e742c7259a674. Amiga Old FileSystem Avant la version 1.3 du système d'exploitation, les disques étaient formatés en Old FileSystem qui était assez inefficace, puisqu'il stockait les métadonnées de façon assez redondante. Chacun des secteurs, même les secteurs contenant un fichier de données, commence par un en-tête de 24 octets, qui contient :
Programme d'extraction Le programme pour extraire les données de la disquette utilise l'algorithme suivant : il réitère tous les secteurs de la fin de l'image ROM à la fin de l'image disque et regarde le type de secteur. S'il s'agit d'un bloc de données, il regarde le parent dans l'espoir d'y trouver une entrée de répertoire intacte. Si c'est le cas, il poursuit la liste de parent en parent pour avoir le chemin complet et le nom du fichier. Si l'entrée de répertoire n'a pas survécu, le fichier aura l'index du répertoire en tant que nom. A partir du moment où l'on connait le nom du fichier auquel le secteur appartient, et que l'on peut lire la séquence de nombres depuis l'en-tête du secteur, il est possible d'écrire 488 octets pleins de données depuis le fichier de sortie. Voici le code source du programme pour extraire les fichiers : extract-adf.c. Résultats La disquette semble avoir contenu, auparavant, des fichiers d'en-tête C et des includes assembleur, et ils ont ensuite été écrasés par l'actuel lot de commandes en ligne d'AmigaOS (le nom de la disquette "cli26.1" en témoigne) et par des outils personnalisés de développement utilisés par Commodore-Amiga. Comme la partie DOS du système d'exploitation Amiga est basée sur une version très légèrement modifiée de Tripos, un système d'exploitation de chez Metacomco, les commandes en ligne, tout comme les outils de développement, mentionnés dans les sections suivantes, sont quasiment les mêmes que ceux trouvés dans Tripos. Ainsi, les termes "Tripos" et "AmigaDOS" peuvent être utilisés l'un pour l'autre. Programmes CLI Le répertoire "c" contient les commandes suivantes, qui peuvent être également trouvées sur la disquette Workbench 1.0 :
Les exécutables suivants peuvent être trouvés dans le répertoire "l" : Disk-Validator Port-Handler Ram-Handler Mais ceux-ci pourraient très bien être d'anciennes versions. Par exemple "DiskCopy" est bien plus petit que le "Diskcopy" du Workbench 1.0. Outils de développement Les utilitaires en ligne de commande suivants peuvent être trouvés dans le répertoire "c". Ils ne sont pas livrés avec le Workbench, mais sont disponibles sur une disquette d'outils pour développeurs, comme le décrit le manuel d'AmigaDOS. Certains d'entre eux existent sur des versions pré-1.0 du Workbench, peut-être là encore dans des anciennes versions.
Alink est la version native Amiga de l'éditeur de liens Tripos/Metacomco. D'après le manuel d'AmigaDOS (ou le manuel de référence de Tripos), "pour inspecter ou modifier les blocs de disque, vous devez utiliser l'éditeur de disque AmigaDOS [Tripos] DiskED". La version sur cette disquette est la 3.2 ; le NDK 2.0+ est fourni avec la 3.4 et cintpos, la version à code source ouvert de Tripos, inclut le code source de la 3.0. Download est assez intéressant, non seulement parce que le binaire et sa documentation sont très difficiles à trouver, mais aussi parce qu'ils en apprennent beaucoup sur l'histoire du système d'exploitation Amiga. D'après le manuel d'AmigaDOS, ce binaire est utilisé pour télécharger "des programmes écrits sur d'autres ordinateurs (par exemple une station de travail Sun) sur l'Amiga". Le pendant Sun serait "binload". Une intéressante note sur cette version de DownLoad est qu'elle contient toujours tous les symboles de l'éditeur de liens, et a un mode de débogage ("-d") qui montre chaque étape de ce qu'il est en train de se faire, il est donc facile de procéder à une rétroprogrammation. C'est une évidence que le système d'exploitation Amiga a été développé à partir de stations Sun. Le SDK Amiga officiel est nommé "NDK" (Native Development Kit), ce qui implique que le SDK d'origine n'était pas natif. A cette époque (1985), les stations de travail étaient des machines équipées de 68000 ou 68010 et tournaient sous SunOS 1.x, lui-même basé sur BSD 4.1. Le compilateur C fourni avec BSD en cette époque était le "Portable C Compiler" (ou PCC) de Bell Labs, qui générait naturellement du code 68000. "Bell Labs C compiler" (donc PCC) est mentionné dans un fichier d'en-tête dans le NDK pour AmigaOS comme écrit dans l'Amiga ROM Kernel Reference Manual - Libraries and Devices, tout comme le compilateur natif "Lattice C" et deux autres compilateurs. Cela confirme que PCC a pu être utilisé pour les développements Amiga. Le manuel d'AmigaDOS dit que "les outils disponibles sur les stations Sun Microsystem pour la compilation croisée incluent un assembleur, un éditeur de liens et deux compilateurs C". Un compilateur est explicitement mentionné : il s'agit du compilateur C de Greenhills (metacc ; le nom suggère que Metacomco fournissait le compilateur C pour Tripos) ; l'autre étant apparemment PCC. Selon cette page, les premières versions de la ROM furent compilées avec le compilateur C de Greenhills. Ainsi, Commodore-Amiga a dû développer AmigaOS sur BSD avec le compilateur C de Greenhills. Nouveaux exécutables
"d" semble être utilisé pour effacer les fichiers, "Read" contient des chaînes de caractères concernant la lecture depuis les ports série et parallèle, "ReadPrefs" donne accès au fichier "config/preferences" qui est également inclus sur cette disquette. On ne sait pas à quoi sert ImageEdit - ce fichier ne contient aucune chaîne de caractères, mais contient des symboles d'éditeur de liens qui font référence aux "timers" (synchronisateurs/chronomètres). Devices et bibliothèques La disquette contient aussi le narrator.device et la translator.library, qui sont utilisés pour la synthèse vocale. Ces deux fichiers ont été écrasés une fois, il y a donc deux exemplaires différents de ces fichiers sur la disquette :
Ces versions sont contenues dans l'en-tête des bibliothèques. Il faut noter que la version la plus récente du narrator.device a la date la plus ancienne. "PDT" signifie que ces fichiers, et AmigaOS, ont été développés sur la côte ouest des États-Unis, dans les bureaux californiens de Commodore. Par comparaison, le Workbench 1.0 est livré avec les versions suivantes : narrator 1.6 (10 Sep 1985) translator 1.3 (4 Sep 1985) Fichiers divers
Fichiers pour développement L'entrée de répertoire de la plupart des fichiers de la disquette a été perdue, mais il est possible de reconstruire les noms de fichiers en utilisant les en-têtes générés dans l'Amiga ROM Kernel Reference Manual : Libraries and Devices, les versions numériques des anciennes et des nouvelles versions des en-têtes, et les versions AROS des en-têtes.
Contrairement aux en-têtes publiés dans le NDK, celles-là contiennent toujours la révision et des informations sur les auteurs. Tous les fichiers utilisent les fins de ligne au format Unix (LF). Certains fichiers contiennent l'adresse de Commodore-Amiga, qui était : Commodore-Amiga Incorporated 983 University Ave. Building #D Los Gatos, California, 95030 (voir le plan) Entrées de répertoire avec données manquantes Il y a des entrées de répertoire pour les en-têtes et includes suivants, mais les données sont manquantes : devices/audio.h devices/audio.i devices/bootblock.h devices/bootblock.i devices/console.h devices/console.i devices/gameport.h devices/gameport.i devices/inputevent.h devices/inputevent.i devices/keyboard.h devices/keyboard.i devices/keymap.h devices/keymap.i devices/narrator.h devices/narrator.i devices/parallel.h devices/parallel.i devices/serial.h devices/serial.i devices/timer.h devices/timer.i devices/trackdisk.h devices/trackdisk.i hardware/blit.i hardware/intbits.hIl y a quatre entrées de répertoire supplémentaires pour des fichiers exécutables :
Conclusion Les conclusions suivantes peuvent être tirées de cet exercice :
|