Section courante

A propos

Section administrative du site

Spécification Description
Fabricant Ad Lib, Inc.
Date de conception 1987
Modèle ALMSC
Architecture ISA

Introduction

La carte de synthétiseur musical AdLib a été créée par Ad Lib, Inc. et commercialisée en 1987. La carte son produit de la musique de synthèse FM via la puce Yamaha YM3812. La carte utilise un emplacement ISA 8 bits, dispose d'un bouton de volume sur le panneau et d'une prise stéréo pour la sortie. La version originale de 1987 de la carte était dotée d'une prise stéréo 1/4", mais la refonte de 1990 l'a remplacée par une prise 3,5 mm. La carte était livrée avec un logiciel et des pilotes nécessitant un IBM PC, PC XT, PC AT ou 100% compatible, 256K RAM, DOS 2.0 ou supérieur et un adaptateur graphique CGA, EGA ou MGA. Le logiciel inclus comprenait un programme de jukebox visuel pouvant lire les fichiers ROL. Dix-sept chansons étaient incluses avec la carte son (enregistrées ici), et des disques de chansons supplémentaires pouvaient être achetés, ainsi que le compositeur visuel AdLib, vous permettant de créer vos propres chansons.

La carte son AdLib a d'abord été lentement adoptée sur le marché car il n'y avait pas grand-chose à faire avec, mais le 16 août 1988, le jeu King's Quest IV: The Perils of Rosella (DOS) est devenu le premier jeu à prendre en charge l'AdLib. Peu de temps après, AdLib est vendu le premier carte de son standard de facto pour le marché des PC. Ce succès a conduit les concurrents à créer des clones de la carte son comme la Rainbow Arts Soundboard et la Magical Sound Card.

En 1989, Creative Labs a sorti son produit concurrent plus avancé, la Sound Blaster, ayant une compatibilité à 100 % avec AdLib ainsi que plusieurs autres fonctionnalités pour attirer les acheteurs potentiels. Cela a conduit à une baisse des ventes de cartes AdLib. Ad Lib, Inc. a essayé de riposter avec la carte AdLib Gold 1000 en 1992, mais la société a été trop lente à réagir. Peu de temps après la sortie de l'AdLib Gold 1000, Ad Lib, Inc. a déposé son bilan et fait faillite peu de temps après.

Description du synthétiseur

Le synthétiseur Ad Lib est composé d'oscillateurs et de générateurs d'enveloppe. Un oscillateur, un générateur d'enveloppe et un contrôleur de niveau sont liés ensemble pour former un «opérateur» :

La carte Ad Lib Music Synthesizer Card (ALMSC) contient 18 opérateurs étant généralement regroupés par paires afin de produire des sons instrumentaux. Les opérateurs peuvent être combinés de trois manières différentes :

L'ALMSC produit soit 9 sons mélodiques, soit 6 sons mélodiques et 5 instruments à percussion. Pour les 9 sons mélodiques, les opérateurs sont groupés par paires. Pour le mode percussion, les opérateurs sont disposés comme suit :

Parce que l'ALMSC ne dispose que de 9 registres pour les informations de fréquence (un pour chaque canal mélodique), les hauteurs de cymbale et de charleston sont fixes. En mode percussion, un générateur de bruit blanc est utilisé pour créer des sons rythmiques. Ce générateur de bruit blanc utilise les informations de fréquence des voix 7 et 8 (caisse claire et tom-tom) (bloc, numéro de fréquence, multiplication) et la sortie de phase appropriée. Différents sons rythmiques sont produits en combinant ce signal de sortie avec du bruit blanc. Le résultat est ensuite envoyé aux opérateurs. Le meilleur rapport entre les deux fréquences est de 3:1 (fréquence de la caisse claire = 3 * fréquence du tom-tom). Enfin, les informations d'enveloppe sont multipliées par la sortie de la table d'ondes. Comme l'enveloppe est définie pour un opérateur correspondant à un seul instrument rythmique, les valeurs sont définies dans les registres de paramètres de la même manière que pour les instruments mélodiques.

Programmation du synthétiseur

L'ALMSC peut être situé à quatre adresses différentes :

L'adresse du port est actuellement câblée en dur sur 388h, mais des cavaliers pourront être ajoutés à l'avenir, vous devez donc prendre en compte la possibilité d'utiliser des adresses différentes lors de la programmation. En général, l'adresse 388h est utilisé.

La carte décode deux adresses :

Adresse Description
388h Registre d'index (écriture), registre d'état (lecture)
389h Registre de données (écriture seule)

Le registre d'index est utilisé pour sélectionner l'adresse du registre, puis les données sont écrites dans le registre de données. Le registre d'état renvoie l'état de deux temporisateurs sur la carte.

