Difference between revisions of "CTC-AY SDK libCTC fr"

From CPCWiki - THE Amstrad CPC encyclopedia!
Jump to: navigation, search
(Created page with "===Bibliotheque de prise en charge du CTC=== Localisation : lib/ctc.asm Cette bibliothèque est composée de macros ainsi que de définitions des drapeaux pour la configurat...")
 
(Connexions des lignes du CTC sur le CTC-AY)
 
(17 intermediate revisions by 2 users not shown)
Line 1: Line 1:
===Bibliotheque de prise en charge du CTC===
+
===Bibliothèque de prise en charge du CTC===
  
 
Localisation : lib/ctc.asm
 
Localisation : lib/ctc.asm
Line 11: Line 11:
 
*rr registre 16 bits (HL/BC/DE)
 
*rr registre 16 bits (HL/BC/DE)
 
*ii registre d'index (IX/IY)
 
*ii registre d'index (IX/IY)
 +
*string chaîne de caractères
 +
 +
===Description brève du CTC===
 +
 +
Le CTC est composé de 4 canaux possédant chacun 1 compteur interne et 1 registre contenant une constante. Chaque canal est configurable en mode 'counter' ou en mode 'timer'.
 +
 +
En mode counter, le compteur interne est décrémenté à chaque signal sur sa ligne d'entrée. Quand ce compteur atteint zéro, un signal est envoyé sur sa ligne de sortie et une interruption est déclenchée si l'utilisateur l'a configurée. Le compteur interne est rechargé avec la constante et le décompte reprend.
 +
 +
En mode timer, le compteur interne est décrémenté toutes les 64 ou 256 impulsions d'horloge selon la configuration soit 16µs ou 64µs pour une fréquence de 4Mhz. Quand ce compteur atteint zéro, un signal est envoyé sur sa ligne de sortie et une interruption est déclenchée si l'utilisateur l'a configurée. Le compteur interne est rechargé avec la constante et le décompte reprend.
 +
 +
Pour plus d'informations sur le fonctionnement exact du CTC, se référer à la documentation Zilog : [[File:Z80ctc.pdf]]
 +
 +
===Connexions des lignes du CTC sur le CTC-AY===
 +
{| class="wikitable"
 +
|-
 +
! Canal || signal en entrée || signal en sortie || utilisation typique
 +
|-
 +
| 0 || Horloge 4Mhz || YM || Fréquence des YM
 +
|-
 +
| 1 || Curseur CRTC || Z80 NMI || NMI localisée
 +
|-
 +
| 2 || Horloge 4Mhz || Canal 3 || Compteur 8/16bits
 +
|-
 +
| 3 || Canal 2 || - || Compteur 8/16bits
 +
|}
  
 
===Macros===
 
===Macros===
  
  
'''CTC_SetYM'''
+
'''
 +
CTC_SetYM'''
  
Configure la fréquence des deux YM.Si le paramètre est omis, c'est la fréquence du CPC qui est automatiquement choisie.
 
  
 +
Configure la fréquence des deux YM.
  
 
Usage :
 
Usage :
 
*CTC_SetYM d (défaut : 1)
 
*CTC_SetYM d (défaut : 1)
 +
 +
Si le paramètre est omis, c'est la fréquence du CPC qui est choisie par défaut.
 +
Valeurs définies :
 +
*CTC.freq_CPC
 +
*CTC.freq_ZX
  
  
Line 27: Line 58:
  
  
Démarre un des canaux du CTC , le premier paramètre correspond au canal choisi , le second aux drapeaux affectant ce canal et le troisième à la valeur de délai du canal.
+
Démarre un des canaux du CTC.
 +
Le premier paramètre correspond au canal choisi, le deuxième aux drapeaux affectant ce canal et le troisième à une constante de temps qui sera chargée dans le compteur du canal interne, puis à chaque fois que ce compteur arrivera à zéro.
  
 
Les canaux sont définis par les valeurs suivantes :
 
Les canaux sont définis par les valeurs suivantes :
*ctc.chan0 : canal 0
+
*ctc.chan0 : Canal 0
*ctc.chan1 : canal 1
+
*ctc.chan1 : Canal 1
*ctc.chan2 : canal 2
+
*ctc.chan2 : Canal 2
*ctc.chan3 : canal 3
+
*ctc.chan3 : Canal 3
  
