Comment
Author: Admin | 2025-04-28
En RAM centrale) pour transférer des données avec un périphérique (dans le cas présent vers le processeur sonore, le PSG).Ce transfert de données se fait sans l'intervention du microprocesseur. Il est nécessaire d'écrire les données à transférer dans un format compréhensible par le contrôleur DMA. Celui-ci est assez évolué sur notre cher CPC plus puisqu'il lit et interprète en fait des commandes (ou instructions, comme vous préférez). En voici la liste : Instruction Codage Description LOAD R,D &0RDD Charge la valeur de l'octet D dans le registre R du PSG. R:0 à 15 et D:0 à 255. PAUSE N &1NNN Attend N fois l'unité de pause. N:0 à 4095. PAUSE 0 est équivalent à NOP. REPEAT N &2NNN Initialise le compteur de boucle à N (nombre de bouclages). N:0 à 4095. REPEAT 0 est équivalent à REPEAT 1. NOP &4000 No OPeration. LOOP &4001 Boucle. Si le compteur de boucle est différent de zéro, alors il est décrémenté et on retourne à l'instruction suivant le REPEAT. INT &4010 Génère une interruption DMA. STOP &4020 Fin d'AY-liste. Mise à 0 du bit correspondant du registre DCSR (bit 0, 1 ou 2 selon le DMA en cours). Comme vous pouvez le voir dans le tableau précédent, toutes les instructions sont 16 bits. De plus, elles doivent obligatoirement être alignées sur des adresses paires et poids faible en tête (dans le sens des adresses croissantes, c'est-à-dire en little endian). Une succession d'instructions DMA son est appelée AY-liste. Toute AY-liste doit se terminer par l'instruction STOP.A chaque HBL, une instruction est exécutée. Donc, toutes les 64µs en standard (15625Hz). Le CPC plus dispose de trois canaux DMA son indépendants, autant que de canaux sonores, certainement pas par hasard ! Mais tous les canaux DMA ont accès à n'importe quel registre du PSG (instruction LOAD). Un canal DMA n'est ni limité ni lié à un canal sonore particulier. Pour le détail des registres du PSG, je vous invite à aller jeter un coup d'oeil ici.Voyons maintenant les registres de l'ASIC qui servent à contrôler les canaux DMA : DMA0 &6C00-&6C01 SAR0 : adresse d'AY-liste du canal 0 &6C02 PPR0 : unité de pause du canal 0 DMA1 &6C04-&6C05 SAR1 : adresse d'AY-liste du canal 1 &6C06 PPR1 : unité de pause du canal 1 DMA2 &6C08-&6C09 SAR2 : adresse d'AY-liste du canal 2 &6C0A PPR2 : unité de pause du canal 2 SAR : 16 bit Source Address RegisterPPR : 8 bit Pause Prescaler Register Registre DCSR :Tout ça est assez clair. Pour utiliser un DMA, il suffit d'indiquer l'adresse de l'AY-liste dans le registre SAR (le bit 0 est ignoré). Si l'AY-liste utilise l'instruction PAUSE, il faut aussi mettre à jour PPR. L'exécution du
Add Comment