<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>maya.sh - ordinateurs</title><link href="https://maya.sh/" rel="alternate"/><link href="https://maya.sh/atom-ordinateurs.xml" rel="self"/><id>https://maya.sh/</id><updated>2026-02-05T00:00:00+01:00</updated><subtitle>Page perso de Maya</subtitle><entry><title>D'où vient le fond blanc (« light mode ») sur les écrans d'ordinateur ?</title><link href="https://maya.sh/lightmode.html" rel="alternate"/><published>2025-11-26T00:00:00+01:00</published><updated>2025-11-26T00:00:00+01:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2025-11-26:/lightmode.html</id><summary type="html">&lt;blockquote&gt;
&lt;p&gt;À l'origine un &lt;a href="https://eldritch.cafe/@mayasynth/115614422546643449"&gt;toot&lt;/a&gt; j'ai fait une page comme on me l'a si gentiment suggéré.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aujourd'hui il y a une tendance du « dark mode » qui a commencé autour de l'éditeur de code Sublime Text (si je me souviens bien) dans les années 2010 et s'est étendue au web et aux …&lt;/p&gt;</summary><content type="html">&lt;blockquote&gt;
&lt;p&gt;À l'origine un &lt;a href="https://eldritch.cafe/@mayasynth/115614422546643449"&gt;toot&lt;/a&gt; j'ai fait une page comme on me l'a si gentiment suggéré.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aujourd'hui il y a une tendance du « dark mode » qui a commencé autour de l'éditeur de code Sublime Text (si je me souviens bien) dans les années 2010 et s'est étendue au web et aux environnements de bureau. Le mode sombre est associé à l'imaginaire du hacker nourri par les souvenirs des terminaux vidéo des années 80 et des ordinateurs en mode texte.&lt;/p&gt;
&lt;p&gt;Si on remonte dans le passé il y a eu une époque avant les moniteurs où les ordinateurs renvoyaient leurs réponses sur téléimprimante (TTY). Les premiers terminaux vidéo avaient pour vocation de remplacer la sortie papier en la simulant : le texte apparait en bas de l'écran puis remonte comme un rouleau et le texte qui était tout en haut disparait. L'ordinateur reçoit et retourne des caractères encodés dans un format numérique et le terminal qui possède une mémoire et un générateur de caractères s'occupe du dessin, de l'affichage et de l'effacement des lettres à l'écran.&lt;/p&gt;
&lt;p&gt;Les micro-ordinateurs apparus à la fin des années 70 (par exemple Apple II) ont intégré le terminal vidéo à leur architecture, il suffisait alors de juste connecter le micro-ordinateur à un moniteur ou une télévision. Cette intégration a permis plus de flexibilité en permettant la modification des caractères en mémoire ainsi que leur position dynamiquement (plutôt qu'un simple mode « rouleau ») notamment pour les transformer en graphismes de jeu vidéo rudimentaires. Plus tard les micro-ordinateurs ont incorporé en plus des modes graphiques permettant de contrôler l'écran pixel par pixel plutôt que caractère par caractère mais le manque de mémoire de machines comme le VIC 20 ou le Commodore 64 contraignait les modes graphiques à des très gros pixels, rendant le mode texte toujours indispensable pour des applications de productivité comme le traitement de texte.&lt;/p&gt;
&lt;p&gt;Les premiers terminaux vidéo utilisaient des tubes cathodiques monochromes verts (phosphore P1) ou ambres (P3), le texte était alors sur fond sombre je pense pour éviter l'usure du tube et éviter l'inconfort de lire du texte sur un rectangle lumineux vert ou orange - certains terminaux et moniteurs avaient toutefois une option pour inverser l'image. Les moniteurs ambres et blancs (phosphore P4) ont longtemps cohabité ; par exemple le fameux VT100 (1978) avait déjà un tube blanc, le VT320 (1987) lui était disponible dans les trois couleurs.&lt;/p&gt;
&lt;p&gt;Du côté des micro-ordinateurs il y a eu une grande variété de codes couleurs. Le Apple II affichait son mode texte par défaut sur fond noir, le Commodore 64 sur fond bleu, le ZX81 en noir sur gris et le VIC 20 en bleu sur blanc. Le PC, conçu pour être utilisé notamment avec des écrans monochromes ambres ou verts, a ses modes texte par défaut sur fond noir. Certaines stations Sun des années 90 ainsi que les ordinateurs NeXT puis les premiers Mac avec OpenFirmware avaient leur mode texte sur fond clair.&lt;/p&gt;
&lt;p&gt;Le premier ordinateur à permettre des applications graphiques (et qui possède une souris !) est le Xerox Alto en 1973. Son écran monochrome en orientation portrait utilisait du phosphore P4 (blanc) et l'environnement était entièrement noir sur blanc comme le seront les ordinateurs Lisa et Macintosh dans la décennie suivante. Ces ordinateurs partagent aussi la caractéristique de ne plus avoir de mode texte avec un générateur de caractères : l'écran affiche simplement une matrice de pixels. Xerox a très certainement choisi le noir sur blanc pour imiter la feuille de papier car le Alto (comme le Macintosh plus tard) possédait un écran de 72 DPI en pixels carrés conçu pour la composition de documents en WYSIWYG : le document apparaît à l'écran identique à ce qu'il sera une fois imprimé.&lt;/p&gt;
&lt;p&gt;Dans les années 90 les environnements de bureau ont commencé à proposer des options de personnalisation permettant d'obtenir un « dark mode », déjà Windows 3.1 offrait des modes "inversés" à l'époque adaptés aux écrans à cristaux liquide des premiers ordinateurs portables. Windows 95 puis les versions suivantes avec leur thème "classique" offraient deux thèmes de couleur sur fond noir. Ces thèmes n'étaient cependant pas populaires parce qu'à cette époque de nombreux logiciel programmaient en dur certaines couleurs de leur interface plutôt que d'utiliser celles du système, ce qui rendait l'affichage inconsistant avec parfois des libellés difficiles ou impossibles à lire.&lt;/p&gt;
&lt;p&gt;Du coup pour répondre à la question que je me suis posée : ça viendrait bien du Xerox Alto en 1973, comme presque tout finalement !&lt;/p&gt;</content><category term="ordinateurs"/></entry><entry><title>Partage de fichiers AppleTalk et internet entre Macintosh avec Netatalk et NetBSD</title><link href="https://maya.sh/netatalk.html" rel="alternate"/><published>2025-11-11T00:00:00+01:00</published><updated>2025-11-11T00:00:00+01:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2025-11-11:/netatalk.html</id><summary type="html">&lt;p&gt;&lt;img alt="Bannière représentant des ordinateurs sous différentes époques de la Terre : les dinosaures, les pyramides, celle des dauphins qui dansent, celle de this is fine avec l'incendie et le satellite qui relie tous les ordinateurs" src="media/netatalk/banniere.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Pour partager des fichiers entre mes Macintosh j'avais l'habitude de passer par mon serveur FTP
configuré localement sur mon NAS ou en copiant les fichiers sur la carte MicroSD de mon BlueSCSI.
C'est pas pratique parce qu'on perd le fork de ressources des fichiers ce qui implique de les
compresser …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Bannière représentant des ordinateurs sous différentes époques de la Terre : les dinosaures, les pyramides, celle des dauphins qui dansent, celle de this is fine avec l'incendie et le satellite qui relie tous les ordinateurs" src="media/netatalk/banniere.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Pour partager des fichiers entre mes Macintosh j'avais l'habitude de passer par mon serveur FTP
configuré localement sur mon NAS ou en copiant les fichiers sur la carte MicroSD de mon BlueSCSI.
C'est pas pratique parce qu'on perd le fork de ressources des fichiers ce qui implique de les
compresser par exemple en &lt;code&gt;.sit&lt;/code&gt; et ça demande pas mal de manipulations pénibles.&lt;/p&gt;
&lt;p&gt;En ce moment j'utilise principalement 4 machines :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mon ordinateur principal sur une version récente de Mac OS ;&lt;/li&gt;
&lt;li&gt;un PowerMac G3 sur Mac OS 9 connecté en Ethernet ;&lt;/li&gt;
&lt;li&gt;un Macintosh LC475 sur Mac OS 7.5 connecté en Wifi à travers le BlueSCSI (émulation Daynaport) ;&lt;/li&gt;
&lt;li&gt;un Macintosh SE sur le système 6.0.7.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;J'ai trouvé un peu par hasard un boitier Micro AsantéPrint conçu pour permettre à un Macintosh
d'accéder à des imprimantes situées sur un réseau Ethernet, le boitier se branche au port série
de l'ordinateur et fait simplement une conversion LocalTalk (AppleTalk sur port série) vers
EtherTalk (AppleTalk sur réseau Ethernet).&lt;/p&gt;
&lt;p&gt;AppleTalk est le protocole réseau historique du Mac, supporté nativement par toutes les versions
du système, il permet de mettre en place très facilement des partages de fichiers entre
deux machines branchées directement ensemble par un câble série ou entre plusieurs machines
reliées au même réseau.&lt;/p&gt;
&lt;p&gt;AppleTalk n'est pas du TCP/IP, le support de TCP/IP dans Mac OS se fait via MacTCP pour les systèmes
6 et 7 puis via OpenTransport à partir de Mac OS 7.5. AppleTalk n'est plus supporté
par les dernières versions de macOS mais les partages de fichiers AppleShare le sont toujours
à travers TCP/IP (&lt;code&gt;afp://&lt;/code&gt;) !&lt;/p&gt;
&lt;p&gt;&lt;img
    src="media/netatalk/asante.jpg"
    alt="Boitier Asanté qui comporte du côté visible un port Ethernet, un BNC, un DB15 et derrière un port série mini-DIN"
    class="float-right"
    width="300"&gt;&lt;/p&gt;
&lt;p&gt;Pour en revenir au Micro AsantéPrint : ma première difficulté a été de l'alimenter en électricité.
Je l'ai reçu sans son transfo d'origine et sur l'étiquette c'est marqué 12V alternatif !
Finalement j'ai démonté un vieil adaptateur secteur linéaire qui trainait chez moi, j'ai enlevé
tous les composants pour garder juste le transformateur qui sort 10 ou 20V~ selon
comment on se branche, je me suis branchée de sorte à avoir 10V~ à vide (8,5 en charge),
c'est du bricolage mais ça fonctionne très bien !&lt;/p&gt;
&lt;p&gt;D'un côté le AsantéPrint est connecté au Macintosh SE par le port série mini-DIN et de l'autre il est
connecté au réseau local en Ethernet. Aucune configuration ni installation de pilote n'est
nécessaire. Mes Macintosh se voient entre eux mais le SE ne peut toujours pas accéder à mon FTP
ni à Internet parce qu'il ne communique qu'en AppleTalk ou en encapsulant TCP/IP dans AppleTalk
via MacTCP et le Asanté fait juste la conversion entre le port série et l'Ethernet. D'après ce que
je comprends un vrai adaptateur réseau SCSI comme le Daynaport émulé par le BlueSCSI fonctionne
nativement en TCP/IP, genre il a une adresse MAC (mdr) et comprend quels paquets lui sont adressés.&lt;/p&gt;
&lt;p&gt;Mes objectif étaient donc les suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;mettre en place un partage AppleShare sur mon NAS accessible en permanence sur n'importe quel Macintosh et aussi sur mon ordinateur moderne ;&lt;/li&gt;
&lt;li&gt;accéder au réseau local en IP et à Internet depuis le Macintosh SE avec le boitier AsantéPrint.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Et après pas mal de temps j'y suis arrivée !&lt;/p&gt;
&lt;p&gt;Pour réussir cette mission nous allons avoir besoin des trois mousquetaires &lt;s&gt;de la distribution&lt;/s&gt; :
le logiciel serveur &lt;a href="https://netatalk.io/"&gt;Netatalk&lt;/a&gt;, la passerelle &lt;a href="https://netatalk.io/docs/MacIP-Gateway"&gt;MacIPgw&lt;/a&gt;
et le système d'exploitation &lt;a href="https://www.netbsd.org/"&gt;NetBSD&lt;/a&gt; !&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;J'ai choisi NetBSD parce qu'il offre toujours le support du protocole AppleTalk ! C'est compilé
dans le noyau de la release x86 mais c'est pas le cas pour toutes les architectures !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Mise en place de la VM dans TrueNAS&lt;/h2&gt;
&lt;h3&gt;Configuration du réseau&lt;/h3&gt;
&lt;p&gt;La VM doit être mise en réseau en mode &lt;strong&gt;bridge&lt;/strong&gt;, c'est normalement plutôt simple à mettre en
place mais j'ai pas mal galéré avec ça sur TrueNAS donc je vous donne les étapes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;dans l'interface web, aller dans &lt;em&gt;System/Network&lt;/em&gt; ;&lt;/li&gt;
&lt;li&gt;retirer l'IP fixe de l'interface réseau physique ;&lt;/li&gt;
&lt;li&gt;cliquer sur &lt;em&gt;Add&lt;/em&gt; puis ajouter une interface bridge ;&lt;/li&gt;
&lt;li&gt;donner à l'interface bridge l'IP qu'on a retiré à l'interface physique ;&lt;/li&gt;
&lt;li&gt;dans &lt;em&gt;Bridge Members&lt;/em&gt; ajouter l'interface physique.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img
    src="media/netatalk/smarties.png"
    alt="Un émoji allongé sur le sol à côté d'une fenêtre « serveur introuvable » géante"
    class="float-left"
    width="250"&gt;&lt;/p&gt;
&lt;p&gt;Une fois que c'est fait, il faut appliquer les paramètres et redémarrer la machine parce que
la connexion ne se réinitialise pas toute seule. En expérimentant j'ai perdu la connexion au NAS
plusieurs fois mais ces paramètres sont modifiables facilement depuis une interface semi-graphique
accessible depuis la machine en connectant un clavier et un moniteur.&lt;/p&gt;
&lt;p&gt;C'est important que la VM soit en mode bridge parce qu'elle doit apparaitre sur le réseau local
comme si c'était une machine physique comme les autres. Chez moi le NAS est sur 192.168.1.100
et la VM est sur 102.&lt;/p&gt;
&lt;p&gt;Moi j'utilise des IP fixes mais je pense que vous pouvez passer par des IP attribuées par DHCP
sans problème, par contre dans ce cas configurez le serveur DHCP pour que les IP ne bougent
pas sinon ça va être chiant !&lt;/p&gt;
&lt;h3&gt;Création de la VM&lt;/h3&gt;
&lt;p&gt;La mise en place de la VM ensuite se fait simplement, il faut la mettre en réseau sur le bridge
qu'on s'est éreintés à configurer, lui donner un peu de mémoire, un peu d'espace disque
et une image ISO de NetBSD.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Le système consomme environ 50 Mo de mémoire quand on ne lui demande rien, c'est certainement
pas mal de mettre un peu plus, 1 Go fait largement l'affaire.&lt;/li&gt;
&lt;li&gt;L'OS et les outils prennent au total 650 Mo d'espace disque sachant que les Macintosh de l'ère 68k ne
gèrent pas les volumes d'une taille supérieure à 2 Go (c'est géré et limité par Netatalk) vous
pouvez faire vos math.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation et configuration de NetBSD&lt;/h2&gt;
&lt;p&gt;&lt;img
    src="media/netatalk/netbsd.jpg"
    alt="Ancien « logo » de NetBSD inspiré du tableau « La liberté guidant le peuple »"
    class="float-right"
    width="350"&gt;&lt;/p&gt;
&lt;p&gt;NetBSD c'est du UNIX un peu à l'ancienne mais c'est pas chiant du tout ! C'est ma première
expérience avec cet OS et j'ai bien aimé !&lt;/p&gt;
&lt;p&gt;L'installation se fait simplement en suivant les étapes du programme d'installation, j'ai choisi
le partitionnement par défaut et une installation minimale (c).&lt;/p&gt;
&lt;p&gt;Toujours dans l'installation, après la mise en place du système de base,
c'est important de configurer le réseau (a) en choisissant un &lt;em&gt;hostname&lt;/em&gt; et il faut que
l'IP ne bouge pas, moi j'ai spécifié l'IP manuellement. Vous pouvez en profiter pour activer le serveur SSH (g)
et éventuellement créer un utilisateur autre que root - si vous le faites c'est &lt;code&gt;su&lt;/code&gt; pour passer en root.
La config du serveur SSH est dans &lt;code&gt;/etc/ssh/sshd_config&lt;/code&gt; comme sur Linux je crois.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Après l'installation vous pouvez revenir au programme d'installation avec la commande &lt;code&gt;sysinst&lt;/code&gt; !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;NetBSD utilise par défaut &lt;a href="https://www.pkgsrc.org/"&gt;pkgsrc&lt;/a&gt; pour gérer les paquets, il
faut ajouter une source :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# PKG_PATH=&amp;quot;http://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/$(uname -p)/$(uname -r|cut -f &amp;#39;1 2&amp;#39; -d.)/All/&amp;quot;&lt;/span&gt;
&lt;span class="c1"&gt;# export PKG_PATH&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Maintenant vous pouvez télécharger et installer des paquets avec &lt;code&gt;pkg_add&lt;/code&gt; ! Une bonne occasion
pour installer un éditeur de texte un peu moins chelou que l'espèce de
&lt;a href="https://en.wikipedia.org/wiki/Nvi"&gt;vi&lt;/a&gt; fourni par défaut, moi j'ai
installé vim mais nano est aussi disponible.&lt;/p&gt;
&lt;p&gt;Il existe aussi l'outil &lt;strong&gt;pkgin&lt;/strong&gt; de plus haut niveau
pour installer, supprimer et surtout mettre à jour les paquets
comme le font apt ou dnf mais il n'est pas installé par défaut et n'est pas indispensable ici
donc je vais pas m'embêter avec ça.&lt;/p&gt;
&lt;h2&gt;Installation et configuration de Netatalk&lt;/h2&gt;
&lt;p&gt;En un coup de cuillère à pot :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="gh"&gt;#&lt;/span&gt; pkg_add netatalk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Si c'est ok on a du texte qui nous indique que des scripts sont dispo dans un dossier d'exemple.
Ces scripts qui servent à contrôler les services peuvent aller dans &lt;code&gt;/etc/rc.d/&lt;/code&gt; ! Pas de systemd ici,
surtout ne dites rien à Lennart 😎&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# cp /usr/pkg/share/examples/rc.d/timelord /etc/rc.d/timelord
# cp /usr/pkg/share/examples/rc.d/papd /etc/rc.d/papd
# cp /usr/pkg/share/examples/rc.d/netatalk /etc/rc.d/netatalk
# cp /usr/pkg/share/examples/rc.d/macipgw /etc/rc.d/macipgw
# cp /usr/pkg/share/examples/rc.d/atalkd /etc/rc.d/atalkd
# cp /usr/pkg/share/examples/rc.d/a2boot /etc/rc.d/a2boot
# cp /usr/pkg/share/examples/netatalk/netatalk.pam /etc/pam.d/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On ne va pas se servir de tous les services mais une fois qu'ils sont dans &lt;em&gt;rc.d&lt;/em&gt; on peut facilement
les démarrer ou les arrêter comme on le souhaite. Le fichier &lt;em&gt;pam&lt;/em&gt; sert pour l'authentification
centralisée je crois, moi je m'en sers pas mais si jamais on peut le retrouver facilement.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;atalkd&lt;/code&gt; est le démon AppleTalk (indispensable)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;netatalk&lt;/code&gt; est le serveur de fichiers AppleShare/AFP&lt;/li&gt;
&lt;li&gt;&lt;code&gt;macipgw&lt;/code&gt; est une passerelle qui décapsule/encapsule IP dans AppleTalk&lt;/li&gt;
&lt;li&gt;&lt;code&gt;a2boot&lt;/code&gt; est un serveur de boot pour faire démarrer un ordinateur Apple II à travers le réseau&lt;/li&gt;
&lt;li&gt;&lt;code&gt;papd&lt;/code&gt; est un serveur d'impression AppleTalk&lt;/li&gt;
&lt;li&gt;&lt;code&gt;timelord&lt;/code&gt; est un serveur de temps pour synchroniser l'heure&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;La &lt;a href="https://netatalk.io/manual/en/afp.conf.5"&gt;configuration&lt;/a&gt;
de Netatalk se passe dans &lt;code&gt;/usr/pkg/etc/netatalk/afp.conf&lt;/code&gt;, je vous montre mon fichier :&lt;/p&gt;
&lt;p&gt;&lt;img
    src="media/netatalk/icone_partage.jpg"
    alt="Icone du montage réseau sur le Mac"
    class="float-right"
    width="200"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[Global]&lt;/span&gt;
&lt;span class="na"&gt;hostname&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;NetBSD&lt;/span&gt;
&lt;span class="na"&gt;appletalk&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;
&lt;span class="na"&gt;afp listen&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;192.168.1.102&lt;/span&gt;
&lt;span class="na"&gt;uam list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;uams_clrtxt.so uams_guest.so&lt;/span&gt;

&lt;span class="k"&gt;[mac]&lt;/span&gt;
&lt;span class="na"&gt;volume name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;Partage NetBSD&lt;/span&gt;
&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;/afp&lt;/span&gt;
&lt;span class="na"&gt;legacy volume size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;
&lt;span class="na"&gt;unix priv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;no&lt;/span&gt;
&lt;span class="na"&gt;invisible dots&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;hostname&lt;/code&gt; : c'est le nom de machine qui apparait dans le &lt;em&gt;Sélecteur&lt;/em&gt; sur Macintosh&lt;/li&gt;
&lt;li&gt;&lt;code&gt;appletalk&lt;/code&gt; : le partage est accessible à travers un réseau AppleTalk (et pas juste à travers IP)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;afp listen&lt;/code&gt; : l'IP du serveur (pour monter le partage avec &lt;em&gt;afp://192.168.1.102&lt;/em&gt; sur macOS moderne !)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uams_clrtxt.so&lt;/code&gt; : le partage est accessible aux utilisateurs du système avec leur nom d'utilisateur et mot de passe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;uams_guest.so&lt;/code&gt; : le partage est aussi accessible en invité, sans mot de passe&lt;/li&gt;
&lt;li&gt;&lt;code&gt;volume name&lt;/code&gt; : nom du partage (on peut en faire plusieurs pour chaque machine)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;path&lt;/code&gt; : dossier du volume, &lt;strong&gt;pensez à le créer et lui donner les bonnes permissions&lt;/strong&gt; de manière chirurgicale (un bon vieux chmod 777 t'as compris)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;legacy volume size&lt;/code&gt; : parce que Mac OS 7.1 et inférieur ne gère pas les volumes de plus de 2 Go&lt;/li&gt;
&lt;li&gt;&lt;code&gt;unix priv = no&lt;/code&gt; : on va pas se casser le cul avec les permissions&lt;/li&gt;
&lt;li&gt;&lt;code&gt;invisible dots&lt;/code&gt; : rend invisible les fichiers cachés UNIX sur les clients Macintosh classiques&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ça suffit déjà pour le partage de fichiers ! Pour tester il faut démarrer atalkd et netatalk :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# service atalkd onestart
# service netatalk onestart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ensuite vous démarrez un Macintosh connecté au même réseau, vous allez dans le &lt;em&gt;Sélecteur&lt;/em&gt; et vous
devriez voir le partage apparaître ! Réciproquement, avec la commande &lt;code&gt;nbplkup&lt;/code&gt; vous devez
voir le Macintosh apparaître !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;netatalk# nbplkup
                    192.168.2.1:IPGATEWAY                          65280.58:72
                         NetBSD:AFPServer                          65280.58:128
                       netatalk:netatalk                           65280.58:4
                       netatalk:Workstation                        65280.58:4
           AsantéPrint 94765C9A:AsantéPrint                        65295.15:252
                   Macintosh SE:Macintosh SE                       65295.16:253
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour que Netatalk se lance automatiquement avec la VM il faut ajouter dans &lt;code&gt;/etc/rc.conf&lt;/code&gt; les
deux lignes suivantes : &lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;atalkd=YES
netatalk=YES
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le partage doit aussi être accessible sur macOS moderne en allant dans le Finder, menu &lt;em&gt;Aller&lt;/em&gt;
puis &lt;em&gt;Se connecter au serveur&lt;/em&gt; (ou juste Cmd-K) puis en rentrant l'adresse afp://...&lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/netatalk/appleshare_macintosh.jpg" alt="Fenêtre de connexion au partage dans le système 6"&gt;
        &lt;figcaption&gt;Le serveur apparait automatiquement sur le Macintosh !
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/netatalk/partage_afp.jpg" alt="Fenêtre de connexion au partage dans macOS 26"&gt;
        &lt;figcaption&gt;Sur macOS 26.0 je dois rentrer l'adresse IP manuellement
    &lt;/figure&gt;
&lt;/div&gt;

&lt;h2&gt;Passerelle AppleTalk - TCP/IP&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Cette partie traite de la configuration de MacIPgw pour permettre à mon Macintosh SE d'accéder
aux autres machines en IP et à Internet en passant par le boitier AsantéPrint. Si vous avez
un BlueSCSI ou n'importe quelle &lt;em&gt;vraie&lt;/em&gt; carte réseau ce qui suit n'est pas nécessaire.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;On part du préalable que le Macintosh est connecté sur un réseau Ethernet à travers une liaison
série &lt;em&gt;LocalTalk&lt;/em&gt; et que les outils &lt;em&gt;MacTCP&lt;/em&gt; et &lt;em&gt;MacTCP Ping&lt;/em&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/MacTCP_2.0.6_fr.sit"&gt;téléchargeables ici&lt;/a&gt;
sont présents.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Au commencement, Dieu créa un tunnel et activa le IP forwarding. Ce fut le premier jour.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# ifconfig tun0 create
# sysctl -w net.inet.ip.forwarding=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Normalement en faisant &lt;code&gt;ifconfig&lt;/code&gt; vous voyez votre tunnel &lt;em&gt;tun0&lt;/em&gt; sans IP et down, c'est normal
il sera autoconfiguré par MacIPgw.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dieu configura MacIPgw. Ce fut le deuxième jour.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On crée le fichier &lt;code&gt;/usr/pkg/etc/netatalk/macipgw.conf&lt;/code&gt; avec :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;[Global]&lt;/span&gt;
&lt;span class="na"&gt;network&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;192.168.2.0&lt;/span&gt;
&lt;span class="na"&gt;netmask&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;255.255.255.0&lt;/span&gt;
&lt;span class="na"&gt;nameserver&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s"&gt;192.168.1.100&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pareil vous adaptez la config, dans &lt;em&gt;network&lt;/em&gt; j'ai choisi un sous-réseau en 192.168.2.x mais
vous pouvez mettre ce que vous voulez. Le &lt;em&gt;nameserver&lt;/em&gt; c'est le DNS, le mien est sur 100 mais
vous pouvez mettre 8.8.8.8 par exemple (Google 😡)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dieu mit en place un NAT. Ce fut le troisième jour.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Pour que les paquets destinés au Macintosh arrivent à destination on configure un NAT.&lt;/p&gt;
&lt;p&gt;Dans &lt;code&gt;/etc/npf.conf&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;wm0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dynamic&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;192.168.2.0&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;192.168.1.102&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;

&lt;span class="kr"&gt;group&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;in&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;all&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="n"&gt;pass&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kr"&gt;all&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Vous adaptez en remplaçant 192.168.1.102 par l'IP de votre VM, 192.168.2.0 par le sous-réseau
et &lt;code&gt;wm0&lt;/code&gt; par le nom de l'interface réseau principale telle qu'affichée dans &lt;code&gt;ifconfig&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Puis on applique la config et on lance &lt;a href="https://man.netbsd.org/npf.7"&gt;npf&lt;/a&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;# npfctl reload&lt;/span&gt;
&lt;span class="c1"&gt;# npfctl start&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Dieu dit « lançons la passerelle ! » et cela se passa ainsi. Ce fut le quatrième jour.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;On lance la passerelle :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# service macipgw onestart
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Maintenant sur le Macintosh il faut configurer MacTCP :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;pour l'adresse IP n'importe quoi dans le sous-réseau ira genre 192.168.2.15 (au pif)&lt;/li&gt;
&lt;li&gt;dans &lt;em&gt;Options&lt;/em&gt; :&lt;ul&gt;
&lt;li&gt;obtenir l'adresse manuellement&lt;/li&gt;
&lt;li&gt;passerelle 192.168.2.1&lt;/li&gt;
&lt;li&gt;DNS : mettre &lt;code&gt;.&lt;/code&gt; (un point) dans domaine et l'IP d'un DNS genre 8.8.8.8 (Google 😡)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/netatalk/mactcp_1.jpg" alt="Première fenêtre de configuration MacTCP pour l'IP"&gt;
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/netatalk/mactcp_2.jpg" alt="Deuxième fenêtre MacTCP avec les options supplémentaires décrites ci-dessus"&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Après avoir redémarré, vous pouvez ouvrir MacTCP Ping et essayer de ping une adresse random.
Côté NetBSD on peut voir ce qui se passe avec &lt;strong&gt;tcpdump&lt;/strong&gt; !&lt;/p&gt;
&lt;p&gt;La commande ci-dessous permet de voir les paquets AppleTalk qui atteignent la VM (pensez à adapter &lt;code&gt;wm0&lt;/code&gt;).&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# tcpdump -i wm0 -n atalk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La commande ci-dessous permet de voir les paquets convertis par MacIPgw dans le tunnel.
Si vous voyez quelque chose là-dedans c'est que la passerelle fonctionne ; il faut que le Macintosh
soit démarré après la mise en route du service &lt;em&gt;macipgw&lt;/em&gt; !&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# tcpdump -i tun0 -n
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La commande ci-dessous permet de voir les paquets destinés à une adresse (par exemple celle d'un ping) une fois ressortis du tunnel.
Si le NAT fonctionne, l'origine du paquet est affichée comme 192.168.1.102 (dans ma config) ;
si vous voyez l'origine réelle 192.168.2.x alors il y a un problème et le ping finit probablement en timeout.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# tcpdump -i wm0 -n dst 8.8.8.8
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Dieu regarda tout ce qu'il avait fait, et il constata que c'était très bon. Il persista la configuration.&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;# echo create &amp;gt; /etc/ifconfig.tun0
# echo net.inet.ip.forwarding=1 &amp;gt;&amp;gt; /etc/sysctl.conf
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dans &lt;code&gt;/etc/rc.conf&lt;/code&gt; :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;macipgw=YES
npf=YES
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Les connexions FTP en mode actif ne sont pas possibles à travers le NAT c'est pour ça que
Fetch sur le Macintosh renvoie une erreur liée à &lt;code&gt;PORT&lt;/code&gt;, je n'ai pas trouvé de solution mais je
n'ai plus besoin d'utiliser le FTP.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;Les partages AppleShare sont hyper pratiques ! J'aurais vraiment du me pencher sur ça plus tôt.
C'est pas si dur à configurer une fois qu'on a pris les outils en main et la possibilité de partager
des fichiers entre des Macs de n'importe quelle époque sans plus jamais avoir de souci du
fork de ressource qui se barre c'est juste magique.&lt;/p&gt;
&lt;p&gt;La possibilité de se connecter en IP depuis une liaison LocalTalk c'est très pratique aussi :
juste deux câbles à brancher, pas de pilote à installer et rien à démonter.&lt;/p&gt;
&lt;p&gt;Le seul inconvénient
du LocalTalk c'est sa faible vitesse, environ 200 kb/s d'après ce que j'ai lu, la vitesse a l'air
similaire à celle du lecteur de disquettes.&lt;/p&gt;
&lt;figure&gt;
&lt;img
    src="media/netatalk/macweb.jpg"
    alt="Macintosh SE ouvert sur une page Web"
    width="500"&gt;
&lt;/figure&gt;

&lt;p&gt;Si comme moi vous aimez les Macintosh 68k vous avez peut-être déjà entendu parler de NetBSD parce que c'est
je crois le seul UNIX (avec A/UX) &lt;a href="http://www.netbsd.org/ports/mac68k/"&gt;qui fonctionne sur cette architecture&lt;/a&gt; !&lt;/p&gt;
&lt;p&gt;&lt;img
    src="media/netatalk/pernaut.jpg"
    alt="Jean-Pierre Pernaut"
    class="float-right"
    width="100"&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;« Loin du tumulte moderne des grandes distributions linux et de systemd il existe encore des
petits coins de paradis paisibles où il fait bon vivre comme le petit village de NetBSD où d'authentiques artisans
unixiens façonnent leur système d'exploitation comme autrefois ! »&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;En cas d'erreur ou de problème je vous encourage à m'écrire sous ce toot pour que je puisse
corriger la page ou vous aider 👇&lt;/p&gt;
&lt;figure&gt;
&lt;blockquote class="mastodon-embed" data-embed-url="https://eldritch.cafe/@mayasynth/115531195393795517/embed" style="background: #FCF8FF; border-radius: 8px; border: 1px solid #C9C4DA; margin: 0; max-width: 540px; min-width: 270px; overflow: hidden; padding: 0;"&gt; &lt;a href="https://eldritch.cafe/@mayasynth/115531195393795517" target="_blank" style="align-items: center; color: #1C1A25; display: flex; flex-direction: column; font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Oxygen, Ubuntu, Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', Roboto, sans-serif; font-size: 14px; justify-content: center; letter-spacing: 0.25px; line-height: 20px; padding: 24px; text-decoration: none;"&gt; &lt;svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="32" height="32" viewBox="0 0 79 75"&gt;&lt;path d="M63 45.3v-20c0-4.1-1-7.3-3.2-9.7-2.1-2.4-5-3.7-8.5-3.7-4.1 0-7.2 1.6-9.3 4.7l-2 3.3-2-3.3c-2-3.1-5.1-4.7-9.2-4.7-3.5 0-6.4 1.3-8.6 3.7-2.1 2.4-3.1 5.6-3.1 9.7v20h8V25.9c0-4.1 1.7-6.2 5.2-6.2 3.8 0 5.8 2.5 5.8 7.4V37.7H44V27.1c0-4.9 1.9-7.4 5.8-7.4 3.5 0 5.2 2.1 5.2 6.2V45.3h8ZM74.7 16.6c.6 6 .1 15.7.1 17.3 0 .5-.1 4.8-.1 5.3-.7 11.5-8 16-15.6 17.5-.1 0-.2 0-.3 0-4.9 1-10 1.2-14.9 1.4-1.2 0-2.4 0-3.6 0-4.8 0-9.7-.6-14.4-1.7-.1 0-.1 0-.1 0s-.1 0-.1 0 0 .1 0 .1 0 0 0 0c.1 1.6.4 3.1 1 4.5.6 1.7 2.9 5.7 11.4 5.7 5 0 9.9-.6 14.8-1.7 0 0 0 0 0 0 .1 0 .1 0 .1 0 0 .1 0 .1 0 .1.1 0 .1 0 .1.1v5.6s0 .1-.1.1c0 0 0 0 0 .1-1.6 1.1-3.7 1.7-5.6 2.3-.8.3-1.6.5-2.4.7-7.5 1.7-15.4 1.3-22.7-1.2-6.8-2.4-13.8-8.2-15.5-15.2-.9-3.8-1.6-7.6-1.9-11.5-.6-5.8-.6-11.7-.8-17.5C3.9 24.5 4 20 4.9 16 6.7 7.9 14.1 2.2 22.3 1c1.4-.2 4.1-1 16.5-1h.1C51.4 0 56.7.8 58.1 1c8.4 1.2 15.5 7.5 16.6 15.6Z" fill="currentColor"/&gt;&lt;/svg&gt; &lt;div style="color: #787588; margin-top: 16px;"&gt;Post by @mayasynth@eldritch.cafe&lt;/div&gt; &lt;div style="font-weight: 500;"&gt;View on Mastodon&lt;/div&gt; &lt;/a&gt; &lt;/blockquote&gt; &lt;script data-allowed-prefixes="https://eldritch.cafe/" async src="https://eldritch.cafe/embed.js"&gt;&lt;/script&gt;
&lt;/figure&gt;</content><category term="ordinateurs"/></entry><entry><title>Fabriquer un adaptateur ADB→USB pour clavier Macintosh</title><link href="https://maya.sh/adb-usb.html" rel="alternate"/><published>2025-09-03T00:00:00+02:00</published><updated>2025-09-03T00:00:00+02:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2025-09-03:/adb-usb.html</id><summary type="html">&lt;p&gt;Depuis la nuit des temps nous utilisons des claviers pour écrire à l'ordinateur. Avant ça
on écrivait les bits sur les disquettes directement avec des aimants mais c'était vite
devenu très galère ; pour cette raison l'ingénieur Fulgence Clavier (le grand-père de l'acteur !)
a inventé le clavier en 1922 &lt;a href="https://maya.sh/adb-usb.html"&gt;[source]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Depuis la nuit des temps nous utilisons des claviers pour écrire à l'ordinateur. Avant ça
on écrivait les bits sur les disquettes directement avec des aimants mais c'était vite
devenu très galère ; pour cette raison l'ingénieur Fulgence Clavier (le grand-père de l'acteur !)
a inventé le clavier en 1922 &lt;a href="https://maya.sh/adb-usb.html"&gt;[source]&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le bus universel utilisé par tous les ordinateurs modernes est l'USB, un des premiers ordinateurs l'ayant
introduit pour les périphériques étant l'iMac en 1998. Les Macintosh plus anciens utilisaient
un autre bus, l'ADB, introduit à l'origine sur l'Apple IIgs en 86 puis sur tous les Mac sortis à
partir de 87.&lt;/p&gt;
&lt;p&gt;Il existe beaucoup d'adaptateurs pas chers pour connecter d'anciens périphériques PC
en prise PS/2 sur des ordinateurs USB mais ce n'est pas le cas pour l'ADB. L'adaptateur le plus
populaire est le &lt;a href="https://www.bigmessowires.com/usb-wombat/"&gt;Wombat&lt;/a&gt; qui supporte la conversion
dans les deux sens et permet aussi de brancher des claviers et souris USB sur un Macintosh mais il
coûte 40$ sans compter la livraison depuis les US, les taxes et la douane.&lt;/p&gt;
&lt;p&gt;J'ai donc tenté de réaliser &lt;em&gt;pour vous&lt;/em&gt; un adaptateur pas cher qui m'a coûté environ 5€ de composants.
Cet adaptateur permet seulement d'utiliser un clavier ADB sur un ordinateur en USB, pas l'inverse.&lt;/p&gt;
&lt;p&gt;&lt;img
    src="media/adb-usb/materiel.jpg"
    alt="Illustration des composants listés"
    class="float-right"
    width=350&gt;&lt;/p&gt;
&lt;h2&gt;Fabrication de l'objet&lt;/h2&gt;
&lt;p&gt;J'ai utilisé ces composants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un Arduino Pro Micro (un clone AliExpress) ;&lt;/li&gt;
&lt;li&gt;une prise femelle mini-DIN 4 broches ;&lt;/li&gt;
&lt;li&gt;une résistance de 1000 ohm ;&lt;/li&gt;
&lt;li&gt;trois fils de 3 cm max ;&lt;/li&gt;
&lt;li&gt;un câble USB ;&lt;/li&gt;
&lt;li&gt;275 cagettes de pommes.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img
    src="media/adb-usb/pinout.jpg"
    alt="Illustration du brochage pour mon port mini-DIN"
    class="float-left"
    width=150&gt;&lt;/p&gt;
&lt;p&gt;Pour commencer j'ai coupé trois fils d'un peu moins de 3 cm, dénudés de chaque côté. Ensuite
j'ai identifié les broches DATA, VCC et GND sur le port mini-DIN pour savoir où
souder les fils, ça se fait avec le multimètre en mode continuité.&lt;/p&gt;
&lt;p&gt;Pour avoir un ensemble solide j'ai utilisé les broches offertes avec l'Arduino pour y souder les
deux grosses patounes du mini-DIN en faisant attention de ne rien mettre en court-circuit,
c'est du gros bricolage mais ça fait totalement le taf !
Ensuite j'ai soudé les fils sur le port de manière perpendiculaire pour pouvoir les connecter
facilement.&lt;/p&gt;
&lt;p&gt;Enfin j'ai cherché la broche PD0 sur la carte, elle correspond au numéro 3 sur le PCB.
J'ai ajouté la résistance entre 3/PD0 et VCC sous le PCB puis j'ai soudé les fils.&lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;p&gt;&lt;img src="media/adb-usb/avant.jpg" alt="Avant"&gt;&lt;/p&gt;
    &lt;p&gt;&lt;img src="media/adb-usb/arriere.jpg" alt="Arrière"&gt;&lt;/p&gt;
    &lt;p&gt;&lt;img src="media/adb-usb/dessous.jpg" alt="Dessous"&gt;&lt;/p&gt;
&lt;/div&gt;

&lt;h2&gt;Programmation de la carte&lt;/h2&gt;
&lt;p&gt;J'ai installé QMK avec mon gestionnaire de paquets :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;brew install qmk/qmk/qmk
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Après j'ai lancé le setup puis la compilation du fichier pour l'adaptateur :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;qmk setup
qmk compile -kb converter/adb_usb/rev1 -km default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Enfin j'ai flashé l'Arduino : je l'ai branché puis j'ai exécuté :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;qmk flash -kb converter/adb_usb/rev1 -km default
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Au message &lt;em&gt;Waiting for USB serial port - reset your controller now&lt;/em&gt; j'ai déclenché le reset
en reliant brièvement RST et GND - les deux broches contigües juste au-dessus de VCC côté port USB -
j'ai fait ça avec une petite pince mais on peut aussi utiliser un trombone.&lt;/p&gt;
&lt;p&gt;Ça a fonctionné du premier coup et j'ai pu connecter un clavier ADB pour écrire cette page. :)&lt;/p&gt;
&lt;p&gt;&lt;img alt="Mon super bureau avec un clavier Apple de 1988" src="media/adb-usb/bureau.jpg"&gt;&lt;/p&gt;
&lt;h2&gt;Liens&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/qmk/qmk_firmware/tree/master/keyboards/converter/adb_usb"&gt;ADB-to-USB Keyboard Converter&lt;/a&gt;, page Github du firmware ADB-to-USB&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.qmk.fm"&gt;QMK Firmware&lt;/a&gt;, Quantum Mechanical Keyboard Firmware&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.themk.org/index.php/Main_Page"&gt;Archive du wiki Deskauthority&lt;/a&gt;, wiki de référence pour les claviers&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Analyse des nouveaux titres rechargeables des transports de Toulouse</title><link href="https://maya.sh/tisseo.html" rel="alternate"/><published>2025-08-02T00:00:00+02:00</published><updated>2025-12-26T00:00:00+01:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2025-08-02:/tisseo.html</id><summary type="html">&lt;p&gt;&lt;img alt="Détail de la Création d'Adam : l'index de Dieu rejoint presque celui d'Adam qui tient un ticket de métro dans la main" src="media/tisseo/illustration.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Au mois de mars 2025, le réseau de transports Tisséo a introduit un nouveau support de titre
de transport remplaçant l'ancien support magnétique. Les nouveaux tickets, similaires à vue d'œil,
offrent deux avantages : ils ne se démagnétisent pas et permettent le rechargement plusieurs fois.
Utilisatrice occasionnelle du réseau, j'en ai …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img alt="Détail de la Création d'Adam : l'index de Dieu rejoint presque celui d'Adam qui tient un ticket de métro dans la main" src="media/tisseo/illustration.jpg"&gt;&lt;/p&gt;
&lt;p&gt;Au mois de mars 2025, le réseau de transports Tisséo a introduit un nouveau support de titre
de transport remplaçant l'ancien support magnétique. Les nouveaux tickets, similaires à vue d'œil,
offrent deux avantages : ils ne se démagnétisent pas et permettent le rechargement plusieurs fois.
Utilisatrice occasionnelle du réseau, j'en ai vite profité pour faire remplacer mon ancien carnet
magnétique de 10 trajets qui avait arrêté de fonctionner au bout de 5 validations par un ticket rechargeable.&lt;/p&gt;
&lt;p&gt;Contrairement à la RATP/IDFM qui a vraisemblablement réutilisé la technologie Calypso des pass Navigo pour les supports Navigo Easy
le réseau Tisséo comme d'autres villes en France a choisi une solution moins chère avec ces tickets
en carton : ils sont vendus au prix de 20 centimes en plus du prix des titres. Les cartes Navigo Easy
sont elles vendues 2€ à Paris. L'inconvénient du ticket en carton, en plus de sa relative fragilité matérielle,
est le nombre limité de recharges : Tisséo indique &lt;em&gt;plus de 30 fois&lt;/em&gt; ainsi qu'un maximum de 50 titres simultanément.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;La (relative) simplicité technique de ces nouveaux tickets en fait un excellent cas
d'exemple pédagodique du fonctionnement du NFC ! Cette page va surtout se concentrer sur
la manière dont sont codées les données et comment leur intégrité en est assurée.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2&gt;Les données d'un tag ST25TB&lt;/h2&gt;
&lt;p&gt;Chaque titre en carton contient un tag NFC &lt;a href="https://www.st.com/resource/en/datasheet/st25tb512-at.pdf"&gt;ST25TB&lt;/a&gt;
de STMicroelectronics d'une capacité de 512 bits.
La mémoire est divisée en 16 blocs de 32 bits sur lesquels l'écriture est libre à une subtilité près.&lt;/p&gt;
&lt;p&gt;Trois blocs supplémentaires sont présents :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;deux blocs UID0 et UID1 en lecture seule sur lesquels sont inscrits un identifiant unique de 64 bits,
 le numéro est imprimé en décimal à l'arrière du ticket en carton et semble être séquentiel dans l'ordre
 de fabrication ;&lt;/li&gt;
&lt;li&gt;un bloc OTP (&lt;em&gt;one time programmable&lt;/em&gt;) dont les bits 16 à 31 (en comptant à partir de zéro) définissent
 l'état de lecture seule des blocs 0 à 15 respectivement. Par défaut à 1, le passage de ces bits à 0
 passe les blocs concernés en lecture seule et cette opération est irréversible.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tous les blocs sont par défaut accessibles en lecture et écriture et le tag ne contient aucun
mécanisme de contrôle d'accès. Toutefois les blocs 5 et 6 sont spéciaux, ce sont des compteurs
de décrémentation : ils sont initialisés avec les valeurs &lt;code&gt;FF FF FF FF&lt;/code&gt; et ne peuvent être mis à jour
qu'avec une valeur inférieure.&lt;/p&gt;
&lt;p&gt;Toute la sécurité anti-fraude de ces supports repose sur trois choses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'UID en lecture seule qui assure l'impossibilité de cloner un titre ;&lt;/li&gt;
&lt;li&gt;les compteurs de décrémentation qui s'assurent qu'on ne peut pas remettre un ticket dans son état d'origine ;&lt;/li&gt;
&lt;li&gt;des signatures calculées à partir de l'UID et des compteurs qui s'assurent que les données inscrites
 sont bien authentiques, c'est à dire encodées depuis un automate de vente disposant d'une clé secrète pour les calculer.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src="media/tisseo/ticket.jpg" alt="Arrière d'un ticket avec le numéro de série"&gt;
    &lt;figcaption&gt;Arrière d'un ticket
&lt;/figure&gt;

&lt;h2&gt;Structure d'un ticket&lt;/h2&gt;
&lt;p&gt;Pour rendre la lecture plus claire j'ai mis les octets de poids fort côté gauche.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;    0: 61 40 20 30   Système et distribution
    1: 25 09 16 24   Distribution
    2: 04 1F 6A C4   Distribution
    3: FA A2 28 08   Usage A
    4: CC F3 83 E9   Usage A
    5: FE 00 00 09   Compteur 1
    6: FF FF FF FC   Compteur 2
    7: 00 05 E0 FA   Usage A
    8: C0 00 18 43   Usage A
    9: C4 12 B6 AF   Usage A
   10: FA A1 08 08   Usage B
   11: C2 F3 83 EB   Usage B
   12: 00 00 A0 00   Usage B
   13: 00 00 18 43   Usage B
   14: C4 00 CE 3F   Usage B
   15: 91 B5 61 9F   Signature
  OTP: FF FF FF FF   Bloc OTP
UID 0: D0 02 33 7F   Première partie de l&amp;#39;UID
UID 1: 6F 2D 0E 69   Deuxième partie de l&amp;#39;UID
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Les blocs 0, 1, 2 contiennent des données de &lt;em&gt;distribution&lt;/em&gt; qui ne changent
pas après l'émission d'un ticket ;&lt;/li&gt;
&lt;li&gt;les blocs 3, 4, 7, 8, 9 et 10 - 14 contiennent respectivement les &lt;em&gt;usages&lt;/em&gt; A et B, chaque &lt;em&gt;usage&lt;/em&gt;
contient une signature de 16 bits à sa fin, ils stockent alternativement les informations du dernier et avant-dernier passages ;&lt;/li&gt;
&lt;li&gt;le bloc 5 contient un compteur ici divisé en deux parties : les trois octets de poids faible sont
décrémentés de 1 à chaque validation d'un nouveau titre (pas en correspondance), l'octet de poids
fort est décrémenté à chaque rechargement. Ce dump est un titre « 10 déplacements » qui a été
chargé une seule fois et dont un seul titre a été utilisé. Lors de l'achat la valeur du bloc 5 était &lt;code&gt;FE 00 00 0A&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;le bloc 6 contient un autre compteur dit de &lt;em&gt;swap&lt;/em&gt;, il est décrémenté lors de chaque utilisation (chargement ou validation), dans cet exemple il a
été décrémenté lors de l'achat puis deux fois puisque validé deux fois (dont une fois en correspondance),
le dernier bit de ce bloc permet de définir quel &lt;em&gt;usage&lt;/em&gt; va être écrasé à la prochaine validation ;&lt;/li&gt;
&lt;li&gt;le bloc 15 contient une signature pour les données de distribution, cette signature ne change que
lors d'un rachat de titres (elle est calculée entre autres en fonction de l'octet de poids fort du bloc 5).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Le choix de réserver 5 blocs par usage en sacrifiant la taille des données de distribution
est un choix de Tisséo, d'autres partitionnements sont possibles et décrits dans la norme.&lt;/p&gt;
&lt;h2&gt;Extraction et interprétation des données&lt;/h2&gt;
&lt;h3&gt;Norme Intertic&lt;/h3&gt;
&lt;p&gt;Ces titres de transports sont encodés à la norme Intertic, plus précisément :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;la norme Afnor &lt;a href="https://www.boutique.afnor.org/fr-fr/norme/nf-p99410/billettique-appliquee-aux-transports-regles-dinteroperabilite-pour-la-codif/fa203908/336658"&gt;NF P99-410&lt;/a&gt;
qui définit les règles Intertic en elle-mêmes et leur principe de formatage ;&lt;/li&gt;
&lt;li&gt;la norme Afnor &lt;a href="https://www.boutique.afnor.org/fr-fr/norme/fd-p99416/billettique-appliquee-aux-transports-regles-dinteroperabilite-pour-la-codif/fa203907/339737"&gt;NF P99-416&lt;/a&gt;
qui définit comment encoder les règles Intertic sur différents supports en fonction de leurs limites,
notamment les tickets ST25TB.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Intertic est la version « allégée » d'Intercode, une autre norme prévue pour les cartes d'abonnement
qui possèdent plus de mémoire. Il existe aussi Interbob pour normaliser les échanges entre les
systèmes informatiques et Transmodel pour les bases de données.&lt;/p&gt;
&lt;p&gt;Le formatage des données sur un titre peut être complexe parce qu'Intertic est très flexible
et peut s'adapter aux règles de différents réseaux de transports. Les données sont inscrites sur
chaque titre de manière séquentielle mais entre ces données il arrive que des
champs spéciaux indiquent quelles données optionnelles sont présentes ou absentes. Heureusement la quantité
de mémoire très réduite du titre rechargeable impose une certaine simplicité. En réalité pour
les titres rechargeables Tisséo, à une exception près, les données sont situées à des emplacements fixes
ce qui les rend faciles à décoder.&lt;/p&gt;
&lt;h3&gt;Système et distribution&lt;/h3&gt;
&lt;p&gt;Pour extraire les informations générales d'un titre, il faut lier les blocs 1, 2 et 0 dans cet ordre puis les découper :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Bloc 1 : 001001010000 100100010110 001001 00
         A            B            C      D...