En raison de la nature de la carte, vous devez attendre 3,3 µs après une écriture de sélection de registre et 23 µs après une écriture de données. La meilleure façon de gérer cela est de lire le registre d'état ALMSC en boucle, car la vitesse du bus est toujours la même quelle que soit la vitesse du processeur. 6 lectures après l'écriture de sélection de registre et 36 lectures après l'écriture de données devraient faire l'affaire.

Carte des registres ALMSC

Voici le registre d'état (388h) :

D7D6D5D4D3D2D1D0
IRQFlag T1Flag T2Flag          

Voici les registres d'écriture (389h) :

RegistreD7D6D5D4D3D2D1D0
01   WSEnable Registre de test
02 Minuterie de compteur 1 (résolution 80 µsec)
03 Minuterie de compteur 2 (résolution 320 µsec)
04 IRQReset T1Mask T2Mask   Début du T2 Début du T1
08 CSW NOTE-SEL  
20 à 35 Trémolo Vibrato Maintien KSR Facteur de multiplication de fréquence
40 à 55 Niveau de l'échelle clef Niveau de sortie
60 à 75 Taux d'attaque Taux de décroissance
80 à 95 Niveau de maintien Taux de libération
A0 à A8 Numéro de fréquence (8 bits inférieurs)
B0 à B8   KEY-ON Numéro de bloc F-Num (bits élevés)
BD Trem Dep Vibr Dep PercMode BD On SD On TT On CY On HH On
C0 à C8   Facteur de modulation de rétroaction Additive
E0 à F5   Sélection de forme d'onde

Pour certains paramètres, il existe un registre par canal de sortie. Pour ces paramètres, le numéro de canal peut être utilisé comme déplacement dans la carte. Pour de nombreux paramètres, il existe un registre par opérateur. Cependant, il existe des trous dans la carte d'adresses, de sorte que dans ce cas, le numéro d'opérateur ne peut pas être utilisé comme décalage. Les déplacements d'opérateur pour ces registres sont (sous forme hexadécimale) :

OPR123456789101112131415161718
OFS00010203040508090A0B0C0D101112131415

Les deux tableaux suivants illustrent quels opérateurs forment ensemble un canal :

Mode mélodique
CHAN 0 1 2 3 4 5 6 7 8
OPR1123789131415
OPR2456101112161718

Mode percussion
CHAN 0 1 2 3 4 5 BD SD TT CY HH
OPR11237891317151814
OPR245610111216    

Référence du registre de l'ALMSC

Registre d'état :

Bit Description
D7 Drapeau IRQ. Défini si D5 et/ou D6 sont définis.
D6 Drapeau du minuteur 1. Défini lorsque le temps prédéfini dans le minuteur 1 est écoulé.
D5 Drapeau du minuteur 2. Défini lorsque le temps prédéfini dans le minuteur 2 est écoulé.

Les interruptions de temporisation ne sont pas câblées, mais les temporisateurs peuvent être utilisés pour détecter la présence de la carte comme suit :

  1. Réinitialiser T1 et T2 : écrire 60 h dans le registre 4.
  2. Réinitialiser l'IRQ : écrire 80 h dans le registre 4.
  3. Lire le registre d'état : lire à 388 h. Enregistrer le résultat.
  4. Régler le temporisateur 1 sur FFh : écrire FFh dans le registre 2.
  5. Démasquer et démarrer le temporisateur 1 : écrire 21 h dans le registre 4.
  6. Attendre dans une boucle de retard pendant au moins 80 µs.
  7. Lire le registre d'état : lire à 388 h. Enregistrer le résultat.
  8. Réinitialiser T1, T2 et IRQ comme dans les étapes 1 et 2.
  9. Tester les résultats des deux lectures : la première doit être 0, la seconde doit être C0h. Si l'une des deux est incorrecte, l'ALMSC n'est pas présent.

Remarque 1 : vous devez utiliser le ET pour les octets de résultat avec E0h car les bits inutilisés ne sont pas définis.

Remarque 2 : cette méthode de test ne fonctionne pas avec la SoundBlaster.

01 : Registre de test / WSE :

Bit Description
D5 Activation de la sélection de forme d'onde. Si cette option est désactivée, tous les canaux utiliseront une onde sinusoïdale normale. Si elle est activée, le contenu du registre E0 à F5 (WS) sera utilisé.
D4 à D0 Le registre de test doit être remis à zéro avant toute opération.

02 : Minuteur de compteur 1 :

