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 :
- La synthèse FM utilise deux opérateurs en série. Le premier opérateur, le modulateur, module le deuxième opérateur, la porteuse, via son entrée de données de modulation.
- La synthèse additive utilise deux opérateurs en parallèle, additionnant les deux sorties. Cette méthode de synthèse n'est pas aussi intéressante que la synthèse FM, mais elle permet de générer de bons sons de type orgue.
- La synthèse d'onde sinusoïdale composite (CSW) peut être utilisée pour générer de la parole ou d'autres sons associés en jouant simultanément les 9 voix. Lorsque vous utilisez cette méthode, la carte ne peut générer aucun autre son. Ce mode n'est pas expliqué ici, car d'autres méthodes se sont avérées offrir une parole de meilleure qualité.
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 :
- 6 instruments mélodiques (12 opérateurs)
- 1 grosse caisse (2 opérateurs)
- 1 caisse claire (1 opérateur)
- 1 tom-tom (1 opérateur)
- 1 cymbale (1 opérateur)
- 1 charleston (1 opérateur)
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 :
- 218h
- 288h
- 318h
- 388h
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) :
D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|
IRQFlag | T1Flag | T2Flag |
Voici les registres d'écriture (389h) :
Registre | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|
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) :
OPR | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
OFS | 00 | 01 | 02 | 03 | 04 | 05 | 08 | 09 | 0A | 0B | 0C | 0D | 10 | 11 | 12 | 13 | 14 | 15 |
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 |
OPR1 | 1 | 2 | 3 | 7 | 8 | 9 | 13 | 14 | 15 |
OPR2 | 4 | 5 | 6 | 10 | 11 | 12 | 16 | 17 | 18 |
Mode percussion | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
CHAN | 0 | 1 | 2 | 3 | 4 | 5 | BD | SD | TT | CY | HH |
OPR1 | 1 | 2 | 3 | 7 | 8 | 9 | 13 | 17 | 15 | 18 | 14 |
OPR2 | 4 | 5 | 6 | 10 | 11 | 12 | 16 |
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 :
- Réinitialiser T1 et T2 : écrire 60 h dans le registre 4.
- Réinitialiser l'IRQ : écrire 80 h dans le registre 4.
- Lire le registre d'état : lire à 388 h. Enregistrer le résultat.
- Régler le temporisateur 1 sur FFh : écrire FFh dans le registre 2.
- Démasquer et démarrer le temporisateur 1 : écrire 21 h dans le registre 4.
- Attendre dans une boucle de retard pendant au moins 80 µs.
- Lire le registre d'état : lire à 388 h. Enregistrer le résultat.
- Réinitialiser T1, T2 et IRQ comme dans les étapes 1 et 2.
- 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 :
- Program DetectAdLib;
-
- Uses
- Crt;
-
- Procedure SetAdlib(Address,Data:Byte);
- Var X,I:Byte;
- Begin
- Port[$388]:=Address;
- For I:=1 to 6 do X:=Port[$388];
- Port[$389]:=Data;
- For I:=1 to 35 do X:=Port[$388];
- End;
-
- Function IsAdlib:Boolean;
- Var
- X,X2:Byte;
- Begin
- SetAdlib($4,$60);
- SetAdlib($4,$80);
- Delay(10);
- X:=Port[$388];
- SetAdlib($2,$FF);
- SetAdlib($4,$21);
- Delay(10);
- X2:=Port[$388];
- SetAdlib($4,$60);
- SetAdlib($4,$80);
- X:=X and $E0;
- X2:=X2 and $E0;
- If(X=$0)and(X2=$C0)Then IsAdlib:=True
- Else IsAdlib:=False;
- End;
-
- BEGIN
- If(IsAdLib)Then Writeln('Carte AdLib détectée !')
- Else Writeln('Pas de carte AdLib détectée.');
- 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