Bloc 2 : 000001 0000011111011010 1011000100
                E                F...

Bloc 0 : 0110 00010 10 00000001 0000 0001 10000
              G     H  I        J    K    L
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lettre&lt;/th&gt;
&lt;th&gt;Taille (bits)&lt;/th&gt;
&lt;th&gt;Signification&lt;/th&gt;
&lt;th&gt;Valeur&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Code pays&lt;/td&gt;
&lt;td&gt;0x250 (France)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Autorité organisatrice&lt;/td&gt;
&lt;td&gt;0x916 (Tisséo)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Version de contrat&lt;/td&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Fournisseur de contrat&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Tarif de contrat&lt;/td&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;Date de fin de contrat&lt;/td&gt;
&lt;td&gt;2028-01-05&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Exploitant&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;J&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Vide&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;ID du jeu de clés (système)&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;ID de partition (système)&lt;/td&gt;
&lt;td&gt;0x10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;Les dates sont codées sur 14 bits, en nombre de jours depuis le 1er janvier 1997 ;&lt;/li&gt;
&lt;li&gt;les données de « contrat » sont liées aux normes Intercode et Intertic, je ne connais pas
en détail leur signification ;&lt;/li&gt;
&lt;li&gt;la date de fin de contrat sert ensuite pour calculer les dates des &lt;em&gt;usages&lt;/em&gt; ;&lt;/li&gt;
&lt;li&gt;le &lt;em&gt;tarif&lt;/em&gt; définit le type de titres chargé, &lt;code&gt;2010&lt;/code&gt; sert à indiquer
qu'il s'agit de titres 10 déplacements, c'est cohérent avec le comportement de l'automate qui m'autorise
uniquement un rechargement par 10 sur mon ticket non vide - c'est très bête comme limitation mais
mon intuition est que le &lt;em&gt;tarif&lt;/em&gt; permet aussi de faire la différence entre un titre unitaire et
un titre aéroport ou journée par exemple (on ne peut charger qu'un seul type de titre) ;&lt;/li&gt;
&lt;li&gt;les signatures sont calculées au moins en fonction de l'UID, de l'ID de partition,
de l'ID du jeu de clés et du tarif ;&lt;/li&gt;
&lt;li&gt;l'ID de partition sert à décrire le type de partitionnement utilisé parmi plusieurs possibles
décrits dans la norme Intertic, le partitionnement &lt;code&gt;0x10&lt;/code&gt; permet d'avoir des &lt;em&gt;usages&lt;/em&gt; de 5 blocs.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/tisseo/automate1.jpg" alt="Écran affichant 0 titres disponibles, impossible à recharger car plein"&gt;
        &lt;figcaption&gt;Le ticket qui m'a été échangé contre l'ancien magnétique a été chargé avec des « déplacements SAV », je ne peux pas le recharger*
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/tisseo/automate2.jpg" alt="Écran affichant 10 titres disponibles, rechargeable par 10 uniquement"&gt;
        &lt;figcaption&gt;Nouveau ticket rechargeable avec 10 titres disponibles, dumpé ici en exemple, je ne peux ajouter que des titres similaires (des lots de 10)
    &lt;/figure&gt;
&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://www.tisseo.fr/FAQ?question=dois-je-attendre-que-mon-ticket-rechargeable-soit-vide-pour-le-recharger"&gt;Normalement&lt;/a&gt;
je suis supposée pouvoir charger le type de titre que je souhaite une fois que la carte est vide,
j'ai tendance à penser que le bug qui m'empêche de recharger ma première carte est causé par le
type de titre non disponible à l'achat (déplacement SAV, &lt;em&gt;tarif&lt;/em&gt; 2060).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Usages&lt;/h3&gt;
&lt;p&gt;Découpage du usage B pour l'exemple, c'est pareil pour le A :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;Bloc 10 : 1111101010 10000100001 00000001 000
          A          B           C        D...

Bloc 11 : 11  00001 01111 001110 00001111101011
              E     F     G      H

Bloc 12 : 00 0000000000000010 10 000000000000
          I  J                K  L...

Bloc 13 : 00 00000000000000 0001 10000100001 1
             M              N    O           P...

Bloc 14 : 11 0001 000000 000 0 1100111000111111
             Q    R      S     Signature
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Lettre&lt;/th&gt;
&lt;th&gt;Taille&lt;/th&gt;
&lt;th&gt;Signification&lt;/th&gt;
&lt;th&gt;Valeur usage B&lt;/th&gt;
&lt;th&gt;Valeur usage A&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;Date de validation&lt;/td&gt;
&lt;td&gt;2025-04-16&lt;/td&gt;
&lt;td&gt;2025-04-16&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Heure de validation&lt;/td&gt;
&lt;td&gt;17:37&lt;/td&gt;
&lt;td&gt;18:13&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Exploitant&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;D&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Nature&lt;/td&gt;
&lt;td&gt;3 (métro)&lt;/td&gt;
&lt;td&gt;3 (métro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;E&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Type de validation&lt;/td&gt;
&lt;td&gt;1 (validation entrée)&lt;/td&gt;
&lt;td&gt;6 (correspondance)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;F&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;G&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;H&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;ID de ligne&lt;/td&gt;
&lt;td&gt;1003 (ligne C)&lt;/td&gt;
&lt;td&gt;1001 (ligne A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;I&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;Direction&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;J&lt;/td&gt;
&lt;td&gt;16&lt;/td&gt;
&lt;td&gt;Code station &lt;em&gt;(optionnel)&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;L&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;ID de ligne précédente&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;1003 (ligne C)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;M&lt;/td&gt;
&lt;td&gt;14&lt;/td&gt;
&lt;td&gt;ID de ligne encore précédente&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;td&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;N&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;O&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;td&gt;Heure de 1e validation&lt;/td&gt;
&lt;td&gt;17:37&lt;/td&gt;
&lt;td&gt;17:37&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Définit le formatage&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Nombre de passagers&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;R&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;Nombre de trajets&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;S&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;Nombre de correspondances&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;ul&gt;
&lt;li&gt;La date est codée en nombre de jours à soustraire depuis la &lt;em&gt;date de fin de contrat&lt;/em&gt; de la partie distribution ;&lt;/li&gt;
&lt;li&gt;différents codes &lt;em&gt;nature&lt;/em&gt; existent, notamment 1 pour le bus, 3 pour le métro, 4 pour le tramway, 5 pour le train, etc. Sur Tisséo, la ligne C et le câble Téléo sont indiqués comme des métros ;&lt;/li&gt;
&lt;li&gt;le champ direction est rempli pour le bus et le tramway : 1 pour l'aller et 2 pour le retour ;&lt;/li&gt;
&lt;li&gt;le champ du code station n'est indiqué que pour une validation sur un portique, c'est
le seul champ qui est présent de façon optionnelle sur ces tickets ; lors d'une validation dans
un bus ou un tramway il n'est simplement pas présent (pas juste vide), ce qui décale toute la
lecture des champs suivants !&lt;/li&gt;
&lt;li&gt;lorsqu'un ticket vierge est édité par un automate de vente, l'usage A est signé &lt;s&gt;et contient une heure de validation et de première validation à 23h59&lt;/s&gt; (màj : le bug a été corrigé 😂)&lt;/li&gt;
&lt;li&gt;le nombre de « trajets » semble être la même chose que le nombre de correspondances.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Identifiants internes&lt;/h2&gt;
&lt;p&gt;Le tableau suivant référence les différents codes station que j'ai repérés au fil du temps.
Le réseau de Toulouse est un des rares (le seul ?) ou on valide en correspondance dans le métro, ce qui permet au valideur de toujours connaître la ligne empruntée. Je ne vois pas de lien avec les données GTFS disponibles en open data, ce sont des identifiants internes. J'ai l'impression que les stations sont par ordre alphabétique ?&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Ligne&lt;/th&gt;
&lt;th&gt;Station&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Arènes (gare)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;C&lt;/td&gt;
&lt;td&gt;Colomiers (gare)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Arènes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Argoulets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;25&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Bagatelle&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;26&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Balma – Gramont&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Basso Cambo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;28&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Bellefontaine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Capitole&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;31&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Esquirol&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;33&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Jean Jaurès&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;36&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Marengo SNCF&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;43&lt;/td&gt;
&lt;td&gt;A&lt;/td&gt;
&lt;td&gt;Saint-Cyprien&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;44&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Barrière de Paris&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;45&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Borderouge&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Canal du Midi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;51&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Jeanne d'Arc&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;52&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Jean Jaurès (depuis la B)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;53&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Jean Jaurès (depuis la A)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;54&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Jean Jaurès (depuis l'extérieur)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;55&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;La Vache&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;57&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Palais de justice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;59&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Ramonville&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;64&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Saint-Michel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;65&lt;/td&gt;
&lt;td&gt;B&lt;/td&gt;
&lt;td&gt;Trois Cocus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;83&lt;/td&gt;
&lt;td&gt;Téléo&lt;/td&gt;
&lt;td&gt;Université Paul Sabatier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ce tableau référence l'ID de chaque ligne dans le système, là encore ça ne correspond pas aux données GTFS.
Pour les autobus, c'est juste le numéro de la ligne de bus.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Nom commercial de la ligne&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;24&lt;/td&gt;
&lt;td&gt;Bus aéroport&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;835&lt;/td&gt;
&lt;td&gt;Bus relai métro B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1001&lt;/td&gt;
&lt;td&gt;Métro A&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1002&lt;/td&gt;
&lt;td&gt;Métro B&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1003&lt;/td&gt;
&lt;td&gt;Train Arènes-Colomiers (ex ligne C)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1005&lt;/td&gt;
&lt;td&gt;Tramway T1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1007&lt;/td&gt;
&lt;td&gt;Câble Téléo&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ce tableau référence les ID correspondant aux &lt;em&gt;tarifs&lt;/em&gt;, c'est à dire les différents types de tickets
qu'on peut charger sur un titre rechargeable. La liste n'est pas exhaustive, il m'en manque quelques uns.
Il n'y a pas forcément de différence de prix entre deux &lt;em&gt;tarifs&lt;/em&gt;, par exemple deux déplacements
coûtent le même prix qu'un seul déplacement chargé en deux fois.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;ID&lt;/th&gt;
&lt;th&gt;Type de billet&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;2005&lt;/td&gt;
&lt;td&gt;1 déplacement&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2007&lt;/td&gt;
&lt;td&gt;1 déplacement dernière minute (à bord)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2010&lt;/td&gt;
&lt;td&gt;10 déplacements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2020&lt;/td&gt;
&lt;td&gt;2 déplacements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2037&lt;/td&gt;
&lt;td&gt;3 jours ?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2060&lt;/td&gt;
&lt;td&gt;1 déplacement (SAV)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2062&lt;/td&gt;
&lt;td&gt;? déplacements&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2090&lt;/td&gt;
&lt;td&gt;1 déplacement aéroport (à bord)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2&gt;Sécurité du support&lt;/h2&gt;
&lt;p&gt;La décrémentation du bloc 5 de manière similaire à un automate est possible mais invalide la
signature du bloc 15 et rend le titre illégitime.&lt;/p&gt;
&lt;p&gt;On pourrait penser que changer l'horodatage du dernier usage pour simuler une correspondance pourrait éviter
la décrémentation d'un titre lors de la validation mais chaque usage est protégé par sa propre
signature.&lt;/p&gt;
&lt;p&gt;Impossible aussi d'escalader de tarif par exemple en achetant un titre « 1 déplacement » et en le
transformant en ticket aéroport parce que son authenticité est protégée par la signature du bloc 15.&lt;/p&gt;
&lt;h3&gt;Attaque par arrachage (tearing)&lt;/h3&gt;
&lt;p&gt;Il reste l'hypothèse de remonter dans le temps en réinitialisant le ticket dans un état passé.
Ça nécessite d'incrémenter le compteur 5, c'est
normalement matériellement impossible mais les tags ST25TB sont sensibles
&lt;a href="https://www.sstic.org/2024/presentation/tears_for_fears_breaking_an_rfid_counter/"&gt;aux attaques par arrachage&lt;/a&gt;,
ça a fait l'objet de recherches depuis plusieurs années et les
&lt;a href="https://www.gart.org/actualite/point-dalerte-sur-le-hack-du-billet-sans-contact-type-st25tb/"&gt;réseaux de transport sont supposés être informés&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Actuellement le seul moyen pour un réseau de transport de se prémunir
au mieux est de vérifier au maximum la cohérence des informations du titre plutôt que juste faire confiance
aux compteurs.&lt;/p&gt;
&lt;p&gt;Exemples :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;un titre dont le nombre de voyages disponibles est égal au nombre de déplacements achetés
doit avoir les deux zones d'usage vierges dont une des deux signée (celle qui ne sera pas écrasée en premier) ;&lt;/li&gt;
&lt;li&gt;un titre « 1 déplacement » qui n'a été chargé qu'une seule fois
ne doit pas avoir un swap supérieur à 5 (une recharge + 4 validations possibles par voyage),
le nombre passe à 41 pour un ticket de 10 voyages ;&lt;/li&gt;
&lt;li&gt;un titre ne doit pas contenir plus de voyages qu'il n'est possible d'en acheter, par exemple
si l'automate permet d'acheter au maximum 5 voyages « 1 déplacement » séparément
il ne devrait pas y avoir plus de 5 voyages sur le ticket (je ne connais pas la limite réelle) ;&lt;/li&gt;
&lt;li&gt;le nombre de voyages doit être cohérent avec le nombre d'achats,
par exemple si 3 voyages au code tarif « 1 déplacement » sont disponibles cela implique au minimum 3 achats décomptés,
si 15 voyages au tarif « 10 déplacements » sont disponibles ça implique au minimum 2 achats.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;Dans leur note technique &lt;a href="https://www.st.com/resource/en/technical_note/tn1530-security-advisory-tn1530stpsirt-st25tb-series-tearing-issue-stmicroelectronics.pdf"&gt;TN1530&lt;/a&gt;
de mai 2024 STMicroelectronics conseille :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Follow the recommendations provided in section Antitearing protection of 
“Best practices for security and privacy with ST25 NFC/ RFID Tags” (AN5493)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ça nous mène à la note d'application &lt;a href="https://www.st.com/resource/en/application_note/an5493-best-practices-for-security-and-privacy-with-st25-nfcrfid-tags-stmicroelectronics.pdf"&gt;AN5493&lt;/a&gt;
qui nous met déjà dans l'ambiance dès la page 2 :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;ST25 NFC /RFID Tags devices are not certified products that can be used in entry level security applications. In
case of needs of a more secure solution as in the transportation domain, for example, STMicroelectronics can
propose the CD21 product portfolio using the certified secure ST31 IC family and compliant with all Calypso
requirements.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Après nous avoir présenté les diverses fonctionnalités de différents tags de la série ST25 le même document
- mis à jour en mai 2025 - nous précise dans la section &lt;em&gt;5.2.3.4 Antitearing protection&lt;/em&gt; (p. 28) :&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;It may not be sufficient in the applications that
are often faced daily human threats and risks such as fraud. Certain enhanced attacks to cause an impact on the
security automatic mechanism and to exploit vulnerability may occur and need to be thwarted by combining
technical controls since ST25 series are not considered as security certified products and may not resist to
advanced attacks.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;C'est quand même abusé pour un système vendu spécifiquement pour les transports.&lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/tisseo/st25tb-product-presentation.jpg" alt="Extrait de diaporama qui présente le produit comme conçu pour le transport"&gt;
        &lt;figcaption&gt;
        ST25TB product presentation, mai 2020
        &lt;a href="https://www.st.com/resource/en/product_presentation/st25tb-product-presentation.pdf"&gt;[pdf]&lt;/a&gt;
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/tisseo/datasheet.jpg" alt="Page qui précise Application : transport"&gt;
        &lt;figcaption&gt;Première page du datasheet, février 2023
        &lt;a href="https://www.st.com/resource/en/datasheet/st25tb512-at.pdf"&gt;[pdf]&lt;/a&gt;
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Enfin toujours dans la même section le document suggère quelques stratégies :
utiliser des checksums pour assurer l'intégrité des données (oui mais
quel rapport avec mon potiron ?), utiliser des signatures (déjà fait) ou faire des vérifications
côté serveur, ce qui est probablement la seule stratégie viable à terme mais techniquement très compliqué
pour un réseau de transports.&lt;/p&gt;
&lt;p&gt;&lt;img src="media/tisseo/coffe.jpg" alt="Photo de Jean-Pierre Coffe" class="float-right" width="100"&gt;&lt;/p&gt;
&lt;p&gt;Pour conclure, Tisséo utilise la norme Intertic de manière optimale pour assurer
le respect des contraintes de la tarification dans la mémoire réduite du ST25TB512 mais cette technologie
n'offre pas un niveau de sécurité adapté à l'usage qui en est fait.
Les cartes Pastel utilisées pour les abonnements permettant déjà de charger
des titres unitaires,
en vendre des non-nominatives comme fait IDFM avec le &lt;a href="https://www.iledefrance-mobilites.fr/titres-et-tarifs/supports/passe-navigo-easy"&gt;Navigo Easy&lt;/a&gt;
ou les réseaux de transport du Québec avec la &lt;a href="https://fr.wikipedia.org/wiki/Carte_Opus"&gt;carte Opus&lt;/a&gt;
aurait garanti un meilleur niveau de sécurité malgré un coût du support plus élevé. Les nombreux
réseaux de transports en France qui utilisent le ST25TB s'exposent aux mêmes problèmes.&lt;/p&gt;
&lt;h2&gt;Pour en apprendre plus&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mayafeur/intertic"&gt;Décodeur de titres rechargeables Tisséo&lt;/a&gt; par votre serviteuse&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/RfidResearchGroup/proxmark3/blob/master/client/pyscripts/intertic.py"&gt;Script de décodage Intertic générique&lt;/a&gt;, &lt;a href="https://github.com/gentilkiwi"&gt;gentilkiwi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.tisseo.fr/FAQ?thematic=generalites"&gt;FAQ des tickets rechargeables&lt;/a&gt;, Tisséo&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/SecLabz/near-field-chaos/tree/main?tab=readme-ov-file"&gt;Near Field Chaos&lt;/a&gt;, outil pour lire et écrire librement sur les tags ST25TB !&lt;/li&gt;
&lt;li&gt;[PDF] &lt;a href="https://www.urba2000.com/predim/IMG/pdf/plaquette_de_synthese_juin_2008.pdf"&gt;La NORMALISATION un outil pour l’INTEROPÉRABILITÉ de la billettique dans les transports publics&lt;/a&gt;, Certu (PDF, 2008)&lt;/li&gt;
&lt;li&gt;[PDF] &lt;a href="https://www.st.com/resource/en/datasheet/st25tb512-at.pdf"&gt;Datasheet du ST25TB512-AT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[PDF] &lt;a href="https://raw.githubusercontent.com/gentilkiwi/st25tb_kiemul/main/ST25TB_transport.pdf"&gt;ST25TB series NFC tags for fun in French public transports&lt;/a&gt;, &lt;a href="https://github.com/gentilkiwi"&gt;gentilkiwi&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[PDF] &lt;a href="https://www.sstic.org/media/SSTIC2024/SSTIC-actes/tears_for_fears_breaking_an_rfid_counter/SSTIC2024-Article-tears_for_fears_breaking_an_rfid_counter-marty_granier_delion_JHhE6Td.pdf"&gt;Tears for fears, breaking an RFID counter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Logiciels et jeux indispensables : tout pour bien démarrer sur Macintosh 68k</title><link href="https://maya.sh/mac68k.html" rel="alternate"/><published>2025-07-29T00:00:00+02:00</published><updated>2026-02-05T00:00:00+01:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2025-07-29:/mac68k.html</id><summary type="html">&lt;p&gt;&lt;img
    src="media/mac68k/couv.jpg"
    alt="Couverture du livre « Introduction to Macintosh Pascal » (1985) inspirée de Magritte"
    class="float-right"
    width="300"&gt;&lt;/p&gt;
&lt;p&gt;Cette page regroupe différentes ressources pour bien débuter dans l'univers du Mac 68k, j'y ai
ajouté pas mal d'explications sur le fonctionnement de ces machines.&lt;/p&gt;
&lt;p&gt;Ce qui est à télécharger ici vient parfois du net, parfois de disquettes qui trainent chez moi ;
dans tous les cas j'ai testé chaque archive …&lt;/p&gt;</summary><content type="html">&lt;p&gt;&lt;img
    src="media/mac68k/couv.jpg"
    alt="Couverture du livre « Introduction to Macintosh Pascal » (1985) inspirée de Magritte"
    class="float-right"
    width="300"&gt;&lt;/p&gt;
&lt;p&gt;Cette page regroupe différentes ressources pour bien débuter dans l'univers du Mac 68k, j'y ai
ajouté pas mal d'explications sur le fonctionnement de ces machines.&lt;/p&gt;
&lt;p&gt;Ce qui est à télécharger ici vient parfois du net, parfois de disquettes qui trainent chez moi ;
dans tous les cas j'ai testé chaque archive et j'ai refait la plupart des images disques
pour m'assurer qu'elles fonctionnent et que celles qui sont supposées être bootables le soient réellement.
Ce sont dans la mesure du possible des logiciels en français.&lt;/p&gt;
&lt;p&gt;Je mets à jour cette page de temps en temps, en cas d'erreur n'hésitez pas à m'écrire
&lt;a href="mailto:_@maya.sh"&gt;à cette adresse&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Sommaire&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;💾 &lt;a href="#os"&gt;Logiciels système&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;💡 &lt;a href="#utilitaires"&gt;Utilitaires&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🧩 &lt;a href="#extensions"&gt;Extensions et tableaux de bord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🎨 &lt;a href="#logiciels"&gt;Logiciels&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🎲 &lt;a href="#jeux"&gt;Jeux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📁 &lt;a href="#transferer"&gt;Transférer les fichiers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;⚙️ &lt;a href="#principes"&gt;Principes du Mac OS classique&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🚀 &lt;a href="#outils"&gt;Outils pour les machines d'aujourd'hui&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📕 &lt;a href="#generations"&gt;Différentes gammes et générations de Mac 68k&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;🔗 &lt;a href="#ressources"&gt;Ressources&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="os"&gt;💾 Logiciels système&lt;/h2&gt;

&lt;h3&gt;Système 6.0.7&lt;/h3&gt;
&lt;p&gt;Pour les machines 68000 l'OS le plus fluide est le système 6. La dernière version est la 6.0.8
mais je ne l'ai pas trouvée en français, elle est identique à la 6.0.7 à part pour la gestion
des imprimantes donc je propose la 6.0.7.&lt;/p&gt;
&lt;p&gt;Le système 6.0.7 est compatible avec tous les Macintosh 68000 à l'exception du 128K, du 512K et du
PowerBook 100.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://bazar.maya.sh/fichiers/mac68k/OS/Systeme_6.0.7_FR.hda"&gt;&lt;strong&gt;Image HDA pour BlueSCSI&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Image bootable qui contient les 4 disquettes du système 6.0.7 et les utilitaires
DiskDup Pro, Resedit, Stuffit Deluxe 3.5 et Font/DA Mover.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://bazar.maya.sh/fichiers/mac68k/OS/Systeme_6.0.7_FR_DD.zip"&gt;&lt;strong&gt;Disquettes au format DD 800 Ko&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Archive contenant 4 disquettes du système 6.0.7 version française (claviers AZERTY et QWERTY US) :
&lt;em&gt;Système&lt;/em&gt; et &lt;em&gt;Utilitaires 1&lt;/em&gt; sont bootables, cette dernière contient des utilitaires de disque.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;Màj : correction des images DD dont il manquait des accessoires et polices, retrait des images HD qui
étaient corrompues.&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour activer le multitâches il faut sélectionner le volume de démarrage sur le bureau,
aller dans le menu &lt;em&gt;Rangement&lt;/em&gt;, cliquer sur &lt;em&gt;Fixer le démarrage...&lt;/em&gt; puis choisir &lt;em&gt;MultiFinder&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Un fichier &lt;em&gt;System&lt;/em&gt; supplémentaire est disponible ci-dessous (rubrique Extensions) pour ajouter les dispositions
de clavier canadiennes ! Il est fourni sur une image séparée pour que tout puisse rentrer sur
des disquettes de 800 Ko.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Système 7.1&lt;/h3&gt;
&lt;p&gt;Pour les machines 68020 et plus rapides le système 7 apporte une compatibilité avec plus
d'applications, un multitâches intégré à l'OS (plus besoin d'activer le &lt;em&gt;multifinder&lt;/em&gt;),
les polices TrueType, le glisser-déposer sur les icônes d'applications, des améliorations
dans AppleTalk, dans la gestion des imprimantes et une interface en couleurs !&lt;/p&gt;
&lt;p&gt;Le système 7 introduit aussi le support de plus de 8 Mo de RAM grâce à l'adressage 32 bits des CPU
68020, 30 et 40. Pour les Mac dont la ROM n'est pas compatible il existe &lt;a href="https://macintoshgarden.org/apps/mode32"&gt;Mode32&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;La mise à jour 3.0 corrige simplement des bugs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://bazar.maya.sh/fichiers/mac68k/OS/Systeme_7.1_FR.hda"&gt;&lt;strong&gt;Image HDA pour BlueSCSI&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Image bootable contenant toutes les disquettes d'installation pour le système 7.1 en version française
et la mise à jour 3.0 ; contient aussi Disk Copy 6.3.3, Stuffit Expander 5.5,
l'utilitaire de disques Apple patché et les outils Norton pour partitionner, défragmenter et diagnostiquer les disques.
Il faut monter toutes les images en même temps, lancer le programme d'installation depuis la première disquette
puis recommencer pour la mise à jour 3.0. Le programme d'installation a une option &lt;em&gt;Personnaliser&lt;/em&gt;
qui permet d'installer un système plus léger adapté uniquement à la machine et dépourvu des pilotes d'imprimantes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://bazar.maya.sh/fichiers/mac68k/OS/Systeme_7.1_FR_HD.zip"&gt;&lt;strong&gt;Disquettes au format HD 1,44 Mo&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Archive contenant directement les différentes disquettes.
La disquette &lt;em&gt;Installation 1&lt;/em&gt; boote sur le programme d'installation directement, &lt;em&gt;Utilitaires 2&lt;/em&gt; boote
sur un Finder et contient des utilitaires pour formater et partitionner
des disques durs mais de marque Apple uniquement (version patchée toutes marques disponible plus bas).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Les Macintosh sortis après le système 7.1 ont besoin d'un &lt;em&gt;System Enabler&lt;/em&gt; pour
booter le système, c'est un fichier à glisser dans le &lt;em&gt;Dossier Système&lt;/em&gt; du disque sur lequel
vous venez de faire l'installation. L'image bootable ci-dessus en contient plusieurs dans son
dossier système, ils sont aussi présents dans la disquette &lt;em&gt;Mise à jour 3.0 disque 2&lt;/em&gt;.
Vérifiez &lt;a href="http://www.repairyourmac.com/the_manuals_are_in_here/Compatability_Charts/System_Enabler_Chart.pdf"&gt;dans ce PDF&lt;/a&gt;
celui dont vous avez besoin ou au pire mettez-les tous.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Mac OS 7.5.3&lt;/h3&gt;
&lt;p&gt;Pour les machines 68030 et 68040 puissantes Mac OS 7.5 ajoute quelques fonctionnalités supplémentaires
comme une barre de réglages en bas de l'écran pour notamment changer le volume, des fonds d'écran,
AppleScript, un meilleur glisser-déposer et les outils MacTCP et OpenTransport pour se connecter à Internet.
La plupart de ces nouveautés peuvent être installées manuellement et individuellement dans 7.1.&lt;/p&gt;
&lt;p&gt;La version 7.5 introduit la marque &lt;em&gt;Mac OS&lt;/em&gt; et l'écran de démarrage avec le logo Picasso.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://bazar.maya.sh/fichiers/mac68k/OS/Mac_OS_7.5.3_FR.toast"&gt;&lt;strong&gt;Mac OS 7.5.3&lt;/strong&gt;&lt;/a&gt;&lt;br&gt;
Image de CD bootable au format Toast (pris en charge par le BlueSCSI et par Basilisk II)
en français, contient Disk Copy 6.3.3 et Stuffit Expander 5.5.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Versions à éviter&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Le système 7.0 parce qu'il est &lt;a href="https://wiki.preterhuman.net/System_7.0.1_vs_7.1_Speed_Tests"&gt;moins optimisé&lt;/a&gt; et
offre une compatibilité logicielle moins bonne que le 7.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Mac OS 7.6 parce qu'il n'apporte rien d'intéressant pour les Macintosh 68k - Apple achève à cette époque
la migration vers l'architecture PowerPC. Cette version ne supporte plus les 68000, 68020 ni les
machines avec une ROM 24 bits comme le SE/30 et les premiers Mac II.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="utilitaires"&gt;💡 Utilitaires&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disk Tools patché&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Disk_Tools_patched.hd.img"&gt;[hd.img]&lt;/a&gt;&lt;br&gt;
Disquette bootable du système 7 contenant un outil de formatage et partitionnement patché pour fonctionner
avec des disques durs de toutes les marques.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;DiskDup Pro&lt;/strong&gt; pour système 6
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/DiskDup_Pro_1.0.3.2.macb"&gt;[macbinary]&lt;/a&gt;
&lt;br&gt;
Pour faire des copies de disquette ou monter des images sur le système 6 (ça doit fonctionner aussi
sur le 7 mais Disk Copy 6.3.3 est plus ergonomique).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Font/DA Mover&lt;/strong&gt; pour système 6
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Font_DA_Mover_4.1.macb"&gt;[macbinary]&lt;/a&gt;
&lt;br&gt;
Permet d'ajouter ou supprimer des polices et des accessoires de bureau au fichier &lt;em&gt;System&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disk Copy 6.3.3&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Disk_Copy_6.3.3_fr.sit.macb"&gt;[sit.macbinary]&lt;/a&gt; pour système 7, en français&lt;br&gt;
Permet de monter des images de disquettes, d'imager des disquettes et inversement.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stuffit Expander 3.5&lt;/strong&gt; pour système 6 et 7
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Stuffit_Expander_3.5.dd.img"&gt;[dd.img]&lt;/a&gt;&lt;br&gt;
Décompresseur d'archives &lt;code&gt;.sit&lt;/code&gt; et &lt;code&gt;.hqx&lt;/code&gt; notamment, incompatible avec certaines archives trop récentes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stuffit Expander 5.5&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Stuffit_Expander_5.5_fr.hd.img"&gt;[hd.img]&lt;/a&gt;
pour système 7 et 68020 ou plus&lt;br&gt;
Version plus récente de Stuffit qui offre une meilleure compatibilité avec certains fichiers &lt;code&gt;.sit&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fetch 2.1.2&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Fetch_2.1.2.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Client FTP, la méthode la plus simple pour transférer des fichiers en réseau je pense.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Utilitaires Norton&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/Norton_Utilities_2.0F.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français&lt;br&gt;
Utilitaires Norton 2.0 pour vérifier et effacer disquettes et disques durs. (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Pilotes DaynaPORT&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/DaynaPORT_7.5.3.hd.img"&gt;[hd.img]&lt;/a&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Utilitaires/DaynaPORT_7.5.3.dd.img"&gt;[dd.img]&lt;/a&gt;&lt;br&gt;
Disquette issue de l'image &lt;a href="https://bluescsi.com/docs/WiFi-DaynaPORT#installing"&gt;BlueSCSI Bootstrap&lt;/a&gt;.
La version DD est dépourvue du fichier &lt;em&gt;Diagnostics.sea&lt;/em&gt;.
Note pour le système 6 : après avoir installé le pilote SCSI/Link et AppleTalk 58 il faut supprimer
l'ancien &lt;em&gt;Répondeur&lt;/em&gt; du dossier système car une verison plus récente avec le nom en anglais &lt;em&gt;Responder&lt;/em&gt;
a été ajoutée.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Fix-a-Fork&lt;/strong&gt; &lt;a href="https://tinkerdifferent.com/threads/fix-a-fork.3082/"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Permet de reconstituer le fork de ressources d'un fichier si celui-ci a été perdu lors d'un transfert
à travers un système non-Mac (cf. ci-dessous). Ça permet de régler le problème des fichiers qui
ne s'ouvrent pas ou dont le type n'est plus reconnu.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;BlueSCSI Toolbox&lt;/strong&gt; &lt;a href="https://bluescsi.com/toolbox"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Outils pour pour transférer des fichiers entre le volume Macintosh et le dossier &lt;em&gt;shared&lt;/em&gt; de la carte SD du BlueSCSI,
fonctionne aussi dans l'émulateur Snow pour échanger des fichiers avec le système hôte.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="extensions"&gt;🧩 Extensions et tableaux de bord&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;2020Patch&lt;/strong&gt; &lt;a href="https://www.mactcp.net/macos2020.html"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Patch pour pouvoir régler la date au-delà de 2019, sous forme d'extension pour le système 7.1 et au-delà,
sous forme de patch à installer pour les systèmes plus anciens.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;After Dark 2.0x&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/After_Dark_2.0x.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Écrans de veille très cools 😎 (tout glisser dans le dossier &lt;em&gt;Tableaux de bord&lt;/em&gt;) ~
c'est aussi un outil important parce que Mac OS classique ne possède aucune veille et une image
fixe qui reste affichée trop longtemps sur un tube cathodique le marque physiquement, mon SE a
la barre de menus gravée dans l'écran.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apple CD-ROM patché&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Apple_CD-ROM_531_patched.macb"&gt;[macbinary]&lt;/a&gt;&lt;br&gt;
Extension Apple CD-ROM patchée pour supporter les lecteurs de différentes marques ainsi que ceux émulés ~
à glisser dans le dossier &lt;em&gt;Extensions&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Smart Scroll&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Smart_Scroll_3.7.3.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Tableau de bord pour avoir des barres de défilement modernes dans le Finder et (quasiment) toutes les applications.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Apparence Platinum&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Apparence.sit.macb"&gt;[sit.macbinary]&lt;/a&gt; pour système 7, en français&lt;br&gt;
Offre au système 7 l'apparence de Mac OS 8 avec des fenêtres et des contrôles en relief !
L'archive contient une extension, un tableau de bord et deux polices
à déplacer dans le dossier &lt;em&gt;Polices&lt;/em&gt; du &lt;em&gt;Dossier Système&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Échange PC - Macintosh&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Echange_PC_Macintosh.macb"&gt;[sit.macbinary]&lt;/a&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Echange_PC_Macintosh.hd.img"&gt;[hd.img]&lt;/a&gt;
pour système 7.1, en français&lt;br&gt;
Tableau de bord offert avec Mac OS 7.5 qui permet de lire et écrire des disquettes au format PC ~
à installer sur le système 7.1 uniquement. Pour le système 6 vous pouvez utiliser &lt;em&gt;Apple File Exchange&lt;/em&gt;
situé sur la disquette &lt;em&gt;Utilitaires 2&lt;/em&gt; ou &lt;em&gt;Compléments Système&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Clavier canadien (CSA)&lt;/strong&gt; pour système 7 &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Clavier_canadien_CSA.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
À placer dans &lt;em&gt;Dossier Système&lt;/em&gt; / &lt;em&gt;System&lt;/em&gt;, ensuite la disposition de clavier deviendra disponible
dans le tableau de bord &lt;em&gt;Clavier&lt;/em&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Finder Options&lt;/strong&gt; pour système 7.5.3 &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Finder_Options_1.0.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Ajoute des raccourcis clavier au Finder dont Commande-Suppr pour envoyer un fichier à la corbeille !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Programmer's Key&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Programmer_Key.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Ajoute les raccourcis Ctrl-Cmd-Power (redémarrage dur) et Cmd-Power (console MicroBug) aux Macintosh
de l'ère pré-Quadra/LC ; ça évite de devoir se procurer le « programmer switch » en plastique à clipser
sur le côté du boitier :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;MacTCP&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/MacTCP_2.0.6_fr.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Tableau de bord MacTCP 2.0.6 en français qui fonctionne aussi sur le système 6. L'archive inclut
l'utilitaire &lt;em&gt;MacTCP Ping&lt;/em&gt; pour tester sa connexion ! À partir de Mac OS 7.5 il est préférable
d'utiliser OpenTransport normalement inclu dans le système.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Claviers canadiens et polices supplémentaires&lt;/strong&gt; pour système 6.0.7 &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Extensions/Fancy_System_6.0.7.dd.img"&gt;[dd.img]&lt;/a&gt;&lt;br&gt;
Ce fichier &lt;em&gt;System&lt;/em&gt; est à placer dans le &lt;em&gt;Dossier Système&lt;/em&gt; en remplacement de l'ancien, il ajoute
les dispositions de clavier ISO Canadien (CSA) et Canada Français en plus du AZERTY français et du
QWERTY US. J'y ai aussi inclu des polices de caractères qui existaient sur les premiers systèmes
Mac et qui ont disparu ensuite : Athens, Cairo, Los Angeles, New York, San Francisco, Seattle, 
Taliesin, Toronto, Venice.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="logiciels"&gt;🎨 Logiciels&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MacPaint 1.4&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/MacPaint_1.4F.macb"&gt;[macbinary]&lt;/a&gt;,
&lt;a href="http://bazar.maya.sh/fichiers/pdf/Macintosh_MacPaint.pdf"&gt;[manuel pdf]&lt;/a&gt;,
en français&lt;br&gt;
La version originale de MacPaint par Bill Atkinson et Susan Kare ! Ce logiciel a défini le standard en terme
d'UI pour tous les éditeurs d'image qui ont suivi. Nécessite que le Mac soit configuré avec l'affichage
en noir et blanc. La loupe ne fonctionne que sur les Mac compacts traditionnels avec un écran en 512x348.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Certaines fonctionnalités de MacPaint sont cachées : par exemple une sélection est redimensionnable
librement en maintenant la touche Commande enfoncée, aussi une sélection est « tamponnable » avec Option.
Il est possible de faire plein d'autres choses (cf. le manuel pdf).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SuperPaint 3.5&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/SuperPaint_3.5.zip"&gt;[dd.img.zip]&lt;/a&gt;&lt;br&gt;
Plus complet que MacPaint et plus léger que Photoshop tout en offrant la couleur et
plein de fonctionnalités étonnantes, c'est mon éditeur d'images préféré pour Mac 68k. L'archive zip
contient 4 images de disquettes DD, il faut toutes les monter puis lancer l'installation depuis
la première disquette : dans &lt;em&gt;Customize&lt;/em&gt; on peut choisir d'installer une version réduite pour
les écrans monochromes. Nécessite un disque dur et 2 Mo de mémoire vive, 68020 ou plus conseillé.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;KidPix 2.1&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/Kid_Pix_2.1_fr.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français&lt;br&gt;
Logiciel de dessin pour enfants avec des bruitages rigolos !! Fonctionne aussi bien en
monochrome qu'en couleurs !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ClarisWorks 2.1&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/ClarisWorks_2.1_fr.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français&lt;br&gt;
Une suite bureautique qui offre traitement de texte, tableur, dessin bitmap, dessin vectoriel
et même une mini base de données sur une seule disquette de 800 Ko ! Nécessite 2 Mo
de mémoire. (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Claris Organizer 2.0&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/Claris_Organizer_2.0Fv1.sit.macb"&gt;[sit.macbinary]&lt;/a&gt; pour système 7, en français&lt;br&gt;
Un agenda électronique je suppose ? (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Claris MacDraw Pro 1.5&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/MacDraw_Pro_1.5Fv1.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français, nécessite QuickDraw 32 bits&lt;br&gt;
Logiciel de dessin vectoriel. Évolution de MacDraw II, lui-même évolution du MacDraw d'Apple, lui-même évolution de LisaDraw. (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Microsoft Word 5.1&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/Word_5.1a_F.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français&lt;br&gt;
Le meilleur traitement de texte selon moi mais la version 5 est plus lente que la 4,
à essayer de préférence sur un 68030 ou plus. (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Microsoft Excel 4&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Logiciels/Excel_4.0_F.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;, en français&lt;br&gt;
Le fameux tableur pour faire du travail productif avec des chiffres et des formules.  (rip perso)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="jeux"&gt;🎲 Jeux&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Shufflepuck Cafe&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/Shufflepuck_Cafe.macb"&gt;[macbinary]&lt;/a&gt;&lt;br&gt;
Un des rares jeux d'arcade pour Macintosh et un de mes préférés toute plateforme confondue !
Fonctionne sur 68000 mais plus fluide avec un CPU plus rapide.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Crystal Quest&lt;/strong&gt; &lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/Crystal_Quest_2.2c.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;&lt;br&gt;
Il faut ramasser des cristaux sans se faire bolosser par les ennemis mais heureusement on peut
leur tirer dessus. Ça se joue à la souris et c'est rigolo !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Prince of Persia&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/Prince_of_Persia_c.sit.macb"&gt;[sit.macbinary couleur]&lt;/a&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/Prince_of_Persia_mono.sit.macb"&gt;[sit.macbinary monochrome]&lt;/a&gt;&lt;br&gt;
Le fameux jeu de plateforme, la version couleur est adaptée aux résolutions LC (512x384) et 640x480.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;SimCity&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/SimCity_1.4c.sit.macb"&gt;[sit.macbinary]&lt;/a&gt;
&lt;a href="http://bazar.maya.sh/fichiers/pdf/Manuel_SimCity.pdf"&gt;[manuel pdf]&lt;/a&gt;
&lt;br&gt;
L'archive contient deux disquettes : la première avec le jeu en monochrome, des villes et des scénarios ;
la deuxième avec le jeu en couleurs et un éditeur de terrain. Nécessite 1 Mo de mémoire.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dungeon of Doom&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/Dungeon_of_Doom.macb"&gt;[macbinary]&lt;/a&gt;&lt;br&gt;
Un vieux RPG graphique avec une vue en tuiles 2D. J'ai testé un peu il a l'air assez cool !
C'est très vieux (1985), il se lance sur le système 6 avec un Macintosh 68000 mais c'est peu
probable qu'il fonctionne sur des machines plus modernes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;The Tinies&lt;/strong&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/The_Tinies_c.sit.macb"&gt;[sit.macbinary couleur]&lt;/a&gt;
&lt;a href="http://bazar.maya.sh/fichiers/mac68k/Jeux/The_Tinies_mono.sit.macb"&gt;[sit.macbinary monochrome]&lt;/a&gt;&lt;br&gt;
Un jeu de plateau inspiré de Sokoban (vous savez que &lt;a href="https://github.com/mayafeur/yass-sokoban"&gt;je kiffe Sokoban&lt;/a&gt;).
Il faut déplacer des espèces de M&amp;amp;Ms sur des cibles de même couleur mais s'ils se croisent ils explosent.
Barre d'espace pour saisir une fripouille, ensuite on la déplace avec les flèches, et encore espace
pour la lâcher. C'est marrant et la version couleur possède aussi des musiques cools !&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="transferer"&gt;📁 Transférer les fichiers&lt;/h2&gt;

&lt;p&gt;Pour utiliser toutes ces pépites sur un vrai Mac le plus simple est d'utiliser un gadget moderne
qu'on peut brancher à l'ordinateur pour émuler un vieux périphérique.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Moi j'utilise le &lt;a href="https://bluescsi.com"&gt;BlueSCSI&lt;/a&gt; qui émule des disques durs,
des lecteurs CD et même une carte réseau DaynaPort qui permet de connecter
le Mac à Internet ! Mes images &lt;code&gt;.hda&lt;/code&gt; et Toast ont été testées avec.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Il existe aussi le &lt;a href="https://www.bigmessowires.com/floppy-emu/"&gt;FloppyEmu&lt;/a&gt; qui émule les lecteurs
de disquettes Apple II et Macintosh. Je n'en possède pas, je pense que pour n'importe quel Mac qui
possède une interface SCSI c'est pas très utile. Mes images de disquettes &lt;code&gt;.img&lt;/code&gt; ont été
testées dans les émulateurs &lt;a href="https://www.gryphel.com/c/minivmac/"&gt;Mini vMac&lt;/a&gt; et &lt;a href="https://snowemu.com"&gt;Snow&lt;/a&gt;
donc elles devraient fonctionner avec le FloppyEmu mais je n'ai pas testé,
envoyez-moi &lt;a href="mailto:_@maya.sh"&gt;un mail&lt;/a&gt; si vous l'avez fait !&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Comment ouvrir les fichiers proposés au téléchargement ici :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Les paquets MacBinary (&lt;code&gt;.macb&lt;/code&gt;) conservent un fichier dans son état d'origine
avec ses métadonnées spécifiques au système de fichiers Macintosh, on peut les décoder
avec l'outil Stuffit !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Les archives &lt;code&gt;.sit&lt;/code&gt; (Stuffit) - format de compression le plus populaire sur Macintosh -
permettent de gagner de la place et de transférer des arborescences complètes.
Les archives ici sont elles-mêmes encapsulées en MacBinary, le logiciel Stuffit s'occupe du décodage
puis de la décompression à la volée.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Les images de disquette &lt;code&gt;.img&lt;/code&gt; peuvent être copiées sur de vraies disquettes,
émulées par le FloppyEmu ou montées comme disquettes virtuelles avec DiskDup Pro (système 6) ou
DiskCopy 6 (système 7).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="principes"&gt;⚙️ Principes du Mac OS classique&lt;/h2&gt;

&lt;h3&gt;Transfert de fichiers et fork de ressources&lt;/h3&gt;
&lt;p&gt;Sur Macintosh classique les fichiers ont deux parties : un fork de données et un fork de ressources.
Le fork de données peut contenir n'importe quoi de manière non structurée, le fork de ressources
contient lui des données structurées pour le Mac : il peut s'agit d'images, de texte, de paramètres...
Lorsqu'un fichier est transféré sur un environnement non Mac (comme un serveur Web) ce fork de ressources est perdu.
par exemple pour une application, le fork de ressources contient énormément de choses comme
des morceaux de code exécutable, des graphismes, les éléments de l'interface utilisateur. Dans ce cas
on doit conserver le fichier en entier avec ses deux forks. Pour faire ça on met les fichiers à
transférer dans une image disque ou dans une archive.&lt;/p&gt;
&lt;p&gt;Certains documents ne contiennent rien dans leur fork de ressources mais ne sont pas reconnues par
leurs applications parce que les métadonnées &lt;em&gt;type&lt;/em&gt; et &lt;em&gt;creator&lt;/em&gt;
ont elles aussi été perdues ; ce ne sont pas des morceaux du fork de ressources, ce sont juste
des métadonnées du système de fichiers (comme la date de création) mais elles sont nécessaires
parce que les applications Macintosh n'utilisent pas les extensions au nom de fichier contrairement à DOS et Windows.
Dans ce genre de cas on peut facilement reconstruire cette métadonnée manuellement dans Resedit (File &amp;gt; Get File Info) ou
automatiquement avec le très mal nommé &lt;a href="https://tinkerdifferent.com/threads/fix-a-fork.3082/"&gt;Fix-a-Fork&lt;/a&gt;. C'est très
utile pour les archives &lt;code&gt;.sit&lt;/code&gt; qui ne seront pas reconnues par Stuffit si elles n'ont pas les bons codes.&lt;/p&gt;
&lt;p&gt;Plusieurs formats d'archive et d'encodage existent pour Macintosh, ceci est une liste des plus courants :&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Formats d'image disque à monter :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DiskCopy 4 (&lt;code&gt;.dc42&lt;/code&gt;, &lt;code&gt;.img&lt;/code&gt;, &lt;code&gt;.image&lt;/code&gt;), le plus courant : se monte avec DiskDup Pro et DiskCopy 6&lt;/li&gt;
&lt;li&gt;DiskCopy 6 (&lt;code&gt;.img&lt;/code&gt;, &lt;code&gt;.image&lt;/code&gt;) : se monte avec DiskCopy 6&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Formats d'encapsulation pour conserver les deux forks (fichier unique) :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MacBinary (&lt;code&gt;.bin&lt;/code&gt;, &lt;code&gt;.macbin&lt;/code&gt;) : s'ouvre avec l'application du même nom,
&lt;a href="https://www.gryphel.com/c/minivmac/extras/binunpk/"&gt;binUnpk&lt;/a&gt; (open source), Stuffit, BinHex 5.0 et plusieurs clients FTP&lt;/li&gt;
&lt;li&gt;BinHex (&lt;code&gt;.hqx&lt;/code&gt;) : pareil que MacBinary mais compatible ASCII pour faciliter l'envoi sur les vieux
tuyaux (certains FTP et Usenet ?), les fichiers prennent du coup plus de place et sont plus longs à décoder ; s'ouvre avec BinHex 4.0,
&lt;a href="https://tinkerdifferent.com/threads/new-application-tiny-transfer-binhex-hqx-conversion-and-file-transfer.3603/"&gt;Tiny Transfer&lt;/a&gt; (freeware),
et Stuffit notamment&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;L'outil SD Transfert du BlueSCSI ajoute aux fichiers un code type dérivé de l'extension et
&lt;a href="https://github.com/erichelgeson/BlueSCSI-Toolbox/issues/19"&gt;cette fonctionnalité est boguée&lt;/a&gt;
avec les &lt;code&gt;.sit&lt;/code&gt; mais aussi les &lt;code&gt;.bin&lt;/code&gt; et &lt;code&gt;.macbin&lt;/code&gt; empêchant de
les ouvrir avec Stuffit. On peut contourner le problème avec les &lt;code&gt;.sit&lt;/code&gt; en utilisant Fix-a-Fork
et avec les &lt;code&gt;.bin&lt;/code&gt; et &lt;code&gt;.macbin&lt;/code&gt; en utilisant binUnpk (Fix-a-Fork étant aussi bogué dans ce cas
de figure précis). Je contourne le problème à la source en vous proposant des images MacBinary
sous l'extension &lt;code&gt;.macb&lt;/code&gt; qui n'est pas standard.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Formats d'archive (contenant plusieurs fichiers) :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stuffit &amp;lt; 5 (&lt;code&gt;.sit&lt;/code&gt;) : se décompresse avec tous les outils Stuffit (abandonware)&lt;/li&gt;
&lt;li&gt;Stuffit 5 (&lt;code&gt;.sit&lt;/code&gt;) : se décompresse avec Stuffit 5.5, les anciennes versions affichent une erreur indiquant
que le fichier est corrompu&lt;/li&gt;
&lt;li&gt;Mar (&lt;code&gt;.mar&lt;/code&gt;) : obscur équivalent à MacBinary mais sous forme d'archive, nécessite l'utilitaire du même nom&lt;/li&gt;
&lt;li&gt;Compact Pro (&lt;code&gt;.cpt&lt;/code&gt;) : assez peu utilisé, les fichiers s'ouvrent aussi avec Stuffit&lt;/li&gt;
&lt;li&gt;Self-extract archive (&lt;code&gt;.sea&lt;/code&gt;) : archive exécutable sauf si on a perdu son fork de ressource, dans ce
cas elle peut tout de même s'ouvrir avec Stuffit après Fix-a-Fork&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans le cas d'une archive &lt;code&gt;.sit&lt;/code&gt; encodée en BinHex ou en MacBinary
Stuffit enchaine automatiquement le décodage puis la décompression.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;Le minimum pour ouvrir la plupart des fichiers :&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sur le système 6 avec un 68000 : Stuffit Expander 3.5 et DiskDup Pro&lt;/li&gt;
&lt;li&gt;Sur le système 7 avec un 68020 ou plus : Stuffit Expander 5.5 et DiskCopy 6 &lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Dossier Système&lt;/h3&gt;
&lt;p&gt;Le logiciel système est contenu entièrement dans un unique &lt;em&gt;Dossier Système&lt;/em&gt; situé à la racine
du volume (disque dur, disquette...). Toutes les disquettes bootables contiennent ce dossier, il
suffit de le copier sur un autre volume pour le rendre lui aussi bootable.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dans le cas où la manip échoue (pas de boot), déplacer ailleurs &lt;em&gt;System&lt;/em&gt; puis le remettre
dans le &lt;em&gt;Dossier Système&lt;/em&gt; fait le taf généralement.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Pour installer un
système complet sur son disque dur, c'est quand même mieux d'utiliser le programme d'installation,
ça permet de choisir facilement les composants qu'on souhaite y mettre
sans devoir faire le tri manuellement.&lt;/p&gt;
&lt;p&gt;Un dossier système est valide s'il contient au moins &lt;em&gt;Finder&lt;/em&gt; et &lt;em&gt;System&lt;/em&gt;, il a alors
une icône spécifique. Techniquement le dossier système peut avoir n'importe quel nom et se
situer n'importe où sur le disque, il est marqué d'une manière particulière (et mystérieuse)
dans le système de fichiers.&lt;/p&gt;
&lt;h3&gt;Extensions et tableaux de bord&lt;/h3&gt;
&lt;p&gt;Les extensions ajoutent des fonctionnalités au système, les tableaux de bord aussi mais ces derniers
offrent en plus une interface pour effectuer des réglages. Les extensions sont représentées sous forme
de pièce de puzzle et doivent se trouver dans le dossier &lt;em&gt;Extensions&lt;/em&gt; du &lt;em&gt;Dossier Système&lt;/em&gt; situé à
la racine du disque. Les tableaux de bord doivent eux se trouver dans &lt;em&gt;Tableaux de bord&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Lorsqu'une extension ou un tableau de bord est glissé sur le &lt;em&gt;Dossier Système&lt;/em&gt; le Finder propose
de déplacer l'élément automatiquement dans le bon dossier. Parfois l'élément peut avoir besoin
d'être accompagné par un dossier qu'il faut déplacer manuellement (par exemple le dossier des écrans de veille
d'After Dark qui doit aussi aller dans &lt;em&gt;Tableaux de bord&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Les extensions (et tableaux de bord) sont chargées en mémoire en permanence, sur des systèmes
avec peu de mémoire disponible ça peut vite la saturer. Il vaut mieux ne mettre dans les dossiers
&lt;em&gt;Extensions&lt;/em&gt; et &lt;em&gt;Tableaux de bord&lt;/em&gt; que ce que l'on utilise et garder le reste à côté par exemple
dans des dossiers &lt;em&gt;Extensions désactivées&lt;/em&gt; et &lt;em&gt;Tableaux de bord désactivés&lt;/em&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Il est possible qu'une extension empêche le démarrage du système, dans ce cas démarrer en maintenant
la touche Maj enfoncée désactive temporairement toutes les extensions !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les dossiers &lt;em&gt;Extensions&lt;/em&gt; et &lt;em&gt;Tableaux de bord&lt;/em&gt; n'existent qu'à partir du système 7,
sur le 6 tout est en vrac dans le &lt;em&gt;Dossier Système&lt;/em&gt;.&lt;/p&gt;
&lt;h3&gt;La ROM et la PRAM&lt;/h3&gt;
&lt;p&gt;Le premier Macintosh de 1984 a 128 Ko de mémoire vive, pour la soulager les composants de base du logiciel
système ont été mis dans une autre puce, la ROM (&lt;em&gt;read only memory&lt;/em&gt;). À l'origine d'une taille de 64 Ko,
la ROM contient des routines (fonctions) pour lire et écrire sur les disques, afficher du texte et des formes à l'écran
(les fameuses routines QuickDraw)
et effectuer diverses tâches de base d'un système d'exploitation. Les routines sont accessibles à travers
une table d'adressage qui elle est en mémoire vive, ça permet de dérouter des appels à la ROM pour patcher certaines routines.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le Macintosh Classic contient un système complet avec un Finder en ROM, on peut booter dessus
en appuyant sur Option-Commande-X-O au démarrage.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;La ROM du Macintosh est analogue au BIOS d'un PC à la différence que les routines du BIOS,
plus primitives, ne sont réellement utilisées que par DOS. L'intégration du logiciel système
et de la ROM fait que cette dernière ne possède pas d'équivalent au &lt;em&gt;setup&lt;/em&gt; d'un BIOS. Les réglages
de l'ordinateur comme la date/heure et le disque de démarrage
se font depuis les différents tableaux de bord du système en cours d'utilisation. Vous pouvez installer
le système 7 sur un disque dur puis changer le volume sonore ou le réglage de la souris
puis booter le système 6 depuis une
disquette et vous verrez que le réglage est synchronisé. Ces réglages sont stockés dans une
autre mémoire, la PRAM (&lt;em&gt;parameter ram&lt;/em&gt;), et sont persistants par la pile dans la carte mère.
Ça explique qu'il faille refaire le réglage de la souris à chaque démarrage sur un Mac dont la pile est morte,
et d'ailleurs attention aux vieilles batteries parce qu'elles ont tendance à couler et l'acide
détruit la carte mère.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;L'astuce magique pour résoudre certains problèmes est de réinititaliser la PRAM en appuyant
sur Option-Commande-P-R au démarrage ; le Mac refait alors &lt;em&gt;bong&lt;/em&gt; une deuxième fois.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Les disquettes&lt;/h3&gt;
&lt;p&gt;Les Mac 128K et 512K ne gèrent que les disquettes simple densité de 400 Ko. Le Mac 512Ke, le Plus,
le premier Macintosh II ainsi que le premier SE supportent en plus les disquettes de double
densité de 800 Ko. Les machines plus modernes dont le Macintosh SE FDHD (ou SuperDrive), les autres
Mac II* et le SE/30 entre autres gèrent en plus les disquettes HD de 1,44 Mo.&lt;/p&gt;
&lt;p&gt;La capacité d'un Mac à gérer tel ou tel type de disquette dépend évidemment du lecteur branché
à l'ordinateur mais aussi de deux autres choses : la ROM ainsi que le contrôleur du lecteur, la puce
IWM (&lt;em&gt;integrated woz machine&lt;/em&gt;) ou SWIM (&lt;em&gt;super woz integrated machine&lt;/em&gt;) à l'ère des disquettes HD.&lt;/p&gt;
&lt;p&gt;Par exemple un Macintosh SE de première génération sur lequel on connecte un lecteur HD ne sera capable de lire
et d'écrire que des disquettes de 400 ou 800 Ko. C'est à prendre en compte lors de l'utilisation
d'un FloppyEmu.&lt;/p&gt;
&lt;p&gt;Avant l'arrivée du SCSI, Apple proposait un disque dur externe qui se connectait à l'interface
du lecteur de disquettes : le HD20.&lt;/p&gt;
&lt;h3&gt;SCSI et volume de démarrage&lt;/h3&gt;
&lt;p&gt;Le port DB25 à l'arrière des Mac &lt;strong&gt;n'est pas un port parallèle&lt;/strong&gt;, ce n'est pas compatible électriquement
et brancher n'importe quoi dedans peut endommager le contrôleur. Il s'agit d'un port SCSI !
À partir du Macintosh Plus, tous les Mac 68k disposent d'un bus SCSI. Le port DB25 à l'arrière de la
machine est connecté sur le même bus que le port 50 broches interne sur lequel est branché le
disque dur pour les machines équipées.&lt;/p&gt;
&lt;p&gt;Différents périphériques SCSI peuvent être utilisés
en même temps par l'ordinateur en étant chainés les uns à la suite des autres. Chaque périphérique
a un numéro entre &lt;code&gt;0&lt;/code&gt; et &lt;code&gt;7&lt;/code&gt;, ce dernier numéro est réservé par le Macintosh. On peut donc connecter
au maximum 7 périphériques SCSI sur une machine, ils seront numérotés entre &lt;code&gt;0&lt;/code&gt; et &lt;code&gt;6&lt;/code&gt;, sachant
que le disque dur interne (s'il y en a un) portera le numéro &lt;code&gt;0&lt;/code&gt;. C'est bien de le savoir pour
l'utilisation du BlueSCSI où on doit attribuer soi-même les numéros des périphériques émulés.&lt;/p&gt;
&lt;p&gt;Après une installation, une réinitialisation de la PRAM ou un changement de batterie c'est une
bonne chose d'aller dans le tableau de bord &lt;em&gt;Démarrage&lt;/em&gt; et de cliquer sur le volume de démarrage,
ça évite à l'ordinateur de chercher un volume bootable sur le bus ! Sinon par défaut l'ordinateur
démarre sur le premier volume bootable en commençant par le numéro le plus haut.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Pour forcer l'ordinateur à booter sur le premier volume SCSI bootable plutôt que sur le volume
paramétré, il faut maintenir les touches Option-Commande-Maj-Retour au démarrage ; ça peut être
utile si le système installé est cassé.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="outils"&gt;🚀 Outils pour les machines d'aujourd'hui&lt;/h2&gt;

&lt;h3&gt;Émulateurs&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Mini vMac&lt;/strong&gt;
&lt;a href="https://www.gryphel.com/c/minivmac/"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Émulateur de Macintosh 68k simple, il suffit d'avoir une ROM
nommée &lt;code&gt;Mac OS ROM&lt;/code&gt; dans le dossier de l'application sur laquelle on glisse dessus
une image de disquette ou de disque dur pour démarrer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Basilisk II&lt;/strong&gt;
&lt;a href="https://basilisk.cebix.net"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Émulateur de Macintosh couleur 68020, 68030 et 68040.
Prend en charge les CD-ROM, le réseau et permet de faire des dossiers partagés avec le système hôte.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Snow&lt;/strong&gt;
&lt;a href="https://snowemu.com"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Émulateur plus complet pour les 68000 jusqu'au SE FDHD et le Macintosh II. Il offre
une UI très chouette qui permet de connaître le contenu des registres, de la RAM et de déboguer.
Il permet de lire des images disques de plusieurs formats et de les enregistrer au format Moof.
Contrairement aux deux autres il émule à vitesse réelle mais permet de faire pause ou d'accélérer.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Roms pour émulateurs&lt;/strong&gt;
&lt;a href="https://archive.org/details/macroms"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Cette archive contient tout plein de roms !&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Utilitaires pour macOS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Disk Jockey&lt;/strong&gt;
&lt;a href="https://diskjockey.onegeekarmy.eu"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Outil pour créer et convertir des images de disquette et disque durs pour Mac, Apple II, Atari ST
et Amiga entre autres. Utile pour convertir les images &lt;code&gt;.dsk&lt;/code&gt; de certains émulateurs en &lt;code&gt;.hda&lt;/code&gt;
pour le BlueSCSI.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Applesauce&lt;/strong&gt;
&lt;a href="https://applesaucefdc.com/software/"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Logiciel pour le contrôleur de disque du même nom, on peut l'utiliser sans le matériel
juste pour analyser des images de disquette et convertir les images Moof au format DC42.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Utilitaires pour Windows&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;HFS Explorer&lt;/strong&gt;
&lt;a href="https://www.catacombae.org/hfsexplorer/"&gt;[lien]&lt;/a&gt;&lt;br&gt;
Permet d'ouvrir des images contenant un système de fichiers HFS.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="generations"&gt;📕 Différentes gammes et générations de Mac 68k&lt;/h2&gt;

&lt;h3&gt;CPU, MMU et FPU : les trois mousquetaires de la carte mère&lt;/h3&gt;
&lt;p&gt;Les Macintosh 68k ont utilisé les CPU suivants :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;68000 (Macintosh 128K, 512K, 512Ke, Plus, SE, Classic, Portable, PowerBook 100)&lt;/li&gt;
&lt;li&gt;68020 (Macintosh II, LC)&lt;/li&gt;
&lt;li&gt;68030 (Macintosh II*, LC II, LC III, SE/30, Classic II, Color Classic, PowerBook 140-180 et Duo 210-270)&lt;/li&gt;
&lt;li&gt;68040/68LC40 (Macintosh LC 475, LC 5*, Quadra, PowerBook 190, 520-550 et Duo 280)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Deux composants sont associés (ou pas) au CPU : le MMU (&lt;em&gt;memory management unit&lt;/em&gt;) permet
à l'ordinateur de gérer la mémoire virtuelle ainsi que plus de mémoire physique que ce que le
CPU permet d'adresser directement, le FPU (&lt;em&gt;floating point unit&lt;/em&gt;) permet d'accélérer
le calcul des nombres en virgule flottante. La présence de l'un ou l'autre peut impacter la
compatibilité de certaines applications avec l'ordinateur bien que les applications qui refusent de
démarrer sans FPU sont très rares.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Les Mac 68000 ne possèdent ni MMU ni FPU ;&lt;/li&gt;
&lt;li&gt;le premier Macintosh II a un FPU mais pas un vrai MMU, le LC n'a ni l'un ni l'autre ;&lt;/li&gt;
&lt;li&gt;les Mac 68030 ont tous un MMU intégré à la puce du processeur et parfois un FPU sur une autre puce ;&lt;/li&gt;
&lt;li&gt;les Mac 68040/68LC40 ont tous un MMU intégré et les 68040 aussi un FPU intégré.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les processeurs 68k fonctionnent à des vitesses d'horloge différentes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;tous les Mac 68000 fonctionnent à 8 MHz (sauf le Macintosh Portable à 16 MHz !) ;&lt;/li&gt;
&lt;li&gt;les 68020 sont à 16 MHz ;&lt;/li&gt;
&lt;li&gt;les 68030 sont à 16, 20, 25, 33 ou 40 MHz ;&lt;/li&gt;
&lt;li&gt;les 68040/68LC40 sont à 20, 25, 33 ou 40 MHz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Les Macintosh LC475 et LC575 sont overclockables de manière stable jusqu'à
40 MHz simplement par l'installation &lt;a href="https://github.com/Phipli/Soft-475-Overclock?tab=readme-ov-file"&gt;d'une extension&lt;/a&gt; !
Cf les topics sur &lt;a href="https://68kmla.org/bb/index.php?threads/overclock-lc475-p475-q605-without-soldering-or-spicy-o-clock.47946/"&gt;68kmla&lt;/a&gt;
et &lt;a href="https://tinkerdifferent.com/threads/software-only-overclock-for-lc475-lc575-quadra-605.3798/"&gt;TinkerDifferent&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Les premiers Mac ont des cartes mères avec des bus de données 16 bits parce que ça correspond
à l'architecture du processeur 68000.
Les 68020 et suivants sont des processeurs totalement
32 bits (registres, bus de données et d'adresses) mais pour des raisons d'économie certaines
machines gardent un bus 16 bits : LC, LC II, Classic II et Color Classic. Avoir un bus 16 bits
plutôt que 32 bits entraine une perte de performance de 25% environ par rapport à une machine
similaire avec un bus 32 bits mais n'influe pas sur la compatibilité des logiciels.&lt;/p&gt;
&lt;h3&gt;Résolution d'écran et accélération graphique&lt;/h3&gt;
&lt;p&gt;Les Macintosh compacts monochromes ont une résolution de
512x342. Le Macintosh II, premier Mac couleur, a une résolution minimale de 640x480 à sa sortie.
Le LC qui arrive 3 ans après pour offrir une alternative moins chère est vendu en bundle avec un moniteur de 12"
à la résolution étrange de 512x384, ce qui rend certaines applications couleur conçues pour le Mac II
incompatibles (tout ne rentre pas sur l'écran). Le Color Classic reprend cette résolution de 512x384.&lt;/p&gt;
&lt;p&gt;Le premier Macintosh partage le même 68000 que d'autres machines comme l'Amiga, mais là où ce dernier
possède d'autres puces pour fournir une accélération graphique, le Macintosh n'offre rien de ce genre.
Le bitmap d'affichage est stocké directement en mémoire vive et c'est la responsabilité du CPU
de mettre à jour les pixels en mémoire. Ensuite le circuit vidéo lit la mémoire 16 ou 32 bits (SE) à la fois pour rafraichir
l'écran en empêchant le CPU d'accéder à la mémoire. (&lt;em&gt;Guide to the Macintosh Family Hardware 2nd edition, pp. 66, 401&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;Le Macintosh II possède une vraie carte vidéo avec de la mémoire dédiée qui permet d'afficher des choses
à l'écran plus rapidement puisque le circuit vidéo n'a plus besoin de partager l'accès à la mémoire
principale avec le CPU, les deux peuvent lire et écrire dans la mémoire vidéo en même temps. (&lt;em&gt;p. 406&lt;/em&gt;)
Un autre composant fait son entrée fracassante : le CLUT (&lt;em&gt;color look-up table&lt;/em&gt;) qui contient un tableau
de correspondances entre les couleurs du mode de l'ordinateur (monochrome, 16 couleurs, 256 couleurs...)
et celles affichées à l'écran. Les Mac SE/30 et Classic II possèdent en partie cette circuiterie pour
des raisons de performances et de compatibilité. Ça explique la présence de Color Quickdraw en ROM sur ces
machines.&lt;/p&gt;
&lt;p&gt;Comme sur d'autres plateformes, les couleurs sur Mac fonctionnent en
&lt;em&gt;palettes&lt;/em&gt;, lorsqu'un jeu demande à passer en 16 couleurs c'est parce qu'il peut définir librement
quelles vont être ces 16 couleurs. Le système propose une palette de couleurs par défaut mais le jeu
peut très bien choisir 16 teintes de rose par exemple.&lt;/p&gt;
&lt;h3&gt;Compatibilité des applications&lt;/h3&gt;
&lt;p&gt;La compatibilité d'une application avec un ordinateur dépend de :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;version du logiciel système ;&lt;/li&gt;
&lt;li&gt;présence des routines Color QuickDraw en ROM ;&lt;/li&gt;
&lt;li&gt;résolution de l'écran et nombre de couleurs gérées ;&lt;/li&gt;
&lt;li&gt;présence d'un MMU ;&lt;/li&gt;
&lt;li&gt;présence d'un FPU (dans de rares cas).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En général qui peut le plus peut le moins sauf que certains programmes du début de l'ère Macintosh
au milieu des années 80 tapaient à des endroits fixes dans la mémoire par exemple pour dessiner à l'écran
plutôt qu'utiliser les routines prévues à cet effet. Quand le mappage de la mémoire a changé dans
les Mac plus récents ça a posé problème.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;a href="#"&gt;Retour au sommaire&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="ressources"&gt;🔗 Ressources&lt;/h2&gt;

&lt;h3&gt;Guides&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://machut.net/mirrors/system6heaven/index.html"&gt;System 6 Heaven&lt;/a&gt;, pour profiter à fond du système 6 !&lt;/li&gt;
&lt;li&gt;&lt;a href="https://jcs.org/system6c"&gt;C programming on System 6&lt;/a&gt;, tuto de développement C sur un vrai Macintosh Plus en vidéo&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Logiciels&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://macintoshgarden.org"&gt;Macintosh Garden&lt;/a&gt;, énorme collection de jeux et logiciels&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.macintoshrepository.org"&gt;Macintosh Repository&lt;/a&gt;, l'autre énorme collection de jeux et logiciels&lt;/li&gt;
&lt;li&gt;&lt;a href="https://winworldpc.com/library/operating-systems"&gt;WinWorld&lt;/a&gt;, collection d'OS et logiciels pour Mac et PC&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.grenier-du-mac.net/index.htm"&gt;Grenier du Mac&lt;/a&gt;, jeux et logiciels dont beaucoup en français&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bitcider.com/index.php?nav=main"&gt;BitCider&lt;/a&gt;, petite collection de jeux et logiciels en anglais&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cdbvs-apple.fr/macos.htm"&gt;CDBVS Apple&lt;/a&gt;, vieux site avec plein d'OS disponibles en français et des utilitaires&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.gryphel.com/c/sw/index.html"&gt;Software for Macintosh Plus and Mini vMac&lt;/a&gt;, sélection intéressante de logiciels&lt;/li&gt;
&lt;li&gt;&lt;a href="https://websites.umich.edu/~archive/"&gt;The U-M Software Archives&lt;/a&gt;, des archives pour Mac mais aussi Apple II, Atari, etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Documents&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://vintageapple.org"&gt;Vintage Apple&lt;/a&gt;, plein de livres techniques d'époque et de manuels à télécharger en PDF&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.absurdengineering.org"&gt;Monolithic Macintosh Technical Archive&lt;/a&gt;, encore des documents et aussi quelques logiciels&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.macdat.net/index.html"&gt;The MacDat Network&lt;/a&gt;, beaucoup de manuels de service et de schémas pour ordinateurs et périphériques Macintosh&lt;/li&gt;
&lt;li&gt;[PDF] &lt;a href="http://absurdengineering.org/library/MASTER%20Developer%20Notes/Tech%20Notes%20-%20Hardware%20Components/HW26-Mac%20Quadra%20Built-In%20Video.pdf"&gt;HW 26 - Macintosh Quadra Built-In Video&lt;/a&gt;,
document essentiel &lt;a href="https://imagej.net/nih-image/download/documents/quadra_video.txt"&gt;issu d'un post Usenet&lt;/a&gt; pour comprendre les fonctionnalités vidéo de tous les Macintosh couleurs sortis &lt;em&gt;après&lt;/em&gt;
le Mac II, ce PDF décrit essentiellement comment réaliser un adaptateur VGA facilement (votre serviteuse &lt;a href="https://eldritch.cafe/@mayasynth/114446002137542378"&gt;a testé&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Culture&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://folklore.org"&gt;Folklore&lt;/a&gt;, histoires et anecdotes sur le développement du Macintosh par ceux qui l'ont créé&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ti99.com/archives/collecti.htm"&gt;Apple Forever&lt;/a&gt;, musée virtuel Apple, le site est un travail inachevé figé dans le temps&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ztoz.blog/posts/macpaint-source-code/"&gt;Investigating MacPaint's Source Code&lt;/a&gt;, analyse historique et technique du code de MacPaint&lt;/li&gt;
&lt;li&gt;&lt;a href="http://basalgangster.macgui.com/RetroMacComputing/The_Long_View/The_Long_View.html"&gt;The Long View&lt;/a&gt;, blog sur le Macintosh avec de beaux articles historiques et techniques&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Numériser des cassettes VHS avec du vieux matériel et du logiciel libre</title><link href="https://maya.sh/carte-acquisition-vhs.html" rel="alternate"/><published>2021-01-11T00:00:00+01:00</published><updated>2021-01-11T00:00:00+01:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2021-01-11:/carte-acquisition-vhs.html</id><summary type="html">&lt;p&gt;En anglais on a l'expression &lt;em&gt;rabbit hole&lt;/em&gt; pour parler d'un trou de lapin dans lequel on s'engouffre lorsqu'on veut résoudre un problème précis et qu'on se retrouve à devoir rechercher beaucoup de choses et faire face à des problématiques subséquentes.&lt;/p&gt;
&lt;p&gt;Sauvegarder une vieille cassette vidéo fait partie de ces choses-là …&lt;/p&gt;</summary><content type="html">&lt;p&gt;En anglais on a l'expression &lt;em&gt;rabbit hole&lt;/em&gt; pour parler d'un trou de lapin dans lequel on s'engouffre lorsqu'on veut résoudre un problème précis et qu'on se retrouve à devoir rechercher beaucoup de choses et faire face à des problématiques subséquentes.&lt;/p&gt;
&lt;p&gt;Sauvegarder une vieille cassette vidéo fait partie de ces choses-là. Ça peut paraître simple de prime abord : on branche la sortie vidéo d'un magnétoscope sur un boitier d'acquisition relié à un ordinateur, on lance le logiciel, on démarre le magnétoscope et ça roule (ça déroule plutôt). En réalité les choses ont vite fait de se gâter.&lt;/p&gt;
&lt;p&gt;Il y a quelques mois je suis tombée &lt;a href="https://mtlynch.io/digitizing-1/"&gt;sur cet article terrifiant&lt;/a&gt; d'un homme essayant de numériser ses vidéos de famille. Après avoir galéré un bon moment il a préféré tout confier à un professionel. J'ai eu plus de chance avec mes expérimentations et mon matériel, alors je me suis dit que ce serait bien de raconter ça un petit peu.&lt;/p&gt;
&lt;p&gt;Je n'ai pas de vidéo familiale à numériser mais ce qui m'intéresse c'est de sauvegarder en bonne qualité les génériques de télévision, de programmes, les éléments d'habillage graphique, les jingles et les mires ; des choses qui souvent ne sont pas toujours documentées ni archivées, du moins pas de manière publique et pratique.&lt;/p&gt;
&lt;h2&gt;Le matériel&lt;/h2&gt;
&lt;div class="float-right"&gt;
    &lt;img src="media/carte-acquisition-vhs/dvc100.jpg" alt="Le boitier USB Dazzle DVC100"&gt;
&lt;/div&gt;

&lt;p&gt;Le magnétoscope que j'ai utilisé est un Panasonic Omnivision stéréo Hi-Fi de la fin des années 90. C'est une bonne période pour ces appareils, ils sont assez récents pour ne pas être trop usés, possèdent des fonctionnalités sophistiquées mais ils sont de meilleure qualité que les derniers appareils fabriqués dans les années 2000.&lt;/p&gt;
&lt;p&gt;Pour le boitier d'acquisition, j'ai ce vieux Dazzle DVC100 de Pinnacle depuis presque 10 ans. À l'origine il me servait à regarder Canal+ en analogique à l'aide de &lt;a href="https://fr.wikipedia.org/wiki/K!TV"&gt;K!TV&lt;/a&gt; avec le fichier &lt;code&gt;key.txt&lt;/code&gt; et le plugin qui avec, la carte était connectée à un &lt;em&gt;démodulateur&lt;/em&gt; satellite.&lt;/p&gt;
&lt;h2&gt;Premiers essais&lt;/h2&gt;
&lt;p&gt;Étant donné l'âge du boitier, j'ai commencé par installer les pilotes d'époque sur un ordinateur Windows.&lt;/p&gt;
&lt;p&gt;J'ai commencé par tester l'acquisition par VLC et premier problème : pas de son. Évidemment je n'ai plus le disque du logiciel de capture propriétaire et payant inclus avec. Après quelques expérimentations avec des choses horribles comme &lt;a href="http://www.amarectv.com/english/amarectv_e.htm"&gt;AmaRecTV&lt;/a&gt;, je suis partie sur &lt;a href="http://www.virtualdub.org/"&gt;VirtualDub&lt;/a&gt; qui miraculeusement recevait le son de la carte. Problème, il y avait des saccades et le son se désynchronisait.&lt;/p&gt;
&lt;p&gt;En faisant des recherches j'ai découvert que la solution recommandée était d'utiliser une carte d'acquisition de qualité genre Elgato à plus de 100€, ce que je trouve cher. Et avec du matériel prestigieux le problème aurait-il été résolu pour autant ? Pas sûr. J'ai lu que des problèmes de régularité dans la lecture pourraient provoquer des sauts de trame dans la capture. La magnétoscope est un dispositif mécanique avec des engrenages et des courroies qui s'usent. Pour régler le problème, il faudrait un magnétoscope doté d'un TBC (&lt;em&gt;timebase corrector&lt;/em&gt;). Il existe des TBC ligne (pour corriger les effets de tremblement) et des TBC trame. On tape dans du matériel professionnel compliqué à trouver et cher en occasion (à moins de se lever à 6h du matin pour se taper toutes les brocantes et espérer avoir de la chance).&lt;/p&gt;
&lt;p&gt;La difficulté à avoir du son m'a quand même fait douter sérieusement des vieux pilotes officiels. Après quelques recherches je suis tombée sur un pilote plus récent mis à disposition sur Reddit. Un progrès : j'ai pu avoir du son avec VLC. Mais là le comportement était étrange. En faisant une capture muette l'image était fluide. En activant le son la capture devenait saccadée, les saccades provoquant évidemment des sauts de trames et la désynchronisation du son.&lt;/p&gt;
&lt;h2&gt;Linux à la rescousse&lt;/h2&gt;
&lt;p&gt;Finalement j'ai sorti la clé USB de ma distribution fétiche, à savoir &lt;a href="https://getfedora.org/fr/"&gt;Fedora&lt;/a&gt;. L'installation était bouclée en 15 minutes montre en main. J'ai installé vite fait VLC et puis j'ai branché la carte. Non seulement elle est reconnue de suite, mais en plus le son fonctionne correctement et tout est fluide. 🥳&lt;/p&gt;
&lt;p&gt;Je me suis senti un peu conne parce que j'aurais du essayer ça dès le début plutôt que me pourrir la vie avec les pilotes pour Windows comme si on était en 1999. Malgré l'absence de TBC, le résultat est très correct tant que la cassette n'est pas trop usée. VLC fait une capture brute du flux vidéo, sans compression ; ça prend vite beaucoup de place donc après avoir capturé mes extraits je les compresse avec &lt;a href="https://handbrake.fr/"&gt;Handbrake&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Méthode en résumé&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Brancher le magnétoscope sur la carte d'acquisition elle-même connectée au PC ;&lt;/li&gt;
&lt;li&gt;mettre en route le magnétoscope ;&lt;/li&gt;
&lt;li&gt;ouvrir VLC, aller dans &lt;em&gt;Média&lt;/em&gt; &amp;gt; &lt;em&gt;Ouvrir un périphérique de capture&lt;/em&gt; ;&lt;/li&gt;
&lt;li&gt;choisir les entrée audio et vidéo correspondant à la carte et spécifier explicitement la définition ;&lt;/li&gt;
&lt;li&gt;le flux vidéo doit s'afficher, sur un magnétoscope moderne en général un écran bleu : activer la barre d'outils spéciale enregistrement (&lt;em&gt;Vue&lt;/em&gt; &amp;gt; &lt;em&gt;Contrôles avancés&lt;/em&gt;) ;&lt;/li&gt;
&lt;li&gt;appuyer sur le bouton 🔴 ;&lt;/li&gt;
&lt;li&gt;démarrer la lecture sur le magnétoscope ;&lt;/li&gt;
&lt;li&gt;appuyer encore sur 🔴 pour arrêter ;&lt;/li&gt;
&lt;li&gt;une fois qu'on a un bon gros fichier (par défaut enregistré dans ~/Vidéos), il faut l'encoder avec Handbrake, on peut en profiter pour le désentrelacer par la même occasion.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Concernant la définition&lt;/h2&gt;
&lt;p&gt;Pour la définition verticale, il faut choisir en fonction du standard vidéo, à savoir &lt;strong&gt;480&lt;/strong&gt; lignes pour du NTSC ou &lt;strong&gt;576&lt;/strong&gt; lignes pour du PAL/SÉCAM, pour une image complète. On parle ici des lignes visibles qui sont capturées par le dispositif, à ne pas confondre avec le nombre total de 525 ou 625 lignes (respectivement) comprenant &lt;a href="https://en.wikipedia.org/wiki/Vertical_blanking_interval"&gt;le VBI&lt;/a&gt; sur la source analogique, ce qui ne nous intéresse pas.&lt;/p&gt;
&lt;p&gt;Pour la définition horizontale c'est plus compliqué. En analogique il n'y a pas de pixels mais on parle de points par ligne, définissant une certaine netteté. Il est de coutume de dire que les VHS « ont 300 points par ligne ». Parfois par abus de langage on entend même des choses confuses comme « les VHS ont une définition de 300 lignes » ce qui est faux : le nombre de lignes ne change jamais.&lt;/p&gt;
&lt;p&gt;La précision de chaque ligne est variable en fonction du type de magnétoscope utilisé pour enregistrer (VHS, S-VHS, Betamax...), de la source d'origine, du standard vidéo et de la qualité de la cassette.&lt;/p&gt;
&lt;p&gt;Il est de coutume de numériser le signal avec des lignes de 720 pixels, quel que soit le nombre de lignes. C'est souvent comme ça sur les DVD. Un DVD en NTSC contient en général une vidéo à 720x480, pourtant ce n'est pas un ratio de 4:3, d'ailleurs c'est la même définition pour les DVD en 16:9. &lt;strong&gt;Il n'y a pas de rapport entre la définition en pixels et le ratio de l'image&lt;/strong&gt;. Le ratio est défini séparément dans le fichier et le lecteur étire l'image correctement. On parle alors de pixels rectangulaires.&lt;/p&gt;
&lt;p&gt;Pour une capture européenne, si la carte d'acquisition le permet vous pourrez peut-être numériser en 768 pixels de large. Si c'est le cas tant mieux, ça donnera des pixels carrés pour un ratio de 4:3 et c'est plus précis que 720 pixels. Dans tous les cas c'est mieux de prendre la valeur la plus haute.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/carte-acquisition-vhs/dvc100-ratio.svg" alt="Comparaison entre des images en anamorphose et des images au bon ratio"&gt;
&lt;/figure&gt;

&lt;h2&gt;Fréquence d'image&lt;/h2&gt;
&lt;p&gt;C'est mieux de prendre la plus haute possible &lt;em&gt;relativement au standard vidéo&lt;/em&gt; pour ne pas avoir de saccades : c'est-à-dire maximum &lt;strong&gt;25&lt;/strong&gt; images/s en Europe ou &lt;strong&gt;29,97&lt;/strong&gt; pour du NTSC. En vidéo analogique traditionnellement on transmet une ligne sur deux à chaque trame. On transmet toutes les lignes paires, elles s'affichent sur la télévision qui laisse un vide à la place de chaque ligne impaire, puis à la trame suivante on fait l'inverse. Il y a respectivement 50 ou 59,94 trames par seconde. Lors de la capture vidéo, les deux dernières trames sont assemblées, résultant en une image entière assez laide avec un effet peigne. Au moment de l'encodage on va pouvoir faire un désentrelacement propre.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/carte-acquisition-vhs/dvc100-desentr.png" alt="Comparaison entre une image entrelacée et une image désentrelacée"&gt;
    &lt;figcaption&gt;Avant et après le désentrelacement
&lt;/figure&gt;

&lt;h2&gt;Paramètres d'encodage&lt;/h2&gt;
&lt;p&gt;J'ai calculé que la vidéo brute prenait environ 1,2 Go par minute, c'est beaucoup. Après compression en très bonne qualité en H265 on passe à 25 Mo par minute sur un enregistrement avec un peu de neige. C'est à peu près la même chose pour le WebM avec codec VP9.&lt;/p&gt;
&lt;p&gt;Encoder une vieille vidéo avec du bruit ce n'est jamais très optimal, il faut bien doser les paramètres pour garder une vidéo finale de bonne qualité et éviter qu'aux défauts historiques de la cassette ne viennent s'ajouter des macroblocs MPEG ignobles.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dans Handbrake&lt;/strong&gt; à l'onglet &lt;em&gt;Dimensions&lt;/em&gt;, j'ai désactivé le rognage (zéro partout) et j'ai décoché &lt;em&gt;Garder l'aspect&lt;/em&gt; dans &lt;em&gt;Géométrie d'affichage&lt;/em&gt;. À la place j'ai spécifié une largeur d'affichage de 640 pour une vidéo NTSC de 480, de sorte que l'aspect d'affichage soit de 4:3. Sur une vidéo européenne j'aurais mis 768 à la place de 640. Il s'agit là du ratio, on ne modifie en rien la définition du flux vidéo.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/carte-acquisition-vhs/dvc100-geom.png" alt="Capture d'écran de Handbrake avec les options pour l'aspect ratio de la vidéo"&gt;
&lt;/figure&gt;

&lt;p&gt;Pour la compression en H265 j'ai choisi un facteur RF22 qui me donne un bon compromis entre le poids et la qualité. En WebM avec VP9/Opus la qualité CQ19 proposée par défaut semble être suffisante aussi. Le mieux c'est de faire des tests avec des petits extraits pour trouver le bon taux.&lt;/p&gt;
&lt;p&gt;J'ai vu que Handbrake proposait des options intéressantes comme des filtres pour appuyer la netteté. Je n'ai pas tout testé parce que les encodages prennent du temps, mais il y a probablement moyen d'optimiser encore les rendus.&lt;/p&gt;
&lt;p&gt;À propos du désentrelacement, normalement Handbrake détecte tout seul le type de vidéo et applique automatiquement les bonnes options. La méthode de désentrelacement par défaut me semble identique à Yadif. C'est peut-être plus sûr d'activer explicitement Yadif pour être certain que le désentrelacement se fasse partout et pas sur une détection dynamique.&lt;/p&gt;
&lt;p&gt;Pour le son, il ne faut pas hésiter à l'encoder en bonne qualité, je mets au minimum 192 kb/s s'il s'agit d'une cassette avec le son Hi-Fi. Le son mono à l'ancienne est vraiment déplorable. Le son stéréo lui par contre est enregistré en FM avec une qualité honorable. Ça vaut le coup de se trouver un magnétoscope Hi-Fi stéréo pour cette raison-là.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/carte-acquisition-vhs/dvc100-handbrake.png" alt="Capture d'écran du logiciel Handbrake"&gt;
&lt;figcaption&gt;Handbrake affiche dans l'onglet « Résumé » les options appliquées au fichier
&lt;/figure&gt;

&lt;p&gt;Pour couper un extrait ou enlever un morceau de vidéo on peut utiliser &lt;a href="http://avidemux.sourceforge.net/"&gt;Avidemux&lt;/a&gt; qui est un logiciel bien pratique, un peu dans la veine de VirtualDub à l'époque. Il permet de travailler sur des vidéos brutes ou encodées. Dans ce dernier cas, en faisant des coupures proprement sur des images clé, il est possible d'exporter un extrait de vidéo sans réencodage.&lt;/p&gt;
&lt;h2&gt;Pour conclure&lt;/h2&gt;
&lt;p&gt;On peut numériser des cassettes correctement sans matériel coûteux et en utilisant uniquement des logiciels libres. Ce n'est pas très compliqué mais ça peut prendre beaucoup de temps selon la longueur des vidéos et la puissance de l'ordinateur à disposition, la vitesse d'encodage en étant dépendante.&lt;/p&gt;
&lt;p&gt;Je termine avec quelques extraits de captures qui m'ont permise d'être sûr que le son et l'image restaient synchonisés.&lt;/p&gt;
&lt;figure&gt;
&lt;video controls width="640"&gt;
    &lt;source src="media/carte-acquisition-vhs/diner-cons.mp4" type="video/mp4"&gt;
&lt;/video&gt;

&lt;figcaption&gt;
    Un court extrait du Dîner de cons&lt;br&gt;
    (le petit décalage horizontal est un problème du transfert original)
&lt;/figure&gt;

&lt;figure&gt;
&lt;video controls width="640"&gt;
    &lt;source src="media/carte-acquisition-vhs/monstres-inc.mp4" type="video/mp4"&gt;
&lt;/video&gt;
&lt;figcaption&gt;
    Un extrait de &lt;em&gt;Monstres inc.&lt;/em&gt; pour ceux qui se souviennent de la cassette bleue&lt;br&gt;
    (on voit la protection anti-copie &lt;a href="https://hackaday.com/2018/05/27/rolling-old-school-with-copy-protection-from-the-1980s/"&gt;Macrovision&lt;/a&gt; tout en haut)
&lt;/figure&gt;

&lt;p&gt;Si vous avez des questions, des suggestions, que vous souhaitez apporter des précisions ou corriger une erreur, n'hésitez pas !&lt;/p&gt;
&lt;h2&gt;Liens et références&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.canada.ca/fr/institut-conservation/services/publications-conservation-preservation/bulletins-techniques/numerisation-bandes-video-vhs.html"&gt;La numérisation des bandes vidéo VHS, Gouvernement du Canada&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://handbrake.fr/docs/en/1.3.0/technical/system-requirements.html"&gt;Handbrake Technical Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dr-lex.be/info-stuff/videotips.html"&gt;Video Encoding Tips, Dr. Lex' Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.videolan.org/Deinterlacing/"&gt;Deinterlacing, VideoLan Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.avidemux.org/admWiki/doku.php?id=build:doctop"&gt;Using Avidemux, Avidemux wiki documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://archive.flossmanuals.net/_booki/avidemux/avidemux.pdf"&gt;Avidemux, FlossManuals&lt;/a&gt; (PDF, 2011)&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Personnaliser le listage des dossiers dans Apache</title><link href="https://maya.sh/apache-directory-listing.html" rel="alternate"/><published>2020-09-05T00:00:00+02:00</published><updated>2020-09-05T00:00:00+02:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2020-09-05:/apache-directory-listing.html</id><summary type="html">&lt;p&gt;Apache &lt;a href="https://httpd.apache.org/"&gt;httpd&lt;/a&gt; est un super serveur Web qui propose un tas de modules pour faire ce dont on a besoin. En général sur les distributions Linux populaires il est préconfiguré pour afficher la liste des fichiers présents si on accède à un répertoire qui ne contient pas de fichier &lt;code&gt;index …&lt;/code&gt;&lt;/p&gt;</summary><content type="html">&lt;p&gt;Apache &lt;a href="https://httpd.apache.org/"&gt;httpd&lt;/a&gt; est un super serveur Web qui propose un tas de modules pour faire ce dont on a besoin. En général sur les distributions Linux populaires il est préconfiguré pour afficher la liste des fichiers présents si on accède à un répertoire qui ne contient pas de fichier &lt;code&gt;index.html&lt;/code&gt; ou &lt;code&gt;index.php&lt;/code&gt;. Nous allons voir ici comment personnaliser cet affichage pour le rendre plus pratique et plus beau.&lt;/p&gt;
&lt;p&gt;Je pars d'une distribution Debian, la configuration par défaut est différente sur d'autres systèmes comme par exemple FreeBSD.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/apache-directory-listing/apache-indexof-1.png" alt="Capture d'écran d'une liste de fichiers générée Apache"&gt;
&lt;figcaption&gt;
Le listage par défaut de Apache
&lt;/figure&gt;

&lt;h2&gt;Processus d'affichage de l'index&lt;/h2&gt;
&lt;p&gt;Lorsqu'on demande l'accès à un chemin, le serveur va d'abord essayer de trouver un fichier d'index. S'il n'en trouve pas, il va déclencher le listage du dossier. Cet aiguillage se fait via le module &lt;a href="https://httpd.apache.org/docs/2.4/mod/mod_dir.html"&gt;mod_dir&lt;/a&gt; activé par défaut.&lt;/p&gt;
&lt;p&gt;Dans le fichier &lt;code&gt;/etc/apache2/mods-enabled/dir.conf&lt;/code&gt; on peut voir le contenu suivant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;IfModule&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;mod_dir.c&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;DirectoryIndex&lt;span class="w"&gt; &lt;/span&gt;index.html&lt;span class="w"&gt; &lt;/span&gt;index.cgi&lt;span class="w"&gt; &lt;/span&gt;index.pl&lt;span class="w"&gt; &lt;/span&gt;index.php&lt;span class="w"&gt; &lt;/span&gt;index.xhtml&lt;span class="w"&gt; &lt;/span&gt;index.htm
&lt;span class="nt"&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;C'est ici que sont définis les différents noms de fichiers pouvant être considérés comme index. Si un dossier contient plusieurs fichiers candidats comme par exemple &lt;code&gt;index.html&lt;/code&gt; et &lt;code&gt;index.php&lt;/code&gt; alors ce sera le premier de la liste qui sera affiché.&lt;/p&gt;
&lt;p&gt;Ainsi si aucun fichier d'index n'est présent alors la génération de la page de listage va se faire par le module &lt;a href="https://httpd.apache.org/docs/2.4/mod/mod_autoindex.html"&gt;mod_autoindex&lt;/a&gt; mais à la condition que l'&lt;a href="https://httpd.apache.org/docs/2.4/fr/mod/core.html#options"&gt;option&lt;/a&gt; &lt;code&gt;Indexes&lt;/code&gt; soit activée pour le dossier.&lt;/p&gt;
&lt;p&gt;Dans le fichier &lt;code&gt;/etc/apache2/apache2.conf&lt;/code&gt; on trouve entre autres :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;Directory&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;/var/www&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;Options&lt;span class="w"&gt; &lt;/span&gt;Indexes&lt;span class="w"&gt; &lt;/span&gt;FollowSymLinks
&lt;span class="w"&gt;    &lt;/span&gt;AllowOverride&lt;span class="w"&gt; &lt;/span&gt;None
&lt;span class="w"&gt;    &lt;/span&gt;Require&lt;span class="w"&gt; &lt;/span&gt;all&lt;span class="w"&gt; &lt;/span&gt;granted
&lt;span class="nt"&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ici l'option est activée pour le répertoire par défaut &lt;code&gt;/var/www/&lt;/code&gt; et ses sous-dossiers.&lt;/p&gt;
&lt;h2&gt;Le module de listage&lt;/h2&gt;
&lt;h3&gt;Les inconvénients de la configuration par défaut&lt;/h3&gt;
&lt;p&gt;Tout se passe dans le fichier &lt;code&gt;/etc/apache2/mods-enabled/autoindex.conf&lt;/code&gt; qui contient par défaut un certain nombre de choses pour améliorer déjà pas mal l'aspect de la page, comme l'option &lt;code&gt;FancyIndexing&lt;/code&gt; et &lt;code&gt;HTMLTable&lt;/code&gt; qui créent un affichage enrichi et mis en forme dans un tableau HTML avec des colonnes de tri.&lt;/p&gt;
&lt;p&gt;Sans ces options, mon dossier ressemble à cela :&lt;/p&gt;
&lt;p&gt;&lt;img alt="Capture d'écran d'un listage Apache minimaliste" src="apache-directory-listing/apache-indexof-2.png"&gt;&lt;/p&gt;
&lt;p&gt;Je suis satisfaite de l'affichage &lt;em&gt;fancy&lt;/em&gt; mais je voudrais faire certains changements :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;retirer la colonne de description qui ne sert à rien ;&lt;/li&gt;
&lt;li&gt;retirer la ligne du bas qui contient la version du serveur et le domaine ;&lt;/li&gt;
&lt;li&gt;ajouter un entête avec un titre ;&lt;/li&gt;
&lt;li&gt;ajouter un lien pour revenir au domaine principal ;&lt;/li&gt;
&lt;li&gt;rendre compatible l'affichage avec les mobiles ;&lt;/li&gt;
&lt;li&gt;harmoniser un peu le style avec le reste du site.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Retrait des colonnes superflues&lt;/h3&gt;
&lt;p&gt;Le retrait de la colonne de description se fait très simplement en rajoutant l'option &lt;code&gt;SuppressDescription&lt;/code&gt; à la directive &lt;code&gt;IndexOptions&lt;/code&gt; située en début de fichier.&lt;/p&gt;
&lt;p&gt;Pour gagner de la place et parce que les dates de fichiers sont rarement les bonnes, j'ai décidé de supprimer aussi la colonne &lt;em&gt;Last modified&lt;/em&gt; avec &lt;code&gt;SuppressLastModified&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;L'entête et le pied de page&lt;/h3&gt;
&lt;p&gt;En ce qui concerne ces éléments, le module est réglé pour aller chercher des fichiers HEADER.html et README.html différents pour chaque dossier affiché. Moi je veux des fichiers uniques pour tout le domaine donc je configure les deux directives suivantes comme ceci :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;ReadmeName /.footer.html
HeaderName /.header.html
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Le &lt;code&gt;/&lt;/code&gt; permet de réutiliser les mêmes fichiers partout dans l'arborescence. J'ai fait des fichiers cachés (ils commencent par un point) pour éviter leur apparition dans la liste.&lt;/p&gt;
&lt;p&gt;Pour le moment mon entête contient seulement un bloc &lt;code&gt;&amp;lt;h1&amp;gt;&lt;/code&gt; et mon pied de page un &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Capture d'écran d'un listage Apache plus joli" src="apache-directory-listing/apache-indexof-3.png"&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Le mélange entre l'affichage d'une liste de ressources et un contenu directement sur la page me
fait beaucoup penser au protocole &lt;a href="https://hackaday.com/2021/09/28/gopher-the-competing-standard-to-www-in-the-90s-is-still-worth-checking-out/"&gt;Gopher&lt;/a&gt;
des années 90 et son équivalent moderne &lt;a href="https://geminiprotocol.net/"&gt;Gemini&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Affichage mobile, favicon et titre d'onglet&lt;/h3&gt;
&lt;p&gt;Pour l'affichage mobile il faut rajouter une ligne dans le &lt;code&gt;&amp;lt;head&amp;gt;&lt;/code&gt; et je vais en profiter pour ajouter un titre d'onglet et mettre un favicon.&lt;/p&gt;
&lt;p&gt;Par défaut le serveur rajoute l'entête HTML suivant :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 3.2 Final//EN&amp;quot;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Index of /&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour désactiver cet entête automatique il faut rajouter l'option &lt;code&gt;SuppressHTMLPreamble&lt;/code&gt; à &lt;code&gt;IndexOptions&lt;/code&gt;. Ensuite on est libre de mettre le notre. À noter que du coup il faut rajouter les balises fermantes dans l'autre fichier, même si leur absence ne pose jamais problème dans la réalité.&lt;/p&gt;
&lt;p&gt;Mon fichier &lt;code&gt;.header.html&lt;/code&gt; ressemble maintenant à ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;html&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;utf-8&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;meta&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;viewport&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;width=device-width, initial-scale=1&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;link&lt;/span&gt; &lt;span class="na"&gt;rel&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;icon&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;image/png&amp;quot;&lt;/span&gt; &lt;span class="na"&gt;href&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;quot;https://example.com/assets/favicon.png&amp;quot;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;data.example.com&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;title&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;head&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
 &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;body&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;L'encodage est par défaut en UTF-8 donc je ne fais que l'expliciter. C'est la propriété de viewport qui permet de corriger l'affichage.&lt;/p&gt;
&lt;p&gt;Il existe une directive &lt;code&gt;IndexStyleSheet&lt;/code&gt; pour spécifier une feuille de style CSS mais elle ne fonctionne pas avec &lt;code&gt;SuppressHTMLPreamble&lt;/code&gt;, la solution est de spécifier un fichier CSS dans l'entête ou d'incorporer un bloc &lt;code&gt;&amp;lt;style&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Capture d'écran d'un listage Apache joli" src="apache-directory-listing/apache-indexof-5.png"&gt;&lt;/p&gt;
&lt;p&gt;Voilà le résultat final pour le moment. On ne peut pas tout personnaliser, par exemple pas possible de changer la langue des labels. En fouillant un peu on s'aperçoit que les labels sont codés en dur dans le fichier source &lt;a href="https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/generators/mod_autoindex.c?view=markup"&gt;mod_autoindex.c&lt;/a&gt;, par exemple pour les titres de colonnes à partir de la ligne &lt;a href="https://svn.apache.org/viewvc/httpd/httpd/branches/2.4.x/modules/generators/mod_autoindex.c?view=markup#l1584"&gt;1584&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le principal intérêt c'est d'utiliser un module par défaut qui génère des pages HTML, ce qui m'évite de devoir passer par des navigateurs de fichiers en PHP plus lourds et peut-être moins sécurisés.&lt;/p&gt;</content><category term="ordinateurs"/></entry><entry><title>Afficher une image en VGA mode 13h (assembleur x86)</title><link href="https://maya.sh/dos-vga-13h.html" rel="alternate"/><published>2020-08-15T00:00:00+02:00</published><updated>2020-08-15T00:00:00+02:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2020-08-15:/dos-vga-13h.html</id><summary type="html">&lt;p&gt;Depuis la nuit des temps, les PC possèdent différents modes texte et graphique. Chaque mode possède une résolution et un nombre de couleurs spécifique. Un de ces modes est assez facile à manipuler et permet d'afficher jusqu'à 256 couleurs en 320x200, il s'agit du mode 13h, populaire à l'époque des …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Depuis la nuit des temps, les PC possèdent différents modes texte et graphique. Chaque mode possède une résolution et un nombre de couleurs spécifique. Un de ces modes est assez facile à manipuler et permet d'afficher jusqu'à 256 couleurs en 320x200, il s'agit du mode 13h, populaire à l'époque des jeux et applications MS-DOS.&lt;/p&gt;
&lt;p&gt;Ici on va voir pas à pas comment dessiner à l'écran sur DOS en utilisant l'assembleur Netwide (NASM) depuis un environnement de type Unix pour générer le fichier exécutable (on va travailler avec DOSBOX).&lt;/p&gt;
&lt;p&gt;Les modes vidéo classiques pour PC sont &lt;a href="http://minuszerodegrees.net/video/bios_video_modes.htm"&gt;nombreux&lt;/a&gt; et certains ne sont pas très intéressants ou alors complexes à manipuler, comme le mode 12h qui fournit du 640x480 en 16 couleurs mais planaire, c'est à dire que chaque canal (rouge, vert, bleu, fluo) doit être manipulé séparément. Le mode 13h auquel on va s'intéresser permet de manipuler intuitivement les couleurs et la position des pixels à l'écran. Il offre un bon compromis entre simplicité et agrément.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Je suis loin d'être experte ni en assembleur ni même en développement pour DOS, je voulais juste partager ce que j'ai appris et réussi à faire !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
&lt;img src="media/afficher-13h/rayman-dos.png" alt="Capture d'écran du jeu vidéo Rayman" class="pixelart"&gt;
&lt;figcaption&gt;Un exemple de graphisme en mode 13h : &lt;a href="https://archive.org/details/msdos_Rayman_1995"&gt;Rayman pour DOS&lt;/a&gt; (1995)
&lt;/figure&gt;

&lt;h2&gt;Préparation de l'environnement&lt;/h2&gt;
&lt;p&gt;Pour commencer, on a besoin des outils suivants : &lt;a href="https://www.nasm.us/"&gt;NASM&lt;/a&gt;, &lt;a href="https://www.dosbox.com/"&gt;Dosbox&lt;/a&gt; et un éditeur de texte.&lt;/p&gt;
&lt;p&gt;Pour Fedora on installe ça comme ça :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo dnf install nasm dosbox
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pour macOS (en supposant que &lt;a href="https://brew.sh/"&gt;brew&lt;/a&gt; est préalablement installé) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;brew install nasm dosbox
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ensuite on se crée un dossier de travail, par exemple &lt;code&gt;~/workspace/dos/vga&lt;/code&gt; chez moi. Puis on configure Dosbox pour monter le dossier et y accéder au démarrage. On ouvre Dosbox une première fois pour vérifier que ça fonctionne, puis on édite le fichier de configuration (dont le nom peut changer selon la version).&lt;/p&gt;
&lt;p&gt;Sur Fedora Linux il est situé dans &lt;code&gt;~/.dosbox/dosbox-0.74-3.conf&lt;/code&gt;, sur macOS dans &lt;code&gt;~/Library/Preferences/DOSBox 0.74-3 Preferences&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Tout à la fin dans la section &lt;code&gt;[autoexec]&lt;/code&gt; j'ai rajouté les lignes suivantes :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mount C: ~/workspace/dos/vga
C:
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Un premier programme&lt;/h2&gt;
&lt;p&gt;Dans le dossier on peut créer un fichier texte, disons &lt;code&gt;main.asm&lt;/code&gt;. Voici un premier contenu :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="k"&gt;org&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;100h&lt;/span&gt;

&lt;span class="c1"&gt;; Passage en mode 13h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;13h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;

&lt;span class="c1"&gt;; Attente appui touche&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ah&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;00h&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;16h&lt;/span&gt;

&lt;span class="c1"&gt;; On retourne au DOS&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;ret&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Les commentaires sont les lignes qui commencent par le point-virgule. On peut aussi rajouter un commentaire à la fin d'une ligne.&lt;/p&gt;
&lt;h3&gt;Ce que tout cela signifie&lt;/h3&gt;
&lt;h4&gt;La notation hexadécimale&lt;/h4&gt;
&lt;p&gt;Les nombres qui possèdent un &lt;code&gt;h&lt;/code&gt; à la fin sont des nombres héxadécimaux, donc en base 16. On les représente avec des caractères de &lt;code&gt;0&lt;/code&gt; à &lt;code&gt;F&lt;/code&gt;. Par exemple &lt;code&gt;FF&lt;/code&gt; égale 255 et &lt;code&gt;FFFF&lt;/code&gt; égale 65535. Par défaut, pour notre assembleur, un nombre est décimal, mais lorsqu'on va utiliser des interruptions ou des adresses mémoires on va utiliser des nombres héxadécimaux. C'est pratique parce qu'on sait qu'un nombre d'un ou deux caractères tient dans un octet (8 bits) et qu'un nombre de 3 ou 4 caractères tient dans un &lt;em&gt;mot&lt;/em&gt; (16 bits). Il y a deux manières de les noter dans notre code :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ajouter devant &lt;code&gt;0x&lt;/code&gt;, par exemple &lt;code&gt;0x100&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ajouter après &lt;code&gt;h&lt;/code&gt;, par exemple &lt;code&gt;100h&lt;/code&gt;. Dans ce cas, si le nombre commence par une lettre, il faut mettre un zéro devant. On n'écrira donc pas &lt;code&gt;FFh&lt;/code&gt; mais &lt;code&gt;0FFh&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;La directive &lt;code&gt;org&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Concernant &lt;code&gt;org&lt;/code&gt;, il s'agit d'une directive et non pas d'une instruction (car &lt;code&gt;org&lt;/code&gt; n'existe pas dans le processeur). &lt;a href="https://www.nasm.us/doc/nasmdoc8.html#section-8.1.1"&gt;Cette directive&lt;/a&gt; s'adresse à notre assembleur pour lui dire que notre programme doit commencer à un certain endroit (à &lt;code&gt;100h&lt;/code&gt;). Ainsi lors de l'assemblage, le programme va être adapté pour que les adresses internes correspondent bien à l'endroit où le DOS démarre notre programme. C'est une particularité du format d'exécutable &lt;a href="https://fr.wikipedia.org/wiki/.com_(MS-DOS)"&gt;COM&lt;/a&gt;, contrairement au EXE qui n'a pas besoin de ça et qui permet de faire des fichiers plus gros (+ de 64 kb), mais le EXE est plus compliqué pour la gestion de la mémoire ; ici on va travailler sur un fichier COM à l'ancienne.&lt;/p&gt;
&lt;h4&gt;Les instructions &lt;code&gt;mov&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Pour travailler avec le CPU, on utilise des petites zones de mémoire appelées des &lt;a href="https://en.wikipedia.org/wiki/Intel_8086#Registers_and_instructions"&gt;registres&lt;/a&gt;. Il est possible de faire des opérations (comme écraser, additionner, soustraire...) entre une cellule de RAM et un registre ou deux entre registres, mais pas entre deux valeurs en RAM.&lt;/p&gt;
&lt;p&gt;Dans notre premier code, chaque &lt;code&gt;mov&lt;/code&gt; écrit dans un registre la valeur indiquée. Si quelque chose était présent avant dans le registre, c'est écrasé par la nouvelle valeur. Ainsi le premier &lt;code&gt;mov&lt;/code&gt; inscrit la valeur &lt;code&gt;13h&lt;/code&gt; (19 en décimal) dans AX, donc les 16 bits du registre contiennent &lt;code&gt;0013h&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Le deuxième &lt;code&gt;mov&lt;/code&gt; inscrit la valeur &lt;code&gt;00h&lt;/code&gt; (0 aussi en décimal) dans le registre AH. Là il faut savoir qu'en fait le registre AX (qui fait 16 bits) est composé de deux demi-registres, qui sont AH (high) et AL (low) qui sont chacun de 8 bits. C'est pareil pour BX, CX et DX.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ici on aurait pu éviter ce second &lt;code&gt;mov&lt;/code&gt; étant donné que AH contenait déjà &lt;code&gt;00h&lt;/code&gt; et que rien ne vient modifier le registre entre temps, mais on l'a fait par clarté et pour ne pas casser le programme si on rajoute des instructions plus tard.&lt;/em&gt;&lt;/p&gt;
&lt;h4&gt;Les interruptions&lt;/h4&gt;
&lt;p&gt;De façon générale, le concept de l'interruption est... d'interrompre le déroulement régulier du programme pour effectuer une tâche prioritaire avant de retourner à ce qu'on faisait. Il en existe plusieurs types, par exemple les interruptions matérielles (une frappe clavier ou un clic de souris). Ici on va plutôt parler des interruptions logicielles qu'on déclenche nous-mêmes avec l'instruction &lt;code&gt;int&lt;/code&gt; et qui nous permettent d'exécuter des procédures situées en dehors de notre programme ; soit fournies par le BIOS, soit par le DOS.&lt;/p&gt;
&lt;p&gt;Dans notre code, la première interruption &lt;a href="https://www.gladir.com/LEXIQUE/INTR/INT10.HTM"&gt;10h&lt;/a&gt; permet de demander au BIOS de changer de mode vidéo. Elle prend deux paramètres : dans AH le service (ou fonction) voulu (nous on veut 00h pour le changement de mode) et dans AL le mode vidéo voulu (13h en l'occurence).&lt;/p&gt;
&lt;p&gt;La seconde interruption &lt;a href="https://www.gladir.com/LEXIQUE/INTR/int16.htm"&gt;16h&lt;/a&gt; permet de travailler avec le clavier. Sa fonction 00h (paramètre AH) permet de demander la lecture d'un caractère et donc d'attendre que l'utilisateur appuie sur une touche. Elle ne prend pas d'autre paramètre mais renvoie dans AH et AL les codes de la touche appuyée (on ne s'en sert pas ici).&lt;/p&gt;
&lt;p&gt;Avec le DOS on utilise souvent &lt;a href="https://en.wikipedia.org/wiki/DOS_API"&gt;l'interruption 21h&lt;/a&gt; qui permet d'accéder à différents services du système.&lt;/p&gt;
&lt;h4&gt;L'instruction &lt;code&gt;ret&lt;/code&gt;&lt;/h4&gt;
&lt;p&gt;Comme un CPU possède peu de registres, régulièrement on se retrouve obligé de stocker les valeurs des registres dans un coin pour bricoler autre chose, puis restaurer les anciennes valeurs pour retourner à ce qu'on faisait avant.&lt;/p&gt;
&lt;p&gt;Pour jongler avec la mémoire, il existe un outil pratique : c'est la pile. C'est une zone de mémoire vive dans laquelle on empile les valeurs dont on va se resservir, puis qu'on dépile une fois qu'on en a besoin. C'est comme une pile d'assiette, c'est à dire que pour accéder à la troisième assiette il faut avoir dépilé les deux premières avant.&lt;/p&gt;
&lt;p&gt;La pile est utilisée par plusieurs instructions !&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pour appeler une procédure on utilise l'instruction &lt;code&gt;call&lt;/code&gt; qui stocke dans la pile l'adresse de la prochaine instruction à exécuter dans notre programme avant de sauter à l'emplacement de la procédure.&lt;/li&gt;
&lt;li&gt;L'instruction &lt;code&gt;ret&lt;/code&gt; fait l'inverse : elle est située à la fin d'une procédure et permet de revenir où on était en récupérant l'adresse stockée dans la pile.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ce qui est intéressant dans le cadre d'un programme DOS, c'est qu'à l'ouverture d'un programme, le DOS empile automatiquement la valeur &lt;code&gt;0000&lt;/code&gt;. En faisant &lt;code&gt;ret&lt;/code&gt; depuis le fil principal on exécute alors l'instruction située à l'emplacement &lt;code&gt;0000&lt;/code&gt; de la RAM, et là le DOS y a situé automatiquement une interruption &lt;a href="https://www.gladir.com/LEXIQUE/INTR/int20.htm"&gt;20h&lt;/a&gt; qui sert à retourner à l'invite de commandes, donc à terminer proprement.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Raymond Chen &lt;a href="https://devblogs.microsoft.com/oldnewthing/20200309-00/?p=103547"&gt;explique ça en détail ici&lt;/a&gt;, son blog est excellent.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Création d'un exécutable&lt;/h3&gt;
&lt;p&gt;Pour créer le fichier exécutable, on assemble avec une commande :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;nasm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;main.com&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;main.asm&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Ça crée un fichier COM exécutable pour DOS. Si tout se passe bien, l'assembleur n'affiche pas de message.&lt;/p&gt;
&lt;p&gt;Dans DOSBOX, il suffit de taper &lt;code&gt;main.com&lt;/code&gt; ou simplement &lt;code&gt;main&lt;/code&gt; pour que le programme se lance. Tout ce qu'il fait, c'est afficher un écran noir. Une fois qu'on appuie sur une touche on revient au prompt mais le texte est gros et pixellisé : c'est normal, nous avons basculé en mode 13h et nous y sommes resté.e.s.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Prompt DOS en mode 13h" src="afficher-13h/mode13h-dos_prompt_moche.png"&gt;&lt;/p&gt;
&lt;p&gt;Pour que le programme retourne dans le mode texte par défaut (03h) avant de quitter on peut rajouter les lignes suivantes à la fin (mais avant le &lt;code&gt;ret&lt;/code&gt;) :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; Retour en mode texte&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;03h&lt;/span&gt;
&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;10h&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;On appelle la fonction 00h (changer de mode) pour le mode 03h, dans l'interruption 10h.&lt;/p&gt;
&lt;h2&gt;Afficher un pixel sur l'écran&lt;/h2&gt;
&lt;p&gt;On passe définitivement aux choses sérieuses !!! Ce qui est bien avec le DOS et le mode 13h, c'est qu'on peut se contenter de mettre un nombre dans une zone de mémoire pour colorer un pixel.&lt;/p&gt;
&lt;p&gt;La zone de mémoire qui nous intéresse commence à l'adresse A000:0000 et s'étend sur 64000 octets (=320x200). Il s'agit d'un mode de 256 couleurs et un octet fait 8 bits ce qui est le nécessaire pour définir une valeur entre 0 et 255 (2ˆ8 = 256).&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/afficher-13h/vgapalette.png" alt="Palette de couleurs par défaut en mode 13h"&gt;
&lt;figcaption&gt;La palette par défaut en mode 13h &lt;a href="https://www.fountainware.com/EXPL/vga_color_palettes.htm"&gt;[source]&lt;/a&gt;
&lt;/figure&gt;

&lt;p&gt;Les couleurs sont arrangées dans cet ordre un peu bizarre parce que la palette est rétro-compatible avec le mode 16 couleurs (la première ligne). Il est possible de redéfinir la palette à partir des 262 144 couleurs disponibles (64ˆ3), ce qui est très pratique pour avoir des teintes personnalisées ou pour remplir les 8 dernières cases.&lt;/p&gt;
&lt;p&gt;Autre chose bien pratique, on passe d'une ligne de pixels à l'autre sans coupure. Il n'y a pas de complexité liée au balayage. Ainsi, pour afficher un pixel pile au milieu de l'écran, on doit descendre de 100 lignes (100x320) et aller vers la droite d'une demi-ligne (320/2). Ce qui nous donne 32000 + 160 = 32160. Ce sera donc notre décalage par rapport à l'adresse de base.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;VGA c'est pour Video Graphics Array, c'est littéralement de ça qu'il s'agit !&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Les ordinateurs de cette époque, comme par exemple les différents &lt;a href="https://en.wikipedia.org/wiki/IBM_Personal_System/2#Models"&gt;IBM PS/2&lt;/a&gt;, avaient entre 512 Kio et 1 Mio de mémoire vive et certains étaient extensibles jusqu'à 4 Mio. Problème : les registres du Intel 8086 étaient de 16 bits tout au plus, ce qui permet de contenir des adresses allant jusqu'à 65535 (FFFF en hexadécimal) donc 64 Kio. Pour résoudre le problème, on utilise un système de segments et d'offsets. Contrairement à ce que voudrait l'intuition, les segments ne s'enchainent pas tous les 65535 octets mais plutôt tous les 16 octets. Ils se chevauchent, donc une zone mémoire peut être accessible par plusieurs adresses. &lt;em&gt;Cf. &lt;a href="https://benoit-m.developpez.com/assembleur/tutoriel/index.php#LII-B-1"&gt;cours de Benoît M&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ce qui est essentiel ici c'est surtout de savoir que le framebuffer VGA commence au segment &lt;code&gt;0A000h&lt;/code&gt; et à l'offset &lt;code&gt;0000h&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Dans notre programme, juste après le passage en mode 13h, on ajoute la première partie de notre adresse dans le registre de segment ES (pour &lt;em&gt;extra segment&lt;/em&gt;). On ne peut pas y écrire directement, on doit passer par un registre général.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0A000h&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La prochaine étape est d'indiquer l'offset que nous avons calculé. Pour cela on utilise DI (&lt;em&gt;destination index&lt;/em&gt;) qui est un des différents registres d'offset disponibles sur le processeur. On peut y insérer directement la valeur en décimal calculée.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32160&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Enfin on peut choisir une couleur dans la palette (ici un genre de orange) et l'appliquer à notre pixel.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;058h&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Les crochets signifient que ES:DI est une adresse de mémoire à laquelle on veut écrire.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Pixel sur fond noir" src="media/afficher-13h/mode13h-pixel-centre.png"&gt;&lt;/p&gt;
&lt;h2&gt;Affichage d'une ligne&lt;/h2&gt;
&lt;p&gt;Maintenant que nous avons un pixel nous pouvons utiliser une boucle pour générer une ligne. Les étapes suivantes seront l'affichage de plusieurs lignes pour composer un rectangle, puis enfin afficher notre image. Pour faire une boucle, on utilise simplement l'instruction &lt;code&gt;loop&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Remplaçons notre ligne &lt;code&gt;mov [es:di], al&lt;/code&gt; par la structure suivante :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;
&lt;span class="nl"&gt;ligne:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ligne&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;La ligne d'origine qui insère la couleur à l'écran est toujours la même, par contre des choses se sont rajoutées autour. La première chose notable est &lt;code&gt;ligne:&lt;/code&gt;, il s'agit d'un label, c'est une sorte de marque-page qui marque un endroit dans le code. Ils permettent de facilement se repérer et d'y faire des sauts. Le rôle de l'instruction &lt;code&gt;loop&lt;/code&gt; est de décrémenter CX puis de revenir au label tant que CX est plus grand que zéro. Ainsi on boucle 50 fois et le décompte est automatique. On a aussi une instruction &lt;code&gt;inc di&lt;/code&gt; qui incrémente le registre DI à chaque passage pour avancer horizontalement octet par octet pour créer une ligne. On aurait aussi pu écrire &lt;code&gt;add di, 1&lt;/code&gt; , c'est pareil.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Ligne sur fond noir" src="media/afficher-13h/mode13h-ligne.png"&gt;&lt;/p&gt;
&lt;h2&gt;Affichage d'un rectangle&lt;/h2&gt;
&lt;p&gt;Pour afficher un rectangle on reste sur le même principe en faisant une boucle sur la boucle. La seconde boucle permet de descendre pour tracer la forme ligne par ligne. Problème : on ne peut pas imbriquer les utilisations de &lt;code&gt;loop&lt;/code&gt; puisque cette instruction fonctionne en utilisant le registre CX (on ne peut pas en choisir un autre). Ce n'est pas grave, on peut utiliser un saut conditionnel qui fait à peu près la même chose.&lt;/p&gt;
&lt;p&gt;Au dessus de &lt;code&gt;mov cx, 50&lt;/code&gt; on rajoute un registre BX qui contient le nombre de lignes (hauteur du rectangle) ainsi qu'un autre label.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;
&lt;span class="nl"&gt;colonne:&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En dessous du &lt;code&gt;loop&lt;/code&gt;, on rajoute aussi quelques instructions :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; on passe à la ligne suivante&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; on se remet au début dans la ligne&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;colonne&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;En ce qui concerne &lt;code&gt;add&lt;/code&gt; et &lt;code&gt;sub&lt;/code&gt; la première instruction permet de passer à la ligne suivante (une ligne fait 320 pixels). La seconde instruction permet de revenir au début de cette même ligne. On pourrait très bien utiliser une seule instruction et faire &lt;code&gt;add di, 270&lt;/code&gt; mais séparer le processus en deux instructions peut être plus clair ou plus pratique pour plus tard.&lt;/p&gt;
&lt;p&gt;Les trois dernières instructions sont équivalentes au loop, avec simplement l'utilisation du registre BX à la place de CX. &lt;code&gt;jne&lt;/code&gt; signifie &lt;em&gt;jump if not equal&lt;/em&gt; et va sauter au label indiqué tant que le résultat de l'instruction du dessus n'est pas l'égalité. Étant donné qu'on décrémente BX à chaque tour, au bout de 30 fois BX va égaler zéro et le &lt;code&gt;jump&lt;/code&gt; ne fera plus effet.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Carré plein sur fond noir" src="media/afficher-13h/mode13h-rectangle.png"&gt;&lt;/p&gt;
&lt;p&gt;Code complet entre le passage en mode 13h et l'attente clavier :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="c1"&gt;; affichage d&amp;#39;un rectangle&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;0A000h&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; ES = segment du framebuffer VGA&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;32160&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="c1"&gt;; milieu de l&amp;#39;écran (en base 10)&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mh"&gt;058h&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="c1"&gt;; couleur orange clair&lt;/span&gt;
&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="c1"&gt;; nombre de lignes&lt;/span&gt;
&lt;span class="nl"&gt;colonne:&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; nombre de pixels par ligne&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;ligne:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;inc&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ligne&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;; on passe à la ligne suivante&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;sub&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="c1"&gt;; on se remet au début dans la ligne&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;dec&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;cmp&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;bx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;jne&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;colonne&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Préparer une image pour l'afficher&lt;/h2&gt;
&lt;p&gt;Avant de pouvoir insérer une image dans le programme on doit la convertir en 256 couleurs dans la palette VGA. Je vous renvoie &lt;a href="http://bitwelding.blogspot.com/2017/05/creating-images-for-legacy-pc-vga.html"&gt;à ce tutoriel&lt;/a&gt; qui explique comme le faire avec &lt;a href="https://www.gimp.org/"&gt;GIMP&lt;/a&gt;. Vous pouvez jouer avec les options de luminosité et de contraste comme je l'ai fait pour avoir le meilleur rendu possible après conversion.&lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/afficher-13h/lenna150.png" alt="Photo de Lena (jeune femme, image d'exemple)"&gt;
        &lt;figcaption&gt;Réduction à 150x150 px
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/afficher-13h/lenna150.bmp" alt="Photo convertie en 256 couleurs"&gt;
        &lt;figcaption&gt;Le fichier converti
    &lt;/figure&gt;
&lt;/div&gt;

&lt;p&gt;Ensuite il faut extraire les pixels du format BMP pour avoir une suite d'octets à insérer dans le programme. J'ai fait un script en Python pour ça : &lt;a href="https://github.com/mayafri/bmptovga"&gt;bmptovga&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Affichage d'une image&lt;/h2&gt;
&lt;p&gt;Quelques petites adaptations sont nécessaires pour afficher une image. Pour commencer on peut importer notre fichier .asm généré par le script dans le même dossier que &lt;code&gt;main.asm&lt;/code&gt; puis l'importer dans notre programme. Pour cela, on ajoute la ligne suivante à la toute fin, après le &lt;code&gt;ret&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="cp"&gt;%include &amp;quot;image.asm&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Pourquoi à la fin ? Pour éviter que cette partie de ressource image soit interprétée comme du code ; en effet, il n'y a pas de séparation stricte entre le code et les données. Une autre solution moins simple aurait été d'insérer un saut &lt;code&gt;jmp&lt;/code&gt; et un label pour sauter par-dessus la ressource.&lt;/p&gt;
&lt;p&gt;L'autre chose à modifier est notre position de début de dessin dans le registre DI. L'image fait 150x150 px, pour l'afficher centrée il faut qu'elle débute aux coordonnées &lt;code&gt;(320-150)/2 ; (200-150)/2&lt;/code&gt;, ce qui nous donne 85;25. On convertit cette coordonnée avec la formule &lt;em&gt;x + (320 * y)&lt;/em&gt;, ce qui nous donne 8085.&lt;/p&gt;
&lt;p&gt;Ensuite il faut modifier BX et CX qui sont respectivement à 30 et 50 pour les mettre tous les deux à 150 ainsi que &lt;code&gt;sub di&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;On peut déjà tester si c'est bon !&lt;/p&gt;
&lt;p&gt;&lt;img alt="Grand carré centré sur fond noir" src="media/afficher-13h/mode13h-carre.png"&gt;&lt;/p&gt;
&lt;p&gt;Plutôt que charger chaque couleur directement on peut indiquer l'adresse de la ressource image dans un registre. On peut donc retirer le &lt;code&gt;mov al&lt;/code&gt;. La méthode consiste maintenant à aller chercher la valeur située à l'adresse du label &lt;code&gt;image:&lt;/code&gt; (déclaré dans le fichier .asm), qui contient la couleur du premier pixel de l'image. En incrémentant notre registre, on se déplace d'adresse en adresse et à chaque fois on récupère le pixel correspondant.&lt;/p&gt;
&lt;p&gt;Pour faire ça nous ne pouvons pas utiliser AL, c'est une limitation du processeur. Les seuls registres d'index disponibles sont BP, SI, DI et BX. Les deux derniers sont déjà utilisés mais SI est libre.&lt;/p&gt;
&lt;p&gt;On remplace donc l'ancienne instruction qui donne la couleur par :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;mov si, image
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Dans le label &lt;code&gt;ligne:&lt;/code&gt;, on extrait la valeur (le code couleur) à l'adresse située dans SI pour la stocker dans AL, on rajoute donc cette instruction juste après le label :&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;al&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Les crochets signifient qu'on copie dans AL la valeur à l'adresse contenue dans SI, mais pas SI directement. La ligne suivante reste intacte, puisqu'on copie toujours notre valeur à l'adresse indiquée par ES:DI.&lt;/p&gt;
&lt;p&gt;Ensuite on incrémente DI pour se déplacer de pixel en pixel sur la ligne. On va juste en dessous rajouter un incrément pour SI sous la forme &lt;code&gt;inc si&lt;/code&gt;, pour se déplacer en même temps d'octet en octet dans l'image.&lt;/p&gt;
&lt;p&gt;Maintenant tout est prêt et notre image va apparaître.&lt;/p&gt;
&lt;p&gt;Fichiers complets : &lt;a href="media/afficher-13h/main.asm"&gt;main.asm&lt;/a&gt;, &lt;a href="media/afficher-13h/image.asm"&gt;image.asm&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo sur fond noir, dans le DOS" src="media/afficher-13h/mode13h-lenna.png"&gt;&lt;/p&gt;
&lt;h2&gt;Détails additionnels&lt;/h2&gt;
&lt;h3&gt;Optimisation 16 bits&lt;/h3&gt;
&lt;p&gt;Plutôt que travailler octet par octet pour afficher l'image, on peut aussi profiter des registres 16 bits et travailler mot par mot. Dans ce cas, on utilise AX plutôt que AL dans la boucle &lt;code&gt;ligne&lt;/code&gt; mais il faut alors remplacer &lt;code&gt;inc di&lt;/code&gt; et &lt;code&gt;inc si&lt;/code&gt; par &lt;code&gt;add di, 2&lt;/code&gt; et &lt;code&gt;add si, 2&lt;/code&gt; pour avancer de deux octets à la fois. Par conséquent, il faut diviser par deux la valeur de CX qui définit le nombre d'itérations de la boucle. En 75 itérations on parcourt 150 pixels.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;75&lt;/span&gt;
&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="nl"&gt;ligne:&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;mov&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;es&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;ax&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;
&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="nf"&gt;loop&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;ligne&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Utilisation d'une palette&lt;/h3&gt;
&lt;p&gt;On ne l'a pas vu ici pour des raisons de simplicité mais on pourrait utiliser une palette VGA personnalisée qui correspond mieux à l'image. L'inconvénient de cette approche, par exemple dans le cas d'un jeu, est qu'il faut changer de palette selon le contexte.&lt;/p&gt;
&lt;h3&gt;Ratio d'image&lt;/h3&gt;
&lt;p&gt;Le mode 13h fournit un canevas de 320x200 : ça correspond à un format 16:10, pourtant à l'époque du DOS les écrans étaient en 4:3, ce sont des pixels rectangles. On aurait pu étirer notre image horizontalement (anamorphose) pour compenser l'étirement vertical de l'affichage. DOSBOX a fait le choix par défaut d'afficher le mode 13h en pixels carrés.&lt;/p&gt;
&lt;p&gt;Pour mon jeu de &lt;a href="https://github.com/mayafri/yass-sokoban"&gt;Sokoban&lt;/a&gt;, j'ai compensé le ratio en utilisant des sprites rectangulaires. Ce n'est pas le choix qu'a fait l'auteur de &lt;a href="http://www.the8bitguy.com/product/planet-x3-for-ms-dos-computers/"&gt;Planet X3&lt;/a&gt;, il a préféré garder des sprites carrés certainement pour plus de simplicité et le jeu reste très joli même en 4:3. Même chose pour SimCity. &lt;a href="https://www.youtube.com/watch?v=YvckyWxHAIw"&gt;Cette vidéo&lt;/a&gt; parle bien du problème.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/afficher-13h/planetx3.webp" alt="Capture d'écran du jeu Planet X3" class="pixelart"&gt;
&lt;figcaption&gt;Planet X3 pour DOS
&lt;/figure&gt;

&lt;h2&gt;Pour aller plus loin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://benoit-m.developpez.com/assembleur/tutoriel/index.php"&gt;Tuto assembleur x86 de Benoit M.&lt;/a&gt; : il s’apparente surtout à un manuel, mais très complet et rédigé en français.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.fysnet.net/"&gt;fysnet.net&lt;/a&gt; : plein d’articles sur la programmation pour DOS en assembleur et en C.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ctyme.com/rbrown.htm"&gt;Ralf Brown’s Interrupt List&lt;/a&gt; : liste très complète d’interruptions du DOS et d’autres programmes.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.fountainware.com/EXPL/vga_color_palettes.htm"&gt;VGA Color Palettes&lt;/a&gt; : palettes de couleurs par défaut des différents modes VGA.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20210708233917/http://www.brackeen.com/vga/"&gt;256-Color VGA Programming in C&lt;/a&gt; : page didactique dédiée à la programmation en VGA sur DOS (exemples de code en C). (web archive)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20220223124950/https://sites.google.com/site/pcdosretro/"&gt;PC DOS Retro&lt;/a&gt; : de nombreuses pages de documentation sur DOS, vers la fin on trouve une liste des scancodes complets pour le clavier. (web archive)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20181017210704/http://atrevida.comprenica.com/gameprog.html"&gt;Atrevida Game Programming Tutorials&lt;/a&gt; : tutos sur la programmation de jeux pour DOS, certaines choses sont en C et d’autres en assembleur. (web archive)&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Histoire et évolution du téléphone fixe</title><link href="https://maya.sh/telephone-fixe.html" rel="alternate"/><published>2020-05-14T00:00:00+02:00</published><updated>2020-05-14T00:00:00+02:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2020-05-14:/telephone-fixe.html</id><summary type="html">&lt;p&gt;Je fais cet article pour partager le fruit de mes recherches et de mon expérience sur comment utiliser un vieux téléphone sur une ligne numérique en 2019 avec toutes les fonctionnalités (sonnerie, réception d'appel et composition) et puis pour bavarder un peu sur le sujet.&lt;/p&gt;
&lt;p&gt;J'adore l'appareil traditionnel, le téléphone …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Je fais cet article pour partager le fruit de mes recherches et de mon expérience sur comment utiliser un vieux téléphone sur une ligne numérique en 2019 avec toutes les fonctionnalités (sonnerie, réception d'appel et composition) et puis pour bavarder un peu sur le sujet.&lt;/p&gt;
&lt;p&gt;J'adore l'appareil traditionnel, le téléphone à la papa, le poste électromécanique avec ses cloches qui sonnent pour de vrai, le combiné ergonomique et le cordon en spirale. Ces objets sont simples, bien conçus et très solides, ils tiennent le coup pendant des décennies ; après 40 ans souvent un simple nettoyage suffit pour les remettre en route.&lt;/p&gt;
&lt;p&gt;Les téléphones traditionnels étaient éco-responsables sans même le vouloir. Comment ? Parce qu'ils n'étaient pas des objets de consommation. Le poste n'était pas vendu mais loué par la compagnie de téléphone qui l'avait conçu pour son réseau et généralement interdisait que l'on branche tout autre appareil non-approuvé sur la ligne. L'histoire du &lt;a href="https://arstechnica.com/tech-policy/2017/12/carterfone-40-years/"&gt;Carterphone&lt;/a&gt; aux États-Unis est très intéressante.&lt;/p&gt;
&lt;p&gt;En France, le &lt;a href="https://fr.wikipedia.org/wiki/T%C3%A9l%C3%A9phone_S63"&gt;modèle S63&lt;/a&gt;, au début en gris puis plus tard en multiples coloris, au début en cadran rotatif puis plus tard à touches, a été distribué dans les foyers français de 1963 jusqu'à 1985. En Amérique du Nord, les modèles 500 (rotatif), 1500 (à 10 touches) puis 2500 (à 12 touches) ont équipé les foyers américains et canadiens pendant toute la seconde partie du XXe siècle. &lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/telephone-fixe/depaepe.jpg" alt="Publicité pour les téléphones S63"&gt;
        &lt;figcaption&gt;Le modèle S63 français proposé en plusieurs couleurs
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/telephone-fixe/lease_or_own_price_list_a.jpg" alt="Publicité pour un téléphone américain Model 2500"&gt;
        &lt;figcaption&gt;Téléphone Western Electric 2500
    &lt;/figure&gt;
&lt;/div&gt;

&lt;h2&gt;Vieille histoire&lt;/h2&gt;
&lt;p&gt;On prête souvent l'invention du téléphone à Graham Bell, en fait il semble vraiment que non, mais que &lt;em&gt;bell&lt;/em&gt; signifie &lt;em&gt;cloche&lt;/em&gt; reste une belle coincidence. L'histoire &lt;a href="https://fr.wikipedia.org/wiki/T%C3%A9l%C3%A9phone#Histoire"&gt;est compliquée&lt;/a&gt; mais en tous cas l'invention a d'abord été théorisée par &lt;a href="https://fr.wikipedia.org/wiki/Charles_Bourseul"&gt;Charles Bourseul&lt;/a&gt; que personne ne prenait au sérieux et qui n'aura jamais la célébrité de Bell.&lt;/p&gt;
&lt;p&gt;Au début les téléphones n'avaient pas de cadran téléphonique, pour téléphoner on décrochait et on tombait directement sur l'opératrice qui reliait les correspondants entre eux en branchant des prises Jack (qui a été inventée à cette fin). Avec le développement du réseau il devenait nécessaire de donner des numéros aux abonnés, puis des numéros ou des noms aux bureaux de rattachement. On pouvait demander le &lt;a href="https://fr.wikipedia.org/wiki/Plan_de_num%C3%A9rotation_en_France#Historique_du_plan_de_num%C3%A9rotation"&gt;Gutenberg 12 21&lt;/a&gt; par exemple à Paris.&lt;/p&gt;
&lt;p&gt;Le système manuel demandait beaucoup de travail et ne permettait pas un développement rapide du réseau. Les lignes arrivaient à saturation et les clients devaient attendre. Pendant longtemps le réseau manuel a côtoyé le réseau automatique. La France &lt;a href="https://www.ladepeche.fr/article/2010/04/11/814685-c-etait-les-dames-du-telephone.html"&gt;a du attendre 1978&lt;/a&gt; pour que son réseau soit entièrement automatique.&lt;/p&gt;
&lt;p&gt;Quand on a automatisé, on s'est servi des noms de répartiteur ou des noms de communes pour faire la correspondance avec les chiffres. Par exemple, &lt;strong&gt;Gut&lt;/strong&gt;enberg-12-21 correspond à 488-12-21. C'est pour cela que les cadrans de téléphone ont des lettres sur chaque chiffre. En Amérique du Nord ces lettres servent à faire des numéros facilement mémorisables. Le &lt;code&gt;514-AUTOBUS&lt;/code&gt; donne toujours aujourd'hui les horaires d'autobus à Montréal par exemple.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/telephone-fixe/autobus-tel.png" alt="Illustration d'un panneau d'autobus avec le numéro et des touches d'un téléphone correspondantes"&gt;
    &lt;figcaption&gt;Une astuce incroyable !!!
&lt;/figure&gt;

&lt;p&gt;Les cadrans rotatifs fonctionnent en créant des petites coupures (des impulsions) sur la ligne. Une impulsion par chiffre est donnée : le chiffre trois donne 3 impulsions, le zéro donne 10 impulsions. Un cadran dépoussiéré et huilé devrait mettre une seconde pour faire les 10 impulsions du chiffre zéro. S'il est trop lent il est possible que le réseau n'interprète pas correctement le numéro.&lt;/p&gt;
&lt;p&gt;Les premiers autocommutateurs étaient électromécaniques. Lors de la composition du numéro, les impulsions faisaient bouger des petites pièces successivement, ce qui menait à la connexion physique des lignes entre les deux abonnés.&lt;/p&gt;
&lt;figure&gt;
    &lt;iframe width="480" height="360" src="https://www.youtube.com/embed/xZePwin92cI" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;
    &lt;figcaption&gt;Explication du commutateur électromécanique (en anglais)
&lt;/figure&gt;

&lt;p&gt;Dans le &lt;a href="https://fr.wikipedia.org/wiki/Plan_de_num%C3%A9rotation_nord-am%C3%A9ricain"&gt;plan de numérotation de l'Amérique du Nord&lt;/a&gt; on utilise des numéros à 10 chiffres. 3 chiffres pour l'indicatif régional qui représente généralement une ville ou une agglomération, 3 autres chiffres pour le numéro de central et 4 chiffres pour l'abonné. Quand on appelait à l'intérieur d'une même ville, on ne tapait que les 7 derniers chiffres (pas l'indicatif régional).&lt;/p&gt;
&lt;p&gt;Pour que le central puisse faire la distinction entre les deux types de numéros, les chiffres respectaient une nomenclature particulière. L'indicatif régional portait obligatoirement 0 ou 1 comme chiffre du milieu, le numéro de central ne pouvait pas contenir 0 ou 1 comme chiffre du milieu et ni les indicatifs ni les numéros de central ne pouvaient commencer par 0 ou 1 ; entre autres règles. Le plan a été revu en 1995 pour permettre des codes supplémentaires (comme le 450 pour la banlieue de Montréal).&lt;/p&gt;
&lt;p&gt;Les codes régionaux ont au départ été attribués en fonction de la densité de population des régions, qui avaient alors des numéros plus ou moins rapides à composer sur le cadran rotatif. Le code de New-York est le 212 (très rapide à composer), le code de l'Alaska est le 907 (très long à composer).&lt;/p&gt;
&lt;h2&gt;Aujourd'hui&lt;/h2&gt;
&lt;p&gt;L'hégémonie d'Internet a rendu possible le déploiement de la VoIP (voix à travers le réseau IP) ce qui permet beaucoup plus de flexibilité : possibilité de prendre des appels depuis son ordinateur ou son smartphone, réseaux d'entreprise internes faciles à gérer sans matériel complexe dédié, possibilité de passer par le Wifi, etc.&lt;/p&gt;
&lt;p&gt;Le service historique avec ses commutateurs dans des grosses armoires on l'appelle le Réseau téléphonique commuté en France (RTC) ; il est analogique sur les derniers bouts mais le multiplexage de l'infrastructure a été numérisé dans les années 90. Dans de nombreux pays, il est en train de vivre ses dernières heures. On ne branche plus son téléphone sur la prise murale mais sur le routeur qui numérise le signal et le fait passer par le réseau Internet. Le réseau de lignes téléphoniques aura pour dernière et unique vocation de faire passer l'ADSL (en attendant son remplacement par la fibre) et le téléphone devient une simple activité d'Internet, similaire à une conversation audio Skype.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/telephone-fixe/fixe-orange.jpg" alt="Boite en carton avec une illustration artistique en couleurs"&gt;
&lt;figcaption&gt;En France, boite de l'adaptateur pour le téléphone numérique IP d'Orange. Ce boitier est loué aux personnes qui n'ont pas d'abonnement à internet. Sur l'illustration on remarque un téléphone américain avec son étiquette caractéristique sous le clavier.
&lt;/figure&gt;

&lt;p&gt;Avec la fermeture du service traditionnel on perd plusieurs choses :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;l'auto-alimentation de la ligne : en cas de coupure d'électricité, la ligne traditionnelle restait active, ce qui était un gros avantage avant que les téléphones mobiles ne soient répandus ;&lt;/li&gt;
&lt;li&gt;la composition par impulsions (les cadrans rotatifs) car souvent cette fonctionnalité a été abandonnée dans le passage au numérique, mais on va voir comment surmonter ça.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Se servir d'un vieil appareil aujourd'hui&lt;/h2&gt;
&lt;p&gt;Globalement, il suffit de le brancher comme un appareil moderne et ça doit fonctionner, à l'exception peut-être de la sonnerie ou de la composition de numéro, selon le clavier utilisé.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Je me suis aperçue qu'avec la Livebox 5 la prise pour le téléphone ne gère que les appareils numériques DECT et donc mon S63 ne fonctionne pas du tout dessus.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;Trois modèles de clavier&lt;/h3&gt;
&lt;p&gt;Comme on l'a vu les téléphones à cadran rotatifs sont souvent incompatibles avec les équipements récents. Les téléphones plus modernes avec des touches numérotent par tonalités (DTMF), ces notes de musique qu'on entend à chaque appui.&lt;/p&gt;
&lt;p&gt;Attention cependant, il a existé des téléphones à touches mais à numérotation par impulsions. C'est par exemple le cas des premiers postes S63 français à touches, ceux dépourvus de dièse et d'étoile. Dans ce cas, vous serez confronté au même problème que pour les téléphones rotatifs. Certains appareils plus récents (et électroniques) ont un petit switch pour commuter entre les deux modes de numérotation.&lt;/p&gt;
&lt;p&gt;Si vous avez le téléphone par une « box » qui intègre des prises pour brancher un téléphone traditionnel, elles ne vous permettront probablement pas d'utiliser un cadran rotatif. Vous pouvez alors vous procurer un boitier comme le Rotatone à installer dans le téléphone S63, ce boitier va simuler un clavier numérique DTMF. Sinon, vous pouvez trouver un service VoIP qui ne vous impose pas son matériel, ainsi vous n'aurez pas à bricoler votre vieux téléphone. Moi je passe par OVH par exemple.&lt;/p&gt;
&lt;p&gt;Si vous possédez un modem-routeur (ou les deux séparés) avec un boitier séparé pour brancher le téléphone, il s'agit d'un ATA (adaptateur de téléphone analogique). Si c'est un Cisco, il ne gère pas les téléphones rotatifs. Si c'est un GrandStream alors il y a des chances que cela fonctionne (je possède un vieux HT502), il faut vérifier. Dans les boitiers récents de cette marque, c'est documenté « pulse » et activable dans les paramètres de l'interface web. Une liste de marques et modèles &lt;a href="http://www.classicrotaryphones.com/forum/index.php?topic=20386.0"&gt;est disponible ici&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Le coup de sonnerie&lt;/h3&gt;
&lt;p&gt;Les vieux appareils font vibrer un marteau contre deux cloches pour déclencher la sonnerie. Il se peut que le courant faible délivré par un équipement moderne ne soit pas suffisant pour des téléphones qui ont fait la guerre, mais en général en utilisant un ATA dédié ça devrait marcher. La documentation donne d'éventuels indices, en particulier &lt;a href="https://en.wikipedia.org/wiki/Ringer_equivalence_number"&gt;le nombre de REN&lt;/a&gt;. Par exemple, mon GrandStream HT502 délivre 3 REN par ligne. Cela signifie qu'on peut brancher jusqu'à trois téléphones traditionnels sur la même ligne et qu'il y aura assez de courant pour les faire sonner.&lt;/p&gt;
&lt;p&gt;Les appareils plus anciens (avant les années 60, notamment le Ericsson U43 en bakélite) peuvent ne pas avoir de sonnerie (on appelait ça un ronfleur). À cette époque en France, la sonnerie était un boitier vissé sur le mur.&lt;/p&gt;
&lt;p&gt;Attention aussi à vérifier le réglage de sonnerie, souvent un cran, une roue ou une grosse vis en dessous de l'appareil. Il est possible qu'il soit en mode sourdine.&lt;/p&gt;
&lt;h3&gt;Brancher les fils&lt;/h3&gt;
&lt;p&gt;Aujourd'hui les téléphones utilisent partout le connecteur RJ11 (la prise carrée avec le clip qui se brise facilement). Cette prise est utilisée en Amérique du Nord depuis au moins les années 70, mais il est possible que vous tombiez sur un téléphone équipé d'une vieille prise Bell avec 4 gros plots, la « 4 prong phone jack ». Dans ce cas, je vous conseille de trouver un adaptateur vers RJ11 pour que le téléphone conserve son antique prise historique.&lt;/p&gt;
&lt;p&gt;En France, les téléphones ont utilisé jusqu'à la fin des années 2000 la prise T, &lt;a href="http://goctruc.free.fr/Telephonie/PriseT.html"&gt;dont cet article décrit l'horreur que c'était&lt;/a&gt;. On trouve un peu partout des adaptateurs prise T vers RJ11. À partir des années 90, les téléphones étaient à prise détachable : RJ11 côté téléphone et prise T côté mur.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/telephone-fixe/internet-france.jpg" alt="Image humoristique avec du vieux matériel français en mauvais état"&gt;
    &lt;figcaption&gt;Internet en France à la campagne dans les années 2000 - 2010
&lt;/figure&gt;

&lt;h3&gt;Câbler son installation&lt;/h3&gt;
&lt;p&gt;Il est possible de brancher son téléphone à son ATA mais il est aussi possible de réactiver toutes les prises murales de la maison, par exemple pour avoir un appareil dans une chambre et un autre dans le salon.&lt;/p&gt;
&lt;p&gt;En fonction du nombre de REN en sortie de ligne, on sait combien d'appareils anciens brancher au maximum dans la maison. Désactiver la sonnerie d'un appareil ne fait pas économiser de courant (par exemple, sur le Bell 500, un appareil en sourdine fait vibrer le marteau dans le vide).&lt;/p&gt;
&lt;p&gt;Les prises de téléphone sont branchées en cascade dans un appartement et reliées à un réseau extérieur s'il n'a pas été démantelé :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;si vous utilisez encore l'ADSL gardez une prise reliée au réseau extérieur évidemment mais coupée des autres prises ;&lt;/li&gt;
&lt;li&gt;sinon coupez juste votre cascade de prises de l'extérieur ;&lt;/li&gt;
&lt;li&gt;ensuite il suffit de brancher la prise du ATA ou de la box sur n'importe quelle prise pour alimenter toutes les autres.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;À partir de l'histoire du téléphone, on peut dériver vers beaucoup d'autres choses et faire des mises en perspective intéressantes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Jusqu'en 1982, la compagnie AT&amp;amp;T Corporation avait le monopole du téléphone aux États-Unis, ce qui a mené &lt;a href="https://fr.wikipedia.org/wiki/Scission_du_syst%C3%A8me_Bell"&gt;à son démantèlement&lt;/a&gt; en plusieurs compagnies à l'issue d'un procès antitrust intenté par le département de la justice. Est-ce que Google et Facebook pourraient subir le même sort ?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Les laboratoires &lt;a href="https://fr.wikipedia.org/wiki/Laboratoires_Bell"&gt;Bell Labs&lt;/a&gt; (qui appartenaient à AT&amp;amp;T) ont été à l'origine de nombreuses inventions d'importance fondamentale comme le transistor, mais aussi le langage C et le système d'exploitation Unix.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour aller plus loin :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Je vous recommande le site &lt;a href="https://www.histelfrance.fr/"&gt;Histoire des Télécommunications Françaises&lt;/a&gt; qui possède un contenu très riche !&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Autre site dans l'ambiance : &lt;a href="https://www.minitel-alcatel.fr/index.html"&gt;Le minitel et Alcatel&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry><entry><title>Les formats vidéo analogiques</title><link href="https://maya.sh/video-analogique.html" rel="alternate"/><published>2018-09-21T00:00:00+02:00</published><updated>2018-09-21T00:00:00+02:00</updated><author><name>Maya Saura</name></author><id>tag:maya.sh,2018-09-21:/video-analogique.html</id><summary type="html">&lt;p&gt;Je fais cet article pour essayer de simplifier les bases de la vidéo analogique. Je ne rentre volontairement pas dans les subtilités techniques (les calculs mathématiques, les histoires de fréquences et tout). Je fais ça à la sauce &lt;em&gt;C'est pas sorcier&lt;/em&gt; sauf que je suis nulle en maquettes. C'est utile …&lt;/p&gt;</summary><content type="html">&lt;p&gt;Je fais cet article pour essayer de simplifier les bases de la vidéo analogique. Je ne rentre volontairement pas dans les subtilités techniques (les calculs mathématiques, les histoires de fréquences et tout). Je fais ça à la sauce &lt;em&gt;C'est pas sorcier&lt;/em&gt; sauf que je suis nulle en maquettes. C'est utile pour comprendre d'autres pages sur le site.&lt;/p&gt;
&lt;p&gt;Si vous voyez des trucs qui vous paraissent louches ou mal expliqués faites-moi signe !&lt;/p&gt;
&lt;h2&gt;Fréquence&lt;/h2&gt;
&lt;p class="float-right"&gt;
    &lt;img src="media/video-analogique/frequence-windows.gif" alt="Capture d'écran d'un réglage de fréquence d'écran sur un ordinateur Windows"&gt;
&lt;/p&gt;

&lt;p&gt;Le nombre de trames par seconde est basé sur la fréquence du courant électrique utilisé dans chaque région, pour des raisons historiques. C'est pour ça que l'Amérique du Nord a la télévision en 60 trames/s, parce que son courant électrique est de 60 Hz. Même chose pour l'Europe et son 50 Hz.&lt;/p&gt;
&lt;p&gt;Plus la fréquence est élevée, plus l'image est fluide. Sur PC, au temps des moniteurs à tube, on avait des fréquences plus hautes que sur la plupart des écrans LCD de maintenant pour éviter le scintillement (jusqu'à 75 Hz au moins).&lt;/p&gt;
&lt;h2&gt;Résolution&lt;/h2&gt;
&lt;p&gt;La résolution d'un signal analogique ne se détermine pas en pixels mais en lignes, puisque l'essence du signal vidéo est une variation continue de tension électrique. On passe d'une ligne à l'autre avec une saute de tension appelée top ligne, et on passe de trame en trame avec un top trame.&lt;/p&gt;
&lt;p&gt;Là aussi ça change selon les pays... Il y a fort longtemps en France la première chaine était émise en 819 lignes, les Anglais étaient eux en 405 lignes. Puis toute l'Europe s'est accordée sur le 625 lignes. L'Amérique du Nord et le Japon se sont mis quelques années plus tôt sur 525 lignes.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/Lines_frames_and_frequencies03.JPG" alt="Vieille caricature de journal montrant un anglais énervé devant sa télévision de mauvaise qualité pendant que les français, satisfaits, regardent la même image nettement : le visage d'une femme."&gt;
    &lt;figcaption&gt;Les Anglais en 405 lignes, les Français en 819 lignes...
&lt;/figure&gt;

&lt;p&gt;Subtilité : les télévisions à tube cathodiques n'affichent pas toutes les lignes. En effet, une partie de l'image est mangée par les bords de l'écran, on appelle ça l'overscan.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Amérique du Nord / Japon : 525 lignes dont 480 visibles&lt;/li&gt;
&lt;li&gt;Europe : 625 lignes dont 576 visibles&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/overscan.png" alt="Comparaison entre une image complète et une image mangée par les bords du poste de télévision."&gt;
    &lt;figcaption&gt;En général, les télévisions mangent même quelques lignes supposées être visibles.
&lt;/figure&gt;

&lt;p&gt;Les lignes en trop ont servi en télévision pour être affectées aux données de télétexte, au sous-titrage ou aux informations numériques pour les décodeurs Canal+ en France (pour l'actualisation des droits des abonnés).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/vbi.jpg" alt="Affichage du bas (normalement invisible) d'une image, on voit une barre blanche et des petits points qui sont des données numériques incompréhensibles à l'œil nu."&gt;
    &lt;figcaption&gt;Lignes invisibles de l'image, normalement hors de l'écran
&lt;/figure&gt;

&lt;h2&gt;Entrelacement&lt;/h2&gt;
&lt;p&gt;Il s'agit d'un énième bricolage technique qui date des débuts de la télévision et dont on n'arrive pas à se débarrasser. Pour faire court, c'est une astuce qui consiste à transmettre un affichage fluide (60 Hz par exemple) sans transmettre réellement une image complète à chaque 60e de seconde.&lt;/p&gt;
&lt;p&gt;En fait avec l'entrelacement on transmet des demi-images. Sur une trame on transmet les lignes paires et sur la trame d'après on transmet les lignes impaires, contrairement au mode progressif où chaque trame consititue une image complète. En gros, qu'on transmette une image en 480i (480 lignes visibles entrelacées) ou en 240p (240 lignes visibles progressives), on fait passer la même quantité d'informations par seconde (le même nombre de lignes chaque seconde), mais répartie différemment.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/prog-entrelac.svg" alt="Schéma temporel comparant un signal progressif et un signal entrelacé."&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;i&lt;/strong&gt; pour &lt;em&gt;interlaced&lt;/em&gt; (entrelacé)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;p&lt;/strong&gt; pour &lt;em&gt;progressive&lt;/em&gt; (progressif)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En Europe la télédiffusion analogique avait 625 lignes entrelacées, donc chaque 50e de seconde une trame de 312,5 lignes était transmise (oui ça fait des demi-lignes...). On détermine la fréquence ligne comme ça : 312,5 × 50 = 15625 Hz. Ça nous donne environ 15,6 KHz, et c'est ça le bruit très aigü qu'on entend lorsqu'une télévision est allumée. 😊&lt;/p&gt;
&lt;p&gt;Traditionnellement la télédiffusion utilise l'entrelacé, les formats progressifs n'ont été utilisés qu'avec les jeux vidéo. Une télévision américaine conçue pour le 480i s'accomodera normalement du 240p : on lui indique que toutes les trames sont paires, c'est de là que vient l'effet de « scanline ». Pareil pour une télévision européenne conçue pour le 576i, elle doit fonctionner en 288p.&lt;/p&gt;
&lt;p&gt;L'entrelacement ça fonctionne grâce à la &lt;a href="https://fr.wikipedia.org/wiki/Persistance_r%C3%A9tinienne"&gt;persistance rétinienne&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Systèmes de couleurs&lt;/h2&gt;
&lt;p&gt;Je vais résumer ça très brièvement sans rentrer dans des détails techniques d'une autre époque (bien que les principes de ces systèmes de couleurs des années 60 se retrouvent aujourd'hui dans les méthodes de compression numérique).&lt;/p&gt;
&lt;p&gt;Une image en couleurs peut être constituée à partir de trois composantes primaires rouge, vert et bleu. Par superposition de ces couleurs à différentes intensités on obtient toutes les couleurs.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/rgb.svg" alt="Schéma expliquant qu'une image est composée de trois balayages lumineux superposés : un rouge, un bleu et un vert."&gt;
    &lt;figcaption&gt;Un écran à tube cathodique en couleurs est composé de trois faisceaux colorés rouge, vert et bleu qui parcourent la surface de l'écran en variant d'intensité.
&lt;/figure&gt;

&lt;p&gt;Quand la télévision en couleurs a fait son apparition dans les années 50, il a fallu bricoler pour que les postes en noir et blanc puissent continuer à recevoir les émissions correctement, c'est pourquoi les ingénieurs de l'époque ont transmis la couleur en la modulant (en la « cachant ») sur le signal lumineux (celui en niveaux de gris). Les postes anciens continuaient d'afficher les programmes en convertissant la tension électrique du signal vidéo en lumière, et les postes couleur avaient en plus des circuits électroniques permettant de reconstituer les couleurs.&lt;/p&gt;
&lt;p&gt;Donc on a besoin de trois composantes pour transmettre un signal couleur, mais l'un deux doit être le signal en noir et blanc (Y, la luminance). La deuxième composante est alors la différence de bleu par rapport à cette luminance (B-Y), et la troisième composante est la différence de rouge (R-Y).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="https://upload.wikimedia.org/wikipedia/commons/e/ec/Yuv.png" alt="Espace de couleurs YUV"&gt;
    &lt;figcaption&gt;&lt;a href="https://fr.wikipedia.org/wiki/YUV"&gt;L'espace de couleurs du système PAL&lt;/a&gt; est représenté ici à une lumière à 50% (centre) : la diff. de rouge est le vecteur vertical, la diff. de bleu est le vecteur horizontal.
&lt;/figure&gt;

&lt;p&gt;Ensuite, on utilise la magie des ondes pour moduler à chaque ligne les composantes B-Y et R-Y sur le signal de luminance (Y). Ce qui ressort, c'est ce qu'on appelle un signal &lt;strong&gt;composite&lt;/strong&gt; : dans un seul fil on a nos trois composantes pour que la TV reconstitue l'image en couleurs. Le processus dégrade légèrement la qualité de l'image.&lt;/p&gt;
&lt;p&gt;Il existe dans le monde trois normes de codage de couleurs pour faire un signal composite : le NTSC (utilisé au Japon et en Amérique du Nord), le PAL (utilisé en Europe) et le SÉCAM (utilisé en France et en Russie). Le SÉCAM n'a jamais été utilisé par aucun fabricant de consoles de jeux vidéos (ou alors dans les années 70 peut-être...).&lt;/p&gt;
&lt;p&gt;Tous ces systèmes sont incompatibles les uns avec les autres : lire une VHS couleur de type SÉCAM sur une télé en PAL donne une image en niveaux de gris et inversement. Les postes « multistandards » ont été popularisés dans les années 90.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/couleurs.svg" alt="Schéma expliquant les étapes du traitement du signal couleur"&gt;
    &lt;figcaption&gt;Les différentes étapes de traitement d'un signal vidéo de la source jusqu'à l'antenne d'émission. C'est comme ça que fonctionne la télévision analogique traditionnelle.
&lt;/figure&gt;

&lt;h2&gt;Modulation&lt;/h2&gt;
&lt;p&gt;La dernière étape du schéma ci-dessus est la modulation « RF », c'est-à-dire que le signal vidéo est assemblé avec l'audio puis est placé sur une fréquence. Cela permet d'envoyer le signal sur les ondes.&lt;/p&gt;
&lt;p&gt;On module le signal sur une fréquence. Pour se simplifier avec les chiffres on utilise des numéros de canaux qui dépendent de la norme de modulation utilisée. Par exemple en Amérique du Nord (modulation norme M) :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Canal 2 = 55,25 Mhz&lt;/li&gt;
&lt;li&gt;Canal 3 = 61,25 Mhz&lt;/li&gt;
&lt;li&gt;Canal 4 = 67,25 Mhz&lt;/li&gt;
&lt;li&gt;&lt;a href="https://fr.wikipedia.org/wiki/Fr%C3%A9quences_des_canaux_de_t%C3%A9l%C3%A9vision"&gt;et ainsi de suite...&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/cbft.png" alt="Capture d'une image de la télévision de Radio-Canada annonçant ses fréquences à Montréal"&gt;
    &lt;figcaption&gt;Radio-Canada Montréal (CBFT) était modulée sur le canal 2 pour l'antenne du Mont-Royal, et sur le canal 4 pour la télédistribution par câble.
&lt;/figure&gt;

&lt;p&gt;Les postes de télévision traditionnels n'avaient pas d'entrée vidéo externe et ne pouvaient recevoir du signal que via leur prise d'antenne. C'est pour cela que les anciens appareils électroniques (VHS ou consoles) pouvaient se connecter directement via la prise d'antenne, il fallait alors syntoniser (&lt;em&gt;tuner&lt;/em&gt;) la bonne fréquence.&lt;/p&gt;
&lt;p&gt;L'avantage de la modulation est qu'elle permet une énorme compatibilité avec toutes sortes d'écrans anciens, mais la qualité d'image est encore dégradée par rapport au signal composite (neige, écho, image qui bave...).&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/cul-snes.jpg" alt="Partie arrière de la console de jeux Super Nintendo"&gt;
    &lt;figcaption&gt;La console Super Nintendo américaine a une sortie composite en NTSC (la prise « Multi out ») puis une sortie antenne (le truc brun) qui sort le même signal NTSC mais modulé sur le canal 3 ou 4 (on peut choisir avec le switch).&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;Attention, il existe là encore plusieurs normes de modulation non compatibles entre elles ! Voici les principales :
- Amérique du Nord, Brésil, Japon : norme M
- France : norme L / L'
- Europe de l'Ouest : norme B / G
- Europe de l'Est, Chine : norme D / K
- Grande-Bretagne : norme I&lt;/p&gt;
&lt;p&gt;Heureusement depuis les années 90 les télévisions sont en général multistandards.&lt;/p&gt;
&lt;figure&gt;
    &lt;img src="media/video-analogique/modul.jpg" alt="Télévision affichant un visage brouillé avec les mauvaises couleurs"&gt;
    &lt;figcaption&gt;Affichage d'un signal norme L sur une télé en norme B. En norme L un haut voltage indique beaucoup de lumière et un bas voltage indique du noir, c'est l'inverse en norme B : c'est ce qui explique cette inversion de luminance. L'image saute constamment car la télé n'arrive pas à trouver les débuts de lignes ni de trames. (Oui c'est la tête de Ruquier !)
&lt;/figure&gt;

&lt;h2&gt;Prises&lt;/h2&gt;
&lt;p&gt;Je ne vais pas détailler tous les modèles de prises existants, mais uniquement quelques connecteurs remarquables.&lt;/p&gt;
&lt;h3&gt;Le RCA&lt;/h3&gt;
&lt;p&gt;C'est le connecteur le plus répandu partout dans le monde. Sa forme la plus courante c'est le cable avec les trois prises rondes jaune-rouge-blanc : le jaune pour la vidéo &lt;strong&gt;composite&lt;/strong&gt;, les rouge et blanc pour le son stéréo.&lt;/p&gt;
&lt;p&gt;On trouve aussi (en Amérique du Nord surtout) un cable RCA avec des prises rouge-vert-bleu pour faire transiter un signal vidéo directement en RGB (rouge - vert - bleu) ou parfois en YUV (luminance - diff. de bleu - diff. de rouge),  chaque fil faisant passer une &lt;strong&gt;composante&lt;/strong&gt;, on évite ainsi de moduler et la qualité est meilleure. Pour le son il faut ajouter un cable RCA audio (rouge-blanc).&lt;/p&gt;
&lt;p&gt;On trouve aussi des connecteurs RCA sur les sorties modulateur de vieux appareils (ce qui peut créer la confusion).&lt;/p&gt;
&lt;div class="flex"&gt;
    &lt;figure&gt;
        &lt;img src="media/video-analogique/composite.png" alt="Trois prises rondes de type RCA"&gt;
        &lt;figcaption&gt;Audio-vidéo en composite
    &lt;/figure&gt;
    &lt;figure&gt;
        &lt;img src="media/video-analogique/composante.png" alt="Trois prises rondes de type RCA mais de meilleure qualité"&gt;
        &lt;figcaption&gt;Vidéo en composantes : RGB ou YUV
    &lt;/figure&gt;
&lt;/div&gt;

&lt;h3&gt;Le S-Vidéo&lt;/h3&gt;
&lt;p class="float-right"&gt;
    &lt;img src="media/video-analogique/s-video.png" alt="Prise S-Vidéo, ronde à 4 broches"&gt;
&lt;/p&gt;

&lt;p&gt;Dans le chapitre sur les systèmes de couleurs, on a vu que pour créer la vidéo composite on mélangeait un signal de différence de rouge (R-Y) et un signal de différence de bleu (B-Y) avec le signal de lumière (Y, la luminance). Le S-Vidéo est un standard intermédiaire entre le composite et le composante. En effet, il mélange ensemble les deux informations B-Y et R-Y mais conserve la luminance sur un fil séparé.&lt;/p&gt;
&lt;p&gt;La qualité est très proche du composante donc bien meilleure que le composite car la télévision n'a pas besoin de faire le travail délicat de séparation de la chrominance sur la luminance.&lt;/p&gt;
&lt;h3&gt;La Péritel&lt;/h3&gt;
&lt;p class="float-right"&gt;
    &lt;img src="media/video-analogique/peritel.png" alt="Prise Péritel, rectangulaire avec plein de petites broches dedans"&gt;
&lt;/p&gt;

&lt;p&gt;Parfois appelée SCART ou « Euroconnector », cette invention française est devenue plus ou moins une norme européenne. La prise péritel permet de faire passer un signal soit en RGB, soit en YUV, soit en S-Vidéo, soit en composite, le tout avec le son en même temps.&lt;/p&gt;
&lt;p&gt;Ainsi avec un appareil doté d'une sortie Péritel, on choisit le mode de sortie (le plus souvent RGB ou Composite) dans les menus de réglage.&lt;/p&gt;
&lt;p&gt;Il y a un piège avec cette super prise ! Les broches qui servent au RGB ou au YUV sont les mêmes qui servent au S-Vidéo. Une télévision qui a deux entrées Péritel en a généralement &lt;strong&gt;juste une&lt;/strong&gt; qui prend le RGB, l'autre prenant le S-Vidéo. Certains postes sophistiqués plus rares permettent de choisir manuellement le mode. Les télévisions qui n'ont une seule entrée Péritel ne sont généralement compatibles qu'avec le RGB, mais ça dépend d'un modèle à l'autre. Heureusement le composite fonctionne sur toutes les prises.&lt;/p&gt;
&lt;p&gt;Attention aussi aux cables : certaines péritel ne sont cablées que pour le RGB, d'autres que pour le composite histoire de faire des économies.&lt;/p&gt;
&lt;h2&gt;Consoles de jeux&lt;/h2&gt;
&lt;p&gt;Les consoles de jeux ont souvent joué avec les standards classiques de télévision. Quelques particularités...&lt;/p&gt;
&lt;h3&gt;Le mode progressif&lt;/h3&gt;
&lt;p&gt;Le mode progressif consiste à n'envoyer que des trames paires. Ce n'est pas un standard de télévision mais une solution pour avoir une image plus fluide avec 50 ou 60 fps réels. Ça privilégie la fluidité plutôt que la définition visible. La NES et la Super Nintendo fonctionnaient comme ça, les autres consoles de cette époque aussi certainement.&lt;/p&gt;
&lt;h3&gt;La France&lt;/h3&gt;
&lt;p&gt;La France et la RDA ont été les seuls pays d'Europe de l'Ouest à fonctionner en couleurs SÉCAM (le reste de l'Europe étant en PAL). Étant donné que dans le pays la prise Péritel permettait de délivrer une image en RGB, les consoles anciennes (style NES, ou Master System) françaises avaient un cable spécial RGB, ce qui évitait aux fabricants d'y mettre un modulateur SÉCAM uniquement pour le marché français. Le signal RGB était parfois natif, ce qui donnait alors une belle qualité (par exemple avec la Sega Master System II) et parfois généré à partir du signal PAL interne (par exemple la NES).&lt;/p&gt;
&lt;p&gt;Au milieu des années 90, les télévisions multistandards PAL/SÉCAM devenaient beaucoup plus répandues ; les premières consoles 3D étaient alors vendues en France comme dans le reste de l'Europe : avec une simple sortie composite PAL. Il existe une bricole pour la Nintendo 64 qui permet d'avoir une sortie RGB. La Dreamcast, avec le bon câble, sortait nativement en RGB.&lt;/p&gt;
&lt;h3&gt;Le fameux PAL 60&lt;/h3&gt;
&lt;p&gt;Les éditeurs de jeux travaillaient en général en norme américaine : c'est à dire en 480 lignes visibles à 60 trames/s. En Europe le standard était de 576 lignes visibles à 50 trames/s. Pour que le public européen puisse bénéficier de la fluidité originale de ces jeux, on proposait au joueur 50 ou 60 Hz (en réalité 576i/50Hz ou 480i/60Hz).&lt;/p&gt;
&lt;p&gt;Le souci, c'est les anciens postes européens étaient incapables de gérer la résolution et la fréquence américaines, ce qui rendait impossible de jouer correctement. D'où la nécessité de demander au joueur à chaque début de jeu si sa télé était compatible avec ce format.&lt;/p&gt;
&lt;figure&gt;
&lt;img src="media/video-analogique/mariokart5060.jpg" alt="Capture d'écran d'une console Gamecube qui affiche le texte suivant : Cette version est compatible avec le mode 60 Hz. Veuillez choisir un mode. Si votre téléviseur n'affiche pas correctement le mode 60 Hz. choisissez le mode 50 Hz."&gt;
&lt;figcaption&gt;On avait cet écran à chaque début de jeu sur Gamecube européenne
&lt;/figure&gt;

&lt;h2&gt;Pour aller plus loin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://portelatine.chez-alice.fr/electronique/hf/video_television.html"&gt;La télévision : principes généraux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20180315104759/https://www.radios-tv.co.uk/Pembers/World-TV-Standards/index.html"&gt;World Analogue Television Standards and Waveforms&lt;/a&gt; (web archive)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=q0Bn08Sq8VM"&gt;Le Sécam, comment ça marche ?&lt;/a&gt; (vidéo, 1962)&lt;/li&gt;
&lt;/ul&gt;</content><category term="ordinateurs"/></entry></feed>