Changing the TOS of an Atari (STF/STE/Mega)/fr
Bonjour, je vous propose un tuto sur la mise à jour du TOS de nos machines. J'imagine que pour beaucoup d'entre vous ce ne sera que des choses connues, mais on ne sait jamais.
Pourquoi changer le TOS et pourquoi cette FAQ. Contrairement aux PC et Macs modernes, sur les ST le système d’exploitation est stocké en ROM dans des puces sur la carte mère (sauf les tout premiers ST). Le gros avantage de cette solution est de permettre un démarrage quasi instantané et de résister plutôt bien aux années. En revanche, la mise à jour du système nécessite une opération matérielle et le remplacement de ces puces par des nouvelles. Au fil des années, Atari a fait évoluer son OS et les versions du TOS se sont succédées apportant leur lot de nouveautés (et d’incompatibilité). En plus des TOS Atari, d’autres versions ont vu le jour, corrigeant des bugs et modernisant l’OS. Un changement de TOS peut être intéressant pour plusieurs raisons: bénéficier d’un bureau plus moderne, corriger des bugs, pouvoir démarrer facilement depuis un disque IDE ou un UltraSatan, etc…
Cette petite FAQ a pour but de rassembler les informations nécessaires pour changer son TOS tout seul mais ne rentre pas dans les détails du TOS, il y a plein de très bons articles là dessus. Il y a quelques raccourcis, sûrement des erreurs ou des informations manquantes, il ne faut pas hésiter à me les signaler.
Les différentes versions du TOS
Il existe donc plusieurs versions du TOS, de la 1.0 des tous premiers ST à la 4.04 du Falcon, voici en quelques lignes les avantages et inconvénients principaux des versions 1.x et 2.x. Les versions 3.x et 4.x réservées aux TTs et Falcons ne sont pas abordées ici, dès que quelqu’un m’offrira une de ces machines, je mettrais à jour le document 😀 Je n’aborde pas non plus les autres OS (Mint, MultiTOS, etc) qui de toute manière ne se stockent pas en ROM.
Compatibilité des TOS
Langue du TOS
Vous pouvez chercher partout dans les menus, il n’existe pas d’option pour changer la langue de votre TOS, chaque puce ne contient qu’une seule langue et pout la changer, il faut changer son TOS.
Donc si vous voulez que ce beau Mega STE venu d’Allemagne vous parle dans la langue de Molière, il faut changer le TOS. Mais attention, le clavier dépend lui aussi du TOS, donc si vous mettez un TOS Français dans une machine Anglaise avec son clavier QWERTY, chaque pression sur le Q vous affichera un beau A comme sur un AZERTY. Heureusement il existe des utilitaires pour changer le clavier: Keyedit, CKBD ou Clocky.
Avantages et inconvénients des différents TOS
- TOS 1.0 et TOS 1.02 : Les premières versions de TOS, considérées comme les plus « compatibles » avec la plupart des jeux. Côté inconvénients, on retrouve pas mal de petit bugs, mais surtout une compatibilité restreinte avec les disques dur. Il sera par exemple impossible d'avoir des partitions de plus de 256MB, le nombre de fichiers par répertoire aussi, etc...
- TOS 1.04: Aussi appelé « Rainbow TOS » corrige pas mal debugs et permet d’utiliser un disque dur facilement, mais apporte quelques incompatibilités avec les jeux plus anciens. Ce n’est généralement pas un problème, la plupart des jeux ont depuis longtemps été patchés pour fonctionner avec des versions 1.4 ou 2.06, mais si vous possédez des originaux sur disquettes, ils risquent de ne plus fonctionner.
- TOS 1.06 et TOS 1.62: Ce sont les premières versions pour STE et ne fonctionnent que sur STE. La version 1.06 est quasiment identique à un TOS 1.04 mais supporte les nouveautés du STE et la 1.62 est juste une correction de bug de la 1.06, sans modification majeur. Attention, la 1.06 a quand même un bug pénible, elle sauvegarde mal la résolution. Donc impossible de démarrer en Moyenne résolution, il faut systématiquement faire le changement à la main après le boot. Ce n’est pas dramatique, mais peut être franchement agaçant. Des utilitaires existent pour corriger ça. (STE_FIX.PRG à mettre dans AUTO).
- TOS 2.02 et 2.05: Premiers TOS pour Mega STE, assez rare.
- TOS 2.06 : C’est la seule version du TOS (par Atari) à fonctionner sur toutes les machines du ST au Mega STE…ou presque. Elle apporte un nouveau bureau avec pas mal d’améliorations, un support étendu des disques durs, etc… Tout cela se fait malheureusement au détriment de la compatibilité avec les plus anciens logiciels, mais encore une fois la plupart ont été patchés depuis longtemps. Par contre, attention, cette version de TOS ne fonctionnera pas dans un ST, STF ou Mega ST sans une modification hardware, nous reviendrons là dessus.
Les autres TOS
Il existe plusieurs autres TOS non produits par Atari qui peuvent être installés dans votre ST:
- EmuTOS: C’est une réécriture complète du TOS, totalement Open source et ayant une bonne compatibilité. EmuTOS apporte pas mal de nouvelles fonctionnalités, améliore grandement la gestion des disques etc… A noter, que si votre machine dispose de suffisamment de mémoire, il n’est pas forcément nécessaire d’installer EmuTOS en ROM, il peut être chargé depuis une disquette ou depuis le disque dur au démarrage. https://emutos.sourceforge.io
- Les TOS de Pera Putnik : Disponibles sur le site de PPera, ils sont basés sur les TOS d’origine mais comportent beaucoup de correction de bugs, la possibilité de démarrer un TOS 1.4 depuis un disque IDE , etc… Etant basés sur les TOS d’origine, la compatibilité est bonne et il y a même des versions « chimère » du type TOS 1.4 avec bureau de la version 2.06 pour avoir les nouveautés en maintenant un maximum de compatibilité. https://atari.8bitchip.info/tosimprgu.html
- Les autres: Je ne les connais que de nom (KaosTOS, SuperTOS, etc…) et je ne pourrais donc pas en dire grand chose.
Pour ceux qui veulent aller plus loin sur le TOS, je vous conseille la présentation de Vincent Rivière et Frédéric Sagez ici: https://fr.slideshare.net/fredericsagez/atari-st-histoire-de-los
Changer son TOS
Avant de changer son TOS
Changer son TOS est dans la plupart des cas une opération assez simple à réaliser, il suffit juste de remplacer ses puces par de nouvelles puces contenant la version qui vous intéresse, de redémarrer la machine et le tour est joué. Cependant il faut vérifier quelques points au préalable pour ne pas commettre d’erreur et se retrouver avec un nouveau TOS inutilisable.
Tout d’abord il faut vérifier la compatibilité de la version souhaité avec votre machine (voir tableau dans la première partie) puis le nombre de puces pour les ST/STF/Mega ST ou le nombre de broches des puces pour les STE et Mega STE.
2 puces ou 6 puces?
Sur les ST/STF ou Mega ST, le TOS de votre ATARI peut se présenter sous la forme 6 puces de 32k ou de deux puces de 128k, cela va dépendre de leur année de fabrication et surtout de ce qu’Atari trouvait de moins cher à ce moment là. Dans tous les cas, vous aurez 6 emplacements sur la carte mère, mais des fois il y aura 6 puces et dans d’autres machines juste 2 avec 4 emplacements vides.
28 ou 32 broches ?
Pour les STE et Mega STE, il n’y a que 2 emplacements pour la ROM, mais ceux-ci peuvent contenir des puces avec 28 broches ou des puces avec 32 broches, encore une fois en fonction de ce que les Tramiels trouvaient de moins cher sur le marché. Normalement, que la puce soit 32 ou 28 broche, l’emplacement sur la carte mère est prévu pour 32 broches, mais si vous ne voulez pas utiliser de fer à souder, il faut que la nouvelle ROM ait le même nombre de broches que l’ancienne.
Supports ?
Avant de changer votre TOS, vérifiez tout de même que vos ROMs sont bien sur des supports et pas directement soudées sur la carte mère. Il est très rare d’avoir des ROMs soudées, mais si c’est le cas il faudra bien évidemment les de-souder pour les remplacer. Ce sera une bonne occasion pour mettre des supports.
Maintenant que vous savez ce qu’il vous faut en terme de version, de nombre de puces et de nombre de broches, quelles solutions s’offrent à vous ?
La solutions simple: acheter son TOS sur le web
La solutions « clef en main », Il suffit d’acheter les puces correspondantes sur le net, d’ouvrir votre machine et de remplacer les puces d’origine par les nouvelles . Ça ne coûte pas très cher (Entre 7€ et 15€) et il suffit d’un tournevis pour ouvrir la machine. Du moment que vous commandez des modèles correspondant et compatibles, l’opération sera rapide et indolore (sauf à avoir de vraiment gros doigts). Donc c’est la solution simple, ne nécessite aucune soudure (Si on prends bien le même nombre de puces et le même nombre de broches !!!), mais le choix de TOS est limité aux TOS « Standards » et toutes les combinaison version/langue/nombre de chips ne se trouvent pas aussi facilement.
Les cartes Dual TOS
Le rapport capacité/prix des EEPROMS étant bien meilleur aujourd’hui qu’en 1985, on peut assez simplement mettre plusieurs version du TOS dans une paire d’EEPROM et choisir la version voulue au démarrage de la machine. Pour cela, on trouve des cartes « dual TOS » qui viennent se mettre à la place des puces d’origine et contiennent des puces de 256k au lieu des puces de 128k d’origine. Un jumper permet alors de passer d’une version de TOS à l’autre (machine éteinte!!!).Avoir deux TOS permet de garder une version « basse » pour une compatibilité maximum et d’y ajouter une version plus évoluée et moins buggée quand on a pas besoin de faire tourner son jeux préféré sur disquette d’origine nécessitant un TOS 1.0 max. Ces cartes sont en général un peu plus cher, 30€-40€, ne sont à ma connaissance pas disponibles en version 6 chips et proposent là encore un nombre limité de combinaisons de TOS.
Installer les ROMs
Maintenant que vous avez votre nouveau TOS ou carte Dual TOS, il faut l’installer dans la machine.
Avant d’effectuer l’opération, quelque précautions à prendre:
- Préparer un récipient, boîte ou autre pour stocker les vis, vous allez en avoir un certain nombre de tailles différentes et au moment de remonter la machine il vaut mieux éviter de se tromper.
- Si vous avez du produit pour nettoyer les contacts, ça peut être une bonne occasion de l’utiliser sur les supports des ROMs. Ces supports sont vieux et pas toujours de la meilleur qualité, un faux contact peut devenir vraiment pénible à l’usage.
- Les puces de la machine sont très sensibles à l’électricité statique, donc idéalement il est mieux d’utiliser un bracelet anti-statique. Dans les faits, si vous ne portez pas un gros pull en laine, une polaire ou un sous-pull 70’s en nylon et si vous évitez de caresser votre chat pendant l’opération, ça devrait bien se passer. Dans tous les cas évitez de toucher les pattes des composants.
Voici en quelques étapes comment effectuer l’opération:
- Ouvrir la machine en retirant les vis, sur les STF et Mega ST il n’est pas nécessaire de retirer les 3 vis du lecteur de disquettes contrairement au STE.Deux articles expliquant bien où sont les vis et comment ouvrir la machine : https://jlgconsult.pagesperso-orange.fr/Atari/opening/index.htm et http://info-coach.fr/atari/hardware/disassembly_fr.php
- Débrancher le clavier, le retirer ainsi que le blindage et l’alimentation(ça peut être l’occasion de jeter un oeil à votre alim pour vérifier la tête des condensateurs).
- Maintenant il va falloir localiser les ROMs (voir les illustrations):
- Sur un STF, un groupe de 6 puces identiques (ou de 6 emplacements dont seulement 2 d’utilisés) se trouve à proximité du port cartouche, soit sous l’alimentation, soit sous le clavier en fonction de la version de carte mère.
- Sur un Mega ST, idem un groupe de 6 puces ou de 6 emplacements, juste en dessous du CPU (la plus grosse puce de la machine).
- Sur un STE les 2 puces sont au niveau du lecteur de disquette
- Sur un Mega STE, vous trouverez les ROMs juste en dessous des barrettes mémoires.
- Avant de retirer les puces, je vous conseille de prendre une photos des puces existantes, suffisamment net pour lire les codes marqué dessus. Normalement vous avez sur la carte mère des marques indiquant quelle ROM va dans quelle cocker, mais on ne sait jamais.
- Pour retirer les puces de leurs sockets, utilisez un objet plat et rigide (tournevis plat par exemple) que vous glissez entre la puce et le support. Soulevez doucement la puce, sans forcer, en levant un peu d’un côté, puis de l’autre, etc… Ne prenez en aucun cas appuie sur les petits composants jaunes qui se trouvent devant les puces, ces condensateurs se cassent très facilement!!!
- Une fois les puces retirées, préparez les nouvelles et insérez les dans le bon sens (voir figure) et au bon endroit:
- Pour 6 puces, vous allez avoir HI0,HI1,Hi2 et LO0,LO1,LO2, vous trouverez normalement les mêmes références à côté de chaque support, ou sur les puces d’origine.(J’espère que vous avez bien pris une photo avant de les retirer 😁)
- Pour 2 puces sur un STF, HI se met dans HI-0 et LO dans LO-0
- Pour 2 puces sur un STE, vous avez juste 2 puces à remplacer, HI et LO sont normalement marqués sur la carte mère.
Et voilà, c’est fait.
Je vous conseil fortement de tester votre machine avant de remettre le blindage et de tout revisser !!!!! Sur un STF ou MegaST, pensez bien à rebrancher le clavier avant de démarrer sinon vos oreilles ne vont pas aimer. Sur une machine avec un TOS 2.06, un lecteur de disquette doit être branché, sinon vous aurez 4 belles bombes après le test mémoire.
Si ça ne fonctionne pas, vérifiez que les puces sont bien enfoncées dans les supports, si vous avez eu à faire de la soudure, vérifiez chaque soudure. Si ça fonctionne, vous pouvez refermer la machine et profiter de votre nouveau TOS.
Enfin, si vraiment vous n’avez pas trouvé le TOS qu’il vous fallait ou simplement que vous avez envie de bricoler un peu plus, vous pouvez faire vous même vos puces et même un Dual, voir Quad TOS, mais ça c’est la prochaine partie dans quelques jours…
Que faire si vous ne trouvez pas la bonne combinaison de TOS ?
Si par hasard vous avez un TOS en 6 chips et que le nouveau ne se trouve qu’en 2 chips, tout n’est pas forcément perdu. Idem si vous avez des puces 32 broches à mettre dans un STE qui avait des 28 broches à l’origine. Mais il va falloir utiliser un fer à souder.
Passer un ST/STF/MegaST de 6 chips en 2 chips et vice-versa
Attention, certaines versions de cartes mères de STF(C070523 par exemple) ne peuvent pas être modifiées simplement. Elles n’ont ni 74LS11, ni emplacement pour en mettre un, donc la manipulation va devenir plus compliquée et je ne l’aborderais pas ici. Pour ces cartes, du Dual TOS reste possible, mais en version DIY, je l’aborderai dans la prochaine partie dédiée au DIY.
- Première chose à faire, si vous êtes en 6 chips, vérifiez que votre carte mère a bien une puce 74LS11 (U68 sur la carte), sinon il va falloir en ajouter une pour passer en 2 chips. Un 74LS11 se trouve pour quelques centimes sur le net, vous pouvez aussi le remplacer par un 74ACT11, 74F11, 74ALS11 mais vérifiez que vous commandez bien une version PDIP-14. Ensuite, un peu de tresse à dé-souder un bon fer et vous êtes prêt à passer à l’étape 2 (gardez le fer allumé il va vous servir).
- ST/STF: Localiser les « BLOBS » sur la carte mère, normalement à proximité des ROMs. Ils vont par paire, marqués 1M et 256. Sur un ST avec 6 chips, le Blob 256 va-t-être recouvert de soudure alors que le 1M n’en aura pas. Sur un ST avec 2 chips, ce sera l’inverse.Pour passer d’une configuration à l’autre, il suffit donc d’inverser le blob qui est soudé et celui qui ne l’est pas. Un peu de tresse à dessouder d’un côté, une goutte de soudure de l’autre et le tour est joué. Pas besoin d’être un pro du fer à souder pour faire ce changement.
- MegaST: Sur le MegaST, pas de BLOBS mais 3 jumper sur la carte mère (voir photo).
Passer un STE de puces 28 broches vers des puces 32 broches.
La il va falloir repérer des jumper sur la carte mère, légèrement à droite des ROMs. (Voir photo) Ils sont étiqueté W102, W103 et W104 et se présentent sous la forme de résistances soudées à la verticale. Je conseille fortement de les retirer et de les remplacer par de vrais jumper, ça simplifiera grandement tout changement futur ou remise en place des ROMs d’origine.
Voici les configurations possibles de ces jumper qu’il va falloir régler en fonction de vos nouvelles puces.
Utiliser un TOS 2.06 dans un STF,STFM ou Mega ST
J’ai mentionné dans les parties précédentes que le TOS 2.06 était compatible avec les STF, STFM ou Mega ST mais qu’il nécessitait une modification hardware. Nous allons voir aujourd’hui pourquoi il faut modifier la machine et comment le faire. La première partie explique le « pourquoi » pour les curieux, si vous êtes juste intéressé par la solution, vous pouvez passer directement à la rubrique « Solutions de décodage » et donc gagner un peu de temps.!!!
L’Atari et ses périphériques
Notre bel Atari ne se résume pas à un CPU et de la mémoire, il a aussi un certain nombre de périphériques pour communiquer avec l’extérieur. Pour communiquer avec ces périphériques, l’Atari va utiliser des adresses mémoire ou des plages d’adresses spécifiques et chaque lecture ou écriture à ces adresses sera envoyée au périphérique correspondant (on parle de « Memory mapped peripherals »). Par exemple une adresse entre $000008 et $3FFFFFF sera en mémoire RAM, une adresse entre $FA0000 et $FB0000 sera sur le port cartouche, $FFFC00 et $FFFC06 sur le clavier ou le MIDI, etc… Le chef d’orchestre de tout ça c’est la GLUE, une des grosses puces de votre Atari, qui va activer le bon périphérique au bon moment en fonction de l’adresse demandée par le CPU. Quand le CPU met une adresse sur le bus, la GLUE lit cette adresse, regarde à quel périphérique ça correspond et envoie un signal au périphérique concerné pour lui dire que c’est à lui de travailler.
La ROM du STF/STFM/MegaST
La ROM de la machine tombe dans la même catégorie que les autres périphériques et doit être activée lorsque c’est à elle de travailler, donc quand l’Atari va lire de l’information en ROM, pas possible d’y écrire quoi que ce soit puisque c’est de la ROM (quoi que, mais on verra ça plus tard). Regardons de plus près le démarrage de la machine, là ou le TOS va être démarré.
- Vous avez appuyé sur l’interrupteur, l’Atari se réveil doucement, un petit timer le laisse en état de RESET pendant environ 1,5 seconde le temps que tous les périphériques et horloges soit opérationnels.
- Ensuite, le CPU est démarré et va tout de suite, comme tout bon 68000 aller lire ce qui se trouve aux adresses $000000 à $000007. Il va y trouver quelques informations de configuration, mais surtout l’adresse à partir de laquelle charger le premier programme, qui dans le cas de l’Atari sera la ROM.
- Le chargement se poursuit à partir de cette nouvelle adresse jusqu’à la fin du boot. Jusque là, rien de très compliqué.
Si vous regardez le contenu d’une ROM 1.04 par exemple, vous allez trouver dans ces 8 premiers octets les valeurs suivantes: 60 2E 01 04 00 FC 00 30. Les 4 derniers octets, 00 FC 00 30 correspondent justement à l’adresse où se trouve le démarrage du TOS. En effet dans les STF/STFM et Mega ST, la ROM se situe à partir de l’adresse $FC0000 et fait une taille de 192k, donc jusqu’à $FEFFFF.
Si nous revenons à la GLUE, voici ce qui se passe lors du démarrage:
- Le CPU demande l’adresse $000000 -> La GLUE active la ROM qui renvoie 60 2E (nous sommes en 16 bits, donc 2 octets)
- Le CPU demande l’adresse $000002 -> La GLUE active la ROM qui renvoie 01 04
- Le CPU demande l’adresse $000004 -> La GLUE active la ROM qui renvoie 00 FC
- Le CPU demande l’adresse $000006 -> La GLUE active la ROM qui renvoie 00 30
- Le CPU demande l’adresse $FC0030 -> La GLUE active la ROM qui renvoie les premiers octets du TOS.
On remarque que les adresses vont de 2 en 2, c’est normal, nous sommes en 16 bits, donc en renvois 2 octets à chaque fois. On remarque aussi que la GLUE active la ROM pour les adresses $FC0000…$FEFFFF mais aussi pour les octets $000000...$000007. Heureusement, sinon le ST ne pourrait pas démarrer depuis sa ROM.
La ROM des STE et la 2.06.
Lors de la création des premiers ST, Atari a décidé d’utiliser des puces de ROMs de 32k, ce qui avec les 6 puces donnait 192k au total. C’était étroit, mais à force de « bidouilles » diverses et variées les développeurs ont réussi à tout faire tenir TOS et GEM dans ces 192k. Pour ceux que ces bidouilles intéresse, faite une recherche sur Atari TOS Line-F… Avec l’arrivée des STE, la prise en charge des fonctionnalités supplémentaires ne rentrait plus dans 192k et il a fallu passer à la taille supérieur, soit 256k. Mais, comme ça n’avait pas été prévu au départ, Atari a rencontré un problème: $FC0000 + 256k = $FFFFFF😟
En commençant à $FC0000, la nouvelle ROM couvrait maintenant l’espace de l’ancienne, mais aussi l’espace à partir de $FF0000 réservé au clavier, souris, MIDI, son, etc… Les ingénieurs ont donc décidé de faire démarrer leur nouvelle ROM à une adresse plus basse et en regardant les premiers octets d’un TOS 1.06 on trouve: 60 2E 01 06 00 E0 00 30, la ROM commençant maintenant à l’adresse $E00000 et s’étendant jusqu’à $E00000 + 256k= $E3FFFF.
Le problème des STF/SFTM et MegaST: la GLUE
Avec un TOS de 256k démarrant en $E00000, la vieille GLUE des anciens ST n’est plus adaptée. Quand elle voit passer une adresse en $E0xxxx, elle ne va jamais activer la ROM, et donc pas de boot possible !!!
Comment faire fonctionner un TOS 2.06 dans un STF?
Si la GLUE ne sait pas décoder correctement les nouvelles adresses de la ROM, on pourrait penser qu’il suffit de changer la GLUE. Malheureusement Atari n’a jamais sorti de nouvelle GLUE pour les STF et celle des STE n’est pas compatible. Il va donc falloir aider notre GLUE et activer soit même la ROM sur la nouvelle plage d’adresse. Pour cela, il suffit d’utiliser quelques circuits logique qui vont interpréter les adresses et envoyer le bon signal à la ROM à la place de la GLUE. Comme les adresses $000000-$000007 se comporte de la même manière que l’on soit sur une ROM 192k ou 256k, nous n’aurons pas besoin de nous en soucier, il suffira de reprendre le signal de la GLUE qui fait déjà le travail pour ces adresses.
Comment décoder les adresses $E00000-$E3FFFF?
Les adresses ont été jusqu’à maintenant représenté en hexadécimal, l’Atari lui ne connait que le binaire. Ça tombe bien, l’hexadécimal a une propriété pratique: chaque symbole (lettre ou chiffre) correspond exactement à un groupe de 4 bits binaire. Donc si je retranscrit mes adresses de TOS 256k, ça donne b1110 0000 0000 0000 0000 0000 - b1110 0011 1111 1111 1111 1111… un peu long et pas pratique. Si nous disons exprimons maintenant le problème en disant que nous devons activer la ROM quand l’adresse commence par $E0-$E3, ça devient un peu plus simple. Nous disons donc que si le début de l’adresse en binaire peut s’écrire : b1110 0000 - b1110 0011 il faut activer la ROM. On remarque que dans l’ensemble d’adresse binaires si dessus seuls les deux derniers bits varient sur la plage d’adresse utilisée par la ROM, on peut donc résumer en disant que si les 6 premiers bits de l’adresse sont b1110 00, alors il faut activer la ROM.
Concrètement on fait comment ?
Le CPU 68000 a des pins correspondant à chaque bit de l’adresse, c’est en activant ces pins (+5v pour «1» et +0v pour «0») que le CPU envoie une adresse sur le bus. Donc si nous récupérons sur le CPU les 6 bits qui nous intéresse, faisons un peu de logique dessus, nous devrions pouvoir décoder facilement. Les 6 pins dont nous avons besoin sont A23,A22,A21,A20,A19 et A18, et ce que nous voulons est alors « Quand A23, A22 et A21 sont à 1 et que A20, A19 et A18 sont à 0, alors il faut activer la ROM ». En logique, si nous appelons le signal pour activer la ROM « ROMCE » par exemple, nous pouvons donc écrire ROMCE=A23 AND A22 AND A21 AND NOT A20 AND NOT A19 AND NOT A18. On y est presque, à deux détails près:
- La ROM utilise une « logique négative »: Elle est active quand elle reçoit un 0 et inactive quand elle reçoit un 1. Il faut donc réécrire l’équation logique ci-dessus en NOT ROMCE=A23 AND A22 AND A21 AND NOT A20 AND NOT A19 AND NOT A18.
- DTACK: Le 68000 a besoin d’un signal « DTACK’ » qui lui dit que le périphérique a mis des données pour lui sur le bus. Les puces de ROM n’ont pas cette fonctionnalité, c’est normalement la GLUE qui fait le travail pour elle. Donc là aussi, il va falloir le faire nous même. DTACK étant aussi en logique négative, et à activer quand on active la ROM, il suffit donc d’écrire DTACK = ROMCE.
- Dernier petit point « pénible » concernant DTACK, il est donc actif quand son voltage est à 0, mais contrairement à ROMCE, quand il est inactif il ne doit pas être à +5v, mais simplement pas connecté du tout. Pour ça, il suffira de mettre une petite diode devant ou d’utiliser des circuits logique « open collector ».
Bon terminé avec la théorie, quelles sont les solutions ?
Solutions de décodage
Il existe soit des solutions « toute faite », soit il faut faire soit même ce qui sera traité dans une prochaine partie sur le DIY. Pour les solutions « toute faite » il ya malheureusement une mauvaise nouvelle pour les possesseurs de STF et STFM: Pour faire le décodage, il va falloir aller prendre des signaux sur le CPU et donc les solutions clef en main vont nécessiter de dé-souder le CPU, de mettre à la place la carte de décodage et de remettre le CPU sur un support sur la carte de décodage. Il faudra aussi dans la plupart des cas aller souder quelques fils pour récupérer le signal d’origine envoyé par la GLUE et bien évidemment pour envoyer le signal de notre décodeur vers la ROM. Si vous avez un Mega ST, c’est votre jour de chance, le MegaST a un connecteur reprenant tous les signaux du CPU, il va donc suffit de brancher la carte dans ce connecteur. Voici quelques exemples de cartes de décodage, il en existe sûrement plein d’autre, n'hésitez pas à me les signaler pour que je les ajoute.
- Chez Exxos: Décoder 2.06 (25£), Trudie IDE ave interface IDE en plus(45£)
- Chez Fairlite: Atari MonSTer avec 2xIDE, décodeur 2.06, ROM flashable par logiciel, horloge RTC et mémoire « ALT-RAM » de 8Mb (70£). C’est la seule qui puisse officiellement se connecter via le Megabus d’un Mega ST moyennant un petit adaptateur (25£). Je n’ai pas testé mais je suppose que cet adaptateur doit aussi fonctionner avec les autres cartes listées ici.
- Chez Czietz: Lightning ST avec USB, IDE et décodeur (110€), Cloudy décoder avec sa propre ROM, flashable par logiciel(???€)
Toutes ces solutions sont somme toute assez compliquées à mettre en place et assez cher juste pour utiliser un TOS 2.06. Si vous voulez un TOS évolué, apportant la plupart des avantages du 2.06 (et plus), vous pouvez toujours démarrer un EmuTOS depuis une disquette. Sinon, les composants nécessaire à faire un décodeur coûtent quelques centimes et avec un peu d’huile de coude il est assez simple d’en faire un soi même. Nous verrons ça dans une prochaine partie dédiée au DIY.
DIY
Finalement vous avez décidé de mettre à jour votre TOS mais sur internet cette version 1.4 du TOS en Bulgare qui vous intéresse tant n’est vendue qu’en version 2 puces et il vous en faut 6? Qu’a cela ne tienne, regardons aujourd’hui comment préparer vous même votre TOS. Tout d’abord si vous avez un STE ou Mega STE je vous conseille l’excellent tuto vidéo de Vincent Rivièreici:
Quelles puces utiliser?
Les puces d’origine de vos Atari sont dans la plupart des cas des ROM dont le logiciel a été gravé en usine et qui ne peuvent donc pas être modifiées. Comme nous (en tous cas moi) n’avons pas d’usine à disposition pour en graver de nouvelles, il va falloir utiliser une autre technique. Pour cela, il existe les PROMSs, EPROMs, et EEPROMs qui vont nous rendre la tâche beaucoup plus simple.
Les types de puces
- Les PROMs dont des puces qui peuvent être programmées une fois et qui gardent ensuite leur programmation à vie. Elles ont depuis longtemps été remplacées par les EPROM.
- Les EPROM peuvent, elles être effacées grace à des UVs et sont reconnaissables à leur petite fenêtre transparente en plexiglass permettant justement d’effacer le contenu .
- Les EEPROMs sont des EPROMs effaçable électriquement, donc plus besoins d’UV, un simple programmateur suffit, voir dans certains cas un Arduino.
Quelle capacité ?
Nous avons vu que les TOS 1.0, 1.02 ET 1.4 avait une taille de 192ko donc pour une configuration 6 puces il va falloir des puces de 32ko (192 / 6). Pour une configuration 2 puces il nous faudrait des puces de 96ko...qui n’existent pas. Donc nous partirons sur des puces de 128ko. La capacité des EPROM se calculant en bit et non en octets, pour 32k octets il nous faudra donc une puce de 256k bits et pour 128k octets ce sera 1M bits. (Je ne vous ferais pas l’affront de rappeler qu’il y a 8 bits dans 1 octet 😁)
Quelle vitesse ?
Quand l’Atari veut lire une information en ROM, le CPU va envoyer l’adresse de la donnée à la ROM et attendre une réponse, mais il n’est pas très patient. Il faut donc que la ROM réponde suffisamment rapidement ! Notre CPU est cadencé à 8 MHz (16MHz dans le cas des Mega STE), ce qui veut dire que ses actions sont cadencées au rythme d’une toutes les 125 nanosecondes. Le fonctionnement du 68000 (je vous laisse lire la doc complète) est tel qu’après avoir mis une adresse sur le bus, il patiente 2 cycles avant de lire la réponse (voir figure des timings 68000).
Pour ceux qui veulent creuser le sujet, voici la documentation du 68000: https://www.nxp.com/docs/en/reference-manual/MC68000UM.pdf Il nous faut donc des puces qui répondent en moins de 250ns (2 cycles de 125ns).
Dans les faits, il faut prendre des puces plus rapides, du type 150ns ou 70ns.
En effet, nous avons vu précédemment qu’en fonction de l’adresse envoyée par le CPU la GLUE de l’Atari allait activer le bon périphérique en lui envoyant un signal.
Mais notre ROM met du temps à se réveiller et il faut donc ajouter ce temps de réveil à son temps de réponse.
Si nous prenons une EEPROM avec un temps de réponse de 200ns, en lisant son manuel (voir datassent ci-dessous), nous voyons qu’elle a un temps de « réveil » (OE to Output Delay) de 75ns, donc notre CPU recevra ses données 75ns+200ns après avoir envoyé l’adresse, c’est trop tard.
Les puces à acheter pour une configuration 6 puces: AT27C256R-70PU.
Il s’agit d’EPROM mais elles ne peuvent pas être effacées car il manque la fenêtre en plexiglass. C’est un des rares modèle que l’on trouve encore avec le bon format pour l’Atari et à un prix abordable(~2€ pièce). Elles peuvent être achetées chez Mouser, DigiKey ou autres distributeurs de composants électroniques mais je vous déconseille eBay ou AliExpress pour ce genre de composants.
=== Les puces à acheter pour une configuration 2 puces:: SST39SF010 Ce sont des EEPROM basées sur de la mémoire flash, on les trouve là aussi facilement entre 1€ et 2€ pièce et peuvent être reprogrammées en cas d’erreur. Elles ont juste un tout petit défaut : elles ont 32 broches et non 28. Dans un STE, ce n’est pas un problème, il faut juste changer les jumpers, mais dans un STF ou Mega ST ça fait 4 broches de trop par rapport au support, il va falloir utiliser la scie...ou plutôt le fer à souder.
Préparer un TOS pour le Flashage
Récupérer le TOS à flasher: ça peut sembler évident, mais il va vous falloir trouver l’image du TOS que vous voulez flasher. Pour ça, rien ne vaut une recherche sur Internet et si vous voulez la totale, les archives TOSEC (https://www.tosecdev.org ) devraient vous aider. Pour les TOS non Atari il faut les récupérer sur leurs sites, voir les liens dans un précédent tuto. Un petit conseil, une fois l’image trouvée, testez-la avec un émulateur pour vous assurez qu’elle fonctionne! J’ai perdu pas mal d’heures et grillé un certain nombre d’EPROM simplement parce que l’image du TOS 1.4 FR trouvée sur Internet était corrompue.
Découper son TOS
L’image que vous avez récupéré se présente généralement sous la forme d’un fichier .img ou .bin de 192k ou 256k mais il va falloir le faire rentrer sur plusieurs puces, il faut donc le découper.
- Le découpage HI/LO
Que votre Atari utilise 2 ou 6 puces, il faut dans tous les cas commencer par découper l’image en deux, HI et LO. Ce découpage n’est pas une simple séparation du fichier d’origine en deux en coupant par le milieu, c’est un peu plus compliqué. En effet, l’Atari a un CPU 16/32 bits, c’est à dire qu’en interne il traite les données par groupes de 32bit mais communique avec l’extérieur sur 16bits. Mais nos EPROMS ne communiquent, elles que sur 8 bits, comment faire ? C'est simple: quand le CPU demande les données pour une adresse, cette adresse va être présentée en même temps à chacune des EEPROMs et l’une va renvoyer les 8 premiers bits tandis que l’autre va renvoyer les 8 bits suivants. Et voilà, nous envoyons bien 16bits au CPU. Si nous reprenons les premiers octets d’un TOS 1.4 comme vu précédemment 60 2E 01 04 00 FC 00 30, nous allons mettre 60 01 00 00 dans la ROM HI et 2E 04 FC 30 dans la ROM LO.
Quand le CPU demandera le contenu de l’adresse $000000, la première puce enverra 60 et la seconde enverra 2E, notre 68000 recevra donc 60 2E, soit 16 bits comme prévu. Le plus simple pour effectuer le découpage de votre image de TOS est d’utiliser un des logiciels suivants :
- CartMan pour Windows (https://github.com/TzOk83/CartMan)
- srec_cat (http://srecord.sourceforge.net/download.html ) pour Linux/macOS.
CARTMAN
- Démarrez CartMan
- Sélectionnez le premier onglet « Split L/H »
- Renseignez « Input File » avec le fichier ROM à splitter. (Attention, CartMan filtre les fichiers proposés sur l’extension « .bin ». Si votre ROM possède une autre extension, changez le filtre.)
- GO!
Petite subtilité: CartMan est fait pour des systèmes "Little Endian" mais notre Atari et son 68000 sont "Big Endian". Donc ce que CartMan va appeler "LO" sera en fait "HI" pour nous et vice-versa.
Pensez donc à bien renommer vos fichiers après génération par CartMan.
SREC_CAT
- Ouvrez un terminal
- Placer vous dans le répertoire contenant votre image de TOS (je vais appeler le fichier TOS.img par exemple)
- Pour la ROM HI:
srec_cat <VOTRE FICHIER ROM> -binary -split 2 0 -o HI.bin -binary
- Pour la ROM LO:
srec_cat <VOTRE FICHIER ROM> -binary -split 2 1 -o LO.bin -binary
Vous avez maintenant vos deux images HI et LO. Si vous avez besoins d’ une version 2 puces, vous êtes maintenant prêts à flasher votre TOS.
Découpage 6 puces
Pour une version 6 puces, il faut de nouveau découper les fichiers en 3 pour obtenir LO0,LO1,LO2,HI0,HI1,HI2. Ce deuxième découpage est plus simple, car là on découpe simplement en 3 morceaux égaux.
Découper en 6 images avec CartMan(Windows):
- Démarrez CartMan
- Sélectionnez le 4eme onglet « Split ROMs »
- Renseignez « Input File » avec le fichier ROM HI à splitter
- Sélectionnez 32kB
- GO!
- Répétez l’opération avec le fichier de ROM LO.
Découper en 6 images avec « split »(Linux, macOS):
- Ouvrez une fenêtre terminal
- Placer vous dans le répertoire contenant vos deux images HI et LO.
- Utilisez split pour le HI:
split -b 32k TOSHI.img TOSHI
- Utilisez split pour le LO:
split -b 32k TOSLO.img TOSLO
Et voilà, vous avez maintenant 6 fichiers de 32ko prêts à flasher.
Flasher son TOS
Ça y est, vous avez des images de TOS prêtes et les puces pour les flasher, voyons ce qu’il vous faut.
Le programmateur d’EEPROM
Pour transférer vos images de TOS préparées lors des étapes précédentes vers vos puces, il va vous falloir un programmateur d’EEPROM. Vous avez deux solutions: En acheter prêt à l’emploi ou en fabriquer un avec un Arduino.
Fabriquer son programmateur:
Je n’ai pas testé cette solution mais voici deux liens vers des montages Arduino qui permettent de programmer des 27C256 et plus. Il existe pas mal de projets de ce type, et une recherche de « Arduino EPROM programmer » sur Google ou GitHub vous fournira bon nombre de solutions. Pensez à vérifier que le montage choisis est capable de programmer le modèle d’EPROM/EEPROM nécessaire pour votre Atari. https://github.com/StormTrooper/eeprom_programmer https://github.com/TomNisbet/TommyPROM
Acheter un programmateur:
Sûrement la solution la plus simple, « plug & play » aussi bien sous Windows que sur Mac ou Linux. Ces programmateurs pourrons vous servir pour flasher le TOS, mais aussi des milliers d’autres circuits, lire et jumper des eproms, tester des chips et aussi programmer des GALs (pour faire un décodeur de TOS 2.06, mais nous verrons ça plus tard). En terme de produit, la référence la plus simple est le TL866II+, c’est le meilleur rapport qualité prix disponible et vous le trouverez sous différentes marques chinoises. Il faut compter une trentaine d’euros sur AliExpress et une cinquantaine sur Amazon. Il y a différentes configurations disponibles, ce qui change ce sont les adaptateurs livrés avec, mais pour les TOS vous n’avez besoin d’aucun adaptateur.
Le flashage:
Windows :
- Branchez le programmateur sur le port USB de votre PC
- Lancez le logiciel XGPro fournis avec le programmateur
- Sélectionnez le modèle d’EEPROM que vous allez utiliser (« Sélect IC »)
- Chargez l’image de TOS que vous voulez flasher (aucune option à modifier)
- Insérez votre EEPROM dans le programmateur, dans le bon sens (vérifiez la petite encoche) et verrouillez la avec le petit levier
- Programmez l’EEPROM (« Device »-> « Program »).
- Collez une petite étiquette sur le dessus de l’EEPROM avec la référence (LO-0, LO-1, etc…), cela vous évitera de tester toutes les combinaisons possible quand l’Atari ne démarrera pas 😁
- Répétez l’opération depuis l’étape 5 pour les EEPROMs suivantes.
Mac ou Linux
Le logiciel fourni avec le programmateur n’existe qu’en version Windows, mais une alternative open-source est disponible sur Linux et macOS: minipro (https://gitlab.com/DavidGriffith/minipro/).
- Installez « minipro » (voir la page GitLab pour les instructions).
- Ouvrez un Terminal et placez-vous dans le répertoire contenant vos images de TOS à flasher.
- Branchez le programmateur sur votre machine
- Vérifiez que votre programmeur est bien reconnu:
minipro -k
- Insérez votre EEPROM dans le programmateur, dans le bon sens (vérifiez la petite encoche) et verrouillez la avec le petit levier
- (Optionnel) Vérifiez que l’EEPROM est bien insérée et reconnue:
<MODELE D’EEPROM> correspond bien évidemment à celui que vous avez choisi, AT27C256, SST39SF010, etc…:
# minipro -p <MODELE D’EEPROM> -D
# minipro -p <MODELE D’EEPROM> -z
- Programmez votre EEPROM:
# minipro -p <MODELE D’EEPROM> -w <IMAGE TOS A FLASHER> -s
- Le « -s » permet d’ignorer la vérification de la taille du fichier. Dans le cas d’une version 6 puces, ce n’est pas nécessaires, nos 6 images font bien 32k ce qui est la taille d’une AT27C256. Dans le cas d’une version 2 puces, les TOS 1.6 ou 2.06 font bien 128k, ce qui est la taille d’une SST39SF010. Par contre, pour un TOS 1.02, 1.04 ou autre TOS 192k, chaque fichier fait 96k, ce qui est plus petit que les 128k d’une SST39SF010. Ce n’est pas grave, l’espace restant ne sera pas utilisé, mais il faut forcer minipro qui pense que c’est une erreur.
- Retirez l’EEPROM et collez une petite étiquette sur le dessus de l’EEPROM avec la référence (LO-0, LO-1, etc…), cela vous évitera de tester toutes les combinaisons possible quand l’Atari ne démarrera pas 😁
- Répétez l’opération depuis l’étape 5 pour les EEPROMs suivantes.
Installez les EEPROMs en version 6 puces (STF) ou 2 puces (STE)
Suivez les instructions détaillées dans la partie 2 de ce tuto, ici
Installez les EEPROMs en version 2 puces dans ST/STF/Mega ST
(Je pars du principe que votre machine est prête pour recevoir juste 2 puces, si ce n’est pas le cas la modification est expliquée en partie 2 de ce tuto.) Vous voyez rapidement que ça ne rentre pas ! Votre machine a des supports 28 broches et vos puces ont 32 broches. Il va falloir « bricoler » les puces pour les faire rentrer, mais ce n’est pas trop compliqué.
Tout d’abord regardons le brochage d’une puce 1Mb 28 broche et celui d’une puce 1Mb 32 broches :
- La plupart des broches sont les mêmes, c’est une bonne nouvelle.
- Sur le SST39SF010, la broche A16 est en haut à gauche alors que sur la ROM d’origine elle est sur le côté droit.
- Le SST39SF010 a un signal « OE# » là où la ROM d’origine a A16.
- Le SST39SF010 a un pin non utilisé (NC) là ou la ROM d’origine reçoit son +5V, tant mieux.
- Le +5V du SST est « dans le vide », 3 pins trop haut.
- Le SST a un signal supplémentaire « WE# » en haut à droite.
Si nous traitons broche par broche :
- La broche OE# du SST doit être soulevée (doucement) et soudée via un petit fil sur VSS. Il s’agit du signal « Output Enable » et nous voulons que la ROM envoie des données quand elle est sollicité. Comme il s’agit d’un signal qui est actif « low », cela veut dire qu’il doit être connecté à la terre pour être opérationnel,. Donc soudure sur VSS.
- VDD et WE#: WE# correspond à Write Enable, qui permet de programmer cette puce. Comme nous voulons l’utiliser en tant que ROM, il ne faut jamais que ce signal soit actif, et comme il s’agit là aussi d’un signal actif « low », cela veut dire que pour être inactif il doit être connecté à du +5v. Ça tombe bien, c’est le pin d’à côté. Un petit blob de soudure devrait suffire entre les pins 31 et 32. Comme il faut aussi connecter tout cela au +5v d’origine qui se trouve sur le pin 30, il suffit donc de faire un nouveau blog de soudure pour avoir les 3 pins de connectés ensemble, le pin 30 amenant le +5v au 2 autres.
- A16: Là il y a deux options, mais dans tous les cas il faut souder un fil sur la broche A16 du SST. Ensuite, vous avez le choix de glisser l’autre bout du fil dénudé dans le support, sous la broche OE# que vous avez soulevée à l’étape 1. Un autre option plus simple: Le support vide d’à côté peut être utilisé, glissez simplement l’autre extrémité du fil dans le pin 22 du support vide et vous avez A16.
- Répétez la même opération pour la deuxième puce et vous avez un TOS qui fonctionne.
Le schéma reprends ces modifications. Vous pouvez voir sur les photos une puce modifiée, j’ai coupé le bas des pins qui ne rentrent pas dans le support, mais ce n’est pas nécessaire.
Il ne reste plus qu’à mettre vos nouvelles puces dans la machine et tester que tout fonctionne. Si ce n’est pas le cas, vérifiez vos connections, vérifiez que vous avez bien mis la puce HI dans le support HI et la LO dans le support LO. Et surtout que les pins « qui dépassent » du support sont bien du côté de l’encoche. A ce sujet, ne vous fiez jamais à l’encoche du support mais à celle gravée sur la carte mère. Atari a eu la mauvaise habitude de souder certains supports à l’envers (voir photo).
Vous devez maintenant avoir une machine avec un nouveau TOS "Fait main". Dans la prochaine partie, nous regarderons comment avoir plusieurs TOS dans la même machine et comment faire fonctionner un TOS 2.06 dans un ST/STF/Mega ST.
Back to Hardware hacks