Les valeurs suivantes sont possibles et combinables en partie pour les drapeaux :
+
Les valeurs suivantes sont possibles et en partie combinables pour les drapeaux :
*ctc.int : une interruption est déclenchée quand le compteur du canal atteint 0
+
*ctc.int : Une interruption est déclenchée quand le compteur du canal interne atteint 0
*ctc.counter : le canal est en mode counter
+
*ctc.counter : Le canal est en mode counter
*ctc.timer : le canal est en mode timer
+
*ctc.timer : Le canal est en mode timer
*ctc.prescale256 : choisi une échelle de temps de 64µs pour le canal (mode timer uniquement)
+
*ctc.prescale256 : Choisi une échelle de temps de 64µs pour le canal ''(mode timer uniquement)''
*ctc.prescale16 : choisi une échelle de temps de 16µs pour le canal (mode timer uniquement)
+
*ctc.prescale16 : Choisi une échelle de temps de 16µs pour le canal ''(mode timer uniquement)''
*ctc.reset : redémarre le canal avant de le mettre en route.
+
*ctc.reset : Redémarre le canal avant de le mettre en route.
  
  
Line 48: Line 80:
 
*CTC_StartChannel rr/ii
 
*CTC_StartChannel rr/ii
  
les paramètres seront charges à la suite en (rr) ou (ii).Il est possible d'ajouter un post ou un pré incrément/décrement pour incrément/décrementer rr/ii.
+
les paramètres seront chargés à la suite en (rr) ou (ii). Il est possible d'ajouter un post ou un pré incrément/décrement pour incrément/décrementer rr/ii.
  
 
Exemple : CTC_StartChannel HL++
 
Exemple : CTC_StartChannel HL++
Line 54: Line 86:
 
*CTC_StartChannel d,rr
 
*CTC_StartChannel d,rr
  
Le premier paramètre est donnée sous forme de valeur immédiate.Les deux derniers seront chargés à la suite en (rr) ou (ii).Il est possible d'ajouter un post ou un pré incrément/décrement pour incrément/décrementer rr/ii.
+
Le premier paramètre est donné sous la forme d'une valeur immédiate. Les deux suivants seront chargés en (rr) ou (ii). La pré/post imcrémentation/décrementation est possible dans ce cas.
  
 
Exemple : CTC_StartChannel ctc.chan2,HL++
 
Exemple : CTC_StartChannel ctc.chan2,HL++
 
  
 
*CTC_StartChannel d,d,d/r/(rr)/(ii)
 
*CTC_StartChannel d,d,d/r/(rr)/(ii)
  
Les premiers et second paramètres sont des valeurs immédiates.Les troisième peut être donné sous forme de valeur immédiate , registre 8 bits ou une référence à un registre 16bits ou d'index
+
Les deux premiers paramètres sont des valeurs immédiates. Le troisième peut être donné sous la forme d'une valeur immédiate, d'un registre 8 bits ou d'une référence à un registre 16bits ou d'index.
  
 
Exemple : CTC_StartChannel ctc.chan.3,ctc.int | ctc.timer | ctc.prescale256 | ctc.reset, (HL)
 
Exemple : CTC_StartChannel ctc.chan.3,ctc.int | ctc.timer | ctc.prescale256 | ctc.reset, (HL)
 +
 +
 +
'''CTC_StopChannel'''
 +
 +
 +
Arrête un des canaux du CTC.
 +
Le paramètre correspond à un des canaux du CTC.
 +
 +
 +
Usage :
 +
*CTC_StopChannel d (defaut 0)
 +
 +
En cas d'omission du paramètre, c'est le canal 0 qui est arrêté, ce qui a pour effet de fixer la fréquence des deux YM à 2Mhz (Atari ST)
 +
 +
Les canaux sont définis par les valeurs suivantes :
 +
*ctc.chan0 : Canal 0
 +
*ctc.chan1 : Canal 1
 +
*ctc.chan2 : Canal 2
 +
*ctc.chan3 : Canal 3
 +
 +
 +
'''CTC_StartNMI'''
 +
 +
 +
Démarre le canal 1 pour déclencher une interruption NMI à l'adresse CRTC indiquée.
 +
 +
 +
Usages possibles :
 +
 +
*CTC_StartNMI
 +
Sans paramètre, le CTC est configuré pour produire l'interruption non masquable à l'adresse indiquée par les registres 14 et 15 du CRTC. Les registres de début et de fin de curseur (registres 10 et 11 du CRTC) doivent être correctement configurés avant l'usage de CTC_StartNMI.
 +
 +
