Carte AdLib sur port parallèle



Pourquoi?

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, elle est aussi connue sous le nom d'OPL2, et possède 9 canaux.

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 support pas les cartes ISA. Il n'est pas possible non plus d'utiliser une carte Adlib avec des machines qui ne sont pas des PC, comme les Mac et les Sun. On ne peux pas utiliser cette carte avec un ordinateur portable non plus.

Par contre, il est possible d'écouter de la musique Adlib avec l'émulateur "open source" de carte Adlib, 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.

Malgré cela, je trouvais dommage que ma carte adlib demeure dans un placard. J'ai donc décidé de conçevoir un circuit permettant de l'utiliser avec un port parallèle. Pour pouvoir écouter de la musique en format adlib, j'ai modifié adplug pour qu'il utilise la carte pour produire le son (Je n'ai donc pas a écrire le code pour interprèter la vingtaine de format de fichiers supportés par adplug). J'utilise à nouveau ma carte adlib, et sur des machines beaucoup plus puissantes que dans le temps! (Amd64 et Sparc64).

J'espère que cette page permettra à d'autres amateurs de musique Adlib de profiter à nouveau de leur carte Adlib, comme dans le bon vieux temps.

goto top Retour en haut


Photos

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:


goto top Retour en haut


Schémas

Voici le schéma principal:


Et voici le schéma de l'oscillateur:
schema 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.

goto top Retour en haut


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.
A22, A23, A24 et A28 A9,A8,A7,A3 5 Volts Vers la carte Bits d'addresse 9,8,7 et 3 (Voir note 1)
A25, A26, A27 et A29 A6,A5,A4,A2 0 Volts Vers la carte Bits d'addresse 6,5,4 et 2 (Voir note 1)
A30 A1 Port parallèle 17 (Select) Vers la carte Bit d'addresse 1 (Voir note 2)
A31 A0 Port parallèle 1(Strobe) Vers la carte Bit d'addresse 0 (Voir note 1)
B1,B10,B31 Ground 0 Volts Alim.0 Volts
B3,B29 +5Vdc 5 Volts Alim.Alimentation 5 volts
B7 -12Vdc -12 Volts Alim.Alimentation -12 volts
B9 +12Vdc 12 Volts Alim.Alimentation 12 volts
B30 OSC Sortie de l'oscillateur Vers la carteHorloge de 14,31818 Mhz
B13 /IOW Port parallèle 16 (Init) Vers la carte Lorsque bas, provoque l'écriture de l'octet présent sur le BUS de données à l'addresse sur le BUS.
B14 /IOR Port parallèle 14 (Autofeed) Vers la carte Lorsque bas, la carte gérant l'addresse présente sur le BUS écrit un octet sur le BUS de donnés.
Voici une page résumant tout les signaux ISA et démontrant ou les signaux se situent sur le connecteur:
http://pinouts.ru/data/ISA_pinout.shtml

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
11 1000 1000
Bit 9Bit 8Bit 7 Bit 6Bit 5Bit 4 Bit 3Bit 2Bit 1 Bit 0
3 8 9
11 1000 1001
Bit 9Bit 8Bit 7 Bit 6Bit 5Bit 4 Bit 3Bit 2Bit 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.

goto top Retour en haut


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

goto top Retour en haut


Échantillons de musique

Voici quelques pièces de musiques jouées avec ma carte AdLib:
Fichier oggFichier originalDescription
adlibsp.ogg adlibsp.s3m Musique d'introduction de StarPort BBS, par Purple Motion
monkey1_theme.ogg mi1_theme.laa La musique thème de Monkey Island 1
monkey2_theme.ogg mi2_monkey_island_2_introduction.laa La musique thème de Monkey Island 2
madness-chipmunks.ogg madness-chipmunks.amd Je ne sais pas d'ou viens cette musique mais je l'aime bien.

goto top Retour en haut


Liens

Musique:
http://chiptunes.back2roots.org/ Une grande collection de musique de jeu sous plusieurs formats.
http://adlib.superfighter.com/ Captures en format .raw de la musique de plusieurs bons jeux.

Autres:
http://www.iki.fi/jrop/specials/digisnap/ Projet d'electronique permettant d'enregistrer le son sortant de la carte adlib en format digital, pour un maximum de qualité.
http://www.oplx.com/opl2.htm Informations sur la programmation de la puce OPL2.

goto top Retour en haut


Avertissement

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.

goto top Retour en haut


Les marques de commerce utilisées dans ce site appartiennent à leurs propriétaires respectifs.
Copyright © 2002-2017, Raphaël Assénat
Site codé avecSite codé avec vimDernière mise à jour: 10 Juin 2016 (Vendredi)