La Place des Développeurs Compilateur MML Jouer une musique MML via le BIOS
Hello,
En complétant le module BIOS de MSXgl, je suis retombé sur la fonction STRTMS (0099h) qui est censée permettre de jouer une musique au format MML en assembleur.
J'ai tracé la fonction PLAY du BASIC pour voir si elle passait bien par cette fonction du BIOS et c’est bien le cas. Par contre, j’ai eu du mal à comprendre les paramètres à setup pour que ça fonctionne. Après pas mal de tests et l’aide d’amis Japonais, j’ai enfin compris.
En fait, la fonction PLAY du BASIC convertit le code MML textuel en code binaire avant d’appeler STRTMS. C’est une sorte de “compilateur”.
Si j’envoie bien des données binaires à STRTMS (plus quelques autres setup), la musique se joue bien.
Le souci c’est que le code qui compile le MML n’est pas dans la partie standard du BIOS et ne peut donc pas être utilisé en assembleur.
D'où ma question : est-ce que vous connaissez un outil qui permettrait de convertir un MML textuel en binaire ?
Je précise que c’est juste pour le fun d’utiliser le player intégré au BIOS car je fais un mini-jeu où j’essaye de n’utiliser que les fonctions de base du MSX.
En complétant le module BIOS de MSXgl, je suis retombé sur la fonction STRTMS (0099h) qui est censée permettre de jouer une musique au format MML en assembleur.
J'ai tracé la fonction PLAY du BASIC pour voir si elle passait bien par cette fonction du BIOS et c’est bien le cas. Par contre, j’ai eu du mal à comprendre les paramètres à setup pour que ça fonctionne. Après pas mal de tests et l’aide d’amis Japonais, j’ai enfin compris.
En fait, la fonction PLAY du BASIC convertit le code MML textuel en code binaire avant d’appeler STRTMS. C’est une sorte de “compilateur”.
Si j’envoie bien des données binaires à STRTMS (plus quelques autres setup), la musique se joue bien.
Le souci c’est que le code qui compile le MML n’est pas dans la partie standard du BIOS et ne peut donc pas être utilisé en assembleur.
D'où ma question : est-ce que vous connaissez un outil qui permettrait de convertir un MML textuel en binaire ?
Je précise que c’est juste pour le fun d’utiliser le player intégré au BIOS car je fais un mini-jeu où j’essaye de n’utiliser que les fonctions de base du MSX.
On est toujours ignorant avant de savoir.
Dans le livre pratique du MSX2 il y a un exemple page 207
https://msxvillage.fr/download/18-livres-msx/3-pratique-du-msx2/
Mais la routine est située en 73E5 donc c'est pas ce que tu veux je suppose
convertir un MML en binaire... le problème c'est que chaque MML a son format spécifique
https://msxvillage.fr/download/18-livres-msx/3-pratique-du-msx2/
Mais la routine est située en 73E5 donc c'est pas ce que tu veux je suppose
convertir un MML en binaire... le problème c'est que chaque MML a son format spécifique
site en Français sur la musique MSX
Oui, j'ai repéré la commande PLAY de la partie du BIOS réservé au BASIC mais ça me semble trop risqué. Je pourrais ajouter une fonction dans MSXgl pour utiliser cette option, mais par défaut, je préfère une solution plus robuste.
Je pense que le plus simple va être de créer un p'tit script de conversion pour compiler le MML standard du BASIC.
Je pense que le plus simple va être de créer un p'tit script de conversion pour compiler le MML standard du BASIC.
On est toujours ignorant avant de savoir.
Salut aoineko,
Si tu veux rester sur le player BIOS sans dépendre de la partie BASIC, une piste : le format binaire attendu par STRTMS est documenté dans le "MSX2 Technical Handbook" (chapitre sur le BIOS, section PLAY/STRTMS). Le parseur BASIC convertit le MML en une suite d'octets avec des commandes type note/durée/tempo. Tu pourrais t'en inspirer pour écrire ton propre compilateur MML → binaire.
Sinon, côté outils existants : MML2BIN ou des scripts chez les devs japonais (MSXDEV, MSX-FAN) traînent parfois, mais rien de standardisé.
Si tu veux rester sur le player BIOS sans dépendre de la partie BASIC, une piste : le format binaire attendu par STRTMS est documenté dans le "MSX2 Technical Handbook" (chapitre sur le BIOS, section PLAY/STRTMS). Le parseur BASIC convertit le MML en une suite d'octets avec des commandes type note/durée/tempo. Tu pourrais t'en inspirer pour écrire ton propre compilateur MML → binaire.
Sinon, côté outils existants : MML2BIN ou des scripts chez les devs japonais (MSXDEV, MSX-FAN) traînent parfois, mais rien de standardisé.
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie


