Etude des cartes audio MA-55

Pinup
MA-55

Carte audio "simple" pour SYSTEM 80

Etude et explication du fonctionnement de ces cartes.
Cet article doit être considéré comme une référence technique partielle,
car certaines informations deumeurent encore incomplètes.

Concept

La carte MA-55 est directement dérivée de la C-18389 utilisée sur les SYSTEM 1, dont elle reprend l'architecture matérielle. Bien que ressemblantes, ces cartes sont en réalité bien différentes et pas seulement au niveau connectique. En effet, le programme interne n'est pas du tout le même, la référence figurant sur le R6530 étant R3016-11 pour les MA-55 (SYSTEM 80) et R3014-12 (ou R3014-13) pour les C-18389 (SYSTEM 1).

Cadencée par une simple horloge RC, la fréquence théorique de fonctionnement est de 853 KHz.

La génération des sons est réalisée par un convertisseur numérique-analogique (1408), piloté directement par le CPU (6503) et le RRIOT (6530). Afin de faciliter la mise en œuvre et de réduire la place nécessaire à la génération des sons, un macro-langage spécifique a été intégré à cette carte. Le principe étant d'avoir un générateur de formes d'ondes (sinus, carré, triangles) standardisé, puis d'assembler ces séquences en fonction des besoins en paramétrant la PROM de son (HM7643).

Nous avons librement baptisé ce macro-langage SGOL (par analogie aux langages PGOL et TGOL utilisés dans les cartes CPU des SYSTEM 1 et 80. SGOL étant l'acronyme de Sound Programming Oriented Langage.

Dépannage et dump

Le dépannage d'une carte MA-55 n'est pas très compliqué, à condition que le 6530 ne soit pas grillé. Pour tester la carte et ce composant particulier, nous avons adapté notre banc de test et ajouté une sonde venant à la place du 6503. Ceci permet de tester la PROM son, mais aussi de faire très facilement un dump du contenu du 6530.

Test d'une carte audio Black-Hole (export):
Banc de test

Evolutions et documentations

A l'origine, la carte MA-55 est prévue pour fonctionner soit en mode normal (sound), soit dans un mode simplifié (tone), la sélection s'opérant grâce au switch S1. Les flippers concernés sont: Panthera, Spiderman, Circus, Counterforce, Starrace, James Bond 007, et cette information apparaît clairement dans la documentation: MA-55 Le mode "tone" ne présentant que peu d'intérêt, sera ensuite abandonné. A partir du Timeline, il ne sera plus programmé dans la PROM son. Pour ce flipper, la documentation sera corrigée par simple apposition d'un sticker "MUST BE OFF": MA-55 Ce mode étant définitivement abandonné, la documentation sera proprement corrigée pour les flippers suivants (Force II et Pink Panther): MA-55 La carte MA-55 sera ensuite ré-utilisée pour les versions "export" du Volcano, du Black-Hole, du Devil's Dare (80A) ainsi que pour l"Eclipse. La documentation ne fera mention des réglages que pour les cartes évoluées (MA-216). Il faut savoir que pour ces flippers, le mode "tone" n'est également plus programmé et que le switch S1 doit impérativement rester en position OFF.

Bug de l'attract-mode

Lorsque activé par le switch S2, l'attract mode devrait en principe se déclencher toute les 6 minutes. En interne, ceci est réalisé par une boucle de temporisation de 45 x 6.815.744 cycles, soit tout les 306.708.480 cycles d'horloge. A la fréquence de 853 KHz, ceci correspond bien à 359 secondes, soit 6 minutes.

Il y a cependant un bug: lorsqu'un son est joué (sauf celui de l'attract-mode), le compteur est réinitialisé à 256 au lieu de 45. La temporisation passe donc à 256 x 6.815.744 = 1.744.830.464 cycles, soit 2045 secondes, ce qui équivaut à plus de 34 minutes !

Au démarrage, tant qu'aucun son n'a encore été joué, l'attract-mode est bien déclenché toute les 6 minutes. Si on lance une partie, à la fin, l'attract-mode ne se déclenchera que 34 minutes plus tard, puis reprendra son cycle normal de 6 minutes.

Pinup

Structure de la PROM de sons

La PROM de son HM7643 est décodée sur l'espace d'adressage $400 à $7FF.

La carte CPU envoi des commandes à la carte son par les fils S1, S2, S4, S8. Chaque commande correspond au numéro de son à jouer et peut prendre les valeurs de 1 à 15. Selon la position du switch S1, le "tone" ou le "sound" correspondant est joué.

Au début de la PROM, se trouvent deux tables d'adresses, disposant chacune de 15 entrées, l'une pour les "tones", l'autre pour les "sounds". Au tout début, la première entrée est réservée pour le son de l'attract mode (qui est également celui joué en mode test). On a donc:

  • 1 x entrée pour le son test ou attract-mode
  • 15 x entrées pour les "tones"
  • 15 x entrées pour les "sound"

Chaque entrée est un groupe de 3 quartets, formant une adresse sur 12 bits. Cette adresse pointe vers une séquence écrite en langage SGOL, dans la PROM de son. Ces adresses sont facilement lisibles, car stockées dans l'ordre naturel: MSB en premier, LSB en dernier. La plage d'adresses utilisable est bien évidement, celle de la PROM HM7643, soit $400 à $7FF.

Lorsqu'un tone ou un sound sont identiques, il suffit de les faire pointer vers la même adresse. Les tones et sounds inutilisés, pointent en général vers le tone 1.

Attention: A partir du Timeline, les "tones" ne sont plus utilisés et l'espace alloué à la table a été réutilisé. C'est pourquoi, le switch S1 doit impérativement être mis sur OFF. S'il est positionné sur ON, la carte tente alors d'exécuter du code à des adresses non prévues, ce qui entraine généralement son plantage.

A la fin de la PROM se trouve également un espace réservé de $7C0 à $7FF. Cette zone est utilisée pour stocker des formes d'ondes spécifiques à un jeu.

PROM de test et code externe

Bien que le SGOL soit le langage privilégié pour programmer les PROM de son, les concepteurs de cette carte ont prévu une autre possibilité. Celle d'exécuter des portions de code 6503, stockées en externe dans la PROM HM7643. Mais cette PROM ayant une architecture 4 bits, il n'était pas possible de coder directement dedans les instructions 6503 (sur 8 bits) et ils ont eu recours à un artifice.

Le code 8 bits est codé sur deux quartets. Pour pouvoir être exécuté, les instructions reconstituées sont transférées en RAM à partir de l'adresse $010. La capacité RAM du 6530 étant extrêmement réduite (64 octets), la séquence de code est limitée à 45 octets (ce qui laisse juste 3 octets de libre pour la pile).

Pour compliquer le tout, ces séquences sont stockées dans la PROM en ordre inverse... ce qui rend le code totalement illisible.

A l'origine, cette fonctionnalité semble avoir été prévue pour une PROM de test. En effet, lorsque l'on appui sur le bouton TEST, un simple son est émis. Mais si on met la broche SPARE à la masse, alors le programme donne le contrôle à une séquence stockée à l'emplacement des vecteurs tone/sound. Il semble donc que cela était destiné pour éxecuter un programme de test dans une PROM spécifique.

Il existe également la possibilité de déclencher une séquence de code 6503 grâce à une instruction SGOL. Ceci n'a été que très rarement utilisé, sauf sur le PINK PANTHER où au contraire, cela a été fait massivement.

Pinup

Le langage SGOL

Les instructions sont codées sur 4 bits, il n'y a donc que 16 instructions et elles sont de deux types:

  • celles destinées à la genération de formes d'ondes (codes inférieur à 8)
  • celles de contrôle (codes supérieurs à 8).

