Pour le plus grand plaisir des anglophobes et de ceux qui préfèrent lire ce genre d'articles en français,
Vincent-21 a traduit le tutoriel de
Roc Vallès Domènech qui vous permettra de démarrer un Amiga sans disquette amorçable !
Son auteur d'origine, Roc Vallès donc, nous a donné l'aimable autorisation de publier cette traduction sur AmigaImpact et nous tenions à l'en remercier. Il tenait par ailleurs à ce que nous précisions que cette traduction peut ne pas être basée sur la dernière version du tutoriel, puisqu'il continue de mettre à jour cet article et qu'il a même publié une version 1.01 d'amigaXfer sur Aminet tout récemment.
Il souhaitait également que nous vous rappelions qu'il y a plusieurs méthodes pour utiliser amigaXfer et l'une des plus simples reste l'utilisation de "loadwb -debug" (voir tuto ci-dessous).
Enfin, nous tenions à vous rappeler que ce qui est décrit ici n'est pas garanti et, si vous tentez l'aventure, vous le faites en connaissance de cause et assumerez les éventuels risques et dommages encourus.
Démarrage d'un Amiga sans disquette Amiga amorçable
25/03/2021 par
Roc Vallès Domènech
Introduction
Je viens de publier un outil de transfert de fichiers et de disques Amiga basé sur le port série,
amigaXfer.
Il est capable de lire/écrire/comparer des disquettes, d'installer des blocs de démarrage, d'envoyer/recevoir des fichiers et de vider la rom de démarrage.
AmigaOS 1.x, 2.x et 3.x sont supportés.
En désactivant les interruptions et en interrogeant directement le port série, des vitesses aussi élevées que 512kbps sont atteintes, même sur un Amiga 500 de base avec son horloge cpu de 7MHz. L'intégrité des données est protégée par CRC-32/ISO-HDLC.
Contrairement à la plupart des outils de transfert par port série, il ne nécessite pas l'installation et l'exécution d'un agent du côté Amiga, car il utilise le débogueur de la rom kickstart pour prendre le contrôle de l'Amiga.
Il y a plusieurs façons d'accéder à ce débogueur. La plus simple est le menu de débogage de Workbench, présent lorsque wb est chargé avec "
loadwb -debug".
En sélectionnant l'option de menu Debug, RomWack ou SAD, on entre dans le débogueur et permettant l'utilisation d'amigaXfer.
Une autre méthode pour entrer dans le débogueur est l'exécution d'une petite bidouille matérielle. Cette méthode permet de démarrer un ordinateur Amiga sans avoir besoin de disquettes amorçables par Amiga. Cet article documente l'utilisation de cette méthode alternative de
bootstrapping, et explique comment elle fonctionne d'un point de vue technique.
Exigences
- Un Amiga en bon état.
- Si l'Amiga est un A1000, le kickstart devra être chargé en premier.
- AmigaXfer lui-même fonctionne avec AmigaOS 1.x/2.x/3.x, mais cette méthode alternative de démarrage dit de dernier recours n'a été testée que sur 34.5 (1.3).
- Une plateforme équipée d?
amigaXfer.
- Un câble série null-modem ou un adaptateur USB <-> RS-232, reliant les deux ordinateurs entre eux. Seuls trois fils seront utilisés : GND<>GND droit et RX<>TX croisé.
- Quelques disquettes vierges, dont la qualité a été vérifiée, par exemple par un formatage vérifié effectué sur un autre ordinateur. Une disquette Double Densité (DD) est préférable à une disquette Haute Densité (HD).
- Images ADF des disquettes que vous souhaitez écrire (par exemple, ADF des disquettes Workbench et Extras correspondant à votre version de kickstart).
- Un morceau de fil de fer ou éventuellement, un trombone.
- Des mains stables pour connecter les broches si nécessaire.
Comment faire ?
Ces instructions sont fournies telles quelles, sans responsabilité expresse ou implicite. Suivez-les sous votre propre responsabilité, et seulement après les avoir comprises dans leur intégralité.
Si des disquettes Amiga amorçables sont disponibles, il existe des méthodes bien plus simples pour entrer dans le débogueur et utiliser amigaXfer, comme la méthode loadwb -debug décrite plus haute et qui est beaucoup plus simple.
Débranchez les extensions externes inutiles (telles que celles connectées au port d'extension gauche de l'A500).
Ouvrez l'Amiga et localisez un GND et le signal BERR.
BERR, marqué en orange, est une broche sur la prise du 68000. Il est donc possible de toucher le haut de la patte du 68000 à cet effet.
Il y a un grand GND, marqué en bleu sur le connecteur d'extension gauche, utile faire contact avec un fil.
Pour faciliter l'utilisation du trombone, une broche GND qui est proche de BERR est également surlignée en bleu.
Allumez l'Amiga, sans insérer de disquette. Attendez que la sortie vidéo affiche l'invite Workbench. Si aucune disquette n'est présente, le lecteur de disquettes devrait maintenant commencer à émettre des bruits de cliquetis.
Sélectionnez CrashEntry sur amigaXfer, et cliquez sur connecter. Il est recommandé de laisser la fenêtre de journalisation activée, afin de pouvoir suivre facilement ce qui se passe.
Reliez calmement BERR à GND pendant un instant. Si le contact dure trop longtemps, il peut nécessiter un redémarrage (Control-Amiga-Amiga) et une nouvelle tentative.
Une fois que la brève connexion est correctement exécutée, l'Amiga redémarre sur un écran blanc et la fenêtre de log d'amigaXfer se remplit de données. Si tout va bien, le menu principal d'amigaXfer apparaîtra après quelques secondes.
Comme la vitesse du port série est verrouillée à 9600 dans le cas du bootstrap, il est recommandé d'utiliser maintenant l'outil
Bootblock pour installer un
bootblock de débogage sur une ou plusieurs disquettes. Cochez la case
Format, car les disquettes ne sont pas nécessairement formatées pour Amiga au départ. Protégez ensuite en écriture la disquette et quittez. L'Amiga redémarrera normalement.
L'Amiga devrait être capable de démarrer sur cette disquette, et l'utilisation normale (sans
CrashEntry) de amigaXfer devrait être possible à ce stade. Cela signifie que des vitesses de transfert rapides sont disponibles, aussi rapides que 512kbit/s sur un A500 ordinaire, donc l'écriture de disquettes à partir d'images devrait être rapide.
Une fois qu'une disquette Workbench a été écrite, la méthode loadwb -debug peut être utilisée pour entrer amigaXfer sur celle-ci, donc cette méthode de démarrage de dernier recours basée sur BERR ne devrait plus être nécessaire.
Comment cela-t-il fonctionne réellement ?
BERR est "tiré vers le haut" dans l'Amiga via une résistance de 470 Ohms, donc il passe environ 10.6mA quand il est connecté à GND, ce qui est une sécurité. Ce courant provient du PCB et non de la sortie d'une puce personnalisée. Dans l'A500, il n'est même pas connecté à autre chose que l'entrée du CPU, le connecteur d'extension gauche et la résistance
pull-up.
Du point de vue du processeur, BERR est faible, ce qui entraîne la levée d'une exception d'erreur de bus ; le processeur lit un pointeur dans la table des exceptions vectorielles et se branche à cet endroit.
Sur AmigaOS, il est réglé sur une routine qui causera un crash irrécupérable, le genre qui fait clignoter la led, redémarre et affiche un gourou.
Pendant que la led clignote, le kickstart va vérifier directement le matériel du port série (SERDATR) pour un caractère DEL (0x7f) entrant. S'il le trouve, il entrera dans le débogueur série intégré (par exemple
RomWack), au lieu de redémarrer.
Malheureusement, le caractère DEL plantera RomWack si elle est reçue, car le débogueur utilise des fonctions d'entrée/sortie série de base qui sont programmées pour entrer dans RomWack à la réception d'une DEL. Ainsi, il n'est pas possible d'inonder le port série de DEL. Au lieu de cela, la DEL est envoyée sur une courte période de temps, après avoir vérifié qu'il n'y a pas de caractères entrants envoyés par le débogueur. Une fois qu'il y en a, le débogueur est en marche, nous avons donc le contrôle.
À ce stade, AmigaOS est effectivement inutilisable (les appels à exec échoueront), nous allons donc nous préparer à reprendre le contrôle après un redémarrage en faisant pointer CoolCapture directement sur la fonction Debug() de exec.
Si la version de kickstart est inférieure à 36, il y a un
bug de kickstart qui considère que la structure de base d'exec est corrompue si elle indique qu'il y a plus de 512KB de Chip RAM disponible, la jetant ainsi et en construisant une nouvelle, perdant CoolCapture dans le processus. Malheureusement, beaucoup d'Amiga pouvant avoir 1MB de Chip ont été livrés avec un kickstart 34, donc si c'est le cas, nous devons contourner ce bug en fixant la valeur à 512KB. Heureusement, cette quantité de mémoire CHIP est suffisante pour le bootstart.
Nous n'avons pas besoin de voir l'affichage GURU (qui nécessiterait une intervention de l'utilisateur pour en sortir), donc nous effaçons également le drapeau guru, qui est le texte "HELP" écrit dans les quatre premiers octets de la mémoire. Puis nous redémarrons.
Lorsque le système atteint CoolCapture, nous reprenons le contrôle. À ce stade de démarrage, exec.library est pleinement fonctionnel, mais le reste des modules de la ROM de démarrage n'a pas été initialisé. Par conséquent, il n'est pas possible, par exemple, d'utiliser trackdisk.device pour accéder au lecteur de disquettes.
Nous voulons utiliser le lecteur de disquettes, donc ce n'est pas idéal. Mais si l'exécution était reprise, AmigaOS initialiserait un sous-ensemble des modules de la table résidente qui ont un certain drapeau activé, y compris trackdisk. Le dernier de ces modules est strap, qui affiche l'invite de la disquette Workbench et dont la fonction d'initialisation ne revient pas. C'est un inconvénient, car cela nous placerait au point de départ.
Afin d'éviter cela, nous supprimons simplement l'entrée la moins prioritaire de la table des résidents, c'est-à-dire strap. Par conséquent, la fonction qui gère l'initialisation des modules atteindra effectivement la fin de la table (au lieu d'être prise en charge par strap), et reviendra.
Cela entraîne l'exécution d'un code dans la ROM qui ne serait normalement jamais atteint. Ce que fait ce code, c'est appeler WarmCapture() s'il est activé, et après ou sinon, il appelle Debug() dans une boucle infinie. C'est pratique, car cela nous évite d'avoir à régler WarmCapture.
À ce stade, nous avons à nouveau le contrôle et AmigaOS est presque entièrement initialisé, à l'exception notable de dos.library (non requis pour effectuer des E/S au niveau du bloc), qui est ignoré car le LSB du champ rt_Flags de sa structure RomTag est vide.
Cet environnement est suffisant pour qu'amigaXfer fonctionne normalement.