Les cartes de son AdLib furent une des premières cartes de son
pour les PC. Elles s'installaient dans une fente ISA 8 bits, et utilisaient
la puce YM3812 de Yamaha. Cette puce utilise le pricipe de synthèse
du son par modulation de fréquence (FM) et est aussi connue sous
le nom d'OPL2. Cette puce comportant 9 canaux a était supportée par plusieurs
jeux DOS.
Cette carte a une sonorité particulière (écoutez les
échantillons) dont je garde
toujours de bons souvenirs, car ce fut ma première carte de son.
De nos jours, il n'est pas rare qu'un PC ne supporte pas les cartes ISA. Il
n'est pas possible non plus d'utiliser une carte Adlib avec des machines
qui ne sont pas d'architecture compatible IBM PC, comme les Mac et les postes
de travail Sun. Il est également hors de question d'installer cette carte
dans un ordinateur portable.
Il existe un émulateur open source capable de reproduire la même sonorité
nommé Adplug. Adplug est disponible chez sourceforge:
http://adplug.sourceforge.net/ et
est utilisable en ligne de commande Unix, comme plugin xmms ou winamp, ou sous Dos.
Quelque part en 2005, alors que je trouvais dommage de ne plus me servir de ma carte
AdLib originale.. Mais j'ai eu l'idée de concevoir un circuit pour la contrôler avec le port
parallèle d'un PC. Pour pouvoir écouter de la musique prévue pour les cartes
AdLib, j'ai modifié adplug afin que ce soit ma carte qui soit utilisée pour
reproduire le son. Ainsi, la vingtaine de format de fichiers reconnus par adplug
pouvaient être joués par ma carte Adlib, et ce sur mon poste de travail Sun Sparc et
Amd64 :)
Mise à jour en 2019!
Depuis que j'ai réalisé ce projet en 2005, quelqu'un a eu l'excellente idée de
concevoir un petit circuit regroupant l'OPL2 et les pièces de support (horloge, DAC,
ampli..) nécessaires qui se branche directement à un port parallèle. Ce projet est nommé
opl2lpt.
Je m'étais contenté d'utiliser mon montage via Adplug à l'éopque, mais le créateur
de opl2lpt est allé plus loin: Le montage est compatible avec plusieurs jeux DOS grace
à un pilote ou un outil capable de modifier l'exécutable d'un jeu.
De plus, depuis la parution du projet opl2lpt, quelques jeux nouvellement développés pour DOS
supportent l'opl2lpt nativement.
J'ignore si c'est un hasard, mais il se trouve que la manière dont l'OPL2
est relié au port parallèle par le projet opl2lpt est équivalent à mon montage! Ce qui
fonctionne avec l'opl2lpt fonctionne donc aussi avec mon montage original.
J'ai donc sorti le projet de sa boîte et j'en profite désormais d'une toute nouvelle manière!
Photos 2019
Cet ordinateur portable de l'époque Windows Me tourne sous DOS 6.22. Malheureusement,
quoi que je fasse, la carte de son interne ne fonctionne pas. Mais à présent
le silence n'est plus! Grâce au pilote résident « adlipt », les logiciels
croient désormais qu'une carte Adlib est présente.
Voici le montage branché sur le portable:
Quelques tests rapides avec AdLib Jukebox:
En action avec AdLib Jukebox
En action avec AdLib Jukebox
En action avec AdLib Jukebox
adlipt
Photos 2005
Tout d'abord, voici une vue d'ensemble de mon montage:
J'ai choisi d'utiliser un 'backplane' ISA pour ne pas abimer ma carte
en soudant les fils directement dessus. L'alimentation provient
de la source de courant d'un magnétoscope. Il a fallu des
régulateurs pour les alimentations +12 et -12 volts car le
power supply n'en donnait pas.
Il y a un signal d'horloge de 14.318 mhz dans le bus ISA, et la carte
Adlib en a besoin. J'ai donc construit un oscillateur avec un cristal
récupéré d'une vieille carte maîtresse
de PC (D'ailleurs, il servait probablement à la même chose).
Le montage vu sous d'autres angles:
Schémas
Voici le schéma principal:
Et voici le schéma de l'oscillateur:
Ceci est la première fois que je construisais un oscillateur à
cristal. Je sais qu'il existe des façons plus simples de faire cela (sans
le transistor) en utilisant seulement un inverseur, mais je n'y suis pas arrivé.
Je crois qu'avec des 74hct04 c'aurait été plus facile, mais je n'en
avais pas en stock.
Vous pouvez construire ce circuit différamment si vous voulez.
Explications
Pour commencer, j'ai regardé de près la carte Adlib pour
déterminer quels signaux ISA sont utilisés par la carte. Le tableau ci-dessous
resume les signaux ISA qu'il est nécéssaire de gérer pour faire
fonctionner la carte, avec quelques explications:
# Contacts ISA
Nom
Connecter à
Direction
Utilité
A2
D7
Port parallèle 9 (Data 7)
Bi-directionnel
Bit de données 7
A3
D6
Port parallèle 8 (Data 6)
Bi-directionnel
Bit de données 6
...Et ansi de suite...
A9
D0
Port parallèle 2 (Data 0)
Bi-directionnel
Bit de données 0
A11
AEN
0 volts
Vers la carte
Validation d'addresse, Utilisé en DMA. La
carte adlib ne réponds pas si ce signal est
haut.
Explication de l'addressage.
La carte adlib utilise les addresses 0x388 et 0x389. Il y a donc un seul
bit qui varie entre 388 et 389. Voici un tableau démontrant cela:
3
8
8
1
1
1
0
0
0
1
0
0
0
Bit 9
Bit 8
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
3
8
9
1
1
1
0
0
0
1
0
0
1
Bit 9
Bit 8
Bit 7
Bit 6
Bit 5
Bit 4
Bit 3
Bit 2
Bit 1
Bit 0
Ceci explique pourquoi le bit d'addresse #0 est connecté à un signal
en sortie du port parallèle (Strobe).
Note 2:
Puisqu'il restait encore un signal
sortant du port parallèle, j'ai décidé de cabler le bit
d'addresse #1, ce qui va me permettre de pouvoir controler une carte utilisant quatre
ports d'IO consécutifs.
Logiciel
J'ai écrit une classe C++ qui est utilisable avec adplug pour faire
jouer des fichiers adlib supportés par adplug avec ce montage.
Pour tester, j'ai écrit un petit lecteur de musique qui utilise adplug
avec ma classe. Le tout fonctionne en ligne de commande.
Il est possible qu'un jour je décide de faire une version plus
complexe (plugin xmms?) ou que j'essais d'intégrer ma classe dans
adplug. En attendant, voici les sources: paradlib.tar.gz
Mise à jour 2019: Comme ce montage est compatible avec opl2lpt, les pilotes
et jeux supportant prévus pour être utilisé avec l'opl2lpt fonctionnent. Voir
le Projet github.
Échantillons de musique
Voici quelques pièces de musiques jouées avec ma carte AdLib:
Je ne saurais être tenu responsable pour les dommages
que l'utilisation des informations ou la mise en œuvre des instructions présentées
sur cette page pourrait causer à votre équipement,
à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant
à l'exactitude des informations et à leur fonctionnement.