Certaines instructions sont suivies de paramètres, codés également sur 4 bits.
La taille d'une séquence (instructions + paramètres) ne peut excéder 256 éléments.

Instructions

Instructions 0 à 7

TONE et SOUND
Génération d'un son selon le mode sélectionné.
En mode "tone" (instructions 0 à 7), suivies de 2 paramètres.
En mode "sound" (instructions 0 à 6), suivies de 4 ou 6 paramètres (pour l'instruction 7).

Instruction 8

NOP
Ne fait strictement rien.
Aucun paramètre.

Instruction 9

BREAK
Arrête un son ayant une durée illimité (voir instructions 0 à 7).
Sans utilité réelle, un tel son étant interrompu par une nouvelle commande
(semble en effet, ne jamais être utilisée).
Aucun paramètre.

Instruction A

STOP
Arrête le mode SUSTAIN (voir ci-dessous).
Par exemple, arrête une mélodie lorsque certains sons sont joués.
Aucun paramètre.

Instruction B

SUSTAIN
Passe en mode "sustain" dans lequel, il faut maintenir la commande pour continuer de jouer le son.
En cas d'interruption, puis de rétablissement, le son reprend là où il s'était arrété.
Utilisé par exemple, pour jouer des mélodies.
Aucun paramètre.

Instruction C

PRIORITY
Indique que le son qui suit est prioritaire et n'est pas interruptible par un autre.
(par défaut une nouvelle commande interrompt le son courant).
Aucun paramètre.

Instruction D

MODE
Alterne entre le mode TONE et le mode SOUND.
Permet de jouer des "sounds" en mode TONE et des "tones" en mode SOUND.
Attention: en cas de SUSTAIN, on revient au mode initial à chaque instruction de génération (0 à 7).
Aucun paramètre.

Instruction E

REPEAT
Répétition d'un groupe d'instructions.
Suivie de 2 paramètres.

Instruction F

END
Fin de séquence SGOL, termine la génération du son.
Aucun paramètre.

Paramètres

Paramètres de l'instruction E

REPEAT
Le premier paramètre indique la taille du groupe (nombre d'instructions concernées).
La valeur codée est diminuée de 1, par exemple 2 pour un groupe de 3 instructions.
Le second paramètre donne le nombre de répétitions a éffectuer.
Seules les instructions de génération (0 à 7) peuvent êtres incluses dans un bloc à répéter.

Dans le cas particulier, où le second paramètre est a zéro, l'instruction se transforme alors en:
ASM
Execution de code 6503.
Le code est chargé en RAM (à l'adresse $010) depuis la PROM (à l'adresse $702).

Paramètres des instructions 0 à 7

Le nombre de paramètres et leur signification varient selon le mode.

TONE
Dans ce mode, les sons joués sont de simples notes de musique et deux paramètres sont suffisants.

Le premier paramètre combiné avec le code instruction, indique la note à jouer.
La note de base est donnée par le code instruction (0 = La, 1 = Si, 2 = Do, 3 = Ré, 4 = Fa, 5 = Sol, 6 = Mi, 7 = Pause). Le bit 0 du paramètre indique un dièse tandis que les bits 1 à 3 indiquent l'octave.

Le second paramètre indique la durée de cette note.
Il peut prendre les valeurs 0 à 11 pour coder une ronde, une blanche, une noire, une croche, une double croche, etc... (durée en ms, 0 = 1260, 1 = 940, 2 = 620, 3 = 460, 4 = 300, 5 = 200, 6 = 140, 7 = 100, 8 = 60, 9 = 40, 10 = 20, 11 = 0). Il est également possible de coder une durée infinie avec la valeur 12.

SOUND
En cours d'étude...

Exemples et codes sources

Les sources ci-après, sont prévus pour êtres assemblés avec le macro-assembleur 6502 de Michal Kowalski.

Codage de la PROM du PANTHERA

Codage de la PROM du PINK PANTHER

Source R6530 R3016-14

Dernière mise à jour de cette page: 30 Mai 2018