Compteur 8 bits ascendant avec une résolution de 80 µs. En cas de dépassement, le bit du registre d'état est défini et la valeur prédéfinie est à nouveau chargée dans le temporisateur.

03 : Minuteur de compteur 2:

Identique au minuteur 1, mais avec une résolution de 320 µsec.

04 : IRQ-Reset / Masque / Début :

Bit Description
D7 IRQ-Reset. Réinitialise le minuteur et les indicateurs IRQ dans le registre d'état.
Tous les autres bits sont ignorés lorsque ce bit est défini.
D6 Masque du minuteur 1. Si 1, le registre d'état n'est pas affecté par le débordement.
D5 Masque du minuteur 2. Identique à ci-dessus.
D1 Démarrage du minuteur 2. Minuteur activé/désactivé.
D0 Démarrage du minuteur 1. Identique à ci-dessus.

08 : CSW / NOTE-SEL:

Bit Description
D7 Mode onde sinusoïdale composite activé/désactivé.
D6 NOTE-SEL. Contrôle le point de partage du clavier. Lorsqu'il est à 0, le partage du clavier est le deuxième bit à partir du bit 8 du numéro F. Lorsqu'il est à 1, le MSb du numéro F est utilisé.

20 à 35: Trémolo / Vibrato / Sustain / KSR / Facteur de multiplication de fréquence :