*CTC_StartNMI d/r/(rr)/(ii),d/r/(rr)/(ii)
 +
Le premier paramètre correspond à la partie haute de l'adresse CRTC à laquelle l'interruption non masquable doit se produire , la deuxième à la partie basse. Les paramètres peuvent être une valeur immédiate, un registre 8 bits (D,E,H,L) ou une référence à un registre 16bits ou d'index. La pré/post imcrémentation/décrementation est possible dans ce cas.
 +
 +
Exemple : CTC_StartNMI (DE++),(DE)
 +
 +
*CTC_StarNMI dd
 +
Le paramètre correspond à l'adresse CRTC 16bits complète.
 +
 +
 +
'''CTC_CreateIntTable'''
 +
 +
 +
Crée une table de vecteurs et crée une fonction d'initialisation pour cette table en mode IM2. Néanmoins cette fonction ne change ni l'état des interruptions, ni le mode de gestion des interruptions du Z80. C'est à la charge de l'utilisateur de la bibliothèque d'exécuter les instructions "EI" et "IM2" ensuite.
 +
 +
Usage :
 +
 +
*CTC_CreateIntTable string,b,bb,bb,bb,bb
 +
Le premier paramètre est le nom qui sera donné à la table crée. Deux étiquettes sont crées lors du processus, nom_de_la_table.table est l'adresse de la table elle même, nom_de_la_table.set est la fonction qui configure le Z80 et le CTC pour utiliser cette table.
 +
 +
Le deuxième paramètre est la partie haute de l'adresse de la table sachant que celle ci s'étend de (partie_haute*256)-10. La mémoire sera remplie de la valeur 0 entre l'adresse d'assemblage actuelle et l'adresse de la table.
 +
 +
Les quatre derniers paramètres correspondent respectivement aux vecteurs d'interruption des canaux 0,1,2 et 3 du CTC et à celui du Gate Array.
 +
 +
Example : CTC_CreateIntTable matable,#10,#1000,#2000,#3000,#4000,#5000
 +
 +
Crée deux étiquettes nommées "matable.table" et "matable.set". A l'adresse #00F6 se trouve la table qui se décompose de la façon suivante :
 +
 +
*0x00F6:0x00 - Adresse basse du vecteur d'interruption du canal 0
 +
 +
*0x00F7:0x10 - Adresse haute du vecteur d'interruption du canal 0
 +
 +
*0x00F8:0x00 - Adresse basse du vecteur d'interruption du canal 1
 +
 +
*0x00F9:0x20 - Adresse haute du vecteur d'interruption du canal 1
 +
 +
*0x00FA:0x00 - Adresse basse du vecteur d'interruption du canal 2
 +
 +
*0x00FB:0x30 - Adresse haute du vecteur d'interruption du canal 2
 +
 +
*0x00FC:0x00 - Adresse basse du vecteur d'interruption du canal 3
 +
 +
*0x00FD:0x40 - Adresse haute du vecteur d'interruption du canal 3
 +
 +
*0x00FE:0x00 - Octet d'alignement
 +
 +
*0x00FF:0x00 - Adresse basse du vecteur d'interruption du Gate Array
 +
 +
*0x0100:0x50 - Adresse haute du vecteur d'interruption du Gate Array
 +
 +
 +
'''CTC_StartTimer16'''
 +
 +
 +
Démarre un compteur 16bits en utilisant des canaux 2 et 3 du CTC.
 +
 +
 +
Usage :
 +
 +
*CTC_StartTimer16 dd,d
 +
Le premier paramètre indique la constante à charger dans le compteur interne des canaux 2 (partie haute) et 3 (partie basse) du CTC. La valeur 0 dans la partie haut ou basse correspond à 256 (0x100) pour la partie correspondante. Le temps écoulé en fonction de ce paramètre est le suivant : (partie_haute(dd)-1)*(partie_basse(dd)-1)*64µs
 +
 +
Le second paramètre est un drapeau qui indique si une interruption doit être générée quand le compteur interne du canal 3 arrive à zéro. Les valeurs acceptées sont :
 +
 +
*CTC.int : une interruption est générée quand le compteur interne du canal 3 est à zéro
 +
*CTC_noint : aucune interruption générée

Latest revision as of 16:36, 11 July 2013

Bibliothèque de prise en charge du CTC

Localisation : lib/ctc.asm

Cette bibliothèque est composée de macros ainsi que de définitions des drapeaux pour la configuration du CTC.

