Obligement - L'Amiga au maximum

Dimanche 19 novembre 2017 - 20:50  

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


Contact

David Brunet

Courriel

 


Dossier : Les secrets de la disquette Kickstart 1.0
(Article écrit par Michael Steil et extrait de www.pagetable.com - novembre 2008)


disquette Kickstart 1.0 Note : traduction par David Brunet.

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 entê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 entête de 24 octets, qui contient :
  • Le type du secteur (entrée de répertoire, donnée...).
  • Un pointeur vers parent.
  • La séquence de nombre du secteur dans le fichier.
  • Le nombre d'octets valides dans le secteur.
  • Un pointeur vers le successeur.
  • Et une somme de contrôle.
Chaque entrée de répertoire occupe un secteur complet, et effacer un fichier signifie simplement ôter le lien vers le secteur d'entrée de répertoire, sans toucher aux secteurs de données ou aux secteurs d'entrée de répertoire. Et ce qu'il a de mieux est que, pour des raisons de performance, les entrées de répertoire sont placées autour du centre de la disquette, par exemple le secteur 880, qui, dans notre cas, n'a pas été réécrit par l'image ROM. Il est donc facile de retrouver quelques données de cette disquette.

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'entê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'entê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 :

Assign
Break
CD
Copy
Date
Delete
Dir
DiskCopy
Echo
Ed
Edit
EndCLI
Execute
FailAt
Fault
Format
If
Info
Install
Join
Lab
List
MakeDir
NewCLI
Prompt
Protect
Quit
Rename
Run
Search
Skip
Sort
Stack
Status
Type
Wait
Why

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 de l'AmigaDOS. Certains d'entre eux existent sur des versions pré-1.0 du Workbench, peut-être là encore dans des anciennes versions.

Alink Amiga Linker Version 2.17, Copyright (C) 1985 by Tenchstar Ltd., T/A Metacomco.
DiskEd AmigaDOS Disc Editor (éditeur de disque AmigaDOS)
DownLoad DownLoad version 2.0, Sun->Amiga transfer utility (utilitaire de transfert Sun->Amiga)
DumpObj Displays executable hunks in hex (Affiche les exécutables hunk en hexadécimal)

Alink est la version native Amiga de l'éditeur de liens Tripos/Metacomco.

D'après le manuel de l'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 Open Source 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 de l'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'entê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 de l'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

c/d
c/Read Utilitaire de réception de données du port série/parallèle
c/ReadPref Accès aux configurations/préférences
demos/ImageEdit

"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/horloge).

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 :

devs/narrator.device narrator Version 25 (rev 3) (Thu Jun 20 18:47:53 PDT 1985)
devs/narrator.device narrator Version 26 (rev 1) (Wed Jun 19 14:22:29 PDT 1985)
libs/translator.library translator Version 26 (rev 1) (Wed Jun 19 14:49:56 PDT 1985)
libs/translator.library translator Version 26 (rev 5) (Thu Jun 20 17:25:49 PDT 1985)

Ces versions sont contenues dans l'entê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

config/preferences 240 octets, la plupart avec des "0", pas de chaîne de caractères, lu par c/ReadPrefs
s/startup-sequence ReadPref
echo "Use the DATE command to set date and time"
wait 1 sec
date
t/ed-backupequence echo "Use the DATE command to set date and time"
wait 1 sec
date
C'est une sauvegarde de la startup-sequence par "ED"
demos/src/wtest.asm Code source assembleur dans le format Metacomco ("MOVE.L" pour "assem") qui génère "Hello World" dans la console et ouvre une fenêtre. Le source a été généré avec "metacc -S"

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 entê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 entêtes, et les versions AROS des entêtes.