Bit Description
D7 Activation/désactivation du trémolo (vibrato d'amplitude).
D6 Activation/désactivation du vibrato de fréquence.
D5 Maintien du son. Lorsque la valeur est 1, la fréquence de l'opérateur sera maintenue à son niveau de maintien jusqu'à ce qu'un KEY-OFF soit effectué.
D4 Mise à l'échelle de l'enveloppe (KSR) activée/désactivée. Lorsque la valeur est 1, les notes les plus hautes sont plus courtes que les notes les plus basses.
D3 à D0 Facteur de multiplication de fréquence (MULTI) :
MULTI Facteur
0 ½
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10
11 10
12 12
13 12
14 15
15 15

40 à 55 : Niveau de gamme de touches / Niveau de sortie :

Bit Description
D7 à D6 Niveau de gamme de touches. Atténue le niveau de sortie vers une hauteur plus élevée :
KSL Atténuation
0 -
1 1,5 dB/oct
2 3,0 dB/oct
3 6,0 dB/oct
D5 à D0 Niveau de sortie. Atténue le niveau de sortie des opérateurs. En synthèse additive, la variation du niveau de sortie d'un opérateur fait varier le volume de son canal correspondant. En synthèse FM, la variation du niveau de sortie de la porteuse fait varier le volume du canal. La variation de la sortie du modulateur modifie le spectre de fréquence produit par la porteuse.

60 à 75 : Taux d'attaque / Taux de décroissance :

Bit Description
D7 à D4 Taux d'attaque. Détermine le temps de montée du son. Plus la valeur est élevée, plus l'attaque est rapide.
D3 à D0 Taux de décroissance. Détermine le temps de décroissance du son. Plus la valeur est élevée, plus le déclin est court.

80 à 95 : Niveau de sustain / Taux de relâchement :

Bit Description
D7 à D4 Niveau de sustain. Détermine le point auquel le son cesse de s'affaiblir et passe à un son ayant un niveau constant. Le niveau de sustain est exprimé sous forme de fraction du niveau maximum. Notez que le bit de sustain dans le registre 20-35 doit être défini pour que cela ait un effet.
D3 à D0 Taux de relâchement. Détermine le taux auquel le son disparaît après KEY-OFF. Plus la valeur est élevée, plus le relâchement est court.

A0 à A8 : Numéro de fréquence :

Détermine la hauteur de la note. Les bits les plus élevés du numéro F sont entreposés dans le registre ci-dessous.

B0 à B8 : Touche activée / Numéro de bloc / Numéro F (bits élevés) :

Bit Description
D5 Touche activée. Lorsque la valeur est 1, la sortie des canaux est activée.
D4 à D2 Numéro de bloc. Détermine approximativement l'octave.
D1 à D0 Numéro de fréquence. Les 2 bits les plus élevés du registre ci-dessus.

La formule suivante est utilisée pour déterminer le numéro F et le bloc : Numéro F = Fréquence musicale * 2^(20 blocs) / 49 716 Hz

BD : Trem Dep / Vibr Dep / PercMode / BD/SD/TT/CY/HH On :

Bit Description
D7 Profondeur du trémolo (vibrato d'amplitude). 0 = 1,0 dB, 1 = 4,8 dB.
D6 Profondeur du vibrato de fréquence. 0 = 7 centièmes, 1 = 14 centièmes. Un «centième» correspond à 1/100 d'un demi-ton.
D5 Mode percussion. 0 = mode mélodique, 1 = mode percussion.
D4 BD On. KEY-ON du canal de grosse caisse.
D3 SD On. KEY-ON du canal de caisse claire.
D2 TT On. KEY-ON du canal de tom-tom.
D1 CY On. KEY-ON du canal de cymbale.
D0 HH On. KEY-ON du canal de charleston.

C0 à C8 : Facteur de modulation FeedBack / Additif :

Bit Description
D3 à D1 Facteur de modulation FeedBack :
MULTI Facteur
0 0
1 π/16
2 π/8
3 π/4
4 π/2
5 π
6 2·π
7 4·π
D0 Additif . 1 = Synthèse additive, 0 = Modulation de fréquence

E0 à F5 : Sélection de forme d'onde :

Bit Description
D7 à D2 Non utilisé
D1 à D0 Sélection de forme d'onde (WS) :
WS Forme d'onde
00 Sinusoïdale
01 Demi-sinusoïdale
10 Sinusoïdale absolue
11 Impulsion sinusoïdale

Programmation de la détection de la carte de son

Pour détecter une carte de son AdLib en Turbo Pascal, il est nécessaire d'utiliser les mêmes principes qu'en assembleur, mais en utilisant les instructions de Turbo Pascal pour accéder aux ports d'entrée/sortie. La carte AdLib utilise les ports d'entrées/sorties 0388h et 0389h pour la communication. La détection se fait en envoyant des commandes spécifiques et en vérifiant la réponse de la carte. Voici le code, en Turbo Pascal, de détection d'une carte de son AdLib Music Synthesizer Card :

  1. Program DetectAdLib;
  2.  
  3. Uses
  4.  Crt;
  5.  
  6. Procedure SetAdlib(Address,Data:Byte);
  7. Var X,I:Byte;
  8. Begin
  9.  Port[$388]:=Address;
  10.  For I:=1 to 6 do X:=Port[$388];
  11.  Port[$389]:=Data;
  12.  For I:=1 to 35 do X:=Port[$388];
  13. End;
  14.  
  15. Function IsAdlib:Boolean;
  16. Var
  17.  X,X2:Byte;
  18. Begin
  19.  SetAdlib($4,$60);
  20.  SetAdlib($4,$80);
  21.  Delay(10);
  22.  X:=Port[$388];
  23.  SetAdlib($2,$FF);
  24.  SetAdlib($4,$21);
  25.  Delay(10);
  26.  X2:=Port[$388];
  27.  SetAdlib($4,$60);
  28.  SetAdlib($4,$80);
  29.  X:=X and $E0;
  30.  X2:=X2 and $E0;
  31.  If(X=$0)and(X2=$C0)Then IsAdlib:=True
  32.                     Else IsAdlib:=False;
  33. End;
  34.  
  35. BEGIN
  36.  If(IsAdLib)Then Writeln('Carte AdLib détectée !')
  37.             Else Writeln('Pas de carte AdLib détectée.');
  38. END.

Fréquences des notes

Le tableau suivant contient les fréquences en Hertz pour les notes des octaves 1 à 8. Le Do central est dans l'octave 5.

Note 1 2 3 4 5 6 7 8
C 16.352 32.703 65.406 130.81 261.63 523.25 1046.5 2093.0
C# 17.324 34.648 69.295 138.59 277.18 554.37 1108.7 2217.5
D 18.354 36.708 73.416 146.83 293.66 587.33 1174.7 2349.3
D# 19.445 38.890 77.781 155.56 311.13 622.25 1244.5 2489.0
E 20.601 41.203 82.406 164.81 329.63 659.26 1318.5 2637.0
F 21.826 43.653 87.307 174.61 349.23 698.46 1396.9 2793.8
F# 23.124 46.249 92.499 184.99 369.99 739.99 1480.0 2960.0
G 24.499 48.999 97.998 195.99 391.99 783.99 1568.0 3136.0
G# 25.956 51.913 103.82 207.65 415.31 830.61 1661.2 3322.4
A 27.500 55.000 110.00 220.00 440.00 880.00 1760.0 3520.0
A# 29.135 58.270 116.54 233.08 466.16 932.32 1864.7 3729.3
B 30.867 61.735 123.47 246.94 493.88 987.77 1975.5 3951.1

Bibliothèques ou cadre d'application

Voici les principales bibliothèques pour manipuler la carte de son AdLib :

Langage de programmation Description
Turbo Pascal ADLIBLIB-TP

Voir également

Langage de programmation - Assembleur 80x86 - Détection des cartes de son

Dernière mise à jour : Dimanche, le 10 septembre 2017