Rappel des abréviations :

  • d valeur 8 bits (0-0xFF)
  • dd valeur 16 bits (0-0xFFFF)
  • r registre 8 bits (A,B,C,D,E,H,L)
  • rr registre 16 bits (HL/BC/DE)
  • ii registre d'index (IX/IY)
  • string chaîne de caractères

Description brève du CTC

Le CTC est composé de 4 canaux possédant chacun 1 compteur interne et 1 registre contenant une constante. Chaque canal est configurable en mode 'counter' ou en mode 'timer'.

En mode counter, le compteur interne est décrémenté à chaque signal sur sa ligne d'entrée. Quand ce compteur atteint zéro, un signal est envoyé sur sa ligne de sortie et une interruption est déclenchée si l'utilisateur l'a configurée. Le compteur interne est rechargé avec la constante et le décompte reprend.

En mode timer, le compteur interne est décrémenté toutes les 64 ou 256 impulsions d'horloge selon la configuration soit 16µs ou 64µs pour une fréquence de 4Mhz. Quand ce compteur atteint zéro, un signal est envoyé sur sa ligne de sortie et une interruption est déclenchée si l'utilisateur l'a configurée. Le compteur interne est rechargé avec la constante et le décompte reprend.

Pour plus d'informations sur le fonctionnement exact du CTC, se référer à la documentation Zilog : File:Z80ctc.pdf

Connexions des lignes du CTC sur le CTC-AY

Canal signal en entrée signal en sortie utilisation typique
0 Horloge 4Mhz YM Fréquence des YM
1 Curseur CRTC Z80 NMI NMI localisée
2 Horloge 4Mhz Canal 3 Compteur 8/16bits
3 Canal 2 - Compteur 8/16bits

Macros

CTC_SetYM


Configure la fréquence des deux YM.

Usage :

  • CTC_SetYM d (défaut : 1)

Si le paramètre est omis, c'est la fréquence du CPC qui est choisie par défaut. Valeurs définies :

  • CTC.freq_CPC
  • CTC.freq_ZX


CTC_StartChannel


Démarre un des canaux du CTC. Le premier paramètre correspond au canal choisi, le deuxième aux drapeaux affectant ce canal et le troisième à une constante de temps qui sera chargée dans le compteur du canal interne, puis à chaque fois que ce compteur arrivera à zéro.

Les canaux sont définis par les valeurs suivantes :

  • ctc.chan0 : Canal 0
  • ctc.chan1 : Canal 1
  • ctc.chan2 : Canal 2
  • ctc.chan3 : Canal 3

Les valeurs suivantes sont possibles et en partie combinables pour les drapeaux :

  • ctc.int : Une interruption est déclenchée quand le compteur du canal interne atteint 0
  • ctc.counter : Le canal est en mode counter
  • ctc.timer : Le canal est en mode timer
  • ctc.prescale256 : Choisi une échelle de temps de 64µs pour le canal (mode timer uniquement)
  • ctc.prescale16 : Choisi une échelle de temps de 16µs pour le canal (mode timer uniquement)
  • ctc.reset : Redémarre le canal avant de le mettre en route.


Usages possibles :

  • CTC_StartChannel rr/ii

les paramètres seront chargés à la suite en (rr) ou (ii). Il est possible d'ajouter un post ou un pré incrément/décrement pour incrément/décrementer rr/ii.

Exemple : CTC_StartChannel HL++

  • CTC_StartChannel d,rr

Le premier paramètre est donné sous la forme d'une valeur immédiate. Les deux suivants seront chargés en (rr) ou (ii). La pré/post imcrémentation/décrementation est possible dans ce cas.

Exemple : CTC_StartChannel ctc.chan2,HL++

  • CTC_StartChannel d,d,d/r/(rr)/(ii)

Les deux premiers paramètres sont des valeurs immédiates. Le troisième peut être donné sous la forme d'une valeur immédiate, d'un registre 8 bits ou d'une référence à un registre 16bits ou d'index.

Exemple : CTC_StartChannel ctc.chan.3,ctc.int | ctc.timer | ctc.prescale256 | ctc.reset, (HL)


CTC_StopChannel


Arrête un des canaux du CTC. Le paramètre correspond à un des canaux du CTC.


Usage :

  • CTC_StopChannel d (defaut 0)

En cas d'omission du paramètre, c'est le canal 0 qui est arrêté, ce qui a pour effet de fixer la fréquence des deux YM à 2Mhz (Atari ST)

