MSX Village forum

Le Kiosque à Musique Faire une musique sur MSX à partir d'une partition

BibiZen Membre non connecté

Maire-adjoint

Rang

Avatar

Inscrit le : 03/10/2009 à 18h34

Messages: 1455

Le 02/01/2014 à 11h51

Reprise du message précédent

Vous trouverez plus de 300 partitions de jeux sur ce site, il y a de quoi faire ^^

http://www.emuparadise.me/sheet-music/
E-mail    
Sector28 Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 12/05/2018 à 23h00

Messages: 561

Le 02/01/2014 à 12h49
granced :
Allez, le dernier pour la route : il faut aussi savoir qu'on peut envoyer du son grâce aux ports du PSG, et ce grâce à l'instruction OUT. On envoie le numéro du registre dans le port d'adresse &HA0, et on écrit la valeur dans le port d'adresse &HA1 : par exemple un SOUND 0,&HFE peut se traduire par :

OUT &HA0,0 : OUT &HA1,&HFE !!


qui ne fonctionnera pas tous les 50/60ième de seconde, il faut aussi interdire les interruptions



DI

XOR A

OUT ($A0), A

LD A, $FE

OUT ($A1), A

EI


DONALD TRUMP IS FAST APPROACHING
NEMESIS ! RETURN IMMEDIATELY !
   
popolon Membre non connecté

Villageois

Rang

Avatar

Groupe : Shoutbox

Inscrit le : 28/07/2010 à 22h07

Messages: 357

Le 10/03/2017 à 13h05
granced:

Je vais cependant essayer de "dégrossir" un peu la chose : chaque son, chaque note correspond à une fréquence, et le but est de la faire reproduire par le PSG. Prenons le LA traditionnel : sa fréquence est de 440 Hz. Pour trouver quoi mettre dans nos registres, il faut passer par deux étapes : d'abord on divise la fréquence du Z80 par 16, puis par la valeur de la fréquence qu'on cherche à coder, donc ici : 3 579 545/16 = 223721,5625 puis 223721,5625/440 = 508,458.....
On arrondit à l'unité par excès : on obtient donc 509.
A partir de là, il faut convertir ce nombre en binaire (les cours de maths pour l'informatique sont à demander au besoin :D ), sur 12 bits.
Pour 509, on obtient 000111111101. Les 4 bits les plus significatifs (ceux de gauche quoi), représentent le réglage grossier, les 8 bits restant le réglage fin ! Donc ici, 1 pour le réglage grossier, 253 pour le réglage fin !
Donc pour résumer, si je veux passer une fréquence de LA dans mon Z80 (disons sur la voie A), il faut que j'envoie la valeur 252 dans le registre 0, et 1 dans le registre 1 !!



Je remonte ce sujet pour faire part d'une erreur qui existe dans certains manuels (notament "le livre du MSX" ou "Assembleur et péripheriques") et que fait également Granced dans son explication sur la détermination des fréquences (que ce soit celle de la note avec les registres R0 à R5, mais aussi celle du bruit avec R6 ou celle de l'enveloppe avec R11 et R12) c'est que la fréquence d'entrée du PSG n'est pas égale à la fréquence de l'horloge du Z80 (3579545Hz) mais à sa moitié, soit 1789772Hz. Pour tout calcul, il faut donc se baser sur ce chiffre de 1789772Hz
Pour la fréquence de note, le PSG divise de lui même cette fréquence d'entrée par 16 ce qui donne une fréquence maximale de 111860Hz, il divise ensuite cette fréquence par la période que l'on inscrit sur 12 bits dans les doubles registres (R1-R0, R3-R2, R5-R4) pour obtenir la fréquence de note souhaitée
rappel : la fréquence est le nombre de cycle (périodes) par seconde. la période est l'inverse de la fréquence et c'est bien la valeur de la période (et non une fréquence) que l'on doit mettre dans les registres du PSG.

exemple : pour obtenir le LA du diapason à 440Hz (La du quatrième octave après le Do médian), il faut diviser 111860 par une période de 254 (0000 11111110) et donc mettre 0 dans R1 et 254 dans R0

NB 1 : Le tableau des fréquences que donne Granced en page 2 est quant à lui tout a fait correct

NB 2 : la détermination des fréquences pour le bruit et l'enveloppe suit le même schéma :
pour la fréquence de bruit, le PSG divise la fréquence d'entrée par 16 puis divise par la période codée sur les 5 bits de poids faible du registre R6
pour la fréquence de l'enveloppe, le PSG divise la fréquence d'entrée par 256 puis divise par la période codée sur les 16 bits des registres R12-R11

NB 3: Dans le cas du SSG (YM2149) de Yamaha, le pin SEL permet de sélectionner la fréquence d'entrée soit suivant le master clock, soit suivant la moitié du master clock (comme c'est le cas du PSG)


tout, tout, tout, vous saurez tout sur la zizi...que
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie