<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr" xml:base="https://vincent.bernat.ch">
  <title>Vincent Bernat — Rétrocomputing</title>
  <link href="https://vincent.bernat.ch/fr/blog/atom-retro.xml" rel="self"/>
  <link href="https://vincent.bernat.ch/fr/blog#tag-retro" rel="alternate"/>
  <id>http://www.luffy.cx/fr/blog/atom-retro.xml/</id>
  <updated>2026-09-01T05:51:51Z</updated>

  <entry>
    <title type="html">Fragments d'un web adolescent</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/2026-anciens-articles" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/2026-anciens-articles#isso-thread" rel="replies" type="text/html"/>
    <updated>2026-02-08T13:51:44Z</updated>
    <id>http://www.luffy.cx/fr/blog/2026-anciens-articles.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<p>J’ai exhumé quelques <a href="/fr/blog#tag-retro-wguide">vieux articles</a> tapés, adolescent, entre 1996
et 1998. Sans éclat à leur époque, ces pages composent, trois décennies plus
tard, la chronique d’un temps disparu.</p>
<p>Le mot « blog » n’existe pas encore. Wikipédia reste à venir. Google n’a pas vu
le jour. AltaVista règne sur les recherches, tout en <a href="/fr/blog/1998-moteurs-de-recherche" title="Le manque d'efficacité des moteurs de recherche">peinant déjà à
embrasser</a> l’immensité naissante du web<sup id="fnref:index"><a class="footnote-ref" href="#fn:index">1</a></sup>. Pour se rencontrer,
il faut s’accorder au préalable et préparer son chemin sur des cartes en papier.
🗺️</p>
<p>Le web s’élance. La spécification CSS vient à peine d’éclore, les tables HTML
servent encore à la mise en page. Les <a href="/fr/blog/1997-cookies" title="Les cookies">cookies</a> et les <a href="/fr/blog/1997-page-publicitaire" title="Une page de pub">bandeaux
publicitaires</a> pointent leur nez. Les pages s’ornent de <a href="/fr/blog/1997-web-multimedia" title="Le web multimédia">musiques et de
vidéos</a>, contraignant les navigateurs à s’armer de <a href="/fr/blog/1997-web-plugins" title="La jungle des plugins">plugins</a>.
Netscape Navigator trône sur 86% du territoire, mais Windows 95 glisse désormais
Internet Explorer dans sa besace pour <a href="/fr/blog/1998-monopole-microsoft" title="Pratiques monopolistiques de Microsoft">combler son retard</a>. Face à
cette offensive, Netscape <a href="/fr/blog/1998-netscape" title="Coup de vent sur Netscape">ouvre les sources de son navigateur</a>.</p>
<p>La France accumule les <a href="/fr/blog/1997-france-retard-internet" title="La France en retard ?">retards</a>. En dehors des universités, l’accès à
Internet demeure <a href="/fr/blog/1997-allegez-facture-ft" title="Allégez votre facture France Télécom">onéreux</a> et laborieux. Le <a href="https://fr.wikipedia.org/wiki/Minitel" title="Minitel sur Wikipedia">Minitel</a> règne encore,
offrant annuaire, billets de train, achats à distance. Cela n’était pas encore
possible avec Internet : <a href="/fr/blog/1998-achats-electroniques" title="Achats électroniques">acheter un CD en ligne</a> relève de la chimère. Le
chiffrement subit une <a href="/fr/blog/1997-commerce-electronique" title="Le commerce électronique">réglementation de fer</a> : l’algorithme DES est
bridé à 40 bits et <a href="/fr/blog/1998-3-secondes" title="3 secondes !">décrypté en quelques secondes</a>.</p>
<p>Ces pages portent la trace de l’adolescence du web. Trente années sont passées.
Les mêmes guerres se poursuivent : vente de données, publicité, monopoles.</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:index">
<p>J’ai récemment remarqué que Google n’indexait plus totalement mon
blog. Par exemple, il n’est plus possible de trouver l’<a href="/en/blog/2013-lanco" title="lanĉo: a task launcher powered by cgroups">article sur
lanĉo</a>. Je suppose que c’est une conséquence de l’explosion des
contenus générés par IA ou simplement d’un changement de priorités pour
Google. <a class="footnote-backref" href="#fnref:index" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="html">Ma collection d'anciennes cartes PC</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/2020-anciennes-cartes-pc" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/2020-anciennes-cartes-pc#isso-thread" rel="replies" type="text/html"/>
    <updated>2020-11-02T18:29:38Z</updated>
    <id>http://www.luffy.cx/fr/blog/2020-anciennes-cartes-pc.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<p>Récemment, j’ai récupéré du vieux matériel chez mes parents, notamment
des cartes d’extension pour PC. Elles ne prennent pas beaucoup de
place et peuvent être converties en objet décoratif. Malheureusement,
je n’étais pas très sensible à la conservation de ce genre de choses.
Par rapport à tout le matériel que j’ai acquis au fil des ans, il ne
subsiste que quelques pièces.</p>
<div class="toc">
<ul>
<li><a href="#tseng-labs-et4000ax-1989">Tseng Labs ET4000AX (1989)</a></li>
<li><a href="#clone-de-ladlib-1992">Clone de l’AdLib (1992)</a></li>
<li><a href="#sound-blaster-pro-2-1992">Sound Blaster Pro 2 (1992)</a></li>
<li><a href="#promise-eide-2300-plus-1995">Promise EIDE 2300 Plus (1995)</a></li>
<li><a href="#3dfx-voodoo2-magic-3d-ii-1998">3dfx Voodoo2 Magic 3D II (1998)</a></li>
<li><a href="#3com-3c905c-tx-m-tornado-1999">3Com 3C905C-TX-M “Tornado” (1999)</a></li>
</ul>
</div>
<h1 id="tseng-labs-et4000ax-1989">Tseng Labs ET4000AX (1989)</h1>
<p>Cette carte graphique SVGA était installée dans un PC doté d’un
processeur 386SX fonctionnant à 16 MHz. C’était une bonne carte à
l’époque car elle était assez rapide. Elle ne disposait pas d’une
accélération 2D, contrairement à la ET4000/W32 qui lui a succédé.
Cette version ne dispose que de 512 Ko de RAM. Elle peut afficher des
images 1024×768 avec 16 couleurs ou 800×600 avec 256 couleurs. Elle
était également compatible avec les modes CGA, EGA, VGA, MDA et
Hercules. Aucun jeu contemporain n’utilisait les modes SVGA, mais les
résolutions plus élevées étaient utiles avec Windows 3. Cette carte a
été fabriquée directement par Tseng Labs.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 900px"><span class="lf-media-inner" style="padding-bottom: 86.667%"><img alt="Tseng Labs ET4000AX ISA card on top of &quot;Planet Adventure&quot; box" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/et4000@1x.b507cfd767aeba.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/et4000@1x.b507cfd767aeba.jpg 1131w,https://media-bernat-ch.b-cdn.net/images/pc-cards/et4000@2x.290fd6b16c25d6.jpg 1800w" sizes="auto, (max-width: 900px) 100vw, 900px" width="900" height="780" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA8AAAANAQMAAABM0KYCAAAAA1BMVEXZk1ga/jN6AAAADElEQVR42mNgIAoAAAAnAAH0usIGAAAAAElFTkSuQmCC)"/></span></div><figcaption>Carte ISA Tseng Labs ET4000 AX</figcaption></figure>
<h1 id="clone-de-ladlib-1992">Clone de l’AdLib (1992)</h1>
<p>Ma première carte son était une AdLib. Mes parents l’ont achetée au
Canada pendant les vacances d’été en 1992. Elle utilise une puce
Yamaha OPL2 pour produire du son par synthèse FM. Le premier jeu que
j’ai essayé est <a href="https://fr.wikipedia.org/wiki/Indiana_Jones_et_la_Derni%C3%A8re_Croisade_(jeu_vid%C3%A9o)" title="Indiana Jones et la Dernière Croisade sur Wikipedia">Indiana Jones et la dernière croisade</a>.</p>
<p>Je crois que j’ai donné cette AdLib à un ami après avoir mis à niveau
mon PC avec une Sound Blaster Pro 2. Récemment, j’en avais besoin pour
un projet personnel, mais elles sont rares et chères sur eBay.
Quelqu’un a parlé d’un clone bon marché sur <a href="https://www.vogons.org/viewtopic.php?t=73429" title="Sun Moon Star Adlib Clone">Vogons</a>, alors je l’ai
acheté. Il a été vendu par Sun Moon Star en 1992 et était livré
avec un CD-ROM du shareware Doom.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 700px"><span class="lf-media-inner" style="padding-bottom: 88.429%"><img alt="Clone de l'AdLib au-dessus de la boîte &quot;Alone in the Dark&quot;" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-clone@1x.1877f385050d52.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-clone@1x.1877f385050d52.jpg 880w,https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-clone@2x.d611359a9dfa02.jpg 1400w" sizes="auto, (max-width: 700px) 100vw, 700px" width="700" height="619" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAArwAAAJrAQMAAAA4T9KXAAAAA1BMVEXsqmgQA6kXAAAATElEQVR42u3BMQEAAADCoPVPbQ0PoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODHXMwABYQyZlAAAAABJRU5ErkJggg==)"/></span></div><figcaption>Clone d'une carte AdLib sur port ISA par Sun Moon Star</figcaption></figure>
<p>Sur le sujet, jetez un œil sur « <a href="/fr/blog/2018-adlib-opl2lpt">OPL2LPT : une carte son AdLib sur
port parallèle</a> » et « <a href="/fr/blog/2018-opl2-carte-arduino">OPL2 Audio Board : une carte son AdLib pour
Arduino</a> ». Le premier article contient une photo d’une copie plus
fidèle d’une AdLib.</p>
<h1 id="sound-blaster-pro-2-1992">Sound Blaster Pro 2 (1992)</h1>
<p>Plus tard, j’ai remplacé la carte son AdLib par une Sound Blaster
Pro 2. Elle est équipée d’une puce OPL3 et est également capable de
produire du son via des échantillons numériques. À l’époque, c’était
un ajout bienvenu, mais pas aussi important que la synthèse FM
introduite précédemment par l’AdLib.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 900px"><span class="lf-media-inner" style="padding-bottom: 88.222%"><img alt="Sound Blaster Pro 2 au-dessus d'une boîte &quot;Day of the Tentacle&quot;" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/sbpro@1x.fb338b4f623c74.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/sbpro@1x.fb338b4f623c74.jpg 1131w,https://media-bernat-ch.b-cdn.net/images/pc-cards/sbpro@2x.cd79c8563ce079.jpg 1800w" sizes="auto, (max-width: 900px) 100vw, 900px" width="900" height="794" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAGNAQMAAAC42OO/AAAAA1BMVEXOg0kj5bQsAAAALUlEQVR42u3BMQEAAADCoPVPbQhfoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4DFnyAAEN75NNAAAAAElFTkSuQmCC)"/></span></div><figcaption>Carte ISA Sound Blaster Pro 2</figcaption></figure>
<h1 id="promise-eide-2300-plus-1995">Promise EIDE 2300 Plus (1995)</h1>
<p>J’ai acheté cette carte principalement pour le port série. J’utilisais
un 486DX2 fonctionnant à 66 MHz avec un modem externe Creatix LC 288
FC. Le port série était piloté par un UART 8250 sans tampon interne.
Grâce à <a href="https://web.archive.org/web/2020/http://www.terminate.com/" title="Terminate, a DOS terminal program">Terminate</a>, j’ai pu me connecter aux <a href="https://fr.wikipedia.org/wiki/Bulletin_board_system" title="Bulletin board system sur Wikipedia">BBS</a> sous DOS, mais
ce n’était pas possible avec Windows 3 ou OS/2. J’avais besoin d’une
de ces nouvelles cartes sophistiquées dotées d’un UART 16550, avec un
tampon de 16 octets. À l’époque, c’était assez difficile à trouver en
France. Lors d’un voyage de vacances, j’ai convaincu mon parent de
faire un petit détour de Los Angeles à San Diego pour acheter cette
carte contrôleur <em>Promise EIDE 2300 Plus</em> dans un magasin que j’ai
repéré grâce à une publicité dans un magazine local !</p>
<p>La carte comporte également un contrôleur EIDE avec prise en charge du
mode DMA 2. Par rapport aux anciens mode PIO, le CPU n’avait pas
besoin de copier les données entre le disque et la mémoire.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 900px"><span class="lf-media-inner" style="padding-bottom: 77.111%"><img alt="Promise EIDE 2300 Plus à côté d'un CD d'OS/2 Warp" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/promise@1x.3755132170159e.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/promise@1x.3755132170159e.jpg 1131w,https://media-bernat-ch.b-cdn.net/images/pc-cards/promise@2x.b5614198af211e.jpg 1800w" sizes="auto, (max-width: 900px) 100vw, 900px" width="900" height="694" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAFbAQMAAAB8vxyNAAAAA1BMVEXHfEYvr29AAAAAKElEQVR42u3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAAAAAAZOngABmC8KMQAAAABJRU5ErkJggg==)"/></span></div><figcaption>Carte VLB Promise EIDE 2300 Plus</figcaption></figure>
<h1 id="3dfx-voodoo2-magic-3d-ii-1998">3dfx Voodoo2 Magic 3D II (1998)</h1>
<p>La 3dfx Voodoo2 a été l’une des premières cartes graphiques
complémentaires à mettre en œuvre l’accélération matérielle 3D. Je
l’ai achetée à un ami avec son Pentium II en 1999. Ce fut une grande
étape de l’évolution sur PC, car les jeux sont devenus plus beaux et
plus fluides. Une carte graphique traditionnelle était encore
nécessaire pour la 2D. Un câble VGA reliait celle-ci à la carte 3dfx,
qui était elle-même connectée au moniteur.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 900px"><span class="lf-media-inner" style="padding-bottom: 79.778%"><img alt="3dfx Voodoo 2 Magic 3D II au-dessus d'une boîte &quot;Jedi Knight: Dark Forces II&quot;" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/3dfx@1x.cc5766c0602b3b.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/3dfx@1x.cc5766c0602b3b.jpg 1131w,https://media-bernat-ch.b-cdn.net/images/pc-cards/3dfx@2x.995a486b05c549.jpg 1800w" sizes="auto, (max-width: 900px) 100vw, 900px" width="900" height="718" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAFnAQMAAAAPB9tbAAAAA1BMVEXiqnF+9izdAAAAK0lEQVR42u3BAQ0AAADCoPdPbQ43oAAAAAAAAAAAAAAAAAAAAAAAAAAAHg1RVgABDGwQUgAAAABJRU5ErkJggg==)"/></span></div><figcaption>Carte PCI 3dfx Voodoo2 Magic 3D II</figcaption></figure>
<h1 id="3com-3c905c-tx-m-tornado-1999">3Com 3C905C-TX-M “Tornado” (1999)</h1>
<p>Au début des années 2000, en école, la connexion Internet sur le
campus était assurée par une <a href="https://web.archive.org/web/20020327172921/http://www.crans.org/" title="Cachan Réseau @ Normale Sup'">association d’étudiants</a> au moyen d’un câble Ethernet  100 Mb/s<sup id="fnref:vitesse"><a class="footnote-ref" href="#fn:vitesse">1</a></sup>. Si vous
vouliez atteindre la vitesse maximale, la carte réseau PCI <em>3Com
3C905C-TX-M</em>, surnommée “Tornado”, était ce qu’il fallait. Nous
l’achetions d’occasion par douzaines et la revendions à d’autres
étudiants pour environ 30 €.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 700px"><span class="lf-media-inner" style="padding-bottom: 96.571%"><img alt="3COM 3C905C-TX-M au-dessus d'une boîte &quot;Alerte Route&quot;" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/3com@1x.040b4caf7b9855.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/3com@1x.040b4caf7b9855.jpg 880w,https://media-bernat-ch.b-cdn.net/images/pc-cards/3com@2x.7a46dcb92f790c.jpg 1400w" sizes="auto, (max-width: 700px) 100vw, 700px" width="700" height="676" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAK8AAACpAQMAAABnBf8rAAAAA1BMVEXfnmn6AzG/AAAAGklEQVR42u3BMQEAAADCoPVP7W8GoAAAAIAzDy8AARvszY4AAAAASUVORK5CYII=)"/></span></div><figcaption>Carte PCI 3Com 3C905C-TX-M</figcaption></figure>
<div class="footnote">
<hr/>
<ol>
<li id="fn:vitesse">
<p>À l’époque, l’ADSL commençait à peine à se démocratiser et
de nombreuses personnes utilisaient toujours un modem 56k pour se
connecter à Internet. Une connexion 100 Mb/s était 2000 fois plus
rapide ! <a class="footnote-backref" href="#fnref:vitesse" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="html">OPL2 Audio Board : une carte son AdLib pour Arduino</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/2018-opl2-carte-arduino" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/2018-opl2-carte-arduino#isso-thread" rel="replies" type="text/html"/>
    <updated>2018-04-21T07:19:30Z</updated>
    <id>http://www.luffy.cx/fr/blog/2018-opl2-carte-arduino.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<p>Dans un <a href="/fr/blog/2018-adlib-opl2lpt" title="OPL2LPT: une carte son AdLib sur port parallèle">article précédent</a>, j’ai présenté
l’<a href="https://serdashop.com/products/opl2lpt" title="OPL2LPT on Serdashop">OPL2LPT</a>, une carte son sur port parallèle dotée d’une puce
<a href="https://en.wikipedia.org/wiki/Yamaha_YM3812" title="Yamaha YM3812 on Wikipedia">Yamaha YM3812</a>, aussi connue comme l’<em>OPL2</em> et présente sur les
<a href="https://fr.wikipedia.org/wiki/Adlib" title="AdLib sur Wikipedia">cartes sons AdLib</a>. L’<a href="https://hackaday.io/project/18995-opl2-audio-board-for-arduino-raspberry-pi" title="OPL2 Audio Board for Arduino &amp; Raspberry Pi">OPL2 Audio Board pour
Arduino</a> est une autre carte son
utilisant cette puce. Toutefois, plutôt que reposer sur le port
parallèle, elle dispose d’une interface série qui peut être pilotée
par un Arduino ou un Raspberry Pi. Alors que l’<em>OPL2LPT</em> cible
essentiellement les joueurs disposant du matériel d’époque, l’<em>OPL2
Audio Board</em> ne peut pas être utilisée de la même façon. Toutefois, il
est possible de l’exploiter depuis <a href="https://www.scummvm.org/" title="ScummVM">ScummVM</a> et <a href="https://www.dosbox.com/" title="DOSBox, an x86 emulator with DOS">DOSBox</a>!</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 400px"><span class="lf-media-inner" style="padding-bottom: 76.000%"><img alt="OPL2 Audio Board for Arduino" src="https://media-bernat-ch.b-cdn.net/images/opl2-audioboard@1x.b70f036732e800.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/opl2-audioboard@1x.b70f036732e800.jpg 503w,https://media-bernat-ch.b-cdn.net/images/opl2-audioboard@2x.dbccf6394b3214.jpg 800w" sizes="auto, (max-width: 400px) 100vw, 400px" width="400" height="304" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAATAQMAAABfvDRGAAAAA1BMVEVISk5CASq6AAAADElEQVR42mNgoCkAAABfAAEDNl01AAAAAElFTkSuQmCC)"/></span></div><figcaption>L'OPL2 Audio Board sur une boîte « Grim Fandango ».</figcaption></figure>
<div class="toc">
<ul>
<li><a href="#decouverte">Découverte</a></li>
<li><a href="#utilisation-avec-dosbox-scummvm">Utilisation avec DOSBox &amp; ScummVM</a><ul>
<li><a href="#dosbox">DOSBox</a></li>
<li><a href="#scummvm">ScummVM</a></li>
</ul>
</li>
</ul>
</div>
<h1 id="decouverte">Découverte</h1>
<p>L’<em>OPL2 Audio Board</em> est disponible sur <a href="https://www.tindie.com/products/cheerful/opl2-audio-board/" title="OPL2 Audio Board">Tindie</a>, soit sous forme de
kit, soit déjà assemblée. Je l’ai associée avec une copie bon marché
de l’<a href="https://store.arduino.cc/products/arduino-nano" title="Arduino Nano">Arduino Nano</a>. Le code nécessaire pour piloter la carte est
disponible sur <a href="https://github.com/DhrBaksteen/ArduinoOPL2/" title="Arduino library for use with the OPL2 board (YM3812)">GitHub</a> avec plusieurs exemples.</p>
<p>L’un d’eux est <a href="https://github.com/DhrBaksteen/ArduinoOPL2/blob/v1.4.6/examples/DemoTune/DemoTune.ino" title="ArduinoOPL2/examples/DemoTune/DemoTune.ino"><code>DemoTune.ino</code></a>. Il joue une courte
mélodie sur trois canaux. Il peut être compilé et envoyé sur l’Arduino
à l’aide de <a href="https://platformio.org/" title="PlatformIO is an open source ecosystem for IoT development">PlatformIO</a> (installable avec <code>pip install platformio</code>)
en utilisant la commande suivante<sup id="fnref:nano"><a class="footnote-ref" href="#fn:nano">1</a></sup> :</p>
<div class="language-bash-session codehilite"><pre><span/><code><span class="gp">$ </span>platformio<span class="w"> </span>ci<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--board<span class="w"> </span>nanoatmega328<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--lib<span class="w"> </span>../../src<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--project-option<span class="o">=</span><span class="s2">"targets=upload"</span><span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--project-option<span class="o">=</span><span class="s2">"upload_port=/dev/ttyUSB0"</span><span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>DemoTune.ino
<span class="go">[…]</span>
<span class="go">PLATFORM: Atmel AVR &gt; Arduino Nano ATmega328</span>
<span class="go">SYSTEM: ATMEGA328P 16MHz 2KB RAM (30KB Flash)</span>
<span class="go">Converting DemoTune.ino</span>
<span class="go">[…]</span>
<span class="go">Configuring upload protocol...</span>
<span class="go">AVAILABLE: arduino</span>
<span class="go">CURRENT: upload_protocol = arduino</span>
<span class="go">Looking for upload port...</span>
<span class="go">Use manually specified: /dev/ttyUSB0</span>
<span class="go">Uploading .pioenvs/nanoatmega328/firmware.hex</span>
<span class="go">[…]</span>
<span class="go">avrdude: 6618 bytes of flash written</span>
<span class="go">[…]</span>
<span class="go">===== [SUCCESS] Took 5.94 seconds =====</span>
</code></pre></div>

<p>Une fois la programmation terminée, l’Arduino joue la mélodie. 🎶</p>
<p>L’autre exemple intéressant est
<a href="https://github.com/DhrBaksteen/ArduinoOPL2/blob/v1.4.6/examples/SerialIface/SerialIface.ino" title="ArduinoOPL2/examples/SerialIface/SerialIface.ino"><code>SerialIface.ino</code></a>. Il transforme l’ensemble en
carte son sur port série. Une fois le code programmé dans l’Arduino,
vous pouvez utiliser le programme <code>play.py</code> dans le même répertoire
pour écouter des fichiers <abbr title="Video Game Music">VGM</abbr>. Il s’agit d’un format de fichiers
contenant précisément les commandes envoyées à la puce audio. De
nombreux fichiers à ce format sont disponibles sur <a href="https://vgmrips.net/packs/" title="VGMRips">VGMRips</a>. Prenez
garde à ne prendre que ceux pour <a href="https://vgmrips.net/packs/chip/ym3812" title="VGMRips: Packs using YM3812">YM3812/OPL2</a> ! Voici une courte
sélection :</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 1280px"><span class="lf-media-inner" style="padding-bottom: 56.250%"><video width="1280" height="720" controls="" preload="none" crossorigin="anonymous" poster="https://media-bernat-ch.b-cdn.net/images/posters/2018-opl2-audio-board-1.6b08787e4fbabc.jpg" class="lf-media lf-opaque"><source src="https://media.bernat.ch/videos/2018-opl2-audio-board-1.m3u8" type="application/vnd.apple.mpegurl"/><source src="https://media.bernat.ch/videos/2018-opl2-audio-board-1/progressive.mp4" type="video/mp4; codecs=&quot;mp4a.40.2,avc1.4d401f&quot;"/><track src="https://media.bernat.ch/videos/2018-opl2-audio-board-1.chapters.vtt" kind="chapters" label="Chapitres"/></video></span></div><figcaption>L'OPL2 Audio Board connectée à l'Arduino Nano et interprétant quelques fichiers VGM. Les diodes électroluminescentes clignotent au rythme de la réception des données depuis le port série.</figcaption></figure>
<ul>
<li><a href="#video:seek-0">0:00</a>, <em>Railroad Story</em> qui fait partie des <a href="https://vgmrips.net/packs/pack/adlib-music-synthesizer-card-demo-songs-ibm-pc-xt-at" title="VGMRips: Adlib Music Synthesizer Card Demo Songs">démos livrées avec la carte son AdLib</a> (1987) ;</li>
<li><a href="#video:seek-64">1:04</a>, l’introduction de <a href="https://vgmrips.net/packs/pack/star-wars-x-wing-ibm-pc-at" title="VGMRips: Star Wars: X-Wing">Star Wars: X-Wing</a> (1993) ;</li>
<li><a href="#video:seek-139">2:19</a>, l’introduction de <a href="https://vgmrips.net/packs/pack/the-secret-of-monkey-island-ibm-pc-at" title="VGMRips: The Secret of Monkey Island">The Secret of Monkey Island</a> (1990) ;</li>
<li><a href="#video:seek-238">3:58</a>, l’introduction de <a href="https://vgmrips.net/packs/pack/indiana-jones-and-the-last-crusade-the-graphic-adventure-ibm-pc-xt-at" title="VGMRips: Indiana Jones and the Last Crusade">Indiana Jones and the Last Crusade</a> (1989).</li>
</ul>
<h1 id="utilisation-avec-dosbox-scummvm">Utilisation avec DOSBox &amp; ScummVM</h1>
<div class="admonition">
<p class="admonition-title">Note</p>
<p>Le protocole série utilisé dans cette section n’a pas été intégré en amont
(<a href="https://github.com/DhrBaksteen/ArduinoOPL2/pull/20" title="SerialIface.ino: add a variant protocol using less bytes">PR#20</a>) : à la place, un protocole encore plus simple a été conçu.
Vous devez récupérer le fichier <code>SerialIface.ino</code> issu de ma proposition :
<code>git checkout 50e1717</code>.</p>
</div>
<p>Quand l’Arduino est configuré avec <code>SerialIface.ino</code>, la carte peut
être pilotée via le port série avec un protocole simple. Après avoir
modifié <em>DOSBox</em> et <em>ScummVM</em>, ils peuvent utiliser cette carte son
inhabituelle. Voici quelques exemples de jeux l’utilisant :</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 854px"><span class="lf-media-inner" style="padding-bottom: 56.206%"><video width="854" height="480" controls="" preload="none" crossorigin="anonymous" poster="https://media-bernat-ch.b-cdn.net/images/posters/2018-opl2-audio-board-2.263f6add26addf.jpg" class="lf-media lf-opaque"><source src="https://media.bernat.ch/videos/2018-opl2-audio-board-2.m3u8" type="application/vnd.apple.mpegurl"/><source src="https://media.bernat.ch/videos/2018-opl2-audio-board-2/progressive.mp4" type="video/mp4; codecs=&quot;mp4a.40.2,avc1.4d401f&quot;"/><track src="https://media.bernat.ch/videos/2018-opl2-audio-board-2.chapters.vtt" kind="chapters" label="Chapitres"/></video></span></div></figure>
<ul>
<li><a href="#video:seek-0">0:00</a>, avec <strong>DOSBox</strong>, le premier niveau de <strong>Doom</strong> 🎮 (1993) ;</li>
<li><a href="#video:seek-66">1:06</a>, avec <strong>DOSBox</strong>, l’introduction de <strong>Loom</strong> 🎼 (1990) ;</li>
<li><a href="#video:seek-158">2:38</a>, avec <strong>DOSBox</strong>, le premier niveau de <strong>Lemmings</strong> 🐹 (1991) ;</li>
<li><a href="#video:seek-212">3:32</a>, avec <strong>DOSBox</strong>, l’introduction de <strong>Legend of Kyrandia</strong> 🃏 (1992) ;</li>
<li><a href="#video:seek-407">6:47</a>, avec <strong>ScummVM</strong>, l’introduction de <strong>Day of the Tentacle</strong> ☢️ (1993) ;</li>
<li><a href="#video:seek-670">11:10</a>, avec <strong>DOSBox</strong>, l’introduction de <strong>Another World</strong> 🐅 (1991).</li>
</ul>
<p><a href="https://en.wikipedia.org/wiki/Another_World_(video_game)" title="Another World on Wikipedia">Another World</a>, réalisé par Éric Chahi, utilise des sons
échantillonnés à 5 kHz ou 10 kHz. Avec un port série opérant à
115 200 bits/s, l’option des 5 kHz est juste à notre portée.
<del>Toutefois, je ne sais pas si le rendu est fidèle.</del></p>
<div class="admonition">
<p class="admonition-title">Mise à jour (05.2018)</p>
<p>Après discussion avec <a href="https://github.com/waltervn" title="Walter van Niftrik on GitHub">Walter van Niftrik</a>, nous sommes arrivés à la
conclusion que, au-dessus de 1 kHz, <em>DOSBox</em> n’exécute pas les commandes OPL
avec la précision temporelle adéquate. Il utilise une tranche de temps d’une
milliseconde au cours de laquelle il exécute soit un nombre fixe de cycles
CPU, soit autant que possible (avec <code>cycles=max</code>). Dans les deux cas, les
instructions CPU émulées sont exécutées aussi rapidement que possible et les
retards d’E/S sont simulés en supprimant un nombre fixe de cycles de
l’allocation pour la tranche de temps en cours.</p>
</div>
<h2 id="dosbox">DOSBox</h2>
<p>Le protocole série est décrit dans le fichier <code>SerialIface.ino</code> :</p>
<div class="language-c codehilite"><pre><span/><code><span class="cm">/*</span>
<span class="cm"> * A very simple serial protocol is used.</span>
<span class="cm"> *</span>
<span class="cm"> * - Initial 3-way handshake to overcome reset delay / serial noise issues.</span>
<span class="cm"> * - 5-byte binary commands to write registers.</span>
<span class="cm"> *   - (uint8)  OPL2 register address</span>
<span class="cm"> *   - (uint8)  OPL2 register data</span>
<span class="cm"> *   - (int16)  delay (milliseconds); negative -&gt; pre-delay; positive -&gt; post-delay</span>
<span class="cm"> *   - (uint8)  delay (microseconds / 4)</span>
<span class="cm"> *</span>
<span class="cm"> * Example session:</span>
<span class="cm"> *</span>
<span class="cm"> * Arduino: HLO!</span>
<span class="cm"> * PC:      BUF?</span>
<span class="cm"> * Arduino: 256 (switches to binary mode)</span>
<span class="cm"> * PC:      0xb80a014f02 (write OPL register and delay)</span>
<span class="cm"> * Arduino: k</span>
<span class="cm"> *</span>
<span class="cm"> * A variant of this protocol is available without the delays. In this</span>
<span class="cm"> * case, the BUF? command should be sent as B0F? The binary protocol</span>
<span class="cm"> * is now using 2-byte binary commands:</span>
<span class="cm"> *   - (uint8)  OPL2 register address</span>
<span class="cm"> *   - (uint8)  OPL2 register data</span>
<span class="cm"> */</span>
</code></pre></div>

<p>Ajouter la prise en charge de celui-ci dans <em>DOSBox</em> est relativement
simple (<a href="https://github.com/vincentbernat/dosbox/compare/feature/opl2audioboard" title="OPL2 Audio Board for Arduino support for DOSBox">rustine</a>). Pour obtenir de bonnes performances,
nous utilisons la version du protocole à 2 octets (5000 opérations par
seconde). Les commandes sont canalisées et un fil d’exécution dédié
collecte les acquittements. Un <a href="https://wiki.libsdl.org/SDL3/SDL_CreateSemaphore" title="SDL_CreateSemaphore">sémaphore</a> représente le
nombre de places libres dans le tampon de réception. Comme il n’est
pas possible de lire les registres, nous nous reposons sur <em>DOSBox</em>
pour l’émulation des minuteurs qui sont essentiellement utilisés pour
permettre la <a href="https://web.archive.org/web/2018/http://www.fit.vutbr.cz/~arnost/opl/opl3.html#appendixB" title="OPL3 Programmer's Guide: Detection Methods">détection de l’OPL2</a>.</p>
<p>La modification est testée uniquement sous Linux mais devrait
fonctionner sur la plupart des systèmes POSIX, mais pas sous
Windows. Pour tester, vous devez compiler <em>DOSBox</em> depuis les
sources :</p>
<div class="language-bash-session codehilite"><pre><span/><code><span class="gp">$ </span>sudo<span class="w"> </span>apt<span class="w"> </span>build-dep<span class="w"> </span>dosbox
<span class="gp">$ </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/vincentbernat/dosbox.git<span class="w"> </span>-b<span class="w"> </span>feature/opl2audioboard
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>dosbox
<span class="gp">$ </span>./autogen.sh
<span class="gp">$ </span>./configure<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>make
</code></pre></div>

<p>Remplacez la section <code>sblaster</code> du fichier <code>~/.dosbox/dosbox-SVN.conf</code> :</p>
<div class="language-ini codehilite"><pre><span/><code><span class="k">[sblaster]</span>
<span class="na">sbtype</span><span class="o">=</span><span class="s">none</span>
<span class="na">oplmode</span><span class="o">=</span><span class="s">opl2</span>
<span class="na">oplrate</span><span class="o">=</span><span class="s">49716</span>
<span class="na">oplemu</span><span class="o">=</span><span class="s">opl2arduino</span>
<span class="na">opl2arduino</span><span class="o">=</span><span class="s">/dev/ttyUSB0</span>
</code></pre></div>

<p>Ensuite, exécutez <em>DOSBox</em> avec <code>./src/dosbox</code>. C’est tout !</p>
<p>Il est probable que vous obteniez le message “<code>OPL2Arduino: too slow,
consider increasing buffer</code>” de manière répétée. Pour corriger ceci,
il vous faut recompiler <code>SerialIface.ino</code> avec un tampon de réception
plus important :</p>
<div class="language-bash-session codehilite"><pre><span/><code><span class="gp">$ </span>platformio<span class="w"> </span>ci<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--board<span class="w"> </span>nanoatmega328<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--lib<span class="w"> </span>../../src<span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--project-option<span class="o">=</span><span class="s2">"targets=upload"</span><span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--project-option<span class="o">=</span><span class="s2">"upload_port=/dev/ttyUSB0"</span><span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>--project-option<span class="o">=</span><span class="s2">"build_flags=-DSERIAL_RX_BUFFER_SIZE=512"</span><span class="w"> </span><span class="se">\</span>
<span class="gp">&gt; </span><span class="w">  </span>SerialIface.ino
</code></pre></div>

<h2 id="scummvm">ScummVM</h2>
<p>Le code utilisé dans <em>DOSBox</em> peut être adapté à <em>ScummVM</em>
(<a href="https://github.com/scummvm/scummvm/compare/master...vincentbernat:feature/opl2audioboard" title="OPL2 Audio Board for Arduino support for ScummVM">rustine</a>). Pour tester, vous devez compiler <em>ScummVM</em>
depuis les sources :</p>
<div class="language-bash-session codehilite"><pre><span/><code><span class="gp">$ </span>sudo<span class="w"> </span>apt<span class="w"> </span>build-dep<span class="w"> </span>scummvm
<span class="gp">$ </span>git<span class="w"> </span>clone<span class="w"> </span>https://github.com/vincentbernat/scummvm.git<span class="w"> </span>-b<span class="w"> </span>feature/opl2audioboard
<span class="gp">$ </span><span class="nb">cd</span><span class="w"> </span>scummvm
<span class="gp">$ </span>./configure<span class="w"> </span>--disable-all-engines<span class="w"> </span>--enable-engine<span class="o">=</span>scumm<span class="w"> </span><span class="o">&amp;&amp;</span><span class="w"> </span>make
</code></pre></div>

<p>Démarrez ensuite <em>ScummVM</em> avec <code>./scummvm</code>. Sélectionnez « AdLib
Emulator » comme périphérique musical et « OPL2 Arduino » comme
émulateur AdLib<sup id="fnref:serial"><a class="footnote-ref" href="#fn:serial">2</a></sup>. Comme pour <em>DOSBox</em>, surveillez la console
pour vérifier que le tampon de réception est bien dimensionné.</p>
<p>Amusez-vous bien ! 🎶</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:nano">
<p>Cette commande n’est valide que pour l’Arduino Nano. Pour une
autre variation, jetez un œil sur la sortie de <code>platformio boards
arduino</code>. <a class="footnote-backref" href="#fnref:nano" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:serial">
<p>Pour spécifier un port série autre que <code>/dev/ttyUSB0</code>,
ajoutez une ligne <code>opl2arduino_device=</code> dans le fichier
<code>~/.scummvmrc</code>. <a class="footnote-backref" href="#fnref:serial" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="html">OPL2LPT : une carte son AdLib sur port parallèle</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/2018-adlib-opl2lpt" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/2018-adlib-opl2lpt#isso-thread" rel="replies" type="text/html"/>
    <updated>2018-02-24T18:16:56Z</updated>
    <id>http://www.luffy.cx/fr/blog/2018-adlib-opl2lpt.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<p>La <a href="https://en.wikipedia.org/wiki/Ad_Lib,_Inc.#AdLib_Music_Synthesizer_Card_(1987)" title="AdLib Music Synthesizer Card sur Wikipedia">carte son AdLib</a> était la première carte son en
vogue pour les IBM PC (avant cela, nous étions choyés par le son du
haut-parleur interne). Connectée à un slot ISA 8 bits, elle est
équipée d’une puce <a href="https://en.wikipedia.org/wiki/Yamaha_YM3812" title="Yamaha YM3812 sur Wikipedia">Yamaha YM3812</a>, aussi connue sous le nom
d’<em>OPL2</em>. Cette puce peut piloter 9 canaux sonores dont les
caractéristiques sont affinées grâce à 244 registres.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 700px"><span class="lf-media-inner" style="padding-bottom: 91.000%"><img alt="Carte son AdLib" src="https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-copy@1x.492c36c4936165.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-copy@1x.492c36c4936165.jpg 880w,https://media-bernat-ch.b-cdn.net/images/pc-cards/adlib-copy@2x.e0b4b6c40d27f4.jpg 1400w" sizes="auto, (max-width: 700px) 100vw, 700px" width="700" height="637" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABbAQMAAAC/ALJvAAAAA1BMVEX1oWWesZSeAAAAEklEQVR42mNgGAWjYBSMgpEGAAT6AAH0AohyAAAAAElFTkSuQmCC)"/></span></div><figcaption>Une copie d'une carte son AdLib par <a href="https://monotech.fwscart.com/AdLib_OPL2_Sound_Card/p6083514_19478748.aspx">Monotech</a>. La puce OPL2 se situe dans le coin inférieur droit. Les différences notables avec l'originale comprennent le potentiomètre de volume, qui devrait avoir un corps bleu et plus large, et les résistances métalliques à la place des résistances au carbone.</figcaption></figure>
<p>J’en avais une mais je l’ai égarée. Les modèles disponibles sur eBay
sont assez rares et chers. Il est possible d’en fabriquer une soi-même
(soit <a href="https://github.com/skiselev/isa-opl2" title="ISA OPL2 Card">celle de Sergey</a>, soit cette <a href="https://tubetime.us/index.php/2016/07/22/a-reproduction-adlib-sound-card/" title="A Reproduction AdLib Sound Card">reproduction
fidèle</a>). Cependant, un port ISA est toujours
nécessaire. L’imagination débordante de certains passionnés peut
encore aider ici. Par exemple, vous pouvez combiner la <a href="https://github.com/skiselev/xi_8088" title="Sergey's projects: Xi 8088">carte
processeur Xi 8088 de Sergey</a> avec
son <a href="https://github.com/skiselev/isa8_backplane" title="Sergey's projects: ISA 8-bit backplane">fond de panier ISA 8 bits</a>, sa <a href="https://github.com/skiselev/isa-super-vga" title="Sergey's projects: ISA Super VGA">carte Super
VGA</a> et sa <a href="https://github.com/skiselev/xt-cf-lite-v4" title="Sergey's projects: XT-CF-Lite v4">carte XT-CF-Lite</a>
pour obtenir votre propre PC compatible IBM vaguement moderne. Vous
pouvez également jeter un œil sur la <a href="https://www.raphnet.net/electronique/adlib/adlib_en.php" title="AdLib sound card on a parallel port">carte son AdLib sur un port
parallèle</a> de Raphaël Assénat.</p>
<div class="toc">
<ul>
<li><a href="#la-carte-son-opl2lpt">La carte son OPL2LPT</a></li>
<li><a href="#annexes">Annexes</a><ul>
<li><a href="#indiana-jones-et-le-mystere-de-latlantide">Indiana Jones et le mystère de l’Atlantide</a></li>
<li><a href="#monkey-island-2">Monkey Island 2</a></li>
<li><a href="#enregistrement-des-videos">Enregistrement des vidéos</a></li>
</ul>
</li>
</ul>
</div>
<h1 id="la-carte-son-opl2lpt">La carte son OPL2LPT</h1>
<p>Récemment, <a href="https://www.the8bitguy.com/" title="The 8-Bit Guy">David Murray</a> a publié une vidéo sur une <a href="https://www.youtube.com/watch?v=z3DU2mNBa6M" title="The 8-Bit Guy: Ad-Lib Sound Card for the Parallel Port">carte
son AdLib pour port parallèle</a>, l’<a href="https://serdashop.com/products/opl2lpt" title="OPL2LPT sur Serdashop">OPL2LPT</a>. Bien que les cartes mères actuelles n’aient plus
de port parallèle, il est facile d’en ajouter un au <a href="https://www.amazon.fr/dp/B00YE0QATW/" title="SIENOC PCI (PCI-E TO RS232+DB25 Adapter) sur Amazon">format
PCI-Express</a>. J’ai donc acheté une <em>OPL2LPT</em>
pré-assemblée et quelques jours plus tard, elle était dans ma boîte
à lait :</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 400px"><span class="lf-media-inner" style="padding-bottom: 80.250%"><img alt="Carte son OPL2LPT" src="https://media-bernat-ch.b-cdn.net/images/opl2lpt@1x.b262f8b6a092c6.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/opl2lpt@1x.b262f8b6a092c6.jpg 503w,https://media-bernat-ch.b-cdn.net/images/opl2lpt@2x.efd68332711c2e.jpg 800w" sizes="auto, (max-width: 400px) 100vw, 400px" width="400" height="321" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFBAQMAAABjE2sFAAAAA1BMVEU/RVP3ISR5AAAAJ0lEQVR42u3BMQEAAADCoPVPbQwfoAAAAAAAAAAAAAAAAAAAAICDAT/zAAGtT+9TAAAAAElFTkSuQmCC)"/></span></div><figcaption>La carte son OPL2LPT sur une boîte du jeu « Day of the Tentacle » pour indiquer l'échelle.</figcaption></figure>
<div class="admonition">
<p class="admonition-title">Mise à jour (03.2018)</p>
<p><del>Vous pouvez également acheter un boîtier pour l’<em>OPL2LPT</em>.</del> Après
avoir écrit cet article, on m’en a offert un:</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 400px"><span class="lf-media-inner" style="padding-bottom: 84.750%"><img alt="Boîtier pour l'OPL2LPT" src="https://media-bernat-ch.b-cdn.net/images/opl2lpt-case@1x.8a82af2776642a.jpg" srcset="https://media-bernat-ch.b-cdn.net/images/opl2lpt-case@1x.8a82af2776642a.jpg 503w,https://media-bernat-ch.b-cdn.net/images/opl2lpt-case@2x.c219b02bd57672.jpg 800w" sizes="auto, (max-width: 400px) 100vw, 400px" width="400" height="339" class="lf-media lf-opaque" style="background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAFTAQMAAAAtDciVAAAAA1BMVEXeqW+CpV6JAAAAJUlEQVR42u3BAQEAAACAkP6v7ggKAAAAAAAAAAAAAAAAAAAAAGhDiQAB5OCYkAAAAABJRU5ErkJggg==)"/></span></div><figcaption>La carte son OPL2LPT dans son boîtier imprimé en 3D, posé sur une boîte du jeu « Monkey Island 4 ».</figcaption></figure>
</div>
<div class="admonition">
<p class="admonition-title">Mise à jour (07.2018)</p>
<p>L’<a href="https://serdashop.com/products/opl3lpt" title="OPL3LPT sur Serdashop">OPL3LPT</a> est également disponible avec une conception similaire mais
utilisant une puce OPL3.</p>
</div>
<p>Tel que conçu, ce périphérique se branche sur un port parallèle ISA
(accessible à l’adresse 0x378). Il faut ensuite charger un <a href="https://github.com/pdewacht/adlipt/tree/master/adlipt" title="ADLiPT: pilote DOS pour l'OPL2LPT">pilote
pour DOS</a> (qui va intercepter les appels vers l’adresse de
la carte AdLib) puis exécuter un jeu compatible avec l’AdLib. Bien
qu’il soit correctement pris en charge par Linux, le port parallèle
PCI-Express ne fonctionne pas comme son équivalent ISA. <a href="https://www.qemu.org/" title="QEMU: generic and open source machine emulator and virtualizer">QEMU</a> est
livré avec une émulation du port parallèle mais, en raison de
<a href="https://github.com/pdewacht/adlipt/issues/3" title="OPL2LPT: Not working with QEMU parallel port emulation">problèmes de synchronisation</a>, ne peut pas piloter
correctement l’<em>OPL2LPT</em>. Par contre, l’émulation de <a href="https://www.virtualbox.org/" title="Oracle VM VirtualBox">VirtualBox</a>
est suffisante<sup id="fnref:vbox"><a class="footnote-ref" href="#fn:vbox">1</a></sup>.</p>
<p>Sous Linux, l’<em>OPL2LPT</em> se programme presque comme une <a href="http://shipbrook.net/jeff/sb.html" title="Programming the AdLib/Sound Blaster FM Music Chips">véritable
AdLib</a>. Le bout de code ci-dessous permet d’écrire une valeur
dans un des registres :</p>
<div class="language-c codehilite"><pre><span/><code><span class="k">static</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">lpt_write</span><span class="p">(</span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">data</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">ctrl</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="n">ieee1284_write_data</span><span class="p">(</span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="n">data</span><span class="p">);</span>
<span class="w">  </span><span class="n">ieee1284_write_control</span><span class="p">(</span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">ctrl</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">C1284_NINIT</span><span class="p">)</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">C1284_INVERTED</span><span class="p">);</span>
<span class="w">  </span><span class="n">ieee1284_write_control</span><span class="p">(</span><span class="n">port</span><span class="p">,</span><span class="w">  </span><span class="n">ctrl</span><span class="w">                </span><span class="o">^</span><span class="w"> </span><span class="n">C1284_INVERTED</span><span class="p">);</span>
<span class="w">  </span><span class="n">ieee1284_write_control</span><span class="p">(</span><span class="n">port</span><span class="p">,</span><span class="w"> </span><span class="p">(</span><span class="n">ctrl</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">C1284_NINIT</span><span class="p">)</span><span class="w"> </span><span class="o">^</span><span class="w"> </span><span class="n">C1284_INVERTED</span><span class="p">);</span>
<span class="p">}</span>

<span class="kt">void</span><span class="w"> </span><span class="nf">opl_write</span><span class="p">(</span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span><span class="w"> </span><span class="kt">uint8_t</span><span class="w"> </span><span class="n">value</span><span class="p">)</span><span class="w"> </span><span class="p">{</span>
<span class="w">  </span><span class="n">lpt_write</span><span class="p">(</span><span class="n">reg</span><span class="p">,</span><span class="w"> </span><span class="n">C1284_NSELECTIN</span><span class="w"> </span><span class="o">|</span><span class="w"> </span><span class="n">C1284_NSTROBE</span><span class="p">);</span>
<span class="w">  </span><span class="n">usleep</span><span class="p">(</span><span class="mi">4</span><span class="p">);</span><span class="w"> </span><span class="c1">// 3.3 microseconds</span>

<span class="w">  </span><span class="n">lpt_write</span><span class="p">(</span><span class="n">value</span><span class="p">,</span><span class="w"> </span><span class="n">C1284_NSELECTIN</span><span class="p">);</span>
<span class="w">  </span><span class="n">usleep</span><span class="p">(</span><span class="mi">23</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div>

<p>Pour utiliser « nativement » l’<em>OPL2LPT</em>, j’ai modifié les programmes
suivants :</p>
<ul>
<li><a href="https://www.scummvm.org/" title="ScummVM">ScummVM</a>, un émulateur pour d’anciens jeux d’aventure, notamment
   ceux de Lucas­Arts — <a href="https://github.com/scummvm/scummvm/pull/1137" title="AUDIO: add support for OPL2LPT">rustine</a><sup id="fnref:scummvm"><a class="footnote-ref" href="#fn:scummvm">2</a></sup> ;</li>
<li><a href="https://www.qemu.org/" title="QEMU: generic and open source machine emulator and virtualizer">QEMU</a>, un émulateur générique et rapide — <a href="https://patchwork.ozlabs.org/project/qemu-devel/patch/20180218144021.11641-1-vincent@bernat.im/" title="[RFC,v1] hw/audio/opl2lpt: add support for OPL2LPT">rustine</a>
   avec une émulation minimaliste des minuteries et les temporisations
   codées en dur 🙄 ;</li>
<li><a href="https://www.dosbox.com/" title="DOSBox, an x86 emulator with DOS">DOSBox</a>, un émulateur x86 intégrant DOS — <a href="https://github.com/vincentbernat/dosbox/compare/feature/opl2lpt" title="Add OPL2LPT support">rustine</a>
   avec une émulation complète des minuteries et un fil d’exécution
   dédié<sup id="fnref:delays"><a class="footnote-ref" href="#fn:delays">3</a></sup>.</li>
</ul>
<p>Vous pouvez comparer les résultats sur l’introduction du jeu <a href="https://fr.wikipedia.org/wiki/Indiana_Jones_et_la_Derni%C3%A8re_Croisade_(jeu_vid%C3%A9o)" title="Indiana Jones et la Dernière Croisade (jeu vidéo) sur Wikipedia">Indiana
Jones et la dernière croisade</a>
dans la vidéo suivante<sup id="fnref:nostalgia"><a class="footnote-ref" href="#fn:nostalgia">4</a></sup> :</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 854px"><span class="lf-media-inner" style="padding-bottom: 56.206%"><video width="854" height="480" controls="" preload="none" crossorigin="anonymous" poster="https://media-bernat-ch.b-cdn.net/images/posters/2018-adlib-opl2lpt-1-indy3.8fc987a1b940b5.jpg" class="lf-media lf-opaque"><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-1-indy3.m3u8" type="application/vnd.apple.mpegurl"/><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-1-indy3/progressive.mp4" type="video/mp4; codecs=&quot;mp4a.40.2,avc1.4d401f&quot;"/><track src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-1-indy3.chapters.vtt" kind="chapters" label="Chapitres"/></video></span></div></figure>
<ul>
<li><a href="#video:seek-0">0:00</a>, <strong>DOSBox</strong> avec une émulation du <strong>haut-parleur interne</strong> ;</li>
<li><a href="#video:seek-58">0:58</a>, <strong>DOSBox</strong> avec une émulation de l’<strong>AdLib</strong> ;</li>
<li><a href="#video:seek-111">1:51</a>, <strong>VirtualBox</strong> avec l’<strong>OPL2LPT</strong> (sur un port parallèle émulé) ;</li>
<li><a href="#video:seek-162">2:42</a>, <strong>ScummVM</strong> modifié avec l’<strong>OPL2LPT</strong> ;</li>
<li><a href="#video:seek-213">3:33</a>, <strong>QEMU</strong> modifié avec l’<strong>OPL2LPT</strong> ;</li>
<li><a href="#video:seek-264">4:24</a>, <strong>DOSBox</strong> modifié avec l’<strong>OPL2LPT</strong> ;</li>
<li><a href="#video:seek-317">5:17</a>, <strong>DOSBox</strong> modifié avec une version améliorée de l’<strong>émulateur OPL3</strong> (<a href="https://sourceforge.net/p/dosbox/patches/270/" title="Nuked OPL3 patch for DOSBox">Nuked OPL3</a>) ;</li>
<li><a href="#video:seek-370">6:10</a>, <strong>ScummVM</strong> avec la <strong>piste CD</strong> (version <a href="https://en.wikipedia.org/wiki/FM_Towns" title="FM Towns sur Wikipedia">FM Towns</a>).</li>
</ul>
<p>Je vous laisse juger de la qualité de chaque option ! Vous pouvez vous
procurer <del>l’<em>OPL2LPT</em></del> l’<em>OPL3LPT</em> depuis l’Europe via
<a href="https://serdashop.com/products/opl3lpt" title="OPL3LPT sur Serdashop">Serdashop</a> <del>ou depuis l’Amérique du Nord via <a href="https://web.archive.org/web/2018/https://www.the8bitguy.com/product/opl3lpt-ad-lib-compatible-parallel-sound-card/" title="OPL3LPT via The 8-Bit Guy">The 8-Bit
Guy</a></del>.</p>
<h1 id="annexes">Annexes</h1>
<h2 id="indiana-jones-et-le-mystere-de-latlantide">Indiana Jones et le mystère de l’Atlantide</h2>
<p>Voici une autre vidéo avec l’introduction de <a href="https://fr.wikipedia.org/wiki/Indiana_Jones_et_le_Myst%C3%A8re_de_l%27Atlantide" title="Indiana Jones et le mystère de l'Atlantide sur Wikipedia">Indiana Jones et le
mystère de l’Atlantide</a>,
publié en 1992, tournant dans <em>DOSBox</em> avec l’<em>OPL2LPT</em>. C’est le
second jeu utilisant le système de son <a href="https://fr.wikipedia.org/wiki/Interactive_Music_Streaming_Engine" title="iMUSE sur Wikipedia">iMUSE</a> : la musique est
synchronisée avec l’action et les transitions se font en toute
transparence. Particulièrement novateur pour l’époque !</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 854px"><span class="lf-media-inner" style="padding-bottom: 56.206%"><video width="854" height="480" controls="" preload="none" crossorigin="anonymous" poster="https://media-bernat-ch.b-cdn.net/images/posters/2018-adlib-opl2lpt-2-indy4.85613a13a5d647.jpg" class="lf-media lf-opaque"><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-2-indy4.m3u8" type="application/vnd.apple.mpegurl"/><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-2-indy4/progressive.mp4" type="video/mp4; codecs=&quot;mp4a.40.2,avc1.4d401f&quot;"/></video></span></div></figure>
<h2 id="monkey-island-2">Monkey Island 2</h2>
<p>Le premier jeu utilisant <em>iMuse</em> est <a href="https://fr.wikipedia.org/wiki/Monkey_Island_2:_LeChuck%27s_Revenge" title="Monkey Island 2: LeChuck's Revenge sur Wikipedia">Monkey Island 2</a>, publié
en 1991. La vidéo ci-dessous montre les premières minutes du jeu
tournant dans <em>DOSBox</em> avec l’<em>OPL2LPT</em>.</p>
<figure class="lf-fullbleed"><div class="lf-media-outer" style="width: 854px"><span class="lf-media-inner" style="padding-bottom: 56.206%"><video width="854" height="480" controls="" preload="none" crossorigin="anonymous" poster="https://media-bernat-ch.b-cdn.net/images/posters/2018-adlib-opl2lpt-3-monkey2.b6ef8dfec7ca65.jpg" class="lf-media lf-opaque"><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-3-monkey2.m3u8" type="application/vnd.apple.mpegurl"/><source src="https://media.bernat.ch/videos/2018-adlib-opl2lpt-3-monkey2/progressive.mp4" type="video/mp4; codecs=&quot;mp4a.40.2,avc1.4d401f&quot;"/></video></span></div></figure>
<p>Notamment, à <a href="#video:seek-333">5:33</a>, quand Guybrush se trouve à
Woodtick, une sympathique ville de Scabb Island, la musique joue
autour d’un thème principal et d’une variation avec un instrument
différent pour chaque endroit, sans jamais s’interrompre.</p>
<h2 id="enregistrement-des-videos">Enregistrement des vidéos</h2>
<p>Avec une carte vidéo VGA, de nombreux jeux utilisent le <a href="https://fr.wikipedia.org/wiki/Mode_13h" title="Mode 13h sur Wikipedia">Mode 13h</a>,
un mode 256 couleurs avec une résolution de 320×200. Sur un écran 4:3,
ce mode n’affiche pas de pixels carrés: ils sont étirés verticalement
par un facteur de 1,2.</p>
<p>Les vidéos précédentes ont été enregistrées avec <a href="https://ffmpeg.org/" title="FFmpeg: cross-platform solution to record, convert and stream audio and video">FFmpeg</a> (puis
éditées avec <a href="https://www.blender.org/" title="Free and Open 3D creation software">Blender</a>). Il propose de très <a href="https://ffmpeg.org/ffmpeg-filters.html" title="FFmpeg Filters Documentation">nombreux
filtres</a> permettant d’automatiser la capture et une
partie du montage. Voici un exemple :</p>
<div class="language-bash codehilite"><pre><span/><code><span class="nv">FONT</span><span class="o">=</span><span class="s2">"font=Monkey Island 1991 refined:</span>
<span class="s2">      fontcolor=OrangeRed:</span>
<span class="s2">      fontsize=16:</span>
<span class="s2">      x=w-text_w-10"</span>
ffmpeg<span class="w"> </span>-y<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-thread_queue_size<span class="w"> </span><span class="m">64</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-f<span class="w"> </span>x11grab<span class="w"> </span>-draw_mouse<span class="w"> </span><span class="m">0</span><span class="w"> </span>-r<span class="w"> </span><span class="m">30</span><span class="w"> </span>-s<span class="w"> </span>640x400<span class="w"> </span>-i<span class="w"> </span>:0+844,102<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-thread_queue_size<span class="w"> </span><span class="m">64</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-f<span class="w"> </span>pulse<span class="w"> </span>-ac<span class="w"> </span><span class="m">1</span><span class="w"> </span>-i<span class="w"> </span>default<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-filter_complex<span class="w"> </span><span class="s2">"[0:v]pad=854:400:0:0,</span>
<span class="s2">       drawtext=</span><span class="si">${</span><span class="nv">FONT</span><span class="si">}</span><span class="s2">:y= 10:text=Indiana Jones 3,</span>
<span class="s2">       drawtext=</span><span class="si">${</span><span class="nv">FONT</span><span class="si">}</span><span class="s2">:y= 34:text=Intro,</span>
<span class="s2">       drawtext=</span><span class="si">${</span><span class="nv">FONT</span><span class="si">}</span><span class="s2">:y=100:text=DOSBox,</span>
<span class="s2">       drawtext=</span><span class="si">${</span><span class="nv">FONT</span><span class="si">}</span><span class="s2">:y=124:text=VGA,</span>
<span class="s2">       drawtext=</span><span class="si">${</span><span class="nv">FONT</span><span class="si">}</span><span class="s2">:y=148:text=PC speaker,</span>
<span class="s2">       scale=854:480:flags=neighbor[game];</span>
<span class="s2">       [1:a]volumedetect;</span>
<span class="s2">       [1:a]showwaves=s=214x100:colors=OrangeRed:scale=lin[waves];</span>
<span class="s2">       [1:a]showcqt=s=214x100[spectrum];</span>
<span class="s2">       [waves][spectrum]vstack[vis];</span>
<span class="s2">       [game][vis]overlay=x=640:y=280"</span><span class="w"> </span><span class="se">\</span>
<span class="w">  </span>-pix_fmt<span class="w"> </span>yuv420p<span class="w"> </span>-c:v<span class="w"> </span>libx264<span class="w"> </span>-qp<span class="w"> </span><span class="m">0</span><span class="w"> </span>-preset<span class="w"> </span>ultrafast<span class="w"> </span><span class="se">\</span>
<span class="w">  </span>indy3-dosbox-pcspkr.mkv
</code></pre></div>

<p>La partie intéressante est l’argument <code>filter_complex</code>. La vidéo
capturée passe du format 640×400 au format 854×400 sans étirement
comme première étape d’adaptation au format 16:9<sup id="fnref:blur"><a class="footnote-ref" href="#fn:blur">5</a></sup>. En utilisant
la fonte <em><a href="https://www.ptless.org/sfomi/" title="The Secret Font of Monkey Island">The Secret Font of Monkey Island</a></em>, du texte est
ajouté sur la droite de la vidéo. Le résultat est ensuite étiré vers
du 854×480 pour obtenir le format final. Le flux vidéo correspondant
est nommé <code>game</code>. Dans un deuxième temps, la piste audio est utilisée
pour construire deux visualisations : une vue d’oscilloscope et un
spectrogramme. Elles sont placées verticalement et le résultat est
nommé <code>vis</code>. La dernière étape est de superposer les deux flux
précédents.</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:vbox">
<p>Il n’y a pas d’interface graphique pour configurer le port
parallèle. Cela doit se faire via la ligne de commande :</p>
<div class="language-bash-session codehilite"><pre><span/><code><span class="gp">$ </span>VBoxManage<span class="w"> </span>modifyvm<span class="w"> </span><span class="s2">"FreeDOS (games)"</span><span class="w"> </span>--lptmode1<span class="w"> </span>/dev/parport0
<span class="gp">$ </span>VBoxManage<span class="w"> </span>modifyvm<span class="w"> </span><span class="s2">"FreeDOS (games)"</span><span class="w"> </span>--lpt1<span class="w"> </span>0x378<span class="w"> </span><span class="m">7</span>
</code></pre></div>

<p><a class="footnote-backref" href="#fnref:vbox" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:scummvm">
<p>La rustine pour <em>ScummVM</em> a été acceptée. La prise en charge
de l’<em>OPL2LPT</em> apparaîtra avec la version 2.1. À la compilation,
l’option <code>--enable-opl2lpt</code> doit être spécifiée. <a class="footnote-backref" href="#fnref:scummvm" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:delays">
<p>Avec <em>QEMU</em> et <em>DOSBox</em>, le respect des délais nécessaires
au bon fonctionnement de l’OPL2 devrait être la responsabilité du
jeu qui s’exécute. Toutefois, <em>QEMU</em> n’émule pas les délais dus
aux entrées/sorties et <em>DOSBox</em> <del>semble ne pas être assez
précis</del> <ins>travaille sur des intervalles de 1
milliseconde</ins>. Sur ce dernier, l’<em>OPL2LPT</em> est gérée depuis
un fil d’exécution dédié qui reçoit les écritures et s’assure que
les délais minimaux sont respectés. <a class="footnote-backref" href="#fnref:delays" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:nostalgia">
<p><em>Indiana Jones et la dernière croisade</em> a été le premier
jeu que j’ai essayé après avoir branché la carte son AdLib que
j’ai forcé mes parents à acheter lors d’un voyage au Canada
en 1992. À l’époque, aucun magasin traditionnel ne vendait cette
carte dans ma ville française et les achats en ligne (via le
<a href="https://fr.wikipedia.org/wiki/Minitel" title="Minitel sur Wikipedia">Minitel</a>) étaient limités aux biens de grande consommation
(comme un magnétoscope). La grande époque. 😏</p>
<p>La vidéo illustre la version VGA
(320×200, 256 couleurs) publiée en 1990. Toutefois, à l’époque, je
jouais avec la version CGA/EGA (320×200, 4 couleurs fixes ou
640×350, 16 couleurs issues d’une palette de 64). <a class="footnote-backref" href="#fnref:nostalgia" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:blur">
<p>Une méthode courante pour étendre une vidéo de 4:3 à 16:9
sans barres noires est d’ajouter en fond la vidéo étirée et
floutée. C’est aussi <a href="https://stackoverflow.com/questions/30789367/ffmpeg-how-to-convert-vertical-video-with-black-sides-to-video-169-with-blur" title="Stack Overflow: FFmpeg: How to convert vertical video with black sides, to video 16:9, with blurred background sides">possible avec FFmpeg</a> ! <a class="footnote-backref" href="#fnref:blur" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
</ol>
</div>
      </div>
    </content>
  </entry>
  <entry>
    <title type="html">3 secondes !</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/1998-3-secondes" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/1998-3-secondes#isso-thread" rel="replies" type="text/html"/>
    <updated>1998-07-17T14:00:00Z</updated>
    <id>http://www.luffy.cx/fr/blog/1998-3-secondes.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<div class="admonition">
<p class="admonition-title">Note</p>
<p>Cet article a été publié dans « <a href="https://web.archive.org/web/1998/http://www.multimania.com/www/accueil.shtml">W</a> », un annuaire de sites web accompagné
de quelques articles que je maintenais entre 1996 et 1998. Il est reproduit
ici avec quelques retouches cosmétiques dans un but de conservation
historique. J’utilise le terme incorrect « crypter » et je confonds le
chiffrement symétrique et asymétrique. Je m’en excuse platement !</p>
</div>
<p>C’est le temps qu’il aurait fallu à l’ordinateur conçu par l’<a href="https://www.eff.org/">Electronic Frontier
Foundation</a> (EFF) pour casser une clef de 40 bits (sécurité maximale autorisée
par le gouvernement français). Autant dire que le niveau de protection autorisé
par la France pour les particuliers est largement insuffisant !</p>
<div class="toc">
<ul>
<li><a href="#le-des-ii">Le DES-II</a></li>
<li><a href="#securite-detat">Securité d’état</a></li>
<li><a href="#56-heures">56 heures</a></li>
<li><a href="#250-000">250 000 $</a></li>
<li><a href="#de-56-heures-a-3-secondes">De 56 heures à 3 secondes</a></li>
<li><a href="#vers-un-cryptage-fort">Vers un cryptage fort</a></li>
</ul>
</div>
<h1 id="le-des-ii">Le DES-II</h1>
<p>Le DES est un algorithme de cryptage se basant sur des clefs de 56 bits (un bit
est un 1 ou un 0). Un message codé à l’aide de cet algorithme ne peut être
décodé qu’avec la bonne clef. Il n’existe à ce jour pas de méthode connue pour
éviter de tester toutes les clefs. Les méthodes actuelles se contentent donc de
tester les clefs les unes derrière les autres, jusqu’à tomber sur la bonne.</p>
<p>Le nombre de clefs possibles s’exprimerait avec un nombre comportant 17 chiffres
(il est de l’ordre de 70 millions de milliards). Il est bien entendu que ce
nombre est gigantesque et tester toutes les clefs prendrait un certain temps.
C’est sur ce fait que se base depuis un petit bout de temps le gouvernement
américain pour interdire l’exportation d’algorithmes utilisant des clefs plus
puissantes.</p>
<p>En France, la situation est encore pire. Le gouvernement français interdit
purement et simplement l’utilisation d’algorithmes utilisant des clefs de
puissances supérieures à 40 bits (sauf dans certains cas où il convient de
déclarer cette utilisation et de donner au gouvernement le moyen de lire les
données codées, ces moyens sont hors de portée d’un particulier).</p>
<h1 id="securite-detat">Securité d’état</h1>
<p>Que ce soit le gouvernement français ou le gouvernement américain, les deux se
défendent en avançant l’hypothèse de complots terroristes dont résulterait la
libéralisation du cryptage fort (sur 64 ou 128 bits, voire plus). Les Etats-Unis
considèrent le cryptage comme une arme de guerre et en interdisent donc
l’exportation. La France fait beaucoup plus fort, puisqu’elle en interdit
l’utilisation.</p>
<p>Il y a plus de 6 mois, le gouvernement français avait fait la promesse de se
pencher sur la question et d’envisager l’hypothèse que les messages codés à
l’aide de clefs de 40 bits n’offrent aucune sécurité. Cependant, tout ceci
semble au point mort aujourd’hui, la France considérant qu’un bon citoyen est un
citoyen qui n’a rien à cacher à l’Etat (vous n’utilisez pas d’enveloppes pour
poster vos lettres j’espère)…</p>
<h1 id="56-heures">56 heures</h1>
<p>Dans le cadre du projet <a href="https://www.distributed.net">Distributed.net</a>, des milliers d’internautes ont mis
récemment à contribution leur machine pour démontrer le manque de sécurité d’une
clef de 56 bits (qui n’est même pas autorisée en France). Ce projet, nommé
DES-II (il y en a eu un auparavant), consiste simplement à utiliser plusieurs
milliers de machines interconnectées pour tester toutes les clefs.</p>
<p>Au rythme où les choses allaient, toutes les clefs auraient été testées en moins
d’une semaine et donc le message aurait été découvert bien avant (il n’est en
effet pas nécessaire de tester toutes les clefs). Il faut en plus prendre la
lenteur de la mise en marche (le temps que tout le monde se mette au projet,
etc.). Bref, c’était encore une belle preuve du manque de sécurité qu’offre une
clef de 56 bits (ne parlons même pas des clefs de 40 bits).</p>
<p>Mais la surprise est venue d’ailleurs. L’EFF a conçu une machine spécialisée de
plus de 1800 chips (puces) dans l’unique but de casser le cryptage DES et elle a
décrypté le message codé en 56 heures !</p>
<h1 id="250-000">250 000 $</h1>
<p>56 heures. Cela peut paraître long, comme cela peut paraître court. Il faut voir
ce délai comme insignifiant et comprendre alors pourquoi les gouvernements et
les services de défense n’utilisent pas ce degré de « sécurité » pour leurs
messages sensibles.</p>
<p>La machine de l’EFF a coûté environ 250 000 $ (1,5 million de francs). Pour une
entreprise désireuse de surveiller pas mal de choses, cette somme est tout à
fait négligeable aux regards des profits que la machine peut apporter (décoder
les messages des concurrents, accéder aux données sensibles, etc.).</p>
<p>Bref, pour moins de 2 millions de francs et en moins de 3 jours, toute
entreprise respectable est capable d’aller lire votre courrier ou de dénicher
les derniers rapports confidentiels sur lesquels vous travaillez si vous aviez
l’idée de les transmettre via courrier électronique par exemple à un confrère.
Et bien entendu, il est hors de question d’utiliser des techniques plus sûres
pour encoder vos plans, le gouvernement ne vous le permet pas.</p>
<h1 id="de-56-heures-a-3-secondes">De 56 heures à 3 secondes</h1>
<p>Maintenant, plaçons-nous réellement en France. Comme toute démocratie qu’elle
est, elle interdit les clefs de plus de 40 bits pour éviter qu’une quelconque
entreprise criminelle puisse passer des ordres indéchiffrables (c’est bien
connu, la mafia va respecter la loi). Notre brave citoyen lambda qui sent bien
que son patron risque d’aller mettre son nez dans son courrier personnel (son
patron ou n’importe qui d’autre) décide de crypter son document. Il a donc à sa
disposition un formidable outil d’une puissance de 40 bits maximale.</p>
<p>Ce qu’il faut comprendre dans cette histoire de puissance, c’est qu’à chaque
fois que le nombre de bits augmente de 1, le temps nécessaire à trouver toutes
les clefs est multiplié par deux : en effet, il faut tester toutes les clefs de
puissance inférieure en rajoutant un 0 devant puis un 1.</p>
<p>C’est de cette constatation que l’on peut en déduire qu’il suffirait au
prototype de l’EFF de seulement 3 secondes pour décoder n’importe quel message
(ce n’est pas très rigoureux, il lui faudrait en moyenne 6 secondes car lors du
projet, la machine avait trouvé la bonne clef en ne testant qu’un quart des
clefs possibles). Inutile de vous dire qu’il ne suffit même plus d’attendre
quelques jours pour mettre la main sur n’importe quoi que vous jugiez
confidentiel…</p>
<h1 id="vers-un-cryptage-fort">Vers un cryptage fort</h1>
<p>Bref, il est temps que les gouvernements se décident à autoriser un cryptage un
rien plus costaud. Un cryptage à l’aide de clefs de 64 bits est déjà largement
plus puissant. Evidemment, cela ne résoudra pas le problème de l’état qui veut
avoir un oeil sur tout.</p>
<p>Mais sérieusement, est-ce que les criminels en tout genre vont s’amuser à
crypter en utilisant des outils légaux ? Non, ces mêmes criminels utilisent des
clefs de 1024 bits ou même de 2048 bits (PGP est capable de coder avec une telle
puissance et il est très simple à mettre en œuvre).</p>
<p>Donc, le seul qui est gêné dans l’histoire c’est l’honnête citoyen qui désire
simplement éviter que son patron, son provider, une tierce personne aille mettre
un nez dans ses affaires (d’autant plus que la manipulation est totalement
invisible).</p>
<p>Ce cryptage solide est nécessaire pour fiabiliser le commerce électronique,
permettre de fiabiliser des échanges, transmettre un document en traversant la
Chine ou l’Iraq ou encore mettre en place des réseaux virtuels (ce sont des
réseaux d’entreprises, mais dont une partie du flux circule à travers Internet
car un bout de l’entreprise se trouve à Washington et l’autre à Londres).</p>
      </div>
    </content>
  </entry>
  <entry>
    <title type="html">Achats électroniques</title>
    <author><name>Vincent Bernat</name></author>
    <link href="https://vincent.bernat.ch/fr/blog/1998-achats-electroniques" rel="alternate"/>
    <link href="https://vincent.bernat.ch/fr/blog/1998-achats-electroniques#isso-thread" rel="replies" type="text/html"/>
    <updated>1998-05-17T14:00:00Z</updated>
    <id>http://www.luffy.cx/fr/blog/1998-achats-electroniques.html</id>

    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
<div class="admonition">
<p class="admonition-title">Note</p>
<p>Cet article a été publié dans « <a href="https://web.archive.org/web/1998/http://www.multimania.com/www/accueil.shtml">W</a> », un annuaire de sites web accompagné
de quelques articles que je maintenais entre 1996 et 1998. Il est reproduit
ici avec quelques retouches cosmétiques dans un but de conservation
historique.</p>
</div>
<p>Il arrive parfois qu’un bouquin soit introuvable en France, il arrive aussi
fréquemment que le prix des disques soit relativement plus bas outre-atlantique.
Pourquoi donc ne pas aller acheter au meilleur prix en dehors de nos frontières ? Le commerce électronique sur le Net est depuis un bout de temps une réalité…
Récit d’un achat de 3 CD…</p>
<div class="toc">
<ul>
<li><a href="#le-choix-le-prix">Le choix, le prix</a></li>
<li><a href="#le-prix-bis">Le prix (bis)</a></li>
<li><a href="#moins-cher-plus-vite">Moins cher, plus vite</a></li>
<li><a href="#suivi-de-commande">Suivi de commande</a></li>
<li><a href="#une-semaine-plus-tard">Une semaine plus tard…</a></li>
</ul>
</div>
<h1 id="le-choix-le-prix">Le choix, le prix</h1>
<p>Récemment, le prix des CD en France a légèrement augmenté… Les « best-sellers »
sont passés d’un peu plus de 100 francs à un peu moins de 150 francs<sup id="fnref:francs"><a class="footnote-ref" href="#fn:francs">1</a></sup>.
Il existe certes des organismes qui proposent des CD à bas prix, mais le plus
souvent, les obligations sont très strictes et le consommateur est finalement
plus ou moins otage… Aux États-Unis, le prix des CD est pratiquement de moitié
de celui pratiqué en France… Je décide donc de me rendre sur <a href="https://web.archive.org/web/19981205115135/http://www.cdnow.com/cgi-bin/mserver/redirect/leaf%3D">CDNow</a> pour y
acheter quelques CD. Le choix y est énorme et on peut y trouver des CD sans
doute introuvables chez la plupart des disquaires français. Je passe rapidement
sur la recherche, assez simple. Le premier CD est trouvé en quelques secondes
(<em>Breathe</em> de Midge Ure, je vous le conseille). Il est possible d’écouter des
extraits de celui-ci. Malheureusement, cela ne semblait pas vraiment traverser
l’Atlantique. Qu’importe, je continue l’achat. Il est possible de voir à tout
moment le contenu de son « panier » électronique. Je choisis deux autres CD et
décide de régler. Le prix est très avantageux puisque presque divisé par deux
par rapport aux prix français.</p>
<h1 id="le-prix-bis">Le prix (bis)</h1>
<p>Il s’agit maintenant de passer la commande… Le prix est affiché en dollars et
au prix des 3 CD se rajoutent les frais de ports très modérés. La première étape
est donc de décliner son identité et de laisser quelques renseignements
personnels.</p>
<p>Une fois cette étape passée, surprise, les frais de ports ont considérablement
augmenté (ils viennent d’apprendre que je suis en France). L’avantage commence à
se rétrécir… Je fais un petit tour sur un convertisseur de devises. Malgré
l’augmentation des frais de port et le cours plafond du dollar, le prix reste
encore en deçà du prix français…</p>
<p>Je regarde alors attentivement les délais de livraison… Il est indiqué que
l’envoi normal peut prendre 2 à 9 semaines ! C’est tout de même relativement
long (surtout dans le cas le pire)…</p>
<p>Il y a évidemment des options plus chères pour accélérer l’avion traversant
l’Atlantique… Il y a notamment la livraison DHL en trois jours. Le prix est
évidemment assez exorbitant…</p>
<p>Je tente de jouer sur la quantité pour trouver un compromis… Évidemment, plus
il y a de CD, plus l’envoi coûte cher, mais bizarrement, le prix de l’option DHL
décroît… Enfin, bref, je ne vais pas plus loin, je ne suis guère patient…</p>
<p>Je laisse tout de même un mail pour demander si les délais peuvent être
effectivement aussi longs. Pas de réponse.</p>
<h1 id="moins-cher-plus-vite">Moins cher, plus vite</h1>
<p>Je me rends cette fois chez <a href="https://web.archive.org/web/19990116231956/http://cdu2.cduniverse.com/asp/cdu_main.asp">CD Universe</a>. Le système est similaire, même si
le site semble moins riche en news; il reste par contre aussi riche en CD. La
recherche ne prend pas plus de temps et je retrouve facilement les 3 CD que
j’avais tenté d’acquérir chez CD Now. Il y a également la possibilité d’écouter
des extraits, mais là encore, ça se solde par un échec. Pas grave, je continue.
Bonne surprise quand même, les CD sont encore moins chers que chez CD Now. Je me
rends donc sur la page pour régler. Là encore, il faut décliner son identité.
Ensuite, le devis est présenté. Un peu plus honnête cette fois-ci, les frais de
port sont légèrement inférieurs (de plus, le site a l’honnêteté de ne pas
afficher de frais de port sans connaître le pays) et surtout plus courts (1
semaine). Hop, on continue. On rentre le numéro de carte de crédit, etc. L’écran
de confirmation finit par arriver. La commande est enregistrée…</p>
<h1 id="suivi-de-commande">Suivi de commande</h1>
<p>Évidemment, l’opération ayant été faite un dimanche, il est inutile d’attendre
derrière l’écran pour savoir si le colis a été expédié… Le lendemain, je
reçois un mail présentant la facture et annonçant que les 3 CD ont été envoyés.
On peut d’ailleurs suivre le cheminement de la commande depuis le site et
annuler la commande jusqu’au moment de l’envoi. Je laisse un message au gérant
du site pour savoir s’il est possible de télécharger un catalogue complet des
CD. La réponse atterrit rapidement dans la journée, c’est un non. Pas grave non
plus, c’était pour tester.</p>
<h1 id="une-semaine-plus-tard">Une semaine plus tard…</h1>
<p>Les CD arrivent la semaine suivante dans une boîte juste assez grande pour
recevoir les trois boîtiers. La facture officielle est jointe au tout. Pas de
surprise, les CD sont entiers, pas de frais de douane. L’opération m’a permis
d’économiser 120 francs (40 francs par CD environ), frais de port inclus. Bref,
ça vaut la chandelle, ce n’est à priori pas risqué et les délais sont
raisonnables pour que la commande arrive dans un temps raisonnablement court.
Bref, si vous achetez souvent des CD, c’est une bonne idée de penser à Internet
et au commerce électronique…</p>
<div class="footnote">
<hr/>
<ol>
<li id="fn:francs">
<p>100 francs (respectivement 150 francs) de 1998 équivalent à 24 euros
(respectivement 36 euros) de 2026. <a class="footnote-backref" href="#fnref:francs" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
</ol>
</div>
      </div>
    </content>
  </entry>
</feed>