Les canaux sont définis par les valeurs suivantes :

  • ctc.chan0 : Canal 0
  • ctc.chan1 : Canal 1
  • ctc.chan2 : Canal 2
  • ctc.chan3 : Canal 3


CTC_StartNMI


Démarre le canal 1 pour déclencher une interruption NMI à l'adresse CRTC indiquée.


Usages possibles :

  • CTC_StartNMI

Sans paramètre, le CTC est configuré pour produire l'interruption non masquable à l'adresse indiquée par les registres 14 et 15 du CRTC. Les registres de début et de fin de curseur (registres 10 et 11 du CRTC) doivent être correctement configurés avant l'usage de CTC_StartNMI.

  • CTC_StartNMI d/r/(rr)/(ii),d/r/(rr)/(ii)

Le premier paramètre correspond à la partie haute de l'adresse CRTC à laquelle l'interruption non masquable doit se produire , la deuxième à la partie basse. Les paramètres peuvent être une valeur immédiate, un registre 8 bits (D,E,H,L) ou une référence à un registre 16bits ou d'index. La pré/post imcrémentation/décrementation est possible dans ce cas.

Exemple : CTC_StartNMI (DE++),(DE)

  • CTC_StarNMI dd

Le paramètre correspond à l'adresse CRTC 16bits complète.


CTC_CreateIntTable


Crée une table de vecteurs et crée une fonction d'initialisation pour cette table en mode IM2. Néanmoins cette fonction ne change ni l'état des interruptions, ni le mode de gestion des interruptions du Z80. C'est à la charge de l'utilisateur de la bibliothèque d'exécuter les instructions "EI" et "IM2" ensuite.

Usage :

  • CTC_CreateIntTable string,b,bb,bb,bb,bb

Le premier paramètre est le nom qui sera donné à la table crée. Deux étiquettes sont crées lors du processus, nom_de_la_table.table est l'adresse de la table elle même, nom_de_la_table.set est la fonction qui configure le Z80 et le CTC pour utiliser cette table.

Le deuxième paramètre est la partie haute de l'adresse de la table sachant que celle ci s'étend de (partie_haute*256)-10. La mémoire sera remplie de la valeur 0 entre l'adresse d'assemblage actuelle et l'adresse de la table.

Les quatre derniers paramètres correspondent respectivement aux vecteurs d'interruption des canaux 0,1,2 et 3 du CTC et à celui du Gate Array.

Example : CTC_CreateIntTable matable,#10,#1000,#2000,#3000,#4000,#5000

Crée deux étiquettes nommées "matable.table" et "matable.set". A l'adresse #00F6 se trouve la table qui se décompose de la façon suivante :

  • 0x00F6:0x00 - Adresse basse du vecteur d'interruption du canal 0
  • 0x00F7:0x10 - Adresse haute du vecteur d'interruption du canal 0
  • 0x00F8:0x00 - Adresse basse du vecteur d'interruption du canal 1
  • 0x00F9:0x20 - Adresse haute du vecteur d'interruption du canal 1
  • 0x00FA:0x00 - Adresse basse du vecteur d'interruption du canal 2
  • 0x00FB:0x30 - Adresse haute du vecteur d'interruption du canal 2
  • 0x00FC:0x00 - Adresse basse du vecteur d'interruption du canal 3
  • 0x00FD:0x40 - Adresse haute du vecteur d'interruption du canal 3
  • 0x00FE:0x00 - Octet d'alignement
  • 0x00FF:0x00 - Adresse basse du vecteur d'interruption du Gate Array
  • 0x0100:0x50 - Adresse haute du vecteur d'interruption du Gate Array


CTC_StartTimer16


Démarre un compteur 16bits en utilisant des canaux 2 et 3 du CTC.


Usage :

  • CTC_StartTimer16 dd,d

Le premier paramètre indique la constante à charger dans le compteur interne des canaux 2 (partie haute) et 3 (partie basse) du CTC. La valeur 0 dans la partie haut ou basse correspond à 256 (0x100) pour la partie correspondante. Le temps écoulé en fonction de ce paramètre est le suivant : (partie_haute(dd)-1)*(partie_basse(dd)-1)*64µs

Le second paramètre est un drapeau qui indique si une interruption doit être générée quand le compteur interne du canal 3 arrive à zéro. Les valeurs acceptées sont :

  • CTC.int : une interruption est générée quand le compteur interne du canal 3 est à zéro
  • CTC_noint : aucune interruption générée