Secteur Nom de fichier Commentaire
0935 amiga.lib Adaptateur de code C autour de l'API Amiga (les premiers secteurs sont manquants)
1077 crt0.obj Objet d'éditeur de lien qui contient le code qui est exécuté avant "main()". Il ouvre dos.library, met en cache stdin et stdout, et fournit une fonction exit().
1074 clib/macros.h
1025 exec/alerts.h (les premiers secteurs sont manquants)
1026 exec/execname.h
1045 graphics/clip.h 02-04-85 Dale created file from graph.h
1050 graphics/clip.i
1051 graphics/collide.h 8-24-84 Dale added this header file
1052 graphics/copper.h 2-09-85 Dale made #defines for union ignorance
1053 graphics/display.h 8-24-84 Dale added this header file
1054 graphics/gels.h 9-28-84 -=RJ=- for GELS16 added Bob.h to this file
1055 graphics/gels.i
1056 graphics/gfx.h Feb 85 Dale added Rectangle,BitMap structures
1057 graphics/gfx.i
1048 graphics/gfxbase.h 10-20-84 Kodiak added this header file & TextFonts
1059 graphics/gfxbase.i
1060 graphics/gfxmacros.h 9-07-84 Dale fixed macros to use new RastPort
1061 graphics/graphint.h
1062 graphics/layers.h
1063 graphics/layers.i
1064 graphics/rastport.h 02-04-85 Dale created from graph.h
1065 graphics/rastport.i
1058 graphics/regions.h
1066 graphics/regions.i
1067 graphics/sprite.h
1068 graphics/sprite.i
1027 1071 graphics/text.i $Header: text.i,v 25.1 85/05/06 10:54:07 kodiak Exp $
(quelques secteurs manquants)
1028 1069 graphics/text.h $Header: text.h,v 25.1 85/05/06 10:53:57 kodiak Exp $
(deux exemplaires identiques)
1072 graphics/view.h 2-8-85 Dale conversion to 24 View->ViewPort
1073 graphics/view.i
1044 intuition/intuition.h 1-30-85 -=RJ=- created this file!
1047 intuition/intuition.i 6-13-85 =VoodooDrRj= added back the comments
1046 intuition/intuitionbase.h 3-1-85 -=RJ=- created this file!
1009 libraries/translator.h
1029 libraries/translator.i
1030 libraries/dos.h
1032 libraries/dos.i
1033 libraries/dosextens.h
1034 libraries/dosextens.i
1035 libraries/mathffp.h
1036 resources/cia.i
1043 resources/ciabase.i
1041 resources/disk.i $Header: disk.i,v 26.1 85/06/17 12:19:27 neil Exp $
1042 resources/disk.h $Header: disk.h,v 26.2 85/06/17 13:01:21 neil Exp $
1038 resources/potgo.h
1031 resources/potgo.i
1039 resources/misc.i $Header: misc.i,v 26.1 85/06/17 12:08:29 neil Exp $
1040 resources/misc.h $Header: misc.h,v 26.1 85/06/17 12:08:26 neil Exp $
1070 diag/romdiag.i Seulement disponible avec la version 1.0 des includes

Contrairement aux entê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 entê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.h
Il y a quatre entrées de répertoire supplémentaires pour des fichiers exécutables :

Assem Macro assembleur AmigaDOS/Tripos de Metacomco
Avail Fourni avec les outils pour développeurs et les systèmes 1.3 et supérieur
ObjDump Probablement le même que "DumpObj"
SetPref Probablement la contrepartie de "ReadPref"

Conclusion

Les conclusions suivantes peuvent être tirées de cet exercice :
  • Les redondances dans l'Old FileSystem font de ce système de fichiers l'idéal pour reconstruire des données effacées ou partiellement écrasées.
  • AmigaOS semble démarré en utilisant SunOS et les outils de Metacomco/Tripos, et n'a probablement pas été son propre hôte pour la version 1.0.
  • La disquette a été utilisée pour copier les outils et fichiers d'entête pour les développeurs entre les différentes machines.
  • La version 1.0 du système a été développée dans les locaux californiens de Commodore, les bureaux d'origine de la société Amiga.
Questions ouvertes
  • Quel système de contrôle de source a été utilisé ?
  • Comment la numérotation des versions ("26.1", etc.) fonctionne ? Comment est-ce consigné dans le contrôle de source ?
  • Est-ce que le NDK 1.0 est trouvable quelque part ? Il aurait dû être fourni avec, au moins, Lattice C. Ce serait intéressant de comparer ses fichiers d'entête et includes avec ceux du NDK 1.0, pour voir les vraies différences et les changements dans les commentaires.
  • Quelles sont ces différences entre tous ces fichiers d'entête et ceux présents dans la version 1.0 ? Y a-t-il eu des changements de dernière minute ?


[Retour en haut] / [Retour aux articles]