MSX Village forum

La Place des Développeurs Concurso MSX-BASIC 2010 sur Konamito.com

KN2000 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 11/06/2010 à 14h21

Reprise du message précédent

Le principe au 1er abord est assez simple. Le MSX appelle régulièrement une adresse en FD9F (enfin, si mes souvenirs sont bons). Suivant les modèles de MSX, il y a C9, qui correspond à un "return", ou un saut à une autre adresse (dans la plupart des cas, un saut à une adresse dans un autre slot). Par prudence, il faut sauvegarder les 5 octets que l'on trouve à cette adresse. On remplace ces cinq octets par un appel à notre routine de gestion de la musique. A la fin de notre routine de gestion de la musique, il faut les cinq octets que l'on a sauvegardé auparavant. Si c'était une série de C9, le Z80 va reprendre le cours de son travail sinon il va effectuer le saut qui se trouvait précédemment en FD9F.
La gestion de la musique, c'est avancer d'un pas dans la partition et savoir si il faut jouer une note sur tel canal, poursuivre une note sur tel canal, changer d'instrument, stopper une note...
Dans la pratique, la gestion doit être rapide. Les interruptions doivent être autorisées. Il faut bien noter si ta gestion de la musique est déjà résidente ou non pour éviter qu'elle se rappelle elle-même. Lorsque ton programme est fini, il faut bien remettre en FD9F son contenu initial pour ne pas devoir rebooter. Il y a des précautions à prendre lors de la modification de la zone en FD9F. Il se peut que le Z80 se pointe au moment où tu as modifié qu'une partie des octets et là, il part faire une petite ballade jusqu'au moment où tu le rappelles avec un RESET. Edité par KN2000 Le 11/06/2010 à 14h44


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
granced Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 09/10/2009 à 09h18

Messages: 1500

Le 11/06/2010 à 14h39
Déjà beaucoup plus clair que ce qui m'avait été expliqué sur MRC... :d
On doit donc modifier ou plutôt détourner un hook si j'ai bien compris...

Aurais-tu un exemple concret pour jouer "CDEFGAB" sur le canal A ?

Comment se gère par exemple le tempo, et la longueur des notes, vu que ce sont des données liées au temps ? :hum

Est-ce possible de procéder d'une manière différente, je n'arrive pas à saisir les subtilités de STRTMS et des variables système type VOICEN, VOICAQ ou MUSICF (y en a d'autres mais la liste est longue :oups ), je me demande s'il est possible de les manipuler également même si j'ai l'impression qu'elles ne servent qu'en Basic lors d'un PLAY ?

Pour le tempo je partais sur une piste encore plus obscure : un tempo de 60 correspond à 1 temps par seconde, je me disais qu'avec un registre d'état du VDP (gestion du VBLANK) je pouvais gérer le temps de cette manière. Trop complexe ou risque de plantage ?


MSX un jour, MSX toujours ! :D
Site web    
KN2000 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 11/06/2010 à 15h05
Le VBLANK est une bonne idée car on peut arriver à gérer le graphisme lorsque le spot revient en haut à gauche. Et quand on ne doit plus toucher à l'écran sous peine d'une distortion du décor ou des sprites, on gère la musique. Sur ce point là, je vais avoir du mal car je ne l'ai fait qu'une seule fois et j'ai vidé le tube d'aspirine.
Sinon, la première solution est bien l'interception d'un Hook. On n'obtient pas tous les tempos malheureusement.

Pour gérer le temps, j'utilisais une boucle. Par exemple :
LD A, (bcle) ; bcle doit avoir été initialisé lors du détournement du Hook
DEC A
JR NZ,sortie ; fin de la gestion de la zik
LD A,3
LD (bcle),A
; gestion de la zik
...
; fin gestion Zik (les 5 octets réservés au contenu du Hook initial à remplir lors du détournement)
sortie : NOP
NOP
NOP
NOP
NOP
RET

Du coup, une fois sur 3, le Z80 va aller consulter ta partition. Partition dans le style de Soundtracker. On avance d'un pas à la fois dans un tableau.
Canal 1 : G...G...
Canal 2 : B...O...
Canal 3 : DDBD....
Par exemple, au pas 0, on va mettre la fréquence du Sol dans le canal 1, celle du si dans le canal 2, celle du ré dans le canal 3. Au pas 1, on ne touche pas au canal 1 et 2. Par contre, on va se débrouiller pour couper le canal 3 et remettre la fréquence du ré ou du moins, on va faire en sorte de retrouver "l'attaque" de l'instrument. Edité par KN2000 Le 11/06/2010 à 16h20


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
KN2000 Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 08/06/2010 à 09h30

Messages: 209

Le 11/06/2010 à 22h41
pour Fred :
Vive le Vent (non, ce n'est pas du Pierre Perret)

Mi Mi Mi _(le 3e Mi dure 2 temps) Mi Mi Mi _
Mi Sol Do Ré Mi _ _ _ (celui là dure 4 temps)
fa fa fa fa mi mi mi mi mi ré ré mi ré _ sol _
Mi Mi Mi _ Mi Mi Mi _ (on répète)
Mi Sol Do Ré Mi _ _ _
fa fa fa fa mi mi mi mi mi sol sol fa ré do _ _ _

Les voisins ne m'ont pas dit merci pour cette petite répète. :gne C'était dans mes premiers morceaux au clavier ou une partition que j'avais trouvé sur internet. J'ai eu un peu de mal à retrouver les notes. Toutes mes excuses à l'auteur :oups


Nous sommes en 2010 aps JC, toute la Gaule est envahie. Ah ben non, apparement, un village résiste encore aux envahisseurs Personalcomputerum et autres Consoledessalum. Bienvenue dans l'antre du emessix !
   
Polaris Membre non connecté

Villageois

Rang

Avatar

Inscrit le : 04/10/2009 à 19h50

Messages: 258

Le 11/06/2010 à 23h50
Super ton SWAP Fred! :top

Bonne continuation!


   
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 12/06/2010 à 10h23
Merci pour votre aide et vos encouragements.
Pour "Vive Le Vent", ce sera pour la version Française car en anglais, c'est "Jingle Bells", rien à voir avec le temps.
Je vais chercher pour "Le soleil brille, brille, brille"...
Il ne doit pas rester beaucoup de place jusqu'au 16 Ko.


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 12/06/2010 à 10h39
genre de sound répétitif a souhait

fori=7to13:soundi,60:next


:noel
Site web    
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 15/06/2010 à 10h52
SWAP-FR.zip

Voici la version française avec une petite musique pour le titre et des bruitages pour les engins.
Malheureusement, je ne métrise pas bien Play et Sound.
Le programme fait 15996 bytes.


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 775

Le 15/06/2010 à 22h28
Pour la limite des 16k il y a moins de soucis à se faire les règles viennent de changer!

http://www.konamito.com/concurso-msx-basic-2010-reglas-modificadas/


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
Jipe Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 02/10/2009 à 19h41

Messages: 10316

Le 16/06/2010 à 13h00
petite traduction by Google :

Grâce à des requêtes de nombreux J'ai reçu de la difficulté de créer des fichiers de plus de 16Kb ROM. pour la présentation des jeux à la concurrence, j'ai décidé de changer les règles afin qu'ils puissent présenter leurs jeux ROM ou de DSK choisi par le participant. Est modifié de sorte que:

Le jeu sera livré pour ROM ou. DSK. Pour le premier cas, vous pouvez utiliser le convertisseur de ROM MSX-BASIC développé par José Luis Tur, qui est très facile à utiliser. Vous pouvez le télécharger depuis le site Web ou cliquez sur le lien au bas de cette page.

J'espère que l'amendement visant à faciliter la participation de tous. Rappelez-vous que toute suggestion ou contribution est la bienvenue.

donc tu peux y aller jusqu'a la limite des 23k pour un systéme a 2 lecteurs
perso j'ai horreur du message "PUSH CTRL AND RESET MSX" ;)


:noel
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 775

Le 18/06/2010 à 23h31
J'ai trouvé un truc pour la musique en jouant exclusivement sur le canal C avec l'instruction SOUND (sound10,...) par contre ça plante car pour les bruitages il y a des manips hasardeuses sur les registres du PSG (fori=0to13:soundi,0 par exemple...) ça ouvre tous les canaux bruit et du coup ça foire...

J'ai essayé le programme, c'est sympa, j'aurai préféré une interface plus graphique mais je ne sait pas si c'est possible.
Un conseil à Flashfred, pour alléger ton programme, pense à utiliser et abuser des sous-programmes ;).

Voyez ce petit tuto pour la musique:

Pour faire de la musique avec Sound il faut d'abord connaitre la fréquence des notes voire pour ça ce site très complet sur la musique:
http://villemin.gerard.free.fr/CultureG/MusNote.htm
Et connaitre la formule à appliquer pour savoir quelle valeurs entrer dans les registres 4 et 5 (pour le canal C) pour une fréquence (note) donnée. On retrouve cette formule sous plusieurs formes sur divers docs MSX, j'ai pris celle du livre Le livre du MSX2, § 4.1 Les registres R0 à R5 ,pages 11/12 :p

Bref, grâce au site précédemment cité et au formidable ouvrage admirablement dactylographié par notre ami Granced aux doigts d'argent on obtient le tableau suivant:


Ensuite c'est très simple, on crée des ligne de datas comportant en 1 la durée de la note, en 2 les fréquences à appliquer dans les registres 4 et 5, en prenant l'octave 5 en vert sur le tableau on n'a même plus à se soucier du registre 5 qui reste à 0; donc plus que 2 valeurs à entrer par note ce qui donne pour la musique de mutuelsanrix:

Code TEXT :
5000 DATA 1,169,1,169,2,169
5010 DATA 1,169,1,169,2,169
5020 DATA 1,169,1,142,1,213,1,190,4,169
5030 DATA 1,160,1,160,1,160,1,160,1,169,1,169,1,169,1,169,1,169
5035 DATA 1,190,1,190,1,169,2,190,2,142
5040 DATA 1,169,1,169,2,169
5050 DATA 1,169,1,169,2,169
5070 DATA 1,160,1,160,1,160,1,160,1,169,1,169,1,169,1,169,1,169
5075 DATA 1,142,1,142,1,160,1,190,4,213
5080 DATA 0,0


Comment jouer cette musique :hum Eh bien avec le sous-programme suivant:

Code TEXT :
40000 IFMU=DNTHEN40100
40010 MU=MU+1:RETURN
40100 SOUND5,0:SOUND10,0:MU=0:READDN:IFDN=0THENRESTORE5000:GOTO 40100
40110 SOUND11,15:SOUND12,0
40120 READNO:SOUND4,NO:SOUND10,16
40300 RETURN 


MU = décompte du temps de la note
DN= durée de la note
Si la note est finie on va chercher la valeur de la durée de la note suivante si c'est à 0 (DATA 0) on reprend du début par un RESTORE.
On remet le volume à 0 entre chaque note pour bien les marquer et on réinitialise la durée de l'enveloppe (sound 11 et 12: voir bouquin...).
On lit la fréquence de la note on envoie et on retourne au programme principal.

Mais quand envoit-on le sous programme :hum

Là encore, c'est tout simple (enfin je pense :oups ), en jouant sur les interruptions (ON INTERVAL GOSUB, INTERVAL ON) ce qui règle le tempo de la musique sur l'horloge du MSX indépendamment du programme :heink . Le = 10 peut être augmenté ou diminué suivant qu'on désire une musique plus ou moins rapide (Essayez!)

Code TEXT :
27 ON INTERVAL=10 GOSUB 40000


Et on active une fois qu'on a fini de lire les autres DATAS du programme pour une raison évidente.

Code TEXT :
565  MU=0:DN=0:SOUND13,0:INTERVAL ON


On en profite pour initialiser les variable du sous programme et règler la forme de l'enveloppe (voir bouquin -bis- )

Pour finir et parce que j'ai déjà été beaucoup trop long :oups (mais que voulez-vous quand on me parle de programmation... :p) le fichier BAS du programme où j'en ai profité pour remodeler les PLAY de FlashFred.

SWAPMUSI.zip


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 20/06/2010 à 09h42
Bravo l'Osaure, je vais essayer d'améliorer mes Sound.

Entre-temps, j'ai fait un autre petit programme Basic, ce n'est pas pour le concours, c'est un vieux projet que j'avais. Il s'agit d'un Yahtzee mais avec des régles propres à notre famille. On y joue comme ça depuis des dizaines d'année. Sans rire, on a fait des milliers de parties (record à battre 1891).

Déplacez-vous sur les REJ. pour les transformer en GARDE et inversement. Puis si les dés sont favorables, allez sur le JE de JE GARDE sinon allez sur le JE de JE RELANCE. Dans la grille, ne vous trompez pas de case car on ne peut pas revenir en arrière.

YAMS.zip


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 20/06/2010 à 13h29
HINOTORC.zip
HINOTOR1.zip
HINOTOR2.zip

Mettre ces 3 fichiers sur le même disk que Yams.bas et lancez Hinotorc.bas. Vous pourrez jouer avec la musique de L'oiseau de feu en fond sonore.


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 22/06/2010 à 09h29
Pour en revenir à SWAP, après de nombreux essais, j'ai constaté que c'est à cause de l'utilisation du registre 7 dans les bruitages que la musique est modifiée. Il faudrait donc faire d'autres bruits sans ce fameux registre. Je suis parvenu à en faire quelques uns. Mais le problème n'est pas là. Lorsque l'on fait F1 pour terminer une partie avant terme, la carte de la deuxième partie est modifiée. Les DATA se mélangent surement à cause des RESTORE (?).


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
MSXosaure Membre non connecté

Maire-adjoint

Rang

Avatar

Association

Inscrit le : 03/10/2009 à 00h09

Messages: 775

Le 22/06/2010 à 23h05
Pour stopper la musique, ce qui est impératif avant une lecture de datas, un SOUND10,0:INTERVAL OFF:MU=0 devrait suffire. (INTERVAL ON devrait relancer la musique).

Pour les Sound voici un petit récapitulatif:

Registre Valeur Description
0 0 - 255 Valeur basse fréquence canal A
1 0 - 15 Valeur haute fréquence canal A
2 0 - 255 Valeur basse fréquence canal B
3 0 - 15 Valeur haute fréquence canal B
4 0 - 255 Valeur basse fréquence canal C
5 0 - 15 Valeur haute fréquence canal C
6 0 - 31 Valeur période du souffle
7 0 - 63 Choix des canaux allumés *
8 0 - 15 Volume canal A
9 0 - 15 Volume canal B
10 0 - 15 Volume canal C
11 0 - 255 Valeur basse periode d'enveloppe.
12 0 - 255 Valeur haute periode d'enveloppe.
13 0 - 14 Forme de l'enveloppe.**
Les registres 6, 7, 11, 12 et 13 sont communs aux trois canaux.

* Cas particulier du registre 7: On joue sur la valeur binaire des 6 derniers bits pour determiner quels canaux sont "ouverts".
0= ON
1= OFF
Ports
Db9
Bruit
Canal
Son
Canal
canaux 1 2 C B A C B A
valeurs 0 0 0-1 0-1 0-1 0-1 0-1 0-1
Exemple pour 20 (00010100): bruit dans canaux Aet C, son dans canaux A et B.

** Cas particulier du registre13: Forme de l'enveloppe comme suit:
0à3 _________ 8 !!!!!!! 10 /////// 12 /!/!/!/!/!/!/!/!/! 14 ///////
4à7 /!________ 9 ________ 11 !°°°°°°°°°°° 13 /°°°°°°°°°°°°° 15 /!________


Dans un programme il est préférable de régler dés le départ les registres 6,7 et 13 et de ne plus y toucher par la suite. il faut réserver au moins un canal sans bruit pour la musique.
Le registre13 correspond au S de PLAY et les registres 11 et 12 au M; certaines combinaisons produisent des son inaudibles (fréquence).
Pour que la forme de l'enveloppe soit prise en compte il faut attribuer la valeur 16 au volume du canal A,B ou C (registres 8,9,10) et il faudra réinitialiser la période de l'enveloppe (registres 11 et 12).

Voilà en gros, ce qui peut être fait n'hésite pas à t'inspirer d'exemple de bouquins pour produire des effets sonores.


Le MSXien le plus à l'ouest :fou ... ou presque :D
osaurer
   
FlashFred Membre non connecté

Touriste

Rang

Avatar

Inscrit le : 05/01/2010 à 19h49

Messages: 182

Le 29/06/2010 à 17h20
Pour l'instant, je ne suis pas arrivé à faire des Sound correct. Quand on met le registre 7, il a une influence sur la musique que ce soit 0 - 9 - 45 - 63... Et si on l'associe au registre 6, il n'y a plus ni musique ni bruitage.

YAMS.zip
Quequles modification dans YAMS, on peut maintenant imprimer.

P4MAX.zip
Un petit clin d'oeil à Jipe, voici un Puissance 4 où les diagonales sont prises en compte mais j'ai triché (comme d'hab), le programme ne recherche pas les diagonales, il les teste toutes... d'où une certaine lenteur.


site pour collectionneurs : http://www.accrophil.fr

MSX : Tête de liste de "Mes Favoris"
Site web    
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie